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 智能指针。如果传入的 ispInputParentNULL_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,可以获取当前激活工具(该工具始终存在)。随后尝试在 spCurrentToolCATIBasicTool 指针)上获取 CATIGSMTool 指针。

spCurrentTool 是 GSMTool,则 spTool 不为空。

此时必须检查获取到的工具是否为专门存储外部引用(多模型链接)的开放几何体。如果是,则将 spTool 设为 NULL_var,表示需要另行创建 GSMTool 特征。最后调用 CreateGSMTool 方法 [3],使用默认参数创建开放几何体(iSetAsCurrent = 1iTopLevel = 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 中对其进行操作,就必须将它们聚合到开放几何体中。

我们调用 spParentAppend 方法,将 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
 
posted @ 2026-04-03 13:28  Breadss  阅读(4)  评论(0)    收藏  举报