如何从选择集中两次过滤块对象?
如何从选择集中两次过滤块对象:第一步,创建选择集:
(princ "\n 选择对象:")
(setq ss (ssget))
第二步,如何从上面的选择集中过滤出想要的块:
(setq ss1 (从ss中过滤出前缀为"HfSec-*"的块)
(setq ss2 (从ss中过滤出 "块")
(setq ss (ssget))
(setq ss2 (ssget "p" '((0 . "insert"))))
(setq ss1 (ssget "p" '((2 . "HfSec-*")))) 论坛那么多帖子,肯定有人敲过,不如直接搜就好了 本帖最后由 lee50310 于 2024-8-26 19:09 编辑
ssget可多次選擇過濾
;;ssget可多次選擇過濾
(defun c:tt()
(princ "\n<*** 選取對象 ***>")
(setq pt1 (getpoint "\n矩形框選 指定第一個角點: "))
(setq pt2 (getcorner pt1 "\n指定第二角點: "))
(command "._rectang" pt1 pt2)
(command "ERASE" (entlast) "")
(setq ss1(ssget "c" pt1 pt2 '((0 . "INSERT")))) ;此範圍內過濾圖塊
(setq ss2(ssget "c" pt1 pt2 '((0 . "CIRCLE")(62 . 1)))) ;此範圍內過濾紅色的圓
(setq ss3(ssget "c" pt1 pt2 '((0 . "ARC")(62 . 3)))) ;此範圍內過濾綠色的弧
(setq ss4(ssget "c" pt1 pt2 '((0 . "LWPOLYLINE")(70 . 1)))) ;此範圍內過濾封閉的多段線
;
;可再無限增加
)
https://atlisp.cn/function/pickset:get-sub
pickset:get-sub
说明:从选择集或图元表中按 filter 规则过滤. 当前版本不支持 XOR 和 逻辑嵌套。
用法:
(pickset:get-sub ss filter)
参数:1 ss : 选择集;2 filter : 过滤dxf组码;
返回值:过滤后的图元表
示例:
(pickset:get-sub ss '((-4 . "")(1 . "7")(-4 . "<")(1 . "4")(-4 . "OR>"))) 一直在重复问题一样的.
http://bbs.mjtd.com/thread-190924-1-1.html 过滤出块;;;第一步,创建选择集:
(princ "\n 选择对象:")
(setq _ss (ssget))
;;;第二步,如何从上面的选择集中过滤出想要的块:
(repeat (setq _nn (sslength _ss))
(setq _entN (ssname _ss (setq _nn (1- _nn))) _entNlst (entget _entN))
;;加入判断
(if (/= "INSERT" (cdr(assoc 0 _entNlst )))
(setq _ss (ssdel _entN _ss))
)
)
(sssetfirst nil _ss) 入门级代码
(defun c:tt(/ pt1 pt2 ss1 ss2 ss3)
(setq pt1 (getpoint "\n指定起点: "))
(setq pt2 (getcorner pt1 "\n指定对角点: "))
(setq ss1(ssget "C" pt1 pt2)) ;选择任意对象 ,C表示交选,如果用W,表示窗选
(setq ss2(ssget "C" pt1 pt2 '((0 . "INSERT")))) ;选择块
(setq ss3(ssget "C" pt1 pt2 '((2 . "HfSec-*")))) ;选择指定块名的块
(princ))
感谢大佬们给出这么多解决方案,谢谢
页:
[1]