Inserting Boolean Operations on Volume Features-使用零件设计布尔运算工厂,执行添加、移除、相交布尔运算,并将结果插入到结构树(过程视图)中。

摘要

本文介绍 CAAGsiVolumeBooleanOpe 示例。该示例讲解如何对体积特征执行布尔运算。
  • 通过本示例您将学到的内容
  • CAAGsiVolumeBooleanOpe 示例
    • CAAGsiVolumeBooleanOpe 的功能
    • 如何运行 CAAGsiVolumeBooleanOpe
    • CAAGsiVolumeBooleanOpe 代码位置
  • 分步实现
  • 小结
  • 参考文献

通过本示例您将学到的内容

本示例讲解如何使用零件设计布尔运算工厂在体积之间创建布尔运算。
注意:体积的创建以及体积布尔运算的使用,需要 GSO 模块 的许可证支持。

支持的体积运算包括:添加、移除、相交、联合修剪

CAAGsiVolumeBooleanOpe 示例

CAAGsiVolumeBooleanOpe 是 CAAGSMInterfaces.edu 框架下的一个示例,用于演示如何使用零件设计模块对体积执行布尔运算。

图片

 

体积布尔运算由 CATIPrtBooleanFactory 提供,该工厂也用于实体特征的布尔运算;在创建方法中必须先初始化一个上下文。
注意:本示例使用 C++ 宏定义 #define,将名为 BOOLEAN_OPE_ON_VOLUME 的体积相关常量赋值为 4。

CAAGsiVolumeBooleanOpe 的功能

CAAGsiVolumeOpe 使用 CATIPrtBooleanFactory 对体积特征执行各类布尔运算。

如何运行 CAAGsiVolumeBooleanOpe

要运行 CAAGsiVolumeBooleanOpe,您需要先配置编译环境,然后编译 CAAGsiVolumeBooleanOpe 及其依赖项,再配置运行环境,最后执行该示例程序 [1]。
请按照以下方式运行示例:
在 Windows 系统下  e:>CAAGsiVolumeBooleanOpe InstallDir\CAAGSMInterfaces.edu\Data.d\CAAGsiStartVolumeForBoolean.CATPart CAAGsiStartVolumeForBoolean.CATPart outputDirectory\CAAGsiVolumeBooleanOpe.CATPart
在 UNIX 系统下  $ CAAGsiVolumeBooleanOpe InstallDir\CAAGSMInterfaces.edu\Data.d\CAAGsiStartVolumeForBoolean.CATPart CAAGsiStartVolumeForBoolean.CATPart outputDirectory/CAAGsiVolumeBooleanOpe.CATPart
参数说明:
    • inputDirectory:  存放 CAAGsiStartForBoolean.CATPart 文件的目录
    • outputDirectory:  保存生成的 CAAGsiVolumeBooleanOpe.CATPart 文件的目录
    • CAAGsiVolumeBooleanOpe.CATPart:包含使用基准曲面创建的零件文件

CAAGsiVolumeBooleanOpe 代码位置

CAAGsiVolumeBooleanOpe 示例的主程序位于 CAAGSMInterfaces.edu 框架下的 CAAGsiVolumeBooleanOpe.m 模块中:
  • Windows 路径
     
    InstallRootDirectory\CAAGSMInterfaces.edu\CAAGsiVolumeBooleanOpe.m\
  • Unix 路径
     
    InstallRootDirectory/CAAGSMInterfaces.edu/CAAGsiVolumeBooleanOpe.m/
输入文件 CAAGsiStartForBoolean.CATPart 位于 CAAGSMInterfaces.edu 的 Data.d 目录下:
  • Windows 路径
     
    InstallRootDirectory\CAAGSMInterfaces.edu\Data.d\CAAGsiStartForBoolean.CATPart
  • Unix 路径
     
    InstallRootDirectory/CAAGSMInterfaces.edu/Data.d/CAAGsiStartForBoolean.CATPart

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

分步实现

CAAGsiVolumeBooleanOpe 示例包含五个逻辑步骤:
  1. 初始化准备
  2. 创建体积相加运算
  3. 创建体积移除运算
  4. 创建体积相交运算
  5. 保存并关闭会话

接下来我们将通过查看 CAAGsiVolumeBooleanOpe 文件主方法中的代码,对以上各个部分进行讲解说明。

初始化

CAAGsiVolumeBooleanOpe 示例首先创建一个会话,并打开输入的 CATPart 文件。
注意:下方代码序列的关键之处在于,必须调用 CATPrtContainer 接口的 GetPart() 方法。该方法可在会话中加载零件的各类容器。
....
// 创建会话
char *pSessionName = "SampleSession";
CATSession *pSession = NULL; 
rc = Create_Session(pSessionName, pSession); 
if (NULL == pSession ) {
   cout << "(CAAGsiVolumeBooleanOpe) 错误:Create_Session" << endl ;
   TestCaseError = 1 ;
}

// 加载文档并初始化
cout << "输入文档 " << InputName << " 已打开" << endl ;
CATDocument *pDoc = NULL; 
rc = CATDocumentServices::OpenDocument(InputName, pDoc) ;

if (NULL == pDoc ) {
   cout << "(CAAGsiVolumeBooleanOpe) 错误 CATDocumentServices::OpenDocument" << endl ;
   TestCaseError = 2 ;
}

// 零件容器
CATIPrtContainer *piPartContainer = NULL ; 
CATIPrtPart_var spPrtPart; 

if ( NULL != pDoc ) { 
   // 查询文档以获取根容器
   CATInit *pDocAsInit = NULL; 
   pDoc->QueryInterface(IID_CATInit, (void**)&pDocAsInit) ; 
   if ( NULL != pDocAsInit ) {

      // 从文档中提取零件引用
      piPartContainer = 
         (CATIPrtContainer*)pDocAsInit->GetRootContainer("CATIPrtContainer");
      pDocAsInit->Release(); pDocAsInit = NULL ;

      if( NULL != piPartContainer ) {
         CATISpecObject_var spPart = piPartContainer->GetPart() ; 
         spPrtPart = spPart ;
      } 
   } 
}
...

随后在初始化阶段,获取线框与外形设计、零件设计相关工厂接口。

....
CATIPrtBooleanFactory_var spBoolPrtFact; 
if ( NULL != piPartContainer ) { 

// 获取零件布尔运算工厂接口
  CATIPrtBooleanFactory * _pBoolPrtFact = NULL; 
  rc = piPartContainer -> QueryInterface(IID_CATIPrtBooleanFactory ,(void**)&_pBoolPrtFact);
  if (SUCCEEDED(rc) ) {
     spBoolPrtFact = _pBoolPrtFact;
     if (_pBoolPrtFact) _pBoolPrtFact -> Release(); _pBoolPrtFact = NULL; 
  }
}
....

创建体积相加运算

使用 CATIPrtBooleanFactoryCreateAdd 方法创建相加运算。
注意:创建时,特征会自动插入到当前几何特征集的结构树中。
...
#define BOOLEAN_OPE_ON_VOLUME  4 
...
// 相加运算
// ----------------------------------------------------------------------------
cout << "(CAAGsiVolumeFormFeatures) 执行相加运算 " << endl;
CATISpecObject_var spSpecExtr1 = ...
CATISpecObject_var spSpecExtr2 = ...

CATISpecObject_var spSpecAdd = spBoolPrtFact -> CreateAdd(spSpecExtr1, spSpecExtr2, BOOLEAN_OPE_ON_VOLUME);
CAAGsiObjectUpdate(spSpecAdd);
...

创建体积移除运算

使用 CATIPrtBooleanFactoryCreateRemove 方法创建移除运算。
注意:创建时特征会自动插入到当前几何特征集下的结构树中。
...
#define BOOLEAN_OPE_ON_VOLUME  4 
...
// 移除运算
// ----------------------------------------------------------------------------
cout << "(CAAGsiVolumeFormFeatures) 执行移除运算 " << endl;
CATISpecObject_var spSpecExtr3 = ...

CATISpecObject_var spSpecRemove = spBoolPrtFact -> CreateRemove(spSpecAdd, spSpecExtr3, BOOLEAN_OPE_ON_VOLUME);
CAAGsiObjectUpdate(spSpecRemove);

创建体积相交运算

使用 CATIPrtBooleanFactoryCreateIntersect 方法创建相交运算。
...
#define BOOLEAN_OPE_ON_VOLUME  4 
...
// 相交运算
// ----------------------------------------------------------------------------
cout << "(CAAGsiVolumeFormFeatures) 执行相交运算 " << endl;
CATISpecObject_var spSpecExtr4 = ...
CATISpecObject_var spSpecExtr5 = ...

CATISpecObject_var spSpecInt = spBoolPrtFact->CreateIntersect(spSpecExtr4, spSpecExtr5, BOOLEAN_OPE_ON_VOLUME);
CAAGsiObjectUpdate(spSpecInt);

保存并关闭会话

保存零件并关闭会话
... 
// 保存  
if (NULL != OutputName) {    
    rc = CATDocumentServices::SaveAs(*pDoc, OutputName);
    if (SUCCEEDED(rc)) {
            cout << "(CAAGsiVolumeBooleanOpe) 文档已保存 " << endl;
     }
     else {
            cout << "保存文档出错" << endl ;
     }
}    
// 关闭文档
CATDocumentServices::Remove(*pDoc);
   
// 结束会话并释放文档	
Delete_Session("SampleSession");
...

小结

本示例演示了如何借助零件设计布尔运算工厂对体积特征执行布尔运算。生成的相加、移除、相交及联合修剪特征会插入到几何图形集(GS)或有序几何图形集(OGS)中;当插入到有序几何图形集(OGS)时,布尔运算特征为 “吸收性” 特征。
本示例所实现的布尔运算特征均不以边界表示(BRep)特征作为输入。对于需要以 BRep 特征作为输入的运算(如联合修剪),其布尔运算接口的使用方式与本示例所展示的逻辑基本一致。
注意:在交互命令中获取 BRep 特征,需通过选择子元素并使用机械建模器代理(例如 CATFeatureImportAgent)来实现。

联合修剪

注意:在交互命令中获取 BRep 特征,需通过选择子元素并使用机械建模器代理 CATFeatureImportAgent 来实现。
posted @ 2026-04-03 15:58  Breadss  阅读(4)  评论(0)    收藏  举报