一文带你全面了解 Microstation 中的 Keyin 配置
本文将详细介绍 Microstation 中 Keyin 的配置,包括 Keyin 命令表的结构、各项参数等等,最后将分享如何通过代码的方式来自动生成 command 表。
Addin 中使用 XML 来定义命令表。
命令表结构
Keyin 命令表结构如下图所示:
命令表是一个 xml 文件,每个命令表中有且仅有一个
KeyinTree
根节点,其下由三部分组成,分别为
RootKeyinTable
、SubKeyinTables
和
KeyinHandlers
,它们分别表示根命令表、子命令表以及命令对应的处理函数映射。
command.xml 命令表代码示例如下:
使用
<!--xxx-->
包含的内容为注释
1 |
|
上例中的代码命令可以表示为:
节点标签介绍
KeyinTree
节点包含
RootKeyinTable
、SubKeyinTables
和
KeyinHandlers
三个部分。
KeyinTable
中有属性
ID
,表示该表的名称。命令表的内容由一个或多个Keyword
元素组成,Keyword
属性 SubtableRef
指向其下级命令表的
ID
。这样,通过当前表中Keyword
的
SubtableRef
和下级表中 KeyinTable>
的
ID
就能构成一个命令树。
Mstn 中的命令由一到五个单词组成,因而,我们在定义自己的 commands.xml
时在 SubKeyinTables
段中最多可以定义四级命令。
Keyword
还必须有属性
CommandWord
,这是用户在 Mstn
键入域中可输入的单词。Keyword
中还可以包含
Options
项,该项是对Keyword
的进一步说明,其属性有
Required
、Default
、TryParse
、Hidden
等。
RootKeyinTable
KeyinTree
中必须包含 RootKeyinTable
标签,且只能有一个标签。
RootKeyinTable
中应至少包含一个 Keyword
标签,用于定义根命令单词。
Keyword
Keyword
标签用于定义命令的单词,它可以在
RootKeyinTable
和 KeyinTable
中使用。
Keyword
有如下属性:
属性名称 | 默认值 | 可选 | 作用 |
---|---|---|---|
SubtableRef | - | - | 指定下一级命令 |
CommandClass | Inherit | 是 | 指定命令类别 |
CommandWord | - | 必须 | [必须] 用于定义命令单词 |
其中 CommandClass
属性表示命令的类别,当为
Inherit
时,表示继承上一个命令的类型。除了
Inherit
外,还有以下类别:
Placement、Viewing、Fence、Parameters、Locks、MacroCommand、Manipulation、Show、Plot、Newfile、Measure、Input、Celllib、Filedesign、Compress、Reference、Database、Dimension、Locate、Tutorial、WorkingSet、List、Undo、SubProcess、ViewParam、ViewImmediate、WindowManager、DialogManager
在 Keyword
中,可以添加 Option
标签来对
Keyword
进行设置。Option
标签是可选的,它拥有如下属性:
属性名称 | 默认值 | 是否可选 |
---|---|---|
Required | false | 是 |
Default | false | 是 |
TryParse | false | 是 |
Hidden | false | 是 |
Required="true"
表示该命令字不是最后一个单词,必须有下级子节点;
Default="true"
表示该命令字为默认,当省略这一级命令字时取该命令字,在同一级别中只能有一个命令字为
Default
。
TryParse="true"
表示该命令字后可跟用户输入的任意字符,这些不在命令表中的字符串将被传递到命令处理函数的
unparsed 参数中。比如 Active Color 命令后可跟 Red、Green、Blue
等,也可以跟一个数字,如 Active Color
245。我们不可能在命令表中列出每个这样的键入,此时可用
TryParse
属性。
Hidden="true"
表示该命令隐藏,用户在 Mstn
的命令浏览器中看不到该命令,但该命令仍然有效。这些隐藏的命令往往为程序所用或暂时不想对用户公开。
SubKeyinTables
SubKeyinTables
是可选标签。若命令大于 1 个单词时,需要用
SubKeyinTables
来定义剩余的单词。
SubKeyinTables
最多只能在配置文件中出现 1
次。它下面必须至少有一个 KeyinTable
子节点,每个
KeyinTable
都必须有一个唯一的 ID
属性值。
每个 KeyinTable
中应至少有 1 个 Keyword
子节点。
每个 KeyinTable
中的 Keyword
可以通过
SubtableRef = "ID"
的方式来指定到其它的
KeyinTable
,从而形成命令链。
KeyinHandlers
KeyinHandlers
标签中只有 KeyinHandler
一种元素。KeyinHandler
中必须拥有 Keyin
和
Function
两个属性。
KeyinHandler
中的 Keyin
属性表示完整的键入命令字符串, 它的 Function
属性为该键入命令对应的处理函数名,该函数名格式为:命名空间名.类名.函数名(或称方法名)
。换句话说,当用户在 Mstn 中输入 Keyin
中的字符串时,就会调用到 Function
指定的函数。
将命令表嵌入 Addin
若要使命令表能够正确被 Microstsation 识别,需要在项目的工程配置文件
(*.csproj) 中的 Project
节点中增加如下配置:
1 | <ItemGroup> |
快速生成命令表
参考
本文参考以下文章,在此致以诚挚谢意!