AutoLISP程序在AutoCAD中的应用实例1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
AutoLISP程序在建筑设计中的应用实例
孙煜
广东机电职业技术学院广州510515
摘要:笔者在AutoCAD平台上,用LISP语言编写了一系列程序,提高了出图效率和设计的准确性。
关键词:计算机,计算机绘图,程序,lisp,建筑制图,结构设计
1.程序设计目的
目前,各建筑设计院一般都配备了建筑设计方面的专业软件,如“天正”,“探索者”等,在一定程度上提高了设计人员的效率,但各软件在使用上都有不便之处。
如各设计院的标准不同、设计人员的习惯不同,同时还存在地区差异等,因此设计人员在设计图时只能采用CAD“硬”画,效率低,质量也很难保证。
针对上述问题,笔者用AutoLISP编制了一系列辅助的小程序,这些程序的编制思路是按照传统的绘制方式,灵活运用于各个设计程序段,作为专业软件的有益补充。
2.主要程序介绍
本程序组中主要包括的程序有:
dc.lsp;200,250,300宽梁平面绘制
a.lsp:从pkpm转化为初步设计文字
s.lsp:将梁高度标注降低30mm
vv.lsp:测量板净宽度
w.lsp:排列梁编号工具
fd.lsp:改变梁编号中数字
aa.lsp:通过输入截面面积自动配钢筋
3.使用方法
本程序组是根据建筑结构设计中的各步骤来进行编制的,笔者将结构设计分为初步设计图,梁模板图,板钢筋图,梁钢筋图四个阶段。
设计人员在进行初步设计时,利用dc.lsp可以直接绘制双线作为梁截面线,利用a.lsp 将pkpm文字转化为初步设计标注,完成初步设计。
在梁模板图阶段,利用s.lsp将走廊地面或平台地面的梁高度统一降低30mm。
利用w.lsp进行梁编号绘制,用fd.lsp进行梁编号修改,完成梁模板图设计。
在板钢筋阶段,利用vv.lsp测量板宽,绘制板钢筋。
在梁钢筋阶段,用aa.lsp根据pkpm计算出的截面面积,输入截面面积直接配筋。
完成梁钢筋图设计。
4.程序举例
下面以vv.lsp为例,介绍其程序内容。
vv.lsp程序通过输入AutoCAD已绘制的板内任意一点,自动对围成板的线条进行分析,排除不需要图层,自动测量出板两条线的净宽度值,然后标记在图上。
以下是程序内容:
(defun i1 (a b / a c eea d b1 b2 p1 p2 sset1 len2 hnd2 ent222 pa pb e eea);定义函数和自变量值(setq c 5000);设定距离为5000
(setq eea nil)
(setq d (polar a b c));设定d点,以a点为起点,角度为b,距a点距离为c
(setq b1 (- b (/ pi 2)));设置角度b1为b角度减90度
(setq b2 (+ b (/ pi 2)));设置角度b2
(setq p1 (polar a b1 80));设置点p1
(setq p2 (polar d b2 80));设置点p2
(setq sset1 (ssget "c" p1 p2));选择以p1和p2围成的矩形中所有的图元(setq sset1 (ssget "p" '((-4 . "<or")
(8 . "梁虚线")
(8 . "梁实线")
(-4 . "or>")
)));排除非梁虚线或者是梁实线图层的所有图元
(if (= sset1 nil) (progn
(setvar "osmode" os)
)
);如果没有选中图元,则恢复对象捕捉设置
(setq len2 (sslength sset1))
(setq i 0)
(while (< i len2);进入选中的图元循环
(setq hnd2 (ssname sset1 i))
(setq ent222 (entget hnd2))
(setq pa (cdr (assoc 10 ent222))
pb (cdr (assoc 11 ent222))
);取出一个图元,设置其起点和端点
(setq e (inters
pa
pb
a
d
) );获取直线ad和图元的交点
(if (/= e nil)
(setq ea (distance a e))
);取得a点和e点的距离
(if (= eea nil)
(setq eea ea
pointe e
) )
(if (< ea eea)
(setq eea ea
pointe e
) );进行比较循环,找出离a点最近的一条直线
(setq i (1+ i)) ));结束循环
(defun c:vv ();开始主程序
(setq os (getvar "osmode"));取得对象捕捉设置值
(setvar "osmode" 512);另外设定对象捕捉
(setvar "cecolor" "6");另外设定当前颜色
(setq a (getpoint));取a点为图中点取
(setvar "osmode" 0);设置无对象捕捉
(setq b 0);设置函数需要的角度值
(i1 a b);以a和b为自变量代入函数计算
(setq b (* pi 0.5)
p1 pointe
);赋予计算出来的pointe值给p1
(i1 a b)
(setq b (* pi 1)
p2 pointe )
(i1 a b)
(setq b (* pi 1.5)
p3 pointe )
(i1 a b)
(setq p4 pointe)
;相应四个角度计算出来的四个点的值赋予p1,p2,p3,p4点(setq disab (distance p1 p3))
(setq disac (distance p2 p4))
;得到交点的距离,也就是板内净宽度
(setq disab (rtos disab 2 0))
(setq disac (rtos disac 2 0))
;对取得的宽度值设置格式
(setq l nil)
(setq l1 nil)
(command "text" "j" "bl" a "220" "0" disab)
(setq l (entlast))
(command "text" "j" "br" a "220" "90" disac)
(setq l1 (entlast))
;采用文字命令在图形上绘制出距离值
(setq en_data (entget l1))
(setq oldr (assoc 8 en_data))
(setq newr (cons 8 "板净宽"))
(setq en_data (subst newr oldr en_data))
(entmod en_data)
(setq en_data (entget l))
(setq oldr (assoc 8 en_data))
(setq newr (cons 8 "板净宽"))
(setq en_data (subst newr oldr en_data))
(entmod en_data)
;将刚才绘出的文字指定图层“板净宽”
(setvar "cecolor" "bylayer");返回颜色值
(setvar "osmode" os);返回对象捕捉值
);程序完成
实践证明,应用此程序可以简化设计步骤、节省设计时间。
The application example of AutoLISP program in architectrual drawing
Abstract: under the drawing condition of AutoCAD, the author compiled a series of AutoLISP program according to anguage caracteristics of AutoLISP. improve the efficiency and accuracy of architectrual design.
Key words:Computer, computer drawing, program, AutoLISP, architectural drawing, structural design.
参考文献:
【1】康博创作室,AutoCAD2000使用大全【M】,清华大学出版社,2000.。