Updating ShapeDesign Feature-更新外形设计特征

摘要

本文讨论 CAAGsiObjectUpdate 服务。
  • 外形设计特征更新中的新增内容
    • CAAAGsiService.h 头文件中的 CAAGsiObjectUpdate 服务 — 更新外形设计特征
    • 在哪里可以找到 CAAGsiServices 代码
  • 分步实现
  • 小结
  • 参考文献

外形设计特征更新有哪些新特性

外形设计特征现在可以插入到几何体(Body)OGSGS 中。
Body 和 OGS 是两类新增的特征容器,可用于插入外形设计特征。

它们提供了增强的特征管理机制(如吸收主输入、曲面当前特征),在 Body 和 OGS 环境下更新特征时需要执行额外操作(GS 即以前的 “开放几何体 Open Body”)。

CAAGsiService.h 头文件中的 CAAGsiObjectUpdate 服务 — 更新外形设计特征

CAAGsiServices 封装了通用代码序列。

CAAGsiObjectUpdate 是适用于外形设计特征、零件设计特征的更新方法,当特征被插入到 Body、OGS 和 GS 中时均可使用。

在哪里可以找到 CAAGsiServices 代码

CAAGsiServices 头文件导出了一系列独立工具,该头文件位于 CAAGSMInterfaces.edu 框架的 PublicInterfaces 目录下,其实现代码位于同一框架下的 CAAGsiServices.m 模块中:
  • Windows 路径:
     
    InstallRootDirectory\CAAGSMInterfaces.edu\CAAGsiServices.m\
  • Unix 路径:
     
    InstallRootDirectory/CAAGSMInterfaces.edu/CAAGsiServices.m/

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

分步操作

CAAGsiServices 与 CAAGsiObjectUpdate 分步实现

  1. 对特征使用标准机械建模器更新
  2. 检查已设置的插入位置,并在需要时管理线性关系

对特征使用标准机械建模器更新

机械建模器标准更新机制

// 更新
// ---------------------------------------------------------------------------
ExportedByCAAGsiServices HRESULT 
CAAGsiObjectUpdate(const CATISpecObject_var & ispSpec)
{
   ... 
   HRESULT rc = S_OK ; 
   CATTry { 
    iStat = ispSpec -> Update();
    ...
    }
   // 该代码块专门处理更新错误
   CATCatch(CATMfErrUpdate,error) {
       cerr << " 更新错误: " << (error-> GetDiagnostic()).ConvertToChar() << endl; 
       return E_FAIL; 
   } 
   // 该代码块处理其他所有异常
   CATCatch(CATError,error) {
       cerr << " 错误: " << (error->GetMessageText()).ConvertToChar() << endl; 
       return E_FAIL; 
   }
   CATEndTry;
   return rc ; 
}

检查已设置的插入位置,并在需要时管理线性关系

此步骤需在特征更新完成后执行。
...
// 检查线性关系 / 对插入在 OGS 中的吸收式特征非常有用
CATISpecObject_var spFather = ispSpec->GetFather();
if ( NULL_var != spFather )
{
   spFather -> Release();
   CATIGSMTool *piGSMToolFather = NULL;
   rc =spFather->QueryInterface ( IID_CATIGSMTool, (void**)&piGSMToolFather);
   if ( SUCCEEDED(rc) ) { 
     int IsAnAbsorbantSet = -1 ;
     piGSMToolFather->GetType(IsAnbsorbantSet) ;
     if ( 1 == IsAnAbsorbantSet ) {
        CATBaseUnknown_var spUnkwnSpec = ispSpec;
        rc = CATMmrLinearBodyServices::Insert(spUnkwnSpec) ; 
    } 
   piGSMToolFather->Release() ; piGSMToolFather=NULL; 
}
...

在大多数情况下,应用代码中建议在更新完成后,对刚更新的对象调用 CATIPrtPart 接口的 SetCurrentFeature 方法:与 CATIA V5 交互操作逻辑一致 —— 刚创建或刚编辑的对象会被设为当前对象(适用于 Body 和 OGS 环境)。

小结

该服务演示了如何针对插入到几何体(Body)和 / 或 OGS 中的外形设计特征与零件设计特征,在特征更新时实现吸收机制。
posted @ 2026-04-03 13:41  Breadss  阅读(5)  评论(0)    收藏  举报