請問autocad怎麼量測圖形"長度" - 想要用AUTOCAD量測一個圖形線段的總長度例如一個星星裡面有三個圓圈我想要一次直接知道所有線段, 圓圈, 圓弧等等的總長度有辦法做到 ... ... <看更多>
cad計算長度 在 1.這篇精華文章很精采~ 趕快回來學習「總數量與總長度計算 ... 的推薦與評價
【發帖精華】 急~跪求各位CAD高手大大『總數量與總長度計算方法』 ... AutoCAD 分享一個能顯示面積及長度的LISP程式免費下載. youtube.com. ... <看更多>
cad計算長度 在 [心得] 計算2D元體長度by autolisp - 看板Cad_Cae - 批踢踢實業坊 的推薦與評價
主要是靠lengthen指令與perimeter系統變數來完成
如果有興去挑戰的版友可以自己試著寫看看
本來我自己還有另外寫一套計算各種2d圖元的副程式
不過有現成的lengthen可以用就用之,省的跟spline奮鬥
lisp使用方法可以參考我前一篇面域加總或其他有討論lisp的文章
以下為len2d.lisp的程式碼
使用len2d指令然後照提示操作即可
會要求輸入兩個整數參數(都按enter則使用預設)
再來請選取要加總長度的2d圖元
視需要除了印出總長還可以有條列資料印出(不過大概不需要)
程式效率就先不要求了(因為lengthen一定會印出東西來,cmdecho設0也沒用)
不會太慢不用擔心
另外如果要求只計算某圖層的圖元
先以手動的方法切換到只顯示該圖層吧
雖然ssget "X" 過濾選集加個條件很快
不過我懶的寫XD
(直接抓lisp檔)
https://0rz.tw/094bD
;len2d.lisp
;;;=============Copyright=============
;;;此為簡易2d線段長度計算及加總程式
;;;作者為台大BBS站PTT Egriawei
;;;歡迎使用及添改,惟請註明參考出處
;;;若有問題請來信討論,請多指教
;;;===================================
(defun c:len2d (/ ssa mode isprint sum)
;===環境設定===
(graphscr) ;叫出圖框
;;;物件鎖點等設定請視個人情況調整添改
;===提示與參數輸入===
(princ "********************************************************\n")
(princ "框選或連(單)選欲計算及加總長度的2d線段")
(princ "(需為line,pline,spline,arc,circle,ellipse)\n")
(princ "********************************************************\n")
(setq mode (getint "選取模式:[(1)自行選取(2)全選圖面]<預設自行選取>:")
mode (if mode mode 1)
isprint (getint "輸出模式:[(1)僅列總長(2)條列及總長]<預設僅列總長>:")
isprint (if (= isprint 2) "t" "f")
)
;===程式執行===
(setq ssa (ssadd)
ssa (get2dss mode)
sum (len2d ssa isprint)
)
;===程式結束===
(princ (strcat "\n所選取2d圖元總長為" (rtos sum) "\n計算完畢!\n"))
(princ)
)
;===2d線段圖元蒐集副程式===
(defun get2dss (mode / ss ssa en en_data entype i)
;(princ (strcat "mode is " (itoa mode) "\n"))
(setq ssa (ssadd) ;2d線段圖元集合
i 0 ;起始值變數
)
(cond
((= mode 1)
(progn
(setq ss (ssget)) ;圖元集合
(if (/= ss nil)
(repeat (sslength ss)
(setq en (ssname ss i) ;取集合第一個圖元
en_data (entget en) ;圖元資料
entype (cdr (assoc 0 en_data)) ;圖元種類
i (1+ i) ;next
)
(if (or (= entype "LINE") (= entype "LWPOLYLINE")
(= entype "CIRCLE") (= entype "ARC")
(= entype "ELLIPSE") (= entype "SPLINE")
)
(setq ssa (ssadd en ssa)) ;若為2d線段圖元則蒐集入ssa選擇集
)
);end-repeat
);end-if
);end-mode1-progn
);end-mode1
((= mode 2)
(progn
(setq ssa (ssget "X" (list (cons -4 "<OR")
(cons 0 "LINE") (cons 0 "LWPOLYLINE")
(cons 0 "CIRCLE") (cons 0 "ARC")
(cons 0 "ELLIPSE") (cons 0 "SPLINE")
(cons -4 "OR>")
)
)
);以選集過濾器方式蒐集2d線段圖元
);end-mode2-progn
);end-mode2
(t (princ (strcat "未定義的mode:" (itoa mode))));end-t
);end-cond
ssa
)
;===計算2d圖元長度副程式===
(defun len2d (ssa isprint / en en_data entype ename lenlist
i len sum
)
(setq i 0 sum 0.0 lenlist nil)
(if (/= ssa nil)
(progn
(repeat (sslength ssa)
(setq en (ssname ssa i) ;取得集合第一個圖元
len (get_perimeter en) ;計算圖元長度
sum (+ sum len) ;加總
lenlist (if (= isprint "t") (cons len lenlist))
i (1+ i)
)
);end-repeat
);end-if-progn
);end-if
(if (= isprint "t")
(progn
(princ "\n")
(setq i 0
lenlist (reverse lenlist)
)
(repeat (sslength ssa)
(setq en (ssname ssa i) ;取集合第一個圖元
en_data (entget en) ;圖元資料
entype (cdr (assoc 0 en_data)) ;元體類型
ename (cdr (assoc -1 en_data)) ;元體名稱
)
(princ ename)
(princ (strcat "類型:" entype ";線段長:" (rtos (nth i lenlist)) "\n"))
(setq i (1+ i))
);end-repeat
);end-if-progn
);end-if
sum;回傳總長
)
;===計算有周長圖元之長度副程式===
(defun get_perimeter (en / len)
(command "lengthen" en "")
(setq len (getvar "perimeter"));取得周長
)
;================================
(princ "2d線段長度計算及加總程式len2d.lsp\n")
(princ "<c:len2d>\n")
(princ)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.168.197.195
※ 編輯: Egriawei 來自: 118.168.197.195 (05/27 02:42)
... <看更多>