1.计算所有线段总长度(加载后只需框选所有线段便可得出这些线段的总长度) (defu n c:LL () (setv ar "cmdecho" 1) (setq en (ssget (list '(0 . "spline,arc,line,ellipse,LWPOLYLINE")))) (setq i 0) (setq ll 0) (repeat (sslength en) (setq ss (ssname en i)) (setq endata (entget ss)) (command "lengthen" ss "") (setq dd (getv ar "perimeter")) (setq ll (+ dd ll)) (setq i (1+ i)) ) (princ "所选线条总长为:")(princ ll)(princ) ) 2.标注所有线段(加载后只需框选所有线段便可得标注这些线段) (defu n c:LLL () (COMMAND "UCS" "") (setv ar "cmdecho" 1) (SETVAR "OSMODE" 0) (setq AcadObject (v lax -get-acad-object) AcadDocu ment (v la-get-Activ eDocu ment Acadobject) mSpace (v la-get-ModelSpace Acaddocu ment) ) ;;选取需要测量的样条曲线、圆弧、直线、椭圆 (setq en (ssget (list '(0 . "spline,arc,line,ellipse,LWPOLYLINE")))) (setq i 0) ;;获取系统参数textsize (setq shh (getvar "textsize")) (setq str_hh (strcat "\n 文字高度 <" (rtos shh 2) ">: ")) (setq hh (getdist str_hh)) (while hh (setvar "textsize" hh) (setq hh nil)) ;;输入标注文字高度 ;;循环开始 (repeat (sslength en) (setq ss (ssname en i)) (setq endata (entget ss)) (command "lengthen" ss "") (setq dd (getvar "perimeter")) (princ (strcat "\n 长度=" (rtos dd 2))) ;;寻找代表图层的字符串 (setq aa (assoc 0 endata)) ;;获取图层名称 (setq aa1 (cdr aa)) ;;判断线条种类 (cond ((= aa1 "SPLINE") ;;如果是 spline (progn (setq arcObj (VLAX-ENAME->VLA-OBJECT ss)) (setq startPnt1 (vla-get-ControlPoints arcObj)) (setq p1 (vlax-safearray->list (vlax-variant-value startPnt1)) ) (setq x1 (car p1)) (setq y1 (cadr p1)) (setq z1 (caddr p1)) (setq pp1 (list x1 y1 z1)) (repeat (- (/ (length p1) 3) 1) ;;循环,寻找最后一个控制点 (setq p1 (cdddr p1)) (setq x2 (car p1)) (setq y2 (cadr p1)) (setq z2 (caddr p1)) ) (setq pp2 (list x2 y2 z2)) ...