get-string-number
本文回答:取字符串用
Engine.getString+StringInputOptions,取整数用Engine.getInteger+IntegerInputOptions(字段defaultValue / lowerLimit / upperLimit虽存在但处理器从不读取,需自校验),取实数用Engine.getReal+RealInputOptions,取关键字用Engine.getKeyword+KeywordInputOptions。空回车不返回EnterOrSpace:getReal→OK+defaultValue(默认 0;设为null才返回None);getInteger/getString→None;getKeyword有defaultKeyword→OK。EnterOrSpace只有getEntity会返回。
一、getReal 取实数
const opt = new RealInputOptions('输入圆的半径:');
opt.defaultValue = 30;
const r = await getReal(opt);
if (r.status === InputStatusEnum.OK) {
return r.value; // 用户输入的数字;空回车时也是 OK,value = defaultValue(30)
}
return null; // 取消(Cancel) / 非数字(Error) / defaultValue 为 null 时空回车(None)
MCP 参考:vjcad/example/input/04getreal.js、vjcad/doc/command/api-reference.md。
二、getInteger 取整数(上下限需自校验)
const opt = new IntegerInputOptions('输入数量 <10>:'); // 默认值只能自己写进提示
// opt.defaultValue / lowerLimit / upperLimit 字段存在,但 IntegerInputHandler 从不读取——设了也无效
const r = await Engine.getInteger(opt);
let n;
if (r.status === InputStatusEnum.OK) n = r.value; // 注意 Number('3.5') 也会是 OK,不校验整数
else if (r.status === InputStatusEnum.None) n = 10; // 空回车 → None(不是 EnterOrSpace),自己套默认值
else return null; // Cancel
if (!Number.isInteger(n) || n < 1 || n > 100) return null; // 上下限 / 整数自己校验
return n;
MCP 参考:vjcad/doc/command/api-reference.md、vjcad/example/input/05getinteger.js(官方示例按 EnterOrSpace 分支取默认值、依赖 lowerLimit/upperLimit,与源码行为不符;上面已按 IntegerInputHandler 修正)。
三、getString 取字符串
const opt = new StringInputOptions('输入文本:');
const r = await Engine.getString(opt);
if (r.status === InputStatusEnum.OK) {
console.log('文本:', r.value);
} else if (r.status === InputStatusEnum.None) {
// 空回车
}
MCP 参考:vjcad/doc/command/api-reference.md。
四、getKeyword 取关键字
const opt = new KeywordInputOptions('选择模式 [窗口(W)/交叉(C)]:');
opt.keywords = ['W', 'C'];
opt.defaultKeyword = 'W';
const r = await Engine.getKeyword(opt);
if (r.status === InputStatusEnum.OK) {
switch (r.value) {
case 'W': /* 窗口模式 */ break;
case 'C': /* 交叉模式 */ break;
}
}
MCP 参考:vjcad/doc/command/api-reference.md。
五、关键字也可以挂在 PointInputOptions 上
const opt = new PointInputOptions('指定点 [直线(L)/圆(C)/圆弧(A)/退出(E)]:');
opt.keywords = ['L', 'C', 'A', 'E'];
const r = await getPoint(opt);
if (r.status === InputStatusEnum.OK) {
// 真实坐标
} else if (r.status === InputStatusEnum.Keyword) {
switch (r.stringResult.toUpperCase()) {
case 'L': /* ... */ break;
case 'C': /* ... */ break;
}
} else if (r.status === InputStatusEnum.Cancel) {
// 退出
}
MCP 参考:vjcad/example/input/06getkeyword.js。
六、InputStatusEnum 速查
| 值 | 名称 | 何时出现 |
|---|---|---|
5100 |
OK |
用户输入了具体值(点/字符串/数字) |
-5002 |
Cancel |
用户按 Esc |
-5005 |
Keyword |
用户输入了关键字 |
3 |
EnterOrSpace |
仅 getEntity:点选时直接回车/空格(且未设 defaultKeyWord);getReal/getInteger/getString/getKeyword/getPoint 的空回车都不返回它 |
4 |
IsNumber |
用户输入数字(PointInputOptions.allowNumberResult 时) |
5000 |
None |
无输入(getInteger / getString 空回车;getReal 在 defaultValue = null 时空回车;getPoint 无 defaultKeyword 时空回车) |
-5001 |
Error |
出错 |
MCP 参考:vjcad/doc/command/api-reference.md。
反例
- 写
r.status === InputStatusEnum.EnterOrSpace分支等"回车默认值":getReal/getInteger/getString/getKeyword永远走不到这个分支。getReal空回车直接是OK+defaultValue;getInteger/getString空回车是None。 getReal的defaultValue设成null:空回车返回None(不是 OK)。- 以为
IntegerInputOptions.lowerLimit/upperLimit/defaultValue会生效:处理器不读这些字段,要自己校验。
参考(官方文档 MCP)
- 文档:
vjcad/doc/command/api-reference.md、vjcad/doc/guide/quick-start.md - 示例:
vjcad/example/input/04getreal.js、vjcad/example/input/05getinteger.js、vjcad/example/input/06getkeyword.js