The figure you calculate area in AutoCAD for goes straight into a quantity schedule, then a cost estimate, then a contract. One wrong number spoils the whole chain, and the software never tells you it just went wrong.
This article gathers the four ways to get an area, says which suits which moment, then spends most of its length on two silent traps that guides rarely mention. For the full drafting and quantity workflow, see the AutoCAD for Construction course.
Where to start the area command
Four ways in, read straight out of the 2027 configuration files.
| Route | Detail |
|---|---|
| Full command | AREA |
| Alias | AA |
| Ribbon | Home → Utilities → Measure drop-down → Area |
| Classic menu | Tools → Inquiry → Area |
| Toolbar | Measurement Tools → Area |
The ribbon button sits in the Utilities panel, inside a drop-down with the other measuring tools, which is why few people notice it. The alias is two letters, AA.
The prompts, step by step
The middle column is copied verbatim from the 2027 release.
| Step | What the program asks | What you do |
|---|---|---|
| 1 | Specify first corner point or [Object/Add area/Subtract area] <Object>: | Enter to accept Object, then click the shape |
| 2 | or pick the corners one by one | Click each vertex, then Enter |
The most important detail is the default in angle brackets: Object. Pressing Enter straight away makes the program wait for a closed shape and then report its area exactly, with no corners to pick.
The other two options are for adding and subtracting: type A and pick several shapes for a running total, or S and pick the openings to take them off. That is how a floor area minus its stair void is measured without a calculator.
The area command in AutoCAD: the real prompts and three options
The Autodesk AREA page describes it in one line: "Calculates the area and perimeter of objects or of defined areas". Note the words and perimeter — the command returns two numbers, not one.
Type AA and Enter. Here is the prompt on AutoCAD 2027, copied from the screen.
Specify first corner point or [Object/Add area/Subtract area] <Object>:
Those three options do three different jobs:
- Object is what you use nine times out of ten. Click a closed shape and both figures print.
- Add area turns on add mode. Pick the first shape, then the second, and a running total builds up.
- Subtract area takes away. This is how you measure a floor with a stairwell: add the slab, subtract the opening.
No prompt asks for a quantity, and none lets you window-select several shapes at once. The command takes one object at a time.
Area = 31415.9265, Circumference = 628.3185
That is the real result of measuring a circle of radius 100 at the Institute. Check it by hand: π times 100 squared is exactly 31415.9265.
Calculate perimeter in AutoCAD: one command, but the label changes
Beginners often think the software failed when no Perimeter label appears. In fact it is only naming the geometry correctly.
That label earns its keep: it tells you whether the shape is closed without opening the Properties palette to read the Closed row. It is also the key to the trap below.
An unclosed outline: the silent trap that costs the most
This is the part worth reading twice. Autodesk states it outright on the command page:
"If you select an open polyline, the area is calculated as if a line were drawn from the last point entered to the first. When the perimeter is calculated that line length is ignored."
In other words, on an open outline the area comes out as though the shape were closed, while the perimeter ignores the very edge that is missing. Two numbers describing two different shapes, with no warning of any kind.
Take an L-shaped outline 400 wide and 400 high with a 200 by 200 corner cut away. While the outline is still open:
Area = 120000.0000, Length = 1200.0000
Closing that same outline and measuring again:
Area = 120000.0000, Perimeter = 1600.0000
The area does not change by a single digit. The perimeter is short by 400, exactly the missing edge. And the label switched from Length to Perimeter. On a real plan, where the two ends sit a few thousandths of a unit apart, the eye cannot see it and neither can the print, but the schedule is wrong.
Measure area in AutoCAD when the shape is drawn from loose lines
A real floor plan rarely comes with a ready-made closed outline. Walls are separate LINE objects, and AREA will not join them for you.
You cannot calculate area in AutoCAD straight from loose lines, so one of two routes has to come first, and the BOUNDARY page covers the faster one:
PEDITwithMultipleand thenJointurns a set of loose segments into one polyline. This edits the original lines, which suits you when the outline is worth keeping.BOUNDARY, aliasedBOtouches nothing. It looks at the lines around the point you click and builds an extra polyline around that region. Delete it after measuring if you like.
Autodesk points to this route from the AREA page itself: "You can also use BOUNDARY to create a closed polyline or region and then use LIST or the Properties palette to find the area".
One habit worth forming: put those outlines on a layer of their own and turn off that layer's plot column. The issued drawing looks untouched, and you keep the outlines for a later check.
Hatch area in AutoCAD: the figure to trust
A hatch is not only there to be looked at. Select one, open the Properties palette with Ctrl and 1, and the Area box is right there — with the islands already deducted, so columns, walls and service ducts inside it are already out of the figure.
That makes it a better floor figure than measuring an outline and subtracting by hand. How to place a hatch and what its options do is covered in the HATCH command in CAD.
One thing several guides state backwards: AREA does accept a hatch. Selecting a 150 by 200 hatch with the Object option returns:
Area = 30000.0000, Perimeter = 700.0000
So a hatch yields a perimeter too, even though its Properties palette has no perimeter row at all.
Cumulative area in AutoCAD: why you rarely need a lisp file
Here is the real reason people go hunting for a lisp routine. Select every hatch, open Properties, and the Area box reads *VARIES* rather than a number. People conclude the software cannot add up, and go looking for a download.
Look at the row immediately below Area. It is called Cumulative Area, and it holds the sum already. We hatched three regions of 60000, 40000 and 30000 square units and selected all three: the palette read Hatch (3), the Area box read *VARIES*, and the Cumulative row read exactly 130000.
To grab every hatch in a drawing quickly, run QSELECT, set Object type to Hatch and accept. Three steps, no external file, and no unknown code running on your machine.
A lisp file still earns its place elsewhere: writing results into a table, labelling each room with its area, or repeating one job across hundreds of files. For a single total, you do not need to download a file from a stranger.
A lisp for total area, with six commands
Two jobs the built-in commands still do, only slowly: adding up dozens of shapes, and writing the figure into each room. We wrote a file for exactly those two.
| Command | What it does |
|---|---|
TDT | select any way you like, then add up the closed shapes |
TDTX | add up every closed shape in the drawing, no selection needed |
TDTP | true covered area, where an overlap counts once |
TDTPX | true covered area of the whole drawing |
GDT | select several shapes and write the figure inside each |
GDTX | write the figure inside every closed shape in the drawing |
The file accepts every AutoCAD selection method: single picks, window, crossing, a WP or CP polygon lasso, an F fence, or typing ALL. It also accepts every entity type that has an area rather than hatches alone, so closed polylines, circles, ellipses, closed splines and regions all count.
An unclosed shape is skipped, and the routine says how many it skipped, instead of quietly closing it for you and returning a wrong number the way the trap earlier in this article does. The unit factor is read from INSUNITS, so a drawing set up in metres no longer comes out a million times off.
Command names: where popular lisp files overwrite built-in commands
The acad.pgp alias file of AutoCAD 2027 holds 387 shortcuts. Each name is worth checking against it first: DT is already the alias for TEXT, AA for AREA, AR for ARRAY. A command that takes one of those names takes a built-in command away from the user. All six names above were free.
Overlaps: where every running-total routine gets it wrong
Draw two rectangles that overlap, one 4000 by 3000 and one 5000 by 2500, with an overlap of 1000 by 1500.
Any routine that simply adds each shape up returns 24.5 square metres, because the overlap is counted twice. The true covered area is only 23. Type TDTP and all three figures are printed.
Running total : 24.500 m2
TRUE COVERED AREA : 23.000 m2
Overlap : 1.500 m2
How it works: the selected shapes are duplicated, the copies are turned into regions, UNION merges them, the result is measured and then everything is erased. The original drawing is untouched. A hatch cannot become a region, so hatches are reported separately rather than folded into those three figures.
Which one to use depends on the job. For a floor-area schedule the running total is right, because rooms do not overlap by design. When outlines may lie on top of one another, TDTP gives the figure you can use.
Loading the file, and two things that catch people out
Load it with APPLOAD: type APPLOAD, point at the file, click Load. To have it load on every start, add the file to the Startup Suite inside that same dialog.
Look closely at the figure: the middle room reads 9.6 m2, not 9.60 m2. That is not a fault in the file. rtos drops trailing zeros while the DIMZIN variable is 8, and 8 is what the drawing carried. Set DIMZIN to 0 and the same line prints 9.60.
If AutoCAD shows a Security - Unsigned Executable File box and then ; error: File load canceled:, the file is not broken. That is the SECURELOAD variable, which Autodesk ships set to 1, meaning code loads only from trusted folders. Add the folder holding the file to TRUSTEDPATHS and it loads at once.
The file linked above prompts in English. A Vietnamese version is also published, with the same six command names so a drawing and its documentation stay interchangeable.
The full source
This is the file you download, not a trimmed version. Every figure in this section was measured with it.
;;; ==================================================================
;;; TDT-IIC-EN.LSP - add up areas, and label each shape with its area
;;; Institute of Information Technology in Civil Engineering (IIC)
;;; Hanoi University of Civil Engineering
;;; https://iic.huce.edu.vn - Tel: +84 989 427 809
;;; ------------------------------------------------------------------
;;; Six commands:
;;; TDT select any way you like, then add up the closed shapes
;;; TDTX add up every closed shape in the drawing, no selection
;;; TDTP TRUE COVERED AREA, overlaps counted once
;;; TDTPX true covered area of the whole drawing
;;; GDT select shapes, write the figure inside each one
;;; GDTX label every closed shape in the drawing
;;;
;;; The command names were checked before they were chosen. The alias
;;; file acad.pgp of the 2027 release holds 387 aliases, among them DT
;;; for TEXT, AA for AREA and AR for ARRAY. Taking one of those names
;;; would take a working command away from the user. All six names
;;; above were free.
;;;
;;; Overlaps: any lisp that simply adds shape by shape counts an
;;; overlap twice. TDTP copies the selected shapes, turns the copies
;;; into regions, merges them with UNION, measures, then deletes
;;; everything. THE ORIGINAL DRAWING IS NOT TOUCHED. A hatch does not
;;; convert to a region, so hatches are reported separately.
;;;
;;; Figures are printed in SQUARE METRES. The conversion factor comes
;;; from the INSUNITS variable, so a drawing built in metres no longer
;;; comes out a million times off.
;;;
;;; A note on decimals: rtos trims trailing zeros when DIMZIN is 8, so
;;; a label may read "9.6 m2" rather than "9.60 m2". That is the
;;; drawing's DIMZIN, not a fault in this file. Set DIMZIN to 0 before
;;; running if you want both decimals.
;;;
;;; To load: type APPLOAD, pick this file, click Load.
;;; Saved as UTF-8. If you edit it in Notepad, save it as UTF-8 again.
;;; ==================================================================
(vl-load-com)
;;; ------------------------------------------------------------------
;;; Shared helpers
;;; ------------------------------------------------------------------
(defun iic-banner ()
(princ "\nLisp developed by RDSIC - Institute of Information Technology in Civil Engineering")
(princ "\nwebsite: https://iic.huce.edu.vn - Tel: +84 989 427 809")
(princ)
)
;; Collapse the whole command into ONE undo step. This uses the ActiveX
;; undo marks rather than (command "_.UNDO" ...): the 2027 release
;; FORBIDS calling (command) from inside an *error* handler, while these
;; marks can be called from anywhere.
(defun iic-doc () (vla-get-ActiveDocument (vlax-get-acad-object)))
(defun iic-undo-open () (vla-StartUndoMark (iic-doc)) (princ))
(defun iic-undo-close () (vla-EndUndoMark (iic-doc)) (princ))
(defun iic-save-vars (names)
(mapcar (function (lambda (v) (cons v (getvar v)))) names)
)
(defun iic-restore-vars (saved)
(foreach c saved (setvar (car c) (cdr c)))
(princ)
)
;;; ------------------------------------------------------------------
;;; Drawing units
;;; ------------------------------------------------------------------
;; The raw figure is in SQUARE drawing units. Vietnamese housing
;; drawings are usually built in millimetres, so one square metre is a
;; million units. The factor is read from INSUNITS, never guessed.
(defun iic-factor (/ u)
(setq u (getvar "insunits"))
(cond ((= u 4) 1e-6) ((= u 5) 1e-4) ((= u 6) 1.0) (T 1e-6))
)
(defun iic-unit-name (/ u)
(setq u (getvar "insunits"))
(cond ((= u 4) "millimetres") ((= u 5) "centimetres") ((= u 6) "metres")
(T "not set, assuming millimetres"))
)
(defun iic-as-m2 (s) (strcat (rtos (* s (iic-factor)) 2 3) " m2"))
(defun iic-plural (n mot nhieu) (if (= n 1) mot nhieu))
;;; ------------------------------------------------------------------
;;; Which shapes have an area
;;; ------------------------------------------------------------------
;; Every kind of shape that has an area is accepted, not just hatches:
;; closed polylines, circles, ellipses, closed splines and regions. A
;; shape that is NOT closed is skipped and reported, rather than being
;; quietly closed for you and returning a wrong figure.
(defun iic-kind (e) (cdr (assoc 0 (entget e))))
(defun iic-closed-p (e / o kind)
(setq kind (iic-kind e) o (vlax-ename->vla-object e))
(cond
((member kind (list "CIRCLE" "REGION" "HATCH")) T)
((member kind (list "ELLIPSE" "LWPOLYLINE" "POLYLINE" "SPLINE"))
(and (vlax-property-available-p o "Closed")
(= (vla-get-Closed o) :vlax-true)))
(T nil)
)
)
(defun iic-area (e / r)
(if (iic-closed-p e)
(progn
(setq r (vl-catch-all-apply (function vla-get-Area)
(list (vlax-ename->vla-object e))))
(if (vl-catch-all-error-p r) nil r)
)
)
)
;;; ------------------------------------------------------------------
;;; Building the selection
;;; ------------------------------------------------------------------
(defun iic-pick (msg) (princ msg) (ssget))
;; Everything on the tab that is open, so a different sheet is left alone.
(defun iic-pick-all () (ssget "_X" (list (cons 410 (getvar "ctab")))))
;; Split a selection into (list-of-closed-shapes number-skipped)
(defun iic-split (ss / i e ds skipped)
(setq i 0 ds (list) skipped 0)
(if ss
(while (< i (sslength ss))
(setq e (ssname ss i))
(if (iic-area e)
(setq ds (cons e ds))
(setq skipped (1+ skipped))
)
(setq i (1+ i))
)
)
(list (reverse ds) skipped)
)
(defun iic-sum (ds / s)
(setq s 0.0)
(foreach e ds (setq s (+ s (iic-area e))))
s
)
;;; ------------------------------------------------------------------
;;; TDT and TDTX - running total
;;; ------------------------------------------------------------------
(defun iic-total (ss whole / pack ds skipped s)
(if (null ss)
(princ (if whole "\n The drawing contains no shapes."
"\n No shape was selected."))
(progn
(setq pack (iic-split ss) ds (car pack) skipped (cadr pack))
(if (null ds)
(princ (if whole "\n The drawing contains no shape with an area."
"\n No shape with an area was selected."))
(progn
(setq s (iic-sum ds))
(princ (strcat "\n Drawing units: " (iic-unit-name)))
(princ (strcat "\n Measured : " (itoa (length ds))))
(princ (strcat "\n Skipped : " (itoa skipped)
(if (> skipped 0)
(strcat " " (iic-plural skipped "shape that is" "shapes that are")
" NOT closed")
"")))
(princ (strcat "\n TOTAL AREA: " (iic-as-m2 s)))
(princ "\n This is the RUNNING TOTAL. Where shapes overlap, the overlap is counted")
(princ "\n twice — use the TDTP command for the TRUE COVERED AREA.")
)
)
)
)
(princ)
)
;;; ------------------------------------------------------------------
;;; TDTP and TDTPX - true covered area
;;; ------------------------------------------------------------------
;; Copy the selected shapes, turn the copies into regions, merge them
;; with UNION, measure, then delete everything. The original drawing is
;; not touched.
;;
;; Commands are issued through vl-cmdf rather than command: command is
;; a SPECIAL FORM, not a function, so vl-catch-all-apply on it throws
;; "bad order function: COMMAND". vl-cmdf is a real function (measured
;; on the 2027 release: type returns SUBR).
(defun iic-merge (ds / saved copies ss g0 e got n s)
(setq saved (iic-save-vars (list "delobj" "cmdecho" "peditaccept"))
copies (list))
(setvar "delobj" 3)
(setvar "cmdecho" 0)
(foreach e ds
(setq got (vl-catch-all-apply (function vla-Copy)
(list (vlax-ename->vla-object e))))
(if (not (vl-catch-all-error-p got))
(setq copies (cons (vlax-vla-object->ename got) copies))
)
)
(if (null copies)
(progn (iic-restore-vars saved) nil)
(progn
(setq ss (ssadd))
(foreach e copies (if (entget e) (ssadd e ss)))
(setq g0 (entlast))
(vl-catch-all-apply (function vl-cmdf) (list "_.REGION" ss ""))
(setq ss (ssadd) e (entnext g0) n 0)
(while e
(if (= "REGION" (iic-kind e)) (progn (ssadd e ss) (setq n (1+ n))))
(setq e (entnext e))
)
;; drop the copies that would not convert
(foreach e copies (if (and (entget e) (/= "REGION" (iic-kind e))) (entdel e)))
(if (= n 0)
(progn (iic-restore-vars saved) nil)
(progn
(if (> n 1) (vl-catch-all-apply (function vl-cmdf) (list "_.UNION" ss "")))
(setq s 0.0 e (entnext g0))
(while e
(if (and (entget e) (= "REGION" (iic-kind e)))
(setq s (+ s (vla-get-Area (vlax-ename->vla-object e)))))
(setq e (entnext e))
)
(setq e (entnext g0))
(while e (if (entget e) (entdel e)) (setq e (entnext e)))
(iic-restore-vars saved)
s
)
)
)
)
)
(defun iic-covered (ss whole / pack ds skipped hat cur s-run s-true)
(if (null ss)
(princ (if whole "\n The drawing contains no shapes."
"\n No shape was selected."))
(progn
(setq pack (iic-split ss) ds (car pack) skipped (cadr pack))
(if (null ds)
(princ (if whole "\n The drawing contains no shape with an area."
"\n No shape with an area was selected."))
(progn
(setq hat (vl-remove-if-not (function (lambda (e) (= "HATCH" (iic-kind e)))) ds)
cur (vl-remove-if (function (lambda (e) (= "HATCH" (iic-kind e)))) ds))
(princ (strcat "\n Drawing units: " (iic-unit-name)))
(princ (strcat "\n Measured : " (itoa (length cur))))
(princ (strcat "\n Skipped : " (itoa skipped)
(if (> skipped 0)
(strcat " " (iic-plural skipped "shape that is" "shapes that are")
" NOT closed")
"")))
(if (null cur)
(princ "\n Nothing could be merged, because a hatch does not convert to a region. Use the TDT command to total hatches.")
(progn
(iic-undo-open)
(setq s-run (iic-sum cur)
s-true (iic-merge cur))
(iic-undo-close)
(if (null s-true)
(princ "\n These shapes could NOT be merged into regions. Use the TDT command for the running total.")
(progn
(princ (strcat "\n Merged : " (itoa (length cur))))
(princ (strcat "\n Running total : " (iic-as-m2 s-run)))
(princ (strcat "\n TRUE COVERED AREA : " (iic-as-m2 s-true)))
(if (> (- s-run s-true) (* 1e-6 (max s-run 1.0)))
(princ (strcat "\n Overlap : " (iic-as-m2 (- s-run s-true))))
(princ "\n (Nothing overlaps.)")
)
(princ "\n The original drawing is UNCHANGED: the merge runs on copies, then deletes them.")
)
)
)
)
(if hat
(progn
(princ (strcat "\n There " (iic-plural (length hat) "is also " "are also ")
(itoa (length hat)) " "
(iic-plural (length hat) "hatch" "hatches") ", totalling "
(iic-as-m2 (iic-sum hat))))
(princ "\n which could NOT be merged because a hatch does not convert to a region.")
(princ "\n That area is NOT in the three figures above. To include hatches in a")
(princ "\n total, use the TDT command.")
)
)
)
)
)
)
(princ)
)
;;; ------------------------------------------------------------------
;;; GDT and GDTX - write the area inside each shape
;;; ------------------------------------------------------------------
;; A circle takes its own centre. Everything else takes the CENTROID,
;; worked out through a throwaway region, because the centre of the
;; bounding box of an L-shaped room can fall outside the room. If that
;; fails, the centre of the bounding box is the fallback.
(defun iic-centroid (e / saved g0 cur copy v out)
(setq saved (iic-save-vars (list "delobj" "cmdecho")))
(setvar "delobj" 3)
(setvar "cmdecho" 0)
(setq copy (vl-catch-all-apply (function vla-Copy)
(list (vlax-ename->vla-object e))))
(if (vl-catch-all-error-p copy)
(progn (iic-restore-vars saved) nil)
(progn
(setq g0 (entlast))
(vl-catch-all-apply (function vl-cmdf)
(list "_.REGION" (ssadd (vlax-vla-object->ename copy)) ""))
(setq cur (entnext g0))
(if (and cur (= "REGION" (iic-kind cur)))
(progn
(setq v (vl-catch-all-apply (function vla-get-Centroid)
(list (vlax-ename->vla-object cur))))
(if (not (vl-catch-all-error-p v))
(setq out (append (vlax-safearray->list (vlax-variant-value v)) (list 0.0))))
)
)
(setq cur (entnext g0))
(while cur (if (entget cur) (entdel cur)) (setq cur (entnext cur)))
(if (and (null out) (entget (vlax-vla-object->ename copy)))
(entdel (vlax-vla-object->ename copy)))
(iic-restore-vars saved)
out
)
)
)
(defun iic-box-centre (e / o g1 g2 r)
(setq o (vlax-ename->vla-object e)
r (vl-catch-all-apply (function vla-getBoundingBox)
(list o (quote g1) (quote g2))))
(if (vl-catch-all-error-p r)
nil
(progn
(setq g1 (vlax-safearray->list g1) g2 (vlax-safearray->list g2))
(list (* 0.5 (+ (car g1) (car g2))) (* 0.5 (+ (cadr g1) (cadr g2))) 0.0)
)
)
)
(defun iic-inside-point (e)
(cond
((= "CIRCLE" (iic-kind e)) (cdr (assoc 10 (entget e))))
((iic-centroid e))
((iic-box-centre e))
(T nil)
)
)
(defun iic-label (ss whole / pack ds skipped h n missed p txt)
(if (null ss)
(princ (if whole "\n The drawing contains no shapes."
"\n No shape was selected."))
(progn
(setq pack (iic-split ss) ds (car pack) skipped (cadr pack))
(if (null ds)
(princ (if whole "\n The drawing contains no shape with an area."
"\n No shape with an area was selected."))
(progn
(setq h (getvar "textsize"))
(if (<= h 1e-8) (setq h 2.5))
(iic-undo-open)
(setq n 0 missed 0)
(foreach e ds
(setq p (iic-inside-point e)
txt (strcat (rtos (* (iic-area e) (iic-factor)) 2 2) " m2"))
(if p
(progn
(entmake (list (cons 0 "TEXT") (cons 10 p) (cons 11 p)
(cons 40 h) (cons 1 txt)
(cons 72 1) (cons 73 2)))
(setq n (1+ n))
)
(setq missed (1+ missed))
)
)
(iic-undo-close)
(princ (strcat "\n Drawing units: " (iic-unit-name)))
(princ (strcat "\n Labelled " (itoa n) " closed "
(iic-plural n "shape." "shapes.")))
(if (> missed 0)
(princ (strcat "\n " (itoa missed) " closed "
(iic-plural missed "shape" "shapes")
" could NOT be labelled.")))
(if (> skipped 0)
(princ (strcat "\n Skipped " (itoa skipped) " "
(iic-plural skipped "shape that is" "shapes that are")
" NOT closed.")))
)
)
)
)
(princ)
)
;;; ------------------------------------------------------------------
;;; The six commands
;;; ------------------------------------------------------------------
(defun iic-run (fn whole msg / *error* old-error saved ss)
(setq old-error *error*
saved (iic-save-vars (list "cmdecho" "delobj")))
(defun *error* (m)
(if (and m (/= m "Function cancelled") (/= m "quit / exit abort"))
(princ (strcat "\nIIC error: " m)))
(iic-restore-vars saved)
(iic-undo-close)
(setq *error* old-error)
(princ)
)
(iic-banner)
(setq ss (if whole (iic-pick-all) (iic-pick msg)))
(apply fn (list ss whole))
(iic-restore-vars saved)
(setq *error* old-error)
(princ)
)
(defun c:TDT ()
(iic-run (function iic-total) nil
"\nSelect objects (single picks, window, crossing, WP, CP, F, ALL...): "))
(defun c:TDTX () (iic-run (function iic-total) T nil))
(defun c:TDTP ()
(iic-run (function iic-covered) nil
"\nSelect objects (single picks, window, crossing, WP, CP, F, ALL...): "))
(defun c:TDTPX () (iic-run (function iic-covered) T nil))
(defun c:GDT ()
(iic-run (function iic-label) nil "\nSelect the shapes to be labelled with their area: "))
(defun c:GDTX () (iic-run (function iic-label) T nil))
(princ "\nTDT-IIC loaded. Commands: TDT, TDTX (running total), TDTP, TDTPX (true covered area), GDT, GDTX (labels).")
(princ)
Units: where schedules usually go wrong
Every figure comes out in drawing units squared. Building plans are commonly drawn in millimetres, so one square metre is a million units. A room of 3200 by 2000 reads 6400000, and that is 6.4 square metres.
The cheapest check: calculate area in AutoCAD for one room whose size you already know, before building the whole schedule. An error of one decimal place shows up at once.
The final cross-check is worth doing every time as well: the room areas plus the wall area should equal the gross area. More than a couple of per cent out means a room was missed, or two outlines overlap.
Three things often repeated that are not true
| What you often hear | What AutoCAD 2027 actually does |
|---|---|
AutoCAD has three area commands: AA, LI and SS | Typing SS returns Unknown command. SS is the name of a third-party lisp file, not a command |
Type PE to get a perimeter | PE runs PEDIT, whose prompt is Select polyline or [Multiple]:. It edits polylines and prints no figure at all |
PERIMETER is a command | Typing it returns PERIMETER = 0.0000 (read only). It is a read-only variable holding the last perimeter computed, not a command |
The AREA and PERIMETER variables are handy: after a measurement, type the variable name to read the figure again without measuring twice. For more on typing commands and aliases, see drawing parallel lines in CAD.
Frequently asked questions
What is the alias for the area command in AutoCAD?
AA for AREA and LI for LIST. MEASUREGEOM, aliased MEA, also has an Area mode and shows the result right at the cursor.
Why is the area right but the perimeter wrong?
Your outline is not closed. The software closes the missing edge to compute an area but ignores that same edge for the perimeter. Read the label: Length instead of Perimeter gives it away.
How do I measure a region formed by several crossing lines?
Run BOUNDARY and click a point inside it. The software builds a closed outline, which you measure and then delete if you do not need it.
How do I measure a shape with curved edges?
Use MEASUREGEOM in Area mode and press A while tracing to switch to arc segments. You can trace a boundary mixing straight and curved parts without drawing an outline first.
Does a wide polyline measure along its edge or its centre?
Its centre. Autodesk states that "The centerline of a wide polyline is used to make area and perimeter calculations", so a duct drawn as a wide polyline gives the area of its centreline, not of its outer edge.
Do I need a lisp file to total several hatch areas?
No. Select all the hatches and read the Cumulative Area row in Properties. The Area box reading *VARIES* is normal, so do not stop there.