@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,153 @@
1
+ import { Vector2 } from '../math';
2
+ import type { MaskConfig } from '../configs/types';
3
+ import type { VFXItem } from '@galacean/effects';
4
+ import { type InputEventMouseButton, type InputEventMouseMotion } from '@galacean/effects';
5
+ import type { Control } from '@galacean/effects-plugin-gui';
6
+ import { Gizmo } from '../gizmo';
7
+ import type { GizmoOwner } from '../gizmo-owner';
8
+ import { GizmoType } from '../gizmo-type';
9
+ import { type GestureCursorResult } from '../cursor';
10
+ /**
11
+ * 图片蒙版工具结果
12
+ */
13
+ export type MaskResult = {
14
+ /**
15
+ * 蒙版线条列表
16
+ */
17
+ lines: {
18
+ /** 笔刷大小 */
19
+ brushSize: number;
20
+ /** 笔刷路径点(归一化坐标) */
21
+ points: Vector2[];
22
+ /** 笔刷类型:涂抹或擦除 */
23
+ type?: 'paint' | 'erase';
24
+ /** 形状类型:'stroke' 折线(默认),'rect' 矩形框选(points=[起点, 终点]) */
25
+ shape?: 'stroke' | 'rect';
26
+ }[];
27
+ };
28
+ /** 通过笔刷或矩形涂抹、擦除图片蒙版并实时预览。 */
29
+ export declare class MaskGizmo extends Gizmo {
30
+ /** gizmo 类型标识 */
31
+ type: GizmoType;
32
+ /** 当前笔刷模式:涂抹或擦除 */
33
+ mode: 'paint' | 'erase' | 'box-paint' | 'box-erase';
34
+ /** 光标结果。 */
35
+ cursorResult: GestureCursorResult;
36
+ result: MaskResult;
37
+ /** 配置变更退订函数。 */
38
+ private configOff?;
39
+ /** 当前已加载的黑白蒙版图片。 */
40
+ private maskImage?;
41
+ /** 蒙版图片加载版本,用于丢弃过期异步结果。 */
42
+ private maskImageLoadVersion;
43
+ /** 仅供 draw 使用,由 onUpdate 为当前帧生成。 */
44
+ private renderTransform?;
45
+ /** 离屏 canvas,用于绘制蒙版预览(笔刷涂抹/擦除,原生支持圆头与 destination-out)。 */
46
+ private previewCanvas;
47
+ /** 蒙版预览纹理(由离屏 canvas 每帧上传)。 */
48
+ private maskTexture;
49
+ private mouseGrabbed;
50
+ /**
51
+ * 创建蒙版 Gizmo,并按当前配置加载基础蒙版图。
52
+ * @param owner Gizmo 宿主。
53
+ */
54
+ constructor(owner: GizmoOwner);
55
+ /** 当前选中的元素(直读 selection.getSelectedPlayerItems:id→VFXItem 已解析)。 */
56
+ get selectedItems(): VFXItem[];
57
+ /** 当前蒙版配置。 */
58
+ get config(): Readonly<MaskConfig>;
59
+ /**
60
+ * 更新蒙版绘制或指针光标。
61
+ * @param event 鼠标移动事件。
62
+ */
63
+ onMouseMove(event: InputEventMouseMotion): void;
64
+ /**
65
+ * 继续当前蒙版绘制交互。
66
+ * @param event 鼠标拖拽事件。
67
+ */
68
+ onMouseDrag(event: InputEventMouseMotion): void;
69
+ /**
70
+ * 在选中元素内开始笔刷或矩形蒙版交互。
71
+ * @param event 鼠标按下事件。
72
+ */
73
+ onMouseDown(event: InputEventMouseButton): void;
74
+ /**
75
+ * 结束蒙版绘制并移除无效路径。
76
+ * @param event 鼠标抬起事件。
77
+ */
78
+ onMouseUp(event: InputEventMouseButton): void;
79
+ /** 释放预览纹理和离屏绘制资源。 */
80
+ dispose(): void;
81
+ /** 为本帧绘制创建元素包围盒快照。 */
82
+ onUpdate(): void;
83
+ /**
84
+ * 绘制蒙版纹理、元素轮廓和矩形预览。
85
+ * @param control 绘制控制器。
86
+ */
87
+ draw(control: Control): void;
88
+ /**
89
+ * 设置模式。
90
+ * @param mode 模式类型:'paint' 笔刷涂抹、'erase' 笔刷擦除、'box-paint' 框选涂抹、'box-erase' 框选擦除
91
+ */
92
+ setMode(mode: 'paint' | 'erase' | 'box-paint' | 'box-erase'): void;
93
+ /** 关闭 gizmo:清空蒙版配置、笔刷和预览资源。 */
94
+ close(): void;
95
+ /** 清空当前所有笔刷线条。 */
96
+ clearMask(): void;
97
+ /**
98
+ * 加载蒙版图片。
99
+ * @param url 图片地址
100
+ * @returns Promise<HTMLImageElement>
101
+ */
102
+ loadMaskImage(url: string): Promise<HTMLImageElement>;
103
+ /**
104
+ * 生成当前蒙版的 PNG Canvas。
105
+ * @returns 蒙版图像;没有有效蒙版时返回 null。
106
+ */
107
+ getMask(): HTMLCanvasElement | null;
108
+ /**
109
+ * 生成当前蒙版的 PNG Data URL。
110
+ * @returns 蒙版图像;没有有效蒙版时返回 undefined。
111
+ */
112
+ getMaskDataUrl(): string | undefined;
113
+ /**
114
+ * 在蒙版图片 URL 变化时刷新运行时图片。
115
+ * @param change 蒙版配置变更。
116
+ */
117
+ private onConfigChange;
118
+ /**
119
+ * 加载当前配置指定的蒙版图片,并忽略已过期的异步结果。
120
+ * @param url 蒙版图片 URL;空字符串表示清空。
121
+ */
122
+ private refreshMaskImage;
123
+ /**
124
+ * 更新当前笔刷路径或矩形终点。
125
+ * @param event 鼠标拖拽事件。
126
+ * @param transform 当前元素投影。
127
+ * @returns 是否处理了拖拽。
128
+ */
129
+ private updateGrab;
130
+ /**
131
+ * 将视口坐标转换为包围盒内的归一化坐标。
132
+ * @param p 视口坐标。
133
+ * @param transform 元素 Box2 投影。
134
+ * @returns 钳制到 [0, 1] 的归一化坐标。
135
+ */
136
+ private toNormalized;
137
+ /** 按当前元素与视口即时计算投影,不写入业务状态或渲染快照。 */
138
+ private getSelectionTransform;
139
+ /** 释放预览纹理与离屏 canvas。 */
140
+ private clearRenderObjects;
141
+ /**
142
+ * 将蒙版预览绘制到离屏画布。
143
+ * @param width 预览宽度。
144
+ * @param height 预览高度。
145
+ * @returns 离屏画布;创建失败时返回 null。
146
+ */
147
+ private renderPreviewToCanvas;
148
+ /**
149
+ * 根据指针位置和蒙版模式刷新光标。
150
+ * @param transform 当前元素投影。
151
+ */
152
+ private refreshCursorResult;
153
+ }
@@ -0,0 +1,64 @@
1
+ import { type InputEventMouseButton, type InputEventMouseMotion } from '@galacean/effects';
2
+ import type { Control } from '@galacean/effects-plugin-gui';
3
+ import { Gizmo } from '../gizmo';
4
+ import { type AutoLayoutChangeInfo, type SelectionPlacementChange } from '../frame/frame-assisted-layout';
5
+ /** 拖动选中对象,并处理吸附、重挂载和自动布局。 */
6
+ export declare class MoveSelectionGizmo extends Gizmo {
7
+ readonly type = "move-selection";
8
+ private active;
9
+ private selectedItems;
10
+ private selectionBox;
11
+ private interactionPlane;
12
+ private startPoint;
13
+ private lastPoint;
14
+ private cursorPoint;
15
+ private lastWorldPosition;
16
+ private assistedLayout;
17
+ /**
18
+ * 在选区内按下主键时开始移动交互。
19
+ * @param event 鼠标按下事件。
20
+ */
21
+ onMouseDown(event: InputEventMouseButton): void;
22
+ /**
23
+ * 忽略未进入拖拽阶段的移动事件。
24
+ * @param _event 鼠标移动事件。
25
+ */
26
+ onMouseMove(_event: InputEventMouseMotion): void;
27
+ /**
28
+ * 移动选中对象并更新布局辅助状态。
29
+ * @param event 鼠标拖拽事件。
30
+ */
31
+ onMouseDrag(event: InputEventMouseMotion): void;
32
+ /**
33
+ * 结束移动并提交布局与变换结果。
34
+ * @param event 鼠标抬起事件。
35
+ */
36
+ onMouseUp(event: InputEventMouseButton): void;
37
+ /**
38
+ * 绘制移动过程中的布局辅助信息。
39
+ * @param control 绘制控制器。
40
+ */
41
+ draw(control: Control): void;
42
+ /**
43
+ * 将视口位移应用到选中对象。
44
+ * @param shift 本次视口位移。
45
+ * @returns 是否成功应用位移。
46
+ */
47
+ private applyTranslation;
48
+ /**
49
+ * 初始化移动所需的选区、吸附目标与交互平面。
50
+ * @returns 是否成功准备交互几何信息。
51
+ */
52
+ private prepareTranslationGeometry;
53
+ /**
54
+ * 计算当前可见选中项的视口包围盒。
55
+ * @param containerSize 视口容器尺寸。
56
+ * @returns 选区包围盒。
57
+ */
58
+ private computeSelectionBox;
59
+ /** 按当前父级关系刷新本次移动可用的吸附目标。 */
60
+ private cacheSnapTargets;
61
+ /** 重置移动交互状态。 */
62
+ private resetDragState;
63
+ }
64
+ export type { AutoLayoutChangeInfo, SelectionPlacementChange };
@@ -0,0 +1,40 @@
1
+ import type { Matrix4 } from '../../math';
2
+ import { Vector3 } from '../../math';
3
+ /** 一次锚定缩放在 pointer down 时冻结的几何。 */
4
+ export type AnchoredResizeGeometry = {
5
+ /** 初始被拖手柄位置(世界坐标)。 */
6
+ initialHandle: Vector3;
7
+ /** 始终保持不动的对边中点或对角点(世界坐标)。 */
8
+ fixedPoint: Vector3;
9
+ /** 属性变化实际围绕的原点(transform scale 用 anchor,内容 size 用几何中心)。 */
10
+ resizeOrigin: Vector3;
11
+ /** 世界向量到元素局部缩放轴的旋转矩阵(无平移)。 */
12
+ worldToLocalRotation: Matrix4;
13
+ };
14
+ /** 锚定缩放约束。 */
15
+ export type AnchoredResizeOptions = {
16
+ /** 边只控制一个轴;角点同时控制两个轴。 */
17
+ handleKind: 'edge' | 'corner';
18
+ /** 是否锁定宽高比。 */
19
+ lockAspectRatio: boolean;
20
+ /** 强制保持不变的局部缩放轴。 */
21
+ lockedAxis?: 'x' | 'y';
22
+ };
23
+ /** 锚定缩放的绝对变换结果。 */
24
+ export type AnchoredResizeResult = {
25
+ /** 相对 pointer down 快照的总缩放,而非相对上一帧的增量。 */
26
+ totalScalar: Vector3;
27
+ /** 相对 pointer down 快照的总世界位移。 */
28
+ totalTranslation: Vector3;
29
+ };
30
+ /**
31
+ * 由初始快照计算当前边或角点缩放的绝对结果。
32
+ *
33
+ * 当前指针决定“固定点 → 手柄”的有符号比例;属性绕其真实 resizeOrigin 变化,
34
+ * 再反算位移使 fixedPoint 回到原坐标。
35
+ * @param geometry 交互开始时冻结的几何
36
+ * @param pointer 当前指针世界坐标
37
+ * @param options 手柄类型和比例约束
38
+ * @returns 相对交互起点的绝对缩放和位移
39
+ */
40
+ export declare function calculateAnchoredResize(geometry: AnchoredResizeGeometry, pointer: Vector3, options: AnchoredResizeOptions): AnchoredResizeResult;
@@ -0,0 +1,2 @@
1
+ export * from './transform-types';
2
+ export * from './resize-selection-gizmo';
@@ -0,0 +1,364 @@
1
+ import type { VFXItem } from '@galacean/effects';
2
+ import { type InputEventKey, type InputEventMouseButton, type InputEventMouseMotion } from '@galacean/effects';
3
+ import type { Control } from '@galacean/effects-plugin-gui';
4
+ import type { Plane } from '@galacean/effects-math/es/extension/index';
5
+ import { Box2, Circle, Line2 } from '@galacean/effects-math/es/extension/index';
6
+ import type { Matrix3 } from '../../math';
7
+ import { Vector2, Vector3 } from '../../math';
8
+ import { Gizmo } from '../../gizmo';
9
+ import type { GizmoOwner } from '../../gizmo-owner';
10
+ import { GizmoType } from '../../gizmo-type';
11
+ import { type GestureCursorResult } from '../../cursor';
12
+ import type { ResizeSelectionConfig } from '../../configs/types';
13
+ import { TransformType } from './transform-types';
14
+ /** 单选信息标签的元素图标类型。 */
15
+ export declare enum ResizeSelectionIconType {
16
+ /** 图片。 */
17
+ IMAGE = "image",
18
+ /** 组合。 */
19
+ GROUP = "group",
20
+ /** 文本。 */
21
+ TEXT = "text",
22
+ /** 视频。 */
23
+ VIDEO = "video",
24
+ /** 动效。 */
25
+ EFFECTS = "effects",
26
+ /** 画板。 */
27
+ FRAME = "frame",
28
+ /** 不显示图标。 */
29
+ NULL = "null"
30
+ }
31
+ /** 缩放角点的桌面端命中区域边长;视觉手柄仍由 scaleCircleSize 控制。 */
32
+ export declare const SCALE_CORNER_HIT_SIZE = 14;
33
+ /** 缩放选区 Gizmo 的交互配置。 */
34
+ export type ResizeSelectionGizmoOptions = {
35
+ /** 是否允许缩放;关闭时仍绘制选区线框。 */
36
+ interactive?: boolean;
37
+ };
38
+ /** 绘制选区线框,并通过边与角点手柄缩放选中元素。 */
39
+ export declare class ResizeSelectionGizmo extends Gizmo {
40
+ readonly type: GizmoType;
41
+ /** 光标结果。 */
42
+ cursorResult: GestureCursorResult;
43
+ /** 当前光标视图坐标,用于绘制指针与变换原点,每 mousemove 更新。 */
44
+ cursorPoint: Vector2;
45
+ /** ResizeSelection 手柄上一帧的 Control 本地坐标,用于缩放位移增量计算。 */
46
+ lastPoint: Vector2;
47
+ /** 变换框线框数据。 */
48
+ wireframe: ResizeSelectionWireframe;
49
+ /** 交互类型。 */
50
+ activeType: TransformType;
51
+ /** 上一帧鼠标射线碰撞位置。 */
52
+ lastWorldPosition: Vector3;
53
+ /** 是否为锁定比例缩放。 */
54
+ _isLockScale: boolean;
55
+ /** 当前交互平面,initInteractionPlane 写入。 */
56
+ interactionPlane: Plane;
57
+ private configOff?;
58
+ /** 边与角点共用一次绝对缩放快照。 */
59
+ private resizeSession;
60
+ /** ResizeSelection 自身的缩放手柄是否持有输入;移动与角旋转由独立行为持有。 */
61
+ private handlesActive;
62
+ /** 是否忽略所有交互。 */
63
+ private _ignoreInteraction;
64
+ /** 当前单选元素的图标类型。 */
65
+ private iconType;
66
+ /** 类型图标纹理缓存(懒加载,URL 变化时刷新)。 */
67
+ private iconTextures;
68
+ /** 类型图标纹理加载中的 Promise,避免重复发起加载。 */
69
+ private iconTexturePromises;
70
+ /** 缩放开关。 */
71
+ private scaleEnabled;
72
+ /** 是否允许当前 Gizmo 接收缩放输入。 */
73
+ private readonly interactionEnabled;
74
+ /**
75
+ * 创建选区缩放 Gizmo 并监听配置变化。
76
+ * @param owner Gizmo 宿主。
77
+ * @param options 缩放交互配置。
78
+ */
79
+ constructor(owner: GizmoOwner, options?: ResizeSelectionGizmoOptions);
80
+ /** 选中的元素列表(直读 selection)。 */
81
+ get selectedItems(): VFXItem[];
82
+ /** 当前选区缩放配置。 */
83
+ get config(): Readonly<ResizeSelectionConfig>;
84
+ /** 取是否锁定比例缩放。 */
85
+ get isLockScale(): boolean;
86
+ /**
87
+ * 设置锁定比例缩放开关。
88
+ * @param state 是否锁定比例。
89
+ */
90
+ set isLockScale(state: boolean);
91
+ /** 取当前视口矩阵的水平缩放系数。 */
92
+ get viewScale(): number;
93
+ /** 取是否忽略所有交互。 */
94
+ get ignoreInteraction(): boolean;
95
+ /**
96
+ * 设置是否忽略交互,并同步角点可用状态。
97
+ * @param state 是否忽略交互。
98
+ */
99
+ set ignoreInteraction(state: boolean);
100
+ /**
101
+ * 忽略键盘按下,修饰键状态由鼠标事件提供。
102
+ * @param _keyCode 键盘按下事件。
103
+ */
104
+ onKeyDown(_keyCode: InputEventKey): void;
105
+ /**
106
+ * 忽略键盘抬起,修饰键状态由鼠标事件提供。
107
+ * @param _keyCode 键盘抬起事件。
108
+ */
109
+ onKeyUp(_keyCode: InputEventKey): void;
110
+ /**
111
+ * 更新缩放手柄拖拽或悬停命中状态。
112
+ * @param event 鼠标移动事件。
113
+ */
114
+ onMouseMove(event: InputEventMouseMotion): void;
115
+ /**
116
+ * 继续当前缩放手柄拖拽。
117
+ * @param event 鼠标拖拽事件。
118
+ */
119
+ onMouseDrag(event: InputEventMouseMotion): void;
120
+ /** 鼠标离开交互层时清除非拖拽状态下的手柄命中与光标。 */
121
+ onMouseLeave(): void;
122
+ /**
123
+ * 命中缩放手柄时开始变换会话。
124
+ * @param event 鼠标按下事件。
125
+ */
126
+ onMouseDown(event: InputEventMouseButton): void;
127
+ /**
128
+ * 结束当前缩放手柄拖拽。
129
+ * @param event 鼠标抬起事件。
130
+ */
131
+ onMouseUp(event: InputEventMouseButton): void;
132
+ /**
133
+ * 刷新指针结果。
134
+ * @param activeType 交互类型
135
+ * @param angle 指针角度
136
+ */
137
+ refreshCursorResult(activeType: TransformType, angle?: number): void;
138
+ /** 在每帧更新时刷新选区线框及失效的光标状态。 */
139
+ onUpdate(): void;
140
+ /**
141
+ * 根据鼠标点位置判定当前交互类型(缩放/平移),
142
+ * 并写入 activeType 与线框的交互方向、缩放角点;未命中则置 NULL。
143
+ * @param point 视口坐标
144
+ */
145
+ refreshTransformType(point: Vector2): void;
146
+ /**
147
+ * 根据选中元素刷新变换线框:计算包围盒、子元素盒与缩放角点;
148
+ * 单选时根据元素类型决定图标类型;成组不生成缩放角点。
149
+ */
150
+ refreshWireframeBySelectedItems(): void;
151
+ /**
152
+ * 初始化当前变换的交互平面与缩放会话。
153
+ * @param viewportPoint 指针视口坐标。
154
+ */
155
+ initInteractionPlane(viewportPoint: Vector2): void;
156
+ /**
157
+ * 绘制选区线框、缩放手柄与单选信息标签。
158
+ * @param control 绘制控制器。
159
+ */
160
+ draw(control: Control): void;
161
+ /** 释放配置监听器。 */
162
+ dispose(): void;
163
+ /** @returns 当前是否存在可操作的选中元素。 */
164
+ private isApplicableSelection;
165
+ /** @returns 当前选区是否包含处于 loading 状态的元素。 */
166
+ private hasLoadingSelection;
167
+ /** 清除缩放手柄悬停状态并恢复默认光标。 */
168
+ private clearHandleHover;
169
+ /**
170
+ * 根据指针位移更新缩放手柄交互。
171
+ * @param event 鼠标拖拽事件。
172
+ * @returns 是否处理了拖拽。
173
+ */
174
+ private updateHandleDrag;
175
+ /** 初始化一次变换算法需要的视口交互平面;事件由持有输入会话的 Gizmo 发出。 */
176
+ private beginTransformOperation;
177
+ /** 清理一次变换算法运行态,不改写当前线框命中类型。 */
178
+ private resetTransformOperation;
179
+ /**
180
+ * 提交缩放手柄拖拽并清理会话。
181
+ * @param event 鼠标抬起事件。
182
+ * @returns 是否完成了提交。
183
+ */
184
+ private finishHandleDrag;
185
+ /**
186
+ * 按最终指针位置刷新线框命中与光标。
187
+ * @param _event 鼠标抬起事件。
188
+ */
189
+ private refreshAfterPointerUp;
190
+ /**
191
+ * 获取元素的信息标签图标类型。
192
+ * @param item 播放器元素。
193
+ * @returns 图标类型。
194
+ */
195
+ private getIconType;
196
+ /**
197
+ * 获取元素的信息标签名称。
198
+ * @param item 播放器元素。
199
+ * @returns 显示名称。
200
+ */
201
+ private getItemInfoName;
202
+ /** @returns 当前选框在视口中的局部单位轴。 */
203
+ private boxLocalAxes;
204
+ /**
205
+ * 查找文本宽度交互正在拖动的边。
206
+ * @param center 选框中心。
207
+ * @param interactiveDirection 交互方向。
208
+ * @returns 当前被拖动的边。
209
+ */
210
+ private draggedWidthEdge;
211
+ /** 是否为单个文字元素选区。 */
212
+ private isSingleTextSelection;
213
+ /**
214
+ * 命中线框边缩放区域。角点由调用方优先判定,边命中采用到线段的屏幕距离,
215
+ * 因而旋转元素也沿真实边工作,而不是沿轴对齐 AABB 工作。
216
+ * @param point 视口指针
217
+ * @param textVerticalOnly 单文本时只开放上/下边;左/右边保留给文字宽度手柄
218
+ */
219
+ private findScaleEdge;
220
+ /**
221
+ * 查找指针命中的缩放角点。
222
+ * @param point 指针视口坐标。
223
+ * @returns 命中的缩放角点。
224
+ */
225
+ private findScaleCorner;
226
+ /**
227
+ * 获取被拖边对边的中点。
228
+ * @param scaleEdgeCorners 被拖边的两个端点。
229
+ * @returns 对边中点。
230
+ */
231
+ private oppositeScaleEdgeCenter;
232
+ /**
233
+ * 获取被拖角点的对角点。
234
+ * @param scaleCorner 被拖角点。
235
+ * @returns 对角点。
236
+ */
237
+ private oppositeScaleCorner;
238
+ /**
239
+ * 创建按下时冻结的绝对缩放会话。
240
+ * @param item 被缩放元素。
241
+ * @param itemMatrix 元素世界矩阵。
242
+ * @param transformOrigin 变换原点。
243
+ * @param viewportPoint 指针视口坐标。
244
+ * @param initialHandleView 初始手柄视口位置。
245
+ * @param fixedPointView 固定点视口位置。
246
+ * @param handleKind 手柄类型。
247
+ * @param textResizeMode 文本缩放模式。
248
+ * @returns 缩放会话;坐标转换失败时返回 undefined。
249
+ */
250
+ private createAnchoredResizeSession;
251
+ /**
252
+ * 按 ResizeSelectionIconType 取对应配置的图标 URL。
253
+ * @param type 图标类型
254
+ * @returns 图标 URL;NULL 类型返回空字符串
255
+ */
256
+ private getIconUrl;
257
+ /**
258
+ * 配置变更时刷新类型图标纹理:URL 变化的图标销毁旧纹理并清空缓存,
259
+ * 下次 draw 时会按新 URL 懒加载。
260
+ * @param previous 变更前配置
261
+ * @param current 变更后配置
262
+ */
263
+ private refreshIconSprites;
264
+ /**
265
+ * 根据配置变化刷新图标纹理缓存。
266
+ * @param change 选区缩放配置变更。
267
+ */
268
+ private onConfigChange;
269
+ /**
270
+ * 获取类型图标纹理(懒加载)。
271
+ * 命中且未销毁则直接返回;否则发起一次异步加载并返回 undefined(本帧跳过图标,
272
+ * 加载完成后由持续渲染循环自动重绘)。
273
+ * @param type 图标类型
274
+ * @param engine effects 引擎实例(取自 control)
275
+ * @returns 命中的纹理;未命中或加载中时返回 undefined
276
+ */
277
+ private getIconTexture;
278
+ /**
279
+ * 绘制单选元素的名称、尺寸与类型图标。
280
+ * @param control 绘制控制器。
281
+ * @param sizeTextColor 尺寸文本颜色。
282
+ * @param nameTextColor 名称文本颜色。
283
+ */
284
+ private renderItemInfo;
285
+ /**
286
+ * 纯判定:鼠标点命中的交互类型(缩放/平移),未命中返回 NULL。
287
+ * 只读,不写 activeType/wireframe。供 refreshTransformType 复用。
288
+ * @param point 视口坐标
289
+ */
290
+ private computeTransformType;
291
+ /**
292
+ * 处理角点或边缩放交互。
293
+ * @param shift 本次鼠标位移增量。
294
+ * @param interactiveDirection 交互方向向量。
295
+ * @param event 鼠标拖拽事件。
296
+ * @returns 光标旋转角度。
297
+ */
298
+ private handleScale;
299
+ /**
300
+ * 根据按下快照计算并应用绝对缩放。
301
+ * @param pointerView 当前指针视口位置。
302
+ * @param interactiveDirection 初始交互方向。
303
+ * @param event 鼠标拖拽事件。
304
+ * @returns 光标旋转角度。
305
+ */
306
+ private handleAnchoredResize;
307
+ /**
308
+ * 将绝对缩放结果应用到会话快照。
309
+ * @param session 缩放会话。
310
+ * @param resize 绝对缩放结果。
311
+ */
312
+ private applyAnchoredResize;
313
+ /**
314
+ * 将世界总位移转换到父级局部坐标并写入位置。
315
+ * @param session 缩放会话。
316
+ * @param totalWorldTranslation 世界空间累计位移。
317
+ */
318
+ private setResizePosition;
319
+ /**
320
+ * 处理文本左右边的宽度缩放。
321
+ * @param shift 本次鼠标位移增量。
322
+ * @param interactiveDirection 交互方向向量。
323
+ * @param event 鼠标拖拽事件。
324
+ * @returns 光标旋转角度。
325
+ */
326
+ private handleWidthScale;
327
+ /**
328
+ * 将手柄位置吸附到最近目标。
329
+ * @param point 原始手柄位置。
330
+ * @returns 吸附后的手柄位置。
331
+ */
332
+ private snapHandlePoint;
333
+ }
334
+ /** 选区线框的视口几何与交互状态。 */
335
+ export type ResizeSelectionWireframe = {
336
+ /** 线框四条边 */
337
+ edges: Line2[];
338
+ /** 主线框归一化 Box2 到视图的变换 */
339
+ transform?: Matrix3;
340
+ /** 缩放角点碰撞圆 */
341
+ scaleCorners: Circle[];
342
+ /** 单文本左右两侧的宽度调整手柄 */
343
+ widthScaleAreas: Matrix3[];
344
+ /** 线框是否可交互 */
345
+ interactive: boolean;
346
+ /** 角点是否可点 */
347
+ cornerEnable: boolean;
348
+ /** 当前元素包围盒 */
349
+ box: Box2;
350
+ /** 变换锚点 */
351
+ anchor: Vector2;
352
+ /** 命中外扩包围盒(含角点区域) */
353
+ totalBox: Box2;
354
+ /** 多选时子元素的视图变换 */
355
+ childrenTransforms: Matrix3[];
356
+ /** 当前交互类型 */
357
+ activeType: TransformType;
358
+ /** 交互方向向量 */
359
+ interactiveDirection: Vector2;
360
+ /** 命中的缩放角点 */
361
+ scaleCorner?: Vector2;
362
+ /** 命中的缩放边的两端角点 */
363
+ scaleEdgeCorners?: Vector2[];
364
+ };
@@ -0,0 +1,27 @@
1
+ import type { Vector2, Vector3 } from '../../math';
2
+ /** 选区变换的语义类型;由移动、缩放与角旋转行为共同用于命令事务。 */
3
+ export declare enum TransformType {
4
+ /** 无变换。 */
5
+ NULL = "null",
6
+ /** 位移。 */
7
+ TRANSLATION = "translation",
8
+ /** 旋转。 */
9
+ ROTATION = "rotation",
10
+ /** 双轴缩放。 */
11
+ SCALE = "scale",
12
+ /** 文本宽度缩放。 */
13
+ WIDTH_SCALE = "width-scale"
14
+ }
15
+ /** 选区缩放会话数据。 */
16
+ export type ScaleParam = {
17
+ /** 变换中心。 */
18
+ center: Vector3;
19
+ /** 当前手柄位置。 */
20
+ corner: Vector3;
21
+ /** 指针相对位移。 */
22
+ shift: Vector3;
23
+ /** 上一帧缩放量。 */
24
+ lastScalar: Vector3;
25
+ /** 距中心最远的角点。 */
26
+ farthestCorner: Vector2;
27
+ };