Creating and Modifying a Mechanical Design Feature-使用机械设计工厂与零件设计接口
摘要
- 本用例将教会您什么
- CAAPriCreateModify 用例
- CAAPriCreateModify 的功能
- 如何运行 CAAPriCreateModify
- CAAPriCreateModify 代码所在位置
- 分步实现
- 小结
- 参考文献
通过本用例您将学习到
本用例旨在帮助您初步掌握 CATIA 零件设计 模块的编程方法 [1],其核心目标是讲解如何创建机械设计特征。
CAAPriCreateModify 用例
CAAPriCreateModify 实现功能
- 创建一个空白的 CATPart 文档
- 创建一个矩形草图
- 基于该草图创建凸台,并使用两个偏移极限值进行定义
- 将该凸台保存至一个 CATPart 文档,其路径为运行 CAAPriCreateModify 时传入的第一个参数
- 修改拉伸方向,并设置对称延伸属性
- 更新凸台特征
- 将修改后的凸台保存至另一个 CATPart 文档,其路径为运行 CAAPriCreateModify 时传入的第二个参数
如何运行 CAAPriCreateModify
请按以下方式运行该用例:

- outputDirectory:用于存放 PartCM1.CATPart 和 PartCM2.CATPart 文件的目录
- PartCM1.CATPart:包含所创建凸台特征的文件
- PartCM2.CATPart:包含凸台特征修改后结果的文件
CAAPriCreateModify 代码位置
- Windows 系统
InstallRootDirectory\CAAPartInterfaces.edu\CAAPriCreateModify.m\ - Unix 系统
InstallRootDirectory/CAAPartInterfaces.edu/CAAPriCreateModify.m/
InstallRootDirectory = CAA 安装光盘的根安装目录。
分步实现
- 初始化(序言)
- 获取草图工厂与基准平面列表
- 创建草图
- 创建凸台特征
- 检查并保存已创建的凸台
- 修改已创建的凸台
- 保存修改后的凸台并退出
初始化(Prolog)
pDoc 的 CATDocument 类指针,以及一个名为 spiInitOnDoc 的 CATInit 接口智能指针进行引用。获取草图工厂与基准平面列表
...
// 获取用于实例化对象的草图工厂
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 接口,此时根容器已不再需要,可释放。
- 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);
...

通过 GetEndOffset 和 GetStartOffset 方法分别获取第一极限与第二极限的数值,以此对凸台的实际偏移量进行简单校验。
如果其中任一数值与创建时设定的数值不一致,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(); ...

浙公网安备 33010602011771号