1、用用 VisualLISP 开发开发 AutoCAD 表面粗糙度标注工具表面粗糙度标注工具 汪国荣(中国南车集团眉山车辆厂铸锻公司,四川,眉山,620032)摘 要 首先对嵌入在 AutoCAD 系统内的 LISP 语言特点作了简要介绍,然后详细地介绍了如何利用 LISP 语言编写和调用表面粗糙度标注程序,来增强 AutoCAD 系统功能。关键字 表面粗糙度;AutoCAD;LISP 语言;函数;绘图 0、前言、前言 AutoCAD 是美国 Autodesk 公司 1982 年推出的微机交互式图形系统,通过 20 多年的发展,其功能得到了很大的扩展和增强,已是目前最流行的计算机辅助设计软件之一
2、,它以其强大而又完善的功能以及方便、快捷的操作在机械、建筑和工程设计领域中得到了广泛应用,但遗憾的是在该系统中未提供表面粗糙度的标注功能,这给经常绘制金属零件加工图的工程人员带来不便。不过,利用捆绑在 AutoCAD(R14 以后的版本)中的 VisualLISP 集成开发环境进行 LISP 语言二次开发,可以帮 AutoCAD 系统实现粗糙度标注功能。1、LISP 语言简介语言简介 1986 年,Autodesk 公司 为 了 便于 用 户 在AutoCAD 基础上作二次开发,形成专业化的计算机辅助设计系统,自 R2.18 版本开始,Autodesk公司在 AutoCAD 内部嵌入了 Aut
3、oLISP 语言,并采用了与标准的 LISP 语言最为相近的语法和约定,同时还扩充了许多适用于 CAD 应用和专用功能。形成了能在 AutoCAD 系统内以解释方式运行的函数求值型语言。随着计算机软硬件技术的飞速发展,AutoLISP 由于缺乏集成开发环境,源程序只能在一般文本编辑软件上编辑,不具备其他语言常用的跟踪、断点、单步等程序调式手段,已不能适应 AutoCAD 环境下的较大型用户化CAD 应用系统开发,因此 Autodesk 公司不断地推出新的开发系统,从 R11 开始推出 ADS,从 R13开始推出 ARX,但都是基于 C 语言的开发环境,用户不易在短期内掌握。终于在 1998 年
4、 3 月,Autodesk 公司从 R14 开始推出新一代可视化 LISP编程软件VisualLISP。2、编写标注表面粗糙度的编写标注表面粗糙度的 LISP 程序程序 1)编程绘图的基本思路 、定义点坐标。如图 1 所示,首先按照国标GB/T 131-96 对表面粗糙度符号的规定,以用户输入的第一点(PB1B)为基点,线段PB1BPB2B与水平线成60 度,定义表面粗糙度符号各端点的坐标,相关线段的角度和长度。、绘出粗糙度基本图形。已知各点的坐标,利用绘图函数(pline)绘出粗糙度符号的初始图形。、求出旋转角度。如图 1 所示,以PB1B为基点,用户鼠标指针在屏幕上的坐标点为P,利用求角度
5、函数(getangle)可以求线段PB1BP与水平线的倾角,即求得粗糙度基本图形旋转的角度。、求得文本放置对角线坐标。根据旋转角,利用求极坐标函数(polar)求出放置粗糙度数值文本的对角线坐标点txt_pB30B和txt_pB4B。、旋转图形。利用绘图函数(rotate)将起初绘好的粗糙度基本图形旋转角度、填写粗糙度数值。已知txt_pB4B和txt_pB30B对角坐标,以及旋转角度,利用文本函数(Mtext),绘出表示粗糙度数值的文本。以上是编程绘图的基本思路,当然具体编程不会这么简单,因为粗糙度的标注有三种情况,每种情况的粗糙数值又不同。表示粗糙度数值的文字方向又有两种情况,因此要利用条
6、件函数将不同情形区分开来,分别处理,才能保证程序更加完善。2)运行 VisualLISP 软件和保存 LISP 文档 11.p 3.txt_p 30.txt_p 4p 1p(x,y)30p 42图 1 标注粗糙度编程原理图 编写LISP程序,首先运行AutoCAD,然后依次打开“工具(UTU)”“AutoLISP(USU)”“Visual LISP 编辑器”,在VisualLISP菜单栏打开“文件(UFU)”“新建文件(UNU)”,系统将打开一个未命名的空白LISP文档,进入编辑状态,可在编辑器内输入LISP源程序,如图 2 所示。程序输入完毕后,在菜单栏打开“文件(UFU)”“保存文件(US
7、U):”,出现“另存为”对话框,在“保存在(UIU)”所对应的目录列表框内选取AutoCAD系统目录,确保LISP文件保存在AutoCAD目录下。在“文件名(UNU):”对应的文本框内输入“ACAD”,在“文件类型(UTU):”所对应的下拉式组合框内选取“LISP 源文件”,最后点击“保存(USU):”按钮完成文件保存,如图 3 所示。3)编写 LISP 程序(defun C:roughness()(setvar osmode 15359)(set pt1(getpoint n请确定要标注表面粗糙度起始点位置:)(setvar osmode 0)(set ang_pt4(/pi 3)(set
8、ang_pt3(*pi 0.66667)(set ang_circle(/pi 2)(set distance_p1_p2 12.7017)(set distance_p1_p34 5.7735)(set distance_p1_circle_center 3.33333)(set radius_center 1.66667)(set distance_p1_p3040 11.3725)(set ang_pt40 1.31415)(set ang_pt30 1.82744)(set pt2(polar pt1 ang_pt4 distance_p1_p2)(set pt3(polar pt1
9、ang_pt3 distance_p1_p34)(set pt4(polar pt1 ang_pt4 distance_p1_p34)(set rough_type(getstring n 请选择表面粗糙度符号:去除材料(1)/不去除材料(2)/任何方法(3)(击回车键表示选“1”):)(if (or(=rough_type 1)(=rough_type)(setq rough(getstring n请键入表面粗糙度数值(击回车键表示数值 6.3):)(setq rough(getstring n请键入表面粗糙度数值(击回车键表示无数值):)(if(and(=rough)(or(=rough_
10、type 1)(=rough_type)(setq rough 6.3)(if(or(=rough_type 1)(=rough_type)(setq l1(command pline pt2 w 0.08 0.08 pt1 pt3 pt4)(if(or(=rough_type 2)(=rough_type 3)(setq l1(command pline pt2 w 0.08 0.08 pt1 pt3 )(setq line1(entlast);求旋度 (setvar osmode 15359)(setq rotate_ang(getangle pt1 n请确定表面粗糙度符号旋转角度(起始点
11、到鼠标坐标点所成矢量的角度):)(setvar osmode 0)(if(=orthomode 1)(command ortho off)(command rotate line1 pt1(rad_degree rotate_ang d)(set txt_pt4(polar pt1(+rotate_ang ang_pt4)distance_p1_p34)图 2 VisualLISP 开发环境 图 3 保存文件对话框 (set txt_pt30(polar pt1(+rotate_ang ang_pt30)distance_p1_p3040)(set circle_center(polar pt
12、1(+rotate_ang ang_circle)distance_p1_circle_center)(if(and(-rotate_ang(/pi 2)0)(=(-rotate_ang(/pi 2)pi)(setq txt_angle(+rotate_ang pi)(setq txt_angle rotate_ang)(if(/=rough)(command mtext txt_pt4 r(rad_degree txt_angle d)j mc txt_pt30 rough)(if(=rough_type 3)(command circle circle_center radius_cent
13、er)(setvar osmode 15359)(set pt1 nil)(。)(defun rad_degree(a k)(if(=k d)(setq a1(/(*a 180)3.1415)(setq a1(*(/a 180)3.1415)4)调用 LISP 程序 、使 AutoCAD 自动装载 LISP 程序 当用户运行AutoCAD时,ACAD.LSP文件将自动加载到用户打开的第一个图形文件中,为了确保用户在打开每一个图形文件时AutoCAD都装载ACAD.LSP,可在AutocAD系统命令行输入系统变量“TACADLSPASDOC”,使其值为T1,或者进行系统选项设置:用鼠标在菜单栏选
14、取“工具(UTU)”“选项(UNU)”,选取“系统”属性卡,如图 4 所示,在“基本选项”栏里复选“每个图形均加载 Tacad.lspT”。进入AutoCAD系统后,roughness就成了系统命令,可以在命令行输入此命令随时调用粗糙度标注程序,然而,每次使用时都要手工输入命令,太繁锁,因此有必要将该命令与工具栏按钮建立关联。、自定义与 LISP 程序相关联的按钮 用鼠标选取“工具(UTU)”“自定义(UCU)”“工具栏(UTU)”,选取“命令”卡片,在左栏中的“分类(UGU)”列表框内选取“用户定义”,在右栏中的“命令(U0U)”列表框里选取“用户定义的按钮”,并将其拖放到“标注”工具条上。
15、点击刚拖放的空白按钮,出现如图 5所示的属性页,点击“编辑”按钮,通过“按钮编辑器”绘制一个表示粗糙度的图案,然后在“与 此 按 钮 关 联 的 宏”栏 里 输 入“CC_roughness”,点击“应用”按钮即可完成自定义按钮的关联设置。用户自定义按钮的使用 当完成了自定义按钮的关联设置后,新增按钮就成了系统新的工具,用鼠标点击它,系统会立即调用粗糙度标注程序,相当方便实用。3、结束语 有了 VisualLISP 集成开发环境,大大方便了AUTOCAD 用户和 LISP 语言爱好者,大家可以充分发挥自己的才智,开发出更多、先进的绘图工具、程序和 CAD 系统,供大家互相学习和交流,共同推动我国 CAD 水平不断提高。图 5 按钮特性设置 图 4 系统选项设置 参考文献 1 孔宪庶、刘仁杰,计算机绘图,辽宁科学技术出版社,1996 年 6 月 附:作者简介:汪国荣(1973),男,湖南衡山人,工程师,1999 年毕业于大连铁道学院材料科学与工程系塑性成形工艺及设备专业,工学学士,现从事锻压设备维修技术与管理工作。联系方式:1、Email:W 2、Tel:0833-8503158(办),0833-8355359(小灵通)