乐筑天下

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

[编程交流] 查找未闭合的多段线

[复制链接]

57

主题

183

帖子

126

银币

后起之秀

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

铜币
285
发表于 2022-7-6 07:25:50 | 显示全部楼层 |阅读模式
如何将其与打印或警报一起列出,
“我的DWG”中未闭合的所有多段线?
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 07:40:58 | 显示全部楼层
试试这个,它会高亮显示开放的多段线。
  1. (defun c:test (/ ss x sn lst l)
  2. (vl-load-com)
  3. (if (setq
  4.        ss (ssget "_x"
  5.                  (list '(0 . "*POLYLINE") (cons 410 (getvar 'ctab)))
  6.           )
  7.      )
  8.    (repeat (setq x (sslength ss))
  9.      (setq sn (ssname ss (setq x (1- x))))
  10.      (if (not (vlax-curve-isclosed sn))
  11.        (setq lst (cons sn lst))
  12.      )
  13.    )
  14. )
  15. (setq l (ssadd))
  16. (sssetfirst nil (foreach x lst (ssadd x l)))
  17. (princ)
  18. )
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 07:44:05 | 显示全部楼层
  1. (defun c:hipl nil
  2. (sssetfirst nil
  3. (ssget "_X" '((0 . "*POLYLINE,SPLINE")
  4.      (-4 . "<NOT")(-4 . "<OR")
  5.      (70 . 1) (70 . 9)(70 . 129)
  6.      (-4 . "OR>")(-4 . "NOT>")
  7.      )
  8.    )
  9. )(princ)
  10. )
回复

使用道具 举报

2

主题

74

帖子

72

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 07:54:17 | 显示全部楼层
如果我们采用Tharvat代码,并假设它有时不是正确闭合的多段线(相同的起点和终点),则如下所示:
  1. (defun c:test (/ ss x sn lst l)
  2. (vl-load-com)
  3. (if (setq
  4. ss (ssget "_x"
  5.           (list '(0 . "*POLYLINE") (cons 410 (getvar 'ctab)))
  6.    )
  7.      )
  8.    (repeat (setq x (sslength ss))
  9.      (setq sn (ssname ss (setq x (1- x))))
  10.      (if (or
  11.     (vlax-curve-isclosed sn)
  12.     (equal (vlax-curve-getStartPoint sn)
  13.            (vlax-curve-getEndPoint sn)
  14.     )
  15.   )
  16. (ssdel sn ss)
  17.      )
  18.    )
  19. )
  20. (sssetfirst nil ss)
  21. (princ)
  22. )
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 08:02:19 | 显示全部楼层
hmmmn让我想知道OP计划如何处理选定的PLINE
也许是这样:
 
  1. (defun c:hipl ( / p b e)
  2. (vl-load-com)  
  3. (if (setq p   (ssget "_X" '((0 . "*POLYLINE,SPLINE")
  4.      (-4 . "<NOT")(-4 . "<OR")
  5.      (70 . 1) (70 . 9)(70 . 129)
  6.      (-4 . "OR>")(-4 . "NOT>")
  7.      )
  8.    )
  9. )
  10. (repeat (setq b (sslength p))
  11.         (setq e (ssname p (setq b (1- b))))
  12.                 (if (equal (vlax-curve-getStartPoint e)
  13.                    (vlax-curve-getEndPoint e))
  14.                   (vla-put-closed (vlax-ename->vla-object e) :vlax-true)
  15.         )
  16. )
  17. )
  18. (princ)
  19. )

 
以相同的起点和终点闭合PLINE。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 08:08:52 | 显示全部楼层
  1. (defun c:selectopenpolylines ( )
  2.    (sssetfirst nil (ssget "_X" '((0 . "*POLYLINE") (-4 . "<NOT") (-4 . "&=") (70 . 1) (-4 . "NOT>"))))
  3.    (princ)
  4. )
回复

使用道具 举报

gS7

35

主题

244

帖子

212

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
180
发表于 2022-7-6 08:19:12 | 显示全部楼层
  1. (Defun C:ChkPl(/ old_var plcntr pllen ssnme ent)
  2. (setq old_var(Getvar "CMDECHO"))
  3. (setvar "CMDECHO" 0)
  4. (if (setq plset(ssget "x" '((0 . "POLYLINE"))))
  5.    (progn
  6.      (setq plcntr 0)
  7.      (setq pllen(sslength plset))
  8.      (repeat pllen
  9. (setq ssnme(ssname plset plcntr))
  10. (setq Ent  (entget ssnme))
  11. (if (/= (cdr (assoc 70 ent)) 9)
  12.   (Vl-Cmdf "CHPROP" ssnme "" "C" "1" "")
  13. )
  14. (setq plcntr(1+ plcntr))
  15.      )
  16.    )
  17. (princ "\nNo POLYLINES Found in Drawing!:")
  18. )
  19. (setvar "CMDECHO" old_var)
  20. (princ)
  21. )

 
 
快乐计算
回复

使用道具 举报

57

主题

183

帖子

126

银币

后起之秀

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

铜币
285
发表于 2022-7-6 08:26:40 | 显示全部楼层
谢谢大家的帮助
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 06:03 , Processed in 0.434688 second(s), 68 queries .

© 2020-2025 乐筑天下

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