我的目标是返回带有ssget函数块名的列表的函数:
例子:
- "block1,block2,xref1,xref2,dynblock1,*A1dynblock1,*A2dynblock1"
有人能验证我的lisp例程吗?
主要功能:
- ;bit
- ;0 - all
- ;1 - without "blocks"
- ;2 - without dynamic blocks
- ;4 - without xrefs
- ;(PZ:GetInsertNames (ssget '((0 . "INSERT"))) (+ 2 4))
- (defun PZ:GetInsertNames ( ss bit / sl enl res)
- ;remove objs from ss that are not insert - just in case
- (setq
- sl
- (vl-remove-if-not
- '(lambda (_1)
- (eq (cdr (assoc 0 (entget (vlax-vla-object->ename _1)))) "INSERT")
- )
- (cd:SSX_Convert ss 1)
- )
- )
- ;remove blocks
- (if (= 1 (logand bit 1))
- (setq
- sl
- (vl-remove-if
- '(lambda (_1)
- (and
- (= (vlax-property-available-p _1 'Path) nil)
- (= (vlax-get-property _1 'IsDynamicBlock) :vlax-false)
- )
- )
- sl
- )
- )
- )
- ;remove dynamic blocks
- (if (= 2 (logand bit 2))
- (setq
- sl
- (vl-remove-if
- '(lambda (_1)
- (= (vla-get-IsDynamicBlock _1) :vlax-true)
- )
- sl
- )
- )
- )
- ;remove xrefs
- (if (= 4 (logand bit 4))
- (setq
- sl
- (vl-remove-if
- '(lambda (_1)
- (= (vlax-property-available-p _1 'Path) T)
- )
- sl
- )
- )
- )
- (setq sl (mapcar 'vlax-vla-object->ename sl))
- (setq enl (mapcar 'LM:al-effectivename sl))
- (if (= 0 (logand bit 2))
- (foreach _n sl
- (if (= (vla-get-IsDynamicBlock (vlax-ename->vla-object _n)) :vlax-true)
- (setq enl(LM:ListUnion (cd:BLK_GetDynBlockNames (LM:al-effectivename _n)) enl))
- )
- )
- )
- (setq res (cd:STR_ReParse (LM:Unique enl)","))
- res
- )
子程式
|