青岛捷能发电机有限公司 青岛 266000
摘要:汽发机的定子线圈端部是某渐开线的其中一段,在进行线圈的二维图绘制时,由于AutoCAD没有绘制渐开线的功能,采用传统的逐点描图法,尺寸准确度不足,绘图效率也不高。AutoLISP的优点在于其程序中几乎可以引用AutoCAD的所有功能,进行图形处理的自动化;缺点是解释执行,程序运行速度较慢。本文即是基于AutoCAD强大的二次开发兼容性,利用AutoLISP语言及DCL语言编写渐开线绘制脚本,以期提高绘图效率。
关键词:AutoCAD;AutoLISP;DCL;渐开线;菜单;工具栏
引言
因AutoCAD中没有绘制渐开线的命令,而汽发机定子线圈端部形状为渐开线,采用传统逐点绘制法,准确度不高,效率也很低。通过加载本文编写的脚本程序直接绘制出标准的渐开线,并截取实际所需的渐开线段,可准确绘制汽发机定子线圈端部展开图,提高绘图效率。
1 渐开线绘制程序思路
把渐开线划分成极微小的曲线段,每段用一小段云形线代替,以大量的微小云形线模拟曲线。
1.1 脚本加载
渐开线脚本程序源码(jkx.lsp)如下:
(defun C:jkx()
(setq pi1(/ pi 180))
(setq po0(getpoint " \n 请输入中心点<0,0>:"))
(if(= po0 nil)
(setq po0(list 0 0 0))
)
(setq d(getreal "\n 请输入分度圆直径<100>:"))
(if(= d nil)
(setq d 100)
)
(setq step(getreal "\n 渐开线精度<1>:"))
(if(= step nil)
(setq step 1)
)
(setq angle(getreal "\n 渐开线终止角度<360>:"))
(if(= angle nil)
(setq angle 360)
)
(setq rd(/ d 2))
(setq os(getvar "osmode"))
(setvar "osmode" 0)
(command "ucs" "O" po0)
(command "circle" "0,0" rd)
(setq st 0)
(setq x rd)
(setq y 0)
(setq xy(list x y))
(command "spline" xy)
(while(<= st angle)
(setq str(* pi1 st))
(setq x(* rd(+(cos str)(* str(sin str)))))
(setq y(* rd(-(sin str)(* STR(cos str)))))
(setq xy(LIST x y))
(command xy)
(setq st(+ st step))
)
(command "")
(command "")
(command "")
(setvar "osmode" os)
(command "ucs" "P")
)
使用方法:打开记事本或其它文本文件,输入以上程序代码后保存为jkx,并将文件扩展名修改为.lsp。打开CAD,在工具->加载应用程序,弹出加载/卸载应用程序对话框,在保存目录下选中要加载的应用程序,点击加载按钮,在命令行显示”_appload 已成功加载 jkx.lsp”。到此应用程序加载完成,
在命令行输入命令jkx,按空格或Enter键,依次输入基圆中心点坐标、基圆半径、渐开线精度、渐开线终止角,便可完成渐开线绘制,如图1所示:
图4 绘制按扭在工具栏的示意
1.3 添加绘制渐开线菜单
源码如下:
***MENUGROUP=MYLISP
***POP1
ID_JKX [特殊曲线(&J)]
ID_JKX1 [绘制渐开线(&J)\tShift+J]^C^C_jkx
[--]
ID_JKX2 [DCL绘制渐开线(&K)...\tShift+K]^C^C_jkx1
***HELPSTRINGS
ID_JKX1 [绘制渐开线:jkx]
ID_JKX2 [绘制渐开线:jkx1]
***ACCELERATORS
ID_JKX1 [SHIFT+"J"]
ID_JKX2 [SHIFT+"K"]
使用方法:打开记事本或其它文本文件,输入以上程序代码后另存为jkx,并将文件扩展名修改为.mnu。打开CAD,在工具->自定义->菜单,弹出菜单自定义对话框,点击菜单组,然后点击浏览,选择要加载的文件jkx.mnu,如图5所示:
图6 渐开线绘制命令菜单添加如果图示
2 辅助程序
有时候为了更直观的设置曲线的相关参数,特此引入了DCL对话框开发程序。
2.1 DCL程序
源码(jkx.dcl)如下:
jkx:dialog{
label="渐开线绘制";
:row{
:boxed_column{
label="参数设置";
:edit_box{
label="基圆直径";
edit_width=8;
key="krd";
}
:edit_box{
label="渐开线精度";
edit_width=8;
key="kjd";
}
:edit_box{
label="渐开线终止角度";
edit_width=8;
key="kzd";
}
}
:image{
key="kimage";
color=114;
width=20;
}
}
ok_cancel;
}
2.2 驱动程序
源码(jkx1.lsp)如下:
(defun c:jkx1()
(setvar "cmdecho" 0)
(dcl_jkx)
(prin1)
)
(defun dcl_jkx()
(setq dcl_id(load_dialog "jkx"))
(if(< dcl_id 0)(exit))
(if(not(new_dialog "jkx" dcl_id))(exit))
(set_tile "krd" "100")
(set_tile "kjd" "1")
(set_tile "kzd" "360")
(setq x1(dimx_tile "kimage"))
(setq y1(dimy_tile "kimage"))
(start_image "kimage")
(fill_image 0 0 x1 y1 -2)
(slide_image 10 -10 x1 y1 "E:\\张三\\autolisp 开发资料\\DCL渐开线绘制\\jkx.sld")
(end_image)
(action_tile "accept" "(get_data)(done_dialog 1)")
(action_tile "cancel" "(done_dialog -1)")
(setq dd(start_dialog))
(cond((= dd 1)(ok_jkx))
)
(unload_dialog dcl_id)
)
(defun get_data()
(setq d(atof(get_tile "krd")))
(setq step(atof(get_tile "kjd")))
(setq angel(atof(get_tile "kzd")))
)
(defun ok_jkx()
(setq pi1(/ pi 180))
(setq po0(getpoint " \n 请输入中心点<0,0>:"))
(if(= po0 nil)
(setq po0(list 0 0 0))
)
(setq rd(/ d 2))
(setq os(getvar "osmode"))
(setvar "osmode" 0)
(command "ucs" "O" po0)
(command "circle" "0,0" rd)
(setq st 0)
(setq x rd)
(setq y 0)
(setq xy(list x y))
(command "spline" xy)
(while(<= st angel)
(setq STR(* PI1 st))
(setq x(* rd(+(cos str)(* str(sin str)))))
(setq y(* rd(-(sin str)(* str(cos str)))))
(setq xy(list x y))
(command xy)
(setq st(+ st step))
)
(command "")
(command "")
(command "")
(setvar "osmode" os)
(command "ucs" "P")
)
加载后点击特殊曲线->DCL绘制渐开线菜单或在命令行输入jkx1,弹出参数设置对话框,如图7所示:
图7 渐开线绘制参数设置窗口图示
3结语
综上所述,本文主要讲述了如何利用AutoLISP及DCL语言编写渐开线绘制脚本程序,以及在CAD中添加工具栏按钮、菜单栏来调用该程序,实现绘图功能,其它曲线的绘制原理与渐开线大同小异,根据相应曲线的参数方程及边界条件,将曲线划分成很多个极小的曲线段,依次连接成模拟曲线即可。
为了程序的保密性,可以利用Visual LISP编辑器,将jkx及jkx1程序生成后缀为.vlx的应用程序,其它使用者便不会知道该程序的具体实现方法。
以上程序均在AutoCAD2004中调试通过,但2006以后的版本加载菜单及工具栏略有不同,请有兴趣的朋友自己进一步去研究,本篇文章不再赘述。
参考文献
[1]吴永进,林美樱.AutoLISP&DCL基础篇[M].北京:中国铁道出版社,2003.
[2]王军.在AutoCAD中用菜单加载AutoLISP程序的方法与技巧[J].机械工人,2006(3):77-79.
作者简介
陈长利(1982—),男,工程师,主要从事汽轮发电机的设计。E-mail:xveryth@sina.com
论文作者:陈长利
论文发表刊物:《建筑学研究前沿》2019年5期
论文发表时间:2019/7/11
标签:渐开线论文; 程序论文; 加载论文; 曲线论文; 菜单论文; 线圈论文; 应用程序论文; 《建筑学研究前沿》2019年5期论文;