作者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
1F:推 s9122405:感谢大大, 我试试看~~ 01/02 13:45
2F:→ Egriawei:指令行打(*****)是call函数,直接打****是指令,不要弄错喔 01/02 15:04
3F:→ Egriawei:直接打load enter会变成去找字形档载入 01/02 15:05
※ 编辑: Egriawei 来自: 61.230.26.134 (01/02 21:02)