Almost there its a table fixed a couple of bugs and done.
Tested on a dwg with 500 layers a little slow takes a few seconds.
; https://www.cadtutor.net/forum/topic/99017-layer-table-lines-and-text/
; Make a lgend of layers in dwg.
; Bt AlanH March 2026
(defun c:mktablay ( / colwidth doc lay lcol ldesc lname lst numrows objtable oldsnap pt pt1 pt2 rowheight)
(defun CreateTableStyle ( / dicts dictobj key class custobj dwglays )
(setq dicts (vla-get-Dictionaries (vla-get-ActiveDocument(vlax-get-acad-object))))
(setq dictObj (vla-Item dicts "acad_tablestyle"))
(vlax-for dname dictobj
(if (= (vla-get-name dname) "DWGLAYERS" ) ; does it exist
(princ "Found DWGLAYERS")
(setq dwglays "No")
)
)
(if (= dwglays "No")
(progn
(setq key "DWGLAYERS" class "AcDbTableStyle")
(setq custObj (vla-AddObject dictObj key class))
(vla-put-Name custObj "DWGLAYERS")
(vla-put-Description custObj "Dwg Index custom table style")
(vla-put-BitFlags custObj 1)
(vla-put-FlowDirection custObj acTableTopToBottom)
(vla-put-HorzCellMargin custObj txtht )
(vla-put-VertCellMargin custObj txtht )
(vla-SetAlignment custObj (+ acDataRow acHeaderRow acTitleRow) acMiddleCenter)
(vla-SetTextHeight custObj acDataRow txtht)
(vla-SetTextHeight custObj acHeaderRow (* txtht 1.2))
(vla-SetTextHeight custObj acTitleRow (* txtht 1.5))
(vla-SetTextStyle custObj (+ acDataRow acHeaderRow acTitleRow) "Standard")
)
)
(princ)
)
(setq oldsnap (getvar 'osmode))
(setvar 'osmode 0)
(setq txtht 1.5)
(CreateTableStyle)
(setvar 'ctablestyle "DWGLAYERS")
(setq lays (vla-get-layers (vla-get-activedocument (vlax-get-acad-object))))
(setq lst '())
(vlax-for lay lays
(setq lname (vlax-get lay 'name))
(setq lcol (vlax-get lay 'color))
(setq ldesc (vlax-get lay 'description))
(setq lst (cons (list lcol lname ldesc) lst))
)
(setq lst (vl-sort lst '(lambda (x y) (< (cadr x)(cadr y)))))
(setq pt (vlax-3d-point (getpoint "\npick a point for table ")))
(setq doc (vla-get-activedocument (vlax-get-acad-object) ))
(if (= (vla-get-activespace doc) 0)
(setq curspc (vla-get-paperspace doc))
(setq curspc (vla-get-modelspace doc))
)
(setq numrows 3)
(setq numcolumns 3)
(setq rowht 5)
(setq colwidth 50)
(setq objtable (vla-addtable curspc pt numrows numcolumns rowht colwidth))
(vla-settext objtable 0 0 "Layer Details")
(vla-settext objtable 1 0 "Color Numb. & Linetype")
(vla-settext objtable 1 1 "Layer Name")
(vla-settext objtable 1 2 "Layer description")
(setq objtable (vlax-ename->vla-object (entlast)))
(setq rowht (vla-getrowheight objtable 1))
(vla-put-regeneratetablesuppressed objtable :vlax-true)
(setq row 2)
(foreach lay lst
(princ (cadr lay))
(vla-settext objtable row 0 (strcat (rtos (car lay) 2 0) " "))
(vla-setcellalignment objtable row 0 acMiddleRight)
(vla-settext objtable row 1 (cadr lay))
(if (= (caddr lay) "")
(setq desc (cadr lay))
(setq desc (caddr lay))
)
(vla-settext objtable row 2 desc)
(setq pts (vlax-safearray->list (vlax-variant-value (VLA-GETCELLEXTENTS objtable row 0 :vlax-false))))
(setq pt1 (list (nth 0 pts)(nth 1 pts) 0.0))
(setq pt2 (list (nth 6 pts)(nth 7 pts) 0.0))
(setq vdist (/ (- (cadr pt1) (cadr pt2)) 2.0))
(setq pt1 (mapcar '+ pt1 (list 5.0 (- vdist) 0.0)))
(setq pt2 (list (nth 3 pts)(nth 4 pts) 0.0))
(setq pt2 (mapcar '+ pt2 (list (- 7.0) (- vdist) 0.0)))
(entmake (list (cons 0 "LINE") (cons 10 pt1) (cons 11 pt2) (cons 8 (cadr lay))))
(vla-insertrows objtable (setq row (1+ row)) rowht 1)
)
(vla-put-regeneratetablesuppressed objtable :vlax-false)
(setvar 'osmode oldsnap)
(princ)
)
(c:mktablay)