(setq ss1 (ssget '((0 . "INSERT") (2 . "`*U*") )))
但是没法分辨出不同的动态块
在萝卜的基础上改了一下(效率低主要是在enamel转换为object上),代码如下:
(defun ssget-dynblk->ents (ss name / ents)
(if ss
(vlax-for n (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object)))
(if (and (= (vla-get-isdynamicblock n) :vlax-true) (= (vla-get-effectivename n) name))
(setq ents (cons n ents))
) ;_ 结束if
) ;_ 结束vlax-for
) ;_ 结束if
ents
) ;_ 结束defun
(defun C:TT (/ ss ents)
(vla-eval (vlax-get-acad-object) "Thisdrawing.Activeselectionset.Delete")
(if (setq ss (ssget '((0 . "INSERT"))))
(progn (setq ents (ssget-dynblk->ents ss "树 - 英制"))
(print ents)
) ;_ 结束progn
) ;_ 结束if
(princ)
) ;_ 结束defun
我这里也有别人的代码分享下,是用两个函数完成的
(defun test ( block )
(ssget
(list
(cons 0 "INSERT")
(cons 2
(
(lambda ( s )
(foreach anon (LM:AnonymousInstancesof block)
(setq s (strcat s ",`" anon))
)
s
)
block
)
)
)
)
)
(defun LM:AnonymousInstancesof ( block / def rec nme ref lst )
(while (setq def (tblnext "BLOCK" (null def)))
(if (= 1 (logand 1 (cdr (assoc 70 def))))
(progn
(setq rec
(entget
(cdr
(assoc 330
(entget
(tblobjname "BLOCK" (setq nme (cdr (assoc 2 def))))
)
)
)
)
)
(while (setq ref (assoc 331 rec))
(if
(and
(eq block (vla-get-effectivename (vlax-ename->vla-object (cdr ref))))
(not (member nme lst))
)
(setq lst (cons nme lst))
)
(setq rec (cdr (member (assoc 331 rec) rec)))
)
)
)
)
(reverse lst)
)最后调用(test "动态块块名"),返回选择集 这是leemac的,但是在图中有表格的时候会没有反应,我自己又重写了一个。
页:
1
[2]