;;; 面积求和.LSP
;;; 功能: 计算多个选择对象的总面积
(defun c:ZMJ (/ olderr oldcmdecho errexit undox restore ss1 nr en tot_area)
(defun errexit (s)
(restore)
)
(defun undox ()
(command "._undo" "_E")
(setvar "cmdecho" oldcmdecho)
(setq *error* olderr)
(princ)
)
(setq olderr *error*
restore undox
*error* errexit
)
(setq oldcmdecho (getvar "cmdecho"))
(setvar "cmdecho" 0)
(command "._UNDO" "_BE")
(if (setq ss1 (ssget '((-4 . "<OR")
(0 . "POLYLINE")
(0 . "LWPOLYLINE")
(0 . "CIRCLE")
(0 . "ELLIPSE")
(0 . "SPLINE")
(0 . "REGION")
(-4 . "OR>")
)
)
)
(progn
(setq nr 0)
(setq tot_area 0.0)
(setq en (ssname ss1 nr))
(while en
(command "._area" "_O" en)
(setq tot_area (+ tot_area (getvar "area")))
(setq nr (1+ nr))
(setq en (ssname ss1 nr))
)
(princ "\n总面积 = ")
(princ tot_area)
)
)
(restore)
)
(defun c:mjqh()
(setq blc (getvar "userr1"))
(if (= blc 0) (setq blc 1000.0))
(setq blc2 (/ 1000.0 blc))
(setq mj (ssget ))
(if mj
(progn
(setq mjts 0.0)
(setq mjsd 0.0)
(setq len (sslength mj) n 0)
(repeat len
(setq mj2 (ssname mj n))
(setq n (+ n 1))
(command "area" "o" mj2)
(setq mjts (+ mjts (getvar "area")))
(setq mjsd (+ mjsd (/ (getvar "area") blc2 blc2)))
)
)
)
(princ (strcat "\n图上面积 = " (rtos mjts 2 5)))
(princ (strcat "\n实地面积 = " (rtos mjsd 2 5) " 平方米"))
(princ)
)
页:
[1]