资讯详情

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

最近查阅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>                   <CATCommandHeader             ID = "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>                   <CATCommandHeader             ID = "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方式更加方便调试,适合新版本的二次开发使用。

标签: ckcagnl液位继电器afr

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台