Creating a Nozzle Shape Thanks to Shape Design Features-使用外形设计工厂创建点、直线、平面、圆、分割、扫掠以及放样特征

摘要

本文介绍 CAAGsiNozzle 示例。该示例演示如何借助外形设计特征创建一个喷嘴形状。
  • 通过本示例你将学到的内容
  • 与 CATGsiToolkit 相关的几个重要概念
  • CAAGsiNozzle 示例
    • CAAGsiNozzle 的功能
    • 如何运行 CAAGsiNozzle
    • 在哪里可以找到 CAAGsiNozzle 代码
  • 分步实现
  • 小结
  • 参考文献
 

通过本示例你将学到什么

本示例旨在帮助你迈出使用外形设计模块进行编程的第一步,其核心目的是让你学会使用各类外形设计特征来创建一个喷嘴形状 [2]。

与 CATGsiUserTools 相关的重要概念

CAAGsiNozzle 示例大量使用了 CAAGsiUserTools 类提供的服务。该类内部封装了对 CATIGSMFactory 接口的多次调用,从而减少了需要编写的代码行数。我们使用一个列表来存储要实例化的规范(特征)所需的输入对象。这种编码方式允许用户只需修改输入列表中的少量参数,就能多次调用同一个方法。
CAAGsiUserTools 类将 CAAGsiNozzle 示例代码与来自 GSMInterfaces 框架的接口分离开来。这是一种很好的设计方案,可以在这些接口发生变更时,降低对您内部代码的冲击影响。
此外,如果用户创建的每个特征都需要执行某项通用操作,可以将其统一放在 CreateXXX 方法中实现,而不必在每个创建该特征的文件里重复编写。(例如:修改特征名称,或将其放入隐藏组 NoShow 中。)

CAAGsiNozzle 示例

CAAGsiNozzle 是 CAAGSMInterfaces.edu 框架下的一个示例程序,用于演示 GSMInterfaces 框架的各项功能。

CAAGsiNozzle 的功能

CAAGsiUserTools 示例的目的是演示如何使用外形设计特征创建一个喷嘴形状。我们对示例代码 CAAGsiNozzle.cpp 进行了完善,并更详细地讲解外形设计特征的创建方法。
我们将喷嘴形状的创建拆分为多个步骤:首先创建线框元素(点、平面、圆),随后创建曲面特征(扫掠、放样)。效果如下所示。

图片

 

如何运行 CAAGsiNozzle

要运行 CAAGsiNozzle,你需要先配置编译环境,然后编译 CAAGsiNozzle 及其依赖项,再配置运行环境,最后执行该示例程序 [1]。
CAAGsiNozzle 示例中使用了 CAAGsiUserTools 应用程序接口。
按如下方式运行该示例:
在 Windows 系统下
e:>CAAGsiNozzle 输出目录\CAAGsiNozzle.CATPart

在 UNIX 系统下

$ CAAGsiNozzle 输出目录/CAAGsiNozzle.CATPart
其中:
  • outputDirectory:保存 CAAGsiNozzle.CATPart 文件的目录
  • CAAGsiNozzle.CATPart:包含最终生成喷嘴形状的零件文件

在哪里可以找到 CAAGsiNozzle 代码

CAAGsiNozzle 示例程序由主程序构成,其代码位于 CAAGSMInterfaces.edu 框架下的 CAAGsiNozzle.m 模块中:
  • Windows 系统路径
InstallRootDirectory/CAAGSMInterfaces.edu/CAAGsiNozzle.m/
  • UNIX 系统路径
InstallRootDirectory/CAAGSMInterfaces.edu/CAAGsiNozzle.m/

其中 InstallRootDirectory 为 CATIA CAA 安装光盘的安装根目录。

分步操作

CAAGsiNozzle 包含六个逻辑步骤:
  • 初始化准备
  • 创建点特征
  • 创建平面与直线特征
  • 创建圆特征
  • 创建分割与样条线特征
  • 创建扫掠与放样特征
接下来我们将通过查看 CAAGsiNozzle 文件主方法的代码,对以上每个部分进行讲解说明。

初始化准备

在 CAAGsiNozzle 示例中,我们使用 CAAGsiUserTools 类的一个实例(命名为 CAAGsiObjTool)来创建外形设计特征。通过调用 Init 方法创建一个会话(Session)和一个零件文档(Part document)。
int main(int argc, char **argv, char **envp)
{
  HRESULT rc = S_OK;

  char* pSessionName = "CAA2SampleSession";
  rc = CAAGsiObjTool.Init( pSessionName);
  if (FAILED(rc)) return 1;

  int setAsCurrent = 1;
  CATIGSMTool_var spTool = CAAGsiObjTool.CreateGSMTool("Nozzle",setAsCurrent);
  ...

随后,我们创建一个开放几何体(Open Body),用于在其中插入创成式外形设计特征。调用 CreateGSMTool 方法,该方法会返回已创建好的 GSMTool(开放几何体)对象。

创建点特征

如何创建坐标点特征:

...
CATLISTV(CATISpecObject_var) aObjectParameters;
...
CATISpecObject_var spCurrent = NULL_var;

CAAGsiObjTool.CreateLength("X", 17.0, spCurrent);
aObjectParameters.Append(spCurrent);
CAAGsiObjTool.CreateLength("Y", 0.0, spCurrent);
aObjectParameters.Append(spCurrent);
CAAGsiObjTool.CreateLength("Z", 0.0, spCurrent);
aObjectParameters.Append(spCurrent);

CATISpecObject_var spPoint1 = CAAGsiObjTool.CreatePointCoord(aObjectParameters);
aObjectParameters.RemoveAll();
...
本段代码用于创建坐标为 (17,0,0) 的坐标点。实现方式为:首先分别创建三个长度参数,数值依次为 17、0、0 毫米,每个参数都先存入 spCurrent,再将其添加到输入列表 aObjectParameters 中,该列表用于按顺序存储创建特征所需的参数。最后调用 CreatePointCoord 方法,以 aObjectParameters 为输入,创建出坐标点。

如何创建曲线上的点特征:

...
spCurrent = NULL_var;
aObjectParameters.Append(spSplit2);
aObjectParameters.Append(spCurrent);
CAAGsiObjTool.CreateReal("Parm", 0.0, spCurrent);
aObjectParameters.Append(spCurrent);
CATISpecObject_var spPoint14 = CAAGsiObjTool.CreatePointOnCurve(aObjectParameters,TRUE);
aObjectParameters.RemoveAll();
...

本段代码基于 Split.12 特征,在曲线长度为 0 的位置创建一个曲线上的点。实现步骤为:首先获取 spSplit12CATISpecObject 智能指针并加入输入列表;随后将 spCurrent 置空并加入列表,表示曲线长度的参考起点将以 Split.12 特征的起始端点计算;接着调用 CreateReal 方法创建表示曲线长度的实数参数;最后调用对应方法创建曲线上的点特征。

创建平面与直线特征

现在我们已经创建了点,可以利用这些点来创建平面和直线。
...
CAAGsiObjTool.CreateLength("A", 0.0, spCurrent);
aObjectParameters.Append(spCurrent);
CAAGsiObjTool.CreateLength("B", 1.0, spCurrent);
aObjectParameters.Append(spCurrent);
CAAGsiObjTool.CreateLength("C", 0.0, spCurrent);
aObjectParameters.Append(spCurrent);
CAAGsiObjTool.CreateLength("D",10.0, spCurrent);
aObjectParameters.Append(spCurrent);

CATISpecObject_var spPlaneY10 = CAAGsiObjTool.CreatePlaneEquation(aObjectParameters);
aObjectParameters.RemoveAll();
...

在这段代码中,我们创建了平面 Y = 10。实现方式为:通过输入列表 aObjectParameters 定义平面方程,依次创建代表平面方程系数的四个长度参数,创建完成后调用 CreatePlaneEquation 方法生成平面。

我们也可以用类似方式创建直线:

...
aObjectParameters.Append(spPoint3);
aObjectParameters.Append(spPoint5);
CATISpecObject_var spLine3 = CAAGsiObjTool.CreateLinePtPt(aObjectParameters);
aObjectParameters.RemoveAll();
...

我们创建了一条由两点定义的简单直线。分别获取点 3(Point.3)和点 5(Point.5)对应的 CATISpecObject 智能指针 spPoint3spPoint5,并将其存入输入列表 aObjectParameters,再通过 CreateLinePtPt 方法创建两点连线特征。

创建圆特征

如何创建圆:

...
aObjectParameters.Append(spPoint5);
aObjectParameters.Append(spPoint6);
aObjectParameters.Append(spPlaneY15);
CAAGsiObjTool.CreateLength("Radius", 15.0, spCurrent);
aObjectParameters.Append(spCurrent);
CATISpecObject_var spCircle3 = CAAGsiObjTool.CreateCircle2PointsRad(aObjectParameters,FALSE,TRUE);
aObjectParameters.RemoveAll();
...

我们需要在平面 Y=15 上创建一个圆轮廓。为此,首先获取 spPoint5、spPoint6 和 spPlaneY15 这几个 CATISpecObject 智能指针,并将它们添加到输入列表 aObjectParameters 中,供 CreateCircle2PointsRad 方法使用,以创建由两点和半径定义的圆。

该圆将经过点 5 和点 6,并以平面 Y=15 作为参考平面。圆 Circle.3 不会是测地线圆,而是保持由输入参数定义的原有方向。最终生成的圆弧段取决于传递给 CreateCircle2PointsRad 方法的方向参数。

创建分割与样条线特征

现在我们可以创建分割特征,通过与另一个对象相交来限制某个特征的边界。
...
aObjectParameters.Append(spCircle6);
aObjectParameters.Append(spPlaneAngle35);
CATISpecObject_var spSplit1 = CAAGsiObjTool.CreateSplit(aObjectParameters,TRUE);
aObjectParameters.RemoveAll();
...

我们创建一个分割特征,使用 Plane.6 对 Circle.6 进行边界修剪。实现方式为:将 spCircle6 和 spPlaneAngle35 加入输入列表 aObjectParameters,然后调用 CreateSplit 方法创建 Split.1 特征。布尔参数 TRUE 用于选择被分割后的圆弧保留哪一侧。

如何创建样条线特征:

...
aObjectParameters.Append(spPoint15);
aObjectParameters.Append(spPoint16);
CATISpecObject_var spDir1 = CAAGsiObjTool.CreateDirection(spLine7);
CATISpecObject_var spDir2 = CAAGsiObjTool.CreateDirection(spLine8);
CATISpecObject_var spSpline = CAAGsiObjTool.CreateSpline(aObjectParameters,spDir1,FALSE,spDir2,TRUE);
aObjectParameters.RemoveAll();
...

该样条线将经过 Point.15 和 Point.16。随后我们基于直线特征创建两个方向向量。最终创建的样条线经过这两个点,并在端点处设置了两条切线方向:spDir1 取反向,spDir2 取同向。

上面创建的两个方向特征不会在结构树(Procedural View)中显示 [3]。因为方向特征属于外形设计模块的内部特征。

创建扫掠与放样特征

现在我们已经创建了所需的线框结构,接下来可以创建曲面,下面来看如何创建扫掠和放样特征。
...
aObjectParameters.Append(spLine2);
aObjectParameters.Append(spCircle1);
CATISpecObject_var spSweep1 = CAAGsiObjTool.CreateSweepOneGuide(aObjectParameters);
aObjectParameters.RemoveAll();
...

我们以直线 Line.2 为引导线、圆 Circle.1 为轮廓,创建一个显式扫掠特征。直线 Line.2 同时也将作为该扫掠的脊线使用。

放样特征的创建方法如下:

...
CATLISTV(CATISpecObject_var) aObjectParametersSections;
aObjectParametersSections.Append(spCircle2);
aObjectParametersSections.Append(spCircle3);
aObjectParameters.Append(spLine3);
CATISpecObject_var spUnused = NULL_var;

CATISpecObject_var spLoft1 = CAAGsiObjTool.CreateLoft(aObjectParametersSections,
                                                      aObjectParameters,
                                                      spUnused);

aObjectParameters.RemoveAll();
aObjectParametersSections.RemoveAll();
...

我们以圆 Circle.2、Circle.3 为截面,直线 Line.3 为引导线,创建一个放样特征。输入列表 aObjectParameters 用于存放引导曲线,截面曲线则存放在专用列表 aObjectParametersSections 中。调用 CreateLoft 方法时,代表脊线的参数 spUnused 设为空变量,这里使用了放样特征自带的自动脊线功能。

小结

本示例演示了如何借助外形设计基础图元创建喷嘴形状。我们展示了对 CAAGsiUserTools 类的使用,该类封装了 CATIGSMFactory 接口的一系列功能方法。同时也说明了线框特征与常用基础曲面特征的创建方式。
此外还展示了:根据用户需要操控的驱动参数,以及在设计修改时希望形状呈现的关联行为,可以采用不同方式来创建点、直线、平面和圆。
posted @ 2026-04-03 14:36  Breadss  阅读(2)  评论(0)    收藏  举报