← 返回首页

CATIA V6 CAA零件模块二次开发常用接口库介绍

CATIA V6 CAA零件模块二次开发常用接口库介绍

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


图片

本文目的把 V6 零件模块二次开发最常遇到的接口库分层讲清楚:从 3D Shape 里取得 MechanicalPart,管理 Body / GS / OGS,创建 Sketch、Pad、Pocket、Hole、Fillet、Boolean、GSM 线框曲面,再处理 BRep、参数、更新、删除和自定义特征扩展。

1. 先说结论

V6 零件模块二开不要一上来就找某个“Part 对象万能接口”。更稳的路线是按职责拆开:

  1. CATMecModUseItf / CATMecModLiveUseItf 找到 MechanicalPart、Body、GS、OGS 和 BRep。
  2. CATSketcherUseItf 创建或编辑 Sketch,作为 Pad / Pocket / Shaft / Rib / Slot 的 profile。
  3. CATPartUseItf 里的 CATIPdgUsePrtFactory 和一组 CATIPdgUse* 接口创建、读取、修改 Part Design 特征。
  4. CATGSMUseItf 创建线框和曲面特征,并明确插入到 GS / OGS / Body。
  5. KnowledgeInterfaces 处理长度、角度、半径等参数对象。
  6. DataCommonProtocolUseCATIMmiUseUpdateError 做更新、删除和失败诊断。
  7. 如果要给零件追加业务语义,不要硬改 OOTB Part schema,优先走 FeatureModelerExt 的自定义 feature 或 feature extension。

可以把它理解成一句话:

V6 零件开发的主线是“MechanicalPart 定位上下文,PartUse 创建实体特征,MecMod 管结构和 BRep,GSM 管线框曲面,DataCommonProtocol 管生命周期”。

2. 先把核心对象关系说清楚

V6 的零件模块通常围绕 3D Shape 中的 MechanicalPart 展开。规格树上看到的 PartPartBodyBodyGeometrical SetOrdered Geometrical Set,在 CAA 侧不是一个接口能全部解决。

3D Shape / Representation
  -> Specification Container: CATPrtCont
    -> MechanicalPart: Part
      -> MechanicalTool: PartBody / Body
        -> Sketch
        -> Pad / Pocket / Hole / Fillet / Boolean / Pattern / Split ...
      -> GSMTool: Geometrical Set / Ordered Geometrical Set
        -> Point / Line / Plane / Curve / Surface / GSM operation ...
      -> BRep selecting objects: RSur / REdge / FVertex ...

这里最容易混淆的是:

  • MechanicalPart 是零件模块的根业务对象。
  • MechanicalTool 对应实体 Body,例如 PartBody 和用户 Body。
  • GSMTool 对应线框/曲面容器,包括 GS 和 OGS。
  • CATIPdgUse* 创建的是 Part Design 特征,不负责解释整个 Part 结构。
  • CATIMmiUseBRep* 管的是稳定选择对象和 generic naming,不建议直接拿裸拓扑当业务引用。

3. V6 相比旧式写法的关键变化

在当前 B426 头文件中,零件模块大量接口已经是 Use 风格命名,例如:

  • CATIPdgUsePrtFactory
  • CATIPdgUsePrism
  • CATIPdgUseEdgeFillet
  • CATIMmiUsePrtPart
  • CATIMmiUseSetFactory
  • CATIGSMUseFactory
  • CATISktUseSketchFactory

因此写 V6 零件二开时,建议先确认目标 framework 的 V6 UseItf 接口,而不是直接照搬 V5 示例里的旧接口名。

另一个重要变化是更新边界。B426 的 CATIMmiUsePrtPart 主要负责 In Work Object、参考平面、当前 set 等管理,并不像很多旧示例那样把 Update() 当成默认入口。V6 下更应结合:

  • DataCommonProtocolServices::IsUpToDate()
  • DataCommonProtocolServices::Update()
  • CATIUpdateProvider
  • CATIMmiUseUpdateError
  • 自定义 feature 的 CATIFmFeatureBehaviorCustomization::Build()

不要假设每个 Part 入口都有传统 Part.Update() 语义。

4. 常用接口库总览

需求 Framework 常用接口
取得 MechanicalPart、几何容器 CATMecModUseItf CATIMmiPrtContainer
管理 In Work Object、参考平面、当前 set CATMecModLiveUseItf CATIMmiUsePrtPart
查询 Body / GS / OGS CATMecModLiveUseItf CATIPartRequest, CATIBodyRequest, CATIBasicTool
创建 Body / GS / OGS CATMecModUseItf CATIMmiUseSetFactory
实体特征插入和重排 CATMecModUseItf CATIMmiUseSolidInsertion, CATIMmiUseBasicInsertion
BRep 选择对象和 generic naming CATMecModUseItf CATIMmiUseBRepAccess, CATIMmiUseBRep, CATIMmiUseMfBRep, CATIMmiBRepFactory
Part Design 特征创建 CATPartUseItf CATIPdgUsePrtFactory
Pad / Pocket / Shaft / Groove 等规格 CATPartUseItf CATIPdgUsePrism, CATIPdgUseRevol, CATIPdgUseRib, CATIPdgUseSlot
Hole / Fillet / Chamfer / Shell / Draft CATPartUseItf CATIPdgUseNewHole, CATIPdgUseEdgeFillet, CATIPdgUseChamfer, CATIPdgUseShell, CATIPdgUseDraft
Body 布尔 CATPartUseItf CATIPdgUsePrtBooleanFactory, CATIPdgUsePrtBooleanOperation
Sketch 创建和编辑 CATSketcherUseItf CATISktUseSketchFactory, CATISktUseSketchEditor, CATISktUse2DWFFactory, CATISktUseSketchPositioning
GSM 线框曲面 CATGSMUseItf CATIGSMUseFactory, CATIGSMUseProceduralView
参数、公式、尺寸值 KnowledgeInterfaces CATICkeParm, CATICkeParmFactory
更新、删除、替换协议 DataCommonProtocolUse CATIUseEntity, DataCommonProtocolServices, CATIUpdateProvider, CATIReplace
自定义 feature 与属性 FeatureModelerExt CATFmStartUpFacade, CATFmFeatureFacade, CATFmContainerFacade, CATIFmFeatureBehaviorCustomization

5. 从 3D Shape 取得 MechanicalPart

当前 B426 中,CATMecModUseItf/PublicInterfaces/CATIMmiPrtContainer.h 明确说明:CATIMmiPrtContainer 由 3D Shape 的 specification container CATPrtCont 实现,用来取得 MechanicalPart 和几何容器。

典型链路是:

CATIMmiPrtContainer_var spPrtContainer = spSpecContainer;
if (NULL_var == spPrtContainer)
return E_FAIL;

CATIMmiMechanicalFeature_var spPart;
HRESULT hr = spPrtContainer->GetMechanicalPart(spPart);
if (FAILED(hr) || NULL_var == spPart)
return hr;

CATIMmiUsePrtPart_var spUsePart = spPart;
CATIPartRequest_var spPartRequest = spPart;

这里有几个要点:

  • GetMechanicalPart() 取得的是规格树里的 Part
  • 之后通过 CATIMmiUsePrtPart 管 In Work Object 和参考平面。
  • 通过 CATIPartRequest 查询 Body、GS、OGS。
  • 如果入口来自 PLM representation reference,应先取得对应 applicative container,再转换到 CATIMmiPrtContainer

6. 管理 In Work Object 和参考平面

CATMecModLiveUseItf/PublicInterfaces/CATIMmiUsePrtPart.h 是 MechanicalPart 上的重要接口。

常用能力包括:

方法 作用
GetInWorkObject() 获取当前 In Work Object
SetInWorkObject() 等价于交互中的 Define In Work Object
GetInWorkObjectTool() 获取当前 set,可能是 Body、GS 或 OGS
RetrieveReferencePlanes() 获取 XY / YZ / ZX 三个参考平面
RetrieveImportedBodies() 获取导入 Body
RetrieveBodyForExternalReferences() 获取 contextual part 的外部引用 Body

创建特征前先确认 In Work Object 很重要。否则新特征可能进入错误 Body,或者插入顺序与用户当前规格树状态不一致。

7. 查询和创建 Body / GS / OGS

7.1 查询已有结构

CATMecModLiveUseItf/PublicInterfaces/CATIPartRequest.h 用于查询零件中的几何特征集。

常用方法:

方法 作用
GetMainBody() 获取唯一主 Body,也就是当前默认 PartBody
GetSolidBodies() 获取根级 Body,不包含被布尔操作消费的 operated body
GetSurfBodies() 获取 GS 和根级 OGS
GetAllBodies() 获取 Body + GS + OGS
GetDirectBodies() 获取 Part 直属的根几何特征集

这些方法都要求 view context。普通 3D 零件通常使用:

CATUnicodeString viewContext("MfDefault3DView");

7.2 创建新的 Body / GS / OGS

CATMecModUseItf/PublicInterfaces/CATIMmiUseSetFactory.h 是创建 MechanicalToolGSMTool 的入口。

常用方法:

方法 创建对象 说明
CreatePRTTool() MechanicalTool 创建 Body,只能聚合在 MechanicalPart 下
CreateGeometricalSet() GS 可放在 Part、Body 或 GS 下,需遵守聚合规则
CreateOrderedGeometricalSet() OGS 有顺序语义,聚合规则比 GS 更严格

注意两点:

  • 违规创建 Body / GS / OGS 可能抛异常,不只是返回 E_FAIL
  • 创建容器和插入特征是两件事,实体特征还要关注 CATIMmiUseSolidInsertion

8. 实体特征插入:不要只创建,不插入

CATMecModUseItf/PublicInterfaces/CATIMmiUseSolidInsertion.h 用于把 solid feature 插入 procedural body,或者重排已有 solid feature。

常用方法:

方法 作用
InsertFeature(iDestination) 把新 solid feature 插入 Body / Solid Body
ReorderFeature(iDestination) 重排已有 solid feature

iDestination 的含义取决于对象类型:

  • 如果是 Body / Solid Body,新特征插到该 Body 的第一个位置。
  • 如果是 solid feature,新特征插到该 feature 后面。
  • 如果是 NULL_var,系统尝试使用当前 In Work Object。

因此推荐流程是:

  1. 明确目标 Body。
  2. 设置或确认 In Work Object。
  3. 创建 Part Design feature。
  4. CATIMmiUseSolidInsertion 插入到目标位置。
  5. 触发受控 update。

9. Sketcher 接口:大多数成形特征的输入层

Pad、Pocket、Shaft、Groove、Rib、Slot 这类特征通常依赖 Sketch。

常用接口:

接口 作用
CATISktUseSketchFactory 创建 Sketch
CATISktUseSketchEditor 打开、关闭、求解 Sketch 编辑状态
CATISktUse2DWFFactory 创建 2D 点、线、圆、曲线等
CATISktUseSketchPositioning 管理 Sketch 支撑面、原点和方向

一个最小化链路是:

CATISktUseSketchFactory_var spSketchFactory = spSpecContainer;
CATIMmiMechanicalFeature_var spSketch = spSketchFactory->CreateSketch(spSupportPlane);

CATISktUseSketchEditor_var spSketchEditor = spSketch;
// 打开 sketch edition,创建 2D 几何,求解并关闭。

实战建议:

  • 先定位 Sketch 的支撑面和方向,再画二维几何。
  • Sketch 关闭并求解后,再交给 CATIPdgUsePrtFactory
  • 旋转类特征的 Sketch 必须包含旋转轴。
  • Rib / Slot 还需要中心曲线,通常也是 Sketch 或 GSM 曲线。

10. CATIPdgUsePrtFactory:Part Design 主工厂

CATPartUseItf/PublicInterfaces/CATIPdgUsePrtFactory.h 是零件实体特征最常用的工厂接口。

它的角色是“从最少参数创建特征”,创建后再用特征自己的接口补规格。

常用创建方法可以按类型理解:

类别 方法 后续常用接口
拉伸成形 CreatePad(), CreatePocket() CATIPdgUsePrism, CATIPdgUsePad, CATIPdgUsePocket
旋转成形 CreateShaft(), CreateGroove() CATIPdgUseRevol, CATIPdgUseShaft, CATIPdgUseGroove
扫掠成形 CreateRib(), CreateSlot() CATIPdgUseRib, CATIPdgUseSlot, CATIPdgUseSweep
多截面 CreateLoft(), CreateRemovedLoft() 返回 mechanical feature 后继续按规格接口处理
CreateHole() CATIPdgUseNewHole
修饰 CreateSolidFillet(), CreateChamfer(), CreateDraft(), CreateShell() CATIPdgUseEdgeFillet, CATIPdgUseChamfer, CATIPdgUseDraft, CATIPdgUseShell
变换/阵列 CreateMirror(), CreateRectPattern(), CreateCircPattern() CATIPdgUseMirror, CATIPdgUsePrtPattern
曲面基实体 CreateSplit(), CreateThickSurface(), CreateCloseSurface() CATIPdgUseSplit, CATIPdgUseThick, CATIPdgUseClose

核心规则是:

  • 工厂返回值多是 CATIMmiMechanicalFeature_var
  • 不要停留在返回值,要继续 QueryInterface 到具体 CATIPdgUse* 接口补参数。
  • 涉及面、边、顶点的输入时,通常需要 BRep feature,而不是裸 CATCell

11. Pad / Pocket:优先理解 CATIPdgUsePrism

CATPartUseItf/PublicInterfaces/CATIPdgUsePrism.h 是 Pad 和 Pocket 的共同规格接口。

常用方法:

方法 作用
ModifyProfile() 设置 profile,通常是 Sketch
ModifyDirection() 设置拉伸方向,可传数学方向或方向对象
ReverseDirection() 反转方向
ModifySym() 设置对称拉伸
ModifyEndType() / ModifyStartType() 设置第一/第二限制类型
ModifyEndOffset() / ModifyStartOffset() 设置 offset limit 的距离
ModifyEndInit() / ModifyStartInit() 设置 UpToPlane / UpToSurface 的限制对象
GetProfile() / GetDirection() / GetEndLimit() 读取已有规格

创建 Pad 的典型结构:

CATIPdgUsePrtFactory_var spPrtFactory = spPart;
CATIMmiMechanicalFeature_var spPadFeat = spPrtFactory->CreatePad(spSketch);

CATIPdgUsePrism_var spPrism = spPadFeat;
if (NULL_var != spPrism)
{
  spPrism->ModifyEndType(catOffsetLimit);
  spPrism->ModifyEndOffset(0.02); // 按接口语义确认单位
}

这里要特别注意:

  • catUpToPlaneLimit 要求限制对象是 plane feature 或 planar FSur。
  • catUpToSurfaceLimit 要区分曲面 FSur 和实体 RSur。
  • 读取 GetEndLimit()GetAxis()GetProfile() 这类内部组件时,可能触发懒解析或暴露已有 update 问题,巡检工具应记录读取前后的 update 状态。

12. Shaft / Groove / Rib / Slot:不要只看 profile

旋转和扫掠类特征除了 profile,还需要轴线或中心曲线。

特征 典型输入 说明
Shaft profile sketch + axis 加料旋转体
Groove profile sketch + axis 减料旋转槽
Rib profile + center curve 沿路径加料
Slot profile + center curve 沿路径减料

常用接口包括:

  • CATIPdgUseRevol
  • CATIPdgUseShaft
  • CATIPdgUseGroove
  • CATIPdgUseRib
  • CATIPdgUseSlot
  • CATIPdgUsePrtProfile
  • CATIPdgUsePrtCenterCurve

实战建议:

  • Shaft / Groove 的 Sketch 内部旋转轴必须明确。
  • Rib / Slot 的 profile 和 center curve 最好分开管理,便于后续修改。
  • 如果中心曲线来自 GSM 特征,要先确认它已经插入并更新。

13. Hole、Fillet、Chamfer、Shell、Draft:修饰特征的入口

这些特征通常依赖已有实体上的面、边或方向,因此更依赖 BRep 稳定性。

特征 接口 常见输入
Hole CATIPdgUseNewHole 支撑面、方向、定位点、直径、深度、类型
Edge Fillet CATIPdgUseEdgeFillet REdge / RSur 列表、半径、传播模式
Chamfer CATIPdgUseChamfer 边或面、长度、角度、传播模式
Shell CATIPdgUseShell 要移除的面、内外偏移
Draft CATIPdgUseDraft 拔模面、中性面、方向、角度

CATPartUseItf/PublicInterfaces/CATIPdgUseEdgeFillet.h 中可以看到一个典型要求:参与倒圆的边或面应是由 BRep factory 创建的 REdge / RSur feature,并且属于同一个 mechanical body。

这类接口的通用建议是:

  • 不要把交互选择返回的 UI 节点直接传给造型接口。
  • 先解析成稳定 BRep feature,再调用修饰接口。
  • 创建前确认目标 feature 和 BRep 属于同一个 Body。
  • 变半径倒圆要先 AddObject(),再设置半径/顶点对。

14. Body 布尔:先满足前置条件

CATPartUseItf/PublicInterfaces/CATIPdgUsePrtBooleanFactory.h 管 Body 布尔。

常用方法:

方法 作用
CreateAdd() Add
CreateRemove() Remove
CreateIntersect() Intersect
CreateAssemble() Assemble
CreateVolumicAdd() volume add
CreateVolumicRemove() volume remove
CreateVolumicIntersect() volume intersect

布尔操作的前置条件比普通特征更严格:

  1. 第一 Body 应设为 current body。
  2. 两个 Body 都应处于已更新状态。
  3. 第二 Body 不能与第一 Body 形成 specification loop。
  4. 如果第二 Body 要聚合到第一 Body 下,明确 AggregateSecondOperand 的取值。

推荐流程:

创建工具 Body
  -> 在工具 Body 中创建并更新工具几何
  -> 切回目标 Body / 设置 In Work Object
  -> 调用 CATIPdgUsePrtBooleanFactory
  -> 更新并检查结果

15. BRep 接口:把“选择”变成可复用引用

Part 修饰、UpToSurface、边倒圆、倒角、抽壳等场景都离不开 BRep。V6 中建议围绕 CATMecModUseItf 的 BRep 访问接口处理。

常用接口:

接口 作用
CATIMmiUseBRepAccess 管理 selecting object,读取类型、有效性、初始 feature、最后 feature 等
CATIMmiUseBRep BRep feature 的通用接口
CATIMmiUseMfBRep mechanical BRep 相关访问
CATIMmiBRepFactory 创建 RSur / REdge / FVertex / PointOnEdge 等 BRep feature
CATIMmiUseTopoAccess 需要时访问拓扑层信息

CATMecModUseItf/PublicInterfaces/CATIMmiUseBRepAccess.h 提供了 IsBRepValid()GetBRepElementType()GetBRepInitialFeature()GetBRepLastFeature() 等能力。

建议封装一层自己的 BRep 服务:

HRESULT ResolveSelectedBRep(CATBaseUnknown_var iSelected,
                            CATIMmiUseBRepAccess_var& oBRepAccess)
{
  oBRepAccess = iSelected;
if (NULL_var == oBRepAccess)
return E_INVALIDARG;

  CATBoolean isValid = FALSE;
  HRESULT hr = oBRepAccess->IsBRepValid(isValid);
if (FAILED(hr) || FALSE == isValid)
return E_FAIL;

return S_OK;
}

这样业务层只处理“已验证的 BRep 引用”,不会把 UI 选择、拓扑 cell 和规格 feature 混在一起。

16. GSM 线框曲面:创建后必须插入

CATGSMUseItf/PublicInterfaces/CATIGSMUseFactory.h 是 GSD/GSM 主工厂,用于创建点、线、面、圆、样条、投影、拉伸、旋转、放样、填充、偏移、分割、修剪、变换等特征。

但它有一个非常关键的规则:

CATIGSMUseFactory 创建的 feature 不会自动 aggregate。要显示在 3D 和规格树中,必须插入到 GSMTool,也就是 Body、GS 或 OGS。

推荐方式是:

  • 创建 GS / OGS:用 CATIMmiUseSetFactory
  • 创建 GSM feature:用 CATIGSMUseFactory
  • 插入 procedural view:优先用 CATIGSMUseProceduralView
  • 如果插入 Body 或 OGS,要遵守线性依赖顺序。
  • 插入后再 update。

这和很多实体特征的工厂体验不一样,不能只调用 CreatePoint()CreateLine()CreateExtrude() 就以为对象已经进入模型。

17. Knowledge 参数:单位和持久性要分清

KnowledgeInterfaces 中的 CATICkeParmCATICkeParmFactory 常用于长度、角度、半径、布尔、字符串等参数。

CATICkeParmFactory.h 说明了两个常见来源:

  • 从 feature container 取得 factory,创建持久参数。
  • 使用 volatile factory,创建临时参数。

需要特别注意单位:

  • CreateLength() 这类 Knowledge 参数通常按 MKS 体系处理。
  • CreateAngle() 通常是弧度语义。
  • 但具体 Part 接口不一定统一,例如部分 Draft 相关接口文档会明确使用 degree。

因此写工程代码时不要把“所有长度是毫米、所有角度是度”写死。应逐接口确认单位,并在自己的业务入口统一转换。

18. 更新、删除和错误诊断

V6 零件模块里,更新和删除不建议散落到各个业务函数里。推荐封装成统一生命周期服务。

18.1 更新

DataCommonProtocolServices::Update() 的语义是:

  1. 先调用 IsUpToDate()
  2. 如果对象不是最新,才触发实际 update。
  3. 如果对象已是最新,返回 S_FALSE,不会调用更新代码。
  4. 如果失败,模型可能已经被部分修改。

因此推荐包装:

HRESULT SafeUpdate(CATIUseEntity_var spEntity)
{
if (NULL_var == spEntity)
return E_INVALIDARG;

  CATBoolean upToDate = FALSE;
  HRESULT hr = DataCommonProtocolServices::IsUpToDate(spEntity, upToDate);
if (FAILED(hr))
return hr;

if (TRUE == upToDate)
return S_FALSE;

return DataCommonProtocolServices::Update(spEntity);
}

18.2 删除

删除应优先走通用协议:

CATBoolean deletable = FALSE;
HRESULT hr = DataCommonProtocolServices::CanDelete(spEntity, deletable);
if (SUCCEEDED(hr) && TRUE == deletable)
  hr = DataCommonProtocolServices::Delete(spEntity);

不要为了“像 UI 一样”就默认调用交互 Delete 命令。批处理和插件命令都更适合走模型协议。

18.3 错误诊断

CATIMmiUseUpdateError 可用于查询 mechanical feature 的 update error、diagnostic 和 sick features。建议在失败时记录:

  • 当前 feature 名称和类型。
  • 所在 Body / GS / OGS。
  • 输入 profile、support、BRep、limit 对象。
  • update 前后的状态。
  • CATIMmiUseUpdateError 返回的诊断信息。

19. 自定义业务能力:不要硬塞进 OOTB Part

如果你的目标是“给零件加一棵业务节点”“给 Pad 增加企业属性”“保存检查结果”“根据零件特征生成业务报告”,不建议直接修改 OOTB Part Design feature 的内部结构。

推荐路线有两种:

19.1 自定义 base feature

适合创建独立业务对象,例如:

PartBusinessCont
  PartCheckRoot
    PartCheckItem
    PartCheckItem

实现方式:

  1. 用 OSM 定义 StartUp。
  2. CATfctEditorAssistant 生成或更新 CATfct。
  3. CATFmStartUpFacade 实例化 feature。
  4. CATFmFeatureFacade 读写属性。
  5. CATIFmFeatureBehaviorCustomization::Build() 实现业务更新。
  6. 用导航接口把对象显示到零件规格树合适位置。

19.2 Feature extension

适合给已有 Part feature 追加属性或行为,例如给某个 Hole、Pad、Fillet 挂业务信息。

典型链路:

CATFmFeatureFacade baseFacade(*credentials, spBaseFeature);
CATFmFeatureFacade extensionFacade(*credentials);
HRESULT hr = baseFacade.AddExtension("`MyPartFeatureExtension`@`MyCatalog.CATfct`",
                                    extensionFacade);

关键点:

  • 先验证目标 OOTB feature 是否适合被 extension 扩展。
  • OSM 中 ExtendsContainerContType 要配置正确。
  • 删除扩展时用 RemoveExtension() 或通用删除协议,不要手工断内部关系。

20. 推荐的开发顺序

如果要写一个稳定的 V6 零件二开命令,建议按这个顺序推进:

  1. 明确入口:当前 editor、当前选择、PLM representation,还是批处理打开的 3D Shape。
  2. 取得 specification container 和 CATIMmiPrtContainer
  3. 取得 MechanicalPart,再取得 CATIMmiUsePrtPartCATIPartRequest
  4. 确认目标 Body / GS / OGS 和 In Work Object。
  5. 如果需要 profile,先创建或找到 Sketch。
  6. 通过 CATIPdgUsePrtFactoryCATIGSMUseFactory 创建特征。
  7. 用具体接口补规格参数。
  8. 插入到正确 procedural body / GS / OGS。
  9. 执行受控 update,并读取错误诊断。
  10. 如需保存业务语义,用 FeatureModelerExt 自定义 feature 或 extension。

21. 常见坑

21.1 创建了 GSM feature,但规格树里看不到

原因通常是只调用了 CATIGSMUseFactory,没有把 feature 插入 GSMTool。解决方式是插入 GS / OGS / Body,推荐走 CATIGSMUseProceduralView

21.2 Pad / Pocket 创建成功,但进了错误 Body

通常是 In Work Object 或目标 Body 没处理好。创建前先用 CATIMmiUsePrtPart::GetInWorkObject() 检查,必要时用 SetInWorkObject() 显式切换。

21.3 倒圆角、倒角、抽壳找不到对象或更新失败

常见原因是传入的不是合法 BRep feature,或者 BRep 不属于同一个 Body。先用 CATIMmiUseBRepAccess::IsBRepValid() 检查,再确认 initial feature / last feature。

21.4 布尔操作后结构树不符合预期

先确认第一 Body 是否 current body、第二 Body 是否已更新、是否产生 specification loop,以及 AggregateSecondOperand 是否符合预期。

21.5 读取 Get 接口导致模型状态变化

Part Design 中一些 Get 会触发懒解析、内部参数实体化或暴露已有 update 问题。巡检工具要记录读取前后的 update 状态,不要把所有“读取后报红”都简单归因于接口修改模型。

22. 验证清单

开发完一个零件模块能力后,至少验证下面几类数据:

  1. 空白 3D Shape:能否取得 MechanicalPart、主 Body 和参考平面。
  2. 多 Body 零件:能否正确识别 main body、root bodies、operated bodies。
  3. GS / OGS 混合零件:GSM feature 是否插入正确位置。
  4. 带 Sketch 的零件:profile 修改后 Pad / Pocket 是否稳定更新。
  5. 带修饰特征的零件:Fillet / Chamfer / Shell 是否能从 BRep 恢复输入对象。
  6. 带布尔的零件:Add / Remove / Intersect 后结构树是否符合预期。
  7. 失败模型:CATIMmiUseUpdateError 是否能给出可记录诊断。
  8. 关闭不保存场景:只读巡检是否不会留下不必要修改。

23. 最小接口记忆表

如果只记一张表,可以先记下面这些:

场景 优先接口
进入零件上下文 CATIMmiPrtContainer
管 Part 当前对象 CATIMmiUsePrtPart
查 Body / GS / OGS CATIPartRequest
建 Body / GS / OGS CATIMmiUseSetFactory
建 Pad / Pocket / Hole / Fillet CATIPdgUsePrtFactory
改 Pad / Pocket CATIPdgUsePrism
插入实体特征 CATIMmiUseSolidInsertion
解析选择面边点 CATIMmiUseBRepAccess / CATIMmiBRepFactory
建线框曲面 CATIGSMUseFactory
插入 GSM 特征 CATIGSMUseProceduralView
管参数 CATICkeParm / CATICkeParmFactory
更新/删除 DataCommonProtocolServices
自定义业务特征 FeatureModelerExt

评论