|
发表于 2002-8-19 13:34:00
|
显示全部楼层
;;;-----------------------------------------------------
;;;计算线加总长度
;;;BY LUCAS(龙龙仔)
;;;2002/8/14 AM 9:00
;;;初版
;;;2002/8/18 PM 1:00
;;;修正POLYLINE & SPLINE没有CLOSED
;;;但首尾点相连,长度不能计算问题
;;;-----------------------------------------------------
(defun CENOF (/ CURVE TLEN SS N SUMLEN ENT_N ENT_SS)
(defun GETPLVTX (E / PL P10)
(setq E (cdr (assoc -1 (entget E))))
(while (setq E (entnext E))
(if (setq P10 (cdr (assoc 10 (entget E))))
(setq PL (cons P10 PL))
)
)
(equal (nth 0 PL) (nth 0 (reverse PL)))
)
(vl-load-com)
(setq SUMLEN 0)
(setq
SS (ssget
'((0 . "CIRCLE,ELLIPSE,LINE,*POLYLINE,SPLINE,ARC"))
)
)
(setq N 0)
(repeat (sslength SS)
(setq ENT_SS (entget (ssname SS N)))
(setq ENT_N (cdr (assoc 0 ENT_SS)))
(cond
((or (= "CIRCLE" ENT_N)
(and (= "LWPOLYLINE" ENT_N)
(or (= 1 (cdr (assoc 70 ENT_SS)))
(equal (assoc 10 ENT_SS)
(assoc 10 (reverse ENT_SS))
)
)
)
(and (= "SPLINE" ENT_N)
(or (= 1 (rem (cdr (assoc 70 ENT_SS)) 2))
(equal (assoc 10 ENT_SS)
(assoc 11 (reverse ENT_SS))
)
)
)
(and (= "OLYLINE" ENT_N)
(or (= 1 (rem (cdr (assoc 70 ENT_SS)) 2))
(GETPLVTX (ssname SS N))
)
)
(= "ELLIPSE" ENT_N)
)
(command "AREA" "O" (ssname SS N))
(setq TLEN (getvar "ERIMETER"))
)
(t
(setq CURVE (vlax-ename->vla-object (ssname SS N)))
(setq TLEN (vlax-curve-getdistatpoint
CURVE
(vlax-curve-getendpoint CURVE)
)
)
)
)
(setq N (1+ N))
(setq SUMLEN (+ SUMLEN TLEN))
)
(print (strcat "总长度: " (rtos SUMLEN 2 5)))
(princ)
) |
|