黄代国
摘 要:为提高特殊模板刀具装配图的绘制效率,该文以SGM的特殊模板为案例,提出了效率提升的两个可能方向并研究分析其可行性。之后利用AutoLISP语言进行具体程序设计,分别针对两个提升方向提出了关键设计方案,最终完成了零件序号自动标注程序、尺寸标注及信息自动填写程序。经对比完成相同任务的所消耗的平均时间,证实了所设计的程序确实做到5倍效率的提升。
关键词:AutoLISP 刀具装配图 自动编号 读写块属性
中图分类号:TG659 文献标识码:A 文章編号:1672-3791(2019)05(c)-0061-02
1 引言
1.1 概述
大型汽车制造公司都要求刀具供应商在项目终验收前按该公司的特殊模板提供刀具装配图纸。这种刀具装配图的绘制是一项技术含量极低但工作量却极大的任务。本文将以提升这类图纸的绘图效率为出发点探索出一种可行的方法。
1.2 特殊模板刀具装配图
刀具装配图的绘制工作主要有刀具零件图插入、装配,零件序号标注,关键尺寸标注及填写,表格信息填写。
特殊模板装配图也有相同的工作内容。其特殊之处在于不同的格式要求。主要是针对零件序号标注、尺寸标注及填写。
1.3 CAD开发语言AutoLISP
刀具装配图纸都是以CAD软件来编辑的,就算是以其他软件创建最终也会保存为CAD可以编辑的格式。
通过AutoLISP语言编写LISP程序可以让我们在CAD软件上创造出任意想要的绘图功能。
AutoLISP的强大之处在于:
不管你所要创造的功能看起来有多么复杂,只要它所有参数已知就可以编写出LISP程序,让计算机自动执行一系列操作瞬间完成绘制任务。
2 效率提升方向及可行性分析
要提升特殊模板刀具装配图的绘制效率,首先要找出耗时较多的步骤。
以SGM模板为例,耗时较多的是零件序号标注,尺寸标注及填写。
2.1 零件序号标注的分析
以SGM的刀具装配图为例,在常规的绘制中每标注一个序号都需要5个操作命令,平均约17s可以完成一个序号的标注。
理想的高效绘制是只用1个命令,点击1次引线起点,再点击1次序号放置点就完成1次序号标注。以此为目标构思出这个序号标注命令的操作步骤:(1)选择引线起点;(2)选择序号放置点;(3)插入序号块;(4)根据已有序号计算出应标注序号;(5)更改块属性中的序号为相应序号;(6)以引线起点与序号放置点为端点绘制引线;(7)截除引线在圆圈内的一段。
在以上步骤中,除了(1)、(b)两个步骤需要人工来辨认及选择位置,其余步骤都是根据已有的参数来进行相应的操作,这种工作完全可以通过LISP程序来完成。
2.2 尺寸标注及尺寸值填表分析
同样以SGM装配图为例,在常规的绘制中每标注一个尺寸都需要8个操作,加上尺寸值填写,平均约60s可以完成一个。
理想的高效绘制是只用1个命令,点击1次尺寸起点再点击1次尺寸终点就完成1次标注。以此为目标构思出这个尺寸标注命令:(1)选择尺寸起点;(2)选择尺寸终点;(3)根据已有尺寸号计算出应标注尺寸号;(4)用户输入该尺寸的公差值;(5)根据公称尺寸值及公差值计算上下限尺寸;(6)获取尺寸表的块信息计算各尺寸应填写位置;(7)更新尺寸表。
在以上步骤中,除了(1)(2)两个步骤需要人工选择位置,(4)步骤需要人工输入,其余步骤都是根据已有的参数来进行相应的操作,这种工作完全可以通过LISP程序来完成。
3 辅助绘图功能设计
3.1 自动编号的序号标注功能设计
这部分的关键设计有:获取插入块的图元名、序号的自动增加、引线的截取。
(1)获取插入块的图元名。
要更改插入块的信息,首先需要获取该插入块的属性。在插入块后直接使用entlast函数来获取该模块的名称,使用exploded来炸开模块,再次使用entlast可以取得我们要更新序号的实际属性块。
(command "explode" (entlast))
(setq ent (entlast))
(2)序号的自动增加。
因为我们要求零件序号自动增加,所以可以使用一个全局变量K来存放零件序号并将其初始值定为1。
(if (= ordernumber nil) (setq ordernumber 1))
每次标注完序号将该值加1,这样下次标注的时候就是新的已增加的序号了。
(setq ordernumber (1+ ordernumber))
(3)引线的绘制、截取。
我们绘制引线,用entmake语句在用户选择的引线起点和块插入点之间绘制一条直线。再用break语句截去在D18圆圈范围内的线段。将以上关键设计测试通过,程序的其余部分就可以轻松完成。
3.2 特殊要求的尺寸标注功能设计
这一部分的关键设计有:标注内容更改、尺寸号的递增、尺寸表图元获取、尺寸值的获取。
(1)标注内容更改。
我们使用entmake来标注尺寸,因为在使用这个函数的时候可以将尺寸线上的填写内容更改为strcat“X”H,这样一来尺寸线上就不会显示具体尺寸值而是显示我们所需要的尺寸号。如“X”H,H是尺寸号需要递增。
(cons 1 (strcat "\"X\"" (itoa diamNumber)))
(2)尺寸号的递增。
与零件序号的递增设计相同,我们使用一个全局变量H来存放尺寸号,并将其初始值定为1,每次标注完一个尺寸就将该值加1。
(setq diamNumber (+ diamNumber 1))
(3)尺寸表图元的获取。
尺寸表图元的获取是一个难点问题,因为对同一个图元来说,每一次打开图纸都会有不同的图元名。所以我们不能用固定的图元名来获取表格信息。
这个问题可以用宏命令来解决。我们知道,在同一个的模板图框中尺寸表的位置是固定的。所以我们可以通过宏命令点击固定坐标点来取得表格块,从而获取该表格块的所有信息,包括图元名。
宏程序:
(setq en3 (car (entsel)))
192.4195,106.9134
_stopscript
LISP程序:
(if (= en4lstAttrs nil) (prong (setq vn0 (vlax-ename->vla-object en3))(setq lstVar (vla-getattributes vn0))(setq en4lstAttrs (vlax-safeArray->list (vlax-variant-value lstVar)))))
(4)尺寸值的获取。
通过(entmake)绘制尺寸后,使用(entlast)获取刚绘制的图元信息。提取组码为42的对表所代表的值,这个值就是公称尺寸。
(if (= 42 (car item)) (setq dia (atof (rtos (cdr item) 2 3))))
再通过命令栏的交互获取用户输入的公差信息,计算出上限尺寸及下限尺寸。然后根据尺寸号diamNumber,在尺寸表图元信息中搜寻对应的尺寸应填写位置,将该处的原始符号更改为我们需要填写的具体尺寸。
(setq diaNu (itoa diamNumber))
(setq tagXA (strcat xz diaNU "A") tagXB (strcat xz diaNu "B")
tagXC (strcat xz diaNU "C"))
(foreach attr en4lstAttrs (setq TagString (vla-get-TagString attr)) (setText tagXA diaUper) (setText tagXB dia)(setText tagXC diaLow) )
将以上关键设计测试通过,并辅以相关的其他语句,完成了尺寸标注及填写程序。
4 实际效果与结论
4.1 实际效果
最终经过实际使用测试,序号标注程序运行良好,实际达到了“一个命令,两次点击”完成零件序号标注的任务。标注一个零件序号平均耗时3s,相对耗时17s一个的传统绘制方式,效率提升了5倍。
尺寸標注填写程序运行良好,实际达到了“一个命令,两次点击”完成尺寸标注及信息填写的任务。标注并填写一个尺寸平均耗时11s,相对耗时60s一个的传统绘制方式,效率提升了5倍。
4.2 结论
该文研究如何快速高效地绘制特殊模板装配图,通过切实可行的思路,实际完成了两个具体的LISP程序,可以使绘图效率提升5倍。其中的关键设计,具有一定的普遍意义。
参考文献
[1] 王宗文.AutoLISP & DCL语言在工程设计中的应用[J].广西交通科技,2001,26(2):43-45.
[2] 吴永进.AutoLISP&DCL基础篇[M].北京:中国铁道出版社,2003.
[3] Mcfarlane B, Mcelhinney CP.Using AutoLISP with AutoCAD[M].John Wiley&Sons,Inc,1998.



