乐筑天下

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

[编程交流] 筛选0条长度线

[复制链接]

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 09:37:47 | 显示全部楼层 |阅读模式
我正在尝试设计一个例程,将清理所有0长度线的绘图;第一次尝试是创建一个包含所有行的选择集,并对其进行解析,以比较起点和终点(DXF代码10和11)。不幸的是,这是一个很长的过程。
可以为SSGET函数编写过滤器,以仅选择具有相同DXF代码10和11的行?
非常感谢。
 
当做
米尔恰
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:43:49 | 显示全部楼层
我不确定这是否可行,因为如果使用“-4”关系过滤代码,10和11 DXF组码需要有值进行比较:
 
由于直线图元没有表示长度的DXF代码,因此没有唯一的值来过滤。。。
 
这是我最有可能遵循的路线:
 
  1. (defun c:test ( / ss i e l )
  2. (if (setq ss (ssget "_X" '((0 . "LINE"))))
  3.    (repeat (setq i (sslength ss))
  4.      (setq e (ssname ss (setq i (1- i)))
  5.            l (entget e)
  6.      )      
  7.      (if (equal (cdr (assoc 10 l)) (cdr (assoc 11 l)) 1e- (entdel e))
  8.    )
  9. )  
  10. (princ)
  11. )
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 09:47:07 | 显示全部楼层
没有人能比李更快。
 
这就是我可怜的方式。
 
  1. (defun c:TesT (/ sel ss i sset 1st 2nd obj)
  2. (setq sel (ssadd))
  3. (setq ss (ssget "_x" '((0 . "LINE"))))
  4. (repeat
  5.    (setq i (sslength ss))
  6.     (while
  7.       (setq sset (ssname ss (setq i (1- i))))
  8.        (setq 1st (cdr (assoc 10 (setq ents (entget sset)))))
  9.        (setq 2nd (cdr (assoc 11 ents)))
  10.        (if (and (eq (car 1st) (car 2nd))
  11.                 (eq (cadr 1st) (cadr 2nd))
  12.            )
  13.          (setq obj (ssadd sset sel))
  14.        )
  15.     )
  16. )
  17. (sssetfirst nil obj)
  18. (print (strcat (itoa (sslength obj)) " " " Line(s) found"))
  19. (princ)
  20. )

 
塔瓦特
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 09:49:18 | 显示全部楼层
弗拉怎么办?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:53:06 | 显示全部楼层
 
请注意,您的代码有一个嵌套循环,因此,在遍历内部while循环相当于选择集大小的次数后,它将以相同的次数遍历repeat循环。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 09:56:45 | 显示全部楼层
  1. (defun c:test (/ sset)(vl-load-com)
  2. (if (setq sset (ssget "X" '((0 . "LINE"))))
  3.    (progn(foreach
  4.       ob (vl-remove-if 'listp (mapcar 'cadr (ssnamex sset)))
  5.      (if (/= (vla-get-length (vlax-ename->vla-object ob)) 0.0)
  6.        (setq sset (ssdel ob sset))
  7.        )
  8.      )
  9.    (sssetfirst nil sset)
  10.    )
  11.    )
  12. )
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 09:57:08 | 显示全部楼层
糟糕、糟糕、低效。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 10:00:11 | 显示全部楼层
 
 
(ssget“_:L”'((0。“行”))
(对象的vlax(setq ss(vla get activeselectionset adoc))。。。。
 
较好的
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 10:04:15 | 显示全部楼层
很或者用repeat/while单步执行,并使用
  1. (vlax-curve-getDistAtParam <Entity> (vlax-curve-getEndParam <Entity>))

您还可以使用vlax curve getDistAtPoint和vlax curve getEndPoint。两者都可以。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 10:06:57 | 显示全部楼层
 
非常感谢。
 
所以While函数对于repeat是错误的。
 
 
我喜欢lambda。
 
  1. (defun c:TesT (/ sel ss)
  2. (setq sel (ssadd))
  3. (if (setq ss (ssget "_x" '((0 . "LINE"))))
  4.    ((lambda (i / sset 1st 2nd obj)
  5.       (while
  6.         (setq sset (ssname ss (setq i (1+ i))))
  7.          (setq 1st (cdr (assoc 10 (setq ents (entget sset)))))
  8.          (setq 2nd (cdr (assoc 11 ents)))
  9.          (if (and (eq (car 1st) (car 2nd))
  10.                   (eq (cadr 1st) (cadr 2nd))
  11.              )
  12.            (setq obj (ssadd sset sel))
  13.          )
  14.       )
  15.       (sssetfirst nil obj)
  16.     )
  17.      -1
  18.    )
  19. )
  20. (princ)
  21. )
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-7 02:19 , Processed in 0.373509 second(s), 72 queries .

© 2020-2025 乐筑天下

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