This will calculate total length of polylines on a specific layer. First object pick sets layer then select object needed.
(defun C:PLEN ( / layname s count len en ed count )
(setvar "CMDECHO" 0) ;0 to hide command echos
(setq layname (cdr (assoc 8
(entget (car (entsel "Select entity to define layer totaled: "))))))
(prompt "\nSelect items to total:")
(setq
S (ssget) ; Get all entities marked by user
count 0
len 0
)
(lfeed 3)
(setvar "OSMODE" 0)
(repeat (sslength S)
(setq
en (ssname S count)
ed (entget en)
count (1+ count)
)
(if (and (= (dxf 8 ed) layname ) (= (dxf 0 ed) "POLYLINE")) (progn
(command ;Get area value
".AREA"
"E"
en
)
(setq len (+ len (getvar "perimeter")))
))
(if (and (= (dxf 8 ed) layname ) (= (dxf 0 ed) "REGION")) (progn
(command ;Get area value
".AREA"
"E"
en
)
(setq len (+ len (getvar "perimeter")))
))
(if (and (= (dxf 8 ed) layname ) (= (dxf 0 ed) "LWPOLYLINE")) (progn
(command ;Get area value
".AREA"
"E"
en
)
(setq len (+ len (getvar "perimeter")))
))
(if (and (= (dxf 8 ed) layname ) (= (dxf 0 ed) "SPLINE")) (progn
(command ;Get area value
".AREA"
"E"
en
)
(setq len (+ len (getvar "perimeter")))
))
(if (and (= (dxf 8 ed) layname ) (= (dxf 0 ed) "CIRCLE")) (progn
(command ;Get area value
".AREA"
"E"
en
)
(setq len (+ len (getvar "perimeter")))
))
); end repeat
(alert (strcat "\nThe Total Length of Selected Closed Polylines on Layer \""(princ layname)"\" is: "(rtos len (getvar "lunits") 0)))
(prompt (strcat "\n "(rtos len (getvar "lunits") 0)))
(princ)
);defun
;;;----------------------------------------------------------
;;;| LFEED |
;;;| Prints the number of line feeds passed to it. |
;;;| |
;;;----------------------------------------------------------
(defun lfeed (
count ; number of line feeds to print
)
(repeat (1- count) (princ "\n "))
(princ "\n")
(princ)
); defun
;;;*
(if debug (princ "lfeed loaded\n"))
;;;----------------------------------------------------------
;;;| DXF |
;;;| Takes an integer dxf code and an entity or entity data |
;;;| list and returns the data element of the association |
;;;| pair. |
;;;| |
;;;----------------------------------------------------------
(defun dxf (
code ; DXF code
ed ; Entity name or data list
)
; Turn entity name into entity data
(if (and (not (listp ed)) ed) (setq ed (entget ed)))
(cdr (assoc code ed)) ; Find association pair & strip 1st element
); defun
;;;*
(if debug (princ "dxf loaded\n"))
(C:plen)