@galacean/effects-plugin-editor-gizmo 2.10.4 → 2.11.0-alpha.1

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.
Files changed (125) hide show
  1. package/README.md +37 -5
  2. package/dist/2d/configs/builtin-configs.d.ts +14 -0
  3. package/dist/2d/configs/config-definition.d.ts +40 -0
  4. package/dist/2d/configs/config-manager.d.ts +52 -0
  5. package/dist/2d/configs/index.d.ts +6 -0
  6. package/dist/2d/configs/loading-config.d.ts +3 -0
  7. package/dist/2d/configs/types.d.ts +321 -0
  8. package/dist/2d/cursor-icons.d.ts +8 -0
  9. package/dist/2d/cursor.d.ts +36 -0
  10. package/dist/2d/drag-threshold.d.ts +13 -0
  11. package/dist/2d/drawing.d.ts +148 -0
  12. package/dist/2d/frame/frame-assisted-layout.d.ts +115 -0
  13. package/dist/2d/frame/frame-auto-layout.d.ts +47 -0
  14. package/dist/2d/frame/frame-manager.d.ts +169 -0
  15. package/dist/2d/frame/frame-resize.d.ts +13 -0
  16. package/dist/2d/frame/index.d.ts +5 -0
  17. package/dist/2d/frame/layout-calculations.d.ts +109 -0
  18. package/dist/2d/frame/types.d.ts +41 -0
  19. package/dist/2d/gesture-handler.d.ts +253 -0
  20. package/dist/2d/gizmo-action.d.ts +159 -0
  21. package/dist/2d/gizmo-manager.d.ts +105 -0
  22. package/dist/2d/gizmo-owner.d.ts +65 -0
  23. package/dist/2d/gizmo-tool.d.ts +15 -0
  24. package/dist/2d/gizmo-tools/hand-gizmo-tool.d.ts +4 -0
  25. package/dist/2d/gizmo-tools/image-cut-gizmo-tool.d.ts +7 -0
  26. package/dist/2d/gizmo-tools/image-expand-gizmo-tool.d.ts +7 -0
  27. package/dist/2d/gizmo-tools/index.d.ts +7 -0
  28. package/dist/2d/gizmo-tools/item-create-gizmo-tool.d.ts +10 -0
  29. package/dist/2d/gizmo-tools/mask-gizmo-tool.d.ts +7 -0
  30. package/dist/2d/gizmo-tools/move-gizmo-tool.d.ts +6 -0
  31. package/dist/2d/gizmo-tools/sprite-text-edit-gizmo-tool.d.ts +7 -0
  32. package/dist/2d/gizmo-type.d.ts +37 -0
  33. package/dist/2d/gizmo.d.ts +60 -0
  34. package/dist/2d/gizmos/box-selection-gizmo.d.ts +67 -0
  35. package/dist/2d/gizmos/change-selection-gizmo.d.ts +45 -0
  36. package/dist/2d/gizmos/click-drag-multiplex-gizmo.d.ts +95 -0
  37. package/dist/2d/gizmos/corner-rotation-gizmo.d.ts +101 -0
  38. package/dist/2d/gizmos/enter-edit-mode-gizmo.d.ts +11 -0
  39. package/dist/2d/gizmos/hand-gizmo.d.ts +67 -0
  40. package/dist/2d/gizmos/icon-gizmo.d.ts +107 -0
  41. package/dist/2d/gizmos/image-cut-gizmo.d.ts +140 -0
  42. package/dist/2d/gizmos/image-expand-gizmo.d.ts +135 -0
  43. package/dist/2d/gizmos/image-interaction.d.ts +40 -0
  44. package/dist/2d/gizmos/item-create-gizmo.d.ts +146 -0
  45. package/dist/2d/gizmos/leave-effects-edit-gizmo.d.ts +11 -0
  46. package/dist/2d/gizmos/leave-text-edit-gizmo.d.ts +11 -0
  47. package/dist/2d/gizmos/loading-gizmo.d.ts +110 -0
  48. package/dist/2d/gizmos/loading-manager.d.ts +74 -0
  49. package/dist/2d/gizmos/mask-gizmo.d.ts +153 -0
  50. package/dist/2d/gizmos/move-selection-gizmo.d.ts +64 -0
  51. package/dist/2d/gizmos/resize-selection-gizmo/anchored-resize.d.ts +40 -0
  52. package/dist/2d/gizmos/resize-selection-gizmo/index.d.ts +2 -0
  53. package/dist/2d/gizmos/resize-selection-gizmo/resize-selection-gizmo.d.ts +364 -0
  54. package/dist/2d/gizmos/resize-selection-gizmo/transform-types.d.ts +27 -0
  55. package/dist/2d/gizmos/select-text-gizmo.d.ts +77 -0
  56. package/dist/2d/gizmos/sprite-text-edit-gizmo.d.ts +149 -0
  57. package/dist/2d/gizmos/text-gizmo.d.ts +65 -0
  58. package/dist/2d/gizmos/viewport-overlay-gizmo.d.ts +66 -0
  59. package/dist/2d/index.d.ts +44 -0
  60. package/dist/2d/items/default-vfx-items.d.ts +45 -0
  61. package/dist/2d/items/index.d.ts +6 -0
  62. package/dist/2d/items/item-geometry.d.ts +69 -0
  63. package/dist/2d/items/item-hierarchy.d.ts +39 -0
  64. package/dist/2d/items/item-predicates.d.ts +31 -0
  65. package/dist/2d/items/media-controls.d.ts +39 -0
  66. package/dist/2d/items/vfx-item-factory.d.ts +13 -0
  67. package/dist/2d/math/core.d.ts +26 -0
  68. package/dist/2d/math/geometry.d.ts +83 -0
  69. package/dist/2d/math/index.d.ts +4 -0
  70. package/dist/2d/math/ray-caster.d.ts +56 -0
  71. package/dist/2d/math/utils.d.ts +6 -0
  72. package/dist/2d/modes/default-selection-mode.d.ts +19 -0
  73. package/dist/2d/modes/edit-mode.d.ts +18 -0
  74. package/dist/2d/modes/effects-edit-mode.d.ts +34 -0
  75. package/dist/2d/modes/index.d.ts +4 -0
  76. package/dist/2d/modes/text-edit-mode.d.ts +34 -0
  77. package/dist/2d/selection/create-selection-interaction-gizmo.d.ts +14 -0
  78. package/dist/2d/selection/index.d.ts +3 -0
  79. package/dist/2d/selection/selection.d.ts +338 -0
  80. package/dist/2d/selection/snap-manager.d.ts +130 -0
  81. package/dist/2d/text/index.d.ts +2 -0
  82. package/dist/2d/text/text-caret-mapper.d.ts +61 -0
  83. package/dist/2d/text/text-edit-session.d.ts +169 -0
  84. package/dist/2d/viewport/coordinates.d.ts +89 -0
  85. package/dist/2d/viewport/gizmo-viewport.d.ts +108 -0
  86. package/dist/2d/viewport/index.d.ts +6 -0
  87. package/dist/2d/viewport/types.d.ts +11 -0
  88. package/dist/2d/viewport/viewport-navigation-controller.d.ts +110 -0
  89. package/dist/2d/viewport/viewport-operations.d.ts +15 -0
  90. package/dist/2d/viewport/viewport-range.d.ts +9 -0
  91. package/dist/2d/viewport/viewport-utils.d.ts +32 -0
  92. package/dist/{gizmo-component.d.ts → 3d/gizmo-component.d.ts} +3 -5
  93. package/dist/3d/index.d.ts +4 -0
  94. package/dist/index.d.ts +2 -5
  95. package/dist/index.js +15030 -171
  96. package/dist/index.js.map +1 -1
  97. package/dist/index.min.js +2 -2
  98. package/dist/index.min.js.map +1 -1
  99. package/dist/index.mjs +14871 -173
  100. package/dist/index.mjs.map +1 -1
  101. package/package.json +9 -3
  102. /package/dist/{constants.d.ts → 3d/constants.d.ts} +0 -0
  103. /package/dist/{define.d.ts → 3d/define.d.ts} +0 -0
  104. /package/dist/{geometry → 3d/geometry}/box.d.ts +0 -0
  105. /package/dist/{geometry → 3d/geometry}/cone.d.ts +0 -0
  106. /package/dist/{geometry → 3d/geometry}/cylinder.d.ts +0 -0
  107. /package/dist/{geometry → 3d/geometry}/direction-light.d.ts +0 -0
  108. /package/dist/{geometry → 3d/geometry}/floor-line-edge.d.ts +0 -0
  109. /package/dist/{geometry → 3d/geometry}/floor-line.d.ts +0 -0
  110. /package/dist/{geometry → 3d/geometry}/frustum.d.ts +0 -0
  111. /package/dist/{geometry → 3d/geometry}/geometry.d.ts +0 -0
  112. /package/dist/{geometry → 3d/geometry}/index.d.ts +0 -0
  113. /package/dist/{geometry → 3d/geometry}/plane.d.ts +0 -0
  114. /package/dist/{geometry → 3d/geometry}/point-light.d.ts +0 -0
  115. /package/dist/{geometry → 3d/geometry}/sphere.d.ts +0 -0
  116. /package/dist/{geometry → 3d/geometry}/spot-light.d.ts +0 -0
  117. /package/dist/{geometry → 3d/geometry}/torus.d.ts +0 -0
  118. /package/dist/{gizmo-loader.d.ts → 3d/gizmo-loader.d.ts} +0 -0
  119. /package/dist/{gizmo-vfx-item.d.ts → 3d/gizmo-vfx-item.d.ts} +0 -0
  120. /package/dist/{math-utils.d.ts → 3d/math-utils.d.ts} +0 -0
  121. /package/dist/{mesh.d.ts → 3d/mesh.d.ts} +0 -0
  122. /package/dist/{raycast.d.ts → 3d/raycast.d.ts} +0 -0
  123. /package/dist/{shape.d.ts → 3d/shape.d.ts} +0 -0
  124. /package/dist/{util.d.ts → 3d/util.d.ts} +0 -0
  125. /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,4 @@
1
+ export * from './core';
2
+ export * from './geometry';
3
+ export * from './ray-caster';
4
+ export * from './utils';
@@ -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,6 @@
1
+ /**
2
+ * 返回数组中绝对值最大元素的索引
3
+ * @param numbers 数值数组
4
+ * @returns 绝对值最大元素的索引
5
+ */
6
+ export declare function getAbsMaxIndex(numbers: number[]): number;
@@ -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,4 @@
1
+ export type { EditMode } from './edit-mode';
2
+ export { DefaultSelectionMode } from './default-selection-mode';
3
+ export { EffectsEditMode, type EffectsEditModeOptions } from './effects-edit-mode';
4
+ export { TextEditMode } from './text-edit-mode';
@@ -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,3 @@
1
+ export { createSelectionInteractionGizmo } from './create-selection-interaction-gizmo';
2
+ export * from './selection';
3
+ export * from './snap-manager';
@@ -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
+ }