Hello All,
Hope everyone is staying safe and healthy! Its been long since I worked on AutoLISP to create a program. I am trying to achieve the tasks given below using ObjectDBX.
1. Gather all entities from modelspace of all xrefs. Some xrefs may contain multiple xrefs (should go as deep as it could).
2. Skip the unloaded xrefs at any level.
Here's my try but this works way slow and I don't know anyway to skip the unloaded xref from the ObjectDBX document.
(DEFUN SF$GETNESTED (VBLOCK ISDBXOPEN / VITEM)
(IF (= :VLAX-TRUE (VLA-GET-ISXREF (SETQ VITEM (VLA-ITEM (VLA-GET-BLOCKS (IF ISDBXOPEN SF$DBXDOCUMENT (VLA-GET-ACTIVEDOCUMENT (VLAX-GET-ACAD-OBJECT)))) (LM:EFFECTIVENAME VBLOCK)))))
(PROGN
(SETQ SF$SPATH (VLA-GET-PATH VBLOCK))
(IF (NOT (VL-POSITION SF$SPATH (MAPCAR 'VLA-GET-NAME SF$LDBXDOCS)))
(PROGN
(SETQ SF$DBXDOCUMENT (LM:ODBX SF$SPATH))
(SETQ SF$LDBXDOCS (CONS SF$DBXDOCUMENT SF$LDBXDOCS))))
(SETQ AXDBMODELSPACE (VLA-GET-MODELSPACE SF$DBXDOCUMENT))
(VLAX-FOR AXDBOBJECT AXDBMODELSPACE
(IF (= (VLA-GET-OBJECTNAME AXDBOBJECT) "AcDbBlockReference")
(SF$GETNESTED AXDBOBJECT T)
(SETQ SF$LENTITY (CONS (LIST AXDBOBJECT (VLA-GET-PATH VBLOCK)) SF$LENTITY)))))
(PROGN
(IF (NOT ISDBXOPEN) (SETQ SF$DBXDOCUMENT (VLA-GET-ACTIVEDOCUMENT (VLAX-GET-ACAD-OBJECT))))
(VLAX-FOR AXDBOBJECT (VLA-ITEM (VLA-GET-BLOCKS SF$DBXDOCUMENT) (LM:EFFECTIVENAME VBLOCK))
(IF (= (VLA-GET-OBJECTNAME AXDBOBJECT) "AcDbBlockReference")
(SF$GETNESTED AXDBOBJECT ISDBXOPEN)
(SETQ SF$LENTITY (CONS (LIST AXDBOBJECT (IF SF$SPATH SF$SPATH NIL)) SF$LENTITY))))))
SF$LENTITY
)
(SETQ SSOBJECT (SSGET))
(SETQ I 0)
(SETQ LOBJECTS NIL)
(REPEAT (SSLENGTH SSOBJECT)
(SETQ SF$LENTITY NIL)
(SETQ SF$SPATH NIL)
(SETQ AXDBMODELSPACE NIL)
(SETQ SUBOBJS NIL)
(SETQ VOBJECT (VLAX-ENAME->VLA-OBJECT (SSNAME SSOBJECT I)))
(IF (= (VLA-GET-OBJECTNAME VOBJECT) "AcDbBlockReference")
(SETQ SUBOBJS (SF$GETNESTED VOBJECT NIL)))
(IF SUBOBJS
(SETQ LOBJECTS (APPEND SUBOBJS LOBJECTS))
(SETQ LOBJECTS (CONS (LIST VOBJECT NIL) LOBJECTS)))
(PRINC "\rGathering objects...")
(SETQ I (1+ I)))
For effective block function :
http://www.lee-mac.com/effectivename.htmlFor ObjectDBX function :
http://www.lee-mac.com/lisp/html/ObjectDBXWrapperV1-2.htmlThis code goes on each file and collects the objects but its very slow and sometimes it throws an error as well (forgot about it).
I hope I have explained clear enough. Any help would be appreciated.
Thanks