唯杰地图 logo唯杰地图
VJMAP
EN

options

vjcad/references/command/options.md 2.8 KB59 行
原文

本文回答:CommandOptions 是命令的元配置容器;vjcad@1.0.16 d.ts 实际只有两个字段:useAutoComplete(命令行自动补全)与 overrideSvgFileName(覆盖图标 SVG 文件名)。其它字段 d.ts 未声明,不要凭印象添加。

一、最小用法

const options = new CommandOptions();
options.useAutoComplete = true;   // 启用命令行自动补全

CommandRegistry.regist(new CommandDefinition('MYCMD', '我的命令', MyCommand, options));

MCP 参考:vjcad/example/command/01simple.js、vjcad/example/command/02register.js。

二、确认存在的字段(按已检查来源)

字段 类型 说明
useAutoComplete boolean 命令行输入时是否参与自动补全
overrideSvgFileName string 覆盖命令图标的 SVG 文件名(vjcad@1.0.16 d.ts 存在)

CommandOptions 在 d.ts 只有这两个字段;图标另可用 CommandDefinition.setIcon(svg)/hasIcon()/getIconSvg() 设置。其他字段(分组、快捷键、可见性等)d.ts 未声明,不要凭印象添加。

三、CommandDefinition 构造签名

new CommandDefinition(
  name: string,             // 命令名(约定大写)
  description: string,      // 描述
  commandClass: Function,   // 命令类(必须有 async main())
  options?: CommandOptions  // 可选
)

MCP 参考:vjcad/doc/command/api-reference.md。

CommandDefinition 把 options 存在 .op 字段(不是 .options)——回读注册项用 cmdDef.op.useAutoComplete。

四、与 Ribbon / 菜单 / 右键的关联

通过 Ribbon / 右键菜单触发已注册命令的方式见 plugin/menu-ribbon、ui/contextmenu。

tool-bar-button 的 execute="LINE" 属性即是触发已注册命令名的方式:

<tool-bar-button title="直线" execute="LINE" src="/images/commands/line.svg" theme="dark"></tool-bar-button>

MCP 参考:vjcad/doc/ui/controls.md。

反例

  • 给 CommandOptions 加未验证字段(例如 category / shortcutKey / iconUrl):示例与文档均未确认这些字段,可能不生效。
  • 同一命令名重复 regist 以为会覆盖:regist 只是 items.push,item() 用 find 返回第一个匹配,旧定义仍生效;要替换须先 CommandRegistry.unregist(name) 再注册。插件用 context.registerCommand 注册的命令在停用/卸载时由框架自动注销(_cleanup),直接 CommandRegistry.regist 的则需自己 unregist。

参考(官方文档 MCP)

  • 文档:vjcad/doc/command/index.md、vjcad/doc/command/api-reference.md、vjcad/doc/ui/controls.md
  • 示例:vjcad/example/command/01simple.js、vjcad/example/command/02register.js