Polyline Length and Area by Layer

It is often the case that you want to take quantities off a drawing. This routine will give you the total length or the total area of all polylines on a selected layer. It also checks to see if polylines are closed and reports back if they are not.

;   Length/Area of Polyline by Layer
;   David Bethel May 2004 from an original idea by David Watson
;   This command will give a total area or length for all polylines on a specified layer.
(defun c:zone ( / ss la rv i tv op en) 
   (while (not ss) 
          (princ "\nPick any object on the required layer") 
          (setq ss (ssget))) 
   (initget "Length Area") 
   (setq rv (getkword "\nWould you like to measure Length/<Area> : ")) 
   (and (not rv) 
        (setq rv "Area")) 
   (setq la (cdr (assoc 8 (entget (ssname ss 0)))) 
         ss (ssget "X" (list (cons 0 "*POLYLINE") 
                             (cons 8 la))) 
          i (sslength ss) 
         tv 0 
         op 0) 
   (while (not (minusp (setq i (1- i)))) 
          (setq en (ssname ss i)) 
          (command "_.AREA" "_E" en) 
          (cond ((= rv "Length") 
                 (setq tv (+ tv (getvar "PERIMETER")))) 
                 (setq tv (+ tv (getvar "AREA"))) 
                 (if (/= (logand (cdr (assoc 70 (entget en))) 1) 1) 
                     (setq op (1+ op)))))) 
   (princ (strcat "\nTotal " rv 
                  " for layer " la 
                  " = " (rtos tv 2 2) 
                  " in " (itoa (sslength ss)) " polylines\n" 
                  (if (/= rv "Length") 
                      (strcat (itoa op) " with open polylines") ""))) 
Download zone.lsp 1.38 KB

The results for this routine are printed to the command line.

See the original topic for more details.