混合编程二次开发在水利水电工程设计中的应用
2016-09-05李希龙
李希龙
(中国电建集团贵阳勘测设计研究院有限公司,贵州 贵阳 550081)
混合编程二次开发在水利水电工程设计中的应用
李希龙
(中国电建集团贵阳勘测设计研究院有限公司,贵州 贵阳 550081)
利用混合编程对AutoCAD与CATIA进行二次开发,实现了跨平台的无损数据传递,提高了软件之间的协同设计能力。以水工建筑物开挖面三维建模为例,介绍了混合编程在水利水电工程设计中的具体应用。
水利水电;混合编程;二次开发;开挖;CATIA;AutoCAD;ObjectARX
AutoCAD是广大设计人员普遍采用的工具软件,具有良好的用户界面和强大的二维制图功能,已成为平面制图领域事实上的标准;但AutoCAD软件的三维造型功能较弱,对复杂曲面和实体的建模能力不足。CATIA是一款主要面向航空航天、汽车、船舶等制造行业的三维设计软件,因其强大的三维建模及参数化、模板化设计能力,近年来在水利水电工程设计中得到了越来越广泛的应用;然而CATIA软件对点、线、面等基本图元的建模要求更为严格,缺乏灵活性。
目前AutoCAD与CATIA软件之间仅能进行简单的二维数据传输,不能直接进行三维数据交换。本文利用ObjectARX VC++与VB.net混合编程技术,通过对AutoCAD和CATIA进行二次开发,将AutoCAD图形数据无缝导入到CATIA中,实现了跨平台的数据传递,提高了软件之间的协同设计能力。
1 基于AutoCAD和CATIA的二次开发混合编程原理
1.1混合编程的概念和意义
混合编程是指通过使用两种或多种编程语言编写源代码,使其共同形成一个应用程序的方法。如今水利水电工程设计中用到的软件越来越多,软件平台之间的数据交换也越来越频繁,这些数据交换通常需要二次开发才能实现;由于不同的应用软件往往采用不同的二次开发编程语言,为适应不同软件的二次开发要求,混合编程技术的应用显得越来越重要。
1.2AutoCAD及CATIA二次开发简介
AutoCAD的二次开发方式有VisualLisp、VBA、ObjectARX C++等。其中VisualLisp和VBA简单易学,开发周期短,但这两种方式对面向对象的编程支持较弱,程序运行效率低,不易实现较复杂的算法,一般适合于小型实用工具的开发;ObjectARX C++完全采用面向对象编程原理,能对AutoCAD进行底层二次开发,具有功能强大、运行效率高的特点,使用该方法能方便的开发出简洁高效的应用程序,因此对具有复杂算法的大型应用程序,大多采用该方式进行二次开发。
CATIA的二次开发方式主要有3种,即Automation API、CAA和VB.net。其中Automation API是一种交互式的二次开发方式,它通过录制宏记录软件的操作过程,自动生成相应的VBScript或JavaScript程序代码,用户通过修改该代码生成自己的二次开发程序。该方法虽然简单易用,但程序封装性差,特别是受到API开放接口的限制,不能对软件进行深层次二次开发[1]。CAA(Component Application Architecture)采用面向对象编程语言C++进行二次开发,能在最底层对软件功能进行扩展,具有强大的交互、集成和自定义的能力。然而CAA二次开发体系过于庞大且复杂,它包括一整套函数库、组件库等,其学习难度大,一般设计人员不易掌握。VB.net是在VisualStudio环境下,采用VB编程语言对CATIA进行二次开发,该方法引进面向对象的编程原理,同时兼顾VB简单易用的特性,具有较高的开发效率,能满足大多数的CATIA二次开发需求。
1.3AutoCAD和CATIA二次开发混合编程原理
经比较上述各种二次开发方式,采用ObjectARX C++及VB.net分别对AutoCAD和CATIA进行二次开发,具有运算效率高、学习难度适中及开发周期短的优点。但由于两个平台所使用的二次开发语言不相同,故不能在统一编程环境下直接进行数据交换。
笔者经反复测试,可通过二次开发混合编程将AutoCAD图形数据成功导入到CATIA中。即先利用VB.net编制CATIA数据写入函数,并编译成生成DLL文件。然后在ObjectARX中添加混合编程支持,添加引用此前VB.net编写的DLL文件,再通过VC++读取AutoCAD图形数据,同时调用DLL函数启动CATIA写入数据,流程如图1所示。
图1 AutoCAD与CATIA二次开发混合编程流程图
2 AutoCAD和CATIA二次开发混合编程的实现
在VS2008环境下,利用ObjectARX 2010 VC++及VB.net,说明通过二次开发混合编程,将AutoCAD图形数据导入CATIA的实现过程。
2.1创建解决方案和工程
在VS2008中创建一个名称为“CADtoCATIA”的解决方案,并添加两个工程。其中一个工程名称为“VBforCATIA”,利用VS2008向导创建,开发语言选择“Visual Basic”,模板类型选择“Class Library”;另一个工程名称为“ARXforCAD”,利用ObjectARX 2010向导创建,并选择“.Net mixed managed code support”选项。
2.2CATIA数据写入程序
在“VBforCATIA”工程中,利用VB.net对CATIA进行二次开发。
(1)修改“VBforCATIA”工程中默认的类名称为“CVBforCATIA”。
(2)在“VBforCATIA”工程属性中,添加引用CATIA自带的系统类型库,如图2所示。
(3)在程序代码中导入CATIA类型库:
Imports ProductStructureTypeLib
Imports MECMOD
Imports PARTITF
Imports HybridShapeTypeLib
(4)调用CATIA并新建数据写入文件,主要代码如下:
‘定义CATIA对象
Dim my_CATIA As INFITF.Application
Dim my_PartDoc As PartDocument
‘获取CATIA应用程序
On Error Resume Next
My_CATIA = GetObject(,"CATIA.Application")
If Err.Number <> 0 Then
My_CATIA = CreateObject("CATIA.Application")
End If
’新建Part文档
my_PartDoc = My_CATIA.Documents.Add("Part")
(5)在“CVBforCATIA”类中,编写CATIA数据写入函数(以点数据的写入为例):
Public Class CVBforCATIA
{
……
Public Function CreatePoint( ByVal pt_x
图2 添加引用CATIA类型库
As Double,ByVal pt_y As Double,ByVal pt_z As Double)
{
……
Dim new_PT As HybridShapePointCoord
new_PT = my_PartDoc.Part.HybridShapeFactory.AddNewPointCoord(pt_x,pt_y,pt_z)
……
}
}
CATIA数据写入程序完成后,编译生成“VBforCATIA.DLL”文件以供后续ObjectARX程序调用。
2.3AutoCAD数据读取程序
在“ARXforCAD”工程中,利用ObjectARX VC++对AutoCAD进行二次开发,以读取AutoCAD图形中的数据(以点数据的读取为例):
AcDbObject* pObj=NULL;
AcDbObjectId obj_ID;
AcGePoint3d pt;
……
Acad::ErrorStatus es=acdbOpenAcDbObject(pObj,obj_ID,AcDb::kForRead);
if (eOk==es && pObj->isKindOf(AcDbPoint::desc()))
{pt=AcDbPoint::cast(pObj);}
2.4调用DLL文件并写入数据
在“ARXforCAD”工程中,添加引用DLL文件,并调用相应函数将数据写入CATIA[2]。
(1)在“ARXforCAD”项目属性中,添加对“VBforCATIA.DLL”文件的引用。
(2)声明并实例化DLL封装类:
ARXforCAD::CARXforCAD ^ my_ObjDll=gcnew ARXforCAD::CARXforCAD;
(3)调用DLL中的函数,并将数据写入CATIA:
my_ObjDll.CreatePoint(pt.x,pt.y,pt.z);
3 应用案例
水工建筑物的开挖面通常是不规则的复杂曲面,其三维建模过程繁琐,效率较低。下面以复杂开挖面的快速三维建模为例,说明混合编程在水利水电工程设计中的具体应用。
基本思路是先在AutoCAD中设计开挖平面图,再生成开挖三维线框,然后通过上述混合编程二次开发,将开挖三维线框导入CATIA并自动生成三维开挖面,如图3所示。这种建模方式,充分利用了AutoCAD平面制图的灵活性和CATIA强大的三维曲面建模能力,大大提高了复杂开挖面的三维建模效率[3]。
图3 混合编程在水工建筑物开挖三维建模中的应用
4 结 论
混合编程可充分发挥不同编程语言的优势,充分利用现有的程序代码,实现跨平台的程序调用。本文针对AutoCAD和CATIA软件特点,分别选择简洁、高效的程序语言进行二次开发,并通过混合编程实现了跨平台的数据传递。以水工建筑物的开挖面三维建模为例,通过混合编程二次开发,充分利用AutoCAD和CATIA软件各自的功能特长,大大提高了复杂开挖面的三维建模效率,加强了软件之间的协同设计能力。
[1]胡燚,张运东,张强.三维CAD技术在水利水电工程设计中的应用分析[J].硅谷,2013(23):66-71.
[2]龚刚,邓荣欢,张宪林.三维设计方法在水利水电工程设计中的应用探讨[J].珠江水运,2014(23):64-65.
[3]袁绍东,王静,王强华,等.AIM软件在水利水电工程三维设计中的应用探讨[J].西北水电,2014(3):88-90.
Application of mixed programming in water resources and hydropower engineering design
LI Xilong
(PowerChinaGuiyangEngineeringCorporationLimited,Guiyang550081,China)
The secondary development of AutoCAD and CATIA was carried on by using the mixed programming.The cross-platform lossless data transfer is realized. And the capacity of collaborative design between softwares is improved. Taking three-dimensional modeling of hydraulic structure excavation face as an example, the specific application of mixed programming in water resources and hydropower engineering design was introduced.
water resources and hydropower; mixed programming; secondary development; excavation; CATIA; AutoCAD; ObjectARX
李希龙(1982-),男,工程师,主要从事水工建筑物设计及虚拟仿真工作。
TV222.2
A
2096-0506(2016)03-0047-04