用AutoLISP程序提高绘图效率的几个实例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2007.12
科技广场
254
工程中经常要绘制各种弹簧和螺纹连接件,在AutoCAD中没有专门绘制弹簧和螺纹的命令,弹簧和螺纹在AutoCAD中都可用平面图形通过相应螺旋线拉伸而成,所以绘制螺旋线就是解决问题的关键。如果用常规的3dpoly命令绘制三维螺旋线,需要输入大量精确数据,才能一点一点地画出螺旋线,做法非常麻烦。现在提供AutoLISP程序,即可解决绘制螺旋线的问题。然后通过相应平面图形的拉伸,就可以完成弹簧、螺纹等零件的绘制。
根据圆台螺旋线的形成原理(一动点M绕圆台的母线AB作等速直线运动,而该母线AB又绕圆台的轴线O1O2作等角速旋转时,点M的运动轨迹即为圆台的螺旋线,如图二所示。圆柱螺旋线是圆台螺旋线的特例,故可通过圆台螺旋线程序做相应的变动,即可得到),动点M(x,y,z)的参数方程如下:
图二园台螺旋线
X=[r0+hg *α/(2π)]*cosα
Y=[r0+hg *α/(2π)] *sinα
Z=±vg *α/(2π)
其中,r0为圆台下面的半径,α为螺旋线角,vg为导程(单线螺旋线螺距(弹簧的节距)等于导程),hg为点M沿水平半径方向上增加的距离(hg=|(r1-r0)m|求得,m为螺旋线的圈数)。
下面提供圆台螺旋线的AutoLISP程序清单:
(defun c:luoxc(/)
(setq b1 (getpoint" 指定基点:"))
(setq r1 (getreal "指定初始半径:"))
(setq disp (getreal "指定节距:"))
(setq angtg (getreal "输入锥形角:"))
(setq m (getint"输入圈数:"))
(setq n (getint"输入每圈细化段数<36>:"))
(cond ((null n )(setq n 36)))
(setq delta (/ (* 2.0 pi ) n))
(setq j (/ disp n))
(setq bb (caddr b1))
(setq tg (*(/ angtg 180) pi))
(setq ang 0)
(setq k 0)
(command "ucs" "o" b1)
(command "3dpoly" (list r1 0 0))
(repeat (* m n)
(setq k(+ k 1))
(setq ang(+ delta ang))
(setq r (- r1 (* (+ 0(* j k))(/ (sin tg )(costg)))))
(setq pt2 (list (* r(cos ang))(* r(sin ang))(+ 0(* j k))))
(command pt2)
)
(command "")
)
根据圆台螺旋线的形成原理,如果圆锥角为0度时,即可形成圆柱螺旋线。圆柱螺旋线程序清单如下:
(defun c:luoxc(/)
(setq b1 (getpoint" 指定基点:"))
(setq r (getreal "指定初始半径:"))
(setq vg (getreal "指定节距:"))
(setq m (getint"输入圈数:"))
(setq n (getint"输入每圈细化段数<36>:"))
(cond ((null n )(setq n 36)))
(setq delta (/ (* 2.0 pi ) n))
(setq j (/ disp n))
(setq bb (caddr b1))
(setq ang 0)
(setq k 0)
(command "ucs" "o" b1)
(command "3dpoly" (list r 0 0))
255
2007.12
科技广场
256