← 返回首页

CATIA V5 CAA 零件设计常用接口介绍

CATIA V5 CAA 零件设计常用接口介绍

作者:CATIA开发者指南
发布时间:2026年6月17日 21:05
原文链接:https://mp.weixin.qq.com/s?__biz=MzkxNTQ0MTY0NQ==&mid=2247486527&idx=1&sn=c71e0277b77c7ecc6fc90803e9310ed4&chksm=c15e5ebdf629d7ab4ff6b6d561530abad1337e33631a54830ea597bfd148cf065a7fa24c81bd&cur_album_id=2800898825187262468&scene=189#wechat_redirect


图片

前面几篇文章已经分别讨论了自定义特征、命令/工作台接入、交互状态机和常用代理机。本文换一个更贴近业务的角度:在零件设计(Part Design)模块做二次开发时,经常需要打交道的是哪些接口?它们分别负责什么能力?写命令时应该怎么找到正确的接口?

在 CAA 的 Part Design 开发中,大部分操作都不是直接修改几何数据,而是通过接口操纵 feature。一个 Pad 是一个 feature,一个 Fillet 也是一个 feature;PartBody 是一个容器,GeometricalSet 是另一个容器;选择 BRep 边、面、顶点时,拿到的是拓扑访问接口。理解这些接口的分类和层级,可以大幅降低查文档和试错的时间。

可以先建立一条主线:

Part 容器 -> Body/GeometricalSet 容器 -> Feature(草图、修饰、变换特征等)
                                      -> Sketch(2D/3D 草图)
                                       -> BRep 访问(面、边、顶点)

1. 接口分布总览

Part Design 相关的核心接口主要分布在三个 framework 中:

Framework 典型内容 作用
PartInterfaces CATIPad、CATIPocket、CATIFillet、CATIChamfer、CATIShaft、CATIPrtPattern 等 具体造型特征的 C++ 原生接口,提供特征参数读写能力
MecModInterfaces CATIPrtPart、CATIPrtContainer、CATIMechanicalTool、CATIMfBRep、CATIBRepAccess、CATIGeometricalElement 等 零件容器、MechanicalTool/Body、BRep 拓扑访问、几何元素等基础设施接口
MechanicalModelerUI CATFeatureAgent、CATFeatureImportAgent 等 机械建模 UI 侧的选择代理机和交互工具

此外,草图相关接口在 SketcherInterfaces,GSM 线框/曲面工厂在 CATGSMUseItf,这两者在 Part Design 命令中也经常配合使用。

2. 零件容器与 Body 体系

2.1 零件根容器:CATIPrtPart、CATIPrtContainer 与 CATIPartRequest

CATIPrtPart 是零件根 feature(MechanicalPart)的原生接口。通过 CATIPrtContainer 可以从文档 spec container 拿到它:

CATIPrtContainer_var spPrtContainer = spSpecContainer;
CATISpecObject_var spPartSpec = spPrtContainer->GetPart();
CATIPrtPart_var spPrtPart = spPartSpec;

CATIPrtPart 提供对 Part 内核心结构的访问:

方法 作用
GetMainTool() 获取主 Body(PartBody),返回 CATIBasicTool_var
GetCurrentTool() 获取当前激活的 Body/GeometricalSet
GetFeatureSolid() 获取 PartBody 的 result feature
GetCurrentFeature() 获取当前工作对象
SetCurrentFeature() 设置当前工作对象(等价于 Define In Work Object)
GetReferencePlanes() 获取 XY/YZ/ZX 三个参考平面

CATIPartRequest 负责遍历 Part 下的所有 Body 和 GeometricalSet:

方法 作用
GetSolidBodies() 获取 Part 级别下所有根 Body(MechanicalTool)
GetSurfBodies() 获取所有根级几何图形集(含 OGS 和 GS)
GetMainBody() 获取主 Body(PartBody)

2.2 Body 与 GeometricalSet

在原生 CAA 中,Body 和 GeometricalSet 是两种不同的 MechanicalTool/GSMTool startup feature。核心区别:

Startup 对应接口 说明
MechanicalTool CATIMechanicalTool PartBody 或用户创建的 Body,可聚合实体特征
GSMTool (type=0) CATIMmiNonOrderedGeometricalSet GeometricalSet,可聚合线框/曲面/GSM 特征
GSMTool (type=1) CATIMmiOrderedGeometricalSet OrderedGeometricalSet,特征有序,吸附规则更严格
通用鉴别 CATIMmiGeometricalSet GS/OGS 的共同基接口,Body 不实现此接口

创建新 Body 和 GeometricalSet 通过 CATIMechanicalRootFactory

CATIMechanicalRootFactory_var spRootFactory = spSpecContainer;
// 创建新 Body(MechanicalTool)
CATIMechanicalTool_var spNewBody = spRootFactory->CreatePRTTool("MyBody");
// 创建 GeometricalSet
CATISpecObject_var spGS = spRootFactory->CreateGeometricalSet("MyGS");
// 创建 OrderedGeometricalSet
CATISpecObject_var spOGS = spRootFactory->CreateOrderedGeometricalSet("MyOGS");

当前工作对象切换的典型写法:

CATIPrtPart_var spPrtPart = spPartSpec;
spPrtPart->SetCurrentFeature(spNewBody);  // 后续创建的特征进入此 Body

2.3 特征容器归属

创建特征时,工厂默认将特征放入 GetCurrentTool() 对应的容器。如果需要精确控制插入位置,可先切换当前工具或使用特定工厂重载:

CATIPrtFactory_var spPrtFactory = spPrtPart;
// 特征自动进入当前激活的 Body/GS
CATISpecObject_var spPad = spPrtFactory->CreatePad(spSketch);

一句话:

CATIPrtContainer 拿 Part,CATIPrtPart 管当前工具,CATIMechanicalRootFactory 创建容器,CATIPartRequest 遍历容器。

3. 草图体系

3.1 草图本身

草图是 Part Design 中绝大多数成形特征的前提输入。常用接口:

接口 作用
CATISketch 草图核心接口,提供几何元素创建、约束、求解等能力
CATI2DWFFactory 2D 线框工厂,在草图中创建点、线、圆、样条等
CATISketchFactory 草图级别的工厂,管理草图打开/关闭/求解

典型获取草图并创建几何的写法:

CATISketch_var spSketch = spSketchFeature;
CATI2DWFFactory_var sp2DFactory = spSketch;
sp2DFactory->CreateLine(pt1, pt2);
spSketch->CloseEdition();

3.2 草图与特征的关联

在原生 CAA 中,草图与成形特征的关联是双向的。以 CATIPrism(Pad/Pocket 的基接口)为例:

// 从特征获取其剖面草图
CATIPrism_var spPrism = spPad;
CATISpecObject_var spSketchFeature;
spPrism->GetProfile(&spSketchFeature);

// 替换特征的剖面草图
spPrism->ModifyProfile(spNewSketch);

CATIPrism::ModifyProfile()GetProfile() 是原生接口中管理草图关联的标准方式。Rib/Slot 等通过各自的 CATIRib/CATISlot 接口提供类似的 Profile/CenterCurve 读写方法。

草图特征在规格树中是特征的子节点,但逻辑上它独立存在,可以被多个特征引用。

4. 草图基成形特征(Sketch-Based Features)

这是 Part Design 中最核心的特征族,均通过 CATIPrtFactory 创建,返回 CATISpecObject_var

4.1 拉伸类

接口 继承自 特征 关键参数
CATIPad CATIPrism 凸台 限制类型、长度、方向、镜像拉伸
CATIPocket CATIPrism 凹槽 同 Pad,方向为材料去除
CATIShaft CATIPrism 旋转体 旋转角度、方向
CATIGroove CATIPrism 旋转槽 同 Shaft,方向为材料去除
CATIRib CATIShape 中心曲线、剖面、轮廓控制方式
CATISlot CATIShape 开槽 同 Rib,方向为材料去除

CATIPrism 是 Pad/Pocket/Shaft/Groove 的基接口,提供:

方法 作用
ModifyProfile(sketch) 设置剖面草图
ModifySym(int) 设置对称拉伸
ModifyDirection(dir) 设置拉伸方向
GetProfile(sketch) 获取剖面草图

Pad 典型用法:

CATIPrtFactory_var spPrtFactory = spPrtPart;
CATISpecObject_var spPad = spPrtFactory->CreatePad(spSketch);
CATIPrism_var spPrism = spPad;
spPrism->ModifyDirection(dir);
spPrism->ModifySym(1);
// 更新 Part
CATIPrtPart_var spPrtPart = spPartSpec;
spPrtPart->Update();

4.2 扫描类

接口 特征 说明
CATISweep 扫掠 显式扫掠(轮廓 + 引导线)
CATIPrism 棱柱(Pad/Pocket) 沿单一方向拉伸闭合轮廓
CATIRib 轮廓沿中心曲线扫掠

4.3 多截面、筋与加厚

创建方式 特征 说明
CATIPrtFactory::CreateLoft() 多截面实体 返回 CATISpecObject,多个截面 + 引导线
CATIPrtFactory::CreateRemovedLoft() 移除多截面实体 材料去除版
CATIPrtFactory::CreateStiffener(sketch) 加强筋 返回 CATIStiffener 接口可读写参数
CATIPrtFactory::CreateRib(sketch, centerCrv) 返回 CATIRib 接口

4.4 草图特征通用接口继承链

所有草图成形特征共享以下 C++ 原生继承链:

CATBaseUnknown
  -> CATISpecObject       // 规格对象通用能力
    -> CATIShape          // 形状通用能力(SetDefaultValue、BuildShape 等)
      -> CATIPrism        // 拉伸基类(ModifyProfile、ModifyDirection)
        -> CATIPad / CATIPocket
      -> CATIShaft / CATIGroove
      -> CATIRib / CATISlot / CATIStiffener / CATISweep

5. 修饰特征(Dress-Up Features)

修饰特征不创建新的整体形状,而是对已有实体进行局部修改。

接口 继承自 特征 关键参数
CATIFillet CATIShape 倒圆角基类 修剪支撑面、过渡角、分模线
CATIEdgeFillet CATIFillet 边倒圆角 ModifyRadius()、ModifyRadiusOnVertex()、ModifyPropagation()
CATIFaceFillet CATIFillet 面倒圆角 两个面组 + 半径
CATITritangentFillet CATIFillet 三切线倒圆角 两个面 + 一个移除面
CATIChamfer CATIShape 倒角 ModifyLength1()、ModifyLength2()、ModifyPropagation()
CATIDraft CATIShape 拔模 ModifyAngle()、ModifyNeutral()、AddSupportToDraft()
CATIShell CATIShape 抽壳 ModifyIntOffset()、ModifyExtOffset()、AddFaceToRemove()
CATIThick CATIShape 加厚 选择面 + 偏移方向
CATIThread CATIShape 螺纹 圆柱面 + 标准参数

创建 EdgeFillet 的典型写法:

CATIPrtFactory_var spPrtFactory = spPrtPart;
// CreateSolidFillet 创建实体边倒圆角
CATLISTV(CATISpecObject_var) listEdges;
listEdges.Append(spEdge);
CATISpecObject_var spFillet = spPrtFactory->CreateSolidFillet(
  &listEdges, TANGENCY, 5.0);
// 调整参数
CATIEdgeFillet_var spEdgeFillet = spFillet;
spEdgeFillet->ModifyPropagation(MINIMAL);
CATIPrtPart_var spPrtPart = spPartSpec;
spPrtPart->Update();

一句话选型:

局部修改用 Dress-Up 特征,新建形状用 Sketch-Based 特征,面操作用 Surface-Based 特征。

6. 变换特征(Transformation Features)

变换特征对已有实体进行空间变换。原生 C++ 接口中,以下特征有独立的 CATI* 头文件:

接口 继承自 特征 关键方法
CATIMirror CATIShape 镜像 ModifyMirrorPlane()、AddMirrorObject()、SetDesignIntent()

镜像的典型写法:

CATIPrtFactory_var spPrtFactory = spPrtPart;
CATISpecObject_var spMirror = spPrtFactory->CreateMirror(spFeature, spPlane);
CATIMirror_var spMirrorIntf = spMirror;
spMirrorIntf->AddMirrorObject(spAnotherFeature);
CATIPrtPart_var spPrtPart = spPartSpec;
spPrtPart->Update();

7. 阵列特征(Pattern Features)

接口 继承自 特征 关键方法
CATIPrtPattern CATIShape 阵列基类 GetItem()、GetItemList()、GetTransfo()
CATIRectPatt CATIPrtPattern 矩形阵列 GetStep1()、GetStep2()、GetNb1()、GetNb2()
CATICircPatt CATIPrtPattern 圆周阵列 GetDir()、GetPto()、GetNbr()、GetNba()
CATIUserPatt CATIPrtPattern 用户阵列 自定义位置点

典型圆周阵列写法:

CATIPrtFactory_var spPrtFactory = spPrtPart;
CATISpecObject_var spPattern = spPrtFactory->CreateCircPattern(
  spFeatureToRepeat, spAxis, 6, 60.0, 1, 10.0);
CATICircPatt_var spCircPatt = spPattern;
int nbr = spCircPatt->GetNbr();
int nba = spCircPatt->GetNba();

8. 布尔运算(Boolean Operations)

布尔运算通过 CATIPrtBooleanFactory 创建,返回的布尔运算 feature 可通过 CATIPrtBooleanOperation 接口查询运算信息:

工厂方法 运算类型 说明
CreateAssemble(iFirst, iSecond) Assemble 保留材料侧信息,有极性感知
CreateAdd(iFirst, iSecond) Add 无条件合并
CreateRemove(iFirst, iSecond) Remove 从目标 Body 减去工具 Body
CreateIntersect(iFirst, iSecond) Intersect 保留两个 Body 的交集

此外 CATIPrtTrimFactory 提供 Trim 运算(CreateUnionTrim / CreateRemoveTrim)。

CATIPrtBooleanOperation 的常用查询方法:

方法 作用
GetTool() 返回被操作的工具 Body
GetFirstOperand() 返回第一运算体的 CATBody
GetSecondOperand() 返回第二运算体的 CATBody

典型流程:

// 1. 创建独立工具 Body
CATIMechanicalRootFactory_var spRootFactory = spSpecContainer;
CATIMechanicalTool_var spToolBody = spRootFactory->CreatePRTTool("ToolBody");
// 2. 设为当前,在其中创建特征
CATIPrtPart_var spPrtPart = spPartSpec;
spPrtPart->SetCurrentFeature(spToolBody);
CATIPrtFactory_var spPrtFactory = spPrtPart;
spPrtFactory->CreatePad(spSketch);
// 3. 切回目标 Body,执行布尔运算
spPrtPart->SetCurrentFeature(spTargetBody);
CATIPrtBooleanFactory_var spBoolFactory = spPrtPart;
CATISpecObject_var spBoolOp = spBoolFactory->CreateRemove(spTargetBody, spToolBody);
spPrtPart->Update();

执行布尔运算后,工具 Body 会被吸收到目标 Body 中,在规格树中显示为 Assemble.1Add.1Remove.1 等节点。

9. 曲面基特征(Surface-Based Features)

这类特征将曲面几何转换为实体:

接口 继承自 特征 说明
CATISplit CATISuSplit 分割 用曲面切割实体,SetExtrapolationType() 控制传播模式
CATISewing CATIShape 缝合 将多个曲面缝合为实体
CATIClose CATIShape 封闭曲面 将封闭曲面转为实体

Split 典型写法:

CATIPrtFactory_var spPrtFactory = spPrtPart;
CATISpecObject_var spSplit = spPrtFactory->CreateSplit(spBody, spSplitSurface);
CATISplit_var spSplitIntf = spSplit;
CATPrtExtrapolationType mode = CATPrtExtrapolation_Tangent;
spSplitIntf->SetExtrapolationType(mode);

10. 零件工厂:CATIPrtFactory

CATIPrtFactory 是 Part Design 开发中最常用的原生工厂接口,几乎所有特征都通过它创建。通过 CATIPrtPart 获取:

CATIPrtFactory_var spPrtFactory = spPrtPart;

常用工厂方法速查(均返回 CATISpecObject_var):

方法 创建的特征 对应原生接口
CreatePad(sketch) 凸台 CATIPad → CATIPrism
CreatePocket(sketch) 凹槽 CATIPocket → CATIPrism
CreateShaft(sketch) 旋转体 CATIShaft → CATIPrism
CreateGroove(sketch) 旋转槽 CATIGroove → CATIPrism
CreateRib(sketch, centerCrv) CATIRib
CreateSlot(sketch, centerCrv) 开槽 CATISlot
CreateStiffener(sketch) 加强筋 CATIStiffener
CreateLoft() 多截面实体 CATISpecObject
CreateSolidFillet(edges, propMode, radius) 实体边倒圆角 CATIEdgeFillet
CreateSolidFillet(rsur1, rsur2, removeRsur) 三切线倒圆角 CATITritangentFillet
CreateChamfer(…) 倒角 CATIChamfer
CreateDraft(…) 拔模 CATIDraft
CreateShell(faces, intOff, extOff) 抽壳 CATIShell
CreateHole(support, direction) CATINewHole
CreateMirror(feature, plane) 镜像 CATIMirror
CreateRectPattern(…) 矩形阵列 CATIRectPatt
CreateCircPattern(…) 圆周阵列 CATICircPatt
CreateSplit(body, surface) 分割 CATISplit
CreateThickSurface(surface, offset) 加厚曲面 CATISpecObject

特征默认放入 CATIPrtPart::GetCurrentTool() 对应的当前容器中。可通过 SetCurrentFeature() 切换后再创建。

11. BRep 访问体系

在 Part Design 命令中,用户经常选择面、边、顶点。程序拿到选择路径后,需要通过 BRep 访问接口来理解选到的到底是什么。

接口 访问哪种拓扑 典型来源
CATIMfBRep BRep feature 的主入口 feature 的 QueryInterface(IID_CATIMfBRep)
CATIBRepAccess 单个 BRep 子元素(面、边、顶点) 选择路径的 leaf
CATIMfFsur / CATIRSur Face(面) CATIBRepAccess 的子对象
CATIMfRedge / CATIREdge Edge(边) CATIBRepAccess 的子对象
CATIMfFvertex / CATIFVertex Vertex(顶点) CATIBRepAccess 的子对象

典型选择后的解析链路:

CATPathElement *pPathElem = _selectionAgent->GetValue();
CATBaseUnknown *pLeaf = NULL;
pPathElem->GetFinalLeaf(&pLeaf);

CATIBRepAccess_var spBRepAccess = pLeaf;
if (!!spBRepAccess)
{
  CATIMfFsur_var spFace = spBRepAccess;
if (!!spFace)
  {
// 用户选中的是一个面
  }
}

CATIMfBRep 是读取和写入 BRep 几何数据的主要接口:

CATIMfBRep_var spMfBRep = spFeature;
CATLISTV(CATIBRepAccess) listResult;
spMfBRep->GetResults(CATIBRepAccess::ClassId(), listResult);

12. 机械特征通用接口

除了具体特征接口,还有一些横跨所有机械特征的通用接口:

接口 作用
CATIMechanicalFeature 机械特征的基接口,提供 Parent/Children 遍历
CATIShape 形状通用能力
CATIShapeFeatureBody 获取形状特征的 result body
CATIShapeFeatureProperties 形状特征属性查询
CATIMechanicalProperties 材质、密度、惯性等物理属性
CATIFeaturize 将 BRep 子元素转为可引用的 feature

其中 CATIMechanicalFeature 常用于特征树遍历:

CATIMechanicalFeature_var spMechFeat = spFeature;
CATLISTV(CATISpecObject) children;
spMechFeat->GetAllChildren(children);

13. 开发速查路线

以下是根据典型开发场景整理的接口查找路线(全部使用原生 C++ 接口):

场景:创建草图拉伸特征
  -> CATIPrtContainer::GetPart()        (拿到 Part feature)
  -> CATIPrtPart::GetCurrentTool()      (确认当前容器)
  -> CATIPrtFactory                     (创建工厂)
  -> CATISketch                         (获取/创建草图)
  -> CATI2DWFFactory                    (在草图中画线)
  -> CATIPrtFactory::CreatePad(sketch)  (创建凸台)
  -> CATIPrism::ModifyDirection()       (调整拉伸方向参数)
  -> CATIPrtPart::Update()              (更新)

场景:创建边倒圆角
  -> CATPathElementAgent                (选择边)
  -> CATIBRepAccess / CATIMfRedge       (解析选择结果)
  -> CATIPrtFactory::CreateSolidFillet(&edges, TANGENCY, 5.0)
  -> CATIEdgeFillet::ModifyRadius()     (修改半径)
  -> CATIPrtPart::Update()

场景:遍历 Part 中所有 Body
  -> CATIPartRequest::GetSolidBodies()  (遍历根 Body)
  -> CATIMechanicalFeature::GetAllChildren()  (遍历每个 Body 内的特征)

场景:布尔运算
  -> CATIMechanicalRootFactory::CreatePRTTool("ToolBody")
  -> CATIPrtPart::SetCurrentFeature(toolBody)
  -> CATIPrtFactory::CreatePad(...)
  -> CATIPrtPart::SetCurrentFeature(targetBody)
  -> CATIPrtBooleanFactory::CreateRemove(target, tool)
  -> CATIPrtPart::Update()

14. 小结

Part Design 二次开发的原生 C++ 接口虽然数量多,但结构清晰。把握几条主线就能快速定位:

  • 容器线:CATIPrtContainerCATIPrtPartCATIMechanicalTool / CATIMmiGeometricalSetCATIMechanicalRootFactory(创建) / CATIPartRequest(遍历)
  • 工厂线:CATIPrtFactory(创建特征)、CATIPrtBooleanFactory(布尔运算)、CATIPrtTrimFactory(Trim 运算)
  • 特征线:
  • 选择线:CATPathElementAgentCATIBRepAccessCATIMfFsur / CATIMfRedge / CATIMfFvertex
  • 通用线:CATIMechanicalFeature(遍历)、CATISpecObject(统一引用)、CATIMfBRep(BRep 读写)、CATIShape(形状基类)

实际开发中,建议先把 PartInterfacesMecModInterfaces 的 PublicInterfaces 目录浏览一遍,结合本文的分类表格,遇到陌生接口时能快速判断它属于哪一层的哪个场景。

评论