Inventor文档特性快速生成及标题栏国标化技术
2013-03-21顾晓彤汤传玲丁必荣
刘 炀, 顾晓彤, 汤传玲, 丁必荣, 王 静
(合肥工业大学机械与汽车工程学院,安徽 合肥 230009)
Inventor 是美国Autodesk公司推出的一套基于Windows平台和自适应技术的优秀三维机械CAD软件,同时集成了微软的COM组件编程技术,用户可根据自己的特殊要求对其二次开发,拥有良好的开放性[1]。近年来,对于Inventor的开发研究主要集中在三维参数化造型方面,在工程图和文档特性方面的研究还较匮乏。如令狐克志[2]等分析API在货架参数化三维造型中的应用,叶乐晓[3]等分析API在家具参数设计中的应用。
文档特性是指Inventor的Properties,用来存储文档的信息,包括零件文档、装配件文档、工程图文档等。文档特性是用户最常用的一个方面,每个文档都包含文件信息、项目信息、状态信息、自定义信息,这些信息在图档管理方面有着重要的应用。若直接从终端用户界面Iproperties对话框访问,显然比较麻烦,需要很清楚知道概要、项目、状态、自定义、物理特性集中的包含的子信息,给操作者带来一定的不便;同时Inventor自身提供的标题栏,数据信息还存在断裂情况,默认的GB1标题栏还有诸多不符合国家标准的问题。基于上述原因,本文提出了面向对象的API的访问方式,有效地解决了文档特性的快速生成和工程图标题栏的国标化两个方面的问题。
1 面向对象的Inventor开发技术
Inventor API的技术基础是微软的自动化(Automation)技术,通过它可以方便有效的利用当前各种流行的高级程序语言,如 VB、VB.NET、Visual C++、C#和Java 等对其二次开发,增加新的功能,优化操作[2]。对于Inventor 文档特性的快速生成和标题栏的国标化是基于文档特性对象而解决的,其对象模型[5]如图1所示。
图1 文档特性对象模型
上述继承图反映了文档特性中不同对象之间的关联性,对象能够实现自上而下继承的关键是获得应用程序 (Application) 对象,它总位于对象继承的顶端。获取Application访问权,可得到API中的任何其他的对象。图1中Documents表示不同类型文档的集,如零件文档、装配文档、工程图文档等;Document表示一个单独的文档,对于每一个文档,都可以进入和它相关联的属性。每个文档都有一个“特性集集合”(PropertySets),通过它可以遍历和访问所有“特性集”(Propertyset);特性集包含着对应的“特性”集合,提供对于它所拥有的“特性”的访问;Property是一个具体的特性,它是名和值的匹配。这种层层递进,简明的访问方式,正是面向对象开发技术的优势。
本文采用Add-In (DLL)[5-6]的方式访问API,原因是DLL插件运行在Inventor相同的处理空间,不仅可以提高运行效率,还具有4种特殊的能力:(1)当 Inventor 启动时,插件可以自动加载;(2)插件可以创建新的命令;(3)插件可以使应用程序的功能始终被用户获得[2];(4)插件在不同PC机上移植性较好。
2 文档特性快速生成技术
在零部件的设计过程中,文档特性是不容忽视的一个方面,能够实现文档特性的快速生成有着重要的意义。对于文档特性的生成,可以通过终端用户界面和API两种方式访问,利用API的方式可实现其快速生成,分别阐述如下。
2.1 终端用户界面的方式
对于文档特性,Inventor自身提供了Iproperties对话框的访问方式,如图2对话框的上部有几个标签如“常规”、“概要”、“项目”、“状态”、“自定义”、“保存”、“物理特性”,这些标签中包含着对零部件特性或者工程图特性的信息设置。如“项目”包含着“零件代号”、“设计人”等,在“自定义”的标签中还可以给文档加入相关联的其它属性。每个标签中包含的信息较大。
图2 文档特性对话框
2.2 API的访问方式
用API访问文档特性时,主要是针对特性集和特性两个对象模块。Inventor的文档特性中有3个标准特性集和一个自定义特性集。对于特性集对应Iproperties对话框标签中“概要、项目、状态”,具体的访问标识如表1所示[5]。
表1 特性集的访问标识
标准特性集可通过“内部唯一号”或者“唯一名”访问,一般不采用显示名,因为对于不同语言版本显示名不同。VB.NET代码如下:
Dim m_doc As Inventor.Document
Dim Indesign As propertyset
Indesign =m_doc.propertysets.item ("内部唯一号/唯一名")
对于自定义的特性集,创建方法如下:m_doc.PropertySets.Add (Name As String,[InternalName]),其中Name和InternalName必须是唯一,否则访问时会冲突。
对于特性,它是特性集中的子信息,如其中一个特性集“项目”包含的“零件代号”、“描述”、“设计人”、“批准人”等都为特性,它们也有相应的标识。特性集“项目”中的部分“特性”标识如表2所示[5]。
表2 特性集“项目”中的部分特性标识
可以通过唯一名、唯一编号和权举值3种方式来访问特性。如访问“零件代号”特性,VB.NET代码如下:
Dim OPartn as property
OPartn = Indesign.Item ("Part Number") 或者
OPartn = Indesign.ItemByPropId ("权举值/唯一编号")
赋值方式为:oPartn.value="Part-001"
同时需要注意一点,“材料”特性的获取不同于其它特性获取。对于材料特性,可把零件文档中常用的材料添加到列表框中,供快速选择调用。VB.NET代码如下:
For Each currentMaterial As Inventor.Material In odoc2.Materials
Me.CombomaterialBox1.Items.Add (currentMat_erial. Name)
Next
对于文本特性对话框中不存在的特性可以通过自定义的方式创建,方法如下:
PropertySet.Add (PropValue, [Name], [PropId])
允许在新建的特性集或者缺省自定义的特性集中添加特性,但是不允许向标准的特性集中添加属性,Name和PropId在该特性集中必须是唯一的,值可以是Variant型,其中object或array除外。
对于自定义则可以通过Delete方法删除,语句是:PropertySet.Delete 或者 Property.Delete
图3是根据个人需要定制的文档特性界面,去除了Iproperties对话框中不需要文档特性,此界面较简洁,可实现快速操作。
图3 文档特性界面
3 工程图标题栏的国标化
工程图仅是设计模型的表达者,所以工程图标题栏的数据来源应该是零部件的原始数据。但在不同文档特性数据关联的过程中,Inventor 2010/2011默认的标题栏GB1本身还存在一些问题如图4所示。(1)重量的填写不需要写单位,(2)“投影符号”与“图样代号”应区别开;(3)没有张数统计,如“共 张 第 页”;(4)对于“工艺”,Inventor本身就没有提供数据结构;(5)标题栏中主视图的“比例”,还不能实现自动填写(与GB/T10609.1-2008[7]比较得出)。
图4 Inventor自带标题栏
解决以上问题的关键技术如下:
1)重量的处理
对于工程图标题栏中重量可通过编辑“标题栏”,引用“物理特性—模型”,然后选择特性“质量”,将其引用到标题栏对应位置,但是这种通过Inventor本身数据关联引入的质量带有单位kg,不符合国标要求,需要对其处理。思路是将零部件文档中质量特性引用到工程图文档特性中,即要实现不同文档之间的特性传递。质量获取流程如图5所示。
图5 质量获取流程图
部分程序语句如下:
For Each odesc in m_doc.Referenced_DocumentDescriptors
odoc3 = odesc.ReferencedDocument
strtext3=odoc3.ComponentDefinition.MassPro_perties.Mass
invcustom=m_doc.PropertySets.Item("Inventor User Defined Properties ").Add (strtext3, "重量")
如图5所示,对于自定义中已存在“质量”特性删除的原因是:防止材料在二次修改重新加载时出现冲突,所以每次要先清除已存在自定义“质量”特性,这样可使材料能随着Add-In界面的选择而实时变化。通过m_doc. ReferencedDocument_Descriptors可以获得当前激活文档的一些内部特性描述,再通过ReferencedDocument可以找到和当前激活文档相关联的特性,在这里主要找到相关联的特性质量,用ComponentDefinition.MassPro_ties. Mass语句。由Mass获得工程图中零部件不带单位的质量值,符合要求。将这个数值添加到工程图自定义的特性“质量”中,对其赋值,然后编辑工程图中的“标题栏”,使“质量”一栏引用的类型为“工程图-自定义”,特性中为自定义的“质量”,这样标题栏中可获得满足标准的质量值。
2)投影符号的处理
对于标题栏,新标准在原有的“零件代号”一栏中加入“投影符号”栏,且规定采用第一角画法时可省略标注,第三角时要标注,两种投影识别符号如图6所示[4]。在这里是通过API调用工程图略图符号的方式,实现了投影符号自动填入标题栏特定的位置。过程是:首先在工程图略图符号中定义两个略图符号,分别建立第一角和第三角图样,并对应命名为“第一角”和“第三角”。获得方式为:
m_doc.SketchedSymbolDefinitions.Item("略图符号名称")。
图6 第一角和第三角投影符号
3)张数和工艺的处理
另外对于标题栏中没有的信息如“当前张数”、“总张数”、“工艺”等通过自定义的方式实现:m_doc.PropertySets.Item ("Inventor User Defi_ned Properties").Add("赋值", "名称")。
4)比例的处理
按设计者表达的需要,一个工程图可能会有多个视图,而这些视图还可能会有不同的比例。但对于被激活工程图文档标题栏中的比例标记则是指主视图的比例,而不是所有视图的比例。与主视图比例不同的视图,按要求单独标记出比例。对于主视图或者其它视图的比例,可以通过选择一个视图右键—“编辑视图”中进行设置,但目前Inventor没有提供与标题栏中比例相关的选择、填写和关联的功能,这说明Inventor的设计数据存在断裂情况,在此通过API访问properties可以有效的解决。比例获取流程图如图7所示。
图7 比例获取流程图
根据上述提供的解决方案,利用API的访问方式,在工程图中加载一个单独的Add-In插件就可以实现标题栏的国标化。但为了使应用程序更简洁实用,把零部件文档特性和工程图中标题栏信息进行集成,使这两个模块集成到同一个界面如图8所示,这样文档特性的快速生成和标题栏的国标化在同一个界面下就可实现。
图8 文档特性和标题栏信息集成界面
两个模块的集成,需解决不同类型文档特性的相互关联,即在界面修改和建立零部件文档特性时,同时工程图的相关联的特性也会自动建立和修改;另外在工程图文档条件下建立或者修改特性,同时零部件相关联的特性也将会自动建立和修改,实现了零部件与工程图文档之间的特性传递。具体实现方式是通过Referenced Document Descriptors和ReferencedDocument两个对象,使不同类型文档之间的相互通信。
通过Add-In集成界面生成的工程图标题栏如图9所示,解决了上述5个问题。此标题栏满足GB/T10609.1-2008的要求,也证明了用API访问文档特性的可行性及快捷方便的优势。
图9 通过集成界面生成的标题栏
4 小 结
论文充分利用Inventor为用户提供的开放式的二次开发环境,基于面向对象的开发技术,对零部件或者工程图常用的文档特性进行集成,使用户建立或者修改文档特性的操作更简洁,同时也实现了符合国家标准化的标题栏信息的快速生成,在一定程度上提高了设计效率。采用DLL插件创建应用程序的方式,使开发更加灵活,而且便于后续版本的更新和维护,同时方便不同PC机之间的移植,为Inventor在其它方面开发提供了借鉴和参考。
[1]陈伯雄, 董仁扬. Autodesk Inventor Professional 2008 机械设计实战教程[M]. 北京: 清华大学出版社, 2007: 562-575.
[2]令狐克志, 王 转. Inventor API 在货架参化三维造型中的应用[J]. 机械工程与自动化, 2005: (1):27-31.
[3]叶乐晓, 潘万彬, 王毅刚. Inventor API在家具参数化设计中的应用[J]. 机电工程, 2007, 24(4): 15-17.
[4]陈伯雄, 张朝阳. Inventor R6 VB(A)程序设计技巧与范例[M]. 北京: 机械工业出版社, 2004: 3-11.
[5]Ekins B. Inventor(R). API: Exploring iProperties and Parameters [R]. 2008: 2-13.
[6]Ekins B. Upgrading your autodesk Inventor add-ins to use the new ribbon user interface [R]. 2009: 3-15.
[7]GB/T 10609.1-2008技术制图标题栏[S].