; (c) Modified by CADCHAJIAN.COM: Add Area + English Tips + Circle Area (DEFUN C:aaLL (/ ss en ed e_type tot_len tot_area oldce txtPt) (setq tot_len 0.0 tot_area 0.0) (setq oldce (getvar "cmdecho")) (setvar "cmdecho" 0) (prompt "\n(c) CADCHAJIAN.COM ") (prompt "\nSelect all objects to count: ") (setq ss (ssget '((0 . "LINE,ARC,POLYLINE,LWPOLYLINE,CIRCLE")))) (if ss (while (> (sslength ss) 0) (setq en (ssname ss 0)) (setq ed (entget en)) (setq e_type (cdr (assoc 0 ed))) (cond ((= e_type "LINE") (add_lines en ed)) ((= e_type "ARC") (add_arcs en ed)) ((or (= e_type "POLYLINE") (= e_type "LWPOLYLINE")) (add_poly en)) ((= e_type "CIRCLE") (add_circle en ed)) (T (ssdel en ss)) ) ) ) ; 命令行英文输出 (prompt (strcat "\nTotal Length: " (rtos tot_len 2 1))) (prompt (strcat "\nTotal Area: " (rtos tot_area 2 1))) ; 标注提示改为英文 (setq txtPt (getpoint "\nInsertion point for total value: ")) (if txtPt (command "._text" txtPt (getvar "textsize") "0" (strcat "Length: " (rtos tot_len 2 1) " Area: " (rtos tot_area 2 1))) ) (setvar "cmdecho" oldce) (princ) ) ; 直线:仅统计长度 (defun add_lines (en ed) (setq pt1 (cdr (assoc 10 ed)) pt2 (cdr (assoc 11 ed)) line_len (distance pt1 pt2)) (setq tot_len (+ tot_len line_len)) (ssdel en ss) ) ; 圆弧:仅统计长度 (defun add_arcs (en ed) (SETQ CEN (CDR (ASSOC 10 Ed)) RAD (CDR (ASSOC 40 Ed)) S_ANG (CDR (ASSOC 50 Ed)) E_ANG (CDR (ASSOC 51 Ed)) ) (IF (< E_ANG S_ANG) (SETQ E_ANG (+ E_ANG (* PI 2.0))) ) (SETQ N_ANG (- E_ANG S_ANG) A_LEN (* RAD N_ANG) ) (setq tot_len (+ tot_len a_len)) (SSDEL EN SS) ) ; 多段线/矩形:周长 + 面积 (defun add_poly (en) (command "area" "e" en) (setq tot_len (+ tot_len (getvar "perimeter")) tot_area (+ tot_area (getvar "area"))) (ssdel en ss) ) ; 圆:周长 + 面积(新增) (defun add_circle (en ed) (setq rad (cdr (assoc 40 ed))) (setq tot_len (+ tot_len (* 2 pi rad)) tot_area (+ tot_area (* pi rad rad))) (ssdel en ss) ) (princ "\nAALL Loaded! Command: AALL") (princ)