本帖最后由 jun353835273 于 2023-9-13 16:36 编辑
- (vl-load-com)
- (defun c:tt1(/ i BLKNAME EN ENT LST OBJ SS SS2 TMPBLKNAME TMPOBJ)
- (if (setq ent (car (entsel "请选择需要过滤的参考图块: ")))
- (progn
- (setq obj (vlax-ename->vla-object ent))
- ;;先获取参考块的真实块名
- (setq blkName (vla-get-EffectiveName obj))
- ;;如果是动态块执行添加动态块的匿名块名进行过滤
- (if (= (vla-get-IsDynamicBlock obj) :vlax-true)
- (progn
- ;;全选所有匿名块
- (if (setq ss (ssget "x" '((0 . "insert")(2 . "`*U*"))))
- (progn
- ;;循环判定匿名块的块名是否是参考块的块名
- (setq i -1)
- (setq lst nil)
- (while (setq en (ssname ss (setq i (1+ i))))
- (setq Tmpobj (vlax-ename->vla-object en))
- (setq TmpblkName (vla-get-EffectiveName Tmpobj))
- (if (/= TmpblkName blkName)
- (setq lst (cons en lst))
- )
- )
- (and lst (mapcar (function(lambda(x) (setq ss (ssdel x ss)))) lst))
- )
- )
- )
- (progn
- ;;全选所有名块
- (setq ss (ssget "x" (list '(0 . "insert") (cons 2 blkName))))
- )
- )
- )
- ;;执行过滤选择
- (if (and ss (= 0 (getvar "cmdactive"))) (command "._select" ss "" "._pselect" ss ""))
- )
- )
- 改了下,这种结构应该比之前的好一点,不然strcat 那个块名如果太多了,估计也有问题。
|