@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.
- 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
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_async_to_generator.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_set_prototype_of.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_inherits.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_is_native_reflect_construct.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_construct.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_get_prototype_of.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_is_native_function.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_wrap_native_super.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_array_like_to_array.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_unsupported_iterable_to_array.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_create_for_of_iterator_helper_loose.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_instanceof.js","../../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.es6.mjs","../src/constants.ts","../src/util.ts","../src/define.ts","../src/gizmo-vfx-item.ts","../src/math-utils.ts","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_extends.js","../src/geometry/geometry.ts","../src/geometry/sphere.ts","../src/geometry/box.ts","../src/geometry/cylinder.ts","../src/geometry/cone.ts","../src/geometry/torus.ts","../src/geometry/plane.ts","../src/geometry/frustum.ts","../src/geometry/direction-light.ts","../src/geometry/point-light.ts","../src/geometry/spot-light.ts","../src/geometry/floor-line-edge.ts","../src/geometry/index.ts","../src/mesh.ts","../src/raycast.ts","../src/shape.ts","../src/wireframe.ts","../src/gizmo-component.ts","../src/gizmo-loader.ts","../src/index.ts"],"sourcesContent":["function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) resolve(value);\n else Promise.resolve(value).then(_next, _throw);\n}\nfunction _async_to_generator(fn) {\n return function() {\n var self = this, args = arguments;\n\n return new Promise(function(resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}\nexport { _async_to_generator as _ };\n","function _set_prototype_of(o, p) {\n _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {\n o.__proto__ = p;\n\n return o;\n };\n\n return _set_prototype_of(o, p);\n}\nexport { _set_prototype_of as _ };\n","import { _ as _set_prototype_of } from \"./_set_prototype_of.js\";\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } });\n\n if (superClass) _set_prototype_of(subClass, superClass);\n}\nexport { _inherits as _ };\n","function _is_native_reflect_construct() {\n // Since Reflect.construct can't be properly polyfilled, some\n // implementations (e.g. core-js@2) don't set the correct internal slots.\n // Those polyfills don't allow us to subclass built-ins, so we need to\n // use our fallback implementation.\n try {\n // If the internal slots aren't set, this throws an error similar to\n // TypeError: this is not a Boolean object.\n var result = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));\n } catch (_) {}\n return (_is_native_reflect_construct = function() {\n return !!result;\n })();\n}\n\nexport { _is_native_reflect_construct as _ };\n","import { _ as _is_native_reflect_construct } from \"./_is_native_reflect_construct.js\";\nimport { _ as _set_prototype_of } from \"./_set_prototype_of.js\";\nfunction _construct(Parent, args, Class) {\n if (_is_native_reflect_construct()) _construct = Reflect.construct;\n else {\n _construct = function construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n\n if (Class) _set_prototype_of(instance, Class.prototype);\n\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}\nexport { _construct as _ };\n","function _get_prototype_of(o) {\n _get_prototype_of = Object.setPrototypeOf ? Object.getPrototypeOf : function getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n\n return _get_prototype_of(o);\n}\nexport { _get_prototype_of as _ };\n","function _is_native_function(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\nexport { _is_native_function as _ };\n","import { _ as _construct } from \"./_construct.js\";\nimport { _ as _get_prototype_of } from \"./_get_prototype_of.js\";\nimport { _ as _is_native_function } from \"./_is_native_function.js\";\nimport { _ as _set_prototype_of } from \"./_set_prototype_of.js\";\n\nfunction _wrap_native_super(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n _wrap_native_super = function(Class) {\n if (Class === null || !_is_native_function(Class)) return Class;\n if (typeof Class !== \"function\") throw new TypeError(\"Super expression must either be null or a function\");\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return _construct(Class, arguments, _get_prototype_of(this).constructor);\n }\n Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } });\n\n return _set_prototype_of(Wrapper, Class);\n };\n\n return _wrap_native_super(Class);\n}\nexport { _wrap_native_super as _ };\n","function _array_like_to_array(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\nexport { _array_like_to_array as _ };\n","import { _ as _array_like_to_array } from \"./_array_like_to_array.js\";\n\nfunction _unsupported_iterable_to_array(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _array_like_to_array(o, minLen);\n\n var n = Object.prototype.toString.call(o).slice(8, -1);\n\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);\n}\nexport { _unsupported_iterable_to_array as _ };\n","import { _ as _unsupported_iterable_to_array } from \"./_unsupported_iterable_to_array.js\";\n\nfunction _create_for_of_iterator_helper_loose(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n\n if (it) return (it = it.call(o)).next.bind(it);\n // Fallback for engines without symbol support\n if (Array.isArray(o) || (it = _unsupported_iterable_to_array(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n\n var i = 0;\n\n return function() {\n if (i >= o.length) return { done: true };\n\n return { done: false, value: o[i++] };\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nexport { _create_for_of_iterator_helper_loose as _ };\n","function _instanceof(left, right) {\n if (right != null && typeof Symbol !== \"undefined\" && right[Symbol.hasInstance]) {\n return !!right[Symbol.hasInstance](left);\n } else return left instanceof right;\n}\nexport { _instanceof as _ };\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","import { glContext } from '@galacean/effects';\n\n// 坐标轴默认颜色\nexport const color = {\n xAxisColor: [216 / 255, 178 / 255, 76 / 255],\n yAxisColor: [38 / 255, 149 / 255, 235 / 255],\n zAxisColor: [134 / 255, 74 / 255, 245 / 255],\n};\nexport const renderMode = glContext.TRIANGLES;\n// 坐标轴默认图标\nexport const axisIconMap: Map<string, string> = new Map();\n\naxisIconMap.set(\n 'light', `data:image/png;base64,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`\n);\naxisIconMap.set(\n 'camera', `data:image/png;base64,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`\n);\naxisIconMap.set(\n 'posX', `data:image/png;base64,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\n RK5CYII=`\n);\naxisIconMap.set(\n 'posY', `data:image/png;base64,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`\n);\naxisIconMap.set(\n 'posZ', `data:image/png;base64,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`\n);\naxisIconMap.set(\n 'negX', `data:image/png;base64,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\n 5ErkJggg==`\n);\naxisIconMap.set(\n 'negY', `data:image/png;base64,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\n 5ErkJggg==`\n);\naxisIconMap.set(\n 'negZ', `data:image/png;base64,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`\n);\n","import { Texture, noop } from '@galacean/effects';\nimport type { Engine, math } from '@galacean/effects';\n\ntype Vector3 = math.Vector3;\n\n/**\n * 下载图片\n * @param imageUrl - 图片url\n * @returns 图片对象\n */\nexport async function createImage (imageUrl: string): Promise<HTMLImageElement> {\n const image = new Image();\n\n image.src = imageUrl;\n\n return new Promise<HTMLImageElement>((resolve, reject) => {\n image.onload = () => {\n resolve(image);\n };\n image.onerror = reject;\n });\n}\n\n/**\n * 创建 Texture 对象\n * @param engine - engine 对象\n * @param image - 图片对象\n * @returns 纹理\n */\nexport function createTexture (engine: Engine, image: HTMLImageElement, hookDestroy?: boolean): Texture {\n\n const texture = Texture.create(engine, { image });\n\n if (hookDestroy) {\n texture.dispose = noop;\n }\n\n return texture;\n}\n\n/**\n * 移动到距离目标点指定距离的位置\n * @param targetPos - 目标点\n * @param currentPos - 当前点\n * @returns 指定点\n */\nexport function moveToPointWidthFixDistance (targetPos: Vector3, currentPos: Vector3): Vector3 {\n const vecCameraItem = currentPos.clone().subtract(targetPos);\n\n const normalVecCameraItem = vecCameraItem.clone().normalize();\n const scalerVecCameraItem = normalVecCameraItem.clone().multiply(20);\n\n const vecScalerItem = vecCameraItem.clone().subtract(scalerVecCameraItem);\n const vecItemScaler = vecScalerItem.clone().multiply(-1);\n\n return currentPos.clone().add(vecItemScaler);\n}\n","import type { GeometryDrawMode, spec } from '@galacean/effects';\n\nexport interface GizmoVFXItemOptions {\n target: string,\n subType: GizmoSubType,\n renderMode?: GeometryDrawMode,\n type: 'editor-gizmo',\n color: spec.vec3,\n size?: number,\n depthTest?: boolean,\n}\n\nexport const GizmoVFXItemType = 'gizmo' as spec.ItemType;\n\n/**\n * Gizmo 类型\n */\nexport enum GizmoSubType {\n particleEmitter = 1,\n modelWireframe = 2,\n box,\n sphere,\n cylinder,\n cone,\n torus,\n sprite,\n plane,\n rotation,\n translation,\n scale,\n viewHelper,\n camera,\n frustum,\n light,\n directionLight,\n pointLight,\n spotLight,\n boundingBox,\n floorGrid,\n}\n","import { math } from '@galacean/effects';\n\nexport type Ray = math.Ray;\nexport type TriangleLike = math.TriangleLike;\ntype Vector3 = math.Vector3;\n\nconst { Vector3, Ray } = math;\n\n/**\n * 包围盒类型\n */\nexport enum BoundingType {\n box,\n sphere,\n triangle,\n line\n}\n\n/**\n * 线条包围盒类型\n */\nexport interface GizmoItemBoundingLine {\n type: BoundingType.line,\n // 线条包围盒两端点\n points: [Vector3, Vector3],\n // 射线与线条距离阈值\n width: number,\n}\n\n/**\n * 立方体包围盒类型\n */\nexport interface GizmoItemBoundingBox {\n type: BoundingType.box,\n //包围形状相对于元素位置的偏移,默认[0,0,0]\n center?: Vector3,\n //包围盒的xyz长度,当type为box时生效\n size: Vector3,\n}\n\n/**\n * 球体包围盒类型\n */\nexport interface GizmoItemBoundingSphere {\n type: BoundingType.sphere,\n //包围形状相对于元素位置的偏移,默认[0,0,0]\n center?: Vector3,\n //包围球的半径,当type为sphere时生效\n radius: number,\n}\n\n/**\n * 三角数组包围盒类型\n */\nexport interface GizmoItemBoundingTriangle {\n type: BoundingType.triangle,\n triangles: TriangleLike[],\n backfaceCulling?: boolean,\n}\n\nexport type GizmoItemBounding =\n | GizmoItemBoundingBox\n | GizmoItemBoundingSphere\n | GizmoItemBoundingTriangle\n | GizmoItemBoundingLine\n ;\n","import { math } from '@galacean/effects';\n\ntype Vector2 = math.Vector2;\ntype Vector3 = math.Vector3;\n\nconst { Matrix4, Vector2 } = math;\n\nexport function distanceOfPointAndLine (point: Vector2, line: [Vector2, Vector2]): { distance: number, isInLine: boolean } {\n //三角形三个边长\n const AC = new Vector2();\n const BC = new Vector2();\n const AB = new Vector2();\n\n AC.subtractVectors(point, line[0]);\n BC.subtractVectors(point, line[1]);\n AB.subtractVectors(line[1], line[0]);\n const lengthAC = AC.length();\n const lengthBC = BC.length();\n const lengthAB = AB.length();\n\n //利用海伦公式计算三角形面积\n //周长的一半\n const P = (lengthAC + lengthBC + lengthAB) / 2;\n const allArea = Math.abs(Math.sqrt(P * (P - lengthAC) * (P - lengthBC) * (P - lengthAB)));\n //普通公式计算三角形面积反推点到线的垂直距离\n const distance = (2 * allArea) / lengthAB;\n const l1 = Math.sqrt(Math.pow(lengthAC, 2) - Math.pow(distance, 2));\n const l2 = Math.sqrt(Math.pow(lengthBC, 2) - Math.pow(distance, 2));\n let isInLine = false;\n\n if (l1 <= lengthAB && l2 <= lengthAB) {\n isInLine = true;\n }\n\n return {\n distance,\n isInLine,\n };\n}\n\nexport function projectionOfPointAndLine (point: Vector2, line: [Vector3, Vector3]): Vector3 {\n const AC = new Vector2();\n const BC = new Vector2();\n const AB = new Vector2();\n const line0 = line[0].toVector2();\n const line1 = line[1].toVector2();\n\n AC.subtractVectors(point, line0);\n BC.subtractVectors(point, line1);\n AB.subtractVectors(line1, line0);\n const lengthAC = AC.length();\n const lengthBC = BC.length();\n const lengthAB = AB.length();\n\n //利用海伦公式计算三角形面积\n //周长的一半\n const P = (lengthAC + lengthBC + lengthAB) / 2;\n const allArea = Math.abs(Math.sqrt(P * (P - lengthAC) * (P - lengthBC) * (P - lengthAB)));\n //普通公式计算三角形面积反推点到线的垂直距离\n const distance = (2 * allArea) / lengthAB;\n const l1 = Math.sqrt(Math.pow(lengthAC, 2) - Math.pow(distance, 2));\n const l2 = Math.sqrt(Math.pow(lengthBC, 2) - Math.pow(distance, 2));\n\n const worldAB = line[1].clone().subtract(line[0]);\n\n const worldAP = worldAB.clone().multiply(l1 / (l1 + l2));\n\n const worldP = line[0].clone().add(worldAP);\n\n return worldP;\n}\n\nexport function computeOrthographicOffCenter (\n left: number,\n right: number,\n bottom: number,\n top: number,\n near: number,\n far: number\n) {\n let a = 1.0 / (right - left);\n let b = 1.0 / (top - bottom);\n let c = 1.0 / (far - near);\n\n const tx = -(right + left) * a;\n const ty = -(top + bottom) * b;\n const tz = -(far + near) * c;\n\n a *= 2.0;\n b *= 2.0;\n c *= -2.0;\n\n return new Matrix4(\n a,\n 0.0,\n 0.0,\n 0.0,\n //\n 0.0,\n b,\n 0.0,\n 0.0,\n //\n 0.0,\n 0.0,\n c,\n 0.0,\n //\n tx,\n ty,\n tz,\n 1.0,\n );\n}\n","function _extends() {\n _extends = Object.assign || function assign(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\nexport { _extends as _ };\n","/**\n * 基础几何数据[抽象类,不可以直接用来初始化]\n */\nexport abstract class GeometryData {\n points: number[] = [];\n uvs: number[] = [];\n normals: number[] = [];\n indices: number[] = [];\n\n /**\n * 构件 XY 平面圆(圆心为(0, 0, z))\n * @param radius - 圆半径\n * @param z - z 值\n * @param segments - 圆精度\n * @param thetaStart - 起始弧度\n * @param thetaLength - 终止弧度\n * @param startIndex - 索引起始值\n * @param points - 点数据\n * @param indices - 索引数据\n */\n createXYPlaneCircle (\n radius: number,\n z: number,\n segments: number,\n thetaStart: number,\n thetaLength: number,\n startIndex: number,\n points: number[],\n indices: number[],\n ) {\n for (let i = 0; i < segments; i++) {\n const theta = thetaStart + i * thetaLength / segments;\n const x = radius * Math.cos(theta);\n const y = radius * Math.sin(theta);\n\n points.push(x, y, z);\n indices.push(startIndex + i, startIndex + (i + 1) % segments);\n }\n }\n\n /**\n * 构件 XZ 平面圆(圆心为(0, y, 0))\n * @param radius - 圆半径\n * @param y - y 值\n * @param segments - 圆精度\n * @param thetaStart - 起始弧度\n * @param thetaLength - 终止弧度\n * @param startIndex - 索引起始值\n * @param points - 点数据\n * @param indices - 索引数据\n */\n createXZPlaneCircle (\n radius: number,\n y: number,\n segments: number,\n thetaStart: number,\n thetaLength: number,\n startIndex: number,\n points: number[],\n indices: number[],\n ) {\n for (let i = 0; i < segments; i++) {\n const theta = thetaStart + i * thetaLength / segments;\n const x = radius * Math.cos(theta);\n const z = radius * Math.sin(theta);\n\n points.push(x, y, z);\n indices.push(startIndex + i, startIndex + (i + 1) % segments);\n }\n }\n\n /**\n * 构件 YZ 平面圆(圆心为(x, 0, 0))\n * @param radius - 圆半径\n * @param x - x 值\n * @param segments - 圆精度\n * @param thetaStart - 起始弧度\n * @param thetaLength - 终止弧度\n * @param startIndex - 索引起始值\n * @param points - 点数据\n * @param indices - 索引数据\n */\n createYZPlaneCircle (\n radius: number,\n x: number,\n segments: number,\n thetaStart: number,\n thetaLength: number,\n startIndex: number,\n points: number[],\n indices: number[],\n ) {\n for (let i = 0; i < segments; i++) {\n const theta = thetaStart + i * thetaLength / segments;\n const z = radius * Math.cos(theta);\n const y = radius * Math.sin(theta);\n\n points.push(x, y, z);\n indices.push(startIndex + i, startIndex + (i + 1) % segments);\n }\n }\n}\n","import { math } from '@galacean/effects';\nimport { GeometryData } from './geometry';\n\nconst { Vector3 } = math;\n\n/**\n *\n */\nexport class SphereGeometryData extends GeometryData {\n /**\n *\n * @param radius\n * @param widthSegments\n * @param heightSegments\n * @param phiStart\n * @param phiLength\n * @param thetaStart\n * @param thetaLength\n */\n constructor (\n radius = 1,\n widthSegments = 8,\n heightSegments = 6,\n phiStart = 0,\n phiLength = Math.PI * 2,\n thetaStart = 0,\n thetaLength = Math.PI,\n ) {\n super();\n\n // 限制至少需要分为六块以保持形状\n widthSegments = Math.max(3, Math.floor(widthSegments));\n heightSegments = Math.max(2, Math.floor(heightSegments));\n\n const thetaEnd = Math.min(thetaStart + thetaLength, Math.PI);\n const grid = [];\n let index = 0;\n\n for (let iy = 0; iy <= heightSegments; iy++) {\n const verticesRow = [];\n const v = iy / heightSegments;\n\n let uOffset = 0;\n\n if (iy == 0 && thetaStart == 0) {\n uOffset = 0.5 / widthSegments;\n } else if (iy == heightSegments && thetaEnd == Math.PI) {\n uOffset = - 0.5 / widthSegments;\n }\n\n for (let ix = 0; ix <= widthSegments; ix++) {\n const u = ix / widthSegments;\n\n // point\n const x = - radius * Math.cos(phiStart + u * phiLength) * Math.sin(thetaStart + v * thetaLength);\n const y = radius * Math.cos(thetaStart + v * thetaLength);\n const z = radius * Math.sin(phiStart + u * phiLength) * Math.sin(thetaStart + v * thetaLength);\n\n this.points.push(x, y, z);\n\n // normal\n const normal = new Vector3(x, y, z).normalize();\n\n this.normals.push(...normal.toArray());\n\n // uv\n this.uvs.push(u + uOffset, 1 - v);\n\n verticesRow.push(index++);\n }\n\n grid.push(verticesRow);\n }\n\n // indices\n for (let iy = 0; iy < heightSegments; iy++) {\n for (let ix = 0; ix < widthSegments; ix++) {\n const a = grid[iy][ix + 1];\n const b = grid[iy][ix];\n const c = grid[iy + 1][ix];\n const d = grid[iy + 1][ix + 1];\n\n if (iy !== 0 || thetaStart > 0) { this.indices.push(a, b, d); }\n if (iy !== heightSegments - 1 || thetaEnd < Math.PI) { this.indices.push(b, c, d); }\n }\n }\n }\n}\n","import type { spec } from '@galacean/effects';\nimport { GeometryData } from './geometry';\n\n// 面造型未单独抽离, 整个包围盒只接受一个材质\nexport class BoxGeometryData extends GeometryData {\n /**\n *\n * @param width\n * @param height\n * @param depth\n */\n constructor (width = 1, height = 1, depth = 1) {\n super();\n\n let numberOfVertices = 0;\n\n buildPlane(2, 1, 0, - 1, - 1, depth, height, width, this.points, this.uvs, this.normals, this.indices); // px\n buildPlane(2, 1, 0, 1, - 1, depth, height, - width, this.points, this.uvs, this.normals, this.indices); // nx\n buildPlane(0, 2, 1, 1, 1, width, depth, height, this.points, this.uvs, this.normals, this.indices); // py\n buildPlane(0, 2, 1, 1, - 1, width, depth, - height, this.points, this.uvs, this.normals, this.indices); // ny\n buildPlane(0, 1, 2, 1, - 1, width, height, depth, this.points, this.uvs, this.normals, this.indices); // pz\n buildPlane(0, 1, 2, - 1, - 1, width, height, - depth, this.points, this.uvs, this.normals, this.indices); // nz\n\n function buildPlane (u: number, v: number, w: number, uDir: number,\n vDir: number, width: number, height: number, depth: number,\n points: number[], uvs: number[], normals: number[], indices: number[]) {\n\n const widthHalf = width / 2;\n const heightHalf = height / 2;\n const depthHalf = depth / 2;\n const point: spec.vec3 = [0, 0, 0];\n let vertexCounter = 0;\n\n for (let iy = 0; iy < 2; iy++) {\n const y = iy * height - heightHalf;\n\n for (let ix = 0; ix < 2; ix++) {\n const x = ix * width - widthHalf;\n\n point[u] = x * uDir;\n point[v] = y * vDir;\n point[w] = depthHalf;\n\n points.push(...point);\n\n point[u] = 0;\n point[v] = 0;\n point[w] = depth > 0 ? 1 : - 1;\n\n normals.push(...point);\n\n uvs.push(ix);\n uvs.push(1 - iy);\n\n vertexCounter += 1;\n }\n }\n\n for (let iy = 0; iy < 1; iy++) {\n for (let ix = 0; ix < 1; ix++) {\n const a = numberOfVertices + ix + 2 * iy;\n const b = numberOfVertices + ix + 2 * (iy + 1);\n const c = numberOfVertices + (ix + 1) + 2 * (iy + 1);\n const d = numberOfVertices + (ix + 1) + 2 * iy;\n\n indices.push(a, b, d);\n indices.push(b, c, d);\n }\n }\n\n numberOfVertices += vertexCounter;\n }\n }\n}\n","import { math } from '@galacean/effects';\nimport { GeometryData } from './geometry';\n\nconst { Vector3 } = math;\n\n/**\n *\n */\nexport class CylinderGeometryData extends GeometryData {\n /**\n *\n * @param radiusTop\n * @param radiusBottom\n * @param height\n * @param radialSegments\n * @param heightSegments\n * @param openEnded\n * @param thetaStart\n * @param thetaLength\n */\n constructor (\n radiusTop = 1,\n radiusBottom = 1,\n height = 1,\n radialSegments = 8,\n heightSegments = 1,\n openEnded = false,\n thetaStart = 0,\n thetaLength = Math.PI * 2,\n ) {\n super();\n radialSegments = Math.floor(radialSegments);\n heightSegments = Math.floor(heightSegments);\n\n let index = 0;\n const indexArray: number[][] = [];\n const halfHeight = height / 2;\n\n generateTorso(this.points, this.uvs, this.normals, this.indices);\n\n if (openEnded === false) {\n if (radiusTop > 0) { generateCap(true, this.points, this.uvs, this.normals, this.indices); }\n if (radiusBottom > 0) { generateCap(false, this.points, this.uvs, this.normals, this.indices); }\n }\n\n function generateTorso (points: number[], uvs: number[], normals: number[], indices: number[]) {\n // this will be used to calculate the normal\n const slope = (radiusBottom - radiusTop) / height;\n\n for (let y = 0; y <= heightSegments; y++) {\n const indexRow = [];\n const v = y / heightSegments;\n\n const radius = v * (radiusBottom - radiusTop) + radiusTop;\n\n for (let x = 0; x <= radialSegments; x++) {\n const u = x / radialSegments;\n const theta = u * thetaLength + thetaStart;\n const sinTheta = Math.sin(theta);\n const cosTheta = Math.cos(theta);\n\n const px = radius * sinTheta;\n const py = - v * height + halfHeight;\n const pz = radius * cosTheta;\n\n points.push(px, py, pz);\n\n const normal = new Vector3(sinTheta, slope, cosTheta).normalize();\n\n normals.push(...normal.toArray());\n\n uvs.push(u, 1 - v);\n\n indexRow.push(index++);\n }\n indexArray.push(indexRow);\n }\n\n for (let x = 0; x < radialSegments; x++) {\n for (let y = 0; y < heightSegments; y++) {\n const a = indexArray[y][x];\n const b = indexArray[y + 1][x];\n const c = indexArray[y + 1][x + 1];\n const d = indexArray[y][x + 1];\n\n indices.push(a, b, d);\n indices.push(b, c, d);\n }\n }\n }\n\n function generateCap (top: boolean, points: number[], uvs: number[], normals: number[], indices: number[]) {\n const centerIndexStart = index;\n\n const radius = (top === true) ? radiusTop : radiusBottom;\n const sign = (top === true) ? 1 : - 1;\n\n for (let x = 1; x <= radialSegments; x++) {\n points.push(0, halfHeight * sign, 0);\n normals.push(0, sign, 0);\n uvs.push(0.5, 0.5);\n\n index++;\n }\n\n const centerIndexEnd = index;\n\n for (let x = 0; x <= radialSegments; x++) {\n\n const u = x / radialSegments;\n const theta = u * thetaLength + thetaStart;\n\n const cosTheta = Math.cos(theta);\n const sinTheta = Math.sin(theta);\n\n const px = radius * sinTheta;\n const py = halfHeight * sign;\n const pz = radius * cosTheta;\n\n points.push(px, py, pz);\n\n normals.push(0, sign, 0);\n\n const uvU = (cosTheta * 0.5) + 0.5;\n const uvV = (sinTheta * 0.5 * sign) + 0.5;\n\n uvs.push(uvU, uvV);\n\n index++;\n }\n\n for (let x = 0; x < radialSegments; x++) {\n const c = centerIndexStart + x;\n const i = centerIndexEnd + x;\n\n if (top === true) {\n indices.push(i, i + 1, c);\n } else {\n indices.push(i + 1, i, c);\n }\n }\n }\n }\n}\n","import { CylinderGeometryData } from './cylinder';\n\n/**\n *\n */\nexport class ConeGeometryData extends CylinderGeometryData {\n /**\n *\n * @param radius\n * @param height\n * @param radialSegments\n * @param heightSegments\n * @param openEnded\n * @param thetaStart\n * @param thetaLength\n */\n constructor (\n radius = 1,\n height = 1,\n radialSegments = 8,\n heightSegments = 1,\n openEnded = false,\n thetaStart = 0,\n thetaLength = Math.PI * 2,\n ) {\n super(0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength);\n }\n}\n","import { math } from '@galacean/effects';\nimport { GeometryData } from './geometry';\n\nconst { Vector3 } = math;\n\n/**\n *\n */\nexport class TorusGeometryData extends GeometryData {\n /**\n *\n * @param radius\n * @param tube\n * @param radialSegments\n * @param tubularSegments\n * @param arc\n */\n constructor (\n radius = 1,\n tube = 0.4,\n radialSegments = 64,\n tubularSegments = 64,\n arc = Math.PI * 2,\n ) {\n super();\n\n radialSegments = Math.floor(radialSegments);\n tubularSegments = Math.floor(tubularSegments);\n\n for (let j = 0; j <= radialSegments; j++) {\n for (let i = 0; i <= tubularSegments; i++) {\n\n const u = i / tubularSegments * arc;\n const v = j / radialSegments * Math.PI * 2;\n\n const px = (radius + tube * Math.cos(v)) * Math.cos(u);\n const py = (radius + tube * Math.cos(v)) * Math.sin(u);\n const pz = tube * Math.sin(v);\n\n this.points.push(px, py, pz);\n\n const cx = radius * Math.cos(u);\n const cy = radius * Math.sin(u);\n const p = new Vector3(px, py, pz);\n const c = new Vector3(cx, cy, 0);\n const normal = p.subtract(c).normalize();\n\n this.normals.push(...normal.toArray());\n\n this.uvs.push(i / tubularSegments);\n this.uvs.push(j / radialSegments);\n }\n }\n\n for (let j = 1; j <= radialSegments; j++) {\n for (let i = 1; i <= tubularSegments; i++) {\n const a = (tubularSegments + 1) * j + i - 1;\n const b = (tubularSegments + 1) * (j - 1) + i - 1;\n const c = (tubularSegments + 1) * (j - 1) + i;\n const d = (tubularSegments + 1) * j + i;\n\n this.indices.push(a, b, d);\n this.indices.push(b, c, d);\n }\n }\n }\n}\n","import { GeometryData } from './geometry';\n\n/**\n *\n */\nexport class PlaneGeometryData extends GeometryData {\n /**\n *\n * @param width\n * @param height\n * @param widthSegments\n * @param heightSegments\n */\n constructor (\n width = 1,\n height = 1,\n widthSegments = 1,\n heightSegments = 1,\n ) {\n super();\n\n const widthHalf = width / 2;\n const heightHalf = height / 2;\n\n const gridX = Math.floor(widthSegments);\n const gridY = Math.floor(heightSegments);\n\n const gridX1 = gridX + 1;\n const gridY1 = gridY + 1;\n\n const segmentWidth = width / gridX;\n const segmentHeight = height / gridY;\n\n for (let iy = 0; iy < gridY1; iy++) {\n const y = iy * segmentHeight - heightHalf;\n\n for (let ix = 0; ix < gridX1; ix++) {\n const x = ix * segmentWidth - widthHalf;\n\n this.points.push(x, - y, 0);\n this.normals.push(0, 0, 1);\n this.uvs.push(ix / gridX);\n this.uvs.push(1 - (iy / gridY));\n }\n }\n for (let iy = 0; iy < gridY; iy++) {\n for (let ix = 0; ix < gridX; ix++) {\n const a = ix + gridX1 * iy;\n const b = ix + gridX1 * (iy + 1);\n const c = (ix + 1) + gridX1 * (iy + 1);\n const d = (ix + 1) + gridX1 * iy;\n\n this.indices.push(a, b, d);\n this.indices.push(b, c, d);\n }\n }\n }\n}\n","import type { spec } from '@galacean/effects';\nimport { math } from '@galacean/effects';\nimport { GeometryData } from './geometry';\n\nconst { Euler, Vector3, Matrix4 } = math;\n\n/**\n *\n */\nexport class FrustumGeometryData extends GeometryData {\n /**\n *\n * @param position\n * @param rotation\n * @param fov\n * @param aspect\n * @param near\n * @param far\n */\n constructor (\n position: spec.vec3,\n rotation: spec.vec3,\n fov: number,\n aspect: number,\n near: number,\n far: number,\n ) {\n super();\n\n const fovY = fov / 180 * Math.PI;\n const ratio = aspect;\n const halfY = far * Math.tan(fovY / 2);\n const halfX = halfY * ratio;\n const point1 = new Vector3(halfX, halfY, far);\n const point2 = new Vector3(-halfX, halfY, far);\n const point3 = new Vector3(-halfX, -halfY, far);\n const point4 = new Vector3(halfX, -halfY, far);\n const matrix = Euler.fromArray(rotation).toMatrix4(new Matrix4());\n const result1 = matrix.transformPoint(point1).add(position);\n const result2 = matrix.transformPoint(point2).add(position);\n const result3 = matrix.transformPoint(point3).add(position);\n const result4 = matrix.transformPoint(point4).add(position);\n\n this.points.push(\n ...position,\n ...result1.toArray(), ...result2.toArray(),\n ...result3.toArray(), ...result4.toArray()\n );\n this.indices.push(0, 1, 0, 2, 0, 3, 0, 4, 1, 2, 2, 3, 3, 4, 4, 1);\n }\n}\n","import { GeometryData } from './geometry';\n\n/**\n * 方向光造型数据\n * lines\n */\nexport class DirectionLightData extends GeometryData {\n /**\n * 构造函数\n * @param radius - 圆半径\n * @param length - 光线长度\n * @param segments - 圆精度\n * @param linesNumber - 光线数量\n * @param thetaStart - 起始弧度\n * @param thetaLength - 终止弧度\n */\n constructor (\n radius = 1,\n length = 2,\n segments = 64,\n linesNumber = 8,\n thetaStart = 0,\n thetaLength = Math.PI * 2,\n ) {\n super();\n\n this.createXYPlaneCircle(radius, 0, segments, thetaStart, thetaLength, 0, this.points, this.indices);\n const start = segments % linesNumber / 2;\n const step = segments / linesNumber;\n\n for (let i = 0; i < linesNumber; i++) {\n const index = start + i * step;\n const x = this.points[3 * index];\n const y = this.points[3 * index + 1];\n const z = -length;\n\n this.points.push(x, y, z);\n this.indices.push(index, segments + i);\n }\n }\n}\n","import { GeometryData } from './geometry';\n\n/**\n * 点光源造型数据\n * lines\n */\nexport class PointLightData extends GeometryData {\n /**\n * 构造函数\n * @param range - 光照范围\n * @param segments - 圆精度\n * @param thetaStart - 起始弧度\n * @param thetaLength - 终止弧度\n */\n constructor (\n range = 10,\n segments = 64,\n thetaStart = 0,\n thetaLength = Math.PI * 2,\n ) {\n super();\n this.createXYPlaneCircle(range, 0, segments, thetaStart, thetaLength, 0, this.points, this.indices);\n this.createXZPlaneCircle(range, 0, segments, thetaStart, thetaLength, segments, this.points, this.indices);\n this.createYZPlaneCircle(range, 0, segments, thetaStart, thetaLength, 2 * segments, this.points, this.indices);\n }\n}\n","import { GeometryData } from './geometry';\n\n/**\n * 聚光灯造型数据\n * lines\n */\nexport class SpotLightData extends GeometryData {\n /**\n * 构造函数\n * @param range - 光线范围\n * @param spotAngle - 光线范围[角度]\n * @param segments - 圆精度\n * @param thetaStart - 起始弧度\n * @param thetaLength - 终止弧度\n */\n constructor (\n range = 10,\n spotAngle = 30,\n segments = 64,\n thetaStart = 0,\n thetaLength = Math.PI * 2,\n ) {\n super();\n\n const angle = spotAngle / 2 / 180 * Math.PI;\n const radius = range * Math.tan(angle);\n\n this.createXYPlaneCircle(radius, -range, segments, thetaStart, thetaLength, 0, this.points, this.indices);\n this.points.push(0, 0, 0);\n const step = segments / 4;\n const start = segments % 4 / 2;\n\n for (let i = 0; i < 4; i++) {\n this.indices.push(segments, start + i * step);\n }\n }\n}\n","import { GeometryData } from './geometry';\n\n/**\n * 地板线边框造型数据\n * lines\n */\nexport class FloorLineEdgeGeometryData extends GeometryData {\n /**\n *\n * @param sideLength\n * @param parts\n */\n constructor (sideLength = 12, parts = 6) {\n super();\n\n let index = 0;\n\n const z = 0;\n const end = sideLength / 2;\n const start = -sideLength / 2;\n\n for (let i = 0; i <= parts; i++) {\n const v = start + i * sideLength / parts;\n\n this.points.push(v, start, z, v, end, z, start, v, z, end, v, z);\n this.indices.push(index, index + 1, index + 2, index + 3);\n index += 4;\n }\n }\n}\n","import type { Engine, GeometryDrawMode, spec } from '@galacean/effects';\nimport { Geometry } from '@galacean/effects';\nimport { SphereGeometryData } from './sphere';\nimport { BoxGeometryData } from './box';\nimport type { GeometryData } from './geometry';\nimport { CylinderGeometryData } from './cylinder';\nimport { ConeGeometryData } from './cone';\nimport { TorusGeometryData } from './torus';\nimport { PlaneGeometryData } from './plane';\nimport { FrustumGeometryData } from './frustum';\nimport { DirectionLightData } from './direction-light';\nimport { PointLightData } from './point-light';\nimport { SpotLightData } from './spot-light';\nimport { FloorLineEdgeGeometryData } from './floor-line-edge';\n\n/**\n * 几何体类型\n */\nexport enum GeometryType {\n Box,\n Sphere,\n Cylinder,\n Cone,\n Torus,\n Frustum,\n Sprite,\n Plane,\n DirectionLight,\n SpotLight,\n PointLight,\n FloorGrid,\n}\n\n/**\n * 几何体参数\n */\nexport interface MeshOption {\n size: any,\n color?: spec.vec3,\n renderMode: GeometryDrawMode,\n depthTest?: boolean,\n name?: string,\n alpha?: number,\n}\n\n/**\n * 合并多个几何体数据\n * @param geometries - 几何体数据数组\n * @returns 合并后的几何体数据\n */\n// export function combineGeometries (geometries: GeometryData[]): GeometryData {\n// const points: number[] = [];\n// const indices: number[] = [];\n// const uvs: number[] = [];\n// const normals: number[] = [];\n\n// for (let i = 0, indicesBase = 0; i < geometries.length; i++) {\n// const geometryData = geometries[i];\n// if (geometryData) {\n// points.push(...geometryData.points);\n// uvs.push(...geometryData.uvs);\n// normals.push(...geometryData.normals);\n// geometryData.indices.forEach(index => indices.push(index + indicesBase));\n// indicesBase += geometryData.points.length;\n// }\n// }\n\n// return {\n// points,\n// indices,\n// uvs,\n// normals,\n// };\n// }\n\n/**\n * 创建几何体对象\n * @param type - 几何体类型\n * @param size - 几何体尺寸\n * @param renderMode - 绘制模式:`gl.TRIANGLES`、`gl.LINES`\n * @returns\n */\nexport function createGeometry (engine: Engine, type: GeometryType, size: Record<string, any>, renderMode?: GeometryDrawMode): Geometry {\n let geometryData: GeometryData;\n\n switch (type) {\n case GeometryType.Sphere:\n geometryData = new SphereGeometryData(size.radius, size.widthSegments, size.heightSegments);\n\n break;\n case GeometryType.Cylinder:\n geometryData = new CylinderGeometryData(size.radius, size.radius, size.height);\n\n break;\n case GeometryType.Cone:\n geometryData = new ConeGeometryData(size.radius, size.height);\n\n break;\n case GeometryType.Torus:\n geometryData = new TorusGeometryData(size.radius, size.tube, size.radialSegments, size.tubularSegments, size.arc);\n\n break;\n case GeometryType.Sprite:\n case GeometryType.Plane:\n geometryData = new PlaneGeometryData(size.width, size.height);\n\n break;\n case GeometryType.Frustum:\n geometryData = new FrustumGeometryData(size.position, size.rotation, size.fov, size.aspect, size.near, size.far);\n\n break;\n case GeometryType.DirectionLight:\n geometryData = new DirectionLightData(size.radius, size.length, size.segments4, size.linesNumber, size.thetaStart, size.thetaLength);\n\n break;\n case GeometryType.PointLight:\n geometryData = new PointLightData(size.range, size.segments, size.thetaStart, size.thetaLength);\n\n break;\n case GeometryType.SpotLight:\n geometryData = new SpotLightData(size.range, size.spotAngle, size.segments, size.thetaStart, size.thetaLength);\n\n break;\n case GeometryType.FloorGrid:\n geometryData = new FloorLineEdgeGeometryData(size.sideLength, size.parts);\n\n break;\n default:\n geometryData = new BoxGeometryData(size.width, size.height, size.depth);\n\n break;\n }\n const result = Geometry.create(\n engine,\n {\n attributes: {\n a_Position: {\n size: 3,\n data: new Float32Array(geometryData.points),\n },\n a_Normal: {\n size: 3,\n data: new Float32Array(geometryData.normals),\n },\n a_UV1: {\n size: 2,\n data: new Float32Array(geometryData.uvs),\n },\n },\n indices: {\n data: new Uint16Array(geometryData.indices),\n },\n mode: renderMode,\n drawCount: geometryData.indices.length,\n });\n\n return result;\n}\n","import type { Engine, Geometry, spec } from '@galacean/effects';\nimport { glContext, Material, Mesh, Texture, Transform, math } from '@galacean/effects';\nimport type { MeshOption } from './geometry';\nimport { createGeometry, GeometryType } from './geometry';\nimport { GizmoSubType } from './define';\nimport type { GizmoItemBounding } from './gizmo-vfx-item';\nimport { BoundingType } from './gizmo-vfx-item';\nimport { color, renderMode } from './constants';\n\ntype vec3 = spec.vec3;\ntype Vector3 = math.Vector3;\ntype TriangleLike = math.TriangleLike;\nconst { Vector2, Vector3, Matrix4 } = math;\n\n/**\n * 根据 gizmoSubType 类型创建几何体 Mesh\n * @param subType - gizmoSubType 类型\n * @param boundingMap - 包围盒 Map\n * @param iconTexture - 图标纹理\n * @param options - 几何体参数\n * @returns 基础几何体 Mesh | 组合几何体 Map<Mesh, Transform>\n */\nexport function createMeshFromSubType (\n engine: Engine,\n subType: GizmoSubType,\n boundingMap: Map<string, GizmoItemBounding>,\n iconTexture?: Map<string, Texture>,\n options?: MeshOption\n): Mesh | Map<Mesh, Transform> {\n let result: Mesh | Map<Mesh, Transform>;\n\n if (!options) {\n options = { size: 0, renderMode: WebGLRenderingContext['TRIANGLES'] };\n }\n\n switch (subType) {\n case GizmoSubType.sprite:\n result = createSpriteMesh(engine, options);\n\n break;\n case GizmoSubType.camera:\n result = createSpriteMesh(engine, options, iconTexture ? iconTexture.get('camera') : undefined, boundingMap);\n\n break;\n case GizmoSubType.light:\n result = createSpriteMesh(engine, options, iconTexture ? iconTexture.get('light') : undefined, boundingMap);\n\n break;\n case GizmoSubType.translation:\n result = createTranslationMesh(engine, options, boundingMap);\n\n break;\n case GizmoSubType.scale:\n result = createScaleMesh(engine, options, boundingMap);\n\n break;\n case GizmoSubType.viewHelper:\n result = createViewHelperMesh(engine, options, boundingMap, iconTexture as Map<string, Texture>);\n\n break;\n case GizmoSubType.rotation:\n result = createRotationMesh(engine, options, boundingMap);\n\n break;\n default:\n result = createBasicMesh(engine, subType, options);\n\n break;\n }\n\n return result;\n}\n\n/**\n * 创建旋转组件 Mesh 数组\n * @internal\n * @param options\n * @param boundingMap - 包围盒 Map\n * @returns Mesh 数组和对应的 Transform 组成的 Map\n */\nfunction createRotationMesh (\n engine: Engine,\n options: MeshOption,\n boundingMap: Map<string, GizmoItemBounding>,\n): Map<Mesh, Transform> {\n const result: Map<Mesh, Transform> = new Map();\n const scale = options.size.scale || 1;\n const size = {\n radius: 0.8 * scale,\n tube: 0.02 * scale,\n radiusSegments: 10 * scale,\n widthSegments: 20,\n heightSegments: 20,\n };\n const boundSize = { ...size, tube: size.tube * 2 };\n const name = 'rotation';\n const xCircle = createBasicMesh(engine, GizmoSubType.torus, {\n size, color: color.xAxisColor as vec3, renderMode, name,\n }, 'hideBack');\n const yCircle = createBasicMesh(engine, GizmoSubType.torus, {\n size, color: color.yAxisColor as vec3, renderMode, name,\n }, 'hideBack');\n const zCircle = createBasicMesh(engine, GizmoSubType.torus, {\n size, color: color.zAxisColor as vec3, renderMode, name,\n }, 'hideBack');\n const center = createBasicMesh(engine, GizmoSubType.sphere, {\n size, color: [0.3, 0.3, 0.3], alpha: 0.1, renderMode, name,\n }, 'blend');\n const xCircleBounding = createBasicMesh(engine, GizmoSubType.torus, {\n size: boundSize,\n color: color.xAxisColor as vec3,\n renderMode,\n });\n const yCircleBounding = createBasicMesh(engine, GizmoSubType.torus, {\n size: boundSize,\n color: color.yAxisColor as vec3,\n renderMode,\n });\n const zCircleBounding = createBasicMesh(engine, GizmoSubType.torus, {\n size: boundSize,\n color: color.zAxisColor as vec3,\n renderMode,\n });\n\n const xCircleTransform = new Transform({\n valid: true,\n });\n const yCircleTransform = new Transform({\n valid: true,\n });\n const zCircleTransform = new Transform({\n valid: true,\n });\n const centerTransform = new Transform({\n valid: true,\n });\n\n xCircleTransform.setRotation(0, 90, 0);\n yCircleTransform.setRotation(-90, 0, 0);\n zCircleTransform.setRotation(0, 0, 0);\n result.set(center, centerTransform);\n result.set(xCircle, xCircleTransform);\n result.set(yCircle, yCircleTransform);\n result.set(zCircle, zCircleTransform);\n\n boundingMap.set('xAxis', {\n type: BoundingType.triangle,\n triangles: xCircleBounding.firstGeometry() ? getTriangle(xCircleBounding.firstGeometry(), xCircleTransform) : [],\n backfaceCulling: true,\n });\n boundingMap.set('yAxis', {\n type: BoundingType.triangle,\n triangles: yCircleBounding.firstGeometry() ? getTriangle(yCircleBounding.firstGeometry(), yCircleTransform) : [],\n backfaceCulling: true,\n });\n boundingMap.set('zAxis', {\n type: BoundingType.triangle,\n triangles: zCircleBounding.firstGeometry() ? getTriangle(zCircleBounding.firstGeometry(), zCircleTransform) : [],\n backfaceCulling: true,\n });\n\n return result;\n}\n\n/**\n * 获取几何体的三角面数组\n * @internal\n * @param geometry - 几何体\n * @param transform - 变换式\n * @returns 三角面数组\n */\nfunction getTriangle (geometry: Geometry, transform: Transform): TriangleLike[] {\n const result: TriangleLike[] = [];\n const indices = geometry.getIndexData();\n const points = geometry.getAttributeData('a_Position');\n const mat4 = transform.getWorldMatrix();\n\n if (points && indices && indices.length > 0) {\n for (let i = 0; i < indices.length; i += 3) {\n const i0 = indices[i] * 3;\n const i1 = indices[i + 1] * 3;\n const i2 = indices[i + 2] * 3;\n const p0 = new Vector3(points[i0], points[i0 + 1], points[i0 + 2]);\n const p1 = new Vector3(points[i1], points[i1 + 1], points[i1 + 2]);\n const p2 = new Vector3(points[i2], points[i2 + 1], points[i2 + 2]);\n\n result.push({\n p0: mat4.projectPoint(p0),\n p1: mat4.projectPoint(p1),\n p2: mat4.projectPoint(p2),\n });\n\n }\n }\n\n return result;\n}\n\n/**\n * 创建位移组件 Mesh 数组\n * @internal\n * @param options\n * @param boundingMap - 包围盒 Map\n * @returns Mesh 数组和对应的 Transform 组成的 Map\n */\nfunction createTranslationMesh (engine: Engine, options: MeshOption, boundingMap: Map<string, GizmoItemBounding>): Map<Mesh, Transform> {\n const result: Map<Mesh, Transform> = new Map();\n const scale = options.size.scale || 1;\n const axisSize = {\n width: 0.8 * scale,\n height: 0.02 * scale,\n depth: 0.02 * scale,\n };\n const name = 'translation';\n const axisMesh = createAxisMesh(engine, axisSize, false, name);\n\n for (const [mesh, transform] of axisMesh) {\n result.set(mesh, transform);\n }\n\n const arrowSize = {\n radius: 0.05 * scale,\n height: 0.2 * scale,\n };\n const xArrow = createBasicMesh(engine, GizmoSubType.cone, {\n size: arrowSize,\n color: color.xAxisColor as vec3,\n renderMode,\n depthTest: true,\n name,\n }, 'blend');\n const yArrow = createBasicMesh(engine, GizmoSubType.cone, {\n size: arrowSize,\n color: color.yAxisColor as vec3,\n renderMode,\n depthTest: true,\n name,\n }, 'blend');\n const zArrow = createBasicMesh(engine, GizmoSubType.cone, {\n size: arrowSize,\n color: color.zAxisColor as vec3,\n renderMode,\n name,\n depthTest: true,\n }, 'blend');\n const xArrowTransform = new Transform({\n valid: true,\n });\n const yArrowTransform = new Transform({\n valid: true,\n });\n const zArrowTransform = new Transform({\n valid: true,\n });\n\n xArrowTransform.setRotation(0, 0, 90);\n yArrowTransform.setRotation(0, 0, 0);\n zArrowTransform.setRotation(-90, 0, 0);\n xArrowTransform.translate(axisSize.width, 0, 0);\n yArrowTransform.translate(0, axisSize.width, 0);\n zArrowTransform.translate(0, 0, axisSize.width);\n\n const planeSize = {\n width: 0.2 * scale,\n height: 0.2 * scale,\n };\n const xyPlane = createBasicMesh(engine, GizmoSubType.plane, {\n size: planeSize, color: color.zAxisColor as vec3, renderMode, depthTest: true, name,\n });\n const yzPlane = createBasicMesh(engine, GizmoSubType.plane, {\n size: planeSize, color: color.xAxisColor as vec3, renderMode, depthTest: true, name,\n });\n const zxPlane = createBasicMesh(engine, GizmoSubType.plane, {\n size: planeSize, color: color.yAxisColor as vec3, renderMode, depthTest: true, name,\n });\n const xyPlaneTransform = new Transform({\n valid: true,\n });\n const yzPlaneTransform = new Transform({\n valid: true,\n });\n const zxPlaneTransform = new Transform({\n valid: true,\n });\n const delta = axisSize.width / 8;\n\n xyPlaneTransform.translate(planeSize.width / 2 + delta, planeSize.height / 2 + delta, 0);\n yzPlaneTransform.setRotation(0, 90, 0);\n yzPlaneTransform.translate(0, planeSize.height / 2 + delta, planeSize.width / 2 + delta);\n zxPlaneTransform.setRotation(-90, 0, 0);\n zxPlaneTransform.translate(planeSize.width / 2 + delta, 0, planeSize.height / 2 + delta);\n\n result.set(xArrow, xArrowTransform);\n result.set(yArrow, yArrowTransform);\n result.set(zArrow, zArrowTransform);\n result.set(xyPlane, xyPlaneTransform);\n result.set(yzPlane, yzPlaneTransform);\n result.set(zxPlane, zxPlaneTransform);\n\n createAxisBounding({ width: arrowSize.radius * 2.4, length: axisSize.width + arrowSize.height / 2 }, boundingMap);\n boundingMap.set('xyPlane', {\n type: BoundingType.triangle,\n triangles: xyPlane.firstGeometry() ? getTriangle(xyPlane.firstGeometry(), xyPlaneTransform) : [],\n backfaceCulling: false,\n });\n\n // FIXME: getTriangle 函数调用 getWorldMatrix 后 worldMatrix被修改\n boundingMap.set('yzPlane', {\n type: BoundingType.triangle,\n triangles: yzPlane.firstGeometry() ? getTriangle(yzPlane.firstGeometry(), yzPlaneTransform) : [],\n backfaceCulling: false,\n });\n boundingMap.set('zxPlane', {\n type: BoundingType.triangle,\n triangles: zxPlane.firstGeometry() ? getTriangle(zxPlane.firstGeometry(), zxPlaneTransform) : [],\n backfaceCulling: false,\n });\n\n return result;\n}\n\n/**\n * 创建缩放组件 Mesh 数组\n * @internal\n * @param options\n * @param boundingMap - 包围盒 Map\n * @returns Mesh 数组和对应的 Transform 组成的 Map\n */\nfunction createScaleMesh (engine: Engine, options: MeshOption, boundingMap: Map<string, GizmoItemBounding>): Map<Mesh, Transform> {\n const result: Map<Mesh, Transform> = new Map();\n const scale = options.size.scale || 1;\n const axisSize = {\n width: 0.8 * scale,\n height: 0.02 * scale,\n depth: 0.02 * scale,\n };\n const name = 'scale';\n const axisMesh = createAxisMesh(engine, axisSize, false, name);\n\n for (const [mesh, transform] of axisMesh) {\n result.set(mesh, transform);\n }\n const boxSize = {\n width: 0.1 * scale,\n height: 0.1 * scale,\n depth: 0.1 * scale,\n };\n const centerBoxSize = {\n width: 0.2 * scale,\n height: 0.2 * scale,\n depth: 0.2 * scale,\n };\n const xCube = createBasicMesh(engine, GizmoSubType.box, {\n size: boxSize, color: color.xAxisColor as vec3, renderMode, depthTest: true, name,\n }, 'blend');\n const yCube = createBasicMesh(engine, GizmoSubType.box, {\n size: boxSize, color: color.yAxisColor as vec3, renderMode, depthTest: true, name,\n }, 'blend');\n const zCube = createBasicMesh(engine, GizmoSubType.box, {\n size: boxSize, color: color.zAxisColor as vec3, renderMode, depthTest: true, name,\n }, 'blend');\n const centerCube = createBasicMesh(engine, GizmoSubType.box, {\n size: centerBoxSize,\n color: [0.8, 0.8, 0.8],\n renderMode,\n depthTest: true,\n name,\n }, 'blend');\n const xCubeTransform = new Transform({\n valid: true,\n });\n const yCubeTransform = new Transform({\n valid: true,\n });\n const zCubeTransform = new Transform({\n valid: true,\n });\n const centerCubeTransform = new Transform({\n valid: true,\n });\n\n xCubeTransform.translate(axisSize.width, 0, 0);\n yCubeTransform.translate(0, axisSize.width, 0);\n zCubeTransform.translate(0, 0, axisSize.width);\n result.set(centerCube, centerCubeTransform);\n result.set(xCube, xCubeTransform);\n result.set(yCube, yCubeTransform);\n result.set(zCube, zCubeTransform);\n\n createAxisBounding({ width: boxSize.width * 1.2, length: axisSize.width + boxSize.width / 2 }, boundingMap);\n boundingMap.set('center', {\n type: BoundingType.sphere,\n center: new Vector3(),\n radius: Math.pow(Math.pow(centerBoxSize.width, 2) + Math.pow(centerBoxSize.height, 2) + Math.pow(centerBoxSize.depth, 2), 0.5) / 2,\n });\n\n return result;\n}\n\n/**\n * 创建视图辅助组件 Mesh 数组\n * @internal\n * @param options\n * @param boundingMap - 包围盒 Map\n * @returns Mesh 数组和对应的 Transform 组成的 Map\n */\nfunction createViewHelperMesh (engine: Engine, options: MeshOption, boundingMap: Map<string, GizmoItemBounding>, texture: Map<string, Texture>): Map<Mesh, Transform> {\n const result: Map<Mesh, Transform> = new Map();\n const scale = options.size.scale || 1;\n const axisSize = {\n width: 0.8 * scale,\n height: 0.02 * scale,\n depth: 0.02 * scale,\n };\n const axisMesh = createAxisMesh(engine, axisSize, true);\n\n for (const [mesh, transform] of axisMesh) {\n result.set(mesh, transform);\n }\n const planeSize = {\n width: 0.14 * scale,\n height: 0.14 * scale,\n };\n const length = (axisSize.width + planeSize.width) / 2;\n const depthTest = true;\n const posXSphere = createSpriteMesh(engine, { size: planeSize, renderMode, depthTest }, texture.get('posX'));\n const posYSphere = createSpriteMesh(engine, { size: planeSize, renderMode, depthTest }, texture.get('posY'));\n const posZSphere = createSpriteMesh(engine, { size: planeSize, renderMode, depthTest }, texture.get('posZ'));\n const posXSphereTransform = new Transform({\n valid: true,\n });\n const posYSphereTransform = new Transform({\n valid: true,\n });\n const posZSphereTransform = new Transform({\n valid: true,\n });\n\n posXSphereTransform.translate(length, 0, 0);\n posYSphereTransform.translate(0, length, 0);\n posZSphereTransform.translate(0, 0, length);\n const negXSphere = createSpriteMesh(engine, { size: planeSize, renderMode, depthTest }, texture.get('negX'));\n const negYSphere = createSpriteMesh(engine, { size: planeSize, renderMode, depthTest }, texture.get('negY'));\n const negZSphere = createSpriteMesh(engine, { size: planeSize, renderMode, depthTest }, texture.get('negZ'));\n const negXSphereTransform = new Transform({\n valid: true,\n });\n const negYSphereTransform = new Transform({\n valid: true,\n });\n const negZSphereTransform = new Transform({\n valid: true,\n });\n\n negXSphereTransform.translate(-length, 0, 0);\n negYSphereTransform.translate(0, -length, 0);\n negZSphereTransform.translate(0, 0, -length);\n\n result.set(posXSphere, posXSphereTransform);\n result.set(posYSphere, posYSphereTransform);\n result.set(posZSphere, posZSphereTransform);\n result.set(negXSphere, negXSphereTransform);\n result.set(negYSphere, negYSphereTransform);\n result.set(negZSphere, negZSphereTransform);\n\n const radius = (planeSize.height / 2) * 1.2;\n\n boundingMap.set('posX', {\n type: BoundingType.sphere,\n center: posXSphereTransform.position,\n radius: radius,\n });\n boundingMap.set('posY', {\n type: BoundingType.sphere,\n center: posYSphereTransform.position,\n radius: radius,\n });\n boundingMap.set('posZ', {\n type: BoundingType.sphere,\n center: posZSphereTransform.position,\n radius: radius,\n });\n boundingMap.set('negX', {\n type: BoundingType.sphere,\n center: negXSphereTransform.position,\n radius: radius,\n });\n boundingMap.set('negY', {\n type: BoundingType.sphere,\n center: negYSphereTransform.position,\n radius: radius,\n });\n boundingMap.set('negZ', {\n type: BoundingType.sphere,\n center: negZSphereTransform.position,\n radius: radius,\n });\n\n return result;\n}\n\n/**\n * 创建坐标轴 Mesh 数组\n * @internal\n * @param axisSize - 坐标轴尺寸\n * @param isCentered - 是否居中,默认 false\n * @returns Mesh 数组和对应的 Transform 组成的 Map\n */\nfunction createAxisMesh (engine: Engine, axisSize: { width: number, height: number, depth: number }, isCentered = false, name?: string): Map<Mesh, Transform> {\n const result: Map<Mesh, Transform> = new Map();\n const xAxis = createBasicMesh(engine, GizmoSubType.box, {\n size: axisSize, color: color.xAxisColor as vec3, renderMode, depthTest: true, name,\n });\n const yAxis = createBasicMesh(engine, GizmoSubType.box, {\n size: axisSize, color: color.yAxisColor as vec3, renderMode, depthTest: true, name,\n });\n const zAxis = createBasicMesh(engine, GizmoSubType.box, {\n size: axisSize, color: color.zAxisColor as vec3, renderMode, depthTest: true, name,\n });\n\n const xAxisTransform = new Transform({\n valid: true,\n });\n const yAxisTransform = new Transform({\n valid: true,\n });\n const zAxisTransform = new Transform({\n valid: true,\n });\n\n yAxisTransform.setRotation(0, 0, 90);\n zAxisTransform.setRotation(0, -90, 0);\n if (!isCentered) {\n xAxisTransform.translate(axisSize.width / 2, 0, 0);\n yAxisTransform.translate(0, axisSize.width / 2, 0);\n zAxisTransform.translate(0, 0, axisSize.width / 2);\n }\n result.set(xAxis, xAxisTransform);\n result.set(yAxis, yAxisTransform);\n result.set(zAxis, zAxisTransform);\n\n return result;\n}\n\n/**\n * 创建基础几何体 Mesh\n * @internal\n * @param subType - gizmoSubType 类型\n * @param options - 几何体参数\n * @returns 几何体 Mesh\n */\nfunction createBasicMesh (engine: Engine, subType: GizmoSubType, options: MeshOption, materialType = 'default'): Mesh {\n const {\n size, color, alpha, renderMode, depthTest, name,\n } = options;\n let geometryType: GeometryType;\n\n switch (subType) {\n case GizmoSubType.sphere:\n geometryType = GeometryType.Sphere;\n\n break;\n case GizmoSubType.cylinder:\n geometryType = GeometryType.Cylinder;\n\n break;\n case GizmoSubType.cone:\n geometryType = GeometryType.Cone;\n\n break;\n case GizmoSubType.torus:\n geometryType = GeometryType.Torus;\n\n break;\n case GizmoSubType.sprite:\n geometryType = GeometryType.Sprite;\n\n break;\n case GizmoSubType.plane:\n geometryType = GeometryType.Plane;\n\n break;\n case GizmoSubType.frustum:\n geometryType = GeometryType.Frustum;\n\n break;\n case GizmoSubType.directionLight:\n geometryType = GeometryType.DirectionLight;\n\n break;\n case GizmoSubType.spotLight:\n geometryType = GeometryType.SpotLight;\n\n break;\n case GizmoSubType.pointLight:\n geometryType = GeometryType.PointLight;\n\n break;\n case GizmoSubType.floorGrid:\n geometryType = GeometryType.FloorGrid;\n\n break;\n default:\n geometryType = GeometryType.Box;\n\n break;\n }\n const geometry = createGeometry(engine, geometryType, size, renderMode);\n let material;\n\n switch (materialType) {\n case 'blend':\n material = createBlendMaterial(engine, color, depthTest, alpha);\n\n break;\n case 'hideBack':\n material = createHideBackMaterial(engine, color, depthTest);\n\n break;\n default:\n material = createMaterial(engine, color, depthTest);\n\n break;\n }\n\n return Mesh.create(\n engine,\n {\n name: name ? name : geometryType.toString(),\n geometry,\n material,\n priority: 3000,\n });\n}\n\n/**\n * @internal\n * @param options\n * @param texture\n * @param boundingMap\n * @returns\n */\nfunction createSpriteMesh (engine: Engine, options: MeshOption, texture?: Texture, boundingMap?: Map<string, GizmoItemBounding>): Mesh {\n const geometry = createGeometry(engine, GeometryType.Sprite, options.size, renderMode);\n let spriteColor;\n\n if (texture) {\n spriteColor = texture;\n } else {\n spriteColor = options.color;\n }\n\n const material = createSpriteMaterial(engine, spriteColor, options.depthTest);\n\n if (boundingMap) {\n boundingMap.set('sprite', {\n type: BoundingType.sphere,\n radius: Math.pow(Math.pow(options.size.width, 2) + Math.pow(options.size.height, 2), 0.5) / 2,\n });\n }\n\n return Mesh.create(\n engine,\n {\n name: options.name || 'sprite',\n geometry,\n material,\n priority: 3000,\n });\n}\n\n/**\n * 创建材质\n * @internal\n * @param color - 颜色\n * @param depthTest\n * @returns 纯色材质,无光照,无透明\n */\nfunction createMaterial (engine: Engine, color?: vec3, depthTest?: boolean): Material {\n const myColor = color ? Vector3.fromArray(color) : new Vector3(255, 255, 255);\n const myDepthTest = depthTest ? depthTest : false;\n\n const material = Material.create(\n engine,\n {\n uniformValues: {\n u_color: new Float32Array(myColor.toArray()),\n u_model: new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]),\n },\n shader: {\n fragment: `\n precision mediump float;\n\n uniform vec3 u_color;\n\n void main(){\n gl_FragColor = vec4(u_color,1.0);\n }`,\n vertex: `\n precision highp float;\n\n attribute vec3 a_Position;\n\n uniform mat4 u_model;\n uniform mat4 effects_MatrixV;\n uniform mat4 _MatrixP;\n\n void main(){\n gl_Position = _MatrixP * effects_MatrixV * u_model * vec4(a_Position,1.0);\n }`,\n shared: true,\n },\n });\n\n material.setVector3('u_color', myColor);\n material.setMatrix('u_model', Matrix4.IDENTITY);\n material.depthTest = myDepthTest;\n material.stencilTest = false;\n material.blending = false;\n material.depthMask = true;\n\n return material;\n}\n\n/**\n *\n * @internal\n * @param color\n * @param depthTest\n * @returns\n */\nfunction createHideBackMaterial (engine: Engine, color?: vec3, depthTest?: boolean): Material {\n const myColor = color ? Vector3.fromArray(color) : new Vector3(255, 255, 255);\n const myDepthTest = depthTest ? depthTest : false;\n\n const material = Material.create(\n engine,\n {\n uniformValues: {\n u_color: new Float32Array(myColor.toArray()),\n u_model: new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]),\n u_cameraPos: new Float32Array([0, 0, 0]),\n u_center: new Float32Array([0, 0, 0]),\n },\n shader: {\n fragment: `\n precision mediump float;\n\n uniform vec3 u_color;\n\n varying float flag;\n\n void main(){\n if(flag > 0.0) {\n discard;\n }\n\n gl_FragColor = vec4(u_color,1.0);\n }`,\n vertex: `\n precision highp float;\n\n attribute vec3 a_Position;\n\n uniform mat4 u_model;\n uniform mat4 effects_MatrixV;\n uniform mat4 _MatrixP;\n\n uniform vec3 u_cameraPos;\n uniform vec3 u_center;\n\n varying float flag;\n void main(){\n float distance = length(u_cameraPos - u_center);\n vec3 worldPosition = (u_model * vec4(a_Position,1.0)).xyz;\n flag = length(u_cameraPos - worldPosition) - distance;\n gl_Position = _MatrixP * effects_MatrixV * u_model * vec4(a_Position,1.0);\n }`,\n shared: true,\n },\n });\n\n material.setVector3('u_color', myColor);\n material.setMatrix('u_model', Matrix4.IDENTITY);\n material.setVector3('u_cameraPos', Vector3.ZERO);\n material.setVector3('u_center', Vector3.ZERO);\n\n material.depthTest = myDepthTest;\n material.stencilTest = false;\n material.blending = false;\n material.depthMask = true;\n\n return material;\n}\n\n/**\n *\n * @internal\n * @param color\n * @param depthTest\n * @param alpha\n * @returns\n */\nfunction createBlendMaterial (engine: Engine, color?: vec3, depthTest?: boolean, alpha?: number): Material {\n const myColor = color ? Vector3.fromArray(color) : new Vector3(255, 255, 255);\n const myDepthTest = depthTest ? depthTest : false;\n const myAlpha = alpha ? alpha : 1;\n\n const material = Material.create(\n engine,\n {\n uniformValues: {\n u_color: new Float32Array(myColor.toArray()),\n u_alpha: new Float32Array([myAlpha, 0]),\n u_model: new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]),\n },\n shader: {\n shared: true,\n fragment: `\n precision mediump float;\n\n uniform vec3 u_color;\n uniform vec2 u_alpha;\n\n void main(){\n gl_FragColor = vec4(u_color,u_alpha);\n }`,\n vertex: `\n precision highp float;\n\n attribute vec3 a_Position;\n\n uniform mat4 u_model;\n uniform mat4 effects_MatrixV;\n uniform mat4 _MatrixP;\n void main(){\n gl_Position = _MatrixP * effects_MatrixV * u_model * vec4(a_Position,1.0);\n }`,\n },\n });\n\n material.setVector3('u_color', myColor);\n material.setVector2('u_alpha', new Vector2(myAlpha, 0));\n material.setMatrix('u_model', Matrix4.IDENTITY);\n material.depthTest = myDepthTest;\n material.stencilTest = false;\n material.blending = true;\n material.blendEquation = [glContext.FUNC_ADD, glContext.FUNC_ADD];\n material.blendFunction = [glContext.SRC_ALPHA, glContext.ONE_MINUS_SRC_ALPHA, glContext.SRC_ALPHA, glContext.ONE_MINUS_SRC_ALPHA];\n material.depthMask = true;\n\n return material;\n}\n\nfunction createSpriteMaterial (engine: Engine, data?: vec3 | Texture, depthTest?: boolean): Material {\n const myDepthTest = depthTest ? depthTest : false;\n const uniformValues = {\n u_model: new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]),\n u_alpha: new Float32Array([1, 0]),\n };\n\n const material = Material.create(\n engine,\n {\n uniformValues,\n shader: {\n shared: true,\n fragment: `\n precision highp float;\n\n uniform vec2 u_alpha;\n uniform vec3 u_color;\n uniform sampler2D u_iconTex;\n\n varying vec2 v_uv;\n\n void main(){\n vec4 color = texture2D(u_iconTex, vec2(v_uv.x, 1.0 - v_uv.y));\n if(color.a < 0.001)\n {\n discard;\n }\n gl_FragColor = vec4(color.xyz, color.w * u_alpha.x);\n }`,\n vertex: `\n precision highp float;\n\n attribute vec3 a_Position;\n attribute vec2 a_UV1;\n\n uniform mat4 u_model;\n uniform mat4 effects_MatrixV;\n uniform mat4 _MatrixP;\n uniform mat4 effects_MatrixInvV;\n varying vec2 v_uv;\n\n void main(){\n v_uv = a_UV1;\n vec4 pos = u_model * vec4(0., 0., 0., 1.0);\n // vec4 pos = u_model * vec4(a_Position,1.0);\n\n pos.xyz += effects_MatrixInvV[0].xyz * a_Position.x + effects_MatrixInvV[1].xyz * a_Position.y;\n gl_Position = _MatrixP * effects_MatrixV * pos;\n }`,\n },\n });\n\n material.setMatrix('u_model', Matrix4.IDENTITY);\n material.setVector2('u_alpha', new Vector2(1, 0));\n\n if (data instanceof Texture) {\n material.setTexture('u_iconTex', data);\n // uniformValues.u_iconTex = data;\n } else {\n let color: Vector3;\n\n if (data === undefined) {\n color = new Vector3(255, 255, 255);\n } else {\n color = Vector3.fromArray(data);\n }\n material.setVector3('u_color', color);\n // uniformValues.u_color = new Float32Array(color);\n }\n\n material.depthTest = myDepthTest;\n material.stencilTest = false;\n material.blending = true;\n material.blendEquation = [glContext.FUNC_ADD, glContext.FUNC_ADD];\n material.blendFunction = [glContext.SRC_ALPHA, glContext.ONE_MINUS_SRC_ALPHA, glContext.SRC_ALPHA, glContext.ONE_MINUS_SRC_ALPHA];\n\n return material;\n}\n\n/**\n * 创建坐标轴包围盒\n * @internal\n * @param size 包围盒尺寸\n * @param boundingMap 包围盒 Map\n */\nfunction createAxisBounding (size: { width: number, length: number }, boundingMap: Map<string, GizmoItemBounding>) {\n boundingMap.set('xAxis', {\n type: BoundingType.line,\n points: [new Vector3(0, 0, 0), new Vector3(size.length, 0, 0)],\n width: size.width,\n });\n boundingMap.set('yAxis', {\n type: BoundingType.line,\n points: [new Vector3(0, 0, 0), new Vector3(0, size.length, 0)],\n width: size.width,\n });\n boundingMap.set('zAxis', {\n type: BoundingType.line,\n points: [new Vector3(0, 0, 0), new Vector3(0, 0, size.length)],\n width: size.width,\n });\n}\n","import type { Camera } from '@galacean/effects';\nimport { math } from '@galacean/effects';\nimport { distanceOfPointAndLine, projectionOfPointAndLine } from './math-utils';\n\ntype Vector2 = math.Vector2;\ntype Vector3 = math.Vector3;\ntype Matrix4 = math.Matrix4;\n\nconst { Matrix4, Vector2, Vector3 } = math;\n\n/**\n * 线条包围盒射线检测算法\n * @param out - 射线与包围盒交点位置\n * @param pointInCanvas - 归一化的画布交互点坐标\n * @param points - 线条包围盒两端点位置\n * @param radius - 线条包围盒辐射半径\n * @param camera - 相机对象\n * @returns 射线与包围盒交点位置 | undefined\n */\nexport function intersectRayLine (\n out: Vector3,\n pointInCanvas: Vector2,\n points: [p0: Vector3, p1: Vector3],\n radius: number,\n worldMat4: Matrix4,\n camera: Camera,\n): Vector3 | undefined {\n // 构造一个辐射半径边缘的点 radiusPoint\n const up = new Vector3(\n worldMat4.elements[1],\n worldMat4.elements[5],\n worldMat4.elements[9],\n ).normalize();\n\n const radiusPoint = up.clone().multiply(radius);\n\n radiusPoint.add(points[0]);\n\n // 计算 start、end、radius 在屏幕空间上的投影\n const mvpMat4 = camera.getModelViewProjection(new Matrix4(), worldMat4);\n\n const screenStart = mvpMat4.projectPoint(points[0], new Vector3());\n const screenEnd = mvpMat4.projectPoint(points[1], new Vector3());\n const screenRadiusPoint = mvpMat4.projectPoint(radiusPoint, new Vector3());\n\n const screenRadiusVector = screenRadiusPoint.clone().subtract(screenStart);\n\n const screenRadius = screenRadiusVector.length();\n\n // 计算屏幕交互点与线条的距离\n const { distance, isInLine } = distanceOfPointAndLine(pointInCanvas, [screenStart.toVector2(), screenEnd.toVector2()]);\n\n if (distance <= screenRadius && isInLine) { // 距离小于阈值且交互点在线条上的投影位于线段内\n // 计算交互点在线条上的投影并转换为世界坐标\n const screenPosition = projectionOfPointAndLine(pointInCanvas, [screenStart, screenEnd]);\n const inverseViewProjection = camera.getInverseViewProjectionMatrix();\n\n inverseViewProjection.projectPoint(screenPosition, out);\n\n return out;\n }\n}\n","import type { Engine, spec } from '@galacean/effects';\nimport { Geometry, Material, Mesh, glContext, math } from '@galacean/effects';\n\ntype vec3 = spec.vec3;\ntype Vector3 = math.Vector3;\ntype Matrix4 = math.Matrix4;\n\nconst { Euler, Vector3, Matrix4 } = math;\n\nconst rectSize = 0.04;\nconst DEG2RAD = Math.PI / 180;\n\ninterface GeometryData {\n points: Vector3[],\n indices: number[],\n}\n\ninterface ArcPathOptions {\n plane?: string,\n translate?: vec3,\n rotate?: vec3,\n}\n\nfunction arcPath (radius: number, arc: number, options: ArcPathOptions = {}): GeometryData {\n const { plane, translate = [0, 0, 0], rotate = [0, 0, 0] } = options;\n const rotMat4 = Euler.fromArray(rotate).negate().toMatrix4(new Matrix4());\n const points: Vector3[] = [];\n const indices = [];\n\n addPoint(radius, 0);\n let i = 1;\n\n for (; i <= arc; i++) {\n const angle = i * DEG2RAD;\n\n indices.push(i - 1, i);\n addPoint(Math.cos(angle) * radius, Math.sin(angle) * radius);\n }\n\n return {\n points,\n indices,\n };\n\n function addPoint (cos: number, sin: number) {\n const point = new Vector3();\n\n if (plane === 'xz') {\n point.set(cos, 0, sin);\n } else if (plane === 'yz') {\n point.set(0, cos, sin);\n } else {\n point.set(cos, sin, 0);\n }\n rotMat4.transformNormal(point);\n points.push(point.add(translate));\n }\n}\n\nfunction line (p0: vec3, p1: vec3): GeometryData {\n return {\n points: [\n Vector3.fromArray(p0),\n Vector3.fromArray(p1),\n ],\n indices: [0, 1],\n };\n}\n\nfunction box (width: number, height: number, depth: number, center?: number[]): GeometryData {\n const w = width / 2;\n const h = height / 2;\n const d = depth / 2;\n const myCenter = center ?? [0, 0, 0];\n const points: Vector3[] = [\n [-w, h, -d], [-w, -h, -d], [-w, h, d], [-w, -h, d],\n [w, h, -d], [w, -h, -d], [w, h, d], [w, -h, d],\n ].map(item => {\n return new Vector3(item[0] + myCenter[0], item[1] + myCenter[1], item[2] + myCenter[2]);\n });\n\n return {\n points,\n indices: [\n 0, 1, 1, 3, 3, 2, 2, 0,\n 4, 5, 5, 7, 7, 6, 6, 4,\n 0, 4, 2, 6, 3, 7, 1, 5,\n ],\n };\n}\n\nfunction rect (width: number, height: number, pos?: vec3): GeometryData {\n const w = width / 2;\n const h = height / 2;\n const points: Vector3[] = [\n new Vector3(-w, h, 0),\n new Vector3(w, h, 0),\n new Vector3(w, -h, 0),\n new Vector3(-w, -h, 0),\n ];\n\n if (pos) {\n points.forEach(vec => {\n vec.add(pos);\n });\n }\n\n return {\n points,\n indices: [\n 0, 1, 1, 2, 2, 3, 3, 0,\n ],\n };\n}\n\nfunction combineGeometries (geometries: GeometryData[]) {\n const points: number[] = [];\n const indices: number[] = [];\n\n for (let i = 0, indicesBase = 0; i < geometries.length; i++) {\n const geometry = geometries[i];\n\n if (geometry) {\n geometry.points.forEach(point => {\n points.push(point.x, point.y, point.z);\n });\n geometry.indices.forEach(index => indices.push(index + indicesBase));\n indicesBase += geometry.points.length;\n }\n }\n\n return {\n points: new Float32Array(points),\n indices: new Uint16Array(indices),\n };\n}\n\nconst Shapes: Record<string, (arg: any) => GeometryData[]> = {\n Texture (arg: any) {\n const ret = [];\n\n if (arg.detail) {\n const anchors = arg.detail.anchors;\n const block = arg.detail.block;\n const width = arg.width;\n const height = arg.height;\n\n for (let i = 0; i < anchors.length; i += 2) {\n ret.push(rect(block[0] * width, block[1] * height, [\n width * (anchors[i] - 0.5),\n height * (anchors[i + 1] - 0.5),\n 0,\n ]));\n }\n } else {\n ret.unshift(Shapes.Rectangle(arg)[0]);\n }\n\n return ret;\n },\n Circle (arg: any) {\n const { radius, arc } = arg;\n\n return [\n arcPath(radius, arc),\n arc !== 360 && line([0, 0, 0], [radius, 0, 0]),\n arc !== 360 && line([0, 0, 0], [Math.cos(arc * DEG2RAD) * radius, Math.sin(arc * DEG2RAD) * radius, 0]),\n ] as GeometryData[];\n },\n Box: function (arg: any) {\n const {\n width, height, depth, center,\n } = arg;\n const data = box(width, height, depth, center);\n\n return [data];\n },\n Sphere: function (arg) {\n const { radius, arc } = arg;\n const ret = [\n line([0, 0, -radius], [0, 0, radius]),\n arcPath(radius, arc > 180 ? 360 : 180, { plane: 'xz', rotate: [0, 90, 0] }),\n arcPath(radius, arc, { plane: 'xy' }),\n arcPath(radius, 180, { plane: 'xz', rotate: [0, 90, arc] }),\n ];\n\n if (arc > 90) {\n ret.push(arcPath(radius, arc > 270 ? 360 : 180, { plane: 'yz', rotate: [-90, 0, 0] }));\n }\n\n return ret;\n },\n Hemisphere (arg) {\n const { radius, arc } = arg;\n const ret = [\n line([0, 0, radius], [0, 0, 0]), //z\n line([arc > 180 ? -radius : 0, 0, 0], [radius, 0, 0]), //x\n arg > 90 && line([0, arc > 270 ? -radius : 0, 0], [0, radius, 0]), //y\n arcPath(radius, (arc > 180 ? 360 : 180) / 2, { plane: 'xz' }),\n arcPath(radius, arc, { plane: 'xy' }),\n arcPath(radius, 90, { plane: 'xz', rotate: [0, 0, arc] }),\n line([0, 0, 0], [Math.cos(arc * DEG2RAD) * radius, Math.sin(arc * DEG2RAD) * radius, 0]),\n ] as GeometryData[];\n\n if (arc > 90) {\n ret.push(arcPath(radius, arc > 270 ? 180 : 90, { plane: 'yz' }));\n }\n\n return ret;\n },\n Cone (arg) {\n const { radius, arc } = arg;\n const outerRadius = radius * Math.tan(arg.angle * DEG2RAD) + radius;\n\n return [\n arcPath(outerRadius, arc, { translate: [0, 0, radius] }),\n line([radius, 0, 0], [outerRadius, 0, radius]),\n arc > 90 && line([0, radius, 0], [0, outerRadius, radius]),\n arc > 180 && line([-radius, 0, 0], [-outerRadius, 0, radius]),\n arc > 270 && line([0, -radius, 0], [0, -outerRadius, radius]),\n line([Math.cos(arc * DEG2RAD) * radius, Math.sin(arc * DEG2RAD) * radius, 0],\n [Math.cos(arc * DEG2RAD) * outerRadius, Math.sin(arc * DEG2RAD) * outerRadius, radius]),\n ].concat(Shapes.Circle(arg)) as GeometryData[];\n },\n Edge (arg) {\n const hw = arg.width / 2;\n\n return [\n line([-hw, 0, 0], [hw, 0, 0]),\n ];\n },\n Rectangle (arg) {\n return [\n rect(arg.width, arg.height),\n ];\n },\n RectangleEdge (arg) {\n return [\n rect(arg.width, arg.height),\n ];\n },\n Donut (arg) {\n const { arc, radius, donutRadius } = arg;\n\n return [\n arcPath(donutRadius, 360, { translate: [radius, 0, 0], rotate: [90, 0, 0] }),\n arcPath(radius - donutRadius, arc),\n arcPath(radius + donutRadius, arc),\n arcPath(radius, arc, { translate: [0, 0, donutRadius] }),\n arcPath(radius, arc, { translate: [0, 0, -donutRadius] }),\n arc % 360 === 0 ? arcPath(donutRadius, 360, {\n translate: [-radius, 0, 0],\n rotate: [90, 0, 0],\n }) : arcPath(donutRadius, 360, {\n translate: [Math.cos(arc * DEG2RAD) * radius, Math.sin(arc * DEG2RAD) * radius, 0],\n rotate: [90, 0, arc],\n }),\n ];\n },\n path (arg) {\n const positions = arg.keys;\n const ret = [];\n\n for (let i = 0; i < positions.length - 1; i++) {\n ret.push(rect(rectSize, rectSize, positions[i]));\n ret.push(line(positions[i], positions[i + 1]));\n }\n ret.push(rect(rectSize, rectSize, positions[positions.length - 1]));\n\n return ret;\n },\n};\n\nShapes['0'] = Shapes.None;\nShapes['1'] = Shapes.Sphere;\nShapes['2'] = Shapes.Cone;\nShapes['3'] = Shapes.Hemisphere;\nShapes['4'] = Shapes.Circle;\nShapes['5'] = Shapes.Donut;\nShapes['6'] = Shapes.Rectangle;\nShapes['7'] = Shapes.RectangleEdge;\nShapes['8'] = Shapes.Edge;\nShapes['9'] = Shapes.Texture;\n\nexport function createMeshFromShape (engine: Engine, args: { shape: string, type?: number }, options: { color?: vec3, depthTest?: boolean }): Mesh {\n const ret = Shapes[args.type || args.shape](args);\n const geo = combineGeometries(ret);\n\n return createMesh(engine, geo.points, geo.indices, options.color || [1, 0, 0], options.depthTest, args.shape);\n}\n\nfunction createMesh (engine: Engine, points: Float32Array, indices: Uint16Array, color: vec3, depthTest = false, name?: string): Mesh {\n const material = Material.create(\n engine,\n {\n uniformValues: {\n u_color: new Float32Array(color),\n u_model: new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]),\n },\n shader: {\n shared: true,\n fragment: `\n precision mediump float;\n\n uniform vec3 u_color;\n\n void main(){\n gl_FragColor = vec4(u_color,1.0);\n }`,\n vertex: `precision highp float;\n\n attribute vec3 a_Position;\n\n uniform mat4 u_model;\n uniform mat4 effects_MatrixVP;\n void main(){\n gl_Position = effects_MatrixVP * u_model * vec4(a_Position,1.0);\n }`,\n },\n });\n\n material.setVector3('u_color', Vector3.fromArray(color));\n material.setMatrix('u_model', Matrix4.IDENTITY);\n material.depthTest = depthTest;\n material.stencilTest = false;\n material.blending = false;\n material.depthMask = true;\n const geometry = Geometry.create(\n engine,\n {\n attributes: {\n a_Position: {\n size: 3,\n data: points,\n },\n },\n indices: {\n data: indices,\n },\n mode: glContext.LINES,\n drawCount: indices.length,\n });\n\n return Mesh.create(\n engine,\n {\n name,\n geometry,\n material,\n priority: 3000,\n });\n}\n","import type { ShaderMacros, GeometryDrawMode, Engine, spec } from '@galacean/effects';\nimport { GLSLVersion, glContext, Geometry, DestroyOptions, Material, Mesh, math } from '@galacean/effects';\n\nconst { Vector4 } = math;\n\nexport function createParticleWireframe (engine: Engine, mesh: Mesh, color: spec.vec3): Mesh {\n const geometry = new SharedGeometry(\n engine,\n {\n geometry: mesh.firstGeometry(),\n mode: glContext.LINES,\n index: {\n data: new Uint16Array(0),\n },\n name: 'testtest',\n });\n\n const { vertex, fragment, macros, name } = mesh.material.props.shader;\n const materialOptions = { ...mesh.material.props };\n const newMacros = [...(macros || [] as ShaderMacros), ['PREVIEW_BORDER', 1]] as ShaderMacros;\n\n materialOptions.shader = {\n vertex,\n fragment,\n macros: newMacros,\n shared: true,\n name: name + '_wireframe',\n glslVersion: engine.gpuCapability.level === 2 ? GLSLVersion.GLSL3 : GLSLVersion.GLSL1,\n };\n const material = Material.create(engine, materialOptions);\n\n material.depthTest = mesh.material.depthTest;\n material.setVector4('uPreviewColor', new Vector4(color[0], color[1], color[2], 1));\n\n return updateWireframeMesh(mesh.geometry, mesh.material, Mesh.create(\n engine,\n {\n geometry,\n material,\n priority: 3000,\n name: materialOptions.shader.name,\n }), WireframeGeometryType.quad);\n}\n\nexport enum WireframeGeometryType {\n triangle,\n quad,\n}\n\nexport function destroyWireframeMesh (mesh: Mesh) {\n mesh.geometry?.dispose();\n mesh.dispose({ geometries: DestroyOptions.keep });\n}\n\nexport function updateWireframeMesh (originGeometry: Geometry, originMaterial: Material, wireframe: Mesh, type: WireframeGeometryType) {\n wireframe.material.cloneUniforms(originMaterial);\n\n const geometry = originGeometry;\n const wireframeGeometry = wireframe.firstGeometry();\n\n for (const macro of Object.keys(originMaterial.enabledMacros)) {\n wireframe.material.enableMacro(macro, originMaterial.enabledMacros[macro]);\n }\n\n if (type === WireframeGeometryType.triangle) {\n // 线框模式不绘制模型的时候,drawCount 为负数\n const drawCount = Math.abs(geometry.getDrawCount());\n\n if (drawCount !== 0) {\n if (drawCount !== wireframeGeometry.getDrawCount() / 2) {\n const indexData = geometry.getIndexData() as Uint16Array | undefined;\n const data = indexData ? getTriangleIndexData(indexData) : getTriangleIndexDataByCount(drawCount);\n\n wireframeGeometry.setIndexData(data);\n wireframeGeometry.setDrawCount(data.length);\n }\n }\n } else if (type === WireframeGeometryType.quad) {\n if (geometry.getDrawCount() / 6 !== wireframeGeometry.getDrawCount() / 8) {\n const data = getQuadIndexData(geometry.getDrawCount() / 6, geometry.getIndexData() as Uint16Array);\n\n wireframeGeometry.setIndexData(data);\n wireframeGeometry.setDrawCount(data.length);\n }\n }\n\n return wireframe;\n}\n\nfunction getQuadIndexData (faceCount: number, oid: Uint16Array): Uint16Array {\n const indexData = new Uint16Array(faceCount * 8);\n\n for (let i = 0; i < faceCount; i++) {\n const idx = i * 8;\n const base = i * 4;\n\n indexData[idx] = base;\n indexData[idx + 1] = 1 + base;\n indexData[idx + 2] = 1 + base;\n indexData[idx + 3] = 3 + base;\n indexData[idx + 4] = 3 + base;\n indexData[idx + 5] = 2 + base;\n indexData[idx + 6] = 2 + base;\n indexData[idx + 7] = base;\n }\n\n return indexData;\n}\n\nexport function createModeWireframe (engine: Engine, mesh: Mesh, color: spec.vec3): Mesh {\n const geometry = new SharedGeometry(\n engine,\n {\n geometry: mesh.firstGeometry(),\n mode: glContext.LINES,\n index: {\n data: new Uint32Array(0),\n },\n });\n const { vertex, fragment } = mesh.material.shader.shaderData;\n const materialOptions = { ...mesh.material.props };\n\n const newMacros = [['PREVIEW_BORDER', 1]] as ShaderMacros;\n\n materialOptions.shader = {\n vertex,\n fragment,\n macros: newMacros,\n shared: true,\n name: (mesh.name ?? 'unamedmesh') + '_wireframe',\n glslVersion: engine.gpuCapability.level === 2 ? GLSLVersion.GLSL3 : GLSLVersion.GLSL1,\n };\n\n const material = Material.create(engine, materialOptions);\n\n material.depthTest = true;\n material.setVector4('uPreviewColor', new Vector4(color[0], color[1], color[2], 1));\n\n return updateWireframeMesh(mesh.geometry, mesh.material, Mesh.create(\n engine,\n {\n geometry,\n material,\n priority: 3000,\n name: materialOptions.shader.name,\n }), WireframeGeometryType.triangle);\n}\n\nfunction getTriangleIndexDataByCount (drawCount: number): Uint32Array {\n const faceCount = drawCount / 3;\n const indexData = new Uint32Array(faceCount * 6);\n\n for (let i = 0; i < faceCount; i++) {\n const idx = i * 6;\n const p0 = i * 3;\n const p1 = p0 + 1;\n const p2 = p0 + 2;\n\n indexData[idx] = p0;\n indexData[idx + 1] = p1;\n indexData[idx + 2] = p1;\n indexData[idx + 3] = p2;\n indexData[idx + 4] = p2;\n indexData[idx + 5] = p0;\n }\n\n return indexData;\n}\n\nfunction getTriangleIndexData (oid: Uint16Array): Uint32Array {\n const faceCount = oid.length / 3;\n const indexData = new Uint32Array(faceCount * 6);\n\n for (let i = 0; i < faceCount; i++) {\n const idx = i * 6;\n const base = i * 3;\n const p0 = oid[base];\n const p1 = oid[base + 1];\n const p2 = oid[base + 2];\n\n indexData[idx] = p0;\n indexData[idx + 1] = p1;\n indexData[idx + 2] = p1;\n indexData[idx + 3] = p2;\n indexData[idx + 4] = p2;\n indexData[idx + 5] = p0;\n }\n\n return indexData;\n}\n\nexport interface SharedGeometryOptions {\n name?: string,\n drawStart?: number,\n drawCount?: number,\n mode?: GeometryDrawMode,\n index?: { data: Uint16Array | Uint32Array },\n geometry: Geometry,\n}\n\nexport class SharedGeometry extends Geometry {\n constructor (engine: Engine, options: SharedGeometryOptions) {\n const source = options.geometry;\n const sourceIndex = options.index?.data ?? source.getIndexData();\n const indexData = sourceIndex?.slice() as Uint16Array | Uint32Array | undefined;\n\n super(engine, {\n name: options.name,\n attributes: {},\n indices: indexData ? { data: indexData } : undefined,\n drawStart: options.drawStart ?? 0,\n drawCount: options.drawCount ?? 0,\n mode: options.mode ?? 0,\n });\n source.getAttributeNames().forEach(name => {\n const vertexBuffer = source.getVertexBuffer(name);\n\n if (vertexBuffer) {\n this.setVerticesBuffer(vertexBuffer);\n }\n });\n }\n}\n","import type { GeometryDrawMode, HitTestCustomParams, RenderFrame, Renderer, Texture, VFXItem } from '@galacean/effects';\nimport {\n RenderPass, Mesh, RenderPassPriorityPostprocess, RenderPassPriorityPrepare, HitTestType,\n TextureLoadAction, ParticleSystemRenderer, RendererComponent, Transform, assertExist,\n effectsClass, glContext, math, serialize, spec, PluginSystem,\n ParticleSystem,\n} from '@galacean/effects';\nimport type { GizmoVFXItemOptions } from './define';\nimport { GizmoSubType } from './define';\nimport type { EditorGizmoPlugin } from './gizmo-loader';\nimport { iconTextures } from './gizmo-loader';\nimport type { GizmoItemBoundingSphere, GizmoItemBounding, Ray, TriangleLike } from './gizmo-vfx-item';\nimport { BoundingType } from './gizmo-vfx-item';\nimport { computeOrthographicOffCenter } from './math-utils';\nimport { createMeshFromSubType } from './mesh';\nimport { intersectRayLine } from './raycast';\nimport { createMeshFromShape } from './shape';\nimport { moveToPointWidthFixDistance } from './util';\nimport { WireframeGeometryType, createModeWireframe, destroyWireframeMesh, updateWireframeMesh } from './wireframe';\nimport { GeometryType } from './geometry';\n\n// TODO: Move to spec\ninterface GizmoComponentData extends spec.ComponentData {\n options: GizmoVFXItemOptions,\n transform?: Record<string, unknown>,\n}\n\nconst editorRenderPassName = 'editor-gizmo';\nconst frontRenderPassName = 'front-gizmo';\nconst behindRenderPassName = 'behind-gizmo';\n\ntype Vector2 = math.Vector2;\ntype Vector3 = math.Vector3;\ntype Matrix4 = math.Matrix4;\n\nconst { Vector2, Vector3, Matrix4, Quaternion } = math;\nconst constants = glContext;\n\n@effectsClass('GizmoComponent')\nexport class GizmoComponent extends RendererComponent {\n gizmoPlugin: EditorGizmoPlugin;\n targetItem: VFXItem;\n needCreateModelContent: boolean;\n target: string;\n subType: GizmoSubType;\n size: any;\n contents?: Map<Mesh, Transform>;\n boundingMap: Map<string, GizmoItemBounding> = new Map();\n hitBounding?: { key: string, position: Vector3 };\n wireframeMesh: Mesh;\n @serialize()\n coordinateSpace: CoordinateSpace = CoordinateSpace.Local;\n\n color: spec.vec3;\n renderMode!: GeometryDrawMode;\n depthTest?: boolean;\n mat = Matrix4.fromIdentity();\n wireframeMeshes: Mesh[] = [];\n meshes: Mesh[] = [];\n mesh: Mesh | null = null;\n\n override onStart (): void {\n this.item.getHitTestParams = this.getHitTestParams;\n for (const item of this.item.composition?.items ?? []) {\n if (item.id === this.target) {\n this.targetItem = item;\n }\n }\n const targetItem = this.targetItem;\n\n if (!targetItem) {\n\n return;\n }\n const composition = this.item.composition;\n\n for (const plugin of PluginSystem.getPlugins() ?? []) {\n if (plugin.name === 'editor-gizmo') {\n this.gizmoPlugin = plugin as EditorGizmoPlugin;\n }\n }\n const gizmoPlugin = this.gizmoPlugin;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison\n if (targetItem.type === '7' || !gizmoPlugin) {\n return;\n }\n const gizmoSubType = this.subType;\n\n switch (gizmoSubType) {\n case GizmoSubType.particleEmitter:\n this.createParticleContent(targetItem);\n\n break;\n case GizmoSubType.modelWireframe:\n this.needCreateModelContent = true;\n this.createModelContent(targetItem);\n\n break;\n case GizmoSubType.box:\n case GizmoSubType.sphere:\n case GizmoSubType.cylinder:\n case GizmoSubType.cone:\n case GizmoSubType.torus:\n case GizmoSubType.sprite:\n case GizmoSubType.frustum:\n case GizmoSubType.directionLight:\n case GizmoSubType.pointLight:\n case GizmoSubType.spotLight:\n case GizmoSubType.floorGrid:\n this.createBasicContent(targetItem, gizmoSubType);\n\n break;\n case GizmoSubType.camera:\n case GizmoSubType.light:\n this.createBasicContent(targetItem, gizmoSubType, iconTextures);\n\n break;\n case GizmoSubType.rotation:\n case GizmoSubType.scale:\n case GizmoSubType.translation:\n this.createCombinationContent(targetItem, gizmoSubType);\n\n break;\n case GizmoSubType.viewHelper:\n this.createCombinationContent(targetItem, gizmoSubType, iconTextures);\n\n break;\n case GizmoSubType.boundingBox:\n this.createBoundingBoxContent(targetItem);\n\n break;\n default:\n break;\n }\n composition?.loaderData.gizmoItems.push(this.item);\n }\n\n override onEnable (): void {\n super.onEnable();\n if (!this.item.composition) {\n return;\n }\n\n const renderFrame = this.item.composition.renderFrame;\n\n for (const mesh of this.meshes) {\n if (mesh.name === GeometryType.FloorGrid.toString() || mesh.name === 'Box') {\n this.getFrontRenderPass(renderFrame).addMesh(mesh);\n } else if (mesh.name === 'translation' || mesh.name === 'scale' || mesh.name === 'rotation') {\n this.getBehindRenderPass(renderFrame).addMesh(mesh);\n } else {\n this.getEditorRenderPass(renderFrame).addMesh(mesh);\n }\n }\n }\n\n override onDisable (): void {\n super.onDisable();\n if (!this.item.composition) {\n return;\n }\n\n const renderFrame = this.item.composition.renderFrame;\n\n for (const mesh of this.meshes) {\n if (mesh.name === GeometryType.FloorGrid.toString() || mesh.name === 'Box') {\n this.getFrontRenderPass(renderFrame).removeMesh(mesh);\n } else if (mesh.name === 'translation' || mesh.name === 'scale' || mesh.name === 'rotation') {\n this.getBehindRenderPass(renderFrame).removeMesh(mesh);\n } else {\n this.getEditorRenderPass(renderFrame).removeMesh(mesh);\n }\n }\n }\n\n override onUpdate (dt: number): void {\n this.updateRenderData();\n }\n\n override onDestroy (): void {\n const gizmoMesh = this.mesh;\n const composition = this.item.composition;\n\n if (!composition) {\n return;\n }\n\n if (gizmoMesh && !gizmoMesh.isDestroyed) {\n gizmoMesh.dispose();\n\n if (gizmoMesh.name === GeometryType.FloorGrid.toString() || gizmoMesh.name === 'Box') {\n this.getFrontRenderPass(composition.renderFrame).removeMesh(gizmoMesh);\n } else {\n this.getEditorRenderPass(composition.renderFrame).removeMesh(gizmoMesh);\n }\n }\n if (this.contents) {\n for (const [mesh] of this.contents) {\n if (!mesh.isDestroyed) {\n mesh.dispose();\n if (mesh.name === 'translation' || mesh.name === 'scale' || mesh.name === 'rotation') {\n this.getBehindRenderPass(composition.renderFrame).removeMesh(mesh);\n } else {\n this.getEditorRenderPass(composition.renderFrame).removeMesh(mesh);\n }\n }\n }\n }\n\n if (this && this.wireframeMeshes.length > 0) {\n this.wireframeMeshes.forEach(mesh => {\n if (!mesh.isDestroyed) {\n destroyWireframeMesh(mesh);\n this.getEditorRenderPass(composition.renderFrame).removeMesh(mesh);\n }\n });\n } else {\n const wireframeMesh = this.wireframeMesh;\n\n if (wireframeMesh && !wireframeMesh.isDestroyed) {\n destroyWireframeMesh(wireframeMesh);\n this.getEditorRenderPass(composition.renderFrame).removeMesh(wireframeMesh);\n }\n }\n\n const arr: VFXItem[] = composition.loaderData.gizmoItems;\n const index = arr.indexOf(this.item);\n\n if (index > -1) {\n arr.splice(index, 1);\n }\n }\n\n override render (renderer: Renderer): void {\n // The material of the 3D plugin is updated during the render phase. In order to obtain the correct value, it is kept consistent here.\n if (this.subType === GizmoSubType.modelWireframe) { // 模型线框\n if (this.wireframeMesh && this.targetItem) {\n //@ts-expect-error TODO 和 3D 类型解耦\n const pMesh = this.targetItem.getComponent(RendererComponent)?.content;\n const meshes = pMesh.subMeshes;\n const wireframeMeshes = this.wireframeMeshes;\n\n if (meshes?.length > 0) {\n wireframeMeshes[0].worldMatrix.copyFrom(pMesh.matrix);\n updateWireframeMesh(meshes[0].geometry.geometry, meshes[0].material.effectMaterial, wireframeMeshes[0], WireframeGeometryType.triangle);\n }\n }\n }\n }\n\n updateRenderData () {\n const item = this.item;\n const gizmoSubType = this.subType;\n\n if (gizmoSubType === GizmoSubType.particleEmitter) { // 粒子发射器\n if (this.targetItem && this.mesh) {\n this.mat = this.targetItem.transform.getWorldMatrix();\n this.mesh.material.setMatrix('u_model', this.mat);\n }\n if (this.wireframeMesh && this.targetItem) {\n const particle = this.targetItem.getComponent(ParticleSystemRenderer);\n\n if (particle) {\n updateWireframeMesh(particle.particleMesh.mesh.geometry, particle.particleMesh.mesh.material, this.wireframeMesh, WireframeGeometryType.quad);\n this.wireframeMesh.worldMatrix = particle.particleMesh.mesh.worldMatrix;\n }\n }\n } else { // 几何体模型\n if (this.targetItem) {\n if (this.contents) { // 组合几何体\n // const targetTransform = this.targetItem.transform.clone();\n\n const worldPos = new Vector3();\n const worldQuat = new Quaternion();\n const worldScale = new Vector3(1, 1, 1);\n\n // Scale Gizmo 没有世界空间\n if (this.coordinateSpace == CoordinateSpace.Local || gizmoSubType === GizmoSubType.scale) {\n this.targetItem.transform.assignWorldTRS(worldPos, worldQuat);\n } else {\n this.targetItem.transform.assignWorldTRS(worldPos);\n }\n\n const targetTransform = new Transform({\n position: worldPos,\n quat: worldQuat,\n scale: worldScale,\n valid: true,\n });\n\n // 移动\\旋转\\缩放gizmo去除近大远小\n if (gizmoSubType === GizmoSubType.rotation || gizmoSubType === GizmoSubType.scale || gizmoSubType === GizmoSubType.translation) {\n const camera = item.composition!.camera;\n const cameraPos = camera.position || new Vector3();\n const itemPos = targetTransform.position;\n const newPos = moveToPointWidthFixDistance(cameraPos, itemPos);\n\n targetTransform.setPosition(newPos.x, newPos.y, newPos.z);\n }\n\n this.mat = targetTransform.getWorldMatrix();\n const center = targetTransform.position;\n\n for (const [mesh, transform] of this.contents) {\n let worldMat4: Matrix4;\n\n transform.parentTransform = targetTransform;\n const position = new Vector3();\n\n transform.assignWorldTRS(position);\n // 物体和中心点在屏幕空间上投影的距离\n let distanceToCneter = 100;\n let theta = 1;\n\n if (gizmoSubType === GizmoSubType.viewHelper) {\n // 正交投影只需要计算物体在XY平面上的投影与中心点的距离\n if (mesh.name === 'sprite') {\n distanceToCneter = position.toVector2().distance(center.toVector2());\n theta = (this.boundingMap.get('posX') as GizmoItemBoundingSphere).radius;\n }\n // 将物体挂到相机的transform上\n const fov = 30; // 指定fov角度\n const screenWidth = item.composition!.renderer.getWidth();\n const screenHeight = item.composition!.renderer.getHeight();\n const distance = 16; // 指定物体与相机的距离\n const width = 2 * Math.tan(fov * Math.PI / 360) * distance;\n const aspect = screenWidth / screenHeight;\n const height = width / aspect;\n const cameraModelMat4 = item.composition!.camera.getInverseViewMatrix();\n const padding = this.size.padding || 1; // 指定viewHelper与屏幕右上角的边距\n let localMat: Matrix4;\n\n localMat = transform.getWorldMatrix();\n const worldTransform: Transform = new Transform({\n valid: true,\n });\n\n worldTransform.cloneFromMatrix(localMat);\n worldTransform.setPosition((position.x + width / 2) - padding, (position.y + height / 2) - padding, position.z);\n localMat = worldTransform.getWorldMatrix();\n worldMat4 = cameraModelMat4.clone().multiply(localMat);\n // 正交投影到屏幕上\n const proMat5 = computeOrthographicOffCenter(-width / 2, width / 2, -height / 2, height / 2, -distance, distance);\n\n mesh.material.setMatrix('_MatrixP', proMat5);\n } else {\n if (gizmoSubType === GizmoSubType.rotation) {\n const cameraPos = item.composition!.camera.position || [0, 0, 0];\n\n mesh.material.setVector3('u_cameraPos', cameraPos);\n mesh.material.setVector3('u_center', center);\n }\n worldMat4 = transform.getWorldMatrix();\n // TODO 计算物体和中心点在屏幕空间上投影的距离 distanceToCneter\n }\n mesh.material.setMatrix('u_model', worldMat4);\n\n // 使用distanceToCneter处理坐标轴旋转到中心点附近时的遮挡问题\n if (distanceToCneter < theta) {\n if (distanceToCneter < theta * 0.5) {\n mesh.material.setVector2('u_alpha', new Vector2(0, 0));\n } else {\n mesh.material.setVector2('u_alpha', new Vector2((2 / theta) * distanceToCneter - 1, 0));\n }\n }\n }\n }\n if (this.mesh) { // 基础几何体\n const worldPos = new Vector3();\n const worldQuat = new Quaternion();\n const worldSca = new Vector3(1, 1, 1);\n\n this.targetItem.transform.assignWorldTRS(worldPos, worldQuat);\n\n const targetTransform = new Transform({\n position: worldPos,\n quat: worldQuat,\n scale: worldSca,\n valid: true,\n });\n\n if (gizmoSubType === GizmoSubType.light || gizmoSubType === GizmoSubType.camera) {\n const camera = item.composition!.camera;\n const cameraPos = camera.position || new Vector3(0, 0, 0);\n const itemPos = targetTransform.position;\n const newPos = moveToPointWidthFixDistance(cameraPos, itemPos);\n\n targetTransform.setPosition(newPos.x, newPos.y, newPos.z);\n }\n\n this.mat = targetTransform.getWorldMatrix();\n\n this.mesh.material.setMatrix('u_model', targetTransform.getWorldMatrix());\n }\n }\n }\n }\n\n /**\n * 获取默认绘制模式\n * @returns 绘制模式常量\n */\n getDefaultRenderMode (): GeometryDrawMode {\n let result: GeometryDrawMode;\n const gizmoSubType = this.subType;\n\n switch (gizmoSubType) {\n case GizmoSubType.particleEmitter:\n case GizmoSubType.modelWireframe:\n case GizmoSubType.frustum:\n case GizmoSubType.directionLight:\n case GizmoSubType.spotLight:\n case GizmoSubType.pointLight:\n case GizmoSubType.floorGrid:\n result = constants.LINES;\n\n break;\n default:\n result = constants.TRIANGLES;\n\n break;\n }\n\n return result;\n }\n\n /**\n * 获取默认尺寸\n * @returns 几何体尺寸\n */\n getDefaultSize () {\n let result = {};\n const gizmoSubType = this.subType;\n\n switch (gizmoSubType) {\n case GizmoSubType.box:\n result = { width: 1, height: 1, depth: 1 };\n\n break;\n case GizmoSubType.sphere:\n result = { radius: 1 };\n\n break;\n case GizmoSubType.cylinder:\n result = { radius: 1, height: 1 };\n\n break;\n case GizmoSubType.cone:\n result = { radius: 1, height: 1 };\n\n break;\n default:\n result = {};\n\n break;\n }\n\n return result;\n }\n\n createModelContent (item: VFXItem) {\n const modelComponent = item.getComponent(RendererComponent);\n //@ts-expect-error TODO 和 3D 类型解耦\n const psubMesh = modelComponent.content.subMeshes[0];\n const engine = item.composition?.renderer.engine;\n\n assertExist(engine);\n\n if (psubMesh) {\n this.targetItem = item;\n this.wireframeMeshes = [];\n\n const originMesh = Mesh.create(\n engine,\n {\n geometry: psubMesh.geometry.geometry,\n material: psubMesh.material.effectMaterial,\n priority: 3000,\n });\n const mesh = this.wireframeMesh = createModeWireframe(engine, originMesh, this.color);\n\n this.wireframeMeshes.push(mesh);\n this.meshes.push(mesh);\n }\n }\n\n createParticleContent (item: VFXItem) {\n const shape = item.getComponent(ParticleSystem).definition.shape;\n const engine = this.item.composition?.renderer.engine;\n\n assertExist(engine);\n\n this.targetItem = item;\n if (shape && shape.type) {\n const mesh = this.mesh = createMeshFromShape(engine, shape, { color: this.color });\n\n this.meshes.push(mesh);\n }\n }\n\n /**\n * 创建 BoundingBox 几何体模型\n * @param item - VFXItem\n */\n createBoundingBoxContent (item: VFXItem) {\n const gizmoItem = this.item;\n const shape = {\n shape: 'Box',\n width: this.size.width,\n height: this.size.height,\n depth: this.size.depth,\n center: this.size.center,\n };\n const engine = gizmoItem.composition?.renderer.engine;\n\n assertExist(engine);\n\n this.targetItem = item;\n if (shape) {\n const mesh = this.mesh = createMeshFromShape(engine, shape, { color: this.color, depthTest: this.depthTest });\n\n this.meshes.push(mesh);\n }\n }\n\n /**\n * 创建基础几何体模型\n * @param item - VFXItem\n * @param subType - GizmoSubType 类型\n */\n createBasicContent (item: VFXItem, subType: GizmoSubType, iconTextures?: Map<string, Texture>) {\n const gizmoItem = this.item;\n const options = {\n size: this.size,\n color: this.color,\n renderMode: this.renderMode,\n depthTest: this.depthTest,\n };\n const engine = gizmoItem.composition?.renderer.engine;\n\n assertExist(engine);\n\n const mesh = this.mesh = createMeshFromSubType(engine, subType, this.boundingMap, iconTextures, options) as Mesh;\n\n this.targetItem = item;\n this.meshes.push(mesh);\n }\n\n /**\n * 创建组合几何体模型\n * @param item - VFXItem\n * @param subType - GizmoSubType 类型\n * @param iconTextures - XYZ 图标纹理(viewHelper 专用)\n */\n createCombinationContent (item: VFXItem, subType: GizmoSubType, iconTextures?: Map<string, Texture>) {\n const gizmoItem = this.item;\n const options = {\n size: this.size,\n renderMode: this.renderMode,\n };\n\n const engine = gizmoItem.composition?.renderer.engine;\n\n assertExist(engine);\n\n this.contents = createMeshFromSubType(engine, subType, this.boundingMap, iconTextures, options) as Map<Mesh, Transform>;\n for (const mesh of this.contents.keys()) {\n this.meshes.push(mesh);\n }\n this.targetItem = item;\n }\n\n override fromData (data: GizmoComponentData): void {\n super.fromData(data);\n const item = this.item;\n\n item.duration = 999;\n const {\n target, subType, renderMode, size, depthTest,\n color = [255, 255, 255],\n } = data.options;\n\n this.target = target;\n this.subType = subType;\n this.renderMode = renderMode || this.getDefaultRenderMode();\n this.size = size || this.getDefaultSize();\n this.depthTest = depthTest;\n\n const [r, g, b] = color;\n\n this.color = [r / 255, g / 255, b / 255];\n if (data) {\n item.transform = new Transform(data.transform);\n }\n }\n\n /**\n * 射线检测算法\n * @returns 包含射线检测算法回调方法的参数\n */\n private getHitTestParams = (): void | HitTestCustomParams => {\n const item = this.item;\n const boundingMap = this.boundingMap;\n\n if (boundingMap.size > 0) {\n const boundingKeys = boundingMap.keys();\n let worldMat4: Matrix4;\n\n worldMat4 = this.transform.getWorldMatrix();\n const targetItem = this.targetItem;\n\n if (targetItem) {\n //const targetTransform = this.targetItem.transform.clone();\n const worldPos = new Vector3();\n const worldQuat = new Quaternion();\n const worldSca = new Vector3(1, 1, 1);\n const gizmoSubType = this.subType;\n\n // Scale Gizmo 没有世界空间\n if (this.coordinateSpace == CoordinateSpace.Local || gizmoSubType === GizmoSubType.scale) {\n this.targetItem.transform.assignWorldTRS(worldPos, worldQuat);\n } else {\n this.targetItem.transform.assignWorldTRS(worldPos);\n }\n\n const targetTransform = new Transform({\n position: worldPos,\n quat: worldQuat,\n scale: worldSca,\n valid: true,\n });\n\n // 移动\\旋转\\缩放gizmo去除近大远小\n if (\n gizmoSubType === GizmoSubType.rotation ||\n gizmoSubType === GizmoSubType.scale ||\n gizmoSubType === GizmoSubType.translation ||\n gizmoSubType === GizmoSubType.camera ||\n gizmoSubType === GizmoSubType.light\n ) {\n const camera = item.composition!.camera;\n const cameraPos = camera.position || [0, 0, 0];\n const itemPos = targetTransform.position;\n const newPos = moveToPointWidthFixDistance(cameraPos, itemPos);\n\n targetTransform.setPosition(newPos.x, newPos.y, newPos.z);\n worldMat4 = targetTransform.getWorldMatrix();\n } else {\n worldMat4 = targetTransform.getWorldMatrix();\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = item;\n\n return {\n type: HitTestType.custom,\n clipMasks:this.frameClipMasks,\n /**\n * 自定义射线检测算法\n * @param ray 射线参数\n * @param pointInCanvas 屏幕坐标\n * @returns\n */\n collect (ray: Ray, pointInCanvas: Vector2): Vector3[] | void {\n const hitPositions = [];\n const gizmoComponent = self.getComponent(GizmoComponent);\n\n gizmoComponent.hitBounding = undefined;\n for (const key of boundingKeys) {\n const bounding = boundingMap.get(key);\n const center = new Vector3();\n const worldCenter = new Vector3();\n\n if (bounding?.type === BoundingType.box || bounding?.type === BoundingType.sphere) {\n if (bounding?.center) {\n center.copyFrom(bounding?.center);\n }\n worldMat4.projectPoint(center, worldCenter);\n }\n let position: Vector3 | undefined;\n\n switch (bounding?.type) {\n case BoundingType.box: // 立方体包围盒\n {\n const boxHalfSize = bounding.size.clone().multiply(0.5);\n const boxMax = center.clone().add(boxHalfSize);\n const boxMin = center.clone().subtract(boxHalfSize);\n\n position = ray.intersectBox({ min: boxMin, max: boxMax }, new Vector3());\n }\n\n break;\n case BoundingType.sphere: // 球体包围盒\n\n // viewHelper 使用了正交投影,使用屏幕投影点计算\n if (gizmoComponent.subType === GizmoSubType.viewHelper) {\n // 计算正交投影矩阵\n const viewMat4 = self.composition!.camera.getViewMatrix();\n const fov = 30; // 指定fov角度\n const screenWidth = self.composition!.renderer.getWidth();\n const screenHeight = self.composition!.renderer.getHeight();\n const distance = 16; // 指定物体与相机的距离\n const width = 2 * Math.tan(fov * Math.PI / 360) * distance;\n const aspect = screenWidth / screenHeight;\n const height = width / aspect;\n const proMat4 = computeOrthographicOffCenter(-width / 2, width / 2, -height / 2, height / 2, -distance, distance);\n\n // 将包围盒挂到相机的 transform 上\n const cameraModelMat4 = self.composition!.camera.getInverseViewMatrix();\n const localTransform = new Transform({\n valid: true,\n });\n\n localTransform.cloneFromMatrix(worldMat4);\n const pos = localTransform.position;\n const padding = gizmoComponent.size.padding || 1; // 指定viewHelper与屏幕右上角的边距\n\n localTransform.setPosition((pos.x + width / 2) - padding, (pos.y + height / 2) - padding, pos.z);\n const localMat4 = localTransform.getWorldMatrix();\n const modelMat4 = cameraModelMat4.clone().multiply(localMat4);\n\n modelMat4.projectPoint(center, worldCenter);\n\n // 包围球中心点正交投影到屏幕上\n const vpMat4 = proMat4.clone().multiply(viewMat4);\n const mvpMat4 = vpMat4.clone().multiply(modelMat4);\n const screenCenter = mvpMat4.projectPoint(center, new Vector3());\n // const screenCenterX = screenCenter.x;\n // const screenCenterY = screenCenter.y;\n\n // 包围球上的点正交投影到屏幕上\n const radius = bounding.radius;\n const up = new Vector3(\n localMat4.elements[1],\n localMat4.elements[5],\n localMat4.elements[9],\n ).normalize();\n\n const point = up.clone().multiply(radius);\n\n point.add(center);\n\n const screenPoint = mvpMat4.projectPoint(point, new Vector3());\n // const screenPointX = screenPoint.x;\n // const screenPointY = screenPoint.y;\n\n // 计算正交投影到屏幕上的包围球的半径\n const screenCenter2 = screenCenter.toVector2();\n const screenPoint2 = screenPoint.toVector2();\n const screenRadius = screenCenter2.distance(screenPoint2);\n\n if (pointInCanvas.distance(screenCenter2) < screenRadius * 1.2) {\n position = worldCenter;\n }\n } else {\n position = ray.intersectSphere({ center: worldCenter, radius: bounding.radius }, new Vector3());\n }\n\n break;\n case BoundingType.triangle: {// 三角数组包围盒\n const { triangles, backfaceCulling } = bounding;\n const tmpPositions: Vector3[] = [];\n let tmpPosition;\n\n for (let j = 0; j < triangles.length; j++) {\n const triangle = triangles[j];\n const worldTriangle: TriangleLike = {\n p0: worldMat4.projectPoint(triangle.p0 as Vector3, new Vector3()),\n p1: worldMat4.projectPoint(triangle.p1 as Vector3, new Vector3()),\n p2: worldMat4.projectPoint(triangle.p2 as Vector3, new Vector3()),\n };\n\n tmpPosition = ray.intersectTriangle(worldTriangle, new Vector3(), backfaceCulling);\n if (tmpPosition) {\n tmpPositions.push(tmpPosition);\n }\n }\n // 仅保存距离相机最近的点\n if (tmpPositions.length > 0) {\n let lastDistance: number;\n\n tmpPositions.forEach(item => {\n const distance = ray.origin.distanceSquared(item);\n\n if (!lastDistance || distance < lastDistance) {\n lastDistance = distance;\n position = item;\n }\n });\n }\n\n break;\n }\n case BoundingType.line: {// 线条包围盒,将线条转换到屏幕空间,计算线条与屏幕交互点的距离,小于阈值判定为点中\n const { points, width } = bounding;\n\n position = intersectRayLine(new Vector3(), pointInCanvas, points, width / 2, worldMat4, self.composition!.camera);\n\n break;\n }\n default:\n break;\n }\n if (position) {\n hitPositions.push(position);\n // 缓存距离相机最近的 BoundingKey\n if (gizmoComponent.hitBounding) {\n const distance = ray.origin.distanceSquared(position);\n const lastDistance = ray.origin.distanceSquared(gizmoComponent.hitBounding.position);\n\n if (distance < lastDistance) {\n gizmoComponent.hitBounding.key = key;\n gizmoComponent.hitBounding.position = position;\n }\n } else {\n gizmoComponent.hitBounding = {\n key,\n position,\n };\n }\n }\n }\n if (hitPositions.length === 0) {\n gizmoComponent.hitBounding = undefined;\n }\n\n return hitPositions;\n },\n behavior: spec.InteractBehavior.NOTIFY,\n };\n }\n };\n\n getBehindRenderPass (pipeline: RenderFrame): RenderPass {\n let rp = pipeline.renderPasses.find(renderPass => renderPass.name === behindRenderPassName);\n\n if (!rp) {\n rp = new DrawGizmoBehindPass(pipeline.renderer);\n pipeline.addRenderPass(rp);\n }\n\n return rp;\n }\n\n getEditorRenderPass (pipeline: RenderFrame): RenderPass {\n let rp = pipeline.renderPasses.find(renderPass => renderPass.name === editorRenderPassName);\n\n if (!rp) {\n rp = new DrawGizmoEditorPass(pipeline.renderer);\n pipeline.addRenderPass(rp);\n }\n\n return rp;\n }\n\n getFrontRenderPass (pipeline: RenderFrame): RenderPass {\n let rp = pipeline.renderPasses.find(renderPass => renderPass.name === frontRenderPassName);\n\n if (!rp) {\n rp = new DrawGizmoFrontPass(pipeline.renderer);\n pipeline.addRenderPass(rp);\n }\n\n return rp;\n }\n\n}\n\nexport enum CoordinateSpace {\n Local,\n World\n}\n\nclass DrawGizmoBehindPass extends RenderPass {\n constructor (renderer: Renderer) {\n super(renderer);\n this.priority = RenderPassPriorityPostprocess + RenderPassPriorityPostprocess;\n this.name = behindRenderPassName;\n }\n\n override execute (renderer: Renderer): void {\n renderer.clear({ depthAction: TextureLoadAction.clear });\n renderer.renderMeshes(this.meshes);\n }\n}\n\nclass DrawGizmoFrontPass extends RenderPass {\n constructor (renderer: Renderer) {\n super(renderer);\n this.priority = RenderPassPriorityPrepare + 2;\n this.name = frontRenderPassName;\n }\n\n override execute (renderer: Renderer): void {\n renderer.renderMeshes(this.meshes);\n }\n}\n\nclass DrawGizmoEditorPass extends RenderPass {\n constructor (renderer: Renderer) {\n super(renderer);\n this.priority = RenderPassPriorityPostprocess + 2;\n this.name = editorRenderPassName;\n }\n\n override execute (renderer: Renderer): void {\n renderer.renderMeshes(this.meshes);\n }\n}\n","import type { Composition, Scene, SceneLoadOptions, Texture, VFXItem } from '@galacean/effects';\nimport { Plugin } from '@galacean/effects';\nimport { axisIconMap } from './constants';\nimport { createImage, createTexture } from './util';\nimport { GizmoComponent } from './gizmo-component';\n\nconst iconImages: Map<string, HTMLImageElement> = new Map();\n\nexport const iconTextures: Map<string, Texture> = new Map();\n\nexport class EditorGizmoPlugin extends Plugin {\n override order = 1001;\n\n override async onAssetsLoadStart (scene: Scene, options?: SceneLoadOptions | undefined): Promise<void> {\n iconTextures.clear();\n\n if (iconImages.size !== axisIconMap.size) {\n for (const [name, data] of axisIconMap) {\n iconImages.set(name, await createImage(data));\n }\n }\n }\n\n override onCompositionCreated (composition: Composition, scene: Scene) {\n const engine = composition.renderer.engine;\n\n iconImages.forEach((image, name) => {\n iconTextures.set(name, createTexture(engine, image));\n });\n iconImages.clear();\n\n const items = composition.items;\n const targetMap: { [key: string]: VFXItem[] } = {};\n\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n const gizmoComponent = item.getComponent(GizmoComponent);\n\n if (gizmoComponent) {\n if (!targetMap[gizmoComponent.target]) {\n targetMap[gizmoComponent.target] = [];\n }\n targetMap[gizmoComponent.target].push(item);\n }\n }\n composition.loaderData.gizmoTarget = targetMap;\n composition.loaderData.gizmoItems = [];\n }\n}\n","import * as EFFECTS from '@galacean/effects';\nimport { logger, registerPlugin } from '@galacean/effects';\nimport { EditorGizmoPlugin } from './gizmo-loader';\nimport { GizmoSubType } from './define';\nimport { GeometryType, createGeometry } from './geometry';\n\nregisterPlugin('editor-gizmo', EditorGizmoPlugin);\n\nexport { DirectionLightData } from './geometry/direction-light';\nexport {\n GizmoSubType,\n GeometryType,\n createGeometry,\n};\nexport * from './gizmo-component';\n\n/**\n * 插件版本号\n */\nexport const version = __VERSION__;\n\nlogger.info(`Plugin editor gizmo version: ${version}.`);\n\nif (version !== EFFECTS.version) {\n console.error(\n '注意:请统一 Editor Gizmo 插件与 Player 版本,不统一的版本混用会有不可预知的后果!',\n '\\nAttention: Please ensure the Editor Gizmo plugin is synchronized with the Player version. Mixing and matching incompatible versions may result in unpredictable consequences!'\n );\n}\n"],"names":["asyncGeneratorStep","gen","resolve","reject","_next","_throw","key","arg","info","value","error","done","Promise","then","_async_to_generator","fn","self","args","arguments","apply","err","undefined","_set_prototype_of","o","p","Object","setPrototypeOf","__proto__","_inherits","subClass","superClass","TypeError","prototype","create","constructor","writable","configurable","_is_native_reflect_construct","result","Boolean","valueOf","call","Reflect","construct","_","_construct","Parent","Class","a","push","Constructor","Function","bind","instance","_get_prototype_of","getPrototypeOf","_is_native_function","toString","indexOf","_wrap_native_super","_cache","Map","has","get","set","Wrapper","enumerable","_array_like_to_array","arr","len","length","i","arr2","Array","_unsupported_iterable_to_array","minLen","n","slice","name","from","test","_create_for_of_iterator_helper_loose","allowArrayLike","it","Symbol","iterator","next","isArray","_instanceof","left","right","hasInstance","__decorate","decorators","target","desc","c","r","getOwnPropertyDescriptor","d","decorate","defineProperty","__generator","thisArg","body","label","sent","t","trys","ops","f","y","g","Iterator","verb","v","step","op","pop","e","SuppressedError","suppressed","message","Error","color","xAxisColor","yAxisColor","zAxisColor","renderMode","glContext","TRIANGLES","axisIconMap","createImage","imageUrl","image","Image","src","onload","onerror","createTexture","engine","hookDestroy","texture","Texture","dispose","noop","moveToPointWidthFixDistance","targetPos","currentPos","vecCameraItem","clone","subtract","normalVecCameraItem","normalize","scalerVecCameraItem","multiply","vecScalerItem","vecItemScaler","add","GizmoSubType","math","Vector3","Ray","BoundingType","Matrix4","Vector2","distanceOfPointAndLine","point","line","AC","BC","AB","subtractVectors","lengthAC","lengthBC","lengthAB","P","allArea","Math","abs","sqrt","distance","l1","pow","l2","isInLine","projectionOfPointAndLine","line0","toVector2","line1","worldAB","worldAP","worldP","computeOrthographicOffCenter","bottom","top","near","far","b","tx","ty","tz","_extends","assign","source","hasOwnProperty","GeometryData","points","uvs","normals","indices","createXYPlaneCircle","radius","z","segments","thetaStart","thetaLength","startIndex","theta","x","cos","sin","createXZPlaneCircle","createYZPlaneCircle","SphereGeometryData","widthSegments","heightSegments","phiStart","phiLength","PI","max","floor","thetaEnd","min","grid","index","iy","verticesRow","uOffset","ix","u","normal","toArray","BoxGeometryData","width","height","depth","buildPlane","w","uDir","vDir","widthHalf","heightHalf","depthHalf","vertexCounter","numberOfVertices","CylinderGeometryData","radiusTop","radiusBottom","radialSegments","openEnded","generateTorso","slope","indexRow","sinTheta","cosTheta","px","py","halfHeight","pz","indexArray","generateCap","centerIndexStart","sign","centerIndexEnd","uvU","uvV","ConeGeometryData","TorusGeometryData","tube","tubularSegments","arc","j","cx","cy","PlaneGeometryData","gridX","gridY","gridX1","gridY1","segmentWidth","segmentHeight","Euler","FrustumGeometryData","position","rotation","fov","aspect","fovY","ratio","halfY","tan","halfX","point1","point2","point3","point4","matrix","fromArray","toMatrix4","result1","transformPoint","result2","result3","result4","DirectionLightData","linesNumber","start","PointLightData","range","SpotLightData","spotAngle","angle","FloorLineEdgeGeometryData","sideLength","parts","end","GeometryType","createGeometry","type","size","geometryData","segments4","Geometry","attributes","a_Position","data","Float32Array","a_Normal","a_UV1","Uint16Array","mode","drawCount","createMeshFromSubType","subType","boundingMap","iconTexture","options","WebGLRenderingContext","sprite","createSpriteMesh","camera","light","translation","createTranslationMesh","scale","createScaleMesh","viewHelper","createViewHelperMesh","createRotationMesh","createBasicMesh","radiusSegments","boundSize","xCircle","torus","yCircle","zCircle","center","sphere","alpha","xCircleBounding","yCircleBounding","zCircleBounding","xCircleTransform","Transform","valid","yCircleTransform","zCircleTransform","centerTransform","setRotation","triangle","triangles","firstGeometry","getTriangle","backfaceCulling","geometry","transform","getIndexData","getAttributeData","mat4","getWorldMatrix","i0","i1","i2","p0","p1","p2","projectPoint","axisSize","axisMesh","createAxisMesh","mesh","arrowSize","xArrow","cone","depthTest","yArrow","zArrow","xArrowTransform","yArrowTransform","zArrowTransform","translate","planeSize","xyPlane","plane","yzPlane","zxPlane","xyPlaneTransform","yzPlaneTransform","zxPlaneTransform","delta","createAxisBounding","boxSize","centerBoxSize","xCube","box","yCube","zCube","centerCube","xCubeTransform","yCubeTransform","zCubeTransform","centerCubeTransform","posXSphere","posYSphere","posZSphere","posXSphereTransform","posYSphereTransform","posZSphereTransform","negXSphere","negYSphere","negZSphere","negXSphereTransform","negYSphereTransform","negZSphereTransform","isCentered","xAxis","yAxis","zAxis","xAxisTransform","yAxisTransform","zAxisTransform","materialType","geometryType","Sphere","cylinder","Cylinder","Cone","Torus","Sprite","Plane","frustum","Frustum","directionLight","DirectionLight","spotLight","SpotLight","pointLight","PointLight","floorGrid","FloorGrid","Box","material","createBlendMaterial","createHideBackMaterial","createMaterial","Mesh","priority","spriteColor","createSpriteMaterial","myColor","myDepthTest","Material","uniformValues","u_color","u_model","shader","fragment","vertex","shared","setVector3","setMatrix","IDENTITY","stencilTest","blending","depthMask","u_cameraPos","u_center","ZERO","myAlpha","u_alpha","setVector2","blendEquation","FUNC_ADD","blendFunction","SRC_ALPHA","ONE_MINUS_SRC_ALPHA","setTexture","intersectRayLine","out","pointInCanvas","worldMat4","up","elements","radiusPoint","mvpMat4","getModelViewProjection","screenStart","screenEnd","screenRadiusPoint","screenRadiusVector","screenRadius","screenPosition","inverseViewProjection","getInverseViewProjectionMatrix","rectSize","DEG2RAD","arcPath","rotate","rotMat4","negate","addPoint","transformNormal","h","myCenter","map","item","rect","pos","forEach","vec","combineGeometries","geometries","indicesBase","Shapes","ret","detail","anchors","block","unshift","Rectangle","Circle","Hemisphere","outerRadius","concat","Edge","hw","RectangleEdge","Donut","donutRadius","path","positions","keys","None","createMeshFromShape","shape","geo","createMesh","LINES","Vector4","WireframeGeometryType","destroyWireframeMesh","DestroyOptions","keep","updateWireframeMesh","originGeometry","originMaterial","wireframe","cloneUniforms","wireframeGeometry","enabledMacros","macro","enableMacro","getDrawCount","indexData","getTriangleIndexData","getTriangleIndexDataByCount","setIndexData","setDrawCount","getQuadIndexData","faceCount","oid","idx","base","createModeWireframe","SharedGeometry","Uint32Array","shaderData","materialOptions","props","newMacros","macros","glslVersion","gpuCapability","level","GLSLVersion","GLSL3","GLSL1","setVector4","sourceIndex","drawStart","getAttributeNames","vertexBuffer","getVertexBuffer","setVerticesBuffer","editorRenderPassName","frontRenderPassName","behindRenderPassName","Quaternion","constants","GizmoComponent","coordinateSpace","mat","fromIdentity","wireframeMeshes","meshes","getHitTestParams","boundingKeys","targetItem","worldPos","worldQuat","worldSca","gizmoSubType","assignWorldTRS","targetTransform","quat","composition","cameraPos","itemPos","newPos","setPosition","HitTestType","custom","clipMasks","frameClipMasks","collect","ray","bounding","worldCenter","copyFrom","boxHalfSize","boxMax","boxMin","intersectBox","gizmoComponent","viewMat4","getViewMatrix","screenWidth","renderer","getWidth","screenHeight","getHeight","proMat4","cameraModelMat4","getInverseViewMatrix","localTransform","cloneFromMatrix","padding","localMat4","modelMat4","vpMat4","screenCenter","screenPoint","screenCenter2","screenPoint2","intersectSphere","tmpPositions","tmpPosition","worldTriangle","intersectTriangle","lastDistance","origin","distanceSquared","hitPositions","hitBounding","getComponent","behavior","spec","InteractBehavior","NOTIFY","onStart","items","id","PluginSystem","getPlugins","plugin","gizmoPlugin","particleEmitter","createParticleContent","modelWireframe","needCreateModelContent","createModelContent","createBasicContent","iconTextures","createCombinationContent","boundingBox","createBoundingBoxContent","loaderData","gizmoItems","onEnable","renderFrame","getFrontRenderPass","addMesh","getBehindRenderPass","getEditorRenderPass","onDisable","removeMesh","onUpdate","dt","updateRenderData","onDestroy","gizmoMesh","isDestroyed","contents","wireframeMesh","splice","render","pMesh","RendererComponent","content","subMeshes","worldMatrix","effectMaterial","particle","ParticleSystemRenderer","particleMesh","quad","worldScale","parentTransform","distanceToCneter","localMat","worldTransform","proMat5","getDefaultRenderMode","getDefaultSize","modelComponent","psubMesh","assertExist","originMesh","ParticleSystem","definition","gizmoItem","fromData","duration","pipeline","rp","renderPasses","find","renderPass","DrawGizmoBehindPass","addRenderPass","DrawGizmoEditorPass","DrawGizmoFrontPass","serialize","effectsClass","CoordinateSpace","RenderPassPriorityPostprocess","execute","clear","depthAction","TextureLoadAction","renderMeshes","RenderPass","RenderPassPriorityPrepare","iconImages","EditorGizmoPlugin","order","onAssetsLoadStart","scene","onCompositionCreated","targetMap","gizmoTarget","Plugin","registerPlugin","version","logger","EFFECTS","console"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_async_to_generator.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_set_prototype_of.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_inherits.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_is_native_reflect_construct.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_construct.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_get_prototype_of.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_is_native_function.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_wrap_native_super.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_array_like_to_array.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_unsupported_iterable_to_array.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_create_for_of_iterator_helper_loose.js","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_instanceof.js","../../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.es6.mjs","../src/3d/constants.ts","../src/3d/util.ts","../src/3d/define.ts","../src/3d/gizmo-vfx-item.ts","../src/3d/math-utils.ts","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_extends.js","../src/3d/geometry/geometry.ts","../src/3d/geometry/sphere.ts","../src/3d/geometry/box.ts","../src/3d/geometry/cylinder.ts","../src/3d/geometry/cone.ts","../src/3d/geometry/torus.ts","../src/3d/geometry/plane.ts","../src/3d/geometry/frustum.ts","../src/3d/geometry/direction-light.ts","../src/3d/geometry/point-light.ts","../src/3d/geometry/spot-light.ts","../src/3d/geometry/floor-line-edge.ts","../src/3d/geometry/index.ts","../src/3d/mesh.ts","../src/3d/raycast.ts","../src/3d/shape.ts","../src/3d/wireframe.ts","../src/3d/gizmo-component.ts","../src/3d/gizmo-loader.ts","../src/2d/math/core.ts","../../../node_modules/.pnpm/@galacean+effects-math@1.2.1/node_modules/@galacean/effects-math/es/core/utils.js","../../../node_modules/.pnpm/@galacean+effects-math@1.2.1/node_modules/@galacean/effects-math/es/core/vector2.js","../../../node_modules/.pnpm/@galacean+effects-math@1.2.1/node_modules/@galacean/effects-math/es/extension/box2.js","../../../node_modules/.pnpm/@galacean+effects-math@1.2.1/node_modules/@galacean/effects-math/es/extension/circle.js","../../../node_modules/.pnpm/@galacean+effects-math@1.2.1/node_modules/@galacean/effects-math/es/extension/line2.js","../../../node_modules/.pnpm/@galacean+effects-math@1.2.1/node_modules/@galacean/effects-math/es/core/vector3.js","../../../node_modules/.pnpm/@galacean+effects-math@1.2.1/node_modules/@galacean/effects-math/es/extension/line3.js","../../../node_modules/.pnpm/@galacean+effects-math@1.2.1/node_modules/@galacean/effects-math/es/extension/plane.js","../../../node_modules/.pnpm/@galacean+effects-math@1.2.1/node_modules/@galacean/effects-math/es/extension/utils/round-number.js","../../../node_modules/.pnpm/@galacean+effects-math@1.2.1/node_modules/@galacean/effects-math/es/extension/utils/is-range-in.js","../src/2d/math/geometry.ts","../src/2d/math/ray-caster.ts","../src/2d/math/utils.ts","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_create_class.js","../src/2d/text/text-caret-mapper.ts","../src/2d/text/text-edit-session.ts","../src/2d/gizmo-tool.ts","../src/2d/gizmo-tools/hand-gizmo-tool.ts","../src/2d/gizmo-tools/move-gizmo-tool.ts","../src/2d/cursor.ts","../src/2d/gizmo.ts","../src/2d/gizmo-type.ts","../src/2d/items/vfx-item-factory.ts","../src/2d/items/default-vfx-items.ts","../src/2d/viewport/coordinates.ts","../src/2d/items/item-predicates.ts","../src/2d/items/item-geometry.ts","../src/2d/items/item-hierarchy.ts","../src/2d/items/media-controls.ts","../src/2d/gizmos/resize-selection-gizmo/transform-types.ts","../src/2d/viewport/viewport-utils.ts","../src/2d/gizmos/resize-selection-gizmo/anchored-resize.ts","../src/2d/configs/config-definition.ts","../src/2d/configs/loading-config.ts","../src/2d/configs/builtin-configs.ts","../src/2d/viewport/viewport-operations.ts","../src/2d/viewport/viewport-range.ts","../src/2d/viewport/viewport-navigation-controller.ts","../src/2d/frame/frame-resize.ts","../src/2d/drawing.ts","../src/2d/gizmos/resize-selection-gizmo/resize-selection-gizmo.ts","../src/2d/gizmos/corner-rotation-gizmo.ts","../src/2d/gizmos/leave-effects-edit-gizmo.ts","../src/2d/gizmos/box-selection-gizmo.ts","../src/2d/gizmos/change-selection-gizmo.ts","../src/2d/gizmos/click-drag-multiplex-gizmo.ts","../src/2d/frame/layout-calculations.ts","../src/2d/frame/types.ts","../src/2d/frame/frame-assisted-layout.ts","../src/2d/gizmos/move-selection-gizmo.ts","../src/2d/selection/create-selection-interaction-gizmo.ts","../src/2d/modes/effects-edit-mode.ts","../src/2d/gizmos/leave-text-edit-gizmo.ts","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_assert_this_initialized.js","../src/2d/gizmos/text-gizmo.ts","../src/2d/gizmos/select-text-gizmo.ts","../src/2d/modes/text-edit-mode.ts","../src/2d/gizmos/enter-edit-mode-gizmo.ts","../src/2d/modes/default-selection-mode.ts","../src/2d/gizmos/image-interaction.ts","../src/2d/gizmos/image-cut-gizmo.ts","../src/2d/gizmo-tools/image-cut-gizmo-tool.ts","../src/2d/gizmos/image-expand-gizmo.ts","../src/2d/gizmo-tools/image-expand-gizmo-tool.ts","../src/2d/gizmos/sprite-text-edit-gizmo.ts","../src/2d/gizmo-tools/sprite-text-edit-gizmo-tool.ts","../src/2d/gizmos/mask-gizmo.ts","../src/2d/gizmo-tools/mask-gizmo-tool.ts","../src/2d/drag-threshold.ts","../src/2d/gizmos/item-create-gizmo.ts","../src/2d/gizmo-tools/item-create-gizmo-tool.ts","../src/2d/configs/config-manager.ts","../src/2d/gizmo-manager.ts","../src/2d/gizmos/loading-manager.ts","../src/2d/frame/frame-auto-layout.ts","../src/2d/frame/frame-manager.ts","../src/2d/selection/selection.ts","../src/2d/selection/snap-manager.ts","../src/2d/cursor-icons.ts","../src/2d/gizmos/loading-gizmo.ts","../src/2d/gizmos/hand-gizmo.ts","../src/2d/gizmos/icon-gizmo.ts","../src/2d/viewport/gizmo-viewport.ts","../src/2d/gesture-handler.ts","../src/2d/gizmos/viewport-overlay-gizmo.ts","../src/index.ts"],"sourcesContent":["function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) resolve(value);\n else Promise.resolve(value).then(_next, _throw);\n}\nfunction _async_to_generator(fn) {\n return function() {\n var self = this, args = arguments;\n\n return new Promise(function(resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}\nexport { _async_to_generator as _ };\n","function _set_prototype_of(o, p) {\n _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {\n o.__proto__ = p;\n\n return o;\n };\n\n return _set_prototype_of(o, p);\n}\nexport { _set_prototype_of as _ };\n","import { _ as _set_prototype_of } from \"./_set_prototype_of.js\";\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } });\n\n if (superClass) _set_prototype_of(subClass, superClass);\n}\nexport { _inherits as _ };\n","function _is_native_reflect_construct() {\n // Since Reflect.construct can't be properly polyfilled, some\n // implementations (e.g. core-js@2) don't set the correct internal slots.\n // Those polyfills don't allow us to subclass built-ins, so we need to\n // use our fallback implementation.\n try {\n // If the internal slots aren't set, this throws an error similar to\n // TypeError: this is not a Boolean object.\n var result = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));\n } catch (_) {}\n return (_is_native_reflect_construct = function() {\n return !!result;\n })();\n}\n\nexport { _is_native_reflect_construct as _ };\n","import { _ as _is_native_reflect_construct } from \"./_is_native_reflect_construct.js\";\nimport { _ as _set_prototype_of } from \"./_set_prototype_of.js\";\nfunction _construct(Parent, args, Class) {\n if (_is_native_reflect_construct()) _construct = Reflect.construct;\n else {\n _construct = function construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n\n if (Class) _set_prototype_of(instance, Class.prototype);\n\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}\nexport { _construct as _ };\n","function _get_prototype_of(o) {\n _get_prototype_of = Object.setPrototypeOf ? Object.getPrototypeOf : function getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n\n return _get_prototype_of(o);\n}\nexport { _get_prototype_of as _ };\n","function _is_native_function(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\nexport { _is_native_function as _ };\n","import { _ as _construct } from \"./_construct.js\";\nimport { _ as _get_prototype_of } from \"./_get_prototype_of.js\";\nimport { _ as _is_native_function } from \"./_is_native_function.js\";\nimport { _ as _set_prototype_of } from \"./_set_prototype_of.js\";\n\nfunction _wrap_native_super(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n _wrap_native_super = function(Class) {\n if (Class === null || !_is_native_function(Class)) return Class;\n if (typeof Class !== \"function\") throw new TypeError(\"Super expression must either be null or a function\");\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return _construct(Class, arguments, _get_prototype_of(this).constructor);\n }\n Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } });\n\n return _set_prototype_of(Wrapper, Class);\n };\n\n return _wrap_native_super(Class);\n}\nexport { _wrap_native_super as _ };\n","function _array_like_to_array(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\nexport { _array_like_to_array as _ };\n","import { _ as _array_like_to_array } from \"./_array_like_to_array.js\";\n\nfunction _unsupported_iterable_to_array(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _array_like_to_array(o, minLen);\n\n var n = Object.prototype.toString.call(o).slice(8, -1);\n\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);\n}\nexport { _unsupported_iterable_to_array as _ };\n","import { _ as _unsupported_iterable_to_array } from \"./_unsupported_iterable_to_array.js\";\n\nfunction _create_for_of_iterator_helper_loose(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n\n if (it) return (it = it.call(o)).next.bind(it);\n // Fallback for engines without symbol support\n if (Array.isArray(o) || (it = _unsupported_iterable_to_array(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n\n var i = 0;\n\n return function() {\n if (i >= o.length) return { done: true };\n\n return { done: false, value: o[i++] };\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nexport { _create_for_of_iterator_helper_loose as _ };\n","function _instanceof(left, right) {\n if (right != null && typeof Symbol !== \"undefined\" && right[Symbol.hasInstance]) {\n return !!right[Symbol.hasInstance](left);\n } else return left instanceof right;\n}\nexport { _instanceof as _ };\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","import { glContext } from '@galacean/effects';\n\n// 坐标轴默认颜色\nexport const color = {\n xAxisColor: [216 / 255, 178 / 255, 76 / 255],\n yAxisColor: [38 / 255, 149 / 255, 235 / 255],\n zAxisColor: [134 / 255, 74 / 255, 245 / 255],\n};\nexport const renderMode = glContext.TRIANGLES;\n// 坐标轴默认图标\nexport const axisIconMap: Map<string, string> = new Map();\n\naxisIconMap.set(\n 'light', `data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEwAAABMCAYAAAGwkGG9AAABYWlDQ1BrQ0dDb2xvc\n lNwYWNlRGlzcGxheVAzAAAokWNgYFJJLCjIYWFgYMjNKykKcndSiIiMUmB/yMAOhLwMYgwKicnFBY4BAT5AJQwwGhV8u8bACK\n Iv64LMOiU1tUm1XsDXYqbw1YuvRJsw1aMArpTU4mQg/QeIU5MLikoYGBhTgGzl8pICELsDyBYpAjoKyJ4DYqdD2BtA7CQI+wh\n YTUiQM5B9A8hWSM5IBJrB+API1klCEk9HYkPtBQFul8zigpzESoUAYwKuJQOUpFaUgGjn/ILKosz0jBIFR2AopSp45iXr6SgY\n GRiaMzCAwhyi+nMgOCwZxc4gxJrvMzDY7v////9uhJjXfgaGjUCdXDsRYhoWDAyC3AwMJ3YWJBYlgoWYgZgpLY2B4dNyBgbeS\n AYG4QtAPdHFacZGYHlGHicGBtZ7//9/VmNgYJ/MwPB3wv//vxf9//93MVDzHQaGA3kAFSFl7jXH0fsAAAA4ZVhJZk1NACoAAA\n AIAAGHaQAEAAAAAQAAABoAAAAAAAKgAgAEAAAAAQAAAEygAwAEAAAAAQAAAEwAAAAANXHl2gAADOxJREFUeAHtXAuMVcUZPuf\n cu8uyC+626wOM8hBsLY192FJN1QKpmIJRxNZt2qahW2qxlCCwu/fa2lZpKPTeZYGlUN1YlfSRVIi80qqxpCjW1vqqrY0hBtyF\n YqNphV0q7HL3Pvr9lzuH/8ydmXPuayPkngTOP/9r/vln5p85/8xdy5KeeHzdjFgsflBCWw5HgCGTyaRmR6ORKQTH4/FxnJ6Fi\n SAjOc6jUWbk5cCMYS4Vi61tq60NPS5wicSwAC3bhQCsXbv2CrwmC1x7e/sTAnbfXV1dH3cLOoC3jnh4WcBOLNbZbdvWl3RK4F\n NbMHt44vHO/6xbt260BykK0PqskALj3wUs6Nm3jATjA/F415eJqHVyJNJxJ/r6t0amrPrcf55eWL9+/UcEMZFI7kbL+6ks98A\n cwVRfX//84sWLj4myBQ1NboEBnZ2dm6mYNRyd60rwVqbTVk22zJEkpSinPDYRk3gwvDdkMtZdoszfTU2NTYsWLRrgOC1Mtco1\n c2Y/ussblFHFp+1pV3sBQFmVKTvA5C9uKM0bXi4r7GrGqGtIpzPvkXa5RmGpHz7rM2ImRZgQ42UBk+k53jdFz7qW6YQweHdhv\n s3BAL4/Gu1QDmIhq1UmmiYY+VtnvXJocEWILA4J19SELxcKOV3g6J1n2RlGew2a9X3OTDBiWxprlI3nMVTkCbdKy0hIpYjwZC\n m9ofCL9OaPR5mIz7btLONMQWGPMgh9kAQdx9ppUoAmHlXRZWUqnsC4968y7dCora2Zpmrf8LA1OpMZfplo8uD1LF5cGCvM67w\n sw5jHu/NwMkKUseVwFzyBozfG13BHR8cejqs8jKmyXVULrJyowiMG3sPx7tCgOYlnPhhu4gwIQT2pVLqP4wgmfsTAVTDgeUHL\n KjszuS0L/vi9INIbc3oULwtY9CQMuBoV3k14B5rdfYFgEAJ+b8GPwLkG8/pKB5qzOxFB8FMg04Xc8HDyH3mDVmZWlWGAjRYdA\n O0yFd2Lc9qj0fYuL86/VJBh8PN+uOfD/mrVHI5jfx79+0c11YsNZBiG7AKMtC1cFOFxDwL4bI6T4Y0bN44aHBwakvGiy2Q8L/\n sahr35jzFufyiEYNBBGDRVlIO8c12f5rx+xrnzkgt5YY9Rg4UaRbrQmIxsCKZvv7ceb8lo2IYNGy7i7KGQcwMvlwg3muSNhqX\n Tac/qgC55y6TMj6ZbtlVyRsNUAiOFOzsNg+tPcA/hM/FWXi4UxlDI7tSCyAUIF/FeKJoURFkhPNgOTV6+fHmfTsbXMCGI6U3p\n octEudg3bZIjkfbuYuWrcjoPKLsSKaxLk8nUYSHU0FB//pIlS94VZfnd09PT2N8/ICJ5AlFeufESctiZvIeJ0JArHwH/pYIm3\n p5wQWsa7fS4UcRoMoro/f3H+ZipJZzpwdacf/VeQnVi5/JrLuN6DK1IwrAQJ44eXVe3dOnSUxyngrHQb8FCv0DQ5HVR4OU3jH\n ka26gZXnxoXjTatjsMpVEo/SmMcunhcOiqtra2v7mICgGRSGQmqYZTBlD/eaerSe2CBy18unfERCDFRu5b1NqRMOq0Eaf/x46\n lkerFM0gYssPtSs4YFN66dWuor+/wKnicVoTJ+EcrxUsYQz/HThWZlOKfogyj/KxIv/pUfQzjdHyQcSrrKcgw8lBvb19SVuJX\n Rhc9ie5SfvfqZAMbFo93X57JnHpDp8gPD+OOwrhmPz5BD2QYPFULT6nCxhHLCs+PRle8JBTSG2GgHZO8k+NysDKYKvjy82QqJ\n gqAMh7b7Atw8vFfGc/LlHLH9/pijsMi/jMs4ks5TgX7egzKvwflq7lw0ABKMvDe7fDe1kLlPUsSFxawbJRlNecCoeAwvxFEty\n F8uAdRxI2g/juzVO5gQ8eEhMRUTsMAfjEaXfg/jgsCwzhPqgZxTyrnazF6bHg49RAXwVIlrWucaobhtVc4x969e8O8LMNGw9C\n yz3GBFStWZJcMjgsKO47DdxTWCy+8Mtck62OYSbQwWnNzsyek2HZKmQIVWkfMsNbWVjm5MlYYoXqPmGGqyk24qmEm76hoVY+p\n vGLCVT2GPO51Xg+FKOWgfYzLApKU+3j0x/bnKD4UbgqHw+LjVquYE5LJ5GeRXP4Fx02fftUveVmGjYZNnjxxtrRB/AB2G3/mV\n 1VkhQHLiVmzZhm36MYx1tLSkoDXVgasLDAbtth1fsy+G0VSEIt13WJZqZI+x3KGHMMmM1DyLpBhonXYzeKegPOZUCjj22IhQ2\n /sLI5gZ/Iax1Xhqgcwnu6hz6+gnsCB1gVBeeluGzI823U3rUiPcvAjkP4LtEuyDEipY3qPIVj3cH4E4CuRUPmnjnfTpk3NJ06\n cdL9H8R0xAdklqs/z5MUxtIQOk7NGESfyViIl6RGUCpz/EYnmKQ4ODl7DEZS9pNnOcQR7DKN0Iwy5mjNRroqX/WB83Brzr/JB\n OenDakI5WU/vuYbBqLuh9Gveiu0HocjzCeelF1dSfcmjpzznmVnDKLLDqDW8GnwHPoNs47c5rpww5XdlfTDOXT8dOv5XLDdvi\n vyoLFyuMiXz0PjxXB+6MwTjjhHOoasEnIg0wHG4egrHVQpG49+mRDTXD+OaKGHtjrEcMY3Q0MgZKw1TIhqe81z7Qp0XY309Pe\n vgqUF4ypPnr7RRQj889xjyZndQGXacwNi+yzNFBWMl36ezk4fnwkvzMpn0zagrcPozZ9dJyD4Fj+4cO3bszsCXYMvUqBFxGAL\n 7TIzpTkSkT5fJbo8a9P4hOPEHyLz+BnBeVtbDXGKhYg6jfQMC0aNw1I0l2liQOBy2HwHoZuyXDxQkGJC57A6jTRluGVGGbkJA\n G7JsaOhbGIEU6f9N/3AhdBjOvhgw/tkfAnxFljHgf9A3iDh4PUbdywFFArGV1WHYnTyIRgfZIg3ACWsuvPD87tb8LKPRcDgOF\n +q6voqZ9xPAE43MIMJxf6mrGzWrmEM2le6yOIzuHCM1cQDOohGhfbDibJ4+/VPL/DIDWgUKAjrpO6h3I0imTEcS0/SjWJLfUK\n goCFWyw3KfFZRM0u5HEJB3Yw98K3q7YgEZm6T78G1yr6n1mKLXwI6/mnj8aPJGzI8/j37y5OA+IE3OasF+Zl4lnUVGYY90H0Y\n RXTV19+WE5w++dvYhxhZ0OsflCS7JYfSbM8QRw5GLMx/O2iZXWqkyTTkc7E416K8dGhp6wED3JZXkMMywlboaMKJ24QbzTh29\n UnisiocQK7VTE/HuK7HYBhqJRT1FO2z16tXNGF15mYYzVmR+dQYeWQgdaazbthM3FGtR0Q6rw+NT6as+9IqREdh7oRxbF+0zT\n kvxIRTtMB+9lJ3WBl8/2XLQERJSBj1Ft7toQYMx5zSp6rACu7fqsKrDCvRAgezVETZSDsPHtmkVwqFLqNBMaoGm69kpq4s9ou\n EYzin+1pu+WjOlsbHxXfPSnfxDd3d3QTkxc43BqPiFQ31v7yE6LqzVSSDXtk9H88OXlK3At+RiHOAFPvH1M2Zk6PZD+FAPkrN\n TmlOSw0gj8vU4zLB2YAqUrEtpYVmR9krKapSisiyNJGfhwtWP4Lh734+OQz7uUdzVai3lxq5wclkcJpTRmwIufjDyDUzVFjhw\n BlCmTCiJlP1BbEUe394+Zkz9/Z6/nVP2mqoKqx6oeqDqgbPLAwUFfayE03CQ8DhWwomimbR5xSLZinS0Mcsp+E1v+otoOC1/B\n PrFdbA+nPTcgYTgHpNcEBr2jF9HJpZ0uxdbYPsh6J+LtLbxD9hw/YEcRkdpOB36EyoznD47+Jlb8Tl8nC9+F6vqJm6cgLEteB\n iHKQtFudA3nIWfeKZ36OTguP319aOv8/s5Mskbl3x8ZtQMDBzfjeuMX9BVlsMPNDTUPevDYyRjlE7HuaKSB44ErfiHbEMbKGW\n tPA6kgUBXNnE77cnGxvNuwY2gM39yUapWm63Aweh6/Oo8AWVGZ6H3V+H+VlOQ3pHqHrEi2UY2kq2mSqmt1GZqu44vb0ri3sI3\n 8cNg35uaGMY7Jk2aeHtLS4sxa6GrWMbDyC0YYQtkfK78Ghr8MQ2tIDQ21vgl9qFtcM58P0HbDi2MRNoe5nzulMRfNL0+k0k+B\n WfVcQYZhqNexeWOGbjccVymnQ3lXAffRifgQ0OnnoHjPqGzmwYObmNvtu3wjZHIimzICdMtZqx8r8NZfqmYdzCkr8WdzoO6Cs\n 4mfK7DP4nFZgpi5HOw/SKN/XXwzT447jBW1Glh/NkYGnJaZ2FEncpknDn4Ow57NQrPajRWXxoA43Bne5Ztp5/AiNPdUJ9Avgq\n HQvbaVCpzG4Tc6Sk8AI/eiT1Qjyify+/cgKjDjFuEGae6f5EkX4WxaXsRjqjB0KTT4GstKxTGHzV+etmyZe+cyw7StS03QHro\n j4QlEqmZuJRPB9LPYSS+TTL/B5JA5hg3+BSjAAAAAElFTkSuQmCC`\n);\naxisIconMap.set(\n 'camera', `data:image/png;base64,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`\n);\naxisIconMap.set(\n 'posX', `data:image/png;base64,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\n RK5CYII=`\n);\naxisIconMap.set(\n 'posY', `data:image/png;base64,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`\n);\naxisIconMap.set(\n 'posZ', `data:image/png;base64,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`\n);\naxisIconMap.set(\n 'negX', `data:image/png;base64,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\n 5ErkJggg==`\n);\naxisIconMap.set(\n 'negY', `data:image/png;base64,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\n 5ErkJggg==`\n);\naxisIconMap.set(\n 'negZ', `data:image/png;base64,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`\n);\n","import { Texture, noop } from '@galacean/effects';\nimport type { Engine, math } from '@galacean/effects';\n\ntype Vector3 = math.Vector3;\n\n/**\n * 下载图片\n * @param imageUrl - 图片url\n * @returns 图片对象\n */\nexport async function createImage (imageUrl: string): Promise<HTMLImageElement> {\n const image = new Image();\n\n image.src = imageUrl;\n\n return new Promise<HTMLImageElement>((resolve, reject) => {\n image.onload = () => {\n resolve(image);\n };\n image.onerror = reject;\n });\n}\n\n/**\n * 创建 Texture 对象\n * @param engine - engine 对象\n * @param image - 图片对象\n * @returns 纹理\n */\nexport function createTexture (engine: Engine, image: HTMLImageElement, hookDestroy?: boolean): Texture {\n\n const texture = Texture.create(engine, { image });\n\n if (hookDestroy) {\n texture.dispose = noop;\n }\n\n return texture;\n}\n\n/**\n * 移动到距离目标点指定距离的位置\n * @param targetPos - 目标点\n * @param currentPos - 当前点\n * @returns 指定点\n */\nexport function moveToPointWidthFixDistance (targetPos: Vector3, currentPos: Vector3): Vector3 {\n const vecCameraItem = currentPos.clone().subtract(targetPos);\n\n const normalVecCameraItem = vecCameraItem.clone().normalize();\n const scalerVecCameraItem = normalVecCameraItem.clone().multiply(20);\n\n const vecScalerItem = vecCameraItem.clone().subtract(scalerVecCameraItem);\n const vecItemScaler = vecScalerItem.clone().multiply(-1);\n\n return currentPos.clone().add(vecItemScaler);\n}\n","import type { GeometryDrawMode, spec } from '@galacean/effects';\n\nexport interface GizmoVFXItemOptions {\n target: string,\n subType: GizmoSubType,\n renderMode?: GeometryDrawMode,\n type: 'editor-gizmo',\n color: spec.vec3,\n size?: number,\n depthTest?: boolean,\n}\n\nexport const GizmoVFXItemType = 'gizmo' as spec.ItemType;\n\n/**\n * Gizmo 类型\n */\nexport enum GizmoSubType {\n particleEmitter = 1,\n modelWireframe = 2,\n box,\n sphere,\n cylinder,\n cone,\n torus,\n sprite,\n plane,\n rotation,\n translation,\n scale,\n viewHelper,\n camera,\n frustum,\n light,\n directionLight,\n pointLight,\n spotLight,\n boundingBox,\n floorGrid,\n}\n","import { math } from '@galacean/effects';\n\nexport type Ray = math.Ray;\nexport type TriangleLike = math.TriangleLike;\ntype Vector3 = math.Vector3;\n\nconst { Vector3, Ray } = math;\n\n/**\n * 包围盒类型\n */\nexport enum BoundingType {\n box,\n sphere,\n triangle,\n line\n}\n\n/**\n * 线条包围盒类型\n */\nexport interface GizmoItemBoundingLine {\n type: BoundingType.line,\n // 线条包围盒两端点\n points: [Vector3, Vector3],\n // 射线与线条距离阈值\n width: number,\n}\n\n/**\n * 立方体包围盒类型\n */\nexport interface GizmoItemBoundingBox {\n type: BoundingType.box,\n //包围形状相对于元素位置的偏移,默认[0,0,0]\n center?: Vector3,\n //包围盒的xyz长度,当type为box时生效\n size: Vector3,\n}\n\n/**\n * 球体包围盒类型\n */\nexport interface GizmoItemBoundingSphere {\n type: BoundingType.sphere,\n //包围形状相对于元素位置的偏移,默认[0,0,0]\n center?: Vector3,\n //包围球的半径,当type为sphere时生效\n radius: number,\n}\n\n/**\n * 三角数组包围盒类型\n */\nexport interface GizmoItemBoundingTriangle {\n type: BoundingType.triangle,\n triangles: TriangleLike[],\n backfaceCulling?: boolean,\n}\n\nexport type GizmoItemBounding =\n | GizmoItemBoundingBox\n | GizmoItemBoundingSphere\n | GizmoItemBoundingTriangle\n | GizmoItemBoundingLine\n ;\n","import { math } from '@galacean/effects';\n\ntype Vector2 = math.Vector2;\ntype Vector3 = math.Vector3;\n\nconst { Matrix4, Vector2 } = math;\n\nexport function distanceOfPointAndLine (point: Vector2, line: [Vector2, Vector2]): { distance: number, isInLine: boolean } {\n //三角形三个边长\n const AC = new Vector2();\n const BC = new Vector2();\n const AB = new Vector2();\n\n AC.subtractVectors(point, line[0]);\n BC.subtractVectors(point, line[1]);\n AB.subtractVectors(line[1], line[0]);\n const lengthAC = AC.length();\n const lengthBC = BC.length();\n const lengthAB = AB.length();\n\n //利用海伦公式计算三角形面积\n //周长的一半\n const P = (lengthAC + lengthBC + lengthAB) / 2;\n const allArea = Math.abs(Math.sqrt(P * (P - lengthAC) * (P - lengthBC) * (P - lengthAB)));\n //普通公式计算三角形面积反推点到线的垂直距离\n const distance = (2 * allArea) / lengthAB;\n const l1 = Math.sqrt(Math.pow(lengthAC, 2) - Math.pow(distance, 2));\n const l2 = Math.sqrt(Math.pow(lengthBC, 2) - Math.pow(distance, 2));\n let isInLine = false;\n\n if (l1 <= lengthAB && l2 <= lengthAB) {\n isInLine = true;\n }\n\n return {\n distance,\n isInLine,\n };\n}\n\nexport function projectionOfPointAndLine (point: Vector2, line: [Vector3, Vector3]): Vector3 {\n const AC = new Vector2();\n const BC = new Vector2();\n const AB = new Vector2();\n const line0 = line[0].toVector2();\n const line1 = line[1].toVector2();\n\n AC.subtractVectors(point, line0);\n BC.subtractVectors(point, line1);\n AB.subtractVectors(line1, line0);\n const lengthAC = AC.length();\n const lengthBC = BC.length();\n const lengthAB = AB.length();\n\n //利用海伦公式计算三角形面积\n //周长的一半\n const P = (lengthAC + lengthBC + lengthAB) / 2;\n const allArea = Math.abs(Math.sqrt(P * (P - lengthAC) * (P - lengthBC) * (P - lengthAB)));\n //普通公式计算三角形面积反推点到线的垂直距离\n const distance = (2 * allArea) / lengthAB;\n const l1 = Math.sqrt(Math.pow(lengthAC, 2) - Math.pow(distance, 2));\n const l2 = Math.sqrt(Math.pow(lengthBC, 2) - Math.pow(distance, 2));\n\n const worldAB = line[1].clone().subtract(line[0]);\n\n const worldAP = worldAB.clone().multiply(l1 / (l1 + l2));\n\n const worldP = line[0].clone().add(worldAP);\n\n return worldP;\n}\n\nexport function computeOrthographicOffCenter (\n left: number,\n right: number,\n bottom: number,\n top: number,\n near: number,\n far: number\n) {\n let a = 1.0 / (right - left);\n let b = 1.0 / (top - bottom);\n let c = 1.0 / (far - near);\n\n const tx = -(right + left) * a;\n const ty = -(top + bottom) * b;\n const tz = -(far + near) * c;\n\n a *= 2.0;\n b *= 2.0;\n c *= -2.0;\n\n return new Matrix4(\n a,\n 0.0,\n 0.0,\n 0.0,\n //\n 0.0,\n b,\n 0.0,\n 0.0,\n //\n 0.0,\n 0.0,\n c,\n 0.0,\n //\n tx,\n ty,\n tz,\n 1.0,\n );\n}\n","function _extends() {\n _extends = Object.assign || function assign(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\nexport { _extends as _ };\n","/**\n * 基础几何数据[抽象类,不可以直接用来初始化]\n */\nexport abstract class GeometryData {\n points: number[] = [];\n uvs: number[] = [];\n normals: number[] = [];\n indices: number[] = [];\n\n /**\n * 构件 XY 平面圆(圆心为(0, 0, z))\n * @param radius - 圆半径\n * @param z - z 值\n * @param segments - 圆精度\n * @param thetaStart - 起始弧度\n * @param thetaLength - 终止弧度\n * @param startIndex - 索引起始值\n * @param points - 点数据\n * @param indices - 索引数据\n */\n createXYPlaneCircle (\n radius: number,\n z: number,\n segments: number,\n thetaStart: number,\n thetaLength: number,\n startIndex: number,\n points: number[],\n indices: number[],\n ) {\n for (let i = 0; i < segments; i++) {\n const theta = thetaStart + i * thetaLength / segments;\n const x = radius * Math.cos(theta);\n const y = radius * Math.sin(theta);\n\n points.push(x, y, z);\n indices.push(startIndex + i, startIndex + (i + 1) % segments);\n }\n }\n\n /**\n * 构件 XZ 平面圆(圆心为(0, y, 0))\n * @param radius - 圆半径\n * @param y - y 值\n * @param segments - 圆精度\n * @param thetaStart - 起始弧度\n * @param thetaLength - 终止弧度\n * @param startIndex - 索引起始值\n * @param points - 点数据\n * @param indices - 索引数据\n */\n createXZPlaneCircle (\n radius: number,\n y: number,\n segments: number,\n thetaStart: number,\n thetaLength: number,\n startIndex: number,\n points: number[],\n indices: number[],\n ) {\n for (let i = 0; i < segments; i++) {\n const theta = thetaStart + i * thetaLength / segments;\n const x = radius * Math.cos(theta);\n const z = radius * Math.sin(theta);\n\n points.push(x, y, z);\n indices.push(startIndex + i, startIndex + (i + 1) % segments);\n }\n }\n\n /**\n * 构件 YZ 平面圆(圆心为(x, 0, 0))\n * @param radius - 圆半径\n * @param x - x 值\n * @param segments - 圆精度\n * @param thetaStart - 起始弧度\n * @param thetaLength - 终止弧度\n * @param startIndex - 索引起始值\n * @param points - 点数据\n * @param indices - 索引数据\n */\n createYZPlaneCircle (\n radius: number,\n x: number,\n segments: number,\n thetaStart: number,\n thetaLength: number,\n startIndex: number,\n points: number[],\n indices: number[],\n ) {\n for (let i = 0; i < segments; i++) {\n const theta = thetaStart + i * thetaLength / segments;\n const z = radius * Math.cos(theta);\n const y = radius * Math.sin(theta);\n\n points.push(x, y, z);\n indices.push(startIndex + i, startIndex + (i + 1) % segments);\n }\n }\n}\n","import { math } from '@galacean/effects';\nimport { GeometryData } from './geometry';\n\nconst { Vector3 } = math;\n\n/**\n *\n */\nexport class SphereGeometryData extends GeometryData {\n /**\n *\n * @param radius\n * @param widthSegments\n * @param heightSegments\n * @param phiStart\n * @param phiLength\n * @param thetaStart\n * @param thetaLength\n */\n constructor (\n radius = 1,\n widthSegments = 8,\n heightSegments = 6,\n phiStart = 0,\n phiLength = Math.PI * 2,\n thetaStart = 0,\n thetaLength = Math.PI,\n ) {\n super();\n\n // 限制至少需要分为六块以保持形状\n widthSegments = Math.max(3, Math.floor(widthSegments));\n heightSegments = Math.max(2, Math.floor(heightSegments));\n\n const thetaEnd = Math.min(thetaStart + thetaLength, Math.PI);\n const grid = [];\n let index = 0;\n\n for (let iy = 0; iy <= heightSegments; iy++) {\n const verticesRow = [];\n const v = iy / heightSegments;\n\n let uOffset = 0;\n\n if (iy == 0 && thetaStart == 0) {\n uOffset = 0.5 / widthSegments;\n } else if (iy == heightSegments && thetaEnd == Math.PI) {\n uOffset = - 0.5 / widthSegments;\n }\n\n for (let ix = 0; ix <= widthSegments; ix++) {\n const u = ix / widthSegments;\n\n // point\n const x = - radius * Math.cos(phiStart + u * phiLength) * Math.sin(thetaStart + v * thetaLength);\n const y = radius * Math.cos(thetaStart + v * thetaLength);\n const z = radius * Math.sin(phiStart + u * phiLength) * Math.sin(thetaStart + v * thetaLength);\n\n this.points.push(x, y, z);\n\n // normal\n const normal = new Vector3(x, y, z).normalize();\n\n this.normals.push(...normal.toArray());\n\n // uv\n this.uvs.push(u + uOffset, 1 - v);\n\n verticesRow.push(index++);\n }\n\n grid.push(verticesRow);\n }\n\n // indices\n for (let iy = 0; iy < heightSegments; iy++) {\n for (let ix = 0; ix < widthSegments; ix++) {\n const a = grid[iy][ix + 1];\n const b = grid[iy][ix];\n const c = grid[iy + 1][ix];\n const d = grid[iy + 1][ix + 1];\n\n if (iy !== 0 || thetaStart > 0) { this.indices.push(a, b, d); }\n if (iy !== heightSegments - 1 || thetaEnd < Math.PI) { this.indices.push(b, c, d); }\n }\n }\n }\n}\n","import type { spec } from '@galacean/effects';\nimport { GeometryData } from './geometry';\n\n// 面造型未单独抽离, 整个包围盒只接受一个材质\nexport class BoxGeometryData extends GeometryData {\n /**\n *\n * @param width\n * @param height\n * @param depth\n */\n constructor (width = 1, height = 1, depth = 1) {\n super();\n\n let numberOfVertices = 0;\n\n buildPlane(2, 1, 0, - 1, - 1, depth, height, width, this.points, this.uvs, this.normals, this.indices); // px\n buildPlane(2, 1, 0, 1, - 1, depth, height, - width, this.points, this.uvs, this.normals, this.indices); // nx\n buildPlane(0, 2, 1, 1, 1, width, depth, height, this.points, this.uvs, this.normals, this.indices); // py\n buildPlane(0, 2, 1, 1, - 1, width, depth, - height, this.points, this.uvs, this.normals, this.indices); // ny\n buildPlane(0, 1, 2, 1, - 1, width, height, depth, this.points, this.uvs, this.normals, this.indices); // pz\n buildPlane(0, 1, 2, - 1, - 1, width, height, - depth, this.points, this.uvs, this.normals, this.indices); // nz\n\n function buildPlane (u: number, v: number, w: number, uDir: number,\n vDir: number, width: number, height: number, depth: number,\n points: number[], uvs: number[], normals: number[], indices: number[]) {\n\n const widthHalf = width / 2;\n const heightHalf = height / 2;\n const depthHalf = depth / 2;\n const point: spec.vec3 = [0, 0, 0];\n let vertexCounter = 0;\n\n for (let iy = 0; iy < 2; iy++) {\n const y = iy * height - heightHalf;\n\n for (let ix = 0; ix < 2; ix++) {\n const x = ix * width - widthHalf;\n\n point[u] = x * uDir;\n point[v] = y * vDir;\n point[w] = depthHalf;\n\n points.push(...point);\n\n point[u] = 0;\n point[v] = 0;\n point[w] = depth > 0 ? 1 : - 1;\n\n normals.push(...point);\n\n uvs.push(ix);\n uvs.push(1 - iy);\n\n vertexCounter += 1;\n }\n }\n\n for (let iy = 0; iy < 1; iy++) {\n for (let ix = 0; ix < 1; ix++) {\n const a = numberOfVertices + ix + 2 * iy;\n const b = numberOfVertices + ix + 2 * (iy + 1);\n const c = numberOfVertices + (ix + 1) + 2 * (iy + 1);\n const d = numberOfVertices + (ix + 1) + 2 * iy;\n\n indices.push(a, b, d);\n indices.push(b, c, d);\n }\n }\n\n numberOfVertices += vertexCounter;\n }\n }\n}\n","import { math } from '@galacean/effects';\nimport { GeometryData } from './geometry';\n\nconst { Vector3 } = math;\n\n/**\n *\n */\nexport class CylinderGeometryData extends GeometryData {\n /**\n *\n * @param radiusTop\n * @param radiusBottom\n * @param height\n * @param radialSegments\n * @param heightSegments\n * @param openEnded\n * @param thetaStart\n * @param thetaLength\n */\n constructor (\n radiusTop = 1,\n radiusBottom = 1,\n height = 1,\n radialSegments = 8,\n heightSegments = 1,\n openEnded = false,\n thetaStart = 0,\n thetaLength = Math.PI * 2,\n ) {\n super();\n radialSegments = Math.floor(radialSegments);\n heightSegments = Math.floor(heightSegments);\n\n let index = 0;\n const indexArray: number[][] = [];\n const halfHeight = height / 2;\n\n generateTorso(this.points, this.uvs, this.normals, this.indices);\n\n if (openEnded === false) {\n if (radiusTop > 0) { generateCap(true, this.points, this.uvs, this.normals, this.indices); }\n if (radiusBottom > 0) { generateCap(false, this.points, this.uvs, this.normals, this.indices); }\n }\n\n function generateTorso (points: number[], uvs: number[], normals: number[], indices: number[]) {\n // this will be used to calculate the normal\n const slope = (radiusBottom - radiusTop) / height;\n\n for (let y = 0; y <= heightSegments; y++) {\n const indexRow = [];\n const v = y / heightSegments;\n\n const radius = v * (radiusBottom - radiusTop) + radiusTop;\n\n for (let x = 0; x <= radialSegments; x++) {\n const u = x / radialSegments;\n const theta = u * thetaLength + thetaStart;\n const sinTheta = Math.sin(theta);\n const cosTheta = Math.cos(theta);\n\n const px = radius * sinTheta;\n const py = - v * height + halfHeight;\n const pz = radius * cosTheta;\n\n points.push(px, py, pz);\n\n const normal = new Vector3(sinTheta, slope, cosTheta).normalize();\n\n normals.push(...normal.toArray());\n\n uvs.push(u, 1 - v);\n\n indexRow.push(index++);\n }\n indexArray.push(indexRow);\n }\n\n for (let x = 0; x < radialSegments; x++) {\n for (let y = 0; y < heightSegments; y++) {\n const a = indexArray[y][x];\n const b = indexArray[y + 1][x];\n const c = indexArray[y + 1][x + 1];\n const d = indexArray[y][x + 1];\n\n indices.push(a, b, d);\n indices.push(b, c, d);\n }\n }\n }\n\n function generateCap (top: boolean, points: number[], uvs: number[], normals: number[], indices: number[]) {\n const centerIndexStart = index;\n\n const radius = (top === true) ? radiusTop : radiusBottom;\n const sign = (top === true) ? 1 : - 1;\n\n for (let x = 1; x <= radialSegments; x++) {\n points.push(0, halfHeight * sign, 0);\n normals.push(0, sign, 0);\n uvs.push(0.5, 0.5);\n\n index++;\n }\n\n const centerIndexEnd = index;\n\n for (let x = 0; x <= radialSegments; x++) {\n\n const u = x / radialSegments;\n const theta = u * thetaLength + thetaStart;\n\n const cosTheta = Math.cos(theta);\n const sinTheta = Math.sin(theta);\n\n const px = radius * sinTheta;\n const py = halfHeight * sign;\n const pz = radius * cosTheta;\n\n points.push(px, py, pz);\n\n normals.push(0, sign, 0);\n\n const uvU = (cosTheta * 0.5) + 0.5;\n const uvV = (sinTheta * 0.5 * sign) + 0.5;\n\n uvs.push(uvU, uvV);\n\n index++;\n }\n\n for (let x = 0; x < radialSegments; x++) {\n const c = centerIndexStart + x;\n const i = centerIndexEnd + x;\n\n if (top === true) {\n indices.push(i, i + 1, c);\n } else {\n indices.push(i + 1, i, c);\n }\n }\n }\n }\n}\n","import { CylinderGeometryData } from './cylinder';\n\n/**\n *\n */\nexport class ConeGeometryData extends CylinderGeometryData {\n /**\n *\n * @param radius\n * @param height\n * @param radialSegments\n * @param heightSegments\n * @param openEnded\n * @param thetaStart\n * @param thetaLength\n */\n constructor (\n radius = 1,\n height = 1,\n radialSegments = 8,\n heightSegments = 1,\n openEnded = false,\n thetaStart = 0,\n thetaLength = Math.PI * 2,\n ) {\n super(0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength);\n }\n}\n","import { math } from '@galacean/effects';\nimport { GeometryData } from './geometry';\n\nconst { Vector3 } = math;\n\n/**\n *\n */\nexport class TorusGeometryData extends GeometryData {\n /**\n *\n * @param radius\n * @param tube\n * @param radialSegments\n * @param tubularSegments\n * @param arc\n */\n constructor (\n radius = 1,\n tube = 0.4,\n radialSegments = 64,\n tubularSegments = 64,\n arc = Math.PI * 2,\n ) {\n super();\n\n radialSegments = Math.floor(radialSegments);\n tubularSegments = Math.floor(tubularSegments);\n\n for (let j = 0; j <= radialSegments; j++) {\n for (let i = 0; i <= tubularSegments; i++) {\n\n const u = i / tubularSegments * arc;\n const v = j / radialSegments * Math.PI * 2;\n\n const px = (radius + tube * Math.cos(v)) * Math.cos(u);\n const py = (radius + tube * Math.cos(v)) * Math.sin(u);\n const pz = tube * Math.sin(v);\n\n this.points.push(px, py, pz);\n\n const cx = radius * Math.cos(u);\n const cy = radius * Math.sin(u);\n const p = new Vector3(px, py, pz);\n const c = new Vector3(cx, cy, 0);\n const normal = p.subtract(c).normalize();\n\n this.normals.push(...normal.toArray());\n\n this.uvs.push(i / tubularSegments);\n this.uvs.push(j / radialSegments);\n }\n }\n\n for (let j = 1; j <= radialSegments; j++) {\n for (let i = 1; i <= tubularSegments; i++) {\n const a = (tubularSegments + 1) * j + i - 1;\n const b = (tubularSegments + 1) * (j - 1) + i - 1;\n const c = (tubularSegments + 1) * (j - 1) + i;\n const d = (tubularSegments + 1) * j + i;\n\n this.indices.push(a, b, d);\n this.indices.push(b, c, d);\n }\n }\n }\n}\n","import { GeometryData } from './geometry';\n\n/**\n *\n */\nexport class PlaneGeometryData extends GeometryData {\n /**\n *\n * @param width\n * @param height\n * @param widthSegments\n * @param heightSegments\n */\n constructor (\n width = 1,\n height = 1,\n widthSegments = 1,\n heightSegments = 1,\n ) {\n super();\n\n const widthHalf = width / 2;\n const heightHalf = height / 2;\n\n const gridX = Math.floor(widthSegments);\n const gridY = Math.floor(heightSegments);\n\n const gridX1 = gridX + 1;\n const gridY1 = gridY + 1;\n\n const segmentWidth = width / gridX;\n const segmentHeight = height / gridY;\n\n for (let iy = 0; iy < gridY1; iy++) {\n const y = iy * segmentHeight - heightHalf;\n\n for (let ix = 0; ix < gridX1; ix++) {\n const x = ix * segmentWidth - widthHalf;\n\n this.points.push(x, - y, 0);\n this.normals.push(0, 0, 1);\n this.uvs.push(ix / gridX);\n this.uvs.push(1 - (iy / gridY));\n }\n }\n for (let iy = 0; iy < gridY; iy++) {\n for (let ix = 0; ix < gridX; ix++) {\n const a = ix + gridX1 * iy;\n const b = ix + gridX1 * (iy + 1);\n const c = (ix + 1) + gridX1 * (iy + 1);\n const d = (ix + 1) + gridX1 * iy;\n\n this.indices.push(a, b, d);\n this.indices.push(b, c, d);\n }\n }\n }\n}\n","import type { spec } from '@galacean/effects';\nimport { math } from '@galacean/effects';\nimport { GeometryData } from './geometry';\n\nconst { Euler, Vector3, Matrix4 } = math;\n\n/**\n *\n */\nexport class FrustumGeometryData extends GeometryData {\n /**\n *\n * @param position\n * @param rotation\n * @param fov\n * @param aspect\n * @param near\n * @param far\n */\n constructor (\n position: spec.vec3,\n rotation: spec.vec3,\n fov: number,\n aspect: number,\n near: number,\n far: number,\n ) {\n super();\n\n const fovY = fov / 180 * Math.PI;\n const ratio = aspect;\n const halfY = far * Math.tan(fovY / 2);\n const halfX = halfY * ratio;\n const point1 = new Vector3(halfX, halfY, far);\n const point2 = new Vector3(-halfX, halfY, far);\n const point3 = new Vector3(-halfX, -halfY, far);\n const point4 = new Vector3(halfX, -halfY, far);\n const matrix = Euler.fromArray(rotation).toMatrix4(new Matrix4());\n const result1 = matrix.transformPoint(point1).add(position);\n const result2 = matrix.transformPoint(point2).add(position);\n const result3 = matrix.transformPoint(point3).add(position);\n const result4 = matrix.transformPoint(point4).add(position);\n\n this.points.push(\n ...position,\n ...result1.toArray(), ...result2.toArray(),\n ...result3.toArray(), ...result4.toArray()\n );\n this.indices.push(0, 1, 0, 2, 0, 3, 0, 4, 1, 2, 2, 3, 3, 4, 4, 1);\n }\n}\n","import { GeometryData } from './geometry';\n\n/**\n * 方向光造型数据\n * lines\n */\nexport class DirectionLightData extends GeometryData {\n /**\n * 构造函数\n * @param radius - 圆半径\n * @param length - 光线长度\n * @param segments - 圆精度\n * @param linesNumber - 光线数量\n * @param thetaStart - 起始弧度\n * @param thetaLength - 终止弧度\n */\n constructor (\n radius = 1,\n length = 2,\n segments = 64,\n linesNumber = 8,\n thetaStart = 0,\n thetaLength = Math.PI * 2,\n ) {\n super();\n\n this.createXYPlaneCircle(radius, 0, segments, thetaStart, thetaLength, 0, this.points, this.indices);\n const start = segments % linesNumber / 2;\n const step = segments / linesNumber;\n\n for (let i = 0; i < linesNumber; i++) {\n const index = start + i * step;\n const x = this.points[3 * index];\n const y = this.points[3 * index + 1];\n const z = -length;\n\n this.points.push(x, y, z);\n this.indices.push(index, segments + i);\n }\n }\n}\n","import { GeometryData } from './geometry';\n\n/**\n * 点光源造型数据\n * lines\n */\nexport class PointLightData extends GeometryData {\n /**\n * 构造函数\n * @param range - 光照范围\n * @param segments - 圆精度\n * @param thetaStart - 起始弧度\n * @param thetaLength - 终止弧度\n */\n constructor (\n range = 10,\n segments = 64,\n thetaStart = 0,\n thetaLength = Math.PI * 2,\n ) {\n super();\n this.createXYPlaneCircle(range, 0, segments, thetaStart, thetaLength, 0, this.points, this.indices);\n this.createXZPlaneCircle(range, 0, segments, thetaStart, thetaLength, segments, this.points, this.indices);\n this.createYZPlaneCircle(range, 0, segments, thetaStart, thetaLength, 2 * segments, this.points, this.indices);\n }\n}\n","import { GeometryData } from './geometry';\n\n/**\n * 聚光灯造型数据\n * lines\n */\nexport class SpotLightData extends GeometryData {\n /**\n * 构造函数\n * @param range - 光线范围\n * @param spotAngle - 光线范围[角度]\n * @param segments - 圆精度\n * @param thetaStart - 起始弧度\n * @param thetaLength - 终止弧度\n */\n constructor (\n range = 10,\n spotAngle = 30,\n segments = 64,\n thetaStart = 0,\n thetaLength = Math.PI * 2,\n ) {\n super();\n\n const angle = spotAngle / 2 / 180 * Math.PI;\n const radius = range * Math.tan(angle);\n\n this.createXYPlaneCircle(radius, -range, segments, thetaStart, thetaLength, 0, this.points, this.indices);\n this.points.push(0, 0, 0);\n const step = segments / 4;\n const start = segments % 4 / 2;\n\n for (let i = 0; i < 4; i++) {\n this.indices.push(segments, start + i * step);\n }\n }\n}\n","import { GeometryData } from './geometry';\n\n/**\n * 地板线边框造型数据\n * lines\n */\nexport class FloorLineEdgeGeometryData extends GeometryData {\n /**\n *\n * @param sideLength\n * @param parts\n */\n constructor (sideLength = 12, parts = 6) {\n super();\n\n let index = 0;\n\n const z = 0;\n const end = sideLength / 2;\n const start = -sideLength / 2;\n\n for (let i = 0; i <= parts; i++) {\n const v = start + i * sideLength / parts;\n\n this.points.push(v, start, z, v, end, z, start, v, z, end, v, z);\n this.indices.push(index, index + 1, index + 2, index + 3);\n index += 4;\n }\n }\n}\n","import type { Engine, GeometryDrawMode, spec } from '@galacean/effects';\nimport { Geometry } from '@galacean/effects';\nimport { SphereGeometryData } from './sphere';\nimport { BoxGeometryData } from './box';\nimport type { GeometryData } from './geometry';\nimport { CylinderGeometryData } from './cylinder';\nimport { ConeGeometryData } from './cone';\nimport { TorusGeometryData } from './torus';\nimport { PlaneGeometryData } from './plane';\nimport { FrustumGeometryData } from './frustum';\nimport { DirectionLightData } from './direction-light';\nimport { PointLightData } from './point-light';\nimport { SpotLightData } from './spot-light';\nimport { FloorLineEdgeGeometryData } from './floor-line-edge';\n\n/**\n * 几何体类型\n */\nexport enum GeometryType {\n Box,\n Sphere,\n Cylinder,\n Cone,\n Torus,\n Frustum,\n Sprite,\n Plane,\n DirectionLight,\n SpotLight,\n PointLight,\n FloorGrid,\n}\n\n/**\n * 几何体参数\n */\nexport interface MeshOption {\n size: any,\n color?: spec.vec3,\n renderMode: GeometryDrawMode,\n depthTest?: boolean,\n name?: string,\n alpha?: number,\n}\n\n/**\n * 合并多个几何体数据\n * @param geometries - 几何体数据数组\n * @returns 合并后的几何体数据\n */\n// export function combineGeometries (geometries: GeometryData[]): GeometryData {\n// const points: number[] = [];\n// const indices: number[] = [];\n// const uvs: number[] = [];\n// const normals: number[] = [];\n\n// for (let i = 0, indicesBase = 0; i < geometries.length; i++) {\n// const geometryData = geometries[i];\n// if (geometryData) {\n// points.push(...geometryData.points);\n// uvs.push(...geometryData.uvs);\n// normals.push(...geometryData.normals);\n// geometryData.indices.forEach(index => indices.push(index + indicesBase));\n// indicesBase += geometryData.points.length;\n// }\n// }\n\n// return {\n// points,\n// indices,\n// uvs,\n// normals,\n// };\n// }\n\n/**\n * 创建几何体对象\n * @param type - 几何体类型\n * @param size - 几何体尺寸\n * @param renderMode - 绘制模式:`gl.TRIANGLES`、`gl.LINES`\n * @returns\n */\nexport function createGeometry (engine: Engine, type: GeometryType, size: Record<string, any>, renderMode?: GeometryDrawMode): Geometry {\n let geometryData: GeometryData;\n\n switch (type) {\n case GeometryType.Sphere:\n geometryData = new SphereGeometryData(size.radius, size.widthSegments, size.heightSegments);\n\n break;\n case GeometryType.Cylinder:\n geometryData = new CylinderGeometryData(size.radius, size.radius, size.height);\n\n break;\n case GeometryType.Cone:\n geometryData = new ConeGeometryData(size.radius, size.height);\n\n break;\n case GeometryType.Torus:\n geometryData = new TorusGeometryData(size.radius, size.tube, size.radialSegments, size.tubularSegments, size.arc);\n\n break;\n case GeometryType.Sprite:\n case GeometryType.Plane:\n geometryData = new PlaneGeometryData(size.width, size.height);\n\n break;\n case GeometryType.Frustum:\n geometryData = new FrustumGeometryData(size.position, size.rotation, size.fov, size.aspect, size.near, size.far);\n\n break;\n case GeometryType.DirectionLight:\n geometryData = new DirectionLightData(size.radius, size.length, size.segments4, size.linesNumber, size.thetaStart, size.thetaLength);\n\n break;\n case GeometryType.PointLight:\n geometryData = new PointLightData(size.range, size.segments, size.thetaStart, size.thetaLength);\n\n break;\n case GeometryType.SpotLight:\n geometryData = new SpotLightData(size.range, size.spotAngle, size.segments, size.thetaStart, size.thetaLength);\n\n break;\n case GeometryType.FloorGrid:\n geometryData = new FloorLineEdgeGeometryData(size.sideLength, size.parts);\n\n break;\n default:\n geometryData = new BoxGeometryData(size.width, size.height, size.depth);\n\n break;\n }\n const result = Geometry.create(\n engine,\n {\n attributes: {\n a_Position: {\n size: 3,\n data: new Float32Array(geometryData.points),\n },\n a_Normal: {\n size: 3,\n data: new Float32Array(geometryData.normals),\n },\n a_UV1: {\n size: 2,\n data: new Float32Array(geometryData.uvs),\n },\n },\n indices: {\n data: new Uint16Array(geometryData.indices),\n },\n mode: renderMode,\n drawCount: geometryData.indices.length,\n });\n\n return result;\n}\n","import type { Engine, Geometry, spec } from '@galacean/effects';\nimport { glContext, Material, Mesh, Texture, Transform, math } from '@galacean/effects';\nimport type { MeshOption } from './geometry';\nimport { createGeometry, GeometryType } from './geometry';\nimport { GizmoSubType } from './define';\nimport type { GizmoItemBounding } from './gizmo-vfx-item';\nimport { BoundingType } from './gizmo-vfx-item';\nimport { color, renderMode } from './constants';\n\ntype vec3 = spec.vec3;\ntype Vector3 = math.Vector3;\ntype TriangleLike = math.TriangleLike;\nconst { Vector2, Vector3, Matrix4 } = math;\n\n/**\n * 根据 gizmoSubType 类型创建几何体 Mesh\n * @param subType - gizmoSubType 类型\n * @param boundingMap - 包围盒 Map\n * @param iconTexture - 图标纹理\n * @param options - 几何体参数\n * @returns 基础几何体 Mesh | 组合几何体 Map<Mesh, Transform>\n */\nexport function createMeshFromSubType (\n engine: Engine,\n subType: GizmoSubType,\n boundingMap: Map<string, GizmoItemBounding>,\n iconTexture?: Map<string, Texture>,\n options?: MeshOption\n): Mesh | Map<Mesh, Transform> {\n let result: Mesh | Map<Mesh, Transform>;\n\n if (!options) {\n options = { size: 0, renderMode: WebGLRenderingContext['TRIANGLES'] };\n }\n\n switch (subType) {\n case GizmoSubType.sprite:\n result = createSpriteMesh(engine, options);\n\n break;\n case GizmoSubType.camera:\n result = createSpriteMesh(engine, options, iconTexture ? iconTexture.get('camera') : undefined, boundingMap);\n\n break;\n case GizmoSubType.light:\n result = createSpriteMesh(engine, options, iconTexture ? iconTexture.get('light') : undefined, boundingMap);\n\n break;\n case GizmoSubType.translation:\n result = createTranslationMesh(engine, options, boundingMap);\n\n break;\n case GizmoSubType.scale:\n result = createScaleMesh(engine, options, boundingMap);\n\n break;\n case GizmoSubType.viewHelper:\n result = createViewHelperMesh(engine, options, boundingMap, iconTexture as Map<string, Texture>);\n\n break;\n case GizmoSubType.rotation:\n result = createRotationMesh(engine, options, boundingMap);\n\n break;\n default:\n result = createBasicMesh(engine, subType, options);\n\n break;\n }\n\n return result;\n}\n\n/**\n * 创建旋转组件 Mesh 数组\n * @internal\n * @param options\n * @param boundingMap - 包围盒 Map\n * @returns Mesh 数组和对应的 Transform 组成的 Map\n */\nfunction createRotationMesh (\n engine: Engine,\n options: MeshOption,\n boundingMap: Map<string, GizmoItemBounding>,\n): Map<Mesh, Transform> {\n const result: Map<Mesh, Transform> = new Map();\n const scale = options.size.scale || 1;\n const size = {\n radius: 0.8 * scale,\n tube: 0.02 * scale,\n radiusSegments: 10 * scale,\n widthSegments: 20,\n heightSegments: 20,\n };\n const boundSize = { ...size, tube: size.tube * 2 };\n const name = 'rotation';\n const xCircle = createBasicMesh(engine, GizmoSubType.torus, {\n size, color: color.xAxisColor as vec3, renderMode, name,\n }, 'hideBack');\n const yCircle = createBasicMesh(engine, GizmoSubType.torus, {\n size, color: color.yAxisColor as vec3, renderMode, name,\n }, 'hideBack');\n const zCircle = createBasicMesh(engine, GizmoSubType.torus, {\n size, color: color.zAxisColor as vec3, renderMode, name,\n }, 'hideBack');\n const center = createBasicMesh(engine, GizmoSubType.sphere, {\n size, color: [0.3, 0.3, 0.3], alpha: 0.1, renderMode, name,\n }, 'blend');\n const xCircleBounding = createBasicMesh(engine, GizmoSubType.torus, {\n size: boundSize,\n color: color.xAxisColor as vec3,\n renderMode,\n });\n const yCircleBounding = createBasicMesh(engine, GizmoSubType.torus, {\n size: boundSize,\n color: color.yAxisColor as vec3,\n renderMode,\n });\n const zCircleBounding = createBasicMesh(engine, GizmoSubType.torus, {\n size: boundSize,\n color: color.zAxisColor as vec3,\n renderMode,\n });\n\n const xCircleTransform = new Transform({\n valid: true,\n });\n const yCircleTransform = new Transform({\n valid: true,\n });\n const zCircleTransform = new Transform({\n valid: true,\n });\n const centerTransform = new Transform({\n valid: true,\n });\n\n xCircleTransform.setRotation(0, 90, 0);\n yCircleTransform.setRotation(-90, 0, 0);\n zCircleTransform.setRotation(0, 0, 0);\n result.set(center, centerTransform);\n result.set(xCircle, xCircleTransform);\n result.set(yCircle, yCircleTransform);\n result.set(zCircle, zCircleTransform);\n\n boundingMap.set('xAxis', {\n type: BoundingType.triangle,\n triangles: xCircleBounding.firstGeometry() ? getTriangle(xCircleBounding.firstGeometry(), xCircleTransform) : [],\n backfaceCulling: true,\n });\n boundingMap.set('yAxis', {\n type: BoundingType.triangle,\n triangles: yCircleBounding.firstGeometry() ? getTriangle(yCircleBounding.firstGeometry(), yCircleTransform) : [],\n backfaceCulling: true,\n });\n boundingMap.set('zAxis', {\n type: BoundingType.triangle,\n triangles: zCircleBounding.firstGeometry() ? getTriangle(zCircleBounding.firstGeometry(), zCircleTransform) : [],\n backfaceCulling: true,\n });\n\n return result;\n}\n\n/**\n * 获取几何体的三角面数组\n * @internal\n * @param geometry - 几何体\n * @param transform - 变换式\n * @returns 三角面数组\n */\nfunction getTriangle (geometry: Geometry, transform: Transform): TriangleLike[] {\n const result: TriangleLike[] = [];\n const indices = geometry.getIndexData();\n const points = geometry.getAttributeData('a_Position');\n const mat4 = transform.getWorldMatrix();\n\n if (points && indices && indices.length > 0) {\n for (let i = 0; i < indices.length; i += 3) {\n const i0 = indices[i] * 3;\n const i1 = indices[i + 1] * 3;\n const i2 = indices[i + 2] * 3;\n const p0 = new Vector3(points[i0], points[i0 + 1], points[i0 + 2]);\n const p1 = new Vector3(points[i1], points[i1 + 1], points[i1 + 2]);\n const p2 = new Vector3(points[i2], points[i2 + 1], points[i2 + 2]);\n\n result.push({\n p0: mat4.projectPoint(p0),\n p1: mat4.projectPoint(p1),\n p2: mat4.projectPoint(p2),\n });\n\n }\n }\n\n return result;\n}\n\n/**\n * 创建位移组件 Mesh 数组\n * @internal\n * @param options\n * @param boundingMap - 包围盒 Map\n * @returns Mesh 数组和对应的 Transform 组成的 Map\n */\nfunction createTranslationMesh (engine: Engine, options: MeshOption, boundingMap: Map<string, GizmoItemBounding>): Map<Mesh, Transform> {\n const result: Map<Mesh, Transform> = new Map();\n const scale = options.size.scale || 1;\n const axisSize = {\n width: 0.8 * scale,\n height: 0.02 * scale,\n depth: 0.02 * scale,\n };\n const name = 'translation';\n const axisMesh = createAxisMesh(engine, axisSize, false, name);\n\n for (const [mesh, transform] of axisMesh) {\n result.set(mesh, transform);\n }\n\n const arrowSize = {\n radius: 0.05 * scale,\n height: 0.2 * scale,\n };\n const xArrow = createBasicMesh(engine, GizmoSubType.cone, {\n size: arrowSize,\n color: color.xAxisColor as vec3,\n renderMode,\n depthTest: true,\n name,\n }, 'blend');\n const yArrow = createBasicMesh(engine, GizmoSubType.cone, {\n size: arrowSize,\n color: color.yAxisColor as vec3,\n renderMode,\n depthTest: true,\n name,\n }, 'blend');\n const zArrow = createBasicMesh(engine, GizmoSubType.cone, {\n size: arrowSize,\n color: color.zAxisColor as vec3,\n renderMode,\n name,\n depthTest: true,\n }, 'blend');\n const xArrowTransform = new Transform({\n valid: true,\n });\n const yArrowTransform = new Transform({\n valid: true,\n });\n const zArrowTransform = new Transform({\n valid: true,\n });\n\n xArrowTransform.setRotation(0, 0, 90);\n yArrowTransform.setRotation(0, 0, 0);\n zArrowTransform.setRotation(-90, 0, 0);\n xArrowTransform.translate(axisSize.width, 0, 0);\n yArrowTransform.translate(0, axisSize.width, 0);\n zArrowTransform.translate(0, 0, axisSize.width);\n\n const planeSize = {\n width: 0.2 * scale,\n height: 0.2 * scale,\n };\n const xyPlane = createBasicMesh(engine, GizmoSubType.plane, {\n size: planeSize, color: color.zAxisColor as vec3, renderMode, depthTest: true, name,\n });\n const yzPlane = createBasicMesh(engine, GizmoSubType.plane, {\n size: planeSize, color: color.xAxisColor as vec3, renderMode, depthTest: true, name,\n });\n const zxPlane = createBasicMesh(engine, GizmoSubType.plane, {\n size: planeSize, color: color.yAxisColor as vec3, renderMode, depthTest: true, name,\n });\n const xyPlaneTransform = new Transform({\n valid: true,\n });\n const yzPlaneTransform = new Transform({\n valid: true,\n });\n const zxPlaneTransform = new Transform({\n valid: true,\n });\n const delta = axisSize.width / 8;\n\n xyPlaneTransform.translate(planeSize.width / 2 + delta, planeSize.height / 2 + delta, 0);\n yzPlaneTransform.setRotation(0, 90, 0);\n yzPlaneTransform.translate(0, planeSize.height / 2 + delta, planeSize.width / 2 + delta);\n zxPlaneTransform.setRotation(-90, 0, 0);\n zxPlaneTransform.translate(planeSize.width / 2 + delta, 0, planeSize.height / 2 + delta);\n\n result.set(xArrow, xArrowTransform);\n result.set(yArrow, yArrowTransform);\n result.set(zArrow, zArrowTransform);\n result.set(xyPlane, xyPlaneTransform);\n result.set(yzPlane, yzPlaneTransform);\n result.set(zxPlane, zxPlaneTransform);\n\n createAxisBounding({ width: arrowSize.radius * 2.4, length: axisSize.width + arrowSize.height / 2 }, boundingMap);\n boundingMap.set('xyPlane', {\n type: BoundingType.triangle,\n triangles: xyPlane.firstGeometry() ? getTriangle(xyPlane.firstGeometry(), xyPlaneTransform) : [],\n backfaceCulling: false,\n });\n\n // FIXME: getTriangle 函数调用 getWorldMatrix 后 worldMatrix被修改\n boundingMap.set('yzPlane', {\n type: BoundingType.triangle,\n triangles: yzPlane.firstGeometry() ? getTriangle(yzPlane.firstGeometry(), yzPlaneTransform) : [],\n backfaceCulling: false,\n });\n boundingMap.set('zxPlane', {\n type: BoundingType.triangle,\n triangles: zxPlane.firstGeometry() ? getTriangle(zxPlane.firstGeometry(), zxPlaneTransform) : [],\n backfaceCulling: false,\n });\n\n return result;\n}\n\n/**\n * 创建缩放组件 Mesh 数组\n * @internal\n * @param options\n * @param boundingMap - 包围盒 Map\n * @returns Mesh 数组和对应的 Transform 组成的 Map\n */\nfunction createScaleMesh (engine: Engine, options: MeshOption, boundingMap: Map<string, GizmoItemBounding>): Map<Mesh, Transform> {\n const result: Map<Mesh, Transform> = new Map();\n const scale = options.size.scale || 1;\n const axisSize = {\n width: 0.8 * scale,\n height: 0.02 * scale,\n depth: 0.02 * scale,\n };\n const name = 'scale';\n const axisMesh = createAxisMesh(engine, axisSize, false, name);\n\n for (const [mesh, transform] of axisMesh) {\n result.set(mesh, transform);\n }\n const boxSize = {\n width: 0.1 * scale,\n height: 0.1 * scale,\n depth: 0.1 * scale,\n };\n const centerBoxSize = {\n width: 0.2 * scale,\n height: 0.2 * scale,\n depth: 0.2 * scale,\n };\n const xCube = createBasicMesh(engine, GizmoSubType.box, {\n size: boxSize, color: color.xAxisColor as vec3, renderMode, depthTest: true, name,\n }, 'blend');\n const yCube = createBasicMesh(engine, GizmoSubType.box, {\n size: boxSize, color: color.yAxisColor as vec3, renderMode, depthTest: true, name,\n }, 'blend');\n const zCube = createBasicMesh(engine, GizmoSubType.box, {\n size: boxSize, color: color.zAxisColor as vec3, renderMode, depthTest: true, name,\n }, 'blend');\n const centerCube = createBasicMesh(engine, GizmoSubType.box, {\n size: centerBoxSize,\n color: [0.8, 0.8, 0.8],\n renderMode,\n depthTest: true,\n name,\n }, 'blend');\n const xCubeTransform = new Transform({\n valid: true,\n });\n const yCubeTransform = new Transform({\n valid: true,\n });\n const zCubeTransform = new Transform({\n valid: true,\n });\n const centerCubeTransform = new Transform({\n valid: true,\n });\n\n xCubeTransform.translate(axisSize.width, 0, 0);\n yCubeTransform.translate(0, axisSize.width, 0);\n zCubeTransform.translate(0, 0, axisSize.width);\n result.set(centerCube, centerCubeTransform);\n result.set(xCube, xCubeTransform);\n result.set(yCube, yCubeTransform);\n result.set(zCube, zCubeTransform);\n\n createAxisBounding({ width: boxSize.width * 1.2, length: axisSize.width + boxSize.width / 2 }, boundingMap);\n boundingMap.set('center', {\n type: BoundingType.sphere,\n center: new Vector3(),\n radius: Math.pow(Math.pow(centerBoxSize.width, 2) + Math.pow(centerBoxSize.height, 2) + Math.pow(centerBoxSize.depth, 2), 0.5) / 2,\n });\n\n return result;\n}\n\n/**\n * 创建视图辅助组件 Mesh 数组\n * @internal\n * @param options\n * @param boundingMap - 包围盒 Map\n * @returns Mesh 数组和对应的 Transform 组成的 Map\n */\nfunction createViewHelperMesh (engine: Engine, options: MeshOption, boundingMap: Map<string, GizmoItemBounding>, texture: Map<string, Texture>): Map<Mesh, Transform> {\n const result: Map<Mesh, Transform> = new Map();\n const scale = options.size.scale || 1;\n const axisSize = {\n width: 0.8 * scale,\n height: 0.02 * scale,\n depth: 0.02 * scale,\n };\n const axisMesh = createAxisMesh(engine, axisSize, true);\n\n for (const [mesh, transform] of axisMesh) {\n result.set(mesh, transform);\n }\n const planeSize = {\n width: 0.14 * scale,\n height: 0.14 * scale,\n };\n const length = (axisSize.width + planeSize.width) / 2;\n const depthTest = true;\n const posXSphere = createSpriteMesh(engine, { size: planeSize, renderMode, depthTest }, texture.get('posX'));\n const posYSphere = createSpriteMesh(engine, { size: planeSize, renderMode, depthTest }, texture.get('posY'));\n const posZSphere = createSpriteMesh(engine, { size: planeSize, renderMode, depthTest }, texture.get('posZ'));\n const posXSphereTransform = new Transform({\n valid: true,\n });\n const posYSphereTransform = new Transform({\n valid: true,\n });\n const posZSphereTransform = new Transform({\n valid: true,\n });\n\n posXSphereTransform.translate(length, 0, 0);\n posYSphereTransform.translate(0, length, 0);\n posZSphereTransform.translate(0, 0, length);\n const negXSphere = createSpriteMesh(engine, { size: planeSize, renderMode, depthTest }, texture.get('negX'));\n const negYSphere = createSpriteMesh(engine, { size: planeSize, renderMode, depthTest }, texture.get('negY'));\n const negZSphere = createSpriteMesh(engine, { size: planeSize, renderMode, depthTest }, texture.get('negZ'));\n const negXSphereTransform = new Transform({\n valid: true,\n });\n const negYSphereTransform = new Transform({\n valid: true,\n });\n const negZSphereTransform = new Transform({\n valid: true,\n });\n\n negXSphereTransform.translate(-length, 0, 0);\n negYSphereTransform.translate(0, -length, 0);\n negZSphereTransform.translate(0, 0, -length);\n\n result.set(posXSphere, posXSphereTransform);\n result.set(posYSphere, posYSphereTransform);\n result.set(posZSphere, posZSphereTransform);\n result.set(negXSphere, negXSphereTransform);\n result.set(negYSphere, negYSphereTransform);\n result.set(negZSphere, negZSphereTransform);\n\n const radius = (planeSize.height / 2) * 1.2;\n\n boundingMap.set('posX', {\n type: BoundingType.sphere,\n center: posXSphereTransform.position,\n radius: radius,\n });\n boundingMap.set('posY', {\n type: BoundingType.sphere,\n center: posYSphereTransform.position,\n radius: radius,\n });\n boundingMap.set('posZ', {\n type: BoundingType.sphere,\n center: posZSphereTransform.position,\n radius: radius,\n });\n boundingMap.set('negX', {\n type: BoundingType.sphere,\n center: negXSphereTransform.position,\n radius: radius,\n });\n boundingMap.set('negY', {\n type: BoundingType.sphere,\n center: negYSphereTransform.position,\n radius: radius,\n });\n boundingMap.set('negZ', {\n type: BoundingType.sphere,\n center: negZSphereTransform.position,\n radius: radius,\n });\n\n return result;\n}\n\n/**\n * 创建坐标轴 Mesh 数组\n * @internal\n * @param axisSize - 坐标轴尺寸\n * @param isCentered - 是否居中,默认 false\n * @returns Mesh 数组和对应的 Transform 组成的 Map\n */\nfunction createAxisMesh (engine: Engine, axisSize: { width: number, height: number, depth: number }, isCentered = false, name?: string): Map<Mesh, Transform> {\n const result: Map<Mesh, Transform> = new Map();\n const xAxis = createBasicMesh(engine, GizmoSubType.box, {\n size: axisSize, color: color.xAxisColor as vec3, renderMode, depthTest: true, name,\n });\n const yAxis = createBasicMesh(engine, GizmoSubType.box, {\n size: axisSize, color: color.yAxisColor as vec3, renderMode, depthTest: true, name,\n });\n const zAxis = createBasicMesh(engine, GizmoSubType.box, {\n size: axisSize, color: color.zAxisColor as vec3, renderMode, depthTest: true, name,\n });\n\n const xAxisTransform = new Transform({\n valid: true,\n });\n const yAxisTransform = new Transform({\n valid: true,\n });\n const zAxisTransform = new Transform({\n valid: true,\n });\n\n yAxisTransform.setRotation(0, 0, 90);\n zAxisTransform.setRotation(0, -90, 0);\n if (!isCentered) {\n xAxisTransform.translate(axisSize.width / 2, 0, 0);\n yAxisTransform.translate(0, axisSize.width / 2, 0);\n zAxisTransform.translate(0, 0, axisSize.width / 2);\n }\n result.set(xAxis, xAxisTransform);\n result.set(yAxis, yAxisTransform);\n result.set(zAxis, zAxisTransform);\n\n return result;\n}\n\n/**\n * 创建基础几何体 Mesh\n * @internal\n * @param subType - gizmoSubType 类型\n * @param options - 几何体参数\n * @returns 几何体 Mesh\n */\nfunction createBasicMesh (engine: Engine, subType: GizmoSubType, options: MeshOption, materialType = 'default'): Mesh {\n const {\n size, color, alpha, renderMode, depthTest, name,\n } = options;\n let geometryType: GeometryType;\n\n switch (subType) {\n case GizmoSubType.sphere:\n geometryType = GeometryType.Sphere;\n\n break;\n case GizmoSubType.cylinder:\n geometryType = GeometryType.Cylinder;\n\n break;\n case GizmoSubType.cone:\n geometryType = GeometryType.Cone;\n\n break;\n case GizmoSubType.torus:\n geometryType = GeometryType.Torus;\n\n break;\n case GizmoSubType.sprite:\n geometryType = GeometryType.Sprite;\n\n break;\n case GizmoSubType.plane:\n geometryType = GeometryType.Plane;\n\n break;\n case GizmoSubType.frustum:\n geometryType = GeometryType.Frustum;\n\n break;\n case GizmoSubType.directionLight:\n geometryType = GeometryType.DirectionLight;\n\n break;\n case GizmoSubType.spotLight:\n geometryType = GeometryType.SpotLight;\n\n break;\n case GizmoSubType.pointLight:\n geometryType = GeometryType.PointLight;\n\n break;\n case GizmoSubType.floorGrid:\n geometryType = GeometryType.FloorGrid;\n\n break;\n default:\n geometryType = GeometryType.Box;\n\n break;\n }\n const geometry = createGeometry(engine, geometryType, size, renderMode);\n let material;\n\n switch (materialType) {\n case 'blend':\n material = createBlendMaterial(engine, color, depthTest, alpha);\n\n break;\n case 'hideBack':\n material = createHideBackMaterial(engine, color, depthTest);\n\n break;\n default:\n material = createMaterial(engine, color, depthTest);\n\n break;\n }\n\n return Mesh.create(\n engine,\n {\n name: name ? name : geometryType.toString(),\n geometry,\n material,\n priority: 3000,\n });\n}\n\n/**\n * @internal\n * @param options\n * @param texture\n * @param boundingMap\n * @returns\n */\nfunction createSpriteMesh (engine: Engine, options: MeshOption, texture?: Texture, boundingMap?: Map<string, GizmoItemBounding>): Mesh {\n const geometry = createGeometry(engine, GeometryType.Sprite, options.size, renderMode);\n let spriteColor;\n\n if (texture) {\n spriteColor = texture;\n } else {\n spriteColor = options.color;\n }\n\n const material = createSpriteMaterial(engine, spriteColor, options.depthTest);\n\n if (boundingMap) {\n boundingMap.set('sprite', {\n type: BoundingType.sphere,\n radius: Math.pow(Math.pow(options.size.width, 2) + Math.pow(options.size.height, 2), 0.5) / 2,\n });\n }\n\n return Mesh.create(\n engine,\n {\n name: options.name || 'sprite',\n geometry,\n material,\n priority: 3000,\n });\n}\n\n/**\n * 创建材质\n * @internal\n * @param color - 颜色\n * @param depthTest\n * @returns 纯色材质,无光照,无透明\n */\nfunction createMaterial (engine: Engine, color?: vec3, depthTest?: boolean): Material {\n const myColor = color ? Vector3.fromArray(color) : new Vector3(255, 255, 255);\n const myDepthTest = depthTest ? depthTest : false;\n\n const material = Material.create(\n engine,\n {\n uniformValues: {\n u_color: new Float32Array(myColor.toArray()),\n u_model: new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]),\n },\n shader: {\n fragment: `\n precision mediump float;\n\n uniform vec3 u_color;\n\n void main(){\n gl_FragColor = vec4(u_color,1.0);\n }`,\n vertex: `\n precision highp float;\n\n attribute vec3 a_Position;\n\n uniform mat4 u_model;\n uniform mat4 effects_MatrixV;\n uniform mat4 _MatrixP;\n\n void main(){\n gl_Position = _MatrixP * effects_MatrixV * u_model * vec4(a_Position,1.0);\n }`,\n shared: true,\n },\n });\n\n material.setVector3('u_color', myColor);\n material.setMatrix('u_model', Matrix4.IDENTITY);\n material.depthTest = myDepthTest;\n material.stencilTest = false;\n material.blending = false;\n material.depthMask = true;\n\n return material;\n}\n\n/**\n *\n * @internal\n * @param color\n * @param depthTest\n * @returns\n */\nfunction createHideBackMaterial (engine: Engine, color?: vec3, depthTest?: boolean): Material {\n const myColor = color ? Vector3.fromArray(color) : new Vector3(255, 255, 255);\n const myDepthTest = depthTest ? depthTest : false;\n\n const material = Material.create(\n engine,\n {\n uniformValues: {\n u_color: new Float32Array(myColor.toArray()),\n u_model: new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]),\n u_cameraPos: new Float32Array([0, 0, 0]),\n u_center: new Float32Array([0, 0, 0]),\n },\n shader: {\n fragment: `\n precision mediump float;\n\n uniform vec3 u_color;\n\n varying float flag;\n\n void main(){\n if(flag > 0.0) {\n discard;\n }\n\n gl_FragColor = vec4(u_color,1.0);\n }`,\n vertex: `\n precision highp float;\n\n attribute vec3 a_Position;\n\n uniform mat4 u_model;\n uniform mat4 effects_MatrixV;\n uniform mat4 _MatrixP;\n\n uniform vec3 u_cameraPos;\n uniform vec3 u_center;\n\n varying float flag;\n void main(){\n float distance = length(u_cameraPos - u_center);\n vec3 worldPosition = (u_model * vec4(a_Position,1.0)).xyz;\n flag = length(u_cameraPos - worldPosition) - distance;\n gl_Position = _MatrixP * effects_MatrixV * u_model * vec4(a_Position,1.0);\n }`,\n shared: true,\n },\n });\n\n material.setVector3('u_color', myColor);\n material.setMatrix('u_model', Matrix4.IDENTITY);\n material.setVector3('u_cameraPos', Vector3.ZERO);\n material.setVector3('u_center', Vector3.ZERO);\n\n material.depthTest = myDepthTest;\n material.stencilTest = false;\n material.blending = false;\n material.depthMask = true;\n\n return material;\n}\n\n/**\n *\n * @internal\n * @param color\n * @param depthTest\n * @param alpha\n * @returns\n */\nfunction createBlendMaterial (engine: Engine, color?: vec3, depthTest?: boolean, alpha?: number): Material {\n const myColor = color ? Vector3.fromArray(color) : new Vector3(255, 255, 255);\n const myDepthTest = depthTest ? depthTest : false;\n const myAlpha = alpha ? alpha : 1;\n\n const material = Material.create(\n engine,\n {\n uniformValues: {\n u_color: new Float32Array(myColor.toArray()),\n u_alpha: new Float32Array([myAlpha, 0]),\n u_model: new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]),\n },\n shader: {\n shared: true,\n fragment: `\n precision mediump float;\n\n uniform vec3 u_color;\n uniform vec2 u_alpha;\n\n void main(){\n gl_FragColor = vec4(u_color,u_alpha);\n }`,\n vertex: `\n precision highp float;\n\n attribute vec3 a_Position;\n\n uniform mat4 u_model;\n uniform mat4 effects_MatrixV;\n uniform mat4 _MatrixP;\n void main(){\n gl_Position = _MatrixP * effects_MatrixV * u_model * vec4(a_Position,1.0);\n }`,\n },\n });\n\n material.setVector3('u_color', myColor);\n material.setVector2('u_alpha', new Vector2(myAlpha, 0));\n material.setMatrix('u_model', Matrix4.IDENTITY);\n material.depthTest = myDepthTest;\n material.stencilTest = false;\n material.blending = true;\n material.blendEquation = [glContext.FUNC_ADD, glContext.FUNC_ADD];\n material.blendFunction = [glContext.SRC_ALPHA, glContext.ONE_MINUS_SRC_ALPHA, glContext.SRC_ALPHA, glContext.ONE_MINUS_SRC_ALPHA];\n material.depthMask = true;\n\n return material;\n}\n\nfunction createSpriteMaterial (engine: Engine, data?: vec3 | Texture, depthTest?: boolean): Material {\n const myDepthTest = depthTest ? depthTest : false;\n const uniformValues = {\n u_model: new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]),\n u_alpha: new Float32Array([1, 0]),\n };\n\n const material = Material.create(\n engine,\n {\n uniformValues,\n shader: {\n shared: true,\n fragment: `\n precision highp float;\n\n uniform vec2 u_alpha;\n uniform vec3 u_color;\n uniform sampler2D u_iconTex;\n\n varying vec2 v_uv;\n\n void main(){\n vec4 color = texture2D(u_iconTex, vec2(v_uv.x, 1.0 - v_uv.y));\n if(color.a < 0.001)\n {\n discard;\n }\n gl_FragColor = vec4(color.xyz, color.w * u_alpha.x);\n }`,\n vertex: `\n precision highp float;\n\n attribute vec3 a_Position;\n attribute vec2 a_UV1;\n\n uniform mat4 u_model;\n uniform mat4 effects_MatrixV;\n uniform mat4 _MatrixP;\n uniform mat4 effects_MatrixInvV;\n varying vec2 v_uv;\n\n void main(){\n v_uv = a_UV1;\n vec4 pos = u_model * vec4(0., 0., 0., 1.0);\n // vec4 pos = u_model * vec4(a_Position,1.0);\n\n pos.xyz += effects_MatrixInvV[0].xyz * a_Position.x + effects_MatrixInvV[1].xyz * a_Position.y;\n gl_Position = _MatrixP * effects_MatrixV * pos;\n }`,\n },\n });\n\n material.setMatrix('u_model', Matrix4.IDENTITY);\n material.setVector2('u_alpha', new Vector2(1, 0));\n\n if (data instanceof Texture) {\n material.setTexture('u_iconTex', data);\n // uniformValues.u_iconTex = data;\n } else {\n let color: Vector3;\n\n if (data === undefined) {\n color = new Vector3(255, 255, 255);\n } else {\n color = Vector3.fromArray(data);\n }\n material.setVector3('u_color', color);\n // uniformValues.u_color = new Float32Array(color);\n }\n\n material.depthTest = myDepthTest;\n material.stencilTest = false;\n material.blending = true;\n material.blendEquation = [glContext.FUNC_ADD, glContext.FUNC_ADD];\n material.blendFunction = [glContext.SRC_ALPHA, glContext.ONE_MINUS_SRC_ALPHA, glContext.SRC_ALPHA, glContext.ONE_MINUS_SRC_ALPHA];\n\n return material;\n}\n\n/**\n * 创建坐标轴包围盒\n * @internal\n * @param size 包围盒尺寸\n * @param boundingMap 包围盒 Map\n */\nfunction createAxisBounding (size: { width: number, length: number }, boundingMap: Map<string, GizmoItemBounding>) {\n boundingMap.set('xAxis', {\n type: BoundingType.line,\n points: [new Vector3(0, 0, 0), new Vector3(size.length, 0, 0)],\n width: size.width,\n });\n boundingMap.set('yAxis', {\n type: BoundingType.line,\n points: [new Vector3(0, 0, 0), new Vector3(0, size.length, 0)],\n width: size.width,\n });\n boundingMap.set('zAxis', {\n type: BoundingType.line,\n points: [new Vector3(0, 0, 0), new Vector3(0, 0, size.length)],\n width: size.width,\n });\n}\n","import type { Camera } from '@galacean/effects';\nimport { math } from '@galacean/effects';\nimport { distanceOfPointAndLine, projectionOfPointAndLine } from './math-utils';\n\ntype Vector2 = math.Vector2;\ntype Vector3 = math.Vector3;\ntype Matrix4 = math.Matrix4;\n\nconst { Matrix4, Vector2, Vector3 } = math;\n\n/**\n * 线条包围盒射线检测算法\n * @param out - 射线与包围盒交点位置\n * @param pointInCanvas - 归一化的画布交互点坐标\n * @param points - 线条包围盒两端点位置\n * @param radius - 线条包围盒辐射半径\n * @param camera - 相机对象\n * @returns 射线与包围盒交点位置 | undefined\n */\nexport function intersectRayLine (\n out: Vector3,\n pointInCanvas: Vector2,\n points: [p0: Vector3, p1: Vector3],\n radius: number,\n worldMat4: Matrix4,\n camera: Camera,\n): Vector3 | undefined {\n // 构造一个辐射半径边缘的点 radiusPoint\n const up = new Vector3(\n worldMat4.elements[1],\n worldMat4.elements[5],\n worldMat4.elements[9],\n ).normalize();\n\n const radiusPoint = up.clone().multiply(radius);\n\n radiusPoint.add(points[0]);\n\n // 计算 start、end、radius 在屏幕空间上的投影\n const mvpMat4 = camera.getModelViewProjection(new Matrix4(), worldMat4);\n\n const screenStart = mvpMat4.projectPoint(points[0], new Vector3());\n const screenEnd = mvpMat4.projectPoint(points[1], new Vector3());\n const screenRadiusPoint = mvpMat4.projectPoint(radiusPoint, new Vector3());\n\n const screenRadiusVector = screenRadiusPoint.clone().subtract(screenStart);\n\n const screenRadius = screenRadiusVector.length();\n\n // 计算屏幕交互点与线条的距离\n const { distance, isInLine } = distanceOfPointAndLine(pointInCanvas, [screenStart.toVector2(), screenEnd.toVector2()]);\n\n if (distance <= screenRadius && isInLine) { // 距离小于阈值且交互点在线条上的投影位于线段内\n // 计算交互点在线条上的投影并转换为世界坐标\n const screenPosition = projectionOfPointAndLine(pointInCanvas, [screenStart, screenEnd]);\n const inverseViewProjection = camera.getInverseViewProjectionMatrix();\n\n inverseViewProjection.projectPoint(screenPosition, out);\n\n return out;\n }\n}\n","import type { Engine, spec } from '@galacean/effects';\nimport { Geometry, Material, Mesh, glContext, math } from '@galacean/effects';\n\ntype vec3 = spec.vec3;\ntype Vector3 = math.Vector3;\ntype Matrix4 = math.Matrix4;\n\nconst { Euler, Vector3, Matrix4 } = math;\n\nconst rectSize = 0.04;\nconst DEG2RAD = Math.PI / 180;\n\ninterface GeometryData {\n points: Vector3[],\n indices: number[],\n}\n\ninterface ArcPathOptions {\n plane?: string,\n translate?: vec3,\n rotate?: vec3,\n}\n\nfunction arcPath (radius: number, arc: number, options: ArcPathOptions = {}): GeometryData {\n const { plane, translate = [0, 0, 0], rotate = [0, 0, 0] } = options;\n const rotMat4 = Euler.fromArray(rotate).negate().toMatrix4(new Matrix4());\n const points: Vector3[] = [];\n const indices = [];\n\n addPoint(radius, 0);\n let i = 1;\n\n for (; i <= arc; i++) {\n const angle = i * DEG2RAD;\n\n indices.push(i - 1, i);\n addPoint(Math.cos(angle) * radius, Math.sin(angle) * radius);\n }\n\n return {\n points,\n indices,\n };\n\n function addPoint (cos: number, sin: number) {\n const point = new Vector3();\n\n if (plane === 'xz') {\n point.set(cos, 0, sin);\n } else if (plane === 'yz') {\n point.set(0, cos, sin);\n } else {\n point.set(cos, sin, 0);\n }\n rotMat4.transformNormal(point);\n points.push(point.add(translate));\n }\n}\n\nfunction line (p0: vec3, p1: vec3): GeometryData {\n return {\n points: [\n Vector3.fromArray(p0),\n Vector3.fromArray(p1),\n ],\n indices: [0, 1],\n };\n}\n\nfunction box (width: number, height: number, depth: number, center?: number[]): GeometryData {\n const w = width / 2;\n const h = height / 2;\n const d = depth / 2;\n const myCenter = center ?? [0, 0, 0];\n const points: Vector3[] = [\n [-w, h, -d], [-w, -h, -d], [-w, h, d], [-w, -h, d],\n [w, h, -d], [w, -h, -d], [w, h, d], [w, -h, d],\n ].map(item => {\n return new Vector3(item[0] + myCenter[0], item[1] + myCenter[1], item[2] + myCenter[2]);\n });\n\n return {\n points,\n indices: [\n 0, 1, 1, 3, 3, 2, 2, 0,\n 4, 5, 5, 7, 7, 6, 6, 4,\n 0, 4, 2, 6, 3, 7, 1, 5,\n ],\n };\n}\n\nfunction rect (width: number, height: number, pos?: vec3): GeometryData {\n const w = width / 2;\n const h = height / 2;\n const points: Vector3[] = [\n new Vector3(-w, h, 0),\n new Vector3(w, h, 0),\n new Vector3(w, -h, 0),\n new Vector3(-w, -h, 0),\n ];\n\n if (pos) {\n points.forEach(vec => {\n vec.add(pos);\n });\n }\n\n return {\n points,\n indices: [\n 0, 1, 1, 2, 2, 3, 3, 0,\n ],\n };\n}\n\nfunction combineGeometries (geometries: GeometryData[]) {\n const points: number[] = [];\n const indices: number[] = [];\n\n for (let i = 0, indicesBase = 0; i < geometries.length; i++) {\n const geometry = geometries[i];\n\n if (geometry) {\n geometry.points.forEach(point => {\n points.push(point.x, point.y, point.z);\n });\n geometry.indices.forEach(index => indices.push(index + indicesBase));\n indicesBase += geometry.points.length;\n }\n }\n\n return {\n points: new Float32Array(points),\n indices: new Uint16Array(indices),\n };\n}\n\nconst Shapes: Record<string, (arg: any) => GeometryData[]> = {\n Texture (arg: any) {\n const ret = [];\n\n if (arg.detail) {\n const anchors = arg.detail.anchors;\n const block = arg.detail.block;\n const width = arg.width;\n const height = arg.height;\n\n for (let i = 0; i < anchors.length; i += 2) {\n ret.push(rect(block[0] * width, block[1] * height, [\n width * (anchors[i] - 0.5),\n height * (anchors[i + 1] - 0.5),\n 0,\n ]));\n }\n } else {\n ret.unshift(Shapes.Rectangle(arg)[0]);\n }\n\n return ret;\n },\n Circle (arg: any) {\n const { radius, arc } = arg;\n\n return [\n arcPath(radius, arc),\n arc !== 360 && line([0, 0, 0], [radius, 0, 0]),\n arc !== 360 && line([0, 0, 0], [Math.cos(arc * DEG2RAD) * radius, Math.sin(arc * DEG2RAD) * radius, 0]),\n ] as GeometryData[];\n },\n Box: function (arg: any) {\n const {\n width, height, depth, center,\n } = arg;\n const data = box(width, height, depth, center);\n\n return [data];\n },\n Sphere: function (arg) {\n const { radius, arc } = arg;\n const ret = [\n line([0, 0, -radius], [0, 0, radius]),\n arcPath(radius, arc > 180 ? 360 : 180, { plane: 'xz', rotate: [0, 90, 0] }),\n arcPath(radius, arc, { plane: 'xy' }),\n arcPath(radius, 180, { plane: 'xz', rotate: [0, 90, arc] }),\n ];\n\n if (arc > 90) {\n ret.push(arcPath(radius, arc > 270 ? 360 : 180, { plane: 'yz', rotate: [-90, 0, 0] }));\n }\n\n return ret;\n },\n Hemisphere (arg) {\n const { radius, arc } = arg;\n const ret = [\n line([0, 0, radius], [0, 0, 0]), //z\n line([arc > 180 ? -radius : 0, 0, 0], [radius, 0, 0]), //x\n arg > 90 && line([0, arc > 270 ? -radius : 0, 0], [0, radius, 0]), //y\n arcPath(radius, (arc > 180 ? 360 : 180) / 2, { plane: 'xz' }),\n arcPath(radius, arc, { plane: 'xy' }),\n arcPath(radius, 90, { plane: 'xz', rotate: [0, 0, arc] }),\n line([0, 0, 0], [Math.cos(arc * DEG2RAD) * radius, Math.sin(arc * DEG2RAD) * radius, 0]),\n ] as GeometryData[];\n\n if (arc > 90) {\n ret.push(arcPath(radius, arc > 270 ? 180 : 90, { plane: 'yz' }));\n }\n\n return ret;\n },\n Cone (arg) {\n const { radius, arc } = arg;\n const outerRadius = radius * Math.tan(arg.angle * DEG2RAD) + radius;\n\n return [\n arcPath(outerRadius, arc, { translate: [0, 0, radius] }),\n line([radius, 0, 0], [outerRadius, 0, radius]),\n arc > 90 && line([0, radius, 0], [0, outerRadius, radius]),\n arc > 180 && line([-radius, 0, 0], [-outerRadius, 0, radius]),\n arc > 270 && line([0, -radius, 0], [0, -outerRadius, radius]),\n line([Math.cos(arc * DEG2RAD) * radius, Math.sin(arc * DEG2RAD) * radius, 0],\n [Math.cos(arc * DEG2RAD) * outerRadius, Math.sin(arc * DEG2RAD) * outerRadius, radius]),\n ].concat(Shapes.Circle(arg)) as GeometryData[];\n },\n Edge (arg) {\n const hw = arg.width / 2;\n\n return [\n line([-hw, 0, 0], [hw, 0, 0]),\n ];\n },\n Rectangle (arg) {\n return [\n rect(arg.width, arg.height),\n ];\n },\n RectangleEdge (arg) {\n return [\n rect(arg.width, arg.height),\n ];\n },\n Donut (arg) {\n const { arc, radius, donutRadius } = arg;\n\n return [\n arcPath(donutRadius, 360, { translate: [radius, 0, 0], rotate: [90, 0, 0] }),\n arcPath(radius - donutRadius, arc),\n arcPath(radius + donutRadius, arc),\n arcPath(radius, arc, { translate: [0, 0, donutRadius] }),\n arcPath(radius, arc, { translate: [0, 0, -donutRadius] }),\n arc % 360 === 0 ? arcPath(donutRadius, 360, {\n translate: [-radius, 0, 0],\n rotate: [90, 0, 0],\n }) : arcPath(donutRadius, 360, {\n translate: [Math.cos(arc * DEG2RAD) * radius, Math.sin(arc * DEG2RAD) * radius, 0],\n rotate: [90, 0, arc],\n }),\n ];\n },\n path (arg) {\n const positions = arg.keys;\n const ret = [];\n\n for (let i = 0; i < positions.length - 1; i++) {\n ret.push(rect(rectSize, rectSize, positions[i]));\n ret.push(line(positions[i], positions[i + 1]));\n }\n ret.push(rect(rectSize, rectSize, positions[positions.length - 1]));\n\n return ret;\n },\n};\n\nShapes['0'] = Shapes.None;\nShapes['1'] = Shapes.Sphere;\nShapes['2'] = Shapes.Cone;\nShapes['3'] = Shapes.Hemisphere;\nShapes['4'] = Shapes.Circle;\nShapes['5'] = Shapes.Donut;\nShapes['6'] = Shapes.Rectangle;\nShapes['7'] = Shapes.RectangleEdge;\nShapes['8'] = Shapes.Edge;\nShapes['9'] = Shapes.Texture;\n\nexport function createMeshFromShape (engine: Engine, args: { shape: string, type?: number }, options: { color?: vec3, depthTest?: boolean }): Mesh {\n const ret = Shapes[args.type || args.shape](args);\n const geo = combineGeometries(ret);\n\n return createMesh(engine, geo.points, geo.indices, options.color || [1, 0, 0], options.depthTest, args.shape);\n}\n\nfunction createMesh (engine: Engine, points: Float32Array, indices: Uint16Array, color: vec3, depthTest = false, name?: string): Mesh {\n const material = Material.create(\n engine,\n {\n uniformValues: {\n u_color: new Float32Array(color),\n u_model: new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]),\n },\n shader: {\n shared: true,\n fragment: `\n precision mediump float;\n\n uniform vec3 u_color;\n\n void main(){\n gl_FragColor = vec4(u_color,1.0);\n }`,\n vertex: `precision highp float;\n\n attribute vec3 a_Position;\n\n uniform mat4 u_model;\n uniform mat4 effects_MatrixVP;\n void main(){\n gl_Position = effects_MatrixVP * u_model * vec4(a_Position,1.0);\n }`,\n },\n });\n\n material.setVector3('u_color', Vector3.fromArray(color));\n material.setMatrix('u_model', Matrix4.IDENTITY);\n material.depthTest = depthTest;\n material.stencilTest = false;\n material.blending = false;\n material.depthMask = true;\n const geometry = Geometry.create(\n engine,\n {\n attributes: {\n a_Position: {\n size: 3,\n data: points,\n },\n },\n indices: {\n data: indices,\n },\n mode: glContext.LINES,\n drawCount: indices.length,\n });\n\n return Mesh.create(\n engine,\n {\n name,\n geometry,\n material,\n priority: 3000,\n });\n}\n","import type { ShaderMacros, GeometryDrawMode, Engine, spec } from '@galacean/effects';\nimport { GLSLVersion, glContext, Geometry, DestroyOptions, Material, Mesh, math } from '@galacean/effects';\n\nconst { Vector4 } = math;\n\nexport function createParticleWireframe (engine: Engine, mesh: Mesh, color: spec.vec3): Mesh {\n const geometry = new SharedGeometry(\n engine,\n {\n geometry: mesh.firstGeometry(),\n mode: glContext.LINES,\n index: {\n data: new Uint16Array(0),\n },\n name: 'testtest',\n });\n\n const { vertex, fragment, macros, name } = mesh.material.props.shader;\n const materialOptions = { ...mesh.material.props };\n const newMacros = [...(macros || [] as ShaderMacros), ['PREVIEW_BORDER', 1]] as ShaderMacros;\n\n materialOptions.shader = {\n vertex,\n fragment,\n macros: newMacros,\n shared: true,\n name: name + '_wireframe',\n glslVersion: engine.displayServer.renderingDevice.gpuCapability.level === 2 ? GLSLVersion.GLSL3 : GLSLVersion.GLSL1,\n };\n const material = Material.create(engine, materialOptions);\n\n material.depthTest = mesh.material.depthTest;\n material.setVector4('uPreviewColor', new Vector4(color[0], color[1], color[2], 1));\n\n return updateWireframeMesh(mesh.geometry, mesh.material, Mesh.create(\n engine,\n {\n geometry,\n material,\n priority: 3000,\n name: materialOptions.shader.name,\n }), WireframeGeometryType.quad);\n}\n\nexport enum WireframeGeometryType {\n triangle,\n quad,\n}\n\nexport function destroyWireframeMesh (mesh: Mesh) {\n mesh.geometry?.dispose();\n mesh.dispose({ geometries: DestroyOptions.keep });\n}\n\nexport function updateWireframeMesh (originGeometry: Geometry, originMaterial: Material, wireframe: Mesh, type: WireframeGeometryType) {\n wireframe.material.cloneUniforms(originMaterial);\n\n const geometry = originGeometry;\n const wireframeGeometry = wireframe.firstGeometry();\n\n for (const macro of Object.keys(originMaterial.enabledMacros)) {\n wireframe.material.enableMacro(macro, originMaterial.enabledMacros[macro]);\n }\n\n if (type === WireframeGeometryType.triangle) {\n // 线框模式不绘制模型的时候,drawCount 为负数\n const drawCount = Math.abs(geometry.getDrawCount());\n\n if (drawCount !== 0) {\n if (drawCount !== wireframeGeometry.getDrawCount() / 2) {\n const indexData = geometry.getIndexData() as Uint16Array | undefined;\n const data = indexData ? getTriangleIndexData(indexData) : getTriangleIndexDataByCount(drawCount);\n\n wireframeGeometry.setIndexData(data);\n wireframeGeometry.setDrawCount(data.length);\n }\n }\n } else if (type === WireframeGeometryType.quad) {\n if (geometry.getDrawCount() / 6 !== wireframeGeometry.getDrawCount() / 8) {\n const data = getQuadIndexData(geometry.getDrawCount() / 6, geometry.getIndexData() as Uint16Array);\n\n wireframeGeometry.setIndexData(data);\n wireframeGeometry.setDrawCount(data.length);\n }\n }\n\n return wireframe;\n}\n\nfunction getQuadIndexData (faceCount: number, oid: Uint16Array): Uint16Array {\n const indexData = new Uint16Array(faceCount * 8);\n\n for (let i = 0; i < faceCount; i++) {\n const idx = i * 8;\n const base = i * 4;\n\n indexData[idx] = base;\n indexData[idx + 1] = 1 + base;\n indexData[idx + 2] = 1 + base;\n indexData[idx + 3] = 3 + base;\n indexData[idx + 4] = 3 + base;\n indexData[idx + 5] = 2 + base;\n indexData[idx + 6] = 2 + base;\n indexData[idx + 7] = base;\n }\n\n return indexData;\n}\n\nexport function createModeWireframe (engine: Engine, mesh: Mesh, color: spec.vec3): Mesh {\n const geometry = new SharedGeometry(\n engine,\n {\n geometry: mesh.firstGeometry(),\n mode: glContext.LINES,\n index: {\n data: new Uint32Array(0),\n },\n });\n const { vertex, fragment } = mesh.material.shader.shaderData;\n const materialOptions = { ...mesh.material.props };\n\n const newMacros = [['PREVIEW_BORDER', 1]] as ShaderMacros;\n\n materialOptions.shader = {\n vertex,\n fragment,\n macros: newMacros,\n shared: true,\n name: (mesh.name ?? 'unamedmesh') + '_wireframe',\n glslVersion: engine.displayServer.renderingDevice.gpuCapability.level === 2 ? GLSLVersion.GLSL3 : GLSLVersion.GLSL1,\n };\n\n const material = Material.create(engine, materialOptions);\n\n material.depthTest = true;\n material.setVector4('uPreviewColor', new Vector4(color[0], color[1], color[2], 1));\n\n return updateWireframeMesh(mesh.geometry, mesh.material, Mesh.create(\n engine,\n {\n geometry,\n material,\n priority: 3000,\n name: materialOptions.shader.name,\n }), WireframeGeometryType.triangle);\n}\n\nfunction getTriangleIndexDataByCount (drawCount: number): Uint32Array {\n const faceCount = drawCount / 3;\n const indexData = new Uint32Array(faceCount * 6);\n\n for (let i = 0; i < faceCount; i++) {\n const idx = i * 6;\n const p0 = i * 3;\n const p1 = p0 + 1;\n const p2 = p0 + 2;\n\n indexData[idx] = p0;\n indexData[idx + 1] = p1;\n indexData[idx + 2] = p1;\n indexData[idx + 3] = p2;\n indexData[idx + 4] = p2;\n indexData[idx + 5] = p0;\n }\n\n return indexData;\n}\n\nfunction getTriangleIndexData (oid: Uint16Array): Uint32Array {\n const faceCount = oid.length / 3;\n const indexData = new Uint32Array(faceCount * 6);\n\n for (let i = 0; i < faceCount; i++) {\n const idx = i * 6;\n const base = i * 3;\n const p0 = oid[base];\n const p1 = oid[base + 1];\n const p2 = oid[base + 2];\n\n indexData[idx] = p0;\n indexData[idx + 1] = p1;\n indexData[idx + 2] = p1;\n indexData[idx + 3] = p2;\n indexData[idx + 4] = p2;\n indexData[idx + 5] = p0;\n }\n\n return indexData;\n}\n\nexport interface SharedGeometryOptions {\n name?: string,\n drawStart?: number,\n drawCount?: number,\n mode?: GeometryDrawMode,\n index?: { data: Uint16Array | Uint32Array },\n geometry: Geometry,\n}\n\nexport class SharedGeometry extends Geometry {\n constructor (engine: Engine, options: SharedGeometryOptions) {\n const source = options.geometry;\n const sourceIndex = options.index?.data ?? source.getIndexData();\n const indexData = sourceIndex?.slice() as Uint16Array | Uint32Array | undefined;\n\n super(engine, {\n name: options.name,\n attributes: {},\n indices: indexData ? { data: indexData } : undefined,\n drawStart: options.drawStart ?? 0,\n drawCount: options.drawCount ?? 0,\n mode: options.mode ?? 0,\n });\n const layout = source.getVertexLayout();\n\n if (layout) {\n this.setVertexBuffers(source.getVertexBuffers(), layout);\n }\n }\n}\n","import type { GeometryDrawMode, HitTestCustomParams, RenderingData, Renderer, Texture, VFXItem } from '@galacean/effects';\nimport {\n RenderPass, RenderPassEvent, RendererFeature, Mesh, HitTestType,\n TextureLoadAction, ParticleSystemRenderer, RendererComponent, Transform, assertExist,\n effectsClass, glContext, math, spec, PluginSystem,\n ParticleSystem,\n} from '@galacean/effects';\nimport type { GizmoVFXItemOptions } from './define';\nimport { GizmoSubType } from './define';\nimport type { EditorGizmoPlugin } from './gizmo-loader';\nimport { iconTextures } from './gizmo-loader';\nimport type { GizmoItemBoundingSphere, GizmoItemBounding, Ray, TriangleLike } from './gizmo-vfx-item';\nimport { BoundingType } from './gizmo-vfx-item';\nimport { computeOrthographicOffCenter } from './math-utils';\nimport { createMeshFromSubType } from './mesh';\nimport { intersectRayLine } from './raycast';\nimport { createMeshFromShape } from './shape';\nimport { moveToPointWidthFixDistance } from './util';\nimport { WireframeGeometryType, createModeWireframe, destroyWireframeMesh, updateWireframeMesh } from './wireframe';\nimport { GeometryType } from './geometry';\n\n// TODO: Move to spec\ninterface GizmoComponentData extends spec.ComponentData {\n options: GizmoVFXItemOptions,\n transform?: Record<string, unknown>,\n coordinateSpace?: CoordinateSpace,\n}\n\nconst editorRenderPassName = 'editor-gizmo';\nconst frontRenderPassName = 'front-gizmo';\nconst behindRenderPassName = 'behind-gizmo';\n\ntype Vector2 = math.Vector2;\ntype Vector3 = math.Vector3;\ntype Matrix4 = math.Matrix4;\n\nconst { Vector2, Vector3, Matrix4, Quaternion } = math;\nconst constants = glContext;\n\n@effectsClass('GizmoComponent')\nexport class GizmoComponent extends RendererComponent {\n gizmoPlugin: EditorGizmoPlugin;\n targetItem: VFXItem;\n needCreateModelContent: boolean;\n target: string;\n subType: GizmoSubType;\n size: any;\n contents?: Map<Mesh, Transform>;\n boundingMap: Map<string, GizmoItemBounding> = new Map();\n hitBounding?: { key: string, position: Vector3 };\n wireframeMesh: Mesh;\n coordinateSpace: CoordinateSpace = CoordinateSpace.Local;\n\n color: spec.vec3;\n renderMode!: GeometryDrawMode;\n depthTest?: boolean;\n mat = Matrix4.fromIdentity();\n wireframeMeshes: Mesh[] = [];\n meshes: Mesh[] = [];\n mesh: Mesh | null = null;\n\n override onStart (): void {\n this.item.getHitTestParams = this.getHitTestParams;\n for (const item of this.item.composition?.items ?? []) {\n if (item.id === this.target) {\n this.targetItem = item;\n }\n }\n const targetItem = this.targetItem;\n\n if (!targetItem) {\n\n return;\n }\n const composition = this.item.composition;\n\n for (const plugin of PluginSystem.getPlugins() ?? []) {\n if (plugin.name === 'editor-gizmo') {\n this.gizmoPlugin = plugin as EditorGizmoPlugin;\n }\n }\n const gizmoPlugin = this.gizmoPlugin;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison\n if (targetItem.type === '7' || !gizmoPlugin) {\n return;\n }\n const gizmoSubType = this.subType;\n\n switch (gizmoSubType) {\n case GizmoSubType.particleEmitter:\n this.createParticleContent(targetItem);\n\n break;\n case GizmoSubType.modelWireframe:\n this.needCreateModelContent = true;\n this.createModelContent(targetItem);\n\n break;\n case GizmoSubType.box:\n case GizmoSubType.sphere:\n case GizmoSubType.cylinder:\n case GizmoSubType.cone:\n case GizmoSubType.torus:\n case GizmoSubType.sprite:\n case GizmoSubType.frustum:\n case GizmoSubType.directionLight:\n case GizmoSubType.pointLight:\n case GizmoSubType.spotLight:\n case GizmoSubType.floorGrid:\n this.createBasicContent(targetItem, gizmoSubType);\n\n break;\n case GizmoSubType.camera:\n case GizmoSubType.light:\n this.createBasicContent(targetItem, gizmoSubType, iconTextures);\n\n break;\n case GizmoSubType.rotation:\n case GizmoSubType.scale:\n case GizmoSubType.translation:\n this.createCombinationContent(targetItem, gizmoSubType);\n\n break;\n case GizmoSubType.viewHelper:\n this.createCombinationContent(targetItem, gizmoSubType, iconTextures);\n\n break;\n case GizmoSubType.boundingBox:\n this.createBoundingBoxContent(targetItem);\n\n break;\n default:\n break;\n }\n composition?.loaderData.gizmoItems.push(this.item);\n }\n\n override onEnable (): void {\n super.onEnable();\n if (!this.item.composition) {\n return;\n }\n\n const sceneRendering = this.item.composition.sceneRendering;\n const renderer = this.engine.renderer;\n\n if (!renderer.rendererFeatures.some(feature => feature instanceof GizmoRendererFeature)) {\n renderer.addRendererFeature(new GizmoRendererFeature());\n }\n\n for (const mesh of this.meshes) {\n if (mesh.name === GeometryType.FloorGrid.toString() || mesh.name === 'Box') {\n sceneRendering.addRenderer(mesh, frontRenderPassName);\n } else if (mesh.name === 'translation' || mesh.name === 'scale' || mesh.name === 'rotation') {\n sceneRendering.addRenderer(mesh, behindRenderPassName);\n } else {\n sceneRendering.addRenderer(mesh, editorRenderPassName);\n }\n }\n }\n\n override onDisable (): void {\n super.onDisable();\n if (!this.item.composition) {\n return;\n }\n\n const sceneRendering = this.item.composition.sceneRendering;\n\n for (const mesh of this.meshes) {\n if (mesh.name === GeometryType.FloorGrid.toString() || mesh.name === 'Box') {\n sceneRendering.removeRenderer(mesh, frontRenderPassName);\n } else if (mesh.name === 'translation' || mesh.name === 'scale' || mesh.name === 'rotation') {\n sceneRendering.removeRenderer(mesh, behindRenderPassName);\n } else {\n sceneRendering.removeRenderer(mesh, editorRenderPassName);\n }\n }\n }\n\n override onUpdate (dt: number): void {\n this.updateRenderData();\n }\n\n override onDestroy (): void {\n const gizmoMesh = this.mesh;\n const composition = this.item.composition;\n\n if (!composition) {\n return;\n }\n\n if (gizmoMesh && !gizmoMesh.isDestroyed) {\n gizmoMesh.dispose();\n\n if (gizmoMesh.name === GeometryType.FloorGrid.toString() || gizmoMesh.name === 'Box') {\n composition.sceneRendering.removeRenderer(gizmoMesh, frontRenderPassName);\n } else {\n composition.sceneRendering.removeRenderer(gizmoMesh, editorRenderPassName);\n }\n }\n if (this.contents) {\n for (const [mesh] of this.contents) {\n if (!mesh.isDestroyed) {\n mesh.dispose();\n if (mesh.name === 'translation' || mesh.name === 'scale' || mesh.name === 'rotation') {\n composition.sceneRendering.removeRenderer(mesh, behindRenderPassName);\n } else {\n composition.sceneRendering.removeRenderer(mesh, editorRenderPassName);\n }\n }\n }\n }\n\n if (this && this.wireframeMeshes.length > 0) {\n this.wireframeMeshes.forEach(mesh => {\n if (!mesh.isDestroyed) {\n destroyWireframeMesh(mesh);\n composition.sceneRendering.removeRenderer(mesh, editorRenderPassName);\n }\n });\n } else {\n const wireframeMesh = this.wireframeMesh;\n\n if (wireframeMesh && !wireframeMesh.isDestroyed) {\n destroyWireframeMesh(wireframeMesh);\n composition.sceneRendering.removeRenderer(wireframeMesh, editorRenderPassName);\n }\n }\n\n const arr: VFXItem[] = composition.loaderData.gizmoItems;\n const index = arr.indexOf(this.item);\n\n if (index > -1) {\n arr.splice(index, 1);\n }\n }\n\n override render (renderer: Renderer): void {\n // The material of the 3D plugin is updated during the render phase. In order to obtain the correct value, it is kept consistent here.\n if (this.subType === GizmoSubType.modelWireframe) { // 模型线框\n if (this.wireframeMesh && this.targetItem) {\n //@ts-expect-error TODO 和 3D 类型解耦\n const pMesh = this.targetItem.getComponent(RendererComponent)?.content;\n const meshes = pMesh.subMeshes;\n const wireframeMeshes = this.wireframeMeshes;\n\n if (meshes?.length > 0) {\n wireframeMeshes[0].worldMatrix.copyFrom(pMesh.matrix);\n updateWireframeMesh(meshes[0].geometry.geometry, meshes[0].material.effectMaterial, wireframeMeshes[0], WireframeGeometryType.triangle);\n }\n }\n }\n }\n\n updateRenderData () {\n const item = this.item;\n const gizmoSubType = this.subType;\n\n if (gizmoSubType === GizmoSubType.particleEmitter) { // 粒子发射器\n if (this.targetItem && this.mesh) {\n this.mat = this.targetItem.transform.getWorldMatrix();\n this.mesh.material.setMatrix('u_model', this.mat);\n }\n if (this.wireframeMesh && this.targetItem) {\n const particle = this.targetItem.getComponent(ParticleSystemRenderer);\n\n if (particle) {\n updateWireframeMesh(particle.particleMesh.mesh.geometry, particle.particleMesh.mesh.material, this.wireframeMesh, WireframeGeometryType.quad);\n this.wireframeMesh.worldMatrix = particle.particleMesh.mesh.worldMatrix;\n }\n }\n } else { // 几何体模型\n if (this.targetItem) {\n if (this.contents) { // 组合几何体\n // const targetTransform = this.targetItem.transform.clone();\n\n const worldPos = new Vector3();\n const worldQuat = new Quaternion();\n const worldScale = new Vector3(1, 1, 1);\n\n // Scale Gizmo 没有世界空间\n if (this.coordinateSpace == CoordinateSpace.Local || gizmoSubType === GizmoSubType.scale) {\n this.targetItem.transform.assignWorldTRS(worldPos, worldQuat);\n } else {\n this.targetItem.transform.assignWorldTRS(worldPos);\n }\n\n const targetTransform = new Transform({\n position: worldPos,\n quat: worldQuat,\n scale: worldScale,\n valid: true,\n });\n\n // 移动\\旋转\\缩放gizmo去除近大远小\n if (gizmoSubType === GizmoSubType.rotation || gizmoSubType === GizmoSubType.scale || gizmoSubType === GizmoSubType.translation) {\n const camera = item.composition!.camera;\n const cameraPos = camera.position || new Vector3();\n const itemPos = targetTransform.position;\n const newPos = moveToPointWidthFixDistance(cameraPos, itemPos);\n\n targetTransform.setPosition(newPos.x, newPos.y, newPos.z);\n }\n\n this.mat = targetTransform.getWorldMatrix();\n const center = targetTransform.position;\n\n for (const [mesh, transform] of this.contents) {\n let worldMat4: Matrix4;\n\n transform.parentTransform = targetTransform;\n const position = new Vector3();\n\n transform.assignWorldTRS(position);\n // 物体和中心点在屏幕空间上投影的距离\n let distanceToCneter = 100;\n let theta = 1;\n\n if (gizmoSubType === GizmoSubType.viewHelper) {\n // 正交投影只需要计算物体在XY平面上的投影与中心点的距离\n if (mesh.name === 'sprite') {\n distanceToCneter = position.toVector2().distance(center.toVector2());\n theta = (this.boundingMap.get('posX') as GizmoItemBoundingSphere).radius;\n }\n // 将物体挂到相机的transform上\n const fov = 30; // 指定fov角度\n const screenWidth = item.composition!.renderer.getWidth();\n const screenHeight = item.composition!.renderer.getHeight();\n const distance = 16; // 指定物体与相机的距离\n const width = 2 * Math.tan(fov * Math.PI / 360) * distance;\n const aspect = screenWidth / screenHeight;\n const height = width / aspect;\n const cameraModelMat4 = item.composition!.camera.getInverseViewMatrix();\n const padding = this.size.padding || 1; // 指定viewHelper与屏幕右上角的边距\n let localMat: Matrix4;\n\n localMat = transform.getWorldMatrix();\n const worldTransform: Transform = new Transform({\n valid: true,\n });\n\n worldTransform.cloneFromMatrix(localMat);\n worldTransform.setPosition((position.x + width / 2) - padding, (position.y + height / 2) - padding, position.z);\n localMat = worldTransform.getWorldMatrix();\n worldMat4 = cameraModelMat4.clone().multiply(localMat);\n // 正交投影到屏幕上\n const proMat5 = computeOrthographicOffCenter(-width / 2, width / 2, -height / 2, height / 2, -distance, distance);\n\n mesh.material.setMatrix('_MatrixP', proMat5);\n } else {\n if (gizmoSubType === GizmoSubType.rotation) {\n const cameraPos = item.composition!.camera.position || [0, 0, 0];\n\n mesh.material.setVector3('u_cameraPos', cameraPos);\n mesh.material.setVector3('u_center', center);\n }\n worldMat4 = transform.getWorldMatrix();\n // TODO 计算物体和中心点在屏幕空间上投影的距离 distanceToCneter\n }\n mesh.material.setMatrix('u_model', worldMat4);\n\n // 使用distanceToCneter处理坐标轴旋转到中心点附近时的遮挡问题\n if (distanceToCneter < theta) {\n if (distanceToCneter < theta * 0.5) {\n mesh.material.setVector2('u_alpha', new Vector2(0, 0));\n } else {\n mesh.material.setVector2('u_alpha', new Vector2((2 / theta) * distanceToCneter - 1, 0));\n }\n }\n }\n }\n if (this.mesh) { // 基础几何体\n const worldPos = new Vector3();\n const worldQuat = new Quaternion();\n const worldSca = new Vector3(1, 1, 1);\n\n this.targetItem.transform.assignWorldTRS(worldPos, worldQuat);\n\n const targetTransform = new Transform({\n position: worldPos,\n quat: worldQuat,\n scale: worldSca,\n valid: true,\n });\n\n if (gizmoSubType === GizmoSubType.light || gizmoSubType === GizmoSubType.camera) {\n const camera = item.composition!.camera;\n const cameraPos = camera.position || new Vector3(0, 0, 0);\n const itemPos = targetTransform.position;\n const newPos = moveToPointWidthFixDistance(cameraPos, itemPos);\n\n targetTransform.setPosition(newPos.x, newPos.y, newPos.z);\n }\n\n this.mat = targetTransform.getWorldMatrix();\n\n this.mesh.material.setMatrix('u_model', targetTransform.getWorldMatrix());\n }\n }\n }\n }\n\n /**\n * 获取默认绘制模式\n * @returns 绘制模式常量\n */\n getDefaultRenderMode (): GeometryDrawMode {\n let result: GeometryDrawMode;\n const gizmoSubType = this.subType;\n\n switch (gizmoSubType) {\n case GizmoSubType.particleEmitter:\n case GizmoSubType.modelWireframe:\n case GizmoSubType.frustum:\n case GizmoSubType.directionLight:\n case GizmoSubType.spotLight:\n case GizmoSubType.pointLight:\n case GizmoSubType.floorGrid:\n result = constants.LINES;\n\n break;\n default:\n result = constants.TRIANGLES;\n\n break;\n }\n\n return result;\n }\n\n /**\n * 获取默认尺寸\n * @returns 几何体尺寸\n */\n getDefaultSize () {\n let result = {};\n const gizmoSubType = this.subType;\n\n switch (gizmoSubType) {\n case GizmoSubType.box:\n result = { width: 1, height: 1, depth: 1 };\n\n break;\n case GizmoSubType.sphere:\n result = { radius: 1 };\n\n break;\n case GizmoSubType.cylinder:\n result = { radius: 1, height: 1 };\n\n break;\n case GizmoSubType.cone:\n result = { radius: 1, height: 1 };\n\n break;\n default:\n result = {};\n\n break;\n }\n\n return result;\n }\n\n createModelContent (item: VFXItem) {\n const modelComponent = item.getComponent(RendererComponent);\n //@ts-expect-error TODO 和 3D 类型解耦\n const psubMesh = modelComponent.content.subMeshes[0];\n const engine = item.composition?.renderer.engine;\n\n assertExist(engine);\n\n if (psubMesh) {\n this.targetItem = item;\n this.wireframeMeshes = [];\n\n const originMesh = Mesh.create(\n engine,\n {\n geometry: psubMesh.geometry.geometry,\n material: psubMesh.material.effectMaterial,\n priority: 3000,\n });\n const mesh = this.wireframeMesh = createModeWireframe(engine, originMesh, this.color);\n\n this.wireframeMeshes.push(mesh);\n this.meshes.push(mesh);\n }\n }\n\n createParticleContent (item: VFXItem) {\n const particleSystem = item.getComponent(ParticleSystem);\n\n if (!particleSystem) {\n return;\n }\n\n const shape = particleSystem.definition.shape;\n const engine = this.item.composition?.renderer.engine;\n\n assertExist(engine);\n\n this.targetItem = item;\n if (shape && shape.type) {\n const mesh = this.mesh = createMeshFromShape(engine, shape, { color: this.color });\n\n this.meshes.push(mesh);\n }\n }\n\n /**\n * 创建 BoundingBox 几何体模型\n * @param item - VFXItem\n */\n createBoundingBoxContent (item: VFXItem) {\n const gizmoItem = this.item;\n const shape = {\n shape: 'Box',\n width: this.size.width,\n height: this.size.height,\n depth: this.size.depth,\n center: this.size.center,\n };\n const engine = gizmoItem.composition?.renderer.engine;\n\n assertExist(engine);\n\n this.targetItem = item;\n if (shape) {\n const mesh = this.mesh = createMeshFromShape(engine, shape, { color: this.color, depthTest: this.depthTest });\n\n this.meshes.push(mesh);\n }\n }\n\n /**\n * 创建基础几何体模型\n * @param item - VFXItem\n * @param subType - GizmoSubType 类型\n */\n createBasicContent (item: VFXItem, subType: GizmoSubType, iconTextures?: Map<string, Texture>) {\n const gizmoItem = this.item;\n const options = {\n size: this.size,\n color: this.color,\n renderMode: this.renderMode,\n depthTest: this.depthTest,\n };\n const engine = gizmoItem.composition?.renderer.engine;\n\n assertExist(engine);\n\n const mesh = this.mesh = createMeshFromSubType(engine, subType, this.boundingMap, iconTextures, options) as Mesh;\n\n this.targetItem = item;\n this.meshes.push(mesh);\n }\n\n /**\n * 创建组合几何体模型\n * @param item - VFXItem\n * @param subType - GizmoSubType 类型\n * @param iconTextures - XYZ 图标纹理(viewHelper 专用)\n */\n createCombinationContent (item: VFXItem, subType: GizmoSubType, iconTextures?: Map<string, Texture>) {\n const gizmoItem = this.item;\n const options = {\n size: this.size,\n renderMode: this.renderMode,\n };\n\n const engine = gizmoItem.composition?.renderer.engine;\n\n assertExist(engine);\n\n this.contents = createMeshFromSubType(engine, subType, this.boundingMap, iconTextures, options) as Map<Mesh, Transform>;\n for (const mesh of this.contents.keys()) {\n this.meshes.push(mesh);\n }\n this.targetItem = item;\n }\n\n override fromData (data: GizmoComponentData): void {\n super.fromData(data);\n if (data.coordinateSpace !== undefined) {\n this.coordinateSpace = data.coordinateSpace;\n }\n const item = this.item;\n\n item.duration = 999;\n const {\n target, subType, renderMode, size, depthTest,\n color = [255, 255, 255],\n } = data.options;\n\n this.target = target;\n this.subType = subType;\n this.renderMode = renderMode || this.getDefaultRenderMode();\n this.size = size || this.getDefaultSize();\n this.depthTest = depthTest;\n\n const [r, g, b] = color;\n\n this.color = [r / 255, g / 255, b / 255];\n if (data) {\n item.transform = new Transform(data.transform);\n }\n }\n\n /**\n * 射线检测算法\n * @returns 包含射线检测算法回调方法的参数\n */\n private getHitTestParams = (): void | HitTestCustomParams => {\n const item = this.item;\n const boundingMap = this.boundingMap;\n\n if (boundingMap.size > 0) {\n const boundingKeys = boundingMap.keys();\n let worldMat4: Matrix4;\n\n worldMat4 = this.transform.getWorldMatrix();\n const targetItem = this.targetItem;\n\n if (targetItem) {\n //const targetTransform = this.targetItem.transform.clone();\n const worldPos = new Vector3();\n const worldQuat = new Quaternion();\n const worldSca = new Vector3(1, 1, 1);\n const gizmoSubType = this.subType;\n\n // Scale Gizmo 没有世界空间\n if (this.coordinateSpace == CoordinateSpace.Local || gizmoSubType === GizmoSubType.scale) {\n this.targetItem.transform.assignWorldTRS(worldPos, worldQuat);\n } else {\n this.targetItem.transform.assignWorldTRS(worldPos);\n }\n\n const targetTransform = new Transform({\n position: worldPos,\n quat: worldQuat,\n scale: worldSca,\n valid: true,\n });\n\n // 移动\\旋转\\缩放gizmo去除近大远小\n if (\n gizmoSubType === GizmoSubType.rotation ||\n gizmoSubType === GizmoSubType.scale ||\n gizmoSubType === GizmoSubType.translation ||\n gizmoSubType === GizmoSubType.camera ||\n gizmoSubType === GizmoSubType.light\n ) {\n const camera = item.composition!.camera;\n const cameraPos = camera.position || [0, 0, 0];\n const itemPos = targetTransform.position;\n const newPos = moveToPointWidthFixDistance(cameraPos, itemPos);\n\n targetTransform.setPosition(newPos.x, newPos.y, newPos.z);\n worldMat4 = targetTransform.getWorldMatrix();\n } else {\n worldMat4 = targetTransform.getWorldMatrix();\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = item;\n\n return {\n type: HitTestType.custom,\n clipMasks:this.frameClipMasks,\n /**\n * 自定义射线检测算法\n * @param ray 射线参数\n * @param pointInCanvas 屏幕坐标\n * @returns\n */\n collect (ray: Ray, pointInCanvas: Vector2): Vector3[] | void {\n const hitPositions = [];\n const gizmoComponent = self.getComponent(GizmoComponent);\n\n gizmoComponent.hitBounding = undefined;\n for (const key of boundingKeys) {\n const bounding = boundingMap.get(key);\n const center = new Vector3();\n const worldCenter = new Vector3();\n\n if (bounding?.type === BoundingType.box || bounding?.type === BoundingType.sphere) {\n if (bounding?.center) {\n center.copyFrom(bounding?.center);\n }\n worldMat4.projectPoint(center, worldCenter);\n }\n let position: Vector3 | undefined;\n\n switch (bounding?.type) {\n case BoundingType.box: // 立方体包围盒\n {\n const boxHalfSize = bounding.size.clone().multiply(0.5);\n const boxMax = center.clone().add(boxHalfSize);\n const boxMin = center.clone().subtract(boxHalfSize);\n\n position = ray.intersectBox({ min: boxMin, max: boxMax }, new Vector3());\n }\n\n break;\n case BoundingType.sphere: // 球体包围盒\n\n // viewHelper 使用了正交投影,使用屏幕投影点计算\n if (gizmoComponent.subType === GizmoSubType.viewHelper) {\n // 计算正交投影矩阵\n const viewMat4 = self.composition!.camera.getViewMatrix();\n const fov = 30; // 指定fov角度\n const screenWidth = self.composition!.renderer.getWidth();\n const screenHeight = self.composition!.renderer.getHeight();\n const distance = 16; // 指定物体与相机的距离\n const width = 2 * Math.tan(fov * Math.PI / 360) * distance;\n const aspect = screenWidth / screenHeight;\n const height = width / aspect;\n const proMat4 = computeOrthographicOffCenter(-width / 2, width / 2, -height / 2, height / 2, -distance, distance);\n\n // 将包围盒挂到相机的 transform 上\n const cameraModelMat4 = self.composition!.camera.getInverseViewMatrix();\n const localTransform = new Transform({\n valid: true,\n });\n\n localTransform.cloneFromMatrix(worldMat4);\n const pos = localTransform.position;\n const padding = gizmoComponent.size.padding || 1; // 指定viewHelper与屏幕右上角的边距\n\n localTransform.setPosition((pos.x + width / 2) - padding, (pos.y + height / 2) - padding, pos.z);\n const localMat4 = localTransform.getWorldMatrix();\n const modelMat4 = cameraModelMat4.clone().multiply(localMat4);\n\n modelMat4.projectPoint(center, worldCenter);\n\n // 包围球中心点正交投影到屏幕上\n const vpMat4 = proMat4.clone().multiply(viewMat4);\n const mvpMat4 = vpMat4.clone().multiply(modelMat4);\n const screenCenter = mvpMat4.projectPoint(center, new Vector3());\n // const screenCenterX = screenCenter.x;\n // const screenCenterY = screenCenter.y;\n\n // 包围球上的点正交投影到屏幕上\n const radius = bounding.radius;\n const up = new Vector3(\n localMat4.elements[1],\n localMat4.elements[5],\n localMat4.elements[9],\n ).normalize();\n\n const point = up.clone().multiply(radius);\n\n point.add(center);\n\n const screenPoint = mvpMat4.projectPoint(point, new Vector3());\n // const screenPointX = screenPoint.x;\n // const screenPointY = screenPoint.y;\n\n // 计算正交投影到屏幕上的包围球的半径\n const screenCenter2 = screenCenter.toVector2();\n const screenPoint2 = screenPoint.toVector2();\n const screenRadius = screenCenter2.distance(screenPoint2);\n\n if (pointInCanvas.distance(screenCenter2) < screenRadius * 1.2) {\n position = worldCenter;\n }\n } else {\n position = ray.intersectSphere({ center: worldCenter, radius: bounding.radius }, new Vector3());\n }\n\n break;\n case BoundingType.triangle: {// 三角数组包围盒\n const { triangles, backfaceCulling } = bounding;\n const tmpPositions: Vector3[] = [];\n let tmpPosition;\n\n for (let j = 0; j < triangles.length; j++) {\n const triangle = triangles[j];\n const worldTriangle: TriangleLike = {\n p0: worldMat4.projectPoint(triangle.p0 as Vector3, new Vector3()),\n p1: worldMat4.projectPoint(triangle.p1 as Vector3, new Vector3()),\n p2: worldMat4.projectPoint(triangle.p2 as Vector3, new Vector3()),\n };\n\n tmpPosition = ray.intersectTriangle(worldTriangle, new Vector3(), backfaceCulling);\n if (tmpPosition) {\n tmpPositions.push(tmpPosition);\n }\n }\n // 仅保存距离相机最近的点\n if (tmpPositions.length > 0) {\n let lastDistance: number;\n\n tmpPositions.forEach(item => {\n const distance = ray.origin.distanceSquared(item);\n\n if (!lastDistance || distance < lastDistance) {\n lastDistance = distance;\n position = item;\n }\n });\n }\n\n break;\n }\n case BoundingType.line: {// 线条包围盒,将线条转换到屏幕空间,计算线条与屏幕交互点的距离,小于阈值判定为点中\n const { points, width } = bounding;\n\n position = intersectRayLine(new Vector3(), pointInCanvas, points, width / 2, worldMat4, self.composition!.camera);\n\n break;\n }\n default:\n break;\n }\n if (position) {\n hitPositions.push(position);\n // 缓存距离相机最近的 BoundingKey\n if (gizmoComponent.hitBounding) {\n const distance = ray.origin.distanceSquared(position);\n const lastDistance = ray.origin.distanceSquared(gizmoComponent.hitBounding.position);\n\n if (distance < lastDistance) {\n gizmoComponent.hitBounding.key = key;\n gizmoComponent.hitBounding.position = position;\n }\n } else {\n gizmoComponent.hitBounding = {\n key,\n position,\n };\n }\n }\n }\n if (hitPositions.length === 0) {\n gizmoComponent.hitBounding = undefined;\n }\n\n return hitPositions;\n },\n behavior: spec.InteractBehavior.NOTIFY,\n };\n }\n };\n\n}\n\nexport enum CoordinateSpace {\n Local,\n World\n}\n\nclass GizmoRendererFeature extends RendererFeature {\n private passes: RenderPass[] = [];\n\n override create (renderer: Renderer): void {\n this.passes = [\n new DrawGizmoFrontPass(renderer),\n new DrawGizmoEditorPass(renderer),\n new DrawGizmoBehindPass(renderer),\n ];\n }\n\n override addRenderPasses (renderer: Renderer, data: RenderingData): void {\n for (const pass of this.passes) {\n if (data.renderList.groups.has(pass.name)) {\n renderer.enqueuePass(pass);\n }\n }\n }\n\n override dispose (): void {\n for (const pass of this.passes) {\n pass.dispose();\n }\n this.passes.length = 0;\n }\n}\n\nclass DrawGizmoBehindPass extends RenderPass {\n constructor (renderer: Renderer) {\n super(renderer);\n this.renderPassEvent = RenderPassEvent.AfterRendering;\n this.name = behindRenderPassName;\n }\n\n override execute (renderer: Renderer, data: RenderingData): void {\n renderer.clear({ depthAction: TextureLoadAction.clear });\n renderer.renderMeshes(data.renderList.groups.get(this.name) ?? []);\n }\n}\n\nclass DrawGizmoFrontPass extends RenderPass {\n constructor (renderer: Renderer) {\n super(renderer);\n this.renderPassEvent = RenderPassEvent.BeforeRendering;\n this.name = frontRenderPassName;\n }\n\n override execute (renderer: Renderer, data: RenderingData): void {\n renderer.renderMeshes(data.renderList.groups.get(this.name) ?? []);\n }\n}\n\nclass DrawGizmoEditorPass extends RenderPass {\n constructor (renderer: Renderer) {\n super(renderer);\n this.renderPassEvent = RenderPassEvent.AfterRenderingObjects;\n this.name = editorRenderPassName;\n }\n\n override execute (renderer: Renderer, data: RenderingData): void {\n renderer.renderMeshes(data.renderList.groups.get(this.name) ?? []);\n }\n}\n","import type { Composition, Scene, SceneLoadOptions, Texture, VFXItem } from '@galacean/effects';\nimport { Plugin } from '@galacean/effects';\nimport { axisIconMap } from './constants';\nimport { createImage, createTexture } from './util';\nimport { GizmoComponent } from './gizmo-component';\n\nconst iconImages: Map<string, HTMLImageElement> = new Map();\n\nexport const iconTextures: Map<string, Texture> = new Map();\n\nexport class EditorGizmoPlugin extends Plugin {\n override order = 1001;\n\n override async onAssetsLoadStart (scene: Scene, options?: SceneLoadOptions | undefined): Promise<void> {\n iconTextures.clear();\n\n if (iconImages.size !== axisIconMap.size) {\n for (const [name, data] of axisIconMap) {\n iconImages.set(name, await createImage(data));\n }\n }\n }\n\n override onCompositionCreated (composition: Composition, scene: Scene) {\n const engine = composition.renderer.engine;\n\n iconImages.forEach((image, name) => {\n iconTextures.set(name, createTexture(engine, image));\n });\n iconImages.clear();\n\n const items = composition.items;\n const targetMap: { [key: string]: VFXItem[] } = {};\n\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n const gizmoComponent = item.getComponent(GizmoComponent);\n\n if (gizmoComponent) {\n if (!targetMap[gizmoComponent.target]) {\n targetMap[gizmoComponent.target] = [];\n }\n targetMap[gizmoComponent.target].push(item);\n }\n }\n composition.loaderData.gizmoTarget = targetMap;\n composition.loaderData.gizmoItems = [];\n }\n}\n","import { math } from '@galacean/effects';\n\n/** Effects runtime 使用的 core math 构造器与工具。 */\nexport const Color = math.Color;\nexport const Euler = math.Euler;\nexport const EulerOrder = math.EulerOrder;\nexport const Matrix3 = math.Matrix3;\nexport const Matrix4 = math.Matrix4;\nexport const Quaternion = math.Quaternion;\nexport const Ray = math.Ray;\nexport const Vector2 = math.Vector2;\nexport const Vector3 = math.Vector3;\nexport const DEG2RAD = math.DEG2RAD;\nexport const RAD2DEG = math.RAD2DEG;\nexport const clamp = math.clamp;\nexport const isEqual = math.isEqual;\nexport const isZero = math.isZero;\n\n/** Effects runtime 使用的 core math 实例类型。 */\nexport type Color = math.Color;\nexport type Euler = math.Euler;\nexport type EulerOrder = math.EulerOrder;\nexport type Matrix3 = math.Matrix3;\nexport type Matrix4 = math.Matrix4;\nexport type Quaternion = math.Quaternion;\nexport type Ray = math.Ray;\nexport type Vector2 = math.Vector2;\nexport type Vector3 = math.Vector3;\n","export const PI2 = Math.PI * 2;\nexport const DEG2RAD = Math.PI / 180;\nexport const RAD2DEG = 180 / Math.PI;\nexport const NumberEpsilon = 1e-6;\nexport function isZero(v) {\n return isNaN(v) || Math.abs(v) < NumberEpsilon;\n}\nexport function isEqual(a, b) {\n return Math.abs(a - b) < NumberEpsilon || (a === Infinity && b === Infinity) || (a === -Infinity && b === -Infinity);\n}\n// http://www.rorydriscoll.com/2016/03/07/frame-rate-independent-damping-using-lerp/\nexport const damp = (x, y, lambda, dt) => lerp(x, y, 1 - Math.exp(-lambda * dt));\n// https://en.wikipedia.org/wiki/Linear_interpolation\nexport const lerp = (x, y, t) => (1 - t) * x + t * y;\nexport const degToRad = (degrees) => degrees * DEG2RAD;\nexport const radToDeg = (radians) => radians * RAD2DEG;\nexport function clamp(value, min, max) {\n const fixedMin = isNaN(min) ? -Infinity : min;\n const fixedMax = isNaN(max) ? Infinity : max;\n const lower = Math.min(fixedMin, fixedMax);\n const upper = Math.max(fixedMin, fixedMax);\n return Math.min(Math.max(value, lower), upper);\n}\n","import { NumberEpsilon } from './utils';\n/**\n * 二维向量\n */\nexport class Vector2 {\n x;\n y;\n /**\n * 二维向量的常量\n */\n static ONE = new Vector2(1.0, 1.0);\n static ZERO = new Vector2(0.0, 0.0);\n /**\n * 构造函数,默认为零向量\n * @param [x=0] - x 分量\n * @param [y=0] - y 分量\n */\n constructor(x = 0, y = 0) {\n this.x = x;\n this.y = y;\n }\n /**\n * 设置向量\n * @param x - x 轴分量\n * @param y - y 轴分量\n * @returns\n */\n set(x, y) {\n this.x = x;\n this.y = y;\n return this;\n }\n /**\n * 设置零向量\n * @returns 向量\n */\n setZero() {\n this.x = 0;\n this.y = 0;\n return this;\n }\n /**\n * 通过标量数值创建向量\n * @param num - 数值\n * @returns 向量\n */\n setFromNumber(num) {\n this.x = num;\n this.y = num;\n return this;\n }\n /**\n * 通过数组创建向量\n * @param array - 数组\n * @param [offset=0] - 起始偏移值\n * @returns 向量\n */\n setFromArray(array, offset = 0) {\n this.x = array[offset] ?? 0;\n this.y = array[offset + 1] ?? 0;\n return this;\n }\n /**\n * 拷贝向量\n * @param src - 要拷贝的对象\n * @returns 向量\n */\n copyFrom(src) {\n this.x = src.x;\n this.y = src.y;\n return this;\n }\n /**\n * 克隆向量\n * @returns 克隆结果\n */\n clone() {\n return new Vector2(this.x, this.y);\n }\n /**\n * 根据下标设置元素值\n * @param index - 下标值\n * @param value - 数字\n * @returns 向量\n */\n setElement(index, value) {\n switch (index) {\n case 0:\n this.x = value;\n break;\n case 1:\n this.y = value;\n break;\n default: console.error('index is out of range: ' + index);\n }\n return this;\n }\n /**\n * 根据下标获取值\n * @param index - 下标\n * @returns 值\n */\n getElement(index) {\n switch (index) {\n case 0: return this.x;\n case 1: return this.y;\n default: console.error('index is out of range: ' + index);\n }\n return 0;\n }\n /**\n * 向量相加\n * @param right - 向量 | 数字\n * @returns 向量\n */\n add(right) {\n if (typeof right === 'number') {\n this.x += right;\n this.y += right;\n }\n else if (right instanceof Array) {\n this.x += right[0];\n this.y += right[1];\n }\n else {\n this.x += right.x;\n this.y += right.y;\n }\n return this;\n }\n /**\n * 向量相加\n * @param left - 向量\n * @param right - 向量\n * @returns 相加结果\n */\n addVectors(left, right) {\n this.x = left.x + right.x;\n this.y = left.y + right.y;\n return this;\n }\n /**\n * 向量相减\n * @param right - 向量 | 数字\n * @returns 相减结果\n */\n subtract(right) {\n if (typeof right === 'number') {\n this.x -= right;\n this.y -= right;\n }\n else if (right instanceof Array) {\n this.x -= right[0];\n this.y -= right[1];\n }\n else {\n this.x -= right.x;\n this.y -= right.y;\n }\n return this;\n }\n /**\n * 向量相减\n * @param left - 向量\n * @param right - 向量\n * @returns 相减结果\n */\n subtractVectors(left, right) {\n this.x = left.x - right.x;\n this.y = left.y - right.y;\n return this;\n }\n /**\n * 向量相乘\n * @param right - 向量 | 数字\n * @returns 相乘结果\n */\n multiply(right) {\n if (typeof right === 'number') {\n this.x *= right;\n this.y *= right;\n }\n else if (right instanceof Array) {\n this.x *= right[0];\n this.y *= right[1];\n }\n else {\n this.x *= right.x;\n this.y *= right.y;\n }\n return this;\n }\n /**\n * 向量相乘\n * @param left - 向量\n * @param right - 向量\n * @returns 相乘结果\n */\n multiplyVectors(left, right) {\n this.x = left.x * right.x;\n this.y = left.y * right.y;\n return this;\n }\n /**\n * 向量相除\n * @param right - 向量 | 数字\n * @returns 相除结果\n */\n divide(right) {\n if (typeof right === 'number') {\n this.x /= right;\n this.y /= right;\n }\n else if (right instanceof Array) {\n this.x /= right[0];\n this.y /= right[1];\n }\n else {\n this.x /= right.x;\n this.y /= right.y;\n }\n return this;\n }\n /**\n * 向量缩放\n * @param v - 数字\n * @returns 缩放结果\n */\n scale(v) {\n this.x *= v;\n this.y *= v;\n return this;\n }\n /**\n * 分量求和\n * @returns 求和结果\n */\n sum() {\n return this.x + this.y;\n }\n /**\n * 向量求最小值\n * @param v - 向量\n * @returns 最小值\n */\n min(v) {\n if (typeof v === 'number') {\n this.x = Math.min(this.x, v);\n this.y = Math.min(this.y, v);\n }\n else {\n this.x = Math.min(this.x, v.x);\n this.y = Math.min(this.y, v.y);\n }\n return this;\n }\n /**\n * 向量求最大值\n * @param v - 向量\n * @returns 最大值\n */\n max(v) {\n if (typeof v === 'number') {\n this.x = Math.max(this.x, v);\n this.y = Math.max(this.y, v);\n }\n else {\n this.x = Math.max(this.x, v.x);\n this.y = Math.max(this.y, v.y);\n }\n return this;\n }\n /**\n * 向量阈值约束\n * @param min - 极小值\n * @param max - 极大值\n * @returns 向量\n */\n clamp(min, max) {\n return this.max(min).min(max);\n }\n /**\n * 向量向下取整\n * @returns 取整结果\n */\n floor() {\n this.x = Math.floor(this.x);\n this.y = Math.floor(this.y);\n return this;\n }\n /**\n * 向量向上取整\n * @returns 取整结果\n */\n ceil() {\n this.x = Math.ceil(this.x);\n this.y = Math.ceil(this.y);\n return this;\n }\n /**\n * 向量取四舍五入\n * @returns 四舍五入结果\n */\n round() {\n this.x = Math.round(this.x);\n this.y = Math.round(this.y);\n return this;\n }\n /**\n * 向量取绝对值\n * @returns 向量\n */\n abs() {\n this.x = Math.abs(this.x);\n this.y = Math.abs(this.y);\n return this;\n }\n /**\n * 向量取反\n * @returns 取反结果\n */\n negate() {\n this.x = -this.x;\n this.y = -this.y;\n return this;\n }\n /**\n * 向量长度\n * @returns 求值结果\n */\n length() {\n return Math.sqrt(this.x * this.x + this.y * this.y);\n }\n /**\n * 向量长度平方\n * @returns 求值结果\n */\n lengthSquared() {\n return this.x * this.x + this.y * this.y;\n }\n /**\n * 向量归一化\n * @returns 归一化结果\n */\n normalize() {\n return this.divide(this.length() || 1);\n }\n /**\n * 设置向量长度\n * @param length - 长度\n * @returns 向量\n */\n setLength(length) {\n return this.normalize().multiply(length);\n }\n /**\n * 向量线性插值\n * @param other - 向量\n * @param alpha - 插值比\n * @returns 计算结果\n */\n lerp(other, alpha) {\n this.x += (other.x - this.x) * alpha;\n this.y += (other.y - this.y) * alpha;\n return this;\n }\n /**\n * 向量线性插值\n * @param v1 - 向量\n * @param v2 - 向量\n * @param alpha - 插值比\n * @returns 计算结果\n */\n lerpVectors(v1, v2, alpha) {\n this.x = v1.x + (v2.x - v1.x) * alpha;\n this.y = v1.y + (v2.y - v1.y) * alpha;\n return this;\n }\n /**\n * 向量点乘\n * @param v - 向量\n * @returns 点乘结果\n */\n dot(v) {\n return this.x * v.x + this.y * v.y;\n }\n /**\n * 向量叉乘\n * @param v - 向量\n * @returns 叉乘结果\n */\n cross(v) {\n return this.x * v.y - this.y * v.x;\n }\n /**\n * 点距离\n * @param v - 点\n * @returns 距离\n */\n distance(v) {\n const dx = this.x - v.x;\n const dy = this.y - v.y;\n return Math.sqrt(dx * dx + dy * dy);\n }\n /**\n * 点距离平方\n * @param v - 点\n * @returns 距离平方\n */\n distanceSquared(v) {\n const dx = this.x - v.x;\n const dy = this.y - v.y;\n return dx * dx + dy * dy;\n }\n /**\n * 向量判等\n * @param v - 向量\n * @returns 判等结果\n */\n equals(v) {\n return this.x === v.x && this.y === v.y;\n }\n /**\n * 是否零向量\n * @returns 是否零向量\n */\n isZero() {\n const eps = NumberEpsilon;\n const { x, y } = this;\n return Math.abs(x) <= eps && Math.abs(y) <= eps;\n }\n /**\n * 向量转数组\n * @returns 数组\n */\n toArray() {\n return [this.x, this.y];\n }\n fill(array, offset = 0) {\n array[offset] = this.x;\n array[offset + 1] = this.y;\n }\n /**\n * 计算向量相对于正 x 轴的角度(弧度)\n * @returns 弧度值\n */\n angle() {\n const angle = Math.atan2(-this.y, -this.x) + Math.PI;\n return angle;\n }\n /**\n * 绕指定中心点旋转向量\n * @param center - 旋转中心\n * @param angle - 旋转角度(弧度)\n * @returns 旋转结果\n */\n rotateAround(center, angle) {\n const c = Math.cos(angle), s = Math.sin(angle);\n const x = this.x - center.x;\n const y = this.y - center.y;\n this.x = x * c - y * s + center.x;\n this.y = x * s + y * c + center.y;\n return this;\n }\n /**\n * 随机生成向量\n * @returns 向量\n */\n random() {\n this.x = Math.random();\n this.y = Math.random();\n return this;\n }\n /**\n * 通过标量创建向量\n * @param num - 数值\n * @returns 向量\n */\n static fromNumber(num) {\n return new Vector2().setFromNumber(num);\n }\n /**\n * 通过数组创建向量\n * @param array - 数组\n * @param [offset=0] - 起始偏移值\n * @returns 向量\n */\n static fromArray(array, offset = 0) {\n return new Vector2().setFromArray(array, offset);\n }\n}\n","import { Vector2 } from '../core/vector2';\n/**\n * 二维轴对齐包围盒(AABB)。\n *\n * 包围盒仅由 `min` 和 `max` 表示,\n * 不保存旋转后的角点或其它 OBB 状态。\n */\nexport class Box2 {\n min;\n max;\n /**\n * 构造函数,传入值为空时表示空包围盒。\n * @param min - 最小点\n * @param max - 最大点\n */\n constructor(min = new Vector2(+Infinity, +Infinity), max = new Vector2(-Infinity, -Infinity)) {\n this.min = min.clone();\n this.max = max.clone();\n }\n /**\n * 通过最大、最小点设置二维包围盒。\n * @param min - 最小点\n * @param max - 最大点\n * @returns 当前包围盒\n */\n set(min, max) {\n this.min.copyFrom(min);\n this.max.copyFrom(max);\n return this;\n }\n /**\n * 通过二维空间点集合设置包围盒。\n * @param points - 二维空间点集合\n * @returns 当前包围盒\n */\n setFromPoints(points) {\n this.makeEmpty();\n for (let i = 0, il = points.length; i < il; i++) {\n this.expandByPoint(points[i]);\n }\n return this;\n }\n /**\n * 通过中心与大小设置二维包围盒。\n * @param center - 中心点\n * @param size - 包围盒大小\n * @returns 当前包围盒\n */\n setFromCenterAndSize(center, size) {\n const halfSize = size.clone().multiply(0.5);\n this.min.copyFrom(center).subtract(halfSize);\n this.max.copyFrom(center).add(halfSize);\n return this;\n }\n /**\n * 克隆二维包围盒。\n * @returns 克隆结果\n */\n clone() {\n return new Box2().copyFrom(this);\n }\n /**\n * 复制二维包围盒。\n * @param box - 复制对象\n * @returns 当前包围盒\n */\n copyFrom(box) {\n this.min.copyFrom(box.min);\n this.max.copyFrom(box.max);\n return this;\n }\n /**\n * 将二维包围盒置空。\n * @returns 当前包围盒\n */\n makeEmpty() {\n this.min.x = this.min.y = +Infinity;\n this.max.x = this.max.y = -Infinity;\n return this;\n }\n /**\n * 判断二维包围盒是否为空。\n *\n * 零宽或零高的退化盒仍包含点,不视为空盒。\n * @returns 是否为空包围盒\n */\n isEmpty() {\n return this.max.x < this.min.x || this.max.y < this.min.y;\n }\n /**\n * 获取二维包围盒中心点。\n * @param target - 结果存放对象\n * @returns 二维包围盒中心点\n */\n getCenter(target = new Vector2()) {\n return this.isEmpty() ? target.set(0, 0) : target.addVectors(this.min, this.max).multiply(0.5);\n }\n /**\n * 获取二维包围盒大小。\n * @param target - 结果存放对象\n * @returns 二维包围盒大小\n */\n getSize(target = new Vector2()) {\n return this.isEmpty() ? target.set(0, 0) : target.subtractVectors(this.max, this.min);\n }\n /**\n * 扩展包围盒以包含指定点。\n * @param point - 二维空间点\n * @returns 当前包围盒\n */\n expandByPoint(point) {\n this.min.min(point);\n this.max.max(point);\n return this;\n }\n /**\n * 沿两个坐标轴扩展包围盒。\n * @param vector - 两个坐标轴上的扩展量\n * @returns 当前包围盒\n */\n expandByVector(vector) {\n this.min.subtract(vector);\n this.max.add(vector);\n return this;\n }\n /**\n * 沿两个坐标轴等量扩展包围盒。\n * @param scalar - 扩展量\n * @returns 当前包围盒\n */\n expandByScalar(scalar) {\n this.min.add(-scalar);\n this.max.add(scalar);\n return this;\n }\n /**\n * 判断包围盒是否包含指定点。\n * @param point - 二维空间点\n * @returns 是否包含指定点\n */\n containsPoint(point) {\n return point.x >= this.min.x && point.x <= this.max.x\n && point.y >= this.min.y && point.y <= this.max.y;\n }\n /**\n * 判断当前包围盒是否完整包含另一个包围盒。\n * @param box - 其它包围盒\n * @returns 是否完整包含\n */\n containsBox(box) {\n return this.min.x <= box.min.x\n && box.max.x <= this.max.x\n && this.min.y <= box.min.y\n && box.max.y <= this.max.y;\n }\n /**\n * 获取点在二维包围盒内的比例位置。\n * @param point - 二维空间点\n * @param target - 结果存放对象\n * @returns 点在包围盒内的比例位置\n */\n getParameter(point, target = new Vector2()) {\n return target.set((point.x - this.min.x) / (this.max.x - this.min.x), (point.y - this.min.y) / (this.max.y - this.min.y));\n }\n /**\n * 判断当前包围盒是否与另一个包围盒相交。\n * @param box - 其它包围盒\n * @returns 是否相交\n */\n intersectsBox(box) {\n return box.max.x >= this.min.x\n && box.min.x <= this.max.x\n && box.max.y >= this.min.y\n && box.min.y <= this.max.y;\n }\n /**\n * 将指定点约束在包围盒内。\n * @param point - 二维空间点\n * @param target - 结果存放对象\n * @returns 约束后的点\n */\n clampPoint(point, target = new Vector2()) {\n return target.copyFrom(point).clamp(this.min, this.max);\n }\n /**\n * 获取指定点到包围盒的距离。\n * @param point - 二维空间点\n * @returns 距离\n */\n distanceToPoint(point) {\n const clampedPoint = point.clone().clamp(this.min, this.max);\n return clampedPoint.subtract(point).length();\n }\n /**\n * 计算当前包围盒与另一个包围盒的交集。\n * @param box - 其它包围盒\n * @returns 当前包围盒\n */\n intersect(box) {\n this.min.max(box.min);\n this.max.min(box.max);\n if (this.isEmpty()) {\n this.makeEmpty();\n }\n return this;\n }\n /**\n * 计算当前包围盒与另一个包围盒的并集。\n * @param box - 其它包围盒\n * @returns 当前包围盒\n */\n union(box) {\n this.min.min(box.min);\n this.max.max(box.max);\n return this;\n }\n /**\n * 平移二维包围盒。\n * @param offset - 位移向量\n * @returns 当前包围盒\n */\n translate(offset) {\n this.min.add(offset);\n this.max.add(offset);\n return this;\n }\n /**\n * 判断二维包围盒是否相等。\n * @param box - 其它包围盒\n * @returns 是否相等\n */\n equals(box) {\n return box.min.equals(this.min) && box.max.equals(this.max);\n }\n}\n","import { Vector2 } from '../core/vector2';\n/**\n * 二维圆\n */\nexport class Circle {\n static tempVec0 = new Vector2();\n static tempVec1 = new Vector2();\n center;\n radius;\n /**\n * 构造函数,默认值为圆心为原点,半径为0\n * @param [center=new Vector2()] - 圆心\n * @param [radius=0] - 半径\n */\n constructor(center = Vector2.ZERO, radius = 0) {\n this.center = center.clone();\n this.radius = radius;\n }\n /**\n * 通过中心点与大小设置圆\n * @param center - 圆心\n * @param radius - 半径\n * @returns\n */\n set(center, radius) {\n this.center = center.clone();\n this.radius = radius;\n return this;\n }\n /**\n * 克隆圆\n * @returns 克隆结果\n */\n clone() {\n return new Circle().copyFrom(this);\n }\n /**\n * 复制圆\n * @param circle - 复制对象\n * @returns 复制结果\n */\n copyFrom(circle) {\n this.center.copyFrom(circle.center);\n this.radius = circle.radius;\n return this;\n }\n /**\n * 圆置空\n * @returns 置空结果\n */\n makeEmpty() {\n this.center.set(0, 0);\n this.radius = -1;\n return this;\n }\n /**\n * 圆判空\n * @returns 判空结果\n */\n isEmpty() {\n return this.radius < 0;\n }\n /**\n * 获取圆心\n * @param [target=new Vector2()] - 目标结果对象\n * @returns 圆心\n */\n getCenter(target = new Vector2()) {\n target.copyFrom(this.center);\n return target;\n }\n /**\n * 获取半径\n * @returns 半径\n */\n getRadius() {\n return this.radius;\n }\n /**\n * 通过二维空间点扩展圆\n * @param point - 二维空间点\n * @returns 扩展结果\n */\n expandByPoint(point) {\n if (this.isEmpty()) {\n return this.set(point, 0);\n }\n const offset = Circle.tempVec0.subtractVectors(point, this.center);\n const distance = offset.length();\n if (distance > this.radius) {\n const radius = (this.radius + distance) * 0.5;\n this.center.add(offset.multiply((radius - this.radius) / distance));\n this.radius = radius;\n }\n return this;\n }\n /**\n * 通过大小扩展圆\n * @param scalar - 扩展大小\n * @returns 扩展结果\n */\n expandByScalar(scalar) {\n this.radius += scalar;\n return this;\n }\n /**\n * 判断圆是否包含二维空间点\n * @param point - 二维空间点\n * @returns 包含判断结果\n */\n containsPoint(point) {\n return !this.isEmpty() && this.center.distanceSquared(point) <= this.radius * this.radius;\n }\n /**\n * 判断圆是否包含二维包围盒\n * @param box - 二维包围盒\n * @returns 包含判断结果\n */\n containsBox(box) {\n if (this.isEmpty() || box.isEmpty()) {\n return false;\n }\n const deltaX = Math.max(Math.abs(box.min.x - this.center.x), Math.abs(box.max.x - this.center.x));\n const deltaY = Math.max(Math.abs(box.min.y - this.center.y), Math.abs(box.max.y - this.center.y));\n return deltaX * deltaX + deltaY * deltaY <= this.radius * this.radius;\n }\n /**\n * 判断圆与二维包围盒的相交关系\n * @param box - 二维包围盒\n * @returns 相交判断结果\n */\n intersectsBox(box) {\n return !this.isEmpty() && !box.isEmpty() && box.distanceToPoint(this.center) <= this.radius;\n }\n /**\n * 求点与圆的最短距离\n * @param point - 二维空间点\n * @returns 距离\n */\n distanceToPoint(point) {\n return this.isEmpty() ? Infinity : this.center.distance(point) - this.radius;\n }\n /**\n * 获取两个圆交集的保守包围圆。部分重叠时,真实交集为透镜形,\n * 因此结果取两个输入中较小的圆,并不精确表示交集。\n * @param circle - 二维圆\n * @returns 求交结果\n */\n intersect(circle) {\n if (this.isEmpty() || circle.isEmpty()) {\n return this.makeEmpty();\n }\n const distance = this.center.distance(circle.center);\n if (distance > this.radius + circle.radius) {\n return this.makeEmpty();\n }\n if (this.radius >= distance + circle.radius) {\n return this.copyFrom(circle);\n }\n if (circle.radius >= distance + this.radius) {\n return this;\n }\n return this.radius <= circle.radius ? this : this.copyFrom(circle);\n }\n /**\n * 圆求并集\n * @param circle - 二维圆\n * @returns 求并结果\n */\n union(circle) {\n if (circle.isEmpty()) {\n return this;\n }\n if (this.isEmpty()) {\n return this.copyFrom(circle);\n }\n if (this.center.equals(circle.center)) {\n this.radius = Math.max(this.radius, circle.radius);\n }\n else {\n const point = Circle.tempVec0;\n const offset = Circle.tempVec1.subtractVectors(circle.center, this.center).setLength(circle.radius);\n this.expandByPoint(point.copyFrom(circle.center).add(offset));\n this.expandByPoint(point.copyFrom(circle.center).subtract(offset));\n }\n return this;\n }\n /**\n * 圆的位移\n * @param offset - 二维向量\n * @returns 位移结果\n */\n translate(offset) {\n this.center.add(offset);\n return this;\n }\n /**\n * 圆判等\n * @param circle - 二维圆\n * @returns 判等结果\n */\n equals(circle) {\n return this.center.equals(circle.center) && this.radius === circle.radius;\n }\n}\n","import { clamp } from '../core/utils';\nimport { Vector2 } from '../core/vector2';\nfunction orientation(a, b, c) {\n return (b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x);\n}\nfunction onSegment(a, b, point) {\n return point.x >= Math.min(a.x, b.x) && point.x <= Math.max(a.x, b.x)\n && point.y >= Math.min(a.y, b.y) && point.y <= Math.max(a.y, b.y);\n}\n/**\n * 二维线段\n */\nexport class Line2 {\n static tempVec0 = new Vector2();\n static tempVec1 = new Vector2();\n start;\n end;\n /**\n * 构造函数\n * @param [start=Vector2.ZERO] - 线段起点,默认值为(0, 0)\n * @param [end=Vector2.ZERO] - 线段终点,默认值为(0, 0)\n */\n constructor(start = Vector2.ZERO, end = Vector2.ZERO) {\n this.start = start.clone();\n this.end = end.clone();\n }\n /**\n * 设置二维线段\n * @param start - 线段起点\n * @param end - 线段终点\n * @returns 二维线段\n */\n set(start, end) {\n this.start.copyFrom(start);\n this.end.copyFrom(end);\n return this;\n }\n /**\n * 复制二维线段\n * @param line - 复制对象\n * @returns 复制结果\n */\n copyFrom(line) {\n this.start.copyFrom(line.start);\n this.end.copyFrom(line.end);\n return this;\n }\n /**\n * 二维线段求方向\n * @returns 二维线段方向\n */\n direction() {\n return new Vector2().subtractVectors(this.end, this.start).normalize();\n }\n /**\n * 二维线段求中点\n * @param [target=new Vector2()] - 目标保存对象\n * @returns 二维线段中点\n */\n getCenter(target = new Vector2()) {\n return target.addVectors(this.start, this.end).multiply(0.5);\n }\n /**\n * 二维线段向量值\n * @param [target=new Vector2()] - 目标保存对象\n * @returns 二维线段向量值\n */\n delta(target = new Vector2()) {\n return target.subtractVectors(this.end, this.start);\n }\n /**\n * 二维线段欧式距离平方\n * @returns 计算结果\n */\n distanceSq() {\n return this.start.distanceSquared(this.end);\n }\n /**\n * 二维线段欧式距离\n * @returns 计算结果\n */\n distance() {\n return this.start.distance(this.end);\n }\n /**\n * 求二维线段比例点\n * @param t - 比例值\n * @param [target=new Vector2()] - 目标保存对象\n * @returns 比例点结果\n */\n at(t, target = new Vector2()) {\n return this.delta(target).multiply(t).add(this.start);\n }\n /**\n * 求点与线段的最短距离\n * @param point - 二维空间点\n * @param clampToLine - 是否限制于线段内\n * @returns 距离结果\n */\n closestPointToPointParameter(point, clampToLine) {\n const startP = Line2.tempVec0;\n const startEnd = Line2.tempVec1;\n startP.subtractVectors(point, this.start);\n startEnd.subtractVectors(this.end, this.start);\n const se2se = startEnd.dot(startEnd);\n if (se2se === 0) {\n return 0;\n }\n const se2sp = startEnd.dot(startP);\n let t = se2sp / se2se;\n if (clampToLine) {\n t = clamp(t, 0, 1);\n }\n return t;\n }\n /**\n * 求点与线段的最近交点\n * @param point - 二维空间点\n * @param clampToLine - 是否限制于线段内\n * @param [target=new Vector2()] - 目标保存对象\n * @returns 最近交点\n */\n closestPointToPoint(point, clampToLine, target = new Vector2()) {\n const t = this.closestPointToPointParameter(point, clampToLine);\n return this.delta(target).multiply(t).add(this.start);\n }\n /**\n * 二维线段判等\n * @param line - 二维线段\n * @returns 判等结果\n */\n equals(line) {\n return line.start.equals(this.start) && line.end.equals(this.end);\n }\n /**\n * 克隆二维线段\n * @returns 克隆结果\n */\n clone() {\n return new Line2().copyFrom(this);\n }\n /**\n * 二维线段求长度\n * @returns 长度\n */\n length() {\n return new Vector2().subtractVectors(this.end, this.start).length();\n }\n /**\n * 二维线段判断相交\n * @param other - 二维线段\n * @returns 相交判断结果\n */\n crossWithLine(other) {\n const o1 = orientation(this.start, this.end, other.start);\n const o2 = orientation(this.start, this.end, other.end);\n const o3 = orientation(other.start, other.end, this.start);\n const o4 = orientation(other.start, other.end, this.end);\n if ((o1 > 0 && o2 < 0 || o1 < 0 && o2 > 0)\n && (o3 > 0 && o4 < 0 || o3 < 0 && o4 > 0)) {\n return true;\n }\n return o1 === 0 && onSegment(this.start, this.end, other.start)\n || o2 === 0 && onSegment(this.start, this.end, other.end)\n || o3 === 0 && onSegment(other.start, other.end, this.start)\n || o4 === 0 && onSegment(other.start, other.end, this.end);\n }\n}\n","import { NumberEpsilon } from './utils';\nimport { Vector2 } from './vector2';\n/**\n * 三维向量\n */\nexport class Vector3 {\n x;\n y;\n z;\n /**\n * 三维向量的常量\n */\n static X = new Vector3(1.0, 0.0, 0.0);\n static Y = new Vector3(0.0, 1.0, 0.0);\n static Z = new Vector3(0.0, 0.0, 1.0);\n static ONE = new Vector3(1.0, 1.0, 1.0);\n static ZERO = new Vector3(0.0, 0.0, 0.0);\n /**\n * 构造函数,默认值为零向量\n * @param [x=0]\n * @param [y=0]\n * @param [z=0]\n */\n constructor(x = 0, y = 0, z = 0) {\n this.x = x;\n this.y = y;\n this.z = z;\n }\n /**\n * 设置向量\n * @param x - x 轴分量\n * @param y - y 轴分量\n * @param z - z 轴分量\n * @returns 向量\n */\n set(x, y, z) {\n this.x = x;\n this.y = y;\n this.z = z;\n return this;\n }\n /**\n * 设置零向量\n * @returns 向量\n */\n setZero() {\n this.x = 0;\n this.y = 0;\n this.z = 0;\n return this;\n }\n /**\n * 通过标量数值设置向量\n * @param num - 数值\n * @returns 向量\n */\n setFromNumber(num) {\n this.x = num;\n this.y = num;\n this.z = num;\n return this;\n }\n /**\n * 通过数组设置向量\n * @param array - 数组\n * @param [offset=0] - 起始偏移值\n * @returns 向量\n */\n setFromArray(array, offset = 0) {\n this.x = array[offset] ?? 0;\n this.y = array[offset + 1] ?? 0;\n this.z = array[offset + 2] ?? 0;\n return this;\n }\n /**\n * 拷贝向量\n * @param v - 要拷贝的对象\n * @returns 向量\n */\n copyFrom(v) {\n this.x = v.x;\n this.y = v.y;\n this.z = v.z;\n return this;\n }\n /**\n * 克隆向量\n * @returns 向量\n */\n clone() {\n return new Vector3(this.x, this.y, this.z);\n }\n /**\n * 根据下标设置向量分量\n * @param index - 下标值\n * @param value - 数字\n * @returns 向量\n */\n setElement(index, value) {\n switch (index) {\n case 0:\n this.x = value;\n break;\n case 1:\n this.y = value;\n break;\n case 2:\n this.z = value;\n break;\n default: console.error('index is out of range: ' + index);\n }\n return this;\n }\n /**\n * 根据下标获取向量分量\n * @param index - 下标\n * @returns\n */\n getElement(index) {\n switch (index) {\n case 0: return this.x;\n case 1: return this.y;\n case 2: return this.z;\n default: console.error('index is out of range: ' + index);\n }\n return 0;\n }\n /**\n * 向量相加\n * @param right - 向量 | 数字\n * @returns 相加结果\n */\n add(right) {\n if (typeof right === 'number') {\n this.x += right;\n this.y += right;\n this.z += right;\n }\n else if (right instanceof Array) {\n this.x += right[0];\n this.y += right[1];\n this.z += right[2];\n }\n else {\n this.x += right.x;\n this.y += right.y;\n this.z += right.z;\n }\n return this;\n }\n /**\n * 向量相加\n * @param left - 向量\n * @param right - 向量\n * @returns 相加结果\n */\n addVectors(left, right) {\n this.x = left.x + right.x;\n this.y = left.y + right.y;\n this.z = left.z + right.z;\n return this;\n }\n /**\n * 向量乘比例后相加\n * @param right - 向量\n * @param s - 比例\n * @returns 相加结果\n */\n addScaledVector(right, s) {\n this.x += right.x * s;\n this.y += right.y * s;\n this.z += right.z * s;\n return this;\n }\n /**\n * 向量相减\n * @param right - 向量 | 数字\n * @returns 相减\n */\n subtract(right) {\n if (typeof right === 'number') {\n this.x -= right;\n this.y -= right;\n this.z -= right;\n }\n else if (right instanceof Array) {\n this.x -= right[0];\n this.y -= right[1];\n this.z -= right[2];\n }\n else {\n this.x -= right.x;\n this.y -= right.y;\n this.z -= right.z;\n }\n return this;\n }\n /**\n * 向量相减\n * @param left - 向量\n * @param right - 向量\n * @returns 相减结果\n */\n subtractVectors(left, right) {\n this.x = left.x - right.x;\n this.y = left.y - right.y;\n this.z = left.z - right.z;\n return this;\n }\n /**\n * 向量相乘\n * @param right - 向量 | 数字\n * @returns 相乘结果\n */\n multiply(right) {\n if (typeof right === 'number') {\n this.x *= right;\n this.y *= right;\n this.z *= right;\n }\n else if (right instanceof Array) {\n this.x *= right[0];\n this.y *= right[1];\n this.z *= right[2];\n }\n else {\n this.x *= right.x;\n this.y *= right.y;\n this.z *= right.z;\n }\n return this;\n }\n /**\n * 向量相乘\n * @param left - 向量\n * @param right - 向量\n * @returns 相乘结果\n */\n multiplyVectors(left, right) {\n this.x = left.x * right.x;\n this.y = left.y * right.y;\n this.z = left.z * right.z;\n return this;\n }\n /**\n * 向量相除\n * @param right - 向量 | 数字\n * @returns 相除结果\n */\n divide(right) {\n if (typeof right === 'number') {\n this.x /= right;\n this.y /= right;\n this.z /= right;\n }\n else if (right instanceof Array) {\n this.x /= right[0];\n this.y /= right[1];\n this.z /= right[2];\n }\n else {\n this.x /= right.x;\n this.y /= right.y;\n this.z /= right.z;\n }\n return this;\n }\n /**\n * 向量缩放\n * @param v - 数字\n * @returns 缩放结果\n */\n scale(v) {\n this.x *= v;\n this.y *= v;\n this.z *= v;\n return this;\n }\n /**\n * 分量求和\n * @returns 求和结果\n */\n sum() {\n return this.x + this.y + this.z;\n }\n /**\n * 向量求最小值\n * @param v - 向量或数值\n * @returns 求值结果\n */\n min(v) {\n if (typeof v === 'number') {\n this.x = Math.min(this.x, v);\n this.y = Math.min(this.y, v);\n this.z = Math.min(this.z, v);\n }\n else {\n this.x = Math.min(this.x, v.x);\n this.y = Math.min(this.y, v.y);\n this.z = Math.min(this.z, v.z);\n }\n return this;\n }\n /**\n * 向量求最大值\n * @param v - 向量或数值\n * @returns 求值结果\n */\n max(v) {\n if (typeof v === 'number') {\n this.x = Math.max(this.x, v);\n this.y = Math.max(this.y, v);\n this.z = Math.max(this.z, v);\n }\n else {\n this.x = Math.max(this.x, v.x);\n this.y = Math.max(this.y, v.y);\n this.z = Math.max(this.z, v.z);\n }\n return this;\n }\n /**\n * 向量阈值约束\n * @param min - 向量\n * @param max - 向量\n * @returns 求值结果\n */\n clamp(min, max) {\n return this.max(min).min(max);\n }\n /**\n * 向量向下取整\n * @returns 取整结果\n */\n floor() {\n this.x = Math.floor(this.x);\n this.y = Math.floor(this.y);\n this.z = Math.floor(this.z);\n return this;\n }\n /**\n * 向量向上取整\n * @returns 取整结果\n */\n ceil() {\n this.x = Math.ceil(this.x);\n this.y = Math.ceil(this.y);\n this.z = Math.ceil(this.z);\n return this;\n }\n /**\n * 向量四舍五入\n * @returns 计算结果\n */\n round() {\n this.x = Math.round(this.x);\n this.y = Math.round(this.y);\n this.z = Math.round(this.z);\n return this;\n }\n /**\n * 向量取绝对值\n * @returns 向量\n */\n abs() {\n this.x = Math.abs(this.x);\n this.y = Math.abs(this.y);\n this.z = Math.abs(this.z);\n return this;\n }\n /**\n * 向量取反\n * @returns 向量\n */\n negate() {\n this.x = -this.x;\n this.y = -this.y;\n this.z = -this.z;\n return this;\n }\n /**\n * 向量长度\n * @returns 长度\n */\n length() {\n return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);\n }\n /**\n * 向量长度平方\n * @returns 长度平方\n */\n lengthSquared() {\n return this.x * this.x + this.y * this.y + this.z * this.z;\n }\n /**\n * 向量归一化\n * @returns 向量\n */\n normalize() {\n return this.divide(this.length() || 1);\n }\n /**\n * 设置向量长度\n * @param length - 长度\n * @returns 向量\n */\n setLength(length) {\n return this.normalize().multiply(length);\n }\n /**\n * 向量间求线性插值\n * @param other - 向量\n * @param alpha - 插值比例\n * @returns 插值结果\n */\n lerp(other, alpha) {\n this.x += (other.x - this.x) * alpha;\n this.y += (other.y - this.y) * alpha;\n this.z += (other.z - this.z) * alpha;\n return this;\n }\n /**\n * 向量间求线性插值\n * @param v1 - 第一个向量\n * @param v2 - 第二个向量\n * @param alpha - 插值比例\n * @returns 求值结果\n */\n lerpVectors(v1, v2, alpha) {\n this.x = v1.x + (v2.x - v1.x) * alpha;\n this.y = v1.y + (v2.y - v1.y) * alpha;\n this.z = v1.z + (v2.z - v1.z) * alpha;\n return this;\n }\n /**\n * 向量求点积,点积为零表示两向量垂直\n * @param v - 向量\n * @returns 点积结果\n */\n dot(v) {\n return this.x * v.x + this.y * v.y + this.z * v.z;\n }\n /**\n * 向量求叉积\n * @param right - 向量\n * @returns 叉积结果\n */\n cross(right) {\n return this.crossVectors(this, right);\n }\n /**\n * 向量(a 与 b)求叉积\n * @param left - 向量\n * @param right - 向量\n * @returns 叉积结果\n */\n crossVectors(left, right) {\n const { x: ax, y: ay, z: az } = left;\n const { x: bx, y: by, z: bz } = right;\n this.x = ay * bz - az * by;\n this.y = az * bx - ax * bz;\n this.z = ax * by - ay * bx;\n return this;\n }\n /**\n * 向量反射\n * @param normal - 法线\n * @returns 反射结果\n */\n reflect(normal) {\n // reflect incident vector off plane orthogonal to normal\n // normal is assumed to have unit length\n return this.subtract(normal.clone().multiply(2 * this.dot(normal)));\n }\n /**\n * 计算向量距离\n * @param v - 向量\n * @returns 距离\n */\n distance(v) {\n return Math.sqrt(this.distanceSquared(v));\n }\n /**\n * 计算向量距离平方\n * @param v - 向量\n * @returns 距离平方\n */\n distanceSquared(v) {\n const dx = this.x - v.x;\n const dy = this.y - v.y;\n const dz = this.z - v.z;\n return dx * dx + dy * dy + dz * dz;\n }\n /**\n * 向量判等\n * @param v - 向量\n * @returns 判等结果\n */\n equals(v) {\n return v.x === this.x && v.y === this.y && v.z === this.z;\n }\n /**\n * 是否零向量\n * @returns 是否零向量\n */\n isZero() {\n const eps = NumberEpsilon;\n const { x, y, z } = this;\n return Math.abs(x) <= eps && Math.abs(y) <= eps && Math.abs(z) <= eps;\n }\n /**\n * 向量转数组\n * @param array - 目标保存对象\n * @returns 数组\n */\n toArray() {\n return [this.x, this.y, this.z];\n }\n toVector2() {\n return new Vector2(this.x, this.y);\n }\n fill(array, offset = 0) {\n array[offset] = this.x;\n array[offset + 1] = this.y;\n array[offset + 2] = this.z;\n }\n /**\n * 获取随机向量\n * @returns\n */\n random() {\n this.x = Math.random();\n this.y = Math.random();\n this.z = Math.random();\n return this;\n }\n /**\n * 用欧拉角旋转向量\n * @param euler - 欧拉角\n * @param [out] - 输出结果,如果没有就覆盖当前向量值\n * @returns 旋转结果\n */\n applyEuler(euler, out) {\n return euler.rotateVector3(this, out);\n }\n /**\n * 用四元数旋转向量\n * @param q - 四元数\n * @param [out] - 输出结果,如果没有就覆盖当前向量值\n * @returns 旋转结果\n */\n applyQuaternion(q, out) {\n return q.rotateVector3(this, out);\n }\n /**\n * 用矩阵变换点\n * @param m - 变换矩阵\n * @param [out] - 输出结果,如果没有就覆盖当前向量值\n * @returns 结果点\n */\n applyMatrix(m, out) {\n return m.transformPoint(this, out);\n }\n /**\n * 用法向量矩阵变换法向量\n * @param m - 法向量矩阵\n * @param [out] - 输出结果,如果没有就覆盖当前向量值\n * @returns 向量\n */\n applyNormalMatrix(m, out) {\n return m.transformNormal(this, out);\n }\n /**\n * 用投影矩阵变换点\n * @param m - 投影矩阵\n * @param [out] - 输出结果,如果没有就覆盖当前向量值\n * @returns 结果点\n */\n applyProjectionMatrix(m, out) {\n return m.projectPoint(this, out);\n }\n /**\n * 从四维矩阵提取平移分量\n * @param m - 四维矩阵\n * @returns 向量\n */\n setFromMatrixPosition(m) {\n const e = m.elements;\n this.x = e[12];\n this.y = e[13];\n this.z = e[14];\n return this;\n }\n /**\n * 从四维矩阵提取指定列的三维分量\n * @param m - 四维矩阵\n * @param index - 列下标\n * @returns 向量\n */\n setFromMatrixColumn(m, index) {\n return this.setFromArray(m.elements, index * 4);\n }\n /**\n * 通过标量数值创建向量\n * @param num - 数值\n * @returns 向量\n */\n static fromNumber(num) {\n return new Vector3().setFromNumber(num);\n }\n /**\n * 通过数组创建向量\n * @param array - 数组\n * @param [offset=0] - 起始偏移值\n * @returns 向量\n */\n static fromArray(array, offset = 0) {\n return new Vector3().setFromArray(array, offset);\n }\n}\n","import { Vector3 } from '../core/vector3';\n/**\n * 三维线段\n */\nexport class Line3 {\n static tempVec0 = new Vector3();\n static tempVec1 = new Vector3();\n start;\n end;\n /**\n * 构造函数\n * @param [start=new Vector3()] - 线段起点,默认值为(0, 0, 0)\n * @param [end=new Vector3()] - 线段终点,默认值为(0, 0, 0)\n */\n constructor(start = Vector3.ZERO, end = Vector3.ZERO) {\n this.start = start.clone();\n this.end = end.clone();\n }\n /**\n * 方向向量(终点减起点)\n * @param [target] - 结果保存对象\n * @returns 方向向量\n */\n delta(target) {\n const result = target ?? new Vector3();\n return result.subtractVectors(this.end, this.start);\n }\n /**\n * 计算点到线段的最近点参数\n * @param point - 空间点\n * @param clampToLine - 是否将参数限制在 [0, 1] 范围内\n * @returns 参数 t,0 表示起点,1 表示终点\n */\n closestPointToPointParameter(point, clampToLine) {\n const startP = Line3.tempVec0.subtractVectors(point, this.start);\n const startEnd = Line3.tempVec1.subtractVectors(this.end, this.start);\n const startEnd2 = startEnd.dot(startEnd);\n const dotProduct = startEnd.dot(startP);\n let t = startEnd2 !== 0 ? dotProduct / startEnd2 : 0;\n if (clampToLine) {\n t = Math.max(0, Math.min(1, t));\n }\n return t;\n }\n /**\n * 计算点到线段的最近点\n * @param point - 空间点\n * @param clampToLine - 是否将结果限制在线段上\n * @param [target] - 结果保存对象\n * @returns 最近点\n */\n closestPointToPoint(point, clampToLine, target) {\n const t = this.closestPointToPointParameter(point, clampToLine);\n return this.delta(target).multiply(t).add(this.start);\n }\n}\n","import { Vector3 } from '../core/vector3';\n/**\n *\n */\nexport class Plane {\n distance;\n normal;\n constructor(distance = 0, normal = Vector3.Z) {\n this.distance = distance;\n this.normal = normal.clone();\n this.set(distance, normal);\n }\n set(distance, normal) {\n this.normal.copyFrom(normal);\n const length = this.normal.length();\n if (length === 0) {\n this.normal.set(0, 0, 1);\n this.distance = distance;\n return this;\n }\n this.distance = distance / length;\n this.normal.normalize();\n return this;\n }\n copyFrom(target) {\n this.distance = target.distance;\n this.normal.copyFrom(target.normal);\n return this;\n }\n static setFromNormalAndCoplanarPoint(point, normal) {\n const distance = -point.dot(normal);\n const plane = new Plane(distance, normal);\n return plane;\n }\n setFromNormalAndCoplanarPoint(point, normal) {\n this.normal.copyFrom(normal);\n this.distance = -point.dot(this.normal);\n return this;\n }\n clone() {\n const plane = new Plane(this.distance, this.normal.clone());\n return plane;\n }\n distanceToPoint(point) {\n return this.normal.dot(point) + this.distance;\n }\n}\n","export function roundNumber(number, precision, method = Math.round) {\n // 已经是整数,则无需处理\n if (Number.isInteger(number)) {\n return number;\n }\n const decimal = Math.pow(10, precision);\n return method(number * decimal) / decimal;\n}\n","export var IntervalType;\n(function (IntervalType) {\n IntervalType[IntervalType[\"OPEN\"] = 0] = \"OPEN\";\n IntervalType[IntervalType[\"CLOSE\"] = 1] = \"CLOSE\";\n IntervalType[IntervalType[\"LEFT_CLOSE\"] = 2] = \"LEFT_CLOSE\";\n IntervalType[IntervalType[\"RIGHT_CLOSE\"] = 3] = \"RIGHT_CLOSE\";\n})(IntervalType || (IntervalType = {}));\nexport function isRangeIn(num, min, max, intervalType = IntervalType.OPEN) {\n switch (intervalType) {\n case IntervalType.OPEN:\n return num > min && num < max;\n case IntervalType.CLOSE:\n return num >= min && num <= max;\n case IntervalType.LEFT_CLOSE:\n return num >= min && num < max;\n case IntervalType.RIGHT_CLOSE:\n return num > min && num <= max;\n }\n}\n","import { Box2 } from '@galacean/effects-math/es/extension/index';\nimport { Matrix3, Vector2, Vector3 } from './core';\n\n/**\n * 二维几何工具函数:极角、向量夹角与包围盒归一化/还原。\n */\n\nconst UNIT_BOX = new Box2(new Vector2(), new Vector2(1, 1));\nconst MATRIX_EPSILON = 1e-8;\n\n/**\n * 读取轴对齐包围盒的四个角点。\n * @param box 轴对齐包围盒\n * @returns 按顺时针排列的四个新角点\n */\nexport function getBoxCorners (box: Box2): Vector2[] {\n return [\n box.min.clone(),\n new Vector2(box.max.x, box.min.y),\n box.max.clone(),\n new Vector2(box.min.x, box.max.y),\n ];\n}\n\n/** 从 Box2 的视图角点建立归一化 Box2 到视图坐标的二维仿射变换。 */\nexport function getBoxTransform (points: Vector2[]): Matrix3 | undefined {\n if (points.length !== 4) {\n return undefined;\n }\n\n const [leftTop, rightTop, , leftBottom] = points;\n const transform = new Matrix3().setFromRowMajorData(\n rightTop.x - leftTop.x,\n leftBottom.x - leftTop.x,\n leftTop.x,\n rightTop.y - leftTop.y,\n leftBottom.y - leftTop.y,\n leftTop.y,\n 0,\n 0,\n 1,\n );\n\n return Math.abs(transform.determinant()) <= MATRIX_EPSILON ? undefined : transform;\n}\n\n/** 从一个视图 Box2 建立无旋转变换。 */\nexport function getBoxTransformFromBox (box: Box2): Matrix3 | undefined {\n if (box.isEmpty()) {\n return undefined;\n }\n const size = box.getSize();\n\n return new Matrix3().setFromRowMajorData(\n size.x, 0, box.min.x,\n 0, size.y, box.min.y,\n 0, 0, 1,\n );\n}\n\n/** 使用二维变换映射一个 Box2 局部点。 */\nexport function transformBoxPoint (transform: Matrix3, point: Vector2): Vector2 {\n const result = transform.transformPoint(new Vector3(point.x, point.y, 1));\n\n return new Vector2(result.x, result.y);\n}\n\n/** 将视图点逆变换到 Box2 局部坐标。 */\nexport function inverseTransformBoxPoint (transform: Matrix3, point: Vector2): Vector2 {\n return transformBoxPoint(transform.clone().invert(), point);\n}\n\n/** 临时计算 Box2 变换后的四个点。 */\nexport function getTransformedBoxCorners (transform: Matrix3, box: Box2 = UNIT_BOX): Vector2[] {\n return getBoxCorners(box).map(point => transformBoxPoint(transform, point));\n}\n\n/** 计算 Box2 变换后的轴对齐范围。 */\nexport function getTransformedBox (transform: Matrix3, box: Box2 = UNIT_BOX): Box2 {\n return setBoxFromPoints(new Box2(), getTransformedBoxCorners(transform, box));\n}\n\n/**\n * 判断一个变换后的 Box2 是否与轴对齐 Box2 相交。\n *\n * 使用分离轴判定而不是仅比较轴对齐包围盒,避免旋转元素在实际四边形未接触选区时被误选。\n * 边界接触也视为相交。\n * @param transform Box2 到视图坐标的变换\n * @param target 视图坐标下的轴对齐 Box2\n * @param box 待变换的 Box2\n * @returns 两个区域是否相交\n */\nexport function transformedBoxIntersectsBox (\n transform: Matrix3,\n target: Box2,\n box: Box2 = UNIT_BOX,\n): boolean {\n if (box.isEmpty() || target.isEmpty()) {\n return false;\n }\n\n const transformedCorners = getTransformedBoxCorners(transform, box);\n const targetCorners = getBoxCorners(target);\n const axes = [transformedCorners, targetCorners].reduce<Vector2[]>(\n (result, corners) => result.concat(corners.map((point, index) => {\n const next = corners[(index + 1) % corners.length];\n\n return new Vector2(-(next.y - point.y), next.x - point.x);\n })),\n [],\n );\n\n return axes.every(axis => {\n const transformedProjection = transformedCorners.map(point => point.dot(axis));\n const targetProjection = targetCorners.map(point => point.dot(axis));\n\n return Math.max(...transformedProjection) >= Math.min(...targetProjection)\n && Math.max(...targetProjection) >= Math.min(...transformedProjection);\n });\n}\n\n/** 通过逆变换判断视图点是否位于 Box2 内。 */\nexport function transformedBoxContainsPoint (transform: Matrix3, point: Vector2, box: Box2 = UNIT_BOX): boolean {\n return box.containsPoint(inverseTransformBoxPoint(transform, point));\n}\n\n/**\n * 绕指定中心旋转 Box2 四角。\n * @param points 原始四角\n * @param angle 旋转弧度\n * @param center 旋转中心\n * @returns 旋转后的四角\n */\nfunction rotateBoxCorners (points: Vector2[], angle: number, center: Vector2): Vector2[] {\n return points.map(point => point.clone().rotateAround(center, angle));\n}\n\n/**\n * 使用点集更新 Box2 的轴对齐范围。\n * @param box 目标包围盒\n * @param points 点集\n * @returns 目标包围盒\n */\nexport function setBoxFromPoints (box: Box2, points: Vector2[]): Box2 {\n if (points.length === 0) {\n return box.makeEmpty();\n }\n\n const min = points[0].clone();\n const max = points[0].clone();\n\n points.forEach(point => {\n min.min(point);\n max.max(point);\n });\n\n return box.set(min, max);\n}\n\n/**\n * 以指定锚点缩放 Box2。\n * @param box 目标包围盒\n * @param scalar 缩放比例\n * @param anchor 缩放中心,默认使用包围盒中心\n * @returns 目标包围盒\n */\nexport function scaleBox (box: Box2, scalar: number | Vector2, anchor: Vector2 = box.getCenter()): Box2 {\n if (box.isEmpty()) {\n return box;\n }\n const resultScalar = typeof scalar === 'number'\n ? new Vector2(scalar, scalar)\n : new Vector2(scalar.x, scalar.y);\n\n return setBoxFromPoints(box, [box.min, box.max].map(point => (\n point.clone().subtract(anchor).multiply(resultScalar).add(anchor)\n )));\n}\n\n/**\n * 计算 Box2 绕指定中心旋转后的轴对齐范围。\n * @param box 目标包围盒\n * @param angle 旋转角度(弧度)\n * @param center 旋转中心,默认使用包围盒中心\n * @returns 目标包围盒\n */\nexport function rotateBox (box: Box2, angle: number, center: Vector2 = box.getCenter()): Box2 {\n if (box.isEmpty()) {\n return box;\n }\n\n return setBoxFromPoints(box, rotateBoxCorners(getBoxCorners(box), angle, center));\n}\n\n/**\n * 计算二维向量相对原点的极角(弧度)。\n * @param vector 二维向量\n * @returns 弧度值\n */\nexport function getVector2Angle (vector: Vector2) {\n const angle = Math.atan2(-vector.y, -vector.x) + Math.PI;\n\n return angle;\n}\n\n/**\n * 计算由两个二维向量所成夹角(带方向,弧度)\n * @param vector1 起始向量\n * @param vector2 目标向量\n * @returns 带符号夹角弧度值\n */\nexport function getAngleByVectors (vector1: Vector2, vector2: Vector2) {\n const cosValue = Math.min(\n Math.max(\n vector1.dot(vector2) / vector1.length() / vector2.length(),\n -1,\n ),\n 1,\n );\n let angle = Math.acos(cosValue);\n\n angle = vector1.x * vector2.y - vector1.y * vector2.x > 0 ? angle : -angle;\n\n return angle;\n}\n\n/**\n * 将归一化包围盒按原包围盒范围还原为实际包围盒\n * @param origin 原始范围包围盒\n * @param normalize 归一化包围盒\n * @returns 还原后的实际包围盒\n */\nexport function getBoxByNormalizeBox (origin: Box2, normalize: Box2) {\n const result = new Box2();\n const { min: originMin, max: originMax } = origin;\n const { min: normalizeMin, max: normalizeMax } = normalize;\n const min = originMin.clone().add(new Vector2().subtractVectors(originMax, originMin).multiply(normalizeMin));\n const max = originMin.clone().add(new Vector2().subtractVectors(originMax, originMin).multiply(normalizeMax));\n\n result.set(min, max);\n\n return result;\n}\n\n/**\n * 将当前包围盒在原始范围内的位置归一化为 0~1 包围盒\n * @param origin 原始范围包围盒\n * @param current 当前包围盒\n * @returns 归一化包围盒\n */\nexport function getNormalizeBoxByBoxes (origin: Box2, current: Box2) {\n const result = new Box2();\n const { min: originMin, max: originMax } = origin;\n const { min: currentMin, max: currentMax } = current;\n const min = new Vector2().subtractVectors(currentMin, originMin).divide(new Vector2().subtractVectors(originMax, originMin));\n const max = new Vector2().subtractVectors(currentMax, originMin).divide(new Vector2().subtractVectors(originMax, originMin));\n\n result.set(min, max);\n\n return result;\n}\n","import { type Plane } from '@galacean/effects-math/es/extension/index';\nimport { type Matrix4, Ray, type Vector2, Vector3 } from './core';\n\n/**\n * 射线碰撞相机参数\n */\nexport type RayCasterCamera = {\n /**\n * 位置\n */\n position: Vector3,\n /**\n * 视图投影逆矩阵\n */\n inverseViewProjectMatrix: Matrix4,\n};\n\n/**\n * 射线碰撞结果\n */\nexport type RayCastResult = {\n /**\n * 相交点\n */\n point: Vector3,\n /**\n * 相交距离\n */\n distance: number,\n /**\n * 相交构件ID\n */\n id?: string,\n};\n\n/**\n * 射线投射器,由屏幕坐标与相机参数构建射线并进行平面求交。\n */\nexport class RayCaster {\n ray: Ray;\n\n /**\n * 构造射线投射器。\n * @param ray 初始射线,默认为新建射线\n */\n constructor (\n ray: Ray = new Ray(),\n ) {\n this.ray = ray.clone();\n }\n\n /**\n * 由屏幕坐标与相机参数构建投射射线。\n * @param coords 屏幕坐标(归一化)\n * @param camera 相机参数\n * @returns 当前实例(链式调用)\n */\n setFromCamera (coords: Vector2, camera: RayCasterCamera) {\n const origin = camera.position;\n const direction = new Vector3(coords.x, coords.y, 0.5).applyProjectionMatrix(camera.inverseViewProjectMatrix).subtract(origin).normalize();\n\n this.ray.set(origin, direction);\n\n return this;\n }\n\n /**\n * 将当前射线与平面求交。\n * @param plane 目标平面\n * @returns 相交结果,不相交时返回 undefined\n */\n rayCastPlane (plane: Plane): RayCastResult | undefined {\n const distance = this.ray.distanceToPlane(plane);\n\n if (distance === null) {\n return undefined;\n }\n\n return {\n distance,\n point: new Vector3().copyFrom(this.ray.at(distance)),\n };\n }\n}\n","/**\n * 返回数组中绝对值最大元素的索引\n * @param numbers 数值数组\n * @returns 绝对值最大元素的索引\n */\nexport function getAbsMaxIndex (numbers: number[]) {\n let resultIndex = 0;\n let max: number;\n\n numbers.forEach((number, index) => {\n if (index === 0) {\n max = Math.abs(number);\n } else {\n const absNumber = Math.abs(number);\n\n if (max < absNumber) {\n max = absNumber;\n resultIndex = index;\n }\n }\n });\n\n return resultIndex;\n}\n","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n\n if (\"value\" in descriptor) descriptor.writable = true;\n\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\nfunction _create_class(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n\n return Constructor;\n}\nexport { _create_class as _ };\n","/** 视图坐标点。 */\nexport type ViewPoint = {\n /** X 坐标。 */\n x: number,\n /** Y 坐标。 */\n y: number,\n};\n\n/** 文本插入点计算所需的 DOM 布局样式。 */\nexport type TextCaretLayout = {\n /** 文本框左坐标。 */\n left: number,\n /** 文本框上坐标。 */\n top: number,\n /** 文本框宽度。 */\n width: number,\n /** 文本框高度。 */\n height: number,\n /** 文本框旋转弧度。 */\n rotation: number,\n /** 文本内容。 */\n text: string,\n /** 字体。 */\n fontFamily: string,\n /** 字号。 */\n fontSize: number,\n /** 字重。 */\n fontWeight: string | number,\n /** 字间距。 */\n letterSpacing: number,\n /** 行高。 */\n lineHeight: number,\n /** 文本对齐方式。 */\n textAlign: 'left' | 'center' | 'right',\n /** 是否保持单词完整换行。 */\n keepWordIntact: boolean,\n};\n\n/** 单个文本插入点的局部位置。 */\ntype CaretPosition = {\n /** 文本偏移。 */\n index: number,\n /** 局部 X 坐标。 */\n x: number,\n /** 局部 Y 坐标。 */\n y: number,\n /** 插入点高度。 */\n height: number,\n};\n\n/** 已测量的文本框和插入点位置。 */\ntype ResolvedLayout = Pick<TextCaretLayout, 'left' | 'top' | 'width' | 'height' | 'rotation'> & {\n /** 全部文本插入点。 */\n caretPositions: CaretPosition[],\n};\n\n/** 使用浏览器文本布局将视图坐标映射为文本插入点。 */\nexport class TextCaretMapper {\n private layout: ResolvedLayout | undefined;\n private layoutKey = '';\n private caretPositions: CaretPosition[] = [];\n\n /** 清除当前布局。 */\n reset (): void {\n this.layout = undefined;\n }\n\n /**\n * 同步文本框样式并按需重新测量插入点。\n * @param style 文本框布局样式\n */\n sync (style: TextCaretLayout): void {\n const key = JSON.stringify([\n style.text,\n style.width,\n style.fontFamily,\n style.fontSize,\n style.fontWeight,\n style.letterSpacing,\n style.lineHeight,\n style.textAlign,\n style.keepWordIntact,\n ]);\n\n if (key !== this.layoutKey) {\n this.layoutKey = key;\n this.caretPositions = this.measureCaretPositions(style);\n }\n this.layout = {\n left: style.left,\n top: style.top,\n width: style.width,\n height: style.height,\n rotation: style.rotation,\n caretPositions: this.caretPositions,\n };\n }\n\n /**\n * 查找最接近视图坐标的文本插入点。\n * @param point 视图坐标\n * @returns 文本偏移;布局尚未同步时返回 undefined\n */\n resolve (point: ViewPoint): number | undefined {\n const layout = this.layout;\n\n if (!layout || layout.caretPositions.length === 0) {\n return undefined;\n }\n\n const dx = point.x - layout.left;\n const dy = point.y - layout.top;\n const cos = Math.cos(layout.rotation);\n const sin = Math.sin(layout.rotation);\n const localX = dx * cos + dy * sin;\n const localY = -dx * sin + dy * cos;\n\n let closestLineDistance = Number.POSITIVE_INFINITY;\n\n for (const caret of layout.caretPositions) {\n closestLineDistance = Math.min(\n closestLineDistance,\n Math.abs(localY - (caret.y + caret.height / 2)),\n );\n }\n\n let closest = layout.caretPositions[0];\n let closestDistance = Number.POSITIVE_INFINITY;\n\n for (const caret of layout.caretPositions) {\n const lineDistance = Math.abs(localY - (caret.y + caret.height / 2));\n\n if (lineDistance > closestLineDistance + 1) {\n continue;\n }\n const distance = Math.abs(localX - caret.x);\n\n if (distance < closestDistance) {\n closest = caret;\n closestDistance = distance;\n }\n }\n\n return closest.index;\n }\n\n /**\n * 使用离屏 DOM 测量全部文本插入点。\n * @param style 文本框布局样式\n * @returns 插入点位置列表\n */\n private measureCaretPositions (style: TextCaretLayout): CaretPosition[] {\n // 1. 创建与画布文本样式一致的离屏镜像节点。\n const mirror = document.createElement('div');\n\n Object.assign(mirror.style, {\n position: 'fixed',\n left: '-10000px',\n top: '0',\n visibility: 'hidden',\n pointerEvents: 'none',\n boxSizing: 'border-box',\n width: `${style.width}px`,\n margin: '0',\n padding: '0',\n border: '0',\n whiteSpace: 'pre-wrap',\n overflowWrap: 'break-word',\n wordBreak: style.keepWordIntact ? 'normal' : 'break-all',\n fontFamily: style.fontFamily,\n fontSize: `${style.fontSize}px`,\n fontWeight: `${style.fontWeight}`,\n letterSpacing: `${style.letterSpacing}px`,\n lineHeight: `${style.lineHeight}px`,\n textAlign: style.textAlign,\n fontVariantLigatures: 'none',\n fontKerning: 'none',\n });\n const textNode = document.createTextNode(style.text || '\\u200b');\n\n mirror.appendChild(textNode);\n document.body.appendChild(mirror);\n\n // 2. 逐个文本偏移读取浏览器排版位置。\n const positions: CaretPosition[] = [];\n const range = document.createRange();\n const mirrorRect = mirror.getBoundingClientRect();\n\n for (let index = 0; index <= style.text.length; index++) {\n range.setStart(textNode, index);\n range.collapse(true);\n const rect = range.getBoundingClientRect();\n\n positions.push({\n index,\n x: rect.left - mirrorRect.left,\n y: rect.top - mirrorRect.top,\n height: rect.height,\n });\n }\n // 3. 移除临时节点并返回测量结果。\n mirror.remove();\n\n return positions;\n }\n}\n","import { EventEmitter, spec, TextComponent, type VFXItem } from '@galacean/effects';\nimport type { Box2 } from '@galacean/effects-math/es/extension/index';\nimport type { GizmoOwner } from '../gizmo-owner';\nimport { type Matrix3, getTransformedBoxCorners } from '../math';\nimport { TextCaretMapper, type TextCaretLayout, type ViewPoint } from './text-caret-mapper';\n\n/** 文本编辑进入后选中全文或仅聚焦输入框。 */\nexport type TextEditActivation = 'select' | 'focus';\n\n/** 文本编辑投影结果。 */\nexport type TextResult = TextValidResult | TextEmptyResult;\n\n/** 有效文本编辑投影。 */\nexport type TextValidResult = {\n /** 结果类型。 */\n type: 'valid',\n /** 文本视图包围盒。 */\n box: Box2,\n /** 文本局部 Box2 到视图的变换。 */\n transform: Matrix3,\n};\n\n/** 空文本编辑投影。 */\nexport type TextEmptyResult = {\n /** 结果类型。 */\n type: 'empty',\n};\n\n/** 文本 Gizmo 的交互状态。 */\nexport type TextInteractionParam = {\n /** 当前交互类型。 */\n type: 'none' | 'edit',\n /** 文本框激活方式。 */\n textareaType?: TextEditActivation,\n};\n\n/** 文本输入事件参数。 */\nexport type TextInputPayload = {\n /** 文本元素 ID。 */\n itemId: string,\n /** 输入后的文本。 */\n text: string,\n /** 当前字体。 */\n fontFamily: string,\n};\n\n/** 文本编辑会话事件参数。 */\ntype TextEditSessionEvents = {\n /** 文本输入事件。 */\n textInput: [TextInputPayload],\n};\n\n/** 指针拖拽选择文本的状态。 */\ntype PointerSelection = {\n /** 选择起点。 */\n anchor: ViewPoint,\n /** 选择终点。 */\n focus: ViewPoint,\n /** 起点对应的文本偏移。 */\n anchorIndex?: number,\n /** 是否仍在拖拽。 */\n active: boolean,\n};\n\nconst TEXT_AREA_CLASS_NAME = 'text-gizmo-custom-style';\nconst POINTER_SELECTION_PREVIEW_CLASS_NAME = 'text-gizmo-pointer-selection-preview';\nconst TEXT_SELECTION_BACKGROUND_COLOR = 'rgba(59, 130, 246, 0.35)';\n\nconst textareaDefaultCssClass = `\n word-break: normal;\n position: absolute;\n z-index: 3;\n border: none;\n margin: 0;\n padding: 0;\n outline: none !important;\n overflow: hidden;\n resize: none;\n display: none;\n background: transparent;\n opacity: .8;\n cursor: text;\n -webkit-user-drag: none;\n color: transparent;\n caret-color: #000000;\n -webkit-text-fill-color: transparent;\n text-fill-color: transparent;\n /* canvas 按单字符 measureText+fillText 排版(无 kerning、无 ligature,含 ff/fi/fl 等 f 连字);\n DOM 默认会施加 kerning 与 f 连字 → 字序列比 canvas 窄 → 长行累积往左偏(尤其 f)。关闭二者以横向同源。 */\n font-variant-ligatures: none;\n font-kerning: none;\n`;\n\nconst pointerSelectionPreviewCssClass = `\n position: absolute;\n z-index: 2;\n box-sizing: border-box;\n border: none;\n margin: 0;\n padding: 0;\n overflow: hidden;\n display: none;\n pointer-events: none;\n opacity: .8;\n color: transparent;\n -webkit-text-fill-color: transparent;\n font-variant-ligatures: none;\n font-kerning: none;\n`;\n\n/**\n * 为元素添加一次性 CSS 类和样式规则。\n * @param element 目标元素\n * @param className CSS 类名\n * @param cssText CSS 规则内容\n * @returns 移除类名和样式规则的函数\n */\nfunction applyCSSClass (element: HTMLElement, className: string, cssText: string): () => void {\n const style = document.createElement('style');\n\n style.textContent = `\n .${className} {\n ${cssText.replace(/&/g, `.${className}`)}\n }\n `;\n document.head.appendChild(style);\n element.classList.add(className);\n\n return () => {\n element.classList.remove(className);\n style.remove();\n };\n}\n\n/**\n * 添加独立样式规则。\n * @param cssText 完整 CSS 规则\n * @returns 移除样式规则的函数\n */\nfunction applyCSSRule (cssText: string): () => void {\n const style = document.createElement('style');\n\n style.textContent = cssText;\n document.head.appendChild(style);\n\n return () => {\n style.remove();\n };\n}\n\n/** 管理行内文本编辑的 textarea、选区和画布投影。 */\nexport class TextEditSession extends EventEmitter<TextEditSessionEvents> {\n /** 文本编辑使用的 DOM 输入框。 */\n readonly textAreaElement: HTMLTextAreaElement;\n\n /** 当前文本交互状态。 */\n interactionParam: TextInteractionParam = { type: 'none' };\n\n private readonly owner: GizmoOwner;\n private _editingItem: VFXItem | undefined;\n private readonly attachedProjections = new Set<object>();\n private disposed = false;\n private selectionStart: number | null = null;\n private selectionEnd: number | null = null;\n private pointerSelection: PointerSelection | undefined;\n private readonly caretMapper = new TextCaretMapper();\n /** 画布接管拖选期间使用的无焦点选区预览。 */\n private readonly pointerSelectionPreviewElement: HTMLDivElement;\n private readonly removeTextAreaStyle: () => void;\n private readonly removeTextSelectionStyle: () => void;\n private readonly removePointerSelectionPreviewStyle: () => void;\n\n /**\n * 将 DOM 输入同步到文本组件并发出输入事件。\n * @param event DOM 输入事件。\n */\n private readonly handleInput = (event: Event): void => {\n const editingItem = this._editingItem;\n const textComponent = editingItem?.getComponent(TextComponent);\n const composition = this.owner.getEngine()?.sceneServer.compositions[0];\n\n if (!editingItem || !textComponent || !composition) {\n return;\n }\n\n const text = (event.target as HTMLTextAreaElement).value;\n const fontFamily = textComponent.textStyle?.fontFamily ?? '';\n\n textComponent.setText(text);\n const lineCount = textComponent.getLineCount(text);\n const textHeight = Math.ceil(textComponent.textLayout.lineHeight * lineCount);\n\n textComponent.setTextHeight(textHeight);\n composition.gotoAndStop(composition.time);\n\n this.emit('textInput', {\n itemId: editingItem.getInstanceId(),\n text,\n fontFamily,\n });\n };\n\n /**\n * 隔离输入框键盘事件。\n * @param event DOM 键盘事件。\n */\n private readonly handleKeyDown = (event: KeyboardEvent): void => {\n if (event.code.toLocaleLowerCase() === 'escape') {\n event.preventDefault();\n\n return;\n }\n event.stopPropagation();\n };\n\n /**\n * 在新的指针选择开始前折叠原 DOM 选区。\n * @param event DOM 鼠标事件。\n */\n private readonly handleMouseDown = (event: MouseEvent): void => {\n if (\n event.button === 0\n && this.textAreaElement.selectionStart !== this.textAreaElement.selectionEnd\n ) {\n this.textAreaElement.setSelectionRange(\n this.textAreaElement.selectionStart,\n this.textAreaElement.selectionStart,\n );\n }\n };\n\n /**\n * 阻止浏览器原生文本拖放。\n * @param event DOM 拖拽事件。\n */\n private readonly handleDragStart = (event: DragEvent): void => {\n event.preventDefault();\n };\n\n /**\n * @param owner Gizmo 宿主\n */\n constructor (owner: GizmoOwner) {\n super();\n this.owner = owner;\n this.textAreaElement = document.createElement('textarea');\n this.pointerSelectionPreviewElement = document.createElement('div');\n owner.getEngine()?.canvas.parentElement?.appendChild(this.textAreaElement);\n owner.getEngine()?.canvas.parentElement?.appendChild(this.pointerSelectionPreviewElement);\n this.removeTextAreaStyle = applyCSSClass(\n this.textAreaElement,\n TEXT_AREA_CLASS_NAME,\n textareaDefaultCssClass,\n );\n this.removeTextSelectionStyle = applyCSSRule(`\n .${TEXT_AREA_CLASS_NAME}::selection {\n background-color: ${TEXT_SELECTION_BACKGROUND_COLOR};\n color: transparent;\n -webkit-text-fill-color: transparent;\n }\n `);\n this.removePointerSelectionPreviewStyle = applyCSSClass(\n this.pointerSelectionPreviewElement,\n POINTER_SELECTION_PREVIEW_CLASS_NAME,\n pointerSelectionPreviewCssClass,\n );\n this.textAreaElement.addEventListener('keydown', this.handleKeyDown);\n this.textAreaElement.addEventListener('mousedown', this.handleMouseDown);\n this.textAreaElement.addEventListener('dragstart', this.handleDragStart);\n }\n\n /** 当前正在编辑的文本元素。 */\n get editingItem (): VFXItem | undefined {\n return this._editingItem;\n }\n\n /** 是否存在正在编辑的文本元素。 */\n get isEditing (): boolean {\n return this._editingItem !== undefined;\n }\n\n /**\n * 选中当前编辑文本的全部内容,并将焦点交给输入框。\n *\n * 输入框尚未完成首次画布投影时会先保存全文选区,待投影打开后恢复。\n * @returns 当前存在可编辑文本时返回 true\n */\n selectAllText (): boolean {\n if (this.disposed) {\n return false;\n }\n const textComponent = this._editingItem?.getComponent(TextComponent);\n\n if (!textComponent) {\n return false;\n }\n\n const textLength = this.textAreaElement.style.display === 'block'\n ? this.textAreaElement.value.length\n : (textComponent.text ?? '').length;\n\n this.selectionStart = 0;\n this.selectionEnd = textLength;\n\n if (this.textAreaElement.style.display === 'block') {\n this.textAreaElement.focus();\n this.textAreaElement.select();\n this.textAreaElement.scrollTop = 0;\n }\n\n return true;\n }\n\n /**\n * 使用当前单选文本元素开始编辑。\n * @param textareaType 文本框激活方式\n * @returns 是否成功开始编辑\n */\n beginFromCurrentSelection (textareaType: TextEditActivation): boolean {\n if (this.disposed) {\n return false;\n }\n const selectedItems = this.owner.getSelection().getSelectedPlayerItems();\n const selectedItem = selectedItems.length === 1 ? selectedItems[0] : undefined;\n\n if (selectedItem?.type !== spec.ItemType.text || !selectedItem.getComponent(TextComponent)) {\n return false;\n }\n\n this._editingItem = selectedItem;\n this.interactionParam = { type: 'edit', textareaType };\n\n return true;\n }\n\n /**\n * 将当前会话切换到另一个文本元素。\n * @param item 新的文本元素\n * @param textareaType 文本框激活方式\n * @returns 是否切换成功\n */\n retarget (item: VFXItem, textareaType: TextEditActivation = 'focus'): boolean {\n if (\n this.disposed\n || item.type !== spec.ItemType.text\n || !item.getComponent(TextComponent)\n ) {\n return false;\n }\n if (item === this._editingItem) {\n return true;\n }\n\n this.hideTextArea();\n this.selectionStart = null;\n this.selectionEnd = null;\n this.cancelPointerSelection();\n this.caretMapper.reset();\n this.textAreaElement.setSelectionRange(0, 0);\n this._editingItem = item;\n this.interactionParam = { type: 'edit', textareaType };\n\n return true;\n }\n\n /**\n * 开始使用画布指针拖拽选择文本。\n * @param point 选择起点\n */\n beginPointerSelection (point: ViewPoint): void {\n this.textAreaElement.style.pointerEvents = 'none';\n this.pointerSelection = {\n anchor: { ...point },\n focus: { ...point },\n active: true,\n };\n this.applyPointerSelection();\n }\n\n /**\n * 更新指针拖拽选择终点。\n * @param point 当前指针位置\n */\n updatePointerSelection (point: ViewPoint): void {\n if (!this.pointerSelection?.active) {\n return;\n }\n this.pointerSelection.focus = { ...point };\n this.applyPointerSelection();\n }\n\n /**\n * 完成指针拖拽选择。\n * @param point 最终指针位置\n */\n finishPointerSelection (point: ViewPoint): void {\n if (!this.pointerSelection) {\n return;\n }\n this.pointerSelection.focus = { ...point };\n this.pointerSelection.active = false;\n this.textAreaElement.style.pointerEvents = '';\n if (this.applyPointerSelection()) {\n this.pointerSelection = undefined;\n }\n }\n\n /** 取消指针拖拽选择。 */\n cancelPointerSelection (): void {\n this.textAreaElement.style.pointerEvents = '';\n this.pointerSelection = undefined;\n this.hidePointerSelectionPreview();\n }\n\n /**\n * 挂接一个画布文本投影。\n * @param projection 投影实例\n */\n attachProjection (projection: object): void {\n if (this.disposed) {\n return;\n }\n this.attachedProjections.add(projection);\n }\n\n /**\n * 脱离一个画布文本投影。\n * @param projection 投影实例\n */\n detachProjection (projection: object): void {\n if (!this.attachedProjections.delete(projection)) {\n return;\n }\n if (this.attachedProjections.size > 0) {\n return;\n }\n this.saveSelectionRange();\n this.hideTextArea();\n }\n\n /** 结束编辑并释放 DOM 资源和事件监听器。 */\n dispose (): void {\n if (this.disposed) {\n return;\n }\n this.disposed = true;\n this.attachedProjections.clear();\n this._editingItem = undefined;\n this.interactionParam = { type: 'none' };\n this.cancelPointerSelection();\n this.caretMapper.reset();\n this.hideTextArea();\n this.textAreaElement.removeEventListener('keydown', this.handleKeyDown);\n this.textAreaElement.removeEventListener('mousedown', this.handleMouseDown);\n this.textAreaElement.removeEventListener('dragstart', this.handleDragStart);\n this.textAreaElement.remove();\n this.pointerSelectionPreviewElement.remove();\n this.removeTextAreaStyle();\n this.removeTextSelectionStyle();\n this.removePointerSelectionPreviewStyle();\n }\n\n /**\n * 将 textarea 的位置和排版同步到画布文本投影。\n * @param result 当前文本投影结果\n * @param viewScale 视口缩放\n */\n syncTextArea (result: TextResult, viewScale: number): void {\n // 1. 校验投影和文本组件,并读取画布文本布局。\n const editingItem = this._editingItem;\n\n if (this.attachedProjections.size === 0 || !editingItem || result.type === 'empty') {\n return;\n }\n\n const textComponent = editingItem.getComponent(TextComponent);\n\n if (!textComponent) {\n this.hideTextArea();\n\n return;\n }\n\n const isOpening = this.textAreaElement.style.display !== 'block';\n const {\n textLayout: { lineHeight, letterSpace, textAlign, height: textHeight, keepWordIntact },\n textStyle: { fontSize, textWeight: fontWeight, fontFamily },\n text,\n } = textComponent;\n const [leftTop, rightTop, , leftBottom] = getTransformedBoxCorners(result.transform);\n const width = leftTop.distance(rightTop);\n const height = leftTop.distance(leftBottom);\n const viewRotation = Math.atan2(rightTop.y - leftTop.y, rightTop.x - leftTop.x);\n // 2. 使用投影高度与逻辑文本高度的比例统一 DOM 和画布字号。\n const fontScale = textHeight > 0 ? height / textHeight : viewScale;\n\n // 3. 首次打开时同步内容和不随帧变化的排版属性。\n if (isOpening) {\n this.textAreaElement.value = text ?? '';\n this.textAreaElement.setSelectionRange(0, 0);\n this.textAreaElement.style.display = 'block';\n this.textAreaElement.style.wordBreak = keepWordIntact ? 'normal' : 'break-all';\n this.textAreaElement.style.whiteSpace = 'pre-wrap';\n this.textAreaElement.style.overflowWrap = 'break-word';\n this.textAreaElement.style.fontWeight = fontWeight;\n this.textAreaElement.style.letterSpacing = `${letterSpace * fontScale}px`;\n this.textAreaElement.style.transformOrigin = '0 0';\n this.textAreaElement.style.paintOrder = 'stroke fill';\n this.textAreaElement.addEventListener('input', this.handleInput);\n }\n\n // 4. 同步位置、尺寸、旋转和插入点映射。\n this.textAreaElement.style.left = `${leftTop.x}px`;\n this.textAreaElement.style.top = `${leftTop.y}px`;\n this.textAreaElement.style.width = `${width}px`;\n this.textAreaElement.style.height = `${height}px`;\n this.textAreaElement.style.fontFamily = fontFamily;\n this.textAreaElement.style.textAlign = this.getTextAlign(textAlign);\n this.textAreaElement.style.fontSize = `${fontSize * fontScale}px`;\n this.textAreaElement.style.lineHeight = `${lineHeight * fontScale}px`;\n this.textAreaElement.style.transform = `rotateZ(${viewRotation}rad)`;\n Object.assign(this.pointerSelectionPreviewElement.style, {\n left: `${leftTop.x}px`,\n top: `${leftTop.y}px`,\n width: `${width}px`,\n height: `${height}px`,\n fontFamily,\n textAlign: this.getTextAlign(textAlign),\n fontSize: `${fontSize * fontScale}px`,\n fontWeight,\n letterSpacing: `${letterSpace * fontScale}px`,\n lineHeight: `${lineHeight * fontScale}px`,\n transform: `rotateZ(${viewRotation}rad)`,\n transformOrigin: '0 0',\n wordBreak: keepWordIntact ? 'normal' : 'break-all',\n whiteSpace: 'pre-wrap',\n overflowWrap: 'break-word',\n });\n this.syncPointerLayout({\n left: leftTop.x,\n top: leftTop.y,\n width,\n height,\n rotation: viewRotation,\n text: text ?? '',\n fontFamily,\n fontSize: fontSize * fontScale,\n fontWeight,\n letterSpacing: letterSpace * fontScale,\n lineHeight: lineHeight * fontScale,\n textAlign: this.getTextAlign(textAlign),\n keepWordIntact,\n });\n this.textAreaElement.scrollTop = 0;\n\n // 5. 首次打开后按激活方式恢复或全选 DOM 选区。\n // 指针拖选期间保持画布持有输入,抬起后再由 applyPointerSelection 聚焦输入框。\n if (isOpening && !this.pointerSelection?.active) {\n if (this.interactionParam.textareaType === 'select') {\n this.textAreaElement.focus();\n this.textAreaElement.select();\n } else {\n this.textAreaElement.focus();\n if (this.selectionStart !== null && this.selectionEnd !== null) {\n this.textAreaElement.setSelectionRange(this.selectionStart, this.selectionEnd);\n }\n }\n this.textAreaElement.scrollTop = 0;\n }\n }\n\n /** 保存当前 DOM 文本选区。 */\n private saveSelectionRange (): void {\n this.selectionStart = this.textAreaElement.selectionStart;\n this.selectionEnd = this.textAreaElement.selectionEnd;\n }\n\n /** 隐藏输入框并停止监听输入。 */\n private hideTextArea (): void {\n this.textAreaElement.removeEventListener('input', this.handleInput);\n this.textAreaElement.style.display = 'none';\n this.hidePointerSelectionPreview();\n }\n\n /**\n * 同步插入点布局并应用待处理的指针选区。\n * @param style 文本插入点布局\n */\n private syncPointerLayout (style: TextCaretLayout): void {\n if (!this.pointerSelection) {\n return;\n }\n\n this.caretMapper.sync(style);\n if (this.applyPointerSelection() && !this.pointerSelection.active) {\n this.pointerSelection = undefined;\n }\n }\n\n /** @returns 是否成功将指针选区应用到 DOM 输入框。 */\n private applyPointerSelection (): boolean {\n const selection = this.pointerSelection;\n\n if (!selection) {\n return false;\n }\n\n selection.anchorIndex ??= this.caretMapper.resolve(selection.anchor);\n const focusIndex = this.caretMapper.resolve(selection.focus);\n\n if (selection.anchorIndex === undefined || focusIndex === undefined) {\n return false;\n }\n const start = Math.min(selection.anchorIndex, focusIndex);\n const end = Math.max(selection.anchorIndex, focusIndex);\n\n if (!selection.active) {\n this.textAreaElement.focus();\n }\n this.textAreaElement.setSelectionRange(\n start,\n end,\n focusIndex < selection.anchorIndex ? 'backward' : 'forward',\n );\n this.textAreaElement.scrollTop = 0;\n if (selection.active) {\n this.renderPointerSelectionPreview(start, end);\n } else {\n this.hidePointerSelectionPreview();\n }\n\n return true;\n }\n\n /** 绘制画布指针拖选对应的文字高亮。 */\n private renderPointerSelectionPreview (start: number, end: number): void {\n if (start === end) {\n this.hidePointerSelectionPreview();\n\n return;\n }\n\n const text = this.textAreaElement.value;\n const highlight = document.createElement('span');\n\n highlight.style.backgroundColor = TEXT_SELECTION_BACKGROUND_COLOR;\n highlight.textContent = text.slice(start, end);\n this.pointerSelectionPreviewElement.replaceChildren(\n document.createTextNode(text.slice(0, start)),\n highlight,\n document.createTextNode(text.slice(end)),\n );\n this.pointerSelectionPreviewElement.style.display = 'block';\n }\n\n /** 隐藏画布指针拖选预览。 */\n private hidePointerSelectionPreview (): void {\n this.pointerSelectionPreviewElement.style.display = 'none';\n this.pointerSelectionPreviewElement.replaceChildren();\n }\n\n /**\n * 将 Effects 文本对齐转换为 CSS 对齐值。\n * @param textAlign Effects 文本对齐\n * @returns CSS 文本对齐值\n */\n private getTextAlign (textAlign: spec.TextAlignment): 'left' | 'center' | 'right' {\n switch (textAlign) {\n case spec.TextAlignment.middle: return 'center';\n case spec.TextAlignment.right: return 'right';\n default: return 'left';\n }\n }\n}\n","import type { Gizmo } from './gizmo';\nimport type { GizmoOwner } from './gizmo-owner';\n\n/** 创建有序 Gizmo 交互图的工具基类。 */\nexport class GizmoTool {\n /**\n * @param owner Gizmo 宿主\n */\n constructor (protected owner: GizmoOwner) {}\n\n /**\n * 创建工具使用的 Gizmo 图。\n * @returns 有序 Gizmo 列表\n */\n createGizmos (): Gizmo[] {\n return [];\n }\n}\n","import { GizmoTool } from '../gizmo-tool';\n\n/** 画布平移工具。 */\nexport class HandGizmoTool extends GizmoTool {}\n","import { GizmoTool } from '../gizmo-tool';\n\n/** 使用当前编辑模式处理选区交互的默认工具。 */\nexport class MoveGizmoTool extends GizmoTool {\n /** @returns 当前编辑模式的 Gizmo 图。 */\n override createGizmos () {\n return this.owner.getActiveEditMode().createGizmos();\n }\n}\n","/** Gizmo 提交给宿主的光标样式。 */\nexport type GestureCursorResult = {\n /** 光标类型。 */\n type: GestureCursorType,\n /** 光标旋转角度。 */\n angle: number,\n /** 圆形光标半径。 */\n radius?: number,\n};\n\n/** 内置光标类型。 */\nexport enum GestureCursorType {\n /** 默认光标。 */\n NORMAL = 'normal',\n /** 旋转光标。 */\n ROTATION = 'rotation',\n /** 缩放光标。 */\n SCALE = 'scale',\n /** 文本旋转光标。 */\n TEXT_ROTATION = 'text-rotation',\n /** 圆形画笔光标。 */\n CIRCLE = 'circle',\n /** 可抓取手形光标。 */\n HAND = 'hand',\n /** 抓取中的手形光标。 */\n ACTIVE_HAND = 'active-hand',\n /** 指针光标。 */\n POINTER = 'pointer',\n /** 文本编辑光标。 */\n TEXT = 'text',\n /** 文本创建光标。 */\n TEXT_CREATE = 'text-create',\n /** 画板创建光标。 */\n FRAME_CREATE = 'frame-create',\n /** 框选十字光标。 */\n BOX_SELECT = 'box-select',\n}\n","import type {\n InputEventKey,\n InputEventMouseButton,\n InputEventMouseMotion,\n} from '@galacean/effects';\nimport type { Control } from '@galacean/effects-plugin-gui';\nimport type { GizmoOwner } from './gizmo-owner';\n\n/** 定义 Gizmo 的绘制、鼠标和键盘交互生命周期。 */\nexport abstract class Gizmo {\n /** Gizmo 类型标识(子类必须实现)。 */\n abstract readonly type: string;\n\n /** Gizmo 共享状态的宿主契约。 */\n protected readonly _owner: GizmoOwner;\n\n /**\n * 创建 Gizmo。\n * @param owner 宿主契约\n */\n constructor (owner: GizmoOwner) {\n this._owner = owner;\n }\n\n /** 释放资源。子类可覆盖清理。 */\n dispose (): void {\n // 子类按需释放资源。\n }\n\n /** 在每帧更新时同步内部渲染状态。 */\n onUpdate (): void {\n // 子类按需同步渲染状态。\n }\n\n /** 在输入候选仲裁前更新命中状态。 */\n prepareForDispatch (): void {\n // 子类按需准备命中状态。\n }\n\n /** @returns 是否需要越过拖拽阈值后才接收拖拽事件。 */\n requiresDragThreshold (): boolean {\n return true;\n }\n\n /**\n * 绘制 Gizmo 视觉元素。\n * @param _control 绘制控制器\n */\n draw (_control: Control): void {\n // 子类按需绘制视觉元素。\n }\n\n /**\n * 处理鼠标按下并按需接管交互会话。\n * @param _event 鼠标按下事件\n */\n onMouseDown (_event: InputEventMouseButton): void {\n // 子类按需处理鼠标按下。\n }\n\n /**\n * 处理鼠标抬起并结束交互会话。\n * @param _event 鼠标抬起事件\n */\n onMouseUp (_event: InputEventMouseButton): void {\n // 子类按需处理鼠标抬起。\n }\n\n /**\n * 处理无按键状态的鼠标移动。\n * @param _event 鼠标移动事件\n */\n onMouseMove (_event: InputEventMouseMotion): void {\n // 子类按需处理鼠标移动。\n }\n\n /**\n * 处理越过距离阈值后的鼠标拖拽。\n * @param _event 鼠标拖拽事件\n */\n onMouseDrag (_event: InputEventMouseMotion): void {\n // 子类按需处理鼠标拖拽。\n }\n\n /** 处理鼠标离开并清理悬停状态。 */\n onMouseLeave (): void {\n // 子类按需清理悬停状态。\n }\n\n /**\n * 处理键盘按下。\n * @param _event 键盘按下事件\n */\n onKeyDown (_event: InputEventKey): void {\n // 子类按需处理键盘按下。\n }\n\n /**\n * 处理键盘抬起。\n * @param _event 键盘抬起事件\n */\n onKeyUp (_event: InputEventKey): void {\n // 子类按需处理键盘抬起。\n }\n}\n","/** 内置 Gizmo 的稳定类型标识。 */\nexport enum GizmoType {\n /** 空类型。 */\n NULL = 'null',\n /** 视口平移工具。 */\n HAND = 'hand',\n /** 选区切换工具。 */\n CHANGE_SELECTION = 'change-selection',\n /** 选区移动工具。 */\n MOVE_SELECTION = 'move-selection',\n /** 框选工具。 */\n BOX_SELECTION = 'box-selection',\n /** 点击与拖拽仲裁工具。 */\n CLICK_DRAG_MULTIPLEX = 'click-drag-multiplex',\n /** 角点旋转工具。 */\n CORNER_ROTATION = 'corner-rotation',\n /** 选区缩放工具。 */\n RESIZE_SELECTION = 'resize-selection',\n /** 视口覆盖层。 */\n VIEWPORT_OVERLAY = 'viewport-overlay',\n /** 图片裁切工具。 */\n IMAGE_CUT = 'image-cut',\n /** 文本编辑工具。 */\n TEXT = 'text',\n /** 蒙版编辑工具。 */\n MASK = 'mask',\n /** 加载状态工具。 */\n LOADING = 'loading',\n /** 图片扩边工具。 */\n IMAGE_EXPAND = 'image-expand',\n /** 精准文字编辑工具。 */\n SPRITE_TEXT_EDIT = 'sprite-text-edit',\n /** 媒体图标工具。 */\n ICON = 'icon',\n /** 元素创建工具。 */\n ITEM_CREATE = 'item-create',\n}\n","/* eslint-disable @typescript-eslint/no-extraneous-class */\nimport { type Component, type Composition, type Constructor, VFXItem } from '@galacean/effects';\n\n/** 创建 VFXItem、挂载组件并加入合成的底层工厂。 */\nexport class VFXItemFactory {\n /**\n * 创建并挂载 VFXItem。\n * @param composition 目标合成\n * @param parent 父元素\n * @param name 元素名称\n * @param types 待挂载的组件类型\n * @returns 新建的 VFXItem\n */\n static createVFXItem (\n composition: Composition,\n parent = null,\n name = 'NewVFXItem',\n ...types: Constructor<Component>[]\n ): VFXItem {\n const vfxItem = new VFXItem(composition.engine);\n\n vfxItem.name = name;\n for (const type of types) {\n vfxItem.addComponent(type);\n }\n\n composition.addItem(vfxItem);\n // @ts-expect-error rootComposition.items 的类型未公开受支持的写入操作。\n composition.rootComposition.items.push(vfxItem);\n\n if (parent) {\n vfxItem.setParent(parent);\n }\n\n return vfxItem;\n }\n}\n","/* eslint-disable @typescript-eslint/no-extraneous-class */\nimport {\n AssetManager,\n type Composition,\n PrecompositionManager,\n SpriteComponent,\n spec,\n TextComponent,\n type VFXItem,\n CompositionComponent,\n} from '@galacean/effects';\nimport { VideoComponent } from '@galacean/effects-plugin-multimedia';\nimport { VFXItemFactory } from './vfx-item-factory';\n\n/** 创建内置类型 VFXItem 的便捷工厂。 */\nexport class DefaultVFXItems {\n /**\n * 创建空元素。\n * @param composition 目标合成\n * @param parent 父元素\n * @param name 元素名称\n * @returns 新建的空元素\n */\n static createEmpty (composition: Composition, parent = null, name = 'NewVFXItem'): VFXItem {\n const vfxItem = VFXItemFactory.createVFXItem(composition, parent, name);\n\n vfxItem.type = spec.ItemType.null;\n\n return vfxItem;\n }\n\n /**\n * 创建图片元素。\n * @param composition 目标合成\n * @param parent 父元素\n * @param name 元素名称\n * @returns 新建的图片元素\n */\n static createSprite (composition: Composition, parent = null, name = 'NewSprite'): VFXItem {\n const vfxItem = VFXItemFactory.createVFXItem(composition, parent, name, SpriteComponent);\n\n vfxItem.type = spec.ItemType.sprite;\n\n return vfxItem;\n }\n\n /**\n * 创建文本元素。\n * @param composition 目标合成\n * @param parent 父元素\n * @param name 元素名称\n * @returns 新建的文本元素\n */\n static createText (composition: Composition, parent = null, name = 'NewText'): VFXItem {\n const vfxItem = VFXItemFactory.createVFXItem(composition, parent, name, TextComponent);\n\n vfxItem.type = spec.ItemType.text;\n\n return vfxItem;\n }\n\n /**\n * 创建视频元素。\n * @param composition 目标合成\n * @param parent 父元素\n * @param name 元素名称\n * @returns 新建的视频元素\n */\n static createVideo (composition: Composition, parent = null, name = 'NewVideo'): VFXItem {\n const vfxItem = VFXItemFactory.createVFXItem(composition, parent, name, VideoComponent);\n\n vfxItem.type = spec.ItemType.video;\n\n return vfxItem;\n }\n\n /**\n * 加载并创建动效合成元素。\n * @param composition 目标合成\n * @param effects 动效地址或场景数据\n * @param parent 父元素\n * @param urlname 元素名称\n * @returns 新建的动效元素\n */\n static async createEffects (\n composition: Composition,\n effects: string | spec.JSONScene,\n parent = null,\n urlname = 'NewEffects',\n ): Promise<VFXItem> {\n const preComposition = await AssetManager.loadPrecomposition(effects, { autoplay: false });\n const vfxItem = PrecompositionManager.instantiate(preComposition, composition);\n\n vfxItem.name = urlname;\n vfxItem.type = spec.ItemType.composition;\n\n vfxItem.getComponent(CompositionComponent).endBehavior = vfxItem.endBehavior;\n\n if (parent) {\n vfxItem.setParent(parent);\n }\n\n return vfxItem;\n }\n}\n","import type { VFXItem } from '@galacean/effects';\nimport type { Euler } from '../math';\nimport { Matrix4, Vector2, Vector3, RayCaster } from '../math';\nimport { Plane } from '@galacean/effects-math/es/extension/index';\n\n/**\n * 获取元素所在合成的相机视图投影矩阵。\n * @param item 播放器元素\n * @returns 相机视图投影矩阵\n */\nfunction getViewProjectionMatrix (item: VFXItem) {\n const { composition } = item;\n\n if (!composition?.camera) {\n console.warn('The composition of the item does not have a camera, using identity matrix instead.');\n\n return new Matrix4();\n }\n\n const projectionMatrix = composition.camera.getProjectionMatrix();\n const viewMatrix = composition.camera.getViewMatrix();\n\n return new Matrix4().copyFrom(projectionMatrix.multiply(viewMatrix));\n}\n\n/**\n * 将世界坐标转换为视图坐标。\n * @param point 世界坐标\n * @param item 播放器元素\n * @param containerSize 视图容器大小\n * @returns 视图坐标\n */\nexport function projectPoint (point: Vector3, item: VFXItem, containerSize: Vector2): Vector2 {\n const projectMatrix = getViewProjectionMatrix(item);\n\n const viewPoint = new Vector2()\n .copyFrom(point.applyProjectionMatrix(projectMatrix).toVector2())\n .add(new Vector2(1, -1))\n .multiply(new Vector2(containerSize.x / 2, -containerSize.y / 2));\n\n return viewPoint;\n}\n\n/**\n * 视图坐标转 NDC 标准化坐标(范围 [-1, 1])。\n * @param point 视图坐标\n * @param containerSize 视图容器大小\n * @returns NDC 坐标\n */\nexport function viewPositionToNDC (point: Vector2, containerSize: Vector2): Vector2 {\n return new Vector2(\n point.x / containerSize.x * 2 - 1,\n 1 - point.y / containerSize.y * 2,\n );\n}\n\n/**\n * 视图大小转 NDC 视图大小。\n * @param viewSize 视图大小\n * @param containerSize 视图容器大小\n * @returns NDC 视图大小\n */\nexport function viewSizeToNDC (viewSize: Vector2, containerSize: Vector2): Vector2 {\n return new Vector2(\n (viewSize.x / containerSize.x) * 2,\n -(viewSize.y / containerSize.y) * 2\n );\n}\n\n/**\n * NDC 大小转视图大小。\n * @param ndcSize NDC 大小\n * @param containerSize 视图容器大小\n * @returns 视图大小\n */\nexport function ndcSizeToViewSize (ndcSize: Vector2, containerSize: Vector2): Vector2 {\n return new Vector2(\n ndcSize.x / 2 * containerSize.x,\n -ndcSize.y / 2 * containerSize.y\n );\n}\n\n/**\n * 视图坐标转世界坐标(经 NDC 构造射线并与交互平面求交)。\n * @param viewPoint 视图坐标\n * @param cameraInfo 相机信息\n * @param plane 交互平面\n * @param containerSize 视图容器大小\n * @returns 世界坐标\n */\nexport function viewPositionToWorld (\n viewPoint: Vector2,\n cameraInfo: { position: Vector3, matrix: Matrix4 },\n plane: Plane,\n containerSize: Vector2\n): Vector3 | undefined {\n const { position, matrix: inverseViewProjectMatrix } = cameraInfo;\n const coords = viewPositionToNDC(viewPoint, containerSize);\n const rayCaster = new RayCaster().setFromCamera(coords, { position, inverseViewProjectMatrix });\n\n const result = rayCaster.rayCastPlane(plane);\n\n return result?.point;\n}\n\n/**\n * 视图尺寸对应的世界尺寸(经射线碰撞换算)。\n * @param viewSize 视图尺寸\n * @param containerSize 容器尺寸\n * @param item 播放器元素\n * @param cameraInfo 相机位置与逆视投影矩阵\n * @param plane 交互平面\n * @returns 世界尺寸\n */\nexport function viewSizeToWorld (viewSize: Vector2, containerSize: Vector2, item: VFXItem, cameraInfo: { position: Vector3, matrix: Matrix4 }, plane: Plane): Vector3 {\n const position = new Vector3();\n\n const focusViewPoint = projectPoint(position.clone(), item, containerSize);\n const startPoint = viewPositionToWorld(focusViewPoint, cameraInfo, plane, containerSize);\n const nextPoint = viewPositionToWorld(focusViewPoint.clone().add(viewSize), cameraInfo, plane, containerSize);\n\n if (!startPoint || !nextPoint) {\n console.warn('size is out of bounds.');\n\n return new Vector3(0, 0, 0);\n }\n\n const worldSize = nextPoint.subtract(startPoint);\n\n return worldSize;\n}\n\n/**\n * 世界尺寸转视图尺寸。\n * @param worldSize 世界尺寸\n * @param containerSize 视图容器大小\n * @param item 播放器元素\n * @returns 视图尺寸\n */\nexport function worldSizeToViewSize (worldSize: Vector2, containerSize: Vector2, item: VFXItem): Vector2 {\n const result = new Vector2();\n const camera = item.composition!.camera;\n\n const { z } = item.transform.getWorldPosition();\n const { x: rx, y: ry } = camera.getInverseVPRatio(z);\n\n result.x = Math.abs(worldSize.x * containerSize.x / rx / 2);\n result.y = Math.abs(worldSize.y * containerSize.y / ry / -2);\n\n return result;\n}\n\n/**\n * 视图尺寸转像素尺寸。\n * @param viewSize 视图尺寸\n * @param viewportScale 视口缩放\n * @returns 像素尺寸\n */\nexport function viewSizeToPixel (viewSize: Vector2, viewportScale: number): Vector2 {\n return viewSize.clone().divide(viewportScale);\n}\n\n/**\n * 视图坐标转像素坐标。\n * @param viewPosition 视图坐标(像素,左上原点)\n * @param containerSize 视图容器大小\n * @param viewportScale 视口缩放\n * @param viewportTranslation NDC 单位的视口平移\n * @returns 像素坐标\n */\nexport function viewPositionToPixel (viewPosition: Vector2, containerSize: Vector2, viewportScale: number, viewportTranslation: Vector2): Vector2 {\n // 先将 NDC 平移转换为像素,确保后续运算量纲一致。\n const translationInPixel = ndcSizeToViewSize(viewportTranslation, containerSize);\n const center = new Vector2(containerSize.x / 2, containerSize.y / 2);\n\n return viewPosition.clone()\n .subtract(translationInPixel)\n .subtract(center)\n .multiply(new Vector2(1 / viewportScale, 1 / viewportScale))\n .add(center);\n}\n\n/**\n * 构造交互平面。\n * @param position 平面位置\n * @param rotation 平面旋转\n * @returns 交互平面\n */\nexport function createInteractionPlane (position: Vector3, rotation: Euler) {\n const normal = new Vector3(0, 0, 1).applyEuler(rotation);\n const plane = new Plane();\n\n plane.setFromNormalAndCoplanarPoint(position, normal);\n\n return plane;\n}\n","import { FrameComponent, spec, type VFXItem } from '@galacean/effects';\n\n/**\n * 判断播放器元素是否为画板元素。\n * @param item 播放器元素\n * @returns 是否为画板元素\n */\nexport function isFramePlayerItem (item: VFXItem) {\n return item.type === spec.ItemType.null && item.getComponent(FrameComponent) !== undefined && item.name === '画板';\n}\n\n/**\n * 判断播放器元素是否为动效元素。\n * @param item 播放器元素\n * @returns 是否为动效元素\n */\nexport function isEffectsPlayerItem (item: VFXItem) {\n return item.type === spec.ItemType.null && item.getComponent(FrameComponent) !== undefined && item.name === '动效';\n}\n\n/**\n * 判断播放器元素是否为生成器元素。\n * @param item 播放器元素\n * @returns 是否为生成器元素\n */\nexport function isGeneratorPlayerItem (item: VFXItem) {\n if (item.type !== spec.ItemType.sprite) {\n return false;\n }\n const content = item.definition?.content as Record<string, unknown> | undefined;\n\n return item.name.includes('生成器')\n || content?.generatorType === 'image'\n || content?.generatorType === 'video'\n || content?.isVideoGenerator === true;\n}\n\n/**\n * 判断播放器生成器元素是否为视频生成器。\n * @param item 播放器元素\n * @returns 是否为视频生成器\n */\nexport function isVideoGeneratorPlayerItem (item: VFXItem) {\n if (!isGeneratorPlayerItem(item)) {\n return false;\n }\n const content = item.definition?.content as Record<string, unknown> | undefined;\n\n return content?.generatorType === 'video'\n || content?.isVideoGenerator === true\n || item.name.includes('视频');\n}\n\n/**\n * 判断播放器元素是否为组元素。\n * @param item 播放器元素\n * @returns 是否为组元素\n */\nexport function isGroupPlayerItem (item: VFXItem) {\n return item.type === spec.ItemType.null && !item.getComponent(FrameComponent);\n}\n","import { FrameComponent, spec, type VFXItem } from '@galacean/effects';\nimport { Box2 } from '@galacean/effects-math/es/extension/index';\nimport type { Matrix3 } from '../math';\nimport { Euler, EulerOrder, Matrix4, Quaternion, Vector2, Vector3, getBoxTransform, getBoxTransformFromBox, getTransformedBox } from '../math';\nimport { projectPoint, worldSizeToViewSize } from '../viewport/coordinates';\nimport { isFramePlayerItem } from './item-predicates';\n\n/**\n * 获取元素用于编辑的视图 Box2。\n * @param item 播放器元素\n * @param containerSize 视图大小\n * @returns 视图坐标系中的轴对齐包围盒\n */\nexport function getItemViewBox (item: VFXItem, containerSize: Vector2): Box2 {\n const transform = getItemViewTransform(item, containerSize);\n\n return transform ? getTransformedBox(transform) : new Box2();\n}\n\n/**\n * 获取归一化 Box2 到元素视图坐标的变换。\n * @param item 播放器元素\n * @param containerSize 视图大小\n * @returns 有效变换;元素不可见或没有有效矩形时返回 undefined\n */\nexport function getItemViewTransform (item: VFXItem, containerSize: Vector2): Matrix3 | undefined {\n if (!item.isVisible || !supportsRect(item)) {\n return undefined;\n }\n\n const hasFrameComponent = !!item.getComponent(FrameComponent);\n let viewTransform: Matrix3 | undefined;\n\n if (item.type !== spec.ItemType.null || hasFrameComponent) {\n const { transform, composition } = item;\n\n transform.updateLocalMatrix();\n const { x, y } = transform.size.clone().divide(2);\n const compositionMatrix = new Matrix4()\n .copyFrom(composition?.transform.getWorldMatrix() ?? new Matrix4())\n .invert();\n const itemWorldMatrix = compositionMatrix.multiply(transform.getWorldMatrix());\n\n viewTransform = getBoxTransform([\n new Vector3(-x, y, 0),\n new Vector3(x, y, 0),\n new Vector3(x, -y, 0),\n new Vector3(-x, -y, 0),\n ].map(point => projectPoint(point.applyMatrix(itemWorldMatrix), item, containerSize)));\n }\n\n if (hasFrameComponent) {\n return viewTransform;\n }\n\n const box = viewTransform ? getTransformedBox(viewTransform) : new Box2();\n let hasChildBox = false;\n\n for (const child of item.children ?? []) {\n const childBox = getItemViewBox(child, containerSize);\n\n if (!childBox.isEmpty()) {\n box.union(childBox);\n hasChildBox = true;\n }\n }\n\n return hasChildBox ? getBoxTransformFromBox(box) : viewTransform;\n}\n\n/** @returns 元素类型是否提供矩形编辑几何。 */\nfunction supportsRect (item: VFXItem): boolean {\n return item.type === spec.ItemType.sprite\n || item.type === spec.ItemType.plugin\n || item.type === spec.ItemType.video\n || item.type === spec.ItemType.richtext\n || item.type === spec.ItemType.text\n || item.type === spec.ItemType.null\n || item.type === spec.ItemType.shape;\n}\n\n/**\n * 获取播放器元素在视图中的锚点坐标。\n * @param item 播放器元素\n * @param containerSize 视图容器大小\n * @returns 视图锚点坐标\n */\nexport function getItemViewAnchor (item: VFXItem, containerSize: Vector2): Vector2 {\n const anchor = item.transform.anchor ?? item.transform.position;\n\n const worldAnchor = new Vector3().copyFrom(anchor).applyMatrix(new Matrix4().copyFrom(item.transform.getWorldMatrix()));\n const viewAnchor = projectPoint(worldAnchor, item, containerSize).multiply(100).round().divide(100);\n\n return viewAnchor;\n}\n\n/**\n * 获取元素的变换矩阵和父级变换矩阵。\n * @param item 播放器元素\n * @returns 元素的变换矩阵和父级变换矩阵\n */\nexport function getItemTransform (item: VFXItem): { matrix: Matrix4, parentMatrix: Matrix4 } {\n const transform = {\n matrix: new Matrix4(),\n parentMatrix: new Matrix4(),\n };\n\n if (item.transform !== undefined) {\n item.transform.updateLocalMatrix();\n transform.matrix.copyFrom(item.transform.getWorldMatrix());\n transform.parentMatrix.copyFrom(item.transform.parentTransform?.getWorldMatrix() ?? new Matrix4());\n }\n\n return transform;\n}\n\n/** 元素的世界分解变换。 */\nexport type DecomposedItemTransform = {\n /** 元素的世界矩阵。 */\n matrix: Matrix4,\n /** 父元素的世界矩阵。 */\n parentMatrix: Matrix4,\n /** 元素的世界位置。 */\n position: Vector3,\n /** 元素的世界旋转。 */\n rotation: Euler,\n /** 元素的世界缩放。 */\n scale: Vector3,\n};\n\n/**\n * 获取元素的世界变换。\n * @param item 播放器元素\n * @returns 分解后的世界变换\n */\nexport function decomposeItemTransform (item: VFXItem): DecomposedItemTransform {\n const { matrix, parentMatrix } = getItemTransform(item);\n const position = new Vector3();\n const quaternion = new Quaternion();\n const scale = new Vector3();\n\n item.transform.assignWorldTRS(position, quaternion, scale);\n\n return {\n matrix,\n parentMatrix,\n position,\n rotation: new Euler(0, 0, 0, EulerOrder.XYZ).setFromQuaternion(quaternion),\n scale,\n };\n}\n\n/**\n * 获取播放器元素在视图中的尺寸。\n * @param item 播放器元素\n * @param containerSize 视图容器大小\n * @returns 视图尺寸\n */\nexport function getItemViewSize (item: VFXItem, containerSize: Vector2): Vector2 {\n if (isFramePlayerItem(item)) {\n return worldSizeToViewSize(getItemWorldSize(item), containerSize, item);\n } else {\n return getItemViewBox(item, containerSize).getSize();\n }\n}\n\n/**\n * 获取元素在所属合成坐标系中的实际世界尺寸。\n *\n * `transform.size` 是元素本地尺寸;这里叠加元素到合成根之间的缩放,\n * 但排除合成本身的世界变换,与 Frame 尺寸写回使用的坐标系保持一致。\n * @param item 播放器元素\n * @returns 元素在所属合成坐标系中的尺寸\n */\nexport function getItemWorldSize (item: VFXItem): Vector2 {\n const { transform, composition } = item;\n\n transform.updateLocalMatrix();\n\n const compositionWorldInverse = new Matrix4()\n .copyFrom(composition?.transform.getWorldMatrix() ?? new Matrix4())\n .invert();\n const itemToComposition = compositionWorldInverse.multiply(transform.getWorldMatrix());\n const worldScale = new Vector3();\n\n itemToComposition.decompose(new Vector3(), new Quaternion(), worldScale);\n\n return new Vector2(\n Math.abs(transform.size.x * worldScale.x),\n Math.abs(transform.size.y * worldScale.y),\n );\n}\n","import type { Composition, VFXItem } from '@galacean/effects';\nimport { isEffectsPlayerItem, isFramePlayerItem } from './item-predicates';\n\n/**\n * 判断播放器元素是否参与交互命中。\n *\n * 部分测试夹具或外部运行时节点可能未提供 isVisible;只有明确为 false 时视为隐藏。\n * @param item 待判断元素\n * @returns 是否可参与交互\n */\nexport function isPlayerItemVisible (item: VFXItem | undefined): boolean {\n return item?.isVisible !== false;\n}\n\n/**\n * 获取元素自身或祖先链中最近的动效容器。\n *\n * 默认编辑模式下,Effects 预合成的运行时子节点只负责渲染,点选、框选等交互\n * 会归并到该容器;EffectsEditMode 使用本方法识别当前放开的子树边界。\n * @param item 待解析的播放器元素\n * @returns 最近的动效容器;不在动效子树中时返回 undefined\n */\nexport function getEffectsPlayerItemOwner (item: VFXItem | undefined): VFXItem | undefined {\n let current = item;\n\n while (current) {\n if (isEffectsPlayerItem(current)) {\n return current;\n }\n current = current.parent;\n }\n\n return undefined;\n}\n\n/**\n * 获取元素祖先链中的所有画板。\n *\n * 不包含元素自身,结果按从近到远排列。\n * @param item 待检查的播放器元素\n * @returns 元素所在的画板祖先列表\n */\nexport function getFramePlayerItemAncestors (item: VFXItem): VFXItem[] {\n const frames: VFXItem[] = [];\n let parent = item.parent;\n\n while (parent) {\n if (isFramePlayerItem(parent)) {\n frames.push(parent);\n }\n parent = parent.parent;\n }\n\n return frames;\n}\n\n/**\n * 获取播放器元素的所有子元素。\n * @param item 播放器元素\n * @returns 子元素数组\n */\nexport function getItemChildren (item: VFXItem) {\n const children: VFXItem[] = [];\n\n const isFrameItem = isFramePlayerItem(item);\n const isEffectItem = isEffectsPlayerItem(item);\n\n if (isEffectItem) {\n return children;\n }\n /**\n * 递归展开子元素。\n * @param items 当前层子元素\n * @returns 当前层及其全部后代\n */\n function getAllChildren (items: VFXItem[]): VFXItem[] {\n const result: VFXItem[] = [];\n\n for (const child of items) {\n result.push(child);\n if (child.children && child.children.length > 0) {\n result.push(...getAllChildren(child.children));\n }\n }\n\n return result;\n }\n\n if (isFrameItem) {\n return getAllChildren(item.children);\n } else if (item.children && item.children.length > 0) {\n return getAllChildren(item.children);\n }\n\n return children;\n}\n\n/**\n * 在合成元素树内按实例 ID 查找元素。\n * @param composition 合成(无合成返回 undefined)\n * @param id 元素 instanceId\n * @returns 命中元素;未命中或无合成返回 undefined\n */\nexport function getPlayerItemById (composition: Composition | undefined, id: string): VFXItem | undefined {\n if (!composition) {\n return undefined;\n }\n /**\n * 在当前元素子树中递归查找实例。\n * @param items 当前层元素。\n * @param targetId 目标实例 ID。\n * @returns 命中的元素。\n */\n const dfs = (items: VFXItem[], targetId: string): VFXItem | undefined => {\n for (const item of items) {\n if (item.getInstanceId() === targetId) {\n return item;\n }\n const found = dfs(item.children, targetId);\n\n if (found) {\n return found;\n }\n }\n\n return undefined;\n };\n\n return dfs(composition.items, id);\n}\n","import { CompositionComponent, type Engine, spec } from '@galacean/effects';\nimport { VideoComponent } from '@galacean/effects-plugin-multimedia';\nimport { getPlayerItemById } from './item-hierarchy';\n\nconst pendingPauseRequests = new WeakMap<VideoComponent, symbol>();\n\n/**\n * 请求播放视频组件,并撤销尚未落地的暂停请求。\n * @param videoComponent 视频组件\n */\nexport function playVideoComponent (videoComponent: VideoComponent): void {\n pendingPauseRequests.delete(videoComponent);\n videoComponent.playVideo();\n}\n\n/**\n * 请求暂停视频组件。\n *\n * Multimedia 组件在 `HTMLVideoElement.play()` 尚未完成时直接暂停会产生 AbortError,\n * 因此等待组件内部的在途播放结束后再暂停;期间再次播放会取消本次暂停请求。\n * @param videoComponent 视频组件\n */\nexport function pauseVideoComponent (videoComponent: VideoComponent): void {\n const playPromise = (videoComponent as any).playPromise;\n\n if (!playPromise) {\n pendingPauseRequests.delete(videoComponent);\n videoComponent.pauseVideo();\n\n return;\n }\n\n const request = Symbol('pause-video');\n\n pendingPauseRequests.set(videoComponent, request);\n\n const pauseAfterPlay = (): void => {\n if (pendingPauseRequests.get(videoComponent) !== request) {\n return;\n }\n pendingPauseRequests.delete(videoComponent);\n videoComponent.pauseVideo();\n };\n\n void playPromise.then(pauseAfterPlay, pauseAfterPlay);\n}\n\n/**\n * 播放视频元素。\n * @param engine 引擎\n * @param id 视频元素 id\n */\nexport function playVideoItem (engine: Engine, id: string) {\n const playerItem = getPlayerItemById(engine.sceneServer.compositions[0], id);\n\n if (playerItem?.type !== spec.ItemType.video) {\n return;\n }\n const videoComponent = playerItem.getComponent(VideoComponent);\n\n if (videoComponent) {\n playVideoComponent(videoComponent);\n }\n}\n\n/**\n * 暂停视频元素。\n * @param engine 引擎\n * @param id 视频元素 id\n */\nexport function pauseVideoItem (engine: Engine, id: string) {\n const playerItem = getPlayerItemById(engine.sceneServer.compositions[0], id);\n\n if (playerItem?.type !== spec.ItemType.video) {\n return;\n }\n const videoComponent = playerItem.getComponent(VideoComponent);\n\n if (videoComponent) {\n pauseVideoComponent(videoComponent);\n }\n}\n\n/**\n * 播放动效元素。\n * @param engine 引擎\n * @param id 动效元素 id\n */\nexport function playEffectsItem (engine: Engine, id: string) {\n const controlItem = getPlayerItemById(engine.sceneServer.compositions[0], id);\n const compositionItem = controlItem?.children?.[0];\n\n if (compositionItem?.type !== spec.ItemType.composition) {\n return;\n }\n compositionItem.getComponent(CompositionComponent).play();\n}\n\n/**\n * 暂停动效元素。\n * @param engine 引擎\n * @param id 动效元素 id\n */\nexport function pauseEffectsItem (engine: Engine, id: string) {\n const controlItem = getPlayerItemById(engine.sceneServer.compositions[0], id);\n const compositionItem = controlItem?.children?.[0];\n\n if (compositionItem?.type !== spec.ItemType.composition) {\n return;\n }\n compositionItem.getComponent(CompositionComponent).pause();\n}\n","import type { Vector2, Vector3 } from '../../math';\n\n/** 选区变换的语义类型;由移动、缩放与角旋转行为共同用于命令事务。 */\nexport enum TransformType {\n /** 无变换。 */\n NULL = 'null',\n /** 位移。 */\n TRANSLATION = 'translation',\n /** 旋转。 */\n ROTATION = 'rotation',\n /** 双轴缩放。 */\n SCALE = 'scale',\n /** 文本宽度缩放。 */\n WIDTH_SCALE = 'width-scale',\n}\n\n/** 选区缩放会话数据。 */\nexport type ScaleParam = {\n /** 变换中心。 */\n center: Vector3,\n /** 当前手柄位置。 */\n corner: Vector3,\n /** 指针相对位移。 */\n shift: Vector3,\n /** 上一帧缩放量。 */\n lastScalar: Vector3,\n /** 距中心最远的角点。 */\n farthestCorner: Vector2,\n};\n","import { type Engine } from '@galacean/effects';\nimport { Matrix4, Vector2, Vector3 } from '../math';\n\n/** 读取 Gizmo 使用的当前视口和相机参数。 */\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nexport class GizmoViewportUtils {\n /**\n * 获取视口缩放。\n * @param engine Effects 引擎\n * @returns 视口缩放;无相机时返回 1\n */\n static getViewScale (engine: Engine): number {\n const camera = engine.sceneServer.compositions[0]?.camera;\n\n return camera ? camera.getViewportMatrix().elements[0] : 1;\n }\n\n /**\n * 获取 NDC 坐标系中的视口平移。\n * @param engine Effects 引擎\n * @returns 视口平移;无相机时返回零向量\n */\n static getViewportTranslation (engine: Engine): Vector2 {\n const camera = engine.sceneServer.compositions[0]?.camera;\n\n if (!camera) {\n return new Vector2();\n }\n const e = camera.getViewportMatrix().elements;\n\n return new Vector2(e[12], e[13]);\n }\n\n /**\n * 获取相机位置和逆视投影矩阵。\n * @param engine Effects 引擎\n * @returns 相机信息;无相机时返回零位姿\n */\n static getCameraInfo (engine: Engine): { position: Vector3, matrix: Matrix4 } {\n const camera = engine.sceneServer.compositions[0]?.camera;\n\n if (!camera) {\n return { position: new Vector3(), matrix: new Matrix4() };\n }\n\n return {\n position: new Vector3().copyFrom(camera.position),\n matrix: new Matrix4().copyFrom(camera.getInverseViewProjectionMatrix()),\n };\n }\n\n /**\n * 获取 DOM 容器尺寸。\n * @param container DOM 容器\n * @returns 容器宽高\n */\n static getContainerSize (container: HTMLElement): Vector2 {\n return new Vector2(container.offsetWidth, container.offsetHeight);\n }\n}\n","import type { Matrix4 } from '../../math';\nimport { Vector3, isEqual } from '../../math';\n\n/** 一次锚定缩放在 pointer down 时冻结的几何。 */\nexport type AnchoredResizeGeometry = {\n /** 初始被拖手柄位置(世界坐标)。 */\n initialHandle: Vector3,\n /** 始终保持不动的对边中点或对角点(世界坐标)。 */\n fixedPoint: Vector3,\n /** 属性变化实际围绕的原点(transform scale 用 anchor,内容 size 用几何中心)。 */\n resizeOrigin: Vector3,\n /** 世界向量到元素局部缩放轴的旋转矩阵(无平移)。 */\n worldToLocalRotation: Matrix4,\n};\n\n/** 锚定缩放约束。 */\nexport type AnchoredResizeOptions = {\n /** 边只控制一个轴;角点同时控制两个轴。 */\n handleKind: 'edge' | 'corner',\n /** 是否锁定宽高比。 */\n lockAspectRatio: boolean,\n /** 强制保持不变的局部缩放轴。 */\n lockedAxis?: 'x' | 'y',\n};\n\n/** 锚定缩放的绝对变换结果。 */\nexport type AnchoredResizeResult = {\n /** 相对 pointer down 快照的总缩放,而非相对上一帧的增量。 */\n totalScalar: Vector3,\n /** 相对 pointer down 快照的总世界位移。 */\n totalTranslation: Vector3,\n};\n\n/**\n * 由初始快照计算当前边或角点缩放的绝对结果。\n *\n * 当前指针决定“固定点 → 手柄”的有符号比例;属性绕其真实 resizeOrigin 变化,\n * 再反算位移使 fixedPoint 回到原坐标。\n * @param geometry 交互开始时冻结的几何\n * @param pointer 当前指针世界坐标\n * @param options 手柄类型和比例约束\n * @returns 相对交互起点的绝对缩放和位移\n */\nexport function calculateAnchoredResize (\n geometry: AnchoredResizeGeometry,\n pointer: Vector3,\n options: AnchoredResizeOptions,\n): AnchoredResizeResult {\n // 1. 将初始手柄和当前指针转换到元素局部缩放轴。\n const { initialHandle, fixedPoint, resizeOrigin, worldToLocalRotation } = geometry;\n const { handleKind, lockAspectRatio, lockedAxis } = options;\n const initialVector = new Vector3().subtractVectors(initialHandle, fixedPoint).applyMatrix(worldToLocalRotation);\n const pointerVector = new Vector3().subtractVectors(pointer, fixedPoint).applyMatrix(worldToLocalRotation);\n let totalScalar: Vector3;\n\n // 2. 根据边或角点计算各轴总缩放量。\n if (handleKind === 'edge') {\n const axisIndex: 0 | 1 = Math.abs(initialVector.x) >= Math.abs(initialVector.y) ? 0 : 1;\n const initialLength = initialVector.toArray()[axisIndex];\n const pointerLength = pointerVector.toArray()[axisIndex];\n const primaryScalar = isEqual(initialLength, 0)\n ? 1\n : pointerLength / initialLength;\n\n totalScalar = lockAspectRatio\n ? axisIndex === 0\n ? new Vector3(primaryScalar, Math.abs(primaryScalar), Math.abs(primaryScalar))\n : new Vector3(Math.abs(primaryScalar), primaryScalar, Math.abs(primaryScalar))\n : axisIndex === 0\n ? new Vector3(primaryScalar, 1, 1)\n : new Vector3(1, primaryScalar, 1);\n } else {\n const scaleX = isEqual(initialVector.x, 0) ? 1 : pointerVector.x / initialVector.x;\n const scaleY = isEqual(initialVector.y, 0) ? 1 : pointerVector.y / initialVector.y;\n\n totalScalar = new Vector3(scaleX, scaleY, 1);\n if (lockAspectRatio) {\n if (Math.abs(scaleX) > Math.abs(scaleY)) {\n totalScalar.y = Math.abs(scaleX) * (scaleY < 0 ? -1 : 1);\n } else {\n totalScalar.x = Math.abs(scaleY) * (scaleX < 0 ? -1 : 1);\n }\n totalScalar.z = Math.max(Math.abs(totalScalar.x), Math.abs(totalScalar.y));\n }\n }\n\n if (lockedAxis === 'x') {\n totalScalar.x = 1;\n } else if (lockedAxis === 'y') {\n totalScalar.y = 1;\n }\n\n // 3. 反算固定点缩放后的偏移,得到位置补偿量。\n const fixedOffsetLocal = new Vector3()\n .subtractVectors(fixedPoint, resizeOrigin)\n .applyMatrix(worldToLocalRotation)\n .multiply(totalScalar);\n const scaledFixedPoint = resizeOrigin.clone().add(\n fixedOffsetLocal.applyMatrix(worldToLocalRotation.clone().invert()),\n );\n\n return {\n totalScalar,\n totalTranslation: fixedPoint.clone().subtract(scaledFixedPoint),\n };\n}\n","/** 带稳定标识、默认值和校验器的配置定义。 */\nexport type ConfigDefinition<Id extends string, T extends object> = {\n /** 配置唯一标识。 */\n readonly id: Id,\n /** 配置默认值。 */\n readonly defaults: Readonly<T>,\n /** 校验并归一化外部配置。 */\n readonly validate?: (input: unknown) => Partial<T> | undefined,\n};\n\n/** 任意配置定义的通用类型。 */\nexport type AnyConfigDefinition = ConfigDefinition<string, Record<string, unknown>>;\n\n/** 提取配置定义对应的值类型。 */\nexport type ConfigValue<D> = D extends ConfigDefinition<string, infer T> ? T : never;\n\n/** 一次配置变更的前后值。 */\nexport type ConfigChange<T extends object> = {\n /** 本次接受的增量配置。 */\n partial: Readonly<Partial<T>>,\n /** 变更前的完整配置。 */\n previous: Readonly<T>,\n /** 变更后的完整配置。 */\n current: Readonly<T>,\n};\n\n/**\n * 深拷贝由数组和普通对象组成的配置值。\n * @param value 待拷贝的配置值\n * @returns 配置值副本\n */\nexport function cloneConfigValue<T> (value: T): T {\n if (Array.isArray(value)) {\n return value.map(item => cloneConfigValue(item)) as T;\n }\n if (value && typeof value === 'object') {\n return Object.fromEntries(\n Object.entries(value).map(([key, item]) => [key, cloneConfigValue(item)]),\n ) as T;\n }\n\n return value;\n}\n\n/**\n * 递归冻结配置值。\n * @param value 待冻结的配置值\n * @returns 已冻结的原值\n */\nexport function freezeConfigValue<T> (value: T): T {\n if (value && typeof value === 'object') {\n for (const item of Object.values(value)) {\n freezeConfigValue(item);\n }\n Object.freeze(value);\n }\n\n return value;\n}\n\n/**\n * 创建不可变的配置定义。\n * @param definition 配置标识、默认值和可选校验器\n * @returns 默认值已复制并冻结的配置定义\n */\nexport function defineConfig<const Id extends string, T extends object> (\n definition: ConfigDefinition<Id, T>,\n): ConfigDefinition<Id, T> {\n return Object.freeze({\n ...definition,\n defaults: freezeConfigValue(cloneConfigValue(definition.defaults)),\n });\n}\n","import { defineConfig } from './config-definition';\nimport type { LoadingConfig } from './types';\n\nexport const DEFAULT_LOADING_FRAGMENT = `\n// Shadertoy Fragment Shader\n// Diagonal background gradient + wider colorful transparent shimmer\n\nprecision highp float;\n\nvarying vec2 vUV;\n\nuniform vec4 _Time;\n\n// ------------------------------------------------------------\n// Background\n// ------------------------------------------------------------\nvec3 background(vec2 uv) {\n vec3 topLeft = vec3(0.88, 0.85, 1.00);\n vec3 bottomRight = vec3(0.98, 0.98, 0.98);\n\n float d = (uv.x + (1.0 - uv.y)) * 0.5;\n d = smoothstep(0.0, 1.0, d);\n\n vec3 col = mix(topLeft, bottomRight, d);\n\n vec2 p1 = uv - vec2(1.13, 1.40);\n float r1 = length(p1 / vec2(0.85, 0.85));\n float g1 = 1.0 - smoothstep(0.0, 0.96, r1);\n col += vec3(172.0/255.0, 183.0/255.0, 1.0) * g1 * 0.28;\n\n vec2 p2 = uv - vec2(0.25, 0.23);\n float r2 = length(p2 / vec2(0.74, 0.64));\n float g2 = 1.0 - smoothstep(0.0, 1.0, r2);\n col += vec3(147.0/255.0, 108.0/255.0, 1.0) * g2 * 0.10;\n\n return col;\n}\n\n// ------------------------------------------------------------\n// Easing: slow at start, fast at end\n// ------------------------------------------------------------\nfloat easeInQuad(float x) {\n return x * x;\n}\n\n// ------------------------------------------------------------\n// Color palette helper\n// ------------------------------------------------------------\nvec3 palette(float t) {\n // 柔和的彩色条:蓝 -> 青 -> 紫 -> 粉 -> 蓝\n vec3 a = vec3(0.62, 0.82, 1.00);\n vec3 b = vec3(0.72, 0.95, 1.00);\n vec3 c = vec3(0.83, 0.76, 1.00);\n vec3 d = vec3(1.00, 0.82, 0.95);\n\n t = fract(t);\n\n if (t < 0.33) {\n float k = smoothstep(0.0, 0.33, t);\n return mix(a, b, k);\n } else if (t < 0.66) {\n float k = smoothstep(0.33, 0.66, t);\n return mix(b, c, k);\n } else {\n float k = smoothstep(0.66, 1.0, t);\n return mix(c, d, k);\n }\n}\n\n// ------------------------------------------------------------\n// Wider colorful transparent left-to-right shimmer\n// ------------------------------------------------------------\nvec4 shimmerBand(vec2 uv, float t) {\n float cycle = fract(t * 0.70);\n cycle = easeInQuad(cycle);\n\n float x = cycle * 1.55 - 0.25; // sweep from left to right\n\n float d = abs(uv.x - x);\n float band = 1.0 - smoothstep(0.0, 0.30, d);\n float core = 1.0 - smoothstep(0.0, 0.10, d);\n\n float x2 = x + (uv.y - 0.5) * 0.18;\n float d2 = abs(uv.x - x2);\n float band2 = 1.0 - smoothstep(0.0, 0.20, d2);\n\n float s = max(band * 0.85, band2 * 0.60);\n s = max(s, core * 0.95);\n s = clamp(s, 0.0, 1.0);\n\n // 颜色沿条带变化,模拟彩色渐变\n float hueT = uv.y * 0.25 + uv.x * 0.60 + t * 0.10;\n vec3 color1 = palette(hueT);\n\n // 中间更亮一点,边缘更淡\n vec3 color2 = mix(color1, vec3(1.0), core * 0.35);\n\n return vec4(color2, s);\n}\n\n// ------------------------------------------------------------\n// Main\n// ------------------------------------------------------------\nvoid main() {\n vec2 uv = vUV;\n\n vec3 col = background(uv);\n\n vec4 sh = shimmerBand(uv, _Time.y);\n\n // 可选:增加一点柔光感\n col += sh.rgb * sh.a * 0.06;\n\n gl_FragColor = vec4(col, 1.0);\n}`;\n\nexport const loadingConfig = defineConfig<'feedback.loading', LoadingConfig>({\n id: 'feedback.loading',\n defaults: { loadingFragment: DEFAULT_LOADING_FRAGMENT },\n});\n","import { defineConfig } from './config-definition';\nimport type {\n EffectsEditModeConfig,\n IconConfig,\n ItemCreateConfig,\n MaskConfig,\n ImageCutConfig,\n ImageExpandConfig,\n SelectionPreviewConfig,\n SnapConfig,\n SpriteTextEditConfig,\n ResizeSelectionConfig,\n ViewportNavigationConfig,\n ViewportOverlayConfig,\n} from './types';\n\nexport { DEFAULT_LOADING_FRAGMENT, loadingConfig } from './loading-config';\n\nexport const effectsEditModeConfig = defineConfig<'mode.effects-edit', EffectsEditModeConfig>({\n id: 'mode.effects-edit',\n defaults: { allowTransform: true },\n});\n\nexport const viewportNavigationConfig = defineConfig<'viewport.navigation', ViewportNavigationConfig>({\n id: 'viewport.navigation',\n defaults: {\n scrollWheelZoom: false,\n invertZoom: false,\n zoomStep: 0.1,\n },\n});\n\nexport const viewportOverlayConfig = defineConfig<'viewport.overlay', ViewportOverlayConfig>({\n id: 'viewport.overlay',\n defaults: {\n boxColor: 0xFF0000,\n boxWidth: 1,\n outerMaskEnabled: true,\n markColor: 0x000000,\n markAlpha: 0.17,\n safeAreaEnabled: true,\n safeAreaBoxColor: 0x00FF00,\n safeAreaBoxAlpha: 0.3,\n },\n});\n\nexport const selectionPreviewConfig = defineConfig<'selection.preview', SelectionPreviewConfig>({\n id: 'selection.preview',\n defaults: {\n videoPreSelectedPlay: true,\n preSelectedColor: 0x3b82f6,\n preSelectedWidth: 2,\n regionBoxColor: 0x3b82f6,\n regionBoxAlpha: 0.17,\n regionWireframeColor: 0x3b82f6,\n regionWireframeAlpha: 0.78,\n regionWireframeWidth: 1,\n },\n});\n\nexport const selectionSnapConfig = defineConfig<'selection.snap', SnapConfig>({\n id: 'selection.snap',\n defaults: {\n enabled: true,\n lineWidth: 0.8,\n lineColor: 0xF24822,\n distance: 5,\n },\n});\n\nexport const resizeSelectionConfig = defineConfig<'resize-selection', ResizeSelectionConfig>({\n id: 'resize-selection',\n defaults: {\n pixelRatio: 1,\n contentRatio: 1,\n wireframeColor: 0x3b82f6,\n wireframeAlpha: 1,\n wireframeWidth: 1.5,\n cornerFillColor: 0xFFFFFF,\n cornerLineColor: 0x3b82f6,\n cornerLineWidth: 1.5,\n cornerLineAlpha: 1,\n scaleCircleSize: 4,\n rotationCircleSize: 7,\n infoShowEnabled: true,\n sizeTextColor: 0x666666,\n nameTextColor: 0x666666,\n frameMoveLineColor: 0x3b82f6,\n frameMoveLineWidth: 2,\n imageLogoUrl: 'https://mdn.alipayobjects.com/huamei_ixsp8m/afts/img/A*F2wVS7x0MfIAAAAAQBAAAAgAev-aAQ/original',\n groupLogoUrl: 'https://mdn.alipayobjects.com/huamei_ppzin5/afts/img/Yo69Sr7boqYAAAAAH3AAAAgADjdkAQFr/original',\n textLogoUrl: 'https://mdn.alipayobjects.com/huamei_ppzin5/afts/img/Yo69Sr7boqYAAAAAH3AAAAgADjdkAQFr/original',\n videoLogoUrl: 'https://mdn.alipayobjects.com/huamei_ixsp8m/afts/img/A*w1fnS4mq0VgAAAAAQCAAAAgAev-aAQ/original',\n frameLogoUrl: 'https://mdn.alipayobjects.com/huamei_ixsp8m/afts/img/A*DRF_RpndkjUAAAAAQDAAAAgAev-aAQ/original',\n effectsLogoUrl: 'https://mdn.alipayobjects.com/huamei_ixsp8m/afts/img/A*RMewR4ruUnYAAAAAQGAAAAgAev-aAQ/original',\n },\n});\n\nexport const imageCutConfig = defineConfig<'tool.image-cut', ImageCutConfig>({\n id: 'tool.image-cut',\n defaults: {\n maskColor: 0xFFFFFF,\n maskAlpha: 0.5,\n cutBoxLineWidth: 2,\n cutBoxLineColor: 0x6A34FF,\n cutBoxLineAlpha: 1,\n itemBoxLineWidth: 1,\n itemBoxLineColor: 0x6A34FF,\n itemBoxLineAlpha: 1,\n cutBoxCornerRadius: 5,\n cutBoxCornerFillColor: 0xFFFFFF,\n cutBoxCornerLineWidth: 2,\n cutBoxCornerLineColor: 0x6A34FF,\n cutBoxCornerLineAlpha: 1,\n scaleInteractionDistance: 8,\n directionScaleInteractionDistance: 5,\n gridLineWidth: 1,\n gridLineColor: 0xFFFFFF,\n gridLineAlpha: 1,\n gridCount: 2,\n },\n});\n\nexport const imageExpandConfig = defineConfig<'tool.image-expand', ImageExpandConfig>({\n id: 'tool.image-expand',\n defaults: {\n maskColor: 0x6A34FF,\n maskAlpha: 0.2,\n expandBoxLineWidth: 2,\n expandBoxLineColor: 0x6A34FF,\n expandBoxLineAlpha: 1,\n expandBoxCornerRadius: 5,\n expandBoxCornerLineWidth: 2,\n expandBoxCornerLineColor: 0x6A34FF,\n expandBoxCornerLineAlpha: 1,\n expandBoxCornerFillColor: 0xFFFFFF,\n scaleInteractionDistance: 8,\n directionScaleInteractionDistance: 5,\n gridLineWidth: 1,\n gridLineColor: 0xFFFFFF,\n gridLineAlpha: 1,\n gridCount: 2,\n },\n});\n\nexport const maskConfig = defineConfig<'tool.mask', MaskConfig>({\n id: 'tool.mask',\n defaults: {\n maskImage: '',\n brushSize: 20,\n brushColor: 0x6A34FF,\n brushAlpha: 0.5,\n maskColor: 0x00FF00,\n maskBackgroundColor: 0xFFFFFF,\n maskAlpha: 1,\n boxLineWidth: 1,\n boxLineColor: 0x6A34FF,\n boxLineAlpha: 1,\n },\n});\n\nexport const spriteTextEditConfig = defineConfig<'tool.sprite-text-edit', SpriteTextEditConfig>({\n id: 'tool.sprite-text-edit',\n defaults: {\n textColor: 0xFFFFFF,\n preSelectedTextColor: 0xFFFFFF,\n boxLineWidth: 3,\n dashLineDash: 8,\n dashLineGap: 8,\n editBoxAlpha: 0.15,\n editBoxColor: 0x3B82F6,\n editBoxLineAlpha: 1,\n editBoxLineColor: 0x3B82F6,\n editBoxPreSelectedAlpha: 0.25,\n editBoxPreSelectedColor: 0x3B82F6,\n editBoxLinePreSelectedAlpha: 1,\n editBoxLinePreSelectedColor: 0x3B82F6,\n hasChangedEditBoxAlpha: 0.2,\n hasChangedEditBoxColor: 0x22C55E,\n hasChangedEditBoxLineAlpha: 1,\n hasChangedEditBoxLineColor: 0x22C55E,\n hasChangedEditBoxPreSelectedAlpha: 0.3,\n hasChangedEditBoxPreSelectedColor: 0x22C55E,\n hasChangedEditBoxLinePreSelectedAlpha: 1,\n hasChangedEditBoxLinePreSelectedColor: 0x22C55E,\n editBoxSelectedAlpha: 0.6,\n editBoxSelectedColor: 0xFFFF00,\n },\n});\n\nexport const iconConfig = defineConfig<'feedback.icon', IconConfig>({\n id: 'feedback.icon',\n defaults: {\n autoShow: true,\n videoPlayUrl: 'https://mdn.alipayobjects.com/huamei_ixsp8m/afts/img/A*ORMmSYYHIHUAAAAAJbAAAAgAev-aAQ/original',\n videoPlayShift: [20, 20],\n videoPlayWidth: 20,\n videoPlayHeight: 20,\n imageGeneratorUrl: 'https://mdn.alipayobjects.com/huamei_ixsp8m/afts/img/A*bYB-TIEWLBkAAAAAQGAAAAgAev-aAQ/original',\n videoGeneratorUrl: 'https://mdn.alipayobjects.com/huamei_ixsp8m/afts/img/A*6cTFT44CuKEAAAAAQCAAAAgAev-aAQ/original',\n generatorWidth: 200,\n generatorHeight: 200,\n },\n});\n\nexport const itemCreateConfig = defineConfig<'tool.item-create', ItemCreateConfig>({\n id: 'tool.item-create',\n defaults: {\n frameBorderColor: 0x2178FF,\n frameBorderWidth: 1,\n frameBorderAlpha: 0.8,\n frameFillColor: 0x2178FF,\n frameFillAlpha: 0.15,\n frameChildBoxAlpha: 0.35,\n frameChildBoxColor: 0x2178FF,\n },\n});\n","import type { Engine } from '@galacean/effects';\nimport { Matrix4, Quaternion, Vector2, Vector3 } from '../math';\n\n/**\n * 缩放视图。\n * @param engine 引擎\n * @param zoom 缩放值\n * @param center 缩放中心\n */\nexport function zoomView (engine: Engine, zoom: number, center: Vector2 = new Vector2()) {\n const composition = engine.sceneServer.compositions[0];\n\n if (!composition) {\n return;\n }\n\n const { camera } = composition;\n const scale = camera.getViewportMatrix().elements[0];\n const translation = new Vector2(camera.getViewportMatrix().elements[12], camera.getViewportMatrix().elements[13]);\n\n const result = scale + zoom;\n\n // 1. 反算缩放中心对应的世界坐标。\n const worldX = (center.x - translation.x) / scale;\n const worldY = (center.y - translation.y) / scale;\n\n // 2. 调整平移,使缩放中心在屏幕上的位置保持不变。\n const newNDCTranslation = new Vector2(\n center.x - worldX * result,\n center.y - worldY * result,\n );\n\n const viewportMatrix = new Matrix4().compose(\n new Vector3(newNDCTranslation.x, newNDCTranslation.y, 0),\n new Quaternion(),\n new Vector3(result, result, 1)\n );\n\n composition.camera.setViewportMatrix(viewportMatrix);\n}\n\n/**\n * 平移视图。\n * @param engine 引擎\n * @param translation 位移值\n */\nexport function panView (engine: Engine, translation: Vector2,) {\n const composition = engine.sceneServer.compositions[0];\n\n if (!composition) {\n return;\n }\n const { camera } = composition;\n const scale = camera.getViewportMatrix().elements[0];\n const resultTranslation = new Vector2(camera.getViewportMatrix().elements[12], camera.getViewportMatrix().elements[13]).add(translation);\n\n const viewportMatrix = new Matrix4().compose(\n new Vector3(resultTranslation.x, resultTranslation.y, 0),\n new Quaternion(),\n new Vector3(scale, scale, 1)\n );\n\n camera.setViewportMatrix(viewportMatrix);\n}\n","import { Vector2 } from '../math';\nimport { Box2 } from '@galacean/effects-math/es/extension/index';\n\n/**\n * 计算内容两端分别对齐视口两端时的平移区间。\n * @param bounds 相对视口中心、scale=1 时的内容边界\n * @param scale 当前缩放\n * @param size 视口像素尺寸\n */\nexport function getViewportTranslationRange (bounds: Box2, scale: number, size: Vector2): Box2 {\n const start = bounds.min.clone().multiply(-scale).subtract(size.clone().divide(2));\n const end = bounds.max.clone().multiply(-scale).add(size.clone().divide(2));\n\n // 内容大于视口时允许浏览两端;小于视口时允许在屏幕内移动。\n return new Box2(\n new Vector2(Math.min(start.x, end.x), Math.min(start.y, end.y)),\n new Vector2(Math.max(start.x, end.x), Math.max(start.y, end.y)),\n );\n}\n","import {\n EventEmitter,\n MouseButton,\n MouseButtonMask,\n type Engine,\n type InputEventMouseButton,\n} from '@galacean/effects';\nimport { clamp, Vector2 } from '../math';\nimport type { Box2 } from '@galacean/effects-math/es/extension/index';\nimport type { ViewportNavigationRange } from './types';\nimport { getViewportTranslationRange } from './viewport-range';\nimport type { ViewportNavigationConfig } from '../configs/types';\nimport { viewportNavigationConfig } from '../configs/builtin-configs';\nimport type { GizmoOwner } from '../gizmo-owner';\nimport { ndcSizeToViewSize, viewPositionToNDC, viewSizeToNDC } from './coordinates';\nimport { panView, zoomView } from './viewport-operations';\nimport { GizmoViewportUtils } from './viewport-utils';\n\n/** 视口平移或缩放后的相机快照。 */\nexport type ViewportParam = {\n /** 视口缩放。 */\n scale: number,\n /** 视口平移。 */\n translation: Vector2,\n /** 本次变换中心。 */\n center: Vector2,\n};\n\n/** 视口导航操作来源。 */\nexport type ViewportNavigationSource =\n | 'hand-pan'\n | 'wheel-pan'\n | 'wheel-zoom'\n | 'pinch-zoom';\n\n/** 带操作来源的视口变更快照。 */\nexport type ViewportNavigationChange = ViewportParam & {\n /** 触发视口变更的操作。 */\n source: ViewportNavigationSource,\n};\n\n/** 视口导航控制器事件参数。 */\nexport type ViewportNavigationEvents = {\n /** 视口变更事件。 */\n change: [ViewportNavigationChange],\n};\n\n/** 滚轮操作模式。 */\ntype WheelMode = 'pan' | 'zoom';\n\n/** Effects 将 DOM 像素滚轮量除以 100 后写入 InputEventMouseButton.factor。 */\nconst EFFECTS_WHEEL_FACTOR_TO_VIEW_PIXELS = 100;\n\n/** 统一处理手形工具和滚轮触发的视口平移与缩放。 */\nexport class ViewportNavigationController extends EventEmitter<ViewportNavigationEvents> {\n private readonly owner: GizmoOwner;\n private minScale = 0.01;\n private maxScale = 20;\n private minTranslation = new Vector2(-Infinity, -Infinity);\n private maxTranslation = new Vector2(Infinity, Infinity);\n private translationBounds?: Box2;\n\n /**\n * @param owner Gizmo 宿主\n */\n constructor (owner: GizmoOwner) {\n super();\n this.owner = owner;\n }\n\n /** 当前视口导航配置。 */\n get config (): Readonly<ViewportNavigationConfig> {\n return this.owner.getConfigManager().get(viewportNavigationConfig);\n }\n\n /** 当前 Effects 引擎。 */\n private get engine (): Engine {\n return this.owner.getEngine();\n }\n\n /**\n * 设置允许的视口缩放范围。\n * @param minScale 最小缩放\n * @param maxScale 最大缩放\n */\n setScaleRange (minScale: number, maxScale: number): void {\n if (!Number.isFinite(minScale)\n || !Number.isFinite(maxScale)\n || minScale <= 0\n || maxScale <= 0\n || minScale > maxScale) {\n throw new RangeError('Viewport scale range must be finite, positive, and ordered.');\n }\n this.minScale = minScale;\n this.maxScale = maxScale;\n this.clampCurrentViewport();\n }\n\n /**\n * 设置视口缩放和平移范围。\n * @param range 视口边界;未提供的缩放边界保留当前值,未提供的平移边界表示不设限\n */\n setViewportRange (range: ViewportNavigationRange): void {\n const minScale = range.minScale ?? this.minScale;\n const maxScale = range.maxScale ?? this.maxScale;\n\n if (!Number.isFinite(minScale)\n || !Number.isFinite(maxScale)\n || minScale <= 0\n || maxScale <= 0\n || minScale > maxScale) {\n throw new RangeError('Viewport scale range must be finite, positive, and ordered.');\n }\n\n const minTranslation = range.minTranslation?.clone() ?? new Vector2(-Infinity, -Infinity);\n const maxTranslation = range.maxTranslation?.clone() ?? new Vector2(Infinity, Infinity);\n\n if (!this.isTranslationRangeValid(minTranslation, maxTranslation)) {\n throw new RangeError('Viewport translation range must be ordered and finite or infinite.');\n }\n\n const translationBounds = range.translationBounds?.clone();\n\n if (translationBounds && (translationBounds.isEmpty()\n || !translationBounds.min.toArray().every(Number.isFinite)\n || !translationBounds.max.toArray().every(Number.isFinite))) {\n throw new RangeError('Viewport content bounds must be finite and ordered.');\n }\n this.translationBounds = translationBounds;\n this.minScale = minScale;\n this.maxScale = maxScale;\n this.minTranslation = minTranslation;\n this.maxTranslation = maxTranslation;\n this.clampCurrentViewport();\n }\n\n /** 恢复默认视口范围。 */\n resetViewportRange (): void {\n this.translationBounds = undefined;\n this.minScale = 0.01;\n this.maxScale = 20;\n this.minTranslation = new Vector2(-Infinity, -Infinity);\n this.maxTranslation = new Vector2(Infinity, Infinity);\n this.clampCurrentViewport();\n }\n\n /** 当前视口范围快照。 */\n get viewportRange (): ViewportNavigationRange {\n const bounds = this.translationBounds && this.hasViewport()\n ? getViewportTranslationRange(this.translationBounds, GizmoViewportUtils.getViewScale(this.engine), this.containerSize())\n : undefined;\n\n return {\n minScale: this.minScale,\n maxScale: this.maxScale,\n minTranslation: bounds?.min ?? this.minTranslation.clone(),\n maxTranslation: bounds?.max ?? this.maxTranslation.clone(),\n ...(this.translationBounds ? { translationBounds: this.translationBounds.clone() } : {}),\n };\n }\n\n /**\n * 根据滚轮来源和修饰键执行平移或缩放。\n * @param event 滚轮事件\n * @param _pointerCaptured 指针是否已被捕获\n * @returns 视口是否发生变化\n */\n handleWheel (event: InputEventMouseButton, _pointerCaptured: boolean): boolean {\n if (!this.hasViewport()) {\n return false;\n }\n\n event.accept();\n if (event.buttonMask !== MouseButtonMask.None) {\n return false;\n }\n const delta = this.normalizeWheel(event);\n const mode = this.classifyWheel(event);\n const center = new Vector2(event.position.x, event.position.y);\n\n if (mode === 'zoom') {\n if (delta.y === 0) {\n return false;\n }\n const direction = this.config.invertZoom\n ? -delta.y\n : delta.y;\n const zoomStep = this.config.zoomStep;\n const zoomDelta = clamp(direction * 0.01, -zoomStep, zoomStep);\n\n return this.zoomByFactor(\n 1 + zoomDelta,\n center,\n event.ctrlPressed\n ? 'pinch-zoom'\n : 'wheel-zoom',\n );\n }\n\n if (delta.x === 0 && delta.y === 0) {\n return false;\n }\n\n return this.panByViewDelta(delta, center, 'wheel-pan');\n }\n\n /**\n * 按视图像素增量平移视口。\n * @param delta 视图像素位移\n * @param center 操作中心\n * @param source 操作来源\n * @returns 视口是否发生变化\n */\n panByViewDelta (\n delta: Vector2,\n center: Vector2,\n source: 'hand-pan' | 'wheel-pan',\n ): boolean {\n if (!this.hasViewport() || (delta.x === 0 && delta.y === 0)) {\n return false;\n }\n const containerSize = this.containerSize();\n\n if (containerSize.x <= 0 || containerSize.y <= 0) {\n return false;\n }\n panView(this.engine, viewSizeToNDC(delta, containerSize));\n this.clampCurrentTranslation(containerSize);\n this.emitChange(center, source);\n\n return true;\n }\n\n /**\n * 按倍率缩放视口。\n * @param factor 缩放倍率\n * @param center 缩放中心\n * @param source 操作来源\n * @returns 视口是否发生变化\n */\n zoomByFactor (\n factor: number,\n center: Vector2,\n source: 'wheel-zoom' | 'pinch-zoom',\n ): boolean {\n if (!this.hasViewport() || !Number.isFinite(factor) || factor <= 0) {\n return false;\n }\n const currentScale = GizmoViewportUtils.getViewScale(this.engine);\n const nextScale = clamp(currentScale * factor, this.minScale, this.maxScale);\n\n if (nextScale === currentScale) {\n return false;\n }\n const containerSize = this.containerSize();\n\n if (containerSize.x <= 0 || containerSize.y <= 0) {\n return false;\n }\n zoomView(\n this.engine,\n nextScale - currentScale,\n viewPositionToNDC(center, containerSize),\n );\n this.clampCurrentTranslation(containerSize);\n this.emitChange(center, source);\n\n return true;\n }\n\n /** 释放事件监听器。 */\n dispose (): void {\n for (const listener of this.getListeners('change').slice()) {\n this.off('change', listener);\n }\n }\n\n /**\n * 根据显式配置和修饰键确定导航模式。\n * @param event 滚轮事件\n * @returns 滚轮导航模式\n */\n private classifyWheel (event: InputEventMouseButton): WheelMode {\n // Wheel delta 的数值特征无法稳定区分鼠标和触控板,导航模式只由明确意图决定。\n return event.ctrlPressed\n || event.metaPressed\n || this.config.scrollWheelZoom\n ? 'zoom'\n : 'pan';\n }\n\n /**\n * 将方向型滚轮事件转换为视图位移。\n * @param event 滚轮事件\n * @returns 视图位移\n */\n private normalizeWheel (event: InputEventMouseButton): Vector2 {\n const delta = new Vector2();\n const viewDelta = event.factor * EFFECTS_WHEEL_FACTOR_TO_VIEW_PIXELS;\n\n switch (event.buttonIndex) {\n case MouseButton.WheelUp:\n delta.y = viewDelta;\n\n break;\n case MouseButton.WheelDown:\n delta.y = -viewDelta;\n\n break;\n case MouseButton.WheelLeft:\n delta.x = viewDelta;\n\n break;\n case MouseButton.WheelRight:\n delta.x = -viewDelta;\n\n break;\n }\n\n // Windows 下 Shift + 滚轮映射为水平平移。\n const isApplePlatform = typeof navigator !== 'undefined'\n && /Mac|iPhone|iPad|iPod/.test(navigator.platform);\n\n if (!isApplePlatform && event.shiftPressed && delta.x === 0) {\n delta.x = delta.y;\n delta.y = 0;\n }\n\n return delta;\n }\n\n /**\n * 发出当前视口快照。\n * @param center 操作中心\n * @param source 操作来源\n */\n private emitChange (\n center: Vector2,\n source: ViewportNavigationSource,\n ): void {\n const containerSize = this.containerSize();\n\n this.emit('change', {\n source,\n scale: GizmoViewportUtils.getViewScale(this.engine),\n translation: ndcSizeToViewSize(\n GizmoViewportUtils.getViewportTranslation(this.engine),\n containerSize,\n ),\n center: center.clone(),\n });\n }\n\n /** @returns 当前画布容器尺寸。 */\n private containerSize (): Vector2 {\n return GizmoViewportUtils.getContainerSize(this.engine.canvas.parentElement!);\n }\n\n /** 将当前相机平移收敛到范围内。 */\n private clampCurrentTranslation (containerSize: Vector2): void {\n const current = ndcSizeToViewSize(\n GizmoViewportUtils.getViewportTranslation(this.engine),\n containerSize,\n );\n const bounds = this.translationBounds\n ? getViewportTranslationRange(this.translationBounds, GizmoViewportUtils.getViewScale(this.engine), containerSize)\n : undefined;\n const min = bounds?.min ?? this.minTranslation;\n const max = bounds?.max ?? this.maxTranslation;\n const clamped = new Vector2(\n clamp(current.x, min.x, max.x),\n clamp(current.y, min.y, max.y),\n );\n const correction = clamped.subtract(current);\n\n if (correction.x !== 0 || correction.y !== 0) {\n panView(this.engine, viewSizeToNDC(correction, containerSize));\n }\n }\n\n /** 将当前相机缩放和平移收敛到范围内。 */\n private clampCurrentViewport (): void {\n if (!this.hasViewport()) {\n return;\n }\n const currentScale = GizmoViewportUtils.getViewScale(this.engine);\n const nextScale = clamp(currentScale, this.minScale, this.maxScale);\n\n if (nextScale !== currentScale) {\n zoomView(this.engine, nextScale - currentScale);\n }\n this.clampCurrentTranslation(this.containerSize());\n }\n\n private isTranslationRangeValid (minTranslation: Vector2, maxTranslation: Vector2): boolean {\n return !Number.isNaN(minTranslation.x)\n && !Number.isNaN(minTranslation.y)\n && !Number.isNaN(maxTranslation.x)\n && !Number.isNaN(maxTranslation.y)\n && minTranslation.x <= maxTranslation.x\n && minTranslation.y <= maxTranslation.y;\n }\n\n /** @returns 是否存在可操作的画布容器和相机。 */\n private hasViewport (): boolean {\n return Boolean(\n this.engine.canvas.parentElement\n && this.engine.sceneServer.compositions[0]?.camera,\n );\n }\n\n}\n","import type { VFXItem } from '@galacean/effects';\nimport { Matrix4, type Vector2, Vector3 } from '../math';\nimport { getItemWorldSize } from '../items/item-geometry';\nimport { isFramePlayerItem } from '../items/item-predicates';\n\n/**\n * 调整画板元素(Frame)的尺寸与位置,并同步其子合成 Item 的位移。\n * @param frameItem 画板元素(Frame 空节点控制器)\n * @param worldSize 目标世界尺寸(所属合成坐标系,不受 viewport zoom 影响)\n * @param translation 位移\n * @param initialSize pointer down 时冻结的本地 / 世界尺寸;传入后允许尺寸连续经过 0 并变为负值\n */\nexport function resizeFrameItem (\n frameItem: VFXItem,\n worldSize: Vector2,\n translation: Vector3,\n initialSize?: { localSize: Vector2, worldSize: Vector2 },\n) {\n if (!isFramePlayerItem(frameItem)) {\n console.warn(`Item ${frameItem.getInstanceId()} is not a frame item.`);\n\n return;\n }\n\n // 1. 根据本地尺寸与世界尺寸的比例写回画板尺寸。\n const currentWorldSize = initialSize?.worldSize ?? getItemWorldSize(frameItem);\n const currentLocalSize = initialSize?.localSize ?? frameItem.transform.size;\n const localWidth = currentWorldSize.x === 0\n ? worldSize.x\n : currentLocalSize.x * worldSize.x / currentWorldSize.x;\n const localHeight = currentWorldSize.y === 0\n ? worldSize.y\n : currentLocalSize.y * worldSize.y / currentWorldSize.y;\n\n frameItem.transform.setSize(localWidth, localHeight);\n\n // 2. 将交互位移应用到画板。\n if (translation && (translation.x !== 0 || translation.y !== 0)) {\n const currentPosition = frameItem.transform.position;\n\n frameItem.setPosition(\n currentPosition.x + translation.x,\n currentPosition.y + translation.y,\n currentPosition.z\n );\n }\n\n // 3. 反向补偿子合成元素,保持其世界位置不变。\n const subCompositionItem = frameItem?.children?.[0];\n\n if (subCompositionItem && translation) {\n subCompositionItem.children.forEach(item => {\n const parentMatrix = new Matrix4().copyFrom(item.transform.getParentMatrix() ?? new Matrix4());\n\n parentMatrix.setPosition(new Vector3());\n const result = translation.clone().applyMatrix(parentMatrix.invert()).negate();\n\n item.translate(...result.toArray());\n item.transform.updateLocalMatrix();\n });\n }\n}\n","import type { Control } from '@galacean/effects-plugin-gui';\nimport { type Box2 } from '@galacean/effects-math/es/extension/index';\nimport type { Vector2 } from './math';\nimport { Color, Matrix3, Vector3, getBoxCorners } from './math';\n\n/** 信息标签默认字号。 */\nexport const INFO_TEXT_FONT_SIZE = 14;\n/** 信息标签默认字体。 */\nexport const INFO_TEXT_FONT_FAMILY = 'sans-serif';\n\n/** effects Control 字符 atlas 的固定单边留白。 */\nexport const CONTROL_TEXT_GLYPH_PADDING = 4;\n/** 用于测量字体高度的代表字符。 */\nexport const METRICS_STRING = '|ÉqÅ';\n/** 用于测量字体基线的字符。 */\nexport const BASELINE_SYMBOL = 'M';\n\n/**\n * 颜色缓存:`hex_alpha` → effects Color。键到颜色映射不可变,全局缓存无需清理。\n */\nconst colorCache = new Map<string, Color>();\n\n/**\n * 将十六进制色值 + alpha 转为 effects Color(带全局缓存)。\n * @param hex 0xRRGGBB 颜色\n * @param alpha 透明度 0..1\n * @returns effects Color\n */\nexport function toColor (hex: number, alpha = 1): Color {\n const key = `${hex}_${alpha}`;\n const cached = colorCache.get(key);\n\n if (cached) {\n return cached;\n }\n const color = new Color(\n ((hex >> 16) & 0xff) / 255,\n ((hex >> 8) & 0xff) / 255,\n (hex & 0xff) / 255,\n alpha,\n );\n\n colorCache.set(key, color);\n\n return color;\n}\n\n/**\n * 离屏文本测量上下文,懒加载并复用。\n */\nlet _measureCtx: CanvasRenderingContext2D | null = null;\n\n/** 文本宽度和可见字形边界。 */\nexport type MeasuredTextMetrics = {\n /** 文本宽度。 */\n width: number,\n /** 基线到可见字形顶部的距离。 */\n actualBoundingBoxAscent: number,\n /** 基线到可见字形底部的距离。 */\n actualBoundingBoxDescent: number,\n};\n\n/**\n * 测量文本的宽度与可见字形边界。\n * @param text 文本内容\n * @param fontSize 字号\n * @param fontFamily 字体\n * @param fontWeight 字重\n * @param fontStyle 字体样式\n * @returns 文本测量结果\n */\nexport function measureTextMetrics (\n text: string,\n fontSize = INFO_TEXT_FONT_SIZE,\n fontFamily = INFO_TEXT_FONT_FAMILY,\n fontWeight?: string,\n fontStyle?: string,\n): MeasuredTextMetrics {\n _measureCtx ??= document.createElement('canvas').getContext('2d');\n if (!_measureCtx) {\n return { width: 0, actualBoundingBoxAscent: 0, actualBoundingBoxDescent: 0 };\n }\n _measureCtx.font = `${fontStyle ? `${fontStyle} ` : ''}${fontWeight ? `${fontWeight} ` : ''}${fontSize}px ${fontFamily}`;\n const metrics = _measureCtx.measureText(text);\n\n return {\n width: metrics.width,\n actualBoundingBoxAscent: metrics.actualBoundingBoxAscent ?? 0,\n actualBoundingBoxDescent: metrics.actualBoundingBoxDescent ?? 0,\n };\n}\n\n/**\n * 计算 effects Control.drawText 实际使用的 atlas cell 高度。\n * @param fontSize 字号\n * @param fontFamily 字体\n * @param fontWeight 字重\n * @param fontStyle 字体样式\n * @param resolution 渲染分辨率\n * @returns 字符图集单元格高度\n */\nexport function measureControlTextCellHeight (\n fontSize = INFO_TEXT_FONT_SIZE,\n fontFamily = INFO_TEXT_FONT_FAMILY,\n fontWeight?: string,\n fontStyle?: string,\n resolution = 1,\n): number {\n const safeResolution = Number.isFinite(resolution) && resolution > 0 ? resolution : 1;\n const scaledFontSize = fontSize * safeResolution;\n const metrics = measureTextMetrics(\n METRICS_STRING + BASELINE_SYMBOL,\n scaledFontSize,\n fontFamily,\n fontWeight,\n fontStyle,\n );\n const ascent = metrics.actualBoundingBoxAscent || scaledFontSize * 0.8;\n const descent = metrics.actualBoundingBoxDescent || scaledFontSize * 0.2;\n\n return Math.ceil(ascent + descent + CONTROL_TEXT_GLYPH_PADDING * 2 * safeResolution) / safeResolution;\n}\n\n/**\n * 测量文本宽度(逻辑像素),用于信息标签的溢出判断与右对齐定位。\n * @param text 文本内容\n * @param fontSize 字号\n * @param fontFamily 字体\n * @param fontWeight 字重\n * @returns 文本宽度\n */\nexport function measureTextWidth (\n text: string,\n fontSize = INFO_TEXT_FONT_SIZE,\n fontFamily = INFO_TEXT_FONT_FAMILY,\n fontWeight?: string,\n): number {\n return measureTextMetrics(text, fontSize, fontFamily, fontWeight).width;\n}\n\n/**\n * 单行文本截断:逐字符累加,超出可用宽度时把最后两个字符替换为省略号。\n * @param text 文本内容\n * @param maxWidth 可用宽度\n * @param fontSize 字号\n * @param fontFamily 字体\n * @returns 截断后的文本\n */\nexport function truncateText (text: string, maxWidth: number, fontSize = INFO_TEXT_FONT_SIZE, fontFamily = INFO_TEXT_FONT_FAMILY): string {\n if (measureTextWidth(text, fontSize, fontFamily) <= maxWidth) {\n return text;\n }\n let current = '';\n\n for (const char of text) {\n if (measureTextWidth(current + char, fontSize, fontFamily) > maxWidth) {\n return current.length > 2 ? current.slice(0, -2) + '...' : '...';\n }\n current += char;\n }\n\n return current;\n}\n\n/**\n * 多行逐字符折行:行宽超出 maxWidth 时换行;行数达到 maxLines 时末行用省略号收尾。\n * @param text 文本内容\n * @param maxWidth 单行可用宽度\n * @param maxLines 最大行数\n * @param fontSize 字号\n * @param fontFamily 字体\n * @returns 折行后的文本行数组\n */\nexport function wrapText (text: string, maxWidth: number, maxLines: number, fontSize = INFO_TEXT_FONT_SIZE, fontFamily = INFO_TEXT_FONT_FAMILY): string[] {\n const lines: string[] = [];\n let currentLine = '';\n const chars = text.split('');\n\n for (let i = 0; i < chars.length; i++) {\n const char = chars[i];\n const testLine = currentLine + char;\n\n if (measureTextWidth(testLine, fontSize, fontFamily) > maxWidth) {\n lines.push(currentLine);\n\n if (lines.length >= maxLines) {\n const lastLine = lines[maxLines - 1];\n\n lines[maxLines - 1] = lastLine.length > 2 ? lastLine.slice(0, -2) + '...' : '...';\n\n break;\n }\n\n currentLine = char;\n } else {\n currentLine = testLine;\n }\n\n if (i === chars.length - 1 && currentLine) {\n lines.push(currentLine);\n }\n }\n\n return lines.slice(0, maxLines);\n}\n\n/**\n * 绘制由 4 个角点构成的(可能非正交的)包围盒边框。\n * @param control 绘制控制器\n * @param corners 4 个角点(视图坐标,Y 向下)\n * @param color 边框颜色\n * @param width 线宽\n */\nexport function drawCorners (control: Control, corners: Vector2[], color: Color, width: number): void {\n if (corners.length < 4) {\n return;\n }\n for (let i = 0; i < 4; i++) {\n const start = corners[i];\n const end = corners[(i + 1) % 4];\n\n control.drawLine(start.x, start.y, end.x, end.y, color, width);\n }\n}\n\n/**\n * 绘制虚线包围盒,并在相邻边之间保持连续虚线相位。\n * @param control 绘制控制器\n * @param corners 四个视图角点\n * @param color 虚线颜色\n * @param width 线宽\n * @param dashLength 实线段长度\n * @param gapLength 间隔长度\n */\nexport function drawDashedCorners (\n control: Control,\n corners: Vector2[],\n color: Color,\n width: number,\n dashLength: number,\n gapLength: number,\n): void {\n // 1. 校验角点和虚线参数。\n if (corners.length < 4 || dashLength <= 0 || gapLength < 0) {\n return;\n }\n\n const patternLength = dashLength + gapLength;\n let perimeterOffset = 0;\n\n // 2. 逐边计算虚线相位,并继承上一条边的周长偏移。\n for (let i = 0; i < 4; i++) {\n const start = corners[i];\n const end = corners[(i + 1) % 4];\n const dx = end.x - start.x;\n const dy = end.y - start.y;\n const edgeLength = Math.hypot(dx, dy);\n\n if (edgeLength <= Number.EPSILON) {\n continue;\n }\n\n let edgeOffset = 0;\n\n while (edgeOffset < edgeLength) {\n const patternOffset = perimeterOffset % patternLength;\n const drawingDash = gapLength === 0 || patternOffset < dashLength;\n const phaseRemaining = drawingDash\n ? dashLength - patternOffset\n : patternLength - patternOffset;\n const segmentLength = Math.min(phaseRemaining, edgeLength - edgeOffset);\n\n // 3. 仅绘制当前相位中的实线段。\n if (drawingDash && segmentLength > Number.EPSILON) {\n const startRatio = edgeOffset / edgeLength;\n const endRatio = (edgeOffset + segmentLength) / edgeLength;\n\n control.drawLine(\n start.x + dx * startRatio,\n start.y + dy * startRatio,\n start.x + dx * endRatio,\n start.y + dy * endRatio,\n color,\n width,\n );\n }\n\n edgeOffset += segmentLength;\n perimeterOffset += segmentLength;\n }\n }\n}\n\n/**\n * 绘制包围盒边框(沿 4 个角点连边)。\n * @param control 绘制控制器\n * @param box 包围盒(视图坐标,Y 向下)\n * @param color 边框颜色\n * @param width 线宽\n */\nexport function drawBox (control: Control, box: Box2, color: Color, width: number): void {\n if (box.isEmpty()) {\n return;\n }\n drawCorners(control, getBoxCorners(box), color, width);\n}\n\n/**\n * 填充轴对齐包围盒(实心矩形)。\n * @param control 绘制控制器\n * @param box 包围盒(视图坐标,Y 向下)\n * @param color 填充颜色\n */\nexport function fillBox (control: Control, box: Box2, color: Color): void {\n if (box.isEmpty()) {\n return;\n }\n const size = box.getSize();\n\n control.fillRect(box.min.x, box.min.y, size.x, size.y, color);\n}\n\n/**\n * 用两个三角形填充 Box2 四角区域。\n * @param control 绘制控件\n * @param corners Box2 四角快照\n * @param color 填充颜色\n */\nexport function fillBoxByCorners (control: Control, corners: Vector2[], color: Color): void {\n if (corners.length !== 4) {\n return;\n }\n const [a, b, c, d] = corners;\n\n control.fillTriangle(a.x, a.y, b.x, b.y, c.x, c.y, color);\n control.fillTriangle(a.x, a.y, c.x, c.y, d.x, d.y, color);\n}\n\n/**\n * 构造沿局部轴展开的旋转矩形角点。\n * @param center 矩形中心(视图坐标)\n * @param xAxis 局部 X 轴单位向量(视图坐标,宽方向)\n * @param yAxis 局部 Y 轴单位向量(视图坐标,高方向)\n * @param halfWidth 半宽(沿 xAxis,视图像素)\n * @param halfHeight 半高(沿 yAxis,视图像素)\n * @returns 4 个角点(视图坐标,环绕顺序)\n */\nexport function getRotatedBoxCorners (\n center: Vector2,\n xAxis: Vector2,\n yAxis: Vector2,\n halfWidth: number,\n halfHeight: number,\n): Vector2[] {\n const halfW = xAxis.clone().multiply(halfWidth);\n const halfH = yAxis.clone().multiply(halfHeight);\n\n return [\n center.clone().subtract(halfW).subtract(halfH),\n center.clone().add(halfW).subtract(halfH),\n center.clone().add(halfW).add(halfH),\n center.clone().subtract(halfW).add(halfH),\n ];\n}\n\n/**\n * 填充沿局部轴展开的旋转矩形。\n * @param control 绘制控制器\n * @param center 矩形中心(视图坐标)\n * @param xAxis 局部 X 轴单位向量(视图坐标,宽方向)\n * @param yAxis 局部 Y 轴单位向量(视图坐标,高方向)\n * @param width 宽(沿 xAxis,视图像素)\n * @param height 高(沿 yAxis,视图像素)\n * @param color 填充颜色\n */\nexport function fillRotatedRect (\n control: Control,\n center: Vector2,\n xAxis: Vector2,\n yAxis: Vector2,\n width: number,\n height: number,\n color: Color,\n): void {\n const ex = xAxis.clone();\n const ey = yAxis.clone();\n const anchor = center.clone();\n\n drawWithBoxTransform(control, anchor, ex, ey, () => {\n control.fillRect(-width / 2, -height / 2, width, height, color);\n });\n}\n\n/**\n * 在由锚点和两个基向量定义的局部坐标系内执行绘制。\n * @param control 绘制控制器\n * @param anchor Control 绘制空间锚点(局部原点)\n * @param ex 局部 X 轴基向量(单位向量)\n * @param ey 局部 Y 轴基向量(单位向量)\n * @param drawFn 在局部坐标系内执行的绘制\n */\nexport function drawWithBoxTransform (control: Control, anchor: Vector2, ex: Vector2, ey: Vector2, drawFn: () => void): void {\n const graphics = control.engine.renderingServer.graphics;\n // 列优先:第一列 = ex,第二列 = ey,第三列 = anchor(平移)\n const matrix = Matrix3.fromColumnVectors(\n new Vector3(ex.x, ex.y, 0),\n new Vector3(ey.x, ey.y, 0),\n new Vector3(anchor.x, anchor.y, 1),\n );\n\n graphics.pushTransform(matrix);\n drawFn();\n graphics.popTransform();\n}\n","import type { VFXItem } from '@galacean/effects';\nimport { MouseButton, MouseButtonMask, spec, TextComponent, Texture, type InputEventKey, type InputEventMouseButton, type InputEventMouseMotion } from '@galacean/effects';\nimport type { Control } from '@galacean/effects-plugin-gui';\nimport type { Plane } from '@galacean/effects-math/es/extension/index';\nimport { Box2, Circle, Line2, roundNumber } from '@galacean/effects-math/es/extension/index';\nimport type { Matrix3 } from '../../math';\nimport { Euler, EulerOrder, Vector2, Vector3, Matrix4, isEqual, RAD2DEG, Quaternion, getBoxCorners, getBoxTransform, getBoxTransformFromBox, getTransformedBoxCorners, getVector2Angle, transformBoxPoint, transformedBoxContainsPoint } from '../../math';\nimport { Gizmo } from '../../gizmo';\nimport { GizmoViewportUtils } from '../../viewport/viewport-utils';\nimport type { GizmoOwner } from '../../gizmo-owner';\nimport { GizmoType } from '../../gizmo-type';\nimport { GestureCursorType, type GestureCursorResult } from '../../cursor';\nimport {\n calculateAnchoredResize,\n type AnchoredResizeGeometry,\n type AnchoredResizeResult,\n} from './anchored-resize';\nimport type { ResizeSelectionBehavior, ResizeSelectionConfig } from '../../configs/types';\nimport { resizeSelectionConfig } from '../../configs/builtin-configs';\nimport type { ConfigChange } from '../../configs/config-definition';\nimport {\n createInteractionPlane,\n viewPositionToWorld,\n} from '../../viewport';\nimport { resizeFrameItem } from '../../frame/frame-resize';\nimport {\n decomposeItemTransform,\n getItemViewAnchor,\n getItemViewBox,\n getItemViewTransform,\n getItemWorldSize,\n isEffectsPlayerItem,\n isFramePlayerItem,\n isGeneratorPlayerItem,\n isGroupPlayerItem,\n isVideoGeneratorPlayerItem,\n} from '../../items';\nimport {\n INFO_TEXT_FONT_SIZE,\n INFO_TEXT_FONT_FAMILY,\n toColor,\n measureControlTextCellHeight,\n measureTextWidth,\n truncateText,\n drawCorners,\n drawWithBoxTransform,\n fillRotatedRect,\n getRotatedBoxCorners,\n} from '../../drawing';\nimport { TransformType } from './transform-types';\n\n/** 单选信息标签的元素图标类型。 */\nexport enum ResizeSelectionIconType {\n /** 图片。 */\n IMAGE = 'image',\n /** 组合。 */\n GROUP = 'group',\n /** 文本。 */\n TEXT = 'text',\n /** 视频。 */\n VIDEO = 'video',\n /** 动效。 */\n EFFECTS = 'effects',\n /** 画板。 */\n FRAME = 'frame',\n /** 不显示图标。 */\n NULL = 'null',\n}\n\n/** 文本缩放开始时冻结的排版属性。 */\ntype TextResizeSnapshot = {\n /** 文本组件。 */\n component: TextComponent,\n /** 文本缩放模式。 */\n mode: 'font' | 'width',\n /** 初始字号。 */\n fontSize: number,\n /** 初始字体宽度偏移。 */\n fontOffset: number,\n /** 初始行高。 */\n lineHeight: number,\n /** 初始排版宽度。 */\n width: number,\n /** 初始排版高度。 */\n height: number,\n};\n\n/** 按下时冻结、用于计算绝对缩放结果的会话。 */\ntype AnchoredResizeSession = {\n /** 被缩放元素。 */\n item: VFXItem,\n /** 手柄类型。 */\n handleKind: 'edge' | 'corner',\n /** 世界空间缩放几何。 */\n geometry: AnchoredResizeGeometry,\n /** 初始手柄视口位置。 */\n initialHandleView: Vector2,\n /** 固定点视口位置。 */\n fixedPointView: Vector2,\n /** 指针到真实手柄的初始偏移。 */\n pointerToHandleView: Vector2,\n /** 初始局部位置。 */\n initialPosition: Vector3,\n /** 初始局部缩放。 */\n initialScale: Vector3,\n /** 父级世界坐标到局部坐标的旋转矩阵。 */\n parentWorldToLocal: Matrix4,\n /** 画板初始世界尺寸。 */\n initialWorldSize?: Vector2,\n /** 画板初始局部尺寸。 */\n initialLocalSize?: Vector2,\n /** 文本排版快照。 */\n text?: TextResizeSnapshot,\n /** 画板已应用的累计位移。 */\n frameAppliedTranslation: Vector3,\n /** 本次元素采用整体缩放或排版尺寸调整。 */\n resizeBehavior?: ResizeSelectionBehavior,\n /** 上一帧由 Gizmo 写入的位置,用于识别自动布局产生的外部位移。 */\n lastAppliedPosition?: Vector3,\n /** 拖拽期间由外部布局累计写入的位置修正。 */\n externalTranslation?: Vector3,\n};\n\n/** 缩放角点的桌面端命中区域边长;视觉手柄仍由 scaleCircleSize 控制。 */\nexport const SCALE_CORNER_HIT_SIZE = 14;\n\n/** 单选信息标签中的类型图标尺寸。 */\nconst INFO_ICON_SIZE = 15;\n\n/** 信息文字的字形视觉位置高于字号框,单独下移以对齐图标。 */\nconst INFO_TEXT_BOTTOM = 1;\n\n/** 图标相对选框顶边的底部偏移。 */\nconst INFO_ICON_BOTTOM = 5.5;\n\n/** 将公开的缩放行为转换为几何计算使用的可变轴。 */\nfunction getResizeAxis (behavior: ResizeSelectionBehavior): 'both' | 'x' | 'y' {\n return behavior === 'resize-x' ? 'x' : behavior === 'resize-y' ? 'y' : 'both';\n}\n\n/** 缩放选区 Gizmo 的交互配置。 */\nexport type ResizeSelectionGizmoOptions = {\n /** 是否允许缩放;关闭时仍绘制选区线框。 */\n interactive?: boolean,\n};\n\n/** 绘制选区线框,并通过边与角点手柄缩放选中元素。 */\nexport class ResizeSelectionGizmo extends Gizmo {\n readonly type: GizmoType = GizmoType.RESIZE_SELECTION;\n\n /** 光标结果。 */\n cursorResult: GestureCursorResult = {\n type: GestureCursorType.NORMAL,\n angle: 0,\n };\n\n /** 当前光标视图坐标,用于绘制指针与变换原点,每 mousemove 更新。 */\n cursorPoint: Vector2 = new Vector2();\n\n /** ResizeSelection 手柄上一帧的 Control 本地坐标,用于缩放位移增量计算。 */\n lastPoint: Vector2 = new Vector2();\n\n /** 变换框线框数据。 */\n wireframe: ResizeSelectionWireframe;\n\n /** 交互类型。 */\n activeType: TransformType = TransformType.NULL;\n\n /** 上一帧鼠标射线碰撞位置。 */\n lastWorldPosition: Vector3 = new Vector3();\n\n /** 是否为锁定比例缩放。 */\n _isLockScale = true;\n\n /** 当前交互平面,initInteractionPlane 写入。 */\n interactionPlane: Plane;\n private configOff?: () => void;\n\n /** 边与角点共用一次绝对缩放快照。 */\n private resizeSession: AnchoredResizeSession | undefined;\n\n /** ResizeSelection 自身的缩放手柄是否持有输入;移动与角旋转由独立行为持有。 */\n private handlesActive = false;\n\n /** 是否忽略所有交互。 */\n private _ignoreInteraction = false;\n\n /** 当前单选元素的图标类型。 */\n private iconType: ResizeSelectionIconType;\n\n /** 类型图标纹理缓存(懒加载,URL 变化时刷新)。 */\n private iconTextures = new Map<ResizeSelectionIconType, Texture>();\n\n /** 类型图标纹理加载中的 Promise,避免重复发起加载。 */\n private iconTexturePromises = new Map<ResizeSelectionIconType, Promise<Texture>>();\n\n /** 缩放开关。 */\n private scaleEnabled = true;\n\n /** 是否允许当前 Gizmo 接收缩放输入。 */\n private readonly interactionEnabled: boolean;\n\n /**\n * 创建选区缩放 Gizmo 并监听配置变化。\n * @param owner Gizmo 宿主。\n * @param options 缩放交互配置。\n */\n constructor (owner: GizmoOwner, options: ResizeSelectionGizmoOptions = {}) {\n super(owner);\n this.interactionEnabled = options.interactive !== false;\n this.configOff = owner.getConfigManager().onChange(\n resizeSelectionConfig,\n change => {\n this.onConfigChange(change);\n },\n );\n\n this.wireframe = {\n edges: [],\n transform: undefined,\n anchor: new Vector2(),\n scaleCorners: [],\n widthScaleAreas: [],\n interactive: true,\n cornerEnable: true,\n box: new Box2(),\n totalBox: new Box2(),\n childrenTransforms: [],\n activeType: TransformType.NULL,\n interactiveDirection: new Vector2(),\n scaleCorner: new Vector2(),\n scaleEdgeCorners: [],\n };\n }\n\n /** 选中的元素列表(直读 selection)。 */\n get selectedItems (): VFXItem[] {\n return this._owner.getSelection().getSelectedPlayerItems();\n }\n\n /** 当前选区缩放配置。 */\n get config (): Readonly<ResizeSelectionConfig> {\n return this._owner.getConfigManager().get(resizeSelectionConfig);\n }\n\n /** 取是否锁定比例缩放。 */\n get isLockScale () {\n return this._isLockScale;\n }\n\n /**\n * 设置锁定比例缩放开关。\n * @param state 是否锁定比例。\n */\n set isLockScale (state: boolean) {\n if (state === this.isLockScale) {\n return;\n }\n\n this._isLockScale = state;\n }\n\n /** 取当前视口矩阵的水平缩放系数。 */\n get viewScale (): number {\n const viewportMatrix = this._owner.getEngine().sceneServer.compositions[0].camera.getViewportMatrix();\n const scale = new Vector3();\n\n viewportMatrix.decompose(new Vector3(), new Quaternion(), scale);\n\n return viewportMatrix.elements[0];\n }\n\n /** 取是否忽略所有交互。 */\n get ignoreInteraction () {\n return this._ignoreInteraction;\n }\n\n /**\n * 设置是否忽略交互,并同步角点可用状态。\n * @param state 是否忽略交互。\n */\n set ignoreInteraction (state: boolean) {\n if (state === this._ignoreInteraction) {\n return;\n }\n\n this._ignoreInteraction = state;\n this.wireframe.cornerEnable = state;\n }\n\n /**\n * 忽略键盘按下,修饰键状态由鼠标事件提供。\n * @param _keyCode 键盘按下事件。\n */\n override onKeyDown (_keyCode: InputEventKey): void {\n // 修饰键状态由鼠标事件提供。\n }\n\n /**\n * 忽略键盘抬起,修饰键状态由鼠标事件提供。\n * @param _keyCode 键盘抬起事件。\n */\n override onKeyUp (_keyCode: InputEventKey): void {\n // 修饰键状态由鼠标事件提供。\n }\n\n /**\n * 更新缩放手柄拖拽或悬停命中状态。\n * @param event 鼠标移动事件。\n */\n override onMouseMove (event: InputEventMouseMotion): void {\n if (!this.isApplicableSelection()) {\n if (!this.handlesActive) {\n this.clearHandleHover();\n }\n\n return;\n }\n if (this.handlesActive) {\n const handled = this.updateHandleDrag(event);\n\n this._owner.setCursor(this.cursorResult);\n if (handled) {\n event.accept();\n }\n\n return;\n }\n const hover = this._owner.getMousePosition();\n\n this.refreshTransformType(hover);\n this.refreshCursorResult(this.activeType, getVector2Angle(this.wireframe.interactiveDirection));\n this._owner.setCursor(this.cursorResult);\n if (event.buttonMask === MouseButtonMask.None\n && (this.activeType === TransformType.SCALE\n || this.activeType === TransformType.WIDTH_SCALE)) {\n event.accept();\n }\n }\n\n /**\n * 继续当前缩放手柄拖拽。\n * @param event 鼠标拖拽事件。\n */\n override onMouseDrag (event: InputEventMouseMotion): void {\n if (!this.isApplicableSelection() || !this.handlesActive) {\n return;\n }\n const handled = this.updateHandleDrag(event);\n\n this._owner.setCursor(this.cursorResult);\n if (handled) {\n event.accept();\n }\n }\n\n /** 鼠标离开交互层时清除非拖拽状态下的手柄命中与光标。 */\n override onMouseLeave (): void {\n if (!this.isApplicableSelection()) {\n if (!this.handlesActive) {\n this.clearHandleHover();\n }\n\n return;\n }\n if (this.handlesActive) {\n this._owner.setCursor(this.cursorResult);\n\n return;\n }\n this.clearHandleHover();\n }\n\n /**\n * 命中缩放手柄时开始变换会话。\n * @param event 鼠标按下事件。\n */\n override onMouseDown (event: InputEventMouseButton): void {\n // 步骤 1:校验选区、按键与点击次数。\n if (!this.isApplicableSelection()) {\n return;\n }\n if (event.buttonIndex !== MouseButton.Left) {\n return;\n }\n this.cursorPoint = new Vector2(event.position.x, event.position.y);\n\n if (event.doubleClick) {\n return;\n }\n\n // 步骤 2:刷新线框并解析按下位置的手柄类型。\n this.refreshWireframeBySelectedItems();\n this.refreshTransformType(this.cursorPoint);\n this.refreshCursorResult(this.activeType, getVector2Angle(this.wireframe.interactiveDirection));\n this._owner.setCursor(this.cursorResult);\n\n if (this.activeType === TransformType.NULL || this.activeType === TransformType.TRANSLATION) {\n return;\n }\n\n // 步骤 3:准备当前选区的吸附目标。\n this._owner.getSnapManager().reset();\n if (\n this._owner.getSnapManager().enabled\n && (this.activeType === TransformType.SCALE || this.activeType === TransformType.WIDTH_SCALE)\n ) {\n const containerSize = GizmoViewportUtils.getContainerSize(this._owner.getEngine().canvas.parentElement!);\n const composition = this._owner.getEngine().sceneServer.compositions[0];\n\n this._owner.getSnapManager().cacheSnapTargetsForSelection(\n composition?.items ?? [],\n this.selectedItems,\n containerSize,\n );\n }\n\n // 步骤 4:冻结缩放快照并通知宿主交互开始。\n this.lastPoint = new Vector2(event.position.x, event.position.y);\n this.handlesActive = true;\n this.beginTransformOperation();\n this._owner.emit('actionstart', {\n source: this,\n transformType: this.wireframe.activeType,\n });\n event.accept();\n }\n\n /**\n * 结束当前缩放手柄拖拽。\n * @param event 鼠标抬起事件。\n */\n override onMouseUp (event: InputEventMouseButton): void {\n if (this.handlesActive && this.finishHandleDrag(event)) {\n event.accept();\n }\n }\n\n /**\n * 刷新指针结果。\n * @param activeType 交互类型\n * @param angle 指针角度\n */\n refreshCursorResult (activeType: TransformType, angle = 0) {\n switch (activeType) {\n case TransformType.SCALE: {\n this.cursorResult = {\n type: GestureCursorType.SCALE,\n angle: (angle + Math.PI / 4) * RAD2DEG,\n };\n\n break;\n }\n case TransformType.WIDTH_SCALE: {\n this.cursorResult = {\n type: GestureCursorType.SCALE,\n angle: (angle + Math.PI / 4) * RAD2DEG,\n };\n\n break;\n }\n case TransformType.TRANSLATION:\n case TransformType.ROTATION:\n case TransformType.NULL: {\n this.cursorResult = {\n type: GestureCursorType.NORMAL,\n angle: 0,\n };\n\n break;\n }\n }\n }\n\n /** 在每帧更新时刷新选区线框及失效的光标状态。 */\n override onUpdate () {\n const lastActiveType = this.wireframe.activeType;\n\n this.refreshWireframeBySelectedItems();\n if (lastActiveType !== this.wireframe.activeType) {\n this.refreshCursorResult(this.wireframe.activeType);\n }\n }\n\n /**\n * 根据鼠标点位置判定当前交互类型(缩放/平移),\n * 并写入 activeType 与线框的交互方向、缩放角点;未命中则置 NULL。\n * @param point 视口坐标\n */\n refreshTransformType (point: Vector2) {\n // 步骤 1:重置当前命中状态。\n this.activeType = TransformType.NULL;\n this.wireframe.interactiveDirection = new Vector2();\n this.wireframe.scaleCorner = undefined;\n this.wireframe.scaleEdgeCorners = undefined;\n\n // 步骤 2:解析指针对应的变换类型。\n const type = this.computeTransformType(point);\n\n if (type === TransformType.NULL) {\n return;\n }\n\n this.activeType = type;\n this.wireframe.activeType = type;\n\n // 步骤 3:记录宽度手柄或缩放角点的交互方向。\n if (type === TransformType.WIDTH_SCALE) {\n const widthScaleArea = this.wireframe.widthScaleAreas.find(area => transformedBoxContainsPoint(area, point));\n\n if (widthScaleArea) {\n const center = transformBoxPoint(widthScaleArea, new Vector2(0.5, 0.5));\n\n this.wireframe.scaleCorner = center;\n this.wireframe.interactiveDirection.copyFrom(center).subtract(this.wireframe.box.getCenter());\n }\n } else if (type === TransformType.SCALE) {\n const scaleCorner = this.findScaleCorner(point);\n\n if (scaleCorner) {\n this.wireframe.scaleCorner = scaleCorner.center.clone();\n this.wireframe.interactiveDirection.copyFrom(scaleCorner.center).subtract(this.wireframe.box.getCenter());\n }\n if (!this.wireframe.scaleCorner) {\n const edge = this.findScaleEdge(point, this.isSingleTextSelection());\n\n if (edge) {\n const edgeCenter = edge.getCenter();\n\n this.wireframe.scaleCorner = edgeCenter;\n this.wireframe.scaleEdgeCorners = [edge.start.clone(), edge.end.clone()];\n this.wireframe.interactiveDirection.copyFrom(edgeCenter).subtract(this.wireframe.box.getCenter());\n }\n }\n }\n }\n\n /**\n * 根据选中元素刷新变换线框:计算包围盒、子元素盒与缩放角点;\n * 单选时根据元素类型决定图标类型;成组不生成缩放角点。\n */\n refreshWireframeBySelectedItems () {\n // 步骤 1:解析选区类型并重置线框数据。\n const { selectedItems, scaleEnabled } = this;\n const isSingleText = selectedItems.length === 1 && selectedItems[0].type === spec.ItemType.text;\n const transformEnabled = this.interactionEnabled && !this.hasLoadingSelection(selectedItems);\n\n this.iconType = selectedItems.length === 1\n ? this.getIconType(selectedItems[0])\n : ResizeSelectionIconType.NULL;\n\n const box = new Box2();\n let transform: Matrix3 | undefined;\n\n this.wireframe.edges = [];\n this.wireframe.transform = undefined;\n this.wireframe.scaleCorners = [];\n this.wireframe.widthScaleAreas = [];\n this.wireframe.childrenTransforms = [];\n\n this.wireframe.cornerEnable = scaleEnabled && transformEnabled;\n this.wireframe.interactive = transformEnabled;\n if (!transformEnabled) {\n this.activeType = TransformType.NULL;\n this.wireframe.activeType = TransformType.NULL;\n }\n\n // 步骤 2:计算单选或多选包围盒、锚点和子元素轮廓。\n const containerSize = GizmoViewportUtils.getContainerSize(this._owner.getEngine().canvas.parentElement!);\n\n if (selectedItems.length > 1) {\n selectedItems.forEach(item => {\n if (item.isVisible) {\n const itemBox = getItemViewBox(item, containerSize);\n const itemTransform = getItemViewTransform(item, containerSize);\n\n if (!itemBox.isEmpty()) {\n box.union(itemBox);\n }\n if (itemTransform) {\n this.wireframe.childrenTransforms.push(itemTransform);\n }\n }\n });\n\n transform = getBoxTransformFromBox(box);\n this.wireframe.anchor = box.getCenter();\n this.wireframe.interactive = transformEnabled;\n } else if (selectedItems.length === 1) {\n const item = selectedItems[0];\n\n if (item.isVisible) {\n transform = getItemViewTransform(item, containerSize);\n box.copyFrom(getItemViewBox(item, containerSize));\n\n this.wireframe.anchor = isSingleText\n ? box.getCenter()\n : getItemViewAnchor(item, containerSize) ?? box.getCenter();\n }\n }\n\n const isBoxEmpty = box.isEmpty();\n const boxExpandScalar = isBoxEmpty || isSingleText ? 0 : 1;\n const totalBoxExpandScalar = isBoxEmpty ? 0 : 16;\n\n this.wireframe.activeType = !selectedItems.length ? TransformType.NULL : this.wireframe.activeType;\n\n this.wireframe.box.copyFrom(box).expandByScalar(boxExpandScalar);\n this.wireframe.totalBox.copyFrom(box).expandByScalar(totalBoxExpandScalar);\n this.wireframe.transform = transform;\n const points = transform ? getTransformedBoxCorners(transform) : undefined;\n\n // 步骤 3:根据最终包围盒创建四条边。\n points?.forEach((point, i) => {\n this.wireframe.edges.push(new Line2(point.clone(), points[(i + 1) % 4].clone()));\n });\n\n // 步骤 4:为单选文本创建宽度命中带,并为单选元素创建角点手柄。\n if (selectedItems.length === 1 && transformEnabled) {\n const { scaleCircleSize } = this.config;\n\n if (isSingleText) {\n const boxCorners = points;\n\n if (!boxCorners) {\n return;\n }\n // 左右命中带沿竖边展开,长度应取文本框高度,不能取宽度。\n const edgeLen = boxCorners[1].distance(boxCorners[2]);\n\n if (edgeLen > SCALE_CORNER_HIT_SIZE) {\n const { xAxis, yAxis } = this.boxLocalAxes();\n const halfLen = edgeLen / 2 - SCALE_CORNER_HIT_SIZE / 2;\n /**\n * 创建文本宽度边的命中区域。\n * @param mid 边中点。\n * @returns 旋转后的命中包围盒。\n */\n const buildEdgeHit = (mid: Vector2): Matrix3 | undefined => (\n getBoxTransform(getRotatedBoxCorners(mid, xAxis, yAxis, 4, halfLen))\n );\n const areas = [\n buildEdgeHit(new Line2(boxCorners[1], boxCorners[2]).at(0.5)),\n buildEdgeHit(new Line2(boxCorners[3], boxCorners[0]).at(0.5)),\n ];\n\n this.wireframe.widthScaleAreas = areas.filter((area): area is Matrix3 => !!area);\n }\n }\n\n points?.forEach(point => {\n this.wireframe.scaleCorners.push(new Circle(point, scaleCircleSize));\n });\n }\n }\n\n /**\n * 初始化当前变换的交互平面与缩放会话。\n * @param viewportPoint 指针视口坐标。\n */\n initInteractionPlane (viewportPoint: Vector2) {\n // 步骤 1:读取选中元素并按变换类型分流。\n const { selectedItems } = this;\n\n switch (this.wireframe.activeType) {\n case TransformType.SCALE: {\n // 步骤 2:为边或角点缩放冻结固定点与初始手柄。\n const selectedItem = selectedItems[0];\n\n if (!selectedItem) {\n this.resizeSession = undefined;\n\n break;\n }\n const { scaleCorner, scaleEdgeCorners } = this.wireframe;\n const itemTransform = decomposeItemTransform(selectedItem);\n const anchor = new Vector3().copyFrom(selectedItem.transform.anchor).applyMatrix(itemTransform.matrix);\n\n this.interactionPlane = createInteractionPlane(itemTransform.position, itemTransform.rotation);\n if (scaleEdgeCorners?.length === 2) {\n const initialHandleView = new Line2(scaleEdgeCorners[0], scaleEdgeCorners[1]).getCenter();\n const fixedPointView = this.oppositeScaleEdgeCenter(scaleEdgeCorners);\n\n this.resizeSession = fixedPointView\n ? this.createAnchoredResizeSession(\n selectedItem,\n itemTransform.matrix,\n anchor,\n viewportPoint,\n initialHandleView,\n fixedPointView,\n 'edge',\n )\n : undefined;\n } else if (scaleCorner) {\n const fixedPointView = this.oppositeScaleCorner(scaleCorner);\n\n this.resizeSession = fixedPointView\n ? this.createAnchoredResizeSession(\n selectedItem,\n itemTransform.matrix,\n anchor,\n viewportPoint,\n scaleCorner,\n fixedPointView,\n 'corner',\n )\n : undefined;\n } else {\n this.resizeSession = undefined;\n }\n\n break;\n }\n case TransformType.TRANSLATION: {\n // 步骤 3:为平移创建世界 XY 平面。\n this.interactionPlane = createInteractionPlane(new Vector3(), new Euler(0, 0, 0, EulerOrder.XYZ));\n\n break;\n }\n case TransformType.WIDTH_SCALE: {\n // 步骤 4:为文本宽度缩放冻结左右边几何。\n const selectedItem = selectedItems[0];\n const itemTransform = decomposeItemTransform(selectedItem);\n const anchor = new Vector3().copyFrom(selectedItem.transform.anchor).applyMatrix(itemTransform.matrix);\n const edge = this.draggedWidthEdge(this.wireframe.box.getCenter(), this.wireframe.interactiveDirection);\n\n this.interactionPlane = createInteractionPlane(itemTransform.position, itemTransform.rotation);\n const fixedPointView = edge\n ? this.oppositeScaleEdgeCenter([edge.start, edge.end])\n : undefined;\n\n this.resizeSession = edge && fixedPointView\n ? this.createAnchoredResizeSession(\n selectedItem,\n itemTransform.matrix,\n anchor,\n viewportPoint,\n edge.getCenter(),\n fixedPointView,\n 'edge',\n 'width',\n )\n : undefined;\n\n break;\n }\n }\n }\n\n /**\n * 绘制选区线框、缩放手柄与单选信息标签。\n * @param control 绘制控制器。\n */\n override draw (control: Control) {\n // 步骤 1:校验线框与当前选区变换状态。\n if (this.wireframe.box.isEmpty()) {\n return;\n }\n\n if (this._owner.getSelectionTransformKind() === 'move') {\n return;\n }\n\n // 步骤 2:读取绘制配置并绘制主线框与子元素轮廓。\n const {\n wireframeAlpha,\n wireframeColor,\n wireframeWidth,\n cornerFillColor,\n cornerLineWidth,\n cornerLineColor,\n cornerLineAlpha,\n infoShowEnabled,\n sizeTextColor,\n nameTextColor,\n } = this.config;\n\n const wireColor = toColor(wireframeColor, wireframeAlpha);\n\n this.wireframe.edges.forEach(edge => {\n control.drawLine(edge.start.x, edge.start.y, edge.end.x, edge.end.y, wireColor, wireframeWidth);\n });\n\n this.wireframe.childrenTransforms.forEach(childTransform => {\n drawCorners(control, getTransformedBoxCorners(childTransform), wireColor, wireframeWidth);\n });\n\n // 步骤 3:沿选框局部轴绘制方形缩放手柄。\n if (this.wireframe.cornerEnable) {\n const fillColor = toColor(cornerFillColor, 1);\n const strokeColor = toColor(cornerLineColor, cornerLineAlpha);\n const { xAxis, yAxis } = this.boxLocalAxes();\n\n this.wireframe.scaleCorners.forEach(corner => {\n const half = corner.radius;\n\n fillRotatedRect(control, corner.center, xAxis, yAxis, half * 2, half * 2, fillColor);\n drawCorners(control, getRotatedBoxCorners(corner.center, xAxis, yAxis, half, half), strokeColor, cornerLineWidth);\n });\n }\n\n // 步骤 4:为非文本单选元素绘制信息标签。\n const isSingleTextSelection = this.selectedItems.length === 1\n && this.selectedItems[0].type === spec.ItemType.text;\n\n if (this.selectedItems.length === 1 && infoShowEnabled && !isSingleTextSelection) {\n this.renderItemInfo(control, sizeTextColor, nameTextColor);\n }\n }\n\n /** 释放配置监听器。 */\n override dispose (): void {\n this.configOff?.();\n this.configOff = undefined;\n super.dispose();\n }\n\n /** @returns 当前是否存在可操作的选中元素。 */\n private isApplicableSelection (): boolean {\n const selectedItems = this.selectedItems;\n\n return selectedItems.length >= 1 && !this.hasLoadingSelection(selectedItems);\n }\n\n /** @returns 当前选区是否包含处于 loading 状态的元素。 */\n private hasLoadingSelection (items = this.selectedItems): boolean {\n const loadingManager = this._owner.getLoadingManager();\n\n return items.some(item => loadingManager.get(item.getInstanceId()) !== undefined);\n }\n\n /** 清除缩放手柄悬停状态并恢复默认光标。 */\n private clearHandleHover (): void {\n this.activeType = TransformType.NULL;\n this.wireframe.activeType = TransformType.NULL;\n this.wireframe.interactiveDirection = new Vector2();\n this.wireframe.scaleCorner = undefined;\n this.wireframe.scaleEdgeCorners = undefined;\n this.refreshCursorResult(TransformType.NULL);\n this._owner.setCursor(this.cursorResult);\n }\n\n /**\n * 根据指针位移更新缩放手柄交互。\n * @param event 鼠标拖拽事件。\n * @returns 是否处理了拖拽。\n */\n private updateHandleDrag (event: InputEventMouseMotion): boolean {\n if (!this.handlesActive) {\n return false;\n }\n\n const currentPoint = new Vector2(event.position.x, event.position.y);\n const shift = new Vector2().subtractVectors(currentPoint, this.lastPoint);\n\n if (!this.wireframe.interactive || shift.length() <= 0) {\n return true;\n }\n\n this._owner.setSelectionTransformKind('resize');\n const { activeType, interactiveDirection } = this.wireframe;\n\n let cursorRotation = 0;\n\n switch (activeType) {\n case TransformType.SCALE:\n cursorRotation = this.handleScale(shift, interactiveDirection, event);\n\n break;\n case TransformType.WIDTH_SCALE:\n cursorRotation = this.handleWidthScale(shift, interactiveDirection, event);\n\n break;\n }\n\n this.refreshCursorResult(activeType, cursorRotation);\n this.lastPoint.copyFrom(currentPoint);\n this._owner.emit('actionupdate', {\n source: this,\n transformType: this.wireframe.activeType,\n });\n\n return true;\n }\n\n /** 初始化一次变换算法需要的视口交互平面;事件由持有输入会话的 Gizmo 发出。 */\n private beginTransformOperation (): void {\n const viewportPoint = this.cursorPoint.clone();\n\n this.initInteractionPlane(viewportPoint);\n this.lastWorldPosition = viewPositionToWorld(viewportPoint, GizmoViewportUtils.getCameraInfo(this._owner.getEngine()), this.interactionPlane, GizmoViewportUtils.getContainerSize(this._owner.getEngine().canvas.parentElement!)) ?? new Vector3();\n }\n\n /** 清理一次变换算法运行态,不改写当前线框命中类型。 */\n private resetTransformOperation (): void {\n if (this._owner.getSelectionTransformKind() === 'resize') {\n this._owner.setSelectionTransformKind('idle');\n }\n this.handlesActive = false;\n this._owner.getSnapManager().reset();\n this.resizeSession = undefined;\n this.lastPoint = new Vector2();\n this.cursorPoint = new Vector2();\n }\n\n /**\n * 提交缩放手柄拖拽并清理会话。\n * @param event 鼠标抬起事件。\n * @returns 是否完成了提交。\n */\n private finishHandleDrag (event: InputEventMouseButton): boolean {\n const currentPoint = new Vector2(event.position.x, event.position.y);\n const shift = new Vector2().subtractVectors(currentPoint, this.lastPoint);\n\n this.cursorPoint.add(shift);\n if (this.wireframe.activeType === TransformType.SCALE && isEffectsPlayerItem(this.selectedItems[0])) {\n this._owner.emit('framerefreshchildren', {\n source: this,\n frameId: this.selectedItems[0].getInstanceId(),\n });\n }\n this.refreshAfterPointerUp(event);\n const transformType = this.wireframe.activeType;\n\n this.resetTransformOperation();\n this._owner.emit('actioncommit', { source: this, transformType });\n\n return true;\n }\n\n /**\n * 按最终指针位置刷新线框命中与光标。\n * @param _event 鼠标抬起事件。\n */\n private refreshAfterPointerUp (_event: InputEventMouseButton): void {\n this.refreshTransformType(this.cursorPoint);\n const { activeType, interactiveDirection } = this.wireframe;\n\n this.refreshCursorResult(activeType, getVector2Angle(interactiveDirection));\n this._owner.setCursor(this.cursorResult);\n }\n\n /**\n * 获取元素的信息标签图标类型。\n * @param item 播放器元素。\n * @returns 图标类型。\n */\n private getIconType (item: VFXItem): ResizeSelectionIconType {\n if (isFramePlayerItem(item)) {\n return ResizeSelectionIconType.FRAME;\n }\n if (isEffectsPlayerItem(item)) {\n return ResizeSelectionIconType.EFFECTS;\n }\n if (isGroupPlayerItem(item)) {\n return ResizeSelectionIconType.GROUP;\n }\n if (isGeneratorPlayerItem(item)) {\n return isVideoGeneratorPlayerItem(item)\n ? ResizeSelectionIconType.VIDEO\n : ResizeSelectionIconType.IMAGE;\n }\n\n switch (item.type) {\n case spec.ItemType.video:\n return ResizeSelectionIconType.VIDEO;\n case spec.ItemType.text:\n return ResizeSelectionIconType.TEXT;\n default:\n return ResizeSelectionIconType.IMAGE;\n }\n }\n\n /**\n * 获取元素的信息标签名称。\n * @param item 播放器元素。\n * @returns 显示名称。\n */\n private getItemInfoName (item: VFXItem): string {\n if (item.name !== '生成器') {\n return item.name;\n }\n\n return isVideoGeneratorPlayerItem(item) ? '视频生成器' : '图片生成器';\n }\n\n /** @returns 当前选框在视口中的局部单位轴。 */\n private boxLocalAxes (): { xAxis: Vector2, yAxis: Vector2 } {\n const points = this.wireframe.transform ? getTransformedBoxCorners(this.wireframe.transform) : undefined;\n\n if (!points?.length) {\n return { xAxis: new Vector2(1, 0), yAxis: new Vector2(0, 1) };\n }\n const xVec = new Vector2().subtractVectors(points[1], points[0]);\n const yVec = new Vector2().subtractVectors(points[3], points[0]);\n const xAxis = xVec.length() > 0 ? xVec.normalize() : new Vector2(1, 0);\n const yAxis = yVec.length() > 0 ? yVec.normalize() : new Vector2(0, 1);\n\n return { xAxis, yAxis };\n }\n\n /**\n * 查找文本宽度交互正在拖动的边。\n * @param center 选框中心。\n * @param interactiveDirection 交互方向。\n * @returns 当前被拖动的边。\n */\n private draggedWidthEdge (center: Vector2, interactiveDirection: Vector2): Line2 | undefined {\n const points = this.wireframe.transform ? getTransformedBoxCorners(this.wireframe.transform) : undefined;\n\n if (!points?.length) {\n return undefined;\n }\n const edgeA = new Line2(points[1], points[2]);\n const edgeB = new Line2(points[3], points[0]);\n const dotA = new Vector2().subtractVectors(edgeA.getCenter(), center).dot(interactiveDirection);\n const dotB = new Vector2().subtractVectors(edgeB.getCenter(), center).dot(interactiveDirection);\n\n return dotA >= dotB ? edgeA : edgeB;\n }\n\n /** 是否为单个文字元素选区。 */\n private isSingleTextSelection (): boolean {\n return this.selectedItems.length === 1 && this.selectedItems[0].type === spec.ItemType.text;\n }\n\n /**\n * 命中线框边缩放区域。角点由调用方优先判定,边命中采用到线段的屏幕距离,\n * 因而旋转元素也沿真实边工作,而不是沿轴对齐 AABB 工作。\n * @param point 视口指针\n * @param textVerticalOnly 单文本时只开放上/下边;左/右边保留给文字宽度手柄\n */\n private findScaleEdge (point: Vector2, textVerticalOnly = false): Line2 | undefined {\n if (!this.scaleEnabled || this.selectedItems.length !== 1) {\n return undefined;\n }\n\n for (let i = 0; i < this.wireframe.edges.length; i++) {\n // 四角顺序下,1/3 是左、右竖边(文字宽度),0/2 是上、下横边(文字字号)。\n if (textVerticalOnly && i % 2 === 1) {\n continue;\n }\n const edge = this.wireframe.edges[i];\n const closest = edge.closestPointToPoint(point, true);\n\n if (closest.distance(point) <= this.config.scaleCircleSize) {\n return edge;\n }\n }\n\n return undefined;\n }\n\n /**\n * 查找指针命中的缩放角点。\n * @param point 指针视口坐标。\n * @returns 命中的缩放角点。\n */\n private findScaleCorner (point: Vector2): Circle | undefined {\n if (!this.wireframe.scaleCorners.length) {\n return undefined;\n }\n\n const { xAxis, yAxis } = this.boxLocalAxes();\n const halfSize = SCALE_CORNER_HIT_SIZE / 2;\n\n return this.wireframe.scaleCorners.find(corner => {\n const offset = new Vector2().subtractVectors(point, corner.center);\n\n return Math.abs(offset.dot(xAxis)) <= halfSize\n && Math.abs(offset.dot(yAxis)) <= halfSize;\n });\n }\n\n /**\n * 获取被拖边对边的中点。\n * @param scaleEdgeCorners 被拖边的两个端点。\n * @returns 对边中点。\n */\n private oppositeScaleEdgeCenter (scaleEdgeCorners: Vector2[]): Vector2 | undefined {\n const { edges } = this.wireframe;\n\n if (scaleEdgeCorners.length !== 2 || edges.length !== 4) {\n return undefined;\n }\n const draggedEdge = new Line2(scaleEdgeCorners[0], scaleEdgeCorners[1]);\n const reversedDraggedEdge = new Line2(scaleEdgeCorners[1], scaleEdgeCorners[0]);\n const draggedIndex = edges.findIndex(edge => (\n edge.equals(draggedEdge) || edge.equals(reversedDraggedEdge)\n ));\n\n if (draggedIndex < 0) {\n return undefined;\n }\n\n return edges[(draggedIndex + 2) % edges.length].getCenter();\n }\n\n /**\n * 获取被拖角点的对角点。\n * @param scaleCorner 被拖角点。\n * @returns 对角点。\n */\n private oppositeScaleCorner (scaleCorner: Vector2): Vector2 | undefined {\n const points = this.wireframe.transform ? getTransformedBoxCorners(this.wireframe.transform) : undefined;\n\n if (!points?.length) {\n return undefined;\n }\n const draggedIndex = points.findIndex(point => point.equals(scaleCorner));\n\n return draggedIndex < 0 ? undefined : points[(draggedIndex + 2) % points.length].clone();\n }\n\n /**\n * 创建按下时冻结的绝对缩放会话。\n * @param item 被缩放元素。\n * @param itemMatrix 元素世界矩阵。\n * @param transformOrigin 变换原点。\n * @param viewportPoint 指针视口坐标。\n * @param initialHandleView 初始手柄视口位置。\n * @param fixedPointView 固定点视口位置。\n * @param handleKind 手柄类型。\n * @param textResizeMode 文本缩放模式。\n * @returns 缩放会话;坐标转换失败时返回 undefined。\n */\n private createAnchoredResizeSession (\n item: VFXItem,\n itemMatrix: Matrix4,\n transformOrigin: Vector3,\n viewportPoint: Vector2,\n initialHandleView: Vector2,\n fixedPointView: Vector2,\n handleKind: AnchoredResizeSession['handleKind'],\n textResizeMode: TextResizeSnapshot['mode'] = 'font',\n ): AnchoredResizeSession | undefined {\n // 步骤 1:将手柄与固定点投影到交互平面。\n const cameraInfo = GizmoViewportUtils.getCameraInfo(this._owner.getEngine());\n const containerSize = GizmoViewportUtils.getContainerSize(this._owner.getEngine().canvas.parentElement!);\n const initialHandle = viewPositionToWorld(initialHandleView, cameraInfo, this.interactionPlane, containerSize);\n const fixedPoint = viewPositionToWorld(fixedPointView, cameraInfo, this.interactionPlane, containerSize);\n\n if (!initialHandle || !fixedPoint) {\n return undefined;\n }\n\n // 步骤 2:冻结父级矩阵与元素类型相关属性。\n const parentWorldToLocal = new Matrix4().copyFrom(item.transform.getParentMatrix() ?? new Matrix4());\n\n parentWorldToLocal.setPosition(new Vector3()).invert();\n const textComponent = item.type === spec.ItemType.text ? item.getComponent(TextComponent) : undefined;\n const frame = isFramePlayerItem(item);\n const resizeOrigin = textComponent || frame\n ? initialHandle.clone().add(fixedPoint).multiply(0.5)\n : transformOrigin.clone();\n const text = textComponent\n ? {\n component: textComponent,\n mode: textResizeMode,\n fontSize: textComponent.textStyle.fontSize,\n fontOffset: textComponent.textStyle.fontOffset,\n lineHeight: textComponent.textLayout.lineHeight,\n width: textComponent.textLayout.width,\n height: textComponent.textLayout.height,\n }\n : undefined;\n\n // 步骤 3:组装后续帧只读的绝对缩放快照。\n return {\n item,\n handleKind,\n geometry: {\n initialHandle,\n fixedPoint,\n resizeOrigin,\n worldToLocalRotation: new Matrix4().extractRotation(itemMatrix).invert(),\n },\n initialHandleView,\n fixedPointView,\n pointerToHandleView: viewportPoint.clone().subtract(initialHandleView),\n initialPosition: new Vector3().copyFrom(item.transform.position),\n initialScale: new Vector3().copyFrom(item.transform.scale),\n parentWorldToLocal,\n initialWorldSize: frame ? getItemWorldSize(item) : undefined,\n initialLocalSize: frame ? new Vector2().copyFrom(item.transform.size) : undefined,\n text,\n frameAppliedTranslation: new Vector3(),\n resizeBehavior: this.config.resolveResizeBehavior?.(item.getInstanceId()) ?? 'scale',\n externalTranslation: new Vector3(),\n };\n }\n\n /**\n * 按 ResizeSelectionIconType 取对应配置的图标 URL。\n * @param type 图标类型\n * @returns 图标 URL;NULL 类型返回空字符串\n */\n private getIconUrl (type: ResizeSelectionIconType): string {\n const urlMap: Record<ResizeSelectionIconType, string> = {\n 'null': '',\n 'image': this.config.imageLogoUrl,\n 'group': this.config.groupLogoUrl,\n 'text': this.config.textLogoUrl,\n 'video': this.config.videoLogoUrl,\n 'frame': this.config.frameLogoUrl,\n 'effects': this.config.effectsLogoUrl,\n };\n\n return urlMap[type];\n }\n\n /**\n * 配置变更时刷新类型图标纹理:URL 变化的图标销毁旧纹理并清空缓存,\n * 下次 draw 时会按新 URL 懒加载。\n * @param previous 变更前配置\n * @param current 变更后配置\n */\n private refreshIconSprites (\n previous: Readonly<ResizeSelectionConfig>,\n current: Readonly<ResizeSelectionConfig>,\n ): void {\n const logoKeys: { type: ResizeSelectionIconType, key: keyof ResizeSelectionConfig }[] = [\n { type: ResizeSelectionIconType.IMAGE, key: 'imageLogoUrl' },\n { type: ResizeSelectionIconType.GROUP, key: 'groupLogoUrl' },\n { type: ResizeSelectionIconType.TEXT, key: 'textLogoUrl' },\n { type: ResizeSelectionIconType.VIDEO, key: 'videoLogoUrl' },\n { type: ResizeSelectionIconType.FRAME, key: 'frameLogoUrl' },\n { type: ResizeSelectionIconType.EFFECTS, key: 'effectsLogoUrl' },\n ];\n\n for (const { type, key } of logoKeys) {\n if (previous[key] !== current[key]) {\n const texture = this.iconTextures.get(type);\n\n if (texture && !texture.isDestroyed) {\n texture.offloadData();\n }\n this.iconTextures.delete(type);\n this.iconTexturePromises.delete(type);\n }\n }\n }\n\n /**\n * 根据配置变化刷新图标纹理缓存。\n * @param change 选区缩放配置变更。\n */\n private onConfigChange (change: ConfigChange<ResizeSelectionConfig>): void {\n this.refreshIconSprites(change.previous, change.current);\n }\n\n /**\n * 获取类型图标纹理(懒加载)。\n * 命中且未销毁则直接返回;否则发起一次异步加载并返回 undefined(本帧跳过图标,\n * 加载完成后由持续渲染循环自动重绘)。\n * @param type 图标类型\n * @param engine effects 引擎实例(取自 control)\n * @returns 命中的纹理;未命中或加载中时返回 undefined\n */\n private getIconTexture (type: ResizeSelectionIconType, engine: Control['engine']): Texture | undefined {\n if (type === ResizeSelectionIconType.NULL) {\n return undefined;\n }\n const cached = this.iconTextures.get(type);\n\n if (cached && !cached.isDestroyed) {\n return cached;\n }\n if (!this.iconTexturePromises.has(type)) {\n const url = this.getIconUrl(type);\n\n if (!url) {\n return undefined;\n }\n const promise = Texture.fromImage(url, engine).then(texture => {\n this.iconTextures.set(type, texture);\n\n return texture;\n });\n\n this.iconTexturePromises.set(type, promise);\n }\n\n return undefined;\n }\n\n /**\n * 绘制单选元素的名称、尺寸与类型图标。\n * @param control 绘制控制器。\n * @param sizeTextColor 尺寸文本颜色。\n * @param nameTextColor 名称文本颜色。\n */\n private renderItemInfo (control: Control, sizeTextColor: number, nameTextColor: number): void {\n // 步骤 1:计算元素名称、像素尺寸与图标纹理。\n const item = this.selectedItems[0];\n const name = this.getItemInfoName(item);\n const corners = this.wireframe.transform ? getTransformedBoxCorners(this.wireframe.transform) : getBoxCorners(this.wireframe.box);\n const boxWidth = Math.round(corners[0].distance(corners[1]) / this.viewScale * this.config.contentRatio / this.config.pixelRatio);\n const boxHeight = Math.round(corners[1].distance(corners[2]) / this.viewScale * this.config.contentRatio / this.config.pixelRatio);\n const size = [boxWidth, boxHeight];\n\n const iconTexture = this.getIconTexture(this.iconType, control.engine);\n\n // 步骤 2:查找屏幕最上方的选框边并计算旋转角。\n const topCorner = corners[0].clone();\n const anotherCorner = new Vector2();\n\n corners.forEach(corner => {\n if (corner.y < topCorner.y) {\n topCorner.copyFrom(corner);\n }\n });\n\n let init = false;\n\n corners.forEach(corner => {\n if (corner.equals(topCorner)) {\n return;\n }\n if (!init) {\n anotherCorner.copyFrom(corner);\n init = true;\n } else if (corner.y - topCorner.y <= anotherCorner.y - topCorner.y) {\n anotherCorner.copyFrom(corner);\n }\n });\n\n const leftCorner = topCorner.x < anotherCorner.x ? topCorner : anotherCorner;\n const rightCorner = topCorner.x > anotherCorner.x ? topCorner : anotherCorner;\n const rotation = new Vector2().subtractVectors(rightCorner, leftCorner).angle();\n\n const viewBoxWidth = leftCorner.distance(rightCorner);\n\n // 步骤 3:根据顶边可用宽度裁剪名称与尺寸文本。\n let sizeStr = size.map(s => roundNumber(s, 0)).join(' * ');\n const sizeTextWidth = measureTextWidth(sizeStr);\n\n if (viewBoxWidth < sizeTextWidth * 2) {\n sizeStr = '';\n }\n\n let nameStr = ` ${name}`;\n const nameTextWidth = measureTextWidth(nameStr);\n\n if ((20 + nameTextWidth + sizeTextWidth) > viewBoxWidth) {\n if (viewBoxWidth < sizeTextWidth * 2) {\n sizeStr = '';\n nameStr = truncateText(nameStr, viewBoxWidth - 20);\n } else {\n const availableNameWidth = viewBoxWidth - 20 - sizeTextWidth - 5;\n\n nameStr = truncateText(nameStr, availableNameWidth);\n }\n }\n\n // 步骤 4:建立标签局部坐标轴与文本基线。\n const cos = Math.cos(rotation);\n const sin = Math.sin(rotation);\n const ex = new Vector2(cos, sin);\n const ey = new Vector2(-sin, cos);\n\n const textCellTop = -INFO_TEXT_BOTTOM - measureControlTextCellHeight(\n INFO_TEXT_FONT_SIZE,\n INFO_TEXT_FONT_FAMILY,\n undefined,\n undefined,\n control.engine.displayServer.pixelRatio,\n );\n\n // 步骤 5:依次绘制图标、尺寸和名称。\n if (iconTexture && !iconTexture.isDestroyed) {\n const anchor = leftCorner.clone().subtract(ey.clone().multiply(INFO_ICON_BOTTOM + INFO_ICON_SIZE));\n\n drawWithBoxTransform(\n control,\n anchor,\n ex,\n ey,\n () => {\n control.drawTexture(0, 0, INFO_ICON_SIZE, INFO_ICON_SIZE, iconTexture);\n },\n );\n }\n\n if (sizeStr) {\n const anchor = rightCorner.clone();\n const textWidth = measureTextWidth(sizeStr);\n\n drawWithBoxTransform(\n control,\n anchor,\n ex,\n ey,\n () => {\n control.drawText(-textWidth, textCellTop, sizeStr, INFO_TEXT_FONT_SIZE, toColor(sizeTextColor, 1), INFO_TEXT_FONT_FAMILY);\n },\n );\n }\n\n if (nameStr) {\n const anchor = leftCorner.clone().add(ex.clone().multiply(20));\n\n drawWithBoxTransform(\n control,\n anchor,\n ex,\n ey,\n () => {\n control.drawText(0, textCellTop, nameStr, INFO_TEXT_FONT_SIZE, toColor(nameTextColor, 1), INFO_TEXT_FONT_FAMILY);\n },\n );\n }\n }\n\n /**\n * 纯判定:鼠标点命中的交互类型(缩放/平移),未命中返回 NULL。\n * 只读,不写 activeType/wireframe。供 refreshTransformType 复用。\n * @param point 视口坐标\n */\n private computeTransformType (point: Vector2): TransformType {\n if (!this.wireframe.interactive || !this.wireframe.totalBox.containsPoint(point)) {\n return TransformType.NULL;\n }\n\n // 角点优先于边,避免角点附近被边缩放抢占。\n if (this.scaleEnabled) {\n if (this.findScaleCorner(point)) {\n return TransformType.SCALE;\n }\n }\n\n // 单文本左右边线宽度回流命中带(多边形命中,适配旋转边线带)。\n for (const widthScaleArea of this.wireframe.widthScaleAreas) {\n if (transformedBoxContainsPoint(widthScaleArea, point)) {\n return TransformType.WIDTH_SCALE;\n }\n }\n\n if (this.scaleEnabled) {\n if (this.findScaleEdge(point, this.isSingleTextSelection())) {\n return TransformType.SCALE;\n }\n }\n\n // 其次判断平移交互\n if (this.wireframe.transform && transformedBoxContainsPoint(this.wireframe.transform, point)) {\n return TransformType.TRANSLATION;\n }\n\n return TransformType.NULL;\n }\n\n /**\n * 处理角点或边缩放交互。\n * @param shift 本次鼠标位移增量。\n * @param interactiveDirection 交互方向向量。\n * @param event 鼠标拖拽事件。\n * @returns 光标旋转角度。\n */\n private handleScale (shift: Vector2, interactiveDirection: Vector2, event: InputEventMouseMotion): number {\n const pointerView = this.cursorPoint.add(shift).clone();\n\n return this.handleAnchoredResize(pointerView, interactiveDirection, event);\n }\n\n /**\n * 根据按下快照计算并应用绝对缩放。\n * @param pointerView 当前指针视口位置。\n * @param interactiveDirection 初始交互方向。\n * @param event 鼠标拖拽事件。\n * @returns 光标旋转角度。\n */\n private handleAnchoredResize (\n pointerView: Vector2,\n interactiveDirection: Vector2,\n event: InputEventMouseMotion,\n ): number {\n // 步骤 1:校验会话并将指针还原到真实手柄位置。\n const session = this.resizeSession;\n\n if (!session) {\n return getVector2Angle(interactiveDirection);\n }\n\n const handleView = pointerView.clone().subtract(session.pointerToHandleView);\n const snappedHandleView = this.snapHandlePoint(handleView);\n let targetHandleView = snappedHandleView;\n\n // 步骤 2:边手柄投影到单轴,并计算当前光标方向。\n if (session.handleKind === 'edge') {\n const resizeAxis = new Vector2().subtractVectors(session.initialHandleView, session.fixedPointView);\n const initialViewLength = resizeAxis.length();\n\n if (isEqual(initialViewLength, 0)) {\n return getVector2Angle(interactiveDirection);\n }\n resizeAxis.divide(initialViewLength);\n const projectedViewLength = new Vector2()\n .subtractVectors(snappedHandleView, session.fixedPointView)\n .dot(resizeAxis);\n\n targetHandleView = session.fixedPointView.clone().add(resizeAxis.multiply(projectedViewLength));\n }\n const currentHandleDirection = new Vector2().subtractVectors(targetHandleView, session.fixedPointView);\n const cursorDirection = isEqual(currentHandleDirection.length(), 0)\n ? interactiveDirection\n : currentHandleDirection;\n\n // 步骤 3:将目标手柄投影到世界交互平面。\n const handleWorld = viewPositionToWorld(\n targetHandleView,\n GizmoViewportUtils.getCameraInfo(this._owner.getEngine()),\n this.interactionPlane,\n GizmoViewportUtils.getContainerSize(this._owner.getEngine().canvas.parentElement!),\n );\n\n if (!handleWorld) {\n return getVector2Angle(cursorDirection);\n }\n\n // 步骤 4:解析比例约束,计算并应用缩放结果。\n const resizeBehavior = session.resizeBehavior ?? 'scale';\n const resizeAxis = getResizeAxis(resizeBehavior);\n const isFreeScaleByDefault = isFramePlayerItem(session.item) || resizeBehavior === 'resize';\n const isShiftFreeScale = isFreeScaleByDefault ? !event.shiftPressed : event.shiftPressed;\n const lockAspectRatio = session.text\n ? session.text.mode === 'font'\n : resizeAxis === 'both' && this.isLockScale && !isShiftFreeScale;\n const resize = calculateAnchoredResize(session.geometry, handleWorld, {\n handleKind: session.handleKind,\n lockAspectRatio,\n lockedAxis: resizeAxis === 'x' ? 'y' : resizeAxis === 'y' ? 'x' : undefined,\n });\n\n this.applyAnchoredResize(session, resize);\n this.lastWorldPosition.copyFrom(handleWorld);\n\n return getVector2Angle(cursorDirection);\n }\n\n /**\n * 将绝对缩放结果应用到会话快照。\n * @param session 缩放会话。\n * @param resize 绝对缩放结果。\n */\n private applyAnchoredResize (session: AnchoredResizeSession, resize: AnchoredResizeResult): void {\n // 步骤 1:读取按下时冻结的元素属性。\n const { item, initialScale, initialWorldSize, initialLocalSize, text } = session;\n\n if (text) {\n // 步骤 2:文本宽度模式更新排版宽度并补齐剩余缩放。\n if (text.mode === 'width') {\n const scalar = resize.totalScalar.x;\n const width = text.width * Math.abs(scalar);\n\n text.component.setTextWidth(width);\n const lineCount = text.component.getLineCount(text.component.text);\n\n text.component.setTextHeight(Math.ceil(text.lineHeight * lineCount));\n // 排版属性只表达正宽度,transform 补齐越过固定边后的绝对比例。\n const initialBaseWidth = text.width + text.fontOffset;\n const currentBaseWidth = width + text.fontOffset;\n const propertyScalar = isEqual(initialBaseWidth, 0)\n ? Math.abs(scalar)\n : currentBaseWidth / initialBaseWidth;\n const residualScalar = isEqual(propertyScalar, 0) ? 0 : Math.abs(scalar) / propertyScalar;\n\n item.transform.setScale(\n initialScale.x * residualScalar,\n initialScale.y,\n initialScale.z,\n );\n this.setResizePosition(session, resize.totalTranslation);\n\n const composition = this._owner.getEngine().sceneServer.compositions[0];\n\n composition?.gotoAndStop(composition.time);\n\n return;\n }\n\n // 步骤 3:文本字号模式同步字号、行高、排版尺寸与剩余缩放。\n const magnitude = Math.max(Math.abs(resize.totalScalar.x), Math.abs(resize.totalScalar.y));\n const propertyScalar = Math.max(magnitude, 1 / text.fontSize);\n // fontOffset 是渲染宽度中的固定留白,排版宽度补齐它,避免用单轴 scale 拉伸字形。\n const width = Math.max(0, (text.width + text.fontOffset) * propertyScalar - text.fontOffset);\n const height = text.height * propertyScalar;\n\n text.component.setFontSize(text.fontSize * propertyScalar);\n text.component.setLineHeight(text.lineHeight * propertyScalar);\n text.component.setTextWidth(width);\n text.component.setTextHeight(height);\n // 字号的最小值由统一的 transform 比例补偿。换行数与高度取整都不能改变字形比例。\n const residualScalar = magnitude / propertyScalar;\n\n item.transform.setScale(\n initialScale.x * residualScalar,\n initialScale.y * residualScalar,\n initialScale.z,\n );\n this.setResizePosition(session, resize.totalTranslation);\n\n const composition = this._owner.getEngine().sceneServer.compositions[0];\n\n composition?.gotoAndStop(composition.time);\n\n return;\n }\n\n // 步骤 4:画板按绝对尺寸与增量位移更新。\n if (isFramePlayerItem(item) && initialWorldSize && initialLocalSize) {\n const translationDelta = resize.totalTranslation.clone().subtract(session.frameAppliedTranslation);\n\n resizeFrameItem(\n item,\n new Vector2(\n initialWorldSize.x * resize.totalScalar.x,\n initialWorldSize.y * resize.totalScalar.y,\n ),\n translationDelta,\n { localSize: initialLocalSize, worldSize: initialWorldSize },\n );\n session.frameAppliedTranslation.copyFrom(resize.totalTranslation);\n\n return;\n }\n\n // 步骤 5:普通元素直接应用绝对缩放与位移。\n item.transform.setScale(\n initialScale.x * resize.totalScalar.x,\n initialScale.y * resize.totalScalar.y,\n initialScale.z * resize.totalScalar.z,\n );\n this.setResizePosition(session, resize.totalTranslation);\n }\n\n /**\n * 将世界总位移转换到父级局部坐标并写入位置。\n * @param session 缩放会话。\n * @param totalWorldTranslation 世界空间累计位移。\n */\n private setResizePosition (session: AnchoredResizeSession, totalWorldTranslation: Vector3): void {\n const localTranslation = totalWorldTranslation.clone().applyMatrix(session.parentWorldToLocal);\n const resizeBehavior = session.resizeBehavior ?? 'scale';\n const resizeAxis = getResizeAxis(resizeBehavior);\n const externalTranslation = session.externalTranslation ??= new Vector3();\n\n if (resizeAxis !== 'both' && session.lastAppliedPosition) {\n externalTranslation.add(\n new Vector3().subtractVectors(session.item.transform.position, session.lastAppliedPosition),\n );\n }\n const position = session.initialPosition.clone().add(localTranslation).add(externalTranslation);\n\n session.item.transform.setPosition(...position.toArray());\n session.lastAppliedPosition = position;\n }\n\n /**\n * 处理文本左右边的宽度缩放。\n * @param shift 本次鼠标位移增量。\n * @param interactiveDirection 交互方向向量。\n * @param event 鼠标拖拽事件。\n * @returns 光标旋转角度。\n */\n private handleWidthScale (shift: Vector2, interactiveDirection: Vector2, event: InputEventMouseMotion): number {\n const pointerView = this.cursorPoint.add(shift).clone();\n\n return this.handleAnchoredResize(pointerView, interactiveDirection, event);\n }\n\n /**\n * 将手柄位置吸附到最近目标。\n * @param point 原始手柄位置。\n * @returns 吸附后的手柄位置。\n */\n private snapHandlePoint (point: Vector2): Vector2 {\n const snapManager = this._owner.getSnapManager();\n\n snapManager.clearSnappingVisualizations();\n if (!snapManager.enabled) {\n return point;\n }\n\n snapManager.preparePoint(new Vector2(), point);\n\n return point.clone().subtract(new Vector2(\n snapManager.result.x ?? 0,\n snapManager.result.y ?? 0,\n ));\n }\n\n}\n\n/** 选区线框的视口几何与交互状态。 */\nexport type ResizeSelectionWireframe = {\n /** 线框四条边 */\n edges: Line2[],\n /** 主线框归一化 Box2 到视图的变换 */\n transform?: Matrix3,\n /** 缩放角点碰撞圆 */\n scaleCorners: Circle[],\n /** 单文本左右两侧的宽度调整手柄 */\n widthScaleAreas: Matrix3[],\n /** 线框是否可交互 */\n interactive: boolean,\n /** 角点是否可点 */\n cornerEnable: boolean,\n /** 当前元素包围盒 */\n box: Box2,\n /** 变换锚点 */\n anchor: Vector2,\n /** 命中外扩包围盒(含角点区域) */\n totalBox: Box2,\n /** 多选时子元素的视图变换 */\n childrenTransforms: Matrix3[],\n /** 当前交互类型 */\n activeType: TransformType,\n /** 交互方向向量 */\n interactiveDirection: Vector2,\n /** 命中的缩放角点 */\n scaleCorner?: Vector2,\n /** 命中的缩放边的两端角点 */\n scaleEdgeCorners?: Vector2[],\n};\n","import {\n MouseButton,\n MouseButtonMask,\n type InputEventMouseButton,\n type InputEventMouseMotion,\n type VFXItem,\n} from '@galacean/effects';\nimport { GestureCursorType, type GestureCursorResult } from '../cursor';\nimport { Gizmo } from '../gizmo';\nimport type { GizmoOwner } from '../gizmo-owner';\nimport { GizmoType } from '../gizmo-type';\nimport { decomposeItemTransform } from '../items';\nimport { DEG2RAD, RAD2DEG, Vector2, Vector3, getAngleByVectors, getTransformedBoxCorners, getVector2Angle } from '../math';\nimport { roundNumber } from '@galacean/effects-math/es/extension/index';\nimport type {\n ResizeSelectionGizmo } from './resize-selection-gizmo';\nimport {\n SCALE_CORNER_HIT_SIZE,\n TransformType,\n} from './resize-selection-gizmo';\n\n/** 角旋转命中结果。 */\ntype RotationHit = {\n /** 命中角点相对选框中心的方向。 */\n direction: Vector2,\n};\n\n/** Shift 旋转吸附的角度步长。 */\nconst SHIFT_ROTATION_STEP_DEGREES = 15;\n\n/** 通过选框角点命中区域旋转选中对象。 */\nexport class CornerRotationGizmo extends Gizmo {\n readonly type: GizmoType = GizmoType.CORNER_ROTATION;\n\n cursorResult: GestureCursorResult = {\n type: GestureCursorType.NORMAL,\n angle: 0,\n };\n\n /** 当前指针的视图坐标;拖拽期间按 Control 本地坐标增量推进。 */\n cursorPoint: Vector2 = new Vector2();\n\n /** 上一帧指针的 Control 本地坐标。 */\n lastPoint: Vector2 = new Vector2();\n\n /** 单次旋转会话累计的 z 轴角度,用于保持旋转光标朝向连续。 */\n rotationAngle = 0;\n\n private rotationActive = false;\n private anchor = new Vector2();\n private interactiveDirection = new Vector2();\n /** 未吸附的累计拖拽角,独立于已应用角度,避免逐帧取整丢失小幅移动。 */\n private rawRotationAngle = 0;\n /** pointer down 时选区节点的公共世界角度,用于吸附最终朝向而非单次拖拽增量。 */\n private initialSelectionAngle = 0;\n /** pointer down 时冻结的旋转对象,避免拖拽中途换目标。 */\n private rotationItems: VFXItem[] = [];\n\n /**\n * 创建共享选框几何的角旋转交互。\n * @param owner Gizmo 宿主。\n * @param resizeSelection 提供选框几何的缩放 Gizmo。\n */\n constructor (\n owner: GizmoOwner,\n private readonly resizeSelection: ResizeSelectionGizmo,\n ) {\n super(owner);\n }\n\n /** 当前选中的对象。 */\n get selectedItems (): VFXItem[] {\n return this._owner.getSelection().getSelectedPlayerItems();\n }\n\n /**\n * 更新角旋转悬停或正在进行的旋转。\n * @param event 鼠标移动事件。\n */\n override onMouseMove (event: InputEventMouseMotion): void {\n if (this.rotationActive) {\n const handled = this.updateRotationDrag(event);\n\n this._owner.setCursor(this.cursorResult);\n if (handled) {\n event.accept();\n }\n\n return;\n }\n\n if (!this.isApplicableSelection()) {\n this.clearHover();\n\n return;\n }\n\n const hit = this.refreshHover(this._owner.getMousePosition());\n\n if (event.buttonMask === MouseButtonMask.None && hit) {\n event.accept();\n }\n }\n\n /**\n * 继续当前角旋转交互。\n * @param event 鼠标拖拽事件。\n */\n override onMouseDrag (event: InputEventMouseMotion): void {\n if (!this.rotationActive) {\n return;\n }\n const handled = this.updateRotationDrag(event);\n\n this._owner.setCursor(this.cursorResult);\n if (handled) {\n event.accept();\n }\n }\n\n /**\n * 在角旋转命中区域按下主键时开始旋转。\n * @param event 鼠标按下事件。\n */\n override onMouseDown (event: InputEventMouseButton): void {\n if (!this.isApplicableSelection() || event.buttonIndex !== MouseButton.Left || event.doubleClick) {\n return;\n }\n\n this.resizeSelection.refreshWireframeBySelectedItems();\n const point = new Vector2(event.position.x, event.position.y);\n const hit = this.refreshHover(point);\n\n if (!hit) {\n return;\n }\n\n this.cursorPoint.copyFrom(point);\n this.lastPoint.copyFrom(event.position);\n this.rotationAngle = 0;\n this.rawRotationAngle = 0;\n this.anchor.copyFrom(this.resizeSelection.wireframe.anchor);\n this.interactiveDirection.copyFrom(hit.direction);\n // Selection 保证父子节点不会同时入选,交互层直接冻结权威选区。\n this.rotationItems = [...this.selectedItems];\n this.initialSelectionAngle = this.resolveInitialSelectionAngle();\n this.rotationActive = true;\n this._owner.emit('actionstart', {\n source: this,\n transformType: TransformType.ROTATION,\n itemIds: this.rotationItems.map(item => item.getInstanceId()),\n });\n event.accept();\n }\n\n /**\n * 结束旋转并提交结果。\n * @param event 鼠标抬起事件。\n */\n override onMouseUp (event: InputEventMouseButton): void {\n if (!this.rotationActive) {\n return;\n }\n\n const currentPoint = new Vector2(event.position.x, event.position.y);\n\n this.cursorPoint.add(new Vector2().subtractVectors(currentPoint, this.lastPoint));\n this.resetOperation();\n this._owner.emit('actioncommit', {\n source: this,\n transformType: TransformType.ROTATION,\n });\n\n this.resizeSelection.refreshWireframeBySelectedItems();\n this.refreshHover(this._owner.getMousePosition());\n event.accept();\n }\n\n /** 清除离开视口后的旋转悬停状态。 */\n override onMouseLeave (): void {\n if (this.rotationActive) {\n this._owner.setCursor(this.cursorResult);\n\n return;\n }\n this.clearHover();\n }\n\n /** @returns 当前选区是否支持旋转。 */\n private isApplicableSelection (): boolean {\n const selectedItems = this.selectedItems;\n const loadingManager = this._owner.getLoadingManager();\n\n return selectedItems.length >= 1\n && selectedItems.every(item => loadingManager.get(item.getInstanceId()) === undefined);\n }\n\n /**\n * 根据指针增量更新累计旋转角度。\n * @param event 鼠标拖拽事件。\n * @returns 是否处理了旋转。\n */\n private updateRotationDrag (event: InputEventMouseMotion): boolean {\n if (!this.rotationActive) {\n return false;\n }\n\n const currentPoint = new Vector2(event.position.x, event.position.y);\n const shift = new Vector2().subtractVectors(currentPoint, this.lastPoint);\n\n // 键盘事件会在捕获期间重放当前位置的 Drag;即使指针位移为 0,也要重新应用当前约束。\n if (!this.resizeSelection.wireframe.interactive) {\n return true;\n }\n\n if (shift.length() > 0) {\n this._owner.setSelectionTransformKind('resize');\n const vecStart = new Vector2().subtractVectors(this.cursorPoint, this.anchor);\n\n this.cursorPoint.add(shift);\n const vecCurrent = new Vector2().subtractVectors(this.cursorPoint, this.anchor);\n const angle = getAngleByVectors(vecStart, vecCurrent) * RAD2DEG;\n\n if (Number.isFinite(angle)) {\n this.rawRotationAngle += angle;\n }\n this.lastPoint.copyFrom(currentPoint);\n }\n\n this.applyRotation(event);\n\n return true;\n }\n\n /**\n * 应用累计旋转角,并在 Shift 按下时吸附角度。\n * @param event 鼠标拖拽事件。\n */\n private applyRotation (event: InputEventMouseMotion): void {\n const targetAngle = roundNumber(\n event.shiftPressed\n ? Math.round(\n (this.initialSelectionAngle + this.rawRotationAngle)\n / SHIFT_ROTATION_STEP_DEGREES,\n ) * SHIFT_ROTATION_STEP_DEGREES - this.initialSelectionAngle\n : this.rawRotationAngle,\n 3,\n );\n const angle = roundNumber(targetAngle - this.rotationAngle, 3);\n\n this.setRotationCursor(\n getVector2Angle(this.interactiveDirection) + targetAngle * DEG2RAD,\n );\n if (angle === 0) {\n return;\n }\n\n this._owner.setSelectionTransformKind('resize');\n const rotation = new Vector3(0, 0, angle);\n\n this.rotationItems.forEach(item => {\n item.rotate(...rotation.toArray());\n });\n this.rotationAngle = targetAngle;\n this._owner.emit('actionupdate', {\n source: this,\n transformType: TransformType.ROTATION,\n });\n }\n\n /** 重置旋转交互状态。 */\n private resetOperation (): void {\n if (this._owner.getSelectionTransformKind() === 'resize') {\n this._owner.setSelectionTransformKind('idle');\n }\n this.rotationActive = false;\n this.rotationAngle = 0;\n this.lastPoint.set(0, 0);\n this.cursorPoint.set(0, 0);\n this.anchor.set(0, 0);\n this.interactiveDirection.set(0, 0);\n this.rawRotationAngle = 0;\n this.initialSelectionAngle = 0;\n this.rotationItems = [];\n }\n\n /**\n * 查找指针命中的角旋转区域。\n * @param point 指针视口坐标。\n * @returns 角旋转命中结果。\n */\n private findRotationHit (point: Vector2): RotationHit | undefined {\n // 步骤 1:校验选框是否可交互且指针位于总命中区域内。\n const { wireframe } = this.resizeSelection;\n\n if (\n !wireframe.interactive\n || !wireframe.totalBox.containsPoint(point)\n || !wireframe.scaleCorners.length\n ) {\n return undefined;\n }\n\n // 步骤 2:建立选框局部坐标轴和命中尺寸。\n const { xAxis, yAxis } = this.boxLocalAxes();\n const boxCenter = wireframe.box.getCenter();\n const rotationHalfSize = this.resizeSelection.config.rotationCircleSize;\n const scaleHalfSize = SCALE_CORNER_HIT_SIZE / 2;\n\n // 步骤 3:逐角点排除缩放区并检测外侧旋转区。\n for (const corner of wireframe.scaleCorners) {\n const cornerOffset = new Vector2().subtractVectors(point, corner.center);\n const insideScaleCorner = Math.abs(cornerOffset.dot(xAxis)) <= scaleHalfSize\n && Math.abs(cornerOffset.dot(yAxis)) <= scaleHalfSize;\n\n if (insideScaleCorner) {\n continue;\n }\n\n const direction = new Vector2().subtractVectors(corner.center, boxCenter);\n const xSign = direction.dot(xAxis) >= 0 ? 1 : -1;\n const ySign = direction.dot(yAxis) >= 0 ? 1 : -1;\n const hitCenter = corner.center.clone()\n .add(xAxis.clone().multiply(xSign * rotationHalfSize))\n .add(yAxis.clone().multiply(ySign * rotationHalfSize));\n const hitOffset = new Vector2().subtractVectors(point, hitCenter);\n\n if (\n Math.abs(hitOffset.dot(xAxis)) <= rotationHalfSize\n && Math.abs(hitOffset.dot(yAxis)) <= rotationHalfSize\n ) {\n return { direction };\n }\n }\n\n return undefined;\n }\n\n /** @returns 选框在视口中的局部坐标轴。 */\n private boxLocalAxes (): { xAxis: Vector2, yAxis: Vector2 } {\n const transform = this.resizeSelection.wireframe.transform;\n const points = transform ? getTransformedBoxCorners(transform) : undefined;\n\n if (!points?.length) {\n return { xAxis: new Vector2(1, 0), yAxis: new Vector2(0, 1) };\n }\n const xVector = new Vector2().subtractVectors(points[1], points[0]);\n const yVector = new Vector2().subtractVectors(points[3], points[0]);\n\n return {\n xAxis: xVector.length() > 0 ? xVector.normalize() : new Vector2(1, 0),\n yAxis: yVector.length() > 0 ? yVector.normalize() : new Vector2(0, 1),\n };\n }\n\n /**\n * 获取 Shift 吸附使用的初始绝对角度。\n * 角度来自节点变换,不从选框或子元素包围盒反推;\n * 多选节点没有公共角度时使用 0°。\n * @returns 当前选区在视图平面内的初始角度(度)。\n */\n private resolveInitialSelectionAngle (): number {\n if (this.rotationItems.length === 0) {\n return 0;\n }\n\n const angles = this.rotationItems.map(item => (\n roundNumber(decomposeItemTransform(item).rotation.z, 3)\n ));\n const sharedAngle = angles[0];\n\n return Number.isFinite(sharedAngle) && angles.every(angle => angle === sharedAngle)\n ? sharedAngle\n : 0;\n }\n\n /**\n * 刷新指定位置的旋转悬停状态。\n * @param point 指针视口坐标。\n * @returns 角旋转命中结果。\n */\n private refreshHover (point: Vector2): RotationHit | undefined {\n const hit = this.findRotationHit(point);\n\n if (!hit) {\n this.clearHover();\n\n return undefined;\n }\n\n this.interactiveDirection.copyFrom(hit.direction);\n this.setRotationCursor(getVector2Angle(hit.direction));\n\n return hit;\n }\n\n /**\n * 更新旋转光标。\n * @param angle 旋转方向的弧度值。\n */\n private setRotationCursor (angle: number): void {\n this.cursorResult = {\n type: GestureCursorType.ROTATION,\n angle: (angle + Math.PI / 4) * RAD2DEG,\n };\n this._owner.setCursor(this.cursorResult);\n }\n\n /** 清除旋转悬停状态。 */\n private clearHover (): void {\n this.interactiveDirection.set(0, 0);\n this.cursorResult = {\n type: GestureCursorType.NORMAL,\n angle: 0,\n };\n this._owner.setCursor(this.cursorResult);\n }\n}\n","import { MouseButton, type InputEventMouseButton } from '@galacean/effects';\nimport { Gizmo } from '../gizmo';\nimport { Vector2 } from '../math';\n\n/** 点击当前动效范围外的画布空白区域时退出动效编辑。 */\nexport class LeaveEffectsEditGizmo extends Gizmo {\n readonly type = 'leave-effects-edit';\n\n /**\n * 在动效范围外的空白区域按下主键时退出编辑模式。\n * @param event 鼠标按下事件\n */\n override onMouseDown (event: InputEventMouseButton): void {\n if (event.buttonIndex !== MouseButton.Left) {\n return;\n }\n\n const point = new Vector2(event.position.x, event.position.y);\n const selection = this._owner.getSelection();\n\n if (selection.hitTest(point).length > 0 || selection.isPointInEffectsEditScope(point)) {\n return;\n }\n\n this._owner.resetEditMode();\n event.accept();\n }\n}\n","import {\n MouseButton,\n spec,\n type InputEventMouseButton,\n type InputEventMouseMotion,\n type VFXItem,\n} from '@galacean/effects';\nimport type { Control } from '@galacean/effects-plugin-gui';\nimport { GizmoViewportUtils } from '../viewport/viewport-utils';\nimport { Gizmo } from '../gizmo';\nimport type { GizmoOwner } from '../gizmo-owner';\nimport { Box2 } from '@galacean/effects-math/es/extension/index';\nimport { Vector2, getTransformedBoxCorners, transformedBoxIntersectsBox } from '../math';\nimport { drawBox, fillBox, toColor } from '../drawing';\nimport { getFramePlayerItemAncestors, getItemViewTransform, isFramePlayerItem, isPlayerItemVisible } from '../items';\nimport type { SelectionPreviewConfig } from '../configs/types';\nimport { selectionPreviewConfig } from '../configs/builtin-configs';\n\n/** 框选区域的绘制状态。 */\ntype SelectionOverlay = {\n /** 当前绘制内容。 */\n type: 'none' | 'region',\n /** 框选区域。 */\n box: Box2,\n};\n\n/** 通过拖拽矩形更新选区并绘制框选区域。 */\nexport class BoxSelectionGizmo extends Gizmo {\n readonly type = 'box-selection';\n private readonly overlay: SelectionOverlay = { type: 'none', box: new Box2() };\n private readonly cursorPoint = new Vector2();\n private readonly startPoint = new Vector2();\n private isBoxSelecting = false;\n private mouseGrabbed = false;\n\n /**\n * 创建框选交互。\n * @param owner Gizmo 宿主。\n * @param deferToHitTarget 命中已有对象时是否将交互让给其他候选。\n */\n constructor (\n owner: GizmoOwner,\n private readonly deferToHitTarget = true,\n ) {\n super(owner);\n }\n\n /** 框选预览配置。 */\n get config (): Readonly<SelectionPreviewConfig> {\n return this._owner.getConfigManager().get(selectionPreviewConfig);\n }\n\n /** 当前选区。 */\n private get selection () {\n return this._owner.getSelection();\n }\n\n /**\n * 忽略尚未进入拖拽阶段的移动事件。\n * @param _event 鼠标移动事件。\n */\n override onMouseMove (_event: InputEventMouseMotion): void {\n // 框选仅在拖拽阶段更新。\n }\n\n /**\n * 更新已开始的框选交互。\n * @param event 鼠标拖拽事件。\n */\n override onMouseDrag (event: InputEventMouseMotion): void {\n if (!this.mouseGrabbed) {\n return;\n }\n if (this.isBoxSelecting) {\n this.updateGrab(event);\n } else {\n event.accept();\n }\n }\n\n /**\n * 在空白区域按下主键时开始框选。\n * @param event 鼠标按下事件。\n */\n override onMouseDown (event: InputEventMouseButton): void {\n if (event.buttonIndex !== MouseButton.Left) {\n return;\n }\n\n const regionIds = this.selection.filterSelectedItems(\n this.selection.hitTest(new Vector2(event.position.x, event.position.y)),\n );\n\n if (this.deferToHitTarget && regionIds.length > 0) {\n return;\n }\n\n if (!event.shiftPressed) {\n this.selection.commitSelectedItems([]);\n }\n this.startPoint.copyFrom(event.position);\n this.cursorPoint.set(event.position.x, event.position.y);\n this.isBoxSelecting = true;\n\n this.mouseGrabbed = true;\n this._owner.emit('actionstart', {\n source: this,\n selectedIds: [...this.selection.getSelectedIds()],\n });\n event.accept();\n }\n\n /**\n * 结束框选并提交选择变更。\n * @param event 鼠标抬起事件。\n */\n override onMouseUp (event: InputEventMouseButton): void {\n if (!this.mouseGrabbed) {\n return;\n }\n const wasBoxSelecting = this.isBoxSelecting;\n\n this.mouseGrabbed = false;\n this.isBoxSelecting = false;\n this.overlay.type = 'none';\n\n this.emitMouseUpIfChanged(wasBoxSelecting);\n event.accept();\n }\n\n /**\n * 绘制当前框选区域。\n * @param control 绘制控制器。\n */\n override draw (control: Control): void {\n const config = this.config;\n\n if (this.isBoxSelecting && this.overlay.type === 'region' && !this.overlay.box.isEmpty()) {\n drawBox(control, this.overlay.box, toColor(config.regionWireframeColor, config.regionWireframeAlpha), config.regionWireframeWidth);\n fillBox(control, this.overlay.box, toColor(config.regionBoxColor, config.regionBoxAlpha));\n }\n }\n\n /**\n * 根据当前指针更新框选区域与候选选区。\n * @param event 鼠标拖拽事件。\n */\n private updateGrab (event: InputEventMouseMotion): void {\n if (!this.isBoxSelecting) {\n return;\n }\n\n // 步骤 1:计算并保存当前框选矩形。\n const endPoint = new Vector2().addVectors(\n this.cursorPoint,\n new Vector2().subtractVectors(new Vector2(event.position.x, event.position.y), this.startPoint),\n );\n const size = new Vector2().subtractVectors(this.cursorPoint, endPoint);\n const center = new Vector2().addVectors(this.cursorPoint, endPoint).multiply(0.5);\n\n size.x = Math.abs(size.x);\n size.y = Math.abs(size.y);\n const box = new Box2().setFromCenterAndSize(center, size);\n\n this.overlay.type = 'region';\n this.overlay.box = box;\n\n // 步骤 2:收集与框选矩形接触的可选对象\n const candidates: string[] = [];\n\n if (size.length() > 0) {\n const composition = this._owner.getEngine().sceneServer.compositions[0];\n const selectableItems = new Map<string, VFXItem>();\n\n // GE Composition.items 已是 sceneRoot 的全量后代,不再额外递归 children。\n if (composition) {\n for (const item of composition.items) {\n if (!isPlayerItemVisible(item)) {\n continue;\n }\n // 默认归并 Effects 子树;进入 EffectsEditMode 后只展开当前动效内部元素。\n const selectableItem = this.selection.resolveMarqueeSelectableItem(item);\n\n if (!selectableItem) {\n continue;\n }\n selectableItems.set(selectableItem.getInstanceId(), selectableItem);\n }\n }\n\n const containerSize = GizmoViewportUtils.getContainerSize(this._owner.getEngine().canvas.parentElement!);\n const itemTransforms = new Map<string, ReturnType<typeof getItemViewTransform>>();\n const containedFrameIds = new Set<string>();\n\n // Frame 只在被框选区域完整包住时才入选。\n for (const item of selectableItems.values()) {\n if (this.selection.ignoreIds.includes(item.getInstanceId()) || this.selection.ignoreNames.includes(item.name) || item.type === spec.ItemType.composition) {\n continue;\n }\n const id = item.getInstanceId();\n const transform = getItemViewTransform(item, containerSize);\n\n itemTransforms.set(id, transform);\n if (transform && isFramePlayerItem(item) && getTransformedBoxCorners(transform).every(point => box.containsPoint(point))) {\n containedFrameIds.add(id);\n }\n }\n\n for (const item of selectableItems.values()) {\n const id = item.getInstanceId();\n const transform = itemTransforms.get(id);\n\n if (!transform) {\n continue;\n }\n\n const frameAncestors = getFramePlayerItemAncestors(item);\n\n // 整个 Frame 入选时只保留 Frame,不再同时选中其后代。\n if (frameAncestors.some(frame => containedFrameIds.has(frame.getInstanceId()))) {\n continue;\n }\n if (isFramePlayerItem(item)) {\n if (containedFrameIds.has(id)) {\n candidates.push(id);\n }\n continue;\n }\n if (!transformedBoxIntersectsBox(transform, box)) {\n continue;\n }\n\n // Frame 以外被裁剪的子元素不参与框选;框选区域进入 Frame 后即可选内部元素。\n const intersectsEveryFrame = frameAncestors.every(frame => {\n const frameTransform = itemTransforms.get(frame.getInstanceId());\n\n return !!frameTransform && transformedBoxIntersectsBox(frameTransform, box);\n });\n\n if (intersectsEveryFrame) {\n candidates.push(id);\n }\n }\n }\n\n // 步骤 3:结合修饰键提交最终选区。\n const regionIds = this.selection.filterSelectedItems(candidates);\n const nextSelectedIds = event.shiftPressed\n ? Array.from(new Set([...this.selection.interactionStartSelectedIds, ...regionIds]))\n : regionIds;\n\n this.selection.commitSelectedItems(nextSelectedIds);\n event.accept();\n }\n\n /**\n * 在选区发生变化时提交操作事件。\n * @param force 是否强制提交。\n */\n private emitMouseUpIfChanged (force = false): void {\n if (!force && this.sameIds(this.selection.getSelectedIds(), this.selection.interactionStartSelectedIds)) {\n return;\n }\n this._owner.emit('actioncommit', {\n source: this,\n selectedIds: [...this.selection.getSelectedIds()],\n oldSelectedIds: [...this.selection.interactionStartSelectedIds],\n });\n }\n\n /**\n * 判断两个 ID 列表是否按顺序相等。\n * @param left 左侧 ID 列表。\n * @param right 右侧 ID 列表。\n * @returns 是否相等。\n */\n private sameIds (left: string[], right: string[]): boolean {\n return left.length === right.length && left.every((id, index) => id === right[index]);\n }\n}\n","import { Gizmo } from '../gizmo';\nimport {\n MouseButton,\n type InputEventMouseButton,\n type InputEventMouseMotion,\n} from '@galacean/effects';\nimport { Vector2 } from '../math';\nimport type { SelectionHitSnapshot } from '../selection';\nimport {\n getItemChildren,\n getPlayerItemById,\n} from '../items';\n\n/** 单次按下选择交互的状态。 */\ntype SelectionPressSession = {\n /** 交互开始前的选中项 ID。 */\n initialSelectedIds: string[],\n /** 按下位置的命中快照。 */\n pressHit: SelectionHitSnapshot,\n /** 按下时最上层的命中项。 */\n pressTarget?: string,\n /** 等待抬起确认的选择目标。 */\n deferredTarget?: string,\n /** 当前选择提交方式。 */\n mode: 'immediate' | 'deferred' | 'none',\n /** 按下时是否启用追加选择。 */\n shiftKey: boolean,\n};\n\n/** 处理单击、双击和右键选择,并协调与拖拽候选的选择时机。 */\nexport class ChangeSelectionGizmo extends Gizmo {\n readonly type = 'change-selection';\n private session: SelectionPressSession | undefined;\n private hoverItemId: string | undefined;\n\n /**\n * 更新悬停目标。\n * @param event 鼠标移动事件。\n */\n override onMouseMove (event: InputEventMouseMotion): void {\n const selection = this._owner.getSelection();\n\n selection.commitHoverTarget(new Vector2(event.position.x, event.position.y));\n this.hoverItemId = selection.preSelectedId;\n event.accept();\n }\n\n /**\n * 忽略拖拽阶段的悬停更新。\n * @param _event 鼠标拖拽事件。\n */\n override onMouseDrag (_event: InputEventMouseMotion): void {\n // 拖拽阶段不更新选择悬停。\n }\n\n /**\n * 根据鼠标按键和命中结果开始选择交互。\n * @param event 鼠标按下事件。\n */\n override onMouseDown (event: InputEventMouseButton): void {\n // 步骤 1:保留按下前的悬停目标并处理右键选择。\n this._owner.getSelection().setHoverOverlayTarget(this.hoverItemId);\n\n if (event.buttonIndex === MouseButton.Right) {\n const oldSelectedIds = [...this._owner.getSelection().getSelectedIds()];\n\n if (this.resolveContextSelection(event)) {\n const selectedIds = [...this._owner.getSelection().getSelectedIds()];\n\n this._owner.emit('actionstart', { source: this, selectedIds });\n this._owner.emit('actioncommit', {\n source: this,\n selectedIds,\n oldSelectedIds,\n });\n }\n\n return;\n }\n // 步骤 2:为主键点击记录命中快照与初始选区。\n if (event.buttonIndex !== MouseButton.Left) {\n return;\n }\n\n const selection = this._owner.getSelection();\n const point = new Vector2(event.position.x, event.position.y);\n const pressHit = selection.createHitSnapshot(point);\n const initialSelectedIds = [...selection.getSelectedIds()];\n\n selection.interactionStartSelectedIds = [...initialSelectedIds];\n\n const session: SelectionPressSession = {\n initialSelectedIds,\n pressHit,\n pressTarget: pressHit.topmostId,\n mode: 'none',\n shiftKey: event.shiftPressed,\n };\n\n // 步骤 3:解析立即提交或延迟到抬起的选择结果。\n const nextSelectedIds = this.resolvePressSelection(event, session);\n\n if (nextSelectedIds) {\n session.mode = 'immediate';\n selection.commitSelectedItems(nextSelectedIds);\n }\n\n // 步骤 4:保存会话并通知宿主交互开始。\n this.session = session;\n this._owner.emit('actionstart', {\n source: this,\n selectedIds: [...this._owner.getSelection().getSelectedIds()],\n });\n event.accept();\n }\n\n /**\n * 完成或取消当前选择交互。\n * @param event 鼠标抬起事件。\n */\n override onMouseUp (event: InputEventMouseButton): void {\n const session = this.session;\n const selection = this._owner.getSelection();\n\n if (event.isCanceled()) {\n this.resetSession();\n if (session) {\n event.accept();\n }\n\n return;\n }\n if (!session) {\n return;\n }\n event.accept();\n\n const releasePoint = new Vector2(event.position.x, event.position.y);\n\n if (session.mode === 'deferred' && session.deferredTarget) {\n const releaseHit = selection.createHitSnapshot(releasePoint);\n const targetStillExists = !!getPlayerItemById(\n this._owner.getEngine().sceneServer.compositions[0],\n session.deferredTarget,\n );\n\n if (targetStillExists && releaseHit.topmostId === session.deferredTarget) {\n selection.commitSelectedItems([session.deferredTarget]);\n }\n } else if (\n session.mode === 'none'\n && !session.shiftKey\n && session.pressHit.drillTargetId\n && session.pressHit.drillTargetId !== session.pressTarget\n ) {\n const releaseHit = selection.createHitSnapshot(releasePoint);\n const drillTargetId = session.pressHit.drillTargetId;\n const targetStillExists = !!getPlayerItemById(\n this._owner.getEngine().sceneServer.compositions[0],\n drillTargetId,\n );\n\n if (targetStillExists && releaseHit.drillTargetId === drillTargetId) {\n selection.commitSelectedItems([drillTargetId]);\n }\n } else if (\n !session.pressTarget\n && !session.shiftKey\n && selection.getFocusedGroupId()\n && !selection.isPointInFocusedGroup(releasePoint)\n ) {\n selection.setFocusedGroup(null);\n }\n\n this.resetSession();\n this._owner.emit('actioncommit', {\n source: this,\n selectedIds: [...this._owner.getSelection().getSelectedIds()],\n oldSelectedIds: session.initialSelectedIds,\n });\n }\n\n /** 释放选择交互状态。 */\n override dispose (): void {\n this.hoverItemId = undefined;\n this.resetSession();\n super.dispose();\n }\n\n /**\n * 解析按下阶段应提交的选区。\n * @param event 鼠标按下事件。\n * @param session 当前按下会话。\n * @returns 立即提交的选中项 ID;需要延迟或保持选区时返回 undefined。\n */\n private resolvePressSelection (\n event: InputEventMouseButton,\n session: SelectionPressSession,\n ): string[] | undefined {\n const selection = this._owner.getSelection();\n const selectedIds = session.initialSelectedIds;\n const target = session.pressTarget;\n\n // 步骤 1:双击按已选父组继续向内下钻一层。\n if (event.doubleClick && !event.shiftPressed && session.pressHit.drillTargetId) {\n return [session.pressHit.drillTargetId];\n }\n\n // 步骤 2:Shift 单击切换目标的选中状态。\n if (event.shiftPressed) {\n if (!target) {\n return undefined;\n }\n\n return selectedIds.includes(target)\n ? selectedIds.filter(id => id !== target)\n : [...selectedIds, target];\n }\n\n // 步骤 3:空白点击或已选范围内点击保持既有拖拽语义。\n if (!target) {\n return this._owner.getSelection().isPointInSelectedViewBox(session.pressHit.point) ? undefined : [];\n }\n\n if (session.pressHit.selectedScopeHitIds.includes(target)) {\n if (!selection.isItemSelected(target)) {\n session.mode = 'deferred';\n session.deferredTarget = target;\n }\n\n return undefined;\n }\n\n // 步骤 4:重叠未选目标延迟到抬起时确认。\n if (session.pressHit.selectedScopeHitIds.length > 0) {\n if (!selection.isItemSelected(target)) {\n session.mode = 'deferred';\n session.deferredTarget = target;\n }\n\n return undefined;\n }\n\n return [target];\n }\n\n /**\n * 根据右键命中结果更新上下文选区。\n * @param event 鼠标按下事件。\n * @returns 选区是否发生变化。\n */\n private resolveContextSelection (event: InputEventMouseButton): boolean {\n const selection = this._owner.getSelection();\n const hitId = selection.createHitSnapshot(\n new Vector2(event.position.x, event.position.y),\n ).topmostId;\n const selectedIds = [...selection.getSelectedIds()];\n const selectedScopeIds = new Set([\n ...selectedIds,\n ...selectedIds.flatMap(id => {\n const item = getPlayerItemById(this._owner.getEngine().sceneServer.compositions[0], id);\n\n return item ? getItemChildren(item).map(child => child.getInstanceId()) : [];\n }),\n ]);\n\n if (hitId && !selectedScopeIds.has(hitId)) {\n return selection.commitSelectedItems(\n event.shiftPressed ? [...selectedIds, hitId] : [hitId],\n );\n }\n\n return false;\n }\n\n /** 清除当前按下会话。 */\n private resetSession (): void {\n this.session = undefined;\n }\n\n}\n","import { Gizmo } from '../gizmo';\nimport type { GizmoOwner } from '../gizmo-owner';\nimport {\n InputEventMouseButton,\n type InputEventMouse,\n type InputEventMouseMotion,\n} from '@galacean/effects';\nimport type { Control } from '@galacean/effects-plugin-gui';\n\n/**\n * 复制鼠标按键事件,生成可独立修改的快照。\n * @param source 源鼠标按键事件。\n * @returns 事件快照。\n */\nfunction copyMouseButton (source: InputEventMouseButton): InputEventMouseButton {\n const event = new InputEventMouseButton();\n\n event.device = source.device;\n event.pressed = source.pressed;\n event.canceled = source.isCanceled();\n event.commandOrControlAutoremap = source.commandOrControlAutoremap;\n event.shiftPressed = source.shiftPressed;\n event.altPressed = source.altPressed;\n event.metaPressed = source.metaPressed;\n event.ctrlPressed = source.ctrlPressed;\n event.buttonMask = source.buttonMask;\n event.position.copyFrom(source.position);\n event.globalPosition.copyFrom(source.globalPosition);\n event.factor = source.factor;\n event.buttonIndex = source.buttonIndex;\n event.doubleClick = source.doubleClick;\n\n return event;\n}\n\n/**\n * 根据拖拽事件创建用于取消点击候选的抬起事件。\n * @param source 当前鼠标拖拽事件。\n * @param down 原始鼠标按下事件。\n * @returns 已取消的鼠标抬起事件。\n */\nfunction canceledReleaseFromMotion (\n source: InputEventMouseMotion,\n down: InputEventMouseButton,\n): InputEventMouseButton {\n const event = copyMouseButton(down);\n\n event.pressed = false;\n event.canceled = true;\n event.buttonMask = source.buttonMask;\n event.position.copyFrom(source.position);\n event.shiftPressed = source.shiftPressed;\n event.altPressed = source.altPressed;\n event.metaPressed = source.metaPressed;\n event.ctrlPressed = source.ctrlPressed;\n\n return event;\n}\n\n/**\n * 判断当前平台的标准快捷键是否按下。\n * @param event 鼠标拖拽事件。\n * @returns 是否按下 Command 或 Ctrl。\n */\nfunction isStandardShortcutPressed (event: InputEventMouseMotion): boolean {\n const isApplePlatform = typeof navigator !== 'undefined'\n && /Mac|iPhone|iPad|iPod/.test(navigator.platform);\n\n return isApplePlatform ? event.metaPressed : event.ctrlPressed;\n}\n\n/** 点击与拖拽候选的仲裁配置。 */\nexport type ClickDragMultiplexOptions = {\n /** 点击阶段的候选列表。 */\n clickCandidates: Gizmo[],\n /** 拖拽阶段的候选列表。 */\n dragCandidates: Gizmo[],\n /** 标准快捷键按下时优先尝试的拖拽候选。 */\n auxiliaryBehavior?: Gizmo,\n};\n\n/** 在同一指针序列中延迟仲裁点击与拖拽候选。 */\nexport class ClickDragMultiplexGizmo extends Gizmo {\n readonly type = 'click-drag-multiplex';\n\n /** 点击阶段的候选列表。 */\n private readonly clickCandidateList: readonly Gizmo[];\n /** 拖拽阶段的候选列表。 */\n private readonly dragCandidateList: readonly Gizmo[];\n /** 标准快捷键对应的辅助拖拽候选。 */\n private readonly auxiliaryBehaviorGizmo: Gizmo | undefined;\n /** 供拖拽候选重放的按下事件快照。 */\n private downSnapshot: InputEventMouseButton | undefined;\n /** 当前拖拽候选胜者。 */\n private dragWinner: Gizmo | undefined;\n /** 当前点击候选胜者。 */\n private clickWinner: Gizmo | undefined;\n\n /**\n * 创建点击与拖拽仲裁器。\n * @param owner Gizmo 宿主。\n * @param options 候选配置。\n */\n constructor (owner: GizmoOwner, options: ClickDragMultiplexOptions) {\n super(owner);\n this.clickCandidateList = [...options.clickCandidates];\n this.dragCandidateList = [...options.dragCandidates];\n this.auxiliaryBehaviorGizmo = options.auxiliaryBehavior;\n }\n\n /** @returns 点击候选的只读列表。 */\n clickCandidates (): readonly Gizmo[] {\n return this.clickCandidateList;\n }\n\n /** @returns 拖拽候选的只读列表。 */\n dragCandidates (): readonly Gizmo[] {\n return this.dragCandidateList;\n }\n\n /** @returns 标准快捷键对应的辅助拖拽候选。 */\n auxiliaryBehavior (): Gizmo | undefined {\n return this.auxiliaryBehaviorGizmo;\n }\n\n /**\n * 将按下事件交给点击候选并保存事件快照。\n * @param event 鼠标按下事件。\n */\n override onMouseDown (event: InputEventMouseButton): void {\n const winner = this.invokeMouseDown(this.clickCandidateList, event);\n\n if (winner) {\n this.clickWinner = winner;\n }\n this.downSnapshot = copyMouseButton(event);\n this.dragWinner = undefined;\n }\n\n /**\n * 将悬停移动事件广播给点击候选。\n * @param event 鼠标移动事件。\n */\n override onMouseMove (event: InputEventMouseMotion): void {\n for (const candidate of this.clickCandidateList) {\n this.invoke(candidate, event, 'move');\n }\n\n this.dragWinner = undefined;\n }\n\n /**\n * 解析拖拽胜者并将事件转发给它。\n * @param event 鼠标拖拽事件。\n */\n override onMouseDrag (event: InputEventMouseMotion): void {\n // 步骤 1:允许已建立会话的点击候选优先处理拖拽。\n for (const candidate of this.clickCandidateList) {\n if (this.invoke(candidate, event, 'drag')) {\n return;\n }\n }\n\n if (!this.downSnapshot) {\n return;\n }\n\n // 步骤 2:重放按下事件,按优先级解析拖拽胜者。\n if (!this.dragWinner) {\n this.downSnapshot.clearAccepted();\n if (isStandardShortcutPressed(event)) {\n this.dragWinner = this.resolveDragCandidate(this.auxiliaryBehaviorGizmo);\n }\n if (!this.dragWinner) {\n for (const candidate of this.dragCandidateList) {\n this.dragWinner = this.resolveDragCandidate(candidate);\n if (this.dragWinner) {\n break;\n }\n }\n }\n if (!this.dragWinner) {\n return;\n }\n\n // 步骤 3:拖拽胜出后取消所有点击会话。\n const canceledRelease = canceledReleaseFromMotion(event, this.downSnapshot);\n\n for (const candidate of this.clickCandidateList) {\n this.invoke(candidate, canceledRelease, 'up');\n }\n }\n\n this.invoke(this.dragWinner, event, 'drag');\n }\n\n /**\n * 将抬起事件交给当前胜者。\n * @param event 鼠标抬起事件。\n */\n override onMouseUp (event: InputEventMouseButton): void {\n if (this.clickWinner) {\n this.clickWinner = undefined;\n }\n if (this.dragWinner) {\n this.invoke(this.dragWinner, event, 'up');\n this.dragWinner = undefined;\n } else {\n for (const candidate of this.clickCandidateList) {\n if (this.invoke(candidate, event, 'up')) {\n break;\n }\n }\n }\n }\n\n /** 将每帧更新转发给点击和拖拽候选。 */\n override onUpdate (): void {\n for (const candidate of [...this.clickCandidateList, ...this.dragCandidateList]) {\n candidate.onUpdate();\n }\n }\n\n /**\n * 按候选优先级绘制所有子 Gizmo。\n * @param control 绘制控制器。\n */\n override draw (control: Control): void {\n const ordered: Gizmo[] = [...this.clickCandidateList, ...this.dragCandidateList];\n\n if (this.auxiliaryBehaviorGizmo) {\n ordered.push(this.auxiliaryBehaviorGizmo);\n }\n for (const candidate of ordered) {\n candidate.draw(control);\n }\n }\n\n /** 释放所有子 Gizmo 和交互快照。 */\n override dispose (): void {\n this.clearWinners();\n this.downSnapshot = undefined;\n for (const candidate of this.allChildren()) {\n candidate.dispose();\n }\n super.dispose();\n }\n\n /**\n * 顺序派发按下事件并返回首个接受者。\n * @param candidates 候选列表。\n * @param event 鼠标按下事件。\n * @returns 接受事件的候选。\n */\n private invokeMouseDown (candidates: readonly Gizmo[], event: InputEventMouseButton): Gizmo | undefined {\n for (const candidate of candidates) {\n if (this.invoke(candidate, event, 'down')) {\n return candidate;\n }\n }\n\n return undefined;\n }\n\n /**\n * 向候选重放按下事件以尝试建立拖拽会话。\n * @param candidate 待尝试的候选。\n * @returns 接受事件的拖拽候选。\n */\n private resolveDragCandidate (candidate: Gizmo | undefined): Gizmo | undefined {\n if (!candidate || !this.downSnapshot) {\n return undefined;\n }\n\n return this.invoke(candidate, this.downSnapshot, 'down') ? candidate : undefined;\n }\n\n /** @returns 所有受托管的子 Gizmo。 */\n private allChildren (): Gizmo[] {\n const children: Gizmo[] = [...this.clickCandidateList, ...this.dragCandidateList];\n\n if (this.auxiliaryBehaviorGizmo) {\n children.push(this.auxiliaryBehaviorGizmo);\n }\n\n return children;\n }\n\n /** 清除当前点击与拖拽胜者。 */\n private clearWinners (): void {\n this.dragWinner = undefined;\n if (this.clickWinner) {\n this.clickWinner = undefined;\n }\n }\n\n /**\n * 调用候选的指定鼠标阶段。\n * @param candidate 目标候选。\n * @param event 鼠标事件。\n * @param phase 事件阶段。\n * @returns 候选是否接受事件。\n */\n private invoke (\n candidate: Gizmo,\n event: InputEventMouse,\n phase: 'down' | 'move' | 'drag' | 'up',\n ): boolean {\n switch (phase) {\n case 'down':\n candidate.onMouseDown(event as InputEventMouseButton);\n\n break;\n case 'move':\n candidate.onMouseMove(event as InputEventMouseMotion);\n\n break;\n case 'drag':\n candidate.onMouseDrag(event as InputEventMouseMotion);\n\n break;\n case 'up':\n candidate.onMouseUp(event as InputEventMouseButton);\n\n break;\n }\n\n return event.isAccepted();\n }\n}\n","import type { Box2 } from '@galacean/effects-math/es/extension/index';\nimport { Line2 } from '@galacean/effects-math/es/extension/index';\nimport { Vector2 } from '../math';\nimport type { LayoutInfo } from './types';\n\n/** 自动布局兄弟元素的几何与位置信息。 */\nexport type SiblingInfo = {\n /** 元素 ID。 */\n id: string,\n /** 视图包围盒。 */\n box: Box2,\n /** 包围盒中心点。 */\n center: Vector2,\n /** 自动布局位置。 */\n layoutInfo?: LayoutInfo,\n};\n\n/** 自动布局插入指示器。 */\nexport type AutoLayoutIndicator = {\n /** 目标画板 ID。 */\n frameId: string,\n /** 在画板子元素列表中的插入索引。 */\n insertIndex: number,\n /** 相对参考元素的插入方向。 */\n insertDirection: 'before' | 'after',\n /** 参考兄弟元素 ID。 */\n targetSiblingId?: string,\n /** 插入指示线。 */\n line: Line2,\n /** 目标行号。 */\n targetRow?: number,\n /** 目标列号。 */\n targetColumn?: number,\n} | null;\n\n/** 自动布局中的行列位置。 */\nexport type LayoutPosition = {\n /** 行号。 */\n row: number,\n /** 列号。 */\n column: number,\n};\n\n/** 自动布局的插入位置及指示器依据。 */\nexport type InsertInfo = {\n /** 在画板子元素列表中的插入索引。 */\n index: number,\n /** 相对参考元素的插入方向。 */\n direction: 'before' | 'after',\n /** 参考兄弟元素 ID。 */\n siblingId?: string,\n /** 目标行号。 */\n row: number,\n /** 目标列号。 */\n column: number,\n /** 跨行移动信息。 */\n rowChange?: {\n /** 原行号。 */\n fromRow: number,\n /** 目标行号。 */\n toRow: number,\n /** 原行的视图边界。 */\n rowBounds?: {\n /** 最小 Y 坐标。 */\n minY: number,\n /** 最大 Y 坐标。 */\n maxY: number,\n /** 最小 X 坐标。 */\n minX: number,\n /** 最大 X 坐标。 */\n maxX: number,\n },\n /** 是否发生跨行移动。 */\n isRowChange: boolean,\n },\n /** 参考元素包围盒。 */\n box?: Box2,\n};\n\n/** 已解析行列位置的兄弟元素。 */\nexport type SiblingWithInfo = {\n /** 元素 ID。 */\n id: string,\n /** 视图包围盒。 */\n box: Box2,\n /** 行号。 */\n row: number,\n /** 列号。 */\n column: number,\n /** 包围盒中心 X 坐标。 */\n centerX: number,\n};\n\n/**\n * 按元素 `row` 字段分组的纯函数。\n * @param items 元素列表\n * @returns 按行号分组的 Map\n */\nfunction groupItemsByRow<T extends { row?: number }> (items: T[]): Map<number, T[]> {\n const groups = new Map<number, T[]>();\n\n for (const item of items) {\n const row = item.row ?? 0;\n const group = groups.get(row);\n\n if (group) {\n group.push(item);\n } else {\n groups.set(row, [item]);\n }\n }\n\n return groups;\n}\n\n/**\n * 计算自动布局插入指示线。\n * @param insertInfo 插入位置信息\n * @returns 主指示线\n */\nexport function calculateAutoLayoutIndicatorLine (\n insertInfo: InsertInfo,\n): Line2 {\n const LINE_EXTENSION = 10;\n const MOUSE_GAP = 5;\n const ROW_LINE_EXTENSION = 20;\n\n // 1. 跨行移动时生成原行边界的水平指示线。\n if (insertInfo.rowChange?.isRowChange && insertInfo.rowChange.rowBounds) {\n const bounds = insertInfo.rowChange.rowBounds;\n const isMovingUp = insertInfo.rowChange.toRow < insertInfo.rowChange.fromRow;\n\n const lineY = isMovingUp ? bounds.minY : bounds.maxY;\n\n return new Line2(\n new Vector2(bounds.minX - ROW_LINE_EXTENSION, lineY),\n new Vector2(bounds.maxX + ROW_LINE_EXTENSION, lineY)\n );\n }\n\n // 2. 同行移动时在参考元素前后生成垂直指示线。\n if (insertInfo.box) {\n const siblingBox = insertInfo.box;\n\n if (insertInfo.direction === 'before') {\n return new Line2(\n new Vector2(siblingBox.min.x - MOUSE_GAP, siblingBox.min.y - LINE_EXTENSION),\n new Vector2(siblingBox.min.x - MOUSE_GAP, siblingBox.max.y + LINE_EXTENSION)\n );\n } else {\n return new Line2(\n new Vector2(siblingBox.max.x + MOUSE_GAP, siblingBox.min.y - LINE_EXTENSION),\n new Vector2(siblingBox.max.x + MOUSE_GAP, siblingBox.max.y + LINE_EXTENSION)\n );\n }\n }\n\n return new Line2();\n}\n\n/**\n * 基于鼠标位置计算布局位置(row 和 column)。\n * @param mousePoint 鼠标位置\n * @param siblingInfos 所有兄弟元素的信息\n * @returns 布局位置信息 { row: number, column: number }\n */\nexport function calculateAutoLayoutPositionByMouse (\n mousePoint: Vector2,\n siblingInfos: SiblingInfo[],\n): LayoutPosition | null {\n if (siblingInfos.length === 0) {\n return { row: 0, column: 0 };\n }\n\n const mouseY = mousePoint.y;\n const mouseX = mousePoint.x;\n\n // 1. 按已有行号分组并计算各行的垂直边界。\n const rowGroups = groupItemsByRow(siblingInfos.map(s => ({\n ...s,\n row: s.layoutInfo?.row !== undefined ? Math.floor(s.layoutInfo.row) : 0,\n })));\n\n let maxRow = 0;\n let minRow = 0;\n\n for (const row of rowGroups.keys()) {\n maxRow = Math.max(maxRow, row);\n minRow = Math.min(minRow, row);\n }\n\n /** 行的视图边界。 */\n type RowInfo = {\n /** 行号。 */\n row: number,\n /** 中心 Y 坐标。 */\n centerY: number,\n /** 上边界。 */\n minY: number,\n /** 下边界。 */\n maxY: number,\n /** 行高。 */\n height: number,\n };\n\n const rowInfos: RowInfo[] = [];\n\n for (const [row, items] of rowGroups) {\n const minY = Math.min(...items.map(i => i.box.min.y));\n const maxY = Math.max(...items.map(i => i.box.max.y));\n const centerY = (minY + maxY) / 2;\n const height = maxY - minY;\n\n rowInfos.push({ row, centerY, minY, maxY, height });\n }\n\n rowInfos.sort((a, b) => a.centerY - b.centerY);\n\n // 2. 按鼠标纵坐标确定命中行、首尾新行或最近行。\n let targetRow = 0;\n\n let foundRow = false;\n\n for (const currentRow of rowInfos) {\n if (mouseY >= currentRow.minY && mouseY <= currentRow.maxY) {\n targetRow = currentRow.row;\n foundRow = true;\n\n break;\n }\n }\n\n if (!foundRow && rowInfos.length > 0) {\n const firstRow = rowInfos[0];\n\n if (firstRow && mouseY < firstRow.minY) {\n targetRow = minRow - 1;\n foundRow = true;\n }\n }\n\n if (!foundRow && rowInfos.length > 0) {\n const lastRow = rowInfos[rowInfos.length - 1];\n\n if (lastRow && mouseY > lastRow.maxY) {\n targetRow = maxRow + 1;\n foundRow = true;\n }\n }\n\n if (!foundRow) {\n let minDistance = Infinity;\n\n for (const rowInfo of rowInfos) {\n const distance = Math.abs(mouseY - rowInfo.centerY);\n\n if (distance < minDistance) {\n minDistance = distance;\n targetRow = rowInfo.row;\n }\n }\n }\n\n // 3. 按鼠标横坐标确定目标行内的插入列。\n const targetRowItems = rowGroups.get(targetRow) ?? [];\n\n if (targetRowItems.length === 0) {\n return { row: targetRow, column: 0 };\n }\n\n targetRowItems.sort((a, b) => a.center.x - b.center.x);\n\n for (let i = 0; i < targetRowItems.length; i++) {\n const item = targetRowItems[i];\n\n if (item && mouseX < item.center.x) {\n return { row: targetRow, column: i };\n }\n }\n\n return { row: targetRow, column: targetRowItems.length };\n}\n\n/**\n * 基于鼠标位置计算插入位置(用于显示指示器)。\n * @param mousePoint 鼠标位置\n * @param siblingsWithInfos 所有兄弟元素信息\n * @param allChildren 所有兄弟元素ID数组\n * @param originalRow 原始行号\n * @returns 插入位置信息和计算出的行列位置\n */\nexport function calculateInsertPositionFromLayout (\n mousePoint: Vector2,\n siblingsWithInfos: SiblingWithInfo[],\n allChildren: string[],\n originalRow: number,\n): InsertInfo {\n const mouseX = mousePoint.x;\n const mouseY = mousePoint.y;\n\n if (siblingsWithInfos.length === 0) {\n return { index: 0, direction: 'after', row: -1, column: 0 };\n }\n\n // 1. 按行分组并计算每行的视图边界。\n const rowGroups = groupItemsByRow(siblingsWithInfos);\n\n const rowBounds = new Map<number, { minY: number, maxY: number, minX: number, maxX: number }>();\n\n for (const [row, items] of rowGroups) {\n const minY = Math.min(...items.map(i => i.box.min.y));\n const maxY = Math.max(...items.map(i => i.box.max.y));\n const minX = Math.min(...items.map(i => i.box.min.x));\n const maxX = Math.max(...items.map(i => i.box.max.x));\n\n rowBounds.set(row, { minY, maxY, minX, maxX });\n }\n\n const sortedRows = Array.from(rowGroups.keys()).sort((a, b) => a - b);\n\n // 2. 按鼠标纵坐标确定目标行及是否跨行。\n let targetRow = -1;\n\n for (const row of sortedRows) {\n const bounds = rowBounds.get(row);\n\n if (bounds && mouseY >= bounds.minY && mouseY <= bounds.maxY) {\n targetRow = row;\n\n break;\n }\n }\n\n if (targetRow === -1 && sortedRows.length > 0) {\n const firstRowNum = sortedRows[0];\n\n if (firstRowNum === undefined) {\n targetRow = -1;\n } else {\n const firstRowBounds = rowBounds.get(firstRowNum);\n\n if (firstRowBounds && mouseY < firstRowBounds.minY) {\n targetRow = -1;\n } else {\n targetRow = sortedRows[sortedRows.length - 1] ?? -1;\n }\n }\n }\n\n const currentRowBounds = rowBounds.get(originalRow);\n const isRowChange = targetRow !== originalRow;\n\n // 3. 在目标行中查找参考元素和插入索引。\n const targetRowItems = rowGroups.get(targetRow) ?? [];\n\n if (targetRowItems.length === 0) {\n let referenceItemId: string | null = null;\n\n for (const [row, items] of rowGroups) {\n if (row > targetRow && items.length > 0) {\n const firstItem = items[0];\n\n if (firstItem) {\n referenceItemId = firstItem.id;\n\n break;\n }\n }\n }\n\n if (!referenceItemId) {\n const lastRow = sortedRows[sortedRows.length - 1];\n const lastRowItems = lastRow !== undefined ? rowGroups.get(lastRow) ?? [] : [];\n\n referenceItemId = lastRowItems[lastRowItems.length - 1]?.id ?? null;\n }\n\n if (referenceItemId) {\n const refIndex = allChildren.indexOf(referenceItemId);\n\n if (refIndex !== -1) {\n return {\n index: targetRow === -1 ? refIndex : refIndex + 1,\n direction: targetRow === -1 ? 'before' : 'after',\n siblingId: referenceItemId,\n row: targetRow,\n column: targetRow === -1 ? 0 : (rowGroups.get(targetRow)?.length ?? 0),\n rowChange: isRowChange && currentRowBounds ? {\n fromRow: originalRow,\n toRow: targetRow,\n rowBounds: currentRowBounds,\n isRowChange,\n } : undefined,\n box: siblingsWithInfos.find(info => info.id === referenceItemId)?.box,\n };\n }\n }\n\n return {\n index: 0,\n direction: 'after',\n row: targetRow,\n column: 0,\n rowChange: isRowChange && currentRowBounds ? {\n fromRow: originalRow,\n toRow: targetRow,\n rowBounds: currentRowBounds,\n isRowChange,\n } : undefined,\n };\n }\n\n targetRowItems.sort((a, b) => a.centerX - b.centerX);\n\n for (const info of targetRowItems) {\n if (mouseX < info.centerX) {\n const refIndex = allChildren.indexOf(info.id);\n\n if (refIndex !== -1) {\n return {\n index: refIndex,\n direction: 'before',\n siblingId: info.id,\n row: targetRow,\n column: info.column,\n rowChange: isRowChange && currentRowBounds ? {\n fromRow: originalRow,\n toRow: targetRow,\n rowBounds: currentRowBounds,\n isRowChange: true,\n } : undefined,\n box: info.box,\n };\n }\n }\n }\n\n // 4. 鼠标位于目标行末尾时插入到最后一个元素之后。\n const lastItem = targetRowItems[targetRowItems.length - 1];\n\n if (lastItem) {\n const refIndex = allChildren.indexOf(lastItem.id);\n\n if (refIndex !== -1) {\n return {\n index: refIndex + 1,\n direction: 'after',\n siblingId: lastItem.id,\n row: targetRow,\n column: lastItem.column + 1,\n rowChange: isRowChange && currentRowBounds ? {\n fromRow: originalRow,\n toRow: targetRow,\n rowBounds: currentRowBounds,\n isRowChange: true,\n } : undefined,\n box: lastItem.box,\n };\n }\n }\n\n return {\n index: 0,\n direction: 'after',\n row: -1,\n column: 0,\n rowChange: isRowChange && currentRowBounds ? {\n fromRow: originalRow,\n toRow: targetRow,\n rowBounds: currentRowBounds,\n isRowChange: true,\n } : undefined,\n };\n}\n","import type { Box2 } from '@galacean/effects-math/es/extension/index';\n\n/** 画板布局模式。 */\nexport enum FrameLayoutMode {\n /** 自动布局:元素按行列规则自动排布。 */\n AUTO = 'auto',\n /** 自由布局:元素位置不受布局约束。 */\n FREE = 'free'\n}\n\n/** 画板数据及其当前视图包围盒。 */\nexport type FrameInfo = {\n /** 画板元素 ID。 */\n id: string,\n /** 当前视图包围盒。 */\n box: Box2,\n /** 布局模式。 */\n layoutMode: FrameLayoutMode,\n /** 子元素 ID。 */\n children: string[],\n /** 子元素自动布局信息。 */\n layoutInfos: Record<string, LayoutInfo>,\n};\n\n/** 元素在自动布局中的位置信息。 */\nexport type LayoutInfo = {\n /**\n * 所在行号(可为小数)。\n * 整数部分为主行号(0, 1, 2...),小数部分为分行后的子行号(如 1.5 表示第 1 行的第 5 个子行),\n * 仅支持两层(即小数部分为 0-9)。\n */\n row: number,\n /** 所在列号(必须为整数)。 */\n column: number,\n /** 元素在布局中的位置(相对于画板左上角,可选)。 */\n position?: [number, number],\n};\n\n/** 画板自动布局约束。 */\nexport type AutoLayoutConfig = {\n /** 单行最大宽度。 */\n maxRowWidth?: number,\n /** 最大行数。 */\n maxRowCount?: number,\n};\n","import { type Engine, type VFXItem } from '@galacean/effects';\nimport type { Control } from '@galacean/effects-plugin-gui';\nimport type { GizmoOwner } from '../gizmo-owner';\nimport { drawCorners, toColor } from '../drawing';\nimport {\n getItemChildren,\n getItemViewBox,\n getPlayerItemById,\n isEffectsPlayerItem,\n isFramePlayerItem,\n isGroupPlayerItem,\n} from '../items';\nimport {\n calculateAutoLayoutIndicatorLine,\n calculateAutoLayoutPositionByMouse,\n calculateInsertPositionFromLayout,\n type AutoLayoutIndicator,\n} from './layout-calculations';\nimport { FrameLayoutMode, type FrameInfo } from './types';\nimport type { Box2 } from '@galacean/effects-math/es/extension/index';\nimport { Line2 } from '@galacean/effects-math/es/extension/index';\nimport { Vector2, getBoxCorners } from '../math';\nimport { GizmoViewportUtils } from '../viewport';\n\n/** 选区拖拽产生的层级位置变更。 */\nexport type SelectionPlacementChange =\n | {\n /** 移入画板。 */\n type: 'moveIn',\n /** 待移入元素 ID。 */\n itemIds: string[],\n /** 目标画板 ID。 */\n targetFrameId: string,\n }\n | {\n /** 移出画板。 */\n type: 'moveOut',\n /** 待移出元素 ID。 */\n itemIds: string[],\n /** 原画板 ID。 */\n originalFrameId: string,\n }\n | {\n /** 子元素脱离组合。 */\n type: 'detachGroupChildren',\n /** 原组合 ID。 */\n groupId: string,\n /** 待脱离的子元素 ID。 */\n itemIds: string[],\n /** 原画板 ID。 */\n originalFrameId: string,\n };\n\n/** 自动布局重排的起止位置。 */\nexport type AutoLayoutChangeInfo = {\n /** 画板 ID。 */\n frameId: string,\n /** 被拖拽元素 ID。 */\n draggedItemId: string,\n /** 原行号。 */\n fromRow: number,\n /** 原列号。 */\n fromColumn: number,\n /** 目标行号。 */\n toRow: number,\n /** 目标列号。 */\n toColumn: number,\n};\n\n/** 辅助布局交互的提交结果。 */\nexport type AssistedLayoutFinishResult = {\n /** 层级位置变更。 */\n placementChanges: SelectionPlacementChange[],\n /** 自动布局重排信息。 */\n autoLayoutChange?: AutoLayoutChangeInfo,\n};\n\n/** 自动布局中的兄弟元素信息。 */\ntype AutoLayoutSibling = {\n /** 元素 ID。 */\n id: string,\n /** 视图包围盒。 */\n box: Box2,\n /** 包围盒中心。 */\n center: Vector2,\n /** 包围盒中心 X 坐标。 */\n centerX: number,\n /** 当前布局位置。 */\n layoutInfo: {\n /** 行号。 */\n row: number,\n /** 列号。 */\n column: number,\n },\n /** 行号。 */\n row: number,\n /** 列号。 */\n column: number,\n};\n\n/** 待提交的组合子元素脱离信息。 */\ntype PendingGroupDetach = {\n /** 组合 ID。 */\n groupId: string,\n /** 目标画板 ID。 */\n frameId: string,\n /** 位于目标画板外的子元素 ID。 */\n childrenOutOfFrame: string[],\n};\n\n/** 计算选区拖拽期间的画板归属、自动布局位置和视觉提示。 */\nexport class AssistedLayout {\n private readonly owner: GizmoOwner;\n private readonly engine: Engine;\n private selectedItems: VFXItem[] = [];\n private readonly selectedFrameIds = new Set<string>();\n private readonly currentFrameIds = new Map<string, string | undefined>();\n private readonly pendingGroupDetaches = new Map<string, PendingGroupDetach>();\n private targetFrameId: string | undefined;\n private autoLayoutIndicator: AutoLayoutIndicator = null;\n private autoLayoutDragOriginalPosition: { row: number, column: number } | null = null;\n private autoLayoutDragFrameId: string | null = null;\n private autoLayoutDragItemId: string | null = null;\n private pendingLayoutPosition: { row: number, column: number } | null = null;\n\n /**\n * @param owner Gizmo 宿主\n */\n constructor (owner: GizmoOwner) {\n this.owner = owner;\n this.engine = owner.getEngine();\n }\n\n /**\n * 开始辅助布局会话并记录元素原画板。\n * @param selectedItems 当前选中元素\n */\n begin (selectedItems: readonly VFXItem[]): void {\n this.cancel();\n this.selectedItems = [...selectedItems];\n for (const item of selectedItems) {\n const id = item.getInstanceId();\n\n if (isFramePlayerItem(item)) {\n this.selectedFrameIds.add(id);\n }\n const frameId = this.owner.getFrameManager().getParentFrame(id)?.id;\n\n this.currentFrameIds.set(id, frameId);\n }\n }\n\n /**\n * 根据当前指针计算元素移入或移出画板的变更。\n * @param pointer 当前指针视图坐标\n * @returns 本帧需要应用的层级位置变更\n */\n resolveReparent (pointer: Vector2): SelectionPlacementChange[] {\n const frameManager = this.owner.getFrameManager();\n\n frameManager.updateViewBoxes();\n const frameInfos = frameManager.getViewInfos();\n const containerSize = GizmoViewportUtils.getContainerSize(this.engine.canvas.parentElement!);\n const changes: SelectionPlacementChange[] = [];\n let lastTargetFrameId: string | undefined;\n\n for (const item of this.selectedItems) {\n const result = this.resolveItemReparent(item, pointer, frameInfos, containerSize);\n\n if (result.change) {\n changes.push(result.change);\n }\n if (result.targetFrameId !== undefined) {\n lastTargetFrameId = result.targetFrameId;\n }\n }\n this.targetFrameId = lastTargetFrameId;\n\n return changes;\n }\n\n /**\n * 更新自动布局目标位置和插入指示器。\n * @param pointer 当前指针视图坐标\n */\n updateAutoLayout (pointer: Vector2): void {\n // 1. 校验单选元素及指针所在的自动布局画板。\n const item = this.selectedItems.length === 1 ? this.selectedItems[0] : undefined;\n\n if (!item || isFramePlayerItem(item) || isEffectsPlayerItem(item)) {\n this.clearAutoLayoutVisualState();\n\n return;\n }\n\n const parentFrameInfo = this.owner.getFrameManager().findFrameAt(pointer);\n\n if (parentFrameInfo?.layoutMode !== FrameLayoutMode.AUTO) {\n this.clearAutoLayoutVisualState();\n\n return;\n }\n\n // 2. 首次进入画板时记录元素原始行列位置。\n const frameId = parentFrameInfo.id;\n const draggedItemId = item.getInstanceId();\n\n if (\n this.autoLayoutDragOriginalPosition === null\n || this.autoLayoutDragFrameId !== frameId\n || this.autoLayoutDragItemId !== draggedItemId\n ) {\n const originalLayoutInfo = parentFrameInfo.layoutInfos?.[draggedItemId];\n\n this.autoLayoutDragOriginalPosition = {\n row: originalLayoutInfo?.row ?? 0,\n column: originalLayoutInfo?.column ?? 0,\n };\n this.autoLayoutDragFrameId = frameId;\n this.autoLayoutDragItemId = draggedItemId;\n }\n\n // 3. 收集目标画板中其余可见兄弟元素的布局几何。\n const containerSize = GizmoViewportUtils.getContainerSize(this.engine.canvas.parentElement!);\n const composition = this.engine.sceneServer.compositions[0];\n const siblings = parentFrameInfo.children.reduce<AutoLayoutSibling[]>((result, childId) => {\n if (childId === draggedItemId) {\n return result;\n }\n const playerItem = getPlayerItemById(composition, childId);\n\n if (!playerItem) {\n return result;\n }\n const box = getItemViewBox(playerItem, containerSize);\n\n if (box.isEmpty()) {\n return result;\n }\n const layoutInfo = parentFrameInfo.layoutInfos?.[childId] ?? { row: 0, column: 0 };\n\n result.push({\n id: childId,\n box,\n center: box.getCenter(),\n centerX: box.getCenter().x,\n layoutInfo,\n row: layoutInfo.row,\n column: layoutInfo.column,\n });\n\n return result;\n }, []);\n\n // 4. 计算目标行列、插入索引和指示线。\n const layoutPosition = calculateAutoLayoutPositionByMouse(pointer, siblings);\n\n if (!layoutPosition) {\n this.autoLayoutIndicator = null;\n this.pendingLayoutPosition = null;\n\n return;\n }\n\n this.pendingLayoutPosition = { ...layoutPosition };\n const insertPosition = calculateInsertPositionFromLayout(\n pointer,\n siblings,\n parentFrameInfo.children,\n this.autoLayoutDragOriginalPosition.row,\n );\n const line = insertPosition.siblingId\n ? calculateAutoLayoutIndicatorLine(insertPosition)\n : this.createFallbackIndicatorLine(parentFrameInfo.box, layoutPosition);\n\n this.autoLayoutIndicator = {\n frameId,\n insertIndex: insertPosition.siblingId ? insertPosition.index : parentFrameInfo.children.length,\n insertDirection: insertPosition.siblingId ? insertPosition.direction : 'after',\n targetSiblingId: insertPosition.siblingId,\n line,\n targetRow: layoutPosition.row,\n targetColumn: layoutPosition.column,\n };\n }\n\n /** @returns 当前会话需要提交的层级和自动布局变更。 */\n finish (): AssistedLayoutFinishResult {\n const placementChanges: SelectionPlacementChange[] = [];\n\n for (const pending of this.pendingGroupDetaches.values()) {\n if (pending.childrenOutOfFrame.length > 0) {\n placementChanges.push({\n type: 'detachGroupChildren',\n groupId: pending.groupId,\n itemIds: [...pending.childrenOutOfFrame],\n originalFrameId: pending.frameId,\n });\n }\n }\n\n let autoLayoutChange: AutoLayoutChangeInfo | undefined;\n\n if (\n this.autoLayoutDragFrameId\n && this.autoLayoutDragItemId\n && this.autoLayoutDragOriginalPosition\n && this.pendingLayoutPosition\n ) {\n autoLayoutChange = {\n frameId: this.autoLayoutDragFrameId,\n draggedItemId: this.autoLayoutDragItemId,\n fromRow: this.autoLayoutDragOriginalPosition.row,\n fromColumn: this.autoLayoutDragOriginalPosition.column,\n toRow: this.pendingLayoutPosition.row,\n toColumn: this.pendingLayoutPosition.column,\n };\n }\n\n return { placementChanges, autoLayoutChange };\n }\n\n /**\n * 绘制目标画板和自动布局插入指示器。\n * @param control 绘制控制器\n */\n draw (control: Control): void {\n if (this.targetFrameId) {\n const targetFrameInfo = this.owner.getFrameManager().getViewInfo(this.targetFrameId);\n\n if (targetFrameInfo?.box && !targetFrameInfo.box.isEmpty()) {\n drawCorners(control, getBoxCorners(targetFrameInfo.box), toColor(0xFF0000, 1), 1);\n }\n }\n\n const indicator = this.autoLayoutIndicator;\n\n if (!indicator || indicator.line.distanceSq() === 0) {\n return;\n }\n const lineColor = toColor(0x3b82f6, 1);\n const { start, end } = indicator.line;\n\n control.drawLine(start.x, start.y, end.x, end.y, lineColor, 2);\n control.fillCircle(start.x, start.y, 3, lineColor);\n control.fillCircle(end.x, end.y, 3, lineColor);\n }\n\n /** 取消会话并清空全部辅助布局状态。 */\n cancel (): void {\n this.selectedItems = [];\n this.selectedFrameIds.clear();\n this.currentFrameIds.clear();\n this.pendingGroupDetaches.clear();\n this.targetFrameId = undefined;\n this.clearAutoLayoutState();\n }\n\n /**\n * 计算单个元素相对画板的层级位置变更。\n * @param item 被拖拽元素\n * @param pointer 当前指针视图坐标\n * @param frameInfos 当前画板视图信息\n * @param containerSize 画布容器尺寸\n * @returns 目标画板和可选的层级位置变更\n */\n private resolveItemReparent (\n item: VFXItem,\n pointer: Vector2,\n frameInfos: readonly FrameInfo[],\n containerSize: Vector2,\n ): { targetFrameId?: string, change?: SelectionPlacementChange } {\n // 1. 排除不能移入画板的元素,并解析原画板与目标画板。\n if (isFramePlayerItem(item) || isEffectsPlayerItem(item)) {\n return {};\n }\n\n const itemId = item.getInstanceId();\n const currentFrameId = this.currentFrameIds.get(itemId);\n const currentFrame = frameInfos.find(frame => frame.id === currentFrameId);\n // 被选中的 Frame 会和其他选中项一起移动,不能再作为这些元素的放置容器。\n const targetFrame = frameInfos.find(frame => (\n !this.selectedFrameIds.has(frame.id) && frame.box.containsPoint(pointer)\n ));\n\n // 2. 指针离开原画板时生成移出变更。\n if (!targetFrame && currentFrame) {\n const itemIds = [itemId];\n\n if (isGroupPlayerItem(item)) {\n itemIds.push(...getItemChildren(item).map(child => child.getInstanceId()));\n }\n this.pendingGroupDetaches.delete(itemId);\n this.currentFrameIds.set(itemId, undefined);\n\n return {\n change: {\n type: 'moveOut',\n itemIds,\n originalFrameId: currentFrame.id,\n },\n };\n }\n\n if (!targetFrame || currentFrame?.id === targetFrame.id) {\n return { targetFrameId: targetFrame?.id };\n }\n\n // 3. 移入新画板时检查组合子元素与目标画板的相交关系。\n const itemIds = [itemId];\n\n if (isGroupPlayerItem(item)) {\n const children = getItemChildren(item);\n\n itemIds.push(...children.map(child => child.getInstanceId()));\n if (children.length > 0) {\n const childrenInFrame: string[] = [];\n const childrenOutOfFrame: string[] = [];\n\n for (const child of children) {\n const childBox = getItemViewBox(child, containerSize);\n\n if (!childBox.isEmpty() && targetFrame.box.intersectsBox(childBox)) {\n childrenInFrame.push(child.getInstanceId());\n } else {\n childrenOutOfFrame.push(child.getInstanceId());\n }\n }\n if (childrenInFrame.length === 0) {\n this.pendingGroupDetaches.delete(itemId);\n\n return {};\n }\n if (childrenOutOfFrame.length > 0) {\n this.pendingGroupDetaches.set(itemId, {\n groupId: itemId,\n frameId: targetFrame.id,\n childrenOutOfFrame,\n });\n } else {\n this.pendingGroupDetaches.delete(itemId);\n }\n }\n }\n\n // 4. 记录新画板并生成移入变更。\n this.currentFrameIds.set(itemId, targetFrame.id);\n\n return {\n targetFrameId: targetFrame.id,\n change: {\n type: 'moveIn',\n itemIds,\n targetFrameId: targetFrame.id,\n },\n };\n }\n\n /** 清空自动布局指示器和待提交位置。 */\n private clearAutoLayoutVisualState (): void {\n this.autoLayoutIndicator = null;\n this.pendingLayoutPosition = null;\n }\n\n /** 清空自动布局会话状态。 */\n private clearAutoLayoutState (): void {\n this.clearAutoLayoutVisualState();\n this.autoLayoutDragOriginalPosition = null;\n this.autoLayoutDragFrameId = null;\n this.autoLayoutDragItemId = null;\n }\n\n /**\n * 为没有参考元素的位置创建画板边缘指示线。\n * @param frameBox 画板视图包围盒\n * @param layoutPosition 目标行列位置\n * @returns 插入指示线\n */\n private createFallbackIndicatorLine (\n frameBox: Box2,\n layoutPosition: { row: number, column: number },\n ): Line2 {\n if (frameBox.isEmpty()) {\n return new Line2();\n }\n const inset = 10;\n const minX = Math.min(frameBox.min.x + inset, frameBox.max.x);\n const maxX = Math.max(frameBox.max.x - inset, frameBox.min.x);\n const minY = Math.min(frameBox.min.y + inset, frameBox.max.y);\n const maxY = Math.max(frameBox.max.y - inset, frameBox.min.y);\n\n if (layoutPosition.row < 0) {\n return new Line2(new Vector2(minX, minY), new Vector2(maxX, minY));\n }\n if (layoutPosition.row > 0 && layoutPosition.column === 0) {\n return new Line2(new Vector2(minX, maxY), new Vector2(maxX, maxY));\n }\n const x = layoutPosition.column <= 0 ? minX : maxX;\n\n return new Line2(new Vector2(x, minY), new Vector2(x, maxY));\n }\n}\n","import {\n MouseButton,\n type InputEventMouseButton,\n type InputEventMouseMotion,\n type VFXItem,\n} from '@galacean/effects';\nimport type { Control } from '@galacean/effects-plugin-gui';\nimport { Gizmo } from '../gizmo';\nimport type { Plane } from '@galacean/effects-math/es/extension/index';\nimport { Box2, roundNumber } from '@galacean/effects-math/es/extension/index';\nimport { Euler, EulerOrder, Matrix4, Vector2, Vector3 } from '../math';\nimport { GestureCursorType } from '../cursor';\nimport {\n GizmoViewportUtils,\n createInteractionPlane,\n viewPositionToWorld,\n} from '../viewport';\nimport { getItemViewBox } from '../items';\nimport { TransformType } from './resize-selection-gizmo';\nimport {\n AssistedLayout,\n type AutoLayoutChangeInfo,\n type SelectionPlacementChange,\n} from '../frame/frame-assisted-layout';\n\n/** 拖动选中对象,并处理吸附、重挂载和自动布局。 */\nexport class MoveSelectionGizmo extends Gizmo {\n readonly type = 'move-selection';\n\n private active = false;\n private selectedItems: VFXItem[] = [];\n private selectionBox = new Box2();\n private interactionPlane: Plane | undefined;\n private startPoint = new Vector2();\n private lastPoint = new Vector2();\n private cursorPoint = new Vector2();\n private lastWorldPosition = new Vector3();\n private assistedLayout: AssistedLayout | undefined;\n\n /**\n * 在选区内按下主键时开始移动交互。\n * @param event 鼠标按下事件。\n */\n override onMouseDown (event: InputEventMouseButton): void {\n if (event.buttonIndex !== MouseButton.Left || event.doubleClick || event.shiftPressed) {\n return;\n }\n\n const viewportPoint = new Vector2(event.position.x, event.position.y);\n\n if (!this._owner.getSelection().isPointInSelectedViewBox(viewportPoint)) {\n return;\n }\n\n const selectedItems = this._owner.getSelection().getSelectedPlayerItems();\n\n if (selectedItems.length === 0) {\n return;\n }\n\n // Selection 保证父子节点不会同时入选,交互层直接冻结权威选区。\n this.selectedItems = [...selectedItems];\n this.cursorPoint.copyFrom(viewportPoint);\n this.active = true;\n this.startPoint = new Vector2(event.position.x, event.position.y);\n this.lastPoint.copyFrom(this.startPoint);\n this._owner.setSelectionTransformKind('move');\n this._owner.emit('actionstart', {\n source: this,\n transformType: TransformType.TRANSLATION,\n itemIds: this.selectedItems.map(item => item.getInstanceId()),\n });\n this.assistedLayout = new AssistedLayout(this._owner);\n this.assistedLayout.begin(this.selectedItems);\n event.accept();\n }\n\n /**\n * 忽略未进入拖拽阶段的移动事件。\n * @param _event 鼠标移动事件。\n */\n override onMouseMove (_event: InputEventMouseMotion): void {\n // 选区悬停由 ChangeSelectionGizmo 处理。\n }\n\n /**\n * 移动选中对象并更新布局辅助状态。\n * @param event 鼠标拖拽事件。\n */\n override onMouseDrag (event: InputEventMouseMotion): void {\n if (!this.active) {\n return;\n }\n\n const currentPoint = new Vector2(event.position.x, event.position.y);\n\n this._owner.setCursor({ type: GestureCursorType.NORMAL, angle: 0 });\n\n const shift = new Vector2().subtractVectors(currentPoint, this.lastPoint);\n\n if (this.applyTranslation(shift)) {\n this.lastPoint.copyFrom(currentPoint);\n const pointer = new Vector2(event.position.x, event.position.y);\n const placementChanges = this.assistedLayout?.resolveReparent(pointer) ?? [];\n\n for (const change of placementChanges) {\n this._owner.emit('placementchange', { source: this, ...change });\n }\n if (placementChanges.length > 0) {\n this.cacheSnapTargets();\n }\n this.assistedLayout?.updateAutoLayout(pointer);\n this._owner.emit('actionupdate', {\n source: this,\n transformType: TransformType.TRANSLATION,\n });\n }\n event.accept();\n }\n\n /**\n * 结束移动并提交布局与变换结果。\n * @param event 鼠标抬起事件。\n */\n override onMouseUp (event: InputEventMouseButton): void {\n if (!this.active) {\n return;\n }\n\n const finishResult = this.assistedLayout?.finish();\n\n for (const change of finishResult?.placementChanges ?? []) {\n this._owner.emit('placementchange', { source: this, ...change });\n }\n const actionEvent = {\n source: this,\n transformType: TransformType.TRANSLATION,\n autoLayoutChange: finishResult?.autoLayoutChange,\n };\n\n this._owner.emit('actioncommit', actionEvent);\n this.resetDragState();\n event.accept();\n }\n\n /**\n * 绘制移动过程中的布局辅助信息。\n * @param control 绘制控制器。\n */\n override draw (control: Control): void {\n this.assistedLayout?.draw(control);\n }\n\n /**\n * 将视口位移应用到选中对象。\n * @param shift 本次视口位移。\n * @returns 是否成功应用位移。\n */\n private applyTranslation (shift: Vector2): boolean {\n // 步骤 1:校验位移并准备交互平面。\n if (shift.length() <= 0 || (!this.interactionPlane && !this.prepareTranslationGeometry())) {\n return false;\n }\n\n // 步骤 2:计算当前选区并应用吸附修正。\n const move = shift.clone();\n const containerSize = GizmoViewportUtils.getContainerSize(this._owner.getEngine().canvas.parentElement!);\n const currentSelectionBox = this.computeSelectionBox(containerSize);\n\n if (currentSelectionBox.isEmpty()) {\n return false;\n }\n this.selectionBox.copyFrom(currentSelectionBox);\n\n if (this._owner.getSnapManager().enabled) {\n const previousSnap = new Vector2(\n this._owner.getSnapManager().result.x ?? 0,\n this._owner.getSnapManager().result.y ?? 0,\n );\n\n this._owner.getSnapManager().prepareBox(move, this.selectionBox);\n const snap = new Vector2(\n this._owner.getSnapManager().result.x ?? 0,\n this._owner.getSnapManager().result.y ?? 0,\n );\n\n move.add(previousSnap).subtract(snap);\n }\n\n // 步骤 3:将修正后的视口位置转换为世界坐标。\n const worldPosition = viewPositionToWorld(\n this.cursorPoint.add(move).clone(),\n GizmoViewportUtils.getCameraInfo(this._owner.getEngine()),\n this.interactionPlane!,\n containerSize,\n );\n\n if (!worldPosition) {\n return false;\n }\n\n // 步骤 4:转换为各对象的局部位移并更新变换。\n const translation = worldPosition.clone().subtract(this.lastWorldPosition);\n\n translation.x = roundNumber(translation.x, 5);\n translation.y = roundNumber(translation.y, 5);\n translation.z = roundNumber(translation.z, 5);\n\n for (const item of this.selectedItems) {\n const parentMatrix = new Matrix4().copyFrom(item.transform.getParentMatrix() ?? new Matrix4());\n\n parentMatrix.setPosition(new Vector3());\n const localTranslation = translation.clone().applyMatrix(parentMatrix.invert());\n\n item.translate(...localTranslation.toArray());\n item.transform.updateLocalMatrix();\n }\n this.lastWorldPosition.copyFrom(worldPosition);\n\n return true;\n }\n\n /**\n * 初始化移动所需的选区、吸附目标与交互平面。\n * @returns 是否成功准备交互几何信息。\n */\n private prepareTranslationGeometry (): boolean {\n const containerSize = GizmoViewportUtils.getContainerSize(this._owner.getEngine().canvas.parentElement!);\n const selectionBox = this.computeSelectionBox(containerSize);\n\n if (selectionBox.isEmpty()) {\n return false;\n }\n\n this.selectionBox.copyFrom(selectionBox);\n this.cacheSnapTargets(containerSize);\n this.interactionPlane = createInteractionPlane(new Vector3(), new Euler(0, 0, 0, EulerOrder.XYZ));\n this.lastWorldPosition = viewPositionToWorld(\n this.cursorPoint,\n GizmoViewportUtils.getCameraInfo(this._owner.getEngine()),\n this.interactionPlane,\n containerSize,\n ) ?? new Vector3();\n\n return true;\n }\n\n /**\n * 计算当前可见选中项的视口包围盒。\n * @param containerSize 视口容器尺寸。\n * @returns 选区包围盒。\n */\n private computeSelectionBox (containerSize: Vector2): Box2 {\n const selectionBox = new Box2();\n\n for (const item of this.selectedItems) {\n if (item.isVisible) {\n const box = getItemViewBox(item, containerSize);\n\n if (!box.isEmpty()) {\n selectionBox.union(box);\n }\n }\n }\n\n return selectionBox;\n }\n\n /** 按当前父级关系刷新本次移动可用的吸附目标。 */\n private cacheSnapTargets (containerSize?: Vector2): void {\n const snapManager = this._owner.getSnapManager();\n\n if (!snapManager.enabled) {\n return;\n }\n const engine = this._owner.getEngine();\n\n snapManager.cacheSnapTargetsForSelection(\n engine.sceneServer.compositions[0]?.items ?? [],\n this.selectedItems,\n containerSize ?? GizmoViewportUtils.getContainerSize(engine.canvas.parentElement!),\n );\n }\n\n /** 重置移动交互状态。 */\n private resetDragState (): void {\n if (this._owner.getSelectionTransformKind() === 'move') {\n this._owner.setSelectionTransformKind('idle');\n }\n this.active = false;\n this.selectedItems = [];\n this.selectionBox = new Box2();\n this.interactionPlane = undefined;\n this.startPoint = new Vector2();\n this.lastPoint = new Vector2();\n this.cursorPoint = new Vector2();\n this.lastWorldPosition = new Vector3();\n this.assistedLayout?.cancel();\n this.assistedLayout = undefined;\n this._owner.getSnapManager().reset();\n }\n}\n\nexport type { AutoLayoutChangeInfo, SelectionPlacementChange };\n","import type { GizmoOwner } from '../gizmo-owner';\nimport { BoxSelectionGizmo } from '../gizmos/box-selection-gizmo';\nimport { ChangeSelectionGizmo } from '../gizmos/change-selection-gizmo';\nimport { ClickDragMultiplexGizmo } from '../gizmos/click-drag-multiplex-gizmo';\nimport { MoveSelectionGizmo } from '../gizmos/move-selection-gizmo';\n\n/** 选择交互的可选行为。 */\nexport type SelectionInteractionOptions = {\n /** 是否允许拖拽已选元素进行移动。 */\n allowTransform?: boolean,\n};\n\n/**\n * 创建用于仲裁点击、拖拽和框选的复合 Gizmo。\n * @param owner Gizmo 宿主。\n * @param options 选择交互配置。\n * @returns 选区交互复合 Gizmo。\n */\nexport function createSelectionInteractionGizmo (\n owner: GizmoOwner,\n options: SelectionInteractionOptions = {},\n): ClickDragMultiplexGizmo {\n const dragCandidates = options.allowTransform === false\n ? [new BoxSelectionGizmo(owner)]\n : [new MoveSelectionGizmo(owner), new BoxSelectionGizmo(owner)];\n\n return new ClickDragMultiplexGizmo(owner, {\n clickCandidates: [new ChangeSelectionGizmo(owner)],\n dragCandidates,\n auxiliaryBehavior: new BoxSelectionGizmo(owner, false),\n });\n}\n","import type { Gizmo } from '../gizmo';\nimport type { GizmoOwner } from '../gizmo-owner';\nimport type { GizmoTool } from '../gizmo-tool';\nimport { HandGizmoTool } from '../gizmo-tools/hand-gizmo-tool';\nimport { MoveGizmoTool } from '../gizmo-tools/move-gizmo-tool';\nimport { CornerRotationGizmo } from '../gizmos/corner-rotation-gizmo';\nimport { LeaveEffectsEditGizmo } from '../gizmos/leave-effects-edit-gizmo';\nimport { ResizeSelectionGizmo } from '../gizmos/resize-selection-gizmo';\nimport { getPlayerItemById } from '../items';\nimport { createSelectionInteractionGizmo } from '../selection/create-selection-interaction-gizmo';\nimport type { EditMode } from './edit-mode';\n\n/** 动效内部编辑模式配置。 */\nexport type EffectsEditModeOptions = {\n /** 是否允许子元素移动、缩放和旋转;默认允许。 */\n allowTransform?: boolean,\n};\n\n/** 在单个动效容器内提供子元素选择和变换交互。 */\nexport class EffectsEditMode implements EditMode {\n readonly id = 'effects-edit';\n private readonly allowTransform: boolean;\n\n /**\n * @param owner Gizmo 宿主\n * @param effectsItemId 正在编辑的动效容器实例 ID\n * @param options 编辑模式配置\n */\n constructor (\n private readonly owner: GizmoOwner,\n readonly effectsItemId: string,\n options: EffectsEditModeOptions = {},\n ) {\n this.allowTransform = options.allowTransform !== false;\n }\n\n /**\n * 判断目标工具是否可复用当前动效编辑会话。\n * @param tool 目标工具\n * @returns 是否保持当前模式\n */\n canRemainActiveForTool (tool: GizmoTool): boolean {\n return tool instanceof MoveGizmoTool || tool instanceof HandGizmoTool;\n }\n\n /** 放开当前动效容器的子树选择边界。 */\n onEnter (): void {\n this.owner.getSelection().enterEffectsEditScope(this.effectsItemId);\n }\n\n /** 关闭动效子树选择边界,并恢复选中动效容器。 */\n onExit (): void {\n const selection = this.owner.getSelection();\n\n selection.leaveEffectsEditScope();\n if (getPlayerItemById(this.owner.getEngine().sceneServer.compositions[0], this.effectsItemId)) {\n selection.commitSelectedItems([this.effectsItemId]);\n } else {\n selection.clearSelectedItems();\n }\n }\n\n /** @returns 动效内部编辑使用的 Gizmo 图。 */\n createGizmos (): Gizmo[] {\n const resizeSelection = new ResizeSelectionGizmo(this.owner, { interactive: this.allowTransform });\n const cornerRotation = this.allowTransform\n ? new CornerRotationGizmo(this.owner, resizeSelection)\n : undefined;\n\n return [\n ...(cornerRotation ? [cornerRotation] : []),\n resizeSelection,\n new LeaveEffectsEditGizmo(this.owner),\n createSelectionInteractionGizmo(this.owner, { allowTransform: this.allowTransform }),\n ];\n }\n}\n","import { Gizmo } from '../gizmo';\nimport { MouseButton, type InputEventMouseButton } from '@galacean/effects';\n\n/** 在画布主键按下时退出行内文本编辑。 */\nexport class LeaveTextEditGizmo extends Gizmo {\n readonly type = 'leave-text-edit';\n\n /**\n * 处理主键按下并退出编辑模式。\n * @param event 鼠标按下事件\n */\n override onMouseDown (event: InputEventMouseButton): void {\n if (event.buttonIndex !== MouseButton.Left) {\n return;\n }\n this._owner.resetEditMode();\n event.accept();\n }\n}\n","function _assert_this_initialized(self) {\n if (self === void 0) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n\n return self;\n}\nexport { _assert_this_initialized as _ };\n","import { spec, type InputEventMouseButton } from '@galacean/effects';\nimport type { Control } from '@galacean/effects-plugin-gui';\nimport { Gizmo } from '../gizmo';\nimport { GizmoViewportUtils } from '../viewport/viewport-utils';\nimport type { GizmoOwner } from '../gizmo-owner';\nimport { GizmoType } from '../gizmo-type';\nimport { getItemViewBox, getItemViewTransform } from '../items';\nimport { drawCorners, toColor } from '../drawing';\nimport type { TextEditSession, TextInteractionParam, TextResult } from '../text/text-edit-session';\nimport { getTransformedBoxCorners } from '../math';\n\nexport type {\n TextEmptyResult,\n TextInteractionParam,\n TextResult,\n TextValidResult,\n} from '../text/text-edit-session';\n\n/** 文本编辑态包围盒线色。 */\nexport const TEXT_EDIT_BOX_LINE_COLOR = 0x3b82f6;\n/** 文本编辑态包围盒线宽。 */\nexport const TEXT_EDIT_BOX_LINE_WIDTH = 2;\n\n/** 将文本编辑会话投影到画布并绘制编辑框。 */\nexport class TextGizmo extends Gizmo {\n readonly type = GizmoType.TEXT;\n\n result: TextResult = { type: 'empty' };\n private readonly session: TextEditSession;\n private readonly projectionToken = {};\n /**\n * 转发文本输入事件。\n * @param payload 文本输入结果。\n */\n private readonly forwardTextInput = (payload: {\n /** 文本元素 ID。 */\n itemId: string,\n /** 输入后的文本。 */\n text: string,\n /** 当前字体。 */\n fontFamily: string,\n }): void => {\n this._owner.emit('textinput', { source: this, ...payload });\n };\n\n /**\n * @param owner Gizmo 宿主\n * @param session 文本编辑会话\n */\n constructor (owner: GizmoOwner, session: TextEditSession) {\n super(owner);\n this.session = session;\n this.session.attachProjection(this.projectionToken);\n this.session.on('textInput', this.forwardTextInput);\n }\n\n /** 文本编辑使用的 DOM 输入框。 */\n get textAreaElement (): HTMLTextAreaElement {\n return this.session.textAreaElement;\n }\n\n /** 当前文本交互状态。 */\n get interactionParam (): TextInteractionParam {\n return this.session.interactionParam;\n }\n\n /** 是否正在编辑文本。 */\n get isEditing (): boolean {\n return this.session.isEditing;\n }\n\n /** 当前视口缩放。 */\n get viewScale (): number {\n const viewportMatrix = this._owner.getEngine().sceneServer.compositions[0].camera.getViewportMatrix();\n\n return viewportMatrix.elements[0];\n }\n\n /**\n * 保留文本编辑会话的鼠标按下入口。\n * @param _event 鼠标按下事件\n */\n override onMouseDown (_event: InputEventMouseButton): void {\n // 文本指针选择由 SelectTextGizmo 处理。\n }\n\n /**\n * 编辑中接收鼠标抬起事件。\n * @param event 鼠标抬起事件\n */\n override onMouseUp (event: InputEventMouseButton): void {\n if (this.isEditing) {\n event.accept();\n }\n }\n\n /** 更新文本元素的视图包围盒。 */\n override onUpdate (): void {\n const item = this.session.editingItem;\n\n if (item?.type !== spec.ItemType.text || !item.isVisible) {\n this.result = { type: 'empty' };\n this.textAreaElement.style.display = 'none';\n\n return;\n }\n\n const containerSize = GizmoViewportUtils.getContainerSize(this._owner.getEngine().canvas.parentElement!);\n const box = getItemViewBox(item, containerSize);\n const transform = getItemViewTransform(item, containerSize);\n\n this.result = !transform || box.isEmpty()\n ? { type: 'empty' }\n : { type: 'valid', box, transform };\n }\n\n /**\n * 绘制文本编辑框并同步 DOM 输入框。\n * @param control 绘制控制器\n */\n override draw (control?: Control): void {\n this.drawEditBox(control);\n this.session.syncTextArea(this.result, this.viewScale);\n }\n\n /**\n * 选中当前编辑文本的全部内容,并将焦点交给输入框。\n * @returns 当前存在可编辑文本时返回 true\n */\n selectAllText (): boolean {\n return this.session.selectAllText();\n }\n\n /** 脱离文本编辑会话投影。 */\n override dispose (): void {\n this.session.off('textInput', this.forwardTextInput);\n this.session.detachProjection(this.projectionToken);\n super.dispose();\n }\n\n /**\n * 绘制文本编辑包围盒。\n * @param control 绘制控制器\n */\n private drawEditBox (control?: Control): void {\n if (!control || this.result.type !== 'valid') {\n return;\n }\n drawCorners(\n control,\n getTransformedBoxCorners(this.result.transform),\n toColor(TEXT_EDIT_BOX_LINE_COLOR, 1),\n TEXT_EDIT_BOX_LINE_WIDTH,\n );\n }\n}\n","import {\n MouseButton,\n MouseButtonMask,\n spec,\n TextComponent,\n type InputEventMouse,\n type InputEventMouseButton,\n type InputEventMouseMotion,\n type VFXItem,\n} from '@galacean/effects';\nimport type { Control } from '@galacean/effects-plugin-gui';\nimport { GestureCursorType } from '../cursor';\nimport { drawDashedCorners, toColor } from '../drawing';\nimport { Gizmo } from '../gizmo';\nimport type { GizmoOwner } from '../gizmo-owner';\nimport { getItemViewTransform, getPlayerItemById } from '../items';\nimport { Vector2, getTransformedBoxCorners } from '../math';\nimport type { TextEditSession } from '../text/text-edit-session';\nimport { GizmoViewportUtils } from '../viewport/viewport-utils';\nimport { TEXT_EDIT_BOX_LINE_COLOR } from './text-gizmo';\n\n/** 在文本编辑模式下悬停、选择并切换文本对象。 */\nexport class SelectTextGizmo extends Gizmo {\n\n readonly type = 'select-text';\n private static readonly HOVER_HIT_RADIUS = 4;\n private static readonly HOVER_LINE_WIDTH = 1;\n private static readonly HOVER_DASH_LENGTH = 4;\n private static readonly HOVER_GAP_LENGTH = 4;\n private _hoverTextId: string | undefined;\n private pointerSelecting = false;\n\n /**\n * 创建文本选择交互。\n * @param owner Gizmo 宿主。\n * @param session 文本编辑会话。\n */\n constructor (\n owner: GizmoOwner,\n private readonly session: TextEditSession,\n ) {\n super(owner);\n }\n\n /** 当前悬停文本的 ID。 */\n get hoverTextId (): string | undefined {\n return this._hoverTextId;\n }\n\n /**\n * 更新文本悬停或拖拽选区。\n * @param event 鼠标移动事件。\n */\n override onMouseMove (event: InputEventMouseMotion): void {\n if (this.pointerSelecting && (event.buttonMask & MouseButtonMask.Left) !== 0) {\n this.session.updatePointerSelection({\n x: event.position.x,\n y: event.position.y,\n });\n this.setTextCursor(event);\n event.accept();\n\n return;\n }\n\n const target = this.resolveTextTarget(\n new Vector2(event.position.x, event.position.y),\n true,\n );\n\n if (!target) {\n this.clearHover();\n\n return;\n }\n\n this._hoverTextId = target.getInstanceId();\n this.setTextCursor(event);\n event.accept();\n }\n\n /**\n * 切换到命中的文本并开始指针选区。\n * @param event 鼠标按下事件。\n */\n override onMouseDown (event: InputEventMouseButton): void {\n if (event.buttonIndex !== MouseButton.Left) {\n return;\n }\n\n // 按下仅使用精确命中,避免悬停容差误选相邻文本。\n const target = this.resolveTextTarget(\n new Vector2(event.position.x, event.position.y),\n false,\n false,\n );\n\n if (!target || !this.session.retarget(target, 'focus')) {\n return;\n }\n\n this._hoverTextId = undefined;\n this.pointerSelecting = true;\n this.session.beginPointerSelection({\n x: event.position.x,\n y: event.position.y,\n });\n this._owner.getSelection().commitSelectedItems([target.getInstanceId()]);\n this.setTextCursor(event);\n event.accept();\n }\n\n /**\n * 更新文本指针选区。\n * @param event 鼠标拖拽事件。\n */\n override onMouseDrag (event: InputEventMouseMotion): void {\n if (!this.pointerSelecting) {\n return;\n }\n this.session.updatePointerSelection({\n x: event.position.x,\n y: event.position.y,\n });\n this.setTextCursor(event);\n event.accept();\n }\n\n /**\n * 完成文本指针选区。\n * @param event 鼠标抬起事件。\n */\n override onMouseUp (event: InputEventMouseButton): void {\n if (!this.pointerSelecting) {\n return;\n }\n this.session.finishPointerSelection({\n x: event.position.x,\n y: event.position.y,\n });\n this.pointerSelecting = false;\n this._hoverTextId = undefined;\n this.setTextCursor(event);\n event.accept();\n }\n\n /** 清除离开视口后的文本悬停状态。 */\n override onMouseLeave (): void {\n this.clearHover();\n this._owner.setCursor({ type: GestureCursorType.NORMAL, angle: 0 });\n }\n\n /** 在每帧更新时校验悬停文本是否仍可编辑。 */\n override onUpdate (): void {\n if (!this._hoverTextId) {\n return;\n }\n\n const item = getPlayerItemById(this._owner.getEngine().sceneServer.compositions[0], this._hoverTextId);\n\n if (!this.isTextCandidate(item, true)) {\n this.clearHover();\n }\n }\n\n /**\n * 绘制悬停文本的轮廓。\n * @param control 绘制控制器。\n */\n override draw (control: Control): void {\n if (!this._hoverTextId) {\n return;\n }\n\n const item = getPlayerItemById(this._owner.getEngine().sceneServer.compositions[0], this._hoverTextId);\n\n if (!this.isTextCandidate(item, true)) {\n return;\n }\n\n const containerSize = GizmoViewportUtils.getContainerSize(this._owner.getEngine().canvas.parentElement!);\n const transform = getItemViewTransform(item, containerSize);\n\n if (!transform) {\n return;\n }\n\n drawDashedCorners(\n control,\n getTransformedBoxCorners(transform),\n toColor(TEXT_EDIT_BOX_LINE_COLOR, 1),\n SelectTextGizmo.HOVER_LINE_WIDTH,\n SelectTextGizmo.HOVER_DASH_LENGTH,\n SelectTextGizmo.HOVER_GAP_LENGTH,\n );\n }\n\n /** 释放文本选择交互状态。 */\n override dispose (): void {\n this.pointerSelecting = false;\n this.session.cancelPointerSelection();\n this.clearHover();\n super.dispose();\n }\n\n /**\n * 查找指定位置可编辑的文本对象。\n * @param point 视口坐标。\n * @param excludeEditingItem 是否排除当前编辑对象。\n * @param includeNearby 是否使用悬停命中容差。\n * @returns 命中的文本对象。\n */\n private resolveTextTarget (\n point: Vector2,\n excludeEditingItem: boolean,\n includeNearby = true,\n ): VFXItem | undefined {\n const radius = SelectTextGizmo.HOVER_HIT_RADIUS;\n const diagonal = radius / Math.SQRT2;\n const offsets = includeNearby\n ? [\n [0, 0],\n [radius, 0],\n [-radius, 0],\n [0, radius],\n [0, -radius],\n [diagonal, diagonal],\n [diagonal, -diagonal],\n [-diagonal, diagonal],\n [-diagonal, -diagonal],\n ]\n : [[0, 0]];\n const composition = this._owner.getEngine().sceneServer.compositions[0];\n\n for (const [x, y] of offsets) {\n const hitPoint = new Vector2(point.x + x, point.y + y);\n const target = this._owner.getSelection().hitTest(hitPoint)\n .map(id => getPlayerItemById(composition, id))\n .find(item => this.isTextCandidate(item, excludeEditingItem));\n\n if (target) {\n return target;\n }\n }\n\n return undefined;\n }\n\n /**\n * 判断对象是否可作为文本选择目标。\n * @param item 待检查对象。\n * @param excludeEditingItem 是否排除当前编辑对象。\n * @returns 是否为可选文本对象。\n */\n private isTextCandidate (\n item: VFXItem | undefined,\n excludeEditingItem: boolean,\n ): item is VFXItem {\n return !!item\n && item.isVisible\n && item.type === spec.ItemType.text\n && !!item.getComponent(TextComponent)\n && (!excludeEditingItem || item !== this.session.editingItem);\n }\n\n /** 清除文本悬停目标。 */\n private clearHover (): void {\n this._hoverTextId = undefined;\n }\n\n /**\n * 设置文本编辑光标。\n * @param _event 当前鼠标事件。\n */\n private setTextCursor (_event: InputEventMouse): void {\n this._owner.setCursor({ type: GestureCursorType.TEXT, angle: 0 });\n }\n}\n","import type { VFXItem } from '@galacean/effects';\nimport type { Gizmo } from '../gizmo';\nimport type { GizmoOwner } from '../gizmo-owner';\nimport type { GizmoTool } from '../gizmo-tool';\nimport { HandGizmoTool } from '../gizmo-tools/hand-gizmo-tool';\nimport { MoveGizmoTool } from '../gizmo-tools/move-gizmo-tool';\nimport { LeaveTextEditGizmo } from '../gizmos/leave-text-edit-gizmo';\nimport { SelectTextGizmo } from '../gizmos/select-text-gizmo';\nimport { TextGizmo } from '../gizmos/text-gizmo';\nimport { TextEditSession } from '../text/text-edit-session';\nimport type { TextEditActivation } from '../text/text-edit-session';\nimport type { EditMode } from './edit-mode';\n\n/** 管理行内文本编辑会话和对应 Gizmo 图的编辑模式。 */\nexport class TextEditMode implements EditMode {\n readonly id = 'text-edit';\n private readonly session: TextEditSession;\n\n /**\n * @param owner Gizmo 宿主\n * @param target 入口已校验的待编辑文本元素\n * @param activation 文本框激活方式\n */\n constructor (\n private readonly owner: GizmoOwner,\n private readonly target: VFXItem,\n private readonly activation: TextEditActivation = 'focus',\n ) {\n this.session = new TextEditSession(owner);\n }\n\n /** 当前会话正在编辑的文本元素,随文本选择交互更新。 */\n get editingItem (): VFXItem | undefined {\n return this.session.editingItem;\n }\n\n /**\n * 判断目标工具是否可复用文本编辑会话。\n * @param tool 目标工具\n * @returns 是否保持当前模式\n */\n canRemainActiveForTool (tool: GizmoTool): boolean {\n return tool instanceof MoveGizmoTool || tool instanceof HandGizmoTool;\n }\n\n /** 使用入口确定的目标进入文本编辑,避免旧模式退出时改变选区。 */\n onEnter (): void {\n if (this.session.retarget(this.target, this.activation)) {\n this.owner.getSelection().commitSelectedItems([this.target.getInstanceId()]);\n }\n }\n\n /** 结束文本编辑会话。 */\n onExit (): void {\n this.session.dispose();\n }\n\n /** @returns 文本编辑交互的 Gizmo 图。 */\n createGizmos (): Gizmo[] {\n return [\n new TextGizmo(this.owner, this.session),\n new SelectTextGizmo(this.owner, this.session),\n new LeaveTextEditGizmo(this.owner),\n ];\n }\n}\n","import { MouseButton, spec, TextComponent, type InputEventMouseButton } from '@galacean/effects';\nimport { GestureCursorType } from '../cursor';\nimport { effectsEditModeConfig } from '../configs/builtin-configs';\nimport { Gizmo } from '../gizmo';\nimport { isEffectsPlayerItem } from '../items';\nimport { Vector2 } from '../math';\nimport { EffectsEditMode } from '../modes/effects-edit-mode';\nimport { TextEditMode } from '../modes/text-edit-mode';\n\n/** 识别可编辑元素的双击,并进入对应的编辑模式。 */\nexport class EnterEditModeGizmo extends Gizmo {\n readonly type = 'enter-edit-mode';\n\n /**\n * 双击当前选中的文本或动效元素时进入对应编辑模式。\n * @param event 鼠标按下事件\n */\n override onMouseDown (event: InputEventMouseButton): void {\n if (event.buttonIndex !== MouseButton.Left || !event.doubleClick) {\n return;\n }\n\n const selectedItems = this._owner.getSelection().getSelectedPlayerItems();\n const selectedItem = selectedItems.length === 1 ? selectedItems[0] : undefined;\n\n if (!selectedItem) {\n return;\n }\n\n const selection = this._owner.getSelection();\n const hitIds = selection.filterSelectedItems(\n selection.hitTest(new Vector2(event.position.x, event.position.y)),\n );\n\n if (!hitIds.includes(selectedItem.getInstanceId())) {\n return;\n }\n\n if (selectedItem.type === spec.ItemType.text && selectedItem.getComponent(TextComponent)) {\n this._owner.setActiveEditMode(new TextEditMode(this._owner, selectedItem, 'select'));\n this._owner.setCursor({\n type: GestureCursorType.TEXT,\n angle: 0,\n });\n } else if (isEffectsPlayerItem(selectedItem)) {\n this._owner.setActiveEditMode(new EffectsEditMode(\n this._owner,\n selectedItem.getInstanceId(),\n this._owner.getConfigManager().get(effectsEditModeConfig),\n ));\n } else {\n return;\n }\n\n event.accept();\n }\n}\n","import type { Gizmo } from '../gizmo';\nimport type { GizmoOwner } from '../gizmo-owner';\nimport type { GizmoTool } from '../gizmo-tool';\nimport { HandGizmoTool } from '../gizmo-tools/hand-gizmo-tool';\nimport { MoveGizmoTool } from '../gizmo-tools/move-gizmo-tool';\nimport { CornerRotationGizmo } from '../gizmos/corner-rotation-gizmo';\nimport { EnterEditModeGizmo } from '../gizmos/enter-edit-mode-gizmo';\nimport { ResizeSelectionGizmo } from '../gizmos/resize-selection-gizmo';\nimport { createSelectionInteractionGizmo } from '../selection/create-selection-interaction-gizmo';\nimport type { EditMode } from './edit-mode';\n\n/** 提供默认选区切换、移动、缩放和旋转交互的编辑模式。 */\nexport class DefaultSelectionMode implements EditMode {\n readonly id = 'default-selection';\n\n /** @param owner Gizmo 宿主 */\n constructor (private readonly owner: GizmoOwner) {}\n\n /**\n * 判断目标工具是否可复用当前模式。\n * @param tool 目标工具\n * @returns 是否保持当前模式\n */\n canRemainActiveForTool (tool: GizmoTool): boolean {\n return tool instanceof MoveGizmoTool || tool instanceof HandGizmoTool;\n }\n\n /** @returns 默认选区交互的 Gizmo 图。 */\n createGizmos (): Gizmo[] {\n const resizeSelection = new ResizeSelectionGizmo(this.owner);\n const cornerRotation = new CornerRotationGizmo(this.owner, resizeSelection);\n\n return [\n cornerRotation,\n resizeSelection,\n new EnterEditModeGizmo(this.owner),\n createSelectionInteractionGizmo(this.owner),\n ];\n }\n}\n","import type { Box2 } from '@galacean/effects-math/es/extension/index';\nimport type { Vector2 } from '../math';\n\n/** 图片裁切和扩边的交互类型。 */\nexport enum ImageInteractionType {\n /** 无交互。 */\n NONE = 'none',\n /** 角点双轴缩放。 */\n SCALE = 'scale',\n /** 边中点单轴缩放。 */\n DIRECTION_SCALE = 'direction-scale',\n /** 移动交互框。 */\n MOVE = 'move',\n}\n\n/** 无图片交互参数。 */\nexport type ImageNoneParam = {\n /** 交互类型。 */\n type: ImageInteractionType.NONE,\n};\n\n/** 图片单轴缩放参数。 */\nexport type ImageDirectionScaleParam = {\n /** 交互类型。 */\n type: ImageInteractionType.DIRECTION_SCALE,\n /** 交互开始时的归一化 Box2。 */\n box: Box2,\n /** 被拖拽边的索引。 */\n index: number,\n /** 交互开始时的归一化鼠标位置。 */\n startMouse: Vector2,\n /** 锁定的宽高比。 */\n lockedAspect?: number,\n};\n\n/** 图片交互框移动参数。 */\nexport type ImageMoveParam = {\n /** 交互类型。 */\n type: ImageInteractionType.MOVE,\n /** 交互开始时的归一化 Box2。 */\n box: Box2,\n /** 交互开始时的归一化鼠标位置。 */\n startMouse: Vector2,\n};\n","import { Box2, Line2 } from '@galacean/effects-math/es/extension/index';\nimport { isEqual, RAD2DEG, Vector2, getBoxCorners, getTransformedBoxCorners, inverseTransformBoxPoint, scaleBox, setBoxFromPoints, transformedBoxContainsPoint, type Matrix3 } from '../math';\nimport type { ImageCutConfig } from '../configs/types';\nimport { imageCutConfig } from '../configs/builtin-configs';\nimport type { VFXItem } from '@galacean/effects';\nimport { MouseButton, MouseButtonMask, type InputEventKey, type InputEventMouseButton, type InputEventMouseMotion } from '@galacean/effects';\nimport type { Control } from '@galacean/effects-plugin-gui';\nimport { Gizmo } from '../gizmo';\nimport { GizmoViewportUtils } from '../viewport/viewport-utils';\nimport { GizmoType } from '../gizmo-type';\nimport { GestureCursorType, type GestureCursorResult } from '../cursor';\nimport { ImageInteractionType, type ImageDirectionScaleParam, type ImageMoveParam, type ImageNoneParam } from './image-interaction';\nimport { getItemViewBox, getItemViewTransform } from '../items';\nimport { toColor, drawCorners, fillBoxByCorners } from '../drawing';\n\n/**\n * 图片裁切工具结果\n */\nexport type ImageCutResult = {\n /** 归一化裁切盒,不依赖渲染帧投影。 */\n normalizeCutBox: Box2,\n};\n\n/** 图片裁剪在当前视口中的几何。 */\ntype ImageCutGeometry = {\n /** 图片元素包围盒。 */\n itemBox: Box2,\n /** 图片归一化 Box2 到视图的变换。 */\n boxTransform: Matrix3,\n};\n\n/**\n * 图片裁切缩放交互参数\n */\nexport type ImageCutScaleParam = {\n /** 交互类型 */\n type: ImageInteractionType.SCALE,\n /** 归一化裁切框 */\n box: Box2,\n /** 锚点(对角点) */\n anchor: Vector2,\n /** 归一化起始鼠标位置 */\n startMouse: Vector2,\n /** 归一化起始角点 */\n startCorner: Vector2,\n /** 锁定的宽高比 */\n lockedAspect?: number,\n};\n\n/**\n * 图片裁切交互参数\n */\nexport type ImageCutInteractionParam = ImageNoneParam | ImageCutScaleParam | ImageDirectionScaleParam | ImageMoveParam;\n\n/**\n * 裁剪工具交互类型\n */\nexport type ImageCutInteractionType = ImageInteractionType;\n\n/** 在图片元素范围内移动或缩放归一化裁剪框。 */\nexport class ImageCutGizmo extends Gizmo {\n result: ImageCutResult = {\n normalizeCutBox: new Box2(new Vector2(), new Vector2(1, 1)),\n };\n\n interactionParam: ImageCutInteractionParam = { type: ImageInteractionType.NONE };\n\n readonly type = GizmoType.IMAGE_CUT;\n\n /** 光标结果。 */\n cursorResult: GestureCursorResult = {\n type: GestureCursorType.NORMAL,\n angle: 0,\n };\n\n /** 仅供当前渲染帧使用的几何快照;输入不读取它。 */\n private renderGeometry?: ImageCutGeometry;\n\n private _isLockScale = false;\n\n private mouseGrabbed = false;\n\n /** 当前图片裁剪配置。 */\n get config (): Readonly<ImageCutConfig> {\n return this._owner.getConfigManager().get(imageCutConfig);\n }\n\n /** 当前选中的元素(直读 selection.getSelectedPlayerItems:id→VFXItem 已解析)。 */\n get selectedItems (): VFXItem[] {\n return this._owner.getSelection().getSelectedPlayerItems();\n }\n\n /** 是否锁定宽高比缩放。 */\n get isLockScale () {\n return this._isLockScale;\n }\n\n /**\n * 设置是否锁定宽高比缩放。\n * @param state 是否锁定宽高比。\n */\n set isLockScale (state: boolean) {\n if (state === this.isLockScale) {\n return;\n }\n\n this._isLockScale = state;\n }\n\n /**\n * 更新裁剪框交互或悬停状态。\n * @param event 鼠标移动事件。\n */\n override onMouseMove (event: InputEventMouseMotion): void {\n if (!this.isApplicableSelection()) {\n return;\n }\n if (this.mouseGrabbed) {\n const handled = this.updateGrab(event);\n\n this._owner.setCursor(this.cursorResult);\n if (handled) {\n event.accept();\n }\n\n return;\n }\n const hover = this._owner.getMousePosition();\n const inputPosition = new Vector2(event.position.x, event.position.y);\n\n this.refreshInteractionType(hover, inputPosition);\n this._owner.setCursor(this.cursorResult);\n if (event.buttonMask === MouseButtonMask.None\n && (this.interactionParam.type === ImageInteractionType.SCALE\n || this.interactionParam.type === ImageInteractionType.DIRECTION_SCALE)) {\n event.accept();\n }\n }\n\n /**\n * 继续当前裁剪框拖拽。\n * @param event 鼠标拖拽事件。\n */\n override onMouseDrag (event: InputEventMouseMotion): void {\n if (!this.isApplicableSelection() || !this.mouseGrabbed) {\n return;\n }\n const handled = this.updateGrab(event);\n\n this._owner.setCursor(this.cursorResult);\n this._owner.emit('actionupdate', {\n source: this,\n });\n if (handled) {\n event.accept();\n }\n }\n\n /** 鼠标离开交互层:清交互类型(拖拽中不清)。 */\n override onMouseLeave (): void {\n if (!this.isApplicableSelection()) {\n return;\n }\n if (this.mouseGrabbed) {\n this._owner.setCursor(this.cursorResult);\n\n return;\n }\n this.interactionParam = { type: ImageInteractionType.NONE };\n this.refreshCursorResult(ImageInteractionType.NONE);\n this._owner.setCursor(this.cursorResult);\n }\n\n /**\n * 命中裁剪框交互区域时开始操作。\n * @param event 鼠标按下事件。\n */\n override onMouseDown (event: InputEventMouseButton): void {\n if (!this.isApplicableSelection()) {\n return;\n }\n if (event.buttonIndex !== MouseButton.Left) {\n return;\n }\n const mouse = new Vector2(event.position.x, event.position.y);\n const inputPosition = new Vector2(event.position.x, event.position.y);\n\n this.refreshInteractionType(mouse, inputPosition);\n this._owner.setCursor(this.cursorResult);\n if (this.interactionParam.type === ImageInteractionType.NONE) {\n return;\n }\n\n this.mouseGrabbed = true;\n this._owner.emit('actionstart', { source: this });\n\n event.accept();\n }\n\n /**\n * 结束裁剪框操作并提交结果。\n * @param event 鼠标抬起事件。\n */\n override onMouseUp (event: InputEventMouseButton): void {\n if (!this.mouseGrabbed) {\n return;\n }\n this.mouseGrabbed = false;\n\n const mouse = new Vector2(event.position.x, event.position.y);\n const inputPosition = new Vector2(event.position.x, event.position.y);\n\n this.refreshInteractionType(mouse, inputPosition);\n this._owner.setCursor(this.cursorResult);\n\n this._owner.emit('actioncommit', { source: this });\n\n event.accept();\n }\n\n /**\n * 键盘松开:清除当前交互的锁定宽高比(下次拖拽重新算)。\n * @param _keyCode 键盘事件\n */\n override onKeyUp (_keyCode: InputEventKey): void {\n if ('lockedAspect' in this.interactionParam) {\n delete this.interactionParam.lockedAspect;\n }\n }\n\n /** 为本帧绘制创建裁剪投影。 */\n override onUpdate (): void {\n this.renderGeometry = this.getSelectionGeometry();\n }\n\n /**\n * 绘制裁剪蒙版、网格、边框与角点。\n * @param control 绘制控制器。\n */\n override draw (control: Control) {\n // 步骤 1:读取本帧投影与绘制配置。\n const geometry = this.renderGeometry;\n\n if (!geometry) {\n return;\n }\n\n const {\n maskColor,\n maskAlpha,\n cutBoxLineWidth,\n cutBoxLineColor,\n cutBoxLineAlpha,\n itemBoxLineWidth,\n itemBoxLineColor,\n itemBoxLineAlpha,\n cutBoxCornerRadius,\n cutBoxCornerFillColor,\n cutBoxCornerLineWidth,\n cutBoxCornerLineColor,\n cutBoxCornerLineAlpha,\n gridLineWidth,\n gridLineColor,\n gridLineAlpha,\n gridCount,\n } = this.config;\n\n const itemCorners = getTransformedBoxCorners(geometry.boxTransform);\n const cutCorners = getTransformedBoxCorners(geometry.boxTransform, this.result.normalizeCutBox);\n\n // 步骤 2:绘制裁剪区域外的蒙版。\n const maskFill = toColor(maskColor, maskAlpha);\n\n fillBoxByCorners(control, [itemCorners[0], itemCorners[1], cutCorners[1], cutCorners[0]], maskFill);\n fillBoxByCorners(control, [itemCorners[1], itemCorners[2], cutCorners[2], cutCorners[1]], maskFill);\n fillBoxByCorners(control, [itemCorners[2], itemCorners[3], cutCorners[3], cutCorners[2]], maskFill);\n fillBoxByCorners(control, [itemCorners[3], itemCorners[0], cutCorners[0], cutCorners[3]], maskFill);\n\n // 步骤 3:绘制裁剪辅助网格。\n const gridColor = toColor(gridLineColor, gridLineAlpha);\n\n for (let i = 1; i <= gridCount; i++) {\n const ratio = i / (gridCount + 1);\n const top = cutCorners[0].clone().add(cutCorners[1].clone().subtract(cutCorners[0]).multiply(ratio));\n const bottom = cutCorners[3].clone().add(cutCorners[2].clone().subtract(cutCorners[3]).multiply(ratio));\n const left = cutCorners[0].clone().add(cutCorners[3].clone().subtract(cutCorners[0]).multiply(ratio));\n const right = cutCorners[1].clone().add(cutCorners[2].clone().subtract(cutCorners[1]).multiply(ratio));\n\n control.drawLine(top.x, top.y, bottom.x, bottom.y, gridColor, gridLineWidth);\n control.drawLine(left.x, left.y, right.x, right.y, gridColor, gridLineWidth);\n }\n\n // 步骤 4:绘制元素、裁剪框和角点。\n drawCorners(control, itemCorners, toColor(itemBoxLineColor, itemBoxLineAlpha), itemBoxLineWidth);\n drawCorners(control, cutCorners, toColor(cutBoxLineColor, cutBoxLineAlpha), cutBoxLineWidth);\n const cornerFill = toColor(cutBoxCornerFillColor, 1);\n const cornerStroke = toColor(cutBoxCornerLineColor, cutBoxCornerLineAlpha);\n\n cutCorners.forEach(corner => {\n control.fillCircle(corner.x, corner.y, cutBoxCornerRadius, cornerFill);\n control.drawCircle(corner.x, corner.y, cutBoxCornerRadius, cornerStroke, cutBoxCornerLineWidth);\n });\n }\n\n /**\n * 刷新指针结果。\n * @param activeType 交互类型\n * @param angle 指针方向\n */\n refreshCursorResult (activeType: ImageCutInteractionType, angle = 0) {\n switch (activeType) {\n case ImageInteractionType.SCALE: {\n this.cursorResult = {\n type: GestureCursorType.SCALE,\n angle,\n };\n\n break;\n }\n case ImageInteractionType.DIRECTION_SCALE: {\n this.cursorResult = {\n type: GestureCursorType.SCALE,\n angle,\n };\n\n break;\n }\n case ImageInteractionType.MOVE:\n case ImageInteractionType.NONE: {\n this.cursorResult = {\n type: GestureCursorType.NORMAL,\n angle: 0,\n };\n\n break;\n }\n }\n }\n\n /**\n * 获取当前裁切信息(裁切框 + 元素包围盒)。\n * @returns 裁切信息对象,不可交互时返回 undefined\n */\n getCutInfo () {\n const geometry = this.getSelectionGeometry();\n\n if (!geometry) {\n return undefined;\n }\n\n return {\n cutBox: this.result.normalizeCutBox.clone(),\n itemBox: geometry.itemBox,\n };\n }\n\n /**\n * 获取归一化裁切包围盒(min/max 取值 [0, 1],相对元素包围盒)。\n */\n getCutBox () {\n if (!this.isApplicableSelection()) {\n return undefined;\n }\n\n return this.result.normalizeCutBox.clone();\n }\n\n /**\n * 设置归一化裁切包围盒(入参为归一化坐标,钳制到 [0, 1])。\n * @param normalizeBox 归一化裁切包围盒\n * @returns 设置成功时返回更新后的裁切框,不可交互时返回 undefined\n */\n setCutBox (normalizeBox: Box2) {\n if (!this.isApplicableSelection()) {\n return undefined;\n }\n\n this.result.normalizeCutBox.copyFrom(normalizeBox);\n\n return this.result.normalizeCutBox.clone();\n }\n\n /** @returns 是否仅选中了一个可裁剪元素。 */\n private isApplicableSelection (): boolean {\n return this._owner.getSelection().getSelectedPlayerItems().length === 1;\n }\n\n /**\n * drag:按交互类型处理裁切框移动/缩放/单向缩放。\n * 支持 shift 锁定宽高比,结果以归一化裁切盒写入 result。\n * @param event 鼠标事件(drag)\n */\n private updateGrab (event: InputEventMouseMotion): boolean {\n // 步骤 1:校验当前交互会话。\n if (!this.mouseGrabbed) {\n return false;\n }\n if (this.interactionParam.type === ImageInteractionType.NONE) {\n return true;\n }\n\n // 步骤 2:获取实时投影并计算指针位移。\n const geometry = this.getSelectionGeometry();\n\n if (!geometry) {\n return true;\n }\n\n const currentInputPosition = inverseTransformBoxPoint(geometry.boxTransform, new Vector2(event.position.x, event.position.y));\n const { startMouse, box } = this.interactionParam;\n const shift = new Vector2().subtractVectors(currentInputPosition, startMouse);\n const itemBoxMin = new Vector2();\n const itemBoxMax = new Vector2(1, 1);\n\n // 步骤 3:按移动、角点缩放或边缩放更新归一化裁剪框。\n switch (this.interactionParam.type) {\n case ImageInteractionType.MOVE: {\n const { min: originMin, max: originMax } = box;\n\n const xMinShift = itemBoxMin.x - originMin.x;\n const xMaxShift = itemBoxMax.x - originMax.x;\n const yMinShift = itemBoxMin.y - originMin.y;\n const yMaxShift = itemBoxMax.y - originMax.y;\n\n shift.x = Math.min(Math.max(shift.x, xMinShift), xMaxShift);\n shift.y = Math.min(Math.max(shift.y, yMinShift), yMaxShift);\n\n const resultBox = box.clone().translate(shift);\n\n this.result.normalizeCutBox = resultBox;\n\n break;\n }\n case ImageInteractionType.SCALE: {\n const { startCorner, anchor } = this.interactionParam;\n const resultCorner = new Vector2();\n\n resultCorner.x = Math.min(Math.max(startCorner.x + shift.x, itemBoxMin.x), itemBoxMax.x);\n resultCorner.y = Math.min(Math.max(startCorner.y + shift.y, itemBoxMin.y), itemBoxMax.y);\n\n if (event.shiftPressed || this.isLockScale) {\n const cornerSignFactor = (startCorner.x - anchor.x) * (startCorner.y - anchor.y) >= 0 ? 1 : -1;\n const { x: boxWidth, y: boxHeight } = this.result.normalizeCutBox.getSize();\n const { x: originWidth, y: originHeight } = box.getSize();\n\n this.interactionParam.lockedAspect ??= boxWidth / boxHeight;\n\n if (Math.abs(resultCorner.x - anchor.x) / originWidth > Math.abs(resultCorner.y - anchor.y) / originHeight) {\n const resultSignFactor = Math.abs(resultCorner.x - anchor.x) / (resultCorner.x - anchor.x);\n const resultHeight = Math.abs(resultCorner.x - anchor.x) / this.interactionParam.lockedAspect;\n\n if (isEqual(startCorner.y, anchor.y)) {\n resultCorner.y = startCorner.y;\n } else {\n resultCorner.y = resultSignFactor * cornerSignFactor * resultHeight + anchor.y;\n }\n resultCorner.y = Math.min(Math.max(resultCorner.y, itemBoxMin.y), itemBoxMax.y);\n const shiftY = resultCorner.y - anchor.y;\n\n if (isEqual(startCorner.y, anchor.y)) {\n resultCorner.x = startCorner.x;\n } else {\n resultCorner.x = cornerSignFactor * shiftY * this.interactionParam.lockedAspect + anchor.x;\n }\n } else {\n const resultWidth = Math.abs(resultCorner.y - anchor.y) * this.interactionParam.lockedAspect;\n const resultSignFactor = Math.abs(resultCorner.y - anchor.y) / (resultCorner.y - anchor.y);\n\n if (isEqual(startCorner.x, anchor.x)) {\n resultCorner.x = startCorner.x;\n } else {\n resultCorner.x = resultSignFactor * cornerSignFactor * resultWidth + anchor.x;\n }\n resultCorner.x = Math.min(Math.max(resultCorner.x, itemBoxMin.x), itemBoxMax.x);\n const shiftX = resultCorner.x - anchor.x;\n\n if (isEqual(startCorner.x, anchor.x)) {\n resultCorner.y = startCorner.y;\n } else {\n resultCorner.y = cornerSignFactor * shiftX / this.interactionParam.lockedAspect + anchor.y;\n }\n }\n }\n\n if (isEqual(startCorner.x, anchor.x) || isEqual(startCorner.y, anchor.y)) {\n const boxCorners = getBoxCorners(box);\n const farthestCorner = boxCorners[0].clone();\n let length = farthestCorner.distance(startCorner);\n\n boxCorners.forEach(corner => {\n if (corner.distance(startCorner) > length) {\n farthestCorner.copyFrom(corner);\n length = corner.distance(startCorner);\n }\n });\n\n this.result.normalizeCutBox = setBoxFromPoints(new Box2(), [farthestCorner, resultCorner]);\n } else {\n const xScalar = (resultCorner.x - anchor.x) / (startCorner.x - anchor.x);\n const yScalar = (resultCorner.y - anchor.y) / (startCorner.y - anchor.y);\n\n const scalar = new Vector2(xScalar, yScalar);\n\n this.result.normalizeCutBox = scaleBox(box.clone(), scalar, anchor);\n }\n\n break;\n }\n case ImageInteractionType.DIRECTION_SCALE: {\n const { index } = this.interactionParam;\n const { x: boxWidth, y: boxHeight } = this.result.normalizeCutBox.getSize();\n\n this.interactionParam.lockedAspect ??= boxWidth / boxHeight;\n const boxCorners = getBoxCorners(box);\n const startPoint = boxCorners[index].clone();\n const nextCorner = boxCorners[(index + 1) % 4].clone();\n\n // 四角固定顺序中偶数索引是水平边、奇数索引是竖直边。\n const shiftDirection = index % 2 === 0 ? 'y' : 'x';\n\n if (shiftDirection === 'x') {\n shift.x = Math.min(Math.max(startPoint.x + shift.x, itemBoxMin.x), itemBoxMax.x) - startPoint.x;\n if (event.shiftPressed || this.isLockScale) {\n shift.y = shift.x / this.interactionParam.lockedAspect;\n const resuleTargetCornerY = nextCorner.y + shift.y;\n const clampResultCornerY = Math.min(Math.max(resuleTargetCornerY, itemBoxMin.y), itemBoxMax.y);\n\n shift.y = clampResultCornerY - nextCorner.y;\n shift.x = shift.y * this.interactionParam.lockedAspect;\n } else {\n shift.y = 0;\n }\n } else {\n shift.y = Math.min(Math.max(startPoint.y + shift.y, itemBoxMin.y), itemBoxMax.y) - startPoint.y;\n if (event.shiftPressed || this.isLockScale) {\n shift.x = -shift.y * this.interactionParam.lockedAspect;\n const resuleTargetCornerX = nextCorner.x + shift.x;\n const clampResultCornerX = Math.min(Math.max(resuleTargetCornerX, itemBoxMin.x), itemBoxMax.x);\n\n shift.x = clampResultCornerX - nextCorner.x;\n shift.y = -shift.x / this.interactionParam.lockedAspect;\n } else {\n shift.x = 0;\n }\n }\n\n const resultCorners: Vector2[] = [];\n\n boxCorners.forEach((corner, i) => {\n const resultCorner = new Vector2();\n\n if (index === i) {\n if (shiftDirection === 'y') {\n resultCorner.copyFrom(corner.clone().add(new Vector2(0, shift.y)));\n } else {\n resultCorner.copyFrom(corner.clone().add(new Vector2(shift.x, 0)));\n }\n } else if (index === (i + 3) % 4) {\n resultCorner.copyFrom(corner.clone().add(shift));\n } else if (index === (i + 2) % 4) {\n if (shiftDirection === 'x') {\n resultCorner.copyFrom(corner.clone().add(new Vector2(0, shift.y)));\n } else {\n resultCorner.copyFrom(corner.clone().add(new Vector2(shift.x, 0)));\n }\n } else {\n resultCorner.copyFrom(corner.clone());\n }\n resultCorners.push(resultCorner);\n });\n this.result.normalizeCutBox = setBoxFromPoints(new Box2(), resultCorners);\n\n break;\n }\n default:\n break;\n }\n\n return true;\n }\n\n /** @returns 当前图片与裁剪框的视口投影。 */\n private getSelectionGeometry (): ImageCutGeometry | undefined {\n const selectedItems = this.selectedItems;\n\n if (selectedItems.length !== 1) {\n return undefined;\n }\n const containerSize = GizmoViewportUtils.getContainerSize(this._owner.getEngine().canvas.parentElement!);\n const boxTransform = getItemViewTransform(selectedItems[0], containerSize);\n\n if (!boxTransform) {\n return undefined;\n }\n const itemBox = getItemViewBox(selectedItems[0], containerSize);\n\n return {\n itemBox,\n boxTransform,\n };\n }\n\n /**\n * 根据鼠标位置判定裁切框的交互类型(角点缩放/边线单向缩放/整体移动),\n * 同时刷新光标方向。\n * @param point 视图坐标鼠标位置\n * @param inputPosition Control 本地坐标鼠标位置\n */\n private refreshInteractionType (point: Vector2, inputPosition: Vector2) {\n // 步骤 1:重置交互状态并获取实时裁剪投影。\n this.interactionParam = {\n type: ImageInteractionType.NONE,\n };\n\n const geometry = this.getSelectionGeometry();\n\n if (!geometry) {\n return;\n }\n\n const itemCorners = getTransformedBoxCorners(geometry.boxTransform);\n const cutCorners = getTransformedBoxCorners(geometry.boxTransform, this.result.normalizeCutBox);\n let hasInteractionType = false;\n let angle = 0;\n\n // 步骤 2:优先检测角点缩放。\n cutCorners.forEach((corner, index) => {\n if (hasInteractionType) {\n return;\n }\n if (corner.distance(point) < this.config.scaleInteractionDistance) {\n hasInteractionType = true;\n this.interactionParam = {\n type: ImageInteractionType.SCALE,\n box: this.result.normalizeCutBox.clone(),\n startMouse: inverseTransformBoxPoint(geometry.boxTransform, inputPosition),\n startCorner: getBoxCorners(this.result.normalizeCutBox)[index],\n anchor: getBoxCorners(this.result.normalizeCutBox)[(index + 2) % 4],\n };\n\n const rotation = Math.atan2(itemCorners[1].y - itemCorners[0].y, itemCorners[1].x - itemCorners[0].x);\n\n angle = Math.PI / 2 * ((index + 3) % 4) + rotation;\n }\n });\n\n // 步骤 3:其次检测边缘单向缩放。\n cutCorners.forEach((corner, index) => {\n if (hasInteractionType) {\n return;\n }\n const edge = new Line2(corner.clone(), cutCorners[(index + 1) % 4]);\n const t = edge.distanceSq() === 0 ? 0 : edge.closestPointToPointParameter(point, true);\n const dis = { d: edge.at(t).distance(point), t };\n\n const state = dis.d >= 0 && dis.d <= 8 && dis.t >= 0 && dis.t <= 1;\n\n if (state) {\n hasInteractionType = true;\n this.interactionParam = {\n type: ImageInteractionType.DIRECTION_SCALE,\n index,\n box: this.result.normalizeCutBox.clone(),\n startMouse: inverseTransformBoxPoint(geometry.boxTransform, inputPosition),\n };\n const rotation = Math.atan2(itemCorners[1].y - itemCorners[0].y, itemCorners[1].x - itemCorners[0].x);\n\n angle = Math.PI / 2 * ((index + 3) % 4) + Math.PI / 4 + rotation;\n }\n });\n\n // 步骤 4:最后检测裁剪区域整体移动并刷新光标。\n if (transformedBoxContainsPoint(geometry.boxTransform, point, this.result.normalizeCutBox) && !hasInteractionType) {\n this.interactionParam = {\n type: ImageInteractionType.MOVE,\n box: this.result.normalizeCutBox.clone(),\n startMouse: inverseTransformBoxPoint(geometry.boxTransform, inputPosition),\n };\n\n hasInteractionType = true;\n }\n\n this.refreshCursorResult(this.interactionParam.type, angle * RAD2DEG);\n }\n}\n","import type { Gizmo } from '../gizmo';\nimport { GizmoTool } from '../gizmo-tool';\nimport { ImageCutGizmo } from '../gizmos/image-cut-gizmo';\n\n/** 图片裁切工具。 */\nexport class ImageCutGizmoTool extends GizmoTool {\n /** @returns 图片裁切 Gizmo 图。 */\n override createGizmos (): Gizmo[] {\n return [new ImageCutGizmo(this.owner)];\n }\n}\n","import { Box2, Line2 } from '@galacean/effects-math/es/extension/index';\nimport { RAD2DEG, Vector2, getBoxCorners, getTransformedBoxCorners, inverseTransformBoxPoint, setBoxFromPoints, transformedBoxContainsPoint, type Matrix3 } from '../math';\nimport type { ImageExpandConfig } from '../configs/types';\nimport { imageExpandConfig } from '../configs/builtin-configs';\nimport type { VFXItem } from '@galacean/effects';\nimport { MouseButton, MouseButtonMask, type InputEventKey, type InputEventMouseButton, type InputEventMouseMotion } from '@galacean/effects';\nimport type { Control } from '@galacean/effects-plugin-gui';\nimport { Gizmo } from '../gizmo';\nimport { GizmoViewportUtils } from '../viewport/viewport-utils';\nimport { GizmoType } from '../gizmo-type';\nimport { GestureCursorType, type GestureCursorResult } from '../cursor';\nimport { ImageInteractionType, type ImageDirectionScaleParam, type ImageMoveParam, type ImageNoneParam } from './image-interaction';\nimport { getItemViewBox, getItemViewTransform } from '../items';\nimport { toColor, drawCorners, fillBoxByCorners } from '../drawing';\n\n/**\n * 图片扩边缩放交互参数\n */\nexport type ImageExpandScaleParam = {\n /** 交互类型 */\n type: ImageInteractionType.SCALE,\n /** 归一化扩边框 */\n box: Box2,\n /** 起始角点索引 */\n index: number,\n /** 归一化起始鼠标位置 */\n startMouse: Vector2,\n /** 锁定的宽高比 */\n lockedAspect?: number,\n};\n\n/**\n * 图片扩边交互参数\n */\nexport type ImageExpandInteractionParam = ImageNoneParam | ImageExpandScaleParam | ImageDirectionScaleParam | ImageMoveParam;\n\n/** 图片扩边交互类型。 */\nexport type ImageExpandInteractionType = ImageInteractionType;\n\n/**\n * 图片扩边工具结果\n */\nexport type ImageExpandResult = {\n /** 当前归一化扩边框。 */\n normalizeExpandBox: Box2,\n};\n\n/** 图片扩边在当前视口中的几何。 */\ntype ImageExpandGeometry = {\n /** 图片元素包围盒。 */\n itemBox: Box2,\n /** 图片归一化 Box2 到视图的变换。 */\n boxTransform: Matrix3,\n};\n\n/** 在图片范围外移动或缩放归一化扩边框。 */\nexport class ImageExpandGizmo extends Gizmo {\n result: ImageExpandResult = {\n normalizeExpandBox: new Box2(new Vector2(), new Vector2(1, 1)),\n };\n\n interactionParam: ImageExpandInteractionParam = { type: ImageInteractionType.NONE };\n\n readonly type = GizmoType.IMAGE_EXPAND;\n\n /** 光标结果。 */\n cursorResult: GestureCursorResult = {\n type: GestureCursorType.NORMAL,\n angle: 0,\n };\n\n private renderGeometry?: ImageExpandGeometry;\n\n private _isLockScale = false;\n\n private mouseGrabbed = false;\n\n /** 当前图片扩边配置。 */\n get config (): Readonly<ImageExpandConfig> {\n return this._owner.getConfigManager().get(imageExpandConfig);\n }\n\n /** 当前选中的元素(直读 selection.getSelectedPlayerItems:id→VFXItem 已解析)。 */\n get selectedItems (): VFXItem[] {\n return this._owner.getSelection().getSelectedPlayerItems();\n }\n\n /** 是否锁定宽高比缩放。 */\n get isLockScale () {\n return this._isLockScale;\n }\n\n /**\n * 设置是否锁定宽高比缩放。\n * @param state 是否锁定宽高比。\n */\n set isLockScale (state: boolean) {\n if (state === this.isLockScale) {\n return;\n }\n\n this._isLockScale = state;\n }\n\n /**\n * 更新扩边框交互或悬停状态。\n * @param event 鼠标移动事件。\n */\n override onMouseMove (event: InputEventMouseMotion): void {\n if (!this.isApplicableSelection()) {\n return;\n }\n if (this.mouseGrabbed) {\n const handled = this.updateGrab(event);\n\n this._owner.setCursor(this.cursorResult);\n if (handled) {\n event.accept();\n }\n\n return;\n }\n const hover = this._owner.getMousePosition();\n const inputPosition = new Vector2(event.position.x, event.position.y);\n\n this.refreshInteractionType(hover, inputPosition);\n this._owner.setCursor(this.cursorResult);\n if (event.buttonMask === MouseButtonMask.None\n && (this.interactionParam.type === ImageInteractionType.SCALE\n || this.interactionParam.type === ImageInteractionType.DIRECTION_SCALE)) {\n event.accept();\n }\n }\n\n /**\n * 继续当前扩边框拖拽。\n * @param event 鼠标拖拽事件。\n */\n override onMouseDrag (event: InputEventMouseMotion): void {\n if (!this.isApplicableSelection() || !this.mouseGrabbed) {\n return;\n }\n const handled = this.updateGrab(event);\n\n this._owner.setCursor(this.cursorResult);\n this._owner.emit('actionupdate', {\n source: this,\n });\n if (handled) {\n event.accept();\n }\n }\n\n /** 鼠标离开交互层:清交互类型(拖拽中不清)。 */\n override onMouseLeave (): void {\n if (!this.isApplicableSelection()) {\n return;\n }\n if (this.mouseGrabbed) {\n this._owner.setCursor(this.cursorResult);\n\n return;\n }\n this.interactionParam = { type: ImageInteractionType.NONE };\n this.refreshCursorResult(ImageInteractionType.NONE);\n this._owner.setCursor(this.cursorResult);\n }\n\n /**\n * 命中扩边框交互区域时开始操作。\n * @param event 鼠标按下事件。\n */\n override onMouseDown (event: InputEventMouseButton): void {\n if (!this.isApplicableSelection()) {\n return;\n }\n if (event.buttonIndex !== MouseButton.Left) {\n return;\n }\n const mouse = new Vector2(event.position.x, event.position.y);\n const inputPosition = new Vector2(event.position.x, event.position.y);\n\n this.refreshInteractionType(mouse, inputPosition);\n this._owner.setCursor(this.cursorResult);\n if (this.interactionParam.type === ImageInteractionType.NONE) {\n return;\n }\n\n this.mouseGrabbed = true;\n this._owner.emit('actionstart', { source: this });\n\n event.accept();\n }\n\n /**\n * 结束扩边框操作并提交结果。\n * @param event 鼠标抬起事件。\n */\n override onMouseUp (event: InputEventMouseButton): void {\n if (!this.mouseGrabbed) {\n return;\n }\n this.mouseGrabbed = false;\n\n const mouse = new Vector2(event.position.x, event.position.y);\n const inputPosition = new Vector2(event.position.x, event.position.y);\n\n this.refreshInteractionType(mouse, inputPosition);\n this._owner.setCursor(this.cursorResult);\n\n this._owner.emit('actioncommit', { source: this });\n\n event.accept();\n }\n\n /**\n * 键盘松开:清除当前交互的锁定宽高比(下次拖拽重新算)。\n * @param _keyCode 键盘事件\n */\n override onKeyUp (_keyCode: InputEventKey): void {\n if ('lockedAspect' in this.interactionParam) {\n delete this.interactionParam.lockedAspect;\n }\n }\n\n /** 为本帧绘制创建扩边投影。 */\n override onUpdate (): void {\n this.renderGeometry = this.getSelectionGeometry();\n }\n\n /**\n * 绘制扩边蒙版、网格、边框与角点。\n * @param control 绘制控制器。\n */\n override draw (control: Control) {\n // 步骤 1:读取本帧投影与绘制配置。\n const geometry = this.renderGeometry;\n\n if (!geometry) {\n return;\n }\n\n const {\n maskColor,\n maskAlpha,\n expandBoxLineWidth,\n expandBoxLineColor,\n expandBoxLineAlpha,\n expandBoxCornerRadius,\n expandBoxCornerFillColor,\n expandBoxCornerLineWidth,\n expandBoxCornerLineColor,\n expandBoxCornerLineAlpha,\n gridLineWidth,\n gridLineColor,\n gridLineAlpha,\n gridCount,\n } = this.config;\n\n const expandCorners = getTransformedBoxCorners(geometry.boxTransform, this.result.normalizeExpandBox);\n\n // 步骤 2:绘制扩边蒙版。\n fillBoxByCorners(control, expandCorners, toColor(maskColor, maskAlpha));\n\n // 步骤 3:绘制扩边辅助网格。\n const gridColor = toColor(gridLineColor, gridLineAlpha);\n\n for (let i = 1; i <= gridCount; i++) {\n const ratio = i / (gridCount + 1);\n const top = expandCorners[0].clone().add(expandCorners[1].clone().subtract(expandCorners[0]).multiply(ratio));\n const bottom = expandCorners[3].clone().add(expandCorners[2].clone().subtract(expandCorners[3]).multiply(ratio));\n const left = expandCorners[0].clone().add(expandCorners[3].clone().subtract(expandCorners[0]).multiply(ratio));\n const right = expandCorners[1].clone().add(expandCorners[2].clone().subtract(expandCorners[1]).multiply(ratio));\n\n control.drawLine(top.x, top.y, bottom.x, bottom.y, gridColor, gridLineWidth);\n control.drawLine(left.x, left.y, right.x, right.y, gridColor, gridLineWidth);\n }\n\n // 步骤 4:绘制扩边框和角点。\n drawCorners(control, expandCorners, toColor(expandBoxLineColor, expandBoxLineAlpha), expandBoxLineWidth);\n const cornerFill = toColor(expandBoxCornerFillColor, 1);\n const cornerStroke = toColor(expandBoxCornerLineColor, expandBoxCornerLineAlpha);\n\n expandCorners.forEach(corner => {\n control.fillCircle(corner.x, corner.y, expandBoxCornerRadius, cornerFill);\n control.drawCircle(corner.x, corner.y, expandBoxCornerRadius, cornerStroke, expandBoxCornerLineWidth);\n });\n }\n\n /**\n * 刷新指针结果。\n * @param activeType 交互类型。\n * @param angle 指针方向角度。\n */\n refreshCursorResult (activeType: ImageExpandInteractionType, angle = 0) {\n switch (activeType) {\n case ImageInteractionType.SCALE: {\n this.cursorResult = {\n type: GestureCursorType.SCALE,\n angle,\n };\n\n break;\n }\n case ImageInteractionType.DIRECTION_SCALE: {\n this.cursorResult = {\n type: GestureCursorType.SCALE,\n angle,\n };\n\n break;\n }\n case ImageInteractionType.MOVE:\n case ImageInteractionType.NONE: {\n this.cursorResult = {\n type: GestureCursorType.NORMAL,\n angle: 0,\n };\n\n break;\n }\n }\n }\n\n /**\n * 获取当前扩边信息(扩边框 + 元素包围盒)。\n * @returns 扩边信息对象,不可交互时返回 undefined\n */\n getExpandInfo () {\n const geometry = this.getSelectionGeometry();\n\n if (!geometry) {\n return undefined;\n }\n\n return {\n expandBox: this.result.normalizeExpandBox.clone(),\n itemBox: geometry.itemBox,\n };\n }\n\n /**\n * 获取归一化扩边包围盒(相对元素包围盒,可超出 [0, 1])。\n */\n getExpandBox () {\n if (!this.isApplicableSelection()) {\n return undefined;\n }\n\n return this.result.normalizeExpandBox.clone();\n }\n\n /**\n * 设置归一化扩边包围盒(入参为归一化坐标,钳制为至少覆盖元素范围)。\n * @param normalizeBox 归一化扩边包围盒\n * @returns 更新后的扩边包围盒;未激活或无效状态返回 undefined\n */\n setExpandBox (normalizeBox: Box2) {\n if (!this.isApplicableSelection()) {\n return undefined;\n }\n\n this.result.normalizeExpandBox.copyFrom(normalizeBox);\n\n return this.result.normalizeExpandBox.clone();\n }\n\n /** @returns 是否仅选中了一个可扩边元素。 */\n private isApplicableSelection (): boolean {\n return this._owner.getSelection().getSelectedPlayerItems().length === 1;\n }\n\n /**\n * drag:按交互类型处理扩边框移动/缩放/单向缩放。\n * 支持 shift 锁定宽高比,结果以归一化扩边盒写入 result。\n * @param event 鼠标事件(drag)\n */\n private updateGrab (event: InputEventMouseMotion): boolean {\n // 步骤 1:校验当前交互会话。\n if (!this.mouseGrabbed) {\n return false;\n }\n if (this.interactionParam.type === ImageInteractionType.NONE) {\n return true;\n }\n\n // 步骤 2:获取实时投影并计算指针位移。\n const geometry = this.getSelectionGeometry();\n\n if (!geometry) {\n return true;\n }\n\n const currentInputPosition = inverseTransformBoxPoint(geometry.boxTransform, new Vector2(event.position.x, event.position.y));\n const { startMouse, box } = this.interactionParam;\n const shift = new Vector2().subtractVectors(currentInputPosition, startMouse);\n const itemBoxMin = new Vector2();\n const itemBoxMax = new Vector2(1, 1);\n\n // 步骤 3:按移动、角点缩放或边缩放更新归一化扩边框。\n switch (this.interactionParam.type) {\n case ImageInteractionType.MOVE: {\n const { min: originMin, max: originMax } = box;\n\n const xMinShift = itemBoxMax.x - originMax.x;\n const xMaxShift = itemBoxMin.x - originMin.x;\n const yMinShift = itemBoxMax.y - originMax.y;\n const yMaxShift = itemBoxMin.y - originMin.y;\n\n shift.x = Math.min(Math.max(shift.x, xMinShift), xMaxShift);\n shift.y = Math.min(Math.max(shift.y, yMinShift), yMaxShift);\n\n const resultBox = box.clone().translate(shift);\n\n this.result.normalizeExpandBox = resultBox;\n\n break;\n }\n case ImageInteractionType.SCALE: {\n const { index } = this.interactionParam;\n const { min, max } = box;\n const boxCorners = getBoxCorners(box);\n const startCorner = boxCorners[index];\n const anchor = boxCorners[(index + 2) % 4];\n const resultCorner = new Vector2(startCorner.x + shift.x, startCorner.y + shift.y);\n\n if (startCorner.x >= max.x) {\n resultCorner.x = Math.max(resultCorner.x, itemBoxMax.x);\n } else if (startCorner.x <= min.x) {\n resultCorner.x = Math.min(resultCorner.x, itemBoxMin.x);\n } else {\n console.warn('resultCorner has wrong, we have move it to the nearest corner');\n resultCorner.x = Math.abs(resultCorner.x - min.x) > Math.abs(resultCorner.x - max.x) ? max.x : min.x;\n }\n\n if (startCorner.y >= max.y) {\n resultCorner.y = Math.max(resultCorner.y, itemBoxMax.y);\n } else if (startCorner.y <= min.y) {\n resultCorner.y = Math.min(resultCorner.y, itemBoxMin.y);\n } else {\n console.warn('resultCorner has wrong, we have move it to the nearest corner');\n resultCorner.y = Math.abs(resultCorner.y - min.y) > Math.abs(resultCorner.y - max.y) ? max.y : min.y;\n }\n\n if (event.shiftPressed || this.isLockScale) {\n const expandBox = this.result.normalizeExpandBox;\n const { x: boxWidth, y: boxHeight } = expandBox.getSize();\n const { x: originWidth, y: originHeight } = box.getSize();\n\n this.interactionParam.lockedAspect ??= boxWidth / boxHeight;\n\n if (Math.abs(resultCorner.x - anchor.x) / originWidth > Math.abs(resultCorner.y - anchor.y) / originHeight) {\n const resultHeight = Math.abs(resultCorner.x - anchor.x) / this.interactionParam.lockedAspect;\n\n resultCorner.y = (startCorner.y - anchor.y) / Math.abs((startCorner.y - anchor.y)) * resultHeight + anchor.y;\n\n if (startCorner.y >= max.y) {\n resultCorner.y = Math.max(resultCorner.y, itemBoxMax.y);\n } else if (startCorner.y <= min.y) {\n resultCorner.y = Math.min(resultCorner.y, itemBoxMin.y);\n } else {\n console.warn('resultCorner has wrong, we have move it to the nearest corner');\n resultCorner.y = Math.abs(resultCorner.y - min.y) > Math.abs(resultCorner.y - max.y) ? max.y : min.y;\n }\n } else {\n const resultWidth = Math.abs(resultCorner.y - anchor.y) * this.interactionParam.lockedAspect;\n\n resultCorner.x = (startCorner.x - anchor.x) / Math.abs((startCorner.x - anchor.x)) * resultWidth + anchor.x;\n\n if (startCorner.x >= max.x) {\n resultCorner.x = Math.max(resultCorner.x, itemBoxMax.x);\n } else if (startCorner.x <= min.x) {\n resultCorner.x = Math.min(resultCorner.x, itemBoxMin.x);\n } else {\n console.warn('resultCorner has wrong, we have move it to the nearest corner');\n resultCorner.x = Math.abs(resultCorner.x - min.x) > Math.abs(resultCorner.x - max.x) ? max.x : min.x;\n }\n }\n }\n\n this.result.normalizeExpandBox = setBoxFromPoints(new Box2(), [resultCorner, anchor]);\n\n break;\n }\n case ImageInteractionType.DIRECTION_SCALE: {\n const { index } = this.interactionParam;\n const boxCorners = getBoxCorners(box);\n const startPoint = boxCorners[index].clone();\n const expandBox = this.result.normalizeExpandBox;\n const { x: boxWidth, y: boxHeight } = expandBox.getSize();\n\n this.interactionParam.lockedAspect ??= boxWidth / boxHeight;\n const nextCorner = boxCorners[(index + 1) % 4].clone();\n\n // 四条边固定为:0 上、1 右、2 下、3 左。\n const shiftDirection = index % 2 === 0 ? 'y' : 'x';\n\n if (shiftDirection === 'x') {\n if (index === 1) {\n shift.x = Math.max(boxCorners[index].x + shift.x, itemBoxMax.x) - startPoint.x;\n if (event.shiftPressed || this.isLockScale) {\n const expandBox = this.result.normalizeExpandBox;\n const { x: boxWidth, y: boxHeight } = expandBox.getSize();\n\n this.interactionParam.lockedAspect ??= boxWidth / boxHeight;\n\n shift.y = shift.x / this.interactionParam.lockedAspect;\n const resuleTargetCornerY = nextCorner.y + shift.y;\n const clampResultCornerY = Math.max(resuleTargetCornerY, itemBoxMax.y);\n\n shift.y = clampResultCornerY - nextCorner.y;\n shift.x = shift.y * this.interactionParam.lockedAspect;\n } else {\n shift.y = 0;\n }\n } else if (index === 3) {\n shift.x = Math.min(boxCorners[index].x + shift.x, itemBoxMin.x) - startPoint.x;\n if (event.shiftPressed || this.isLockScale) {\n const expandBox = this.result.normalizeExpandBox;\n const { x: boxWidth, y: boxHeight } = expandBox.getSize();\n\n this.interactionParam.lockedAspect ??= boxWidth / boxHeight;\n\n shift.y = shift.x / this.interactionParam.lockedAspect;\n const resuleTargetCornerY = nextCorner.y + shift.y;\n const clampResultCornerY = Math.min(resuleTargetCornerY, itemBoxMin.y);\n\n shift.y = clampResultCornerY - nextCorner.y;\n shift.x = shift.y * this.interactionParam.lockedAspect;\n } else {\n shift.y = 0;\n }\n }\n } else {\n if (index === 2) {\n shift.y = Math.max(boxCorners[index].y + shift.y, itemBoxMax.y) - startPoint.y;\n if (event.shiftPressed || this.isLockScale) {\n const expandBox = this.result.normalizeExpandBox;\n const { x: boxWidth, y: boxHeight } = expandBox.getSize();\n\n this.interactionParam.lockedAspect ??= boxWidth / boxHeight;\n\n shift.x = -shift.y * this.interactionParam.lockedAspect;\n const resuleTargetCornerX = nextCorner.x + shift.x;\n const clampResultCornerX = Math.min(resuleTargetCornerX, itemBoxMin.x);\n\n shift.x = clampResultCornerX - nextCorner.x;\n shift.y = -shift.x / this.interactionParam.lockedAspect;\n } else {\n shift.x = 0;\n }\n } else if (index === 0) {\n shift.y = Math.min(boxCorners[index].y + shift.y, itemBoxMin.y) - startPoint.y;\n if (event.shiftPressed || this.isLockScale) {\n const expandBox = this.result.normalizeExpandBox;\n const { x: boxWidth, y: boxHeight } = expandBox.getSize();\n\n this.interactionParam.lockedAspect ??= boxWidth / boxHeight;\n\n shift.x = -shift.y * this.interactionParam.lockedAspect;\n const resuleTargetCornerX = nextCorner.x + shift.x;\n const clampResultCornerX = Math.max(resuleTargetCornerX, itemBoxMax.x);\n\n shift.x = clampResultCornerX - nextCorner.x;\n shift.y = -shift.x / this.interactionParam.lockedAspect;\n } else {\n shift.x = 0;\n }\n }\n }\n\n const resultCorners: Vector2[] = [];\n\n boxCorners.forEach((corner, i) => {\n const resultCorner = new Vector2();\n\n if (index === i) {\n if (shiftDirection === 'y') {\n resultCorner.copyFrom(corner.clone().add(new Vector2(0, shift.y)));\n } else {\n resultCorner.copyFrom(corner.clone().add(new Vector2(shift.x, 0)));\n }\n } else if (index === (i + 3) % 4) {\n resultCorner.copyFrom(corner.clone().add(shift));\n } else if (index === (i + 2) % 4) {\n if (shiftDirection === 'x') {\n resultCorner.copyFrom(corner.clone().add(new Vector2(0, shift.y)));\n } else {\n resultCorner.copyFrom(corner.clone().add(new Vector2(shift.x, 0)));\n }\n } else {\n resultCorner.copyFrom(corner.clone());\n }\n resultCorners.push(resultCorner);\n });\n this.result.normalizeExpandBox = setBoxFromPoints(new Box2(), resultCorners);\n\n break;\n }\n default:\n break;\n }\n\n return true;\n }\n\n /** @returns 当前图片与扩边框的视口投影。 */\n private getSelectionGeometry (): ImageExpandGeometry | undefined {\n const selectedItems = this.selectedItems;\n\n if (selectedItems.length !== 1) {\n return undefined;\n }\n\n const containerSize = GizmoViewportUtils.getContainerSize(this._owner.getEngine().canvas.parentElement!);\n const boxTransform = getItemViewTransform(selectedItems[0], containerSize);\n\n if (!boxTransform) {\n return undefined;\n }\n const itemBox = getItemViewBox(selectedItems[0], containerSize);\n\n return {\n itemBox,\n boxTransform,\n };\n }\n\n /**\n * 根据鼠标位置判定扩边框的交互类型(角点缩放/边线单向缩放/整体移动),\n * 同时刷新光标方向。\n * @param point 视图坐标鼠标位置\n * @param inputPosition Control 本地坐标鼠标位置\n */\n private refreshInteractionType (point: Vector2, inputPosition: Vector2) {\n // 步骤 1:重置交互状态并获取实时扩边投影。\n this.interactionParam.type = ImageInteractionType.NONE;\n\n const geometry = this.getSelectionGeometry();\n\n if (!geometry) {\n return;\n }\n\n const itemCorners = getTransformedBoxCorners(geometry.boxTransform);\n const expandCorners = getTransformedBoxCorners(geometry.boxTransform, this.result.normalizeExpandBox);\n let hasInteractionType = false;\n let angle = 0;\n\n // 步骤 2:优先检测角点缩放。\n expandCorners.forEach((corner, index) => {\n if (hasInteractionType) {\n return;\n }\n if (corner.distance(point) < 20) {\n hasInteractionType = true;\n this.interactionParam = {\n type: ImageInteractionType.SCALE,\n index,\n box: this.result.normalizeExpandBox.clone(),\n startMouse: inverseTransformBoxPoint(geometry.boxTransform, inputPosition),\n };\n\n const rotation = Math.atan2(itemCorners[1].y - itemCorners[0].y, itemCorners[1].x - itemCorners[0].x);\n\n angle = Math.PI / 2 * ((index + 3) % 4) + rotation;\n }\n });\n\n // 步骤 3:其次检测边缘单向缩放。\n expandCorners.forEach((corner, index) => {\n if (hasInteractionType) {\n return;\n }\n const edge = new Line2(corner.clone(), expandCorners[(index + 1) % 4]);\n const t = edge.distanceSq() === 0 ? 0 : edge.closestPointToPointParameter(point, true);\n const dis = { d: edge.at(t).distance(point), t };\n\n const state = dis.d >= 0 && dis.d <= 8 && dis.t >= 0 && dis.t <= 1;\n\n if (state) {\n hasInteractionType = true;\n this.interactionParam = {\n type: ImageInteractionType.DIRECTION_SCALE,\n index,\n box: this.result.normalizeExpandBox.clone(),\n startMouse: inverseTransformBoxPoint(geometry.boxTransform, inputPosition),\n };\n const rotation = Math.atan2(itemCorners[1].y - itemCorners[0].y, itemCorners[1].x - itemCorners[0].x);\n\n angle = Math.PI / 2 * ((index + 3) % 4) + Math.PI / 4 + rotation;\n }\n });\n\n // 步骤 4:最后检测扩边区域整体移动并刷新光标。\n if (transformedBoxContainsPoint(geometry.boxTransform, point, this.result.normalizeExpandBox) && !hasInteractionType) {\n this.interactionParam = {\n type: ImageInteractionType.MOVE,\n box: this.result.normalizeExpandBox.clone(),\n startMouse: inverseTransformBoxPoint(geometry.boxTransform, inputPosition),\n };\n\n hasInteractionType = true;\n }\n\n this.refreshCursorResult(this.interactionParam.type, angle * RAD2DEG);\n }\n}\n","import type { Gizmo } from '../gizmo';\nimport { GizmoTool } from '../gizmo-tool';\nimport { ImageExpandGizmo } from '../gizmos/image-expand-gizmo';\n\n/** 图片扩边工具。 */\nexport class ImageExpandGizmoTool extends GizmoTool {\n /** @returns 图片扩边 Gizmo 图。 */\n override createGizmos (): Gizmo[] {\n return [new ImageExpandGizmo(this.owner)];\n }\n}\n","import type {\n spec } from '@galacean/effects';\nimport {\n MouseButton,\n type InputEventMouseButton,\n type InputEventMouseMotion,\n} from '@galacean/effects';\nimport type { Control } from '@galacean/effects-plugin-gui';\nimport { Gizmo } from '../gizmo';\nimport { GizmoViewportUtils } from '../viewport/viewport-utils';\nimport { GizmoType } from '../gizmo-type';\nimport { Box2 } from '@galacean/effects-math/es/extension/index';\nimport { Vector2, getNormalizeBoxByBoxes, getTransformedBoxCorners, setBoxFromPoints, transformedBoxContainsPoint } from '../math';\nimport type { SpriteTextEditConfig } from '../configs/types';\nimport { spriteTextEditConfig } from '../configs/builtin-configs';\nimport { getPlayerItemById, getItemViewBox, getItemViewTransform } from '../items';\nimport { toColor, drawCorners, drawWithBoxTransform, fillBoxByCorners, wrapText, measureTextWidth } from '../drawing';\n\n/**\n * 图层文字信息\n */\nexport type SpriteTextInfo = {\n /**\n * 元素ID\n */\n id: string,\n /**\n * 文本框索引\n */\n index: number,\n /**\n * 文本包围盒\n */\n box: Box2,\n /**\n * 文本内容\n */\n text: string,\n /**\n * 是否被修改过\n */\n hasChanged: boolean,\n /**\n * 是否处于编辑态\n */\n isEditing: boolean,\n};\n\n/**\n * 精准改字功能初始化信息\n */\nexport type SpriteTextInitParam = {\n /**\n * 元素ID\n */\n id: string,\n /** 原始包围盒。 */\n originBox?: Box2,\n /**\n * 改字信息\n */\n info: SpriteTextInitInfo[],\n};\n\n/** 单个精准改字文本框的初始化信息。 */\nexport type SpriteTextInitInfo = {\n /**\n * 是否被修改过\n */\n hasChanged: boolean,\n /**\n * 文字内容\n */\n text: string,\n /**\n * 包围盒信息\n */\n box: [spec.vec2, spec.vec2, spec.vec2, spec.vec2],\n};\n\n/** 精准改字交互参数 */\ntype SpriteTextEditInteractionParam = {\n /** 已选中索引 */\n selected: number,\n /** 预选中索引 */\n preSelected: number,\n};\n\n/** 精准改字结果列表 */\ntype SpriteTextEditResult = SpriteTextInfo[];\n\n/** 编辑文本字号 / 行高 / 字体 */\nconst EDIT_TEXT_FONT_SIZE = 14;\nconst EDIT_TEXT_LINE_HEIGHT = 16;\nconst EDIT_TEXT_FONT_FAMILY = 'sans-serif';\n\n/** 在图层文本框上提供悬停、选择、编辑和绘制能力。 */\nexport class SpriteTextEditGizmo extends Gizmo {\n readonly type: GizmoType = GizmoType.SPRITE_TEXT_EDIT;\n\n result: SpriteTextEditResult = [];\n interactionParam: SpriteTextEditInteractionParam = { preSelected: -1, selected: -1 };\n\n /** onMouseMove 命中缓存(坐标未变则跳过 computePreSelected,避免每帧全 result 命中扫描)。 */\n private cachedCoords: Vector2 | null = null;\n\n /** 当前精准改字配置。 */\n get config (): Readonly<SpriteTextEditConfig> {\n return this._owner.getConfigManager().get(spriteTextEditConfig);\n }\n\n /**\n * 更新指针悬停的文本框。\n * @param _event 鼠标移动事件。\n */\n override onMouseMove (_event: InputEventMouseMotion): void {\n const hover = this._owner.getMousePosition();\n\n if (this.cachedCoords?.x !== hover.x || this.cachedCoords?.y !== hover.y) {\n this.interactionParam.preSelected = this.computePreSelected(hover);\n this.cachedCoords = hover.clone();\n }\n }\n\n /** 鼠标离开交互层:清预选中 + 失效缓存。 */\n override onMouseLeave (): void {\n this.interactionParam.preSelected = -1;\n this.cachedCoords = null;\n }\n\n /**\n * 将命中的文本框设为编辑态并发送点击事件。\n * @param event 鼠标按下事件。\n */\n override onMouseDown (event: InputEventMouseButton): void {\n if (event.buttonIndex !== MouseButton.Left || event.doubleClick) {\n return;\n }\n this.interactionParam.preSelected = this.computePreSelected(new Vector2(event.position.x, event.position.y));\n const targetInfo = this.result[this.interactionParam.preSelected];\n\n this.result.forEach(info => {\n info.isEditing = info.id === targetInfo?.id && info.index === targetInfo.index;\n });\n\n this.interactionParam.preSelected = -1;\n const emitInfo = targetInfo ? { id: targetInfo.id, index: targetInfo.index, text: targetInfo.text } : undefined;\n\n this._owner.emit('spritetextclick', { source: this, info: emitInfo });\n event.accept();\n }\n\n /**\n * 以初始化参数列表填充 result,将原始角点转换为相对元素包围盒的归一化盒。\n * @param initParams 初始化参数列表\n */\n initResult (initParams: SpriteTextInitParam[]) {\n initParams.forEach(param => {\n const originBox = param.originBox ?? this.getItemOriginBox(param.id);\n\n if (!originBox) {\n return;\n }\n\n param.info.forEach((initInfo, index) => {\n const { text, box, hasChanged } = initInfo;\n const corners = box.map(corner => new Vector2(...corner).add(originBox.min));\n const targetBox = setBoxFromPoints(new Box2(), corners);\n\n const normalizeBox = getNormalizeBoxByBoxes(originBox, targetBox);\n\n this.result.push({\n id: param.id,\n index,\n hasChanged,\n text: text,\n box: normalizeBox,\n isEditing: false,\n });\n });\n });\n }\n\n /** 清空当前所有改字结果数据。 */\n clearResultData () {\n this.result = [];\n }\n\n /**\n * 设置当前选中文字框;找不到时告警。\n * @param id 元素 ID\n * @param index 文本框索引\n */\n setSelected (id: string, index: number) {\n const selected = this.result.findIndex(info => info.id === id && info.index === index);\n\n if (selected < 0) {\n console.warn(`item ${id} does not have index ${index} text info.`);\n\n return;\n } else {\n this.interactionParam.selected = selected;\n }\n }\n\n /**\n * 设置指定文字框的文本内容;找不到时告警。\n * @param id 元素 ID\n * @param index 文本框索引\n * @param text 文本内容\n */\n setText (id: string, index: number, text: string) {\n const targetInfo = this.result.find(info => info.id === id && info.index === index);\n\n if (!targetInfo) {\n console.warn(`item ${id} does not have index ${index} text info.`);\n\n return;\n }\n\n targetInfo.text = text;\n }\n\n /**\n * 设置指定文字框的\"已改动\"状态;找不到时告警。\n * @param id 元素 ID\n * @param index 文本框索引\n * @param hasChanged 是否已改动\n */\n setChangedState (id: string, index: number, hasChanged: boolean) {\n const targetInfo = this.result.find(info => info.id === id && info.index === index);\n\n if (!targetInfo) {\n console.warn(`item ${id} does not have index ${index} text info.`);\n\n return;\n }\n\n targetInfo.hasChanged = hasChanged;\n }\n\n /**\n * 设置指定文字框的编辑态;找不到时告警。\n * @param id 元素 ID\n * @param index 文本框索引\n * @param isEditing 是否处于编辑态\n */\n setEditState (id: string, index: number, isEditing: boolean) {\n const targetInfo = this.result.find(info => info.id === id && info.index === index);\n\n if (!targetInfo) {\n console.warn(`item ${id} does not have index ${index} text info.`);\n\n return;\n }\n\n targetInfo.isEditing = isEditing;\n }\n\n /**\n * 绘制文本框状态与正在编辑的文本。\n * @param control 绘制控制器。\n */\n override draw (control: Control): void {\n // 步骤 1:读取配置并投影所有有效文本框。\n if (this.result.length === 0) {\n return;\n }\n\n const scale = GizmoViewportUtils.getViewScale(this._owner.getEngine());\n const {\n editBoxColor,\n editBoxAlpha,\n editBoxPreSelectedColor,\n editBoxPreSelectedAlpha,\n hasChangedEditBoxColor,\n hasChangedEditBoxAlpha,\n hasChangedEditBoxPreSelectedColor,\n hasChangedEditBoxPreSelectedAlpha,\n editBoxLineColor,\n editBoxLineAlpha,\n editBoxLinePreSelectedAlpha,\n editBoxLinePreSelectedColor,\n hasChangedEditBoxLineColor,\n hasChangedEditBoxLineAlpha,\n hasChangedEditBoxLinePreSelectedColor,\n hasChangedEditBoxLinePreSelectedAlpha,\n textColor,\n } = this.config;\n\n const currentPreSelected = this.interactionParam.preSelected;\n const entries = this.result\n .map((value, index) => {\n const playerItem = getPlayerItemById(this._owner.getEngine().sceneServer.compositions[0], value.id);\n\n if (!playerItem) {\n return undefined;\n }\n const transform = getItemViewTransform(playerItem, GizmoViewportUtils.getContainerSize(this._owner.getEngine().canvas.parentElement!));\n\n if (!transform) {\n return undefined;\n }\n const viewCorners = getTransformedBoxCorners(transform, value.box);\n const isPreSelected = index === currentPreSelected;\n\n return { value, viewCorners, isPreSelected };\n })\n .filter((entry): entry is NonNullable<typeof entry> => !!entry);\n\n // 步骤 2:创建单个文本框的绘制函数。\n /**\n * 绘制单个文本框。\n * @param viewCorners 文本框视口四角。\n * @param fill 填充色。\n * @param fillAlpha 填充透明度。\n * @param line 线框色。\n * @param lineAlpha 线框透明度。\n */\n const drawEntryBox = (viewCorners: Vector2[], fill: number, fillAlpha: number, line: number, lineAlpha: number) => {\n fillBoxByCorners(control, viewCorners, toColor(fill, fillAlpha));\n drawCorners(control, viewCorners, toColor(line, lineAlpha), 1);\n };\n\n // 步骤 3:按未修改、已修改的顺序绘制文本框。\n for (const changed of [false, true]) {\n entries\n .filter(entry => entry.value.hasChanged === changed)\n .forEach(({ viewCorners, isPreSelected }) => {\n if (changed) {\n drawEntryBox(\n viewCorners,\n isPreSelected ? hasChangedEditBoxPreSelectedColor : hasChangedEditBoxColor,\n isPreSelected ? hasChangedEditBoxPreSelectedAlpha : hasChangedEditBoxAlpha,\n isPreSelected ? hasChangedEditBoxLinePreSelectedColor : hasChangedEditBoxLineColor,\n isPreSelected ? hasChangedEditBoxLinePreSelectedAlpha : hasChangedEditBoxLineAlpha,\n );\n } else {\n drawEntryBox(\n viewCorners,\n isPreSelected ? editBoxPreSelectedColor : editBoxColor,\n isPreSelected ? editBoxPreSelectedAlpha : editBoxAlpha,\n isPreSelected ? editBoxLinePreSelectedColor : editBoxLineColor,\n isPreSelected ? editBoxLinePreSelectedAlpha : editBoxLineAlpha,\n );\n }\n });\n }\n\n // 步骤 4:在最上层绘制编辑态文本。\n const textFill = toColor(textColor, 1);\n const fontSize = EDIT_TEXT_FONT_SIZE * scale;\n const lineHeight = EDIT_TEXT_LINE_HEIGHT * scale;\n\n entries.forEach(({ value, viewCorners }) => {\n if (!value.isEditing) {\n return;\n }\n const [leftTop, rightTop, , leftBottom] = viewCorners;\n const width = leftTop.distance(rightTop);\n const height = leftTop.distance(leftBottom);\n const maxLines = Math.max(1, Math.floor(height / lineHeight));\n const lines = wrapText(value.text, width / scale, maxLines, EDIT_TEXT_FONT_SIZE, EDIT_TEXT_FONT_FAMILY);\n\n if (lines.length === 0) {\n return;\n }\n const blockHeight = lines.length * lineHeight;\n const xAxis = rightTop.clone().subtract(leftTop).normalize();\n const yAxis = leftBottom.clone().subtract(leftTop).normalize();\n\n drawWithBoxTransform(control, leftTop, xAxis, yAxis, () => {\n const topY = (height - blockHeight) / 2;\n\n lines.forEach((line, li) => {\n const lineWidth = measureTextWidth(line, fontSize, EDIT_TEXT_FONT_FAMILY);\n\n control.drawText((width - lineWidth) / 2, topY + li * lineHeight, line, fontSize, textFill, EDIT_TEXT_FONT_FAMILY);\n });\n });\n });\n }\n\n /**\n * 获取指定元素的视口包围盒。\n * @param id 元素 ID。\n * @returns 元素包围盒。\n */\n private getItemOriginBox (id: string): Box2 | undefined {\n const playerItem = getPlayerItemById(this._owner.getEngine().sceneServer.compositions[0], id);\n\n if (!playerItem) {\n return undefined;\n }\n\n return getItemViewBox(\n playerItem,\n GizmoViewportUtils.getContainerSize(this._owner.getEngine().canvas.parentElement!),\n );\n }\n\n /**\n * 查找鼠标命中的文本框索引。\n * @param mouse 鼠标位置。\n * @returns 首个命中索引;未命中时返回 -1。\n */\n private computePreSelected (mouse: Vector2): number {\n for (let i = 0; i < this.result.length; i++) {\n const textInfo = this.result[i];\n const playerItem = getPlayerItemById(this._owner.getEngine().sceneServer.compositions[0], textInfo.id);\n\n if (!playerItem) {\n continue;\n }\n const transform = getItemViewTransform(playerItem, GizmoViewportUtils.getContainerSize(this._owner.getEngine().canvas.parentElement!));\n\n if (transform && transformedBoxContainsPoint(transform, mouse, textInfo.box)) {\n return i;\n }\n }\n\n return -1;\n }\n}\n","import type { Gizmo } from '../gizmo';\nimport { GizmoTool } from '../gizmo-tool';\nimport { SpriteTextEditGizmo } from '../gizmos/sprite-text-edit-gizmo';\n\n/** Sprite 精准文字编辑工具。 */\nexport class SpriteTextEditGizmoTool extends GizmoTool {\n /** @returns 精准文字编辑 Gizmo 图。 */\n override createGizmos (): Gizmo[] {\n return [new SpriteTextEditGizmo(this.owner)];\n }\n}\n","import { Box2 } from '@galacean/effects-math/es/extension/index';\nimport { Vector2, getTransformedBoxCorners, inverseTransformBoxPoint, transformedBoxContainsPoint, type Matrix3 } from '../math';\nimport type { MaskConfig } from '../configs/types';\nimport { maskConfig } from '../configs/builtin-configs';\nimport type { ConfigChange } from '../configs/config-definition';\nimport type {\n VFXItem } from '@galacean/effects';\nimport {\n MouseButton,\n Texture,\n TextureSourceType,\n type InputEventMouseButton,\n type InputEventMouseMotion,\n} from '@galacean/effects';\nimport type { Control } from '@galacean/effects-plugin-gui';\nimport { Gizmo } from '../gizmo';\nimport type { GizmoOwner } from '../gizmo-owner';\nimport { GizmoViewportUtils } from '../viewport/viewport-utils';\nimport { GizmoType } from '../gizmo-type';\nimport { GestureCursorType, type GestureCursorResult } from '../cursor';\nimport { getItemViewTransform } from '../items';\nimport { toColor, drawCorners, drawWithBoxTransform } from '../drawing';\n\n/**\n * 图片蒙版工具结果\n */\nexport type MaskResult = {\n /**\n * 蒙版线条列表\n */\n lines: {\n /** 笔刷大小 */\n brushSize: number,\n /** 笔刷路径点(归一化坐标) */\n points: Vector2[],\n /** 笔刷类型:涂抹或擦除 */\n type?: 'paint' | 'erase',\n /** 形状类型:'stroke' 折线(默认),'rect' 矩形框选(points=[起点, 终点]) */\n shape?: 'stroke' | 'rect',\n }[],\n};\n\n/** 通过笔刷或矩形涂抹、擦除图片蒙版并实时预览。 */\nexport class MaskGizmo extends Gizmo {\n /** gizmo 类型标识 */\n type = GizmoType.MASK;\n\n /** 当前笔刷模式:涂抹或擦除 */\n mode: 'paint' | 'erase' | 'box-paint' | 'box-erase' = 'paint';\n\n /** 光标结果。 */\n cursorResult: GestureCursorResult = {\n type: GestureCursorType.NORMAL,\n angle: 0,\n };\n\n result: MaskResult = {\n lines: [],\n };\n\n /** 配置变更退订函数。 */\n private configOff?: () => void;\n\n /** 当前已加载的黑白蒙版图片。 */\n private maskImage?: HTMLImageElement;\n\n /** 蒙版图片加载版本,用于丢弃过期异步结果。 */\n private maskImageLoadVersion = 0;\n\n /** 仅供 draw 使用,由 onUpdate 为当前帧生成。 */\n private renderTransform?: Matrix3;\n\n /** 离屏 canvas,用于绘制蒙版预览(笔刷涂抹/擦除,原生支持圆头与 destination-out)。 */\n private previewCanvas: HTMLCanvasElement | null = null;\n\n /** 蒙版预览纹理(由离屏 canvas 每帧上传)。 */\n private maskTexture: Texture | null = null;\n\n private mouseGrabbed = false;\n\n /**\n * 创建蒙版 Gizmo,并按当前配置加载基础蒙版图。\n * @param owner Gizmo 宿主。\n */\n constructor (owner: GizmoOwner) {\n super(owner);\n this.configOff = owner.getConfigManager().onChange(\n maskConfig,\n change => {\n this.onConfigChange(change);\n },\n );\n void this.refreshMaskImage(this.config.maskImage);\n }\n\n /** 当前选中的元素(直读 selection.getSelectedPlayerItems:id→VFXItem 已解析)。 */\n get selectedItems (): VFXItem[] {\n return this._owner.getSelection().getSelectedPlayerItems();\n }\n\n /** 当前蒙版配置。 */\n get config (): Readonly<MaskConfig> {\n return this._owner.getConfigManager().get(maskConfig);\n }\n\n /**\n * 更新蒙版绘制或指针光标。\n * @param event 鼠标移动事件。\n */\n override onMouseMove (event: InputEventMouseMotion): void {\n const transform = this.getSelectionTransform();\n\n if (this.mouseGrabbed) {\n const handled = this.updateGrab(event, transform);\n\n this.refreshCursorResult(transform);\n this._owner.setCursor(this.cursorResult);\n if (handled) {\n event.accept();\n }\n\n return;\n }\n this.refreshCursorResult(transform);\n this._owner.setCursor(this.cursorResult);\n }\n\n /**\n * 继续当前蒙版绘制交互。\n * @param event 鼠标拖拽事件。\n */\n override onMouseDrag (event: InputEventMouseMotion): void {\n if (!this.mouseGrabbed) {\n return;\n }\n const transform = this.getSelectionTransform();\n const handled = this.updateGrab(event, transform);\n\n this.refreshCursorResult(transform);\n this._owner.setCursor(this.cursorResult);\n if (handled) {\n event.accept();\n }\n }\n\n /**\n * 在选中元素内开始笔刷或矩形蒙版交互。\n * @param event 鼠标按下事件。\n */\n override onMouseDown (event: InputEventMouseButton): void {\n // 步骤 1:校验按键、点击次数和选中元素包围盒。\n if (event.buttonIndex !== MouseButton.Left) {\n return;\n }\n if (event.doubleClick) {\n return;\n }\n\n const transform = this.getSelectionTransform();\n\n if (!transform) {\n return;\n }\n const point = new Vector2(event.position.x, event.position.y);\n\n if (!transformedBoxContainsPoint(transform, point)) {\n return;\n }\n\n // 步骤 2:矩形模式在元素内创建归一化矩形路径。\n if (this.mode === 'box-paint' || this.mode === 'box-erase') {\n this._owner.setCursor(this.cursorResult);\n this.mouseGrabbed = true;\n this._owner.emit('actionstart', { source: this });\n const start = this.toNormalized(point, transform);\n\n this.result.lines.push({\n type: this.mode === 'box-paint' ? 'paint' : 'erase',\n shape: 'rect',\n brushSize: 0,\n points: [start, start.clone()],\n });\n event.accept();\n\n return;\n }\n\n // 步骤 3:笔刷模式创建空路径,后续由拖拽追加点。\n this._owner.setCursor(this.cursorResult);\n this.mouseGrabbed = true;\n this._owner.emit('actionstart', { source: this });\n\n this.result.lines.push({\n type: this.mode,\n brushSize: this.config.brushSize,\n points: [],\n });\n\n event.accept();\n }\n\n /**\n * 结束蒙版绘制并移除无效路径。\n * @param event 鼠标抬起事件。\n */\n override onMouseUp (event: InputEventMouseButton): void {\n if (!this.mouseGrabbed) {\n return;\n }\n this.mouseGrabbed = false;\n const lastLine = this.result.lines[this.result.lines.length - 1];\n\n if (lastLine?.shape === 'rect') {\n const [a, b] = lastLine.points;\n const transform = this.getSelectionTransform();\n const corners = transform ? getTransformedBoxCorners(transform) : undefined;\n const w = Math.abs((a?.x ?? 0) - (b?.x ?? 0)) * (corners?.[0].distance(corners[1]) ?? 0);\n const h = Math.abs((a?.y ?? 0) - (b?.y ?? 0)) * (corners?.[0].distance(corners[3]) ?? 0);\n\n if (w < 0.5 && h < 0.5) {\n this.result.lines.pop();\n }\n } else if (lastLine?.points.length === 0) {\n this.result.lines.pop();\n }\n\n this._owner.emit('actioncommit', { source: this });\n this._owner.setCursor(this.cursorResult);\n\n event.accept();\n }\n\n /** 释放预览纹理和离屏绘制资源。 */\n override dispose (): void {\n this.configOff?.();\n this.configOff = undefined;\n this.maskImageLoadVersion++;\n this.maskImage = undefined;\n this.clearRenderObjects();\n super.dispose();\n }\n\n /** 为本帧绘制创建元素包围盒快照。 */\n override onUpdate (): void {\n this.renderTransform = this.getSelectionTransform();\n this.refreshCursorResult(this.renderTransform);\n }\n\n /**\n * 绘制蒙版纹理、元素轮廓和矩形预览。\n * @param control 绘制控制器。\n */\n override draw (control: Control): void {\n // 步骤 1:获取本帧包围盒与预览尺寸。\n const transform = this.renderTransform;\n\n if (!transform) {\n return;\n }\n\n const { brushAlpha, boxLineWidth, boxLineColor, boxLineAlpha } = this.config;\n const corners = getTransformedBoxCorners(transform);\n const [leftTop, rightTop, , leftBottom] = corners;\n const width = Math.ceil(leftTop.distance(rightTop));\n const height = Math.ceil(leftTop.distance(leftBottom));\n const xAxis = rightTop.clone().subtract(leftTop).normalize();\n const yAxis = leftBottom.clone().subtract(leftTop).normalize();\n\n // 步骤 2:渲染离屏预览并创建或更新纹理。\n if (width > 0 && height > 0) {\n const canvas = this.renderPreviewToCanvas(width, height);\n\n if (canvas) {\n if (this.maskTexture && (this.maskTexture.width !== width || this.maskTexture.height !== height)) {\n this.clearRenderObjects();\n }\n if (!this.maskTexture || this.maskTexture.isDestroyed) {\n this.maskTexture = Texture.create(control.engine, {\n sourceType: TextureSourceType.image,\n image: canvas,\n flipY: true,\n });\n } else {\n this.maskTexture.updateSource({\n sourceType: TextureSourceType.image,\n image: canvas,\n flipY: true,\n });\n }\n this.maskTexture.width = width;\n this.maskTexture.height = height;\n drawWithBoxTransform(control, leftTop, xAxis, yAxis, () => {\n control.drawTexture(0, 0, width, height, this.maskTexture!, undefined, toColor(0xFFFFFF, brushAlpha));\n });\n }\n\n if (this.maskImage) {\n const imageCanvas = this.getMask();\n\n if (imageCanvas) {\n if (this.maskTexture && (this.maskTexture.width !== width || this.maskTexture.height !== height)) {\n this.clearRenderObjects();\n }\n if (!this.maskTexture || this.maskTexture.isDestroyed) {\n this.maskTexture = Texture.create(control.engine, {\n sourceType: TextureSourceType.image,\n image: imageCanvas,\n flipY: true,\n });\n } else {\n this.maskTexture.updateSource({\n sourceType: TextureSourceType.image,\n image: imageCanvas,\n flipY: true,\n });\n }\n this.maskTexture.width = width;\n this.maskTexture.height = height;\n drawWithBoxTransform(control, leftTop, xAxis, yAxis, () => {\n control.drawTexture(0, 0, width, height, this.maskTexture!, undefined, toColor(0xFFFFFF, brushAlpha));\n });\n }\n }\n }\n\n // 步骤 3:绘制元素轮廓与正在拖动的矩形。\n drawCorners(control, corners, toColor(boxLineColor, boxLineAlpha), boxLineWidth);\n\n if (this.mouseGrabbed) {\n const lastLine = this.result.lines[this.result.lines.length - 1];\n\n if (lastLine?.shape === 'rect' && lastLine.points.length >= 2) {\n const [a, b] = lastLine.points;\n\n if (a && b) {\n const selCorners = getTransformedBoxCorners(\n transform,\n new Box2(\n new Vector2(Math.min(a.x, b.x), Math.min(a.y, b.y)),\n new Vector2(Math.max(a.x, b.x), Math.max(a.y, b.y)),\n ),\n );\n\n drawCorners(control, selCorners, toColor(boxLineColor, boxLineAlpha), boxLineWidth);\n }\n }\n }\n }\n\n /**\n * 设置模式。\n * @param mode 模式类型:'paint' 笔刷涂抹、'erase' 笔刷擦除、'box-paint' 框选涂抹、'box-erase' 框选擦除\n */\n setMode (mode: 'paint' | 'erase' | 'box-paint' | 'box-erase') {\n this.mode = mode;\n }\n\n /** 关闭 gizmo:清空蒙版配置、笔刷和预览资源。 */\n close () {\n this._owner.getConfigManager().set(maskConfig, { maskImage: '' });\n this.result.lines = [];\n this.clearRenderObjects();\n }\n\n /** 清空当前所有笔刷线条。 */\n clearMask () {\n this.result.lines = [];\n this.maskImage = undefined;\n }\n\n /**\n * 加载蒙版图片。\n * @param url 图片地址\n * @returns Promise<HTMLImageElement>\n */\n public loadMaskImage (url: string): Promise<HTMLImageElement> {\n return new Promise((resolve, reject) => {\n const img = new Image();\n\n img.crossOrigin = 'anonymous';\n img.onload = () => {\n resolve(img);\n };\n img.onerror = err => {\n reject(new Error('Failed to load mask image.'));\n };\n img.src = url;\n });\n }\n\n /**\n * 生成当前蒙版的 PNG Canvas。\n * @returns 蒙版图像;没有有效蒙版时返回 null。\n */\n getMask (): HTMLCanvasElement | null {\n // 步骤 1:创建与选中元素同尺寸的输出画布。\n const transform = this.getSelectionTransform();\n\n if (!transform) {\n return null;\n }\n\n const points = getTransformedBoxCorners(transform);\n const width = Math.ceil(points[0].distance(points[1]));\n const height = Math.ceil(points[0].distance(points[3]));\n\n const canvas = document.createElement('canvas');\n\n canvas.width = width;\n canvas.height = height;\n const ctx = canvas.getContext('2d');\n\n if (!ctx) {\n return null;\n }\n\n const { maskColor, maskBackgroundColor } = this.config;\n const maskImage = this.maskImage;\n\n if (this.result.lines.length === 0 && !maskImage) {\n return null;\n }\n\n const maskHexColor = '#' + maskColor.toString(16).padStart(6, '0');\n const maskBackgroundHexColor = '#' + maskBackgroundColor.toString(16).padStart(6, '0');\n\n ctx.fillStyle = maskBackgroundHexColor;\n ctx.fillRect(0, 0, width, height);\n\n // 步骤 2:将基础黑白蒙版映射为主体色和背景色。\n if (maskImage) {\n try {\n ctx.drawImage(maskImage, 0, 0, width, height);\n\n const imageData = ctx.getImageData(0, 0, width, height);\n const data = imageData.data;\n\n const mcR = (maskColor >> 16) & 0xFF;\n const mcG = (maskColor >> 8) & 0xFF;\n const mcB = maskColor & 0xFF;\n\n const mbcR = (maskBackgroundColor >> 16) & 0xFF;\n const mbcG = (maskBackgroundColor >> 8) & 0xFF;\n const mbcB = maskBackgroundColor & 0xFF;\n\n for (let i = 0; i < data.length; i += 4) {\n const r = data[i];\n const g = data[i + 1];\n const b = data[i + 2];\n\n const brightness = (r + g + b) / 3;\n\n if (brightness > 128) {\n data[i] = mcR;\n data[i + 1] = mcG;\n data[i + 2] = mcB;\n } else {\n data[i] = mbcR;\n data[i + 1] = mbcG;\n data[i + 2] = mbcB;\n }\n }\n\n ctx.putImageData(imageData, 0, 0);\n } catch (err) {\n console.warn('Failed to load mask image:', err);\n }\n }\n\n const scale = GizmoViewportUtils.getViewScale(this._owner.getEngine());\n\n // 步骤 3:按顺序应用矩形与笔刷路径。\n for (const line of this.result.lines) {\n if (!line || line.points.length === 0) {\n continue;\n }\n\n if (line.shape === 'rect') {\n const a = line.points[0];\n const b = line.points[1];\n\n if (!a || !b) {\n continue;\n }\n const x0 = Math.min(a.x, b.x) * width;\n const y0 = Math.min(a.y, b.y) * height;\n const x1 = Math.max(a.x, b.x) * width;\n const y1 = Math.max(a.y, b.y) * height;\n\n ctx.globalCompositeOperation = 'source-over';\n ctx.fillStyle = line.type === 'paint' ? maskHexColor : maskBackgroundHexColor;\n ctx.fillRect(x0, y0, Math.max(1, x1 - x0), Math.max(1, y1 - y0));\n continue;\n }\n\n ctx.lineWidth = line.brushSize * scale;\n ctx.lineCap = 'round';\n ctx.lineJoin = 'round';\n ctx.globalCompositeOperation = 'source-over';\n\n if (line.type === 'paint') {\n ctx.strokeStyle = maskHexColor;\n } else {\n ctx.strokeStyle = maskBackgroundHexColor;\n }\n\n ctx.beginPath();\n for (let j = 0; j < line.points.length; j++) {\n const point = line.points[j];\n\n if (!point) {\n continue;\n }\n\n const x = point.x * width;\n const y = point.y * height;\n\n if (j === 0) {\n ctx.moveTo(x, y);\n } else {\n ctx.lineTo(x, y);\n }\n }\n ctx.stroke();\n }\n\n // 步骤 4:导出最终 PNG。\n return canvas;\n }\n\n /**\n * 生成当前蒙版的 PNG Data URL。\n * @returns 蒙版图像;没有有效蒙版时返回 undefined。\n */\n getMaskDataUrl (): string | undefined {\n return this.getMask()?.toDataURL();\n }\n\n /**\n * 在蒙版图片 URL 变化时刷新运行时图片。\n * @param change 蒙版配置变更。\n */\n private onConfigChange (change: ConfigChange<MaskConfig>): void {\n if (change.previous.maskImage === change.current.maskImage) {\n return;\n }\n void this.refreshMaskImage(change.current.maskImage);\n }\n\n /**\n * 加载当前配置指定的蒙版图片,并忽略已过期的异步结果。\n * @param url 蒙版图片 URL;空字符串表示清空。\n */\n private async refreshMaskImage (url: string): Promise<void> {\n const loadVersion = ++this.maskImageLoadVersion;\n\n this.maskImage = undefined;\n this.clearRenderObjects();\n if (!url) {\n return;\n }\n\n try {\n const image = await this.loadMaskImage(url);\n\n if (loadVersion !== this.maskImageLoadVersion || this.config.maskImage !== url) {\n return;\n }\n this.maskImage = image;\n } catch (error) {\n if (loadVersion === this.maskImageLoadVersion) {\n console.warn('[MaskGizmo] Failed to load mask image.', error);\n }\n }\n }\n\n /**\n * 更新当前笔刷路径或矩形终点。\n * @param event 鼠标拖拽事件。\n * @param transform 当前元素投影。\n * @returns 是否处理了拖拽。\n */\n private updateGrab (event: InputEventMouseMotion, transform: Matrix3 | undefined): boolean {\n if (!this.mouseGrabbed) {\n return false;\n }\n if (!transform) {\n return true;\n }\n\n const lastLine = this.result.lines[this.result.lines.length - 1];\n\n if (lastLine?.shape === 'rect') {\n lastLine.points[1] = this.toNormalized(new Vector2(event.position.x, event.position.y), transform);\n\n return true;\n }\n\n const point = inverseTransformBoxPoint(transform, new Vector2(event.position.x, event.position.y));\n\n lastLine?.points.push(point);\n\n return true;\n }\n\n /**\n * 将视口坐标转换为包围盒内的归一化坐标。\n * @param p 视口坐标。\n * @param transform 元素 Box2 投影。\n * @returns 钳制到 [0, 1] 的归一化坐标。\n */\n private toNormalized (p: Vector2, transform: Matrix3): Vector2 {\n const point = inverseTransformBoxPoint(transform, p);\n\n return point.clamp(new Vector2(), new Vector2(1, 1));\n }\n\n /** 按当前元素与视口即时计算投影,不写入业务状态或渲染快照。 */\n private getSelectionTransform (): Matrix3 | undefined {\n const selectedItems = this.selectedItems;\n\n if (selectedItems.length !== 1) {\n return undefined;\n }\n\n const containerSize = GizmoViewportUtils.getContainerSize(this._owner.getEngine().canvas.parentElement!);\n\n return getItemViewTransform(selectedItems[0], containerSize);\n }\n\n /** 释放预览纹理与离屏 canvas。 */\n private clearRenderObjects (): void {\n if (this.maskTexture && !this.maskTexture.isDestroyed) {\n this.maskTexture.dispose();\n }\n this.maskTexture = null;\n this.previewCanvas = null;\n }\n\n /**\n * 将蒙版预览绘制到离屏画布。\n * @param width 预览宽度。\n * @param height 预览高度。\n * @returns 离屏画布;创建失败时返回 null。\n */\n private renderPreviewToCanvas (width: number, height: number): HTMLCanvasElement | null {\n // 步骤 1:创建或调整离屏画布并清空内容。\n this.previewCanvas ??= document.createElement('canvas');\n const canvas = this.previewCanvas;\n\n if (canvas.width !== width || canvas.height !== height) {\n canvas.width = width;\n canvas.height = height;\n }\n const ctx = canvas.getContext('2d');\n\n if (!ctx) {\n return null;\n }\n\n const { brushColor } = this.config;\n const brushHex = '#' + brushColor.toString(16).padStart(6, '0');\n const scale = GizmoViewportUtils.getViewScale(this._owner.getEngine());\n\n ctx.clearRect(0, 0, width, height);\n\n // 步骤 2:使用基础图片裁剪主体颜色。\n if (this.maskImage) {\n ctx.save();\n ctx.fillStyle = brushHex;\n ctx.fillRect(0, 0, width, height);\n ctx.globalCompositeOperation = 'destination-in';\n ctx.drawImage(this.maskImage, 0, 0, width, height);\n ctx.restore();\n }\n\n // 步骤 3:按顺序叠加或擦除矩形与笔刷路径。\n for (const line of this.result.lines) {\n if (!line || line.points.length === 0) {\n continue;\n }\n\n if (line.shape === 'rect') {\n const a = line.points[0];\n const b = line.points[1];\n\n if (a && b) {\n const x0 = Math.min(a.x, b.x) * width;\n const y0 = Math.min(a.y, b.y) * height;\n const x1 = Math.max(a.x, b.x) * width;\n const y1 = Math.max(a.y, b.y) * height;\n\n if (x1 - x0 > 0.5 || y1 - y0 > 0.5) {\n ctx.save();\n ctx.fillStyle = brushHex;\n ctx.globalCompositeOperation = line.type === 'paint' ? 'source-over' : 'destination-out';\n ctx.fillRect(x0, y0, x1 - x0, y1 - y0);\n ctx.restore();\n }\n }\n continue;\n }\n\n ctx.save();\n ctx.lineWidth = line.brushSize * scale;\n ctx.lineCap = 'round';\n ctx.lineJoin = 'round';\n ctx.strokeStyle = brushHex;\n ctx.globalCompositeOperation = line.type === 'paint' ? 'source-over' : 'destination-out';\n\n ctx.beginPath();\n for (let j = 0; j < line.points.length; j++) {\n const point = line.points[j];\n\n if (!point) {\n continue;\n }\n const x = point.x * width;\n const y = point.y * height;\n\n if (j === 0) {\n ctx.moveTo(x, y);\n } else {\n ctx.lineTo(x, y);\n }\n }\n ctx.stroke();\n ctx.restore();\n }\n\n // 步骤 4:返回供纹理上传的画布。\n return canvas;\n }\n\n /**\n * 根据指针位置和蒙版模式刷新光标。\n * @param transform 当前元素投影。\n */\n private refreshCursorResult (transform: Matrix3 | undefined) {\n const point = this._owner.getMousePosition();\n\n this.cursorResult = {\n type: GestureCursorType.NORMAL,\n angle: 0,\n };\n\n if (!point || !transform) {\n return;\n }\n\n if (!transformedBoxContainsPoint(transform, point)) {\n return;\n }\n\n if (this.mode === 'box-paint' || this.mode === 'box-erase') {\n this.cursorResult = { type: GestureCursorType.BOX_SELECT, angle: 0 };\n\n return;\n }\n\n this.cursorResult = {\n type: GestureCursorType.CIRCLE,\n angle: 0,\n radius: this.config.brushSize * GizmoViewportUtils.getViewScale(this._owner.getEngine()) / 2,\n };\n }\n}\n","import type { Gizmo } from '../gizmo';\nimport { GizmoTool } from '../gizmo-tool';\nimport { MaskGizmo } from '../gizmos/mask-gizmo';\n\n/** 蒙版编辑工具。 */\nexport class MaskGizmoTool extends GizmoTool {\n /** @returns 蒙版 Gizmo 图。 */\n override createGizmos (): Gizmo[] {\n return [new MaskGizmo(this.owner)];\n }\n}\n","/**\n * 鼠标拖拽轮次的起始距离(CSS px)。\n */\nexport const DRAG_THRESHOLD_PX = 5;\n\n/**\n * 判断指针相对按下点的累计位移是否达到拖拽阈值。\n * @param startClientX 按下点 X 坐标\n * @param startClientY 按下点 Y 坐标\n * @param currentClientX 当前 X 坐标\n * @param currentClientY 当前 Y 坐标\n * @returns 是否达到拖拽阈值\n */\nexport function isDragThresholdReached (\n startClientX: number,\n startClientY: number,\n currentClientX: number,\n currentClientY: number,\n): boolean {\n return Math.hypot(\n currentClientX - startClientX,\n currentClientY - startClientY,\n ) >= DRAG_THRESHOLD_PX;\n}\n","import { MouseButton, type InputEventMouseButton, type InputEventMouseMotion, FrameComponent, generateGUID, spec } from '@galacean/effects';\nimport type { Control } from '@galacean/effects-plugin-gui';\nimport { Gizmo } from '../gizmo';\nimport { GizmoViewportUtils } from '../viewport/viewport-utils';\nimport { GestureCursorType, type GestureCursorResult } from '../cursor';\nimport { Box2 } from '@galacean/effects-math/es/extension/index';\nimport { Vector2 } from '../math';\nimport type { ItemCreateConfig } from '../configs/types';\nimport { itemCreateConfig, selectionPreviewConfig } from '../configs/builtin-configs';\nimport { getItemViewBox, isFramePlayerItem } from '../items';\nimport { viewPositionToPixel, viewSizeToPixel } from '../viewport';\nimport { toColor, drawBox } from '../drawing';\nimport { DRAG_THRESHOLD_PX } from '../drag-threshold';\nimport type { GizmoItemCreateInfo } from '../gizmo-action';\nimport { TEXT_EDIT_BOX_LINE_COLOR, TEXT_EDIT_BOX_LINE_WIDTH } from './text-gizmo';\n\n/** 元素创建类型。 */\nexport enum ItemCreateType {\n /** 不创建元素。 */\n NONE = 'none',\n /** 创建文本元素。 */\n TEXT = 'text',\n /** 创建视频生成器。 */\n VIDEO_GENERATOR = 'video-generator',\n /** 创建图片生成器。 */\n IMAGE_GENERATOR = 'image-generator',\n /** 创建画板。 */\n FRAME = 'frame',\n}\n\n/** 画板创建交互生成的几何与子元素数据。 */\nexport type FrameCreateData = {\n /** 画板像素位置(中心点) */\n position: [number, number],\n /** 画板像素尺寸 [width, height] */\n size: [number, number],\n /** 框选命中的子元素 ID 列表 */\n children: string[],\n};\n\n/** 固定宽度文字创建数据;垂直尺寸仍由文字默认样式决定。 */\nexport type TextCreateData = {\n /** 文字像素位置(中心点) */\n position: [number, number],\n /** 水平拖拽得到的固定像素宽度 */\n width: number,\n};\n\nconst DEFAULT_FRAME_SIZE = 1024;\nconst DEFAULT_TEXT_HEIGHT = 60;\nconst TEXT_FIXED_WIDTH_DELAY_MS = 150;\n// 固定宽度文本使用六倍拖拽阈值,避免轻微抖动生成窄列文本。\nconst TEXT_FIXED_WIDTH_DRAG_DISTANCE_PX = DRAG_THRESHOLD_PX * 6;\n\n/** 通过点击或拖拽创建文本、生成器和画板元素。 */\nexport class ItemCreateGizmo extends Gizmo {\n readonly type = 'item-create';\n\n _createType = ItemCreateType.NONE;\n /** 光标结果(GestureCursorResult) */\n cursorResult: GestureCursorResult = {\n type: GestureCursorType.NORMAL,\n angle: 0,\n };\n\n private dragStartPoint: Vector2 | null = null;\n private dragStartViewPoint: Vector2 | null = null;\n private pressStartedAt = 0;\n private mouseGrabbed = false;\n private frameBox: Box2 | null = null;\n private frameChildren: string[] = [];\n private interactiveChildrenBoxes = new Map<string, Box2>();\n private isFixedWidthText = false;\n private textDragDirection = 1;\n private textBox: Box2 | null = null;\n private createItemId: string | null = null;\n private dragCreationStarted = false;\n\n /** 当前元素创建配置。 */\n get config (): Readonly<ItemCreateConfig> {\n return this._owner.getConfigManager().get(itemCreateConfig);\n }\n\n /** 当前创建类型 */\n get createType () {\n return this._createType;\n }\n\n /**\n * 设置创建类型,变化时刷新光标。\n * @param type 元素创建类型\n */\n set createType (type: ItemCreateType) {\n if (type === this._createType) {\n return;\n }\n\n this._createType = type;\n this.refreshCursorResult();\n }\n\n /**\n * 更新已开始的元素创建交互。\n * @param event 鼠标移动事件。\n */\n override onMouseMove (event: InputEventMouseMotion): void {\n if (this.mouseGrabbed) {\n const handled = this.updateGrab(event);\n\n this._owner.setCursor(this.cursorResult);\n if (handled) {\n event.accept();\n }\n\n return;\n }\n this._owner.setCursor(this.cursorResult);\n }\n\n /**\n * 继续画板或固定宽度文本的拖拽创建。\n * @param event 鼠标拖拽事件。\n */\n override onMouseDrag (event: InputEventMouseMotion): void {\n if (!this.mouseGrabbed) {\n return;\n }\n const handled = this.updateGrab(event);\n\n this._owner.setCursor(this.cursorResult);\n if (handled) {\n event.accept();\n }\n }\n\n /**\n * 初始化元素创建交互与预生成 ID。\n * @param event 鼠标按下事件。\n */\n override onMouseDown (event: InputEventMouseButton): void {\n if (event.buttonIndex !== MouseButton.Left) {\n return;\n }\n this._owner.setCursor(this.cursorResult);\n this.mouseGrabbed = true;\n this.dragStartViewPoint = new Vector2(event.position.x, event.position.y);\n this.dragStartPoint = new Vector2(event.position.x, event.position.y);\n this.pressStartedAt = Date.now();\n this.frameBox = null;\n this.frameChildren = [];\n this.isFixedWidthText = false;\n this.textDragDirection = 1;\n this.textBox = null;\n this.createItemId = generateGUID();\n this.dragCreationStarted = false;\n\n if (this._createType === ItemCreateType.FRAME) {\n this.refreshInteractiveChildrenBoxes();\n }\n\n event.accept();\n }\n\n /**\n * 提交或取消当前元素创建交互。\n * @param event 鼠标抬起事件。\n */\n override onMouseUp (event: InputEventMouseButton): void {\n // 步骤 1:校验会话并处理取消事件。\n if (!this.mouseGrabbed) {\n return;\n }\n\n if (event.isCanceled()) {\n const createInfo = this.getCurrentDragCreateInfo();\n\n if (this.dragCreationStarted && createInfo) {\n this._owner.emit('actioncommit', { source: this, createInfo, canceled: true });\n }\n this.resetInteractionState();\n this._owner.setCursor(this.cursorResult);\n event.accept();\n\n return;\n }\n\n // 松开时采用最终水平距离,快速拖动也保留宽度;预览仍使用时间阈值。\n if (this._createType === ItemCreateType.TEXT) {\n this.updateTextDrag(event, true);\n }\n\n // 步骤 2:优先提交已开始的拖拽创建。\n const dragCreateInfo = this.getCurrentDragCreateInfo();\n\n if (this.dragCreationStarted && dragCreateInfo) {\n this._owner.emit('actioncommit', { source: this, createInfo: dragCreateInfo });\n this.resetInteractionState();\n this._owner.setCursor(this.cursorResult);\n event.accept();\n\n return;\n }\n\n // 步骤 3:按创建类型提交点击创建或画板拖拽结果。\n const createItemId = this.createItemId!;\n\n switch (this._createType) {\n case ItemCreateType.FRAME: {\n if (this.frameBox) {\n this._owner.emit('actioncommit', {\n source: this,\n createInfo: this.getFrameDragCreateInfo(),\n });\n\n break;\n }\n const pixelPosition = this.viewPositionToPixel(this.dragStartViewPoint!);\n const frameData: FrameCreateData = {\n position: [pixelPosition.x, pixelPosition.y],\n size: [DEFAULT_FRAME_SIZE, DEFAULT_FRAME_SIZE],\n children: [],\n };\n\n this._owner.emit('actioncommit', {\n source: this,\n createInfo: {\n info: frameData,\n type: ItemCreateType.FRAME,\n id: createItemId,\n position: frameData.position,\n },\n });\n\n break;\n }\n case ItemCreateType.TEXT: {\n const pixelPosition = this.viewPositionToPixel(this.dragStartViewPoint!);\n\n this._owner.emit('actioncommit', {\n source: this,\n createInfo: {\n type: ItemCreateType.TEXT,\n id: createItemId,\n position: [pixelPosition.x, pixelPosition.y],\n },\n });\n\n break;\n }\n case ItemCreateType.IMAGE_GENERATOR:\n case ItemCreateType.VIDEO_GENERATOR: {\n const pixelPosition = viewPositionToPixel(new Vector2(event.position.x, event.position.y), GizmoViewportUtils.getContainerSize(this._owner.getEngine().canvas.parentElement!), GizmoViewportUtils.getViewScale(this._owner.getEngine()), GizmoViewportUtils.getViewportTranslation(this._owner.getEngine()));\n const position: [number, number] = [pixelPosition.x, pixelPosition.y];\n\n this._owner.emit('actioncommit', { source: this, createInfo: { type: this._createType, id: createItemId, position } });\n\n break;\n }\n case ItemCreateType.NONE:\n break;\n }\n\n // 步骤 4:清理会话并恢复光标。\n this.resetInteractionState();\n this._owner.setCursor(this.cursorResult);\n event.accept();\n }\n\n /** 按当前创建类型刷新鼠标光标样式。 */\n refreshCursorResult () {\n switch (this._createType) {\n case ItemCreateType.TEXT: {\n this.cursorResult = {\n type: GestureCursorType.TEXT_CREATE,\n angle: 0,\n };\n\n break;\n }\n case ItemCreateType.FRAME: {\n this.cursorResult = {\n type: GestureCursorType.FRAME_CREATE,\n angle: 0,\n };\n\n break;\n }\n case ItemCreateType.NONE:\n case ItemCreateType.IMAGE_GENERATOR:\n case ItemCreateType.VIDEO_GENERATOR: {\n this.cursorResult = {\n type: GestureCursorType.NORMAL,\n angle: 0,\n };\n\n break;\n }\n }\n }\n\n /** 刷新可被框选加入画板的子元素包围盒映射:过滤动效元素、画板元素及其子元素。 */\n refreshInteractiveChildrenBoxes () {\n // 步骤 1:获取当前合成并清空旧的候选包围盒。\n this.interactiveChildrenBoxes.clear();\n const playerComposition = this._owner.getEngine().sceneServer.compositions[0];\n\n if (!playerComposition?.items.length) {\n return;\n }\n\n // 步骤 2:收集不可被画板收纳的动效、画板及其子元素。\n const effectsItemIds: string[] = [];\n const frameItemIds: string[] = [];\n\n playerComposition.items.forEach(item => {\n if (item.name === 'ModelPluginItem') {\n return;\n }\n if (item.name === '动效' && item.getComponent(FrameComponent) !== undefined) {\n effectsItemIds.push(item.getInstanceId());\n }\n if (isFramePlayerItem(item)) {\n frameItemIds.push(item.getInstanceId());\n item.children?.forEach(child => {\n frameItemIds.push(child.getInstanceId());\n });\n }\n });\n\n const filterItemIds = [...effectsItemIds, ...frameItemIds];\n\n // 步骤 3:缓存其余可交互元素的视口包围盒。\n playerComposition.items.forEach(item => {\n const itemId = item.getInstanceId();\n\n if (filterItemIds.includes(itemId)) {\n return;\n }\n\n const box = getItemViewBox(\n item,\n GizmoViewportUtils.getContainerSize(this._owner.getEngine().canvas.parentElement!),\n );\n\n this.interactiveChildrenBoxes.set(itemId, box);\n });\n }\n\n /**\n * 绘制画板或文本的创建区域,以及画板待收纳元素轮廓。\n * @param control 绘制控制器。\n */\n override draw (control: Control): void {\n const isTextPreview = this._createType === ItemCreateType.TEXT;\n const previewBox = this._createType === ItemCreateType.FRAME\n ? this.frameBox\n : isTextPreview ? this.getTextPreviewBox() : null;\n\n if (!this.mouseGrabbed || !previewBox || previewBox.isEmpty()) {\n return;\n }\n\n const {\n frameBorderAlpha,\n frameBorderColor,\n frameBorderWidth,\n } = this.config;\n\n drawBox(\n control,\n previewBox,\n isTextPreview\n ? toColor(TEXT_EDIT_BOX_LINE_COLOR, 1)\n : toColor(frameBorderColor, frameBorderAlpha),\n isTextPreview ? TEXT_EDIT_BOX_LINE_WIDTH : frameBorderWidth,\n );\n\n if (this._createType === ItemCreateType.FRAME) {\n const hoverConfig = this._owner.getConfigManager().get(selectionPreviewConfig);\n const hoverColor = toColor(hoverConfig.preSelectedColor, 1);\n\n this.frameChildren.forEach(id => {\n const box = this.interactiveChildrenBoxes.get(id);\n\n if (!box) {\n return;\n }\n drawBox(control, box, hoverColor, hoverConfig.preSelectedWidth);\n });\n }\n }\n\n /** 释放元素创建交互状态。 */\n override dispose (): void {\n this.resetInteractionState();\n super.dispose();\n }\n\n /**\n * 按当前创建类型更新拖拽预览。\n * @param event 鼠标拖拽事件。\n * @returns 是否处理了拖拽。\n */\n private updateGrab (event: InputEventMouseMotion): boolean {\n if (!this.mouseGrabbed) {\n return false;\n }\n\n switch (this._createType) {\n case ItemCreateType.FRAME:\n this.updateFrameDrag(event);\n\n break;\n case ItemCreateType.TEXT:\n this.updateTextDrag(event);\n\n break;\n }\n\n return true;\n }\n\n /**\n * 更新画板拖拽区域及其待收纳子元素。\n * @param event 鼠标拖拽事件。\n */\n private updateFrameDrag (event: InputEventMouseMotion): void {\n if (!this.dragStartPoint || !this.dragStartViewPoint) {\n return;\n }\n\n const endPoint = this.getCurrentViewPoint(event);\n const deltaX = endPoint.x - this.dragStartViewPoint.x;\n const deltaY = endPoint.y - this.dragStartViewPoint.y;\n const resolvedEndPoint = new Vector2(\n this.dragStartViewPoint.x + Math.sign(deltaX || 1) * Math.max(Math.abs(deltaX), 1),\n this.dragStartViewPoint.y + Math.sign(deltaY || 1) * Math.max(Math.abs(deltaY), 1),\n );\n\n this.frameBox = this.createBox(this.dragStartViewPoint, resolvedEndPoint);\n this.frameChildren = [];\n\n this.interactiveChildrenBoxes.forEach((box, id) => {\n if (this.frameBox?.containsBox(box) && id !== 'ModelPluginItem') {\n this.frameChildren.push(id);\n }\n });\n }\n\n /**\n * 超过水平距离阈值后更新固定宽度文本;预览另外等待时间阈值。\n * @param event 鼠标拖拽事件。\n * @param committing 是否正在松开提交,此时不等待预览时间阈值。\n */\n private updateTextDrag (event: InputEventMouseMotion | InputEventMouseButton, committing = false): void {\n if (!this.dragStartPoint || !this.dragStartViewPoint) {\n return;\n }\n\n const endPoint = this.getCurrentViewPoint(event);\n const horizontalDistance = Math.abs(endPoint.x - this.dragStartViewPoint.x);\n\n if (!this.isFixedWidthText) {\n if (\n (!committing && Date.now() - this.pressStartedAt < TEXT_FIXED_WIDTH_DELAY_MS)\n || horizontalDistance <= TEXT_FIXED_WIDTH_DRAG_DISTANCE_PX\n ) {\n return;\n }\n this.isFixedWidthText = true;\n }\n\n const deltaX = endPoint.x - this.dragStartViewPoint.x;\n\n if (deltaX !== 0) {\n this.textDragDirection = Math.sign(deltaX);\n }\n const resolvedEndX = this.dragStartViewPoint.x\n + this.textDragDirection * Math.max(horizontalDistance, 1);\n const textHeight = DEFAULT_TEXT_HEIGHT * GizmoViewportUtils.getViewScale(this._owner.getEngine());\n\n this.textBox = this.createBox(\n new Vector2(this.dragStartViewPoint.x, this.dragStartViewPoint.y - textHeight / 2),\n new Vector2(resolvedEndX, this.dragStartViewPoint.y + textHeight / 2),\n );\n this.emitDragCreate(this.getTextDragCreateInfo());\n }\n\n /**\n * 发送拖拽创建的开始或更新事件。\n * @param createInfo 当前元素创建信息。\n */\n private emitDragCreate (createInfo: GizmoItemCreateInfo): void {\n const phase = this.dragCreationStarted ? 'actionupdate' : 'actionstart';\n\n this.dragCreationStarted = true;\n this._owner.emit(phase, { source: this, createInfo });\n }\n\n /** @returns 当前画板拖拽预览对应的创建信息。 */\n private getFrameDragCreateInfo (): GizmoItemCreateInfo {\n const frameBox = this.frameBox!;\n const pixelPosition = this.viewPositionToPixel(frameBox.getCenter());\n const pixelSize = viewSizeToPixel(\n frameBox.getSize(),\n GizmoViewportUtils.getViewScale(this._owner.getEngine()),\n );\n const frameData: FrameCreateData = {\n position: [pixelPosition.x, pixelPosition.y],\n size: [pixelSize.x, pixelSize.y],\n children: [...this.frameChildren],\n };\n\n return {\n type: ItemCreateType.FRAME,\n id: this.createItemId!,\n position: frameData.position,\n info: frameData,\n };\n }\n\n /** @returns 当前文本拖拽预览对应的创建信息。 */\n private getTextDragCreateInfo (): GizmoItemCreateInfo {\n const textBox = this.textBox!;\n const pixelPosition = this.viewPositionToPixel(textBox.getCenter());\n const pixelWidth = viewSizeToPixel(\n textBox.getSize(),\n GizmoViewportUtils.getViewScale(this._owner.getEngine()),\n ).x;\n const textData: TextCreateData = {\n position: [pixelPosition.x, pixelPosition.y],\n width: pixelWidth,\n };\n\n return {\n type: ItemCreateType.TEXT,\n id: this.createItemId!,\n position: textData.position,\n info: textData,\n };\n }\n\n /** @returns 当前有效的拖拽创建信息。 */\n private getCurrentDragCreateInfo (): GizmoItemCreateInfo | undefined {\n if (this._createType === ItemCreateType.TEXT && this.textBox) {\n return this.getTextDragCreateInfo();\n }\n\n return undefined;\n }\n\n /**\n * @returns 拖拽创建中文本的实际视图包围盒;元素尚未就绪时退回手势预览盒。\n */\n private getTextPreviewBox (): Box2 | null {\n if (this.dragCreationStarted) {\n const selectedItems = this._owner.getSelection().getSelectedPlayerItems();\n const selectedItem = selectedItems.length === 1 ? selectedItems[0] : undefined;\n\n if (selectedItem?.type === spec.ItemType.text) {\n const actualBox = getItemViewBox(\n selectedItem,\n GizmoViewportUtils.getContainerSize(this._owner.getEngine().canvas.parentElement!),\n );\n\n if (!actualBox.isEmpty()) {\n return actualBox;\n }\n }\n }\n\n return this.textBox;\n }\n\n /**\n * 计算当前指针对应的视口位置。\n * @param event 鼠标拖拽事件。\n * @returns 当前视口位置。\n */\n private getCurrentViewPoint (event: InputEventMouseMotion | InputEventMouseButton): Vector2 {\n const shift = new Vector2(\n event.position.x - this.dragStartPoint!.x,\n event.position.y - this.dragStartPoint!.y,\n );\n\n return this.dragStartViewPoint!.clone().add(shift);\n }\n\n /**\n * 根据两个端点创建轴对齐包围盒。\n * @param start 起点。\n * @param end 终点。\n * @returns 轴对齐包围盒。\n */\n private createBox (start: Vector2, end: Vector2): Box2 {\n return new Box2(\n new Vector2(Math.min(start.x, end.x), Math.min(start.y, end.y)),\n new Vector2(Math.max(start.x, end.x), Math.max(start.y, end.y)),\n );\n }\n\n /**\n * 将视口位置转换为像素坐标。\n * @param point 视口位置。\n * @returns 像素坐标。\n */\n private viewPositionToPixel (point: Vector2): Vector2 {\n const engine = this._owner.getEngine();\n\n return viewPositionToPixel(\n point,\n GizmoViewportUtils.getContainerSize(engine.canvas.parentElement!),\n GizmoViewportUtils.getViewScale(engine),\n GizmoViewportUtils.getViewportTranslation(engine),\n );\n }\n\n /** 重置一次创建交互的全部临时状态。 */\n private resetInteractionState (): void {\n this.mouseGrabbed = false;\n this.dragStartPoint = null;\n this.dragStartViewPoint = null;\n this.pressStartedAt = 0;\n this.frameBox = null;\n this.frameChildren = [];\n this.interactiveChildrenBoxes.clear();\n this.isFixedWidthText = false;\n this.textDragDirection = 1;\n this.textBox = null;\n this.createItemId = null;\n this.dragCreationStarted = false;\n }\n}\n","import type { Gizmo } from '../gizmo';\nimport { GizmoTool } from '../gizmo-tool';\nimport { ItemCreateGizmo, ItemCreateType } from '../gizmos/item-create-gizmo';\n\n/** 元素创建工具。 */\nexport class ItemCreateGizmoTool extends GizmoTool {\n /** 当前元素创建类型。 */\n createType: ItemCreateType = ItemCreateType.NONE;\n\n /** @returns 指定创建类型的 Gizmo 图。 */\n override createGizmos (): Gizmo[] {\n const gizmo = new ItemCreateGizmo(this.owner);\n\n gizmo.createType = this.createType;\n\n return [gizmo];\n }\n}\n","import { EventEmitter } from '@galacean/effects';\nimport { cloneConfigValue, freezeConfigValue, type AnyConfigDefinition, type ConfigChange, type ConfigValue } from './config-definition';\n\n/** 任意配置项的一次变更。 */\nexport type AnyConfigChange = {\n /** 配置唯一标识。 */\n id: string,\n /** 本次接受的增量配置。 */\n partial: Readonly<Record<string, unknown>>,\n /** 变更前的完整配置。 */\n previous: Readonly<Record<string, unknown>>,\n /** 变更后的完整配置。 */\n current: Readonly<Record<string, unknown>>,\n};\n\n/** 配置管理器事件参数。 */\nexport type ConfigManagerEvents = {\n /** 任意配置变更事件。 */\n configChange: [AnyConfigChange],\n};\n\n/**\n * 深度比较两个配置值。\n * @param left 左侧配置值\n * @param right 右侧配置值\n * @returns 两个配置值是否相等\n */\nfunction configEqual (left: unknown, right: unknown): boolean {\n if (Object.is(left, right)) {\n return true;\n }\n if (Array.isArray(left) || Array.isArray(right)) {\n return Array.isArray(left)\n && Array.isArray(right)\n && left.length === right.length\n && left.every((value, index) => configEqual(value, right[index]));\n }\n if (!left || !right || typeof left !== 'object' || typeof right !== 'object') {\n return false;\n }\n\n const leftRecord = left as Record<string, unknown>;\n const leftKeys = Object.keys(leftRecord);\n const rightRecord = right as Record<string, unknown>;\n\n return leftKeys.length === Object.keys(rightRecord).length\n && leftKeys.every(key => configEqual(leftRecord[key], rightRecord[key]));\n}\n\n/**\n * 创建可安全存储的不可变配置副本。\n * @param value 原始配置值\n * @returns 冻结后的配置副本\n */\nfunction createStoredValue<T> (value: T): T {\n return freezeConfigValue(cloneConfigValue(value));\n}\n\n/** 管理配置定义、当前值和变更订阅。 */\nexport class ConfigManager extends EventEmitter<ConfigManagerEvents> {\n private readonly values = new Map<string, Record<string, unknown>>();\n private readonly definitions = new Map<string, AnyConfigDefinition>();\n\n /**\n * 获取配置当前值,首次读取时使用默认值初始化。\n * @param definition 配置定义\n * @returns 当前不可变配置\n */\n get<D extends AnyConfigDefinition> (\n definition: D,\n ): Readonly<ConfigValue<D>> {\n this.assertDefinition(definition);\n let value = this.values.get(definition.id);\n\n if (!value) {\n value = createStoredValue(definition.defaults);\n this.values.set(definition.id, value);\n }\n\n return value as ConfigValue<D>;\n }\n\n /**\n * 合并并保存增量配置。\n * @param definition 配置定义\n * @param partial 待合并的增量配置\n */\n set<D extends AnyConfigDefinition> (\n definition: D,\n partial: Partial<ConfigValue<D>>,\n ): void {\n this.assertDefinition(definition);\n const previous = this.get(definition);\n const validated = definition.validate?.(partial);\n\n if (definition.validate && !validated) {\n return;\n }\n const accepted = validated ?? partial;\n const current = createStoredValue({ ...previous, ...accepted }) as ConfigValue<D>;\n\n if (configEqual(previous, current)) {\n return;\n }\n\n this.values.set(definition.id, current);\n const change = {\n id: definition.id,\n partial: createStoredValue(accepted),\n previous,\n current,\n };\n\n this.emit('configChange', change);\n }\n\n /**\n * 将配置恢复为默认值。\n * @param definition 配置定义\n */\n reset (definition: AnyConfigDefinition): void {\n this.assertDefinition(definition);\n const previous = this.get(definition);\n const current = createStoredValue(definition.defaults);\n\n if (configEqual(previous, current)) {\n return;\n }\n this.values.set(definition.id, current);\n const change = {\n id: definition.id,\n partial: {},\n previous,\n current,\n };\n\n this.emit('configChange', change);\n }\n\n /**\n * 订阅指定配置的变更。\n * @param definition 配置定义\n * @param listener 配置变更回调\n * @returns 取消订阅函数\n */\n onChange<D extends AnyConfigDefinition> (\n definition: D,\n listener: (change: ConfigChange<ConfigValue<D>>) => void,\n ): () => void {\n this.assertDefinition(definition);\n /** @param change 任意配置的变更事件。 */\n const handler = (change: AnyConfigChange) => {\n if (change.id === definition.id) {\n listener({\n partial: change.partial,\n previous: change.previous,\n current: change.current,\n } as ConfigChange<ConfigValue<D>>);\n }\n };\n\n return this.on('configChange', handler);\n }\n\n /**\n * 注册配置定义并校验标识冲突。\n * @param definition 配置定义\n */\n private assertDefinition (definition: AnyConfigDefinition): void {\n const existing = this.definitions.get(definition.id);\n\n if (existing && existing !== definition) {\n throw new Error(`[ConfigManager] Duplicate config id \"${definition.id}\".`);\n }\n this.definitions.set(definition.id, definition);\n }\n}\n","import type { Gizmo } from './gizmo';\nimport type { HandGizmo } from './gizmos/hand-gizmo';\nimport type { IconGizmo } from './gizmos/icon-gizmo';\nimport type { ItemCreateGizmo } from './gizmos/item-create-gizmo';\nimport type { LoadingGizmo } from './gizmos/loading-gizmo';\nimport type { MaskGizmo } from './gizmos/mask-gizmo';\nimport type { ImageCutGizmo } from './gizmos/image-cut-gizmo';\nimport type { ImageExpandGizmo } from './gizmos/image-expand-gizmo';\nimport type { ViewportOverlayGizmo } from './gizmos/viewport-overlay-gizmo';\nimport type { SpriteTextEditGizmo } from './gizmos/sprite-text-edit-gizmo';\nimport type { TextGizmo } from './gizmos/text-gizmo';\nimport type { ResizeSelectionGizmo } from './gizmos/resize-selection-gizmo';\nimport type { ChangeSelectionGizmo } from './gizmos/change-selection-gizmo';\nimport type { MoveSelectionGizmo } from './gizmos/move-selection-gizmo';\nimport type { BoxSelectionGizmo } from './gizmos/box-selection-gizmo';\nimport type { ClickDragMultiplexGizmo } from './gizmos/click-drag-multiplex-gizmo';\nimport { ConfigManager } from './configs/config-manager';\nimport type { LeaveTextEditGizmo } from './gizmos/leave-text-edit-gizmo';\nimport type { EnterEditModeGizmo } from './gizmos/enter-edit-mode-gizmo';\nimport type { LeaveEffectsEditGizmo } from './gizmos/leave-effects-edit-gizmo';\nimport type { CornerRotationGizmo } from './gizmos/corner-rotation-gizmo';\n\n/** 当前交互图中可按类型查询的内置 Gizmo 映射。 */\nexport type GizmoTypeMap = {\n /** 选区切换 Gizmo。 */\n 'change-selection': ChangeSelectionGizmo,\n /** 选区移动 Gizmo。 */\n 'move-selection': MoveSelectionGizmo,\n /** 框选 Gizmo。 */\n 'box-selection': BoxSelectionGizmo,\n /** 点击与拖拽仲裁 Gizmo。 */\n 'click-drag-multiplex': ClickDragMultiplexGizmo,\n /** 角点旋转 Gizmo。 */\n 'corner-rotation': CornerRotationGizmo,\n /** 视口平移 Gizmo。 */\n hand: HandGizmo,\n /** 媒体图标 Gizmo。 */\n icon: IconGizmo,\n /** 元素创建 Gizmo。 */\n 'item-create': ItemCreateGizmo,\n /** 加载状态 Gizmo。 */\n loading: LoadingGizmo,\n /** 蒙版编辑 Gizmo。 */\n mask: MaskGizmo,\n /** 图片裁切 Gizmo。 */\n 'image-cut': ImageCutGizmo,\n /** 图片扩边 Gizmo。 */\n 'image-expand': ImageExpandGizmo,\n /** 视口覆盖层 Gizmo。 */\n 'viewport-overlay': ViewportOverlayGizmo,\n /** 精准文字编辑 Gizmo。 */\n 'sprite-text-edit': SpriteTextEditGizmo,\n /** 文本编辑 Gizmo。 */\n text: TextGizmo,\n /** 选区缩放 Gizmo。 */\n 'resize-selection': ResizeSelectionGizmo,\n /** 文本编辑退出 Gizmo。 */\n 'leave-text-edit': LeaveTextEditGizmo,\n /** 子编辑模式进入 Gizmo。 */\n 'enter-edit-mode': EnterEditModeGizmo,\n /** 动效编辑退出 Gizmo。 */\n 'leave-effects-edit': LeaveEffectsEditGizmo,\n};\n\n/** Gizmo 错误上报阶段。 */\nexport type GizmoErrorPhase =\n | 'gizmo-init'\n | 'gizmo-actionstart'\n | 'gizmo-actionupdate'\n | 'gizmo-actioncommit'\n | 'gizmo-key'\n | 'gizmo-draw';\n\n/**\n * Gizmo 错误处理函数。\n * @param error 原始错误\n * @param phase 错误阶段\n * @param gizmoType 相关 Gizmo 类型\n */\nexport type GizmoDispatchErrorHandler = (\n error: unknown,\n phase: GizmoErrorPhase,\n gizmoType?: string,\n) => void;\n\n/** 管理当前交互图中的 Gizmo 实例和配置。 */\nexport class GizmoManager {\n /** Gizmo 配置管理器。 */\n readonly configs = new ConfigManager();\n\n private _activeGizmos: Gizmo[] = [];\n\n /** 当前交互图的顶层 Gizmo。 */\n get activeGizmos (): Gizmo[] {\n return this._activeGizmos;\n }\n\n /**\n * 替换当前交互图的顶层 Gizmo。\n * @param gizmos 新的有序 Gizmo 列表\n */\n set activeGizmos (gizmos: Gizmo[]) {\n this._activeGizmos = [...gizmos];\n }\n\n /**\n * 按类型获取首个活动 Gizmo。\n * @param type Gizmo 类型\n * @returns 匹配的 Gizmo;不存在时返回 undefined\n */\n get<K extends keyof GizmoTypeMap> (type: K): GizmoTypeMap[K] | undefined;\n get (type: string): Gizmo | undefined;\n get (type: string): Gizmo | undefined {\n return this.findGizmosByType(type)[0];\n }\n\n /** 按宿主声明顺序执行当前图所有实例的每帧更新。 */\n onUpdate (): void {\n for (const gizmo of this._activeGizmos) {\n gizmo.onUpdate();\n }\n }\n\n /** 销毁当前交互图。 */\n dispose (): void {\n for (const gizmo of this._activeGizmos) {\n gizmo.dispose();\n }\n this._activeGizmos = [];\n }\n\n /**\n * 查找指定类型的全部活动 Gizmo。\n * @param type Gizmo 类型\n * @returns 匹配的 Gizmo 列表\n */\n private findGizmosByType (type: string): Gizmo[] {\n return this.getAllManagedGizmos()\n .filter(gizmo => gizmo.type === type);\n }\n\n /** 获取去重后的全部受管 Gizmo。 */\n private getAllManagedGizmos (): Gizmo[] {\n return Array.from(new Set([\n ...this._activeGizmos,\n ...this.getMultiplexCandidates(),\n ]));\n }\n\n /** 获取点击与拖拽仲裁器托管的全部候选。 */\n private getMultiplexCandidates (): Gizmo[] {\n const multiplex = this._activeGizmos.find(gizmo => gizmo.type === 'click-drag-multiplex') as ClickDragMultiplexGizmo;\n\n if (!multiplex) {\n return [];\n }\n const auxiliary = multiplex.auxiliaryBehavior();\n\n return Array.from(new Set([\n ...multiplex.clickCandidates(),\n ...multiplex.dragCandidates(),\n ...(auxiliary ? [auxiliary] : []),\n ]));\n }\n}\n","import { EventEmitter } from '@galacean/effects';\nimport { type Box2 } from '@galacean/effects-math/es/extension/index';\nimport { Vector2 } from '../math';\n\n/** 单个元素的加载提示配置。 */\nexport type LoadingItemOptions = {\n /** 加载提示文本。 */\n text?: string,\n /** 相对目标元素实时包围盒左上角的视图像素偏移;未设置时文案在 loading 区域内居中。 */\n position?: Vector2,\n /** 打开 loading 时是否移除目标元素的选中状态。 */\n clearSelected?: boolean,\n /** 自定义加载区域。 */\n loadingBox?: Box2,\n};\n\n/** 单个元素的当前加载状态。 */\nexport interface LoadingItemState {\n /** 加载提示配置。 */\n tip: LoadingItemOptions,\n /** 自定义加载区域。 */\n loadingBox?: Box2,\n}\n\n/** 加载状态集合的一次变更。 */\nexport type LoadingManagerChange = {\n /** 变更后的全部加载元素 ID。 */\n ids: string[],\n /** 新增加载元素 ID。 */\n addedIds: string[],\n /** 已删除加载元素 ID。 */\n removedIds: string[],\n /** 已更新加载元素 ID。 */\n updatedIds: string[],\n};\n\n/** 加载状态管理器事件参数。 */\ntype LoadingManagerEvents = {\n /** 加载集合变更事件。 */\n change: [LoadingManagerChange],\n /** 请求移除选中元素事件。 */\n removeselecteditems: [string[]],\n};\n\n/** 管理元素加载状态并向 LoadingGizmo 提供稳定数据。 */\nexport class LoadingManager extends EventEmitter<LoadingManagerEvents> {\n private readonly items = new Map<string, LoadingItemState>();\n\n /** 当前加载元素 ID。 */\n get ids (): string[] {\n return Array.from(this.items.keys());\n }\n\n /**\n * 获取元素加载状态。\n * @param id 元素 ID\n * @returns 加载状态;不存在时返回 undefined\n */\n get (id: string): LoadingItemState | undefined {\n return this.items.get(id);\n }\n\n /**\n * 添加元素加载状态。\n * @param id 元素 ID\n * @param options 加载提示配置\n */\n add (id: string, options?: LoadingItemOptions): void {\n if (this.items.has(id)) {\n return;\n }\n this.items.set(id, {\n tip: {\n text: options?.text ?? '',\n position: options?.position ? new Vector2(options.position.x, options.position.y) : undefined,\n },\n loadingBox: options?.loadingBox?.clone(),\n });\n this.emitChange({ addedIds: [id], removedIds: [], updatedIds: [] });\n if (options?.clearSelected) {\n this.emit('removeselecteditems', [id]);\n }\n }\n\n /**\n * 删除元素加载状态。\n * @param id 元素 ID\n */\n delete (id: string): void {\n if (!this.items.delete(id)) {\n return;\n }\n this.emitChange({ addedIds: [], removedIds: [id], updatedIds: [] });\n }\n\n /**\n * 更新元素加载提示。\n * @param id 元素 ID\n * @param options 增量加载提示配置\n */\n update (id: string, options: LoadingItemOptions): void {\n const item = this.items.get(id);\n\n if (!item) {\n console.warn(`Loading item ${id} not found.`);\n\n return;\n }\n if (options.text !== undefined) {\n item.tip.text = options.text;\n }\n if (options.position !== undefined) {\n item.tip.position = new Vector2(options.position.x, options.position.y);\n }\n this.emitChange({ addedIds: [], removedIds: [], updatedIds: [id] });\n }\n\n /**\n * 发出包含完整 ID 列表的加载状态变更。\n * @param change 增量变更\n */\n private emitChange (change: Omit<LoadingManagerChange, 'ids'>): void {\n this.emit('change', { ids: this.ids, ...change });\n }\n}\n","import type { AutoLayoutConfig } from './types';\nimport type { Box2 } from '@galacean/effects-math/es/extension/index';\n\n/** 参与画板自动布局的元素。 */\nexport type FrameLayoutItem = {\n /** 元素 ID。 */\n id: string,\n /** 元素包围盒。 */\n box: Box2,\n /** 已指定的行号。 */\n row?: number,\n /** 已指定的列号。 */\n column?: number,\n};\n\n/** 自动布局后的元素位置。 */\nexport type FrameLayoutResultItem = {\n /** 元素 ID。 */\n id: string,\n /** 相对画板左上角的中心位置。 */\n position: [number, number],\n /** 行号。 */\n row: number,\n /** 列号。 */\n column: number,\n};\n\n/** 画板自动布局选项。 */\nexport type FrameAutoLayoutOptions = {\n /** 画板内边距。 */\n padding?: number,\n /** 元素间距。 */\n gap?: number,\n /** 行宽和行数约束。 */\n config?: AutoLayoutConfig,\n};\n\n/** 画板自动布局结果。 */\nexport type FrameAutoLayoutResult = {\n /** 布局后的元素。 */\n items: FrameLayoutResultItem[],\n /** 布局所需的画板尺寸。 */\n size: [number, number],\n};\n\n/** 带内部坐标的布局结果。 */\ntype PositionedFrameLayoutItem = FrameLayoutResultItem & {\n /** 元素中心 X 坐标。 */\n x: number,\n /** 元素中心 Y 坐标。 */\n y: number,\n};\n\n/**\n * 按行号对元素分组。\n * @param items 待分组元素\n * @returns 行号到元素列表的映射\n */\nfunction groupItemsByRow<T extends { row?: number }> (items: T[]): Map<number, T[]> {\n const groups = new Map<number, T[]>();\n\n for (const item of items) {\n const row = item.row ?? 0;\n const group = groups.get(row);\n\n if (group) {\n group.push(item);\n } else {\n groups.set(row, [item]);\n }\n }\n\n return groups;\n}\n\n/**\n * 按货架规则排列未指定列位置的元素。\n * @param items 待布局元素\n * @param padding 画板内边距\n * @param gap 元素间距\n * @param config 行宽和行数约束\n * @returns 带内部坐标的布局结果\n */\nfunction calculateShelfLayout (\n items: FrameLayoutItem[],\n padding: number,\n gap: number,\n config?: AutoLayoutConfig,\n): { items: PositionedFrameLayoutItem[], size: [number, number] } {\n // 1. 按行号组织元素并初始化布局边界。\n const placedItems: PositionedFrameLayoutItem[] = [];\n const rowGroups = groupItemsByRow(items);\n const sortedRows = Array.from(rowGroups.keys()).sort((a, b) => a - b);\n let currentY = padding;\n let maxX = padding;\n\n // 2. 逐行排列元素,并在达到宽度约束时换行。\n for (const row of sortedRows) {\n const rowItems = rowGroups.get(row) ?? [];\n let currentX = padding;\n let currentShelfHeight = 0;\n let column = 0;\n let currentRowCount = 1;\n\n for (const item of rowItems) {\n const { x: width, y: height } = item.box.getSize();\n const wouldExceedMaxWidth = config?.maxRowWidth !== undefined\n && currentX + width + padding > config.maxRowWidth;\n let needNewShelf = wouldExceedMaxWidth && currentX > padding;\n\n if (needNewShelf && config?.maxRowCount !== undefined && currentRowCount >= config.maxRowCount) {\n needNewShelf = false;\n }\n if (needNewShelf) {\n currentY += currentShelfHeight + gap;\n currentX = padding;\n currentShelfHeight = height;\n column = 0;\n currentRowCount++;\n } else {\n currentShelfHeight = Math.max(currentShelfHeight, height);\n }\n placedItems.push({\n id: item.id,\n position: [currentX + width / 2, currentY + height / 2],\n x: currentX + width / 2,\n y: currentY + height / 2,\n row,\n column,\n });\n maxX = Math.max(maxX, currentX + width + padding);\n currentX += width + gap;\n column++;\n }\n if (rowItems.length > 0) {\n currentY += currentShelfHeight + gap;\n }\n }\n\n // 3. 根据已占用范围计算画板尺寸。\n return {\n items: placedItems,\n size: [Math.max(maxX, padding * 2), Math.max(currentY - gap + padding, padding * 2)],\n };\n}\n\n/**\n * 保留已指定列,并为其余元素分配空闲列。\n * @param items 待布局元素\n * @param padding 画板内边距\n * @param gap 元素间距\n * @returns 带内部坐标的布局结果\n */\nfunction calculateMixedLayout (\n items: FrameLayoutItem[],\n padding: number,\n gap: number,\n): { items: PositionedFrameLayoutItem[], size: [number, number] } {\n // 1. 按行号组织元素并初始化布局边界。\n const placedItems: PositionedFrameLayoutItem[] = [];\n const rowGroups = groupItemsByRow(items);\n const sortedRows = Array.from(rowGroups.keys()).sort((a, b) => a - b);\n let currentY = padding;\n let maxX = padding;\n\n // 2. 逐行保留显式列号,并将无列号元素填入空位。\n for (const row of sortedRows) {\n const rowItems = rowGroups.get(row) ?? [];\n const withColumn = rowItems.filter(item => item.column !== undefined);\n const withoutColumn = rowItems.filter(item => item.column === undefined);\n const rowHeight = Math.max(...rowItems.map(item => item.box.getSize().y), 0);\n const assignments = new Map<number, FrameLayoutItem>();\n\n for (const item of [...withColumn].sort((a, b) => (a.column ?? 0) - (b.column ?? 0))) {\n let column = item.column ?? 0;\n\n while (assignments.has(column)) {\n column++;\n }\n assignments.set(column, item);\n }\n let nextColumn = 0;\n\n for (const item of withoutColumn) {\n while (assignments.has(nextColumn)) {\n nextColumn++;\n }\n assignments.set(nextColumn++, item);\n }\n\n let currentX = padding;\n\n for (const column of Array.from(assignments.keys()).sort((a, b) => a - b)) {\n const item = assignments.get(column)!;\n const { x: width, y: height } = item.box.getSize();\n\n placedItems.push({\n id: item.id,\n position: [currentX + width / 2, currentY + height / 2],\n x: currentX + width / 2,\n y: currentY + height / 2,\n row,\n column,\n });\n maxX = Math.max(maxX, currentX + width + padding);\n currentX += width + gap;\n }\n currentY += rowHeight + gap;\n }\n\n // 3. 根据已占用范围计算画板尺寸。\n return {\n items: placedItems,\n size: [Math.max(maxX, padding * 2), Math.max(currentY - gap + padding, padding * 2)],\n };\n}\n\n/**\n * 计算画板内元素的自动布局和画板尺寸。\n * @param items 待布局元素\n * @param options 布局间距与行约束\n * @returns 自动布局结果\n */\nexport function computeFrameAutoLayout (\n items: FrameLayoutItem[],\n options: FrameAutoLayoutOptions = {},\n): FrameAutoLayoutResult {\n const padding = options.padding ?? 20;\n const gap = options.gap ?? 5;\n\n if (items.length === 0) {\n return { items: [], size: [padding * 2, padding * 2] };\n }\n\n const layout = items.some(item => item.row !== undefined)\n ? calculateMixedLayout(items, padding, gap)\n : calculateShelfLayout(items, padding, gap, options.config);\n\n return {\n items: layout.items.map(({ id, position, row, column }) => ({ id, position, row, column })),\n size: layout.size,\n };\n}\n","import type { Engine } from '@galacean/effects';\nimport { Box2 } from '@galacean/effects-math/es/extension/index';\nimport { type Vector2 } from '../math';\nimport { FrameLayoutMode, type AutoLayoutConfig, type FrameInfo, type LayoutInfo } from './types';\nimport { GizmoViewportUtils } from '../viewport/viewport-utils';\nimport { getItemViewBox } from '../items/item-geometry';\nimport { getPlayerItemById } from '../items/item-hierarchy';\nimport { isFramePlayerItem } from '../items/item-predicates';\nimport { computeFrameAutoLayout, type FrameAutoLayoutOptions, type FrameAutoLayoutResult, type FrameLayoutItem } from './frame-auto-layout';\n\n/** 画板运行时布局数据。 */\nexport type FrameRecord = {\n /** 画板元素实例 ID。 */\n id: string,\n /** 布局模式。 */\n layoutMode: FrameLayoutMode,\n /** 子元素实例 ID。 */\n children: string[],\n /** 自动布局约束。 */\n autoLayoutConfig?: AutoLayoutConfig,\n /** 子元素布局信息。 */\n layoutInfos: Record<string, LayoutInfo>,\n};\n\n/** 新建或更新画板数据的输入。 */\nexport type FrameRecordInput = {\n /** 画板元素实例 ID。 */\n id: string,\n /** 布局模式。 */\n layoutMode?: FrameLayoutMode,\n /** 子元素实例 ID。 */\n children?: readonly string[],\n /** 自动布局约束。 */\n autoLayoutConfig?: AutoLayoutConfig,\n /** 子元素布局信息。 */\n layoutInfos?: Readonly<Record<string, LayoutInfo>>,\n};\n\n/**\n * 复制单个布局信息。\n * @param info 原布局信息\n * @returns 布局信息副本\n */\nfunction cloneLayoutInfo (info: LayoutInfo): LayoutInfo {\n return {\n row: info.row,\n column: info.column,\n position: info.position ? [...info.position] : undefined,\n };\n}\n\n/**\n * 复制子元素布局信息表。\n * @param infos 原布局信息表\n * @returns 布局信息表副本\n */\nfunction cloneLayoutInfos (infos: Readonly<Record<string, LayoutInfo>> | undefined): Record<string, LayoutInfo> {\n const result: Record<string, LayoutInfo> = {};\n const source = infos ?? {};\n\n for (const id of Object.keys(source)) {\n result[id] = cloneLayoutInfo(source[id]);\n }\n\n return result;\n}\n\n/**\n * 将画板输入归一化为完整运行时数据。\n * @param record 画板输入\n * @returns 完整画板数据副本\n */\nfunction cloneRecord (record: FrameRecordInput): FrameRecord {\n return {\n id: record.id,\n layoutMode: record.layoutMode ?? FrameLayoutMode.FREE,\n children: [...record.children ?? []],\n autoLayoutConfig: record.autoLayoutConfig ? { ...record.autoLayoutConfig } : undefined,\n layoutInfos: cloneLayoutInfos(record.layoutInfos),\n };\n}\n\n/** 管理画板布局数据及其视图投影。 */\nexport class FrameManager {\n private readonly records = new Map<string, FrameRecord>();\n private readonly boxes = new Map<string, Box2>();\n private readonly engine: Engine;\n\n /**\n * @param engine 用于更新画板投影的 Effects 引擎\n */\n constructor (engine: Engine) {\n this.engine = engine;\n }\n\n /**\n * 新建或覆盖画板数据。\n * @param input 画板数据\n * @returns 保存后的画板记录\n */\n upsertFrame (input: FrameRecordInput): FrameRecord {\n const record = cloneRecord(input);\n\n this.records.set(record.id, record);\n\n return record;\n }\n\n /**\n * 获取画板记录,不存在时创建。\n * @param input 画板数据\n * @returns 已存在或新建的画板记录\n */\n ensureFrame (input: FrameRecordInput): FrameRecord {\n return this.records.get(input.id) ?? this.upsertFrame(input);\n }\n\n /**\n * 删除画板记录和投影。\n * @param id 画板 ID\n * @returns 是否删除了画板记录\n */\n deleteFrame (id: string): boolean {\n this.boxes.delete(id);\n\n return this.records.delete(id);\n }\n\n /** 清空全部画板数据和投影。 */\n clear (): void {\n this.records.clear();\n this.boxes.clear();\n }\n\n /**\n * 使用输入列表重建画板数据。\n * @param records 画板数据列表\n */\n hydrate (records: readonly FrameRecordInput[]): void {\n this.clear();\n for (const record of records) {\n this.upsertFrame(record);\n }\n }\n\n /** @returns 全部画板数据的深拷贝快照。 */\n snapshot (): FrameRecord[] {\n return Array.from(this.records.values(), cloneRecord);\n }\n\n /**\n * 获取指定画板数据。\n * @param id 画板 ID\n * @returns 画板数据;不存在时返回 undefined\n */\n getFrame (id: string): Readonly<FrameRecord> | undefined {\n return this.records.get(id);\n }\n\n /** @returns 全部画板数据。 */\n getFrames (): readonly Readonly<FrameRecord>[] {\n return Array.from(this.records.values());\n }\n\n /**\n * 设置画板布局模式。\n * @param id 画板 ID\n * @param layoutMode 布局模式\n */\n setLayoutMode (id: string, layoutMode: FrameLayoutMode): void {\n const record = this.records.get(id);\n\n if (record) {\n record.layoutMode = layoutMode;\n }\n }\n\n /**\n * 替换画板子元素列表。\n * @param id 画板 ID\n * @param children 子元素 ID\n */\n setChildren (id: string, children: readonly string[]): void {\n const record = this.records.get(id);\n\n if (record) {\n record.children = [...children];\n }\n }\n\n /**\n * 向画板添加子元素。\n * @param id 画板 ID\n * @param childId 子元素 ID\n * @returns 是否添加成功\n */\n addChild (id: string, childId: string): boolean {\n const record = this.records.get(id);\n\n if (!record || record.children.includes(childId)) {\n return false;\n }\n record.children.push(childId);\n\n return true;\n }\n\n /**\n * 从画板移除子元素及其布局信息。\n * @param id 画板 ID\n * @param childId 子元素 ID\n * @returns 是否移除成功\n */\n removeChild (id: string, childId: string): boolean {\n const record = this.records.get(id);\n\n if (!record) {\n return false;\n }\n const index = record.children.indexOf(childId);\n\n if (index < 0) {\n return false;\n }\n record.children.splice(index, 1);\n const layoutInfos = { ...record.layoutInfos };\n\n delete layoutInfos[childId];\n record.layoutInfos = layoutInfos;\n\n return true;\n }\n\n /**\n * 替换画板的全部子元素布局信息。\n * @param id 画板 ID\n * @param layoutInfos 子元素布局信息\n */\n setLayoutInfos (id: string, layoutInfos: Readonly<Record<string, LayoutInfo>> | undefined): void {\n const record = this.records.get(id);\n\n if (record) {\n record.layoutInfos = cloneLayoutInfos(layoutInfos);\n }\n }\n\n /**\n * 设置单个子元素的布局信息。\n * @param id 画板 ID\n * @param childId 子元素 ID\n * @param layoutInfo 布局信息\n */\n setChildLayoutInfo (id: string, childId: string, layoutInfo: LayoutInfo): void {\n const record = this.records.get(id);\n\n if (record) {\n record.layoutInfos[childId] = cloneLayoutInfo(layoutInfo);\n }\n }\n\n /**\n * 设置画板自动布局约束。\n * @param id 画板 ID\n * @param config 自动布局约束\n */\n setAutoLayoutConfig (id: string, config: AutoLayoutConfig | undefined): void {\n const record = this.records.get(id);\n\n if (record) {\n record.autoLayoutConfig = config ? { ...config } : undefined;\n }\n }\n\n /**\n * 使用画板当前布局信息计算自动布局。\n * @param frameId 画板 ID\n * @param items 待布局元素\n * @param options 内边距和元素间距\n * @returns 自动布局结果;画板不存在时返回 undefined\n */\n computeAutoLayout (\n frameId: string,\n items: readonly Pick<FrameLayoutItem, 'id' | 'box'>[],\n options: Omit<FrameAutoLayoutOptions, 'config'> = {},\n ): FrameAutoLayoutResult | undefined {\n const record = this.records.get(frameId);\n\n if (!record) {\n return undefined;\n }\n\n return computeFrameAutoLayout(items.map(item => ({\n ...item,\n row: record.layoutInfos[item.id]?.row,\n column: record.layoutInfos[item.id]?.column,\n })), {\n ...options,\n config: record.autoLayoutConfig,\n });\n }\n\n /**\n * 计算元素重排后的完整布局信息。\n * @param frameId 画板 ID\n * @param draggedItemId 被拖拽元素 ID\n * @param fromRow 原行号\n * @param fromColumn 原列号\n * @param toRow 目标行号\n * @param toColumn 目标列号\n * @returns 重排后的布局信息;元素不属于画板时返回 undefined\n */\n computeLayoutInfosAfterReorder (\n frameId: string,\n draggedItemId: string,\n fromRow: number,\n fromColumn: number,\n toRow: number,\n toColumn: number,\n ): Record<string, LayoutInfo> | undefined {\n // 1. 校验拖拽元素并复制当前布局信息。\n const record = this.records.get(frameId);\n\n if (!record?.children.includes(draggedItemId)) {\n return undefined;\n }\n\n const result = cloneLayoutInfos(record.layoutInfos);\n\n // 2. 根据同行或跨行移动调整受影响元素的列号。\n if (fromRow !== toRow || fromColumn !== toColumn) {\n if (fromRow === toRow) {\n for (const [id, info] of Object.entries(result)) {\n if (id === draggedItemId || info.row !== fromRow) {\n continue;\n }\n if (fromColumn < toColumn && info.column > fromColumn && info.column <= toColumn) {\n info.column--;\n } else if (fromColumn > toColumn && info.column >= toColumn && info.column < fromColumn) {\n info.column++;\n }\n }\n } else {\n for (const [id, info] of Object.entries(result)) {\n if (id !== draggedItemId && info.row === fromRow && info.column > fromColumn) {\n info.column--;\n }\n }\n const targetItems = Object.entries(result)\n .filter(([id, info]) => id !== draggedItemId && info.row === toRow && info.column >= toColumn)\n .sort((a, b) => b[1].column - a[1].column);\n\n for (const [, info] of targetItems) {\n info.column++;\n }\n }\n }\n\n // 3. 写入拖拽元素的目标位置。\n result[draggedItemId] = {\n ...result[draggedItemId],\n row: toRow,\n column: toColumn,\n };\n\n return result;\n }\n\n /** 在每帧更新时同步画板投影。 */\n onUpdate (): void {\n this.updateViewBoxes();\n }\n\n /** 更新全部画板的视图包围盒。 */\n updateViewBoxes (): void {\n const engine = this.engine;\n const containerSize = GizmoViewportUtils.getContainerSize(engine.canvas.parentElement!);\n\n for (const record of this.records.values()) {\n const item = getPlayerItemById(engine.sceneServer.compositions[0], record.id);\n\n this.boxes.set(\n record.id,\n item && isFramePlayerItem(item)\n ? getItemViewBox(item, containerSize)\n : new Box2(),\n );\n }\n for (const id of Array.from(this.boxes.keys())) {\n if (!this.records.has(id)) {\n this.boxes.delete(id);\n }\n }\n }\n\n /** @returns 带当前视图包围盒的全部画板信息。 */\n getViewInfos (): FrameInfo[] {\n return Array.from(this.records.values(), record => this.toViewInfo(record));\n }\n\n /**\n * 获取指定画板的视图信息。\n * @param id 画板 ID\n * @returns 画板视图信息;不存在时返回 undefined\n */\n getViewInfo (id: string): FrameInfo | undefined {\n const record = this.records.get(id);\n\n return record ? this.toViewInfo(record) : undefined;\n }\n\n /**\n * 查找元素所属的画板。\n * @param itemId 元素 ID\n * @returns 父画板记录;不存在时返回 undefined\n */\n getParentFrame (itemId: string): Readonly<FrameRecord> | undefined {\n return Array.from(this.records.values()).find(record => record.children.includes(itemId));\n }\n\n /**\n * 查找包含指定视图坐标的画板。\n * @param point 视图坐标\n * @returns 命中的画板视图信息\n */\n findFrameAt (point: Vector2): FrameInfo | undefined {\n return this.getViewInfos().find(info => info.box.containsPoint(point));\n }\n\n /**\n * 将画板记录转换为视图信息。\n * @param record 画板记录\n * @returns 画板视图信息\n */\n private toViewInfo (record: FrameRecord): FrameInfo {\n return {\n id: record.id,\n box: this.boxes.get(record.id) ?? new Box2(),\n layoutMode: record.layoutMode,\n children: [...record.children],\n layoutInfos: cloneLayoutInfos(record.layoutInfos),\n };\n }\n}\n","import { EventEmitter, type Engine, type Composition, type InputEventMouseButton, type Region, spec, type VFXItem, TextComponent, SpriteComponent, FrameComponent, addItem } from '@galacean/effects';\nimport { VideoComponent } from '@galacean/effects-plugin-multimedia';\nimport { RichTextComponent } from '@galacean/effects-plugin-rich-text';\nimport { Box2 } from '@galacean/effects-math/es/extension/index';\nimport { Ray, Vector2, setBoxFromPoints, transformedBoxContainsPoint } from '../math';\nimport { GizmoViewportUtils } from '../viewport/viewport-utils';\nimport {\n getPlayerItemById,\n getEffectsPlayerItemOwner,\n getItemViewBox,\n getItemViewTransform,\n getItemChildren,\n isGroupPlayerItem,\n isFramePlayerItem,\n isPlayerItemVisible,\n} from '../items';\nimport { viewPositionToNDC } from '../viewport';\n\n/** Hover state shared by input observation and the Tool UI renderer. */\nexport type HoveringResults = {\n /** Externally observable hover target. */\n itemId?: string,\n /** Target currently submitted to the Tool UI hover renderer. */\n overlayItemId?: string,\n};\n\n/** 点选或框选的原始命中结果。 */\ntype HitTestResult = {\n /** 命中检测射线。 */\n ray: Ray,\n /** 引擎返回的命中区域。 */\n regions: Region[],\n};\n\n/**\n * 画板元素左上角点击交互区域尺寸\n */\nconst FRAME_INTERACTION_WIDTH = 40;\nconst FRAME_INTERACTION_HEIGHT = 20;\n\n/** Selection 事件参数。 */\nexport type SelectionEvents = {\n /** 选中集变更。 */\n 'selectionchange': [{\n /** 变更前的选中元素 ID。 */\n oldSelectedIds: string[],\n /** 变更后的选中元素 ID。 */\n newSelectedIds: string[],\n }],\n /** 预选态变更。 */\n 'preselectchange': [{\n /** 当前预选元素 ID。 */\n preSelectedId: string | undefined,\n }],\n /** 组内交互或动效内部查看焦点变更。 */\n 'focuschange': [],\n};\n\n/** 一次选区行为派发使用的稳定命中快照。 */\nexport type SelectionHitSnapshot = {\n /** 命中检测坐标。 */\n point: Vector2,\n /** 按层级过滤后的可选元素 ID。 */\n selectableIds: string[],\n /** 最上层可选元素 ID。 */\n topmostId?: string,\n /** 当前选中范围内的命中元素 ID。 */\n selectedScopeHitIds: string[],\n /** 跳过已选父组后,可继续下钻一层的元素 ID。 */\n drillTargetId?: string,\n};\n\n/** 管理选中状态、预选状态和场景命中查询。 */\nexport class Selection extends EventEmitter<SelectionEvents> {\n /** 本次交互开始前的选中快照。 */\n interactionStartSelectedIds: string[] = [];\n /** 命中检测需要排除的元素 ID。 */\n ignoreIds: string[] = ['sceneRoot'];\n /** 命中检测需要排除的元素名称。 */\n ignoreNames: string[] = [];\n\n /** 当前选中元素 ID。 */\n private _selectedIds: string[] = [];\n /** 当前允许穿透选择的动效容器 ID。 */\n private _effectsEditItemId: string | undefined;\n /** 当前组内交互的焦点容器 ID。 */\n private _focusedGroupId: string | undefined;\n private readonly engine: Engine;\n private readonly hoveringResults: HoveringResults;\n\n /**\n * @param engine Effects 引擎\n * @param hoveringResults 共享的预选状态\n */\n constructor (engine: Engine, hoveringResults: HoveringResults = {}) {\n super();\n this.engine = engine;\n this.hoveringResults = hoveringResults;\n }\n\n /** 选中元素 ID 的副本。 */\n get selectedIds (): string[] {\n return [...this._selectedIds];\n }\n\n /**\n * 替换选中元素并发出变更事件。\n * @param ids 新的选中元素 ID\n */\n set selectedIds (ids: string[]) {\n const old = [...this._selectedIds];\n\n this._selectedIds = this.normalizeHierarchySelection(ids);\n this.updateFocusedGroupFromSelection(this._selectedIds);\n this.emit('selectionchange', { oldSelectedIds: old, newSelectedIds: [...this._selectedIds] });\n }\n\n /** 对外可观察的 hover 命中结果。 */\n get preSelectedId (): string | undefined {\n return this.hoveringResults.itemId;\n }\n\n /** 当前 Tool UI 要绘制的 hover 目标。 */\n get hoverOverlayItemId (): string | undefined {\n return this.hoveringResults.overlayItemId;\n }\n\n /** @returns 当前正在内部编辑的动效容器 ID。 */\n getEffectsEditItemId (): string | undefined {\n return this._effectsEditItemId;\n }\n\n /** @returns 当前组内交互的焦点容器 ID。 */\n getFocusedGroupId (): string | undefined {\n return this._focusedGroupId;\n }\n\n /**\n * 设置当前组内交互的焦点容器。\n * @param groupId Group 实例 ID;传空值表示回到场景根层级\n */\n setFocusedGroup (groupId?: string | null): void {\n if (!groupId) {\n const changed = this._focusedGroupId !== undefined;\n\n this._focusedGroupId = undefined;\n if (changed) {\n this.emit('focuschange');\n }\n\n return;\n }\n\n const group = getPlayerItemById(this.engine.sceneServer.compositions[0], groupId);\n\n if (!group || !this.isSelectableGroup(group)) {\n throw new Error(`Selection.setFocusedGroup: Group with id ${groupId} does not exist`);\n }\n if (this._focusedGroupId !== groupId) {\n this._focusedGroupId = groupId;\n this.emit('focuschange');\n }\n }\n\n /**\n * 放开指定动效容器的子树选择边界。\n * @param effectsItemId 动效容器 ID\n */\n enterEffectsEditScope (effectsItemId: string): void {\n const changed = this._effectsEditItemId !== effectsItemId;\n\n this._effectsEditItemId = effectsItemId;\n this.setFocusedGroup();\n if (changed) {\n this.emit('focuschange');\n }\n }\n\n /** 关闭动效子树选择边界。 */\n leaveEffectsEditScope (): void {\n const changed = this._effectsEditItemId !== undefined;\n\n this._effectsEditItemId = undefined;\n this.setFocusedGroup();\n if (changed) {\n this.emit('focuschange');\n }\n }\n\n /** @returns 选中元素 ID 的内部只读引用。 */\n getSelectedIds (): string[] {\n return this._selectedIds;\n }\n\n /** @returns 当前选中 ID 对应的有效 VFXItem。 */\n getSelectedPlayerItems (): VFXItem[] {\n return this._selectedIds\n .map(id => getPlayerItemById(this.engine.sceneServer.compositions[0], id))\n .filter((item): item is VFXItem => !!item);\n }\n\n /**\n * 判断元素是否已选中。\n * @param id 元素 ID\n * @returns 是否已选中\n */\n isItemSelected (id: string): boolean {\n return this._selectedIds.includes(id);\n }\n\n /**\n * 追加尚未选中的元素并发出变更事件。\n * @param ids 待追加元素 ID\n */\n addSelectedItems (ids: string[]): void {\n const next = this.normalizeHierarchySelection([...this._selectedIds, ...ids]);\n\n if (this.sameIds(this._selectedIds, next)) {\n return;\n }\n const old = [...this._selectedIds];\n\n this._selectedIds = next;\n this.updateFocusedGroupFromSelection(next);\n this.emit('selectionchange', { oldSelectedIds: old, newSelectedIds: [...this._selectedIds] });\n }\n\n /**\n * 移除选中元素并发出变更事件。\n * @param ids 待移除元素 ID\n */\n removeSelectedItems (ids: string[]): void {\n const old = [...this._selectedIds];\n\n this._selectedIds = this._selectedIds.filter(id => !ids.includes(id));\n if (this._selectedIds.length !== old.length) {\n this.updateFocusedGroupFromSelection(this._selectedIds);\n this.emit('selectionchange', { oldSelectedIds: old, newSelectedIds: [...this._selectedIds] });\n }\n }\n\n /** 清空选中元素并发出变更事件。 */\n clearSelectedItems (): void {\n if (this._selectedIds.length === 0) {\n return;\n }\n const old = [...this._selectedIds];\n\n this._selectedIds = [];\n this.emit('selectionchange', { oldSelectedIds: old, newSelectedIds: [] });\n }\n\n /**\n * 替换选中元素并发出变更事件。\n * @param ids 新的选中元素 ID\n */\n setSelectedItems (ids: string[]): void {\n this.commitSelectedItems(ids);\n }\n\n /**\n * 原子更新选中元素、焦点容器和变更事件。\n * @param ids 新的选中元素 ID\n * @returns 选中集是否发生变化\n */\n commitSelectedItems (ids: string[]): boolean {\n const next = this.normalizeHierarchySelection(ids);\n\n if (this.sameIds(this._selectedIds, next)) {\n return false;\n }\n const old = [...this._selectedIds];\n\n this._selectedIds = next;\n this.updateFocusedGroupFromSelection(next);\n this.emit('selectionchange', {\n oldSelectedIds: old,\n newSelectedIds: [...next],\n });\n\n return true;\n }\n\n /**\n * 将元素加入选中集合并同步焦点容器,不发出事件。\n * @param id 元素 ID\n * @returns 更新后的选中元素 ID\n */\n addSelectedItem (id: string): string[] {\n this._selectedIds = this.normalizeHierarchySelection([...this._selectedIds, id]);\n this.updateFocusedGroupFromSelection(this._selectedIds);\n\n return this._selectedIds;\n }\n\n /** 清空选中集,不发出事件。 */\n clear (): void {\n this._selectedIds = [];\n }\n\n /**\n * 直接替换选中集,不发出事件。\n * @param ids 新的选中元素 ID\n */\n setSelectedIds (ids: string[]): void {\n this._selectedIds = this.normalizeHierarchySelection(ids);\n this.updateFocusedGroupFromSelection(this._selectedIds);\n }\n\n /**\n * 处理双击点选,并允许穿透已选父元素。\n * @param event 鼠标事件\n * @returns 命中的元素 id;无命中返回 undefined\n */\n pickOnDoubleClick (event: InputEventMouseButton): string | undefined {\n this.interactionStartSelectedIds = [...this._selectedIds];\n\n const point = new Vector2(event.position.x, event.position.y);\n const hitIds = this.hitTest(point);\n const regionIds = this.filterItemsByHierarchy(\n hitIds,\n group => !this.isItemSelected(group.getInstanceId()),\n );\n\n if (regionIds.length === 0) {\n return undefined;\n }\n const hitId = regionIds[0];\n\n if (!event.shiftPressed) {\n this._selectedIds = [];\n } else {\n const parent = getPlayerItemById(this.engine.sceneServer.compositions[0], hitId)?.parent;\n\n if (parent) {\n this._selectedIds = this._selectedIds.filter(id => id !== parent.getInstanceId());\n }\n }\n\n this.addSelectedItem(hitId);\n\n return hitId;\n }\n\n /**\n * 处理单击点选,Shift 按键用于切换命中元素的选中状态。\n * @param event 鼠标事件\n * @returns 命中的元素 id;无命中返回 undefined\n */\n pickOnClick (event: InputEventMouseButton): string | undefined {\n this.interactionStartSelectedIds = [...this._selectedIds];\n\n const point = new Vector2(event.position.x, event.position.y);\n const hitIds = this.hitTest(point);\n const regionIds = this.filterSelectedItems(hitIds);\n\n if (regionIds.length === 0) {\n if (!event.shiftPressed) {\n this._selectedIds = [];\n }\n\n return undefined;\n }\n let hitId = regionIds[0];\n\n if (!event.shiftPressed && this.isItemSelected(hitId)) {\n hitId = this.filterItemsByHierarchy(\n hitIds,\n group => !this.isItemSelected(group.getInstanceId()),\n )[0] ?? hitId;\n }\n\n if (event.shiftPressed) {\n if (this.isItemSelected(hitId)) {\n this._selectedIds = this._selectedIds.filter(id => id !== hitId);\n } else {\n this.addSelectedItem(hitId);\n }\n } else {\n this._selectedIds = [];\n this.addSelectedItem(hitId);\n }\n\n return hitId;\n }\n\n /**\n * 获取指定视图坐标下的可交互元素 ID。\n * @param point 视图坐标\n * @returns 按命中优先级排列的元素 ID\n */\n hitTest (point: Vector2): string[] {\n const playerComposition = this.engine.sceneServer.compositions[0];\n\n if (!playerComposition?.items) {\n return [];\n }\n const { x, y } = viewPositionToNDC(point, GizmoViewportUtils.getContainerSize(this.engine.canvas.parentElement!));\n const result: HitTestResult = { ray: new Ray(), regions: [] };\n\n try {\n result.regions = playerComposition.hitTest(x, y, true);\n result.ray = playerComposition.getHitTestRay(x, y);\n } catch (e) {\n console.warn(e);\n }\n // Effects runtime 在隐藏节点切换后的首帧仍可能返回旧命中区域;以播放器节点的可见性为最终交互依据。\n result.regions = result.regions.filter(region => {\n const item = getPlayerItemById(this.engine.sceneServer.compositions[0], region.id);\n\n return isPlayerItemVisible(item);\n });\n this.refreshResultRegions(result);\n const selectedIds = this.reorderHitTestResult(result, playerComposition).filter(id => id !== 'extra-camera' && !this.ignoreIds.includes(id) && !this.isIgnoredNameById(id) && getPlayerItemById(this.engine.sceneServer.compositions[0], id)?.type !== spec.ItemType.composition);\n\n return this.preSelectedFrameOutBound(point, selectedIds);\n }\n\n /**\n * 解析当前指针在焦点容器内的预选目标。\n * @param point 指针视图坐标\n * @returns 预选元素 ID\n */\n resolveHoverTarget (point: Vector2): string | undefined {\n return this.filterSelectedItems(this.hitTest(point))[0];\n }\n\n /**\n * 解析并提交当前指针的预选目标。\n * @param point 指针视图坐标\n */\n commitHoverTarget (point: Vector2): void {\n const itemId = this.resolveHoverTarget(point);\n\n this.setHoverOverlayTarget(itemId);\n this.commitHover(itemId);\n }\n\n /**\n * 设置当前工具的预选绘制目标。\n * @param itemId 元素 ID\n */\n setHoverOverlayTarget (itemId?: string): void {\n this.hoveringResults.overlayItemId = itemId;\n }\n\n /** 清空预选命中和绘制目标。 */\n clearHover (): void {\n this.setHoverOverlayTarget(undefined);\n this.commitHover(undefined);\n }\n\n /**\n * 按当前焦点容器过滤交互命中。\n * @param selectedIds 原始命中元素 ID\n * @returns 可选元素 ID\n */\n filterSelectedItems (selectedIds: string[]): string[] {\n return this.filterItemsByHierarchy(selectedIds);\n }\n\n /**\n * 添加忽略交互的元素 ID。\n * @param ids 元素 ID\n */\n addIgnoreIds (ids: string[]): void {\n ids.forEach(id => addItem(this.ignoreIds, id));\n }\n /**\n * 删除忽略交互的元素 ID。\n * @param ids 元素 ID\n */\n deleteIgnoreIds (ids: string[]): void {\n ids.forEach(id => {\n const index = this.ignoreIds.indexOf(id);\n\n if (index >= 0) {\n this.ignoreIds.splice(index, 1);\n }\n });\n }\n /**\n * 添加忽略交互的元素名称。\n * @param names 元素名称\n */\n addIgnoreNames (names: string[]): void {\n names.forEach(name => addItem(this.ignoreNames, name));\n }\n /**\n * 删除忽略交互的元素名称。\n * @param names 元素名称\n */\n deleteIgnoreNames (names: string[]): void {\n names.forEach(name => {\n const index = this.ignoreNames.indexOf(name);\n\n if (index >= 0) {\n this.ignoreNames.splice(index, 1);\n }\n });\n }\n /**\n * 替换忽略交互的元素名称。\n * @param names 元素名称\n */\n setIgnoreNames (names: string[]): void {\n this.ignoreNames = [...names];\n }\n\n /**\n * 查找指针下最上层的未选元素。\n * @param point 指针视图坐标\n * @returns 未选元素 ID\n */\n findUnselectedItem (point: Vector2): string | undefined {\n const id = this.filterSelectedItems(this.hitTest(point))[0] ?? '';\n\n if (!id) {\n return undefined;\n }\n\n return this.getSelectedScopeIdSet().has(id) ? undefined : id;\n }\n\n /**\n * 创建一次行为派发使用的选区命中快照。\n * @param point 命中检测坐标\n * @returns 选区命中快照\n */\n createHitSnapshot (point: Vector2): SelectionHitSnapshot {\n const hitIds = this.hitTest(point);\n const selectableIds = this.filterSelectedItems(hitIds);\n const drillableIds = this.filterItemsByHierarchy(\n hitIds,\n group => !this.isItemSelected(group.getInstanceId()),\n );\n const selectedScopeIds = this.getSelectedScopeIdSet();\n\n return {\n point: point.clone(),\n selectableIds: [...selectableIds],\n topmostId: selectableIds[0],\n selectedScopeHitIds: selectableIds.filter(id => selectedScopeIds.has(id)),\n drillTargetId: drillableIds[0],\n };\n }\n\n /**\n * 判断坐标是否位于当前焦点容器的视图范围内。\n * @param point 视图坐标\n * @returns 是否位于当前焦点容器内\n */\n isPointInFocusedGroup (point: Vector2): boolean {\n if (!this._focusedGroupId) {\n return false;\n }\n const group = getPlayerItemById(this.engine.sceneServer.compositions[0], this._focusedGroupId);\n\n if (!group) {\n return false;\n }\n const containerSize = GizmoViewportUtils.getContainerSize(this.engine.canvas.parentElement!);\n const transform = getItemViewTransform(group, containerSize);\n\n return !!transform && transformedBoxContainsPoint(transform, point);\n }\n\n /**\n * 判断坐标是否落在当前选区的视图包围内。\n *\n * 单选保留元素变换后四边形的精确命中;多选使用与变换线框一致的\n * 整体轴对齐包围盒,使元素之间的选框空白区域也可用于拖动选区。\n * @param point 视图坐标\n * @returns 是否命中当前选区\n */\n isPointInSelectedViewBox (point: Vector2): boolean {\n const items = this.getSelectedPlayerItems();\n\n if (items.length === 0) {\n return false;\n }\n const containerSize = GizmoViewportUtils.getContainerSize(this.engine.canvas.parentElement!);\n\n if (items.length === 1) {\n const transform = getItemViewTransform(items[0], containerSize);\n\n return !!transform && transformedBoxContainsPoint(transform, point);\n }\n\n const selectionBox = new Box2();\n\n for (const item of items) {\n const itemBox = getItemViewBox(item, containerSize);\n\n if (!itemBox.isEmpty()) {\n selectionBox.union(itemBox);\n }\n }\n\n return !selectionBox.isEmpty() && selectionBox.containsPoint(point);\n }\n\n /**\n * 判断坐标是否位于当前动效编辑容器的视图范围内。\n * @param point 视图坐标\n * @returns 是否位于当前动效容器内\n */\n isPointInEffectsEditScope (point: Vector2): boolean {\n if (!this._effectsEditItemId) {\n return false;\n }\n const effectsItem = getPlayerItemById(this.engine.sceneServer.compositions[0], this._effectsEditItemId);\n\n if (!effectsItem) {\n return false;\n }\n const containerSize = GizmoViewportUtils.getContainerSize(this.engine.canvas.parentElement!);\n const transform = getItemViewTransform(effectsItem, containerSize);\n\n return !!transform && transformedBoxContainsPoint(transform, point);\n }\n\n /**\n * 将框选候选按当前动效编辑范围解析为可选元素。\n *\n * 默认模式把动效子树归并为容器;动效编辑模式只保留当前容器的内部元素。\n * @param item 原始播放器元素\n * @returns 当前模式下的框选候选;不可选时返回 undefined\n */\n resolveMarqueeSelectableItem (item: VFXItem): VFXItem | undefined {\n const effectsOwner = getEffectsPlayerItemOwner(item);\n\n if (!this._effectsEditItemId) {\n return effectsOwner ?? item;\n }\n if (\n effectsOwner?.getInstanceId() !== this._effectsEditItemId\n || item.getInstanceId() === this._effectsEditItemId\n || item.type === spec.ItemType.composition\n ) {\n return undefined;\n }\n\n return item;\n }\n\n /**\n * 提交预选结果并在变化时发出事件。\n * @param itemId 预选元素 ID\n */\n private commitHover (itemId: string | undefined): void {\n const previousId = this.hoveringResults.itemId;\n\n if (itemId === previousId) {\n return;\n }\n this.hoveringResults.itemId = itemId;\n this.emit('preselectchange', { preSelectedId: itemId });\n }\n\n /**\n * 按场景层级归并原始命中元素。\n * @param selectedIds 原始命中元素 ID\n * @param groupFilter 可选的父组过滤条件\n * @returns 归并后的元素 ID\n */\n private filterItemsByHierarchy (\n selectedIds: string[],\n groupFilter?: (group: VFXItem) => boolean,\n ): string[] {\n const resultSelectedIds: string[] = [];\n\n selectedIds.forEach(id => {\n const item = getPlayerItemById(this.engine.sceneServer.compositions[0], id);\n\n if (!item) {\n return;\n }\n const effectsOwner = getEffectsPlayerItemOwner(item);\n\n if (\n this._effectsEditItemId\n && effectsOwner?.getInstanceId() !== this._effectsEditItemId\n ) {\n return;\n }\n if (effectsOwner) {\n const effectsOwnerId = effectsOwner.getInstanceId();\n\n if (!this._effectsEditItemId) {\n if (!this.ignoreIds.includes(effectsOwnerId) && !this.isIgnoredNameById(effectsOwnerId)) {\n addItem(resultSelectedIds, effectsOwnerId);\n }\n\n return;\n }\n if (effectsOwnerId !== this._effectsEditItemId || id === effectsOwnerId) {\n return;\n }\n }\n\n const selectableItem = this.getOutermostSelectableItem(item, groupFilter);\n\n if (selectableItem) {\n addItem(resultSelectedIds, selectableItem.getInstanceId());\n }\n });\n\n return resultSelectedIds;\n }\n\n /**\n * 获取不高于当前焦点容器的最外层可选元素。\n * @param item 原始命中元素\n * @param groupFilter 可选的父组过滤条件\n * @returns 当前层级可选元素\n */\n private getOutermostSelectableItem (\n item: VFXItem,\n groupFilter?: (group: VFXItem) => boolean,\n ): VFXItem | undefined {\n const effectsOwner = getEffectsPlayerItemOwner(item);\n const focusedGroup = this._focusedGroupId\n ? getPlayerItemById(this.engine.sceneServer.compositions[0], this._focusedGroupId)\n : undefined;\n let match = this.isDirectlySelectable(item) ? item : undefined;\n let node: VFXItem | undefined = item;\n\n while (node) {\n if (effectsOwner && node === effectsOwner) {\n break;\n }\n\n if (focusedGroup?.getInstanceId() === node.getInstanceId()) {\n break;\n }\n\n if (\n this.isSelectableGroup(node)\n && !this.isRuntimeAncestor(node, focusedGroup)\n && (groupFilter?.(node) ?? true)\n ) {\n match = node;\n }\n node = node.parent;\n }\n\n return match;\n }\n\n /**\n * 判断元素名称是否在忽略列表中。\n * @param id 元素 ID\n * @returns 是否忽略该元素\n */\n private isIgnoredNameById (id: string): boolean {\n if (this.ignoreNames.length === 0) {\n return false;\n }\n const item = getPlayerItemById(this.engine.sceneServer.compositions[0], id);\n\n return !!item && this.ignoreNames.includes(item.name);\n }\n\n /** @returns 选中元素及其后代组成的命中范围。 */\n private getSelectedScopeIdSet (): Set<string> {\n const ids = new Set(this._selectedIds);\n const selectedItems = this._selectedIds\n .map(id => getPlayerItemById(this.engine.sceneServer.compositions[0], id))\n .filter((item): item is VFXItem => !!item);\n\n for (const item of selectedItems) {\n for (const child of getItemChildren(item)) {\n ids.add(child.getInstanceId());\n }\n }\n\n return ids;\n }\n\n /**\n * 将动效子元素命中区域归并到动效容器。\n * @param hitTestResult 原始命中结果\n */\n private refreshResultRegions (hitTestResult: HitTestResult): void {\n const playerComposition = this.engine.sceneServer.compositions[0];\n\n if (!playerComposition || this._effectsEditItemId) {\n return;\n }\n const effectsItems = playerComposition.items.filter(item => item.name === '动效' && item.getComponent(FrameComponent) !== undefined);\n const effectsItemMap = new Map<string, string>();\n\n effectsItems.forEach(item => {\n const compositionChild = item.children?.[0];\n\n if (compositionChild?.type === spec.ItemType.composition) {\n compositionChild.children.forEach(subChild => {\n effectsItemMap.set(subChild.getInstanceId(), item.getInstanceId());\n });\n }\n });\n hitTestResult.regions.forEach(region => {\n region.id = effectsItemMap.get(region.id) ?? region.id;\n });\n }\n\n /**\n * 按渲染顺序和深度整理命中结果。\n * @param hitTestResult 原始命中结果\n * @param playerComposition 播放合成\n * @returns 排序后的元素 ID\n */\n private reorderHitTestResult (hitTestResult: HitTestResult, playerComposition: Composition): string[] {\n // 1. 校验命中区域并按渲染顺序反转。\n if (hitTestResult.regions.length === 0 || !playerComposition) {\n return [];\n }\n const { ray } = hitTestResult;\n const regions = hitTestResult.regions.reverse();\n const results: [string, number][] = [];\n\n // 2. 解析区域对应元素及其射线距离。\n regions.forEach(region => {\n let item: VFXItem | undefined;\n /**\n * 在元素树中查找命中区域。\n * @param items 当前元素列表\n * @param id 目标元素 ID\n */\n const dfsItem = (items: VFXItem[], id: string) => {\n for (const i of items) {\n if (i.getInstanceId() === id) {\n item = i;\n }\n if (item) {\n return;\n }\n dfsItem(i.children, id);\n }\n };\n\n dfsItem(playerComposition.items, region.id);\n if (!item || !isPlayerItemVisible(item)) {\n return;\n }\n const targetItemId = item.getInstanceId();\n const distance = ray.origin.clone().distance(region.position.clone());\n const isNeedDepthTest = item.type === spec.ItemType.mesh\n || item.getComponent(SpriteComponent)?.renderer?.occlusion\n || item.getComponent(TextComponent)?.renderer?.occlusion\n || item.getComponent(VideoComponent)?.renderer?.occlusion\n || item.getComponent(RichTextComponent)?.renderer?.occlusion;\n\n // 3. 需要深度测试的元素按射线距离插入,其余保留渲染顺序。\n if (isNeedDepthTest && results.length > 0) {\n let tryAdd = true;\n\n results.forEach((result, i) => {\n if (!tryAdd) {\n return;\n }\n if (distance <= result[1]) {\n results.splice(i, 0, [targetItemId, distance]);\n tryAdd = false;\n\n return;\n }\n if (i === results.length - 1) {\n results.push([targetItemId, distance]);\n }\n });\n } else {\n results.push([targetItemId, distance]);\n }\n });\n\n // 4. 返回排序后的元素 ID。\n return results.map(result => result[0]);\n }\n\n /**\n * 将画板左上角扩展交互区的命中加入结果。\n * @param mouse 指针视图坐标\n * @param currentSelectedIds 当前命中元素 ID\n * @returns 补充画板后的命中元素 ID\n */\n private preSelectedFrameOutBound (mouse: Vector2, currentSelectedIds: string[]): string[] {\n const playerComposition = this.engine.sceneServer.compositions[0];\n\n if (!playerComposition) {\n return currentSelectedIds;\n }\n const framePlayerItems = playerComposition.items.filter(item => (\n isFramePlayerItem(item)\n && isPlayerItemVisible(item)\n ));\n const containerSize = GizmoViewportUtils.getContainerSize(this.engine.canvas.parentElement!);\n const frameBoxInfoes = framePlayerItems.map(item => ({\n id: item.getInstanceId(),\n box: getItemViewBox(item, containerSize),\n }));\n\n if (!frameBoxInfoes?.length) {\n return currentSelectedIds;\n }\n let hasSelectedFrame = false;\n\n frameBoxInfoes.forEach(frameBoxInfo => {\n if (hasSelectedFrame) {\n return;\n }\n const { min } = frameBoxInfo.box;\n const interactionBox = setBoxFromPoints(new Box2(), [min.clone(), min.clone().add(new Vector2(FRAME_INTERACTION_WIDTH, -FRAME_INTERACTION_HEIGHT))]);\n\n if (interactionBox.containsPoint(mouse)) {\n hasSelectedFrame = true;\n currentSelectedIds.splice(0, 0, frameBoxInfo.id);\n }\n });\n\n return currentSelectedIds;\n }\n\n /**\n * 根据当前非空选区更新共同的最近父组;清空选区时保留已有焦点。\n * @param selectedIds 当前选中元素 ID\n */\n private updateFocusedGroupFromSelection (selectedIds: readonly string[]): void {\n if (selectedIds.length === 0) {\n return;\n }\n\n const selectedItems = selectedIds\n .map(id => getPlayerItemById(this.engine.sceneServer.compositions[0], id))\n .filter((item): item is VFXItem => !!item);\n\n if (selectedItems.length !== selectedIds.length) {\n this._focusedGroupId = undefined;\n\n return;\n }\n\n const ancestorLists = selectedItems.map(item => this.getGroupAncestors(item));\n const commonGroup = ancestorLists[0]?.find(candidate => (\n ancestorLists.slice(1).every(ancestors => (\n ancestors.some(group => group.getInstanceId() === candidate.getInstanceId())\n ))\n ));\n\n this._focusedGroupId = commonGroup?.getInstanceId();\n }\n\n /**\n * 获取元素从近到远的可聚焦父组。\n * @param item 当前元素\n * @returns 父组列表\n */\n private getGroupAncestors (item: VFXItem): VFXItem[] {\n const groups: VFXItem[] = [];\n let parent = item.parent;\n\n while (parent) {\n if (this._effectsEditItemId && parent.getInstanceId() === this._effectsEditItemId) {\n break;\n }\n if (this.isSelectableGroup(parent)) {\n groups.push(parent);\n }\n parent = parent.parent;\n }\n\n return groups;\n }\n\n /**\n * 判断元素是否可作为组内交互焦点。\n * @param item 待检查元素\n * @returns 是否为可聚焦 Group\n */\n private isSelectableGroup (item: VFXItem): boolean {\n const id = item.getInstanceId();\n\n return isGroupPlayerItem(item)\n && !this.ignoreIds.includes(id)\n && !this.isIgnoredNameById(id);\n }\n\n /**\n * 判断原始命中元素能否直接进入选区。\n * @param item 待检查元素\n * @returns 是否可直接选择\n */\n private isDirectlySelectable (item: VFXItem): boolean {\n const id = item.getInstanceId();\n\n return item.type !== spec.ItemType.composition\n && !this.ignoreIds.includes(id)\n && !this.isIgnoredNameById(id);\n }\n\n /**\n * 判断 ancestor 是否为 item 的运行时祖先。\n * @param ancestor 候选祖先\n * @param item 当前元素\n * @returns 是否存在祖先关系\n */\n private isRuntimeAncestor (ancestor: VFXItem, item: VFXItem | undefined): boolean {\n let parent = item?.parent;\n\n while (parent) {\n if (parent.getInstanceId() === ancestor.getInstanceId()) {\n return true;\n }\n parent = parent.parent;\n }\n\n return false;\n }\n\n /**\n * 将选区归一化为不存在祖先关系的节点集合。\n *\n * 按输入顺序处理,后加入的交互目标胜出:深入子元素会移除已选祖先,\n * 选择外层容器会移除已选后代\n * @param ids 待提交的选中 ID\n * @returns 保持稳定顺序的层级互斥选区\n */\n private normalizeHierarchySelection (ids: readonly string[]): string[] {\n const uniqueIds = Array.from(new Set(ids));\n const itemById = new Map<string, VFXItem>();\n /**\n * 一次遍历建立运行时节点索引,避免框选大量元素时反复搜索整棵树。\n * @param items 当前层节点\n */\n const collectItems = (items: VFXItem[]): void => {\n for (const item of items) {\n const id = item.getInstanceId();\n\n if (itemById.has(id)) {\n continue;\n }\n itemById.set(id, item);\n collectItems(item.children);\n }\n };\n\n collectItems(this.engine.sceneServer.compositions[0]?.items ?? []);\n\n const acceptedIds: string[] = [];\n const acceptedIdSet = new Set<string>();\n const acceptedAncestorIds = new Set<string>();\n\n // 从后向前处理,使本次交互最后加入的目标覆盖已有祖先或后代。\n for (let index = uniqueIds.length - 1; index >= 0; index--) {\n const id = uniqueIds[index];\n const ancestorIds: string[] = [];\n let parent = itemById.get(id)?.parent;\n\n while (parent) {\n ancestorIds.push(parent.getInstanceId());\n parent = parent.parent;\n }\n\n const hasAcceptedAncestor = ancestorIds.some(ancestorId => acceptedIdSet.has(ancestorId));\n const isAncestorOfAccepted = acceptedAncestorIds.has(id);\n\n if (hasAcceptedAncestor || isAncestorOfAccepted) {\n continue;\n }\n\n acceptedIds.push(id);\n acceptedIdSet.add(id);\n ancestorIds.forEach(ancestorId => acceptedAncestorIds.add(ancestorId));\n }\n\n return acceptedIds.reverse();\n }\n\n /**\n * 比较两个有序 ID 列表。\n * @param left 左侧 ID 列表\n * @param right 右侧 ID 列表\n * @returns 是否完全相同\n */\n private sameIds (left: readonly string[], right: readonly string[]): boolean {\n return left.length === right.length && left.every((id, index) => id === right[index]);\n }\n}\n","import { Line2, type Box2 } from '@galacean/effects-math/es/extension/index';\nimport { Vector2, getBoxCorners } from '../math';\nimport type { SnapConfig } from '../configs/types';\nimport { selectionSnapConfig } from '../configs/builtin-configs';\nimport type { VFXItem } from '@galacean/effects';\nimport { getItemViewBox, isEffectsPlayerItem, isFramePlayerItem } from '../items';\nimport type { GizmoOwner } from '../gizmo-owner';\n\nconst SNAP_EPSILON = 0.000001;\nconst SNAP_MARKER_HALF_SIZE = 2;\n\ntype SnapAxis = 'x' | 'y';\n\ntype SnapGapSegment = {\n axis: SnapAxis,\n start: number,\n end: number,\n cross: number,\n};\n\ntype AxisSnapCandidate = {\n distance: number,\n point?: Vector2,\n target?: Vector2,\n targetBox?: Box2,\n gaps?: SnapGapSegment[],\n};\n\ntype AxisSnapSelection = {\n distance: number,\n candidates: AxisSnapCandidate[],\n};\n\n/** 位移吸附结果。 */\nexport type TranslationSnapResult = {\n /** x 方向吸附距离 */\n x?: number,\n /** y 方向吸附距离 */\n y?: number,\n /** x 方向点吸附信息 */\n xPoints?: TranslationPointSnapTarget[],\n /** y 方向点吸附信息 */\n yPoints?: TranslationPointSnapTarget[],\n};\n\n/** 平移点吸附信息。 */\nexport type TranslationPointSnapTarget = {\n /** 包围盒点 */\n point: Vector2,\n /** 吸附点 */\n targets: Vector2[],\n};\n\n/** 管理选区吸附目标、修正量和对齐提示。 */\nexport class SnapManager {\n /** 当前吸附结果。距离为未吸附位置减目标位置,调用方应减去该值。 */\n result: TranslationSnapResult = {};\n\n private readonly owner: GizmoOwner;\n\n /** 吸附提示线集合。 */\n private results: Line2[] = [];\n\n /** 当前拖拽会话缓存的吸附目标。 */\n private targetBoxes: Box2[] = [];\n\n /** 本帧每轴选中的最近候选。 */\n private axisSelections: Partial<Record<SnapAxis, AxisSnapSelection>> = {};\n\n /** 本帧尚未施加吸附修正的选区包围盒。 */\n private sourceBox: Box2 | undefined;\n\n /**\n * @param owner Gizmo 宿主\n */\n constructor (owner: GizmoOwner) {\n this.owner = owner;\n }\n\n /** 是否启用吸附。 */\n get enabled (): boolean {\n return this.config.enabled;\n }\n\n /** 当前吸附配置。 */\n get config (): Readonly<SnapConfig> {\n return this.owner.getConfigManager().get(selectionSnapConfig);\n }\n\n /**\n * 缓存一次选区交互使用的吸附目标。\n * @param items 场景元素\n * @param selectedItems 当前选中元素\n * @param containerSize 画布容器尺寸\n */\n cacheSnapTargetsForSelection (\n items: readonly VFXItem[],\n selectedItems: readonly VFXItem[],\n containerSize: Vector2,\n ): void {\n if (selectedItems.length === 0) {\n this.clearCache();\n\n return;\n }\n\n const selectedIdSet = new Set(selectedItems.map(item => item.getInstanceId()));\n const selectedAncestorIdSet = this.getAncestorIdSet(selectedItems);\n const scopeItemId = this.getCommonSnapScopeId(selectedItems);\n\n this.cacheSnapTargetBoxes(\n items\n .filter(item => item.isVisible\n && !selectedAncestorIdSet.has(item.getInstanceId())\n && !this.isSelectedOrDescendant(item, selectedIdSet)\n && this.getNearestSnapScopeId(item) === scopeItemId,\n )\n .map(item => getItemViewBox(item, containerSize))\n .filter(box => !box.isEmpty()),\n );\n }\n\n /**\n * 缓存视图空间中的吸附目标包围盒。\n * @param boxes 吸附目标包围盒\n */\n cacheSnapTargetBoxes (boxes: readonly Box2[]): void {\n this.targetBoxes = boxes.filter(box => !box.isEmpty()).map(box => box.clone());\n }\n\n /** 清空当前拖拽会话的吸附目标缓存。 */\n clearCache (): void {\n this.targetBoxes = [];\n }\n\n /** @returns 当前缓存的吸附目标包围盒。 */\n getSnapTargetBoxes (): readonly Box2[] {\n return this.targetBoxes;\n }\n\n /** @returns 当前吸附目标的角点和中心点。 */\n getSnapTargetPoints (): Vector2[] {\n return this.targetBoxes.flatMap(box => [\n ...getBoxCorners(box),\n box.getCenter(),\n ]);\n }\n\n /**\n * 包围盒位移吸附。每轴分别选择最近的边、中心或等距间隔候选。\n * @param shift 本次原始偏移值\n * @param box 当前已施加上一帧吸附修正的包围盒\n * @param otherBoxes 吸附包围盒\n * @param xEnabled 是否进行 x 轴吸附\n * @param yEnabled 是否进行 y 轴吸附\n */\n prepareBox (\n shift: Vector2,\n box: Box2,\n otherBoxes: readonly Box2[] = this.targetBoxes,\n xEnabled = true,\n yEnabled = true,\n ): void {\n const previousResult = this.result;\n\n this.clearFrameState();\n\n if (box.isEmpty()) {\n return;\n }\n\n // 先恢复未吸附的指针轨迹,再叠加本帧位移,避免吸附后无法平滑脱离。\n const unsnappedShift = new Vector2(previousResult.x ?? 0, previousResult.y ?? 0).add(shift);\n const sourceBox = box.clone().translate(unsnappedShift);\n\n this.sourceBox = sourceBox;\n\n for (const targetBox of otherBoxes) {\n if (targetBox.isEmpty()) {\n continue;\n }\n this.considerBoxAlignment(sourceBox, targetBox, 'x', xEnabled);\n this.considerBoxAlignment(sourceBox, targetBox, 'y', yEnabled);\n }\n\n if (xEnabled) {\n this.considerGapSnaps(sourceBox, otherBoxes, 'x');\n }\n if (yEnabled) {\n this.considerGapSnaps(sourceBox, otherBoxes, 'y');\n }\n\n this.publishResult();\n }\n\n /**\n * 点位移吸附。x/y 两轴独立选择最近目标。\n * @param shift 本次原始偏移值\n * @param point 当前已施加上一帧吸附修正的点\n * @param otherPoints 吸附点集合\n * @param xEnabled 是否进行 x 轴吸附\n * @param yEnabled 是否进行 y 轴吸附\n */\n preparePoint (\n shift: Vector2,\n point: Vector2,\n otherPoints: readonly Vector2[] = this.getSnapTargetPoints(),\n xEnabled = true,\n yEnabled = true,\n ): void {\n const previousResult = this.result;\n\n this.clearFrameState();\n\n const unsnappedShift = new Vector2(previousResult.x ?? 0, previousResult.y ?? 0).add(shift);\n const sourcePoint = point.clone().add(unsnappedShift);\n\n for (const target of otherPoints) {\n if (xEnabled) {\n this.considerAxisCandidate('x', {\n distance: sourcePoint.x - target.x,\n point: sourcePoint,\n target,\n });\n }\n if (yEnabled) {\n this.considerAxisCandidate('y', {\n distance: sourcePoint.y - target.y,\n point: sourcePoint,\n target,\n });\n }\n }\n\n this.publishResult();\n }\n\n /** @returns 当前视图坐标系中的吸附提示线。 */\n getSnappingVisualizations (): readonly Line2[] {\n this.update();\n\n return this.results;\n }\n\n /** 清空吸附修正量和提示,保留目标缓存。 */\n clearSnappingVisualizations (): void {\n this.clearFrameState();\n }\n\n /** 清空全部吸附状态。 */\n reset (): void {\n this.clearCache();\n this.clearSnappingVisualizations();\n }\n\n private update (): void {\n const lines: Line2[] = [];\n const correction = new Vector2(this.result.x ?? 0, this.result.y ?? 0);\n const snappedBox = this.sourceBox?.clone().translate(correction.clone().multiply(-1));\n\n this.appendAlignmentLines(lines, 'x', correction, snappedBox);\n this.appendAlignmentLines(lines, 'y', correction, snappedBox);\n this.appendGapLines(lines, 'x');\n this.appendGapLines(lines, 'y');\n\n this.results = this.deduplicateLines(lines);\n }\n\n /** 判断元素自身或任一祖先是否属于当前选区。 */\n private isSelectedOrDescendant (item: VFXItem, selectedIds: ReadonlySet<string>): boolean {\n let current: VFXItem | undefined = item;\n\n while (current) {\n if (selectedIds.has(current.getInstanceId())) {\n return true;\n }\n current = current.parent;\n }\n\n return false;\n }\n\n /** 收集当前选区的全部祖先,避免容器成为自身内容的吸附目标。 */\n private getAncestorIdSet (items: readonly VFXItem[]): ReadonlySet<string> {\n const ids = new Set<string>();\n\n for (const item of items) {\n let current = item.parent;\n\n while (current) {\n ids.add(current.getInstanceId());\n current = current.parent;\n }\n }\n\n return ids;\n }\n\n /** 获取元素所在的最近吸附作用域;作用域元素自身属于外层。 */\n private getNearestSnapScopeId (item: VFXItem): string | undefined {\n let current = item.parent;\n\n while (current) {\n if (this.isSnapScopeItem(current)) {\n return current.getInstanceId();\n }\n current = current.parent;\n }\n\n return undefined;\n }\n\n /** 获取整个选区共同所在的最近吸附作用域。 */\n private getCommonSnapScopeId (items: readonly VFXItem[]): string | undefined {\n const scopeAncestorIds = items.map(item => {\n const ids: string[] = [];\n let current = item.parent;\n\n while (current) {\n if (this.isSnapScopeItem(current)) {\n ids.push(current.getInstanceId());\n }\n current = current.parent;\n }\n\n return ids;\n });\n const [first = [], ...rest] = scopeAncestorIds;\n\n return first.find(id => rest.every(ids => ids.includes(id)));\n }\n\n /** 画板和动效容器都会隔离内外吸附候选。 */\n private isSnapScopeItem (item: VFXItem): boolean {\n return isFramePlayerItem(item) || isEffectsPlayerItem(item);\n }\n\n /** 比较一个目标包围盒的 min / center / max 锚点。 */\n private considerBoxAlignment (\n sourceBox: Box2,\n targetBox: Box2,\n axis: SnapAxis,\n enabled: boolean,\n ): void {\n if (!enabled) {\n return;\n }\n\n const orthogonalAxis: SnapAxis = axis === 'x' ? 'y' : 'x';\n const sourceCenter = sourceBox.getCenter();\n const targetCenter = targetBox.getCenter();\n const sourceCoordinates = [sourceBox.min[axis], sourceCenter[axis], sourceBox.max[axis]];\n const targetCoordinates = [targetBox.min[axis], targetCenter[axis], targetBox.max[axis]];\n\n for (const sourceCoordinate of sourceCoordinates) {\n for (const targetCoordinate of targetCoordinates) {\n const point = new Vector2();\n\n point[axis] = sourceCoordinate;\n point[orthogonalAxis] = sourceCenter[orthogonalAxis];\n const target = new Vector2();\n\n target[axis] = targetCoordinate;\n target[orthogonalAxis] = targetCenter[orthogonalAxis];\n this.considerAxisCandidate(axis, {\n distance: sourceCoordinate - targetCoordinate,\n point,\n target,\n targetBox,\n });\n }\n }\n }\n\n /**\n * 添加等距候选:在现有 gap 中居中,或在 gap 两端复制相同间距。\n */\n private considerGapSnaps (sourceBox: Box2, boxes: readonly Box2[], axis: SnapAxis): void {\n const validBoxes = boxes.filter(box => !box.isEmpty());\n const orthogonalAxis: SnapAxis = axis === 'x' ? 'y' : 'x';\n const sourceSize = sourceBox.max[axis] - sourceBox.min[axis];\n\n for (let firstIndex = 0; firstIndex < validBoxes.length; firstIndex++) {\n for (let secondIndex = firstIndex + 1; secondIndex < validBoxes.length; secondIndex++) {\n let first = validBoxes[firstIndex];\n let second = validBoxes[secondIndex];\n\n if (first.min[axis] > second.min[axis]) {\n [first, second] = [second, first];\n }\n\n const gap = second.min[axis] - first.max[axis];\n\n if (gap <= SNAP_EPSILON || !this.rangesOverlap(first, second, orthogonalAxis)) {\n continue;\n }\n if (this.hasInterveningBox(first, second, validBoxes, axis, orthogonalAxis)) {\n continue;\n }\n\n const existingGap = this.createGapSegment(first, second, axis);\n\n // 居中:移动对象落在现有 gap 内,并使两侧间距相同。\n if (gap + SNAP_EPSILON >= sourceSize) {\n const desiredMin = first.max[axis] + (gap - sourceSize) / 2;\n const desiredBox = this.moveBoxAlongAxis(sourceBox, axis, desiredMin);\n\n if (this.rangesOverlap(desiredBox, first, orthogonalAxis) ||\n this.rangesOverlap(desiredBox, second, orthogonalAxis)) {\n this.considerAxisCandidate(axis, {\n distance: sourceBox.min[axis] - desiredMin,\n gaps: [\n this.createGapSegment(first, desiredBox, axis, existingGap.cross),\n this.createGapSegment(desiredBox, second, axis, existingGap.cross),\n ],\n });\n }\n }\n\n // 复制 gap 到现有对象对的前方。\n const beforeMax = first.min[axis] - gap;\n const beforeMin = beforeMax - sourceSize;\n const beforeBox = this.moveBoxAlongAxis(sourceBox, axis, beforeMin);\n\n if (this.rangesOverlap(beforeBox, first, orthogonalAxis)) {\n this.considerAxisCandidate(axis, {\n distance: sourceBox.min[axis] - beforeMin,\n gaps: [\n existingGap,\n this.createGapSegment(beforeBox, first, axis, existingGap.cross),\n ],\n });\n }\n\n // 复制 gap 到现有对象对的后方。\n const afterMin = second.max[axis] + gap;\n const afterBox = this.moveBoxAlongAxis(sourceBox, axis, afterMin);\n\n if (this.rangesOverlap(afterBox, second, orthogonalAxis)) {\n this.considerAxisCandidate(axis, {\n distance: sourceBox.min[axis] - afterMin,\n gaps: [\n existingGap,\n this.createGapSegment(second, afterBox, axis, existingGap.cross),\n ],\n });\n }\n }\n }\n }\n\n /** 只保留阈值内最近的候选;同一修正量的命中全部合并用于渲染。 */\n private considerAxisCandidate (axis: SnapAxis, candidate: AxisSnapCandidate): void {\n if (Math.abs(candidate.distance) > this.config.distance + SNAP_EPSILON) {\n return;\n }\n\n const current = this.axisSelections[axis];\n\n if (!current || Math.abs(candidate.distance) < Math.abs(current.distance) - SNAP_EPSILON) {\n this.axisSelections[axis] = {\n distance: candidate.distance,\n candidates: [candidate],\n };\n\n return;\n }\n\n if (Math.abs(candidate.distance - current.distance) <= SNAP_EPSILON) {\n current.candidates.push(candidate);\n }\n }\n\n /** 将内部轴命中发布到兼容的 TranslationSnapResult。 */\n private publishResult (): void {\n for (const axis of ['x', 'y'] as const) {\n const selection = this.axisSelections[axis];\n\n if (!selection) {\n continue;\n }\n this.result[axis] = selection.distance;\n\n const pointProperty = axis === 'x' ? 'xPoints' : 'yPoints';\n const pointMatches = selection.candidates.filter(\n (candidate): candidate is AxisSnapCandidate & { point: Vector2, target: Vector2 } =>\n candidate.point !== undefined && candidate.target !== undefined,\n );\n\n if (pointMatches.length === 0) {\n continue;\n }\n\n const pointGroups: TranslationPointSnapTarget[] = [];\n\n for (const match of pointMatches) {\n let group = pointGroups.find(item => this.pointsEqual(item.point, match.point));\n\n if (!group) {\n group = { point: match.point, targets: [] };\n pointGroups.push(group);\n }\n if (!group.targets.some(target => this.pointsEqual(target, match.target))) {\n group.targets.push(match.target);\n }\n }\n this.result[pointProperty] = pointGroups;\n }\n }\n\n /** 生成贯穿选区和全部命中目标完整范围的对齐线,并标记参与边段的端点。 */\n private appendAlignmentLines (\n lines: Line2[],\n axis: SnapAxis,\n correction: Vector2,\n snappedBox: Box2 | undefined,\n ): void {\n const selection = this.axisSelections[axis];\n\n if (!selection) {\n return;\n }\n\n const orthogonalAxis: SnapAxis = axis === 'x' ? 'y' : 'x';\n const matches = selection.candidates.filter(\n (candidate): candidate is AxisSnapCandidate & { point: Vector2, target: Vector2 } =>\n candidate.point !== undefined && candidate.target !== undefined,\n );\n const groups = new Map<string, typeof matches>();\n\n for (const match of matches) {\n const coordinate = match.target[axis];\n const key = coordinate.toFixed(6);\n const group = groups.get(key) ?? [];\n\n group.push(match);\n groups.set(key, group);\n }\n\n for (const matchesAtCoordinate of groups.values()) {\n const coordinate = matchesAtCoordinate[0].target[axis];\n let min = snappedBox?.min[orthogonalAxis] ?? Number.POSITIVE_INFINITY;\n let max = snappedBox?.max[orthogonalAxis] ?? Number.NEGATIVE_INFINITY;\n const markerPoints: Vector2[] = [];\n\n if (snappedBox) {\n markerPoints.push(\n this.createAxisPoint(axis, coordinate, snappedBox.min[orthogonalAxis]),\n this.createAxisPoint(axis, coordinate, snappedBox.max[orthogonalAxis]),\n );\n }\n\n for (const match of matchesAtCoordinate) {\n const snappedPoint = match.point.clone().subtract(correction);\n\n min = Math.min(min, snappedPoint[orthogonalAxis], match.target[orthogonalAxis]);\n max = Math.max(max, snappedPoint[orthogonalAxis], match.target[orthogonalAxis]);\n if (match.targetBox) {\n min = Math.min(min, match.targetBox.min[orthogonalAxis]);\n max = Math.max(max, match.targetBox.max[orthogonalAxis]);\n markerPoints.push(\n this.createAxisPoint(axis, coordinate, match.targetBox.min[orthogonalAxis]),\n this.createAxisPoint(axis, coordinate, match.targetBox.max[orthogonalAxis]),\n );\n } else {\n markerPoints.push(\n this.createAxisPoint(axis, coordinate, snappedPoint[orthogonalAxis]),\n this.createAxisPoint(axis, coordinate, match.target[orthogonalAxis]),\n );\n }\n }\n\n if (!Number.isFinite(min) || !Number.isFinite(max)) {\n continue;\n }\n const start = new Vector2();\n const end = new Vector2();\n\n start[axis] = coordinate;\n end[axis] = coordinate;\n start[orthogonalAxis] = min;\n end[orthogonalAxis] = max;\n lines.push(new Line2(start, end));\n\n for (const marker of this.deduplicatePoints(markerPoints)) {\n this.appendSnapMarker(lines, marker);\n }\n }\n }\n\n private appendSnapMarker (lines: Line2[], point: Vector2): void {\n lines.push(\n new Line2(\n new Vector2(point.x - SNAP_MARKER_HALF_SIZE, point.y - SNAP_MARKER_HALF_SIZE),\n new Vector2(point.x + SNAP_MARKER_HALF_SIZE, point.y + SNAP_MARKER_HALF_SIZE),\n ),\n new Line2(\n new Vector2(point.x - SNAP_MARKER_HALF_SIZE, point.y + SNAP_MARKER_HALF_SIZE),\n new Vector2(point.x + SNAP_MARKER_HALF_SIZE, point.y - SNAP_MARKER_HALF_SIZE),\n ),\n );\n }\n\n /** 创建位于指定吸附轴和正交轴坐标上的点。 */\n private createAxisPoint (axis: SnapAxis, coordinate: number, orthogonalCoordinate: number): Vector2 {\n return axis === 'x'\n ? new Vector2(coordinate, orthogonalCoordinate)\n : new Vector2(orthogonalCoordinate, coordinate);\n }\n\n /** 把等距 gap 绘制为间距线。 */\n private appendGapLines (lines: Line2[], axis: SnapAxis): void {\n const selection = this.axisSelections[axis];\n\n if (!selection) {\n return;\n }\n\n for (const candidate of selection.candidates) {\n for (const gap of candidate.gaps ?? []) {\n if (Math.abs(gap.end - gap.start) <= SNAP_EPSILON) {\n continue;\n }\n if (axis === 'x') {\n lines.push(new Line2(\n new Vector2(gap.start, gap.cross),\n new Vector2(gap.end, gap.cross),\n ));\n } else {\n lines.push(new Line2(\n new Vector2(gap.cross, gap.start),\n new Vector2(gap.cross, gap.end),\n ));\n }\n }\n }\n }\n\n /** 构造两个相邻包围盒之间的 gap 提示。 */\n private createGapSegment (\n first: Box2,\n second: Box2,\n axis: SnapAxis,\n crossCoordinate?: number,\n ): SnapGapSegment {\n const orthogonalAxis: SnapAxis = axis === 'x' ? 'y' : 'x';\n const overlapMin = Math.max(first.min[orthogonalAxis], second.min[orthogonalAxis]);\n const overlapMax = Math.min(first.max[orthogonalAxis], second.max[orthogonalAxis]);\n const cross = crossCoordinate ?? (overlapMin <= overlapMax\n ? (overlapMin + overlapMax) / 2\n : (first.getCenter()[orthogonalAxis] + second.getCenter()[orthogonalAxis]) / 2);\n\n return {\n axis,\n start: first.max[axis],\n end: second.min[axis],\n cross,\n };\n }\n\n /** 把包围盒沿单轴移动到指定 min 坐标。 */\n private moveBoxAlongAxis (box: Box2, axis: SnapAxis, min: number): Box2 {\n const translation = new Vector2();\n\n translation[axis] = min - box.min[axis];\n\n return box.clone().translate(translation);\n }\n\n /** 判断两个包围盒在指定轴上的投影是否相交或相切。 */\n private rangesOverlap (first: Box2, second: Box2, axis: SnapAxis): boolean {\n return Math.min(first.max[axis], second.max[axis]) + SNAP_EPSILON >=\n Math.max(first.min[axis], second.min[axis]);\n }\n\n private pointsEqual (first: Vector2, second: Vector2): boolean {\n return Math.abs(first.x - second.x) <= SNAP_EPSILON &&\n Math.abs(first.y - second.y) <= SNAP_EPSILON;\n }\n\n /** 合并共享同一屏幕坐标的吸附锚点。 */\n private deduplicatePoints (points: readonly Vector2[]): Vector2[] {\n const unique: Vector2[] = [];\n\n for (const point of points) {\n if (!unique.some(item => this.pointsEqual(item, point))) {\n unique.push(point);\n }\n }\n\n return unique;\n }\n\n /** 排除被第三个目标占据的非相邻 gap。 */\n private hasInterveningBox (\n first: Box2,\n second: Box2,\n boxes: readonly Box2[],\n axis: SnapAxis,\n orthogonalAxis: SnapAxis,\n ): boolean {\n return boxes.some(box => box !== first && box !== second &&\n box.min[axis] < second.min[axis] - SNAP_EPSILON &&\n box.max[axis] > first.max[axis] + SNAP_EPSILON &&\n this.rangesOverlap(box, first, orthogonalAxis) &&\n this.rangesOverlap(box, second, orthogonalAxis));\n }\n\n /** 去掉由多组等价命中生成的重复线段。 */\n private deduplicateLines (lines: readonly Line2[]): Line2[] {\n const unique = new Map<string, Line2>();\n\n for (const line of lines) {\n const forward = `${line.start.x.toFixed(4)},${line.start.y.toFixed(4)}:${line.end.x.toFixed(4)},${line.end.y.toFixed(4)}`;\n const reverse = `${line.end.x.toFixed(4)},${line.end.y.toFixed(4)}:${line.start.x.toFixed(4)},${line.start.y.toFixed(4)}`;\n\n if (!unique.has(forward) && !unique.has(reverse)) {\n unique.set(forward, line);\n }\n }\n\n return Array.from(unique.values());\n }\n\n /** 清空本帧求解与渲染状态。 */\n private clearFrameState (): void {\n this.results = [];\n this.result = {};\n this.axisSelections = {};\n this.sourceBox = undefined;\n }\n}\n","/**\n * 光标图标映射与按需加载:定义 GestureCursorType 到 cursor 描述符的映射,\n * svg 类型在加载后就地填充 content。\n */\nimport { Downloader } from '@galacean/effects';\nimport type { GestureCursorType } from './cursor';\n\nconst assetsPrefix = 'https://mdn.alipayobjects.com/rms/uri/file/as/0.0.6';\n\nexport const cursorMap: Record<GestureCursorType, { type: 'svg' | 'preset', content: string, url?: string }> = {\n normal: { type: 'preset', content: 'default' },\n rotation: { type: 'svg', content: 'default', url: `${assetsPrefix}/icons/cursor-rotate-32.svg` },\n circle: { type: 'svg', content: 'default', url: `${assetsPrefix}/icons/cursor-rotate-32.svg` },\n scale: { type: 'svg', content: 'default', url: `${assetsPrefix}/icons/cursor-scale-32.svg` },\n hand: { type: 'preset', content: 'grab' },\n pointer: { type: 'preset', content: 'pointer' },\n text: { type: 'preset', content: 'text' },\n 'text-create': { type: 'preset', content: 'text' },\n 'active-hand': { type: 'preset', content: 'grabbing' },\n 'frame-create': { type: 'preset', content: 'crosshair' },\n 'box-select': { type: 'preset', content: 'crosshair' },\n 'text-rotation': { type: 'svg', content: 'default', url: 'https://mdn.alipayobjects.com/huamei_ixsp8m/afts/img/A*R722QoloC44AAAAAKkAAAAgAev-aAQ/original' },\n};\n\n/** 加载并缓存所有 SVG 光标资源。 */\nexport async function loadCursorIcons () {\n const downloader = new Downloader();\n const cursorIconLoaders = (Object.keys(cursorMap) as GestureCursorType[])\n .filter(key => Boolean(cursorMap[key].url))\n .map(key => new Promise<string>((resolve, reject) => {\n downloader.downloadText(cursorMap[key].url!, resolve, (status, message) => {\n reject(new Error(`Failed to load cursor icon (${status}): ${message}`));\n });\n }).then(text => cursorMap[key] = { ...cursorMap[key], content: text }));\n\n await Promise.all(cursorIconLoaders).catch((e: unknown) => {\n console.error(e);\n });\n}\n","import type { VFXItem } from '@galacean/effects';\nimport { EffectComponent, Geometry, glContext, Material, spec } from '@galacean/effects';\nimport type { Control } from '@galacean/effects-plugin-gui';\nimport { Box2, Plane } from '@galacean/effects-math/es/extension/index';\nimport type { Matrix4 } from '../math';\nimport { Vector2, Vector3, getBoxByNormalizeBox, getNormalizeBoxByBoxes, scaleBox } from '../math';\nimport { Gizmo } from '../gizmo';\nimport type { GizmoOwner } from '../gizmo-owner';\nimport { GizmoViewportUtils } from '../viewport/viewport-utils';\nimport {\n VFXItemFactory,\n getPlayerItemById,\n getItemViewBox,\n} from '../items';\nimport {\n viewPositionToWorld,\n viewSizeToWorld,\n} from '../viewport/coordinates';\nimport {\n BASELINE_SYMBOL,\n CONTROL_TEXT_GLYPH_PADDING,\n METRICS_STRING,\n toColor,\n measureTextMetrics,\n type MeasuredTextMetrics,\n} from '../drawing';\nimport type { LoadingConfig } from '../configs/types';\nimport type { ConfigChange } from '../configs/config-definition';\nimport { loadingConfig } from '../configs/loading-config';\nimport type { LoadingItemOptions, LoadingItemState, LoadingManager } from './loading-manager';\n\nconst LOADING_TIP_FONT_SIZE = 16;\nconst LOADING_TIP_FONT_FAMILY = 'sans-serif';\nconst LOADING_TIP_COLOR = 0x000000;\n\n/** 为目标元素叠加加载动画与提示文案。 */\nexport class LoadingGizmo extends Gizmo {\n readonly type = 'loading';\n private configOff?: () => void;\n private managerOff?: () => void;\n private readonly manager: LoadingManager;\n private readonly loadingBoxSize = new Vector2();\n private _idMap = new Map<string, {\n /** 归一化加载区域。 */\n loadingBox: Box2,\n /** 加载动画渲染对象。 */\n loadingVFXItem: VFXItem,\n /** 加载提示配置。 */\n tip: LoadingItemOptions,\n }>();\n\n /**\n * 创建加载覆盖层。\n * @param owner Gizmo 宿主。\n * @param manager 加载状态管理器。\n */\n constructor (owner: GizmoOwner, manager: LoadingManager) {\n super(owner);\n this.manager = manager;\n this.configOff = owner.getConfigManager().onChange(\n loadingConfig,\n change => {\n this.onConfigChange(change);\n },\n );\n this.managerOff = this.manager.on('change', () => {\n this.syncManager();\n });\n this.syncManager();\n }\n\n /** 当前 Gizmo 实例持有的可销毁渲染投影。 */\n get idMap () {\n return this._idMap;\n }\n\n /** 当前 loading 元素 id 列表(由稳定 manager 派生)。 */\n get loadingIds (): string[] {\n return this.manager.ids;\n }\n\n /** 当前加载覆盖层配置。 */\n private get config (): Readonly<LoadingConfig> {\n return this._owner.getConfigManager().get(loadingConfig);\n }\n\n /**\n * 订阅 loading 集合变化:add/delete 后回调当前全量 id 列表。\n * @param cb 收到当前全量 loading id 列表的回调\n * @returns 退订函数,调用后取消对应监听\n */\n onLoadingChange (cb: (ids: string[]) => void): () => void {\n return this.manager.on('change', change => {\n if (change.addedIds.length > 0 || change.removedIds.length > 0) {\n cb(change.ids);\n }\n });\n }\n\n /**\n * 为指定元素添加 loading 覆盖层;同一元素不可重复添加。\n * @param id 目标元素 ID\n * @param options loading 配置(文案、位置、自定义区域、是否清空选中)\n */\n add (id: string, options?: LoadingItemOptions) {\n this.manager.add(id, options);\n }\n\n /**\n * 移除指定元素的 loading 覆盖层并释放对应 VFXItem。\n * @param id 目标元素 ID\n */\n delete (id: string) {\n this.manager.delete(id);\n }\n\n /**\n * 更新指定 loading 元素的提示文案。\n * @param id 目标元素 ID\n * @param options 待合并更新的 LoadingTip 属性\n */\n updateItem (id: string, options: LoadingItemOptions) {\n this.manager.update(id, options);\n }\n\n /** 根据目标元素的实时包围盒刷新加载动画。 */\n override onUpdate (): void {\n if (this._idMap.size === 0) {\n return;\n }\n for (const [id, loadingItem] of this._idMap) {\n this.updateLoadingVFXItemTransform(id, loadingItem);\n }\n }\n\n /**\n * 绘制所有加载提示文案。\n * @param control 绘制控制器。\n */\n override draw (control: Control): void {\n if (this._idMap.size === 0) {\n return;\n }\n\n for (const [id, loadingItem] of this._idMap) {\n if (!loadingItem.tip?.text) {\n continue;\n }\n const item = getPlayerItemById(this._owner.getEngine().sceneServer.compositions[0], id);\n const itemBox = item\n ? getItemViewBox(item, GizmoViewportUtils.getContainerSize(this._owner.getEngine().canvas.parentElement!))\n : new Box2();\n const loadingBox = getBoxByNormalizeBox(itemBox, loadingItem.loadingBox);\n\n this.drawLoadingTip(control, loadingBox, itemBox, loadingItem.tip);\n }\n }\n\n /** 释放当前实例的渲染投影;稳定 LoadingManager 不随 Gizmo 重建清空。 */\n override dispose (): void {\n this.configOff?.();\n this.configOff = undefined;\n this.managerOff?.();\n this.managerOff = undefined;\n this._idMap.forEach(loadingItem => {\n this.disposeLoadingVFXItem(loadingItem.loadingVFXItem);\n });\n this._idMap.clear();\n super.dispose();\n }\n\n /**\n * 在片元着色器变化时重建加载动画对象。\n * @param change 加载配置变更。\n */\n private onConfigChange (change: ConfigChange<LoadingConfig>): void {\n if (change.previous.loadingFragment === change.current.loadingFragment) {\n return;\n }\n for (const [id, loadingItem] of this._idMap) {\n this.disposeLoadingVFXItem(loadingItem.loadingVFXItem);\n loadingItem.loadingVFXItem = this.createLoadingVFXItem();\n this.updateLoadingVFXItemTransform(id, loadingItem);\n }\n }\n\n /**\n * 绘制单条加载提示,并将文本限制在加载区域内。\n * @param control 绘制控制器。\n * @param loadingBox 加载区域。\n * @param itemBox 目标元素包围盒。\n * @param tip 加载提示配置。\n */\n private drawLoadingTip (control: Control, loadingBox: Box2, itemBox: Box2, tip: LoadingItemOptions): void {\n // 步骤 1:计算提示位置与可用宽度。\n const { x: width, y: height } = loadingBox.getSize(this.loadingBoxSize);\n\n if (!tip.text || !Number.isFinite(width) || width <= 0) {\n return;\n }\n\n const positionedLeft = tip.position\n ? itemBox.min.x + (Number.isFinite(tip.position.x) ? tip.position.x : 0)\n : loadingBox.min.x;\n const left = tip.position\n ? Math.min(Math.max(positionedLeft, loadingBox.min.x), loadingBox.max.x)\n : loadingBox.min.x;\n const availableWidth = tip.position ? loadingBox.max.x - left : width;\n\n if (availableWidth <= 0) {\n return;\n }\n\n /**\n * 测量加载提示的粗体字形。\n * @param text 提示文本。\n * @param fontSize 字号。\n * @returns 文本字形尺寸。\n */\n const measureTipText = (text: string, fontSize: number): MeasuredTextMetrics => {\n const metrics = measureTextMetrics(text, fontSize, LOADING_TIP_FONT_FAMILY, 'bold');\n\n return {\n width: metrics.width || Array.from(text).length * fontSize,\n actualBoundingBoxAscent: metrics.actualBoundingBoxAscent || fontSize * 0.8,\n actualBoundingBoxDescent: metrics.actualBoundingBoxDescent || fontSize * 0.2,\n };\n };\n\n // 步骤 2:测量文本并缩小字号以适应可用宽度。\n const measuredAtBaseSize = measureTipText(tip.text, LOADING_TIP_FONT_SIZE);\n let fontSize = measuredAtBaseSize.width > availableWidth\n ? LOADING_TIP_FONT_SIZE * availableWidth / measuredAtBaseSize.width\n : LOADING_TIP_FONT_SIZE;\n let textMetrics = measureTipText(tip.text, fontSize);\n\n if (textMetrics.width > availableWidth) {\n fontSize *= availableWidth / textMetrics.width;\n textMetrics = measureTipText(tip.text, fontSize);\n }\n\n // 步骤 3:按字形基线计算最终绘制位置。\n const textLeft = tip.position ? left : loadingBox.min.x + (width - textMetrics.width) / 2;\n const inkHeight = textMetrics.actualBoundingBoxAscent + textMetrics.actualBoundingBoxDescent;\n const top = tip.position\n ? itemBox.min.y + (Number.isFinite(tip.position.y) ? tip.position.y : 0)\n : loadingBox.min.y + (height - inkHeight) / 2;\n const probeMetrics = measureTipText(METRICS_STRING + BASELINE_SYMBOL, fontSize);\n const inkTopFromCellTop = CONTROL_TEXT_GLYPH_PADDING\n + probeMetrics.actualBoundingBoxAscent\n - textMetrics.actualBoundingBoxAscent;\n\n control.drawText(\n textLeft,\n top - inkTopFromCellTop,\n tip.text,\n fontSize,\n toColor(LOADING_TIP_COLOR, 1),\n LOADING_TIP_FONT_FAMILY,\n 'bold',\n );\n }\n\n /** 将可销毁的渲染投影同步到当前加载状态。 */\n private syncManager (): void {\n const activeIds = new Set(this.manager.ids);\n\n for (const [id, loadingItem] of this._idMap) {\n if (!activeIds.has(id)) {\n this.disposeLoadingVFXItem(loadingItem.loadingVFXItem);\n this._idMap.delete(id);\n }\n }\n for (const id of activeIds) {\n const state = this.manager.get(id);\n\n if (!state) {\n continue;\n }\n const existing = this._idMap.get(id);\n\n if (existing) {\n existing.tip = {\n ...state.tip,\n position: state.tip.position ? state.tip.position.clone() : undefined,\n };\n } else {\n this.createProjection(id, state);\n }\n }\n }\n\n /**\n * 为加载状态创建渲染投影。\n * @param id 目标元素 ID。\n * @param state 加载状态。\n */\n private createProjection (id: string, state: LoadingItemState): void {\n const item = getPlayerItemById(this._owner.getEngine().sceneServer.compositions[0], id);\n const itemViewBox = item\n ? getItemViewBox(item, GizmoViewportUtils.getContainerSize(this._owner.getEngine().canvas.parentElement!))\n : new Box2();\n const currentBox = state.loadingBox\n ? this.getViewBoxByPixelBox(state.loadingBox)\n : itemViewBox;\n\n this._idMap.set(id, {\n loadingBox: getNormalizeBoxByBoxes(itemViewBox, currentBox),\n loadingVFXItem: this.createLoadingVFXItem(),\n tip: {\n ...state.tip,\n position: state.tip.position ? state.tip.position.clone() : undefined,\n },\n });\n this.updateLoadingVFXItemTransform(id, this._idMap.get(id)!);\n }\n\n /** @returns 当前相机信息。 */\n private getCameraInfo (): { position: Vector3, matrix: Matrix4 } {\n return GizmoViewportUtils.getCameraInfo(this._owner.getEngine());\n }\n\n /** @returns 当前视口的缩放、平移与尺寸。 */\n private getViewportParams (): { scale: number, translation: Vector2, width: number, height: number } {\n const composition = this._owner.getEngine().sceneServer.compositions[0];\n const camera = composition?.camera;\n\n if (camera) {\n const viewportMatrix = camera.getViewportMatrix();\n const scale = viewportMatrix.elements[0];\n const translation = new Vector2(viewportMatrix.elements[12], viewportMatrix.elements[13]);\n const width = GizmoViewportUtils.getContainerSize(this._owner.getEngine().canvas.parentElement!).x;\n const height = GizmoViewportUtils.getContainerSize(this._owner.getEngine().canvas.parentElement!).y;\n\n return { scale, translation, width, height };\n }\n\n return { scale: 1, translation: new Vector2(), width: GizmoViewportUtils.getContainerSize(this._owner.getEngine().canvas.parentElement!).x, height: GizmoViewportUtils.getContainerSize(this._owner.getEngine().canvas.parentElement!).y };\n }\n\n /**\n * 将视图坐标下的包围盒按当前视口缩放与平移变换为实际渲染包围盒。\n * @param box 视图坐标下的包围盒\n * @returns 经视口缩放与平移后的实际渲染包围盒\n */\n private getViewBoxByPixelBox (box: Box2): Box2 {\n const { scale, translation, width, height } = this.getViewportParams();\n const center = new Vector2(width / 2, height / 2);\n const result = scaleBox(box.clone(), scale, center).translate(translation);\n\n return result;\n }\n\n /**\n * 创建承载加载动画的 VFXItem。\n * @returns 已绑定几何与材质的加载动画对象。\n */\n private createLoadingVFXItem () {\n // 步骤 1:创建加载动画对象与平面几何。\n const composition = this._owner.getEngine().sceneServer.compositions[0];\n const loadingVFXItem = VFXItemFactory.createVFXItem(composition, null, 'LoadingVFXItem', EffectComponent);\n\n this._owner.getSelection().addIgnoreIds([loadingVFXItem.getInstanceId()]);\n loadingVFXItem.type = spec.ItemType.effect;\n const effects = loadingVFXItem.getComponent(EffectComponent);\n const engine = this._owner.getEngine();\n const geometry = Geometry.create(engine, {\n attributes: {\n aPos: {\n size: 3,\n data: new Float32Array([\n -0.5, -0.5, 0,\n 0.5, -0.5, 0,\n 0.5, 0.5, 0,\n -0.5, 0.5, 0,\n ]),\n },\n aUV: {\n size: 2,\n data: new Float32Array([\n 0, 0,\n 1, 0,\n 1, 1,\n 0, 1,\n ]),\n },\n },\n indices: { data: new Uint16Array([0, 1, 2, 0, 2, 3]) },\n mode: glContext.TRIANGLES,\n drawCount: 6,\n });\n // 步骤 2:使用当前配置创建动画材质。\n const material = Material.create(engine, {\n shader: {\n vertex: `\nprecision highp float;\nattribute vec3 aPos;\nattribute vec2 aUV;\nuniform mat4 effects_MatrixVP;\nuniform mat4 effects_ObjectToWorld;\nvarying vec2 vUV;\nvoid main() {\n vUV = aUV;\n gl_Position = effects_MatrixVP * effects_ObjectToWorld * vec4(aPos, 1.0);\n}`,\n fragment: this.config.loadingFragment,\n },\n });\n\n // 步骤 3:绑定运行时几何与材质。\n // @ts-expect-error Effects 类型未暴露可写 geometry。\n effects.geometry = geometry;\n effects.material = material;\n\n return loadingVFXItem;\n }\n\n /** 释放 loading 渲染对象,并同步恢复 Selection 的命中过滤。 */\n private disposeLoadingVFXItem (item: VFXItem): void {\n this._owner.getSelection().deleteIgnoreIds([item.getInstanceId()]);\n item.dispose();\n }\n\n /**\n * 按目标元素的实时包围盒更新加载动画变换。\n * @param id 目标元素 ID。\n * @param loadingItem 对应的加载渲染投影。\n */\n private updateLoadingVFXItemTransform (id: string, loadingItem: { loadingBox: Box2, loadingVFXItem: VFXItem }): void {\n const item = getPlayerItemById(this._owner.getEngine().sceneServer.compositions[0], id);\n const containerSize = GizmoViewportUtils.getContainerSize(this._owner.getEngine().canvas.parentElement!);\n const itemViewBox = item ? getItemViewBox(item, containerSize) : new Box2();\n const currentBox = getBoxByNormalizeBox(itemViewBox, loadingItem.loadingBox);\n\n const viewPosition = new Vector2((currentBox.max.x + currentBox.min.x) / 2, (currentBox.max.y + currentBox.min.y) / 2);\n const cameraInfo = this.getCameraInfo();\n const interactionPlane = new Plane(0, new Vector3(0, 0, 1));\n const worldPosition = viewPositionToWorld(viewPosition, cameraInfo, interactionPlane, containerSize);\n const viewSize = new Vector2(currentBox.max.x - currentBox.min.x, currentBox.max.y - currentBox.min.y);\n const worldSize = viewSizeToWorld(viewSize, containerSize, loadingItem.loadingVFXItem, cameraInfo, interactionPlane);\n\n if (worldPosition) {\n loadingItem.loadingVFXItem.transform.setPosition(worldPosition.x, worldPosition.y, 0);\n }\n loadingItem.loadingVFXItem.transform.setScale(worldSize.x, worldSize.y, 1);\n }\n\n}\n","import { Gizmo } from '../gizmo';\nimport { GestureCursorType, type GestureCursorResult } from '../cursor';\nimport {\n MouseButton,\n type InputEventKey,\n type InputEventMouseButton,\n type InputEventMouseMotion,\n} from '@galacean/effects';\nimport { Vector2 } from '../math';\n\n/** 视口平移交互状态。 */\nenum DragType {\n /** 未进行平移。 */\n NONE = 'none',\n /** 正在拖拽平移。 */\n PAN = 'pan',\n}\n\n/** 通过中键或抓手模式拖拽平移视口。 */\nexport class HandGizmo extends Gizmo {\n readonly type = 'hand';\n\n /** 空格按下时下一次左键拖拽应平移视口。 */\n private panKeyPressed = false;\n\n /** 当前拖拽会话态(NONE 未建立 / PAN 平移拖拽中)。 */\n private dragType: DragType = DragType.NONE;\n\n /** 上一帧鼠标位置(拖拽平移增量计算用)。 */\n private lastPoint = new Vector2();\n\n /** 当前抓手交互对应的光标。 */\n get cursorResult (): GestureCursorResult {\n const armed = this._owner.isHandToolMode() || this.isPanning();\n const type = this.dragType === DragType.PAN\n ? GestureCursorType.ACTIVE_HAND\n : (armed ? GestureCursorType.HAND : GestureCursorType.NORMAL);\n\n return { type, angle: 0 };\n }\n\n /** @returns 是否正在平移或等待空格拖拽。 */\n isPanning (): boolean {\n return this.dragType === DragType.PAN || this.panKeyPressed;\n }\n\n /**\n * 处理空格键按下并进入待平移状态。\n * @param event 键盘按下事件。\n */\n override onKeyDown (event: InputEventKey): void {\n const code = event.physicalKeycode.toLocaleLowerCase();\n\n if (code === 'space') {\n if (this.panKeyPressed) {\n event.accept();\n } else if (!this._owner.isMouseButtonPressed()) {\n this.panKeyPressed = true;\n event.accept();\n }\n\n return;\n }\n }\n\n /**\n * 处理空格键抬起并退出待平移状态。\n * @param event 键盘抬起事件。\n */\n override onKeyUp (event: InputEventKey): void {\n if (\n event.physicalKeycode.toLocaleLowerCase() === 'space'\n && this.panKeyPressed\n ) {\n this.panKeyPressed = false;\n event.accept();\n }\n }\n\n /**\n * 根据触发键开始视口平移。\n * @param event 鼠标按下事件。\n */\n override onMouseDown (event: InputEventMouseButton): void {\n const button = event.buttonIndex;\n // 使用触发键判断,避免并发按键掩码影响中键平移。\n const shouldPan = button === MouseButton.Middle\n || ((this._owner.isHandToolMode() || this.panKeyPressed) && button === MouseButton.Left);\n\n if (!shouldPan) {\n if (this._owner.isHandToolMode() || this.isPanning()) {\n this._owner.setCursor(this.cursorResult);\n event.accept();\n }\n\n return;\n }\n this.beginPan(event);\n this._owner.setCursor(this.cursorResult);\n event.accept();\n }\n\n /**\n * 更新悬停阶段的视口平移。\n * @param event 鼠标移动事件。\n */\n override onMouseMove (event: InputEventMouseMotion): void {\n this.handlePointerMove(event);\n }\n\n /**\n * 更新拖拽阶段的视口平移。\n * @param event 鼠标拖拽事件。\n */\n override onMouseDrag (event: InputEventMouseMotion): void {\n this.handlePointerMove(event);\n }\n\n /**\n * 结束视口平移。\n * @param event 鼠标抬起事件。\n */\n override onMouseUp (event: InputEventMouseButton): void {\n const handled = this.endPan();\n\n if (handled || this._owner.isHandToolMode() || this.isPanning()) {\n this._owner.setCursor(this.cursorResult);\n event.accept();\n }\n }\n\n /** 释放视口平移状态。 */\n override dispose (): void {\n this.endPan();\n super.dispose();\n }\n\n /**\n * 处理指针移动并更新光标。\n * @param event 鼠标移动事件。\n */\n private handlePointerMove (event: InputEventMouseMotion): void {\n const handled = this.pan(event);\n\n if (handled || this._owner.isHandToolMode() || this.isPanning()) {\n this._owner.setCursor(this.cursorResult);\n event.accept();\n }\n }\n\n /**\n * 进入视口平移会话。\n * @param event 鼠标按下事件。\n */\n private beginPan (event: InputEventMouseButton): void {\n this.dragType = DragType.PAN;\n this.lastPoint = new Vector2(event.position.x, event.position.y);\n }\n\n /**\n * 将鼠标位移应用到视口。\n * @param event 鼠标移动事件。\n * @returns 视口是否发生变化。\n */\n private pan (event: InputEventMouseMotion): boolean {\n if (this.dragType !== DragType.PAN) {\n return false;\n }\n const currentPoint = new Vector2(event.position.x, event.position.y);\n const shift = new Vector2().subtractVectors(currentPoint, this.lastPoint);\n const { shiftPressed } = event;\n\n shift.x = shiftPressed && shift.y !== 0\n ? Math.sqrt(shift.x ** 2 + shift.y ** 2) * shift.y / Math.abs(shift.y)\n : shift.x;\n shift.y = shiftPressed ? 0 : shift.y;\n const changed = this._owner.getViewportNavigation().panByViewDelta(\n shift,\n new Vector2(event.position.x, event.position.y),\n 'hand-pan',\n );\n\n this.lastPoint.copyFrom(currentPoint);\n\n return changed;\n }\n\n /** @returns 结束前是否存在平移会话。 */\n private endPan (): boolean {\n const handled = this.dragType === DragType.PAN;\n\n this.dragType = DragType.NONE;\n\n return handled;\n }\n}\n","import { MouseButton, MouseButtonMask, type InputEventMouseButton, type InputEventMouseMotion, spec, Texture } from '@galacean/effects';\nimport type { Control } from '@galacean/effects-plugin-gui';\nimport { Gizmo } from '../gizmo';\nimport type { GizmoOwner } from '../gizmo-owner';\nimport { GizmoViewportUtils } from '../viewport/viewport-utils';\nimport { GizmoType } from '../gizmo-type';\nimport { GestureCursorType, type GestureCursorResult } from '../cursor';\nimport { Box2 } from '@galacean/effects-math/es/extension/index';\nimport { Vector2 } from '../math';\nimport { VideoComponent } from '@galacean/effects-plugin-multimedia';\nimport type { IconConfig } from '../configs/types';\nimport { iconConfig } from '../configs/builtin-configs';\nimport type { ConfigChange } from '../configs/config-definition';\nimport { getPlayerItemById, getItemViewBox, isGeneratorPlayerItem, isVideoGeneratorPlayerItem } from '../items';\n\n/** 辅助渲染 Icon 类型。 */\nexport enum IconType {\n /** 视频播放 Icon */\n VIDEO_PLAY = 'video-play',\n /** 视频生成器 Icon */\n VIDEO_GENERATOR = 'video-generator',\n /** 图片生成器 Icon */\n IMAGE_GENERATOR = 'image-generator',\n}\n\n/** 元素辅助 Icon 结果。 */\nexport type IconResult = {\n /** 选中元素 Id */\n id: string,\n /** Icon 类型 */\n type: IconType,\n /** 包围盒信息 */\n box: Box2,\n};\n\n/** 元素辅助 Icon 交互参数。 */\nexport type IconInteractionParam = {\n /** 鼠标悬停的视频元素 ID */\n hoverVideoId?: string,\n};\n\n/** 渲染元素辅助 Icon(视频播放按钮、生成器图标等)。 */\nexport class IconGizmo extends Gizmo {\n type = GizmoType.ICON;\n\n results: IconResult[] = [];\n\n interactionParam: IconInteractionParam = {};\n\n /** 光标结果(GestureCursorResult) */\n cursorResult: GestureCursorResult = {\n type: GestureCursorType.NORMAL,\n angle: 0,\n };\n private configOff?: () => void;\n\n /** 图标纹理缓存,按 IconType 懒加载。 */\n private iconTextures = new Map<IconType, Texture>();\n /** 图标纹理加载中的 Promise,避免重复发起加载。 */\n private iconTexturePromises = new Map<IconType, Promise<Texture>>();\n\n /**\n * 创建元素辅助图标 Gizmo。\n * @param owner Gizmo 宿主。\n */\n constructor (owner: GizmoOwner) {\n super(owner);\n this.configOff = owner.getConfigManager().onChange(\n iconConfig,\n change => {\n this.onConfigChange(change);\n },\n );\n }\n\n /** 当前图标配置。 */\n get config (): Readonly<IconConfig> {\n return this._owner.getConfigManager().get(iconConfig);\n }\n\n /**\n * 更新视频播放图标的悬停状态与光标。\n * @param event 鼠标移动事件。\n */\n override onMouseMove (event: InputEventMouseMotion): void {\n const hover = this._owner.getMousePosition();\n\n this.interactionParam.hoverVideoId = this.computeHoverVideoId(hover);\n const videoPlayResult = this.results.find(result => result.type === IconType.VIDEO_PLAY);\n const hit = !!videoPlayResult?.box.containsPoint(hover);\n\n this.cursorResult = hit\n ? { type: GestureCursorType.POINTER, angle: 0 }\n : { type: GestureCursorType.NORMAL, angle: 0 };\n this._owner.setCursor(this.cursorResult);\n if (event.buttonMask === MouseButtonMask.None && hit) {\n event.accept();\n }\n }\n\n /** 清除离开交互层后的图标悬停状态。 */\n override onMouseLeave (): void {\n this.interactionParam.hoverVideoId = undefined;\n this.cursorResult = { type: GestureCursorType.NORMAL, angle: 0 };\n this._owner.setCursor(this.cursorResult);\n }\n\n /**\n * 点击视频播放图标时发送播放事件。\n * @param event 鼠标按下事件。\n */\n override onMouseDown (event: InputEventMouseButton): void {\n if (event.buttonIndex !== MouseButton.Left) {\n return;\n }\n this.refreshVideoIconId(new Vector2(event.position.x, event.position.y));\n const videoPlayResult = this.results.find(result => result.type === IconType.VIDEO_PLAY);\n\n if (!videoPlayResult?.box.containsPoint(new Vector2(event.position.x, event.position.y))) {\n return;\n }\n if (videoPlayResult) {\n const playerItem = getPlayerItemById(this._owner.getEngine().sceneServer.compositions[0], videoPlayResult.id);\n let time = 0;\n\n if (playerItem?.type === spec.ItemType.video) {\n const videoComponent = playerItem.getComponent(VideoComponent);\n\n time = videoComponent?.getCurrentTime() ?? 0;\n }\n this._owner.emit('videoplay', {\n source: this,\n id: videoPlayResult.id,\n time,\n });\n this.refreshCursorResult();\n this._owner.setCursor(this.cursorResult);\n }\n\n event.accept();\n }\n\n /** 根据当前指针与图标结果刷新光标。 */\n refreshCursorResult (): void {\n const hover = this._owner.getMousePosition();\n const videoPlayResult = this.results.find(result => result.type === IconType.VIDEO_PLAY);\n const isPreSelected = !!hover && !!videoPlayResult?.box.containsPoint(hover);\n\n this.cursorResult = isPreSelected\n ? { type: GestureCursorType.POINTER, angle: 0 }\n : { type: GestureCursorType.NORMAL, angle: 0 };\n }\n\n /**\n * 更新悬停视频 ID 与图标结果。\n * @param mouse 鼠标位置。\n */\n refreshVideoIconId (mouse: Vector2) {\n this.interactionParam.hoverVideoId = this.computeHoverVideoId(mouse);\n this.refreshResults();\n }\n\n /** 刷新所有待绘制的元素辅助图标。 */\n override onUpdate (): void {\n this.refreshResults();\n }\n\n /**\n * 绘制视频播放与生成器图标。\n * @param control 绘制控制器。\n */\n override draw (control: Control): void {\n if (!this.results.length) {\n return;\n }\n\n this.results.forEach(result => {\n const texture = this.getIconTexture(result.type, control.engine);\n\n if (!texture || texture.isDestroyed) {\n return;\n }\n const center = result.box.getCenter();\n const size = result.box.getSize();\n\n control.drawTexture(center.x - size.x / 2, center.y - size.y / 2, size.x, size.y, texture);\n });\n }\n\n /** 释放配置监听器。 */\n override dispose (): void {\n this.configOff?.();\n this.configOff = undefined;\n super.dispose();\n }\n\n /**\n * 在图标 URL 变化时清除对应纹理缓存。\n * @param change 图标配置变更。\n */\n private onConfigChange (change: ConfigChange<IconConfig>): void {\n const checks: { type: IconType, key: keyof IconConfig }[] = [\n { type: IconType.VIDEO_PLAY, key: 'videoPlayUrl' },\n { type: IconType.IMAGE_GENERATOR, key: 'imageGeneratorUrl' },\n { type: IconType.VIDEO_GENERATOR, key: 'videoGeneratorUrl' },\n ];\n\n for (const { type, key } of checks) {\n if (change.previous[key] !== change.current[key]) {\n const texture = this.iconTextures.get(type);\n\n if (texture && !texture.isDestroyed) {\n texture.offloadData();\n }\n this.iconTextures.delete(type);\n this.iconTexturePromises.delete(type);\n }\n }\n }\n\n /** 刷新视频播放与生成器图标的绘制结果。 */\n private refreshResults (): void {\n // 步骤 1:获取当前合成并重置绘制结果。\n const playerComposition = this._owner.getEngine().sceneServer.compositions[0];\n\n if (!playerComposition) {\n return;\n }\n\n this.results = [];\n\n const { videoPlayWidth, videoPlayHeight, videoPlayShift, generatorWidth, generatorHeight } = this.config;\n\n // 步骤 2:为当前悬停视频生成播放图标。\n const hoverVideoId = this.interactionParam.hoverVideoId;\n\n if (hoverVideoId) {\n const playerItem = getPlayerItemById(this._owner.getEngine().sceneServer.compositions[0], hoverVideoId);\n\n if (playerItem) {\n const itemViewBox = getItemViewBox(\n playerItem,\n GizmoViewportUtils.getContainerSize(this._owner.getEngine().canvas.parentElement!),\n );\n const size = itemViewBox.getSize();\n\n if (!(size.x < 50 || size.y < 100)) {\n const { max } = itemViewBox;\n\n const position = new Vector2(max.x - videoPlayShift[0], max.y - videoPlayShift[1]);\n const boxSize = new Vector2(videoPlayWidth, videoPlayHeight);\n\n this.results.push({\n id: hoverVideoId,\n type: IconType.VIDEO_PLAY,\n box: new Box2().setFromCenterAndSize(position, boxSize),\n });\n }\n }\n }\n\n // 步骤 3:为生成器对象生成类型图标。\n const generatorItems = playerComposition.items.filter(item => isGeneratorPlayerItem(item));\n\n generatorItems.forEach(item => {\n const itemViewBox = getItemViewBox(\n item,\n GizmoViewportUtils.getContainerSize(this._owner.getEngine().canvas.parentElement!),\n );\n const position = itemViewBox.getCenter();\n const size = new Vector2(generatorWidth, generatorHeight).multiply(GizmoViewportUtils.getViewScale(this._owner.getEngine()));\n\n this.results.push({\n id: item.getInstanceId(),\n type: isVideoGeneratorPlayerItem(item) ? IconType.VIDEO_GENERATOR : IconType.IMAGE_GENERATOR,\n box: new Box2().setFromCenterAndSize(position, size),\n });\n });\n }\n\n /**\n * 按 IconType 取得图标 URL。\n * @param type 图标类型\n * @returns 对应图标 URL,无匹配时返回空字符串\n */\n private getIconUrl (type: IconType): string {\n const { videoPlayUrl, imageGeneratorUrl, videoGeneratorUrl } = this.config;\n\n switch (type) {\n case IconType.VIDEO_PLAY: return videoPlayUrl;\n case IconType.IMAGE_GENERATOR: return imageGeneratorUrl;\n case IconType.VIDEO_GENERATOR: return videoGeneratorUrl;\n default: return '';\n }\n }\n\n /**\n * 获取图标纹理(懒加载)。命中且未销毁则直接返回;否则发起一次异步加载并返回\n * undefined(本帧跳过该图标,加载完成后由持续渲染循环自动重绘)。\n * @param type 图标类型\n * @param engine effects 引擎实例(取自 control)\n * @returns 命中且未销毁的缓存纹理;未命中且发起异步加载时返回 undefined\n */\n private getIconTexture (type: IconType, engine: Control['engine']): Texture | undefined {\n const cached = this.iconTextures.get(type);\n\n if (cached && !cached.isDestroyed) {\n return cached;\n }\n if (!this.iconTexturePromises.has(type)) {\n const url = this.getIconUrl(type);\n\n if (!url) {\n return undefined;\n }\n const promise = Texture.fromImage(url, engine).then(texture => {\n this.iconTextures.set(type, texture);\n\n return texture;\n });\n\n this.iconTexturePromises.set(type, promise);\n }\n\n return undefined;\n }\n\n /**\n * 查找鼠标命中的最上层视频对象。\n * @param mouse 鼠标位置。\n * @returns 命中视频对象的 ID。\n */\n private computeHoverVideoId (mouse: Vector2): string | undefined {\n const playerComposition = this._owner.getEngine().sceneServer.compositions[0];\n\n if (!playerComposition) {\n return undefined;\n }\n const videoItems = playerComposition.items.filter(item => item.type === spec.ItemType.video).reverse();\n\n for (const item of videoItems) {\n const itemViewBox = getItemViewBox(\n item,\n GizmoViewportUtils.getContainerSize(this._owner.getEngine().canvas.parentElement!),\n );\n\n if (itemViewBox.containsPoint(mouse)) {\n return item.getInstanceId();\n }\n }\n\n return undefined;\n }\n}\n","import {\n InputEventMouseMotion,\n MouseButtonMask,\n type InputEventKey,\n type InputEventMouse,\n type InputEventMouseButton,\n type InputEventWithModifiers,\n type Engine,\n} from '@galacean/effects';\nimport { Control, FocusMode, MouseFilter } from '@galacean/effects-plugin-gui';\nimport { isDragThresholdReached } from '../drag-threshold';\nimport { Vector2 } from '../math';\n\n/** 拖拽距离阈值状态。 */\nenum DragThresholdState {\n /** 未开始按键会话。 */\n Idle,\n /** 已按下但尚未越过阈值。 */\n Pending,\n /** 已越过拖拽阈值。 */\n Crossed,\n}\n\n/** 维护画布输入状态并将绘制和交互事件转发给 Gizmo 层。 */\nexport class GizmoViewport extends Control {\n /** 鼠标进入回调。 */\n onMouseEnterCallback: ((location: Vector2) => void) | null = null;\n /** 鼠标悬停移动回调。 */\n onMouseMoveCallback: ((event: InputEventMouseMotion) => void) | null = null;\n /** 鼠标拖拽回调。 */\n onMouseDragCallback: ((event: InputEventMouseMotion) => void) | null = null;\n /** 鼠标离开回调。 */\n onMouseLeaveCallback: (() => void) | null = null;\n /** 鼠标滚轮回调。 */\n onMouseWheelCallback: ((event: InputEventMouseButton) => void) | null = null;\n /** 鼠标按下回调。 */\n onMouseDownCallback: ((event: InputEventMouseButton) => void) | null = null;\n /** 鼠标抬起回调。 */\n onMouseUpCallback: ((event: InputEventMouseButton) => void) | null = null;\n /** 键盘按下回调。 */\n onKeyDownCallback: ((event: InputEventKey) => void) | null = null;\n /** 键盘抬起回调。 */\n onKeyUpCallback: ((event: InputEventKey) => void) | null = null;\n /** 每帧更新回调。 */\n onUpdateCallback: (() => void) | null = null;\n /** 绘制回调。 */\n drawCallBack: (() => void) | null = null;\n\n private readonly mousePosition = new Vector2();\n private readonly globalMousePosition = new Vector2();\n private readonly dragStart = new Vector2();\n private mouseInside = false;\n private mouseButtonMask = MouseButtonMask.None;\n private dragThresholdState = DragThresholdState.Idle;\n private shiftPressed = false;\n private altPressed = false;\n private metaPressed = false;\n private ctrlPressed = false;\n\n /**\n * @param engine Effects 引擎实例\n */\n constructor (engine: Engine) {\n super(engine);\n this.mouseFilter = MouseFilter.Pass;\n this.focusMode = FocusMode.Click;\n this.mouseForcePassScrollEvents = false;\n this.setAnchorsAndOffsetsPreset('fullRect');\n }\n\n /**\n * 在每帧更新时触发 Gizmo 更新回调。\n * @param _deltaTime 帧间隔\n */\n override update (_deltaTime: number): void {\n this.onUpdateCallback?.();\n }\n\n /** 触发 Gizmo 绘制回调。 */\n override draw (): void {\n this.drawCallBack?.();\n }\n\n /**\n * 记录鼠标进入位置并转发事件。\n * @param location 鼠标本地坐标\n */\n override onMouseEnter (location: Vector2): void {\n this.mouseInside = true;\n this.mousePosition.copyFrom(location);\n this.onMouseEnterCallback?.(location);\n }\n\n /**\n * 更新输入状态,并按按键状态分发移动或拖拽事件。\n * @param event 鼠标移动事件\n */\n override onMouseMove (event: InputEventMouseMotion): void {\n this.recordMouseInput(event);\n const hasPressedButtons = event.buttonMask !== MouseButtonMask.None;\n\n if (\n hasPressedButtons\n && this.dragThresholdState === DragThresholdState.Pending\n && isDragThresholdReached(\n this.dragStart.x,\n this.dragStart.y,\n event.position.x,\n event.position.y,\n )\n ) {\n this.dragThresholdState = DragThresholdState.Crossed;\n }\n\n if (hasPressedButtons) {\n this.onMouseDragCallback?.(event);\n } else {\n this.onMouseMoveCallback?.(event);\n }\n }\n\n /** 记录鼠标离开并转发事件。 */\n override onMouseLeave (): void {\n this.mouseInside = false;\n this.onMouseLeaveCallback?.();\n }\n\n /**\n * 更新输入状态并转发滚轮事件。\n * @param event 鼠标滚轮事件\n */\n override onMouseWheel (event: InputEventMouseButton): void {\n this.recordMouseInput(event);\n this.onMouseWheelCallback?.(event);\n }\n\n /**\n * 开始按键会话并记录拖拽起点。\n * @param event 鼠标按下事件\n */\n override onMouseDown (event: InputEventMouseButton): void {\n this.recordMouseInput(event);\n this.dragStart.copyFrom(event.position);\n this.dragThresholdState = DragThresholdState.Pending;\n this.onMouseDownCallback?.(event);\n }\n\n /**\n * 结束按键会话并重置拖拽阈值。\n * @param event 鼠标抬起事件\n */\n override onMouseUp (event: InputEventMouseButton): void {\n this.recordMouseInput(event);\n this.dragThresholdState = DragThresholdState.Idle;\n this.onMouseUpCallback?.(event);\n }\n\n /**\n * 更新修饰键状态并转发键盘按下事件。\n * @param event 键盘按下事件\n */\n override onKeyDown (event: InputEventKey): void {\n this.recordModifiers(event);\n this.onKeyDownCallback?.(event);\n }\n\n /**\n * 更新修饰键状态并转发键盘抬起事件。\n * @param event 键盘抬起事件\n */\n override onKeyUp (event: InputEventKey): void {\n this.recordModifiers(event);\n this.onKeyUpCallback?.(event);\n }\n\n /** @returns 当前鼠标本地坐标。 */\n getMousePosition (): Vector2 {\n return this.mousePosition;\n }\n\n /** @returns 鼠标是否位于控件内。 */\n isMouseInside (): boolean {\n return this.mouseInside;\n }\n\n /** @returns 当前是否有鼠标按钮按下。 */\n isMouseButtonPressed (): boolean {\n return this.mouseButtonMask !== MouseButtonMask.None;\n }\n\n /** @returns 当前按键会话是否已越过拖拽阈值。 */\n hasCrossedDragThreshold (): boolean {\n return this.dragThresholdState === DragThresholdState.Crossed;\n }\n\n /** @returns 使用当前输入快照创建的鼠标移动事件。 */\n createMouseEventAtCurrentPosition (): InputEventMouseMotion {\n const event = new InputEventMouseMotion();\n\n event.position.copyFrom(this.mousePosition);\n event.globalPosition.copyFrom(this.globalMousePosition);\n event.buttonMask = this.mouseButtonMask;\n event.pressed = this.isMouseButtonPressed();\n event.shiftPressed = this.shiftPressed;\n event.altPressed = this.altPressed;\n event.metaPressed = this.metaPressed;\n event.ctrlPressed = this.ctrlPressed;\n\n return event;\n }\n\n /** 释放回调和输入状态。 */\n override onDestroy (): void {\n this.onMouseEnterCallback = null;\n this.onMouseMoveCallback = null;\n this.onMouseDragCallback = null;\n this.onMouseLeaveCallback = null;\n this.onMouseWheelCallback = null;\n this.onMouseDownCallback = null;\n this.onMouseUpCallback = null;\n this.onKeyDownCallback = null;\n this.onKeyUpCallback = null;\n this.onUpdateCallback = null;\n this.drawCallBack = null;\n this.mousePosition.setZero();\n this.globalMousePosition.setZero();\n this.mouseInside = false;\n this.mouseButtonMask = MouseButtonMask.None;\n this.dragThresholdState = DragThresholdState.Idle;\n this.dragStart.setZero();\n this.shiftPressed = false;\n this.altPressed = false;\n this.metaPressed = false;\n this.ctrlPressed = false;\n super.onDestroy();\n }\n\n /**\n * 记录鼠标位置与修饰键状态。\n * @param event 鼠标事件\n */\n private recordMouseInput (event: InputEventMouse): void {\n this.mousePosition.copyFrom(event.position);\n this.globalMousePosition.copyFrom(event.globalPosition);\n this.mouseButtonMask = event.buttonMask;\n this.recordModifiers(event);\n }\n\n /**\n * 记录修饰键状态。\n * @param event 带修饰键的输入事件\n */\n private recordModifiers (event: InputEventWithModifiers): void {\n this.shiftPressed = event.shiftPressed;\n this.altPressed = event.altPressed;\n this.metaPressed = event.metaPressed;\n this.ctrlPressed = event.ctrlPressed;\n }\n}\n","import { type Engine, type InputEvent, type InputEventKey, type InputEventMouse, type InputEventMouseButton, type InputEventMouseMotion } from '@galacean/effects';\nimport { Control, MouseFilter, type ControlEvent } from '@galacean/effects-plugin-gui';\nimport { cursorMap, loadCursorIcons } from './cursor-icons';\nimport type { Gizmo } from './gizmo';\nimport type { GizmoOwner, SelectionTransformKind } from './gizmo-owner';\nimport { GizmoManager, type GizmoErrorPhase } from './gizmo-manager';\nimport { GestureCursorType, type GestureCursorResult } from './cursor';\nimport type { HoveringResults } from './selection/selection';\nimport type { ConfigManager } from './configs/config-manager';\nimport { selectionPreviewConfig } from './configs/builtin-configs';\nimport { Vector2, getTransformedBoxCorners } from './math';\nimport { FrameManager } from './frame/frame-manager';\nimport { Selection } from './selection/selection';\nimport { SnapManager } from './selection/snap-manager';\nimport { LoadingManager } from './gizmos/loading-manager';\nimport { LoadingGizmo } from './gizmos/loading-gizmo';\nimport { HandGizmo } from './gizmos/hand-gizmo';\nimport { IconGizmo } from './gizmos/icon-gizmo';\nimport { drawCorners, toColor } from './drawing';\nimport {\n getItemViewTransform,\n getPlayerItemById,\n pauseEffectsItem,\n pauseVideoItem,\n playEffectsItem,\n playVideoItem,\n} from './items';\nimport { GizmoViewportUtils, ViewportNavigationController } from './viewport';\nimport { GizmoTool } from './gizmo-tool';\nimport { HandGizmoTool } from './gizmo-tools/hand-gizmo-tool';\nimport { DefaultSelectionMode, type EditMode } from './modes';\nimport { GizmoViewport } from './viewport/gizmo-viewport';\nimport type { GizmoOwnerEvents } from './gizmo-action';\n\n/** Runtime Control 输入事件的派发阶段。 */\nenum ControlInputPhase {\n /** 鼠标进入交互区域。 */\n MouseEnter,\n /** 鼠标悬停移动。 */\n MouseMove,\n /** 鼠标拖拽移动。 */\n MouseDrag,\n /** 鼠标离开交互区域。 */\n MouseLeave,\n /** 鼠标滚轮输入。 */\n MouseWheel,\n /** 鼠标按下。 */\n MouseDown,\n /** 鼠标抬起。 */\n MouseUp,\n /** 键盘按下。 */\n KeyDown,\n /** 键盘抬起。 */\n KeyUp,\n}\n\n/** Gizmo 错误上报接口。 */\nexport interface GizmoErrorMonitor {\n /**\n * 上报指定阶段的 Gizmo 错误。\n * @param error 原始错误。\n * @param phase 错误发生阶段。\n * @param ctx 错误上下文。\n */\n report(error: unknown, phase: GizmoErrorPhase, ctx: {\n /** 发生错误的 Gizmo 类型。 */\n gizmoType?: string,\n }): void,\n}\n\n/** 接收运行时输入,并协调 Gizmo、选区和视口导航。 */\nexport class GestureHandler extends Control implements GizmoOwner {\n /** 抓手与滚轮共享的视口导航控制器。 */\n private viewportNavigation: ViewportNavigationController;\n\n /** 当前对外可观察的 hover 命中结果。 */\n private hoveringResults: HoveringResults = {};\n\n /** Runtime Control 输入入口;持有输入状态并完成 Move/Drag 分流。 */\n private gizmoViewport: GizmoViewport | undefined;\n\n /** 所有 Gizmo 共享的画板模型。 */\n private frameManager: FrameManager;\n\n /** 交互上下文共享的吸附器;跨图重建保持同一实例。 */\n private snapManager: SnapManager;\n\n /** 加载状态管理器。 */\n private loadingManager = new LoadingManager();\n\n /** Gizmo 生命周期管理器。 */\n private gizmoManager: GizmoManager;\n\n /** 当前激活的工具。 */\n private activeGizmoTool = new GizmoTool(this);\n\n /** 当前编辑模式。 */\n private editMode: EditMode;\n\n /** 选中状态与命中查询器。 */\n private selection: Selection;\n\n /** 当前 hover 的元素;用于在目标切换、离开或销毁时结束媒体预览。 */\n private hoveredMediaItemId: string | undefined;\n\n /** 错误上报器(按需注入,未注入时不生效)。 */\n private errorMonitor: GizmoErrorMonitor | undefined;\n\n /** 是否屏蔽所有交互。 */\n private _ignoreInteraction = false;\n /** 当前指针序列捕获的 Gizmo。 */\n private capturedGizmo: Gizmo | undefined;\n\n /** 独立于指针捕获者的选区变换状态。 */\n private selectionTransformKind: SelectionTransformKind = 'idle';\n /** 等待指针序列结束后销毁的退场 Gizmo。 */\n private gizmosToDispose: Gizmo[] = [];\n\n /**\n * 悬停目标变化时同步视频与动效预览。\n * @param preSelectedId 新悬停元素 ID。\n */\n private onPreselectChange = ({ preSelectedId }: { preSelectedId: string | undefined }): void => {\n const previousId = this.hoveredMediaItemId;\n const previewEnabled = this.gizmoManager.configs\n .get(selectionPreviewConfig)\n .videoPreSelectedPlay;\n\n if (preSelectedId && previewEnabled) {\n playVideoItem(this.engine, preSelectedId);\n playEffectsItem(this.engine, preSelectedId);\n }\n if (previousId) {\n pauseVideoItem(this.engine, previousId);\n pauseEffectsItem(this.engine, previousId);\n }\n\n this.hoveredMediaItemId = preSelectedId;\n };\n\n /**\n * 创建手势处理器并装配基础交互状态。\n * @param engine Effects 引擎。\n */\n constructor (engine: Engine) {\n super(engine);\n this.mouseFilter = MouseFilter.Pass;\n this.mouseForcePassScrollEvents = false;\n this.setAnchorsAndOffsetsPreset('fullRect');\n this.frameManager = new FrameManager(engine);\n this.gizmoManager = new GizmoManager();\n this.viewportNavigation = new ViewportNavigationController(this);\n this.selection = new Selection(engine, this.hoveringResults);\n this.snapManager = new SnapManager(this);\n this.editMode = this.createDefaultEditMode();\n\n this.selection.on('preselectchange', this.onPreselectChange);\n this.createViewport();\n void loadCursorIcons();\n }\n\n /** 订阅原生控件或 Gizmo 业务事件。 */\n override on<E extends keyof (ControlEvent & GizmoOwnerEvents)> (\n eventName: E,\n listener: (...args: (ControlEvent & GizmoOwnerEvents)[E]) => void,\n ): () => void;\n override on (eventName: any, listener: any): () => void {\n super.on(eventName, listener);\n\n return () => {\n this.off(eventName, listener);\n };\n }\n\n /** 取消原生控件或 Gizmo 业务事件订阅。 */\n override off<E extends keyof (ControlEvent & GizmoOwnerEvents)> (\n eventName: E,\n listener: (...args: (ControlEvent & GizmoOwnerEvents)[E]) => void,\n ): void;\n override off (eventName: any, listener: any): void {\n super.off(eventName, listener);\n }\n\n /** 发出 Gizmo 业务事件。 */\n emit<E extends keyof GizmoOwnerEvents> (eventName: E, ...args: GizmoOwnerEvents[E]): void {\n // Control does not expose emit yet; use its existing event storage.\n const emitter = (this as any).eventEmitter;\n\n emitter.emit(eventName, ...args);\n }\n\n /** 是否屏蔽交互。 */\n get ignoreInteraction (): boolean {\n return this._ignoreInteraction;\n }\n\n /**\n * 设置是否屏蔽所有 Gizmo 与选区交互。\n * @param state 是否屏蔽交互。\n */\n set ignoreInteraction (state: boolean) {\n if (state === this._ignoreInteraction) {\n return;\n }\n this._ignoreInteraction = state;\n }\n\n /** @returns 当前选区与命中查询对象。 */\n getSelection (): Selection {\n return this.selection;\n }\n\n /** @returns 当前画板管理器。 */\n getFrameManager (): FrameManager {\n return this.frameManager;\n }\n\n /** @returns 共享吸附管理器。 */\n getSnapManager (): SnapManager {\n return this.snapManager;\n }\n\n /** @returns 加载状态管理器。 */\n getLoadingManager (): LoadingManager {\n return this.loadingManager;\n }\n\n /** @returns 共享视口导航控制器。 */\n getViewportNavigation (): ViewportNavigationController {\n return this.viewportNavigation;\n }\n\n /** @returns 当前选区变换状态。 */\n getSelectionTransformKind (): SelectionTransformKind {\n return this.selectionTransformKind;\n }\n\n /**\n * 设置选区变换状态。\n * @param kind 选区变换状态。\n */\n setSelectionTransformKind (kind: SelectionTransformKind): void {\n this.selectionTransformKind = kind;\n }\n\n /** @returns 当前激活的编辑模式。 */\n getActiveEditMode (): EditMode {\n return this.editMode;\n }\n\n /**\n * 切换编辑模式并重建 Gizmo 图。\n * @param mode 新编辑模式。\n */\n setActiveEditMode (mode: EditMode): void {\n if (mode === this.editMode) {\n return;\n }\n this.commitEditMode(mode);\n this.redispatchMouseAtCurrentPosition();\n }\n\n /** 恢复新的默认编辑模式。 */\n resetEditMode (): void {\n if (this.editMode instanceof DefaultSelectionMode) {\n return;\n }\n this.setActiveEditMode(this.createDefaultEditMode());\n }\n\n /** 初始化当前工具与编辑模式对应的 Gizmo 图。 */\n init (): void {\n try {\n this.rebuildGizmos();\n } catch (error) {\n this.errorMonitor?.report(error, 'gizmo-init', { gizmoType: 'unknown' });\n throw error;\n }\n }\n\n /** @returns 当前鼠标的 Control 本地坐标。 */\n getMousePosition (): Vector2 {\n return this.gizmoViewport?.getMousePosition() ?? new Vector2();\n }\n\n /**\n * 更新交互层的 CSS 光标。\n * @param result Gizmo 光标结果。\n */\n setCursor (result: GestureCursorResult): void {\n const control = this.gizmoViewport;\n\n if (!control) {\n return;\n }\n let cssCursor = 'default';\n\n if (result.type === GestureCursorType.CIRCLE) {\n const radius = result.radius || 10;\n const svgStr = encodeURIComponent(`<svg width=\"${radius * 2}\" height=\"${radius * 2}\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"${radius}\" cy=\"${radius}\" r=\"${radius}\" fill=\"rgba(255, 255, 255, 0.6)\" stroke=\"#6A34FF\" stroke-width=\"1\" /></svg>`);\n\n cssCursor = `url(\"data:image/svg+xml,${svgStr}\") ${radius} ${radius}, auto`;\n } else {\n const cursor = cursorMap[result.type];\n\n if (cursor?.type === 'svg') {\n const pointerShift = 16;\n const svg = encodeURIComponent(cursor.content.replace('rotate(0.00)', `rotate(${result.angle ?? 0})`));\n\n cssCursor = `url(\"data:image/svg+xml,${svg}\") ${pointerShift} ${pointerShift}, auto`;\n } else if (cursor?.type === 'preset') {\n cssCursor = cursor.content;\n }\n }\n control.defaultCursorShape = cssCursor;\n }\n\n /** @returns 当前 Gizmo 生命周期管理器。 */\n getGizmoManager (): GizmoManager {\n return this.gizmoManager;\n }\n\n /** @returns Effects 引擎。 */\n getEngine (): Engine {\n return this.engine;\n }\n\n /** @returns Gizmo 配置管理器。 */\n getConfigManager (): ConfigManager {\n return this.gizmoManager.configs;\n }\n\n /** @returns 当前是否为抓手工具。 */\n isHandToolMode (): boolean {\n return this.activeGizmoTool instanceof HandGizmoTool;\n }\n\n /** @returns 当前是否有鼠标按键按下。 */\n isMouseButtonPressed (): boolean {\n return this.gizmoViewport?.isMouseButtonPressed() ?? false;\n }\n\n /** 重建公共 Gizmo 与当前工具或编辑模式的 Gizmo 图。 */\n rebuildGizmos (): void {\n const specificGizmos = this.activeGizmoTool.createGizmos();\n\n this.gizmosToDispose.push(...this.gizmoManager.activeGizmos);\n this.gizmoManager.activeGizmos = [\n ...this.createCommonBeforeToolSwitch(),\n ...specificGizmos,\n ];\n }\n\n /**\n * 切换活动工具并协调编辑模式。\n * @param gizmoTool 新活动工具。\n */\n setActiveTool (gizmoTool: GizmoTool): void {\n this.activeGizmoTool = gizmoTool;\n this.commitEditMode(this.resolveEditModeForTool(gizmoTool));\n this.disposeQueuedGizmos();\n }\n\n /**\n * 注入错误上报器(由宿主调用,未注入时不影响现有行为)。\n * @param reporter 错误上报器实例\n */\n setErrorMonitor (reporter?: GizmoErrorMonitor): void {\n this.errorMonitor = reporter;\n }\n\n /** 释放资源:解绑订阅、清交互状态,并销毁当前 Gizmo 图。 */\n override onDestroy (): void {\n this.editMode.onExit?.();\n this.clearCapturedGizmo();\n this.selection.off('preselectchange', this.onPreselectChange);\n if (this.hoveredMediaItemId) {\n pauseVideoItem(this.engine, this.hoveredMediaItemId);\n pauseEffectsItem(this.engine, this.hoveredMediaItemId);\n this.hoveredMediaItemId = undefined;\n }\n this.clearCapturedGizmo();\n this.disposeQueuedGizmos();\n this.gizmoManager.dispose();\n this.viewportNavigation.dispose();\n\n this.selectionTransformKind = 'idle';\n this.setCursor({ type: GestureCursorType.NORMAL, angle: 0 });\n this.gizmoViewport = undefined;\n super.onDestroy();\n }\n\n /** 每帧更新入口:先刷新 Frame 投影,再同步当前 Gizmo 图。 */\n override update (deltaTime: number): void {\n this.frameManager.onUpdate();\n this.gizmoManager.onUpdate();\n super.update(deltaTime);\n }\n\n /** 创建填满交互根控件的输入与绘制子控件。 */\n private createViewport (): void {\n const gizmoViewport = this.addChild(new GizmoViewport(this.engine));\n\n gizmoViewport.onMouseEnterCallback = () => {\n this.dispatchInput(ControlInputPhase.MouseEnter, gizmoViewport.createMouseEventAtCurrentPosition());\n };\n gizmoViewport.onMouseMoveCallback = event => {\n this.dispatchInput(ControlInputPhase.MouseMove, event);\n };\n gizmoViewport.onMouseDragCallback = event => {\n this.dispatchInput(ControlInputPhase.MouseDrag, event);\n };\n gizmoViewport.onMouseLeaveCallback = () => {\n this.dispatchInput(ControlInputPhase.MouseLeave, gizmoViewport.createMouseEventAtCurrentPosition());\n };\n gizmoViewport.onMouseWheelCallback = event => {\n this.dispatchInput(ControlInputPhase.MouseWheel, event);\n };\n gizmoViewport.onMouseDownCallback = event => {\n this.dispatchInput(ControlInputPhase.MouseDown, event);\n };\n gizmoViewport.onMouseUpCallback = event => {\n this.dispatchInput(ControlInputPhase.MouseUp, event);\n };\n gizmoViewport.onKeyDownCallback = event => {\n this.dispatchInput(ControlInputPhase.KeyDown, event);\n };\n gizmoViewport.onKeyUpCallback = event => {\n this.dispatchInput(ControlInputPhase.KeyUp, event);\n };\n gizmoViewport.drawCallBack = () => {\n this.drawGizmos(gizmoViewport);\n };\n this.gizmoViewport = gizmoViewport;\n }\n\n /**\n * 按退出、重建、进入的顺序提交编辑模式。\n * @param nextMode 新编辑模式。\n */\n private commitEditMode (nextMode: EditMode): void {\n const previousMode = this.editMode;\n const modeChanged = previousMode !== nextMode;\n\n if (modeChanged) {\n previousMode.onExit?.();\n this.editMode = nextMode;\n }\n\n this.rebuildGizmos();\n\n if (modeChanged) {\n nextMode.onEnter?.();\n }\n }\n\n /**\n * 解析指定工具可继续使用的编辑模式。\n * @param tool 目标工具。\n * @returns 可用编辑模式。\n */\n private resolveEditModeForTool (tool: GizmoTool): EditMode {\n if (\n this.editMode.canRemainActiveForTool(tool)\n || this.editMode instanceof DefaultSelectionMode\n ) {\n return this.editMode;\n }\n\n return this.createDefaultEditMode();\n }\n\n /** @returns 新建的默认编辑模式。 */\n private createDefaultEditMode (): EditMode {\n return new DefaultSelectionMode(this);\n }\n\n /**\n * 按输入阶段派发 Runtime Control 事件。\n * @param phase 输入阶段。\n * @param input 已归一化的输入事件。\n */\n private dispatchInput (\n phase: ControlInputPhase,\n input: InputEvent,\n ): void {\n // 步骤 1:跳过已接受或被全局屏蔽的事件。\n if (!this.ignoreInteraction && !input.isAccepted()) {\n // 步骤 2:将滚轮、鼠标和键盘事件路由到对应处理器。\n switch (phase) {\n case ControlInputPhase.MouseWheel: {\n const viewportChanged = this.viewportNavigation.handleWheel(\n input as InputEventMouseButton,\n Boolean(this.capturedGizmo),\n );\n\n if (viewportChanged) {\n this.redispatchMouseAtCurrentPosition();\n }\n\n break;\n }\n case ControlInputPhase.MouseEnter:\n case ControlInputPhase.MouseMove:\n case ControlInputPhase.MouseDrag:\n case ControlInputPhase.MouseLeave:\n case ControlInputPhase.MouseDown:\n case ControlInputPhase.MouseUp:\n this.handleMouseInput(phase, input as InputEventMouse);\n\n break;\n case ControlInputPhase.KeyDown: {\n const event = input as InputEventKey;\n\n this.emit('keyDown', event);\n if (!event.isAccepted()) {\n this.handleKeyboardEvent(event, 'down');\n }\n\n break;\n }\n case ControlInputPhase.KeyUp: {\n const event = input as InputEventKey;\n\n this.emit('keyUp', event);\n if (!event.isAccepted()) {\n this.handleKeyboardEvent(event, 'up');\n }\n\n break;\n }\n }\n }\n // 步骤 3:在当前事件出口释放可安全销毁的退场 Gizmo。\n this.disposeQueuedGizmos();\n }\n\n /** @returns 所有工具共享的视口 Gizmo。 */\n private createCommonBeforeToolSwitch (): Gizmo[] {\n return [\n new HandGizmo(this),\n new IconGizmo(this),\n new LoadingGizmo(this, this.loadingManager),\n ];\n }\n\n /** @returns 抓手 Gizmo 当前是否正在平移或等待平移。 */\n private isPanning (): boolean {\n return this.gizmoManager.get('hand')?.isPanning() ?? false;\n }\n\n /**\n * 处理鼠标阶段并维护指针捕获。\n * @param phase 输入阶段。\n * @param event 鼠标事件。\n */\n private handleMouseInput (\n phase: ControlInputPhase,\n event: InputEventMouse,\n ): void {\n if (phase === ControlInputPhase.MouseDown) {\n this.clearCapturedGizmo();\n }\n\n const savedOwner = this.capturedGizmo;\n\n // 抬起事件派发前释放持久捕获,但保留本轮接收者。\n if (phase === ControlInputPhase.MouseUp) {\n this.clearCapturedGizmo();\n }\n\n let winner: Gizmo | undefined;\n\n if (this.canDispatchMouseEvent(phase, savedOwner)) {\n this.setCursor({ type: GestureCursorType.NORMAL, angle: 0 });\n winner = this.dispatchMouseEvent(savedOwner, phase, event);\n }\n\n if (phase === ControlInputPhase.MouseDown) {\n this.capturedGizmo = winner;\n }\n\n if (phase === ControlInputPhase.MouseUp) {\n this.redispatchMouseAtCurrentPosition();\n }\n }\n\n /**\n * 向本轮捕获者或活动候选派发鼠标事件。\n * @param localOwner 本轮捕获者。\n * @param phase 输入阶段。\n * @param event 鼠标事件。\n * @returns 接受事件的 Gizmo。\n */\n private dispatchMouseEvent (\n localOwner: Gizmo | undefined,\n phase: ControlInputPhase,\n event: InputEventMouse,\n ): Gizmo | undefined {\n this.selection.clearHover();\n\n if (localOwner) {\n this.invoke(localOwner, phase, event);\n\n return localOwner;\n }\n\n // 使用候选快照,图重建只影响下一轮派发。\n const candidates = [...this.gizmoManager.activeGizmos];\n\n for (const gizmo of candidates) {\n this.prepareForDispatch(gizmo, phase);\n }\n\n for (const gizmo of candidates) {\n if (this.invoke(gizmo, phase, event)) {\n return gizmo;\n }\n }\n\n return undefined;\n }\n\n /**\n * 判断当前鼠标轮次是否可以进入行为派发。\n * @param phase 输入阶段。\n * @param savedOwner 本轮开始时的捕获者。\n * @returns 是否允许派发。\n */\n private canDispatchMouseEvent (\n phase: ControlInputPhase,\n savedOwner: Gizmo | undefined,\n ): boolean {\n if (\n phase === ControlInputPhase.MouseDrag\n && !this.gizmoViewport?.hasCrossedDragThreshold()\n && (!savedOwner || savedOwner.requiresDragThreshold())\n ) {\n return false;\n }\n\n if (savedOwner) {\n return true;\n }\n\n switch (phase) {\n case ControlInputPhase.MouseDown:\n case ControlInputPhase.MouseMove:\n case ControlInputPhase.MouseLeave:\n return true;\n case ControlInputPhase.MouseEnter:\n case ControlInputPhase.MouseDrag:\n case ControlInputPhase.MouseUp:\n case ControlInputPhase.MouseWheel:\n case ControlInputPhase.KeyDown:\n case ControlInputPhase.KeyUp:\n return false;\n }\n }\n\n /** 释放持久指针捕获。 */\n private clearCapturedGizmo (): void {\n this.capturedGizmo = undefined;\n }\n\n /** 在最新鼠标位置重新派发移动或拖拽事件。 */\n private redispatchMouseAtCurrentPosition (): void {\n const localOwner = this.capturedGizmo;\n const viewport = this.gizmoViewport;\n\n if (!viewport || (!localOwner && !viewport.isMouseInside())) {\n return;\n }\n\n const event = viewport.createMouseEventAtCurrentPosition();\n\n this.setCursor({ type: GestureCursorType.NORMAL, angle: 0 });\n this.dispatchMouseEvent(\n localOwner,\n localOwner ? ControlInputPhase.MouseDrag : ControlInputPhase.MouseMove,\n event,\n );\n }\n\n /** 在捕获者不属于退场图时释放待销毁 Gizmo。 */\n private disposeQueuedGizmos (): void {\n if (\n this.capturedGizmo\n && this.gizmosToDispose.includes(this.capturedGizmo)\n ) {\n return;\n }\n\n const gizmosToDispose = this.gizmosToDispose;\n\n this.gizmosToDispose = [];\n for (const gizmo of gizmosToDispose) {\n gizmo.dispose();\n }\n }\n\n /**\n * 准备单个派发候选并隔离错误。\n * @param gizmo 候选 Gizmo。\n * @param phase 输入阶段。\n */\n private prepareForDispatch (gizmo: Gizmo, phase: ControlInputPhase): void {\n try {\n gizmo.prepareForDispatch?.();\n } catch (error) {\n this.handleGizmoError(error, this.errorPhaseFor(phase), gizmo.type);\n }\n }\n\n /**\n * 调用 Gizmo 对应的鼠标阶段并隔离错误。\n * @param gizmo 目标 Gizmo。\n * @param phase 输入阶段。\n * @param event 鼠标事件。\n * @returns Gizmo 是否接受事件。\n */\n private invoke (gizmo: Gizmo, phase: ControlInputPhase, event: InputEventMouse): boolean {\n try {\n switch (phase) {\n case ControlInputPhase.MouseEnter:\n break;\n case ControlInputPhase.MouseDown:\n gizmo.onMouseDown(event as InputEventMouseButton);\n\n break;\n case ControlInputPhase.MouseMove:\n gizmo.onMouseMove(event as InputEventMouseMotion);\n\n break;\n case ControlInputPhase.MouseDrag:\n gizmo.onMouseDrag(event as InputEventMouseMotion);\n\n break;\n case ControlInputPhase.MouseUp:\n gizmo.onMouseUp(event as InputEventMouseButton);\n\n break;\n case ControlInputPhase.MouseLeave:\n gizmo.onMouseLeave();\n\n break;\n case ControlInputPhase.MouseWheel:\n case ControlInputPhase.KeyDown:\n case ControlInputPhase.KeyUp:\n break;\n }\n } catch (error) {\n event.clearAccepted();\n this.handleGizmoError(error, this.errorPhaseFor(phase), gizmo.type);\n }\n\n return event.isAccepted();\n }\n\n /**\n * 按活动 Gizmo 快照派发键盘事件。\n * @param event 键盘事件。\n * @param phase 键盘输入阶段。\n */\n private handleKeyboardEvent (\n event: InputEventKey,\n phase: 'down' | 'up',\n ): void {\n for (const gizmo of [...this.gizmoManager.activeGizmos]) {\n try {\n if (phase === 'down') {\n gizmo.onKeyDown(event);\n } else {\n gizmo.onKeyUp(event);\n }\n } catch (error) {\n event.clearAccepted();\n this.handleGizmoError(error, 'gizmo-key', gizmo.type);\n }\n if (event.isAccepted()) {\n break;\n }\n }\n\n this.redispatchMouseAtCurrentPosition();\n }\n\n /**\n * 将输入阶段映射为错误上报阶段。\n * @param phase 输入阶段。\n * @returns 错误上报阶段。\n */\n private errorPhaseFor (phase: ControlInputPhase): GizmoErrorPhase {\n switch (phase) {\n case ControlInputPhase.MouseDown:\n return 'gizmo-actionstart';\n case ControlInputPhase.MouseEnter:\n case ControlInputPhase.MouseMove:\n case ControlInputPhase.MouseDrag:\n case ControlInputPhase.MouseLeave:\n case ControlInputPhase.MouseWheel:\n return 'gizmo-actionupdate';\n case ControlInputPhase.MouseUp:\n return 'gizmo-actioncommit';\n case ControlInputPhase.KeyDown:\n case ControlInputPhase.KeyUp:\n return 'gizmo-key';\n }\n }\n\n /**\n * 按悬停框、活动 Gizmo、吸附提示的顺序绘制交互层。\n * @param gizmoControl 绘制控制器。\n */\n private drawGizmos (gizmoControl: GizmoViewport): void {\n this.drawHoverOverlay(gizmoControl);\n\n for (const gizmo of this.gizmoManager.activeGizmos ?? []) {\n this.drawGizmo(gizmo, gizmoControl);\n }\n this.drawSnappingVisualizations(gizmoControl);\n }\n\n /**\n * 绘制当前悬停元素的底层轮廓。\n * @param gizmoControl 绘制控制器。\n */\n private drawHoverOverlay (gizmoControl: GizmoViewport): void {\n if (this.isPanning()) {\n return;\n }\n const itemId = this.selection.hoverOverlayItemId;\n\n if (!itemId) {\n return;\n }\n const item = getPlayerItemById(this.engine.sceneServer.compositions[0], itemId);\n const transform = item ? getItemViewTransform(item, GizmoViewportUtils.getContainerSize(this.engine.canvas.parentElement!)) : undefined;\n\n if (!transform) {\n return;\n }\n const config = this.getConfigManager().get(selectionPreviewConfig);\n\n drawCorners(gizmoControl, getTransformedBoxCorners(transform), toColor(config.preSelectedColor, 1), config.preSelectedWidth);\n }\n\n /**\n * 绘制单个 Gizmo 并隔离错误。\n * @param gizmo 目标 Gizmo。\n * @param gizmoControl 绘制控制器。\n */\n private drawGizmo (gizmo: Gizmo, gizmoControl: GizmoViewport): void {\n try {\n gizmo.draw(gizmoControl);\n } catch (error) {\n this.errorMonitor?.report(error, 'gizmo-draw', { gizmoType: gizmo.type });\n }\n }\n\n /**\n * 绘制当前吸附提示。\n * @param control 绘制控制器。\n */\n private drawSnappingVisualizations (control: GizmoViewport): void {\n const visualizations = this.snapManager.getSnappingVisualizations();\n\n if (visualizations.length === 0) {\n return;\n }\n\n const { lineWidth, lineColor } = this.snapManager.config;\n const color = toColor(lineColor, 1);\n\n for (const line of visualizations) {\n control.drawLine(\n line.start.x,\n line.start.y,\n line.end.x,\n line.end.y,\n color,\n lineWidth,\n );\n }\n }\n\n /**\n * 上报 Gizmo 错误并重置共享交互状态。\n * @param error 原始错误。\n * @param phase 错误发生阶段。\n * @param gizmoType 发生错误的 Gizmo 类型。\n */\n private handleGizmoError (\n error: unknown,\n phase: GizmoErrorPhase,\n gizmoType?: string,\n ): void {\n this.errorMonitor?.report(error, phase, { gizmoType });\n\n this.clearCapturedGizmo();\n this.selectionTransformKind = 'idle';\n this.snapManager.reset();\n }\n}\n","import { Texture, FrameComponent, spec } from '@galacean/effects';\nimport type { Control } from '@galacean/effects-plugin-gui';\nimport { Box2 } from '@galacean/effects-math/es/extension/index';\nimport type { Matrix3 } from '../math';\nimport { Vector2, Vector3, getBoxTransform, getBoxTransformFromBox, getTransformedBox, getTransformedBoxCorners } from '../math';\nimport { Gizmo } from '../gizmo';\nimport { GizmoType } from '../gizmo-type';\nimport { GizmoViewportUtils } from '../viewport/viewport-utils';\nimport type { ViewportOverlayConfig } from '../configs/types';\nimport { viewportOverlayConfig } from '../configs/builtin-configs';\nimport { drawCorners, drawWithBoxTransform, fillBoxByCorners, toColor } from '../drawing';\nimport { getItemViewBox, getItemViewTransform, isFramePlayerItem } from '../items';\nimport { projectPoint } from '../viewport';\n\n/** 视口画板与安全区配置。 */\nexport type ViewProperty = {\n /** 画板(设计稿)尺寸 [宽, 高],单位为设计稿像素 */\n size: [number, number],\n /** 出血安全区 [上, 下, 左, 右],单位为设计稿像素,相对画板边缘的边距 */\n safeArea: [number, number, number, number],\n /** 预览安全区列表 */\n previewSafeAreas: {\n /** 安全区包围盒 [左, 上, 宽, 高],单位为设计稿像素,相对画板左上角 */\n box: [number, number, number, number],\n /** 填充色 [r, g, b, a?],0..255 */\n color?: number[],\n /** 背景贴图地址 */\n url?: string,\n /** 是否可见 */\n visible?: boolean,\n }[],\n};\n\n/** 视口展示 gizmo:绘制画板边框、画框外遮罩、出血与预览安全区。 */\nexport class ViewportOverlayGizmo extends Gizmo {\n readonly type = GizmoType.VIEWPORT_OVERLAY;\n\n /** 遮挡层绘制结果(画板视口盒) */\n box = new Box2();\n\n /** 主视口归一化 Box2 到屏幕的变换。 */\n transform: Matrix3 | undefined;\n\n /** 视图属性(由外部设置) */\n viewProperty: ViewProperty | undefined;\n\n /** 外部提供的主视口包围盒计算函数。 */\n mainViewportBoxProvider: (() => Box2 | null) | undefined;\n\n /** previewSafeAreas 贴图缓存:url → Texture(避免每帧重建) */\n private safeAreaTextures = new Map<string, Texture>();\n /** previewSafeAreas 贴图加载 Promise:url → Promise<Texture>(防重入,加载完写入 safeAreaTextures) */\n private safeAreaTexturePromises = new Map<string, Promise<Texture>>();\n\n /** 当前视口覆盖层配置。 */\n get config (): Readonly<ViewportOverlayConfig> {\n return this._owner.getConfigManager().get(viewportOverlayConfig);\n }\n\n /** 刷新当前画板或主视口的屏幕包围盒。 */\n override onUpdate (): void {\n // 步骤 1:优先使用外部提供的主视口包围盒。\n if (this.mainViewportBoxProvider) {\n this.box = this.mainViewportBoxProvider() ?? new Box2();\n this.transform = getBoxTransformFromBox(this.box);\n\n return;\n }\n // 步骤 2:查找主合成蒙版元素。\n const composition = this._owner.getEngine().sceneServer.compositions[0];\n const maskFrame = composition?.items.find(item =>\n item.type === spec.ItemType.null\n && item.getComponent(FrameComponent) !== undefined\n && item.name === '主合成蒙版',\n );\n\n if (maskFrame) {\n const containerSize = GizmoViewportUtils.getContainerSize(this._owner.getEngine().canvas.parentElement!);\n\n this.box = getItemViewBox(maskFrame, containerSize);\n this.transform = getItemViewTransform(maskFrame, containerSize);\n\n return;\n }\n // 步骤 3:回退到真实画板元素。\n const frameItem = composition?.items.find(item => isFramePlayerItem(item));\n\n if (frameItem) {\n const containerSize = GizmoViewportUtils.getContainerSize(this._owner.getEngine().canvas.parentElement!);\n\n this.box = getItemViewBox(frameItem, containerSize);\n this.transform = getItemViewTransform(frameItem, containerSize);\n\n return;\n }\n // 步骤 4:按预览尺寸投影居中的主视口矩形。\n if (!this.viewProperty) {\n this.box = new Box2();\n this.transform = undefined;\n\n return;\n }\n const anyItem = composition?.items.find(item => item.composition?.camera);\n\n if (!composition?.camera || !anyItem) {\n this.box = new Box2();\n this.transform = undefined;\n\n return;\n }\n this.transform = this.projectPreviewBox(anyItem, this.viewProperty.size);\n this.box = this.transform ? getTransformedBox(this.transform) : new Box2();\n }\n\n /**\n * 绘制画板外遮罩、安全区与画板边框。\n * @param control 绘制控制器。\n */\n override draw (control: Control): void {\n const transform = this.transform;\n\n if (this.box.isEmpty() || !transform) {\n return;\n }\n const corners = getTransformedBoxCorners(transform);\n const {\n boxWidth,\n boxColor,\n outerMaskEnabled,\n markColor,\n markAlpha,\n safeAreaEnabled,\n safeAreaBoxColor,\n safeAreaBoxAlpha,\n } = this.config;\n\n // 步骤 1:绘制画板外遮罩。\n if (outerMaskEnabled) {\n const markFill = toColor(markColor, markAlpha);\n const size = GizmoViewportUtils.getContainerSize(this._owner.getEngine().canvas.parentElement!);\n const screen = [new Vector2(), new Vector2(size.x, 0), size.clone(), new Vector2(0, size.y)];\n\n fillBoxByCorners(control, [screen[0], screen[1], corners[1], corners[0]], markFill);\n fillBoxByCorners(control, [screen[1], screen[2], corners[2], corners[1]], markFill);\n fillBoxByCorners(control, [screen[2], screen[3], corners[3], corners[2]], markFill);\n fillBoxByCorners(control, [screen[3], screen[0], corners[0], corners[3]], markFill);\n }\n\n // 步骤 2:绘制出血安全区。\n if (safeAreaEnabled && this.viewProperty) {\n const { size, safeArea } = this.viewProperty;\n const [top, bottom, left, right] = safeArea;\n const safeFill = toColor(safeAreaBoxColor, safeAreaBoxAlpha);\n const topRatio = top / size[1];\n const bottomRatio = bottom / size[1];\n const leftRatio = left / size[0];\n const rightRatio = right / size[0];\n\n fillBoxByCorners(control, getTransformedBoxCorners(transform, new Box2(new Vector2(0, 0), new Vector2(1, topRatio))), safeFill);\n fillBoxByCorners(control, getTransformedBoxCorners(transform, new Box2(new Vector2(0, topRatio), new Vector2(leftRatio, 1))), safeFill);\n fillBoxByCorners(control, getTransformedBoxCorners(transform, new Box2(new Vector2(1 - rightRatio, topRatio), new Vector2(1, 1))), safeFill);\n fillBoxByCorners(control, getTransformedBoxCorners(transform, new Box2(new Vector2(leftRatio, 1 - bottomRatio), new Vector2(1 - rightRatio, 1))), safeFill);\n\n // 步骤 3:绘制预览安全区的颜色或贴图。\n for (const previewSafeArea of this.viewProperty.previewSafeAreas) {\n const { box: [px, py, pw, ph], color, url, visible } = previewSafeArea;\n\n if (visible === false) {\n continue;\n }\n const previewCorners = getTransformedBoxCorners(transform, new Box2(\n new Vector2(px / size[0], py / size[1]),\n new Vector2((px + pw) / size[0], (py + ph) / size[1]),\n ));\n\n if (url) {\n const texture = this.getSafeAreaTexture(url, control.engine);\n\n if (!texture) {\n continue;\n }\n const [leftTop, rightTop, , leftBottom] = previewCorners;\n const xAxis = rightTop.clone().subtract(leftTop);\n const yAxis = leftBottom.clone().subtract(leftTop);\n\n drawWithBoxTransform(control, leftTop, xAxis, yAxis, () => {\n control.drawTexture(0, 0, 1, 1, texture);\n });\n } else {\n const alpha = color?.[3] ?? 0.3;\n const cr = color?.[0] ?? 255;\n const cg = color?.[1] ?? 0;\n const cb = color?.[2] ?? 0;\n const resultColor = (cr << 16) | (cg << 8) | cb;\n\n fillBoxByCorners(control, previewCorners, toColor(resultColor, alpha));\n }\n }\n }\n\n // 步骤 4:绘制画板边框。\n drawCorners(control, corners, toColor(boxColor, 1), boxWidth);\n }\n\n /** 释放预览安全区贴图缓存,调用父类释放。 */\n override dispose (): void {\n this.safeAreaTextures.forEach(texture => {\n if (!texture.isDestroyed) {\n texture.dispose();\n }\n });\n this.safeAreaTextures.clear();\n this.safeAreaTexturePromises.clear();\n super.dispose();\n }\n\n /**\n * 将居中的预览矩形投影为屏幕包围盒。\n * @param item 提供合成相机的播放器元素。\n * @param size 预览尺寸。\n * @returns 主视口屏幕包围盒。\n */\n private projectPreviewBox (item: import('@galacean/effects').VFXItem, size: [number, number]): Matrix3 | undefined {\n const containerSize = GizmoViewportUtils.getContainerSize(this._owner.getEngine().canvas.parentElement!);\n const w = size[0] / 2;\n const h = size[1] / 2;\n const points = [\n new Vector3(-w, h, 0),\n new Vector3(w, h, 0),\n new Vector3(w, -h, 0),\n new Vector3(-w, -h, 0),\n ].map(p => projectPoint(p, item, containerSize));\n\n return getBoxTransform(points);\n }\n\n /**\n * 获取预览安全区贴图(懒加载)。命中且未销毁则直接返回;否则发起一次异步加载并返回\n * undefined(本帧跳过该贴图,加载完成后由持续渲染循环自动重绘)。与 IconGizmo 同模式。\n * @param url 贴图地址\n * @param engine effects 引擎实例(取自 control)\n * @returns 命中且未销毁的缓存纹理;未命中且发起异步加载时返回 undefined\n */\n private getSafeAreaTexture (url: string, engine: Control['engine']): Texture | undefined {\n const cached = this.safeAreaTextures.get(url);\n\n if (cached && !cached.isDestroyed) {\n return cached;\n }\n if (!this.safeAreaTexturePromises.has(url)) {\n const promise = Texture.fromImage(url, engine).then(texture => {\n this.safeAreaTextures.set(url, texture);\n\n return texture;\n });\n\n this.safeAreaTexturePromises.set(url, promise);\n }\n\n return undefined;\n }\n}\n","import * as EFFECTS from '@galacean/effects';\nimport { logger, registerPlugin } from '@galacean/effects';\nimport { EditorGizmoPlugin } from './3d/gizmo-loader';\n\nregisterPlugin('editor-gizmo', EditorGizmoPlugin);\n\nexport * from './2d';\nexport * from './3d';\n\n/**\n * 插件版本号\n */\nexport const version = __VERSION__;\n\nlogger.info(`Plugin editor gizmo version: ${version}.`);\n\nif (version !== EFFECTS.version) {\n console.error(\n '注意:请统一 Editor Gizmo 插件与 Player 版本,不统一的版本混用会有不可预知的后果!',\n '\\nAttention: Please ensure the Editor Gizmo plugin is synchronized with the Player version. Mixing and matching incompatible versions may result in unpredictable consequences!'\n );\n}\n"],"names":["asyncGeneratorStep","gen","resolve","reject","_next","_throw","key","arg","info","value","error","done","Promise","then","_async_to_generator","fn","self","args","arguments","apply","err","undefined","_set_prototype_of","o","p","Object","setPrototypeOf","__proto__","_inherits","subClass","superClass","TypeError","prototype","create","constructor","writable","configurable","_is_native_reflect_construct","result","Boolean","valueOf","call","Reflect","construct","_","_construct","Parent","Class","a","push","Constructor","Function","bind","instance","_get_prototype_of","getPrototypeOf","_is_native_function","toString","indexOf","_wrap_native_super","_cache","Map","has","get","set","Wrapper","enumerable","_array_like_to_array","arr","len","length","i","arr2","Array","_unsupported_iterable_to_array","minLen","n","slice","name","from","test","_create_for_of_iterator_helper_loose","allowArrayLike","it","Symbol","iterator","next","isArray","_instanceof","left","right","hasInstance","__decorate","decorators","target","desc","c","r","getOwnPropertyDescriptor","d","decorate","defineProperty","__generator","thisArg","body","label","sent","t","trys","ops","f","y","g","Iterator","verb","v","step","op","pop","e","SuppressedError","suppressed","message","Error","color","xAxisColor","yAxisColor","zAxisColor","renderMode","glContext","TRIANGLES","axisIconMap","createImage","imageUrl","image","Image","src","onload","onerror","createTexture","engine","hookDestroy","texture","Texture","dispose","noop","moveToPointWidthFixDistance","targetPos","currentPos","vecCameraItem","clone","subtract","normalVecCameraItem","normalize","scalerVecCameraItem","multiply","vecScalerItem","vecItemScaler","add","GizmoSubType","math","Vector3","Ray","BoundingType","Matrix4","Vector2","distanceOfPointAndLine","point","line","AC","BC","AB","subtractVectors","lengthAC","lengthBC","lengthAB","P","allArea","Math","abs","sqrt","distance","l1","pow","l2","isInLine","projectionOfPointAndLine","line0","toVector2","line1","worldAB","worldAP","worldP","computeOrthographicOffCenter","bottom","top","near","far","b","tx","ty","tz","_extends","assign","source","hasOwnProperty","GeometryData","points","uvs","normals","indices","createXYPlaneCircle","radius","z","segments","thetaStart","thetaLength","startIndex","theta","x","cos","sin","createXZPlaneCircle","createYZPlaneCircle","SphereGeometryData","widthSegments","heightSegments","phiStart","phiLength","PI","max","floor","thetaEnd","min","grid","index","iy","verticesRow","uOffset","ix","u","normal","toArray","BoxGeometryData","width","height","depth","buildPlane","w","uDir","vDir","widthHalf","heightHalf","depthHalf","vertexCounter","numberOfVertices","CylinderGeometryData","radiusTop","radiusBottom","radialSegments","openEnded","generateTorso","slope","indexRow","sinTheta","cosTheta","px","py","halfHeight","pz","indexArray","generateCap","centerIndexStart","sign","centerIndexEnd","uvU","uvV","ConeGeometryData","TorusGeometryData","tube","tubularSegments","arc","j","cx","cy","PlaneGeometryData","gridX","gridY","gridX1","gridY1","segmentWidth","segmentHeight","Euler","FrustumGeometryData","position","rotation","fov","aspect","fovY","ratio","halfY","tan","halfX","point1","point2","point3","point4","matrix","fromArray","toMatrix4","result1","transformPoint","result2","result3","result4","DirectionLightData","linesNumber","start","PointLightData","range","SpotLightData","spotAngle","angle","FloorLineEdgeGeometryData","sideLength","parts","end","GeometryType","createGeometry","type","size","geometryData","segments4","Geometry","attributes","a_Position","data","Float32Array","a_Normal","a_UV1","Uint16Array","mode","drawCount","createMeshFromSubType","subType","boundingMap","iconTexture","options","WebGLRenderingContext","sprite","createSpriteMesh","camera","light","translation","createTranslationMesh","scale","createScaleMesh","viewHelper","createViewHelperMesh","createRotationMesh","createBasicMesh","radiusSegments","boundSize","xCircle","torus","yCircle","zCircle","center","sphere","alpha","xCircleBounding","yCircleBounding","zCircleBounding","xCircleTransform","Transform","valid","yCircleTransform","zCircleTransform","centerTransform","setRotation","triangle","triangles","firstGeometry","getTriangle","backfaceCulling","geometry","transform","getIndexData","getAttributeData","mat4","getWorldMatrix","i0","i1","i2","p0","p1","p2","projectPoint","axisSize","axisMesh","createAxisMesh","mesh","arrowSize","xArrow","cone","depthTest","yArrow","zArrow","xArrowTransform","yArrowTransform","zArrowTransform","translate","planeSize","xyPlane","plane","yzPlane","zxPlane","xyPlaneTransform","yzPlaneTransform","zxPlaneTransform","delta","createAxisBounding","boxSize","centerBoxSize","xCube","box","yCube","zCube","centerCube","xCubeTransform","yCubeTransform","zCubeTransform","centerCubeTransform","posXSphere","posYSphere","posZSphere","posXSphereTransform","posYSphereTransform","posZSphereTransform","negXSphere","negYSphere","negZSphere","negXSphereTransform","negYSphereTransform","negZSphereTransform","isCentered","xAxis","yAxis","zAxis","xAxisTransform","yAxisTransform","zAxisTransform","materialType","geometryType","Sphere","cylinder","Cylinder","Cone","Torus","Sprite","Plane","frustum","Frustum","directionLight","DirectionLight","spotLight","SpotLight","pointLight","PointLight","floorGrid","FloorGrid","Box","material","createBlendMaterial","createHideBackMaterial","createMaterial","Mesh","priority","spriteColor","createSpriteMaterial","myColor","myDepthTest","Material","uniformValues","u_color","u_model","shader","fragment","vertex","shared","setVector3","setMatrix","IDENTITY","stencilTest","blending","depthMask","u_cameraPos","u_center","ZERO","myAlpha","u_alpha","setVector2","blendEquation","FUNC_ADD","blendFunction","SRC_ALPHA","ONE_MINUS_SRC_ALPHA","setTexture","intersectRayLine","out","pointInCanvas","worldMat4","up","elements","radiusPoint","mvpMat4","getModelViewProjection","screenStart","screenEnd","screenRadiusPoint","screenRadiusVector","screenRadius","screenPosition","inverseViewProjection","getInverseViewProjectionMatrix","rectSize","DEG2RAD","arcPath","rotate","rotMat4","negate","addPoint","transformNormal","h","myCenter","map","item","rect","pos","forEach","vec","combineGeometries","geometries","indicesBase","Shapes","ret","detail","anchors","block","unshift","Rectangle","Circle","Hemisphere","outerRadius","concat","Edge","hw","RectangleEdge","Donut","donutRadius","path","positions","keys","None","createMeshFromShape","shape","geo","createMesh","LINES","Vector4","WireframeGeometryType","destroyWireframeMesh","DestroyOptions","keep","updateWireframeMesh","originGeometry","originMaterial","wireframe","cloneUniforms","wireframeGeometry","enabledMacros","macro","enableMacro","getDrawCount","indexData","getTriangleIndexData","getTriangleIndexDataByCount","setIndexData","setDrawCount","getQuadIndexData","faceCount","oid","idx","base","createModeWireframe","SharedGeometry","Uint32Array","shaderData","materialOptions","props","newMacros","macros","glslVersion","displayServer","renderingDevice","gpuCapability","level","GLSLVersion","GLSL3","GLSL1","setVector4","sourceIndex","drawStart","layout","getVertexLayout","setVertexBuffers","getVertexBuffers","editorRenderPassName","frontRenderPassName","behindRenderPassName","Quaternion","constants","GizmoComponent","coordinateSpace","mat","fromIdentity","wireframeMeshes","meshes","getHitTestParams","boundingKeys","targetItem","worldPos","worldQuat","worldSca","gizmoSubType","assignWorldTRS","targetTransform","quat","composition","cameraPos","itemPos","newPos","setPosition","HitTestType","custom","clipMasks","frameClipMasks","collect","ray","bounding","worldCenter","copyFrom","boxHalfSize","boxMax","boxMin","intersectBox","gizmoComponent","viewMat4","getViewMatrix","screenWidth","renderer","getWidth","screenHeight","getHeight","proMat4","cameraModelMat4","getInverseViewMatrix","localTransform","cloneFromMatrix","padding","localMat4","modelMat4","vpMat4","screenCenter","screenPoint","screenCenter2","screenPoint2","intersectSphere","tmpPositions","tmpPosition","worldTriangle","intersectTriangle","lastDistance","origin","distanceSquared","hitPositions","hitBounding","getComponent","behavior","spec","InteractBehavior","NOTIFY","onStart","items","id","PluginSystem","getPlugins","plugin","gizmoPlugin","particleEmitter","createParticleContent","modelWireframe","needCreateModelContent","createModelContent","createBasicContent","iconTextures","createCombinationContent","boundingBox","createBoundingBoxContent","loaderData","gizmoItems","onEnable","sceneRendering","rendererFeatures","some","feature","GizmoRendererFeature","addRendererFeature","addRenderer","onDisable","removeRenderer","onUpdate","dt","updateRenderData","onDestroy","gizmoMesh","isDestroyed","contents","wireframeMesh","splice","render","pMesh","RendererComponent","content","subMeshes","worldMatrix","effectMaterial","particle","ParticleSystemRenderer","particleMesh","quad","worldScale","parentTransform","distanceToCneter","localMat","worldTransform","proMat5","getDefaultRenderMode","getDefaultSize","modelComponent","psubMesh","assertExist","originMesh","particleSystem","ParticleSystem","definition","gizmoItem","fromData","duration","effectsClass","CoordinateSpace","passes","DrawGizmoFrontPass","DrawGizmoEditorPass","DrawGizmoBehindPass","addRenderPasses","pass","renderList","groups","enqueuePass","RendererFeature","renderPassEvent","RenderPassEvent","AfterRendering","execute","clear","depthAction","TextureLoadAction","renderMeshes","RenderPass","BeforeRendering","AfterRenderingObjects","iconImages","EditorGizmoPlugin","order","onAssetsLoadStart","scene","onCompositionCreated","targetMap","gizmoTarget","Plugin","Color","EulerOrder","Matrix3","RAD2DEG","clamp","isEqual","isZero","NumberEpsilon","fixedMin","isNaN","Infinity","fixedMax","lower","upper","setZero","setFromNumber","num","setFromArray","array","offset","setElement","console","getElement","addVectors","multiplyVectors","divide","sum","ceil","round","lengthSquared","setLength","lerp","other","lerpVectors","v1","v2","dot","cross","dx","dy","equals","eps","fill","atan2","rotateAround","s","random","fromNumber","ONE","Box2","setFromPoints","makeEmpty","il","expandByPoint","setFromCenterAndSize","halfSize","isEmpty","getCenter","getSize","expandByVector","vector","expandByScalar","scalar","containsPoint","containsBox","getParameter","intersectsBox","clampPoint","distanceToPoint","clampedPoint","intersect","union","circle","getRadius","tempVec0","deltaX","deltaY","tempVec1","orientation","onSegment","Line2","direction","distanceSq","at","closestPointToPointParameter","clampToLine","startP","startEnd","se2se","se2sp","closestPointToPoint","crossWithLine","o1","o2","o3","o4","addScaledVector","crossVectors","ax","ay","az","bx","by","bz","reflect","dz","applyEuler","euler","rotateVector3","applyQuaternion","q","applyMatrix","m","applyNormalMatrix","applyProjectionMatrix","setFromMatrixPosition","setFromMatrixColumn","X","Y","Z","setFromNormalAndCoplanarPoint","roundNumber","number","precision","method","Number","isInteger","decimal","IntervalType","UNIT_BOX","MATRIX_EPSILON","getBoxCorners","getBoxTransform","leftTop","rightTop","leftBottom","setFromRowMajorData","determinant","getBoxTransformFromBox","transformBoxPoint","inverseTransformBoxPoint","invert","getTransformedBoxCorners","getTransformedBox","setBoxFromPoints","transformedBoxIntersectsBox","transformedCorners","targetCorners","axes","reduce","corners","every","axis","transformedProjection","targetProjection","transformedBoxContainsPoint","rotateBoxCorners","scaleBox","anchor","resultScalar","rotateBox","getVector2Angle","getAngleByVectors","vector1","vector2","cosValue","acos","getBoxByNormalizeBox","originMax","normalizeMax","originMin","normalizeMin","getNormalizeBoxByBoxes","current","currentMax","currentMin","RayCaster","setFromCamera","coords","inverseViewProjectMatrix","rayCastPlane","distanceToPlane","getAbsMaxIndex","numbers","resultIndex","absNumber","_defineProperties","descriptor","_create_class","protoProps","staticProps","TextCaretMapper","layoutKey","caretPositions","reset","sync","style","JSON","stringify","text","fontFamily","fontSize","fontWeight","letterSpacing","lineHeight","textAlign","keepWordIntact","measureCaretPositions","localX","localY","closestLineDistance","POSITIVE_INFINITY","caret","closest","closestDistance","lineDistance","mirror","document","createElement","visibility","pointerEvents","boxSizing","margin","border","whiteSpace","overflowWrap","wordBreak","fontVariantLigatures","fontKerning","textNode","createTextNode","appendChild","createRange","mirrorRect","getBoundingClientRect","setStart","collapse","remove","TEXT_AREA_CLASS_NAME","POINTER_SELECTION_PREVIEW_CLASS_NAME","TEXT_SELECTION_BACKGROUND_COLOR","textareaDefaultCssClass","pointerSelectionPreviewCssClass","applyCSSClass","element","className","cssText","textContent","replace","head","classList","applyCSSRule","TextEditSession","owner","interactionParam","attachedProjections","Set","disposed","selectionStart","selectionEnd","caretMapper","handleInput","event","textComponent","editingItem","_editingItem","TextComponent","getEngine","sceneServer","compositions","textStyle","setText","lineCount","getLineCount","textHeight","textLayout","setTextHeight","gotoAndStop","time","emit","itemId","getInstanceId","handleKeyDown","code","toLocaleLowerCase","preventDefault","stopPropagation","handleMouseDown","button","textAreaElement","setSelectionRange","handleDragStart","pointerSelectionPreviewElement","canvas","parentElement","removeTextAreaStyle","removeTextSelectionStyle","removePointerSelectionPreviewStyle","addEventListener","selectAllText","textLength","display","focus","select","scrollTop","beginFromCurrentSelection","textareaType","selectedItems","getSelection","getSelectedPlayerItems","selectedItem","ItemType","retarget","hideTextArea","cancelPointerSelection","beginPointerSelection","pointerSelection","active","applyPointerSelection","updatePointerSelection","finishPointerSelection","hidePointerSelectionPreview","attachProjection","projection","detachProjection","delete","saveSelectionRange","removeEventListener","syncTextArea","viewScale","isOpening","letterSpace","textWeight","viewRotation","fontScale","transformOrigin","paintOrder","getTextAlign","syncPointerLayout","selection","anchorIndex","focusIndex","renderPointerSelectionPreview","highlight","backgroundColor","replaceChildren","TextAlignment","middle","isEditing","EventEmitter","GizmoTool","createGizmos","HandGizmoTool","MoveGizmoTool","getActiveEditMode","GestureCursorType","Gizmo","_owner","prepareForDispatch","requiresDragThreshold","draw","_control","onMouseDown","_event","onMouseUp","onMouseMove","onMouseDrag","onMouseLeave","onKeyDown","onKeyUp","GizmoType","VFXItemFactory","createVFXItem","parent","types","vfxItem","VFXItem","addComponent","addItem","rootComposition","setParent","DefaultVFXItems","createEmpty","null","createSprite","SpriteComponent","createText","createVideo","VideoComponent","video","createEffects","effects","urlname","preComposition","AssetManager","loadPrecomposition","autoplay","PrecompositionManager","instantiate","CompositionComponent","endBehavior","getViewProjectionMatrix","warn","projectionMatrix","getProjectionMatrix","viewMatrix","containerSize","projectMatrix","viewPoint","viewPositionToNDC","viewSizeToNDC","viewSize","ndcSizeToViewSize","ndcSize","viewPositionToWorld","cameraInfo","rayCaster","viewSizeToWorld","focusViewPoint","startPoint","nextPoint","worldSize","worldSizeToViewSize","getWorldPosition","getInverseVPRatio","rx","ry","viewSizeToPixel","viewportScale","viewPositionToPixel","viewPosition","viewportTranslation","translationInPixel","createInteractionPlane","isFramePlayerItem","FrameComponent","isEffectsPlayerItem","isGeneratorPlayerItem","includes","generatorType","isVideoGenerator","isVideoGeneratorPlayerItem","isGroupPlayerItem","getItemViewBox","getItemViewTransform","isVisible","supportsRect","hasFrameComponent","viewTransform","updateLocalMatrix","compositionMatrix","itemWorldMatrix","hasChildBox","children","child","childBox","richtext","getItemViewAnchor","worldAnchor","viewAnchor","getItemTransform","parentMatrix","decomposeItemTransform","quaternion","XYZ","setFromQuaternion","getItemViewSize","getItemWorldSize","compositionWorldInverse","itemToComposition","decompose","isPlayerItemVisible","getEffectsPlayerItemOwner","getFramePlayerItemAncestors","frames","getItemChildren","isFrameItem","isEffectItem","getAllChildren","getPlayerItemById","dfs","targetId","found","pendingPauseRequests","WeakMap","playVideoComponent","videoComponent","playVideo","pauseVideoComponent","playPromise","pauseVideo","request","pauseAfterPlay","playVideoItem","playerItem","pauseVideoItem","playEffectsItem","controlItem","compositionItem","play","pauseEffectsItem","pause","TransformType","GizmoViewportUtils","getViewScale","getViewportMatrix","getViewportTranslation","getCameraInfo","getContainerSize","container","offsetWidth","offsetHeight","calculateAnchoredResize","pointer","initialHandle","fixedPoint","resizeOrigin","worldToLocalRotation","handleKind","lockAspectRatio","lockedAxis","initialVector","pointerVector","totalScalar","axisIndex","initialLength","pointerLength","primaryScalar","scaleX","scaleY","fixedOffsetLocal","scaledFixedPoint","totalTranslation","cloneConfigValue","fromEntries","entries","freezeConfigValue","values","freeze","defineConfig","defaults","DEFAULT_LOADING_FRAGMENT","loadingConfig","loadingFragment","effectsEditModeConfig","allowTransform","viewportNavigationConfig","scrollWheelZoom","invertZoom","zoomStep","viewportOverlayConfig","boxColor","boxWidth","outerMaskEnabled","markColor","markAlpha","safeAreaEnabled","safeAreaBoxColor","safeAreaBoxAlpha","selectionPreviewConfig","videoPreSelectedPlay","preSelectedColor","preSelectedWidth","regionBoxColor","regionBoxAlpha","regionWireframeColor","regionWireframeAlpha","regionWireframeWidth","selectionSnapConfig","enabled","lineWidth","lineColor","resizeSelectionConfig","pixelRatio","contentRatio","wireframeColor","wireframeAlpha","wireframeWidth","cornerFillColor","cornerLineColor","cornerLineWidth","cornerLineAlpha","scaleCircleSize","rotationCircleSize","infoShowEnabled","sizeTextColor","nameTextColor","frameMoveLineColor","frameMoveLineWidth","imageLogoUrl","groupLogoUrl","textLogoUrl","videoLogoUrl","frameLogoUrl","effectsLogoUrl","imageCutConfig","maskColor","maskAlpha","cutBoxLineWidth","cutBoxLineColor","cutBoxLineAlpha","itemBoxLineWidth","itemBoxLineColor","itemBoxLineAlpha","cutBoxCornerRadius","cutBoxCornerFillColor","cutBoxCornerLineWidth","cutBoxCornerLineColor","cutBoxCornerLineAlpha","scaleInteractionDistance","directionScaleInteractionDistance","gridLineWidth","gridLineColor","gridLineAlpha","gridCount","imageExpandConfig","expandBoxLineWidth","expandBoxLineColor","expandBoxLineAlpha","expandBoxCornerRadius","expandBoxCornerLineWidth","expandBoxCornerLineColor","expandBoxCornerLineAlpha","expandBoxCornerFillColor","maskConfig","maskImage","brushSize","brushColor","brushAlpha","maskBackgroundColor","boxLineWidth","boxLineColor","boxLineAlpha","spriteTextEditConfig","textColor","preSelectedTextColor","dashLineDash","dashLineGap","editBoxAlpha","editBoxColor","editBoxLineAlpha","editBoxLineColor","editBoxPreSelectedAlpha","editBoxPreSelectedColor","editBoxLinePreSelectedAlpha","editBoxLinePreSelectedColor","hasChangedEditBoxAlpha","hasChangedEditBoxColor","hasChangedEditBoxLineAlpha","hasChangedEditBoxLineColor","hasChangedEditBoxPreSelectedAlpha","hasChangedEditBoxPreSelectedColor","hasChangedEditBoxLinePreSelectedAlpha","hasChangedEditBoxLinePreSelectedColor","editBoxSelectedAlpha","editBoxSelectedColor","iconConfig","autoShow","videoPlayUrl","videoPlayShift","videoPlayWidth","videoPlayHeight","imageGeneratorUrl","videoGeneratorUrl","generatorWidth","generatorHeight","itemCreateConfig","frameBorderColor","frameBorderWidth","frameBorderAlpha","frameFillColor","frameFillAlpha","frameChildBoxAlpha","frameChildBoxColor","zoomView","zoom","worldX","worldY","newNDCTranslation","viewportMatrix","compose","setViewportMatrix","panView","resultTranslation","getViewportTranslationRange","bounds","EFFECTS_WHEEL_FACTOR_TO_VIEW_PIXELS","ViewportNavigationController","minScale","maxScale","minTranslation","maxTranslation","setScaleRange","isFinite","RangeError","clampCurrentViewport","setViewportRange","isTranslationRangeValid","translationBounds","resetViewportRange","handleWheel","_pointerCaptured","hasViewport","accept","buttonMask","MouseButtonMask","normalizeWheel","classifyWheel","config","zoomDelta","zoomByFactor","ctrlPressed","panByViewDelta","clampCurrentTranslation","emitChange","factor","currentScale","nextScale","getListeners","listener","off","metaPressed","viewDelta","buttonIndex","MouseButton","WheelUp","WheelDown","WheelLeft","WheelRight","isApplePlatform","navigator","platform","shiftPressed","clamped","correction","getConfigManager","viewportRange","resizeFrameItem","frameItem","initialSize","currentWorldSize","currentLocalSize","localSize","localWidth","localHeight","setSize","currentPosition","subCompositionItem","getParentMatrix","INFO_TEXT_FONT_SIZE","INFO_TEXT_FONT_FAMILY","CONTROL_TEXT_GLYPH_PADDING","METRICS_STRING","BASELINE_SYMBOL","colorCache","toColor","hex","cached","_measureCtx","measureTextMetrics","fontStyle","getContext","actualBoundingBoxAscent","actualBoundingBoxDescent","font","metrics","measureText","measureControlTextCellHeight","resolution","safeResolution","scaledFontSize","ascent","descent","measureTextWidth","truncateText","maxWidth","char","wrapText","maxLines","lines","currentLine","chars","split","testLine","lastLine","drawCorners","control","drawLine","drawDashedCorners","dashLength","gapLength","patternLength","perimeterOffset","edgeLength","hypot","EPSILON","edgeOffset","patternOffset","drawingDash","phaseRemaining","segmentLength","startRatio","endRatio","drawBox","fillBox","fillRect","fillBoxByCorners","fillTriangle","getRotatedBoxCorners","halfWidth","halfW","halfH","fillRotatedRect","ex","ey","drawWithBoxTransform","drawFn","graphics","renderingServer","fromColumnVectors","pushTransform","popTransform","ResizeSelectionIconType","SCALE_CORNER_HIT_SIZE","INFO_ICON_SIZE","INFO_TEXT_BOTTOM","INFO_ICON_BOTTOM","getResizeAxis","ResizeSelectionGizmo","RESIZE_SELECTION","cursorResult","NORMAL","cursorPoint","lastPoint","activeType","NULL","lastWorldPosition","_isLockScale","handlesActive","_ignoreInteraction","iconTexturePromises","scaleEnabled","interactionEnabled","interactive","configOff","onChange","change","onConfigChange","edges","scaleCorners","widthScaleAreas","cornerEnable","totalBox","childrenTransforms","interactiveDirection","scaleCorner","scaleEdgeCorners","_keyCode","isApplicableSelection","clearHandleHover","handled","updateHandleDrag","setCursor","hover","getMousePosition","refreshTransformType","refreshCursorResult","SCALE","WIDTH_SCALE","Left","doubleClick","refreshWireframeBySelectedItems","TRANSLATION","getSnapManager","cacheSnapTargetsForSelection","beginTransformOperation","transformType","finishHandleDrag","ROTATION","lastActiveType","computeTransformType","widthScaleArea","find","area","findScaleCorner","edge","findScaleEdge","isSingleTextSelection","edgeCenter","isSingleText","transformEnabled","hasLoadingSelection","iconType","getIconType","itemBox","itemTransform","isBoxEmpty","boxExpandScalar","totalBoxExpandScalar","boxCorners","edgeLen","boxLocalAxes","halfLen","buildEdgeHit","mid","areas","filter","initInteractionPlane","viewportPoint","resizeSession","interactionPlane","initialHandleView","fixedPointView","oppositeScaleEdgeCenter","createAnchoredResizeSession","oppositeScaleCorner","draggedWidthEdge","getSelectionTransformKind","wireColor","childTransform","fillColor","strokeColor","corner","half","renderItemInfo","loadingManager","getLoadingManager","currentPoint","shift","setSelectionTransformKind","cursorRotation","handleScale","handleWidthScale","resetTransformOperation","frameId","refreshAfterPointerUp","getItemInfoName","xVec","yVec","edgeA","edgeB","dotA","dotB","textVerticalOnly","draggedEdge","reversedDraggedEdge","draggedIndex","findIndex","itemMatrix","textResizeMode","parentWorldToLocal","frame","component","fontOffset","extractRotation","pointerToHandleView","initialPosition","initialScale","initialWorldSize","initialLocalSize","frameAppliedTranslation","resizeBehavior","resolveResizeBehavior","externalTranslation","getIconUrl","urlMap","refreshIconSprites","previous","logoKeys","offloadData","getIconTexture","url","promise","fromImage","boxHeight","topCorner","anotherCorner","init","leftCorner","rightCorner","viewBoxWidth","sizeStr","join","sizeTextWidth","nameStr","nameTextWidth","availableNameWidth","textCellTop","drawTexture","textWidth","drawText","pointerView","handleAnchoredResize","session","handleView","snappedHandleView","snapHandlePoint","targetHandleView","resizeAxis","initialViewLength","projectedViewLength","currentHandleDirection","cursorDirection","handleWorld","isFreeScaleByDefault","isShiftFreeScale","isLockScale","resize","applyAnchoredResize","setTextWidth","initialBaseWidth","currentBaseWidth","propertyScalar","residualScalar","setScale","setResizePosition","magnitude","setFontSize","setLineHeight","translationDelta","totalWorldTranslation","localTranslation","lastAppliedPosition","snapManager","clearSnappingVisualizations","preparePoint","state","ignoreInteraction","SHIFT_ROTATION_STEP_DEGREES","CornerRotationGizmo","resizeSelection","CORNER_ROTATION","rotationAngle","rotationActive","rawRotationAngle","initialSelectionAngle","rotationItems","updateRotationDrag","clearHover","hit","refreshHover","resolveInitialSelectionAngle","itemIds","resetOperation","vecStart","vecCurrent","applyRotation","targetAngle","setRotationCursor","findRotationHit","boxCenter","rotationHalfSize","scaleHalfSize","cornerOffset","insideScaleCorner","xSign","ySign","hitCenter","hitOffset","xVector","yVector","angles","sharedAngle","LeaveEffectsEditGizmo","hitTest","isPointInEffectsEditScope","resetEditMode","BoxSelectionGizmo","deferToHitTarget","overlay","isBoxSelecting","mouseGrabbed","updateGrab","regionIds","filterSelectedItems","commitSelectedItems","selectedIds","getSelectedIds","wasBoxSelecting","emitMouseUpIfChanged","endPoint","candidates","selectableItems","selectableItem","resolveMarqueeSelectableItem","itemTransforms","containedFrameIds","ignoreIds","ignoreNames","frameAncestors","intersectsEveryFrame","frameTransform","nextSelectedIds","interactionStartSelectedIds","force","sameIds","oldSelectedIds","ChangeSelectionGizmo","commitHoverTarget","hoverItemId","preSelectedId","setHoverOverlayTarget","Right","resolveContextSelection","pressHit","createHitSnapshot","initialSelectedIds","pressTarget","topmostId","shiftKey","resolvePressSelection","isCanceled","resetSession","releasePoint","deferredTarget","releaseHit","targetStillExists","drillTargetId","getFocusedGroupId","isPointInFocusedGroup","setFocusedGroup","isPointInSelectedViewBox","selectedScopeHitIds","isItemSelected","hitId","selectedScopeIds","flatMap","copyMouseButton","InputEventMouseButton","device","pressed","canceled","commandOrControlAutoremap","altPressed","globalPosition","canceledReleaseFromMotion","down","isStandardShortcutPressed","ClickDragMultiplexGizmo","clickCandidateList","clickCandidates","dragCandidateList","dragCandidates","auxiliaryBehaviorGizmo","auxiliaryBehavior","winner","invokeMouseDown","clickWinner","downSnapshot","dragWinner","candidate","invoke","clearAccepted","resolveDragCandidate","canceledRelease","ordered","clearWinners","allChildren","phase","isAccepted","groupItemsByRow","row","group","calculateAutoLayoutIndicatorLine","insertInfo","LINE_EXTENSION","MOUSE_GAP","ROW_LINE_EXTENSION","rowChange","isRowChange","rowBounds","isMovingUp","toRow","fromRow","lineY","minY","maxY","minX","maxX","siblingBox","calculateAutoLayoutPositionByMouse","mousePoint","siblingInfos","column","mouseY","mouseX","rowGroups","layoutInfo","maxRow","minRow","rowInfos","centerY","sort","targetRow","foundRow","currentRow","firstRow","lastRow","minDistance","rowInfo","targetRowItems","calculateInsertPositionFromLayout","siblingsWithInfos","originalRow","sortedRows","firstRowNum","firstRowBounds","currentRowBounds","referenceItemId","firstItem","lastRowItems","refIndex","siblingId","centerX","lastItem","FrameLayoutMode","AssistedLayout","selectedFrameIds","currentFrameIds","pendingGroupDetaches","autoLayoutIndicator","autoLayoutDragOriginalPosition","autoLayoutDragFrameId","autoLayoutDragItemId","pendingLayoutPosition","begin","cancel","getFrameManager","getParentFrame","resolveReparent","frameManager","updateViewBoxes","frameInfos","getViewInfos","changes","lastTargetFrameId","resolveItemReparent","targetFrameId","updateAutoLayout","clearAutoLayoutVisualState","parentFrameInfo","findFrameAt","layoutMode","AUTO","draggedItemId","originalLayoutInfo","layoutInfos","siblings","childId","layoutPosition","insertPosition","createFallbackIndicatorLine","insertIndex","insertDirection","targetSiblingId","targetColumn","finish","placementChanges","pending","childrenOutOfFrame","groupId","originalFrameId","autoLayoutChange","fromColumn","toColumn","targetFrameInfo","getViewInfo","indicator","fillCircle","clearAutoLayoutState","currentFrameId","currentFrame","targetFrame","childrenInFrame","frameBox","inset","MoveSelectionGizmo","selectionBox","assistedLayout","applyTranslation","cacheSnapTargets","finishResult","actionEvent","resetDragState","prepareTranslationGeometry","move","currentSelectionBox","computeSelectionBox","previousSnap","prepareBox","snap","worldPosition","createSelectionInteractionGizmo","EffectsEditMode","effectsItemId","canRemainActiveForTool","tool","onEnter","enterEffectsEditScope","onExit","leaveEffectsEditScope","clearSelectedItems","cornerRotation","LeaveTextEditGizmo","_assert_this_initialized","ReferenceError","TEXT_EDIT_BOX_LINE_COLOR","TEXT_EDIT_BOX_LINE_WIDTH","TextGizmo","TEXT","projectionToken","forwardTextInput","payload","on","drawEditBox","SelectTextGizmo","pointerSelecting","setTextCursor","resolveTextTarget","_hoverTextId","isTextCandidate","HOVER_LINE_WIDTH","HOVER_DASH_LENGTH","HOVER_GAP_LENGTH","excludeEditingItem","includeNearby","HOVER_HIT_RADIUS","diagonal","SQRT2","offsets","hitPoint","hoverTextId","TextEditMode","activation","EnterEditModeGizmo","hitIds","setActiveEditMode","DefaultSelectionMode","ImageInteractionType","ImageCutGizmo","normalizeCutBox","NONE","IMAGE_CUT","inputPosition","refreshInteractionType","DIRECTION_SCALE","mouse","lockedAspect","renderGeometry","getSelectionGeometry","itemCorners","boxTransform","cutCorners","maskFill","gridColor","cornerFill","cornerStroke","drawCircle","MOVE","getCutInfo","cutBox","getCutBox","setCutBox","normalizeBox","currentInputPosition","startMouse","itemBoxMin","itemBoxMax","xMinShift","xMaxShift","yMinShift","yMaxShift","resultBox","startCorner","resultCorner","cornerSignFactor","originWidth","originHeight","resultSignFactor","resultHeight","shiftY","resultWidth","shiftX","farthestCorner","xScalar","yScalar","nextCorner","shiftDirection","resuleTargetCornerY","clampResultCornerY","resuleTargetCornerX","clampResultCornerX","resultCorners","hasInteractionType","dis","ImageCutGizmoTool","ImageExpandGizmo","normalizeExpandBox","IMAGE_EXPAND","expandCorners","getExpandInfo","expandBox","getExpandBox","setExpandBox","ImageExpandGizmoTool","EDIT_TEXT_FONT_SIZE","EDIT_TEXT_LINE_HEIGHT","EDIT_TEXT_FONT_FAMILY","SpriteTextEditGizmo","SPRITE_TEXT_EDIT","preSelected","selected","cachedCoords","computePreSelected","targetInfo","emitInfo","initResult","initParams","param","originBox","getItemOriginBox","initInfo","hasChanged","targetBox","clearResultData","setSelected","setChangedState","setEditState","changed","entry","viewCorners","isPreSelected","drawEntryBox","currentPreSelected","fillAlpha","lineAlpha","textFill","blockHeight","topY","li","textInfo","SpriteTextEditGizmoTool","MaskGizmo","MASK","maskImageLoadVersion","previewCanvas","maskTexture","refreshMaskImage","getSelectionTransform","toNormalized","clearRenderObjects","renderTransform","renderPreviewToCanvas","sourceType","TextureSourceType","flipY","updateSource","imageCanvas","getMask","selCorners","setMode","close","clearMask","loadMaskImage","img","crossOrigin","ctx","maskHexColor","padStart","maskBackgroundHexColor","fillStyle","drawImage","imageData","getImageData","mcR","mcG","mcB","mbcR","mbcG","mbcB","brightness","putImageData","x0","y0","x1","y1","globalCompositeOperation","lineCap","lineJoin","strokeStyle","beginPath","moveTo","lineTo","stroke","getMaskDataUrl","toDataURL","loadVersion","brushHex","clearRect","save","restore","BOX_SELECT","CIRCLE","MaskGizmoTool","DRAG_THRESHOLD_PX","isDragThresholdReached","startClientX","startClientY","currentClientX","currentClientY","ItemCreateType","DEFAULT_FRAME_SIZE","DEFAULT_TEXT_HEIGHT","TEXT_FIXED_WIDTH_DELAY_MS","TEXT_FIXED_WIDTH_DRAG_DISTANCE_PX","ItemCreateGizmo","_createType","dragStartPoint","dragStartViewPoint","pressStartedAt","frameChildren","interactiveChildrenBoxes","isFixedWidthText","textDragDirection","textBox","createItemId","dragCreationStarted","Date","now","generateGUID","refreshInteractiveChildrenBoxes","createInfo","getCurrentDragCreateInfo","resetInteractionState","updateTextDrag","dragCreateInfo","getFrameDragCreateInfo","pixelPosition","frameData","TEXT_CREATE","FRAME_CREATE","playerComposition","effectsItemIds","frameItemIds","filterItemIds","isTextPreview","previewBox","getTextPreviewBox","hoverConfig","hoverColor","updateFrameDrag","getCurrentViewPoint","resolvedEndPoint","createBox","committing","horizontalDistance","resolvedEndX","emitDragCreate","getTextDragCreateInfo","pixelSize","pixelWidth","textData","actualBox","createType","ItemCreateGizmoTool","gizmo","configEqual","is","leftRecord","leftKeys","rightRecord","createStoredValue","ConfigManager","definitions","assertDefinition","partial","validated","validate","accepted","handler","existing","GizmoManager","configs","_activeGizmos","findGizmosByType","getAllManagedGizmos","getMultiplexCandidates","multiplex","auxiliary","activeGizmos","gizmos","LoadingManager","tip","loadingBox","addedIds","removedIds","updatedIds","clearSelected","update","ids","calculateShelfLayout","gap","placedItems","currentY","rowItems","currentX","currentShelfHeight","currentRowCount","wouldExceedMaxWidth","maxRowWidth","needNewShelf","maxRowCount","calculateMixedLayout","withColumn","withoutColumn","rowHeight","assignments","nextColumn","computeFrameAutoLayout","cloneLayoutInfo","cloneLayoutInfos","infos","cloneRecord","record","FREE","autoLayoutConfig","FrameManager","records","boxes","upsertFrame","input","ensureFrame","deleteFrame","hydrate","snapshot","getFrame","getFrames","setLayoutMode","setChildren","addChild","removeChild","setLayoutInfos","setChildLayoutInfo","setAutoLayoutConfig","computeAutoLayout","computeLayoutInfosAfterReorder","targetItems","toViewInfo","FRAME_INTERACTION_WIDTH","FRAME_INTERACTION_HEIGHT","Selection","hoveringResults","_selectedIds","getEffectsEditItemId","_effectsEditItemId","_focusedGroupId","isSelectableGroup","addSelectedItems","normalizeHierarchySelection","old","updateFocusedGroupFromSelection","newSelectedIds","removeSelectedItems","setSelectedItems","addSelectedItem","setSelectedIds","pickOnDoubleClick","filterItemsByHierarchy","pickOnClick","regions","getHitTestRay","region","refreshResultRegions","reorderHitTestResult","isIgnoredNameById","preSelectedFrameOutBound","resolveHoverTarget","commitHover","overlayItemId","addIgnoreIds","deleteIgnoreIds","addIgnoreNames","names","deleteIgnoreNames","setIgnoreNames","findUnselectedItem","getSelectedScopeIdSet","selectableIds","drillableIds","effectsItem","effectsOwner","previousId","groupFilter","resultSelectedIds","effectsOwnerId","getOutermostSelectableItem","focusedGroup","match","isDirectlySelectable","node","isRuntimeAncestor","hitTestResult","effectsItems","effectsItemMap","compositionChild","subChild","reverse","results","dfsItem","targetItemId","isNeedDepthTest","occlusion","RichTextComponent","tryAdd","currentSelectedIds","framePlayerItems","frameBoxInfoes","hasSelectedFrame","frameBoxInfo","interactionBox","ancestorLists","getGroupAncestors","commonGroup","ancestors","ancestor","itemById","uniqueIds","ancestorIds","hasAcceptedAncestor","ancestorId","acceptedIdSet","isAncestorOfAccepted","acceptedAncestorIds","acceptedIds","collectItems","hoverOverlayItemId","SNAP_EPSILON","SNAP_MARKER_HALF_SIZE","SnapManager","targetBoxes","axisSelections","clearCache","selectedIdSet","selectedAncestorIdSet","getAncestorIdSet","scopeItemId","getCommonSnapScopeId","cacheSnapTargetBoxes","isSelectedOrDescendant","getNearestSnapScopeId","getSnapTargetBoxes","getSnapTargetPoints","otherBoxes","xEnabled","yEnabled","previousResult","clearFrameState","unsnappedShift","sourceBox","considerBoxAlignment","considerGapSnaps","publishResult","otherPoints","sourcePoint","considerAxisCandidate","getSnappingVisualizations","snappedBox","appendAlignmentLines","appendGapLines","deduplicateLines","isSnapScopeItem","scopeAncestorIds","first","rest","orthogonalAxis","sourceCenter","targetCenter","sourceCoordinates","targetCoordinates","sourceCoordinate","targetCoordinate","validBoxes","sourceSize","firstIndex","secondIndex","second","rangesOverlap","hasInterveningBox","existingGap","createGapSegment","desiredMin","desiredBox","moveBoxAlongAxis","gaps","beforeMax","beforeMin","beforeBox","afterMin","afterBox","pointGroups","pointsEqual","targets","pointProperty","pointMatches","matches","coordinate","toFixed","matchesAtCoordinate","NEGATIVE_INFINITY","markerPoints","createAxisPoint","snappedPoint","deduplicatePoints","marker","appendSnapMarker","orthogonalCoordinate","crossCoordinate","overlapMin","overlapMax","unique","forward","assetsPrefix","cursorMap","hand","loadCursorIcons","downloader","cursorIconLoaders","Downloader","downloadText","status","all","catch","LOADING_TIP_FONT_SIZE","LOADING_TIP_FONT_FAMILY","LOADING_TIP_COLOR","LoadingGizmo","manager","loadingBoxSize","_idMap","managerOff","syncManager","onLoadingChange","cb","updateItem","loadingItem","updateLoadingVFXItemTransform","drawLoadingTip","disposeLoadingVFXItem","loadingVFXItem","createLoadingVFXItem","positionedLeft","availableWidth","measureTipText","measuredAtBaseSize","textMetrics","textLeft","inkHeight","probeMetrics","inkTopFromCellTop","activeIds","createProjection","itemViewBox","currentBox","getViewBoxByPixelBox","getViewportParams","EffectComponent","effect","aPos","aUV","idMap","loadingIds","DragType","HandGizmo","panKeyPressed","dragType","isPanning","physicalKeycode","isMouseButtonPressed","shouldPan","Middle","isHandToolMode","beginPan","handlePointerMove","endPan","pan","getViewportNavigation","armed","ACTIVE_HAND","HAND","IconType","IconGizmo","ICON","hoverVideoId","computeHoverVideoId","videoPlayResult","POINTER","refreshVideoIconId","getCurrentTime","refreshResults","checks","generatorItems","videoItems","DragThresholdState","GizmoViewport","onMouseEnterCallback","onMouseMoveCallback","onMouseDragCallback","onMouseLeaveCallback","onMouseWheelCallback","onMouseDownCallback","onMouseUpCallback","onKeyDownCallback","onKeyUpCallback","onUpdateCallback","drawCallBack","mousePosition","globalMousePosition","dragStart","mouseInside","mouseButtonMask","dragThresholdState","mouseFilter","MouseFilter","Pass","focusMode","FocusMode","Click","mouseForcePassScrollEvents","setAnchorsAndOffsetsPreset","_deltaTime","onMouseEnter","location","recordMouseInput","hasPressedButtons","onMouseWheel","recordModifiers","isMouseInside","hasCrossedDragThreshold","createMouseEventAtCurrentPosition","InputEventMouseMotion","Control","ControlInputPhase","GestureHandler","activeGizmoTool","selectionTransformKind","gizmosToDispose","onPreselectChange","hoveredMediaItemId","previewEnabled","gizmoManager","viewportNavigation","editMode","createDefaultEditMode","createViewport","eventName","emitter","eventEmitter","kind","commitEditMode","redispatchMouseAtCurrentPosition","rebuildGizmos","errorMonitor","report","gizmoType","gizmoViewport","cssCursor","svgStr","encodeURIComponent","cursor","pointerShift","svg","defaultCursorShape","getGizmoManager","specificGizmos","createCommonBeforeToolSwitch","setActiveTool","gizmoTool","resolveEditModeForTool","disposeQueuedGizmos","setErrorMonitor","reporter","clearCapturedGizmo","deltaTime","dispatchInput","drawGizmos","nextMode","previousMode","modeChanged","viewportChanged","capturedGizmo","handleMouseInput","handleKeyboardEvent","savedOwner","canDispatchMouseEvent","dispatchMouseEvent","localOwner","viewport","handleGizmoError","errorPhaseFor","gizmoControl","drawHoverOverlay","drawGizmo","drawSnappingVisualizations","visualizations","ViewportOverlayGizmo","VIEWPORT_OVERLAY","safeAreaTextures","safeAreaTexturePromises","mainViewportBoxProvider","maskFrame","viewProperty","anyItem","projectPreviewBox","markFill","screen","previewSafeArea","pw","ph","visible","previewCorners","getSafeAreaTexture","cr","cg","resultColor","safeArea","safeFill","topRatio","bottomRatio","leftRatio","rightRatio","previewSafeAreas","registerPlugin","version","logger","EFFECTS"],"mappings":"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"}
|