← 返回首页

CAA V5自动化接口:原理剖析篇

在3D PLM(产品生命周期管理)开发中,CAA V5的自动化接口是提升效率的关键——它能让你用Visual Basic、VBScript等脚本语言操作CAA V5,还支持宏录制与回放,轻松自动化重复任务。今天这篇文章,我们从基础原理到实操步骤,带你全面掌握CAA V5自动化接口的创建与应用。

一、先搞懂:自动化接口到底是什么?

简单来说,CAA V5的自动化接口是一类“特殊接口”,核心能力有两个:

  1. 自动化访问:允许脚本语言(如VBScript、Basic Script)调用CAA V5接口,比如用脚本批量处理模型数据;
  2. 日志记录(Journalling):能把用户的交互操作录制成脚本,后续可直接重播或修改后使用,比如重复执行某套建模步骤。

它还有个重要优势——跨平台兼容性:CAA V5在Windows上支持VBScript引擎,在UNIX上支持Basic Script引擎,但两种脚本语言不完全兼容。想要让宏在两个系统间通用,必须严格遵守后文的“可移植性规则”。

二、核心基础:3个关键接口+1个类型库

自动化接口的实现,离不开几个核心组件的支撑,搞懂它们的关系,后续开发会事半功倍。

1. 3个接口:从基础到上层的“继承链”

自动化接口的底层是IDispatch接口,它是跨平台的“桥梁”——Windows上由COM提供,UNIX上由CAA V5自带,两者完全一致,确保接口可跨系统移植。
IDispatch提供了4个核心方法(如GetIdsOfNames通过方法名获取ID,Invoke调用方法),但你不用重复实现它们:因为CATBaseDispatch接口继承了IDispatch,并提前写好了这些方法的实现,相当于给你搭好了“脚手架”。

而你实际开发时,接口需要继承的是CATIABase接口(它继承自CATBaseDispatch)——除非是“集合类接口”(比如描述对象列表的接口),这类接口要继承CATIACollection

CATIABase还自带实用方法,比如get_Application获取应用对象、get_Name获取对象名称,不用自己再写。

2. 类型库:脚本语言的“说明书”

脚本语言(如VBScript)之所以能识别CAA V5接口,全靠类型库(Type Library) 。它是IDL文件(接口定义文件)的编译版本,里面记录了所有接口的描述、方法原型、参数类型,相当于给脚本引擎一份“操作说明书”。

在Windows上,你还能用“OLE/COM对象查看器”直接查看类型库的内容,方便调试。

三、接口的两种核心类型:公开VS可日志记录

根据功能不同,CAA V5自动化接口分为两类,创建方式只差一步:

1. 公开接口(Exposed Interface):支持脚本调用

  • 作用:允许脚本语言访问接口方法,是自动化的基础;
  • 创建关键:
  1. 继承CATIABase(集合接口继承CATIACollection);

  2. 在IDL文件中添加ID声明(如#pragma ID CATIAExposed 'DCE:xxx')和#pragma DUAL指令;

  3. 把接口加入.tplib文件(类型库源文件),让编译器生成类型库。

2. 可日志记录接口(Journalizable Interface):支持宏录制

  • 作用:除了脚本调用,还能录制用户操作生成宏脚本;
  • 创建关键:在“公开接口”的基础上,只需在IDL文件第一行加一句注释:/IDLREP/,其他完全一样!

四、实战:写IDL文件(核心步骤)

IDL(接口定义语言)是创建自动化接口的“载体”,所有接口规则都要在IDL文件中定义。下面从最核心的“属性”和“方法”说起,教你写合规的IDL。

1. 先定义属性:读写还是只读?

属性相当于C++的“数据成员”,在脚本中直接用名称访问,但IDL中需要用get_(读)和put_(写)方法实现:

  • 读写属性:加#pragma PROPERTY,同时定义get_put_
// 示例:Name读写属性
#pragma PROPERTY Name
  HRESULT get_Name (out /*IDLRETVAL*/ CATBSTR oNameValue); // 读属性
  HRESULT put_Name (in  CATBSTR iNameValue); // 写属性
  • 只读属性:只定义get_方法,不写put_
// 示例:ActiveDocument只读属性
#pragma PROPERTY ActiveDocument
  HRESULT get_ActiveDocument (out /*IDLRETVAL*/ CATIADocument oDocument);

注意:/*IDLRETVAL*/是关键,它告诉脚本引擎“这个参数是返回值”,比如脚本中写obj.Name,实际调用的是get_Name方法。

2. 再定义方法:4种类型全覆盖

接口中的方法分为4类,每种都有固定签名(不能重载,即同一接口中不能有同名不同参数的方法):

方法类型 作用 签名规则 示例代码
属性读取函数 读属性(配合get_ 单参数+out /*IDLRETVAL*/ HRESULT get_FileName(out /*IDLRETVAL*/ CATBSTR oString);
属性写入函数 写属性(配合put_ 单参数+in HRESULT put_FileName(in CATBSTR iString);
子过程(Sub) 执行操作,无返回值 参数可加in/out/inout,无返回参数 HRESULT Update(in long iTimeStamp);
函数过程(Function) 执行操作+返回值 最后一个参数为out /*IDLRETVAL*/ HRESULT GetLastItem(in CATIACollection iList, out /*IDLRETVAL*/ CATIABase oItem);

五、避坑指南:宏可移植的6个关键规则

想让你的宏在Windows和UNIX上都能跑,必须遵守这些规则,否则很容易出现“在Windows能跑,UNIX上报错”的情况:

  1. 参数类型有限制:只支持boolean、short(16位整数)、long(32位整数)、float、double、CATBSTR(字符串)、CATVariant(变体)等,不支持Byte、Currency、Decimal(十进制);
  2. 复杂类型要转换:BSTR用CATUnicodeString处理(比如ConvertToBSTR转换),Variant用any,避免直接操作;
  3. 接口必须正确继承:普通接口继承CATIABase,集合接口继承CATIACollection
  4. 参数要加方向属性:每个参数必须标in(输入)、out(输出)、inout(双向),比如in CATBSTR iString
  5. 不支持方法重载:同一接口中,不能有“同名不同参数”的方法;
  6. 字符串只用CATBSTR:不能用其他字符串类型,否则跨平台会出问题。

六、最后一步:接口编码检查清单

创建完接口后,对照这份清单自查,确保符合CAA V5、COM、CORBA的所有规则,避免低级错误:

  1. 一个接口对应一个IDL文件,后缀为.idl(如MyInterface.idl);

  2. 方法返回值必须是HRESULT

  3. 标识符不能以get_/put_开头(属性方法除外);

  4. 没有可选参数,也不能定义常量;

  5. CATSafeArray(安全数组)只能是一维;

  6. 枚举(enum)要满足3个条件:无GUID、用typedef定义类型、第一个元素不初始化(默认0);

  7. 公开/可日志记录接口必须有ID、#pragma DUAL和别名(如#pragma ALIAS CATIAExposed AccessName)。

结语

CAA V5自动化接口的核心,其实是“用对基础接口+写合规IDL”——只要继承CATIABase/CATIACollection,按规则定义属性和方法,再做好跨平台适配,就能轻松实现脚本访问和宏录制。

评论