@galacean/effects-plugin-editor-gizmo 2.9.1 → 2.9.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.min.js","sources":["../src/define.ts","../src/gizmo-vfx-item.ts","../src/geometry/index.ts","../src/wireframe.ts","../src/gizmo-component.ts","../../../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/_wrap_native_super.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/_array_like_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/_unsupported_iterable_to_array.js","../../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.es6.mjs","../src/constants.ts","../src/util.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/mesh.ts","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_instanceof.js","../src/raycast.ts","../src/shape.ts","../src/gizmo-loader.ts","../src/index.ts"],"sourcesContent":["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 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 { ShaderMacros, Geometry, GeometryDrawMode, Engine, spec } from '@galacean/effects';\nimport { GLSLVersion, glContext, GLGeometry, 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: Uint8Array | Uint16Array | Uint32Array, releasable?: boolean },\n geometry: Geometry,\n}\n\nexport class SharedGeometry extends GLGeometry {\n private readonly source: GLGeometry;\n\n constructor (engine: Engine, options: SharedGeometryOptions) {\n super(engine, { attributes: {}, ...options });\n let indexData = options.index ? options.index.data : options.geometry.getIndexData();\n\n if (indexData) {\n //@ts-expect-error safe to assign\n indexData = new indexData.constructor(indexData) as Uint16Array;\n }\n this.indices = indexData;\n this.source = options.geometry as GLGeometry;\n this.drawCount = options.drawCount || 0;\n this.drawStart = options.drawStart || 0;\n this.mode = options.mode || 0;\n for (const name in this.source.attributes) {\n this.attributes[name] = { ...this.source.attributes[name] };\n }\n }\n\n override initialize () {\n if (!this.isInitialized) {\n const geometry = this.source;\n\n geometry.initialize();\n //this.indicesBuffer = this._source.indicesBuffer;\n this.buffers = this.source.buffers;\n this.bufferProps = this.source.bufferProps;\n //this.dirtyFlags = this._source.dirtyFlags;\n //this.vaos = this._source.vaos;\n //创建ibo\n if (this.indices) {\n this.indicesBuffer = this.createIndicesBuffer(this.indices);\n }\n this.flush();\n this.initialized = true;\n }\n }\n\n override getAttributeNames (): string[] {\n return this.source.getAttributeNames();\n }\n\n override flush () {\n this.source.flush();\n\n super.flush();\n }\n\n override dispose () {\n // from source geometry\n this.buffers = {};\n this.bufferProps = {};\n super.dispose();\n // @ts-expect-error\n this.source = null;\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} 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 as any).props.content.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","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","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 _is_native_function(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\nexport { _is_native_function 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 _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","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","/******************************************************************************\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,iVBORw0KGgoAAAANSUhEUgAAAGQAAABmCAYAAAFKLQTJAAABYWlDQ1BrQ0dDb2xvcl\n NwYWNlRGlzcGxheVAzAAAokWNgYFJJLCjIYWFgYMjNKykKcndSiIiMUmB/yMAOhLwMYgwKicnFBY4BAT5AJQwwGhV8u8bACKI\n v64LMOiU1tUm1XsDXYqbw1YuvRJsw1aMArpTU4mQg/QeIU5MLikoYGBhTgGzl8pICELsDyBYpAjoKyJ4DYqdD2BtA7CQI+whY\n TUiQM5B9A8hWSM5IBJrB+API1klCEk9HYkPtBQFul8zigpzESoUAYwKuJQOUpFaUgGjn/ILKosz0jBIFR2AopSp45iXr6SgYG\n RiaMzCAwhyi+nMgOCwZxc4gxJrvMzDY7v////9uhJjXfgaGjUCdXDsRYhoWDAyC3AwMJ3YWJBYlgoWYgZgpLY2B4dNyBgbeSA\n YG4QtAPdHFacZGYHlGHicGBtZ7//9/VmNgYJ/MwPB3wv//vxf9//93MVDzHQaGA3kAFSFl7jXH0fsAAAA4ZVhJZk1NACoAAAA\n IAAGHaQAEAAAAAQAAABoAAAAAAAKgAgAEAAAAAQAAAGSgAwAEAAAAAQAAAGYAAAAAdrOvGwAAFPNJREFUeAHtXQuQHMV57u65\n 093uKQjxMI9gm0iYMlElJiEovCqAbOxwDwlwhAHZ4WFHMjgIDCXpTjGGIHx3kmwMghgLV3iUA2Us85DuTsERFgaDMBASKlXEs\n YNkO1aQsUA8otu913Tn+2fVc709Mzszu3u3e5Km6q67/7+7//7/v9/9dy9jZXzcTNPbOrhAMvaECdP+lZtb/Li+p7t1UFEErs\n THdUTtKi5/RH6dUFAACd4gNyyBCfczJiAFohIQXn9EUYjGkz1KGhjnovwDUo6+Krrbcj+Li6zxQonbyS+YYm9qYFJXrNycPSd\n pZC1FnyfOeFOSxCR2L9Hpc7ONkrubSyXSVCiOl+jcW/gYKD1KCBNJEaRSH9AwrVy/RlAE+rQCC6HC/wZHnLO8L/OMCUvlL6IS\n RoFy00Uiv59AR7arEef8I5K539YJvQSFyPwZrvithAj7SADTZ2Zn8Kic7UQO4w1j3P2hJ167GHZkCrtMjZHrJSBP0q+8BNxxj\n ktMQQixGI3mwbgESsiHKY4h1ui2TxFJrH7N1ZrUlY0i6I9gng5mZ5sJ5muaAtDJv8A5j/zmpzMkWFECM5L2d184dCIbdn+uw2\n GumWEYPpSIrjFmArS1HagU1yumBj244h9lQt6NsJUH347u44TitEbIzJwz9QumnKsNdKzXkvX74HAGJfJLUUQgpNuPpWBEMIm\n RKD0i4wR4Di2ww4hfttckJLpbc0t1TtUiQPmZjVqAlW5NZKJcgTb75xORuTnGWDopZrMS4uM64UOTV7t0iTHVuQ9TnSt12FSe\n hkW6Qp6uFLtN481ewOdEI8ntaVMzlcrtMWFJ/WbmOk0oEY003Z7Wwc2Y4JxvwtDKvtY10PIVE1YzfywnPa25X6ITPD6yhILdt\n rK/5aZIPBCRRMa7mlLJDRznv145kD3egPjeAJE1HSN/OuaOvuLH2OcRTPSi9mzRcC7UlzClukiHtRur+J723Bol1TKdAHOZV5\n jky3U4yh1veIUYNiGfkzUXDM0eG3Ff1xmlaiNIhJp2tGTyIZ3eJORPUiohQBlDlL91pPiEJmLq1CNiAtJyoDMlV2I4FZzfoWH\n dHUPt5Pc5KSD4/+oI5bpK8j4/ret6ftHTlvNmUoTAoPXXfoQKPEI5rWZyoZS61ARUw4/GO6zz6WkbHPDFhUHmWY2oposK0eoT\n gcLuq2bmZl4+EZfz3Saimn6fiHDVn1UzYzMvn4jkasLGBZ8I2myjSb1afs6d8wStyaqVoZ8PZ36r7xpofkosfYi/r5F2b6rha\n V3F5B+ZaTxxccEv8YFcrfL9ZXjMguqe2CPS1Z99ROeH1noGxku/N9XwJC72aGjVte/jz/s+7SG3qDdm7D30qYGRz4xv+k0OCK\n 65IL8/aFGAPpMQhdH1U0/gD0YEK/q4/AGmSjNNmEmA4AEiBLQJESzJh+F6U9dAdoEdN5SIjpSGmF16nQe5JYnoiD0d+XmYYGz\n BGOs3XpR6x9FHZuZc+QAf0vGi3EREohLb8PWLVePbO/NXo+jzuWLzgitj4orvxL9NjsMeXr4p69dAO6+04bIZ6W7P3YD9sm+k\n JRgTf1fj4dmPLPsuL2wVxEQ20akYwZQjhxlBxsxgIv1YM1/TOdByTxIasYxgqrEYM4H1JTPj7DUpnS5Hb7qUjGwhhWqFcG60o\n MVBziWWC04xsDgUyUh3W/5ypuQDxdHHQ1j8t6Nx5schVfJxtRRtK9AtUe5oX6prc9bvDEyKoYxEd1diCxpxr5nBRPkxBXRc5h\n pD0zgl9GZ3ow++dhxidY297SMfo9MBMwL5vZ5G8ctt+GSEHc6zY6ywLjDpgRkXzDRomK+R1e35j7tSPqUR2gUTl2F/8U0drpn\n LFXYpVOBYQw9gXn37/kLlhDHhMOeTdcEESU/xVmghIFB0RrsI7WkkrE0Ixm9UigeqGSWq5WfPuKgsDU7jKaLngvzxYQWrRyao\n nJw1/JVdXtqcEWpE3msjOBM9Nqxuwkq+E1YWaiOBvWCcOW0Li1zPMHTX/Hd2AceYKpqY2/h6DKNNh+09yM/WY2FLlSmy16pkN\n 60UwYpxXH0B40nRVhZq1YveOIJBb6tNQB9T2vBah20mqDwY4U/zGMFELGBzAXOEo5hQa2pdcJN+2BjChNNGcTxGyKOHevLrD9\n PrU7Cn8EMdrpWLWfxJYUwIwa9f2d/sGVb4cy1dSFiTDGPdPE2HtYsdnXXM5Rt1eLLcMAaIttPgfHTFpuaf63IEGCFEb9tQm1R\n uv45kuliH/ADrkESrNjNdGn+D4GJUuf6RiZk2ak0SyohOiCPg5zBbO1OHbRczgG+jLW2w4eWEC4Yf8gnQi1xKN7dkszds4KGL\n uZKM6AIl3mhAZcbCa0ODcB4Zc+V7On3QVacyLq9SjJ8YxBVDoIFRdEaBql4cy1pY2ciwMJbA0IJcEoarGowEwjJHdA3w0HlVG\n J1EGglLqGEFCwR1pw6X5/J/nd6SaV26YeIOH8orVw1SVawRs8xr5ufOdF2GpTGbjxH4OBNHfupxYJWzFfhNhx+XuWfJvXzUjl\n NuuGJGutsHVzHJyj7FAXO/Uk3iUysfb/5FuUxQurIYWfs51TL6du6/kf6YSogH0gp+48r+rGeyGcDFAFIzgpH/Vxj5PxyTb0V\n ozJsu6NzckmoWkZiR3rbBq6Vi36qohCkSY2qex6w2mzRJIkbQxb6OEXd2XKbUmGGn8LhyxY/g/S87PvAtgJ+BjuBi/M2y8WFh\n 2iFZ3jft38JwJiyWEVQlWIGOH76YibUf0vsGbBO8WaiGJXFdMCaE24NebE6p+BDOEpgLBTZJzDQlGQnb7zITC+Z8EVN9avSVf\n 1j70LIhKiPMvtfiuHN5JD4KATMkNAnbFrMQG1VkI1DrotKWC0dhM1Gzbi9PLq5YOZB5MCz/UI1AEzThOyQsAaySFpEpTRiuaj\n Du3hM1oWyY5pyw/Inm7TYtf4WoETiVugv+UCZoL3jCmaCCeEa1Yosuk+ma9kwmvEgj6xapQ/a+kyNtBD4yZiJbowBiAgFYZn8\n VXJ0dQmIXlubHmvAijQy+m99jIrW/gTkdk80E0UZnfiva405dDsM9hs5yjPD45gNZcqHXCJzTkbWXC7tNM9Gk+iMOmOwDqXGN\n 7LMWMwsJaQwXWZSZyEn0oxyXhZGjwykN9xix1aSRjhLztb+mrndiFjTzMw+nPEaUGn3SLihG6zf1xQ4bV4uww8SVYXTptI3g+\n xhhR9uRuAxPaMebrDAsaF00/0Bb3Z7Lf5fKIMgcN6wwGNWHw+C1hEHqAYNmdFCXUpmEK0dX2YXDYDFgw+ohXOo4ENamrMj8lA\n osWMP99VDwpGWgc1CvjQQSRJzTBeLVAICu+FmbrBpR88MZsWPWVXjcylAXCzOntinHCEyf/B14zQiWpR+acoxg/vW2ZsB3lTp\n 2yjEyJrCLZn1oN86UYwTmh4dbfNDu3BtTjhEsoGbZjGAImXqMwNL7DJsRrPULN4MDiITXve10kxPm59p0OBebyITjRRuBA8jP\n 2bD6CQdvJHT2Nb2GNiICO+mYMHoTsfopfKEkpS5wC7q2UG8FjiqPVKMBAwZ0vZ7Vxr5eK8T23LijEZXxpMPJGsP6WmZmLiRQg\n REhPm3hse9TfA/Exk96OMKcRN+B8RjRZhB24erFsAbVpylsX5jeMdBl3le1oBrYdWig70KVZAfih2vkkVxuCiPd2Z/5job7jH\n T2Z+/UQNPFxOZuMzzpfu8mk/INlTV9DIKXaD+5PiMUIEMVcu0vyrDFjlf1sKMWYCgIjOSw+hsxb1QR3SJGCtY2wYULRSy+QkW\n QCf5w1QvGO0vDqJx+aqbFhhdtYmtkqbORRtzJG5MqMJXWaavhotrgvNIN2PdS3nRLonOgObA5EsoIJSh1WoWjsK8wKV6geFX/\n uHwMuzgzwvJF9bkfp71XReDCwIyRSVE4BtUMjxegqvWTaVJUnNRwzhZSW4xiAouO56OYIFqRGiHkumtV097tuSHyR33I4B0p+\n TWYff4uKk4MfBEYCJWyTodx5FGYOoVWtfE42lfCRZsZQe8Rew+28IQL3VzkL0dlh2eVZoxJ9zM4nVwYd1rs5ZHQGqKkRszC4E\n huI0bXSd2dxx2Yw5LabCVmhJjy3upg+bcSSdKUQlo/F+txevvFNMlSMaIzXtORPxumfj/W4Sq6W3A2+Mly8iuLEU1o3UJ15N7\n BPCweKr0Rz6/DW0oVndtXxIhmiNz7r1DNv92dw2qTX4q2NMvEFfk9A04YRTvi6119GW9RVIQvM1A1RsqknzrZ07eohv98jTW/\n n3uvEcYDjdKd3uCMDXk9qtvQPCqcvWM4ix89JDtj9A/nsCF60S41kRomqBuFoDbyNQtyp+AQeR5O2eZhi/csDF2BuWE1ZIXxl\n Z56fA5j+Fa8i7N1+cbsK9hMwpyi9l9NFEITn8EducvRLVwFRQRueNVSLIVdPnVfy6zsg0vv4pN+ijopClnfobJ75NCX8f7P9Z\n g2H1FLgaeljfXKW1gC3XGYaP7mkr7g2Xja/OLiT5hC1nbk/2BMyruggLa4QkwlPBQ00CDEtcv6Mr+ciHJXVSGezdq7+e9gYnz\n xRBRW54lCvwMrQZiV4XEDjlqrWOFeDK5pgDYWtTyDZdFhGBRm6jQT4nL+/emHZv5Gb3RWg0ZVFLK6LXcRjFEfxiDcVHmh+AiW\n 3tuE5M86jni19J2g9NRobeq68mQp1F9AkdgtC16JS5srJgnDODC/bMVA9rG0ae34FSmkpy1/k1LyVjvTNGEw8yLOzB7CLtxra\n dJVOy420eaAl0WoVBVNMsDLV7sGMgELpaTlLUsh2E1ZhoIHTo2SEIUC3kI3cw+O+3+cJH7N4gh2Drq/q8FnWZMQ8LkcW1dr05\n Y/lUK624damZQb0cxTbSxiKrkX9/DWok9/Lm0B6yE+hHSWEmoZpujT05UHi1IhFkSdn4XllUghsN+ctj2X24YZU+RliLDM0RJ\n eYlz8PXdVyc3W0LR1CFQOb8YV0pvRcuamKR5mZq/MzmbPuHgDxseYL1YheKj1QvTvqQYrrhwc9FV6RTSm5DVH8+sUd1PtG2Oc\n ugjHa4+XKnpJhWCsuAN96HWlMjBx2Hz4d9wr6awnq22zfNX205kQnsvqxWnCnyTNG2PLnRhbgqfm+zKIVAhODp5Hnxk8RA2lz\n EeE4n+LMSJwSyg0+n4GhBBn4+7+3Umn0BhTt+Fa5ZlhYhBhQLSMF5IqA5uAL+Dv/ANVGSQ/4p1kQLIIk6cNI9mSjG04hQMtBF\n c/ccFcnRsW2YbFPm1qJzgwwrGnub4YOH8a7zTO88PwFLUQdFO3J1UGLFVoHRL9zqxJ5cDyQyaebOK5RsXvbc0VPZvqt5DejqH\n zpVv694w0BcwWavLajqY/JVwyZIqwAbLLLxyntbOv+Z8J7rUQdQuWPdJNVNuhwSdr8fSRzUTdh/E8lCerBAUl2ZMOKKr3r+fl\n /A1Y9CXYGYWVjBKptwMSlGn/jOLJKt6yiGRPOvAUsk8zNyeTiLo3WbyDscYlkFhmN5MuOB4y+xRMBZ8czyDKx/8H07oro7AH4\n dESwPn9/Zgcfyg6RgED08y/FLB2T7T8x37Ms3EZHsRHSICzn0RgisCkC/pBy1OLoFEByQJXfKKiHoQXS4BL9tNiSEQIusCOBz\n s2Al0ERqblmr0W5XMgBpLKjnSBk8fgawhhQlNM7AmDH4TFSyCp7EgXmPaq3fFZIobDQ83rE6U90CMllp3aTWPIriTyghVHWUe\n ZSfLe3+Mklh10gZfI2X8kEwhefT34lSmBhLKDLgQ0gtO9+A8DTsKzkfi8DrQYSWVHuhCZWZkBHJjgCaHSH0xkTsIZeboz9dJZ\n HhhYyMyTXQy3pAPShfAMilVSk56xL8TkexBtSQCLvWQygw5IF97mYlNLdhVq/4iVVyDoPfIo1MHtk4BkIgCerNSJEdhxMGTv6\n QAQTyH0ZjwO7K8ZjxHtw/HjZ9EnpjKDic5t/8WQjEhWSTgk2et3+7EWGf9wzvs9WJl8ZhwS7XO482UpVcIZWnQ++yMGbzH8sa\n vcbybhDVYoj8AK5RId12shOjC7JbMIg8sOHS7lEkFsOB6ceVlCIpkkVgZkTTI3syhqIYQgK8XXc/kdOFv/fTNitJ8/jG35f4z\n GHzgYbLN/HjsflyXhGC1jJ5Qx27ZmDCiEMrt9ocoM5/Kvow88NlHmeNIUr6cvxjW9vUni729xcD1yOnfkvZDXUUl4Qy/0RlM2\n c4IeN8w0oQrREfArgltwvPgJHY5zQeif8DI8DmMOoA8zqaSDN0kFXdpTeN3+vCgJFY0hdiRKiAwS33WggsFcYgu0fLad1/4WJ\n h6J1zTKwDbVraWUQTIq2UK0EFdflDtODqtX0VqCbx/qSJaLPlIh+/XYvNxgoaZ2kF4FYWoJZqOJZEfMolK/LZr4ySsey+6MYz\n 5xppQRurDboJS/i8s0gMcvNTdIvgo/WpFsqz+QQW0B+IXpI8eEugmVa07akkAZX0OrwMsQyb5UCqEsn8ZLCj99Kfc4qn97MhJ\n 2LP6McNm3YF+B68b1+3GpjpAOw2I59IcOYgsOwfafNjd7YdqXJFIrRJdk343bJ5KbnuqUposWo9gjuJc3gHxit27MlFX3cz4N\n m4Bt6MSxMFZHlp0/7HVxM/eCcm/mlq0QXWCyJep9aegfsImW6v0end50adxBy3sVStoCg7znJ2oaTdNU/KLfmRD+eRDAyWnGA\n 7O8pp9+JrFzbvOX+C04Qa/gq1ghJu3VHbnTXMm+h9r+YRNeLT+m1f8HYf5GcPkbuHswruaxGMtDGDmigUqRxSI1A71moMzDpB\n IfhPtBzIR+r1plKMqH81/jWepLVvRlk1mVFCUOD1RVISaJntb8FRAQWciX3/zNDOvHvxsVADdsMw9MRJEmTCFmYXs6Bk/FgvF\n 21NSzTPhU8aNlPodfP76hq6/l5Yku86QoxGZidXtuLl5+6MSA0YGOpsHG1zbMxzBV7YN9VO+K/uxLk12WmigkjMnVbcMnYZbz\n adzVw1tZjH45sArPdIRRKsAwgRjG0m4bLAW3Ypb36IqBpp9Fx548TN0oJI7l9YtV47tv5Y+So+oYGCUf6rpuBucOzVJKDOAYy\n PGhS8zjseg8zmmGHMfJw4j8XdHIdx16RObNav7+a1xZK8H/PxR1Mkje1IZfAAAAAElFTkSuQmCC`\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 { 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, 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","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","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 { 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":["GizmoSubType","BoundingType","GeometryType","WireframeGeometryType","CoordinateSpace","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","instance","Function","bind","_get_prototype_of","getPrototypeOf","_wrap_native_super","_cache","Map","toString","indexOf","has","get","set","Wrapper","enumerable","_array_like_to_array","arr","len","length","i","arr2","Array","_create_for_of_iterator_helper_loose","allowArrayLike","it","Symbol","iterator","next","isArray","_unsupported_iterable_to_array","minLen","n","slice","name","from","test","__decorate","decorators","target","desc","d","c","r","getOwnPropertyDescriptor","decorate","defineProperty","__generator","thisArg","body","f","y","t","label","sent","trys","ops","g","Iterator","verb","v","step","op","pop","e","SuppressedError","color","xAxisColor","yAxisColor","zAxisColor","renderMode","glContext","TRIANGLES","axisIconMap","createImage","imageUrl","image","Image","src","onload","onerror","moveToPointWidthFixDistance","targetPos","currentPos","vecCameraItem","clone","subtract","scalerVecCameraItem","normalVecCameraItem","normalize","multiply","vecItemScaler","vecScalerItem","add","math","Vector3","Ray","Matrix4","Vector2","computeOrthographicOffCenter","left","right","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","Math","cos","sin","createXZPlaneCircle","createYZPlaneCircle","SphereGeometryData","widthSegments","heightSegments","phiStart","phiLength","PI","max","floor","thetaEnd","min","grid","index","iy","verticesRow","uOffset","ix","_this_normals","u","_this","normal","toArray","BoxGeometryData","width","height","depth","buildPlane","w","uDir","vDir","widthHalf","heightHalf","depthHalf","point","vertexCounter","numberOfVertices","CylinderGeometryData","radiusTop","radiusBottom","radialSegments","openEnded","generateCap","centerIndexStart","sign","halfHeight","centerIndexEnd","cosTheta","sinTheta","px","py","pz","uvU","uvV","indexArray","generateTorso","slope","indexRow","ConeGeometryData","TorusGeometryData","tube","tubularSegments","arc","j","cx","cy","PlaneGeometryData","gridX","gridY","gridX1","gridY1","segmentWidth","segmentHeight","ix1","Euler","FrustumGeometryData","position","rotation","fov","aspect","_this_points","halfY","tan","fovY","halfX","point1","point2","point3","point4","matrix","fromArray","toMatrix4","result1","transformPoint","result2","result3","result4","DirectionLightData","linesNumber","start","PointLightData","range","SpotLightData","spotAngle","FloorLineEdgeGeometryData","sideLength","parts","end","createGeometry","engine","type","size","geometryData","segments4","Geometry","attributes","a_Position","data","Float32Array","a_Normal","a_UV1","Uint16Array","mode","drawCount","createMeshFromSubType","subType","boundingMap","iconTexture","options","scale","boundSize","xCircle","yCircle","zCircle","center","xCircleBounding","yCircleBounding","zCircleBounding","xCircleTransform","yCircleTransform","zCircleTransform","centerTransform","WebGLRenderingContext","sprite","createSpriteMesh","camera","light","translation","createTranslationMesh","_step","axisSize","axisMesh","createAxisMesh","_iterator","mesh","transform","arrowSize","xArrow","createBasicMesh","cone","depthTest","yArrow","zArrow","xArrowTransform","Transform","valid","yArrowTransform","zArrowTransform","setRotation","translate","planeSize","xyPlane","plane","yzPlane","zxPlane","xyPlaneTransform","yzPlaneTransform","zxPlaneTransform","delta","createAxisBounding","triangle","triangles","firstGeometry","getTriangle","backfaceCulling","createScaleMesh","boxSize","centerBoxSize","xCube","box","yCube","zCube","centerCube","xCubeTransform","yCubeTransform","zCubeTransform","centerCubeTransform","sphere","pow","viewHelper","createViewHelperMesh","texture","posXSphere","posYSphere","posZSphere","posXSphereTransform","posYSphereTransform","posZSphereTransform","negXSphere","negYSphere","negZSphere","negXSphereTransform","negYSphereTransform","negZSphereTransform","radiusSegments","torus","alpha","geometry","getIndexData","getAttributeData","mat4","getWorldMatrix","i0","i1","i2","p0","p1","p2","projectPoint","isCentered","xAxis","yAxis","zAxis","xAxisTransform","yAxisTransform","zAxisTransform","materialType","myColor","myAlpha","material","geometryType","Sphere","cylinder","Cylinder","Cone","Torus","Sprite","Plane","frustum","Frustum","directionLight","DirectionLight","spotLight","SpotLight","pointLight","PointLight","floorGrid","FloorGrid","Box","Material","uniformValues","u_color","u_alpha","u_model","shader","shared","fragment","vertex","setVector3","setVector2","setMatrix","IDENTITY","stencilTest","blending","blendEquation","FUNC_ADD","blendFunction","SRC_ALPHA","ONE_MINUS_SRC_ALPHA","depthMask","u_cameraPos","u_center","ZERO","Mesh","priority","_instanceof","hasInstance","Texture","setTexture","line","DEG2RAD","arcPath","_options_translate","rotate","rotMat4","_options_rotate","negate","addPoint","angle","transformNormal","rect","pos","h","forEach","vec","Shapes","ret","detail","anchors","block","unshift","Rectangle","Circle","myCenter","map","item","Hemisphere","outerRadius","concat","Edge","hw","RectangleEdge","Donut","donutRadius","path","positions","keys","createMeshFromShape","geo","combineGeometries","geometries","indicesBase","shape","LINES","None","Vector4","destroyWireframeMesh","dispose","DestroyOptions","keep","updateWireframeMesh","originGeometry","originMaterial","wireframe","cloneUniforms","wireframeGeometry","enabledMacros","macro","enableMacro","abs","getDrawCount","indexData","getTriangleIndexData","oid","faceCount","Uint32Array","idx","base","getTriangleIndexDataByCount","setIndexData","setDrawCount","getQuadIndexData","SharedGeometry","GLGeometry","drawStart","_proto","initialize","isInitialized","buffers","bufferProps","indicesBuffer","createIndicesBuffer","flush","initialized","getAttributeNames","editorRenderPassName","frontRenderPassName","behindRenderPassName","Quaternion","constants","GizmoComponent","RendererComponent1","coordinateSpace","mat","fromIdentity","wireframeMeshes","meshes","getHitTestParams","worldMat4","boundingKeys","targetItem","worldPos","worldQuat","worldSca","gizmoSubType","assignWorldTRS","targetTransform","quat","newPos","composition","setPosition","HitTestType","custom","clipMasks","frameClipMasks","collect","ray","pointInCanvas","hitPositions","gizmoComponent","getComponent","hitBounding","bounding","worldCenter","copyFrom","boxHalfSize","boxMax","boxMin","intersectBox","viewMat4","getViewMatrix","screenWidth","renderer","getWidth","screenHeight","getHeight","proMat4","cameraModelMat4","getInverseViewMatrix","localTransform","cloneFromMatrix","padding","localMat4","modelMat4","mvpMat4","vpMat4","screenCenter","up","elements","screenPoint","screenCenter2","toVector2","screenPoint2","screenRadius","distance","intersectSphere","tmpPositions","tmpPosition","worldTriangle","intersectTriangle","lastDistance","origin","distanceSquared","intersectRayLine","out","radiusPoint","getModelViewProjection","screenStart","screenEnd","screenRadiusVector","screenRadiusPoint","distanceOfPointAndLine","AC","BC","AB","subtractVectors","sqrt","P","lengthAC","lengthBC","lengthAB","isInLine","l2","line0","line1","l1","worldAP","screenPosition","worldAB","inverseViewProjection","getInverseViewProjectionMatrix","behavior","spec","InteractBehavior","NOTIFY","onStart","_this_item_composition","_this_item_composition_items","items","id","PluginSystem","_step1","_iterator1","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","_this_targetItem_getComponent","pMesh","RendererComponent","content","subMeshes","worldMatrix","effectMaterial","particle","ParticleSystemRenderer","particleMesh","quad","worldScale","parentTransform","distanceToCneter","localMat","worldTransform","proMat5","cameraPos","getDefaultRenderMode","getDefaultSize","psubMesh","modelComponent","assertExist","materialOptions","originMesh","shaderData","props","macros","glslVersion","gpuCapability","level","GLSLVersion","GLSL3","GLSL1","setVector4","gizmoItem","fromData","duration","_data_options_color","pipeline","rp","renderPasses","find","renderPass","DrawGizmoBehindPass","addRenderPass","DrawGizmoEditorPass","DrawGizmoFrontPass","serialize","effectsClass","RenderPass","RenderPassPriorityPostprocess","execute","clear","depthAction","TextureLoadAction","renderMeshes","RenderPassPriorityPrepare","iconImages","EditorGizmoPlugin","Plugin","order","onAssetsLoadStart","scene","_state","onCompositionCreated","targetMap","gizmoTarget","registerPlugin","version","logger","EFFECTS","console"],"mappings":"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"}
1
+ {"version":3,"file":"index.min.js","sources":["../src/define.ts","../src/gizmo-vfx-item.ts","../src/geometry/index.ts","../src/wireframe.ts","../src/gizmo-component.ts","../../../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/_wrap_native_super.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/_array_like_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/_unsupported_iterable_to_array.js","../../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.es6.mjs","../src/constants.ts","../src/util.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/mesh.ts","../../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_instanceof.js","../src/raycast.ts","../src/shape.ts","../src/gizmo-loader.ts","../src/index.ts"],"sourcesContent":["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 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 { ShaderMacros, Geometry, GeometryDrawMode, Engine, spec } from '@galacean/effects';\nimport { GLSLVersion, glContext, GLGeometry, 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: Uint8Array | Uint16Array | Uint32Array, releasable?: boolean },\n geometry: Geometry,\n}\n\nexport class SharedGeometry extends GLGeometry {\n private readonly source: GLGeometry;\n\n constructor (engine: Engine, options: SharedGeometryOptions) {\n super(engine, { attributes: {}, ...options });\n let indexData = options.index ? options.index.data : options.geometry.getIndexData();\n\n if (indexData) {\n //@ts-expect-error safe to assign\n indexData = new indexData.constructor(indexData) as Uint16Array;\n }\n this.indices = indexData;\n this.source = options.geometry as GLGeometry;\n this.drawCount = options.drawCount || 0;\n this.drawStart = options.drawStart || 0;\n this.mode = options.mode || 0;\n for (const name in this.source.attributes) {\n this.attributes[name] = { ...this.source.attributes[name] };\n }\n }\n\n override initialize () {\n if (!this.isInitialized) {\n const geometry = this.source;\n\n geometry.initialize();\n //this.indicesBuffer = this._source.indicesBuffer;\n this.buffers = this.source.buffers;\n this.bufferProps = this.source.bufferProps;\n //this.dirtyFlags = this._source.dirtyFlags;\n //this.vaos = this._source.vaos;\n //创建ibo\n if (this.indices) {\n this.indicesBuffer = this.createIndicesBuffer(this.indices);\n }\n this.flush();\n this.initialized = true;\n }\n }\n\n override getAttributeNames (): string[] {\n return this.source.getAttributeNames();\n }\n\n override flush () {\n this.source.flush();\n\n super.flush();\n }\n\n override dispose () {\n // from source geometry\n this.buffers = {};\n this.bufferProps = {};\n super.dispose();\n // @ts-expect-error\n this.source = null;\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","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","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 _is_native_function(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\nexport { _is_native_function 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 _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","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","/******************************************************************************\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,iVBORw0KGgoAAAANSUhEUgAAAGYAAABmCAYAAAFO2NT0AAABYWlDQ1BrQ0dDb2xvcl\n NwYWNlRGlzcGxheVAzAAAokWNgYFJJLCjIYWFgYMjNKykKcndSiIiMUmB/yMAOhLwMYgwKicnFBY4BAT5AJQwwGhV8u8bACKI\n v64LMOiU1tUm1XsDXYqbw1YuvRJsw1aMArpTU4mQg/QeIU5MLikoYGBhTgGzl8pICELsDyBYpAjoKyJ4DYqdD2BtA7CQI+whY\n TUiQM5B9A8hWSM5IBJrB+API1klCEk9HYkPtBQFul8zigpzESoUAYwKuJQOUpFaUgGjn/ILKosz0jBIFR2AopSp45iXr6SgYG\n RiaMzCAwhyi+nMgOCwZxc4gxJrvMzDY7v////9uhJjXfgaGjUCdXDsRYhoWDAyC3AwMJ3YWJBYlgoWYgZgpLY2B4dNyBgbeSA\n YG4QtAPdHFacZGYHlGHicGBtZ7//9/VmNgYJ/MwPB3wv//vxf9//93MVDzHQaGA3kAFSFl7jXH0fsAAAA4ZVhJZk1NACoAAAA\n IAAGHaQAEAAAAAQAAABoAAAAAAAKgAgAEAAAAAQAAAGagAwAEAAAAAQAAAGYAAAAAoo8/3AAAFixJREFUeAHtXQ2YVcV5nplz\n 7y7Ln7J7NyFYq7U8u/yJQWuraVoVGvwrWlGpUh8jIIXdjfiIWK1p2lWTaqomsYZliUESIcHwE42lRiUK0iiJKbUqyC6o+CgNk\n L27gBBgd++Z6TuHncM5c+ace+7du7sX3PM8u3Pmm+9nvvnOzHzzewnJ46E6TdXCFqHDZHx7XaWL675UN6TbhRAllLKZ1OY7vY\n Sc0ZcJEUwRMpUoCRgnl+gEMp1xMYlyOknlwpF0LMLqGeevKiamkDOy3mGiErMROMjIiY9IEccJXZ3iICuc7hEpJRU3UyhxKCU\n 7HEmq/InFrjQhS5hi2lxbWeUaVyYoO0h7ybh6FIFi7iOSSIpQERwL6TPb61JT/bAcYz5JZimEAOlQc13lEMXbJVIEuj4S0ahT\n FIHi7iV0jWuSoAhk6E2ncaQoYkcaY/MdSV4uCiE05PxbDhFqazIUyZDgENmUv2RIM4LkV+HWeyNGCNAtPVWkIXiOrZLJxASZH\n jCuIHSTxcW9ithlRum722tTY31ECkmZQMVlqL5uBXMlKYAe1gvBftyQtnW4N04pfaW5NjXJC9PfjYKqF6ZfF0Rc6EOm5HfMJn\n /rgzHrAk7sB30wRHRtZLpPUFVDy38QQf5aEeb0cYGI0cQpGZp5VtF7BbqCvOWcqwDFWIXoYr6MLuYWGaclybOaZ5+60/mECil\n EMke39EM0qDXyXXR0fuDA5D/PM9/z3q1XapMmxUAq4lYKCUSRvakSCx36BHGLfLvQArr4bXQEMdbVpQjy+UIJcms6GOLru8gR\n 1FRTuYES+k9SiESAZgu6I1AT4nzZ7uetGHu/QNSyo6ikl6u0bKFXgOzGZa+saAKCVIJPoALGCFW90VFDBemIlz8vSj/4MP2ME\n Mc1hG0XoNgf1XH7LJ5VG3iyy+CY3hSVw2RlasjWafRQGE6oENhmB4hGhhGa4CPGpJIbLqEZPc0oxGR8RuhDhIsXvQxsRp4AAz\n 0je1FXhnvxAkJ0AbFabkaGcEKe8zI2dgkSwSuAMlpLM2KblzDbu1ZndqPOjJA0bpvmE0DY9bkKcJh5vGB87p+T3b0rBF+PW2x\n obt6hnKdlYj6Pt3iVP+Ew92rhRcpHiKSBMzLMpuKn8v2P/yg1wC0uJ1HQpTLs7oOS2ad4vL8zfZSNW5gerQBUiKfUe3dDFNEe\n xYN1UvKMihQ4nK74MahWrSKFDCmHI9b1+GyigIUOe0cIo9T1ygupAbfYjYqfr57IuQRKBJqh7j/eJsZXXIIJzHQU9kHF/KYjB\n I1hQyFZe7XAMOQeR0hzTapOCfEiKFguIWfsIhefkv+S725xDUmkBqnEfAVh+IoOjNcrPttrK/9SvrtCNs+hhxFfoRCkIDTUbu\n us4GEht+hyDHefUOmhnZZEwKhsOUZlf6eQZWiJ5GQhOju9MPWOjMxH1Z6i4jL0CpBxY04vXCnKWlvSUrOcH12AZGAUojhXN7Q\n +LASP5SebmCs+kUIUkgyrG1rmogNdKGcMu+Abk6Ul12y99ZQ2L57pPbYQE7EJNqohfRtsVJe9dae7GBFLrMrUv8Ix7DDxyhWW\n tzJnN+wf1kEy7yHT5bkKjcKHL5PBdNH4LXWpnDwyyTMnZUY3tF1pC3ttVGYKnYZv7b6musr6OHxjKYPmII3moCKKIaPsTmLz/\n 4nCCU2j9AzORCPcgwEROALzXKoeGdEilcFE0F4I+IyJkhL2S7i2XzOldReGqn8T6t0sMx/KMXlsmdKMyoxuaL3AFnyTicBiia\n kik3G9UhNOoWCYjWRhHoKclmiuS33DKyugDIamr6BSX+JFku+UWHdTbr+hw3sj7h03+ORRegCf3qkK5lMGirwBRc5XiSosxEB\n G8epOiH7/FeIZxXXxakcH59Q1t0JVL0rXFLMiMuPMFhPxeek+SCmM8DMnvUs7OMci4GAWi0VUHmVIuZjsjct3GOEq/FHHMvBZ\n /k1HANm6IKw4IBiX+Cq+zNWohta3nDrjHeir7BajVVTeZGhy6N0640U8Ud9PQmUo/ZVuDU6JM57S4cUQF4wZ3R7HMkMsdlkgk\n 5TcF4AVCUBQHpihoha73lFm85zyA+hlD+p5FRbtEd9Ll5NTPEEvNTmkzXMrVrt1BpMNQ3WmaLsnCkq/osP7Ki6Y9aeci3t0+W\n qI63NnJJKpmQb4CJrqK3QmvRlHU7xYZk+XifmXEkyPOF5BQBmJHKIQoYI9TAV/XmfYo3FGz8Q86FKTDGURleZ+ZgogQ4kktyZ\n 5YfIdFe8u2Vnh7249rdBxm5KrHVkGRWCBlboiUr7RMt6MVTWkN8H5ucAL875jcWKtJUhB1t+ERaaBn7P27ZWh3lHCbajboSPe\n rMooRvBMb0KDsEzFo0IstexgnD1rEfYaF5kDXlzZR2DZ9ELwuhJD8fO8aaHvlD6Occu80PSuhNjKeBmNWtRyJ+fkES+s8O/0B\n xgez8iFb17K6AJGNbScxwX5OeCVelrMeDusNQ0Ldr6Vwpi0JydaQSyjimbM91rHZjLifjCdgjoRvvWLUky+kJctZj2wbe6wjY\n q+u2G3lRnd2PolbvNnkDt38SD3TFEsTJBZTTWpH+ROe5wib2WqFrX+C+HHVy2Os+zeG5rfZWh+b86HS87KVDe2XiZsLit7jz7\n 57B/JSZk407SF1ZDy6bUVyXqKld0YTyxlzlmUPu0IF7ti8IPLQ1+E/7aUcbo3FJ9ag+Ea3YzO9TrDPFiADJmciF226wMJGiCr\n MlFTtYoXevJNWMP7qndlXKXFCeUwQ1BxbRQu1lpvx1Lov0fiRCVWNaYnEVv8IgLnbQwNbo9IzykJg8E70KRfFUYEhb4BhZytb\n yacUMuM/f6BkZ3tHTtMRBIGd/sqwklgdBqGHxcul2lhqXX4/Iwz/ZB8w/a6ip+Y+BmHACgdGqoIPFdnTq0HFJEZlJ8qpmH/Cq\n 9vmzKMGbOnxy86aFxmMSozalFru4kR3PP3ICjy2zbR5QPr+nz/00R7lB81Ni4BZeDqPxTiiuzFuGW2iXlPwaDQIxgkvmbiX72\n wZbMOD9QZ45AZvpScgdeJeyuOObw1GEYGFoJLSsqGb5k92LWSzzKwyjumDFKakN9wnz1MEOOn3dlx1Nf3+ZTB5zUumGPxFM10\n xuqBg7SFhNDbdG7o3xLVS1pGKLirDMb6axTQG6InN86MeHF64x1747dATrBhaqcS7jyuMmjXpyqgCpmggbMKKq0vQqxwB7YB4\n 2sapvLiKDNq0b4zFcAXCvGSL97HkbBdqJiTmCOz5igjhB1YicK+TGNj0Mf6yLmxJXoeBKdO/ruUEdMDCEQ8rMOKIQ4PYbmeD7\n V75Hid0TCwm+BjDVT00VBlijrnlHTo+Zvw5O5KNv6pPcGJCCGO6MjFFMfcTmArzOH2srOZtV8MDGSU0Z0BWBEBsKcmmD9ql7O\n OUlEWyKcgrQFYEQGwgzCQP+xbLmcWKw24KtA8UUR5D2TFNuSP8UyG2TRxWMfGDogKHVZMcfQ1gfxlGGtjfzhi6O+DGaUjg7Di\n gUCZ0XpuMO5pYT+/ggadt+PbcHWaooib1nUGs6Nvnpj9jKFIN88ZcfiYMhTnQbUHJxjP1UBFEcUGutDGyVEGCz2PBnNKvxqEF\n QFE0H/Qc4H8OzM5jjLlFRX1OgLGN4ExdwCnTwD8S7pYweh8CXOU2TSNmt0XRrMuiuqMezTOqHHVe/vc1MuuMvIF6yJf1zOC+b\n hrdFhfxpGfwMgXn9hmladjDQBiWOAxbvrB/O/jCrkvQ0zZGhegxqdSf6by5SojAbBOYPJCztjwBD1dEfRFiA4xiVWCGbps5Pe\n jVdOOt8ToTP2PcRIQKM78sh+112Jy24lJmL7lxGcZSWBRGmgtJDyMoUzryQf93XNm/izQnQQsIwkxh7YVTfOYABN0rl0z9IGk\n ngCgg1wT0kW4u8y9co3KSISwz02mYV8MtkFyg08nUwvzoO94CT5Y0sRN/7wUTuAzUwlo3ULTOOMv2Iz+jcItZCgSdLz8pMMUG\n VQ2wLg2I/MQahmZOHalGNzZkj4o380PxneC3ogF2d+Z0+ND5W4nQfgqUAwOo6LUOqe5ttxxXUw4kcpIgvMWi+TBTDowG+JnJp\n e26QO4dGuDH549xhPWOGyOeAhb84ITKx7yASXs9LdnV+zygAKvWZVRFFjcOSgiSk3hobNCl8DXCJZ4lWVsd1JbpaPPGGkz8UV\n U7BsAK1XwqBBXSZTGOTEYWxkprHphayM+BWdeN0p4wdKweRyb5i6Myy8nZSTTi9eLxO530/tiWSluLnQ8WHfQgNLPvjlzSIue\n FBXPWRnFbOzSQ8Mzh4/sKKhScrmRiPObaitd51HJixPmrYyXOfbUPIamNO/hAk4rrR6cqJiu9id7eefyXhBlvALHNLT9hU3sq\n bDYVdjmfpY3retdLqg+Z1HrZ9tqy41L4waaWKCCKxNLap5I168UVvOets91JsgfwJsfgV5yCDYTDUT7WYa5voG4h2EgnMt2wT\n NHYO3D2LeASQ6EFtmDC9t2VQ6s3LVhBj2ap/heJSsqw0iHg7e0ToVXcQW+0kvwlYZ6LoUqJQxUYUD6GpqedUnBnt5SV1EUy1J\n 9ZhhphExLay2++HnwBU4rVEEXio80GKZ1l5ES65vyprxC8Y3Lp9cMI28ke//DtrvR5CxAMzQkbgaLBw+eNBUryyhd8FZN6v96\n Ol89ahi5SfWoII/BENf2tCK9zR+zQluExWq2zyn/ZU/ILrhhHId6W9uDcNPuRBNVcP7geQTDpY/R/3yM60B3obk5iP7hiOD8C\n O5+wmZlXP1s0TLHEcBYD33VcBTc6aA5HbTuFptCFiaMtD5RNmD61hmD9xSKb8EKTt6E1kHJi1C+APOetAWF/gtsyHoJF/99WC\n hldT7w3E61LYLbBQRuOSLVenqucRiokzL25aa55StypdXxu22Yqoa2yymxV0Ox4K4IXZoxjqkdKjZik85yfPXvG1F6ESjv5LV\n JZhpm6K/ONrsSmS1KH8RY/95InIjEvA0zevH+c7md2ZBXR07pPkzA47Kc4tqUZyonXM1ZjbHQHWia86pRaF7nNdWmcl4Oytkw\n OBpQ3tnR8ZuQkbBJNweGZiODHmcx5ttXhyIVeYKcMSacfg2zbKlcsoomDq28NbmpdtircelyMsyohS0LMPv6cFzmXXi/Re24C\n ++/zZGuaNEpTSY5tf8ZBvpibpmk63A+67L6GOezYhlm/FNiUPuh1i1ots7MISM7mbAweLQP5UBzwqFizUV+dFfEzjhW6ZKUfG\n FrTeqNKJqshpHeFq6FfQtGMa5cBZnTT7A94issI4piaiOYvx6AMFaCPugR/J0dlztj9DYcrP1uGH6kYaoXtU6Dp/STMGIdjrb\n 0x9QWT+jwT0sctWcC1tlwm4B7U2ak6iivpVhhnWlCCjVMdWP6amEL96ccTMQuTHZugs3EXXQ9PlXhyizSF5FIMsE75cdpWiYI\n 5BpnTRY311XM1ROM6+GjFrZOjmsUWHY3DtZM6TfKsaKVx77g7MyC1/qCXtimuFxHhVP1LT0tUGOkO5zp6NyNPqVER9bjWAf5C\n BN7t8iDoXpafxwNWowz2qqcGGPXNdVUrHHj6kWFmfbOtbGMIi+NtxIz+o2iSi4Y4jDYd7GYF2tlE2W+omrxJ+74yNeUVTW03g\n rPItaWAQyY5hfHac1ggRQTBD8tIw8wf5QtT9LrpXZHo8LzGQYbXB5QCVEhzp88Rri9OwqnP+14CaDJv+d4LPwNxrl2bOO+cyS\n Gaxi4xjO7psjDKZECLyKN9fN43lokp09R4rGP+Pk4Gme47RxRcA2DCUXMpmZ/4EUsy47VjxEoAWbFKjd0JVPq67EFUjKQLwgu\n DzAzALB28boB3A/KUgLY/ygX0T7IggZXjgxY8Zl94xzDPHvG/qGy88lKROmHWD1JZ8XrRzCWAMYm/21M0ICM2Kc7hmnvyJRpa\n eaoCJ5QNSP2Q00lAKcp1kdtU5z6lQwET5SaGOkwzO0c0GH98fglgML+JA62JfhQxzCJRIf5mJzGBR1TuQbqj+ZQAlhDj1V+2M\n PS5hhm0JFELMPgGoThOeSjH1UrAThO8cpPHpOXtL+eV/EJmql9Gp9A1BnnMHpmIKEfEKsE4GDFmlVJsMx7jmEkVxT6c3G4Y2n\n 5ojh4/Tj+EsB+gdGAVPqhxtjeLXM++75rGPxE1Gojmg6kZDrBip0O7o9HlwC2d82IxjiWil01jh1cwzTVlK9Fc/abrMRYDhDE\n np0Vrx/BLQHsDjofMyvnu4CwF2yw41ZJvUx2DSMjMIzxmLxM8z7wx6+jFnWPpnvT+t/9JSCSJQMwr3K/H2qOwTl4bPucoc5Yx\n 2cYLNS8iP1fT5rJ/FBcJv91/KJTj59f8Us98WI80/G4nGbJnnO668aa1J0KL7CCCc+B4nendmLMcoZCCg1xJRouebmht348Lz\n QfRZqAmwoWwihj4mQvabGxW+dWvKtwfTVGAtGcicTAARdgfv+oQgoNBSnBj2euQs05KxTnU5ggL/TAjpnlcY2CHz+40WsUWWQ\n Bw0igPE5glSRGwUidMh754DZrXKy+BGdF4m96i2R4gida1gib8bXQ4rQ4muB0wKxtNeVP67iBpsyLIG9o5Twjq1e8SU5MazPC\n anAPQZZ7DrxSTp53nB2dhyYn9gVJcI1vwYbzH5pKINIwkgBnJUsyLel3MACtMjEwwXB+8fu4gedHprSTEcYZHYch+iPQLd5kM\n DbYY1fMBNSULWHlkdUwihB3gT8Jx2CGimcNnWvq6P3M5huz4p64CCNglO/AKHFG9I6W+Gh3JFKpc3HZx6EotWMbRjKRv+hjZz\n h+TDe3Q0roDJdQmy+PysiJlIYB4+exZwz3vEVfG6PrBKPU4PemGnW4KZ6TYRQD/EDwd/C7urereOwQK6BM4Bcre/D4Xuy85Ig\n IZ3Ugasdd+CgvzpEU3Q7ZjFpycbZa4uWbl2EkA3mZ0SG7VW4OnOxlGPcdA9lmbOD8tsVJc1ya3saDVzoMvwExF2O6/HSkZDdJ\n Jv88n3sC8jaMKqSuszNrYKBLFSzX8NhpM7GOCutHfbkHGutNgzAovAaOznXQ4ZRc9XDxcaoaE4qXbqlLbXNhOb502zBKnpwxG\n N2QfhTLAncoWLdCKjtH8SpOEfyaEv6/hfxlIWcAiBE5RmDnYXJxEvI5olt57SJGDXs9UZKcsvXWU9q6y69ghvFmpLqhpRo7ql\n ehCYh9kMdLH/+d/h4K4Co1eQE+PQxDytmKpHRO8PtTZfhYBiH91Pj88sGk+zFKn9VUl/ppPtRhND1iGK+wY1dL8QYUEnz9k+N\n BzcBqr7gXk47fq49xnjIfrXvcMN5MyStM2gX5R3T68vxIjBlXL3XfvqOgXsBi4n3bait+1Rs56VXD6Ao5R9M7O/8eRroZbb1c\n ei2KB+5tGmtOK5KMNuqTi72VwT41jElJeRfN3m1tf4J+YyL6iokIvwC8uHN1JpYhMOc2pbfQP6zHkZJXeKm9sXlWZcTlrCFse\n ghcdIaJq6fcb72KvJsYOmaM1XYwnShjCetwx5FE6eCB9sBW286UlmcOtL9nTxg+MuO9Ozsu/77G+3+04346/NDWWAAAAABJRU\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 { 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, 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","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","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 { 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":["GizmoSubType","BoundingType","GeometryType","WireframeGeometryType","CoordinateSpace","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","instance","Function","bind","_get_prototype_of","getPrototypeOf","_wrap_native_super","_cache","Map","toString","indexOf","has","get","set","Wrapper","enumerable","_array_like_to_array","arr","len","length","i","arr2","Array","_create_for_of_iterator_helper_loose","allowArrayLike","it","Symbol","iterator","next","isArray","_unsupported_iterable_to_array","minLen","n","slice","name","from","test","__decorate","decorators","target","desc","d","c","r","getOwnPropertyDescriptor","decorate","defineProperty","__generator","thisArg","body","f","y","t","label","sent","trys","ops","g","Iterator","verb","v","step","op","pop","e","SuppressedError","color","xAxisColor","yAxisColor","zAxisColor","renderMode","glContext","TRIANGLES","axisIconMap","createImage","imageUrl","image","Image","src","onload","onerror","moveToPointWidthFixDistance","targetPos","currentPos","vecCameraItem","clone","subtract","scalerVecCameraItem","normalVecCameraItem","normalize","multiply","vecItemScaler","vecScalerItem","add","math","Vector3","Ray","Matrix4","Vector2","computeOrthographicOffCenter","left","right","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","Math","cos","sin","createXZPlaneCircle","createYZPlaneCircle","SphereGeometryData","widthSegments","heightSegments","phiStart","phiLength","PI","max","floor","thetaEnd","min","grid","index","iy","verticesRow","uOffset","ix","_this_normals","u","_this","normal","toArray","BoxGeometryData","width","height","depth","buildPlane","w","uDir","vDir","widthHalf","heightHalf","depthHalf","point","vertexCounter","numberOfVertices","CylinderGeometryData","radiusTop","radiusBottom","radialSegments","openEnded","generateCap","centerIndexStart","sign","halfHeight","centerIndexEnd","cosTheta","sinTheta","px","py","pz","uvU","uvV","indexArray","generateTorso","slope","indexRow","ConeGeometryData","TorusGeometryData","tube","tubularSegments","arc","j","cx","cy","PlaneGeometryData","gridX","gridY","gridX1","gridY1","segmentWidth","segmentHeight","ix1","Euler","FrustumGeometryData","position","rotation","fov","aspect","_this_points","halfY","tan","fovY","halfX","point1","point2","point3","point4","matrix","fromArray","toMatrix4","result1","transformPoint","result2","result3","result4","DirectionLightData","linesNumber","start","PointLightData","range","SpotLightData","spotAngle","FloorLineEdgeGeometryData","sideLength","parts","end","createGeometry","engine","type","size","geometryData","segments4","Geometry","attributes","a_Position","data","Float32Array","a_Normal","a_UV1","Uint16Array","mode","drawCount","createMeshFromSubType","subType","boundingMap","iconTexture","options","scale","boundSize","xCircle","yCircle","zCircle","center","xCircleBounding","yCircleBounding","zCircleBounding","xCircleTransform","yCircleTransform","zCircleTransform","centerTransform","WebGLRenderingContext","sprite","createSpriteMesh","camera","light","translation","createTranslationMesh","_step","axisSize","axisMesh","createAxisMesh","_iterator","mesh","transform","arrowSize","xArrow","createBasicMesh","cone","depthTest","yArrow","zArrow","xArrowTransform","Transform","valid","yArrowTransform","zArrowTransform","setRotation","translate","planeSize","xyPlane","plane","yzPlane","zxPlane","xyPlaneTransform","yzPlaneTransform","zxPlaneTransform","delta","createAxisBounding","triangle","triangles","firstGeometry","getTriangle","backfaceCulling","createScaleMesh","boxSize","centerBoxSize","xCube","box","yCube","zCube","centerCube","xCubeTransform","yCubeTransform","zCubeTransform","centerCubeTransform","sphere","pow","viewHelper","createViewHelperMesh","texture","posXSphere","posYSphere","posZSphere","posXSphereTransform","posYSphereTransform","posZSphereTransform","negXSphere","negYSphere","negZSphere","negXSphereTransform","negYSphereTransform","negZSphereTransform","radiusSegments","torus","alpha","geometry","getIndexData","getAttributeData","mat4","getWorldMatrix","i0","i1","i2","p0","p1","p2","projectPoint","isCentered","xAxis","yAxis","zAxis","xAxisTransform","yAxisTransform","zAxisTransform","materialType","myColor","myAlpha","material","geometryType","Sphere","cylinder","Cylinder","Cone","Torus","Sprite","Plane","frustum","Frustum","directionLight","DirectionLight","spotLight","SpotLight","pointLight","PointLight","floorGrid","FloorGrid","Box","Material","uniformValues","u_color","u_alpha","u_model","shader","shared","fragment","vertex","setVector3","setVector2","setMatrix","IDENTITY","stencilTest","blending","blendEquation","FUNC_ADD","blendFunction","SRC_ALPHA","ONE_MINUS_SRC_ALPHA","depthMask","u_cameraPos","u_center","ZERO","Mesh","priority","_instanceof","hasInstance","Texture","setTexture","line","DEG2RAD","arcPath","_options_translate","rotate","rotMat4","_options_rotate","negate","addPoint","angle","transformNormal","rect","pos","h","forEach","vec","Shapes","ret","detail","anchors","block","unshift","Rectangle","Circle","myCenter","map","item","Hemisphere","outerRadius","concat","Edge","hw","RectangleEdge","Donut","donutRadius","path","positions","keys","createMeshFromShape","geo","combineGeometries","geometries","indicesBase","shape","LINES","None","Vector4","destroyWireframeMesh","dispose","DestroyOptions","keep","updateWireframeMesh","originGeometry","originMaterial","wireframe","cloneUniforms","wireframeGeometry","enabledMacros","macro","enableMacro","abs","getDrawCount","indexData","getTriangleIndexData","oid","faceCount","Uint32Array","idx","base","getTriangleIndexDataByCount","setIndexData","setDrawCount","getQuadIndexData","SharedGeometry","GLGeometry","drawStart","_proto","initialize","isInitialized","buffers","bufferProps","indicesBuffer","createIndicesBuffer","flush","initialized","getAttributeNames","editorRenderPassName","frontRenderPassName","behindRenderPassName","Quaternion","constants","GizmoComponent","RendererComponent1","coordinateSpace","mat","fromIdentity","wireframeMeshes","meshes","getHitTestParams","worldMat4","boundingKeys","targetItem","worldPos","worldQuat","worldSca","gizmoSubType","assignWorldTRS","targetTransform","quat","newPos","composition","setPosition","HitTestType","custom","clipMasks","frameClipMasks","collect","ray","pointInCanvas","hitPositions","gizmoComponent","getComponent","hitBounding","bounding","worldCenter","copyFrom","boxHalfSize","boxMax","boxMin","intersectBox","viewMat4","getViewMatrix","screenWidth","renderer","getWidth","screenHeight","getHeight","proMat4","cameraModelMat4","getInverseViewMatrix","localTransform","cloneFromMatrix","padding","localMat4","modelMat4","mvpMat4","vpMat4","screenCenter","up","elements","screenPoint","screenCenter2","toVector2","screenPoint2","screenRadius","distance","intersectSphere","tmpPositions","tmpPosition","worldTriangle","intersectTriangle","lastDistance","origin","distanceSquared","intersectRayLine","out","radiusPoint","getModelViewProjection","screenStart","screenEnd","screenRadiusVector","screenRadiusPoint","distanceOfPointAndLine","AC","BC","AB","subtractVectors","sqrt","P","lengthAC","lengthBC","lengthAB","isInLine","l2","line0","line1","l1","worldAP","screenPosition","worldAB","inverseViewProjection","getInverseViewProjectionMatrix","behavior","spec","InteractBehavior","NOTIFY","onStart","_this_item_composition","_this_item_composition_items","items","id","PluginSystem","_step1","_iterator1","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","_this_targetItem_getComponent","pMesh","RendererComponent","content","subMeshes","worldMatrix","effectMaterial","particle","ParticleSystemRenderer","particleMesh","quad","worldScale","parentTransform","distanceToCneter","localMat","worldTransform","proMat5","cameraPos","getDefaultRenderMode","getDefaultSize","psubMesh","modelComponent","assertExist","materialOptions","originMesh","shaderData","props","macros","glslVersion","gpuCapability","level","GLSLVersion","GLSL3","GLSL1","setVector4","ParticleSystem","definition","gizmoItem","fromData","duration","_data_options_color","pipeline","rp","renderPasses","find","renderPass","DrawGizmoBehindPass","addRenderPass","DrawGizmoEditorPass","DrawGizmoFrontPass","serialize","effectsClass","RenderPass","RenderPassPriorityPostprocess","execute","clear","depthAction","TextureLoadAction","renderMeshes","RenderPassPriorityPrepare","iconImages","EditorGizmoPlugin","Plugin","order","onAssetsLoadStart","scene","_state","onCompositionCreated","targetMap","gizmoTarget","registerPlugin","version","logger","EFFECTS","console"],"mappings":"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"}