;; ===================================================================== ;; SumArea.lsp - suma pol powierzchni zamknietych obiektow ;; Polecenie: SUMAREA ;; AutoCAD / GstarCAD (AutoLISP). Opis i instalacja: ;; https://fixcontrol.pl/narzedzia/skrypty-autocad ;; ===================================================================== (defun c:SumArea (/ ss i ent obj total_area str_area ent_data obj_type closed_flag error_flag) (vl-load-com) (setq total_area 0.0) (setq error_flag nil) (prompt "\nSelect objects (polylines, circles, regions): ") (setq ss (ssget '((0 . "LWPOLYLINE,POLYLINE,CIRCLE,ELLIPSE,REGION,SPLINE")))) (if ss (progn (repeat (setq i (sslength ss)) (setq ent (ssname ss (setq i (1- i)))) (setq ent_data (entget ent)) (setq obj_type (cdr (assoc 0 ent_data))) (setq obj (vlax-ename->vla-object ent)) ; polilinia musi byc zamknieta (bit 1 w kodzie 70) (if (wcmatch obj_type "*POLYLINE") (progn (setq closed_flag (cdr (assoc 70 ent_data))) (if (= (logand closed_flag 1) 0) (progn (setq error_flag T) (alert (strcat "Error: Polyline is not closed. Handle: " (cdr (assoc 5 ent_data)))) (princ (strcat "\nError: Polyline is not closed. Handle: " (cdr (assoc 5 ent_data)))) ) ) ) ) (if (not error_flag) (setq total_area (+ total_area (vla-get-area obj))) (setq error_flag nil) ; otwarta polilinia pominieta, kolejny obiekt ) ) ; przecinek dziesietny (setq str_area (rtos total_area 2 2)) (setq str_area (vl-string-subst "," "." str_area)) (if (not (vl-string-search "," str_area)) (setq str_area (strcat str_area ",00")) ) (alert (strcat "Total area: " str_area " square units")) (princ (strcat "\nTotal area: " str_area " square units")) ) (progn (alert "No objects selected!") (princ "\nNo objects selected!") ) ) (princ) ) (princ "\nSUMAREA loaded. Type SUMAREA to run.") (princ)