Inventor二次开发在Web-3D零件库系统中的应用
2014-10-10武园园孙文磊
武园园,孙文磊,何 丽
WU Yuan-yuan,SUN Wen-lei,HE Li
(新疆大学 机械工程学院,乌鲁木齐 830047)
0 引言
随着市场竞争的日趋激烈以及网络技术的不断完善,企业间对制造业信息的需求不断的加大。与此同时,网络零件库系统诞生了,并受到广泛关注。单机版的零件库系统已经无法满足现代企业的需求,只有基于异构CAD平台的网络零件库可以为企业用户提供更多的资源[1]。要完成网络零件库系统主要功能的开发,主要是通过软件的二次开发来实现。目前,很多三维软件都提供了二次开发接口。如Inventor、UG NX、CATIA等。Inventor软件具有良好的开放型,它提供了充分的二次资源开发接口和开发方法,用户可以在其平台上开发满足自己特定要求的产品[2]。
因此,本文通过研究Inventor二次开发,实现了Web-3D零件库系统中零件模型的可视化、零件模型的参数提取以及在线参数化驱动等功能。整个过程以Visual Studio 2008作为主要开发工具。
1 NET平台下Inventor二次开发
1.1 NET平台下的Inventor二次开发技术
Inventor软件提供了强大的二次开发接口—Inventor API。Inventor API(Application Programming Interface)的技术基础是微软的自动化技术。用户通过Inventor API,可以直接使用OLE Automation技术实现Inventor的二次开发[3]。因此,可以用支持OLE Automation技术的各种高级语言来控制Inventor的各种对象与相关属性等,例如Visual Basic、Visual C++、C#、Java等。在Inventor Professional 2012中,提供了三种API开发途径:Add-In、独立的EXE(Standalone EXE)和Apprentice Server[4]。为了实现在不打开软件的模式下,对Inventor进行二次开发,该系统采用独立的EXE开发模式。直接通过编程来实现零件库系统的相关功能。
同时,Inventor API是一种以面向对象的方式提供应用程序对象功能的应用程序接口。它提供了Inventor的各种对象的内在功能,并且各个对象间是一种相互继承的关系[5]。
对于Inventor2012,Inventor API for.NET提供了多个DLL文件。在进行Inventor的二次开发时,只需要在.NET平台下引用Autodesk.Inventor.Interop.dll文件,获取对Inventor根对象Application的访问权,利用C#语言以面向对象的方式编写应用程序,通过调用函数来实现对Inventor各种操作,如打开/关闭三维零件模型文件、导出wrl文件与零件参数化驱动等。
1.2 系统中运用c#对Inventor二次开发的过程
为了提高零件库系统的运行速度,Inventor二次开发采用不启动软件的模式,同时用户无需安装软件就可以实现对Inventor零件模型的相关操作。
系统中Inventor二次开发的具体过程如图1所示。首先引入COM库类型文件(Autodesk Inventor Object Library),初始化COM库;其次,运用C#调用函数调用库中的根对象Application,建立与Inventor的通信;然后,通过C#函数调用相关的对象、属性或者方法来实现。
图1 Inventor二次开发流程
2 Inventor二次开发在零件库中的应用
2.1 Inventor二次开发实现系统功能概述
web零件库系统中,零件模型的可视化、参数化设计、三维模型的上传与下载及在线动态连接数据库等功能都涉及到Inventor二次开发技术,具体的功能流程如图2所示。
图2 零件库系统中的功能流程图
2.2 基于Inventor二次开发的参数化设计
零件库系统一般用于存储大量零部件模型及相关数据信息,其构建形式不外乎两种:其一,使用三维CAD软件为大量型号的零部件模型建模,将所有模型存储于数据库中;其二,利用CAD软件的参数化建模方法,按照模型模板+参数系列的方法存储数据[6]。对比这两种构建零件库的方法可得知,使用前一种方法构建的系统访问速度快,但其数据量过于庞大,数据冗余较多,同时建库工作量大,不易于维护。而后一种方法减小了服务器中的数据量,在系统维护及建库工作量方面都比前一种方法有很大的优势。
因此,零件库系统采用了“模型模板+参数列表”的形式构建系统模型数据库,用户所需模型由在线调用Inventor二次开发接口而生成。同时,为了减少数据库的存储量,并满足用户的特殊要求,系统提供了在线参数化驱动功能。用户浏览零件模型时,如果需要不同尺寸的零件模型,可以在现有模板参数的基础上修改参数,系统则自动生成相应尺寸的模型,并导出wrl文件,储存在临时文件夹里,显示在页面上,供用户浏览/下载[7]。
零件库系统实现参数化驱动大致需要以下三个步骤:首先,用户在浏览模型及参数时,根据自己的需求在系统的要求范围内修改模型文件的原始参数,并将修改后的参数提交给服务器;然后,服务器利用Inventor接口函数启动应用程序,调用库中的模型文件和用户修改后的参数值,更新原始模型文件,导出wrl文件,存储在临时文件夹里,完成零件的在线参数化驱动;最后,服务端将更新后的新零件模型的wrl文件更新到客户端供用户浏览,而存于服务端临时文件里的模型文件则供用户下载。实现参数化驱动的关键代码如下:
2.3 Inventor二次开发接口的封装设计
综合考虑Inventor在线参数化驱动过程的实现,若将实现相应功能的共性操作提取出来,按照统一的格式进行定义,然后将其封装为一个公共的接口,这样不仅可以保证对Inventor软件操作的一致性,而且能够屏蔽掉对Inventor软件的二次开发接口的具体实现过程[8]。因此,对Inventor进行二次开发,将常用功能按照面向对象编程的方法进行封装是系统开发过程中重要的过程。
Inventor二次开发中实现相应功能的操作大致包括:打开/关闭模版文件、提取与修改参数、导出wrl文件、Inventor软件是否启动调整等。将其操作按照统一的格式进行定义,然后将其封装为一公共的接口。Inventor二次开发接口封装类库派生关系如图3所示。具体步骤如下:
首先,引入Inventor软件的类型库(Autodesk Inventor Object Library);
其次,根据COM接口对OLE组件自动化技术的支持,C#编程通过CreateInstance方法获得Application对象;
通过C#编程,完成相应的功能操作。
最后,把公共接口以类库的形式封装起来,在系统应用程序中添加引用该类库。
通过以上对Inventor二次开发接口的封装,不仅避免了参数化实现过程的繁琐与重复,而且使得系统本身的逻辑更加清楚,维护与升级工作更为容易。
图3 Inventor二次开发接口封装
3 应用案例
零件库后台管理系统上传页面如图4所示。三维零件模型可以按照节点进行分类上传。上传过程中,应用程序自动读取模型的参数等信息,导出wrl文件,并将两者存放在数据库中。
图4 后台管理系统上传页面
系统中模型的可视化以及在线参数化驱动的实现页面如图5所示。在该页面中,用户可以进行三维模型文件浏览,浏览模型驱动参数,以及进行在线参数化驱动,生成用户需要的三维CAD模型,供用户下载。
图5 在线参数化页面
4 结论
本文通过深入研究C#编程,并以Inventor二次开发技术为核心,论述了Inventor二次开发在Web-3D零件库系统中的应用。文中详细论述了Web-3D零件库系统中零件模型的参数化设计与接口的封装等功能的实现方法与过程,实现了给用户提供一个共享Inventor资源平台的理想。基于零件库系统,用户可以下载现有的或者参数化驱动后的模型等资源后,直接用于自己的设计等工作,从而提高企业及其它用户的工作效率。
[1]钟佩思,栾倩,刘梅,王景林,辛纪光.面向网络化资源共享的零件库系统研究与实现[J].机械设计与制造,2010,2(2):249-251.
[2]吴卫卫,乔领干,张爱梅.基于Inventor的二次开发中引出序号添加方法的研究[J].制造业自动化,2013,35(1):73-76.
[3]陈伯雄,张朝阳.InventorR6VB(A)陈谷设计[M].机械工业出版社,2004.
[4]令狐克志,王转,程国全.Inventor API在货架参数化三维造型中的应用[J].机械工程与自动化,2005,(1):26-29.
[5]董涛,张宇,李勃,李果.Inventor二次开发在高低压开关设备参数化造型中的应用[J].机械与电子,2009(4):34-36.
[6]何丽,孙文磊,王宏伟.基于UG的Web三维零件库系统开发[J].机床与液压,2012,40(11):91-94.
[7]王宏伟,孙文磊,何丽.AJAX技术在Web零件库系统中的应用研究[J].制造业自动化,2011,33(12):107-110.
[8]何丽,孙文磊,王宏伟.异构CAD平台网络零件库系统的研究与实现[J].机械设计与制造,2012(2):266-268.