APP下载

混合编程二次开发在水利水电工程设计中的应用

2016-09-05李希龙

水利科学与寒区工程 2016年3期
关键词:二次开发工程设计水利水电

李希龙

(中国电建集团贵阳勘测设计研究院有限公司,贵州 贵阳 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

猜你喜欢

二次开发工程设计水利水电
BIM在建筑给排水工程设计中的应用
《湖南水利水电》2021年总目次
河南省水利水电学校
农村水利水电
浅谈基于Revit平台的二次开发
浅谈Mastercam后处理器的二次开发
西门子Easy Screen对倒棱机床界面二次开发
铜阳极泥中碲回收工程设计
EDA技术创新演化与工程设计应用
水利水电工程赶工索赔阐述