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 CATIAfrGeneralWksAddin libCAAAfrGeneralWksAddin
以上两行用于配置通用工作台插件,该插件对应 CAAAfrGeneralWksAddin 示例 [3],隶属于 CAAApplicationFrame.edu 框架下的 CAAAfrGeneralWksAddin.m 模块。
随后在执行
mkrun 命令的窗口中,不要在命令行输入模块名,改为输入 CNEXT。应用程序启动完成后,请按以下步骤操作:- 点击【文件】菜单,选择【新建】
- 在新建文件对话框中选中【零件】,点击【确定】
- 创建点、直线、凸台等几何元素
- 点击【工具】菜单,选择【自定义】
- 切换到【命令】选项卡
- 在左侧列表选择【所有命令】
- 在右侧列表找到 Center Graph Demonstrator
- 将该命令拖拽至任意工具栏
- 关闭自定义对话框
- 点击工具栏中的 Center Graph Demonstrator 命令
- 在三维视图中选择对象,即可查看规格树的联动居中效果
- 点击【开始】菜单,选择【退出】关闭程序
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 程序主要包含两大逻辑步骤:
- 实现 BuildGraph 方法
- 将规格树节点定位至所选对象并居中显示
实现 BuildGraph 方法
按照常规写法,BuildGraph 方法分为三部分:
- 创建选择代理
- 创建状态节点
- 根据代理配置状态间的跳转逻辑
...
_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();
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);
CenterGraphObj.CenterGraph("OnHSO",pNavigBox);
...
第一个入参填写
OnHSO,表示以高亮选中对象为基准将规格树节点居中;第二个入参为上一步获取到的 CATNavigBox 实例指针。补充说明:该
CenterGraph 方法的底层执行逻辑,与 CATIA V5 右键菜单里的「居中图形」交互式命令完全一致。内容小结
本示例讲解了如何查找元素,并将其对应的规格树节点在窗口中居中显示。
希望和大家一起交流学习

浙公网安备 33010602011771号