get-selections
本文回答:
getSelections(options)让用户框选 / 点选多个实体;返回result.value是EntityBase[]。配置类是SelectionInputOptions——无参构造,只有useOsnap一个属性,不支持提示消息(要提示请另用 UI/命令行输出)。
一、最小用法
class GetSelectionsDemoCommand {
async main() {
const opt = new SelectionInputOptions();
const r = await getSelections(opt);
if (r.status === InputStatusEnum.OK) {
const entities = r.value;
console.log(`选中了 ${entities.length} 个实体:`);
entities.forEach((e, i) => {
console.log(` ${i+1}. ${e.type} (id: ${e.id}, color: ${e.color})`);
});
} else {
console.log('未选择任何实体或已取消');
}
}
}
MCP 参考:vjcad/example/input/03getselections.js。
二、修改属性后刷新
const opt = new SelectionInputOptions();
const r = await getSelections(opt);
if (r.status === InputStatusEnum.OK && r.value.length > 0) {
r.value.forEach(ent => {
ent.color = 1; // setter 内部会调用 setModified
});
Engine.regen(); // 刷新已修改实体
}
MCP 参考:vjcad/example/input/03getselections.js、vjcad/doc/guide/quick-start.md("获取选择集")。
三、配置 / 返回值
引自
vjcad/doc/command/api-reference.md:
SelectionInputOptions 属性:
| 属性 | 类型 | 说明 |
|---|---|---|
useOsnap |
boolean |
是否启用对象捕捉 |
SelectionSetInputResult 字段:
| 属性 | 类型 | 说明 |
|---|---|---|
status |
number |
输入状态 |
value |
EntityBase[] |
选中的实体数组 |
stringResult |
string |
关键字结果 |
四、与"已有选择集"配合
有预选集时 getSelections 不提示:直接返回 OK + 预选实体,并清空预选集。要强制用户重新交互选择,先清空:
import { ssSetFirst } from 'vjcad';
ssSetFirst([]); // 清空当前选择集(预选集),否则下一次 getSelections 直接返回它
const r = await getSelections(new SelectionInputOptions());
// 一个都没选就回车 → status = None(不是 OK)
MCP 参考:vjcad/doc/command/api-reference.md。
更多选择集 API 见 selection/selection-api。
反例
- 拿到
r.value就r.value[0].erase():可能没成功;正确做法是Engine.eraseEntities(r.value)(自动 undo)。 - 修改完属性不调
Engine.regen():UI 不刷新。
参考(官方文档 MCP)
- 文档:
vjcad/doc/command/api-reference.md、vjcad/doc/guide/quick-start.md - 示例:
vjcad/example/input/03getselections.js