如何利用AutoLISP及DCL开发渐开线绘制程序论文_陈长利

青岛捷能发电机有限公司 青岛 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

标签:;  ;  ;  ;  ;  ;  ;  ;  

如何利用AutoLISP及DCL开发渐开线绘制程序论文_陈长利
下载Doc文档

猜你喜欢