
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
thank you all. this lsp is count objects per layer all dwg.
I want to add (ssget). specify a selection area.
;; Layer Count - Lee Mac
;; Prints a report of the number of objects on each layer in a drawing
(defun c:layercount ( / lst )
(vlax-for blk (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
(vlax-for obj blk
(setq lst (layercount:assoc++ (vla-get-layer obj) lst))
(if
(and
(= "AcDbBlockReference" (vla-get-objectname obj))
(= :vlax-true (vla-get-hasattributes obj))
)
(foreach att (vlax-invoke obj 'getattributes)
(setq lst (layercount:assoc++ (vla-get-layer att) lst))
)
)
)
)
(princ (layercount:padbetween "\n\n" "" "-" 62))
(princ (layercount:padbetween "\nLayer" "Objects" " " 61))
(princ (layercount:padbetween "\n" "" "-" 61))
(foreach itm (vl-sort lst '(lambda ( a b ) (> (cdr a) (cdr b))))
(princ (layercount:padbetween (strcat "\n" (car itm)) (itoa (cdr itm)) "." 61))
)
(princ (layercount:padbetween "\n" "" "-" 61))
(princ (layercount:padbetween "\nTotal" (itoa (apply '+ (mapcar 'cdr lst))) "." 61))
(princ (layercount:padbetween "\n" "" "-" 61))
(textpage)
(princ)
)
(defun layercount:assoc++ ( key lst / itm )
(if (setq itm (assoc key lst))
(subst (cons key (1+ (cdr itm))) itm lst)
(cons (cons key 1) lst)
)
)
(defun layercount:padbetween ( s1 s2 ch ln )
(
(lambda ( a b c )
(repeat (- ln (length b) (length c)) (setq c (cons a c)))
(vl-list->string (append b c))
)
(ascii ch)
(vl-string->list s1)
(vl-string->list s2)
)
)
(vl-load-com) (princ)
Solved! Go to Solution.