如何快速計算cad中多條多段線的總長
用插件計算。
很多插件都有計算長度功能,比如天正超越工具集等。
autolisp代碼如下:
(defun?c:TE?(?/?&k1?&kw1?&ss1?cd1?i?x) (setvar?"cmdecho"?0) (setvar?"blipmode"?0) (if?(null?vlax-dump-object)?(vl-load-com)?) (princ?"\n請選擇曲線") (if?(setq?&kw1?(ssget?'((0?.?"*LINE,ARC,CIRCLE,HELIX,ELLIPSE"))))(progn
(setq?i?-1.0?&ss1?'()) (while?(setq?&k1?(ssname?&kw1?(setq?i?(1+?i))));(vla-put-color?(vlax-ename->vla-object?&k1)?252)
(setq?&ss1?(cons?&k1?&ss1))
) (setq?&ss1?(mapcar?'(lambda?(X)?(*?0.001?(vlax-curve-getDistAtParam?x?(vlax-curve-getEndParam?x))))?&ss1)) (setq?cd1?(apply?'+?&ss1)) (setq?&ss1?(apply?'strcat?(cdr?(apply?'append?(mapcar?'(lambda?(x)?(list?"+"?(rtos?x)))?&ss1))))) (setq?&ss1?(strcat?"("?&ss1?")")) (s1611151?&kw1?(list?(strcat?"\n"?(rtos?i?2?0)?"條曲線計算公式為:"?&ss1)?(strcat?"\n"?(rtos?i?2?0)?"條曲線總長度:"?(rtos?cd1)?"米"))
))
) (princ))
(defun?s1611151?(&kw1?str?/?&k1?&kw1?a1?a2?ss1)
(setq?ss1?'()?a1?0.0?i?0.0) (while?(setq?&k1?(ssname?&kw1?0))(setq?&kw1?(ssdel?&k1?&kw1))
(if?(and?(vlax-curve-isClosed?&k1);如果對象是閉合對象
(setq?&k1?(vlax-ename->vla-object?&k1));轉換為vlax對象 (null?(vl-catch-all-error-p?(setq?a2?(vl-catch-all-apply?'vla-get-area?(list?&k1))))) );計算面積(progn
(setq?a2?(*?0.000001?a2)?i?(1+?i)) (setq?a1?(+?a1?a2));總面積 (setq?a2?(rtos?a2)) (if?(car?ss1) (setq?ss1?(append?ss1?(list?"+"?a2)));計算公式 (setq?ss1?(cons?a2?ss1)))
))
);while (if?(>?a1?0.0)(progn
(princ?(car?str)) (princ?(strcat?"\n"?(rtos?i?2?0)?"個封閉對象面積計算公式為:("?(apply?'strcat?ss1)?")"));顯示計算公式 (princ?(cadr?str)) (princ?(strcat?";"?(rtos?i?2?0)?"個封閉對象總面積:"(rtos?a1)?"?平方米")))
(princ?(apply?'strcat?str))
))