我开始搜索块定义,不确定它是否有用。
- (defun c:Find_Att (/ itemp getname getnestattribblocks BLKS BLOCK ENT I LST NLST SS TMP)
- ;; Lee Mac ~ 23.03.10
- (setq *str (strcase
- (cond ((/= "" (setq tmp (getstring t "\nATTRIB Value to Search For: "))) tmp)
- (*str))))
-
- (defun itemp (collection item / result)
- (if (not (vl-catch-all-error-p
- (setq result
- (vl-catch-all-apply (function vla-item)
- (list collection item)))))
- result))
- (defun GetName (object)
- (if (vlax-property-available-p object 'EffectiveName)
- (vla-get-EffectiveName object)
- (vla-get-name Object)))
-
-
- (defun GetNestAttribBlocks (object / result sub)
-
- (setq blks (cond (blks) ((vla-get-Blocks
- (vla-get-ActiveDocument
- (vlax-get-acad-object))))))
-
- (vlax-for sub object
- (if (and (eq "AcDbBlockReference" (vla-get-ObjectName sub))
- (eq :vlax-true (vla-get-hasAttributes sub)))
- (setq result (cons sub (GetNestAttribBlocks (itemp blks (GetName sub)))))))
-
- result)
- (if (setq i -1 ss (ssget "_X" (list (cons 0 "INSERT")
- (cons 66 1)
- (cons 410 (getvar 'CTAB)))))
-
- (while (setq ent (ssname ss (setq i (1+ i))))
- (setq bName (cdr (assoc 2 (entget ent))))
-
- (while (/= "SEQEND" (cdr (assoc 0 (entget (setq ent (entnext ent))))))
-
- (if (eq *str (strcase (cdr (assoc 1 (entget ent)))))
-
- (setq Lst (cons (cons bName ent) Lst))))))
-
- (vlax-for block (vla-get-Blocks
- (vla-get-ActiveDocument (vlax-get-acad-object)))
-
- (setq nLst
- (cons
- (apply (function append)
- (mapcar
- (function
- (lambda (block)
- (vl-remove 'nil
- (mapcar
- (function
- (lambda (attrib)
- (if (eq (strcase (vla-get-TextString attrib)) *str)
- (cons (GetName block) (vlax-vla-object->ename attrib)))))
-
- (vlax-invoke block 'GetAttributes)))))
-
- (GetNestAttribBlocks block)))
-
- nLst)))
- (print (vl-remove 'nil (apply (function append) nLst)))
- (princ))
-
-
|