Inserting a Shape Design Feature in the Procedural View-在过程视图中插入 GSD 特征:将其在特征树中关联到一个开放几何体
摘要
本文对 CAAGsiUserTools 对象进行说明。该应用示例讲解了如何在开放几何体中插入特征。
- 过程视图中插入特征的含义
- CAAGsiUserTools 对象 —— 在过程视图中插入线框与外形设计特征
- CAAGsiUserTools 的作用
- CAAGsiUserTools 代码的查找路径
- 分步实现
- 小结
- 参考文献
过程视图中插入特征的含义
过程视图是 CATIA V5 框架中关联特征创建过程的直观呈现形式。
特征创建完成后,系统会生成其表现形式(构建、更新),并在 CATIA 的三维窗口和特征树中进行显示。
本文旨在帮助你初步掌握 CATIA 外形设计模块的编程方法 [1],核心是演示如何在过程视图中插入特征。
CAAGsiUserTools 对象 —— 在过程视图中插入线框与外形设计特征
CAAGsiUserTools 是 CAAGSMInterfaces.edu 框架下 CAAGsiToolkit.m 模块中的一个实用类,用于演示 GSMInterfaces 框架对象的标准用法。
CAAGsiUserTools 作为一个工具集对象,封装了线框与外形设计领域 CAA 开发的三个方面内容:
- 创建开放几何体
- 在开放几何体中插入线框与外形设计特征
- 使用 GSMInterface 框架接口创建线框与外形设计特征
前两点是在 CATIA V5 框架中实例化 GSMInterfaces 任意 GSD 特征时均可复用的通用逻辑。
本文将介绍第二方面内容。
CAAGsiUserTools 的作用
CAAGsiUserTools 对象的目的是演示如何在开放几何体特征中插入特征,这是在零件文档中创建外形设计特征时的一项基础操作。CAAGsiUserTools 同时展示了所有机械应用模块共有的一些核心基础概念。
在哪里可以找到 CAAGsiUserTools 代码
CAAGsiUserTools 对象由一个名为 CAAGsiUserTools 的类构成,该类位于 CAAGSMInterfaces.edu 框架下的 CAAGsiToolkit.m 模块中:
- Windows 系统路径:
InstallRootDirectory\CAAGSMInterfaces.edu\CAAGsiToolkit.m\ - Unix 系统路径:
InstallRootDirectory/CAAGSMInterfaces.edu/CAAGsiToolkit.m/
其中 InstallRootDirectory 为 CAA 安装光盘的安装根目录。
分步操作
在 CAAGsiUserTools 中有两个逻辑步骤:
自 V5R12 版本起
- 使用 CATIGSMInsertInProceduralView 接口
在 CATIA V5R12 版本之前
-
- 从零件特征中获取开放几何体
- 将特征聚合到该开放几何体中
CATIGSMInsertInProceduralView 接口的使用
HRESULT
CAAGsiUserTools::InsertInProceduralView(const CATISpecObject_var& ispObjectToAppend,
const CATISpecObject_var& ispInputParent)
{
// V5R12 及更高版本:用于插入到过程视图的工具
HRESULT rc = E_FAIL;
CATIGSMProceduralView_var curobj = ispObjectToAppend;
if (NULL_var != curobj ) {
rc = curobj->InsertInProceduralView(ispInputParent);
}
return rc ;
}
所有 GSD 特征均实现了该接口,它支持将当前特征直接插入到过程视图中。该接口封装了此前向开放几何体中插入特征的整套实现逻辑。
如果输入的父特征未设置(为 NULL_var),则以当前特征作为插入参照。
注意:如果对象已被插入,则不会执行任何操作。
可以设置一些附加参数(均带有默认值):
- bSetAsCurrent(默认为 TRUE):TRUE 表示对象插入后将成为当前激活对象
- BeforeFeature(默认为 NULL_var):仅用于在零件几何体中插入时,可指定特征在零件几何体中的插入位置
该接口让 GSD 特征的插入操作更加简洁,自 V5R12 版本起推荐使用。
从零件特征中获取开放几何体
HRESULT
CAAGsiUserTools::InsertInProceduralView(const CATISpecObject_var &ispObjectToAppend,
const CATISpecObject_var &ispInputParent)
{
CATIGSMTool_var spTool = ispInputParent;
if (NULL_var == spTool)
spTool = GetCurrentGSMTool("",1);
...
首先从父对象指针 ispInputParent 中获取 CATIGSMTool 智能指针。如果传入的 ispInputParent 为 NULL_var,则调用 GetCurrentGSMTool 方法获取一个 GSMTool。
若以空父对象调用
InsertInProceduralView,程序会自动获取当前 GSMTool。我们已在 Init 方法中将 _pFact 指针存入 CAAGsiUserTools 类,且该方法必须在任何操作前调用。调用 GetCurrentGSMTool() 可获取当前 GSMTool,或直接创建一个并设为当前工具。
这让用户可以直接调用
InsertInProceduralView(),无需提前调用 CreateGSMTool()。这种方式的主要缺点是:会执行大量冗余调用,用于获取零件、当前工具,最终才将特征插入 GSMTool。
CATIGSMTool_var
CAAGsiUserTools::GetCurrentGSMTool(const CATUnicodeString &iName,
int iSetAsCurrent)
{
CATIContainer_var spCont = _pFact;
CATIPrtContainer_var spPartCont = spCont;
CATIPrtPart_var spPart = spPartCont -> GetPart();
CATIGSMTool_var spTool = NULL_var;
if (NULL_var != spPart)
{
CATIBasicTool_var spCurrentTool = spPart->GetCurrentTool();
spTool = spCurrentTool;
if (NULL_var != spTool)
{
CATISpecObject_var spExternalRef = spPart->GetBodyForExternalReferences();
if (NULL_var != spExternalRef && spTool == spExternalRef)
spTool = NULL_var;
}
if (NULL_var == spTool)
{
spTool = CreateGSMTool(iName);
}
}
return spTool;
}
通过指向 CATIPrtPart 接口的智能指针 spPart,可以获取当前激活工具(该工具始终存在)。随后尝试在 spCurrentTool(CATIBasicTool 指针)上获取 CATIGSMTool 指针。
若
spCurrentTool 是 GSMTool,则 spTool 不为空。此时必须检查获取到的工具是否为专门存储外部引用(多模型链接)的开放几何体。如果是,则将 spTool 设为 NULL_var,表示需要另行创建 GSMTool 特征。最后调用 CreateGSMTool 方法 [3],使用默认参数创建开放几何体(iSetAsCurrent = 1、iTopLevel = 0)。
该开放几何体将在过程视图中显示在当前开放几何体之后。
某些情况下,会一次性向过程视图中插入两个对象:一个特征和一个开放几何体。
将特征聚合到该开放几何体中
现在我们已经获取(或创建)了一个开放几何体,就可以将外形设计特征聚合到其中。
HRESULT CAAGsiUserTools::InsertInProceduralView()
{
...
if ( NULL_var != ispObjectToAppend && NULL_var != spTool)
{
CATIDescendants_var spParent = spTool;
if ( NULL_var != spParent)
spParent->Append ( ispObjectToAppend );
else
return E_FAIL;
}
else
return E_FAIL;
return S_OK;
}
我们从
spTool 智能指针获取 CATIDescendants 接口智能指针,以便将 ispObjectToAppend 特征聚合到 GSMTool(开放几何体)中。外形设计特征在创建时是没有父级的,但要想在三维视图中看到它们,并在 CATIA V5 中对其进行操作,就必须将它们聚合到开放几何体中。
我们调用 spParent 的 Append 方法,将 ispObjectToAppend 特征添加为其子级。
小结
本示例演示了在过程视图中插入外形设计特征的方法。文中说明了在不存在活动开放几何体时,如何在过程视图中自动插入一个开放几何体,同时也展示了如何使用 CATIDescendants 接口将特征聚合到开放几何体中。
References
| [1] | About Generative Shape Design Features |
| [2] | Building and Launching a CAA V5 Use Case |
| [3] | Creating an Open Body |
| [4] | CAAGsiNozzle Use case |
希望和大家一起交流学习

浙公网安备 33010602011771号