输入系统
大约 2 分钟
输入系统
WebCAD 提供丰富的输入接口,用于获取用户的点、选择集、字符串等输入。
PointInputOptions
获取点输入:
import {
getPoint,
PointInputOptions,
InputStatusEnum,
Point2D
} from 'vjcad';
const options = new PointInputOptions("指定点 [撤销(U)/关闭(C)]:");
options.keywords = ["U", "C"]; // 关键字
options.useBasePoint = true; // 启用基点
options.basePoint = new Point2D(0, 0); // 基点位置(用于橡皮筋线)
options.allowNone = false; // 不允许空输入
const result = await getPoint(options);
switch (result.status) {
case InputStatusEnum.OK:
console.log('用户输入点:', result.value);
break;
case InputStatusEnum.Keyword:
console.log('用户选择关键字:', result.stringResult);
break;
case InputStatusEnum.Cancel:
console.log('用户取消');
break;
case InputStatusEnum.EnterOrSpace:
console.log('用户按Enter或空格');
break;
}PointInputOptions 属性
| 属性 | 类型 | 说明 |
|---|---|---|
message | string | 提示信息 |
keywords | string[] | 关键字列表 |
useBasePoint | boolean | 是否启用基点 |
basePoint | Point2D | 基点位置 |
allowNone | boolean | 是否允许空输入 |
onMouseMove | function | 鼠标移动回调 |
SelectionInputOptions
获取选择集:
import {
Engine,
SelectionInputOptions,
InputStatusEnum
} from 'vjcad';
const options = new SelectionInputOptions();
options.message = "选择对象:";
options.allowMultiple = true;
options.filterTypes = ['LINE', 'CIRCLE']; // 只允许选择直线和圆
const result = await Engine.getSelections(options);
if (result.status === InputStatusEnum.OK) {
for (const entity of result.value) {
console.log(`选中 ${entity.type}, ID: ${entity.id}`);
}
}SelectionInputOptions 属性
| 属性 | 类型 | 说明 |
|---|---|---|
message | string | 提示信息 |
allowMultiple | boolean | 允许多选 |
filterTypes | string[] | 允许的实体类型 |
useExisting | boolean | 使用现有选择集 |
StringInputOptions
获取字符串输入:
import { Engine, StringInputOptions, InputStatusEnum } from 'vjcad';
// 字符串输入
const strOpt = new StringInputOptions("输入文本:");
const strResult = await Engine.getString(strOpt);
if (strResult.status === InputStatusEnum.OK) {
console.log('输入:', strResult.value);
}IntegerInputOptions
获取整数输入:
import { Engine, IntegerInputOptions, InputStatusEnum } from 'vjcad';
// 整数输入
const intOpt = new IntegerInputOptions("输入数量:");
intOpt.defaultValue = 10;
const intResult = await Engine.getInteger(intOpt);
if (intResult.status === InputStatusEnum.OK) {
console.log('数量:', intResult.value);
}RealInputOptions
获取实数输入:
import { Engine, RealInputOptions, InputStatusEnum } from 'vjcad';
// 实数输入
const realOpt = new RealInputOptions("输入半径:");
realOpt.defaultValue = 50.0;
const realResult = await Engine.getReal(realOpt);
if (realResult.status === InputStatusEnum.OK) {
console.log('半径:', realResult.value);
}KeywordInputOptions
获取关键字选择:
import { Engine, KeywordInputOptions, InputStatusEnum } from 'vjcad';
// 关键字选择
const kwOpt = new KeywordInputOptions("选择模式 [矩形(R)/圆形(C)]:");
kwOpt.keywords = ["R", "C"];
kwOpt.defaultKeyword = "R";
const kwResult = await Engine.getKeyword(kwOpt);
if (kwResult.status === InputStatusEnum.OK) {
console.log('选择:', kwResult.value);
}InputStatusEnum
输入结果状态:
| 值 | 说明 |
|---|---|
OK | 成功获取输入 |
Cancel | 用户取消(ESC) |
Keyword | 用户输入关键字 |
EnterOrSpace | 用户按Enter或空格 |
Error | 发生错误 |
输入结果处理
const result = await Engine.getPoint(options);
// 处理不同结果
if (result.status === InputStatusEnum.OK) {
// 成功获取点
const point = result.value;
doSomething(point);
} else if (result.status === InputStatusEnum.Keyword) {
// 用户选择了关键字
const keyword = result.stringResult;
handleKeyword(keyword);
} else if (result.status === InputStatusEnum.Cancel) {
// 用户取消
return;
} else if (result.status === InputStatusEnum.EnterOrSpace) {
// 用户按Enter,可能使用默认值
useDefault();
}