snddd2000 发表于 2011-3-9 14:02:00

可以试试
(setq ss1 (ssget '((0 . "INSERT") (2 . "`*U*") )))
但是没法分辨出不同的动态块

redcat 发表于 2011-3-9 14:30:00


在萝卜的基础上改了一下(效率低主要是在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

snddd2000 发表于 2011-3-10 10:40:00


我这里也有别人的代码分享下,是用两个函数完成的

(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]
查看完整版本: 有没有好办法对动态图块块名用ssget选择过滤?