乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 75|回复: 11

[编程交流] 寻找LISP区域和

[复制链接]

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 23:12:48 | 显示全部楼层 |阅读模式
大家好,
我是论坛新手。
 
我搜索一个非常简单的LISP,它插入(在对象的中心或底部,无论)矩形或闭合线的面积和周长的文本。
e、 g.面积-“1.23 m2”,周长-“2.45 m”
最好是当我可以选择更多的对象,而不是所有选定的文本将被写入。
这两个参数的函数应该写在一起。并不是说我必须首先使用一个命令而不是第二个命令。
 
字体高度应该可以更改。
精度应为:0001m或0,01m。
 
有人能帮我吗?
 
对不起我的英语
 
谢谢
回复

使用道具 举报

56

主题

284

帖子

231

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
289
发表于 2022-7-5 23:18:50 | 显示全部楼层
对于“闭合线”,使用第一个命令:BOUNDARY=>PolyLines。
 
然后试试这个:
 
  1. (DEFUN C:AreaPer ( / ar coHt coDec eN i lStrA lStrP p pr pMin pMax osm sel sL strA strP ti uL ) ;  dec hT
  2. (princ "\n   C:AreaPer  :   V  :  17 . 04 . 2014  ;")
  3. (or (vl-Load-Com))
  4. (setVar "CmdEcho" 0)
  5. (setVar "OrthoMode" 0)
  6. (princ "\n   Select Objects : [ Arc, Circle, LwPolyline, PolyLine, ] ;")
  7. (if (setq sel (ssGet '((0 . "Arc,Circle,LwPolyline,PolyLine,SplineX")) ) )
  8. (progn
  9.   (if (not (numberP hT)) (setq hT 0.1))
  10.   (if (not (numberP dec)) (setq dec 3))
  11.   
  12.   (setq coHt (getString (strcat "\n   Font  Height  :  < Enter = " (RtoS hT 2 3) " >  :  "))
  13. coDec (getString (strcat "\n   Precission   :  < Enter = " (ItoA dec) " >  :  "))
  14.         osm (getVar "osMode")  uL (getVar "insUnits")
  15. strA "Area"  lStrA (cons 8 strA)  strP "Perimeter"  lStrP (cons 8 strP)  i -1)
  16.   (if (/= coHt "") (setq hT (AtoF coHt)) )
  17.   (if (/= coDec "") (setq dec (fix (AtoF coDec))) )
  18. ; 0 = Unspecified (No units) , 1=Inches , 4=mm , 5= cm ; 6=m ; 7=km.
  19.   (setq ti (car (_VL-Times))
  20.         sL (cond ((= uL 1) 2.54e-2) ; inch
  21.           ((= uL 2) 0.3048) ; feet
  22.           ((= uL 3) 1609.344) ; miles
  23.           ((= uL 4) 1e-3) ; mm
  24.           ((= uL 5) 1e-2) ; cm
  25.           ((= uL 6) 1.00) ; m
  26.           ((= uL 7) 1e+3) ; km
  27.                  (T 1.00)
  28.       )) ;_ end of setq
  29.   
  30.   (setVar "osMode" 0)
  31.   (vl-cmdF "_.Layer" "n" "Area,Perimeter" "c" 1 "Area" "c" 5 "Perimeter" "")
  32.   (command "_.Style" "Arial" "Arial" "0" "1" "0" "N" "N") ;_ end of c
  33.   (acet-ui-Progress "Processing : " (ssLength sel))
  34.   (repeat (ssLength sel)
  35.    (setq i (1+ i)  eN (vlax-eName->Vla-Object (ssName sel i)) )
  36.    (if (vlax-Property-Available-P eN "Area")
  37.     (progn
  38.      (setq ar (* (vla-Get-Area eN) sL sL)  tip (substr (vla-Get-ObjectName eN) 5)
  39.     pr (* (cond ((vlax-Property-Available-P eN "Length") (vla-Get-Length eN))
  40.              ((vlax-Property-Available-P eN "Circumference") (vla-Get-Circumference eN))
  41.              ((vlax-Property-Available-P eN "ArcLength") (vla-Get-ArcLength eN))
  42. ;;;                     ((vlax-Property-Available-P eN "Perimeter") (vla-Get-Perimeter eN))
  43.              (T 0)
  44.            ) sL)
  45.      ) ;
  46.      (prinC (strCat "\n  " (ItoA i) " : " tip "  :  Area = " (RtoS ar 2 dec) "  m²  ;  Perimeter = " (RtoS pr 2 dec) " m ;"))
  47.      (vla-GetBoundingBox eN 'pMin 'pMax)
  48.      (setq p (mapcar '/ (mapcar '+ (vlax-SafeArray->List pMin) (vlax-SafeArray->List pMax)) '(2. 2. 2.))  )
  49.      
  50.      (entMake (list '(0 . "Text") (cons 40 hT) '(50 . 0) lStrA '(7 . "Arial") '(72 . 4) '(10 0 0 0) (cons 1 (strcat "A = " (RtoS ar 2 dec) " m²")) (cons 11 p) ) )
  51.      (entMake (list '(0 . "Text") (cons 40 hT) '(50 . 0) lStrp '(7 . "Arial") '(72 . 4) '(10 0 0 0) (cons 1 (strcat "P = " (RtoS pr 2 dec) " m")) (cons 11 (mapcar '- p (list 0 hT 0))) ) )
  52.   
  53.    )) ; if
  54.    (acet-ui-Progress -1)
  55.   ) ; r
  56.   (acet-ui-Progress)
  57.   
  58.   (setVar "osMode" osm)
  59. )) ; if
  60. ;;; (setVar "cLayer" "0")
  61. (princ (strCat "\n   Objects  :  " (ItoA i) "  ;    Time  :  " (RtoS (/ (- (car (_VL-Times)) ti) 1000.) 2 2) " s  ;"))
  62. (princ "\n   C:AreaPer  :  END  ;")
  63. (setVar "CmdEcho" 1)
  64. (princ)
  65. )
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 23:26:06 | 显示全部楼层
非常感谢!
 
有可能改变比例吗?
e、 g.我在“mm”中绘制,然后使用LISP,它显示:“1000000 m2”,它应该是:“1 m2”
回复

使用道具 举报

56

主题

284

帖子

231

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
289
发表于 2022-7-5 23:34:24 | 显示全部楼层
我修改了程序。
 
必须使用以下命令设置长度单位:Units,
因为它们的值取自AutoCAD变量:(getVar“insUnits”)
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 23:40:06 | 显示全部楼层
谢谢谢谢谢谢
 
如何更改字体颜色?
如何更改文本的位置?
回复

使用道具 举报

56

主题

284

帖子

231

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
289
发表于 2022-7-5 23:41:27 | 显示全部楼层
1.这将创建层;查找它:
 
  1. (vl-cmdF "_.Layer" "n" "Area,Perimeter" "c" [color="red"]1[/color] "Area" "c" [color="blue"]5[/color] "Perimeter" "")

 
1=红色;
5=蓝色;
 
放上你喜欢的颜色。
 
2.
 
表面文字是否插入中间?你把它们放在哪里?附着DWG示例。
 
或模式标记=对齐(左中、中、中、右下)?
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 23:50:08 | 显示全部楼层
“油漆”中的示例:
001254zy33v1qz3x2qaii1.jpg
回复

使用道具 举报

56

主题

284

帖子

231

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
289
发表于 2022-7-5 23:55:12 | 显示全部楼层
这是可能的,但更复杂。如何处理圆或圆的弧?
 
 
矩形是否倾斜、旋转或不规则?
001256qkb7vvpdjddqkb71.jpg
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 00:01:19 | 显示全部楼层
你有权利。这很复杂。
 
但我通常使用这样的对象:
001257sfbhmb14i8i4bwh1.jpg
可以为我制作第二个LISP版本吗?
谢谢
回复

使用道具 举报

56

主题

284

帖子

231

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
289
发表于 2022-7-6 00:06:36 | 显示全部楼层
如果你坚持,看:
 
  1. (defun C:AreaPer ( / ar coHt coDec coTP eN hT2 i lStrA lStrP lTa p pr pMin pMax osm sel sL strA strP tD ti tO uL ) ;  dec hT
  2. (princ "\n   C:AreaPer  :   V  :  17 . 04 . 2014  ;")
  3. (or (vl-Load-Com))
  4. (setVar "CmdEcho" 0)
  5. (setVar "OrthoMode" 0)
  6. (princ "\n   Select Objects : [ Arc, Circle, LwPolyline, PolyLine, ] ;")
  7. (if (setq sel (ssGet '((0 . "Arc,Circle,LwPolyline,PolyLine,SplineX")) ) )
  8. (progn
  9.   (if (not (numberP hT)) (setq hT 1.)) ; Real
  10.   (if (not (numberP dec)) (setq dec 3)) ; Integer
  11.   
  12.   (setq coHt (getString (strcat "\n   Font  Height  :  < Enter = " (RtoS hT 2 3) " >  :  "))
  13. coDec (getString (strcat "\n   Precission   :  < Enter = " (ItoA dec) " >  :  "))
  14. coTP (getString (strcat "\n   Text Position   :  Any = Center  ;   <  Enter =  Right  >  :  "))
  15.         osm (getVar "osMode")  uL (getVar "insUnits")
  16. strA "Area"  lStrA (cons 8 strA)  strP "Perimeter"  lStrP (cons 8 strP)  i -1)
  17.   (if (/= coHt "") (setq hT (AtoF coHt)) )
  18.   (if (/= coDec "") (setq dec (fix (AtoF coDec))) )
  19. ; 0 = Unspecified (No units) , 1=Inches , 4=mm , 5= cm ; 6=m ; 7=km.
  20.   (setq ti (car (_VL-Times))  hT2 (* hT 2.) ) ;_ end of setq
  21.   
  22.   (cond ((= uL 0) (setq sL 1.00  tO "Unitless"))
  23. ((= uL 1) (setq sL 2.54e-2  tO "Inch"))
  24. ((= uL 2) (setq sL 0.3048  tO "Feet"))
  25. ((= uL 3) (setq sL 1609.344  tO "Miles"))
  26. ((= uL 4) (setq sL 1e-3  tO "mm"))
  27. ((= uL 5) (setq sL 1e-2  tO "cm"))
  28. ((= uL 6) (setq sL 1.00  tO "m"))
  29. ((= uL 7) (setq sL 1e+3  tO "Km"))
  30.         (T (setq sL 1.00  tO "Any"))
  31.   ) ;_ end of c
  32.   (alert (strCat "DWG  Length  Units  is  :\n\n  " (ItoA uL) "  =  " tO "  ;\n\n  Factor  =  " (RtoS sL 2 9) "  !"))
  33.   (setVar "osMode" 0)
  34.   (vl-cmdF "_.Layer" "n" "Area,Perimeter" "c" 1 "Area" "c" 5 "Perimeter" "")
  35.   (command "_.Style" "Arial" "Arial" "0" "1" "0" "N" "N") ;_ end of c
  36.   (acet-ui-Progress "Processing : " (ssLength sel))
  37.   (repeat (ssLength sel)
  38.    (setq i (1+ i)  eN (vlax-eName->Vla-Object (ssName sel i)) )
  39.    (if (vlax-Property-Available-P eN "Area")
  40.     (progn
  41.      (setq ar (* (vla-Get-Area eN) sL sL)  tip (substr (vla-Get-ObjectName eN) 5)
  42.     pr (* (cond ((vlax-Property-Available-P eN "Length") (vla-Get-Length eN))
  43.              ((vlax-Property-Available-P eN "Circumference") (vla-Get-Circumference eN))
  44.              ((vlax-Property-Available-P eN "ArcLength") (vla-Get-ArcLength eN))
  45. ;;;                     ((vlax-Property-Available-P eN "Perimeter") (vla-Get-Perimeter eN))
  46.              (T 0)
  47.            ) sL)
  48.      ) ;
  49.      (prinC (strCat "\n  " (ItoA i) " : " tip "  :  Area = " (RtoS ar 2 dec) "  m²  ;  Perimeter = " (RtoS pr 2 dec) " m ;"))
  50.      (vla-GetBoundingBox eN 'pMin 'pMax)
  51.      (setq pMin (vlax-SafeArray->List pMin)  pMax (vlax-SafeArray->List pMax)
  52.     lTa (cons 1 (strcat "A = " (RtoS ar 2 dec) " m²")) )
  53.      
  54.      (if (= coTP "")
  55.       (setq tD (textBox (list lTa (cons 40 hT) '(50 . 0) '(7 . "Arial"))  ) ; (caar td)
  56.      p (list (- (car pMax) (caadr td)) (+ (cadr pMin) hT2))  )
  57.       (setq p (mapcar '/ (mapcar '+ pMin pMax) '(2. 2. 2.))  )
  58.      ) ; if
  59.      
  60.      (entMake (list '(0 . "Text") (cons 40 hT) '(50 . 0) lStrA '(7 . "Arial") '(72 . 4) '(10 0 0 0) lTa (cons 11 (mapcar '+ p (list 0 hT2 0))) ) )
  61.      (entMake (list '(0 . "Text") (cons 40 hT) '(50 . 0) lStrp '(7 . "Arial") '(72 . 4) '(10 0 0 0) (cons 1 (strcat "P = " (RtoS pr 2 dec) " m")) (cons 11 p) ) )
  62.   
  63.    )) ; if
  64.    (acet-ui-Progress -1)
  65.   ) ; r
  66.   (acet-ui-Progress)
  67.   
  68.   (setVar "osMode" osm)
  69. )) ; if
  70. ;;; (setVar "cLayer" "0")
  71. (princ (strCat "\n   Objects  :  " (ItoA i) "  ;    Time  :  " (RtoS (/ (- (car (_VL-Times)) ti) 1000.) 2 2) " s  ;"))
  72. (princ "\n   C:AreaPer  :  END  ;")
  73. (setVar "CmdEcho" 1)
  74. (princ)
  75. )

 
据我所知,您不知道AutoLisp。这将是很好的,你学习这种编程语言,很容易,非常有用。
使用AutoCAD时,始终需要程序来帮助您工作。
 
 
PS:
 
今天我去乡下度假至少一周,那里没有互联网。所以我们听到复活节假期后。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-11 00:06 , Processed in 0.476321 second(s), 74 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表