APP下载

基于CATIA二次开发的产品BOM属性自动提取

2012-05-08刘圣郝泳涛

电脑知识与技术 2012年7期
关键词:二次开发

刘圣 郝泳涛

摘要:该文介绍了CATIA三维设计软件及其二次开发接口中常用的重要对象及相关函数,针对了树形产品结构给出了常用的操作与处理方法,并利用相关对象和方法实现对产品文件的属性提取和BOM表统计生成程序。

关键词:CATIA;二次开发;bom表;属性提取

中图分类号:TP311文献标识码:A文章编号:1009-3044(2012)07-1550-03

Product Attribute Extraction Based on CATIA Re-developing Technology

LIU Sheng,HAO Yong-tao

(CAD Research Center of Tongji University, Shanghai 201804, China)

Abstract: CATIA 3D design software and important objects and related functions in its re-developing interface is introduced in this paper. Common operations and methods dealing with product construction organized in tree pattern are also mentioned. Using the related objects and functions we implement a BOM attribute extraction program.

Key words:CATIA; re-developing; BOM; attribute extraction

1 CATIA三维软件简介

随着计算机辅助设计(CAD)技术的发展,三维辅助设计软件在产品设计领域的应用越来越广泛。CATIA全称Computer Aided Tri-dimensional Interface Application,是法国Dassault公司开发的一款CAD/CAM/CAE于一体的三维设计软件,广泛应用于机械设计、汽车、航空航天、船舶、电子等各种行业中。

高度模块化的CATIA软件能够满足客户在产品开发活动中的需要,包括风格和草图设计、机械零件设计、装配设计、曲线曲面设计、工程图自动生成及产品分析和模拟。CATIA产品基于开放式可扩展的架构,其知识工程模块通过使企业能够重用产品设计知识,缩短开发周期,CATIA解决方案加快企业对市场的需求的反应。CATIA软件自V5版后从工作站平台移植到个人计算机,可以运行于Windows NT平台,极大地拓宽了其应用范围与使用的层面。

2 CATIA二次开发简介

成熟的CAD/CAM软件为了满足不同用户的在实际应用中的不同需求,便于用户构建适合自身产品开发的流程,以及自动化繁琐重复的设计步骤,一般都具有供用户进行二次开发的接口。CATIA提供多种方式的二次开发接口,以便用户能灵活地利用并重组CATIA已有的功能,获取CATIA文件及内部的数据,并与外部的信息管理系统或专业的PDM系统通信。

3 CATIA二次开发中的关键对象

CATIA提供的二次开发接口是一个COM服务器,利用VB中的对象作为客户端与CATIA进程进行进程间的通信,操作CATIA进程中的函数,访问其中的数据。而VB提供的一组具有相关关系的对象形成了一个抽象层,使得用户可以在不了解COM底层通信方式的情况下方便地对CATIA进程进行操作。

CATIA.Application对象:该对象实例是系统中CATIA进程的代表,所有其他的对象都依赖于该对象的相关方法返回。在CATIA进程已经启动的情况下,CATIA.Application对象的实例可以以“CATIA.Application”字符串调用全局工厂函数GetObject获得,可以将获得的对象付给一个变量Set CATIA = GetObject("CATIA.Application")。当CATIA进程没有启动时,可以调用全局工厂函数CreateObject函数带“CATIA.Application”字符串获得,并把其赋给变量Set CATIA = CreateObject("CATIA.Application")。最终,获得的CATIA.Application对象存在CATIA变量中。

Document对象:Document类的对象代表进程中打开的CATIA文档,Document类是其他文档类的基类,从CATIA.Application对象的ActiveDocument方法获得当前激活的文档,本次主要使用的到其子类ProductDocument的对象,并将其赋值给一个变量以便以后使用。Set productDocument = CATIA.ActiveDocument。后续的对象都要从该ProductDocument对象中获取。

Product对象:该类型的对象代表产品文档中的一个产品节点。CATIA产品文档将一系列产品通过装配组织成一个产品树,每个产品节点可以有零到多个子节点,除了根节点以外每个产品节点都只有一个父节点。每个产品文档有唯一的根节点,且该根节点不能更换。对于装配进产品的零件,CATIA会生成一个简单的产品节点对其包装,使之成为一致的产品树。每个产品节点可以有若干属性,本程序主要对这些属性进行提取与统计。对于已经获得的产品节点,可以通过调用其Products方法获得其子节点的集合对象,该对象是一个集合对象,可以用For Each型的循环方便地遍历其中每一个Product对象,如图1。

图1按照树型组织的产品节点

Parameter对象:Parameter类型的对象代表节点中包含的属性,一个属性是一个键值对,这些键值对代表产品文件中的自定义属性,可以通过Product对象的Parameters方法获得Parameter的集合,获得集合后可以用集合对象的item方法传入属性键字符串,获得属性值的引用,并通过属性值的ValueAsString方法转化为方便与控件显示和存储的字符串。

4程序设计总体思路和关键技术

本程序所要操作的是产品文件中的产品树,各种零件文件在建立后就添加了自定义属性,并通过装配引入到产品文件中。为了便于管理,通常会在根产品节点下面建立若干子产品节点,并将零件分类装配到各个子产品节点中。同理,可以再子产品节点下在建立子产品节点,对节点内的装配零件进行分类。在提取过程中程序要处理任意层数的产品节点,并要在访问过程中统计相同零件的个数,据此本程序利用了以下方法来实现提取BOM的目的。

4.1基于递归访问策略的提取方法

当访问到一个节点,先判断其是否一个终端节点,,若是终端节点,则对其进行提取属性的操作,若是中间节点,则递归地调用该过程,由此达到处理任意层数产品树的目的。

Sub traversal_recursive(rootProduct)

Set oProducts = rootProduct.Products

If is_leaf(rootProduct) Then

Call extract_single_bom(rootProduct)

Else

For Each subProduct In oProducts

Call traversal_recursive(subProduct)

Next subProduct

End If

End Sub

4.2终端节点的判断方式

零件的属性都定义在终端节点中,终端节点是通过装配导入到产品树的,由于终端节点是一个对零件的简单包装的产品节点,该节点必定没有子节点,故本程序以此作为判断终端节点的条件。

Function is_leaf(oProduct) As Boolean

Set oProducts = oProduct.Products

is_leaf = (oProducts.Count = 0)

End Function

4.3提取一個终端节点中的属性

提取并统计单个零件的BOM信息的工作由一个函数extract_single_bom完成,首先通过参数的Parameters方法获得要提取的属性对的集合。其中选取出类型参数,与预先在界面上选取的类型比较,若不是则不提取该节点中的属性。在统计过程中,建立以零件编号为键值,网格中显示的行号作为值的hash表全局变量,提取属性时提取出零件编号,在建立的hash表中检索。若已经在表中存在,则认为是已经出现过类型的零件,可以从对应的值取出行号,将对应单元格的值加一;若获在表中没有,则将当前行值加一,并将键值对添加到hash表中,以便后续重复元素统计修改对应行的值。

Sub extract_single_bom(oProduct)

Set oParas = oProduct.Parameters

If Fil = True Then

Set oParaDesigner = oParas.item("类型")

typeStr = oParaDesigner.ValueAsString

If typeStr <> filStr Then

GoTo fun_end

End If

End If

Set oParaDesigner = oParas.item("零件编号")

pno = oParaDesigner.ValueAsString

if Exists(c, subProductName + pno) Then

Grid1.Row = CInt(c.item(subProductName + pno))

Grid1.Col = 2

Grid1.Text = CStr(CInt(Grid1.Text) + 1)

Else

i = i + 1

c.Add CStr(i), oProduct.PartNumber + pno

Grid1.Row = i

Grid1.Col = 0

Set oParaDesigner = oParas.item("件号")

Grid1.Row = i

Grid1.Col = 1

jianhao = oParaDesigner.ValueAsString

Grid1.Text = jianhao

If Exists(c1, jianhao) Then

errStr = errStr + "件号" + jianhao + "存在重复" + vbCrLf

Else

c1.Add "", jianhao

End If

Set oParaDesigner = oParas.item("名称")

Grid1.Row = i

Grid1.Col = 5

Grid1.Text = oParaDesigner.ValueAsString

End If

fun_end:

End Sub

程序运行结果如图2。

图2运行结果

5结束语

本文在行为流概念的基础上,提出一种基于行为流知识库的功能-结构智能映射框架,该框架可在较高层次实现设计知识重用。此外,该框架可用于开发计算机辅助设计工具,用来辅助设计者进行新产品概念设计。

参考文献:

[1]胡挺,吴立军. CATIA二次开发技术基础[M].北京:电子工业出版社,2006.

[2]龙峰,樊留群. CATIA V5二次开发技术探讨[J].淮阴工学院学报,2005(5):21-23.

[3]袁其源,雷玉勇.基于专家系统的CATIA二次技术[J].机械与电子,2007,9(6).

[4]韩文静,郝泳涛.基于知识的产品功能分解迭代模型[J].电脑知识与技术,2009,5(30).

[5]周桂生,陆文龙. CATIA二次开发技术与应用[J].机械设计与制造,2010,1(6).

猜你喜欢

二次开发
浅谈基于Revit平台的二次开发
西门子Operate高级编程的旋转坐标系二次开发
浅谈Mastercam后处理器的二次开发
三维详图设计软件Tekla Structures二次开发实例
基于C#的AutoCAD建筑构件库二次开发
西门子Easy Screen对倒棱机床界面二次开发
CAD二次开发在铁路车站信号设计中的应用
基于全站仪二次开发的覆冰厚度测量与实现
Micaps3.2 版本二次开发入门浅析
基于VB的ANSYS二次开发在变压器抗短路性能分析中的应用