王弘慧 ,李建辉
(1.哈尔滨轴承集团公司 质量管理部,黑龙江 哈尔滨 150036;2.中航工业哈尔滨轴承有限公司 研发中心,黑龙江 哈尔滨 150036)
AutoCAD是由美国Autodesk公司推出的通用绘图设计软件,功能强大,但其功能还仅限于帮助用户完成CAD中的图形显示和绘制。AutoCAD开发性好,可以利用Autolisp进行二次开发,通过接口将其余高级应用相连接,可实现结合造型、分析计算等功能,提高辅助设计能力。本文通过编写Autolisp程序,实现AutoCAD能以参数化绘图为基础的实体参数化设计。用户只要给出参数如直径、长度等信息,通过检索图形库,即可快速生成所需图形。
所谓参数化绘图,是指用户根据参数对话框的提示,输入相关的参数,就能绘制出所需的图样。实质上,就是将图形信息记录在程序中,图形的描述通常可分为:图形的拓扑关系、图形的几何参数以及这些集合参数与图形结构参数之间的联系,通常用一组变量记录图形的集合参数(如点的坐标),用一系列的赋值语句表达几何参数与及结构参数(如图形的长、宽等)之间的关系,然后用一系列的调用语句来描述图形的拓扑关系。对于一般的参数化绘图的程序设计,可以遵循以下步骤:
(1)分析结构特征,确定绘图参数。通常绘制一个零件图样,需要很多尺寸,但是不可能把所有尺寸都做参数化。这时就需要我们分析这个零件,确定既能体现零件的结构特征,又能推导出其他尺寸的基本尺寸作为绘图参数,参数越少越好。
(2)按照图形要求,编写绘图程序。在工程设计中,所有图形都可以分解为点、直线、圆弧、圆这四种基本图元。在二维图形中,集合信息表示为图形元素的关键点,例如点的坐标、直线的起点和终点、圆弧的起点和终点和圆的圆心,基本图元用多种参数表示,将这些拓扑关系及控制变量信息编制成程序,设计出一组在形状和结构上具有相似性的产品模型,当修改图形数据库中的参数时即可生成不同尺寸的图形。
Autolisp语言是嵌套于AutoCAD内部,是AutoCAD开放式设计的具体表现。使用Autolisp可直接调用几乎所有AutoCAD命令,Autolisp语言既具有一般高级语言的基本结构和功能,又具有一般高级语言所没有的强大的图形处理功能,是当今世界上cad软件广泛应用的语言之一。
Autolisp语言的一个最大特点是语法较为简单易懂,广泛地应用于AutoCAD的二次开发上。此外,Autolisp语言还能够利用pdb函数驱动dcl(dialog control language)文件创建自己的对话框,实现自定义的交互式参数设定对话模式,实现个性化图形设计。
编制参数化绘制深沟球轴承的Autolisp程序,各坐标点如图1 所示。
图1 深沟球轴承示例图
(defun c:test_exmaple()
(setvar "cmdecho" 0)
(setqD_out (getreal " 输入轴承外径尺寸D:")
d_in (getreal " 输入轴承内径尺寸d:")
T_all (getreal " 输入轴承装配高T:")
D2_out (getreal " 输入轴承外圈挡边径尺寸D2:")
d2_in (getreal " 输入轴承内圈挡边径尺寸d2:")
P0(getreal " 输入轴承中心径尺寸P0:")
Dw(getreal " 输入轴承配套钢球直径Dw:")
draw0_pt_0 '(0.0 0.0))
(sub_draw01 draw0_pt_0)
(sub_draw02 draw0_pt_0)
(sub_draw04 draw0_pt_0)
(sub_trim circle_draw04_pt0_1 draw01_pt_4_5 draw02_pt_4_5)
(sub_trim circle_draw04_pt0_2 draw01_pt_6_7 draw02_pt_6_7))
(defun sub_draw01(draw0_pt_0) ;此处为子程序"sub_draw01 "的开始。
(setq draw01_pt_0 (polar draw0_pt_0 (* pi 0.5) (/D_out 2.0))
draw01_pt_1 (polar draw01_pt_0 0.0T_all)
draw01_pt_3 (polar draw01_pt_0 (* pi 1.5)D_out)
draw01_pt_4 (polar draw0_pt_0 (* pi 0.5) (/D2_out 2.0))
draw01_pt_4_5 (polar draw01_pt_4 0.0 (/T_all 2.0))
draw01_pt_7 (polar draw0_pt_0 (* pi 1.5) (/D2_out 2.0))
draw01_pt_6_7 (polar draw01_pt_7 0.0 (/T_all 2.0)))
(command "line" draw01_pt_0 draw01_pt_1 "")
(setq line01_0_1 (entlast))
(command "line" draw01_pt_3 draw01_pt_0 "")
(setq line01_0_3 (entlast))) ;此处为子程序"sub_draw01 "的结束。
……"sub_draw01"为第一个子程序,负责计算"draw01_pt_0"与 "draw01_pt_1"的坐标并绘画出两点间的直线,其余的子程序"sub_draw02"、"sub_draw04"、" sub_trim "因篇幅较长且彼此相似,故将其省略。
程序编制完毕保存后,在AutoCAD下方的输入栏中输入"(load "test_exmaple")命令,按“回车键”将看到状态栏中显示提示"test_exmaple",再次在输入栏中输入"test_exmaple"命令,将看到输入栏提示"输入轴承外径尺寸D: ",在冒号后输入外径尺寸例如:100,然后按回车,将看到输入栏提示"输入轴承内径尺寸d: ",然后依次根据提示的文字内容输入d,T,D2,d2,P0,Dw等轴承参数所对应的数据。输入完毕后,AutoCAD自动进行各坐标点的计算并绘制出示意图,双击鼠标中键,将看到按照用户输入尺寸所绘制的轴承示意图。
实践表明,与传统的交互式绘图相比,应用AutoCAD中内嵌的Autolisp进行参数化绘图的方法,可以实现复杂、繁琐、重复性绘图的“一键化”操作,这将大大减少工程设计人员不必要的 重复绘图劳动,明显提高设计效率和准确性。此外,不仅仅在二维图中可以进行参数化绘图,而且在三维立体图中也同样可以进行广泛的应用。