基于Inventor的变压器工程图自动绘制系统开发
2013-09-13张爱梅吴卫卫李林岩
张爱梅,吴卫卫,李林岩,张 虹
(1.郑州大学机械工程学院,河南郑州450001;2.许继变压器有限公司,河南许昌461000)
0 引言
目前国内的加工制造技术还不能够达到无图生产的条件,因此,二维工程图仍然是表达零部件信息的一种重要的方式[1].
结合国内某变压器公司干式变压器产品族系列化的特点,在完成三维模型参数化之后,系列化的零件工程图的绘制仍存在重复劳动的现象,并且由Inventor三维模型驱动生成的工程图其视图布局、比例、尺寸等都与国标有很大差别,不适合作为直接加工参考,而用软件自带功能修改又很繁琐.为了解决企业在由三维零件生成工程图过程中存在的以上问题,笔者将详细介绍用VB语言对Inventor进行二次开发,编制系列化零件自动绘图系统,实现系列化零件工程图的自动绘制,生成符合国家标准的工程图.
1 方案设计
对于形状相同或相似、尺寸不同的系列化变压器零件的绘制,在Inventor API环境下可通过参数化编程实现.对于此类零件的工程图生成同样可以通过对Inventor进行二次开发完成.Inventor是Autodesk公司推出的基于特征的参数化实体造型软件,也是基于Microsoft Windows的机械设计系统.Inventor可以由三维零部件驱动生成参数化的二维工程图,二维工程图中的注释、尺寸、文件属性等参数与三维模型中的信息是一致的.Inventor提供了强大的二次开发接口,在Inventor中使用API是相当有意义的,在于能够添加一些满足特定专业设计需求的自定义功能[2].
Inventor API是以面向对象的方式暴露应用程序的功能,这种方式比面向过程的方式更容易学会和使用.只要理解和掌握某些面向对象程序设计的一般概念,再结合API对象结构模型就可以进行二次开发[3].
Inventor提供了3种开发途径,分别是Add-In、独立的 EXE 和 Apprentice Serve[4].笔者出于对应用程序用户界面及效率的考虑,以VB6.0作为开发工具,采用Add-In的方式对Inventor进行二次开发.
2 开发的思路及关键技术
变压器零件的主要参数包括结构参数、特征参数及属性参数.Inventor可以由三维零部件自动生成参数化的二维工程图,其中,结构参数及特征参数用来约束主结构尺寸及特征尺寸的变化范围,从而控制视图放置位置及视图比例;属性参数用来控制技术要求以及标题栏中工程图号、材料等属性的自动生成.笔者将使用Excel表作为参数数据库,不同型号变压器的参数分别存放在不同的Excel表中,用户可通过选择不同的Excel表来完成参数的替换.笔者的开发思路即是在Inventor工程图环境下,通过参数数据库选择及三维零件的调用生成位置及比例适中的视图,然后以视图线条为基准完成尺寸标注、符号标注及技术要求填写等一系列操作,达到工程图自动绘制的目的.系统总体框图如图1所示.
一张完整的零件图包含的内容很多,而在变压器的系列零件绘图时,当零件尺寸发生变化时,图纸中的尺寸也会随之发生改变,图纸中包含的尺寸、形位公差、粗糙度等的标注如果按原来的程序自动标注就会出现乱标的问题.因为尺寸、形位公差及粗糙度等在Inventor工程图中一般是按照在图纸中的坐标标注的,在零件尺寸发生变化时,坐标也会发生改变,以至于寻找不到所应该标的坐标[5].而笔者通过聚类及比较几何量的方法找到边界线条作为尺寸及一些符号标注的参照,然后在图纸中用相对坐标进行标注,使系列化零件的工程图标注达到国家标准的要求.这种寻找边界代理的方法也成为本课题的关键技术.
图1 系统总体框图Fig.1 Framework of the system
3 自动绘图系统的实现过程
3.1 工程图模板定制
在Inventor的“Metric”选项卡里提供了很多不同标准的模板,“GB.idw”符合中国的国家标准.为更进一步满足企业要求,笔者对标题栏进行修改,对绘图环境进行设置,然后保存为工程图模板.修改后的标题栏如图2所示,表中的“名称”、“材料”、“零件代号”等以属性文字的形式输入,表示在自动生成工程图时这些项目可以继承三维零件的属性参数自动填充.
3.2 系统实现过程
图2 修改后的标题栏样式Fig.2 The modified title block
由于本系统的开发使用Inventor自带的开发模板Wizards,首先要安装工具……/AutoDesk/Inventor11/SDK/Tools/Developers/Wizards;启动VB6.0新建“Inventor Add-In”工程,此时需要完成对Inventor及 Excel对象库的引用,选择“工程”菜单里的“引用”项,在弹出的窗口中勾选“AutoDesk Inventor Object Library”和“Microsoft Excel 12.0 Object Library”.然后需要完成对象声明,参数数据库调用以及工程图保存路径设置等的工作.主要对象声明及赋值如下:
Inventor应用程序实例对象变量声明并赋值:
Dim oapp As Inventor.Application
Set oapp=AddInSiteObject.Application
Excel表的声明与赋值:
Dim XLApp As New Excel.Application
Dim Wrk As Excel.Workbook
Dim Sht As Excel.WorkSheet
Set XLApp=CreateObject("Excel.Application")
Set Wrk=XLApp.Workbooks.Open(Text1.Text,False,True)
Set Sht=Wrk.Worksheets("Mainly")结构参数的赋值举例:
Jba_L=Sht.Cells(107,5)/10
Jbi_L=Sht.Cells(106,5)/10
属性参数赋值举例:
xinghao=Sht.Cells(3,2)
工程图的保存路径,按照企业的要求工程图自动保存在以Excel表名称为名称的文件夹里,路径创建的主要程序如下:
Dim filename As String '从完整路径中分离出文件名,不包括后缀
filename=fl_filename(Text1.Text)
spath2=spath0&filename&“工程图”
If Dir(spath,vbDirectory)= ""Then
MkDir(spath2)
Else
Dim N1 As Integer
N1=MsgBox("该计算单文件夹已经存在选择“是”继续进行)
3.3 工程图的生成
以变压器零件“拉板”为例说明工程图的生成过程.按照企业的要求,零件工程图图纸大小选择A4,调用上文中定制的模板即可.用户操作界面如图3所示.用户只需要选择Excel参数数据库(这里Excel表是以变压器的容量命名的,选择不同容量的Excel表即完成参数的替换),然后选择需要调用的三维零件,系统即可根据结构参数及特征参数确定合适比例,生成标准的三视图,完成尺寸及一些符号标注以及属性参数的继承、工程图自动保存等一系列操作.
图3 用户操作界面Fig.3 User interface
图4所示是选择容量为1 250 kVA的Excel表以及其所对应的三维零件生成的“拉板”工程图.而当选择2 000 kVA或者其它容量的Excel表以及其所对应的三维零件生成“拉板”工程图时,由于零件尺寸的变化,即使选择合适比例,视图及线条的尺寸也会有所变化,为保证尺寸及符号同样标注在合适的位置,就需要用到寻找边界代理的方法,找到尺寸及符号标注的参照.
图4 “拉板”工程图Fig.4 Drawing of“La Ban”
Inventor工程图几乎所有的标注都是基于投影视图中的线条的,以图4左视图中右侧的粗糙度符号标注为例,如果找到粗糙度符号所标注的线条(即左视图中最右侧的竖直线条),然后给它一个编号作为代理,那么就可以以这个代理为参照进行标注,粗糙度符号的位置是以这个代理线条为参照采用相对坐标进行标注的,从而保证了粗糙度符号与该线条相对位置的稳定.此后不管选择哪个容量的“拉板”零件,即使投影视图大小有所变化,但这个线条的代理编号是不会变的,粗糙度的标注也不会出现混乱的现象.尺寸标注也是同样的原理.下面就结合主要程序进行说明.
首先应该以视图(oView)为基础挑选出形状为直线的线条,并且定义一个集合olines进行存储:
For Each oDrawingCurve In oView1.Drawing-Curves
If oDrawingCurve.CurveType=kLineSegment-Curve Then
olines.Add oDrawingCurve
然后利用向量比较挑选出直线线条中的竖直线并存储在集合oVerLines中:
Set oZVec=oTG.CreateVector2d(0,1)
For Each oDrawingCurve In olines
If oVec.IsParallelTo(oZVec)Then
oVerLines.Add oDrawingCurve
最后通过几何量比较也即将竖直线条中点坐标的X值最大的线条找出:
For Each oDrawingCurve In oVerLines
Set oMidpoint=oDrawingCurve.MidPoint
Dim oMaxX As Single
oMaxX=oVerLines.Item(1).MidPoint.X
For i=1 To oVerLines.Count
Set oMidpoint=oVerLines.Item(i).MidPoint
If oMidpoint.X>oMaxX Then
oMaxX=oMidpoint.X
Set oDrawingCurves(1)=oDrawingCurve
这样将最右边的竖直线条找到,并且用序号1作为代理.可以用oDrawingCurves(1)来代表这个线条进行有关操作.例如图4左视图中的粗糙度标注可用如下方法:
Set oMidpoint = oDrawingCurves(1).Mid-Point
Set oGeometryintent=oSheet.CreateGeometry-Intent(oDrawingCurves(1),oMidpoint)
Call oLeaderPoints.Add(oGeometryintent)
Set oSymbol=oSheet.SurfaceTextureSymbols.Add(oLeaderPoints,kBasicalSurfaeType)
oLeaderPoints.Clear
利用同样的方法可以找出形状为圆形、半圆形、椭圆形等等的线条作为边界线条并用不同的编号作为代理,进行尺寸标注及必要的符号标注,从而解决系列化零件的工程图标注问题,完成工程图的自动绘制.
4 结论
笔者利用VB语言对Inventor进行二次开发,在企业完成变压器零件参数化设计后,以此为基础开发出系列化零件的工程图自动绘制系统,避免了工作人员的重复劳动,极大地提高了企业的绘图效率.笔者提出的寻找边界代理的方法为工程图绘图系统的开发提供了极大的便利,使有关工程图的开发变得容易上手.同时也希望在今后的工作中能够不断完善该系统.
[1]胡仁喜,康士廷.Autodesk Inventor Professional 2010中文版从入门到精通[M].北京:机械工业出版社,2009.
[2]陈伯雄,张朝阳.Inventor R6 VB(A)程序设计[M].北京:机械工业出版社,2004.
[3]令狐克志,王转,程国全.Inventor API在货架参数化三维造型中的应用[J].机械工程与自动化,2005,128(1):26-28.
[4]叶乐晓,王毅刚.基于Inventor API的家具三维造型设计[J].计算机工程与设计,2008,29(2):496-499.
[5]李生元,尚锐.Solidworks二次开发技术在工程图中的应用[J].辽宁工业大学学报,2010,30(6):374-376.