options
本文回答:
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