@galacean/effects-plugin-editor-gizmo 2.10.3 → 2.11.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +37 -5
- package/dist/2d/configs/builtin-configs.d.ts +14 -0
- package/dist/2d/configs/config-definition.d.ts +40 -0
- package/dist/2d/configs/config-manager.d.ts +52 -0
- package/dist/2d/configs/index.d.ts +6 -0
- package/dist/2d/configs/loading-config.d.ts +3 -0
- package/dist/2d/configs/types.d.ts +321 -0
- package/dist/2d/cursor-icons.d.ts +8 -0
- package/dist/2d/cursor.d.ts +36 -0
- package/dist/2d/drag-threshold.d.ts +13 -0
- package/dist/2d/drawing.d.ts +148 -0
- package/dist/2d/frame/frame-assisted-layout.d.ts +115 -0
- package/dist/2d/frame/frame-auto-layout.d.ts +47 -0
- package/dist/2d/frame/frame-manager.d.ts +169 -0
- package/dist/2d/frame/frame-resize.d.ts +13 -0
- package/dist/2d/frame/index.d.ts +5 -0
- package/dist/2d/frame/layout-calculations.d.ts +109 -0
- package/dist/2d/frame/types.d.ts +41 -0
- package/dist/2d/gesture-handler.d.ts +253 -0
- package/dist/2d/gizmo-action.d.ts +159 -0
- package/dist/2d/gizmo-manager.d.ts +105 -0
- package/dist/2d/gizmo-owner.d.ts +65 -0
- package/dist/2d/gizmo-tool.d.ts +15 -0
- package/dist/2d/gizmo-tools/hand-gizmo-tool.d.ts +4 -0
- package/dist/2d/gizmo-tools/image-cut-gizmo-tool.d.ts +7 -0
- package/dist/2d/gizmo-tools/image-expand-gizmo-tool.d.ts +7 -0
- package/dist/2d/gizmo-tools/index.d.ts +7 -0
- package/dist/2d/gizmo-tools/item-create-gizmo-tool.d.ts +10 -0
- package/dist/2d/gizmo-tools/mask-gizmo-tool.d.ts +7 -0
- package/dist/2d/gizmo-tools/move-gizmo-tool.d.ts +6 -0
- package/dist/2d/gizmo-tools/sprite-text-edit-gizmo-tool.d.ts +7 -0
- package/dist/2d/gizmo-type.d.ts +37 -0
- package/dist/2d/gizmo.d.ts +60 -0
- package/dist/2d/gizmos/box-selection-gizmo.d.ts +67 -0
- package/dist/2d/gizmos/change-selection-gizmo.d.ts +45 -0
- package/dist/2d/gizmos/click-drag-multiplex-gizmo.d.ts +95 -0
- package/dist/2d/gizmos/corner-rotation-gizmo.d.ts +101 -0
- package/dist/2d/gizmos/enter-edit-mode-gizmo.d.ts +11 -0
- package/dist/2d/gizmos/hand-gizmo.d.ts +67 -0
- package/dist/2d/gizmos/icon-gizmo.d.ts +107 -0
- package/dist/2d/gizmos/image-cut-gizmo.d.ts +140 -0
- package/dist/2d/gizmos/image-expand-gizmo.d.ts +135 -0
- package/dist/2d/gizmos/image-interaction.d.ts +40 -0
- package/dist/2d/gizmos/item-create-gizmo.d.ts +146 -0
- package/dist/2d/gizmos/leave-effects-edit-gizmo.d.ts +11 -0
- package/dist/2d/gizmos/leave-text-edit-gizmo.d.ts +11 -0
- package/dist/2d/gizmos/loading-gizmo.d.ts +110 -0
- package/dist/2d/gizmos/loading-manager.d.ts +74 -0
- package/dist/2d/gizmos/mask-gizmo.d.ts +153 -0
- package/dist/2d/gizmos/move-selection-gizmo.d.ts +64 -0
- package/dist/2d/gizmos/resize-selection-gizmo/anchored-resize.d.ts +40 -0
- package/dist/2d/gizmos/resize-selection-gizmo/index.d.ts +2 -0
- package/dist/2d/gizmos/resize-selection-gizmo/resize-selection-gizmo.d.ts +364 -0
- package/dist/2d/gizmos/resize-selection-gizmo/transform-types.d.ts +27 -0
- package/dist/2d/gizmos/select-text-gizmo.d.ts +77 -0
- package/dist/2d/gizmos/sprite-text-edit-gizmo.d.ts +149 -0
- package/dist/2d/gizmos/text-gizmo.d.ts +65 -0
- package/dist/2d/gizmos/viewport-overlay-gizmo.d.ts +66 -0
- package/dist/2d/index.d.ts +44 -0
- package/dist/2d/items/default-vfx-items.d.ts +45 -0
- package/dist/2d/items/index.d.ts +6 -0
- package/dist/2d/items/item-geometry.d.ts +69 -0
- package/dist/2d/items/item-hierarchy.d.ts +39 -0
- package/dist/2d/items/item-predicates.d.ts +31 -0
- package/dist/2d/items/media-controls.d.ts +39 -0
- package/dist/2d/items/vfx-item-factory.d.ts +13 -0
- package/dist/2d/math/core.d.ts +26 -0
- package/dist/2d/math/geometry.d.ts +83 -0
- package/dist/2d/math/index.d.ts +4 -0
- package/dist/2d/math/ray-caster.d.ts +56 -0
- package/dist/2d/math/utils.d.ts +6 -0
- package/dist/2d/modes/default-selection-mode.d.ts +19 -0
- package/dist/2d/modes/edit-mode.d.ts +18 -0
- package/dist/2d/modes/effects-edit-mode.d.ts +34 -0
- package/dist/2d/modes/index.d.ts +4 -0
- package/dist/2d/modes/text-edit-mode.d.ts +34 -0
- package/dist/2d/selection/create-selection-interaction-gizmo.d.ts +14 -0
- package/dist/2d/selection/index.d.ts +3 -0
- package/dist/2d/selection/selection.d.ts +338 -0
- package/dist/2d/selection/snap-manager.d.ts +130 -0
- package/dist/2d/text/index.d.ts +2 -0
- package/dist/2d/text/text-caret-mapper.d.ts +61 -0
- package/dist/2d/text/text-edit-session.d.ts +169 -0
- package/dist/2d/viewport/coordinates.d.ts +89 -0
- package/dist/2d/viewport/gizmo-viewport.d.ts +108 -0
- package/dist/2d/viewport/index.d.ts +6 -0
- package/dist/2d/viewport/types.d.ts +11 -0
- package/dist/2d/viewport/viewport-navigation-controller.d.ts +110 -0
- package/dist/2d/viewport/viewport-operations.d.ts +15 -0
- package/dist/2d/viewport/viewport-range.d.ts +9 -0
- package/dist/2d/viewport/viewport-utils.d.ts +32 -0
- package/dist/{gizmo-component.d.ts → 3d/gizmo-component.d.ts} +3 -5
- package/dist/3d/index.d.ts +4 -0
- package/dist/index.d.ts +2 -5
- package/dist/index.js +15030 -171
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +2 -2
- package/dist/index.min.js.map +1 -1
- package/dist/index.mjs +14871 -173
- package/dist/index.mjs.map +1 -1
- package/package.json +9 -3
- /package/dist/{constants.d.ts → 3d/constants.d.ts} +0 -0
- /package/dist/{define.d.ts → 3d/define.d.ts} +0 -0
- /package/dist/{geometry → 3d/geometry}/box.d.ts +0 -0
- /package/dist/{geometry → 3d/geometry}/cone.d.ts +0 -0
- /package/dist/{geometry → 3d/geometry}/cylinder.d.ts +0 -0
- /package/dist/{geometry → 3d/geometry}/direction-light.d.ts +0 -0
- /package/dist/{geometry → 3d/geometry}/floor-line-edge.d.ts +0 -0
- /package/dist/{geometry → 3d/geometry}/floor-line.d.ts +0 -0
- /package/dist/{geometry → 3d/geometry}/frustum.d.ts +0 -0
- /package/dist/{geometry → 3d/geometry}/geometry.d.ts +0 -0
- /package/dist/{geometry → 3d/geometry}/index.d.ts +0 -0
- /package/dist/{geometry → 3d/geometry}/plane.d.ts +0 -0
- /package/dist/{geometry → 3d/geometry}/point-light.d.ts +0 -0
- /package/dist/{geometry → 3d/geometry}/sphere.d.ts +0 -0
- /package/dist/{geometry → 3d/geometry}/spot-light.d.ts +0 -0
- /package/dist/{geometry → 3d/geometry}/torus.d.ts +0 -0
- /package/dist/{gizmo-loader.d.ts → 3d/gizmo-loader.d.ts} +0 -0
- /package/dist/{gizmo-vfx-item.d.ts → 3d/gizmo-vfx-item.d.ts} +0 -0
- /package/dist/{math-utils.d.ts → 3d/math-utils.d.ts} +0 -0
- /package/dist/{mesh.d.ts → 3d/mesh.d.ts} +0 -0
- /package/dist/{raycast.d.ts → 3d/raycast.d.ts} +0 -0
- /package/dist/{shape.d.ts → 3d/shape.d.ts} +0 -0
- /package/dist/{util.d.ts → 3d/util.d.ts} +0 -0
- /package/dist/{wireframe.d.ts → 3d/wireframe.d.ts} +0 -0
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { Box2 } from '@galacean/effects-math/es/extension/index';
|
|
2
|
+
import { Matrix3, Vector2 } from './core';
|
|
3
|
+
/**
|
|
4
|
+
* 读取轴对齐包围盒的四个角点。
|
|
5
|
+
* @param box 轴对齐包围盒
|
|
6
|
+
* @returns 按顺时针排列的四个新角点
|
|
7
|
+
*/
|
|
8
|
+
export declare function getBoxCorners(box: Box2): Vector2[];
|
|
9
|
+
/** 从 Box2 的视图角点建立归一化 Box2 到视图坐标的二维仿射变换。 */
|
|
10
|
+
export declare function getBoxTransform(points: Vector2[]): Matrix3 | undefined;
|
|
11
|
+
/** 从一个视图 Box2 建立无旋转变换。 */
|
|
12
|
+
export declare function getBoxTransformFromBox(box: Box2): Matrix3 | undefined;
|
|
13
|
+
/** 使用二维变换映射一个 Box2 局部点。 */
|
|
14
|
+
export declare function transformBoxPoint(transform: Matrix3, point: Vector2): Vector2;
|
|
15
|
+
/** 将视图点逆变换到 Box2 局部坐标。 */
|
|
16
|
+
export declare function inverseTransformBoxPoint(transform: Matrix3, point: Vector2): Vector2;
|
|
17
|
+
/** 临时计算 Box2 变换后的四个点。 */
|
|
18
|
+
export declare function getTransformedBoxCorners(transform: Matrix3, box?: Box2): Vector2[];
|
|
19
|
+
/** 计算 Box2 变换后的轴对齐范围。 */
|
|
20
|
+
export declare function getTransformedBox(transform: Matrix3, box?: Box2): Box2;
|
|
21
|
+
/**
|
|
22
|
+
* 判断一个变换后的 Box2 是否与轴对齐 Box2 相交。
|
|
23
|
+
*
|
|
24
|
+
* 使用分离轴判定而不是仅比较轴对齐包围盒,避免旋转元素在实际四边形未接触选区时被误选。
|
|
25
|
+
* 边界接触也视为相交。
|
|
26
|
+
* @param transform Box2 到视图坐标的变换
|
|
27
|
+
* @param target 视图坐标下的轴对齐 Box2
|
|
28
|
+
* @param box 待变换的 Box2
|
|
29
|
+
* @returns 两个区域是否相交
|
|
30
|
+
*/
|
|
31
|
+
export declare function transformedBoxIntersectsBox(transform: Matrix3, target: Box2, box?: Box2): boolean;
|
|
32
|
+
/** 通过逆变换判断视图点是否位于 Box2 内。 */
|
|
33
|
+
export declare function transformedBoxContainsPoint(transform: Matrix3, point: Vector2, box?: Box2): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* 使用点集更新 Box2 的轴对齐范围。
|
|
36
|
+
* @param box 目标包围盒
|
|
37
|
+
* @param points 点集
|
|
38
|
+
* @returns 目标包围盒
|
|
39
|
+
*/
|
|
40
|
+
export declare function setBoxFromPoints(box: Box2, points: Vector2[]): Box2;
|
|
41
|
+
/**
|
|
42
|
+
* 以指定锚点缩放 Box2。
|
|
43
|
+
* @param box 目标包围盒
|
|
44
|
+
* @param scalar 缩放比例
|
|
45
|
+
* @param anchor 缩放中心,默认使用包围盒中心
|
|
46
|
+
* @returns 目标包围盒
|
|
47
|
+
*/
|
|
48
|
+
export declare function scaleBox(box: Box2, scalar: number | Vector2, anchor?: Vector2): Box2;
|
|
49
|
+
/**
|
|
50
|
+
* 计算 Box2 绕指定中心旋转后的轴对齐范围。
|
|
51
|
+
* @param box 目标包围盒
|
|
52
|
+
* @param angle 旋转角度(弧度)
|
|
53
|
+
* @param center 旋转中心,默认使用包围盒中心
|
|
54
|
+
* @returns 目标包围盒
|
|
55
|
+
*/
|
|
56
|
+
export declare function rotateBox(box: Box2, angle: number, center?: Vector2): Box2;
|
|
57
|
+
/**
|
|
58
|
+
* 计算二维向量相对原点的极角(弧度)。
|
|
59
|
+
* @param vector 二维向量
|
|
60
|
+
* @returns 弧度值
|
|
61
|
+
*/
|
|
62
|
+
export declare function getVector2Angle(vector: Vector2): number;
|
|
63
|
+
/**
|
|
64
|
+
* 计算由两个二维向量所成夹角(带方向,弧度)
|
|
65
|
+
* @param vector1 起始向量
|
|
66
|
+
* @param vector2 目标向量
|
|
67
|
+
* @returns 带符号夹角弧度值
|
|
68
|
+
*/
|
|
69
|
+
export declare function getAngleByVectors(vector1: Vector2, vector2: Vector2): number;
|
|
70
|
+
/**
|
|
71
|
+
* 将归一化包围盒按原包围盒范围还原为实际包围盒
|
|
72
|
+
* @param origin 原始范围包围盒
|
|
73
|
+
* @param normalize 归一化包围盒
|
|
74
|
+
* @returns 还原后的实际包围盒
|
|
75
|
+
*/
|
|
76
|
+
export declare function getBoxByNormalizeBox(origin: Box2, normalize: Box2): Box2;
|
|
77
|
+
/**
|
|
78
|
+
* 将当前包围盒在原始范围内的位置归一化为 0~1 包围盒
|
|
79
|
+
* @param origin 原始范围包围盒
|
|
80
|
+
* @param current 当前包围盒
|
|
81
|
+
* @returns 归一化包围盒
|
|
82
|
+
*/
|
|
83
|
+
export declare function getNormalizeBoxByBoxes(origin: Box2, current: Box2): Box2;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { type Plane } from '@galacean/effects-math/es/extension/index';
|
|
2
|
+
import { type Matrix4, Ray, type Vector2, Vector3 } from './core';
|
|
3
|
+
/**
|
|
4
|
+
* 射线碰撞相机参数
|
|
5
|
+
*/
|
|
6
|
+
export type RayCasterCamera = {
|
|
7
|
+
/**
|
|
8
|
+
* 位置
|
|
9
|
+
*/
|
|
10
|
+
position: Vector3;
|
|
11
|
+
/**
|
|
12
|
+
* 视图投影逆矩阵
|
|
13
|
+
*/
|
|
14
|
+
inverseViewProjectMatrix: Matrix4;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* 射线碰撞结果
|
|
18
|
+
*/
|
|
19
|
+
export type RayCastResult = {
|
|
20
|
+
/**
|
|
21
|
+
* 相交点
|
|
22
|
+
*/
|
|
23
|
+
point: Vector3;
|
|
24
|
+
/**
|
|
25
|
+
* 相交距离
|
|
26
|
+
*/
|
|
27
|
+
distance: number;
|
|
28
|
+
/**
|
|
29
|
+
* 相交构件ID
|
|
30
|
+
*/
|
|
31
|
+
id?: string;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* 射线投射器,由屏幕坐标与相机参数构建射线并进行平面求交。
|
|
35
|
+
*/
|
|
36
|
+
export declare class RayCaster {
|
|
37
|
+
ray: Ray;
|
|
38
|
+
/**
|
|
39
|
+
* 构造射线投射器。
|
|
40
|
+
* @param ray 初始射线,默认为新建射线
|
|
41
|
+
*/
|
|
42
|
+
constructor(ray?: Ray);
|
|
43
|
+
/**
|
|
44
|
+
* 由屏幕坐标与相机参数构建投射射线。
|
|
45
|
+
* @param coords 屏幕坐标(归一化)
|
|
46
|
+
* @param camera 相机参数
|
|
47
|
+
* @returns 当前实例(链式调用)
|
|
48
|
+
*/
|
|
49
|
+
setFromCamera(coords: Vector2, camera: RayCasterCamera): this;
|
|
50
|
+
/**
|
|
51
|
+
* 将当前射线与平面求交。
|
|
52
|
+
* @param plane 目标平面
|
|
53
|
+
* @returns 相交结果,不相交时返回 undefined
|
|
54
|
+
*/
|
|
55
|
+
rayCastPlane(plane: Plane): RayCastResult | undefined;
|
|
56
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Gizmo } from '../gizmo';
|
|
2
|
+
import type { GizmoOwner } from '../gizmo-owner';
|
|
3
|
+
import type { GizmoTool } from '../gizmo-tool';
|
|
4
|
+
import type { EditMode } from './edit-mode';
|
|
5
|
+
/** 提供默认选区切换、移动、缩放和旋转交互的编辑模式。 */
|
|
6
|
+
export declare class DefaultSelectionMode implements EditMode {
|
|
7
|
+
private readonly owner;
|
|
8
|
+
readonly id = "default-selection";
|
|
9
|
+
/** @param owner Gizmo 宿主 */
|
|
10
|
+
constructor(owner: GizmoOwner);
|
|
11
|
+
/**
|
|
12
|
+
* 判断目标工具是否可复用当前模式。
|
|
13
|
+
* @param tool 目标工具
|
|
14
|
+
* @returns 是否保持当前模式
|
|
15
|
+
*/
|
|
16
|
+
canRemainActiveForTool(tool: GizmoTool): boolean;
|
|
17
|
+
/** @returns 默认选区交互的 Gizmo 图。 */
|
|
18
|
+
createGizmos(): Gizmo[];
|
|
19
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Gizmo } from '../gizmo';
|
|
2
|
+
import type { GizmoTool } from '../gizmo-tool';
|
|
3
|
+
/** 工具内部可持续存在的编辑模式。 */
|
|
4
|
+
export interface EditMode {
|
|
5
|
+
/** 编辑模式唯一标识。 */
|
|
6
|
+
readonly id: string;
|
|
7
|
+
/**
|
|
8
|
+
* 判断切换工具后是否可保持当前模式。
|
|
9
|
+
* @param tool 目标工具
|
|
10
|
+
*/
|
|
11
|
+
canRemainActiveForTool(tool: GizmoTool): boolean;
|
|
12
|
+
/** 创建当前模式的 Gizmo 图。 */
|
|
13
|
+
createGizmos(): Gizmo[];
|
|
14
|
+
/** 进入模式。 */
|
|
15
|
+
onEnter?(): void;
|
|
16
|
+
/** 退出模式。 */
|
|
17
|
+
onExit?(): void;
|
|
18
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { Gizmo } from '../gizmo';
|
|
2
|
+
import type { GizmoOwner } from '../gizmo-owner';
|
|
3
|
+
import type { GizmoTool } from '../gizmo-tool';
|
|
4
|
+
import type { EditMode } from './edit-mode';
|
|
5
|
+
/** 动效内部编辑模式配置。 */
|
|
6
|
+
export type EffectsEditModeOptions = {
|
|
7
|
+
/** 是否允许子元素移动、缩放和旋转;默认允许。 */
|
|
8
|
+
allowTransform?: boolean;
|
|
9
|
+
};
|
|
10
|
+
/** 在单个动效容器内提供子元素选择和变换交互。 */
|
|
11
|
+
export declare class EffectsEditMode implements EditMode {
|
|
12
|
+
private readonly owner;
|
|
13
|
+
readonly effectsItemId: string;
|
|
14
|
+
readonly id = "effects-edit";
|
|
15
|
+
private readonly allowTransform;
|
|
16
|
+
/**
|
|
17
|
+
* @param owner Gizmo 宿主
|
|
18
|
+
* @param effectsItemId 正在编辑的动效容器实例 ID
|
|
19
|
+
* @param options 编辑模式配置
|
|
20
|
+
*/
|
|
21
|
+
constructor(owner: GizmoOwner, effectsItemId: string, options?: EffectsEditModeOptions);
|
|
22
|
+
/**
|
|
23
|
+
* 判断目标工具是否可复用当前动效编辑会话。
|
|
24
|
+
* @param tool 目标工具
|
|
25
|
+
* @returns 是否保持当前模式
|
|
26
|
+
*/
|
|
27
|
+
canRemainActiveForTool(tool: GizmoTool): boolean;
|
|
28
|
+
/** 放开当前动效容器的子树选择边界。 */
|
|
29
|
+
onEnter(): void;
|
|
30
|
+
/** 关闭动效子树选择边界,并恢复选中动效容器。 */
|
|
31
|
+
onExit(): void;
|
|
32
|
+
/** @returns 动效内部编辑使用的 Gizmo 图。 */
|
|
33
|
+
createGizmos(): Gizmo[];
|
|
34
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { VFXItem } from '@galacean/effects';
|
|
2
|
+
import type { Gizmo } from '../gizmo';
|
|
3
|
+
import type { GizmoOwner } from '../gizmo-owner';
|
|
4
|
+
import type { GizmoTool } from '../gizmo-tool';
|
|
5
|
+
import type { TextEditActivation } from '../text/text-edit-session';
|
|
6
|
+
import type { EditMode } from './edit-mode';
|
|
7
|
+
/** 管理行内文本编辑会话和对应 Gizmo 图的编辑模式。 */
|
|
8
|
+
export declare class TextEditMode implements EditMode {
|
|
9
|
+
private readonly owner;
|
|
10
|
+
private readonly target;
|
|
11
|
+
private readonly activation;
|
|
12
|
+
readonly id = "text-edit";
|
|
13
|
+
private readonly session;
|
|
14
|
+
/**
|
|
15
|
+
* @param owner Gizmo 宿主
|
|
16
|
+
* @param target 入口已校验的待编辑文本元素
|
|
17
|
+
* @param activation 文本框激活方式
|
|
18
|
+
*/
|
|
19
|
+
constructor(owner: GizmoOwner, target: VFXItem, activation?: TextEditActivation);
|
|
20
|
+
/** 当前会话正在编辑的文本元素,随文本选择交互更新。 */
|
|
21
|
+
get editingItem(): VFXItem | undefined;
|
|
22
|
+
/**
|
|
23
|
+
* 判断目标工具是否可复用文本编辑会话。
|
|
24
|
+
* @param tool 目标工具
|
|
25
|
+
* @returns 是否保持当前模式
|
|
26
|
+
*/
|
|
27
|
+
canRemainActiveForTool(tool: GizmoTool): boolean;
|
|
28
|
+
/** 使用入口确定的目标进入文本编辑,避免旧模式退出时改变选区。 */
|
|
29
|
+
onEnter(): void;
|
|
30
|
+
/** 结束文本编辑会话。 */
|
|
31
|
+
onExit(): void;
|
|
32
|
+
/** @returns 文本编辑交互的 Gizmo 图。 */
|
|
33
|
+
createGizmos(): Gizmo[];
|
|
34
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { GizmoOwner } from '../gizmo-owner';
|
|
2
|
+
import { ClickDragMultiplexGizmo } from '../gizmos/click-drag-multiplex-gizmo';
|
|
3
|
+
/** 选择交互的可选行为。 */
|
|
4
|
+
export type SelectionInteractionOptions = {
|
|
5
|
+
/** 是否允许拖拽已选元素进行移动。 */
|
|
6
|
+
allowTransform?: boolean;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* 创建用于仲裁点击、拖拽和框选的复合 Gizmo。
|
|
10
|
+
* @param owner Gizmo 宿主。
|
|
11
|
+
* @param options 选择交互配置。
|
|
12
|
+
* @returns 选区交互复合 Gizmo。
|
|
13
|
+
*/
|
|
14
|
+
export declare function createSelectionInteractionGizmo(owner: GizmoOwner, options?: SelectionInteractionOptions): ClickDragMultiplexGizmo;
|
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
import { EventEmitter, type Engine, type InputEventMouseButton, type VFXItem } from '@galacean/effects';
|
|
2
|
+
import { Vector2 } from '../math';
|
|
3
|
+
/** Hover state shared by input observation and the Tool UI renderer. */
|
|
4
|
+
export type HoveringResults = {
|
|
5
|
+
/** Externally observable hover target. */
|
|
6
|
+
itemId?: string;
|
|
7
|
+
/** Target currently submitted to the Tool UI hover renderer. */
|
|
8
|
+
overlayItemId?: string;
|
|
9
|
+
};
|
|
10
|
+
/** Selection 事件参数。 */
|
|
11
|
+
export type SelectionEvents = {
|
|
12
|
+
/** 选中集变更。 */
|
|
13
|
+
'selectionchange': [
|
|
14
|
+
{
|
|
15
|
+
/** 变更前的选中元素 ID。 */
|
|
16
|
+
oldSelectedIds: string[];
|
|
17
|
+
/** 变更后的选中元素 ID。 */
|
|
18
|
+
newSelectedIds: string[];
|
|
19
|
+
}
|
|
20
|
+
];
|
|
21
|
+
/** 预选态变更。 */
|
|
22
|
+
'preselectchange': [
|
|
23
|
+
{
|
|
24
|
+
/** 当前预选元素 ID。 */
|
|
25
|
+
preSelectedId: string | undefined;
|
|
26
|
+
}
|
|
27
|
+
];
|
|
28
|
+
/** 组内交互或动效内部查看焦点变更。 */
|
|
29
|
+
'focuschange': [];
|
|
30
|
+
};
|
|
31
|
+
/** 一次选区行为派发使用的稳定命中快照。 */
|
|
32
|
+
export type SelectionHitSnapshot = {
|
|
33
|
+
/** 命中检测坐标。 */
|
|
34
|
+
point: Vector2;
|
|
35
|
+
/** 按层级过滤后的可选元素 ID。 */
|
|
36
|
+
selectableIds: string[];
|
|
37
|
+
/** 最上层可选元素 ID。 */
|
|
38
|
+
topmostId?: string;
|
|
39
|
+
/** 当前选中范围内的命中元素 ID。 */
|
|
40
|
+
selectedScopeHitIds: string[];
|
|
41
|
+
/** 跳过已选父组后,可继续下钻一层的元素 ID。 */
|
|
42
|
+
drillTargetId?: string;
|
|
43
|
+
};
|
|
44
|
+
/** 管理选中状态、预选状态和场景命中查询。 */
|
|
45
|
+
export declare class Selection extends EventEmitter<SelectionEvents> {
|
|
46
|
+
/** 本次交互开始前的选中快照。 */
|
|
47
|
+
interactionStartSelectedIds: string[];
|
|
48
|
+
/** 命中检测需要排除的元素 ID。 */
|
|
49
|
+
ignoreIds: string[];
|
|
50
|
+
/** 命中检测需要排除的元素名称。 */
|
|
51
|
+
ignoreNames: string[];
|
|
52
|
+
/** 当前选中元素 ID。 */
|
|
53
|
+
private _selectedIds;
|
|
54
|
+
/** 当前允许穿透选择的动效容器 ID。 */
|
|
55
|
+
private _effectsEditItemId;
|
|
56
|
+
/** 当前组内交互的焦点容器 ID。 */
|
|
57
|
+
private _focusedGroupId;
|
|
58
|
+
private readonly engine;
|
|
59
|
+
private readonly hoveringResults;
|
|
60
|
+
/**
|
|
61
|
+
* @param engine Effects 引擎
|
|
62
|
+
* @param hoveringResults 共享的预选状态
|
|
63
|
+
*/
|
|
64
|
+
constructor(engine: Engine, hoveringResults?: HoveringResults);
|
|
65
|
+
/** 选中元素 ID 的副本。 */
|
|
66
|
+
get selectedIds(): string[];
|
|
67
|
+
/**
|
|
68
|
+
* 替换选中元素并发出变更事件。
|
|
69
|
+
* @param ids 新的选中元素 ID
|
|
70
|
+
*/
|
|
71
|
+
set selectedIds(ids: string[]);
|
|
72
|
+
/** 对外可观察的 hover 命中结果。 */
|
|
73
|
+
get preSelectedId(): string | undefined;
|
|
74
|
+
/** 当前 Tool UI 要绘制的 hover 目标。 */
|
|
75
|
+
get hoverOverlayItemId(): string | undefined;
|
|
76
|
+
/** @returns 当前正在内部编辑的动效容器 ID。 */
|
|
77
|
+
getEffectsEditItemId(): string | undefined;
|
|
78
|
+
/** @returns 当前组内交互的焦点容器 ID。 */
|
|
79
|
+
getFocusedGroupId(): string | undefined;
|
|
80
|
+
/**
|
|
81
|
+
* 设置当前组内交互的焦点容器。
|
|
82
|
+
* @param groupId Group 实例 ID;传空值表示回到场景根层级
|
|
83
|
+
*/
|
|
84
|
+
setFocusedGroup(groupId?: string | null): void;
|
|
85
|
+
/**
|
|
86
|
+
* 放开指定动效容器的子树选择边界。
|
|
87
|
+
* @param effectsItemId 动效容器 ID
|
|
88
|
+
*/
|
|
89
|
+
enterEffectsEditScope(effectsItemId: string): void;
|
|
90
|
+
/** 关闭动效子树选择边界。 */
|
|
91
|
+
leaveEffectsEditScope(): void;
|
|
92
|
+
/** @returns 选中元素 ID 的内部只读引用。 */
|
|
93
|
+
getSelectedIds(): string[];
|
|
94
|
+
/** @returns 当前选中 ID 对应的有效 VFXItem。 */
|
|
95
|
+
getSelectedPlayerItems(): VFXItem[];
|
|
96
|
+
/**
|
|
97
|
+
* 判断元素是否已选中。
|
|
98
|
+
* @param id 元素 ID
|
|
99
|
+
* @returns 是否已选中
|
|
100
|
+
*/
|
|
101
|
+
isItemSelected(id: string): boolean;
|
|
102
|
+
/**
|
|
103
|
+
* 追加尚未选中的元素并发出变更事件。
|
|
104
|
+
* @param ids 待追加元素 ID
|
|
105
|
+
*/
|
|
106
|
+
addSelectedItems(ids: string[]): void;
|
|
107
|
+
/**
|
|
108
|
+
* 移除选中元素并发出变更事件。
|
|
109
|
+
* @param ids 待移除元素 ID
|
|
110
|
+
*/
|
|
111
|
+
removeSelectedItems(ids: string[]): void;
|
|
112
|
+
/** 清空选中元素并发出变更事件。 */
|
|
113
|
+
clearSelectedItems(): void;
|
|
114
|
+
/**
|
|
115
|
+
* 替换选中元素并发出变更事件。
|
|
116
|
+
* @param ids 新的选中元素 ID
|
|
117
|
+
*/
|
|
118
|
+
setSelectedItems(ids: string[]): void;
|
|
119
|
+
/**
|
|
120
|
+
* 原子更新选中元素、焦点容器和变更事件。
|
|
121
|
+
* @param ids 新的选中元素 ID
|
|
122
|
+
* @returns 选中集是否发生变化
|
|
123
|
+
*/
|
|
124
|
+
commitSelectedItems(ids: string[]): boolean;
|
|
125
|
+
/**
|
|
126
|
+
* 将元素加入选中集合并同步焦点容器,不发出事件。
|
|
127
|
+
* @param id 元素 ID
|
|
128
|
+
* @returns 更新后的选中元素 ID
|
|
129
|
+
*/
|
|
130
|
+
addSelectedItem(id: string): string[];
|
|
131
|
+
/** 清空选中集,不发出事件。 */
|
|
132
|
+
clear(): void;
|
|
133
|
+
/**
|
|
134
|
+
* 直接替换选中集,不发出事件。
|
|
135
|
+
* @param ids 新的选中元素 ID
|
|
136
|
+
*/
|
|
137
|
+
setSelectedIds(ids: string[]): void;
|
|
138
|
+
/**
|
|
139
|
+
* 处理双击点选,并允许穿透已选父元素。
|
|
140
|
+
* @param event 鼠标事件
|
|
141
|
+
* @returns 命中的元素 id;无命中返回 undefined
|
|
142
|
+
*/
|
|
143
|
+
pickOnDoubleClick(event: InputEventMouseButton): string | undefined;
|
|
144
|
+
/**
|
|
145
|
+
* 处理单击点选,Shift 按键用于切换命中元素的选中状态。
|
|
146
|
+
* @param event 鼠标事件
|
|
147
|
+
* @returns 命中的元素 id;无命中返回 undefined
|
|
148
|
+
*/
|
|
149
|
+
pickOnClick(event: InputEventMouseButton): string | undefined;
|
|
150
|
+
/**
|
|
151
|
+
* 获取指定视图坐标下的可交互元素 ID。
|
|
152
|
+
* @param point 视图坐标
|
|
153
|
+
* @returns 按命中优先级排列的元素 ID
|
|
154
|
+
*/
|
|
155
|
+
hitTest(point: Vector2): string[];
|
|
156
|
+
/**
|
|
157
|
+
* 解析当前指针在焦点容器内的预选目标。
|
|
158
|
+
* @param point 指针视图坐标
|
|
159
|
+
* @returns 预选元素 ID
|
|
160
|
+
*/
|
|
161
|
+
resolveHoverTarget(point: Vector2): string | undefined;
|
|
162
|
+
/**
|
|
163
|
+
* 解析并提交当前指针的预选目标。
|
|
164
|
+
* @param point 指针视图坐标
|
|
165
|
+
*/
|
|
166
|
+
commitHoverTarget(point: Vector2): void;
|
|
167
|
+
/**
|
|
168
|
+
* 设置当前工具的预选绘制目标。
|
|
169
|
+
* @param itemId 元素 ID
|
|
170
|
+
*/
|
|
171
|
+
setHoverOverlayTarget(itemId?: string): void;
|
|
172
|
+
/** 清空预选命中和绘制目标。 */
|
|
173
|
+
clearHover(): void;
|
|
174
|
+
/**
|
|
175
|
+
* 按当前焦点容器过滤交互命中。
|
|
176
|
+
* @param selectedIds 原始命中元素 ID
|
|
177
|
+
* @returns 可选元素 ID
|
|
178
|
+
*/
|
|
179
|
+
filterSelectedItems(selectedIds: string[]): string[];
|
|
180
|
+
/**
|
|
181
|
+
* 添加忽略交互的元素 ID。
|
|
182
|
+
* @param ids 元素 ID
|
|
183
|
+
*/
|
|
184
|
+
addIgnoreIds(ids: string[]): void;
|
|
185
|
+
/**
|
|
186
|
+
* 删除忽略交互的元素 ID。
|
|
187
|
+
* @param ids 元素 ID
|
|
188
|
+
*/
|
|
189
|
+
deleteIgnoreIds(ids: string[]): void;
|
|
190
|
+
/**
|
|
191
|
+
* 添加忽略交互的元素名称。
|
|
192
|
+
* @param names 元素名称
|
|
193
|
+
*/
|
|
194
|
+
addIgnoreNames(names: string[]): void;
|
|
195
|
+
/**
|
|
196
|
+
* 删除忽略交互的元素名称。
|
|
197
|
+
* @param names 元素名称
|
|
198
|
+
*/
|
|
199
|
+
deleteIgnoreNames(names: string[]): void;
|
|
200
|
+
/**
|
|
201
|
+
* 替换忽略交互的元素名称。
|
|
202
|
+
* @param names 元素名称
|
|
203
|
+
*/
|
|
204
|
+
setIgnoreNames(names: string[]): void;
|
|
205
|
+
/**
|
|
206
|
+
* 查找指针下最上层的未选元素。
|
|
207
|
+
* @param point 指针视图坐标
|
|
208
|
+
* @returns 未选元素 ID
|
|
209
|
+
*/
|
|
210
|
+
findUnselectedItem(point: Vector2): string | undefined;
|
|
211
|
+
/**
|
|
212
|
+
* 创建一次行为派发使用的选区命中快照。
|
|
213
|
+
* @param point 命中检测坐标
|
|
214
|
+
* @returns 选区命中快照
|
|
215
|
+
*/
|
|
216
|
+
createHitSnapshot(point: Vector2): SelectionHitSnapshot;
|
|
217
|
+
/**
|
|
218
|
+
* 判断坐标是否位于当前焦点容器的视图范围内。
|
|
219
|
+
* @param point 视图坐标
|
|
220
|
+
* @returns 是否位于当前焦点容器内
|
|
221
|
+
*/
|
|
222
|
+
isPointInFocusedGroup(point: Vector2): boolean;
|
|
223
|
+
/**
|
|
224
|
+
* 判断坐标是否落在当前选区的视图包围内。
|
|
225
|
+
*
|
|
226
|
+
* 单选保留元素变换后四边形的精确命中;多选使用与变换线框一致的
|
|
227
|
+
* 整体轴对齐包围盒,使元素之间的选框空白区域也可用于拖动选区。
|
|
228
|
+
* @param point 视图坐标
|
|
229
|
+
* @returns 是否命中当前选区
|
|
230
|
+
*/
|
|
231
|
+
isPointInSelectedViewBox(point: Vector2): boolean;
|
|
232
|
+
/**
|
|
233
|
+
* 判断坐标是否位于当前动效编辑容器的视图范围内。
|
|
234
|
+
* @param point 视图坐标
|
|
235
|
+
* @returns 是否位于当前动效容器内
|
|
236
|
+
*/
|
|
237
|
+
isPointInEffectsEditScope(point: Vector2): boolean;
|
|
238
|
+
/**
|
|
239
|
+
* 将框选候选按当前动效编辑范围解析为可选元素。
|
|
240
|
+
*
|
|
241
|
+
* 默认模式把动效子树归并为容器;动效编辑模式只保留当前容器的内部元素。
|
|
242
|
+
* @param item 原始播放器元素
|
|
243
|
+
* @returns 当前模式下的框选候选;不可选时返回 undefined
|
|
244
|
+
*/
|
|
245
|
+
resolveMarqueeSelectableItem(item: VFXItem): VFXItem | undefined;
|
|
246
|
+
/**
|
|
247
|
+
* 提交预选结果并在变化时发出事件。
|
|
248
|
+
* @param itemId 预选元素 ID
|
|
249
|
+
*/
|
|
250
|
+
private commitHover;
|
|
251
|
+
/**
|
|
252
|
+
* 按场景层级归并原始命中元素。
|
|
253
|
+
* @param selectedIds 原始命中元素 ID
|
|
254
|
+
* @param groupFilter 可选的父组过滤条件
|
|
255
|
+
* @returns 归并后的元素 ID
|
|
256
|
+
*/
|
|
257
|
+
private filterItemsByHierarchy;
|
|
258
|
+
/**
|
|
259
|
+
* 获取不高于当前焦点容器的最外层可选元素。
|
|
260
|
+
* @param item 原始命中元素
|
|
261
|
+
* @param groupFilter 可选的父组过滤条件
|
|
262
|
+
* @returns 当前层级可选元素
|
|
263
|
+
*/
|
|
264
|
+
private getOutermostSelectableItem;
|
|
265
|
+
/**
|
|
266
|
+
* 判断元素名称是否在忽略列表中。
|
|
267
|
+
* @param id 元素 ID
|
|
268
|
+
* @returns 是否忽略该元素
|
|
269
|
+
*/
|
|
270
|
+
private isIgnoredNameById;
|
|
271
|
+
/** @returns 选中元素及其后代组成的命中范围。 */
|
|
272
|
+
private getSelectedScopeIdSet;
|
|
273
|
+
/**
|
|
274
|
+
* 将动效子元素命中区域归并到动效容器。
|
|
275
|
+
* @param hitTestResult 原始命中结果
|
|
276
|
+
*/
|
|
277
|
+
private refreshResultRegions;
|
|
278
|
+
/**
|
|
279
|
+
* 按渲染顺序和深度整理命中结果。
|
|
280
|
+
* @param hitTestResult 原始命中结果
|
|
281
|
+
* @param playerComposition 播放合成
|
|
282
|
+
* @returns 排序后的元素 ID
|
|
283
|
+
*/
|
|
284
|
+
private reorderHitTestResult;
|
|
285
|
+
/**
|
|
286
|
+
* 将画板左上角扩展交互区的命中加入结果。
|
|
287
|
+
* @param mouse 指针视图坐标
|
|
288
|
+
* @param currentSelectedIds 当前命中元素 ID
|
|
289
|
+
* @returns 补充画板后的命中元素 ID
|
|
290
|
+
*/
|
|
291
|
+
private preSelectedFrameOutBound;
|
|
292
|
+
/**
|
|
293
|
+
* 根据当前非空选区更新共同的最近父组;清空选区时保留已有焦点。
|
|
294
|
+
* @param selectedIds 当前选中元素 ID
|
|
295
|
+
*/
|
|
296
|
+
private updateFocusedGroupFromSelection;
|
|
297
|
+
/**
|
|
298
|
+
* 获取元素从近到远的可聚焦父组。
|
|
299
|
+
* @param item 当前元素
|
|
300
|
+
* @returns 父组列表
|
|
301
|
+
*/
|
|
302
|
+
private getGroupAncestors;
|
|
303
|
+
/**
|
|
304
|
+
* 判断元素是否可作为组内交互焦点。
|
|
305
|
+
* @param item 待检查元素
|
|
306
|
+
* @returns 是否为可聚焦 Group
|
|
307
|
+
*/
|
|
308
|
+
private isSelectableGroup;
|
|
309
|
+
/**
|
|
310
|
+
* 判断原始命中元素能否直接进入选区。
|
|
311
|
+
* @param item 待检查元素
|
|
312
|
+
* @returns 是否可直接选择
|
|
313
|
+
*/
|
|
314
|
+
private isDirectlySelectable;
|
|
315
|
+
/**
|
|
316
|
+
* 判断 ancestor 是否为 item 的运行时祖先。
|
|
317
|
+
* @param ancestor 候选祖先
|
|
318
|
+
* @param item 当前元素
|
|
319
|
+
* @returns 是否存在祖先关系
|
|
320
|
+
*/
|
|
321
|
+
private isRuntimeAncestor;
|
|
322
|
+
/**
|
|
323
|
+
* 将选区归一化为不存在祖先关系的节点集合。
|
|
324
|
+
*
|
|
325
|
+
* 按输入顺序处理,后加入的交互目标胜出:深入子元素会移除已选祖先,
|
|
326
|
+
* 选择外层容器会移除已选后代
|
|
327
|
+
* @param ids 待提交的选中 ID
|
|
328
|
+
* @returns 保持稳定顺序的层级互斥选区
|
|
329
|
+
*/
|
|
330
|
+
private normalizeHierarchySelection;
|
|
331
|
+
/**
|
|
332
|
+
* 比较两个有序 ID 列表。
|
|
333
|
+
* @param left 左侧 ID 列表
|
|
334
|
+
* @param right 右侧 ID 列表
|
|
335
|
+
* @returns 是否完全相同
|
|
336
|
+
*/
|
|
337
|
+
private sameIds;
|
|
338
|
+
}
|