Author Topic: Hierarchical dissection of (namedobjdict) & (vlax-get-acad-object)  (Read 119 times)

0 Members and 1 Guest are viewing this topic.

Grrr1337

  • Swamp Rat
  • Posts: 695
Hierarchical dissection of (namedobjdict) & (vlax-get-acad-object)
« on: September 07, 2019, 06:13:06 AM »
Hi guys,
I had this idea for a while to generate a tree from (namedobjdict) or (vlax-get-acad-object), where each node would be ENAME / VLA-OBJECT..

Was inspired from this sub by Lee Mac -
Code - Auto/Visual Lisp: [Select]
  1. (defun blockcomponents ( blk / ent enx lst )
  2.   (if (setq ent (tblobjname "block" blk))
  3.     (while (setq ent (entnext ent))
  4.       (if (= "INSERT" (cdr (assoc 0 (setq enx (entget ent)))))
  5.         (setq lst (vl-list* (blockcomponents (cdr (assoc 2 enx))) ent lst))
  6.         (setq lst (cons ent lst))
  7.       )
  8.     )
  9.   )
  10.   (reverse lst)
  11. )

Basically these subs dig recursively, but also store a cache-list of the proccessed ENAMEs/OBJECTs...
Also some mapping is applied so each entry is described as "<EntityType> : <EntityName(OPTIONAL)> [HANDLE]" (for a better readability).

For enames (might need refining, but I'm about to put it in my lisp-lib and don't touch it soon) -
Code - Auto/Visual Lisp: [Select]
  1. ; Dissection of (namedobjdict) - hierarchical
  2. ; After obtaining (_Inspect e).. use (entget (handent h)) || (vlax-dump-object (vlax-ename->vla-object (handent h)) t)
  3. ; (_Inspect (namedobjdict))
  4. ; entry - [ENAME] || [HANDLE]
  5. (defun _Inspect ( entry / r )
  6.   (setq r ; <--- Inspect 'n' Pretty Print, returns hierarchical structure, where each entry is described as "<EntityType> : <EntityName(OPTIONAL)> [HANDLE]"
  7.     ( (lambda ( f c e ) (f (cond ((eq 'ENAME (type e)) e) ((handent (cond (e)("")))))))
  8.       (lambda ( e / L ) ; f
  9.         (cond
  10.           ( (not (eq 'ENAME (type e))) nil)
  11.           ( (member e c) nil )
  12.           ( (setq L (entget e)) (setq c (cons e c))
  13.             (append
  14.               (list
  15.                 ( ; this block maps-to/modifies 'L', standard return of the elist should be 'L'
  16.                   (lambda ( / k v h err ) ; https://damassets.autodesk.net/content/dam/autodesk/www/developer-network/platform-technologies/autocad-dxf-archive/acad_dxf_2009.pdf
  17.                     (setq k (cdr (assoc 0 L)))
  18.                     (or
  19.                       (setq v
  20.                         (cond
  21.                           ( (not (vl-catch-all-error-p (setq err (vl-catch-all-apply (function (lambda nil (vla-get-Name (vlax-ename->vla-object e)))))))) err)
  22.                           ("")
  23.                         )
  24.                       ); setq v
  25.                       (cond
  26.                         ( (member k '("MLEADERSTYLE" "TABLESTYLE")) (setq v (cdr (assoc 3 L))) ) ; "DICTIONARY"
  27.                         ( (member k '("DICTIONARYVAR" "MATERIAL")) (setq v (cdr (assoc 1 L))) )
  28.                         ( (member k '("MLINESTYLE" "VISUALSTYLE" "BLOCK" "BLOCK_RECORD")) (setq v (cdr (assoc 2 L))))
  29.                         ( (= k "TABLESTYLE") (setq v (cdr (assoc 7 L))) )
  30.                         ( (= k "SCALE") (setq v (cdr (assoc 300 L))) )
  31.                         ( k )
  32.                       ); cond
  33.                     ); or
  34.                     (strcat
  35.                       k
  36.                       (if v (strcat ": " v) "")
  37.                       (if (setq h (cdr (assoc 5 L))) (strcat " " "[" h "]") "")
  38.                     ); strcat
  39.                   ); lambda
  40.                 )
  41.                 ; (cdr (assoc 5 L))
  42.               ); list
  43.               (vl-remove nil (mapcar (function f) (mapcar (function cdr) L)))
  44.               (f (entnext e))
  45.             )
  46.           )
  47.         ); cond
  48.       ); f
  49.       nil ; cache
  50.       entry ; (namedobjdict)
  51.     )
  52.   ); setq r
  53. ); defun _Inspect

Sample return -
Code - Auto/Visual Lisp: [Select]
  1. _$ (_Inspect (namedobjdict)) ; <--- Inspect 'n' Pretty Print
  2. ("DICTIONARY:  [C]"
  3.   ("XRECORD: ACAD_CIP_PREVIOUS_PRODUCT_INFO [216]")
  4.   ("DICTIONARY: ACAD_COLOR [6B]")
  5.   ("DICTIONARY: ACAD_DETAILVIEWSTYLE [21B]"
  6.     ("ACDBDETAILVIEWSTYLE:  [21C]"
  7.       ("DICTIONARY:  [236]")
  8.       ("STYLE: Standard [11]" ("TABLE:  [3]"))
  9.       ("LTYPE: Continuous [16]" ("TABLE:  [5]"))
  10.     )
  11.   )
  12.   ("DICTIONARY:  [D]")
  13.   ("DICTIONARY:  [1A]"
  14.     ("LAYOUT: Layout1 [D3]"
  15.       ("BLOCK_RECORD: *Paper_Space [D2]"
  16.         ("TABLE:  [1]")
  17.         ("BLOCK:  [D4]" ("ENDBLK:  [D5]"))
  18.       )
  19.     )
  20.     ("LAYOUT: Layout2 [D7]"
  21.       ("BLOCK_RECORD: *Paper_Space0 [D6]"
  22.         ("BLOCK:  [D8]" ("ENDBLK:  [D9]"))
  23.       )
  24.     )
  25.     ("LAYOUT: Model [22]"
  26.       ("DICTIONARY:  [205]")
  27.       ("BLOCK_RECORD: *Model_Space [1F]"
  28.         ("DICTIONARY:  [1CE]")
  29.         ("BLOCK:  [20]"
  30.           ("LINE:  [3F9]"
  31.             "TEXT:  [3FA]"       "LINE:  [3FB]"
  32.             "TEXT:  [3FC]"       "LINE:  [3FD]"
  33.             "TEXT:  [3FE]"       "LINE:  [3FF]"
  34.             "TEXT:  [400]"       "LINE:  [401]"
  35.             "TEXT:  [402]"       "LINE:  [403]"
  36.             "TEXT:  [404]"       "LINE:  [405]"
  37.             "TEXT:  [406]"       "LINE:  [407]"
  38.             "TEXT:  [408]"       "LINE:  [409]"
  39.             "TEXT:  [40A]"       "LINE:  [40B]"
  40.             "TEXT:  [40C]"       "LINE:  [40D]"
  41.             "TEXT:  [40E]"       "LINE:  [40F]"
  42.             "TEXT:  [410]"       "LINE:  [411]"
  43.             "TEXT:  [412]"       "LINE:  [413]"
  44.             "TEXT:  [414]"       "LINE:  [415]"
  45.             "TEXT:  [416]"       "LINE:  [417]"
  46.             "TEXT:  [418]"       "LINE:  [419]"
  47.             "TEXT:  [41A]"       "LINE:  [41B]"
  48.             "TEXT:  [41C]"       "LINE:  [41D]"
  49.             "TEXT:  [41E]"       "LINE:  [41F]"
  50.             "TEXT:  [420]"       "LINE:  [421]"
  51.             "TEXT:  [422]"       "LINE:  [423]"
  52.             "TEXT:  [424]"
  53.           )
  54.         )
  55.       )
  56.       ("VPORT: *Active [EA]"
  57.         ("TABLE:  [8]")
  58.         ("VISUALSTYLE:  [F5]"
  59.           ("DICTIONARY: ACAD_VISUALSTYLE [EF]"
  60.             ("VISUALSTYLE:  [F4]")
  61.             ("VISUALSTYLE:  [FB]")
  62.             ("VISUALSTYLE:  [FF]")
  63.             ("VISUALSTYLE:  [F8]")
  64.             ("VISUALSTYLE:  [FA]")
  65.             ("VISUALSTYLE:  [1E6]")
  66.             ("VISUALSTYLE:  [FE]")
  67.             ("VISUALSTYLE:  [F0]")
  68.             ("VISUALSTYLE:  [F1]")
  69.             ("VISUALSTYLE:  [F2]")
  70.             ("VISUALSTYLE:  [F3]")
  71.             ("VISUALSTYLE:  [F7]")
  72.             ("VISUALSTYLE:  [1E4]")
  73.             ("VISUALSTYLE:  [FD]")
  74.             ("VISUALSTYLE:  [1E5]")
  75.             ("VISUALSTYLE:  [F9]")
  76.             ("VISUALSTYLE:  [1F3]")
  77.             ("VISUALSTYLE:  [1F2]")
  78.             ("VISUALSTYLE:  [1EF]")
  79.             ("VISUALSTYLE:  [1F0]")
  80.             ("VISUALSTYLE:  [FC]")
  81.             ("VISUALSTYLE:  [F6]")
  82.             ("VISUALSTYLE:  [1F1]")
  83.           )
  84.         )
  85.       )
  86.     )
  87.   )
  88.   ("DICTIONARY:  [6A]"
  89.     ("MATERIAL: ByBlock [ED]"
  90.       ("DICTIONARY:  [1F9]" ("XRECORD: FBXASSET [1FA]"))
  91.     )
  92.     ("MATERIAL: ByLayer [EC]"
  93.       ("DICTIONARY:  [1F7]" ("XRECORD: FBXASSET [1F8]"))
  94.     )
  95.     ("MATERIAL: Global [EE]"
  96.       ("DICTIONARY:  [173]"
  97.         ("XRECORD: BUMPTILE [175]")
  98.         ("XRECORD: DIFFUSETILE [174]")
  99.         ("XRECORD: FBXASSET [1FB]")
  100.         ("XRECORD: OPACITYTILE [176]")
  101.         ("XRECORD: REFLECTIONTILE [177]")
  102.       )
  103.     )
  104.   )
  105.   ("DICTIONARY: ACAD_MLEADERSTYLE [12D]"
  106.     ("MLEADERSTYLE: Annotative [13B]" ("LTYPE: ByBlock [14]"))
  107.     ("MLEADERSTYLE: Standard [12E]")
  108.     ("MLEADERSTYLE: VLD_[1-100]_Open30_Spline_CenGoth_30 [299]"
  109.       ("BLOCK_RECORD: _Open30 [292]"
  110.         ("BLOCK:  [296]"
  111.           ("LINE:  [293]" "LINE:  [294]" "LINE:  [295]")
  112.         )
  113.       )
  114.       ("STYLE: VLD_Century Gothic [26C]")
  115.     )
  116.     ("MLEADERSTYLE: VLD_[1-100]_Open30_Straight_CenGoth_30 [29D]"
  117.     )
  118.     ("MLEADERSTYLE: VLD_[1-100]_Origin_Spline_BNI_30 [2A1]"
  119.       ("BLOCK_RECORD: _Origin [285]"
  120.         ("BLOCK:  [288]" ("CIRCLE:  [286]" "LINE:  [287]"))
  121.       )
  122.       ("STYLE: VLD_Bahamas Normal Italic [26D]")
  123.     )
  124.     ("MLEADERSTYLE: VLD_[1-100]_Origin_Spline_CenGoth_30 [28B]")
  125.     ("MLEADERSTYLE: VLD_[1-100]_Origin_Straight_BNI_30 [2A5]")
  126.     ("MLEADERSTYLE: VLD_[1-100]_Origin_Straight_CenGoth_30 [28F]")
  127.     ("MLEADERSTYLE: VLD_[1-200]_Open30_Spline_CenGoth_60 [29A]")
  128.     ("MLEADERSTYLE: VLD_[1-200]_Open30_Straight_CenGoth_60 [29E]")
  129.     ("MLEADERSTYLE: VLD_[1-200]_Origin_Spline_BNI_60 [2A2]")
  130.     ("MLEADERSTYLE: VLD_[1-200]_Origin_Spline_CenGoth_60 [28C]")
  131.     ("MLEADERSTYLE: VLD_[1-200]_Origin_Straight_BNI_60 [2A6]")
  132.     ("MLEADERSTYLE: VLD_[1-200]_Origin_Straight_CenGoth_60 [290]")
  133.     ("MLEADERSTYLE: VLD_[1-500]_Open30_Spline_CenGoth_150 [29B]")
  134.     ("MLEADERSTYLE: VLD_[1-500]_Open30_Straight_CenGoth_150 [29F]")
  135.     ("MLEADERSTYLE: VLD_[1-500]_Origin_Spline_BNI_150 [2A3]")
  136.     ("MLEADERSTYLE: VLD_[1-500]_Origin_Spline_CenGoth_150 [28D]")
  137.     ("MLEADERSTYLE: VLD_[1-500]_Origin_Straight_BNI_150 [2A7]")
  138.     ("MLEADERSTYLE: VLD_[1-500]_Origin_Straight_CenGoth_150 [291]")
  139.     ("MLEADERSTYLE: VLD_[1-50]_Open30_Spline_CenGoth_15 [298]")
  140.     ("MLEADERSTYLE: VLD_[1-50]_Open30_Straight_CenGoth_15 [29C]")
  141.     ("MLEADERSTYLE: VLD_[1-50]_Origin_Spline_BNI_15 [2A0]")
  142.     ("MLEADERSTYLE: VLD_[1-50]_Origin_Spline_CenGoth_15 [28A]")
  143.     ("MLEADERSTYLE: VLD_[1-50]_Origin_Straight_BNI_15 [2A4]")
  144.     ("MLEADERSTYLE: VLD_[1-50]_Origin_Straight_CenGoth_15 [28E]")
  145.   )
  146.   ("DICTIONARY: ACAD_MLINESTYLE [17]" ("MLINESTYLE:  [18]"))
  147.   ("DICTIONARY:  [19]")
  148.   ("ACDBDICTIONARYWDFLT: ACAD_PLOTSTYLENAME [E]"
  149.     ("ACDBPLACEHOLDER:  [F]")
  150.   )
  151.   ("DICTIONARY: ACAD_SCALELIST [10C]"
  152.     ("SCALE:  [10D]")
  153.     ("SCALE:  [1BE]")
  154.     ("SCALE:  [1BF]")
  155.     ("SCALE:  [1C0]")
  156.     ("SCALE:  [1C1]")
  157.     ("SCALE:  [1C2]")
  158.     ("SCALE:  [1C3]")
  159.     ("SCALE:  [1C4]")
  160.     ("SCALE:  [1C5]")
  161.     ("SCALE:  [1C6]")
  162.     ("SCALE:  [1C7]")
  163.     ("SCALE:  [1C8]")
  164.     ("SCALE:  [1C9]")
  165.     ("SCALE:  [1CA]")
  166.     ("SCALE:  [1CB]")
  167.     ("SCALE:  [1CC]")
  168.     ("SCALE:  [1CD]")
  169.   )
  170.   ("DICTIONARY: ACAD_SECTIONVIEWSTYLE [219]"
  171.     ("ACDBSECTIONVIEWSTYLE:  [21A]" ("DICTIONARY:  [234]"))
  172.   )
  173.   ("DICTIONARY: ACAD_TABLESTYLE [7E]"
  174.     ("TABLESTYLE: Standard [7F]" ("DICTIONARY:  [162]"))
  175.   )
  176.   ("DICTIONARY: AcDbVariableDictionary [5E]"
  177.     ("DICTIONARYVAR:  [146]")
  178.     ("DICTIONARYVAR:  [259]")
  179.     ("DICTIONARYVAR:  [25A]")
  180.     ("DICTIONARYVAR:  [145]")
  181.     ("DICTIONARYVAR:  [84]")
  182.     ("DICTIONARYVAR:  [227]")
  183.     ("DICTIONARYVAR:  [228]")
  184.     ("DICTIONARYVAR:  [5F]")
  185.     ("DICTIONARYVAR:  [63]")
  186.     ("DICTIONARYVAR:  [1AE]")
  187.     ("DICTIONARYVAR:  [1AF]")
  188.   )
  189. )


For objects -
Code - Auto/Visual Lisp: [Select]
  1. ; Dissection of (vlax-get-acad-object) - hierarchical
  2. ; entry - [ENAME] || [HANDLE]
  3. ; BrowseInCollections - bool [T/nil] - NOTE: If set to 'T' then you'll have to wait for a while
  4. (defun _InspectObject ( entry BrowseInCollections / r )
  5.   (setq r
  6.     (
  7.       (lambda ( DumpAssocList AtomsPrps f c o / e )
  8.         (cond
  9.           ( (not DumpAssocList) (alert "\nNo 'DumpAssocList' definiton") )
  10.           ( (eq 'VLA-OBJECT (type o)) (f o) )
  11.           ( (and (eq 'STR (type o)) (setq e (handent o)) (setq o (vlax-ename->vla-object e))) (f o) )
  12.         ); cond
  13.       )
  14.       (lambda ( o / prps ) ; DumpAssocList - removed method inspection & optimised with 'AtomsPrps'
  15.         (cond
  16.           ( (not (eq 'VLA-OBJECT (type o))) nil )
  17.           ( (not (vl-catch-all-apply 'vlax-read-enabled-p (list o))) nil ) ; error-trap required, since: _$ (DumpAssocList (vlax-get-acad-object)) -> Error: unable to get ObjectID: #<VLA-OBJECT IAcadApplication 00007ff7d4109110> _1$
  18.           (t
  19.             (or AtomsPrps
  20.               (setq AtomsPrps
  21.                 (mapcar (function (lambda (x) (vl-string-left-trim "vla-get" (vl-symbol-name x))))
  22.                   (vl-remove-if-not
  23.                     (function (lambda (x) (wcmatch (vl-symbol-name x) "vla-get*")))
  24.                     (atoms-family 0)
  25.                   )
  26.                 )
  27.               )
  28.             ); or
  29.             (setq prps (vl-remove-if-not (function (lambda (x) (vlax-property-available-p o x))) AtomsPrps))
  30.            
  31.             (list
  32.               (mapcar (function (lambda (x / v) (list x (if (vl-catch-all-error-p (setq v (vl-catch-all-apply 'vlax-get-property (list o x)))) nil v)) ))
  33.                 (vl-sort prps (function <))
  34.               )
  35.               ; (if mtds (vl-sort mtds (function <)))
  36.             )
  37.           ); t
  38.         )
  39.       ); lambda DumpAssocList
  40.       nil ; AtomsPrps - cache for DumpAssocList
  41.       (lambda ( o / L ) ; f
  42.         (cond
  43.           ( (not (eq 'VLA-OBJECT (type o))) nil)
  44.           ( (member o c) nil)
  45.           ( (setq L (car (DumpAssocList o))) (setq c (cons o c))
  46.             (append
  47.               (list
  48.                 ( ; this block maps-to/formats/modifies 'L', standard return of the elist should be 'L'
  49.                   (lambda ( / )  
  50.                     (apply
  51.                       (function
  52.                         (lambda (typ nm han)
  53.                           (strcat typ ": " nm " " "[" han "]")
  54.                         )
  55.                       )
  56.                       (mapcar
  57.                         (function
  58.                           (lambda (f / err)
  59.                             (cond
  60.                               ( (vl-catch-all-error-p (setq err (vl-catch-all-apply f (list o) ))) "-")
  61.                               ( err )
  62.                             ); cond
  63.                           )
  64.                         )
  65.                         '(vla-get-ObjectName vla-get-Name vla-get-Handle)
  66.                       ); mapcar
  67.                     ); apply
  68.                   ); lambda
  69.                 )
  70.                 (if (and BrowseInCollections (vlax-property-available-p o 'Count))
  71.                   (
  72.                     (lambda ( / tmp )
  73.                       (vlax-for x o
  74.                         (setq tmp (cons x tmp))
  75.                       )
  76.                       (if tmp (list (mapcar (function f) (reverse tmp))))
  77.                     ); lambda
  78.                   )
  79.                 ); if
  80.                 ; (cdr (assoc 5 L))
  81.               ); list
  82.               (vl-remove nil (mapcar (function f) (mapcar (function cadr) L)))
  83.             )
  84.           )
  85.         ); cond
  86.       ); lambda ; f
  87.       nil ; cache
  88.       entry ; (vlax-get-acad-object)
  89.     )
  90.   ); setq r
  91. ); defun _InspectObject

Sample return(s) -
Code - Auto/Visual Lisp: [Select]
  1. _$ (_InspectObject (vlax-get-acad-object) nil)
  2. ("-: AutoCAD [-]"
  3.   nil
  4.   ("-: Drawing1.dwg [-]"
  5.     nil
  6.     ("AcDbDimStyleTableRecord: VLD_BNI-[1-1000]-Origin2-300 [284]"
  7.       nil
  8.       ("-: - [-]"
  9.         nil
  10.         ("AcDbBlockTable: - [1]" nil)
  11.         ("AcDbDictionary: - [C]" nil)
  12.         ("AcDbDimStyleTable: - [A]" nil)
  13.         ("-: - [-]" nil)
  14.         ("AcDbDictionary: - [D]" nil)
  15.         ("AcDbLayerTable: - [2]" nil)
  16.         ("AcDbDictionary: - [1A]" nil)
  17.         ("AcDbLinetypeTable: - [5]" nil)
  18.         ("AcDbDictionary: - [6A]" nil)
  19.         ("AcDbBlockTableRecord: *Model_Space [1F]"
  20.           nil
  21.           ("AcDbLayout: Model [22]" nil)
  22.         )
  23.         ("AcDbBlockTableRecord: *Paper_Space [D2]"
  24.           nil
  25.           ("AcDbLayout: Layout1 [D3]" nil)
  26.         )
  27.         ("AcDbDictionary: - [19]" nil)
  28.         ("-: - [-]" nil)
  29.         ("AcDbRegAppTable: - [9]" nil)
  30.         ("-: - [-]" nil)
  31.         ("AcDbTextStyleTable: - [3]" nil)
  32.         ("AcDbUCSTable: - [7]" nil)
  33.         ("AcDbViewportTable: - [8]" nil)
  34.         ("AcDbViewTable: - [6]" nil)
  35.       )
  36.     )
  37.     ("AcDbLayerTableRecord: VLD_AnnotateLINES [3DE]"
  38.       nil
  39.       ("-: - [-]" nil)
  40.     )
  41.     ("AcDbLinetypeTableRecord: ByLayer [15]" nil)
  42.     ("AcDbMaterial: ByLayer [EC]" nil)
  43.     ("-: CURRENT [-]" nil)
  44.     ("AcDbTextStyleTableRecord: Standard [11]" nil)
  45.     ("AcDbViewportTableRecord: *Active [EA]" nil)
  46.     ("-: PICKFIRST [-]" nil)
  47.     ("-: - [-]" nil)
  48.     ("-: - [-]" nil)
  49.   )
  50.   ("-: - [-]" nil)
  51.   ("-: - [-]" nil)
  52.   ("-: - [-]" nil)
  53.   ("-: - [-]"
  54.     nil
  55.     ("-: - [-]" nil)
  56.     ("-: - [-]" nil)
  57.     ("-: - [-]" nil)
  58.     ("-: - [-]" nil)
  59.     ("-: - [-]" nil)
  60.     ("-: - [-]" nil)
  61.     ("-: - [-]" nil)
  62.     ("-: - [-]" nil)
  63.     ("-: - [-]" nil)
  64.   )
  65.   ("-: - [-]" nil)
  66. )

Code - Auto/Visual Lisp: [Select]
  1. _$ (_InspectObject (vlax-ename->vla-object (car (entsel))) nil)
  2. ("AcDbLine: - [411]"
  3.   nil
  4.   ("-: AutoCAD [-]"
  5.     nil
  6.     ("-: Drawing1.dwg [-]"
  7.       nil
  8.       ("AcDbDimStyleTableRecord: VLD_BNI-[1-1000]-Origin2-300 [284]"
  9.         nil
  10.         ("-: - [-]"
  11.           nil
  12.           ("AcDbBlockTable: - [1]" nil)
  13.           ("AcDbDictionary: - [C]" nil)
  14.           ("AcDbDimStyleTable: - [A]" nil)
  15.           ("-: - [-]" nil)
  16.           ("AcDbDictionary: - [D]" nil)
  17.           ("AcDbLayerTable: - [2]" nil)
  18.           ("AcDbDictionary: - [1A]" nil)
  19.           ("AcDbLinetypeTable: - [5]" nil)
  20.           ("AcDbDictionary: - [6A]" nil)
  21.           ("AcDbBlockTableRecord: *Model_Space [1F]"
  22.             nil
  23.             ("AcDbLayout: Model [22]" nil)
  24.           )
  25.           ("AcDbBlockTableRecord: *Paper_Space [D2]"
  26.             nil
  27.             ("AcDbLayout: Layout1 [D3]" nil)
  28.           )
  29.           ("AcDbDictionary: - [19]" nil)
  30.           ("-: - [-]" nil)
  31.           ("AcDbRegAppTable: - [9]" nil)
  32.           ("-: - [-]" nil)
  33.           ("AcDbTextStyleTable: - [3]" nil)
  34.           ("AcDbUCSTable: - [7]" nil)
  35.           ("AcDbViewportTable: - [8]" nil)
  36.           ("AcDbViewTable: - [6]" nil)
  37.         )
  38.       )
  39.       ("AcDbLayerTableRecord: VLD_AnnotateLINES [3DE]"
  40.         nil
  41.         ("-: - [-]" nil)
  42.       )
  43.       ("AcDbLinetypeTableRecord: ByLayer [15]" nil)
  44.       ("AcDbMaterial: ByLayer [EC]" nil)
  45.       ("-: CURRENT [-]" nil)
  46.       ("AcDbTextStyleTableRecord: Standard [11]" nil)
  47.       ("AcDbViewportTableRecord: *Active [EA]" nil)
  48.       ("-: PICKFIRST [-]" nil)
  49.       ("-: - [-]" nil)
  50.       ("-: - [-]" nil)
  51.     )
  52.     ("-: - [-]" nil)
  53.     ("-: - [-]" nil)
  54.     ("-: - [-]" nil)
  55.     ("-: - [-]"
  56.       nil
  57.       ("-: - [-]" nil)
  58.       ("-: - [-]" nil)
  59.       ("-: - [-]" nil)
  60.       ("-: - [-]" nil)
  61.       ("-: - [-]" nil)
  62.       ("-: - [-]" nil)
  63.       ("-: - [-]" nil)
  64.       ("-: - [-]" nil)
  65.       ("-: - [-]" nil)
  66.     )
  67.     ("-: - [-]" nil)
  68.   )
  69.   ("-: - [-]" nil)
  70.   ("-: - [-]" nil)
  71. )

Try this yourselves -
Code - Auto/Visual Lisp: [Select]
  1. (_InspectObject (vlax-get-acad-object) t) ; returns a humongous list-tree

Whats the point of this ? - I don't know, just thought to share this idea.
Maybe you guys will come up better/optimised suggestions. :)


(apply ''((a b c)(a b c))
  '(
    (( f L ) (apply 'strcat (f L)))
    (( L ) (if L (cons (chr (car L)) (f (cdr L)))))
    (72 101 108 108 111 32 87 111 114 108 100)
  )
)