1. 对象(Object)
CATIA Automation 中采用对象结构图和文字表述的方式来描述对象(Objects)、对象的方法和属性以及对象之间的关系,青色表示普通对象,黄色表示对象集合,红色表示抽象对象。Automation的开发方式中,绝大部分的CATIA操作功能都被封装成.NET类,用户可以通过丰富的API函数调用这些类,利用高级编程语言实现复杂的人机交互功能,也能做出丰富的界面,而且完全免费,开发成本较低。
1.1 聚合关系
如图所示,对象的聚合描述关系我们可以这样理解,Application对象下聚合了一个Editors集合对象,Editors下又聚合了一个Editor对象,Editor对象下又聚合了一个Anyobject抽象对象。两个聚合对象之间,下一级对象是上一级对象的属性,编写代码时可通过 “.” 操作符实现。
Editor ed = CATIA.ActiveEditor;
Part ActivePart = (Part)ed.ActiveObject;
1.2 抽象对象(Abstract object)
对象结构图中,带箭头的实线表示继承关系,下级对象继承了上级对象所有的属性和方法。在Automation API 中只有抽象对象才能被继承,操作时也是对其派生的下级对象进行操作。比如 MeasureService对象继承自 Service对象,用来进行测量操作。 在二次开发中不能创建抽象对象(如 Service)的实例,只能创建其派生对象(如 MeasureService)的实例。
Service 分为 Session-level (下图左) 和 Editor-level (下图右),Session-level 的Service 包含有任何一种 PLM 类型以及在没有任何激活的 PLM 根对象时的操作,而 Editor-level 的 Service 应用于指定好的 PLM 根对象(root object)。 两种 Sevice 的获取方式不同,分别为 GetSessionService(" “) 和 GetService(”")。
Session-level services | 备注(GetSessionService 方法的识别符) |
---|---|
MATPLMService | 与材质相关的服务(MATPLMService) |
OlpTranslatorHelper | 与机器人编程相关的服务(OlpTranslatorHelper) |
PnOService | 获取 person(PnOService) |
PLMNewService | 创建 PLM 根对象(PLMNewService) |
PLMOpenService | 打开 PLM 根对象(PLMOpenService) |
PLMPropagateService | 保存编辑器更改(PLMPropagateService) |
PLMScriptService | 处理数据库中存储的脚本(PLMScriptService) |
ProductSessionService | 整合 Shape3D 对象:aggregates a collection of Shape3D objects(ProductSessionService) |
SearchService | 服务器搜索(Search) |
SimInitializationService | 初始化仿真(SimInitializationService) |
SIMPLMService | 管理 SimulationReference 和其他仿真对象(SimPLMService) |
VisuServices | 可视化服务:图层 layers、图层过滤器 layers filters、窗口 windows 和相机 cameras(VisuServices) |
Editor-level services | 备注(GetService 方法的识别符) |
---|---|
MeasurableService | 返回测量曲面和曲线的对象(MeasurableService) |
MeasureService | 返回测量曲面和曲线的对象(MeasureService) |
PLMProductService | 返回 Editor 的根对象(PLMProductService) |
RfgService | 管理参照平面和参照面(RfgService) |
SectionService | 管理当前 review 中的 section 剖面对象(SectionService) |
SrsInstantiateService | 管理空间参考系统对象 Space Reference System objects (SrsInstantiateService) |
StrService | 适用于结构对象(StrService) |
1.3 集合(Collection)
Collection 对象可以理解为一个存放同类对象的容器,一般具有复数形式的名称,比如Bodies、HybridBodies等,可以在这个容器中新增、查找子对象。Collection常用的方法和属性见下表:
方法 | 说明 |
---|---|
Add() | 新增一个对象 |
Count() | 返回该集合中对象的个数 |
Item(Index) | 通过下标查找集合中的某个对象 |
GetItem(Name) | 通过名字查找集合中的某个对象 |
GetType() | 获取当前实例的类型 |
Name | 获取该集合的名称 |
注:Item(Index)一般通过下标查找对象,Index为整数,常用的几何图形集等子元素下标索引从1开始。实际编程过程中发现该方法也可用于名称字符串的查找,比如Item(“Name”),此法可直接跨层级查找某对象。如下图,从层级1的HybridShapes集合就可以直接Item(“Point”)到目标Point;但是此法只针对层级1下只存在唯一名称的元素,若存在多个同名元素,默认找到第一个对象。GetItem(Name)则不能跨层级使用,如果要找到下图的Point,则必须通过层级1找到层级2,层级2找到层级3,以此类推,在层级4下找到Point。
//在Part下新建几何图形集
HybridBody hb1 = ActivePart.HybridBodies.Add();
hb1.set_Name("层级1");
//在hb1下新建几何图形集
HybridBody hb2 = hb1.HybridBodies.Add();
hb2.set_Name("层级2");
//在hb2下新建几何图形集
HybridBody hb3 = hb2.HybridBodies.Add();
hb3.set_Name("层级3");
//在hb3下新建几何图形集
HybridBody hb4 = hb3.HybridBodies.Add();
hb4.set_Name("层级4");
//在层级4下创建一个点
HybridShapePointCoord testPoint = hsf.AddNewPointCoord(0,0,0);
testPoint.set_Name("Point");
//直接在层级1下查找testPoint
HybridShape p1 = hb1.HybridShapes.Item("Point");
//在层级4下查找testPoint
HybridShape p2 = (HybridShape)hb4.HybridShapes.GetItem("Point");
1.4 AnyObject
AnyObject 是Automation 中的一个抽象对象,它可以代表除了 Collection 对象和参考对象之外的任何对象。
属性/方法 | 说明 |
---|---|
Application | 返回CATIA Application对象,即CATIA根对象 |
Name | 返回对象名称(字符串) |
Parent | 返回父对象 |
GetItem() | 通过名字查找到指定对象 |
get_Name() | 获取对象名称 |
set_Name() | 为对象命名 |
通过 Parent 方法可以获取元素的父对象。
HybridBody pahb = (HybridBody)p1.Parent;
MessageBox.Show(pahb.get_Name().ToString());
运行结果为:
《CATIA VBA二次开发入门与提高》一文中讲到 “说明:oHybridShapePoint.Parent 返回的是 HybridShapes 对象(对象类型为 Collection ), oHybridShapePoint.Parent.Parent 返回点所在的几何图形集对象。” 但本人测试后发现,Parent后并没有Parent的属性。不知何解,有知道的大佬可否帮我解惑。
欲知Automation之属性介绍,且听下回分解😄
参考资料:
1.《CATIA VBA二次开发入门与提高》
2.《CATIA二次开发—API梳理》——硬核小青年
3. DSYAutomation.chm