乐筑天下

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

[编程交流] 选择所有要删除的块

[复制链接]

10

主题

30

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 16:50:14 | 显示全部楼层 |阅读模式
你好
请有人张贴一个代码,将选择所有的块是接触多线。代码应该能够执行多个部分。
 
附着的模板DWG文件(我要选择选定管道尺寸上的所有喷水装置)
新建块。图纸
回复

使用道具 举报

55

主题

402

帖子

357

银币

后起之秀

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

铜币
274
发表于 2022-7-5 16:54:41 | 显示全部楼层
试试这个。。。适用于直线、圆弧、圆、多段线和样条曲线。。。
 
  1. ;;----------------=={ Entity to Point List }==----------------;;
  2. ;;                                                            ;;
  3. ;;  Returns a list of points describing or approximating the  ;;
  4. ;;  supplied entity, else nil if the entity is not supported. ;;
  5. ;;------------------------------------------------------------;;
  6. ;;  Author: Lee Mac, Copyright © 2011 - www.lee-mac.com       ;;
  7. ;;------------------------------------------------------------;;
  8. ;;  Arguments:                                                ;;
  9. ;;  ent - Entity for which to return Point List.              ;;
  10. ;;------------------------------------------------------------;;
  11. ;;  Returns:  List of Points describing/approximating entity  ;;
  12. ;;------------------------------------------------------------;;
  13. (defun LM:Entity->PointList ( ent / der di1 di2 di3 elst fun inc lst par rad )
  14.    (setq elst (entget ent))
  15.    (cond
  16.        (   (eq "POINT" (cdr (assoc 0 elst)))
  17.            (list (cdr (assoc 10 elst)))
  18.        )
  19.        (   (eq "LINE" (cdr (assoc 0 elst)))
  20.            (list (cdr (assoc 10 elst)) (cdr (assoc 11 elst)))
  21.        )
  22.        (   (member (cdr (assoc 0 elst)) '("CIRCLE" "ARC"))
  23.            (setq di1 0.0
  24.                  di2 (vlax-curve-getdistatparam ent (vlax-curve-getendparam ent))
  25.                  inc (/ di2 (1+ (fix (* 35.0 (/ di2 (cdr (assoc 40 elst)) (+ pi pi))))))
  26.                  fun (if (vlax-curve-isclosed ent) < <=)
  27.            )
  28.            (while (fun di1 di2)
  29.                (setq lst (cons (vlax-curve-getpointatdist ent di1) lst)
  30.                      di1 (+ di1 inc)
  31.                )
  32.            )
  33.            lst
  34.        )
  35.        (   (or (eq (cdr (assoc 0 elst)) "LWPOLYLINE")
  36.                (and (eq (cdr (assoc 0 elst)) "POLYLINE") (zerop (logand (cdr (assoc 70 elst)) 80)))
  37.            )
  38.            (setq par 0)
  39.            (repeat (fix (1+ (vlax-curve-getendparam ent)))
  40.                (if (setq der (vlax-curve-getsecondderiv ent par))
  41.                    (if (equal der '(0.0 0.0 0.0) 1e-
  42.                        (setq lst (cons (vlax-curve-getpointatparam ent par) lst))
  43.                        (if (setq rad (distance '(0.0 0.0) (vlax-curve-getfirstderiv ent par))
  44.                                  di1 (vlax-curve-getdistatparam ent par)
  45.                                  di2 (vlax-curve-getdistatparam ent (1+ par))
  46.                            )
  47.                            (progn
  48.                                (setq inc (/ (- di2 di1) (1+ (fix (* 35.0 (/ (- di2 di1) rad (+ pi pi)))))))
  49.                                (while (< di1 di2)
  50.                                    (setq lst (cons (vlax-curve-getpointatdist ent di1) lst)
  51.                                          di1 (+ di1 inc)
  52.                                    )
  53.                                )
  54.                            )
  55.                        )
  56.                    )
  57.                )
  58.                (setq par (1+ par))
  59.            )
  60.            (if (or (vlax-curve-isclosed ent) (equal '(0.0 0.0 0.0) der 1e-)
  61.                lst
  62.                (cons (vlax-curve-getendpoint ent) lst)
  63.            )
  64.        )
  65.        (   (eq (cdr (assoc 0 elst)) "ELLIPSE")
  66.            (setq di1 (vlax-curve-getdistatparam ent (vlax-curve-getstartparam ent))
  67.                  di2 (vlax-curve-getdistatparam ent (vlax-curve-getendparam   ent))
  68.                  di3 (* di2 (/ (+ pi pi) (abs (- (vlax-curve-getendparam ent) (vlax-curve-getstartparam ent)))))
  69.            )
  70.            (while (< di1 di2)
  71.                (setq lst (cons (vlax-curve-getpointatdist ent di1) lst)
  72.                      der (distance '(0.0 0.0) (vlax-curve-getsecondderiv ent (vlax-curve-getparamatdist ent di1)))
  73.                      di1 (+ di1 (/ di3 (1+ (fix (/ 35.0 (/ di3 der (+ pi pi)))))))
  74.                )
  75.            )
  76.            (if (vlax-curve-isclosed ent)
  77.                lst
  78.                (cons (vlax-curve-getendpoint ent) lst)
  79.            )
  80.        )
  81.        (   (eq (cdr (assoc 0 elst)) "SPLINE")
  82.            (setq di1 (vlax-curve-getdistatparam ent (vlax-curve-getstartparam ent))
  83.                  di2 (vlax-curve-getdistatparam ent (vlax-curve-getendparam   ent))
  84.                  inc (/ di2 25.0)
  85.            )
  86.            (while (< di1 di2)
  87.                (setq lst (cons (vlax-curve-getpointatdist ent di1) lst)
  88.                      der (/ (distance '(0.0 0.0) (vlax-curve-getsecondderiv ent (vlax-curve-getparamatdist ent di1))) inc)
  89.                      di1 (+ di1 (if (equal 0.0 der 1e-10) inc (min inc (/ 1.0 der (* 10. inc)))))
  90.                )
  91.            )
  92.            (if (vlax-curve-isclosed ent)
  93.                lst
  94.                (cons (vlax-curve-getendpoint ent) lst)
  95.            )
  96.        )
  97.    )
  98. )
  99. (defun remove:duplicate (l m / a n)
  100. (while l
  101.    (setq a (car l))
  102.    (setq l (vl-remove-if
  103.       '(lambda (x)
  104.          (if (not m)
  105.            (eq x a)
  106.          (and (eq (car x) (car a))
  107.               (eq (cadr x) (cadr a))
  108.               (eq (caddr x) (caddr a))
  109.          ))
  110.        )
  111.       l
  112.     )
  113.    )
  114.    (setq n (cons a n))
  115. )
  116. (reverse n)
  117. )
  118. (defun c:test (/ a b i i1 obj lst sel)
  119. (if (setq a (ssget '((0 . "*line,arc,circle"))))
  120.    (progn
  121.      (setq sel (ssadd))
  122.      (repeat (setq i (sslength a))
  123. (setq obj (ssname a (setq i (1- i))))
  124. (setq lst (remove:duplicate (LM:Entity->PointList obj) t))
  125. (if (setq b (ssget "_F" lst '((0 . "insert"))))
  126.   (repeat (setq i1 (sslength b))
  127.     (ssadd (ssname b (setq i1 (1- i1))) sel)
  128.   )
  129. )
  130.      )
  131.      (sssetfirst nil sel)
  132.    )
  133. )
  134. (princ)
  135. )

新1块。图纸
回复

使用道具 举报

10

主题

30

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 16:59:03 | 显示全部楼层
我已经按照您显示的例程创建了新代码。试一下
 
但是请记住(ssget“_X”'((0。“insert”))在处理图形中显示的所有块时可能会花费太多时间。
 
  1. (vl-load-com)
  2. (defun c:slbl2 (/ _kpblc-conv-selset-to-ename pl selset res prec)
  3. (defun _kpblc-conv-selset-to-ename (selset / tab item)
  4.    (cond
  5.      ((not selset) nil)
  6.      ((= (type selset) 'pickset)
  7.       (repeat (setq tab  nil
  8.                     item (sslength selset)
  9.                     ) ;_ end setq
  10.         (setq tab (cons (ssname selset (setq item (1- item))) tab))
  11.         ) ;_ end repeat
  12.       )
  13.      ) ;_ end of cond
  14.    ) ;_ end of defun
  15. (if (and (= (type (setq pl (vl-catch-all-apply
  16.                               (function
  17.                                 (lambda ()
  18.                                   (car (entsel "\nSelect LWPolyline <Cancel> : "))
  19.                                   ) ;_ end of lambda
  20.                                 ) ;_ end of function
  21.                               ) ;_ end of vl-catch-all-apply
  22.                          ) ;_ end of setq
  23.                    ) ;_ end of type
  24.              'ename
  25.              ) ;_ end of =
  26.           (setq selset (_kpblc-conv-selset-to-ename (ssget "_X" (list '(0 . "INSERT") (assoc 410 (entget pl))))))
  27.           ) ;_ end of and
  28.    (progn
  29.      (setq prec   1e-1
  30.            pl     (vlax-ename->vla-object pl)
  31.            selset (vl-remove-if-not
  32.                     (function
  33.                       (lambda (x / pt pt_closest)
  34.                         (setq pt         (cdr (assoc 10 (entget x)))
  35.                               pt_closest (vlax-curve-getclosestpointto pl pt)
  36.                               ) ;_ end of setq
  37.                         (< (distance pt pt_closest) prec)
  38.                         ) ;_ end of lambda
  39.                       ) ;_ end of function
  40.                     selset
  41.                     ) ;_ end of vl-remove-if-not
  42.            res    (ssadd)
  43.            ) ;_ end of setq
  44.      (foreach item selset (ssadd item res))
  45.      (if (> (sslength res) 0)
  46.        (sssetfirst res res)
  47.        ) ;_ end of if
  48.      ) ;_ end of progn
  49.    ) ;_ end of if
  50. ) ;_ end of defun
回复

使用道具 举报

55

主题

402

帖子

357

银币

后起之秀

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

铜币
274
发表于 2022-7-5 16:59:56 | 显示全部楼层
谢谢你,先生,
 
这一个有效
回复

使用道具 举报

10

主题

30

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 17:05:16 | 显示全部楼层
不客气
回复

使用道具 举报

55

主题

402

帖子

357

银币

后起之秀

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

铜币
274
发表于 2022-7-5 17:07:28 | 显示全部楼层
 
Satish,为什么删除我的代码头?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 17:11:14 | 显示全部楼层
对不起,先生。。。只是想减少我发布的代码长度。。。
 
我已经更新了
回复

使用道具 举报

55

主题

402

帖子

357

银币

后起之秀

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

铜币
274
发表于 2022-7-5 17:15:31 | 显示全部楼层
非常感谢。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 17:15:56 | 显示全部楼层
您好,satishrajdev,您可以进一步修改代码,将块的图层更改为它们所在的多段线的图层吗。
 
谢谢
回复

使用道具 举报

13

主题

53

帖子

44

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
71
发表于 2022-7-5 17:21:06 | 显示全部楼层
重复帖子
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 12:56 , Processed in 0.613902 second(s), 72 queries .

© 2020-2025 乐筑天下

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