Creating and Modifying a Mechanical Design Feature-使用机械设计工厂与零件设计接口

摘要

本文讲解 CAAPriCreateModify 用例。该用例说明如何创建和修改机械设计特征。
    • 本用例将教会您什么
    • CAAPriCreateModify 用例
      • CAAPriCreateModify 的功能
      • 如何运行 CAAPriCreateModify
      • CAAPriCreateModify 代码所在位置
    • 分步实现
    • 小结
    • 参考文献

      通过本用例您将学习到

      本用例旨在帮助您初步掌握 CATIA 零件设计 模块的编程方法 [1],其核心目标是讲解如何创建机械设计特征

CAAPriCreateModify 用例

CAAPriCreateModify 是 CAAPartInterfaces.edu 框架中的一个用例,用于演示 PartInterfaces 框架的各项功能。

CAAPriCreateModify 实现功能

CAAPriCreateModify 用例的目标是演示如何使用机械设计工厂实例化机械设计特征,以及如何通过零件设计接口修改机械设计特征。我们将通过创建和修改凸台(Pad)特征来进行说明。创建的零件与修改后的零件将分别保存在两个不同的文档中。
具体来说,CAAPriCreateModify 将执行以下操作:
  • 创建一个空白的 CATPart 文档
  • 创建一个矩形草图
  • 基于该草图创建凸台,并使用两个偏移极限值进行定义
  • 将该凸台保存至一个 CATPart 文档,其路径为运行 CAAPriCreateModify 时传入的第一个参数
  • 修改拉伸方向,并设置对称延伸属性
  • 更新凸台特征
  • 将修改后的凸台保存至另一个 CATPart 文档,其路径为运行 CAAPriCreateModify 时传入的第二个参数

如何运行 CAAPriCreateModify

要运行 CAAPriCreateModify,需要先搭建编译环境,然后将 CAAPriCreateModify 及其依赖项一同编译,配置运行环境,再执行该用例 [2]。

请按以下方式运行该用例:

图片

 

其中:
  • outputDirectory:用于存放 PartCM1.CATPart 和 PartCM2.CATPart 文件的目录
  • PartCM1.CATPart:包含所创建凸台特征的文件
  • PartCM2.CATPart:包含凸台特征修改后结果的文件

CAAPriCreateModify 代码位置

CAAPriCreateModify 用例由单个类实现,类名与用例名一致:CAAPriCreateModify
该类位于 CAAPartInterfaces.edu 框架下的 CAAPriCreateModify.m 模块中。
不同系统路径如下:
  • Windows 系统
     
    InstallRootDirectory\CAAPartInterfaces.edu\CAAPriCreateModify.m\
  • Unix 系统
     
    InstallRootDirectory/CAAPartInterfaces.edu/CAAPriCreateModify.m/
其中:

InstallRootDirectory = CAA 安装光盘的根安装目录

分步实现

CAAPriCreateModify 主要包含七个核心步骤
  1. 初始化(序言)
  2. 获取草图工厂与基准平面列表
  3. 创建草图
  4. 创建凸台特征
  5. 检查并保存已创建的凸台
  6. 修改已创建的凸台
  7. 保存修改后的凸台并退出
接下来我们将结合代码对每一部分逐一进行讲解。

初始化(Prolog)

CAAPriCreateModify 首先检查命令行是否包含三个参数
随后创建一个会话(Session),并新建一个 CATPart 文档;该文档通过一个名为 pDocCATDocument 类指针,以及一个名为 spiInitOnDocCATInit 接口智能指针进行引用。
这是创建 CATIA 文档的标准流程[3]。

获取草图工厂与基准平面列表

...
  // 获取用于实例化对象的草图工厂
  CATISketchFactory_var spSketchFactOnPrtCont(piPrtCont);
	
  // 创建草图平面
  // 获取零件的基准平面
  CATIPrtPart_var spPart = piPrtCont->GetPart();
  CATListValCATISpecObject_var spListRefPlanes = spPart->GetReferencePlanes();
...
通过 CATInit 接口的智能指针,调用 GetRootContainer 方法获取文档的根容器,并将其转换为 CATIPrtContainer 接口指针。
根容器实现了创建草图对象所需的工厂接口,且支持访问文档中的基准平面。
CATISketchFactory:草图对象工厂接口

创建草图

...
  // 将XY平面定义为第一个草图平面
  CATISpecObject_var spSketchPlane = spListRefPlanes[1];

  // 基于该平面实例化草图
  CATISketch_var spSketch =
    spSketchFactOnPrtCont->CreateSketch(spSketchPlane);

  // 获取用于创建草图中点和线的二维工厂
  CATI2DWFFactory_var spWF2DFactOnSketch(spSketch);

  // 创建草图几何元素
  double pt1[2] = { 10.,  5.},
         pt2[2] = {-10.,  5.},
         pt3[2] = {-10., -5.},
         pt4[2] = { 10., -5.};

  // 进入草图编辑模式并绘制直线与端点
  spSketch->OpenEdition();
  CATISpecObject_var spLine1 = spWF2DFactOnSketch->CreateLine(pt1,pt2);
  CATISpecObject_var spLine2 = spWF2DFactOnSketch->CreateLine(pt2,pt3);
  CATISpecObject_var spLine3 = spWF2DFactOnSketch->CreateLine(pt3,pt4);
  CATISpecObject_var spLine4 = spWF2DFactOnSketch->CreateLine(pt4,pt1);

  CATI2DCurve_var spCurveOnLine1(spLine1);
  spCurveOnLine1->GetStartPoint();
  spCurveOnLine1->GetEndPoint();
  CATI2DCurve_var spCurveOnLine2(spLine2);
  spCurveOnLine2->GetStartPoint();
  spCurveOnLine2->GetEndPoint();
  CATI2DCurve_var spCurveOnLine3(spLine3);
  spCurveOnLine3->GetStartPoint();
  spCurveOnLine3->GetEndPoint();
  CATI2DCurve_var spCurveOnLine4(spLine4);
  spCurveOnLine4->GetStartPoint();
  spCurveOnLine4->GetEndPoint();

  // 退出草图编辑模式
  spSketch->CloseEdition();
...
后续我们会看到,凸台的一个核心参数就是草图。草图是在三维空间中某个平面上由曲线和点构成的二维对象。因此,为实例化草图,我们使用代表 XY 平面(0,x,y)的 spSketchPlane,该平面由 CATMathPlane 创建,并通过 CATIGSMFactory 的 CreatePlane 方法以 CATISpecObject 形式获取,同时赋予其 SketchPlane 标识。
随后通过 CATISketchFactory 的 CreateSketch 方法创建草图。草图对象实现了 CATI2DWFFactory 接口,该接口包含所有用于创建二维几何对象的方法,为此从草图对象获取该接口的智能指针 spWF2DFactOnSketch。
草图由一个矩形构成,通过 pt1、pt2、pt3、pt4 四个点设定坐标来定义。
CATISketch 接口定义了一系列用于编辑草图的方法。任何草图编辑操作都以 OpenEdition 开始,以 CloseEdition 结束。
CATI2DWFFactory 的 CreateLine 方法用于创建直线,而 CATICurve2D 接口上的 GetStartPoint 和 GetEndPoint 方法则用于创建直线的端点。

创建凸台

...
  CATMathDirection dirZ(0., 0., 1.); // 凸台的拉伸方向
  double firstLimit  = 20.;
  double secondLimit =  0.;

  // 获取机械设计工厂以创建凸台
  CATIPrtFactory_var spPrtFactOnPrtCont(piPrtCont);
  piPrtCont->Release();

  CATISpecObject_var spSpecObj = spPrtFactOnPrtCont->CreatePad(spSketch);

  CATIPad_var spPadOnSpecObj(spSpecObj);

  spPadOnSpecObj->ModifyDirection(dirZ);
  spPadOnSpecObj->ModifyEndType(catOffsetLimit);
  spPadOnSpecObj->ModifyEndOffset(firstLimit);
  spPadOnSpecObj->ModifyStartType(catOffsetLimit);
  spPadOnSpecObj->ModifyStartOffset(secondLimit);

  spSpecObj->Update(); // 构建凸台
...
凸台所依赖的草图现已创建完成。凸台的其余参数包括草图的拉伸方向以及两个拉伸极限。
根容器同样实现了 CATIPrtFactory 接口,此时根容器已不再需要,可释放。
调用 CreatePad 方法创建凸台,并将草图作为参数传入;通过凸台自身实现的 CATIPad 接口方法来设置其参数:
  • ModifyDirection:将凸台拉伸方向设置为 Z 轴。需要注意的是,若不调用 ModifyDirection,默认拉伸方向为草图平面的法向。
  • ModifyEndType:通过 CatLimitMode 枚举中的 catOffsetLimit 值,将凸台末端设置为以草图平面为基准的偏移量形式。
  • ModifyEndOffset:设置该偏移值,在凸台编辑对话框中也称为第一极限
  • ModifyStartType 与 ModifyStartOffset:对凸台的第二极限进行相同设置。由于 secondLimit 为 0,凸台从草图平面开始拉伸。
调用 Update 方法使这些参数生效,完成凸台的构建。

检查并保存创建的凸台

...
  // 检查已创建凸台的拉伸极限
  if (spPadOnSpecObj->GetEndOffset()   != firstLimit ||
      spPadOnSpecObj->GetStartOffset() != secondLimit)
        return 3;

  // 将创建好的凸台保存至第一个输入路径
  char * pNomPart1 = iArgv[1];
  CATDocumentServices::SaveAs(*pDoc, pNomPart1);
...

图片

 通过 GetEndOffsetGetStartOffset 方法分别获取第一极限与第二极限的数值,以此对凸台的实际偏移量进行简单校验。

如果其中任一数值与创建时设定的数值不一致,CAAPriCreateModify 会以返回码 3终止程序;否则,将凸台保存至启动 CAAPriCreateModify 时第一个参数所指定目录下的 CATPart 文档中。

这是保存文档的标准流程 [3]。

该图在图形窗口和特征树中均显示了这个凸台特征,其在特征树中以名称 Pad.1 显示,该凸台基于名为 Sketch.1 的草图创建。

修改已创建的凸台

...
  // 修改凸台,更改拉伸方向
  // 并应用对称拉伸

  CATMathDirection dir2(0., 1., 1.); // 凸台拉伸方向

  // 修改第一极限类型
  spPadOnSpecObj->ModifySym(1);

  // 修改第一极限
  spPadOnSpecObj->ModifyDirection(dir2);

  spSpecObj->Update(); // 重建凸台
...
下面我们来修改凸台的其中一项参数:使用 ModifySym 方法设置对称延伸属性,并通过 ModifyDirection 方法将拉伸方向修改为新方向 dir2。

保存修改后的凸台并退出

...
  // 将修改后的凸台保存至第二个输入路径
  char * pNomPart2 = iArgv[2];
  CATDocumentServices::SaveAs(*pDoc, pNomPart2);

  // 关闭会话
  ::Delete_Session("SampleSession");

  return rc;
}

图片

 修改后的凸台被保存到 CATPart 文档中,该文件的路径为运行 CAAPriCreateModify 时传入的第二个参数。图示为修改后的凸台:其高度变为初始高度的两倍,拉伸方向也不再垂直于草图平面。随后程序结束并释放会话。这是保存文档并关闭会话的标准流程 [3]。

小结

本用例演示了创建与修改机械特征的实现方法。

... // 获取用于实例化对象的草图工厂 CATISketchFactory_var spSketchFactOnPrtCont(piPrtCont); // 创建草图平面 // 获取零件的基准平面 CATIPrtPart_var spPart = piPrtCont->GetPart(); CATListValCATISpecObject_var spListRefPlanes = spPart->GetReferencePlanes(); ... ... // 获取用于实例化对象的草图工厂 CATISketchFactory_var spSketchFactOnPrtCont(piPrtCont); // 创建草图平面 // 获取零件的基准平面 CATIPrtPart_var spPart = piPrtCont->GetPart(); CATListValCATISpecObject_var spListRefPlanes = spPart->GetReferencePlanes(); ...

... // 获取用于实例化对象的草图工厂 CATISketchFactory_var spSketchFactOnPrtCont(piPrtCont); // 创建草图平面 // 获取零件的基准平面 CATIPrtPart_var spPart = piPrtCont->GetPart(); CATListValCATISpecObject_var spListRefPlanes = spPart->GetReferencePlanes(); ...

... // 获取用于实例化对象的草图工厂 CATISketchFactory_var spSketchFactOnPrtCont(piPrtCont); // 创建草图平面 // 获取零件的基准平面 CATIPrtPart_var spPart = piPrtCont->GetPart(); CATListValCATISpecObject_var spListRefPlanes = spPart->GetReferencePlanes(); ...

... // 获取用于实例化对象的草图工厂 CATISketchFactory_var spSketchFactOnPrtCont(piPrtCont); // 创建草图平面 // 获取零件的基准平面 CATIPrtPart_var spPart = piPrtCont->GetPart(); CATListValCATISpecObject_var spListRefPlanes = spPart->GetReferencePlanes(); ...

posted @ 2026-04-02 10:52  Breadss  阅读(1)  评论(0)    收藏  举报