Patterning a Mechanical Design Form Feature-实现 CATIPrtManageFeatBuild 接口

摘要

本文讲解 CAAPriPattern 示例。该示例阐述如何对 BuildShape 方法进行管理,以使机械设计中的形状特征能够实现阵列。
  • 本示例将使您掌握的内容
  • 阵列相关的重要概念
  • CAAPriPriPattern 示例
    • CAAPriPattern 的功能
    • CAAPriPattern 的启动方法
    • CAAPriPattern 代码位置
  • 分步实现
  • 简要总结
  • 参考文献

 

通过本示例您将学到的内容

本示例旨在帮助您迈出使用零件设计(Part Design)进行编程的第一步。其主要目的是让您掌握对阵列特征的 BuildShape 方法进行管理的相关实现。

阵列相关重要概念

阵列操作只能应用于机械形状特征[1]。阵列的形状是通过计算每个实例的几何对象得到的。创建阵列包含以下步骤:
  • 为需要阵列的特征创建实例
  • 转换其主要规范参数
  • 构建其形状
在另一示例 [2] 中,我们展示了如何实现 CATIBuildShape 接口,用于管理过程报告的创建与存储。
而在阵列场景下,过程报告不会被存储,因为创建阵列仅需要最终的几何结果。
在被阵列特征的 BuildShape 方法中调用的拓扑算子,其输入为从规范参数生成的几何对象。例如,在文献 [2] 中,草图生成的几何结果就是所调用拓扑算子的输入之一。
为了能够在阵列定义的位置上构建形状,必须将阵列计算出的变换矩阵,应用到从被阵列特征的规范参数所生成的几何对象上。
阵列必须能够通过 CATIPrtManageFeatBuild 接口,驱动被阵列特征的 BuildShape 方法。该接口允许应用程序在 BuildShape 执行期间,在阵列与被阵列特征之间交换数据。
因此,实现此接口的特征,可以在阵列环境内或环境外构建自身形状。
所有支持阵列的形状特征都必须实现该接口

CAAPriPattern 示例

CAAPriPattern 是 CAAPartInterfaces.edu 框架下的一个使用示例,用于演示 PartDesign(零件设计)框架的各项功能。

CAAPriPattern 实现的功能

CAAPriPattern 示例的目的是演示如何对机械设计形状特征的 CATIBuildShape 接口中的 BuildShape 方法进行管理,使该特征能够支持阵列操作。我们将通过扩展 CAAPriBuildUserPad 示例 [2] 中已实现的 CATIBuildShape 来完成演示。
CAAPriPatternMain.m 模块包含一个主程序,其功能为:创建零件文档、实例化 CAAPriPatternPad 启动对象、调用其 Build 方法、保存生成的零件文档,再以 3×3 阵列方式对特征进行阵列操作,并将最终结果保存到第二个零件文档中。
图 1 为保存在第一个零件文档中的待阵列凸台特征,图 2 为保存在第二个零件文档中的阵列后凸台。
图 1 待阵列的凸台特征

图片

 图 2 阵列后的凸台特征

图片

 

如何运行 CAAPriPattern

要运行 CAAPriPattern,您需要搭建编译环境,然后编译 CAAPriPattern 及其依赖组件,配置运行环境,最后执行该示例 [3]。
不要在命令行中直接输入模块名称,而应输入以下命令:
CAAPriPatternMain e:\Parts\CAAPriPattern1.CATPart e:\Parts\CAAPriPattern2.CATPart
其中:
  • e:\Parts\CAAPriPattern1.CATPart:用于保存待阵列的凸台特征
  • e:\Parts\CAAPriPattern2.CATPart:用于保存阵列后的凸台特征

如何找到 CAAPriPattern 代码

CAAPriPattern 示例由 CAAPartInterfaces.edu 框架下的两个模块组成,分别为 CAAPriPattern.mCAAPriPatternMain.m
Windows 平台
InstallRootDirectory\CAAPartInterfaces.edu\CAAPriPattern.m
InstallRootDirectory\CAAPartInterfaces.edu\CAAPriPatternMain.m\
Unix 平台
InstallRootDirectory/CAAPartInterfaces.edu/CAAPriPattern.m/
InstallRootDirectory/CAAPartInterfaces.edu/CAAPriPatternMain.m/
其中,InstallRootDirectory 为 CAA 光盘的安装根目录。 

分步实现

CAAPriPattern 示例包含五个逻辑步骤:
  1. 实现 CATIPrtManageFeatBuild 接口
  2. 判断 BuildShape 方法是否在阵列环境下被调用
  3. 在阵列环境下管理过程报告
  4. 对从规范参数生成的几何对象进行变换
  5. 存储拓扑日志与计算得到的形状
接下来我们将结合代码对每一步进行讲解。

实现 CATIPrtManageFeatBuild 接口

class CAAPriEManageFeatBuild : public CATPrtManageFeatBuildExt
{
  CATDeclareClass;
};
系统提供了一个适配器类用于实现 CATIPrtManageFeatBuild 接口。要使用该适配器,需要创建一个继承自 CATPrtManageFeatBuildExt 的类,本例中将该类命名为 CAAPriEManageFeatBuild
#include "CAAPriEManageFeatBuild.h"

// 声明该类为(延迟类型)PatternPad 的代码扩展类
CATImplementClass(CAAPriEManageFeatBuild, 
                  CodeExtension,
                  CATBaseUnknown,
                  PatternPad);

#include "TIE_CATIPrtManageFeatBuild.h" // 用于将实现类与对应接口绑定
TIE_CATIPrtManageFeatBuild(CAAPriEManageFeatBuild);
CAAPriEManageFeatBuild 是对阵列对象 PatternPad 特征的代码扩展。无需重新定义 CATIPrtManageFeatBuild 接口中的任何方法

判断 BuildShape 方法是否在阵列环境下被调用

int CAAPriEBuildShapeToPattern::BuildShape()
{
  ...
  CATIPrtManageFeatBuild_var spManageBuild = this; 
  int pattern = !(spManageBuild->ReportNecessity()); // 若为阵列环境,pattern = 1
  ...
BuildShape 方法由 CAAPriEBuildShapeToPattern 类实现,会根据运行环境执行不同逻辑。
阵列环境模式可通过 CATIPrtManageFeatBuild 接口获取,并存储在 pattern 变量中。该判断在获取 CATGeoFactory 指针后立即执行。
pattern = 1 表示当前 BuildShape 方法运行在阵列环境下。

在阵列环境下管理过程报告

...
if (!pattern)
  CATIGeometricalElement_var(this)->DeleteScope();
...
在阵列环境下,不应对该特征执行作用域删除操作。该逻辑位于创建过程报告之后。
...
if (pattern)
  spManageBuild->SetOperand(ListSpec, ListKey);
...
用于创建过程报告的规范参数(规格)将被用于生成阵列形状。必须通过 CATIPrtManageFeatBuildSetOperand 方法存储这些信息。该操作位于创建拓扑日志之后。

对由规格参数生成的几何图形进行变换

这一步骤恰好在使用全局函数 ::CATCreateTopPrism 创建拉伸体之前执行。
...
CATBody_var spTransformBody = spProfileBody;
if (pattern)
{
  // 获取由阵列计算得出的数学变换矩阵
  CATMathTransformation transfo = spManageBuild->GetLocalSketchTransfo();
...
在阵列环境下,通过 CATIPrtManageFeatBuild 接口的 GetLocalSketchTransfo 方法,可获取由阵列计算得出的数学变换矩阵。
    ...
    // 对轮廓几何图形进行变换:

    // 创建变换算子并设置其属性

    // 拓扑算子的输入参数
    CATSoftwareConfiguration* pSoftConfig = new CATSoftwareConfiguration();
    CATTopData topData(pSoftConfig, pCurrentJournal);
      
    CATDynTransformation *pTransformation = CATCreateDynTransformation(spGeoFactoryOnSolidCont,
                                                                       &topData,
                                                                       spProfileBody);

    pTransformation->SetReportMode(CATDynTransformation::CATDynModification);
    pTransformation->SetTransformation(transfo);
    // 执行变换操作
    pTransformation->Run();
    // 获取变换后的几何结果
    spTransformBody = pTransformation->GetResult();
  
    delete pTransformation;
    pTransformation = NULL;
...
使用合适的参数创建一个 CATDynTransformation 对象,这些参数包括几何工厂、待变换的实体以及拓扑日志。在这一步中,待变换的实体即为草图。
该 CATDynTransformation 实例被定义为修改类型,并赋予之前获取到的数学变换。
随后执行变换,将其应用到由草图及其他影响形状的几何元素所生成的结果几何体上。
之后获取其运算结果,该结果即为阵列凸台(PatternPad)经过阵列变换后的草图
...
    // 凸台拉伸方向的变换

    CATAngle angle(0.);
    CATMathLine axis;
    CATBoolean isRotated = transfo.IsRotation(angle, axis);
    if (isRotated)
    {
      direction = transfo * direction;
    }
  }
...
如果该数学变换为旋转变换,则获取其旋转轴和旋转角度,并将其应用于阵列凸台(PatternPad)的拉伸方向。
随后,BuildShape 方法继续执行,使用变换后的 spTransformBody 和拉伸方向,通过全局函数 ::CATTopCreatePrism 来创建拉伸体。

存储拓扑日志与计算得到的形状

该步骤在创建拉伸体之后立即执行。
...
if (!pattern )
{ 
  // 存储过程报告
  spReport->StoreProcReport(spSolid, NoCopy);
}
...
在阵列环境下,不存储过程报告
...
else
{
  // 设置生成的几何对象
  spManageBuild->SetBody(spSolid);
  // 设置拓扑日志
  spManageBuild->SetCurrentJournal(pCurrentJournal);
}
...
但计算得到的形状与拓扑日志必须保存,因为它们是计算阵列形状所必需的。

简要总结

本示例演示了对阵列特征的 BuildShape 方法进行管理的实现方式。

posted @ 2026-04-02 16:36  Breadss  阅读(3)  评论(0)    收藏  举报