网站开发工程师自学,江东外贸seo网站建设,一般的学校网站怎么做,网站建设的资源哪里弄用Autolisp 在AutoCAD中实现多种曲线的绘制一、引言#xff1a;AutoCAD自1982年由Autodesk公司推出以来#xff0c;经历了20年的发展更新#xff0c;目前#xff0c;已深入到包括机械、建筑、服装、航天航空、地质气象等等的众多领域中。AutoCAD已成为众多工程设计人员的首…用Autolisp 在AutoCAD中实现多种曲线的绘制一、引言AutoCAD自1982年由Autodesk公司推出以来经历了20年的发展更新目前已深入到包括机械、建筑、服装、航天航空、地质气象等等的众多领域中。AutoCAD已成为众多工程设计人员的首选设计软件其格式也逐渐成为各CAD系统间的交换标准。AutoCAD之所以有如此广泛的应用除了其功能强大、易学易用外还在于它是一个开放的交互软件自85年推出的2.17版中AutoCAD就内嵌了Autolisp语言方便用户对其进行二次开发。自此便有无数的工程技术人员成为Autodesk公司的编外程序员。随着AutoCAD版本的不断升级它所支持的开发环境也不断增加如ADS、ARX、Diesel、DCL、VBA等等。但由于方便和易学易用Autolisp始终是技术人员在开发AutoCAD时运用最多的编程语言。同时也有更多的工程技术人员投入到Autolisp的学习之中来。但是毕竟Autolisp也是一种编程语言学习起来远不如学习AutoCAD的操作来得简单。故也有部分技术人员在学习过程中有危难情绪针对这一情况本人在此通过一种方法、三个例子来阐述Autolisp编程的一般过程希望能对Autolisp初学者有所帮助。二、Autolisp的二次开发(一)问题提出尽管AutoCAD在各个领域中有着广泛的应用但总不会面面俱到在机械行业中经常要画一些复杂曲线如三角函数曲线、渐开线、螺旋线等等。这些曲线在AutoCAD中没有专门的命令难以用一般的方法绘制尽管机械制图国家标准中有用圆弧近似替代渐开线和螺旋线的画法但它们一不准确不能通过装配干涉二不方便需要取很多位置点才能画出。而用Autolisp编程绘制却能快速准确的得到所需图形。(二)曲线绘制1、获取曲线的数学模型正弦曲线x ay sin a渐开线x br * (cos a a sin a)y br * (sin a a cos a)圆柱螺旋线x r cos ay r sin az s * a /(2π)(s取正值为右旋、取负值为左旋)2、设计程序框图3、程序代码如下;画正弦曲xa , ysin a ;(defunc:zxqx(/ da bp Ai lpt bp1 bp2)(initget 1)(setq bp (getpoint\n 起始点?:))(initget 7)(setq da (getangle\n 角度增量?:))(setq Ai 0 Ae (* pi 2.0)bp1 (car bp) bp2 (car (cdr bp)))(while ( AiAe)(setq lpt (append lpt (list (list ( bp1 Ai) ( bp2 (sinAi))))))(setq Ai ( Ai da)))(setq lpt (append lpt (list(list ( bp1 Ae) ( bp2 (sin Ae))))))(setvar cmdecho0)(commandpline)(foreach pt lpt (commandpt))(command ^c)(command pedit lf)(command ^c)(setvar cmdecho1));渐开线画法xbr*(cos(a)a*sin(a))ybr*(sin(a)-a*cos(a));(defunc:jkx(/ ti lpt ae pt bp1 bp2)(initget 1)(setq bp (getpoint\n 起始点?:))(initget 7)(setq br (getreal\n 基圆半径?:))(initget 5)(setq ai (getangle\n 起始角度?:))(initget 7)(setq ae (getangle\n 终止角度?:))(initget 7)(setq da (getangle\n 角度增量?:))(setq bp1 (car bp) bp2 (car(cdr bp)))(while ( aiae)(setq lpt (append lpt (list (list ( bp1 (* br ( (cos ai) (* ai(sin ai))))) ( bp2 (* br (- (sin ai) (* ai (cosai)))))))))(setq ai ( ai da)))(setq lpt (append lpt (list(list ( bp1 (* br ( (cos ae) (* ae (sin ae))))) ( bp2 (* br (-(sin ae) (* ae (cos ae)))))))))(setvar cmdecho0)(commandpline)(foreach pt lpt (commandpt))(command ^c)(command pedit lf)(command ^c)(setvar cmdecho1));螺旋线画法xr*cos(2pi/k) , yr*sin(2pi/k) , z(/-)s/k.;s:导程(右旋-左旋)k每圈等分数。(defunc:yzlxx(/ bp r a s k n bp1 bp2 bp3 dmax di da pt lpt)(initget 17)(setq bp (getpoint\n 螺旋线中心))(initget 7)(setq r (getdist bp\n 螺旋线半径))(initget 3)(setq s (getreal \n导程(/右旋,-/左旋)))(initget 7)(setq n (getreal \n圈数))(initget 6)(setq k (getint \n每圈等分数36(宜取36的整倍数)))(if (not k) (setq k36))(setq bp1 (car bp) bp2(cadr bp) bp3 (caddr bp))(setq dmax (fix(* kn)))(setq da (/(* 2 pi)k))(setq a 0)(setq di 0)(while (di dmax)(setq lpt (append lpt (list (list ( bp1 (* r (cos a))) ( bp2 (* r(sin a))) ( bp3 (* (/ s k) di))))))(setq di ( di 1))(setq a ( da a)))(setvar cmdecho0)(command3dpoly)(foreach pt lpt (commandpt))(command ^c)(setvar cmdecho1))4、几点说明(1)、以上三个程序编程思路是一样的若需要绘制其它曲线只要将其数学模型适当变换后代入程序中即可实现所需功能。(2)、该渐开线只能绘基圆上正东方向象限点上的渐开线如要获取其他方向上的渐开线可以在AutoCAD中修改获得。(3)、绘制螺旋线的程序较2001年第6期上郭克希副教授的程序有所改进原程序因为圈数n作为循环记数只能是整数使螺旋线圈数只能为整数而该程序中圈数n可以为实数。(4)、建议将lpt等参数设为局部变量以减少内存占用率。(5)、最后一个程序绘制螺旋线后未用f拟合曲线是因为3dpoly绘制的曲线拟合后就不能作为实体的拉伸路径了。5、编入菜单(1)、编入下拉菜单在acad.mnu文件中的***POP7**DRAW后的ID_Pline[Polyline]^C^C_pline 下面加入以下语句即可ID_jkx[Jkx]^C^C_jkxID_yzlxx[yZlxx]^C^C_yzlxxID_3dpoly[3DPolyline]^C^C_3dpoly(2)、编入工具条可直接在工具条上右键进行定制在此不做赘述。三、应用