最近查阅CAADoc时发现了一种用XML语言描述创建按钮的方式,即创建XML语言格式的Declarative File(声明式afr文件),这种创建按钮的方式有如下优势:

  1. 声明式应用程序框架可以隐藏创建应用程序或插件的所有C++代码,只需定义想要公开的命令以及可以访问它们的位置。
  2. 声明性语法比C++代码灵活得多,XML语言可以很容易地描述层次模型。
  3. 声明性文件是一种资源,它可以在不停止运行应用程序的情况下被修改。

其中比较有趣的一点是并不需要重启CATIA即可修改按钮并及时生效,遂进行深入研究。

若想进行上述创建方法,首先请确保自己的CATIA、CAA API、RADE均已在r2016x的FP1629修正补丁等级之上,因为只有在此补丁版本才正式推出了MkDAfrTool工具。

如何使用

第一步:修改Framework的IdentityCard文件

需要添加一行启用工具的代码

<toolPrerequisite name="MkDAfrTool"/>

第二步:创建单独的声明式Module并修改Imakefile.mk文件

把mk文件修改为如下内容

BUILT_OBJECT_TYPE=RUNTIME DATA
SCRAMBLING_KEY=2

第三步:创建必要的文件结构

声明性文件必须在一个特定的文件夹层次结构中定义,这个层次结构应该严格遵守,因为它包含了创建新应用程序所需的所有信息。

FrameworkName
|
|
-------- ModuleName||-------------- Imakefile.mk||-------------- src||------ resources||-----ApplicationFrame
  • 在src文件夹下,必须有一个名为resources的文件夹,在其文件夹下必须有另一个名为ApplicationFrame的文件夹(此命名和层次结构是必需的)。
ApplicationFrame||----------- AfrWorkshop||------- PrtWks||----- AfrAddin
  • ApplicationFrame是我们之前在模块的src文件夹中创建的文件夹。
  • AfrWorkshop意味着我们正在为一个数据模型添加一个声明性文件,也称为Workshop。
  • PrtWks是我们正在扩展的几何模型的WorkShopId。该文件夹必须具有Id的准确名称。具体ID可以通过CATIA的Command命令查到,如下图。

  • AfrAddin表示我们正在创建一个Addin。

第四步:创建声明文件

声明文件描述了Addin的具体内容。它必须有afr扩展名,以便被mkmk正确处理。

<?xml version="1.0" encoding="utf-8"?>
<Styles xmlns:syp = "http://www.3ds.com/xsd/SYP"><Template syp:name = "TSTAddinHeaders" Target = "CATCmdHeadersList"><!-- Define here the command headers of your addin --><CATCmdHeadersList>         <CATCommandHeaderID = "BasicCmd" ClassName = "TSTCommand" SharedLibraryName = "TSTModule"  ResourceFile = "TSTAddinHeader"  Available = "1"/></CATCmdHeadersList> </Template><Template syp:name = "TSTAddinAccess" Target = "CATCmdAddin"><!-- Define here the layout of your commands. --><CATCmdAddin>       <!-- Commands visible in a new section --><CATCmdContainer Name = "TSTSection"><CATCmdContainer Name = "TSTToolbar"><CATCmdStarter Name = "BasicCmdStr" Command = "BasicCmd"/></CATCmdContainer></CATCmdContainer>   </CATCmdAddin></Template></Styles>

第一行添加了一个基本的XML标记,表明该文件是XML文件。接下来添加XML文件的根节点:Styles节点。该节点向解析器表明,它必须将该文件作为声明性文件进行分析。

XML文件的主要内容由两部分组成:

  • CATCmdHeadersList部分:允许定义命令绑定的command
  • CATCmdAddin部分:允许定义命令的布局

第五步:创建命令头(CATCmdHeadersList部分)

   <Template syp:name = "TSTAddinHeaders" Target = "CATCmdHeadersList"><!-- Define here the command headers of your addin --><CATCmdHeadersList>         <CATCommandHeaderID = "BasicCmd" ClassName = "TSTCommand" SharedLibraryName = "TSTModule"  ResourceFile = "TSTAddinHeader"  Available = "1"/></CATCmdHeadersList> </Template>
  • 描述命令头的部分由一个以syp:name属性为值的名称引用。这个名称必须遵循一个命名约定:xxxHeaders,其中xxx是addin的名称(与XML文件的名称相同)。
  • Target属性的值必须为CATCmdHeadersList。
  • CATCmdHeadersList标记可以有任意多个子标记,可以为addin声明命令头。

CATCommandHeader标记通过提供以下信息来声明命令头:

  • ID:该ID用于引用命令头(例如,在定义框架中命令的布局时引用特定的命令头)。
  • ClassName:该属性是要实例化以启动命令的类(该类应该使用CATCreateClass宏)。
  • SharedLibraryName:该属性对应于包含命令代码的共享库的名称。
  • ResourceFile:该属性对应于与命令相关联的资源文件的名称。
  • Available:该属性表示命令在正常模式下是否可用(1表示可用,0表示隐藏)。最好使用属性AvailabilityMode,它允许为每个模式定义命令头可用性(Available="1 "类似于AvailabilityMode="Normal=YES ")。

AvailabilityMode:为每种模式指定命令头的可用性。此属性采用以下语法作为参数“模式1 =是模式2 =否模式3= ...”。请注意,如果您没有为特定模式指定可用性,该模式将使用其默认可用性。可用性可定制的不同模式如下:

  • Normal
  • Editability
  • SmallScale
  • LargeScale
  • Offline

第六步:创建命令布局(CATCmdAddin部分)

   <Template syp:name = "TSTAddinAccess" Target = "CATCmdAddin"><!-- Define here the layout of your commands. --><CATCmdAddin>       <!-- Commands visible in a new section --><CATCmdContainer Name = "TSTSection"><CATCmdContainer Name = "TSTToolbar"><CATCmdStarter Name = "BasicCmdStr" Command = "BasicCmd"/></CATCmdContainer></CATCmdContainer>   </CATCmdAddin></Template>
  • 这个部分的syp:name属性必须遵循一个命名约定:xxxAccess,其中xxx是您的应用程序的名称(与XML文件的名称相同)。T
  • arget属性的值必须为CATCmdAddin。 模板的唯一子级必须有一个CATCmdAddin标记。
  • CATCmdAddin标记可以有许多子CATCmdContainer标记来定义容器的层次结构。
  • 按照层级需要依次定义Section、Toolbar、Addin。
  • 在容器的最后一级,CATCmdStarter标签允许声明容器的命令。这个标记需要两个属性,一个name属性和一个包含命令头Id的command属性。

第七步:定义资源文件

定义CATNls和CATRsc方法与通过Component组件方式创建按钮方式相同,这里不多赘述。

总结

这种数据模型的文件可以在CATIA运行过程中修改生效,比DLL方式更加方便调试,适合新版本的二次开发使用。

CATIA-CAA二次开发:利用MkDAfrTool创建声明式应用程式相关推荐

  1. CATIA CAA 二次开发资料(PDF).rar

    05.16.02.MapInfo_MapX_Mobile_5.0-CYGiSO.zip aiss902.rar AutoNest_v1.6_for_AutoCAD.rar Catia CAA 编程示范 ...

  2. CATIA CAA二次开发视频教程 CAA资料

    CATIA CAA二次开发视频教程 CAA资料教程-560分钟 链接:https://pan.baidu.com/s/1Sa2vGcIkoaZYQWdMN7ombg 提取码:yn4a

  3. CATIA CAA二次开发视频教程 CAA资料教程

    CATIA CAA二次开发视频教程 CAA资料教程 链接:https://pan.baidu.com/s/1B7TcxhDl8KPphDtJwQ1WzQ 提取码:tmum

  4. CATIA CAA二次开发专题(一)------明知山有虎

    开局:进军一个新领域 最近接到公司新的开发任务:基于DASSAULT  CATIA  CAA的二次开发,完成一个焊缝的生成和管理插件. 长期进行CATIA的授权管理软件开发,但是一直没有进行过CATI ...

  5. CATIA CAA二次开发专题(九)---3DE平台的特征树遍历

    因为应用开发需要移植到3DE平台,所以又开始了新的征程. 在3DE平台上,因为使用中心数据库存储设计文档和安全原因,很多V5平台的特征及接口做了很大的 改变,给刚刚有点熟悉V5平台的我,很大的困扰.只 ...

  6. CATIA CAA二次开发专题(三)---------创建自己的Workbench

    牛刀小试之:我的Workbench 开发环境已经建立起来,该试试身手了. 参阅大量网络教程,取长补短,完成了第一个交互式测试项目,建立一个workbench. CAA交互式开发的一般顺序: (1).建 ...

  7. CATIA CAA二次开发专题(四)------创建自己的Addin

    牛刀小试之:我的Addin 通过Addin可以在已有的Workshop,workbench中插入命令,对话框等交互式界面,经常使用到. 建立Addin的基本过程: (1).建立Workspace (2 ...

  8. CATIA CAA二次开发专题(八)---自定义特征模型

    随着开发的深入,最后会涉及自定义特征模型的问题,本文叙述一个工具软件的使用. CAA自定义特征对象的方法,可以通过工具:CdtfctEditorAssistant.exe完成. 通过osm文件,生成C ...

  9. CATIA CAA二次开发---------建立用例运行环境

    大家知道,CATIA系统复杂程度高,功能丰富, CAA开发,除了随系统提供的百科全书(Encyclopedia)外,很难找到系统的资料参考和学习.所以,认真学习.分析这个Encyclopedia,是我 ...

最新文章

  1. 【好资源】全网第一份,OpenCV 4-Contrib扩展模块中文教程
  2. 在Service中通过WindowManger添加View的方式来把UI界面显示出来
  3. 网站优化不仅仅只为排名而在!
  4. 个人重构之一般用户实现
  5. 在双向链表存储结构中,删除p所指的结点时,须修改指针()【选择题】
  6. 用Unity实现游戏弹反效果
  7. 数据结构-树:根节点、子节点、叶子节点是什么?
  8. 超级终端工具_【招商通信余俊团队】智能网联汽车发展提速,科技巨头跑步入场,有望成为新一代超级终端——招商通信周周谈(2020年第48周)...
  9. 如果有轮回,又为何一定要抹去前世记忆?
  10. 区块链供应链金融应用场景解决方案
  11. C#编码应注意的事项
  12. 遗传算法matlab_通俗易懂地解释遗传算法
  13. [ZT]COMPAQ PROLIANT 8500上手动安装NetWare 4.11
  14. nginx+mysql8+php8建站
  15. 赤兔之死高考满分作文原文及赏析
  16. 文献记录(part104)--Distance-Based Outlier Detection: Consolidation and Renewed Bearing
  17. 小福利,通过python利用百度ai实现图片识别
  18. 安卓4.4.4安装哪个微信版本_安卓用户喜大普奔!安卓版微信7.0.13内测版发布,支持深色模式!...
  19. lableme json转化为图片常用的脚本
  20. Halcon编程实验-(4)车牌号数字+字母的识别【目的:OCR识别的应用】

热门文章

  1. vim编辑文件时[O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:
  2. Gwt第三方组件、框架介绍
  3. 海外ChatGPT专题
  4. 鉴于vnn 不能注册,推荐hamachi
  5. 细说 Charles 配置 HTTPS 代理的乱码问题
  6. NDI基本特点介绍以及一些常见的问题解答
  7. java pixelformat_Java PixelFormat.OPAQUE屬性代碼示例
  8. 基于labview的心率测量系统设计(适用于其他串口通信的数据传输,改动一下程序即可)...
  9. 早报 | 阿里发布最新季度财报;传滴滴拟裁员25%;贾跃亭时隔90天首发声
  10. 【Java】积分手机端-中文转拼音