作者Egriawei (ef天女散花計畫)
站內Cad_Cae
標題[情報] AutoCad面域加總程式
時間Tue Jan 1 17:18:57 2008
我用lisp程式碼完成了這個要求
讀取檔案後出現程式使用說明
請打指令 aa3d 後enter(這個一定要是aa3d,除非將程式首行c:aa3d改掉)
enter後 出現提示與參數要求輸入
請輸入數字鍵 1 或 2 然後enter決定選取模式,或直接enter即為1的自行選取
自行選取的話請框,窗,籬,單或連選圖面上要加總的面域
執行完畢後按下[F2]鍵看執行過程找最後一個總面積那行的答案即所求
~下面基礎說明給沒碰過lisp的站友參考~
請將下列程式碼存成aa3d.lsp(以任何文字編輯軟體來弄都可以)
並置放該檔於安裝目錄下的acad200x資料夾或預設讀取lisp檔的任何目錄 下
於指令行鍵入(load "aa3d.lsp") 或 (load "aa3d")並enter
若當初檔名不是存成aa3d那就請將aa3d存成自己改的檔名
這是簡易版,沒有特別注重執行效能和多功能
就請自由發揮修改吧
;aa3d.lisp
;=============Copyright=============
;此為簡易面域加總程式
;用於2d,3d面域面積之加總
;作者為台大BBS站PTT Egriawei
;歡迎使用及添改,惟請註明參考出處
;若有問題請來信討論,請多指教
;===================================
(defun c:aa3d (/ ss ssa e en en_data entype
i mode
)
;===環境設定===
(graphscr) ;叫出圖框
(setvar "cmdecho" 0) ;指令執行過程不回應
;;;物件鎖點等設定請視個人情況調整添改
;===提示與參數輸入===
(princ "********************************************************\n")
(princ " 框選或連(單)選欲加總面積的面域(欲加總元體需為region)\n")
(princ "********************************************************\n")
(setq mode (getint"選取模式:[1-自行選取;2-全選圖面]<預設自行選取>:")
mode (if mode mode 1)
)
;===程式執行===
(if (= mode 1)
;=mode a自行選取=
(progn
(setq ss (ssget) ;圖元集合
ssa (ssadd) ;面域圖元蒐集
i 0 ;起始值變數
)
(repeat (sslength ss)
(setq en (ssname ss i) ;取集合第一個圖元
en_data (entget en) ;圖元資料
entype (cdr (assoc 0 en_data)) ;圖元種類
)
(if (= entype "REGION")
(progn
;(princ (strcat "No" (itoa i) "圖元:region->蒐集\n")) ;此行可略
(setq ssa (ssadd en ssa)) ;蒐集入ssa選擇集
);region圖元處理
(progn
;(princ (strcat "No" (itoa i) "圖元:" entype "->略過\n")) ;此行可略
);非region圖元處理
)
(setq i (1+ i))
)
)
;=mode b整個圖面=
(setq ssa (ssget "X" (list (cons 0 "REGION"))))
)
;=加總面域面積=
(command "area" "a" "o")
(setq i 0)
(repeat (sslength ssa)
(setq e (ssname ssa i)
i (1+ i)
)
(if (not (= (sslength ssa) i)) (command e))
)
(setvar "cmdecho" 1) ;指令執行過程回應(只列印最後一次加總結果)
(command e "" "")
;===程式結束===
(princ "\n計算完畢!請鍵入[F2]找最後一個總面積即為所求!\n")
(princ)
)
;================================
(princ "面域加總用副程式aa3d.lsp\n")
(princ "<c:aa3d>\n")
(princ)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.230.26.134
推 s9122405:感謝大大, 我試試看~~ 01/02 13:45
→ Egriawei:指令行打(*****)是call函數,直接打****是指令,不要弄錯喔 01/02 15:04
→ Egriawei:直接打load enter會變成去找字形檔載入 01/02 15:05
※ 編輯: Egriawei 來自: 61.230.26.134 (01/02 21:02)