乐筑天下

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

[编程交流] 在多段线上创建圆

[复制链接]

15

主题

76

帖子

62

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-6 06:35:56 | 显示全部楼层 |阅读模式
有人有lisp文件可以在多段线顶点上创建圆吗?
有一个选项询问dia。或要创建的圆半径,并带有一个层。
这确实有助于识别我的测量图的实际拍摄。。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 06:40:23 | 显示全部楼层
试试这个。。。
 
  1. (defun c:Test (/ ss di la)
  2. ;;; Tharwat 14. Nov. 2012   ;;;
  3. (if (and (setq ss (ssget '((0 . "*POLYLINE"))))
  4.           (setq di (getdist "\n Specify Circle Radius :"))
  5.           (not (eq (setq la (getstring t "\n Enter Layer name :")) ""))
  6.           (tblsearch "LAYER" la)
  7.      )
  8.    ((lambda (x / e)
  9.       (while (setq e (ssname ss (setq x (1+ x))))
  10.         (foreach dxf (entget e)
  11.           (if (eq (car dxf) 10)
  12.             (entmakex (list '(0 . "CIRCLE") dxf (cons 40 di) (cons 8 la)))
  13.           ) ) )
  14.     )
  15.      -1
  16.    )
  17.    (princ)
  18. )
  19. (princ)
  20. )
回复

使用道具 举报

15

主题

76

帖子

62

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-6 06:45:00 | 显示全部楼层
非常好的节目!!
 
如果可能的话,你能做到:
指定半径圆:“到”
“指定圆的直径[半径]:
 
然后在距离圆心的圆旁边写下(dtext)数字
圆半径的1.5x。这个数和顶点数是一样的。
 
大Thnax!!
 
Notview公司
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 06:50:18 | 显示全部楼层

  1. (defun c:Test (/ la ss)
  2. ;;; Tharwat 20. Nov. 2012   ;;;
  3. (if (and (setq *r* (cond ((getdist (strcat "\n Specify Diameter of Circle [Radius]"
  4.                                             (if *r*
  5.                                               (strcat "< " (rtos *r* 2 2) " > :")
  6.                                               " :"
  7.                                             )
  8.                                     )
  9.                            )
  10.                           )
  11.                           (t *r*)
  12.                     )
  13.           )
  14.           (not (eq (setq la (getstring t "\n Enter Layer name :")) ""))
  15.           (if (not (tblsearch "LAYER" la))
  16.             (progn (princ "\n Layer Name is not found !!") nil)
  17.             t
  18.           )
  19.           (setq ss (ssget '((0 . "*POLYLINE"))))
  20.      )
  21.    ((lambda (x / e i)
  22.       (while (setq e (ssname ss (setq x (1+ x))))
  23.         (setq i 0)
  24.         (foreach dxf (entget e)
  25.           (if (eq (car dxf) 10)
  26.             (progn (entmakex (list '(0 . "CIRCLE") dxf (cons 40 *r*) (cons 8 la)))
  27.                    (entmakex (list '(0 . "TEXT")
  28.                                    (cons 1 (itoa (setq i (1+ i))))
  29.                                    '(40 . 0.2)
  30.                                    (cons 10 (trans (list (+ (cadr dxf) (* *r* 1.1)) (caddr dxf) 0.) 1 0))
  31.                                    (cons 8 la)
  32.                              )
  33.                    )
  34.             ) ) )  ) ) -1
  35.    )
  36.    (princ)
  37. )
  38. (princ)
  39. )
回复

使用道具 举报

15

主题

76

帖子

62

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-6 06:54:00 | 显示全部楼层
运行后我注意到:
 
1.“指定圆的直径[半径]:”;结果是之后的圆半径
它被画出来了。
 
2.“指定圆的直径[Radius]
  1. :  "  ; if I select R then </prevoious></p>
  2. <p>       nothing happened.</p>
  3. <p>      Can you make: if I select R then, "Specify Radius of Circle [code]: "</previous></p>
  4. <p> </p>
  5. <p>  3. The (dtext) height of number is set at 0.20 (default). </p>
  6. <p>      I suggest, the number's height will be the same to diameter of circle so it looks</p>
  7. <p>      proportion.</p>
  8. <p> </p>
  9. <p>Thanks!</p>
  10. <p> </p>
  11. <p>Notview</p>
  12.                        
  13.                  <p>Tharwat, I follow your code and test it in a polyline having four vertex but what I've notice is the last number also occupies the number 1 vertex.. is it possible to do the numbering just up to 4 and not 5? in 4 vertex polyline? thanks!</p>
  14.                        
  15.                  <p> </p>
  16. <p>If you have used the command rectang to draw a square polyline , the code should work as expected , but if you use the command polyline to draw a square polyline just draw the four point and use the option close to close the square without picking the the start point once again to close the polyline .</p>
  17.                        
  18.                  <p>Perhaps try something like this:</p>
  19. <p> </p>
  20. <p></p>
  21. [code]
  22. ([color=BLUE]defun[/color] c:polycir ( [color=BLUE]/[/color] ans cnt inc lst opt sel )
  23.    ([color=BLUE]while[/color]
  24.        ([color=BLUE]progn[/color]
  25.            ([color=BLUE]if[/color] ([color=BLUE]=[/color] [color=MAROON]"Diameter"[/color] opt)
  26.                ([color=BLUE]progn[/color]
  27.                    ([color=BLUE]initget[/color] [color=MAROON]"Radius"[/color])
  28.                    ([color=BLUE]setq[/color] ans ([color=BLUE]getdist[/color] ([color=BLUE]strcat[/color] [color=MAROON]"\nSpecify Diameter [Radius]"[/color] ([color=BLUE]if[/color] *rad* ([color=BLUE]strcat[/color] [color=MAROON]" <"[/color] ([color=BLUE]rtos[/color] ([color=BLUE]*[/color] 2.0 *rad*)) [color=MAROON]">: "[/color]) [color=MAROON]": "[/color]))))
  29.                )
  30.                ([color=BLUE]progn[/color]
  31.                    ([color=BLUE]initget[/color] [color=MAROON]"Diameter"[/color])
  32.                    ([color=BLUE]setq[/color] ans ([color=BLUE]getdist[/color] ([color=BLUE]strcat[/color] [color=MAROON]"\nSpecify Radius [Diameter]"[/color] ([color=BLUE]if[/color] *rad* ([color=BLUE]strcat[/color] [color=MAROON]" <"[/color] ([color=BLUE]rtos[/color] *rad*) [color=MAROON]">: "[/color]) [color=MAROON]": "[/color]))))
  33.                )
  34.            )
  35.            ([color=BLUE]cond[/color]
  36.                (   ([color=BLUE]null[/color] ans)
  37.                    ([color=BLUE]setq[/color] ans *rad*)
  38.                    [color=BLUE]nil[/color]
  39.                )
  40.                (   ([color=BLUE]=[/color] 'str ([color=BLUE]type[/color] ans))
  41.                    ([color=BLUE]setq[/color] opt ans)
  42.                )
  43.                (   ([color=BLUE]=[/color] [color=MAROON]"Diameter"[/color] opt)
  44.                    ([color=BLUE]setq[/color]  ans ([color=BLUE]/[/color] ans 2.0)
  45.                          *rad* ans
  46.                    )
  47.                    [color=BLUE]nil[/color]
  48.                )
  49.                (   ([color=BLUE]setq[/color] *rad* ans)
  50.                    [color=BLUE]nil[/color]
  51.                )
  52.            )
  53.        )
  54.    )
  55.    ([color=BLUE]if[/color] ([color=BLUE]and[/color] ([color=BLUE]numberp[/color] ans) ([color=BLUE]setq[/color] sel ([color=BLUE]ssget[/color] '((0 . [color=MAROON]"LWPOLYLINE"[/color])))))
  56.        ([color=BLUE]repeat[/color] ([color=BLUE]setq[/color] inc ([color=BLUE]sslength[/color] sel))
  57.            ([color=BLUE]setq[/color] cnt 0
  58.                  lst [color=BLUE]nil[/color]
  59.            )
  60.            ([color=BLUE]foreach[/color] grp ([color=BLUE]entget[/color] ([color=BLUE]ssname[/color] sel ([color=BLUE]setq[/color] inc ([color=BLUE]1-[/color] inc))))
  61.                ([color=BLUE]if[/color] ([color=BLUE]and[/color] ([color=BLUE]=[/color] 10 ([color=BLUE]car[/color] grp)) ([color=BLUE]not[/color] ([color=BLUE]member[/color] ([color=BLUE]cdr[/color] grp) lst)))
  62.                    ([color=BLUE]progn[/color]
  63.                        ([color=BLUE]entmake[/color] ([color=BLUE]list[/color] '(0 . [color=MAROON]"CIRCLE"[/color]) grp ([color=BLUE]cons[/color] 40 ans)))
  64.                        ([color=BLUE]entmake[/color]
  65.                            ([color=BLUE]list[/color]
  66.                               '(0 . [color=MAROON]"TEXT"[/color])
  67.                                ([color=BLUE]cons[/color] 01 ([color=BLUE]itoa[/color] ([color=BLUE]setq[/color] cnt ([color=BLUE]1+[/color] cnt))))
  68.                                ([color=BLUE]cons[/color] 40 ans)
  69.                                ([color=BLUE]cons[/color] 07 ([color=BLUE]getvar[/color] 'textstyle))
  70.                                grp
  71.                                ([color=BLUE]cons[/color] 11 ([color=BLUE]cdr[/color] grp))
  72.                               '(72 . 1)
  73.                               '(73 . 2)
  74.                            )
  75.                        )
  76.                        ([color=BLUE]setq[/color] lst ([color=BLUE]cons[/color] ([color=BLUE]cdr[/color] grp) lst))
  77.                    )
  78.                )
  79.            )
  80.        )
  81.    )
  82.    ([color=BLUE]princ[/color])
  83. )
在运行程序之前设置当前层(我认为不需要额外的层提示)。
 
@Tharwat:注意,您的代码允许选择2D(粗)或3D多段线,但只能处理LWD多段线。
回复

使用道具 举报

15

主题

52

帖子

37

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-6 06:55:28 | 显示全部楼层
 
你说得对,李,
 
我最近注意到,dxf 10无法像LWpolyline那样收集3Dpoly的坐标点。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 06:59:03 | 显示全部楼层
再次感谢李,请再帮我一个忙。。
1)你能在里面再加一行,问哪个是想要的角#1(我会选哪个)
2)转角编号应偏离我所需距离的转角。
 
还要感谢塔瓦,谢谢。。。干杯:拇指支撑:
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:05:36 | 显示全部楼层
下面是一个快速修改:
 
  1. ([color=BLUE]defun[/color] c:polycir ( [color=BLUE]/[/color] ans cnt ent lst opt vtx )
  2.    ([color=BLUE]while[/color]
  3.        ([color=BLUE]progn[/color]
  4.            ([color=BLUE]if[/color] ([color=BLUE]=[/color] [color=MAROON]"Diameter"[/color] opt)
  5.                ([color=BLUE]progn[/color]
  6.                    ([color=BLUE]initget[/color] [color=MAROON]"Radius"[/color])
  7.                    ([color=BLUE]setq[/color] ans ([color=BLUE]getdist[/color] ([color=BLUE]strcat[/color] [color=MAROON]"\nSpecify Diameter [Radius]"[/color] ([color=BLUE]if[/color] *rad* ([color=BLUE]strcat[/color] [color=MAROON]" <"[/color] ([color=BLUE]rtos[/color] ([color=BLUE]*[/color] 2.0 *rad*)) [color=MAROON]">: "[/color]) [color=MAROON]": "[/color]))))
  8.                )
  9.                ([color=BLUE]progn[/color]
  10.                    ([color=BLUE]initget[/color] [color=MAROON]"Diameter"[/color])
  11.                    ([color=BLUE]setq[/color] ans ([color=BLUE]getdist[/color] ([color=BLUE]strcat[/color] [color=MAROON]"\nSpecify Radius [Diameter]"[/color] ([color=BLUE]if[/color] *rad* ([color=BLUE]strcat[/color] [color=MAROON]" <"[/color] ([color=BLUE]rtos[/color] *rad*) [color=MAROON]">: "[/color]) [color=MAROON]": "[/color]))))
  12.                )
  13.            )
  14.            ([color=BLUE]cond[/color]
  15.                (   ([color=BLUE]null[/color] ans)
  16.                    ([color=BLUE]setq[/color] ans *rad*)
  17.                    [color=BLUE]nil[/color]
  18.                )
  19.                (   ([color=BLUE]=[/color] 'str ([color=BLUE]type[/color] ans))
  20.                    ([color=BLUE]setq[/color] opt ans)
  21.                )
  22.                (   ([color=BLUE]=[/color] [color=MAROON]"Diameter"[/color] opt)
  23.                    ([color=BLUE]setq[/color] ans ([color=BLUE]/[/color] ans 2.0) *rad* ans)
  24.                    [color=BLUE]nil[/color]
  25.                )
  26.                (   ([color=BLUE]setq[/color] *rad* ans)
  27.                    [color=BLUE]nil[/color]
  28.                )
  29.            )
  30.        )
  31.    )
  32.    ([color=BLUE]if[/color]
  33.        ([color=BLUE]and[/color]
  34.            ([color=BLUE]numberp[/color] ans)
  35.            ([color=BLUE]setq[/color] ent ([color=BLUE]ssget[/color] [color=MAROON]"_+.:E:S"[/color] '((0 . [color=MAROON]"LWPOLYLINE"[/color]))))
  36.            ([color=BLUE]setq[/color] vtx ([color=BLUE]getpoint[/color] [color=MAROON]"\nSpecify First Vertex: "[/color]))
  37.        )
  38.        ([color=BLUE]progn[/color]
  39.            ([color=BLUE]setq[/color] ent ([color=BLUE]ssname[/color] ent 0)
  40.                  vtx ([color=BLUE]fix[/color] ([color=BLUE]vlax-curve-getparamatpoint[/color] ent ([color=BLUE]vlax-curve-getclosestpointto[/color] ent ([color=BLUE]trans[/color] vtx 1 0))))
  41.                  cnt 0
  42.            )
  43.            ([color=BLUE]foreach[/color] grp ([color=BLUE]reverse[/color] ([color=BLUE]entget[/color] ent))
  44.                ([color=BLUE]if[/color] ([color=BLUE]and[/color] ([color=BLUE]=[/color] 10 ([color=BLUE]car[/color] grp)) ([color=BLUE]not[/color] ([color=BLUE]member[/color] ([color=BLUE]cdr[/color] grp) lst)))
  45.                    ([color=BLUE]setq[/color] lst ([color=BLUE]cons[/color] ([color=BLUE]cdr[/color] grp) lst))
  46.                )
  47.            )
  48.            ([color=BLUE]repeat[/color] vtx ([color=BLUE]setq[/color] lst ([color=BLUE]append[/color] ([color=BLUE]cdr[/color] lst) ([color=BLUE]list[/color] ([color=BLUE]car[/color] lst)))))
  49.            ([color=BLUE]foreach[/color] pnt lst
  50.                ([color=BLUE]entmake[/color] ([color=BLUE]list[/color] '(0 . [color=MAROON]"CIRCLE"[/color]) ([color=BLUE]cons[/color] 10 pnt) ([color=BLUE]cons[/color] 40 ans)))
  51.                ([color=BLUE]entmake[/color]
  52.                    ([color=BLUE]list[/color]
  53.                       '(0 . [color=MAROON]"TEXT"[/color])
  54.                        ([color=BLUE]cons[/color] 01 ([color=BLUE]itoa[/color] ([color=BLUE]setq[/color] cnt ([color=BLUE]1+[/color] cnt))))
  55.                        ([color=BLUE]cons[/color] 40 ans)
  56.                        ([color=BLUE]cons[/color] 07 ([color=BLUE]getvar[/color] 'textstyle))
  57.                        ([color=BLUE]cons[/color] 10 pnt)
  58.                        ([color=BLUE]cons[/color] 11 pnt)
  59.                       '(72 . 1)
  60.                       '(73 . 2)
  61.                    )
  62.                )
  63.            )
  64.        )
  65.    )
  66.    ([color=BLUE]princ[/color])
  67. )
  68. ([color=blue]vl-load-com[/color]) ([color=BLUE]princ[/color])
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 07:08:58 | 显示全部楼层
谢谢李,你看到这个帖子了吗?
http://www.cadtutor.net/forum/showthread.php?76878-Like-a-text-mask-can-LISP-it-the-same-in-circle-if-yes-how
你能给我一些提示或代码吗?
回复

使用道具 举报

15

主题

52

帖子

37

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-6 07:10:30 | 显示全部楼层
 
其实我已经找到了,但还没有试过。。nod684告诉我这是你的圆形抹布
再次非常感谢,我喜欢你的代码,它们真的很有用。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 18:30 , Processed in 1.980624 second(s), 72 queries .

© 2020-2025 乐筑天下

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