Commands.xml中的结构解析

2019-08-08  本文已影响0人  板栗_1c34

Bentley二次开发采用commands.xml作为嵌入式资源载入程序中,commands.xml包含了程序要执行的命令,初学者开发时需要准确了解commands.xml的结构才能写好命令,完成开发。

以下为一个程序的.commands的源码:


<?xml version="1.0" encoding="utf-8" ?>

<KeyinTree xmlns="http://www.bentley.com/schemas/1.0/MicroStation/AddIn/KeyinTree.xsd">

  <RootKeyinTable ID="root">

    <Keyword SubtableRef="Commands" CommandWord="TOOLSEXAMPLE">

      <Options Required="true" />

    </Keyword>

  </RootKeyinTable>

  <SubKeyinTables>

    <KeyinTable ID="Commands">

      <Keyword SubtableRef="GroupedHoleCmd" CommandWord="PLACE">

        <Options Required="true" />

      </Keyword>

      <Keyword SubtableRef="GroupedHoleCmd" CommandWord="MODIFY">

        <Options Required="true" />

      </Keyword>

      <Keyword SubtableRef="BlendEdgeCMD" CommandWord="BLEND">

         <Options Required="true" />

       </Keyword>

        <Keyword SubtableRef="SolidUtilCMD" CommandWord="SOLIDUTIL">

            <Options Required="true" />

        </Keyword>

    </KeyinTable>

    <KeyinTable ID="GroupedHoleCmd">

      <Keyword CommandWord="GROUPEDHOLE" />

    </KeyinTable>

    <KeyinTable ID="BlendEdgeCMD">

      <Keyword CommandWord="BLENDEDGE" />

    </KeyinTable>

      <KeyinTable ID="SolidUtilCMD">

          <Keyword CommandWord="TOOL" />

      </KeyinTable>

  </SubKeyinTables>

  <KeyinHandlers>


  <KeyinHandler Keyin="TOOLSEXAMPLE PLACE GROUPEDHOLE"           

Function="ManagedToolsExample.Keyin.CmdStartPlaceGroupedHoleTool"/>


  <KeyinHandler Keyin="TOOLSEXAMPLE MODIFY GROUPEDHOLE"           

Function="ManagedToolsExample.Keyin.CmdModifyPlaceGroupedHoleTool"/>

    <KeyinHandler Keyin="TOOLSEXAMPLE BLEND BLENDEDGE"            Function="ManagedToolsExample.Keyin.CmdStartBlendTool"/>


    <KeyinHandler Keyin="TOOLSEXAMPLE SOLIDUTIL TOOL"           

Function="ManagedToolsExample.Keyin.CmdStartSolidUtilTool"/>

  </KeyinHandlers>

</KeyinTree>

1、代码块以<>开始,</>结束。

2、根键入命令表结构:

(1)在<RootKeyinTable>和<KeyinTable>中有属性ID,表示该表的名称。

(2)命令表的内容由一个或多个<Keyword>元素组成,<Keyword>属性SubtableRef指向其下级命令表的ID。这样,通过当前表中<Keyword>的SubtableRef和下级表中<KeyinTable>的ID就能构成一个命令树。

(3)<Keyword>还必须有属性CommandWord,这是用户在Mstn键入域中可输入的单词。<Keyword>有一个属性CommandClass表示该键入命令对应的命令类别,目前支持的命令类别有Placement、Viewing、Fence、Parameters、Locks、MacroCommand、Manipulation等。命令类别还可以是Inherit,表示继承上个命令单词所属的命令类别。

(4)<Keyword>中还可以包含<Options>项,该项是对<Keyword>的进一步说明,其属性有Required、Default、TryParse、Hidden等。

Required="true"表示该命令字不是最后一个单词,必须有下级子节点;

Default="true"表示该命令字为默认,当省略这一级命令字时取该命令字,在同一级别中只能有一个命令字为Default。

TryParse="true"表示该命令字后可跟用户输入的任意字符,这些不在命令表中的字符串将被传递到命令处理函数的unparsed参数中。比如Active Color命令后可跟Red、Green、Blue等,也可以跟一个数字,如Active Color 245。我们不可能在命令表中列出每个这样的键入,此时可用TryParse属性;

Hidden="true"表示该命令隐藏,用户在Mstn的命令浏览器中看不到该命令,但该命令仍然有效。这些隐藏的命令往往为程序所用或暂时不想对用户公开。

(5)<KeyinHandlers>段只有<KeyinHandler>一种元素。其中的Keyin属性表示完整的键入命令字符串,<KeyinHandler>的Function属性为该键入命令对应的处理函数名,该函数名由命名空间名、类名和函数名(或称方法名)三部分组成。换句话说,当用户在Mstn中输入Keyin中的字符串时,就会调用到Function指定的函数。

图片.png

3、二级命令结构

图片.png

4、三级命令

图片.png

5、所调用的方法和命令列表的对应关系

图片.png

6、执行效果(只是为了示意,和上述commands.xml中的命令列表无关)

图片.png

Mstn中的命令由一到五个单词组成,因而,我们在定义自己的commands.xml时在<SubKeyinTables>段中最多可以定义四级命令。

建议:命令列表不要超过三级,命令较少时,可以选择两级即可。

上一篇 下一篇

猜你喜欢

热点阅读