乐筑天下

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

[编程交流] 在多点中绘制圆

[复制链接]

1

主题

2

帖子

1

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 16:49:32 | 显示全部楼层 |阅读模式
你好
我想制作一个脚本,在多个点上绘制圆。这些点是在autocad的扩展中自动生成的。所有点都在同一层中。图中大约有200到1000个点。
我的第一个问题是找到一个画圆圈的突击队员,所有的点都有基点。
有人知道适合我的命令吗?
 
 
当做
埃米尔
回复

使用道具 举报

9

主题

167

帖子

163

银币

初来乍到

Rank: 1

铜币
43
发表于 2022-7-5 16:58:50 | 显示全部楼层
这就是我用的。
 
  1. (defun c:ic (/ a b c r d n p d1 d2 e1 cl oerr osn)
  2. (setq osn (getvar "osmode"))
  3. (setvar "cmdecho" 0)
  4. (setq cl (getvar "clayer"))
  5. (if c
  6.    ()
  7.    (setq c 1.0)
  8. )
  9. (princ "\n Circle diameter < ")
  10. (princ c)
  11. (princ " > ? ")
  12. (setq b (getdist))
  13. (if (= b nil)
  14.    (setq b c)
  15.    (setq c b)
  16. )
  17. (setq r (/ b 2))
  18. (princ "\n Select nodes ")
  19. (setq a (ssget '((0 . "POINT"))))
  20. (setq d (sslength a))
  21. (setq d1 d)
  22. (repeat d
  23.    (setq d2 (1- d1))
  24.    (setq n (ssname a d2))
  25.    (setq e1 (entget n))
  26.    (setq p (cdr (assoc 10 e1)))
  27.    (entmake (list (cons 0 "CIRCLE")
  28.            (cons 6 "BYLAYER")
  29.            (cons 8 cl)
  30.            (cons 10 p)
  31.            (cons 40 r)
  32.            (cons 210 (list 0.0 0.0 1.0))
  33.      )
  34.    )
  35.    (entdel n)
  36.    (setq d1 d2)
  37. )
  38. (setvar "osmode" osn)
  39. (princ)
  40. )
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 17:01:17 | 显示全部楼层
也许代码稍微简化一下
 
  1. (setq d (sslength a))
  2. (setq d1 d)
  3. (repeat d
  4.    (setq d2 (1- d1))
  5.    (setq n (ssname a d2))
  6.    (setq e1 (entget n))
  7. [color=lime](repeat (setq d2 (sslength a)))[/color]
  8. [color=lime]    (setq e1 (entget (ssname a (setq d2 (- d2 1)))))[/color]
回复

使用道具 举报

55

主题

402

帖子

357

银币

后起之秀

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

铜币
274
发表于 2022-7-5 17:09:30 | 显示全部楼层
另一个
  1. (defun c:test (/ a b i)
  2. (if (and (setq a (ssget '((0 . "point"))))
  3.    (setq b (getdist "\nSpecify Circle Radius : "))
  4.      )
  5.    (repeat (setq i (sslength a))
  6.      (entmakex
  7. (list (cons 0 "CIRCLE")
  8.       (assoc 10 (entget (ssname a (setq i (1- i)))))
  9.       (cons 40 b)
  10. )
  11.      )
  12.    )
  13. )
  14. (princ)
  15. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 17:15:05 | 显示全部楼层
@Satish,注意:
  1. (cons 10 (cdr (assoc 10 <list>))) == (assoc 10 <list>)
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 17:21:14 | 显示全部楼层
我记得有人写了一个算法,用于在范围内间隔圆(不确定是否是Marko)。
现在似乎找不到。
回复

使用道具 举报

55

主题

402

帖子

357

银币

后起之秀

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

铜币
274
发表于 2022-7-5 17:27:38 | 显示全部楼层
 
谢谢你,先生。我需要更加关注这个
 
顺便说一句,我已经更新了代码。
回复

使用道具 举报

1

主题

2

帖子

1

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 17:28:12 | 显示全部楼层
非常感谢。
它工作得很好!
 
 
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 17:41:05 | 显示全部楼层
FWIW,这是另一个版本,它将保留点的原始属性,并将考虑在任何UCS平面中构造的点:
  1. (defun c:p2c ( / c i r s x )
  2.    (if (and (setq s (ssget '((0 . "POINT"))))
  3.            (progn
  4.                (initget 6)
  5.                (setq r (getdist "\nSpecify circle radius: "))
  6.            )
  7.        )
  8.        (repeat (setq i (sslength s))
  9.            (setq x (reverse (entget (ssname s (setq i (1- i)))))
  10.                  c (assoc 10 x)
  11.            )
  12.            (entmake
  13.                (subst '(0 . "CIRCLE") '(0 . "POINT")
  14.                    (subst (cons 10 (trans (cdr c) 0 (cdr (assoc 210 x)))) c
  15.                        (reverse
  16.                            (cons (cons 40 r)
  17.                                (vl-remove-if '(lambda ( x ) (member (car x) '(50 102 360))) x)
  18.                            )
  19.                        )
  20.                    )
  21.                )
  22.            )
  23.        )
  24.    )
  25.    (princ)
  26. )
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 17:48:45 | 显示全部楼层
这是一些有趣的列表操作李!
我也会删除GCs-15和100(以防万一)。尽管entmake/x似乎忽略了它们:
  1. _$ (entmake (list (cons 0 "POINT") (cons 5 "MyHandle") (cons 100 "AcDbLWPolyline") (cons 62 1) (cons 10 (getpoint))))
  2. ((0 . "POINT") (5 . "MyHandle") (100 . "AcDbLWPolyline") (62 . 1) (10 -38.7621 156.008 0.0))
  3. _$ (entget (entlast))
  4. ((-1 . <Entity name: 7ff678604cc0>) (0 . "POINT") (330 . <Entity name: 7ff6786039f0>) (5 . "24C") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 1) (100 . "AcDbPoint") (10 -38.7621 156.008 0.0) (210 0.0 0.0 1.0) (50 . 0.0))
  5. _$
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 12:52 , Processed in 0.470895 second(s), 83 queries .

© 2020-2025 乐筑天下

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