使块引用名称 Unqiue
我得到了一张我必须修改的图纸。问题是,在此图中,有几个具有名称的块引用。即我有大约 100 个块引用调用 "WcLux" 。是否有可能使用脚本使块引用的名称唯一:
WcLux_1, WcLux2, ... WcLux100
这应该有效。如果它们的属性可能必须使用爆发而不是爆炸。
- 编辑
也不会检查 bylayer 或 byblock 颜色,因此爆炸后可能会发生变化。
;;----------------------------------------------------------------------------;;
;; make unique block names
(defun C:UB (/ blk blkname ss en name ss1 ptslst LL UR MPT)
(vl-load-com)
(setq ss1 (ssadd)
blk (car (entsel "\nSelect Block")) ;no error testing so make sure you select a block
blkname (cdr (assoc 2 (entget blk)))
i 1
)
(if (and (setq ss (ssget "_X" (list '(0 . "INSERT") (cons 2 blkname) '(410 . "Model")))) (> (sslength ss) 1))
(foreach blk (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
(setq LastEnt (entlast))
(setq LL nil UR nil MPT nil ptslst nil)
(command "_.Explode" blk)
(if (setq en (entnext LastEnt))
(while en
(ssadd en SS1)
(setq obj (vlax-ename->vla-object en))
(vla-getboundingbox obj 'minpt 'maxpt)
(setq ptslst (cons (vlax-safearray->list minpt) ptslst)
ptslst (cons (vlax-safearray->list maxpt) ptslst)
)
(setq en (entnext en))
)
)
(setq LL (apply 'mapcar (cons 'min ptslst))
UR (apply 'mapcar (cons 'max ptslst))
MPT (mapcar '/ (mapcar '+ LL UR) '(2 2 2))
)
(while (tblsearch "BLOCK" (strcat blkname "-" (itoa i)))
(setq i (1+ i))
)
(setq name (strcat blkname "-" (itoa i)))
(vl-cmdf "_.Block" name "_non" MPT SS1 "")
(vl-cmdf "_.Insert" name "_non" MPT 1 1 0)
)
)
)
如果您不在乎名称是什么,这将使它们独一无二:(defun c:ub (/ b s)
(if (and (setq b (car (entsel "\nSelect Block")))
(= "INSERT" (cdr (assoc 0 (entget b))))
(setq s (ssget "_X" (list '(0 . "INSERT") (assoc 2 (entget b)))))
)
(foreach e (vl-remove-if 'listp (mapcar 'cadr (ssnamex s)))
(vla-converttoanonymousblock (vlax-ename->vla-object e))
)
)
(princ)
)
(vl-load-com)
看看
页:
[1]