Before diving into LISP, let’s acknowledge the pain points of vanilla AutoCAD:
Copy the code below into Notepad and save it as TOTALAREA.LSP . total area autocad lisp
;; Calculate area based on object type (cond ;; For objects with direct Area property ((member obj-name '("CIRCLE" "ELLIPSE" "HATCH" "LWPOLYLINE" "POLYLINE" "REGION" "SPLINE")) (command "._AREA" "_O" obj) (setq area (getvar "AREA")) (if (> area 0) (progn (setq total-area (+ total-area area)) (setq obj-list (cons (list obj-name area) obj-list)) ) ) ) Before diving into LISP, let’s acknowledge the pain
(defun C:AT ( / ss area_list total sf) (setq sf (getreal "\nConversion factor (1 drawing unit = ? feet): ")) (if (= sf nil) (setq sf 1.0)) (setq ss (ssget '((0 . "LWPOLYLINE,POLYLINE,CIRCLE,ELLIPSE,REGION")))) (if ss (progn (setq total 0.0) (repeat (setq i (sslength ss)) (setq ent (ssname ss (setq i (1- i)))) (setq area (vlax-curve-getArea ent)) (setq total (+ total area)) ) (setq total_sqft (* total sf sf)) (setq total_acres (/ total_sqft 43560.0)) (alert (strcat "Total Area: " (rtos total_acres 2 2) " Acres")) ;; Optional: Insert text (command "_.MTEXT" (getpoint "\nPick text insertion point: ") "J" "TL" "W" "0" (strcat "TOTAL AREA = " (rtos total_acres 2 2) " ACRES") "") ) (princ "\nNo objects selected.") ) (princ) ) Before diving into LISP
;;; Load message (princ "\nTOTALAREA.LSP loaded successfully!") (princ "\nType 'TOTALAREA' or 'TA' to calculate total area.") (princ)
: Use the MEASUREGEOM command and select the "Quick" or "Area" option. You can hold Shift while clicking in various closed areas to see a running cumulative total for area and perimeter.