InputManager API
大约 3 分钟
InputManager API
InputManager 封装所有用户交互输入方式,支持获取点、选择集、数值、关键字和字符串。通过 cadLayer.inputManager 访问实例。
所有 get* 方法均为异步,返回 Promise<InputResult>。
输入方法
getPoint
getPoint(options?: PointInputOptions): Promise<InputResult>获取用户在地图上点击的一个坐标点。
| 参数 | 类型 | 说明 |
|---|---|---|
options | PointInputOptions | 可选,输入选项 |
示例:
const result = await inputManager.getPoint({
prompt: '指定第一个点',
basePoint: { x: 0, y: 0 },
});
if (result.status === InputStatusEnum.OK) {
console.log(result.point); // { x, y }
}getSelection
getSelection(options?: SelectionInputOptions): Promise<InputResult>获取用户选择的实体集合。
| 参数 | 类型 | 说明 |
|---|---|---|
options | SelectionInputOptions | 可选,选择过滤器等 |
示例:
const result = await inputManager.getSelection({
prompt: '选择要删除的实体',
});
if (result.status === InputStatusEnum.OK) {
result.entities!.forEach(e => cadLayer.deleteEntity(e.id));
}getReal
getReal(options?: RealInputOptions): Promise<InputResult>获取用户输入的浮点数。
| 参数 | 类型 | 说明 |
|---|---|---|
options | RealInputOptions | 可选,含默认值、范围等 |
getInteger
getInteger(options?: IntegerInputOptions): Promise<InputResult>获取用户输入的整数。
| 参数 | 类型 | 说明 |
|---|---|---|
options | IntegerInputOptions | 可选,含默认值、范围等 |
getKeyword
getKeyword(options?: KeywordInputOptions): Promise<InputResult>获取用户从关键字列表中选择的项。
| 参数 | 类型 | 说明 |
|---|---|---|
options | KeywordInputOptions | 关键字列表等 |
示例:
const result = await inputManager.getKeyword({
prompt: '选择操作',
keywords: ['移动', '复制', '旋转'],
defaultKeyword: '移动',
});
if (result.status === InputStatusEnum.OK) {
console.log(result.keyword); // '移动' | '复制' | '旋转'
}getString
getString(options?: StringInputOptions): Promise<InputResult>获取用户输入的字符串。
| 参数 | 类型 | 说明 |
|---|---|---|
options | StringInputOptions | 可选,含默认值等 |
cancelCurrentInput
cancelCurrentInput(): void取消当前正在进行的输入操作,使对应的 get* Promise 以 Cancel 状态解析。
微调属性
| 属性 | 类型 | 说明 |
|---|---|---|
nudgePixels | number | 方向键微移像素数 |
nudgeRotateDeg | number | 微旋转角度(度) |
nudgeScaleFactor | number | 微缩放因子 |
InputResult
所有 get* 方法的返回类型。
interface InputResult {
status: InputStatusEnum;
point?: Point2D;
value?: number;
keyword?: string;
entities?: EntityBase[];
}| 属性 | 类型 | 说明 |
|---|---|---|
status | InputStatusEnum | 操作结果状态 |
point | Point2D | getPoint 返回的坐标 |
value | number | getReal / getInteger 返回的数值 |
keyword | string | getKeyword 返回的关键字 |
entities | EntityBase[] | getSelection 返回的实体数组 |
InputStatusEnum
enum InputStatusEnum {
OK = 'ok',
Cancel = 'cancel',
Keyword = 'keyword',
}| 值 | 说明 |
|---|---|
OK | 用户成功完成输入 |
Cancel | 用户取消输入(Escape 或右键) |
Keyword | 用户输入了关键字(在 getPoint 等方法中) |
输入选项类型
PointInputOptions
interface PointInputOptions {
prompt?: string;
basePoint?: Point2DLike;
keywords?: string[];
defaultKeyword?: string;
}| 属性 | 类型 | 说明 |
|---|---|---|
prompt | string | 提示文字 |
basePoint | Point2DLike | 基点,启用橡皮筋线 |
keywords | string[] | 可选关键字列表 |
defaultKeyword | string | 默认关键字 |
SelectionInputOptions
interface SelectionInputOptions {
prompt?: string;
filter?: (entity: EntityBase) => boolean;
singleSelect?: boolean;
}| 属性 | 类型 | 说明 |
|---|---|---|
prompt | string | 提示文字 |
filter | (entity: EntityBase) => boolean | 实体过滤函数 |
singleSelect | boolean | 是否单选模式 |
RealInputOptions
interface RealInputOptions {
prompt?: string;
defaultValue?: number;
min?: number;
max?: number;
keywords?: string[];
}IntegerInputOptions
interface IntegerInputOptions {
prompt?: string;
defaultValue?: number;
min?: number;
max?: number;
keywords?: string[];
}KeywordInputOptions
interface KeywordInputOptions {
prompt?: string;
keywords: string[];
defaultKeyword?: string;
}StringInputOptions
interface StringInputOptions {
prompt?: string;
defaultValue?: string;
}EntityInputOptions
interface EntityInputOptions {
prompt?: string;
filter?: (entity: EntityBase) => boolean;
}快捷键
ShortcutMap
type ShortcutMap = Record<string, string>;键为快捷键字符串(如 'ctrl+z'),值为命令名称。
getDefaultShortcuts
function getDefaultShortcuts(): ShortcutMap返回: 内置默认快捷键映射副本。
示例:
import { getDefaultShortcuts } from 'vjmapext';
const shortcuts = getDefaultShortcuts();
console.log(shortcuts);
// { 'ctrl+z': 'undo', 'ctrl+y': 'redo', ... }