唯杰地图 logo唯杰地图
VJMAP
EN

get-selections

vjcad/references/input/get-selections.md 2.7 KB85 行
原文

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