按属性v进行块选择
我对Autolisp很陌生,所以我真的不知道是否可以用lisp来实现这一点,但现在它来了。我需要一个lisp,可以根据属性值选择一个块,例如,我有一个图形,其中有十几个块都具有相同的名称“DFUBLANK1”,这些块有几个属性,但我只需要选择属性标记为“PART”且值为“10”的块。有什么想法吗? 这是接近未测试
; simple find block
; by Alan H nov 2013
(setq ans (getstring "\nEnter attribute value"))
(setq oldtag1 "yourattibute") ;attribute tag name
(setq ss1 (ssget "x"'((0 . "INSERT") (2 . "yourblockname")(410 . "Model"))) ; change block name
(setq inc (sslength ss1))
(repeat inc
(foreach att (vlax-invoke (vlax-ename->vla-object (ssname SS1 (setq inc (1- inc))) )'getattributes)
(if (= oldtag1 (strcase (vla-get-tagstring att)))
(progn
(if (= ans (vla-get-textstring att ))
(progn
(setq pt1 (vla-get-insertionpoint att))
(command "zoom" "c" pt1 100) ; zooms in on block
) ; end progn
) ; end if ans
)); end if oldtag1
) ; foreach att
) ; end repeat
(princ) 欢迎来到CADTutor
试试这个。
(defun c:Test (/ ss in sn en it ad ok)
(if (setq ad (ssadd)
ss (ssget "_X"
(list '(0 . "INSERT")
'(2 . "DFUBLANK1")
'(66 . 1)
(cons 410 (getvar 'CTAB))
)
)
)
(repeat (setq in (sslength ss))
(setq sn (ssname ss (setq in (1- in)))
it sn
ok nil
)
(while
(and
(not ok)
(/= (cdr (assoc 0 (setq en (entget (setq sn (entnext sn))))))
"SEQEND"
)
)
(if (and (eq (strcase (cdr (assoc 2 en))) "PART")
(eq (cdr (assoc 1 en)) "10")
)
(setq ok t
ad
(ssadd it ad)
)
)
)
)
)
(sssetfirst nil ad)
(princ)
) 谢谢你们的帮助,两人都做得很好,但我会和塔尔瓦特一起去,这更是我想要的。
不客气
页:
[1]