|
AUTOLISP编程在深化设计中的应用
————旋转楼梯放样程序
摘要:本文以工程中旋转楼梯的放样程序的运用为例,阐述了AUTOLISP程序的编写,加载,运行,到结果记录的整个过程,并附带了其他程序源代码。(这里只贴了主程序)
关键词:AUTOLISP; 旋转楼梯;重复;程序;放样。
前言:伴随着AUTOLISP语言的日臻成熟和完善,许多自行研发的程序已经广泛的应用于施工设计的各个过程中。尤其是近年来钢结构建筑的广泛普及和使用,使得钢结构深化设计正在向一条优化、简洁、高效的方向发展。
在实际的工作中,对于多维结构(如:旋转楼梯、空间桁架等)的深化设计放样往往是耗时耗力,而且还很容易出现错误,这也就间接的导致了施工的质量和效率不是很高,同时也给制作和安装带来了许多麻烦!为此根据实际工作需要运用LISP语言编写了旋转楼梯的放样程序,并希望以能给钢结构深化工程技术人员的深化工作有所启发和帮助。
程序的特点:
本程序使用于柱体旋转楼梯、锥体旋转楼梯及倒锥体旋转楼梯的实体放样,仅需要在深化设计时输入若干个基本参数,即可快速生成AutoCAD环境下的旋转楼梯的三维模型,
程序源代码
;====================================================
; 本程序适用于柱体旋转楼梯、锥体旋转楼梯及倒锥体旋转楼梯的实体放样.
; 2000.6.1 LJC
; 2000.5.30 2000.6.1 LJC
; 2004.5.18 LJC
;====================================================
(defun C:xlt(/)
(command "_vpoint" "_non" "*-1,-1,1")
(setq b1(getpoint "\n旋转楼梯下端圆心b1: "))
(setq ang0(getreal "旋转楼梯总转角ang0:"))
(setq a(getreal "旋转楼梯下端圆半径R=:"))
(setq b(getreal "旋转楼梯上端圆半径R=:"))
(setq h(getreal"旋转楼梯上、下端高差H=:"))
(setq tg(getreal"旋转楼梯台阶高tg=:"))
(setq tk(getreal"旋转楼梯宽度TK=:"))
(setq n1(/ h tg))
(setq n2(fix n1))
(SETQ TG1(/ H N2))
(setq m 0.000)
(setq mm 0.000)
(setq n(fix h))
(setq delt (/ (*(/ ang0 180) pi) n ))
(setq j( / h n))
(setq ang 0)
(setq jj 0)
(command "ucsicon" "or" )
(command "ucs" "o" b1)
(command "3dpoly" (list a 0 0))
(setq pt1(list a 0 0))
(setq pt11 pt1)
(repeat n
(setq jj(+ jj 1))
(setq j1(+ 0 (* j jj)))
(setq ang (+ delt ang))
(setq r(- a (/ (* j1 (- a b))h)))
(setq pt2(list (* r (cos ang))(* r (sin ang))(+ 0 (* j jj))))
(setq m1(distance pt1 pt2 ))
(setq pt1 pt2)
(setq m(+ m m1))
(princ"正在生成梯内梁,请稍等!! ")
(command pt2)
)
(setq pa(angle pt11 pt2))
(command "")
(setq r(+ tk r))
(setq pt1(list (* r (cos ang))(* r (sin ang))(+ 0 (* j jj))))
(command "3dpoly" pt1)
(repeat n
(setq jj(- jj 1))
(setq j1(- 0 (* j jj)))
(setq ang (- ang delt))
(setq r(+ a (/ (* j1 (- a b))h)))
(setq r(+ tk r))
(setq pt2(list (* r (cos ang))(* r (sin ang))(+ 0 (* j jj))))
(setq mm1(distance pt1 pt2 ))
(setq pt1 pt2)
(setq mm(+ mm mm1))
(princ"正在生成梯外梁,请稍等!! ")
(command pt2)
)
(command "")
(repeat n2
(setq jj(+ jj tg1))
(setq j1(+ 0 (* j jj)))
(setq ang (+ ang (* delt tg1)))
(setq r(- a (/ (* j1 (- a b))h)))
(setq pt2(list (* r (cos ang))(* r (sin ang))(+ 0 (* j jj))))
(setq r(+ r tk))
(setq pt3(list (* r (cos ang))(* r (sin ang))(+ 0 (* j jj))))
(command "3dpoly" pt2 pt3 "")
(princ"正在生成梯踏板,请稍等!! ")
)
(SETVAR "SURFTAB1" 60)
(command "zoom" "e")
(command "circle" "0,0,0" a )
(setq ljc(entlast))
(command "circle" (list 0 0 h) b )
(setq gq(entlast))
(command "_rulesurf" ljc gq)
(command "_shademode" "g")
(SETQ LJ 0.0000)
(setq wj 0.0000)
(SETQ LJ (/ m n2))
(setq wj(/ mm n2))
(SETQ N3 (- N2 1))
(textscr)
(princ"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n------ljc------谢谢惠顾!!------ljc------")
(princ"\n\n梯内梁长度为: ")
(PRINT M)
(PRINT )
(princ"\n梯内梁梯踏板间距为: ")
(PRINT lj)
(PRINT )
(princ"\n梯外梁长度为: ")
(PRINT MM)
(PRINT )
(princ"\n梯外梁梯踏板间距为: ")
(PRINT wj)
(PRINT )
(princ"\n梯踏板总数为: ")
(PRINT N3)
(PRINT )
(princ"\n注:本设计数据均为旋转梯梯梁内净尺寸。")
(princ"\n\n\n------ljc------谢谢惠顾!!------ljc------ ")
(PRINT )
(princ"\n****** 读取设计数据后,请按F2键退出文本框!! ******" )
(PRINT )
(textscr)
)
(princ "\n*** 中国二十二冶金结设计研究所 ***
*** The program was writen by ljc 2000.6.1 ***
**** 旋转楼梯放样程序已成功加载!! 谢谢惠顾!! ——ljcgq-2004.5.1 *** "
)
(princ)
结束语
在详图设计工作中我们经常会遇到一些重复性的绘制工作,或者人为不好操作的事件,这个时候我们可以借用autolisp来实现命令的集成,一次完成多个连续的命令,这样既节省了时间而且还有较高的精确度。
ljc
2005.4.13