Calculating Areas of Multiple Objects in AutoCAD
Lisp for Calculating Areas of Multiple Objects in AutoCAD
ALisp routine can simplify repetitive tasks like calculating the areas of multiple objects (polylines, circles, etc.) in AutoCAD. Below is a guide to creating a Lisp routine that extracts and lists the areas of selected objects.
1. Understanding the Task
- AutoCAD objects such asclosed polylines,circles, andregions
have an area property.
- The Lisp routine will:
1. Allow users to
select multiple objects.
2. Extract the area
of each selected object.
3. Display or export the calculated areas (e.g., to the command line or a file)
2. Sample Lisp Code
Here is an example Lisp code for calculating the areas of
multiple objects:
(defun c:MultiArea (/ obj area total areas fileName)
;; Initialize
variables
(setq total 0)
(setq areas nil)
;; Prompt the user
to select objects
(prompt
"\nSelect closed objects to calculate areas: ")
(setq selSet (ssget
'((0 . "LWPOLYLINE,CIRCLE,REGION")))) ; Filter for closed objects
(if selSet
(progn
;; Loop through
selected objects
(repeat (setq i
(sslength selSet))
(setq obj
(vlax-ename->vla-object (ssname selSet (setq i (1- i)))))
;; Get the
area of the object
(setq area
(vla-get-Area obj))
(setq areas
(cons area areas))
(setq total (+
total area))
)
;; Display areas
in the command line
(princ
"\nAreas of selected objects:")
(foreach a
(reverse areas)
(princ (strcat
"\nArea: " (rtos a 2 2))) ; Display each area with 2 decimal points
)
;; Display the
total area
(princ (strcat
"\nTotal Area: " (rtos total 2 2)))
;; Option to
save to a file
(setq fileName
(getfiled "Save Areas to File" "" "txt" 1))
(if fileName
(progn
(setq file
(open fileName "w"))
(write-line
"Areas of selected objects:" file)
(foreach a
(reverse areas)
(write-line (strcat "Area: " (rtos a 2 2)) file)
)
(write-line
(strcat "Total Area: " (rtos total 2 2)) file)
(close file)
(princ
(strcat "\nAreas saved to file: " fileName))
)
)
)
(prompt "\nNo
valid objects selected.")
)
;; End the routine
(princ)
)
3. How It Works
1.Selection:
- The routine
prompts the user to select objects (polylines, circles, or regions).
- It uses a filter
to ensure only closed objects are selected.
- For each object,
the `vla-get-Area` method retrieves the area.
- The routine sums
up the areas and stores individual values in a list.
- It displays each
area and the total area in the command line.
- Optionally, the
areas are saved to a text file.
1. Save the code as a `.lsp` file (e.g., `MultiArea.lsp`).
2. In AutoCAD:
- Use the `APPLOAD`
command to load the Lisp file.
- Alternatively, add the Lisp file to the startup suite for automatic loading.
3. Run the command by typing `MultiArea` in the command line
5. Customization
Add Object Types:
- Modify the object
filter in `(ssget '((0 . "LWPOLYLINE,CIRCLE,REGION")))` to include
other object types like `ELLIPSE` or `HATCH`.
- Adjust `(rtos a 2
2)` to change the precision of the area display (e.g., 2 decimal places).
- Enhance the file
output to support formats like CSV.
1. Type `MultiArea` in the command line.
2. Select closed objects in the drawing.
3. View areas in the command line or export them to a file.
Comments
Post a Comment