Center Specification tree node-如何查找并定位选中对象的规格树节点

摘要

本文介绍如何将规格树节点居中显示。

本示例学习要点

CAACafCenterGraph 示例程序

  • 程序功能说明
  • 程序运行方式
  • 源码存放路径

操作步骤

内容简述

参考资料

 

本示例学习内容

本示例旨在讲解如何使用 CATCafCenterGraph 类实现规格树节点的居中显示。

CAACafCenterGraph 示例程序

CAACafCenterGraph 是基于 CAACATIAApplicationFrame.edu 框架的示例,用于演示 CATIAApplicationFrame 框架与 ObjectModelerBase 框架的功能用法。

CAACafCenterGraph 功能说明

CAACafCenterGraph 内置一条命令,用于演示 CATCafCenterGraph 类的使用方法。启动该命令后,程序会等待用户在几何模型中进行选择,随后调用 CATCafCenterGraph 类,查找所选几何对象对应的规格树节点,并将该节点居中显示。只要命令处于激活状态,此操作便可重复执行。
图 1:本示例中,选中凸台 Pad.1 后,该节点在窗口中居中显示。

图片

 

运行 CAACafCenterGraph 的方法

运行该示例程序,需先配置编译环境,编译程序及其依赖组件,再配置运行环境,最后执行示例 [4]。
执行前,请先编辑 CAAApplicationFrame.edu.dico 接口字典文件,该文件位于 CAAApplicationFrame.edu 框架的字典目录下:
  • Windows 系统:安装根目录\CAADoc\CAAApplicationFrame.edu\CNext\code\dictionary\
  • UNIX 系统:安装根目录/CAADoc/CAAApplicationFrame.edu/CNext/code/dictionary/
其中安装根目录为 CAA 安装包的存放路径。
在该文件中,删除以下两行开头的#符号,之后执行 mkCreateRuntimeView 命令。
#CAAAfrGeneralWksAddin          CATIWorkbenchAddin              libCAAAfrGeneralWksAddin
#CAAAfrGeneralWksAddin          CATIAfrGeneralWksAddin          libCAAAfrGeneralWksAddin
以上两行用于配置通用工作台插件,该插件对应 CAAAfrGeneralWksAddin 示例 [3],隶属于 CAAApplicationFrame.edu 框架下的 CAAAfrGeneralWksAddin.m 模块。
随后在执行 mkrun 命令的窗口中,不要在命令行输入模块名,改为输入 CNEXT。应用程序启动完成后,请按以下步骤操作:
  1. 点击【文件】菜单,选择【新建】
  2. 在新建文件对话框中选中【零件】,点击【确定】
  3. 创建点、直线、凸台等几何元素
  4. 点击【工具】菜单,选择【自定义】
    • 切换到【命令】选项卡
    • 在左侧列表选择【所有命令】
    • 在右侧列表找到 Center Graph Demonstrator
    • 将该命令拖拽至任意工具栏
    • 关闭自定义对话框
  5. 点击工具栏中的 Center Graph Demonstrator 命令
  6. 在三维视图中选择对象,即可查看规格树的联动居中效果
  7. 点击【开始】菜单,选择【退出】关闭程序

CAACafCenterGraph 代码位置

CAACafCenterGraph 示例由两个类组成:

1. CAACafCenterGraphCmd 类

该类位于 CAACATIAApplicationFrm.edu 框架下的 CAACafCenterGraph.m 模块中。
此类继承自 CATStateCommand,可实现规格树节点的展开与居中显示。其头文件(.h)存放于LocalInterfaces目录,源文件(.cpp)存放于src目录,源文件中附有详尽注释。
  • Windows 系统路径: 安装根目录\CAADoc\CAACATIAApplicationFrm.edu\CAACafCenterGraph.m\
  • Unix 系统路径:安装根目录/CAADoc/CAACATIAApplicationFrm.edu/CAACafCenterGraph.m/
其中安装根目录为 CAA 安装包所在目录。

2. CAAAfrGeneralWksAdn 类

该类位于 CAAApplicationFrame.edu 框架下的 CAAAfrGeneralWksAddin.m 模块中。
本文不对该类展开详述,它用于定义通用工作台插件,前文的图形居中演示命令就集成在此插件内。如需了解详情,请查阅示例文档 CAAAfrGeneralWksAddin [3] 中的「CAAAfrGeneralWksAddin 代码位置」章节。

实现步骤

CAACafCenterGraph 程序主要包含两大逻辑步骤:
  1. 实现 BuildGraph 方法
  2. 将规格树节点定位至所选对象并居中显示

实现 BuildGraph 方法

按照常规写法,BuildGraph 方法分为三部分:
  1. 创建选择代理
  2. 创建状态节点
  3. 根据代理配置状态间的跳转逻辑

...

_daObjectToCenterNode = new CATPathElementAgent("SelObjectToCenterNodeId");
_daObjectToCenterNode->AddElementType(IID_CATINavigateObject);
_daObjectToCenterNode->SetBehavior(CATDlgEngRepeat | CATDlgEngNewHSOManager | CATDlgEngWithPSOHSO );

CATDialogState *stGetObjState = GetInitialState("stGetObjStateId");
stGetObjState->AddDialogAgent(_daObjectToCenterNode);

CATDialogTransition *pTransition = AddTransition
(
    stGetObjState,
    stGetObjState,
    IsLastModifiedAgentCondition(_daObjectToCenterNode) ,
    Action((ActionMethod) & CAACafCenterGraphCmd::CenterGraphOnObject)
);

...

_daObjectToCenterNode 是一个拾取代理,用于在规格树或三维视图中选取对象。选中对象后会自动高亮显示(由 CATDlgEngWithPSOHSO 行为属性控制)。
  • CATDlgEngRepeat:支持重复使用该代理,无需重复初始化;
  • CATDlgEngNewHSOManager:每次选择前清空高亮选择集(HSO)。
该状态命令仅包含一个状态,状态标识为 stGetObjStateId
当用户选中有效元素时,会触发唯一的状态跳转,并调用 CenterGraphOnObject 方法。

将规格树定位并聚焦到所选对象

CenterGraphOnObject 方法的第一步,是获取目标规格树对应的 CATNavigBox 实例。本示例中,该实例即为当前窗口的规格树。
...
// 获取当前布局
CATFrmLayout * pLayout = CATFrmLayout::GetCurrentLayout();
if ( NULL == pLayout ) return TRUE;

// 获取当前窗口
CATFrmWindow * pCurrentWindow = pLayout->GetCurrentWindow();
if ( NULL == pCurrentWindow ) return TRUE;

// 判断窗口类型是否为导航图形窗口,若是则可获取 CATNavigBox 指针
if ( 1 != pCurrentWindow->IsAKindOf("CATFrmNavigGraphicWindow") ) return TRUE;

CATFrmNavigGraphicWindow * pFrmNavigGraphicWindow =
(CATFrmNavigGraphicWindow*) pCurrentWindow ;

CATNavigBox * pNavigBox = NULL ;
pNavigBox = pFrmNavigGraphicWindow->GetNavigBox();
...
接下来实例化 CATCafCenterGraph 类,并调用其 CenterGraph 方法完成节点居中操作。
...
CATCafCenterGraph CenterGraphObj;
CenterGraphObj.CenterGraph("OnHSO",pNavigBox);
...
第一个入参填写 OnHSO,表示以高亮选中对象为基准将规格树节点居中;第二个入参为上一步获取到的 CATNavigBox 实例指针。
补充说明:该 CenterGraph 方法的底层执行逻辑,与 CATIA V5 右键菜单里的「居中图形」交互式命令完全一致。

内容小结

本示例讲解了如何查找元素,并将其对应的规格树节点在窗口中居中显示。
 
posted @ 2026-06-09 10:59  Breadss  阅读(4)  评论(0)    收藏  举报