iflow-engine-base 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/dist/assets/bim-engine-sdk.z34pmn5f.css +1 -0
- package/dist/assets/hdr/001.hdr +0 -0
- package/dist/assets/viewcube/cn_back.png +0 -0
- package/dist/assets/viewcube/cn_bottom.png +0 -0
- package/dist/assets/viewcube/cn_front.png +0 -0
- package/dist/assets/viewcube/cn_left.png +0 -0
- package/dist/assets/viewcube/cn_right.png +0 -0
- package/dist/assets/viewcube/cn_top.png +0 -0
- package/dist/assets/viewcube/home.png +0 -0
- package/dist/bim-engine-sdk.es.js +13022 -0
- package/dist/bim-engine-sdk.es.js.map +1 -0
- package/dist/bim-engine-sdk.umd.js +841 -0
- package/dist/bim-engine-sdk.umd.js.map +1 -0
- package/dist/draco/DRACOLoader.js +739 -0
- package/dist/draco/draco_decoder.js +52 -0
- package/dist/draco/draco_decoder.wasm +0 -0
- package/dist/draco/draco_encoder.js +33 -0
- package/dist/draco/draco_wasm_wrapper.js +104 -0
- package/dist/index.d.ts +610 -0
- package/dist/model/gujianzhu.glb +0 -0
- package/dist/model/test1/lod3/nodes.json +1 -0
- package/dist/model/test1/lod3/primitives/0.glb +0 -0
- package/dist/model/test1/lod3/primitives/1.glb +0 -0
- package/dist/model/test1/lod4/nodes.json +1 -0
- package/dist/model/test1/lod4/primitives/0.glb +0 -0
- package/dist/model/test1/lod5/nodes.json +1 -0
- package/dist/model/test1/lod5/primitives/0.glb +0 -0
- package/dist/model/test1/lod6/nodes.json +1 -0
- package/dist/model/test1/lod6/primitives/0.glb +0 -0
- package/dist/model/test2/info.zip +0 -0
- package/dist/model/test2/lod0/nodes.json +1 -0
- package/dist/model/test2/lod0/primitives/0.glb +0 -0
- package/dist/model/test2/lod0/primitives/1.glb +0 -0
- package/dist/model/test2/lod0/primitives/10.glb +0 -0
- package/dist/model/test2/lod0/primitives/11.glb +0 -0
- package/dist/model/test2/lod0/primitives/12.glb +0 -0
- package/dist/model/test2/lod0/primitives/13.glb +0 -0
- package/dist/model/test2/lod0/primitives/14.glb +0 -0
- package/dist/model/test2/lod0/primitives/15.glb +0 -0
- package/dist/model/test2/lod0/primitives/2.glb +0 -0
- package/dist/model/test2/lod0/primitives/3.glb +0 -0
- package/dist/model/test2/lod0/primitives/4.glb +0 -0
- package/dist/model/test2/lod0/primitives/5.glb +0 -0
- package/dist/model/test2/lod0/primitives/6.glb +0 -0
- package/dist/model/test2/lod0/primitives/7.glb +0 -0
- package/dist/model/test2/lod0/primitives/8.glb +0 -0
- package/dist/model/test2/lod0/primitives/9.glb +0 -0
- package/dist/model/test2/property.zip +0 -0
- package/package.json +46 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bim-engine-sdk.umd.js","sources":["../src/core/v2/modules/sceneModule.ts","../src/core/v2/modules/cameraModule.ts","../src/core/v2/modules/deviceModule.ts","../src/core/v2/modules/renderModule.ts","../src/core/v2/controls/OrbitControls.js","../src/core/v2/controls/firstPersonCameraControl.js","../src/core/v2/modules/controlModule.ts","../node_modules/three/examples/jsm/shaders/CopyShader.js","../node_modules/three/examples/jsm/postprocessing/Pass.js","../node_modules/three/examples/jsm/postprocessing/ShaderPass.js","../node_modules/three/examples/jsm/postprocessing/MaskPass.js","../node_modules/three/examples/jsm/postprocessing/EffectComposer.js","../node_modules/three/examples/jsm/postprocessing/RenderPass.js","../node_modules/three/examples/jsm/shaders/GTAOShader.js","../node_modules/three/examples/jsm/shaders/PoissonDenoiseShader.js","../node_modules/three/examples/jsm/math/SimplexNoise.js","../node_modules/three/examples/jsm/postprocessing/GTAOPass.js","../node_modules/three/examples/jsm/shaders/LuminosityHighPassShader.js","../node_modules/three/examples/jsm/postprocessing/UnrealBloomPass.js","../node_modules/three/examples/jsm/shaders/OutputShader.js","../node_modules/three/examples/jsm/postprocessing/OutputPass.js","../node_modules/three/examples/jsm/shaders/FXAAShader.js","../src/core/v2/shader/SaturationShader.ts","../src/core/v2/modules/composerModule.ts","../node_modules/jszip/dist/jszip.min.js","../node_modules/axios/lib/helpers/bind.js","../node_modules/axios/lib/utils.js","../node_modules/axios/lib/core/AxiosError.js","../node_modules/axios/lib/helpers/null.js","../node_modules/axios/lib/helpers/toFormData.js","../node_modules/axios/lib/helpers/AxiosURLSearchParams.js","../node_modules/axios/lib/helpers/buildURL.js","../node_modules/axios/lib/core/InterceptorManager.js","../node_modules/axios/lib/defaults/transitional.js","../node_modules/axios/lib/platform/browser/index.js","../node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","../node_modules/axios/lib/platform/browser/classes/FormData.js","../node_modules/axios/lib/platform/browser/classes/Blob.js","../node_modules/axios/lib/platform/common/utils.js","../node_modules/axios/lib/platform/index.js","../node_modules/axios/lib/helpers/toURLEncodedForm.js","../node_modules/axios/lib/helpers/formDataToJSON.js","../node_modules/axios/lib/defaults/index.js","../node_modules/axios/lib/helpers/parseHeaders.js","../node_modules/axios/lib/core/AxiosHeaders.js","../node_modules/axios/lib/core/transformData.js","../node_modules/axios/lib/cancel/isCancel.js","../node_modules/axios/lib/cancel/CanceledError.js","../node_modules/axios/lib/core/settle.js","../node_modules/axios/lib/helpers/parseProtocol.js","../node_modules/axios/lib/helpers/speedometer.js","../node_modules/axios/lib/helpers/throttle.js","../node_modules/axios/lib/helpers/progressEventReducer.js","../node_modules/axios/lib/helpers/isURLSameOrigin.js","../node_modules/axios/lib/helpers/cookies.js","../node_modules/axios/lib/helpers/isAbsoluteURL.js","../node_modules/axios/lib/helpers/combineURLs.js","../node_modules/axios/lib/core/buildFullPath.js","../node_modules/axios/lib/core/mergeConfig.js","../node_modules/axios/lib/helpers/resolveConfig.js","../node_modules/axios/lib/adapters/xhr.js","../node_modules/axios/lib/helpers/composeSignals.js","../node_modules/axios/lib/helpers/trackStream.js","../node_modules/axios/lib/adapters/fetch.js","../node_modules/axios/lib/adapters/adapters.js","../node_modules/axios/lib/core/dispatchRequest.js","../node_modules/axios/lib/env/data.js","../node_modules/axios/lib/helpers/validator.js","../node_modules/axios/lib/core/Axios.js","../node_modules/axios/lib/cancel/CancelToken.js","../node_modules/axios/lib/helpers/spread.js","../node_modules/axios/lib/helpers/isAxiosError.js","../node_modules/axios/lib/helpers/HttpStatusCode.js","../node_modules/axios/lib/axios.js","../node_modules/axios/index.js","../src/common/LoadJSON.ts","../node_modules/three/examples/jsm/loaders/DRACOLoader.js","../src/api/modules/IEventModule.ts","../src/core/v2/modules/modelLoader/loaderMep.ts","../node_modules/three/examples/jsm/utils/BufferGeometryUtils.js","../node_modules/three/examples/jsm/loaders/GLTFLoader.js","../src/core/v2/modules/modelLoader/loaderLightModel.ts","../src/core/v2/modules/loaderModule.ts","../src/core/v2/status/engineStatus.ts","../src/core/v2/modules/eventModule.ts","../src/core/v2/modules/lightModule.ts","../src/core/v2/enum/eventType.ts","../src/core/v2/modules/interactionModule.ts","../src/core/v2/modules/modelToolModule.ts","../src/core/v2/status/handelBehaved.ts","../src/common/WorldToScreen.ts","../node_modules/stats.js/build/stats.min.js","../node_modules/@tweenjs/tween.js/dist/tween.esm.js","../src/core/v2/managers/viewCube/InitThreejsSence.js","../src/core/v2/managers/viewCube/viewCubeTool.js","../src/core/v2/managers/viewCube/index.ts","../src/core/v2/managers/octreeBox/index.js","../src/core/v2/managers/rangeScale/index.ts","../src/core/v2/managers/setting/index.ts","../src/common/Guid.ts","../src/core/v2/managers/measure/tools.ts","../src/core/v2/managers/measure/clear_height_measure.ts","../src/core/v2/managers/measure/distance_measure.ts","../src/core/v2/managers/measure/clear_distance_measure.ts","../src/core/v2/managers/measure/elevation_measure.ts","../src/core/v2/managers/measure/point_measure.ts","../src/core/v2/managers/measure/angle_measure.ts","../src/core/v2/managers/measure/area_measure.ts","../src/core/v2/managers/measure/slope_measure.ts","../src/core/v2/managers/measure/index.ts","../src/core/v2/managers/clipping/section_plane_x.ts","../src/core/v2/managers/clipping/section_plane_y.ts","../src/core/v2/managers/clipping/section_plane_z.ts","../src/core/v2/managers/clipping/section_box.ts","../src/core/v2/managers/clipping/clipping_stencil.ts","../src/core/v2/managers/clipping/index.ts","../src/core/v2/managers/modelTree/index.ts","../src/core/v2/managers/engineInfo/index.ts","../src/core/v2/managers/modelProperties/index.ts","../src/core/v2/managers/modelMapperBatch/index.ts","../src/core/v2/managers/modelEdge/index.ts","../src/core/v2/EngineKernel.ts","../src/index.ts"],"sourcesContent":["import * as THREE from 'three';\r\nimport { Group } from 'three/examples/jsm/libs/tween.module.js';\r\nexport class SceneModule{\r\n private engine: any;\r\n public scene: THREE.Scene|null; \r\n \r\n constructor(engine: any){ \r\n this.engine = engine; \r\n this.scene = new THREE.Scene(); \r\n\r\n // 初始化一些group用来存储模型\r\n let groupEdge = new THREE.Group();\r\n groupEdge.name = \"groupEdge\"\r\n this.scene.add(groupEdge);\r\n\r\n \r\n\r\n\r\n\r\n\r\n\r\n }\r\n}","import * as THREE from 'three';\r\n\r\n// 相机类型枚举\r\nexport enum CameraType {\r\n PERSPECTIVE = 'perspective',\r\n ORTHOGRAPHIC = 'orthographic'\r\n}\r\n\r\n// 相机姿态接口\r\nexport interface ICameraPose {\r\n type: CameraType;\r\n position: { x: number; y: number; z: number };\r\n rotation: { x: number; y: number; z: number };\r\n quaternion: { x: number; y: number; z: number; w: number };\r\n target?: { x: number; y: number; z: number }; // 控制器目标点\r\n zoom?: number; // 正交相机的缩放\r\n}\r\n\r\nexport class CameraModule{\r\n private engine: any;\r\n\r\n // 透视相机\r\n public perspectiveCamera: THREE.PerspectiveCamera;\r\n // 正交相机\r\n public orthographicCamera: THREE.OrthographicCamera;\r\n\r\n\r\n constructor(engine: any){\r\n this.engine = engine;\r\n\r\n // 透视相机 \r\n this.perspectiveCamera = new THREE.PerspectiveCamera(60,\r\n this.engine.container.clientWidth / this.engine.container.clientHeight, \r\n 0.1, 1000);\r\n \r\n this.perspectiveCamera.position.set(2, 2, 2);\r\n this.perspectiveCamera.lookAt(0, 0, 0);\r\n \r\n\r\n\r\n\r\n // 正交相机\r\n const frustumSize = 50;\r\n const aspect = this.engine.container.clientWidth / this.engine.container.clientHeight;\r\n this.orthographicCamera = new THREE.OrthographicCamera(frustumSize * aspect / -2, frustumSize * aspect / 2, frustumSize / 2, frustumSize / -2, 0.1, 1000);\r\n\r\n\r\n\r\n\r\n\r\n\r\n }\r\n\r\n// 切换当前相机\r\n public switchCurrentCamera(){\r\n if(this.engine.camera === this.perspectiveCamera){\r\n this.switchToOrthographicCamera();\r\n }else{\r\n this.switchToPerspectiveCamera();\r\n } \r\n }\r\n\r\n\r\n // 透视相机\r\n public switchToPerspectiveCamera(){\r\n // 保存当前相机的位置和目标\r\n const currentPosition = this.engine.camera.position.clone();\r\n const currentTarget = this.engine.controls.target.clone();\r\n\r\n // 切换相机\r\n this.engine.camera = this.perspectiveCamera;\r\n (this.engine.scene as any).camera = this.perspectiveCamera;\r\n\r\n // 恢复位置和目标\r\n this.perspectiveCamera.position.copy(currentPosition);\r\n this.perspectiveCamera.lookAt(currentTarget);\r\n\r\n // 更新控制器\r\n this.engine.controlModule.orbitControls.object = this.perspectiveCamera;\r\n this.engine.controlModule.firstPersonControls.camera = this.perspectiveCamera;\r\n\r\n // 重新初始化合成器(使用新相机)\r\n this.engine.composerModule.init();\r\n }\r\n // 正交相机\r\n public switchToOrthographicCamera(){\r\n // 保存当前相机的位置和目标\r\n const currentPosition = this.engine.camera.position.clone();\r\n const currentTarget = this.engine.controls.target.clone();\r\n\r\n // 切换相机\r\n this.engine.camera = this.orthographicCamera;\r\n (this.engine.scene as any).camera = this.orthographicCamera;\r\n\r\n // 恢复位置和目标\r\n this.orthographicCamera.position.copy(currentPosition);\r\n this.orthographicCamera.lookAt(currentTarget);\r\n\r\n // 更新控制器\r\n this.engine.controlModule.orbitControls.object = this.orthographicCamera;\r\n this.engine.controlModule.firstPersonControls.camera = this.orthographicCamera;\r\n\r\n // 重新初始化合成器(使用新相机)\r\n this.engine.composerModule.init();\r\n }\r\n\r\n // 获取当前相机类型\r\n public getCameraType(): CameraType {\r\n if (this.engine.camera === this.perspectiveCamera) {\r\n return CameraType.PERSPECTIVE;\r\n } else if (this.engine.camera === this.orthographicCamera) {\r\n return CameraType.ORTHOGRAPHIC;\r\n }\r\n // 默认返回透视相机类型\r\n return CameraType.PERSPECTIVE;\r\n }\r\n\r\n // 获取当前相机姿态\r\n public getCameraPose(): ICameraPose {\r\n const camera = this.engine.camera;\r\n const type = this.getCameraType();\r\n\r\n const pose: ICameraPose = {\r\n type: type,\r\n position: {\r\n x: camera.position.x,\r\n y: camera.position.y,\r\n z: camera.position.z\r\n },\r\n rotation: {\r\n x: camera.rotation.x,\r\n y: camera.rotation.y,\r\n z: camera.rotation.z\r\n },\r\n quaternion: {\r\n x: camera.quaternion.x,\r\n y: camera.quaternion.y,\r\n z: camera.quaternion.z,\r\n w: camera.quaternion.w\r\n }\r\n };\r\n\r\n // 保存控制器目标点\r\n if (this.engine.controls && this.engine.controls.target) {\r\n pose.target = {\r\n x: this.engine.controls.target.x,\r\n y: this.engine.controls.target.y,\r\n z: this.engine.controls.target.z\r\n };\r\n }\r\n\r\n // 如果是正交相机,保存缩放值\r\n if (type === CameraType.ORTHOGRAPHIC) {\r\n pose.zoom = (camera as THREE.OrthographicCamera).zoom;\r\n }\r\n\r\n return pose;\r\n }\r\n\r\n // 通过相机姿态还原相机位置\r\n public restoreCameraPose(pose: ICameraPose): void {\r\n // 如果相机类型不同,先切换相机类型\r\n const currentType = this.getCameraType();\r\n if (currentType !== pose.type) {\r\n if (pose.type === CameraType.PERSPECTIVE) {\r\n this.switchToPerspectiveCamera();\r\n } else {\r\n this.switchToOrthographicCamera();\r\n }\r\n }\r\n\r\n const camera = this.engine.camera;\r\n\r\n // 恢复位置\r\n camera.position.set(pose.position.x, pose.position.y, pose.position.z);\r\n\r\n // 恢复旋转(优先使用四元数,因为它不受万向锁影响)\r\n if (pose.quaternion) {\r\n camera.quaternion.set(\r\n pose.quaternion.x,\r\n pose.quaternion.y,\r\n pose.quaternion.z,\r\n pose.quaternion.w\r\n );\r\n } else if (pose.rotation) {\r\n camera.rotation.set(pose.rotation.x, pose.rotation.y, pose.rotation.z);\r\n }\r\n\r\n // 恢复控制器目标点\r\n if (pose.target && this.engine.controls && this.engine.controls.target) {\r\n this.engine.controls.target.set(\r\n pose.target.x,\r\n pose.target.y,\r\n pose.target.z\r\n );\r\n }\r\n\r\n // 如果是正交相机,恢复缩放值\r\n if (pose.type === CameraType.ORTHOGRAPHIC && pose.zoom !== undefined) {\r\n (camera as THREE.OrthographicCamera).zoom = pose.zoom;\r\n camera.updateProjectionMatrix();\r\n }\r\n\r\n // 更新相机矩阵\r\n camera.updateMatrix();\r\n camera.updateMatrixWorld(true);\r\n\r\n // 更新控制器\r\n if (this.engine.controls && this.engine.controls.update) {\r\n this.engine.controls.update();\r\n }\r\n }\r\n}","export class DeviceModule{\r\n private engine: any;\r\n public deviceType: string;\r\n constructor(engine: any){\r\n this.engine = engine;\r\n this.deviceType = 'PC';\r\n }\r\n\r\n // 获取设备类型\r\n public getDeviceType(){\r\n return this.deviceType;\r\n }\r\n\r\n // 获取容器尺寸\r\n public getContainerSize(){\r\n return {\r\n width: this.engine.container.clientWidth,\r\n height: this.engine.container.clientHeight\r\n };\r\n }\r\n}","import * as THREE from 'three';\r\nexport class RenderModule{\r\n private engine: any;\r\n public renderer: THREE.WebGLRenderer|null;\r\n constructor(engine: any){\r\n this.engine = engine;\r\n this.renderer = null;\r\n }\r\n\r\n public createRenderer(){ \r\n const { width, height } = this.engine.deviceModule.getContainerSize();\r\n this.renderer = new THREE.WebGLRenderer({\r\n antialias: this.engine.options.antialias ?? true,\r\n alpha: true,\r\n premultipliedAlpha: false,\r\n stencil: true\r\n });\r\n this.renderer.setClearColor(0x000000, 0); // 理论上应该透明 \r\n this.renderer.setSize(width, height);\r\n this.renderer.setPixelRatio(window.devicePixelRatio); \r\n // Visual Quality Settings\r\n this.renderer.shadowMap.enabled = true;\r\n this.renderer.shadowMap.type = THREE.PCFSoftShadowMap; \r\n // 启用本地裁剪功能(用于剖切平面)\r\n this.renderer.localClippingEnabled = true;\r\n // Enhanced color space and tone mapping for better material rendering\r\n this.renderer.outputColorSpace = THREE.SRGBColorSpace;\r\n this.renderer.toneMapping = THREE.ACESFilmicToneMapping;\r\n this.renderer.toneMappingExposure = 1.5;\r\n this.engine.container.appendChild(this.renderer.domElement);\r\n return this.renderer;\r\n }\r\n\r\n public disposeRenderer(){\r\n this.renderer?.dispose();\r\n }\r\n}","import {\r\n\tControls,\r\n\tMOUSE,\r\n\tQuaternion,\r\n\tSpherical,\r\n\tTOUCH,\r\n\tVector2,\r\n\tVector3,\r\n\tPlane,\r\n\tRay,\r\n\tMathUtils\r\n} from 'three';\r\n\r\n/**\r\n * Fires when the camera has been transformed by the controls.\r\n *\r\n * @event OrbitControls#change\r\n * @type {Object}\r\n */\r\nconst _changeEvent = { type: 'change' };\r\n\r\n/**\r\n * Fires when an interaction was initiated.\r\n *\r\n * @event OrbitControls#start\r\n * @type {Object}\r\n */\r\nconst _startEvent = { type: 'start' };\r\n\r\n/**\r\n * Fires when an interaction has finished.\r\n *\r\n * @event OrbitControls#end\r\n * @type {Object}\r\n */\r\nconst _endEvent = { type: 'end' };\r\n\r\nconst _ray = new Ray();\r\nconst _plane = new Plane();\r\nconst _TILT_LIMIT = Math.cos( 70 * MathUtils.DEG2RAD );\r\n\r\nconst _v = new Vector3();\r\nconst _twoPI = 2 * Math.PI;\r\n\r\nconst _STATE = {\r\n\tNONE: - 1,\r\n\tROTATE: 0,\r\n\tDOLLY: 1,\r\n\tPAN: 2,\r\n\tTOUCH_ROTATE: 3,\r\n\tTOUCH_PAN: 4,\r\n\tTOUCH_DOLLY_PAN: 5,\r\n\tTOUCH_DOLLY_ROTATE: 6\r\n};\r\nconst _EPS = 0.000001;\r\n\r\n\r\n/**\r\n * Orbit controls allow the camera to orbit around a target.\r\n *\r\n * OrbitControls performs orbiting, dollying (zooming), and panning. Unlike {@link TrackballControls},\r\n * it maintains the \"up\" direction `object.up` (+Y by default).\r\n *\r\n * - Orbit: Left mouse / touch: one-finger move.\r\n * - Zoom: Middle mouse, or mousewheel / touch: two-finger spread or squish.\r\n * - Pan: Right mouse, or left mouse + ctrl/meta/shiftKey, or arrow keys / touch: two-finger move.\r\n *\r\n * ```js\r\n * const controls = new OrbitControls( camera, renderer.domElement );\r\n *\r\n * // controls.update() must be called after any manual changes to the camera's transform\r\n * camera.position.set( 0, 20, 100 );\r\n * controls.update();\r\n *\r\n * function animate() {\r\n *\r\n * \t// required if controls.enableDamping or controls.autoRotate are set to true\r\n * \tcontrols.update();\r\n *\r\n * \trenderer.render( scene, camera );\r\n *\r\n * }\r\n * ```\r\n *\r\n * @augments Controls\r\n * @three_import import { OrbitControls } from 'three/addons/controls/OrbitControls.js';\r\n */\r\nclass OrbitControls extends Controls {\r\n\r\n\t/**\r\n\t * Constructs a new controls instance.\r\n\t *\r\n\t * @param {Object3D} object - The object that is managed by the controls.\r\n\t * @param {?HTMLElement} domElement - The HTML element used for event listeners.\r\n\t */\r\n\tconstructor(engine, object, domElement = null ) {\r\n\r\n\t\tsuper( object, domElement );\r\n\t\tthis.engine = engine;\r\n\r\n\t\tthis.state = _STATE.NONE;\r\n\r\n\t\t/**\r\n\t\t * The focus point of the controls, the `object` orbits around this.\r\n\t\t * It can be updated manually at any point to change the focus of the controls.\r\n\t\t *\r\n\t\t * @type {Vector3}\r\n\t\t */\r\n\t\tthis.target = new Vector3();\r\n\r\n\t\t/**\r\n\t\t * The focus point of the `minTargetRadius` and `maxTargetRadius` limits.\r\n\t\t * It can be updated manually at any point to change the center of interest\r\n\t\t * for the `target`.\r\n\t\t *\r\n\t\t * @type {Vector3}\r\n\t\t */\r\n\t\tthis.cursor = new Vector3();\r\n\r\n\t\t/**\r\n\t\t * How far you can dolly in (perspective camera only).\r\n\t\t *\r\n\t\t * @type {number}\r\n\t\t * @default 0\r\n\t\t */\r\n\t\tthis.minDistance = 0;\r\n\r\n\t\t/**\r\n\t\t * How far you can dolly out (perspective camera only).\r\n\t\t *\r\n\t\t * @type {number}\r\n\t\t * @default Infinity\r\n\t\t */\r\n\t\tthis.maxDistance = Infinity;\r\n\r\n\t\t/**\r\n\t\t * How far you can zoom in (orthographic camera only).\r\n\t\t *\r\n\t\t * @type {number}\r\n\t\t * @default 0\r\n\t\t */\r\n\t\tthis.minZoom = 0;\r\n\r\n\t\t/**\r\n\t\t * How far you can zoom out (orthographic camera only).\r\n\t\t *\r\n\t\t * @type {number}\r\n\t\t * @default Infinity\r\n\t\t */\r\n\t\tthis.maxZoom = Infinity;\r\n\r\n\t\t/**\r\n\t\t * How close you can get the target to the 3D `cursor`.\r\n\t\t *\r\n\t\t * @type {number}\r\n\t\t * @default 0\r\n\t\t */\r\n\t\tthis.minTargetRadius = 0;\r\n\r\n\t\t/**\r\n\t\t * How far you can move the target from the 3D `cursor`.\r\n\t\t *\r\n\t\t * @type {number}\r\n\t\t * @default Infinity\r\n\t\t */\r\n\t\tthis.maxTargetRadius = Infinity;\r\n\r\n\t\t/**\r\n\t\t * How far you can orbit vertically, lower limit. Range is `[0, Math.PI]` radians.\r\n\t\t *\r\n\t\t * @type {number}\r\n\t\t * @default 0\r\n\t\t */\r\n\t\tthis.minPolarAngle = 0;\r\n\r\n\t\t/**\r\n\t\t * How far you can orbit vertically, upper limit. Range is `[0, Math.PI]` radians.\r\n\t\t *\r\n\t\t * @type {number}\r\n\t\t * @default Math.PI\r\n\t\t */\r\n\t\tthis.maxPolarAngle = Math.PI;\r\n\r\n\t\t/**\r\n\t\t * How far you can orbit horizontally, lower limit. If set, the interval `[ min, max ]`\r\n\t\t * must be a sub-interval of `[ - 2 PI, 2 PI ]`, with `( max - min < 2 PI )`.\r\n\t\t *\r\n\t\t * @type {number}\r\n\t\t * @default -Infinity\r\n\t\t */\r\n\t\tthis.minAzimuthAngle = - Infinity;\r\n\r\n\t\t/**\r\n\t\t * How far you can orbit horizontally, upper limit. If set, the interval `[ min, max ]`\r\n\t\t * must be a sub-interval of `[ - 2 PI, 2 PI ]`, with `( max - min < 2 PI )`.\r\n\t\t *\r\n\t\t * @type {number}\r\n\t\t * @default -Infinity\r\n\t\t */\r\n\t\tthis.maxAzimuthAngle = Infinity;\r\n\r\n\t\t/**\r\n\t\t * Set to `true` to enable damping (inertia), which can be used to give a sense of weight\r\n\t\t * to the controls. Note that if this is enabled, you must call `update()` in your animation\r\n\t\t * loop.\r\n\t\t *\r\n\t\t * @type {boolean}\r\n\t\t * @default false\r\n\t\t */\r\n\t\tthis.enableDamping = false;\r\n\r\n\t\t/**\r\n\t\t * The damping inertia used if `enableDamping` is set to `true`.\r\n\t\t *\r\n\t\t * Note that for this to work, you must call `update()` in your animation loop.\r\n\t\t *\r\n\t\t * @type {number}\r\n\t\t * @default 0.05\r\n\t\t */\r\n\t\tthis.dampingFactor = 0.05;\r\n\r\n\t\t/**\r\n\t\t * Enable or disable zooming (dollying) of the camera.\r\n\t\t *\r\n\t\t * @type {boolean}\r\n\t\t * @default true\r\n\t\t */\r\n\t\tthis.enableZoom = true;\r\n\r\n\t\t/**\r\n\t\t * Speed of zooming / dollying.\r\n\t\t *\r\n\t\t * @type {number}\r\n\t\t * @default 1\r\n\t\t */\r\n\t\tthis.zoomSpeed = 1.0;\r\n\r\n\t\t/**\r\n\t\t * Enable or disable horizontal and vertical rotation of the camera.\r\n\t\t *\r\n\t\t * Note that it is possible to disable a single axis by setting the min and max of the\r\n\t\t * `minPolarAngle` or `minAzimuthAngle` to the same value, which will cause the vertical\r\n\t\t * or horizontal rotation to be fixed at that value.\r\n\t\t *\r\n\t\t * @type {boolean}\r\n\t\t * @default true\r\n\t\t */\r\n\t\tthis.enableRotate = true;\r\n\r\n\t\t/**\r\n\t\t * Speed of rotation.\r\n\t\t *\r\n\t\t * @type {number}\r\n\t\t * @default 1\r\n\t\t */\r\n\t\tthis.rotateSpeed = 1.0;\r\n\r\n\t\t/**\r\n\t\t * How fast to rotate the camera when the keyboard is used.\r\n\t\t *\r\n\t\t * @type {number}\r\n\t\t * @default 1\r\n\t\t */\r\n\t\tthis.keyRotateSpeed = 1.0;\r\n\r\n\t\t/**\r\n\t\t * Enable or disable camera panning.\r\n\t\t *\r\n\t\t * @type {boolean}\r\n\t\t * @default true\r\n\t\t */\r\n\t\tthis.enablePan = true;\r\n\r\n\t\t/**\r\n\t\t * Speed of panning.\r\n\t\t *\r\n\t\t * @type {number}\r\n\t\t * @default 1\r\n\t\t */\r\n\t\tthis.panSpeed = 1.0;\r\n\r\n\t\t/**\r\n\t\t * Defines how the camera's position is translated when panning. If `true`, the camera pans\r\n\t\t * in screen space. Otherwise, the camera pans in the plane orthogonal to the camera's up\r\n\t\t * direction.\r\n\t\t *\r\n\t\t * @type {boolean}\r\n\t\t * @default true\r\n\t\t */\r\n\t\tthis.screenSpacePanning = true;\r\n\r\n\t\t/**\r\n\t\t * How fast to pan the camera when the keyboard is used in\r\n\t\t * pixels per keypress.\r\n\t\t *\r\n\t\t * @type {number}\r\n\t\t * @default 7\r\n\t\t */\r\n\t\tthis.keyPanSpeed = 7.0;\r\n\r\n\t\t/**\r\n\t\t * Setting this property to `true` allows to zoom to the cursor's position.\r\n\t\t *\r\n\t\t * @type {boolean}\r\n\t\t * @default false\r\n\t\t */\r\n\t\tthis.zoomToCursor = false;\r\n\r\n\t\t/**\r\n\t\t * Set to true to automatically rotate around the target\r\n\t\t *\r\n\t\t * Note that if this is enabled, you must call `update()` in your animation loop.\r\n\t\t * If you want the auto-rotate speed to be independent of the frame rate (the refresh\r\n\t\t * rate of the display), you must pass the time `deltaTime`, in seconds, to `update()`.\r\n\t\t *\r\n\t\t * @type {boolean}\r\n\t\t * @default false\r\n\t\t */\r\n\t\tthis.autoRotate = false;\r\n\r\n\t\t/**\r\n\t\t * How fast to rotate around the target if `autoRotate` is `true`. The default equates to 30 seconds\r\n\t\t * per orbit at 60fps.\r\n\t\t *\r\n\t\t * Note that if `autoRotate` is enabled, you must call `update()` in your animation loop.\r\n\t\t *\r\n\t\t * @type {number}\r\n\t\t * @default 2\r\n\t\t */\r\n\t\tthis.autoRotateSpeed = 2.0;\r\n\r\n\t\t/**\r\n\t\t * This object contains references to the keycodes for controlling camera panning.\r\n\t\t *\r\n\t\t * ```js\r\n\t\t * controls.keys = {\r\n\t\t * \tLEFT: 'ArrowLeft', //left arrow\r\n\t\t * \tUP: 'ArrowUp', // up arrow\r\n\t\t * \tRIGHT: 'ArrowRight', // right arrow\r\n\t\t * \tBOTTOM: 'ArrowDown' // down arrow\r\n\t\t * }\r\n\t\t * ```\r\n\t\t * @type {Object}\r\n\t\t */\r\n\t\tthis.keys = { LEFT: 'ArrowLeft', UP: 'ArrowUp', RIGHT: 'ArrowRight', BOTTOM: 'ArrowDown' };\r\n\r\n\t\t/**\r\n\t\t * This object contains references to the mouse actions used by the controls.\r\n\t\t *\r\n\t\t * ```js\r\n\t\t * controls.mouseButtons = {\r\n\t\t * \tLEFT: THREE.MOUSE.ROTATE,\r\n\t\t * \tMIDDLE: THREE.MOUSE.DOLLY,\r\n\t\t * \tRIGHT: THREE.MOUSE.PAN\r\n\t\t * }\r\n\t\t * ```\r\n\t\t * @type {Object}\r\n\t\t */\r\n\t\tthis.mouseButtons = { LEFT: MOUSE.ROTATE, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.PAN };\r\n\r\n\t\t/**\r\n\t\t * This object contains references to the touch actions used by the controls.\r\n\t\t *\r\n\t\t * ```js\r\n\t\t * controls.mouseButtons = {\r\n\t\t * \tONE: THREE.TOUCH.ROTATE,\r\n\t\t * \tTWO: THREE.TOUCH.DOLLY_PAN\r\n\t\t * }\r\n\t\t * ```\r\n\t\t * @type {Object}\r\n\t\t */\r\n\t\tthis.touches = { ONE: TOUCH.ROTATE, TWO: TOUCH.DOLLY_PAN };\r\n\r\n\t\t/**\r\n\t\t * Used internally by `saveState()` and `reset()`.\r\n\t\t *\r\n\t\t * @type {Vector3}\r\n\t\t */\r\n\t\tthis.target0 = this.target.clone();\r\n\r\n\t\t/**\r\n\t\t * Used internally by `saveState()` and `reset()`.\r\n\t\t *\r\n\t\t * @type {Vector3}\r\n\t\t */\r\n\t\tthis.position0 = this.object.position.clone();\r\n\r\n\t\t/**\r\n\t\t * Used internally by `saveState()` and `reset()`.\r\n\t\t *\r\n\t\t * @type {number}\r\n\t\t */\r\n\t\tthis.zoom0 = this.object.zoom;\r\n\r\n\t\t// the target DOM element for key events\r\n\t\tthis._domElementKeyEvents = null;\r\n\r\n\t\t// internals\r\n\r\n\t\tthis._lastPosition = new Vector3();\r\n\t\tthis._lastQuaternion = new Quaternion();\r\n\t\tthis._lastTargetPosition = new Vector3();\r\n\r\n\t\t// so camera.up is the orbit axis\r\n\t\tthis._quat = new Quaternion().setFromUnitVectors( object.up, new Vector3( 0, 1, 0 ) );\r\n\t\tthis._quatInverse = this._quat.clone().invert();\r\n\r\n\t\t// current position in spherical coordinates\r\n\t\tthis._spherical = new Spherical();\r\n\t\tthis._sphericalDelta = new Spherical();\r\n\r\n\t\tthis._scale = 1;\r\n\t\tthis._panOffset = new Vector3();\r\n\r\n\t\tthis._rotateStart = new Vector2();\r\n\t\tthis._rotateEnd = new Vector2();\r\n\t\tthis._rotateDelta = new Vector2();\r\n\r\n\t\tthis._panStart = new Vector2();\r\n\t\tthis._panEnd = new Vector2();\r\n\t\tthis._panDelta = new Vector2();\r\n\r\n\t\tthis._dollyStart = new Vector2();\r\n\t\tthis._dollyEnd = new Vector2();\r\n\t\tthis._dollyDelta = new Vector2();\r\n\r\n\t\tthis._dollyDirection = new Vector3();\r\n\t\tthis._mouse = new Vector2();\r\n\t\tthis._performCursorZoom = false;\r\n\r\n\t\tthis._pointers = [];\r\n\t\tthis._pointerPositions = {};\r\n\r\n\t\tthis._controlActive = false;\r\n\r\n\t\t// event listeners\r\n\r\n\t\tthis._onPointerMove = onPointerMove.bind( this );\r\n\t\tthis._onPointerDown = onPointerDown.bind( this );\r\n\t\tthis._onPointerUp = onPointerUp.bind( this );\r\n\t\tthis._onContextMenu = onContextMenu.bind( this );\r\n\t\tthis._onMouseWheel = onMouseWheel.bind( this );\r\n\t\tthis._onKeyDown = onKeyDown.bind( this );\r\n\r\n\t\tthis._onTouchStart = onTouchStart.bind( this );\r\n\t\tthis._onTouchMove = onTouchMove.bind( this );\r\n\r\n\t\tthis._onMouseDown = onMouseDown.bind( this );\r\n\t\tthis._onMouseMove = onMouseMove.bind( this );\r\n\r\n\t\tthis._interceptControlDown = interceptControlDown.bind( this );\r\n\t\tthis._interceptControlUp = interceptControlUp.bind( this );\r\n\r\n\t\t//\r\n\r\n\t\tif ( this.domElement !== null ) {\r\n\r\n\t\t\tthis.connect( this.domElement );\r\n\r\n\t\t}\r\n\r\n\t\tthis.update();\r\n\r\n\t}\r\n\r\n\tconnect( element ) {\r\n\r\n\t\tsuper.connect( element );\r\n\r\n\t\tthis.domElement.addEventListener( 'pointerdown', this._onPointerDown );\r\n\t\tthis.domElement.addEventListener( 'pointercancel', this._onPointerUp );\r\n\r\n\t\tthis.domElement.addEventListener( 'contextmenu', this._onContextMenu );\r\n\t\tthis.domElement.addEventListener( 'wheel', this._onMouseWheel, { passive: false } );\r\n\r\n\t\tconst document = this.domElement.getRootNode(); // offscreen canvas compatibility\r\n\t\tdocument.addEventListener( 'keydown', this._interceptControlDown, { passive: true, capture: true } );\r\n\r\n\t\tthis.domElement.style.touchAction = 'none'; // disable touch scroll\r\n\r\n\t}\r\n\r\n\tdisconnect() {\r\n\r\n\t\tthis.domElement.removeEventListener( 'pointerdown', this._onPointerDown );\r\n\t\tthis.domElement.removeEventListener( 'pointermove', this._onPointerMove );\r\n\t\tthis.domElement.removeEventListener( 'pointerup', this._onPointerUp );\r\n\t\tthis.domElement.removeEventListener( 'pointercancel', this._onPointerUp );\r\n\r\n\t\tthis.domElement.removeEventListener( 'wheel', this._onMouseWheel );\r\n\t\tthis.domElement.removeEventListener( 'contextmenu', this._onContextMenu );\r\n\r\n\t\tthis.stopListenToKeyEvents();\r\n\r\n\t\tconst document = this.domElement.getRootNode(); // offscreen canvas compatibility\r\n\t\tdocument.removeEventListener( 'keydown', this._interceptControlDown, { capture: true } );\r\n\r\n\t\tthis.domElement.style.touchAction = 'auto';\r\n\r\n\t}\r\n\r\n\tdispose() {\r\n\r\n\t\tthis.disconnect();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Get the current vertical rotation, in radians.\r\n\t *\r\n\t * @return {number} The current vertical rotation, in radians.\r\n\t */\r\n\tgetPolarAngle() {\r\n\r\n\t\treturn this._spherical.phi;\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Get the current horizontal rotation, in radians.\r\n\t *\r\n\t * @return {number} The current horizontal rotation, in radians.\r\n\t */\r\n\tgetAzimuthalAngle() {\r\n\r\n\t\treturn this._spherical.theta;\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the distance from the camera to the target.\r\n\t *\r\n\t * @return {number} The distance from the camera to the target.\r\n\t */\r\n\tgetDistance() {\r\n\r\n\t\treturn this.object.position.distanceTo( this.target );\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Adds key event listeners to the given DOM element.\r\n\t * `window` is a recommended argument for using this method.\r\n\t *\r\n\t * @param {HTMLElement} domElement - The DOM element\r\n\t */\r\n\tlistenToKeyEvents( domElement ) {\r\n\r\n\t\tdomElement.addEventListener( 'keydown', this._onKeyDown );\r\n\t\tthis._domElementKeyEvents = domElement;\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Removes the key event listener previously defined with `listenToKeyEvents()`.\r\n\t */\r\n\tstopListenToKeyEvents() {\r\n\r\n\t\tif ( this._domElementKeyEvents !== null ) {\r\n\r\n\t\t\tthis._domElementKeyEvents.removeEventListener( 'keydown', this._onKeyDown );\r\n\t\t\tthis._domElementKeyEvents = null;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Save the current state of the controls. This can later be recovered with `reset()`.\r\n\t */\r\n\tsaveState() {\r\n\r\n\t\tthis.target0.copy( this.target );\r\n\t\tthis.position0.copy( this.object.position );\r\n\t\tthis.zoom0 = this.object.zoom;\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Reset the controls to their state from either the last time the `saveState()`\r\n\t * was called, or the initial state.\r\n\t */\r\n\treset() {\r\n\r\n\t\tthis.target.copy( this.target0 );\r\n\t\tthis.object.position.copy( this.position0 );\r\n\t\tthis.object.zoom = this.zoom0;\r\n\r\n\t\tthis.object.updateProjectionMatrix();\r\n\t\tthis.dispatchEvent( _changeEvent );\r\n\r\n\t\tthis.update();\r\n\r\n\t\tthis.state = _STATE.NONE;\r\n\r\n\t}\r\n\r\n\tupdate( deltaTime = null ) {\r\n\r\n\t\tconst position = this.object.position;\r\n\r\n\t\t_v.copy( position ).sub( this.target );\r\n\r\n\t\t// rotate offset to \"y-axis-is-up\" space\r\n\t\t_v.applyQuaternion( this._quat );\r\n\r\n\t\t// angle from z-axis around y-axis\r\n\t\tthis._spherical.setFromVector3( _v );\r\n\r\n\t\tif ( this.autoRotate && this.state === _STATE.NONE ) {\r\n\r\n\t\t\tthis._rotateLeft( this._getAutoRotationAngle( deltaTime ) );\r\n\r\n\t\t}\r\n\r\n\t\tif ( this.enableDamping ) {\r\n\r\n\t\t\tthis._spherical.theta += this._sphericalDelta.theta * this.dampingFactor;\r\n\t\t\tthis._spherical.phi += this._sphericalDelta.phi * this.dampingFactor;\r\n\r\n\t\t} else {\r\n\r\n\t\t\tthis._spherical.theta += this._sphericalDelta.theta;\r\n\t\t\tthis._spherical.phi += this._sphericalDelta.phi;\r\n\r\n\t\t}\r\n\r\n\t\t// restrict theta to be between desired limits\r\n\r\n\t\tlet min = this.minAzimuthAngle;\r\n\t\tlet max = this.maxAzimuthAngle;\r\n\r\n\t\tif ( isFinite( min ) && isFinite( max ) ) {\r\n\r\n\t\t\tif ( min < - Math.PI ) min += _twoPI; else if ( min > Math.PI ) min -= _twoPI;\r\n\r\n\t\t\tif ( max < - Math.PI ) max += _twoPI; else if ( max > Math.PI ) max -= _twoPI;\r\n\r\n\t\t\tif ( min <= max ) {\r\n\r\n\t\t\t\tthis._spherical.theta = Math.max( min, Math.min( max, this._spherical.theta ) );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tthis._spherical.theta = ( this._spherical.theta > ( min + max ) / 2 ) ?\r\n\t\t\t\t\tMath.max( min, this._spherical.theta ) :\r\n\t\t\t\t\tMath.min( max, this._spherical.theta );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t// restrict phi to be between desired limits\r\n\t\tthis._spherical.phi = Math.max( this.minPolarAngle, Math.min( this.maxPolarAngle, this._spherical.phi ) );\r\n\r\n\t\tthis._spherical.makeSafe();\r\n\r\n\r\n\t\t// move target to panned location\r\n\r\n\t\tif ( this.enableDamping === true ) {\r\n\r\n\t\t\tthis.target.addScaledVector( this._panOffset, this.dampingFactor );\r\n\r\n\t\t} else {\r\n\r\n\t\t\tthis.target.add( this._panOffset );\r\n\r\n\t\t}\r\n\r\n\t\t// Limit the target distance from the cursor to create a sphere around the center of interest\r\n\t\tthis.target.sub( this.cursor );\r\n\t\tthis.target.clampLength( this.minTargetRadius, this.maxTargetRadius );\r\n\t\tthis.target.add( this.cursor );\r\n\r\n\t\tlet zoomChanged = false;\r\n\t\t// adjust the camera position based on zoom only if we're not zooming to the cursor or if it's an ortho camera\r\n\t\t// we adjust zoom later in these cases\r\n\t\tif ( this.zoomToCursor && this._performCursorZoom || this.object.isOrthographicCamera ) {\r\n\r\n\t\t\tthis._spherical.radius = this._clampDistance( this._spherical.radius );\r\n\r\n\t\t} else {\r\n\r\n\t\t\tconst prevRadius = this._spherical.radius;\r\n\t\t\tthis._spherical.radius = this._clampDistance( this._spherical.radius * this._scale );\r\n\t\t\tzoomChanged = prevRadius != this._spherical.radius;\r\n\r\n\t\t}\r\n\r\n\t\t_v.setFromSpherical( this._spherical );\r\n\r\n\t\t// rotate offset back to \"camera-up-vector-is-up\" space\r\n\t\t_v.applyQuaternion( this._quatInverse );\r\n\r\n\t\tposition.copy( this.target ).add( _v );\r\n\r\n\t\tthis.object.lookAt( this.target );\r\n\r\n\t\tif ( this.enableDamping === true ) {\r\n\r\n\t\t\tthis._sphericalDelta.theta *= ( 1 - this.dampingFactor );\r\n\t\t\tthis._sphericalDelta.phi *= ( 1 - this.dampingFactor );\r\n\r\n\t\t\tthis._panOffset.multiplyScalar( 1 - this.dampingFactor );\r\n\r\n\t\t} else {\r\n\r\n\t\t\tthis._sphericalDelta.set( 0, 0, 0 );\r\n\r\n\t\t\tthis._panOffset.set( 0, 0, 0 );\r\n\r\n\t\t}\r\n\r\n\t\t// adjust camera position\r\n\t\tif ( this.zoomToCursor && this._performCursorZoom ) {\r\n\r\n\t\t\tlet newRadius = null;\r\n\t\t\tif ( this.object.isPerspectiveCamera ) {\r\n\r\n\t\t\t\t// move the camera down the pointer ray\r\n\t\t\t\t// this method avoids floating point error\r\n\t\t\t\tconst prevRadius = _v.length();\r\n\t\t\t\tnewRadius = this._clampDistance( prevRadius * this._scale );\r\n\r\n\t\t\t\tconst radiusDelta = prevRadius - newRadius;\r\n\t\t\t\tthis.object.position.addScaledVector( this._dollyDirection, radiusDelta );\r\n\t\t\t\tthis.object.updateMatrixWorld();\r\n\r\n\t\t\t\tzoomChanged = !! radiusDelta;\r\n\r\n\t\t\t} else if ( this.object.isOrthographicCamera ) {\r\n\r\n\t\t\t\t// adjust the ortho camera position based on zoom changes\r\n\t\t\t\tconst mouseBefore = new Vector3( this._mouse.x, this._mouse.y, 0 );\r\n\t\t\t\tmouseBefore.unproject( this.object );\r\n\r\n\t\t\t\tconst prevZoom = this.object.zoom;\r\n\t\t\t\tthis.object.zoom = Math.max( this.minZoom, Math.min( this.maxZoom, this.object.zoom / this._scale ) );\r\n\t\t\t\tthis.object.updateProjectionMatrix();\r\n\r\n\t\t\t\tzoomChanged = prevZoom !== this.object.zoom;\r\n\r\n\t\t\t\tconst mouseAfter = new Vector3( this._mouse.x, this._mouse.y, 0 );\r\n\t\t\t\tmouseAfter.unproject( this.object );\r\n\r\n\t\t\t\tthis.object.position.sub( mouseAfter ).add( mouseBefore );\r\n\t\t\t\tthis.object.updateMatrixWorld();\r\n\r\n\t\t\t\tnewRadius = _v.length();\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled.' );\r\n\t\t\t\tthis.zoomToCursor = false;\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// handle the placement of the target\r\n\t\t\tif ( newRadius !== null ) {\r\n\r\n\t\t\t\tif ( this.screenSpacePanning ) {\r\n\r\n\t\t\t\t\t// position the orbit target in front of the new camera position\r\n\t\t\t\t\tthis.target.set( 0, 0, - 1 )\r\n\t\t\t\t\t\t.transformDirection( this.object.matrix )\r\n\t\t\t\t\t\t.multiplyScalar( newRadius )\r\n\t\t\t\t\t\t.add( this.object.position );\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\t// get the ray and translation plane to compute target\r\n\t\t\t\t\t_ray.origin.copy( this.object.position );\r\n\t\t\t\t\t_ray.direction.set( 0, 0, - 1 ).transformDirection( this.object.matrix );\r\n\r\n\t\t\t\t\t// if the camera is 20 degrees above the horizon then don't adjust the focus target to avoid\r\n\t\t\t\t\t// extremely large values\r\n\t\t\t\t\tif ( Math.abs( this.object.up.dot( _ray.direction ) ) < _TILT_LIMIT ) {\r\n\r\n\t\t\t\t\t\tthis.object.lookAt( this.target );\r\n\r\n\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\t_plane.setFromNormalAndCoplanarPoint( this.object.up, this.target );\r\n\t\t\t\t\t\t_ray.intersectPlane( _plane, this.target );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t} else if ( this.object.isOrthographicCamera ) {\r\n\r\n\t\t\tconst prevZoom = this.object.zoom;\r\n\t\t\tthis.object.zoom = Math.max( this.minZoom, Math.min( this.maxZoom, this.object.zoom / this._scale ) );\r\n\r\n\t\t\tif ( prevZoom !== this.object.zoom ) {\r\n\r\n\t\t\t\tthis.object.updateProjectionMatrix();\r\n\t\t\t\tzoomChanged = true;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tthis._scale = 1;\r\n\t\tthis._performCursorZoom = false;\r\n\r\n\t\t// update condition is:\r\n\t\t// min(camera displacement, camera rotation in radians)^2 > EPS\r\n\t\t// using small-angle approximation cos(x/2) = 1 - x^2 / 8\r\n\r\n\t\tif ( zoomChanged ||\r\n\t\t\tthis._lastPosition.distanceToSquared( this.object.position ) > _EPS ||\r\n\t\t\t8 * ( 1 - this._lastQuaternion.dot( this.object.quaternion ) ) > _EPS ||\r\n\t\t\tthis._lastTargetPosition.distanceToSquared( this.target ) > _EPS ) {\r\n\r\n\t\t\tthis.dispatchEvent( _changeEvent );\r\n\r\n\t\t\tthis._lastPosition.copy( this.object.position );\r\n\t\t\tthis._lastQuaternion.copy( this.object.quaternion );\r\n\t\t\tthis._lastTargetPosition.copy( this.target );\r\n\r\n\t\t\treturn true;\r\n\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\r\n\t}\r\n\r\n\t_getAutoRotationAngle( deltaTime ) {\r\n\r\n\t\tif ( deltaTime !== null ) {\r\n\r\n\t\t\treturn ( _twoPI / 60 * this.autoRotateSpeed ) * deltaTime;\r\n\r\n\t\t} else {\r\n\r\n\t\t\treturn _twoPI / 60 / 60 * this.autoRotateSpeed;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t_getZoomScale( delta ) {\r\n\r\n\t\tconst normalizedDelta = Math.abs( delta * 0.01 );\r\n\t\treturn Math.pow( 0.95, this.zoomSpeed * normalizedDelta );\r\n\r\n\t}\r\n\r\n\t_rotateLeft( angle ) {\r\n\r\n\t\tthis._sphericalDelta.theta -= angle;\r\n\r\n\t}\r\n\r\n\t_rotateUp( angle ) {\r\n\r\n\t\tthis._sphericalDelta.phi -= angle;\r\n\r\n\t}\r\n\r\n\t_panLeft( distance, objectMatrix ) {\r\n\r\n\t\t_v.setFromMatrixColumn( objectMatrix, 0 ); // get X column of objectMatrix\r\n\t\t_v.multiplyScalar( - distance );\r\n\r\n\t\tthis._panOffset.add( _v );\r\n\r\n\t}\r\n\r\n\t_panUp( distance, objectMatrix ) {\r\n\r\n\t\tif ( this.screenSpacePanning === true ) {\r\n\r\n\t\t\t_v.setFromMatrixColumn( objectMatrix, 1 );\r\n\r\n\t\t} else {\r\n\r\n\t\t\t_v.setFromMatrixColumn( objectMatrix, 0 );\r\n\t\t\t_v.crossVectors( this.object.up, _v );\r\n\r\n\t\t}\r\n\r\n\t\t_v.multiplyScalar( distance );\r\n\r\n\t\tthis._panOffset.add( _v );\r\n\r\n\t}\r\n\r\n\t// deltaX and deltaY are in pixels; right and down are positive\r\n\t_pan( deltaX, deltaY ) {\r\n\r\n\t\tconst element = this.domElement;\r\n\r\n\t\tif ( this.object.isPerspectiveCamera ) {\r\n\r\n\t\t\t// perspective\r\n\t\t\tconst position = this.object.position;\r\n\t\t\t_v.copy( position ).sub( this.target );\r\n\t\t\tlet targetDistance = _v.length();\r\n\r\n\t\t\t// half of the fov is center to top of screen\r\n\t\t\ttargetDistance *= Math.tan( ( this.object.fov / 2 ) * Math.PI / 180.0 );\r\n\r\n\t\t\t// we use only clientHeight here so aspect ratio does not distort speed\r\n\t\t\tthis._panLeft( 2 * deltaX * targetDistance / element.clientHeight, this.object.matrix );\r\n\t\t\tthis._panUp( 2 * deltaY * targetDistance / element.clientHeight, this.object.matrix );\r\n\r\n\t\t} else if ( this.object.isOrthographicCamera ) {\r\n\r\n\t\t\t// orthographic\r\n\t\t\tthis._panLeft( deltaX * ( this.object.right - this.object.left ) / this.object.zoom / element.clientWidth, this.object.matrix );\r\n\t\t\tthis._panUp( deltaY * ( this.object.top - this.object.bottom ) / this.object.zoom / element.clientHeight, this.object.matrix );\r\n\r\n\t\t} else {\r\n\r\n\t\t\t// camera neither orthographic nor perspective\r\n\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.' );\r\n\t\t\tthis.enablePan = false;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t_dollyOut( dollyScale ) {\r\n\r\n\t\tif ( this.object.isPerspectiveCamera || this.object.isOrthographicCamera ) {\r\n\r\n\t\t\tthis._scale /= dollyScale;\r\n\r\n\t\t} else {\r\n\r\n\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\r\n\t\t\tthis.enableZoom = false;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t_dollyIn( dollyScale ) {\r\n\r\n\t\tif ( this.object.isPerspectiveCamera || this.object.isOrthographicCamera ) {\r\n\r\n\t\t\tthis._scale *= dollyScale;\r\n\r\n\t\t} else {\r\n\r\n\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\r\n\t\t\tthis.enableZoom = false;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t_updateZoomParameters( x, y ) {\r\n\r\n\t\tif ( ! this.zoomToCursor ) {\r\n\r\n\t\t\treturn;\r\n\r\n\t\t}\r\n\r\n\t\tthis._performCursorZoom = true;\r\n\r\n\t\tconst rect = this.domElement.getBoundingClientRect();\r\n\t\tconst dx = x - rect.left;\r\n\t\tconst dy = y - rect.top;\r\n\t\tconst w = rect.width;\r\n\t\tconst h = rect.height;\r\n\r\n\t\tthis._mouse.x = ( dx / w ) * 2 - 1;\r\n\t\tthis._mouse.y = - ( dy / h ) * 2 + 1;\r\n\r\n\t\tthis._dollyDirection.set( this._mouse.x, this._mouse.y, 1 ).unproject( this.object ).sub( this.object.position ).normalize();\r\n\r\n\t}\r\n\r\n\t_clampDistance( dist ) {\r\n\r\n\t\treturn Math.max( this.minDistance, Math.min( this.maxDistance, dist ) );\r\n\r\n\t}\r\n\r\n\t//\r\n\t// event callbacks - update the object state\r\n\t//\r\n\r\n\t_handleMouseDownRotate( event ) {\r\n\r\n\t\tthis._rotateStart.set( event.clientX, event.clientY );\r\n\r\n\t}\r\n\r\n\t_handleMouseDownDolly( event ) {\r\n\r\n\t\tthis._updateZoomParameters( event.clientX, event.clientX );\r\n\t\tthis._dollyStart.set( event.clientX, event.clientY );\r\n\r\n\t}\r\n\r\n\t_handleMouseDownPan( event ) {\r\n\r\n\t\tthis._panStart.set( event.clientX, event.clientY );\r\n\r\n\t}\r\n\r\n\t_handleMouseMoveRotate( event ) {\r\n\r\n\t\tthis._rotateEnd.set( event.clientX, event.clientY );\r\n\r\n\t\tthis._rotateDelta.subVectors( this._rotateEnd, this._rotateStart ).multiplyScalar( this.rotateSpeed );\r\n\r\n\t\tconst element = this.domElement;\r\n\r\n\t\tthis._rotateLeft( _twoPI * this._rotateDelta.x / element.clientHeight ); // yes, height\r\n\r\n\t\tthis._rotateUp( _twoPI * this._rotateDelta.y / element.clientHeight );\r\n\r\n\t\tthis._rotateStart.copy( this._rotateEnd );\r\n\r\n\t\tthis.update();\r\n\r\n\t}\r\n\r\n\t_handleMouseMoveDolly( event ) {\r\n\r\n\t\tthis._dollyEnd.set( event.clientX, event.clientY );\r\n\r\n\t\tthis._dollyDelta.subVectors( this._dollyEnd, this._dollyStart );\r\n\r\n\t\tif ( this._dollyDelta.y > 0 ) {\r\n\r\n\t\t\tthis._dollyOut( this._getZoomScale( this._dollyDelta.y ) );\r\n\r\n\t\t} else if ( this._dollyDelta.y < 0 ) {\r\n\r\n\t\t\tthis._dollyIn( this._getZoomScale( this._dollyDelta.y ) );\r\n\r\n\t\t}\r\n\r\n\t\tthis._dollyStart.copy( this._dollyEnd );\r\n\r\n\t\tthis.update();\r\n\r\n\t}\r\n\r\n\t_handleMouseMovePan( event ) {\r\n\r\n\t\tthis._panEnd.set( event.clientX, event.clientY );\r\n\r\n\t\tthis._panDelta.subVectors( this._panEnd, this._panStart ).multiplyScalar( this.panSpeed );\r\n\r\n\t\tthis._pan( this._panDelta.x, this._panDelta.y );\r\n\r\n\t\tthis._panStart.copy( this._panEnd );\r\n\r\n\t\tthis.update();\r\n\r\n\t}\r\n\r\n\t_handleMouseWheel( event ) {\r\n\r\n\t\tthis._updateZoomParameters( event.clientX, event.clientY );\r\n\r\n\t\tif ( event.deltaY < 0 ) {\r\n\r\n\t\t\tthis._dollyIn( this._getZoomScale( event.deltaY ) );\r\n\r\n\t\t} else if ( event.deltaY > 0 ) {\r\n\r\n\t\t\tthis._dollyOut( this._getZoomScale( event.deltaY ) );\r\n\r\n\t\t}\r\n\r\n\t\tthis.update();\r\n\r\n\t}\r\n\r\n\t_handleKeyDown( event ) {\r\n\r\n\t\tlet needsUpdate = false;\r\n\r\n\t\tswitch ( event.code ) {\r\n\r\n\t\t\tcase this.keys.UP:\r\n\r\n\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\r\n\r\n\t\t\t\t\tif ( this.enableRotate ) {\r\n\r\n\t\t\t\t\t\tthis._rotateUp( _twoPI * this.keyRotateSpeed / this.domElement.clientHeight );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tif ( this.enablePan ) {\r\n\r\n\t\t\t\t\t\tthis._pan( 0, this.keyPanSpeed );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tneedsUpdate = true;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase this.keys.BOTTOM:\r\n\r\n\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\r\n\r\n\t\t\t\t\tif ( this.enableRotate ) {\r\n\r\n\t\t\t\t\t\tthis._rotateUp( - _twoPI * this.keyRotateSpeed / this.domElement.clientHeight );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tif ( this.enablePan ) {\r\n\r\n\t\t\t\t\t\tthis._pan( 0, - this.keyPanSpeed );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tneedsUpdate = true;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase this.keys.LEFT:\r\n\r\n\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\r\n\r\n\t\t\t\t\tif ( this.enableRotate ) {\r\n\r\n\t\t\t\t\t\tthis._rotateLeft( _twoPI * this.keyRotateSpeed / this.domElement.clientHeight );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tif ( this.enablePan ) {\r\n\r\n\t\t\t\t\t\tthis._pan( this.keyPanSpeed, 0 );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tneedsUpdate = true;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase this.keys.RIGHT:\r\n\r\n\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\r\n\r\n\t\t\t\t\tif ( this.enableRotate ) {\r\n\r\n\t\t\t\t\t\tthis._rotateLeft( - _twoPI * this.keyRotateSpeed / this.domElement.clientHeight );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tif ( this.enablePan ) {\r\n\r\n\t\t\t\t\t\tthis._pan( - this.keyPanSpeed, 0 );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tneedsUpdate = true;\r\n\t\t\t\tbreak;\r\n\r\n\t\t}\r\n\r\n\t\tif ( needsUpdate ) {\r\n\r\n\t\t\t// prevent the browser from scrolling on cursor keys\r\n\t\t\tevent.preventDefault();\r\n\r\n\t\t\tthis.update();\r\n\r\n\t\t}\r\n\r\n\r\n\t}\r\n\r\n\t_handleTouchStartRotate( event ) {\r\n\r\n\t\tif ( this._pointers.length === 1 ) {\r\n\r\n\t\t\tthis._rotateStart.set( event.pageX, event.pageY );\r\n\r\n\t\t} else {\r\n\r\n\t\t\tconst position = this._getSecondPointerPosition( event );\r\n\r\n\t\t\tconst x = 0.5 * ( event.pageX + position.x );\r\n\t\t\tconst y = 0.5 * ( event.pageY + position.y );\r\n\r\n\t\t\tthis._rotateStart.set( x, y );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t_handleTouchStartPan( event ) {\r\n\r\n\t\tif ( this._pointers.length === 1 ) {\r\n\r\n\t\t\tthis._panStart.set( event.pageX, event.pageY );\r\n\r\n\t\t} else {\r\n\r\n\t\t\tconst position = this._getSecondPointerPosition( event );\r\n\r\n\t\t\tconst x = 0.5 * ( event.pageX + position.x );\r\n\t\t\tconst y = 0.5 * ( event.pageY + position.y );\r\n\r\n\t\t\tthis._panStart.set( x, y );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t_handleTouchStartDolly( event ) {\r\n\r\n\t\tconst position = this._getSecondPointerPosition( event );\r\n\r\n\t\tconst dx = event.pageX - position.x;\r\n\t\tconst dy = event.pageY - position.y;\r\n\r\n\t\tconst distance = Math.sqrt( dx * dx + dy * dy );\r\n\r\n\t\tthis._dollyStart.set( 0, distance );\r\n\r\n\t}\r\n\r\n\t_handleTouchStartDollyPan( event ) {\r\n\r\n\t\tif ( this.enableZoom ) this._handleTouchStartDolly( event );\r\n\r\n\t\tif ( this.enablePan ) this._handleTouchStartPan( event );\r\n\r\n\t}\r\n\r\n\t_handleTouchStartDollyRotate( event ) {\r\n\r\n\t\tif ( this.enableZoom ) this._handleTouchStartDolly( event );\r\n\r\n\t\tif ( this.enableRotate ) this._handleTouchStartRotate( event );\r\n\r\n\t}\r\n\r\n\t_handleTouchMoveRotate( event ) {\r\n\r\n\t\tif ( this._pointers.length == 1 ) {\r\n\r\n\t\t\tthis._rotateEnd.set( event.pageX, event.pageY );\r\n\r\n\t\t} else {\r\n\r\n\t\t\tconst position = this._getSecondPointerPosition( event );\r\n\r\n\t\t\tconst x = 0.5 * ( event.pageX + position.x );\r\n\t\t\tconst y = 0.5 * ( event.pageY + position.y );\r\n\r\n\t\t\tthis._rotateEnd.set( x, y );\r\n\r\n\t\t}\r\n\r\n\t\tthis._rotateDelta.subVectors( this._rotateEnd, this._rotateStart ).multiplyScalar( this.rotateSpeed );\r\n\r\n\t\tconst element = this.domElement;\r\n\r\n\t\tthis._rotateLeft( _twoPI * this._rotateDelta.x / element.clientHeight ); // yes, height\r\n\r\n\t\tthis._rotateUp( _twoPI * this._rotateDelta.y / element.clientHeight );\r\n\r\n\t\tthis._rotateStart.copy( this._rotateEnd );\r\n\r\n\t}\r\n\r\n\t_handleTouchMovePan( event ) {\r\n\r\n\t\tif ( this._pointers.length === 1 ) {\r\n\r\n\t\t\tthis._panEnd.set( event.pageX, event.pageY );\r\n\r\n\t\t} else {\r\n\r\n\t\t\tconst position = this._getSecondPointerPosition( event );\r\n\r\n\t\t\tconst x = 0.5 * ( event.pageX + position.x );\r\n\t\t\tconst y = 0.5 * ( event.pageY + position.y );\r\n\r\n\t\t\tthis._panEnd.set( x, y );\r\n\r\n\t\t}\r\n\r\n\t\tthis._panDelta.subVectors( this._panEnd, this._panStart ).multiplyScalar( this.panSpeed );\r\n\r\n\t\tthis._pan( this._panDelta.x, this._panDelta.y );\r\n\r\n\t\tthis._panStart.copy( this._panEnd );\r\n\r\n\t}\r\n\r\n\t_handleTouchMoveDolly( event ) {\r\n\r\n\t\tconst position = this._getSecondPointerPosition( event );\r\n\r\n\t\tconst dx = event.pageX - position.x;\r\n\t\tconst dy = event.pageY - position.y;\r\n\r\n\t\tconst distance = Math.sqrt( dx * dx + dy * dy );\r\n\r\n\t\tthis._dollyEnd.set( 0, distance );\r\n\r\n\t\tthis._dollyDelta.set( 0, Math.pow( this._dollyEnd.y / this._dollyStart.y, this.zoomSpeed ) );\r\n\r\n\t\tthis._dollyOut( this._dollyDelta.y );\r\n\r\n\t\tthis._dollyStart.copy( this._dollyEnd );\r\n\r\n\t\tconst centerX = ( event.pageX + position.x ) * 0.5;\r\n\t\tconst centerY = ( event.pageY + position.y ) * 0.5;\r\n\r\n\t\tthis._updateZoomParameters( centerX, centerY );\r\n\r\n\t}\r\n\r\n\t_handleTouchMoveDollyPan( event ) {\r\n\r\n\t\tif ( this.enableZoom ) this._handleTouchMoveDolly( event );\r\n\r\n\t\tif ( this.enablePan ) this._handleTouchMovePan( event );\r\n\r\n\t}\r\n\r\n\t_handleTouchMoveDollyRotate( event ) {\r\n\r\n\t\tif ( this.enableZoom ) this._handleTouchMoveDolly( event );\r\n\r\n\t\tif ( this.enableRotate ) this._handleTouchMoveRotate( event );\r\n\r\n\t}\r\n\r\n\t// pointers\r\n\r\n\t_addPointer( event ) {\r\n\r\n\t\tthis._pointers.push( event.pointerId );\r\n\r\n\t}\r\n\r\n\t_removePointer( event ) {\r\n\r\n\t\tdelete this._pointerPositions[ event.pointerId ];\r\n\r\n\t\tfor ( let i = 0; i < this._pointers.length; i ++ ) {\r\n\r\n\t\t\tif ( this._pointers[ i ] == event.pointerId ) {\r\n\r\n\t\t\t\tthis._pointers.splice( i, 1 );\r\n\t\t\t\treturn;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t_isTrackingPointer( event ) {\r\n\r\n\t\tfor ( let i = 0; i < this._pointers.length; i ++ ) {\r\n\r\n\t\t\tif ( this._pointers[ i ] == event.pointerId ) return true;\r\n\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\r\n\t}\r\n\r\n\t_trackPointer( event ) {\r\n\r\n\t\tlet position = this._pointerPositions[ event.pointerId ];\r\n\r\n\t\tif ( position === undefined ) {\r\n\r\n\t\t\tposition = new Vector2();\r\n\t\t\tthis._pointerPositions[ event.pointerId ] = position;\r\n\r\n\t\t}\r\n\r\n\t\tposition.set( event.pageX, event.pageY );\r\n\r\n\t}\r\n\r\n\t_getSecondPointerPosition( event ) {\r\n\r\n\t\tconst pointerId = ( event.pointerId === this._pointers[ 0 ] ) ? this._pointers[ 1 ] : this._pointers[ 0 ];\r\n\r\n\t\treturn this._pointerPositions[ pointerId ];\r\n\r\n\t}\r\n\r\n\t//\r\n\r\n\t_customWheelEvent( event ) {\r\n\r\n\t\tconst mode = event.deltaMode;\r\n\r\n\t\t// minimal wheel event altered to meet delta-zoom demand\r\n\t\tconst newEvent = {\r\n\t\t\tclientX: event.clientX,\r\n\t\t\tclientY: event.clientY,\r\n\t\t\tdeltaY: event.deltaY,\r\n\t\t};\r\n\r\n\t\tswitch ( mode ) {\r\n\r\n\t\t\tcase 1: // LINE_MODE\r\n\t\t\t\tnewEvent.deltaY *= 16;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 2: // PAGE_MODE\r\n\t\t\t\tnewEvent.deltaY *= 100;\r\n\t\t\t\tbreak;\r\n\r\n\t\t}\r\n\r\n\t\t// detect if event was triggered by pinching\r\n\t\tif ( event.ctrlKey && ! this._controlActive ) {\r\n\r\n\t\t\tnewEvent.deltaY *= 10;\r\n\r\n\t\t}\r\n\r\n\t\treturn newEvent;\r\n\r\n\t}\r\n\r\n}\r\n\r\nfunction onPointerDown( event ) {\r\n\r\n\tif ( this.enabled === false ) return;\r\n\r\n\tif ( this._pointers.length === 0 ) {\r\n\r\n\t\tthis.domElement.setPointerCapture( event.pointerId );\r\n\r\n\t\tthis.domElement.addEventListener( 'pointermove', this._onPointerMove );\r\n\t\tthis.domElement.addEventListener( 'pointerup', this._onPointerUp );\r\n\r\n\t}\r\n\r\n\t//\r\n\r\n\tif ( this._isTrackingPointer( event ) ) return;\r\n\r\n\t//\r\n\r\n\tthis._addPointer( event );\r\n\r\n\tif ( event.pointerType === 'touch' ) {\r\n\r\n\t\tthis._onTouchStart( event );\r\n\r\n\t} else {\r\n\r\n\t\tthis._onMouseDown( event );\r\n\r\n\t}\r\n\r\n}\r\n\r\nfunction onPointerMove( event ) {\r\n\r\n\tif ( this.enabled === false ) return;\r\n\r\n\tif ( event.pointerType === 'touch' ) {\r\n\r\n\t\tthis._onTouchMove( event );\r\n\r\n\t} else {\r\n\r\n\t\tthis._onMouseMove( event );\r\n\r\n\t}\r\n\r\n}\r\n\r\nfunction onPointerUp( event ) {\r\n\r\n\tthis._removePointer( event );\r\n\r\n\tswitch ( this._pointers.length ) {\r\n\r\n\t\tcase 0:\r\n\r\n\t\t\tthis.domElement.releasePointerCapture( event.pointerId );\r\n\r\n\t\t\tthis.domElement.removeEventListener( 'pointermove', this._onPointerMove );\r\n\t\t\tthis.domElement.removeEventListener( 'pointerup', this._onPointerUp );\r\n\r\n\t\t\tthis.dispatchEvent( _endEvent );\r\n\r\n\t\t\tthis.state = _STATE.NONE;\r\n\r\n\t\t\tbreak;\r\n\r\n\t\tcase 1:\r\n\r\n\t\t\tconst pointerId = this._pointers[ 0 ];\r\n\t\t\tconst position = this._pointerPositions[ pointerId ];\r\n\r\n\t\t\t// minimal placeholder event - allows state correction on pointer-up\r\n\t\t\tthis._onTouchStart( { pointerId: pointerId, pageX: position.x, pageY: position.y } );\r\n\r\n\t\t\tbreak;\r\n\r\n\t}\r\n\r\n}\r\n\r\nfunction onMouseDown( event ) {\r\n\r\n\tlet mouseAction;\r\n\r\n\tswitch ( event.button ) {\r\n\r\n\t\tcase 0:\r\n\r\n\t\t\tmouseAction = this.mouseButtons.LEFT;\r\n\t\t\tbreak;\r\n\r\n\t\tcase 1:\r\n\r\n\t\t\tmouseAction = this.mouseButtons.MIDDLE;\r\n\t\t\tbreak;\r\n\r\n\t\tcase 2:\r\n\r\n\t\t\tmouseAction = this.mouseButtons.RIGHT;\r\n\t\t\tbreak;\r\n\r\n\t\tdefault:\r\n\r\n\t\t\tmouseAction = - 1;\r\n\r\n\t}\r\n\r\n\tswitch ( mouseAction ) {\r\n\r\n\t\tcase MOUSE.DOLLY:\r\n\r\n\t\t\tif ( this.enableZoom === false ) return;\r\n\r\n\t\t\tthis._handleMouseDownDolly( event );\r\n\r\n\t\t\tthis.state = _STATE.DOLLY;\r\n\r\n\t\t\tbreak;\r\n\r\n\t\tcase MOUSE.ROTATE:\r\n\r\n\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\r\n\r\n\t\t\t\tif ( this.enablePan === false ) return;\r\n\r\n\t\t\t\tthis._handleMouseDownPan( event );\r\n\r\n\t\t\t\tthis.state = _STATE.PAN;\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tif ( this.enableRotate === false ) return;\r\n\r\n\t\t\t\tthis._handleMouseDownRotate( event );\r\n\r\n\t\t\t\tthis.state = _STATE.ROTATE;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tbreak;\r\n\r\n\t\tcase MOUSE.PAN:\r\n\r\n\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\r\n\r\n\t\t\t\tif ( this.enableRotate === false ) return;\r\n\r\n\t\t\t\tthis._handleMouseDownRotate( event );\r\n\r\n\t\t\t\tthis.state = _STATE.ROTATE;\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tif ( this.enablePan === false ) return;\r\n\r\n\t\t\t\tthis._handleMouseDownPan( event );\r\n\r\n\t\t\t\tthis.state = _STATE.PAN;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tbreak;\r\n\r\n\t\tdefault:\r\n\r\n\t\t\tthis.state = _STATE.NONE;\r\n\r\n\t}\r\n\r\n\tif ( this.state !== _STATE.NONE ) {\r\n\r\n\t\tthis.dispatchEvent( _startEvent );\r\n\r\n\t}\r\n\r\n}\r\n\r\nfunction onMouseMove( event ) {\r\n\r\n\tswitch ( this.state ) {\r\n\r\n\t\tcase _STATE.ROTATE:\r\n\r\n\t\t\tif ( this.enableRotate === false ) return;\r\n\r\n\t\t\tthis._handleMouseMoveRotate( event );\r\n\r\n\t\t\tbreak;\r\n\r\n\t\tcase _STATE.DOLLY:\r\n\r\n\t\t\tif ( this.enableZoom === false ) return;\r\n\r\n\t\t\tthis._handleMouseMoveDolly( event );\r\n\r\n\t\t\tbreak;\r\n\r\n\t\tcase _STATE.PAN:\r\n\r\n\t\t\tif ( this.enablePan === false ) return;\r\n\r\n\t\t\tthis._handleMouseMovePan( event );\r\n\r\n\t\t\tbreak;\r\n\r\n\t}\r\n\r\n}\r\n\r\nfunction onMouseWheel( event ) {\r\n\r\n\tif ( this.enabled === false || this.enableZoom === false || this.state !== _STATE.NONE ) return;\r\n\r\n\tevent.preventDefault();\r\n\r\n\tthis.dispatchEvent( _startEvent );\r\n\r\n\tthis._handleMouseWheel( this._customWheelEvent( event ) );\r\n\r\n\tthis.dispatchEvent( _endEvent );\r\n\r\n}\r\n\r\nfunction onKeyDown( event ) {\r\n\r\n\tif ( this.enabled === false ) return;\r\n\r\n\tthis._handleKeyDown( event );\r\n\r\n}\r\n\r\nfunction onTouchStart( event ) {\r\n\r\n\tthis._trackPointer( event );\r\n\r\n\tswitch ( this._pointers.length ) {\r\n\r\n\t\tcase 1:\r\n\r\n\t\t\tswitch ( this.touches.ONE ) {\r\n\r\n\t\t\t\tcase TOUCH.ROTATE:\r\n\r\n\t\t\t\t\tif ( this.enableRotate === false ) return;\r\n\r\n\t\t\t\t\tthis._handleTouchStartRotate( event );\r\n\r\n\t\t\t\t\tthis.state = _STATE.TOUCH_ROTATE;\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase TOUCH.PAN:\r\n\r\n\t\t\t\t\tif ( this.enablePan === false ) return;\r\n\r\n\t\t\t\t\tthis._handleTouchStartPan( event );\r\n\r\n\t\t\t\t\tthis.state = _STATE.TOUCH_PAN;\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\r\n\t\t\t\t\tthis.state = _STATE.NONE;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tbreak;\r\n\r\n\t\tcase 2:\r\n\r\n\t\t\tswitch ( this.touches.TWO ) {\r\n\r\n\t\t\t\tcase TOUCH.DOLLY_PAN:\r\n\r\n\t\t\t\t\tif ( this.enableZoom === false && this.enablePan === false ) return;\r\n\r\n\t\t\t\t\tthis._handleTouchStartDollyPan( event );\r\n\r\n\t\t\t\t\tthis.state = _STATE.TOUCH_DOLLY_PAN;\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase TOUCH.DOLLY_ROTATE:\r\n\r\n\t\t\t\t\tif ( this.enableZoom === false && this.enableRotate === false ) return;\r\n\r\n\t\t\t\t\tthis._handleTouchStartDollyRotate( event );\r\n\r\n\t\t\t\t\tthis.state = _STATE.TOUCH_DOLLY_ROTATE;\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\r\n\t\t\t\t\tthis.state = _STATE.NONE;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tbreak;\r\n\r\n\t\tdefault:\r\n\r\n\t\t\tthis.state = _STATE.NONE;\r\n\r\n\t}\r\n\r\n\tif ( this.state !== _STATE.NONE ) {\r\n\r\n\t\tthis.dispatchEvent( _startEvent );\r\n\r\n\t}\r\n\r\n}\r\n\r\nfunction onTouchMove( event ) {\r\n\r\n\tthis._trackPointer( event );\r\n\r\n\tswitch ( this.state ) {\r\n\r\n\t\tcase _STATE.TOUCH_ROTATE:\r\n\r\n\t\t\tif ( this.enableRotate === false ) return;\r\n\r\n\t\t\tthis._handleTouchMoveRotate( event );\r\n\r\n\t\t\tthis.update();\r\n\r\n\t\t\tbreak;\r\n\r\n\t\tcase _STATE.TOUCH_PAN:\r\n\r\n\t\t\tif ( this.enablePan === false ) return;\r\n\r\n\t\t\tthis._handleTouchMovePan( event );\r\n\r\n\t\t\tthis.update();\r\n\r\n\t\t\tbreak;\r\n\r\n\t\tcase _STATE.TOUCH_DOLLY_PAN:\r\n\r\n\t\t\tif ( this.enableZoom === false && this.enablePan === false ) return;\r\n\r\n\t\t\tthis._handleTouchMoveDollyPan( event );\r\n\r\n\t\t\tthis.update();\r\n\r\n\t\t\tbreak;\r\n\r\n\t\tcase _STATE.TOUCH_DOLLY_ROTATE:\r\n\r\n\t\t\tif ( this.enableZoom === false && this.enableRotate === false ) return;\r\n\r\n\t\t\tthis._handleTouchMoveDollyRotate( event );\r\n\r\n\t\t\tthis.update();\r\n\r\n\t\t\tbreak;\r\n\r\n\t\tdefault:\r\n\r\n\t\t\tthis.state = _STATE.NONE;\r\n\r\n\t}\r\n\r\n}\r\n\r\nfunction onContextMenu( event ) {\r\n\r\n\tif ( this.enabled === false ) return;\r\n\r\n\tevent.preventDefault();\r\n\r\n}\r\n\r\nfunction interceptControlDown( event ) {\r\n\r\n\tif ( event.key === 'Control' ) {\r\n\r\n\t\tthis._controlActive = true;\r\n\r\n\t\tconst document = this.domElement.getRootNode(); // offscreen canvas compatibility\r\n\r\n\t\tdocument.addEventListener( 'keyup', this._interceptControlUp, { passive: true, capture: true } );\r\n\r\n\t}\r\n\r\n}\r\n\r\nfunction interceptControlUp( event ) {\r\n\r\n\tif ( event.key === 'Control' ) {\r\n\r\n\t\tthis._controlActive = false;\r\n\r\n\t\tconst document = this.domElement.getRootNode(); // offscreen canvas compatibility\r\n\r\n\t\tdocument.removeEventListener( 'keyup', this._interceptControlUp, { passive: true, capture: true } );\r\n\r\n\t}\r\n\r\n}\r\n\r\nexport { OrbitControls };\r\n","/*\r\n * @Author: hongxu.lin\r\n * @Date: 2020-07-06 15:11:50\r\n * @LastEditTime: 2020-07-07 15:13:31\r\n */\r\n\r\nimport * as THREE from 'three';\r\nexport class FirstPersonCameraControl {\r\n constructor(_Engine, camera, domElement, rayCastObjects) {\r\n this._Engine = _Engine;\r\n this.camera = camera;\r\n this.domElement = domElement;\r\n this._isEnabled = false; \r\n this._rayOriginOffset = new THREE.Vector3(0, -1, 0);\r\n this._camerLocalDirection = new THREE.Vector3();\r\n this._tmpVector = new THREE.Vector3();\r\n this._rayCaster = new THREE.Raycaster();\r\n this._fallingTime = 0;\r\n // internal params for mouse move rotation\r\n this._euler = new THREE.Euler(0, 0, 0, \"YZX\");\r\n this._prevMouseX = 0;\r\n this._prevMouseY = 0;\r\n // public settings\r\n this.applyGravity = false;\r\n this.gravityMinHeight = true; //重力是否添加最低点\r\n this.applyCollision = true;\r\n this.positionEasing = true;\r\n this.lookflag = 1;\r\n this.lookSpeed = 0.008;\r\n this.moveSpeed = 0.02;\r\n this.playerHeight = 1.4;\r\n this.maxRotateX = 0.8; // 相机翻转最大限度\r\n this.g = 9.8;\r\n // event bindings\r\n // this.bindmousedown = this.onMouseDown.bind(this);\r\n // this.bindmouseup = this.onMouseUp.bind(this);\r\n // this.bindmousemove = this.onMouseMove.bind(this);\r\n // 适配移动端不同设备对touch和pointer事件的兼容\r\n this.bindmousedown = this._Engine && this._Engine.DeviceType !== \"PC\" ? this.onTouchStart.bind(this) : this.onMouseDown.bind(this);\r\n this.bindmouseup = this._Engine && this._Engine.DeviceType !== \"PC\" ? this.onTouchEnd.bind(this) : this.onMouseUp.bind(this);\r\n this.bindmousemove = this._Engine && this._Engine.DeviceType !== \"PC\" ? this.onTouchMove.bind(this) : this.onMouseMove.bind(this);\r\n this.bindonKeyDown = this.onKeyDown.bind(this);\r\n this.bindonKeyUp = this.onKeyUp.bind(this);\r\n this.bindMousewheel = this.onMousewheel.bind(this);\r\n this.needMousewheel = false; //是否需要鼠标滚轮缩放\r\n this.moveWheelRun = true;\r\n this.moveWheelStop = false;\r\n this.wheelClock;\r\n this.keydown = false; // 按住键盘Q向上时,是否时刻监听重力\r\n this.GetEngine = () => {\r\n return _Engine;\r\n };\r\n \r\n }\r\n\r\n /**\r\n * @param {Object} colliders set objects for collision detection\r\n */\r\n set colliders(colliders) {\r\n this._rayCastObjects = colliders;\r\n }\r\n\r\n /**\r\n * @param {boolean} isEnabled set if this camera control is enabled\r\n */\r\n set enabled(isEnabled) { \r\n // 如果状态没有变化,直接返回,避免重复添加/移除事件监听器\r\n if (this._isEnabled === isEnabled) {\r\n return;\r\n }\r\n this._isEnabled = isEnabled;\r\n // 从相机的四元数设置欧拉角,用于旋转控制\r\n this._euler.setFromQuaternion(this.camera.quaternion);\r\n // 根据启用状态添加或移除事件监听器\r\n if (isEnabled) {\r\n this.addEvents();\r\n } else {\r\n this.removeEvents();\r\n }\r\n }\r\n\r\n /**\r\n * @description: getter if current camera control is enabled.\r\n */\r\n get enabled() {\r\n return this._isEnabled;\r\n }\r\n\r\n addEvents() {\r\n // 根据设备类型添加相应的事件监听器\r\n const deviceType = this._Engine?.DeviceType;\r\n const isPC = deviceType === \"PC\" || !deviceType; // 如果没有设置设备类型,默认当作PC处理\r\n \r\n console.log('[FirstPersonCameraControl] addEvents - DeviceType:', deviceType, 'isPC:', isPC);\r\n \r\n if (!isPC) {\r\n // 移动端设备:使用触摸事件\r\n console.log('[FirstPersonCameraControl] 添加触摸事件监听器');\r\n this.domElement.addEventListener(\"touchstart\", this.bindmousedown, false);\r\n this.domElement.addEventListener(\"touchend\", this.bindmouseup, false);\r\n } else {\r\n // PC设备:使用鼠标事件\r\n console.log('[FirstPersonCameraControl] 添加鼠标事件监听器 - mousedown, mouseup');\r\n this.domElement.addEventListener(\"mousedown\", this.bindmousedown, false);\r\n this.domElement.addEventListener(\"mouseup\", this.bindmouseup, false);\r\n }\r\n // 键盘事件监听\r\n window.addEventListener(\"keydown\", this.bindonKeyDown, false);\r\n window.addEventListener(\"keyup\", this.bindonKeyUp, false);\r\n // 鼠标滚轮事件监听(如果需要)\r\n if (this.needMousewheel) {\r\n if (document.addEventListener) {\r\n document.addEventListener(\"DOMMouseScroll\", this.bindMousewheel, false);\r\n } //Firefox\r\n window.addEventListener(\"mousewheel\", this.bindMousewheel, false); //IE/Opera/Chrome/Safari\r\n }\r\n }\r\n\r\n removeEvents() {\r\n // 根据设备类型移除相应的事件监听器\r\n if (this._Engine && this._Engine.DeviceType !== \"PC\") {\r\n // 移动端设备:移除触摸事件\r\n this.domElement.removeEventListener(\"touchstart\", this.bindmousedown);\r\n this.domElement.removeEventListener(\"touchend\", this.bindmouseup);\r\n // 同时移除可能存在的 touchmove 事件\r\n this.domElement.removeEventListener(\"touchmove\", this.bindmousemove);\r\n } else {\r\n // PC设备:移除鼠标事件\r\n this.domElement.removeEventListener(\"mousedown\", this.bindmousedown);\r\n this.domElement.removeEventListener(\"mouseup\", this.bindmouseup);\r\n // 同时移除可能存在的 mousemove 事件\r\n this.domElement.removeEventListener(\"mousemove\", this.bindmousemove);\r\n }\r\n // 移除键盘事件监听\r\n window.removeEventListener(\"keydown\", this.bindonKeyDown);\r\n window.removeEventListener(\"keyup\", this.bindonKeyUp);\r\n // 移除鼠标滚轮事件监听(如果已添加)\r\n if (this.needMousewheel) {\r\n if (document.addEventListener) {\r\n document.removeEventListener(\"DOMMouseScroll\", this.bindMousewheel);\r\n } //Firefox\r\n window.removeEventListener(\"mousewheel\", this.bindMousewheel); //IE/Opera/Chrome/Safari\r\n }\r\n }\r\n\r\n onMousewheel(event) {\r\n debugger\r\n let direction;\r\n if (event.wheelDelta) {\r\n //IE Chrome Opera Safari\r\n if (event.wheelDelta > 0) {\r\n direction = \"up\";\r\n }\r\n if (event.wheelDelta < 0) {\r\n direction = \"down\";\r\n }\r\n } else if (event.detail) {\r\n //Firefox\r\n if (event.detail < 0) {\r\n direction = \"up\";\r\n }\r\n if (event.detail > 0) {\r\n direction = \"down\";\r\n }\r\n }\r\n switch (direction) {\r\n case \"up\":\r\n this._camerLocalDirection.z = 1;\r\n break;\r\n case \"down\":\r\n this._camerLocalDirection.z = -1;\r\n break;\r\n }\r\n if (this.moveWheelRun == true) {\r\n //这里写开始滚动时调用的方法\r\n this.moveWheelRun = false;\r\n this.moveWheelStop = true;\r\n this.wheelClock = setTimeout(() => {\r\n if (this.moveWheelStop == true) {\r\n this.moveWheelStop = false;\r\n this.moveWheelRun = true;\r\n this._camerLocalDirection.z = 0;\r\n }\r\n }, 200);\r\n } else {\r\n clearTimeout(this.wheelClock);\r\n this.wheelClock = setTimeout(() => {\r\n if (this.moveWheelStop == true) {\r\n this.moveWheelStop = false;\r\n this.moveWheelRun = true;\r\n this._camerLocalDirection.z = 0;\r\n }\r\n }, 150);\r\n }\r\n }\r\n\r\n onMouseDown(event) {\r\n console.log('[FirstPersonCameraControl] onMouseDown 被调用', event);\r\n // 鼠标按下时,添加鼠标移动事件监听器\r\n // 注意:这里添加的是 mousemove,不是 pointermove\r\n this.domElement.addEventListener(\"mousemove\", this.bindmousemove, false);\r\n // 记录鼠标初始位置,用于计算移动距离\r\n this._prevMouseX = event.screenX;\r\n this._prevMouseY = event.screenY;\r\n }\r\n\r\n onMouseMove(event) {\r\n // 如果控制器未启用,直接返回\r\n if (this._isEnabled == false) {\r\n return;\r\n }\r\n \r\n\r\n let movementX = this._prevMouseX ? event.screenX - this._prevMouseX : 0;\r\n let movementY = this._prevMouseY ? event.screenY - this._prevMouseY : 0;\r\n // euler旋转顺序 y z x\r\n // euler.x~y轴旋转\r\n // euler.y~z轴旋转\r\n let xVal = this._euler.x - movementY * this.lookflag * this.lookSpeed;\r\n if (xVal >= 0) {\r\n if (xVal < this.maxRotateX) {\r\n this._euler.x = xVal;\r\n } else {\r\n this._euler.x = this.maxRotateX;\r\n }\r\n } else {\r\n if (xVal > -this.maxRotateX) {\r\n this._euler.x = xVal;\r\n } else {\r\n this._euler.x = -this.maxRotateX;\r\n }\r\n }\r\n\r\n this._euler.y -= movementX * this.lookSpeed;\r\n // this._euler.x -= movementY * this.lookflag * this.lookSpeed;\r\n this.camera.quaternion.setFromEuler(this._euler);\r\n this._prevMouseX = event.screenX;\r\n this._prevMouseY = event.screenY;\r\n let _Engine = this.GetEngine();\r\n _Engine.movefirst = true;\r\n var myEvent = new CustomEvent(\"bimengine:camerachange\", {\r\n detail: \"\"\r\n });\r\n window.dispatchEvent(myEvent);\r\n }\r\n\r\n onMouseUp(event) {\r\n let _Engine = this.GetEngine();\r\n _Engine.movefirst = false;\r\n // 修复:移除事件监听器时应该使用与添加时相同的事件类型\r\n this.domElement.removeEventListener(\"mousemove\", this.bindmousemove);\r\n }\r\n\r\n onTouchStart(event) {\r\n this.domElement.addEventListener(\"touchmove\", this.bindmousemove, false);\r\n this._prevMouseX = event.targetTouches[0].clientX;\r\n this._prevMouseY = event.targetTouches[0].clientY;\r\n }\r\n onTouchMove(event) {\r\n if (this._isEnabled == false) {\r\n return;\r\n }\r\n let movementX = this._prevMouseX ? event.targetTouches[0].clientX - this._prevMouseX : 0;\r\n let movementY = this._prevMouseY ? event.targetTouches[0].clientY - this._prevMouseY : 0;\r\n // euler旋转顺序 y z x\r\n // euler.x~y轴旋转\r\n // euler.y~z轴旋转\r\n let xVal = this._euler.x - movementY * this.lookflag * this.lookSpeed;\r\n if (xVal >= 0) {\r\n if (xVal < this.maxRotateX) {\r\n this._euler.x = xVal;\r\n } else {\r\n this._euler.x = this.maxRotateX;\r\n }\r\n } else {\r\n if (xVal > -this.maxRotateX) {\r\n this._euler.x = xVal;\r\n } else {\r\n this._euler.x = -this.maxRotateX;\r\n }\r\n }\r\n\r\n this._euler.y -= movementX * this.lookSpeed;\r\n // this._euler.x -= movementY * this.lookflag * this.lookSpeed;\r\n this.camera.quaternion.setFromEuler(this._euler);\r\n this._prevMouseX = event.targetTouches[0].clientX;\r\n this._prevMouseY = event.targetTouches[0].clientY;\r\n let _Engine = this.GetEngine();\r\n _Engine.movefirst = true;\r\n var myEvent = new CustomEvent(\"bimengine:camerachange\", {\r\n detail: \"\"\r\n });\r\n window.dispatchEvent(myEvent);\r\n }\r\n onTouchEnd(event) {\r\n let _Engine = this.GetEngine();\r\n _Engine.movefirst = false;\r\n this.domElement.removeEventListener(\"touchmove\", this.bindmousemove);\r\n }\r\n\r\n onKeyDown(event) {\r\n var myEvent = new CustomEvent(\"bimengine:camerachange\", {\r\n detail: \"\"\r\n });\r\n let _Engine = this.GetEngine();\r\n _Engine.movefirst = true;\r\n window.dispatchEvent(myEvent); \r\n switch (event.keyCode) {\r\n case 38: // up\r\n this.rotateY(-1);\r\n break;\r\n case 81: // q\r\n this.keydown = true;\r\n this._camerLocalDirection.y = 1;\r\n break;\r\n case 69: // e\r\n this._camerLocalDirection.y = -1;\r\n break;\r\n case 87: // w\r\n this._camerLocalDirection.z = 1;\r\n break;\r\n\r\n case 37: // left\r\n this.rotateX(-1);\r\n break;\r\n case 65: // a\r\n this._camerLocalDirection.x = -1;\r\n break;\r\n\r\n case 40: // down\r\n this.rotateY(1);\r\n break;\r\n\r\n case 83: // s\r\n this._camerLocalDirection.z = -1;\r\n break;\r\n\r\n case 39: // right\r\n this.rotateX(1);\r\n break;\r\n case 68: // d\r\n this._camerLocalDirection.x = 1;\r\n\r\n break;\r\n }\r\n }\r\n\r\n onKeyUp(event) {\r\n let _Engine = this.GetEngine();\r\n _Engine.movefirst = false;\r\n switch (event.keyCode) {\r\n case 38: // up\r\n\r\n case 87: // w\r\n this._camerLocalDirection.z = 0;\r\n break;\r\n\r\n case 37: // left\r\n case 65: // a\r\n this._camerLocalDirection.x = 0;\r\n break;\r\n case 40: // down\r\n case 83: // s\r\n this._camerLocalDirection.z = 0;\r\n break;\r\n\r\n case 39: // right\r\n case 68: // d\r\n this._camerLocalDirection.x = 0;\r\n break;\r\n case 81:\r\n case 69:\r\n this.keydown = false;\r\n this._camerLocalDirection.y = 0;\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * @description: rotate camera by left/right\r\n * @param {Number} value\r\n * @return: null\r\n */\r\n rotateX(value) {\r\n this._euler.y -= value * this.lookSpeed;\r\n this.camera.quaternion.setFromEuler(this._euler);\r\n }\r\n\r\n /**\r\n * @description: rotate camera by up/down\r\n * @param {Number} value\r\n * @return: null\r\n */\r\n rotateY(value) {\r\n let xVal = this._euler.x - value * this.lookflag * 0.5 * this.lookSpeed;\r\n if (xVal >= 0) {\r\n if (xVal < this.maxRotateX) {\r\n this._euler.x = xVal;\r\n } else {\r\n this._euler.x = this.maxRotateX;\r\n }\r\n } else {\r\n if (xVal > -this.maxRotateX) {\r\n this._euler.x = xVal;\r\n } else {\r\n this._euler.x = -this.maxRotateX;\r\n }\r\n }\r\n\r\n // this._euler.x -= value * this.lookflag * 0.5 * this.lookSpeed;\r\n this.camera.quaternion.setFromEuler(this._euler);\r\n }\r\n\r\n /**\r\n * @description: update current calcuate each frame.\r\n */\r\n update() {\r\n //gravity test\r\n if (!this.keydown) {\r\n this.gravityTest();\r\n }\r\n //collision test\r\n this.collisionTest(); \r\n }\r\n\r\n gravityTest() {\r\n if (this.applyGravity) {\r\n let isFalling = true;\r\n this._fallingTime += 0.01;\r\n this._tmpVector.set(0, -1, 0);\r\n const intersect = this.hitTest();\r\n if (intersect) {\r\n const newPosition = intersect.point.add(new THREE.Vector3(0, this.playerHeight, 0));\r\n if (this.positionEasing) {\r\n if (newPosition.y >= this.camera.position.y || newPosition.y - this.camera.position.y < 0.2) {\r\n //上下楼梯时逐步上升 以免明显顿挫感\r\n\r\n // this.camera.position.y += (newPosition.y - this.camera.position.y) * 0.08;\r\n this.setCameraHeight(this.camera.position.y + (newPosition.y - this.camera.position.y) * 0.08);\r\n this._fallingTime = 0;\r\n isFalling = false;\r\n return;\r\n }\r\n } else if (intersect.distance < this.playerHeight) {\r\n // this.camera.position.y = newPosition.y;\r\n this.setCameraHeight(newPosition.y);\r\n this._fallingTime = 0;\r\n isFalling = false;\r\n }\r\n }\r\n\r\n if (isFalling) {\r\n // this.camera.position.y -= this.g * Math.pow(this._fallingTime, 2);\r\n this.setCameraHeight(this.camera.position.y - this.g * Math.pow(this._fallingTime, 2));\r\n }\r\n } else {\r\n this.setCameraHeight(this.camera.position.y);\r\n }\r\n }\r\n\r\n collisionTest() {\r\n if (this._camerLocalDirection.x !== 0) this.collisionTestX();\r\n if (this._camerLocalDirection.z !== 0) this.collisionTestZ();\r\n if (this._camerLocalDirection.y !== 0) this.collisionTestY();\r\n }\r\n\r\n collisionTestX() {\r\n let _Engine = this.GetEngine();\r\n _Engine.movefirst = true;\r\n this._tmpVector.setFromMatrixColumn(this.camera.matrix, 0);\r\n this._tmpVector.multiplyScalar(this._camerLocalDirection.x);\r\n if (this.applyCollision) {\r\n const intersect = this.hitTest();\r\n if (intersect && intersect.distance < 0.3) {\r\n return;\r\n }\r\n }\r\n\r\n this.camera.position.addScaledVector(this._tmpVector, this.moveSpeed);\r\n }\r\n\r\n collisionTestZ() {\r\n let _Engine = this.GetEngine();\r\n _Engine.movefirst = true;\r\n this._tmpVector.setFromMatrixColumn(this.camera.matrix, 0);\r\n this._tmpVector.crossVectors(this.camera.up, this._tmpVector);\r\n this._tmpVector.multiplyScalar(this._camerLocalDirection.z);\r\n if (this.applyCollision) {\r\n const intersect = this.hitTest();\r\n if (intersect && intersect.distance < 0.3) {\r\n return;\r\n }\r\n }\r\n\r\n this.camera.position.addScaledVector(this._tmpVector, this.moveSpeed);\r\n }\r\n collisionTestY() {\r\n let _Engine = this.GetEngine();\r\n _Engine.movefirst = true;\r\n this._tmpVector.setFromMatrixColumn(this.camera.matrix, 0);\r\n this._tmpVector = new THREE.Vector3(0, 1, 0);\r\n this._tmpVector.multiplyScalar(this._camerLocalDirection.y);\r\n if (this.applyCollision) {\r\n const intersect = this.hitTest();\r\n if (intersect && intersect.distance < 0.3) {\r\n return;\r\n }\r\n }\r\n\r\n // this.camera.position.addScaledVector(this._tmpVector, this.moveSpeed);\r\n let clonePosition = this.camera.position.clone().addScaledVector(this._tmpVector, this.moveSpeed);\r\n this.setCameraHeight(clonePosition.y);\r\n }\r\n\r\n // 设置相机Y方向位置\r\n setCameraHeight(height) {\r\n let minHeight = this.getMinHeight();\r\n if (this.gravityMinHeight && minHeight !== undefined && height < minHeight) {\r\n this.camera.position.y = minHeight;\r\n } else {\r\n this.camera.position.y = height;\r\n }\r\n }\r\n\r\n // 获得所有模型最低点\r\n getMinHeight() {\r\n let minHeight;\r\n let _Engine = this.GetEngine();\r\n let BoundingBox = _Engine.ToolUntils ? _Engine.ToolUntils.GetBoundingBox(_Engine) : null; //场景中的模型包围矩形框\r\n if (_Engine && BoundingBox) {\r\n minHeight = BoundingBox.min.y;\r\n }\r\n return minHeight;\r\n }\r\n\r\n hitTest() {\r\n let result = null;\r\n const origin = this.camera.position.clone().add(this._rayOriginOffset);\r\n this._rayCaster.ray.origin = origin;\r\n this._rayCaster.ray.direction = this._tmpVector;\r\n let _Engine = this.GetEngine();\r\n // const intersect = this._rayCaster.intersectObjects(_Engine.GetAllVisibilityModel(), true);\r\n let showGround = false;\r\n var ground = _Engine.scene.ground;\r\n if (ground && ground.material.type === \"MeshPhongMaterial\") {\r\n //显示地面\r\n showGround = true;\r\n }\r\n\r\n return null;\r\n\r\n\r\n const intersect = _Engine.RayCast.pickDirection(origin, this._tmpVector, _Engine, showGround);\r\n \r\n if (intersect && intersect.length > 0) {\r\n result = intersect[0];\r\n }\r\n if (result != null) {\r\n if (result.object.info && result.object.info.name && result.object.info.name.includes(\"门\")) {\r\n result = null;\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n","import * as THREE from 'three'; \r\n// 同时尝试直接导入 OrbitControls(如果导出可用)\r\n// @ts-ignore - OrbitControls_old.js 可能没有类型声明\r\nimport { OrbitControls } from '../controls/OrbitControls.js';\r\n// @ts-ignore - firstPersonCameraControl.js 可能没有类型声明\r\nimport { FirstPersonCameraControl } from '../controls/firstPersonCameraControl.js';\r\nexport class ControlModule{\r\n private engine: any;\r\n public orbitControls: any;\r\n public firstPersonControls: any;\r\n public isActive: boolean = true;\r\n constructor(engine: any){\r\n this.engine = engine;\r\n this.init();\r\n }\r\n\r\n public init(){\r\n this.orbitControls = new OrbitControls(this.engine, this.engine.camera, this.engine.renderer.domElement);\r\n this.firstPersonControls = new FirstPersonCameraControl(this.engine, this.engine.camera, this.engine.renderer.domElement);\r\n }\r\n\r\n\r\n public active(){\r\n this.isActive = true; \r\n this.orbitControls.enabled = true;\r\n\r\n }\r\n\r\n public disActive(){\r\n this.isActive = false;\r\n this.orbitControls.enabled = false;\r\n }\r\n\r\n\r\n // 切换第一人称漫游模式\r\n public switchFirstPersonMode() { \r\n // 透视相机 \r\n this.firstPersonControls = new FirstPersonCameraControl(\r\n this.engine,\r\n this.engine.camera,\r\n this.engine.renderer.domElement,\r\n []\r\n ); \r\n // 禁用轨道控制器\r\n this.orbitControls.enabled = false;\r\n // 启用第一人称控制器 \r\n this.firstPersonControls.enabled = true; \r\n this.firstPersonControls.isActive = true; \r\n }\r\n // 切换默认模式\r\n public switchDefaultMode() { \r\n // 禁用第一人称控制器\r\n if (this.firstPersonControls) {\r\n this.firstPersonControls.enabled = false;\r\n }\r\n // 启用轨道控制器\r\n this.orbitControls.enabled = true; \r\n } \r\n\r\n\r\n\r\n public update(){\r\n if(this.firstPersonControls.enabled){\r\n this.firstPersonControls.update();\r\n } \r\n }\r\n}","/**\n * @module CopyShader\n * @three_import import { CopyShader } from 'three/addons/shaders/CopyShader.js';\n */\n\n/**\n * Full-screen copy shader pass.\n *\n * @constant\n * @type {ShaderMaterial~Shader}\n */\nconst CopyShader = {\n\n\tname: 'CopyShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'opacity': { value: 1.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float opacity;\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 texel = texture2D( tDiffuse, vUv );\n\t\t\tgl_FragColor = opacity * texel;\n\n\n\t\t}`\n\n};\n\nexport { CopyShader };\n","import {\n\tBufferGeometry,\n\tFloat32BufferAttribute,\n\tOrthographicCamera,\n\tMesh\n} from 'three';\n\n/**\n * Abstract base class for all post processing passes.\n *\n * This module is only relevant for post processing with {@link WebGLRenderer}.\n *\n * @abstract\n * @three_import import { Pass } from 'three/addons/postprocessing/Pass.js';\n */\nclass Pass {\n\n\t/**\n\t * Constructs a new pass.\n\t */\n\tconstructor() {\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isPass = true;\n\n\t\t/**\n\t\t * If set to `true`, the pass is processed by the composer.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.enabled = true;\n\n\t\t/**\n\t\t * If set to `true`, the pass indicates to swap read and write buffer after rendering.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.needsSwap = true;\n\n\t\t/**\n\t\t * If set to `true`, the pass clears its buffer before rendering\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.clear = false;\n\n\t\t/**\n\t\t * If set to `true`, the result of the pass is rendered to screen. The last pass in the composers\n\t\t * pass chain gets automatically rendered to screen, no matter how this property is configured.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.renderToScreen = false;\n\n\t}\n\n\t/**\n\t * Sets the size of the pass.\n\t *\n\t * @abstract\n\t * @param {number} width - The width to set.\n\t * @param {number} height - The height to set.\n\t */\n\tsetSize( /* width, height */ ) {}\n\n\t/**\n\t * This method holds the render logic of a pass. It must be implemented in all derived classes.\n\t *\n\t * @abstract\n\t * @param {WebGLRenderer} renderer - The renderer.\n\t * @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering\n\t * destination for the pass.\n\t * @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the\n\t * previous pass from this buffer.\n\t * @param {number} deltaTime - The delta time in seconds.\n\t * @param {boolean} maskActive - Whether masking is active or not.\n\t */\n\trender( /* renderer, writeBuffer, readBuffer, deltaTime, maskActive */ ) {\n\n\t\tconsole.error( 'THREE.Pass: .render() must be implemented in derived pass.' );\n\n\t}\n\n\t/**\n\t * Frees the GPU-related resources allocated by this instance. Call this\n\t * method whenever the pass is no longer used in your app.\n\t *\n\t * @abstract\n\t */\n\tdispose() {}\n\n}\n\n// Helper for passes that need to fill the viewport with a single quad.\n\nconst _camera = new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );\n\n// https://github.com/mrdoob/three.js/pull/21358\n\nclass FullscreenTriangleGeometry extends BufferGeometry {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( [ - 1, 3, 0, - 1, - 1, 0, 3, - 1, 0 ], 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( [ 0, 2, 0, 0, 2, 0 ], 2 ) );\n\n\t}\n\n}\n\nconst _geometry = new FullscreenTriangleGeometry();\n\n\n/**\n * This module is a helper for passes which need to render a full\n * screen effect which is quite common in context of post processing.\n *\n * The intended usage is to reuse a single full screen quad for rendering\n * subsequent passes by just reassigning the `material` reference.\n *\n * This module can only be used with {@link WebGLRenderer}.\n *\n * @augments Mesh\n * @three_import import { FullScreenQuad } from 'three/addons/postprocessing/Pass.js';\n */\nclass FullScreenQuad {\n\n\t/**\n\t * Constructs a new full screen quad.\n\t *\n\t * @param {?Material} material - The material to render te full screen quad with.\n\t */\n\tconstructor( material ) {\n\n\t\tthis._mesh = new Mesh( _geometry, material );\n\n\t}\n\n\t/**\n\t * Frees the GPU-related resources allocated by this instance. Call this\n\t * method whenever the instance is no longer used in your app.\n\t */\n\tdispose() {\n\n\t\tthis._mesh.geometry.dispose();\n\n\t}\n\n\t/**\n\t * Renders the full screen quad.\n\t *\n\t * @param {WebGLRenderer} renderer - The renderer.\n\t */\n\trender( renderer ) {\n\n\t\trenderer.render( this._mesh, _camera );\n\n\t}\n\n\t/**\n\t * The quad's material.\n\t *\n\t * @type {?Material}\n\t */\n\tget material() {\n\n\t\treturn this._mesh.material;\n\n\t}\n\n\tset material( value ) {\n\n\t\tthis._mesh.material = value;\n\n\t}\n\n}\n\nexport { Pass, FullScreenQuad };\n","import {\n\tShaderMaterial,\n\tUniformsUtils\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\n\n/**\n * This pass can be used to create a post processing effect\n * with a raw GLSL shader object. Useful for implementing custom\n * effects.\n *\n * ```js\n * const fxaaPass = new ShaderPass( FXAAShader );\n * composer.addPass( fxaaPass );\n * ```\n *\n * @augments Pass\n * @three_import import { ShaderPass } from 'three/addons/postprocessing/ShaderPass.js';\n */\nclass ShaderPass extends Pass {\n\n\t/**\n\t * Constructs a new shader pass.\n\t *\n\t * @param {Object|ShaderMaterial} [shader] - A shader object holding vertex and fragment shader as well as\n\t * defines and uniforms. It's also valid to pass a custom shader material.\n\t * @param {string} [textureID='tDiffuse'] - The name of the texture uniform that should sample\n\t * the read buffer.\n\t */\n\tconstructor( shader, textureID = 'tDiffuse' ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The name of the texture uniform that should sample the read buffer.\n\t\t *\n\t\t * @type {string}\n\t\t * @default 'tDiffuse'\n\t\t */\n\t\tthis.textureID = textureID;\n\n\t\t/**\n\t\t * The pass uniforms.\n\t\t *\n\t\t * @type {?Object}\n\t\t */\n\t\tthis.uniforms = null;\n\n\t\t/**\n\t\t * The pass material.\n\t\t *\n\t\t * @type {?ShaderMaterial}\n\t\t */\n\t\tthis.material = null;\n\n\t\tif ( shader instanceof ShaderMaterial ) {\n\n\t\t\tthis.uniforms = shader.uniforms;\n\n\t\t\tthis.material = shader;\n\n\t\t} else if ( shader ) {\n\n\t\t\tthis.uniforms = UniformsUtils.clone( shader.uniforms );\n\n\t\t\tthis.material = new ShaderMaterial( {\n\n\t\t\t\tname: ( shader.name !== undefined ) ? shader.name : 'unspecified',\n\t\t\t\tdefines: Object.assign( {}, shader.defines ),\n\t\t\t\tuniforms: this.uniforms,\n\t\t\t\tvertexShader: shader.vertexShader,\n\t\t\t\tfragmentShader: shader.fragmentShader\n\n\t\t\t} );\n\n\t\t}\n\n\t\t// internals\n\n\t\tthis._fsQuad = new FullScreenQuad( this.material );\n\n\t}\n\n\t/**\n\t * Performs the shader pass.\n\t *\n\t * @param {WebGLRenderer} renderer - The renderer.\n\t * @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering\n\t * destination for the pass.\n\t * @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the\n\t * previous pass from this buffer.\n\t * @param {number} deltaTime - The delta time in seconds.\n\t * @param {boolean} maskActive - Whether masking is active or not.\n\t */\n\trender( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n\t\tif ( this.uniforms[ this.textureID ] ) {\n\n\t\t\tthis.uniforms[ this.textureID ].value = readBuffer.texture;\n\n\t\t}\n\n\t\tthis._fsQuad.material = this.material;\n\n\t\tif ( this.renderToScreen ) {\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\tthis._fsQuad.render( renderer );\n\n\t\t} else {\n\n\t\t\trenderer.setRenderTarget( writeBuffer );\n\t\t\t// TODO: Avoid using autoClear properties, see https://github.com/mrdoob/three.js/pull/15571#issuecomment-465669600\n\t\t\tif ( this.clear ) renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\t\t\tthis._fsQuad.render( renderer );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Frees the GPU-related resources allocated by this instance. Call this\n\t * method whenever the pass is no longer used in your app.\n\t */\n\tdispose() {\n\n\t\tthis.material.dispose();\n\n\t\tthis._fsQuad.dispose();\n\n\t}\n\n}\n\nexport { ShaderPass };\n","import { Pass } from './Pass.js';\n\n/**\n * This pass can be used to define a mask during post processing.\n * Meaning only areas of subsequent post processing are affected\n * which lie in the masking area of this pass. Internally, the masking\n * is implemented with the stencil buffer.\n *\n * ```js\n * const maskPass = new MaskPass( scene, camera );\n * composer.addPass( maskPass );\n * ```\n *\n * @augments Pass\n * @three_import import { MaskPass } from 'three/addons/postprocessing/MaskPass.js';\n */\nclass MaskPass extends Pass {\n\n\t/**\n\t * Constructs a new mask pass.\n\t *\n\t * @param {Scene} scene - The 3D objects in this scene will define the mask.\n\t * @param {Camera} camera - The camera.\n\t */\n\tconstructor( scene, camera ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The scene that defines the mask.\n\t\t *\n\t\t * @type {Scene}\n\t\t */\n\t\tthis.scene = scene;\n\n\t\t/**\n\t\t * The camera.\n\t\t *\n\t\t * @type {Camera}\n\t\t */\n\t\tthis.camera = camera;\n\n\t\t/**\n\t\t * Overwritten to perform a clear operation by default.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.clear = true;\n\n\t\t/**\n\t\t * Overwritten to disable the swap.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.needsSwap = false;\n\n\t\t/**\n\t\t * Whether to inverse the mask or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.inverse = false;\n\n\t}\n\n\t/**\n\t * Performs a mask pass with the configured scene and camera.\n\t *\n\t * @param {WebGLRenderer} renderer - The renderer.\n\t * @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering\n\t * destination for the pass.\n\t * @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the\n\t * previous pass from this buffer.\n\t * @param {number} deltaTime - The delta time in seconds.\n\t * @param {boolean} maskActive - Whether masking is active or not.\n\t */\n\trender( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n\t\tconst context = renderer.getContext();\n\t\tconst state = renderer.state;\n\n\t\t// don't update color or depth\n\n\t\tstate.buffers.color.setMask( false );\n\t\tstate.buffers.depth.setMask( false );\n\n\t\t// lock buffers\n\n\t\tstate.buffers.color.setLocked( true );\n\t\tstate.buffers.depth.setLocked( true );\n\n\t\t// set up stencil\n\n\t\tlet writeValue, clearValue;\n\n\t\tif ( this.inverse ) {\n\n\t\t\twriteValue = 0;\n\t\t\tclearValue = 1;\n\n\t\t} else {\n\n\t\t\twriteValue = 1;\n\t\t\tclearValue = 0;\n\n\t\t}\n\n\t\tstate.buffers.stencil.setTest( true );\n\t\tstate.buffers.stencil.setOp( context.REPLACE, context.REPLACE, context.REPLACE );\n\t\tstate.buffers.stencil.setFunc( context.ALWAYS, writeValue, 0xffffffff );\n\t\tstate.buffers.stencil.setClear( clearValue );\n\t\tstate.buffers.stencil.setLocked( true );\n\n\t\t// draw into the stencil buffer\n\n\t\trenderer.setRenderTarget( readBuffer );\n\t\tif ( this.clear ) renderer.clear();\n\t\trenderer.render( this.scene, this.camera );\n\n\t\trenderer.setRenderTarget( writeBuffer );\n\t\tif ( this.clear ) renderer.clear();\n\t\trenderer.render( this.scene, this.camera );\n\n\t\t// unlock color and depth buffer and make them writable for subsequent rendering/clearing\n\n\t\tstate.buffers.color.setLocked( false );\n\t\tstate.buffers.depth.setLocked( false );\n\n\t\tstate.buffers.color.setMask( true );\n\t\tstate.buffers.depth.setMask( true );\n\n\t\t// only render where stencil is set to 1\n\n\t\tstate.buffers.stencil.setLocked( false );\n\t\tstate.buffers.stencil.setFunc( context.EQUAL, 1, 0xffffffff ); // draw if == 1\n\t\tstate.buffers.stencil.setOp( context.KEEP, context.KEEP, context.KEEP );\n\t\tstate.buffers.stencil.setLocked( true );\n\n\t}\n\n}\n\n/**\n * This pass can be used to clear a mask previously defined with {@link MaskPass}.\n *\n * ```js\n * const clearPass = new ClearMaskPass();\n * composer.addPass( clearPass );\n * ```\n *\n * @augments Pass\n */\nclass ClearMaskPass extends Pass {\n\n\t/**\n\t * Constructs a new clear mask pass.\n\t */\n\tconstructor() {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * Overwritten to disable the swap.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.needsSwap = false;\n\n\t}\n\n\t/**\n\t * Performs the clear of the currently defined mask.\n\t *\n\t * @param {WebGLRenderer} renderer - The renderer.\n\t * @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering\n\t * destination for the pass.\n\t * @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the\n\t * previous pass from this buffer.\n\t * @param {number} deltaTime - The delta time in seconds.\n\t * @param {boolean} maskActive - Whether masking is active or not.\n\t */\n\trender( renderer /*, writeBuffer, readBuffer, deltaTime, maskActive */ ) {\n\n\t\trenderer.state.buffers.stencil.setLocked( false );\n\t\trenderer.state.buffers.stencil.setTest( false );\n\n\t}\n\n}\n\nexport { MaskPass, ClearMaskPass };\n","import {\n\tClock,\n\tHalfFloatType,\n\tNoBlending,\n\tVector2,\n\tWebGLRenderTarget\n} from 'three';\nimport { CopyShader } from '../shaders/CopyShader.js';\nimport { ShaderPass } from './ShaderPass.js';\nimport { ClearMaskPass, MaskPass } from './MaskPass.js';\n\n/**\n * Used to implement post-processing effects in three.js.\n * The class manages a chain of post-processing passes to produce the final visual result.\n * Post-processing passes are executed in order of their addition/insertion.\n * The last pass is automatically rendered to screen.\n *\n * This module can only be used with {@link WebGLRenderer}.\n *\n * ```js\n * const composer = new EffectComposer( renderer );\n *\n * // adding some passes\n * const renderPass = new RenderPass( scene, camera );\n * composer.addPass( renderPass );\n *\n * const glitchPass = new GlitchPass();\n * composer.addPass( glitchPass );\n *\n * const outputPass = new OutputPass()\n * composer.addPass( outputPass );\n *\n * function animate() {\n *\n * \tcomposer.render(); // instead of renderer.render()\n *\n * }\n * ```\n *\n * @three_import import { EffectComposer } from 'three/addons/postprocessing/EffectComposer.js';\n */\nclass EffectComposer {\n\n\t/**\n\t * Constructs a new effect composer.\n\t *\n\t * @param {WebGLRenderer} renderer - The renderer.\n\t * @param {WebGLRenderTarget} [renderTarget] - This render target and a clone will\n\t * be used as the internal read and write buffers. If not given, the composer creates\n\t * the buffers automatically.\n\t */\n\tconstructor( renderer, renderTarget ) {\n\n\t\t/**\n\t\t * The renderer.\n\t\t *\n\t\t * @type {WebGLRenderer}\n\t\t */\n\t\tthis.renderer = renderer;\n\n\t\tthis._pixelRatio = renderer.getPixelRatio();\n\n\t\tif ( renderTarget === undefined ) {\n\n\t\t\tconst size = renderer.getSize( new Vector2() );\n\t\t\tthis._width = size.width;\n\t\t\tthis._height = size.height;\n\n\t\t\trenderTarget = new WebGLRenderTarget( this._width * this._pixelRatio, this._height * this._pixelRatio, { type: HalfFloatType } );\n\t\t\trenderTarget.texture.name = 'EffectComposer.rt1';\n\n\t\t} else {\n\n\t\t\tthis._width = renderTarget.width;\n\t\t\tthis._height = renderTarget.height;\n\n\t\t}\n\n\t\tthis.renderTarget1 = renderTarget;\n\t\tthis.renderTarget2 = renderTarget.clone();\n\t\tthis.renderTarget2.texture.name = 'EffectComposer.rt2';\n\n\t\t/**\n\t\t * A reference to the internal write buffer. Passes usually write\n\t\t * their result into this buffer.\n\t\t *\n\t\t * @type {WebGLRenderTarget}\n\t\t */\n\t\tthis.writeBuffer = this.renderTarget1;\n\n\t\t/**\n\t\t * A reference to the internal read buffer. Passes usually read\n\t\t * the previous render result from this buffer.\n\t\t *\n\t\t * @type {WebGLRenderTarget}\n\t\t */\n\t\tthis.readBuffer = this.renderTarget2;\n\n\t\t/**\n\t\t * Whether the final pass is rendered to the screen (default framebuffer) or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.renderToScreen = true;\n\n\t\t/**\n\t\t * An array representing the (ordered) chain of post-processing passes.\n\t\t *\n\t\t * @type {Array<Pass>}\n\t\t */\n\t\tthis.passes = [];\n\n\t\t/**\n\t\t * A copy pass used for internal swap operations.\n\t\t *\n\t\t * @private\n\t\t * @type {ShaderPass}\n\t\t */\n\t\tthis.copyPass = new ShaderPass( CopyShader );\n\t\tthis.copyPass.material.blending = NoBlending;\n\n\t\t/**\n\t\t * The internal clock for managing time data.\n\t\t *\n\t\t * @private\n\t\t * @type {Clock}\n\t\t */\n\t\tthis.clock = new Clock();\n\n\t}\n\n\t/**\n\t * Swaps the internal read/write buffers.\n\t */\n\tswapBuffers() {\n\n\t\tconst tmp = this.readBuffer;\n\t\tthis.readBuffer = this.writeBuffer;\n\t\tthis.writeBuffer = tmp;\n\n\t}\n\n\t/**\n\t * Adds the given pass to the pass chain.\n\t *\n\t * @param {Pass} pass - The pass to add.\n\t */\n\taddPass( pass ) {\n\n\t\tthis.passes.push( pass );\n\t\tpass.setSize( this._width * this._pixelRatio, this._height * this._pixelRatio );\n\n\t}\n\n\t/**\n\t * Inserts the given pass at a given index.\n\t *\n\t * @param {Pass} pass - The pass to insert.\n\t * @param {number} index - The index into the pass chain.\n\t */\n\tinsertPass( pass, index ) {\n\n\t\tthis.passes.splice( index, 0, pass );\n\t\tpass.setSize( this._width * this._pixelRatio, this._height * this._pixelRatio );\n\n\t}\n\n\t/**\n\t * Removes the given pass from the pass chain.\n\t *\n\t * @param {Pass} pass - The pass to remove.\n\t */\n\tremovePass( pass ) {\n\n\t\tconst index = this.passes.indexOf( pass );\n\n\t\tif ( index !== - 1 ) {\n\n\t\t\tthis.passes.splice( index, 1 );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns `true` if the pass for the given index is the last enabled pass in the pass chain.\n\t *\n\t * @param {number} passIndex - The pass index.\n\t * @return {boolean} Whether the pass for the given index is the last pass in the pass chain.\n\t */\n\tisLastEnabledPass( passIndex ) {\n\n\t\tfor ( let i = passIndex + 1; i < this.passes.length; i ++ ) {\n\n\t\t\tif ( this.passes[ i ].enabled ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\t/**\n\t * Executes all enabled post-processing passes in order to produce the final frame.\n\t *\n\t * @param {number} deltaTime - The delta time in seconds. If not given, the composer computes\n\t * its own time delta value.\n\t */\n\trender( deltaTime ) {\n\n\t\t// deltaTime value is in seconds\n\n\t\tif ( deltaTime === undefined ) {\n\n\t\t\tdeltaTime = this.clock.getDelta();\n\n\t\t}\n\n\t\tconst currentRenderTarget = this.renderer.getRenderTarget();\n\n\t\tlet maskActive = false;\n\n\t\tfor ( let i = 0, il = this.passes.length; i < il; i ++ ) {\n\n\t\t\tconst pass = this.passes[ i ];\n\n\t\t\tif ( pass.enabled === false ) continue;\n\n\t\t\tpass.renderToScreen = ( this.renderToScreen && this.isLastEnabledPass( i ) );\n\t\t\tpass.render( this.renderer, this.writeBuffer, this.readBuffer, deltaTime, maskActive );\n\n\t\t\tif ( pass.needsSwap ) {\n\n\t\t\t\tif ( maskActive ) {\n\n\t\t\t\t\tconst context = this.renderer.getContext();\n\t\t\t\t\tconst stencil = this.renderer.state.buffers.stencil;\n\n\t\t\t\t\t//context.stencilFunc( context.NOTEQUAL, 1, 0xffffffff );\n\t\t\t\t\tstencil.setFunc( context.NOTEQUAL, 1, 0xffffffff );\n\n\t\t\t\t\tthis.copyPass.render( this.renderer, this.writeBuffer, this.readBuffer, deltaTime );\n\n\t\t\t\t\t//context.stencilFunc( context.EQUAL, 1, 0xffffffff );\n\t\t\t\t\tstencil.setFunc( context.EQUAL, 1, 0xffffffff );\n\n\t\t\t\t}\n\n\t\t\t\tthis.swapBuffers();\n\n\t\t\t}\n\n\t\t\tif ( MaskPass !== undefined ) {\n\n\t\t\t\tif ( pass instanceof MaskPass ) {\n\n\t\t\t\t\tmaskActive = true;\n\n\t\t\t\t} else if ( pass instanceof ClearMaskPass ) {\n\n\t\t\t\t\tmaskActive = false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.renderer.setRenderTarget( currentRenderTarget );\n\n\t}\n\n\t/**\n\t * Resets the internal state of the EffectComposer.\n\t *\n\t * @param {WebGLRenderTarget} [renderTarget] - This render target has the same purpose like\n\t * the one from the constructor. If set, it is used to setup the read and write buffers.\n\t */\n\treset( renderTarget ) {\n\n\t\tif ( renderTarget === undefined ) {\n\n\t\t\tconst size = this.renderer.getSize( new Vector2() );\n\t\t\tthis._pixelRatio = this.renderer.getPixelRatio();\n\t\t\tthis._width = size.width;\n\t\t\tthis._height = size.height;\n\n\t\t\trenderTarget = this.renderTarget1.clone();\n\t\t\trenderTarget.setSize( this._width * this._pixelRatio, this._height * this._pixelRatio );\n\n\t\t}\n\n\t\tthis.renderTarget1.dispose();\n\t\tthis.renderTarget2.dispose();\n\t\tthis.renderTarget1 = renderTarget;\n\t\tthis.renderTarget2 = renderTarget.clone();\n\n\t\tthis.writeBuffer = this.renderTarget1;\n\t\tthis.readBuffer = this.renderTarget2;\n\n\t}\n\n\t/**\n\t * Resizes the internal read and write buffers as well as all passes. Similar to {@link WebGLRenderer#setSize},\n\t * this method honors the current pixel ration.\n\t *\n\t * @param {number} width - The width in logical pixels.\n\t * @param {number} height - The height in logical pixels.\n\t */\n\tsetSize( width, height ) {\n\n\t\tthis._width = width;\n\t\tthis._height = height;\n\n\t\tconst effectiveWidth = this._width * this._pixelRatio;\n\t\tconst effectiveHeight = this._height * this._pixelRatio;\n\n\t\tthis.renderTarget1.setSize( effectiveWidth, effectiveHeight );\n\t\tthis.renderTarget2.setSize( effectiveWidth, effectiveHeight );\n\n\t\tfor ( let i = 0; i < this.passes.length; i ++ ) {\n\n\t\t\tthis.passes[ i ].setSize( effectiveWidth, effectiveHeight );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Sets device pixel ratio. This is usually used for HiDPI device to prevent blurring output.\n\t * Setting the pixel ratio will automatically resize the composer.\n\t *\n\t * @param {number} pixelRatio - The pixel ratio to set.\n\t */\n\tsetPixelRatio( pixelRatio ) {\n\n\t\tthis._pixelRatio = pixelRatio;\n\n\t\tthis.setSize( this._width, this._height );\n\n\t}\n\n\t/**\n\t * Frees the GPU-related resources allocated by this instance. Call this\n\t * method whenever the composer is no longer used in your app.\n\t */\n\tdispose() {\n\n\t\tthis.renderTarget1.dispose();\n\t\tthis.renderTarget2.dispose();\n\n\t\tthis.copyPass.dispose();\n\n\t}\n\n}\n\nexport { EffectComposer };\n","import {\n\tColor\n} from 'three';\nimport { Pass } from './Pass.js';\n\n/**\n * This class represents a render pass. It takes a camera and a scene and produces\n * a beauty pass for subsequent post processing effects.\n *\n * ```js\n * const renderPass = new RenderPass( scene, camera );\n * composer.addPass( renderPass );\n * ```\n *\n * @augments Pass\n * @three_import import { RenderPass } from 'three/addons/postprocessing/RenderPass.js';\n */\nclass RenderPass extends Pass {\n\n\t/**\n\t * Constructs a new render pass.\n\t *\n\t * @param {Scene} scene - The scene to render.\n\t * @param {Camera} camera - The camera.\n\t * @param {?Material} [overrideMaterial=null] - The override material. If set, this material is used\n\t * for all objects in the scene.\n\t * @param {?(number|Color|string)} [clearColor=null] - The clear color of the render pass.\n\t * @param {?number} [clearAlpha=null] - The clear alpha of the render pass.\n\t */\n\tconstructor( scene, camera, overrideMaterial = null, clearColor = null, clearAlpha = null ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The scene to render.\n\t\t *\n\t\t * @type {Scene}\n\t\t */\n\t\tthis.scene = scene;\n\n\t\t/**\n\t\t * The camera.\n\t\t *\n\t\t * @type {Camera}\n\t\t */\n\t\tthis.camera = camera;\n\n\t\t/**\n\t\t * The override material. If set, this material is used\n\t\t * for all objects in the scene.\n\t\t *\n\t\t * @type {?Material}\n\t\t * @default null\n\t\t */\n\t\tthis.overrideMaterial = overrideMaterial;\n\n\t\t/**\n\t\t * The clear color of the render pass.\n\t\t *\n\t\t * @type {?(number|Color|string)}\n\t\t * @default null\n\t\t */\n\t\tthis.clearColor = clearColor;\n\n\t\t/**\n\t\t * The clear alpha of the render pass.\n\t\t *\n\t\t * @type {?number}\n\t\t * @default null\n\t\t */\n\t\tthis.clearAlpha = clearAlpha;\n\n\t\t/**\n\t\t * Overwritten to perform a clear operation by default.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.clear = true;\n\n\t\t/**\n\t\t * If set to `true`, only the depth can be cleared when `clear` is to `false`.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.clearDepth = false;\n\n\t\t/**\n\t\t * Overwritten to disable the swap.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.needsSwap = false;\n\t\tthis._oldClearColor = new Color();\n\n\t}\n\n\t/**\n\t * Performs a beauty pass with the configured scene and camera.\n\t *\n\t * @param {WebGLRenderer} renderer - The renderer.\n\t * @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering\n\t * destination for the pass.\n\t * @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the\n\t * previous pass from this buffer.\n\t * @param {number} deltaTime - The delta time in seconds.\n\t * @param {boolean} maskActive - Whether masking is active or not.\n\t */\n\trender( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n\t\tconst oldAutoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\tlet oldClearAlpha, oldOverrideMaterial;\n\n\t\tif ( this.overrideMaterial !== null ) {\n\n\t\t\toldOverrideMaterial = this.scene.overrideMaterial;\n\n\t\t\tthis.scene.overrideMaterial = this.overrideMaterial;\n\n\t\t}\n\n\t\tif ( this.clearColor !== null ) {\n\n\t\t\trenderer.getClearColor( this._oldClearColor );\n\t\t\trenderer.setClearColor( this.clearColor, renderer.getClearAlpha() );\n\n\t\t}\n\n\t\tif ( this.clearAlpha !== null ) {\n\n\t\t\toldClearAlpha = renderer.getClearAlpha();\n\t\t\trenderer.setClearAlpha( this.clearAlpha );\n\n\t\t}\n\n\t\tif ( this.clearDepth == true ) {\n\n\t\t\trenderer.clearDepth();\n\n\t\t}\n\n\t\trenderer.setRenderTarget( this.renderToScreen ? null : readBuffer );\n\n\t\tif ( this.clear === true ) {\n\n\t\t\t// TODO: Avoid using autoClear properties, see https://github.com/mrdoob/three.js/pull/15571#issuecomment-465669600\n\t\t\trenderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\n\t\t}\n\n\t\trenderer.render( this.scene, this.camera );\n\n\t\t// restore\n\n\t\tif ( this.clearColor !== null ) {\n\n\t\t\trenderer.setClearColor( this._oldClearColor );\n\n\t\t}\n\n\t\tif ( this.clearAlpha !== null ) {\n\n\t\t\trenderer.setClearAlpha( oldClearAlpha );\n\n\t\t}\n\n\t\tif ( this.overrideMaterial !== null ) {\n\n\t\t\tthis.scene.overrideMaterial = oldOverrideMaterial;\n\n\t\t}\n\n\t\trenderer.autoClear = oldAutoClear;\n\n\t}\n\n}\n\nexport { RenderPass };\n","import {\n\tDataTexture,\n\tMatrix4,\n\tRepeatWrapping,\n\tVector2,\n\tVector3,\n} from 'three';\n\n/**\n * @module GTAOShader\n * @three_import import { GTAOShader } from 'three/addons/shaders/GTAOShader.js';\n */\n\n/**\n * GTAO shader. Use by {@link GTAOPass}.\n *\n * References:\n * - [Practical Realtime Strategies for Accurate Indirect Occlusion](https://iryoku.com/downloads/Practical-Realtime-Strategies-for-Accurate-Indirect-Occlusion.pdf).\n * - [Horizon-Based Indirect Lighting (HBIL)](https://github.com/Patapom/GodComplex/blob/master/Tests/TestHBIL/2018%20Mayaux%20-%20Horizon-Based%20Indirect%20Lighting%20(HBIL).pdf)\n *\n * @constant\n * @type {ShaderMaterial~Shader}\n */\nconst GTAOShader = {\n\n\tname: 'GTAOShader',\n\n\tdefines: {\n\t\tPERSPECTIVE_CAMERA: 1,\n\t\tSAMPLES: 16,\n\t\tNORMAL_VECTOR_TYPE: 1,\n\t\tDEPTH_SWIZZLING: 'x',\n\t\tSCREEN_SPACE_RADIUS: 0,\n\t\tSCREEN_SPACE_RADIUS_SCALE: 100.0,\n\t\tSCENE_CLIP_BOX: 0,\n\t},\n\n\tuniforms: {\n\t\ttNormal: { value: null },\n\t\ttDepth: { value: null },\n\t\ttNoise: { value: null },\n\t\tresolution: { value: new Vector2() },\n\t\tcameraNear: { value: null },\n\t\tcameraFar: { value: null },\n\t\tcameraProjectionMatrix: { value: new Matrix4() },\n\t\tcameraProjectionMatrixInverse: { value: new Matrix4() },\n\t\tcameraWorldMatrix: { value: new Matrix4() },\n\t\tradius: { value: 0.25 },\n\t\tdistanceExponent: { value: 1. },\n\t\tthickness: { value: 1. },\n\t\tdistanceFallOff: { value: 1. },\n\t\tscale: { value: 1. },\n\t\tsceneBoxMin: { value: new Vector3( - 1, - 1, - 1 ) },\n\t\tsceneBoxMax: { value: new Vector3( 1, 1, 1 ) },\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\t\tvarying vec2 vUv;\n\t\tuniform highp sampler2D tNormal;\n\t\tuniform highp sampler2D tDepth;\n\t\tuniform sampler2D tNoise;\n\t\tuniform vec2 resolution;\n\t\tuniform float cameraNear;\n\t\tuniform float cameraFar;\n\t\tuniform mat4 cameraProjectionMatrix;\n\t\tuniform mat4 cameraProjectionMatrixInverse;\n\t\tuniform mat4 cameraWorldMatrix;\n\t\tuniform float radius;\n\t\tuniform float distanceExponent;\n\t\tuniform float thickness;\n\t\tuniform float distanceFallOff;\n\t\tuniform float scale;\n\t\t#if SCENE_CLIP_BOX == 1\n\t\t\tuniform vec3 sceneBoxMin;\n\t\t\tuniform vec3 sceneBoxMax;\n\t\t#endif\n\n\t\t#include <common>\n\t\t#include <packing>\n\n\t\t#ifndef FRAGMENT_OUTPUT\n\t\t#define FRAGMENT_OUTPUT vec4(vec3(ao), 1.)\n\t\t#endif\n\n\t\tvec3 getViewPosition(const in vec2 screenPosition, const in float depth) {\n\t\t\tvec4 clipSpacePosition = vec4(vec3(screenPosition, depth) * 2.0 - 1.0, 1.0);\n\t\t\tvec4 viewSpacePosition = cameraProjectionMatrixInverse * clipSpacePosition;\n\t\t\treturn viewSpacePosition.xyz / viewSpacePosition.w;\n\t\t}\n\n\t\tfloat getDepth(const vec2 uv) {\n\t\t\treturn textureLod(tDepth, uv.xy, 0.0).DEPTH_SWIZZLING;\n\t\t}\n\n\t\tfloat fetchDepth(const ivec2 uv) {\n\t\t\treturn texelFetch(tDepth, uv.xy, 0).DEPTH_SWIZZLING;\n\t\t}\n\n\t\tfloat getViewZ(const in float depth) {\n\t\t\t#if PERSPECTIVE_CAMERA == 1\n\t\t\t\treturn perspectiveDepthToViewZ(depth, cameraNear, cameraFar);\n\t\t\t#else\n\t\t\t\treturn orthographicDepthToViewZ(depth, cameraNear, cameraFar);\n\t\t\t#endif\n\t\t}\n\n\t\tvec3 computeNormalFromDepth(const vec2 uv) {\n\t\t\tvec2 size = vec2(textureSize(tDepth, 0));\n\t\t\tivec2 p = ivec2(uv * size);\n\t\t\tfloat c0 = fetchDepth(p);\n\t\t\tfloat l2 = fetchDepth(p - ivec2(2, 0));\n\t\t\tfloat l1 = fetchDepth(p - ivec2(1, 0));\n\t\t\tfloat r1 = fetchDepth(p + ivec2(1, 0));\n\t\t\tfloat r2 = fetchDepth(p + ivec2(2, 0));\n\t\t\tfloat b2 = fetchDepth(p - ivec2(0, 2));\n\t\t\tfloat b1 = fetchDepth(p - ivec2(0, 1));\n\t\t\tfloat t1 = fetchDepth(p + ivec2(0, 1));\n\t\t\tfloat t2 = fetchDepth(p + ivec2(0, 2));\n\t\t\tfloat dl = abs((2.0 * l1 - l2) - c0);\n\t\t\tfloat dr = abs((2.0 * r1 - r2) - c0);\n\t\t\tfloat db = abs((2.0 * b1 - b2) - c0);\n\t\t\tfloat dt = abs((2.0 * t1 - t2) - c0);\n\t\t\tvec3 ce = getViewPosition(uv, c0).xyz;\n\t\t\tvec3 dpdx = (dl < dr) ? ce - getViewPosition((uv - vec2(1.0 / size.x, 0.0)), l1).xyz : -ce + getViewPosition((uv + vec2(1.0 / size.x, 0.0)), r1).xyz;\n\t\t\tvec3 dpdy = (db < dt) ? ce - getViewPosition((uv - vec2(0.0, 1.0 / size.y)), b1).xyz : -ce + getViewPosition((uv + vec2(0.0, 1.0 / size.y)), t1).xyz;\n\t\t\treturn normalize(cross(dpdx, dpdy));\n\t\t}\n\n\t\tvec3 getViewNormal(const vec2 uv) {\n\t\t\t#if NORMAL_VECTOR_TYPE == 2\n\t\t\t\treturn normalize(textureLod(tNormal, uv, 0.).rgb);\n\t\t\t#elif NORMAL_VECTOR_TYPE == 1\n\t\t\t\treturn unpackRGBToNormal(textureLod(tNormal, uv, 0.).rgb);\n\t\t\t#else\n\t\t\t\treturn computeNormalFromDepth(uv);\n\t\t\t#endif\n\t\t}\n\n\t\tvec3 getSceneUvAndDepth(vec3 sampleViewPos) {\n\t\t\tvec4 sampleClipPos = cameraProjectionMatrix * vec4(sampleViewPos, 1.);\n\t\t\tvec2 sampleUv = sampleClipPos.xy / sampleClipPos.w * 0.5 + 0.5;\n\t\t\tfloat sampleSceneDepth = getDepth(sampleUv);\n\t\t\treturn vec3(sampleUv, sampleSceneDepth);\n\t\t}\n\n\t\tvoid main() {\n\t\t\tfloat depth = getDepth(vUv.xy);\n\t\t\tif (depth >= 1.0) {\n\t\t\t\tdiscard;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvec3 viewPos = getViewPosition(vUv, depth);\n\t\t\tvec3 viewNormal = getViewNormal(vUv);\n\n\t\t\tfloat radiusToUse = radius;\n\t\t\tfloat distanceFalloffToUse = thickness;\n\t\t\t#if SCREEN_SPACE_RADIUS == 1\n\t\t\t\tfloat radiusScale = getViewPosition(vec2(0.5 + float(SCREEN_SPACE_RADIUS_SCALE) / resolution.x, 0.0), depth).x;\n\t\t\t\tradiusToUse *= radiusScale;\n\t\t\t\tdistanceFalloffToUse *= radiusScale;\n\t\t\t#endif\n\n\t\t\t#if SCENE_CLIP_BOX == 1\n\t\t\t\tvec3 worldPos = (cameraWorldMatrix * vec4(viewPos, 1.0)).xyz;\n\t\t\t\tfloat boxDistance = length(max(vec3(0.0), max(sceneBoxMin - worldPos, worldPos - sceneBoxMax)));\n\t\t\t\tif (boxDistance > radiusToUse) {\n\t\t\t\t\tdiscard;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t#endif\n\n\t\t\tvec2 noiseResolution = vec2(textureSize(tNoise, 0));\n\t\t\tvec2 noiseUv = vUv * resolution / noiseResolution;\n\t\t\tvec4 noiseTexel = textureLod(tNoise, noiseUv, 0.0);\n\t\t\tvec3 randomVec = noiseTexel.xyz * 2.0 - 1.0;\n\t\t\tvec3 tangent = normalize(vec3(randomVec.xy, 0.));\n\t\t\tvec3 bitangent = vec3(-tangent.y, tangent.x, 0.);\n\t\t\tmat3 kernelMatrix = mat3(tangent, bitangent, vec3(0., 0., 1.));\n\n\t\t\tconst int DIRECTIONS = SAMPLES < 30 ? 3 : 5;\n\t\t\tconst int STEPS = (SAMPLES + DIRECTIONS - 1) / DIRECTIONS;\n\t\t\tfloat ao = 0.0;\n\t\t\tfor (int i = 0; i < DIRECTIONS; ++i) {\n\n\t\t\t\tfloat angle = float(i) / float(DIRECTIONS) * PI;\n\t\t\t\tvec4 sampleDir = vec4(cos(angle), sin(angle), 0., 0.5 + 0.5 * noiseTexel.w);\n\t\t\t\tsampleDir.xyz = normalize(kernelMatrix * sampleDir.xyz);\n\n\t\t\t\tvec3 viewDir = normalize(-viewPos.xyz);\n\t\t\t\tvec3 sliceBitangent = normalize(cross(sampleDir.xyz, viewDir));\n\t\t\t\tvec3 sliceTangent = cross(sliceBitangent, viewDir);\n\t\t\t\tvec3 normalInSlice = normalize(viewNormal - sliceBitangent * dot(viewNormal, sliceBitangent));\n\n\t\t\t\tvec3 tangentToNormalInSlice = cross(normalInSlice, sliceBitangent);\n\t\t\t\tvec2 cosHorizons = vec2(dot(viewDir, tangentToNormalInSlice), dot(viewDir, -tangentToNormalInSlice));\n\n\t\t\t\tfor (int j = 0; j < STEPS; ++j) {\n\t\t\t\t\tvec3 sampleViewOffset = sampleDir.xyz * radiusToUse * sampleDir.w * pow(float(j + 1) / float(STEPS), distanceExponent);\n\n\t\t\t\t\tvec3 sampleSceneUvDepth = getSceneUvAndDepth(viewPos + sampleViewOffset);\n\t\t\t\t\tvec3 sampleSceneViewPos = getViewPosition(sampleSceneUvDepth.xy, sampleSceneUvDepth.z);\n\t\t\t\t\tvec3 viewDelta = sampleSceneViewPos - viewPos;\n\t\t\t\t\tif (abs(viewDelta.z) < thickness) {\n\t\t\t\t\t\tfloat sampleCosHorizon = dot(viewDir, normalize(viewDelta));\n\t\t\t\t\t\tcosHorizons.x += max(0., (sampleCosHorizon - cosHorizons.x) * mix(1., 2. / float(j + 2), distanceFallOff));\n\t\t\t\t\t}\n\n\t\t\t\t\tsampleSceneUvDepth = getSceneUvAndDepth(viewPos - sampleViewOffset);\n\t\t\t\t\tsampleSceneViewPos = getViewPosition(sampleSceneUvDepth.xy, sampleSceneUvDepth.z);\n\t\t\t\t\tviewDelta = sampleSceneViewPos - viewPos;\n\t\t\t\t\tif (abs(viewDelta.z) < thickness) {\n\t\t\t\t\t\tfloat sampleCosHorizon = dot(viewDir, normalize(viewDelta));\n\t\t\t\t\t\tcosHorizons.y += max(0., (sampleCosHorizon - cosHorizons.y) * mix(1., 2. / float(j + 2), distanceFallOff));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvec2 sinHorizons = sqrt(1. - cosHorizons * cosHorizons);\n\t\t\t\tfloat nx = dot(normalInSlice, sliceTangent);\n\t\t\t\tfloat ny = dot(normalInSlice, viewDir);\n\t\t\t\tfloat nxb = 1. / 2. * (acos(cosHorizons.y) - acos(cosHorizons.x) + sinHorizons.x * cosHorizons.x - sinHorizons.y * cosHorizons.y);\n\t\t\t\tfloat nyb = 1. / 2. * (2. - cosHorizons.x * cosHorizons.x - cosHorizons.y * cosHorizons.y);\n\t\t\t\tfloat occlusion = nx * nxb + ny * nyb;\n\t\t\t\tao += occlusion;\n\t\t\t}\n\n\t\t\tao = clamp(ao / float(DIRECTIONS), 0., 1.);\n\t\t#if SCENE_CLIP_BOX == 1\n\t\t\tao = mix(ao, 1., smoothstep(0., radiusToUse, boxDistance));\n\t\t#endif\n\t\t\tao = pow(ao, scale);\n\n\t\t\tgl_FragColor = FRAGMENT_OUTPUT;\n\t\t}`\n\n};\n\n/**\n * GTAO depth shader. Use by {@link GTAOPass}.\n *\n * @constant\n * @type {Object}\n */\nconst GTAODepthShader = {\n\n\tname: 'GTAODepthShader',\n\n\tdefines: {\n\t\tPERSPECTIVE_CAMERA: 1\n\t},\n\n\tuniforms: {\n\t\ttDepth: { value: null },\n\t\tcameraNear: { value: null },\n\t\tcameraFar: { value: null },\n\t},\n\n\tvertexShader: /* glsl */`\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\t\tuniform sampler2D tDepth;\n\t\tuniform float cameraNear;\n\t\tuniform float cameraFar;\n\t\tvarying vec2 vUv;\n\n\t\t#include <packing>\n\n\t\tfloat getLinearDepth( const in vec2 screenPosition ) {\n\t\t\t#if PERSPECTIVE_CAMERA == 1\n\t\t\t\tfloat fragCoordZ = texture2D( tDepth, screenPosition ).x;\n\t\t\t\tfloat viewZ = perspectiveDepthToViewZ( fragCoordZ, cameraNear, cameraFar );\n\t\t\t\treturn viewZToOrthographicDepth( viewZ, cameraNear, cameraFar );\n\t\t\t#else\n\t\t\t\treturn texture2D( tDepth, screenPosition ).x;\n\t\t\t#endif\n\t\t}\n\n\t\tvoid main() {\n\t\t\tfloat depth = getLinearDepth( vUv );\n\t\t\tgl_FragColor = vec4( vec3( 1.0 - depth ), 1.0 );\n\n\t\t}`\n\n};\n\n/**\n * GTAO blend shader. Use by {@link GTAOPass}.\n *\n * @constant\n * @type {Object}\n */\nconst GTAOBlendShader = {\n\n\tname: 'GTAOBlendShader',\n\n\tuniforms: {\n\t\ttDiffuse: { value: null },\n\t\tintensity: { value: 1.0 }\n\t},\n\n\tvertexShader: /* glsl */`\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\t\tuniform float intensity;\n\t\tuniform sampler2D tDiffuse;\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\t\t\tvec4 texel = texture2D( tDiffuse, vUv );\n\t\t\tgl_FragColor = vec4(mix(vec3(1.), texel.rgb, intensity), texel.a);\n\t\t}`\n\n};\n\n\nfunction generateMagicSquareNoise( size = 5 ) {\n\n\tconst noiseSize = Math.floor( size ) % 2 === 0 ? Math.floor( size ) + 1 : Math.floor( size );\n\tconst magicSquare = generateMagicSquare( noiseSize );\n\tconst noiseSquareSize = magicSquare.length;\n\tconst data = new Uint8Array( noiseSquareSize * 4 );\n\n\tfor ( let inx = 0; inx < noiseSquareSize; ++ inx ) {\n\n\t\tconst iAng = magicSquare[ inx ];\n\t\tconst angle = ( 2 * Math.PI * iAng ) / noiseSquareSize;\n\t\tconst randomVec = new Vector3(\n\t\t\tMath.cos( angle ),\n\t\t\tMath.sin( angle ),\n\t\t\t0\n\t\t).normalize();\n\t\tdata[ inx * 4 ] = ( randomVec.x * 0.5 + 0.5 ) * 255;\n\t\tdata[ inx * 4 + 1 ] = ( randomVec.y * 0.5 + 0.5 ) * 255;\n\t\tdata[ inx * 4 + 2 ] = 127;\n\t\tdata[ inx * 4 + 3 ] = 255;\n\n\t}\n\n\tconst noiseTexture = new DataTexture( data, noiseSize, noiseSize );\n\tnoiseTexture.wrapS = RepeatWrapping;\n\tnoiseTexture.wrapT = RepeatWrapping;\n\tnoiseTexture.needsUpdate = true;\n\n\treturn noiseTexture;\n\n}\n\nfunction generateMagicSquare( size ) {\n\n\tconst noiseSize = Math.floor( size ) % 2 === 0 ? Math.floor( size ) + 1 : Math.floor( size );\n\tconst noiseSquareSize = noiseSize * noiseSize;\n\tconst magicSquare = Array( noiseSquareSize ).fill( 0 );\n\tlet i = Math.floor( noiseSize / 2 );\n\tlet j = noiseSize - 1;\n\n\tfor ( let num = 1; num <= noiseSquareSize; ) {\n\n\t\tif ( i === - 1 && j === noiseSize ) {\n\n\t\t\tj = noiseSize - 2;\n\t\t\ti = 0;\n\n\t\t} else {\n\n\t\t\tif ( j === noiseSize ) {\n\n\t\t\t\tj = 0;\n\n\t\t\t}\n\n\t\t\tif ( i < 0 ) {\n\n\t\t\t\ti = noiseSize - 1;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( magicSquare[ i * noiseSize + j ] !== 0 ) {\n\n\t\t\tj -= 2;\n\t\t\ti ++;\n\t\t\tcontinue;\n\n\t\t} else {\n\n\t\t\tmagicSquare[ i * noiseSize + j ] = num ++;\n\n\t\t}\n\n\t\tj ++;\n\t\ti --;\n\n\t}\n\n\treturn magicSquare;\n\n}\n\n\nexport { generateMagicSquareNoise, GTAOShader, GTAODepthShader, GTAOBlendShader };\n","import {\n\tMatrix4,\n\tVector2,\n\tVector3,\n} from 'three';\n\n/**\n * @module PoissonDenoiseShader\n * @three_import import { PoissonDenoiseShader } from 'three/addons/shaders/PoissonDenoiseShader.js';\n */\n\n/**\n * Poisson Denoise Shader.\n *\n * References:\n * - [Self-Supervised Poisson-Gaussian Denoising](https://openaccess.thecvf.com/content/WACV2021/papers/Khademi_Self-Supervised_Poisson-Gaussian_Denoising_WACV_2021_paper.pdf).\n * - [Poisson2Sparse: Self-Supervised Poisson Denoising From a Single Image](https://arxiv.org/pdf/2206.01856.pdf)\n *\n * @constant\n * @type {ShaderMaterial~Shader}\n */\nconst PoissonDenoiseShader = {\n\n\tname: 'PoissonDenoiseShader',\n\n\tdefines: {\n\t\t'SAMPLES': 16,\n\t\t'SAMPLE_VECTORS': generatePdSamplePointInitializer( 16, 2, 1 ),\n\t\t'NORMAL_VECTOR_TYPE': 1,\n\t\t'DEPTH_VALUE_SOURCE': 0,\n\t},\n\n\tuniforms: {\n\t\t'tDiffuse': { value: null },\n\t\t'tNormal': { value: null },\n\t\t'tDepth': { value: null },\n\t\t'tNoise': { value: null },\n\t\t'resolution': { value: new Vector2() },\n\t\t'cameraProjectionMatrixInverse': { value: new Matrix4() },\n\t\t'lumaPhi': { value: 5. },\n\t\t'depthPhi': { value: 5. },\n\t\t'normalPhi': { value: 5. },\n\t\t'radius': { value: 4. },\n\t\t'index': { value: 0 }\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform sampler2D tNormal;\n\t\tuniform sampler2D tDepth;\n\t\tuniform sampler2D tNoise;\n\t\tuniform vec2 resolution;\n\t\tuniform mat4 cameraProjectionMatrixInverse;\n\t\tuniform float lumaPhi;\n\t\tuniform float depthPhi;\n\t\tuniform float normalPhi;\n\t\tuniform float radius;\n\t\tuniform int index;\n\n\t\t#include <common>\n\t\t#include <packing>\n\n\t\t#ifndef SAMPLE_LUMINANCE\n\t\t#define SAMPLE_LUMINANCE dot(vec3(0.2125, 0.7154, 0.0721), a)\n\t\t#endif\n\n\t\t#ifndef FRAGMENT_OUTPUT\n\t\t#define FRAGMENT_OUTPUT vec4(denoised, 1.)\n\t\t#endif\n\n\t\tfloat getLuminance(const in vec3 a) {\n\t\t\treturn SAMPLE_LUMINANCE;\n\t\t}\n\n\t\tconst vec3 poissonDisk[SAMPLES] = SAMPLE_VECTORS;\n\n\t\tvec3 getViewPosition(const in vec2 screenPosition, const in float depth) {\n\t\t\tvec4 clipSpacePosition = vec4(vec3(screenPosition, depth) * 2.0 - 1.0, 1.0);\n\t\t\tvec4 viewSpacePosition = cameraProjectionMatrixInverse * clipSpacePosition;\n\t\t\treturn viewSpacePosition.xyz / viewSpacePosition.w;\n\t\t}\n\n\t\tfloat getDepth(const vec2 uv) {\n\t\t#if DEPTH_VALUE_SOURCE == 1\n\t\t\treturn textureLod(tDepth, uv.xy, 0.0).a;\n\t\t#else\n\t\t\treturn textureLod(tDepth, uv.xy, 0.0).r;\n\t\t#endif\n\t\t}\n\n\t\tfloat fetchDepth(const ivec2 uv) {\n\t\t\t#if DEPTH_VALUE_SOURCE == 1\n\t\t\t\treturn texelFetch(tDepth, uv.xy, 0).a;\n\t\t\t#else\n\t\t\t\treturn texelFetch(tDepth, uv.xy, 0).r;\n\t\t\t#endif\n\t\t}\n\n\t\tvec3 computeNormalFromDepth(const vec2 uv) {\n\t\t\tvec2 size = vec2(textureSize(tDepth, 0));\n\t\t\tivec2 p = ivec2(uv * size);\n\t\t\tfloat c0 = fetchDepth(p);\n\t\t\tfloat l2 = fetchDepth(p - ivec2(2, 0));\n\t\t\tfloat l1 = fetchDepth(p - ivec2(1, 0));\n\t\t\tfloat r1 = fetchDepth(p + ivec2(1, 0));\n\t\t\tfloat r2 = fetchDepth(p + ivec2(2, 0));\n\t\t\tfloat b2 = fetchDepth(p - ivec2(0, 2));\n\t\t\tfloat b1 = fetchDepth(p - ivec2(0, 1));\n\t\t\tfloat t1 = fetchDepth(p + ivec2(0, 1));\n\t\t\tfloat t2 = fetchDepth(p + ivec2(0, 2));\n\t\t\tfloat dl = abs((2.0 * l1 - l2) - c0);\n\t\t\tfloat dr = abs((2.0 * r1 - r2) - c0);\n\t\t\tfloat db = abs((2.0 * b1 - b2) - c0);\n\t\t\tfloat dt = abs((2.0 * t1 - t2) - c0);\n\t\t\tvec3 ce = getViewPosition(uv, c0).xyz;\n\t\t\tvec3 dpdx = (dl < dr) ? ce - getViewPosition((uv - vec2(1.0 / size.x, 0.0)), l1).xyz\n\t\t\t\t\t\t\t\t\t: -ce + getViewPosition((uv + vec2(1.0 / size.x, 0.0)), r1).xyz;\n\t\t\tvec3 dpdy = (db < dt) ? ce - getViewPosition((uv - vec2(0.0, 1.0 / size.y)), b1).xyz\n\t\t\t\t\t\t\t\t\t: -ce + getViewPosition((uv + vec2(0.0, 1.0 / size.y)), t1).xyz;\n\t\t\treturn normalize(cross(dpdx, dpdy));\n\t\t}\n\n\t\tvec3 getViewNormal(const vec2 uv) {\n\t\t#if NORMAL_VECTOR_TYPE == 2\n\t\t\treturn normalize(textureLod(tNormal, uv, 0.).rgb);\n\t\t#elif NORMAL_VECTOR_TYPE == 1\n\t\t\treturn unpackRGBToNormal(textureLod(tNormal, uv, 0.).rgb);\n\t\t#else\n\t\t\treturn computeNormalFromDepth(uv);\n\t\t#endif\n\t\t}\n\n\t\tvoid denoiseSample(in vec3 center, in vec3 viewNormal, in vec3 viewPos, in vec2 sampleUv, inout vec3 denoised, inout float totalWeight) {\n\t\t\tvec4 sampleTexel = textureLod(tDiffuse, sampleUv, 0.0);\n\t\t\tfloat sampleDepth = getDepth(sampleUv);\n\t\t\tvec3 sampleNormal = getViewNormal(sampleUv);\n\t\t\tvec3 neighborColor = sampleTexel.rgb;\n\t\t\tvec3 viewPosSample = getViewPosition(sampleUv, sampleDepth);\n\n\t\t\tfloat normalDiff = dot(viewNormal, sampleNormal);\n\t\t\tfloat normalSimilarity = pow(max(normalDiff, 0.), normalPhi);\n\t\t\tfloat lumaDiff = abs(getLuminance(neighborColor) - getLuminance(center));\n\t\t\tfloat lumaSimilarity = max(1.0 - lumaDiff / lumaPhi, 0.0);\n\t\t\tfloat depthDiff = abs(dot(viewPos - viewPosSample, viewNormal));\n\t\t\tfloat depthSimilarity = max(1. - depthDiff / depthPhi, 0.);\n\t\t\tfloat w = lumaSimilarity * depthSimilarity * normalSimilarity;\n\n\t\t\tdenoised += w * neighborColor;\n\t\t\ttotalWeight += w;\n\t\t}\n\n\t\tvoid main() {\n\t\t\tfloat depth = getDepth(vUv.xy);\n\t\t\tvec3 viewNormal = getViewNormal(vUv);\n\t\t\tif (depth == 1. || dot(viewNormal, viewNormal) == 0.) {\n\t\t\t\tdiscard;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvec4 texel = textureLod(tDiffuse, vUv, 0.0);\n\t\t\tvec3 center = texel.rgb;\n\t\t\tvec3 viewPos = getViewPosition(vUv, depth);\n\n\t\t\tvec2 noiseResolution = vec2(textureSize(tNoise, 0));\n\t\t\tvec2 noiseUv = vUv * resolution / noiseResolution;\n\t\t\tvec4 noiseTexel = textureLod(tNoise, noiseUv, 0.0);\n \t\tvec2 noiseVec = vec2(sin(noiseTexel[index % 4] * 2. * PI), cos(noiseTexel[index % 4] * 2. * PI));\n \t\tmat2 rotationMatrix = mat2(noiseVec.x, -noiseVec.y, noiseVec.x, noiseVec.y);\n\n\t\t\tfloat totalWeight = 1.0;\n\t\t\tvec3 denoised = texel.rgb;\n\t\t\tfor (int i = 0; i < SAMPLES; i++) {\n\t\t\t\tvec3 sampleDir = poissonDisk[i];\n\t\t\t\tvec2 offset = rotationMatrix * (sampleDir.xy * (1. + sampleDir.z * (radius - 1.)) / resolution);\n\t\t\t\tvec2 sampleUv = vUv + offset;\n\t\t\t\tdenoiseSample(center, viewNormal, viewPos, sampleUv, denoised, totalWeight);\n\t\t\t}\n\n\t\t\tif (totalWeight > 0.) {\n\t\t\t\tdenoised /= totalWeight;\n\t\t\t}\n\t\t\tgl_FragColor = FRAGMENT_OUTPUT;\n\t\t}`\n\n};\n\nfunction generatePdSamplePointInitializer( samples, rings, radiusExponent ) {\n\n\tconst poissonDisk = generateDenoiseSamples(\n\t\tsamples,\n\t\trings,\n\t\tradiusExponent,\n\t);\n\n\tlet glslCode = 'vec3[SAMPLES](';\n\n\tfor ( let i = 0; i < samples; i ++ ) {\n\n\t\tconst sample = poissonDisk[ i ];\n\t\tglslCode += `vec3(${sample.x}, ${sample.y}, ${sample.z})${( i < samples - 1 ) ? ',' : ')'}`;\n\n\t}\n\n\treturn glslCode;\n\n}\n\nfunction generateDenoiseSamples( numSamples, numRings, radiusExponent ) {\n\n\tconst samples = [];\n\n\tfor ( let i = 0; i < numSamples; i ++ ) {\n\n\t\tconst angle = 2 * Math.PI * numRings * i / numSamples;\n\t\tconst radius = Math.pow( i / ( numSamples - 1 ), radiusExponent );\n\t\tsamples.push( new Vector3( Math.cos( angle ), Math.sin( angle ), radius ) );\n\n\t}\n\n\treturn samples;\n\n}\n\nexport { generatePdSamplePointInitializer, PoissonDenoiseShader };\n","/**\n * A utility class providing noise functions.\n *\n * The code is based on [Simplex noise demystified](https://web.archive.org/web/20210210162332/http://staffwww.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf)\n * by Stefan Gustavson, 2005.\n *\n * @three_import import { SimplexNoise } from 'three/addons/math/SimplexNoise.js';\n */\nclass SimplexNoise {\n\n\t/**\n\t * Constructs a new simplex noise object.\n\t *\n\t * @param {Object} [r=Math] - A math utility class that holds a `random()` method. This makes it\n\t * possible to pass in custom random number generator.\n\t */\n\tconstructor( r = Math ) {\n\n\t\tthis.grad3 = [[ 1, 1, 0 ], [ - 1, 1, 0 ], [ 1, - 1, 0 ], [ - 1, - 1, 0 ],\n\t\t\t[ 1, 0, 1 ], [ - 1, 0, 1 ], [ 1, 0, - 1 ], [ - 1, 0, - 1 ],\n\t\t\t[ 0, 1, 1 ], [ 0, - 1, 1 ], [ 0, 1, - 1 ], [ 0, - 1, - 1 ]];\n\n\t\tthis.grad4 = [[ 0, 1, 1, 1 ], [ 0, 1, 1, - 1 ], [ 0, 1, - 1, 1 ], [ 0, 1, - 1, - 1 ],\n\t\t\t[ 0, - 1, 1, 1 ], [ 0, - 1, 1, - 1 ], [ 0, - 1, - 1, 1 ], [ 0, - 1, - 1, - 1 ],\n\t\t\t[ 1, 0, 1, 1 ], [ 1, 0, 1, - 1 ], [ 1, 0, - 1, 1 ], [ 1, 0, - 1, - 1 ],\n\t\t\t[ - 1, 0, 1, 1 ], [ - 1, 0, 1, - 1 ], [ - 1, 0, - 1, 1 ], [ - 1, 0, - 1, - 1 ],\n\t\t\t[ 1, 1, 0, 1 ], [ 1, 1, 0, - 1 ], [ 1, - 1, 0, 1 ], [ 1, - 1, 0, - 1 ],\n\t\t\t[ - 1, 1, 0, 1 ], [ - 1, 1, 0, - 1 ], [ - 1, - 1, 0, 1 ], [ - 1, - 1, 0, - 1 ],\n\t\t\t[ 1, 1, 1, 0 ], [ 1, 1, - 1, 0 ], [ 1, - 1, 1, 0 ], [ 1, - 1, - 1, 0 ],\n\t\t\t[ - 1, 1, 1, 0 ], [ - 1, 1, - 1, 0 ], [ - 1, - 1, 1, 0 ], [ - 1, - 1, - 1, 0 ]];\n\n\t\tthis.p = [];\n\n\t\tfor ( let i = 0; i < 256; i ++ ) {\n\n\t\t\tthis.p[ i ] = Math.floor( r.random() * 256 );\n\n\t\t}\n\n\t\t// To remove the need for index wrapping, double the permutation table length\n\t\tthis.perm = [];\n\n\t\tfor ( let i = 0; i < 512; i ++ ) {\n\n\t\t\tthis.perm[ i ] = this.p[ i & 255 ];\n\n\t\t}\n\n\t\t// A lookup table to traverse the simplex around a given point in 4D.\n\t\t// Details can be found where this table is used, in the 4D noise method.\n\t\tthis.simplex = [\n\t\t\t[ 0, 1, 2, 3 ], [ 0, 1, 3, 2 ], [ 0, 0, 0, 0 ], [ 0, 2, 3, 1 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 1, 2, 3, 0 ],\n\t\t\t[ 0, 2, 1, 3 ], [ 0, 0, 0, 0 ], [ 0, 3, 1, 2 ], [ 0, 3, 2, 1 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 1, 3, 2, 0 ],\n\t\t\t[ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ],\n\t\t\t[ 1, 2, 0, 3 ], [ 0, 0, 0, 0 ], [ 1, 3, 0, 2 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 2, 3, 0, 1 ], [ 2, 3, 1, 0 ],\n\t\t\t[ 1, 0, 2, 3 ], [ 1, 0, 3, 2 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 2, 0, 3, 1 ], [ 0, 0, 0, 0 ], [ 2, 1, 3, 0 ],\n\t\t\t[ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ],\n\t\t\t[ 2, 0, 1, 3 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 3, 0, 1, 2 ], [ 3, 0, 2, 1 ], [ 0, 0, 0, 0 ], [ 3, 1, 2, 0 ],\n\t\t\t[ 2, 1, 0, 3 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 3, 1, 0, 2 ], [ 0, 0, 0, 0 ], [ 3, 2, 0, 1 ], [ 3, 2, 1, 0 ]];\n\n\t}\n\n\t/**\n\t * A 2D simplex noise method.\n\t *\n\t * @param {number} xin - The x coordinate.\n\t * @param {number} yin - The y coordinate.\n\t * @return {number} The noise value.\n\t */\n\tnoise( xin, yin ) {\n\n\t\tlet n0; // Noise contributions from the three corners\n\t\tlet n1;\n\t\tlet n2;\n\t\t// Skew the input space to determine which simplex cell we're in\n\t\tconst F2 = 0.5 * ( Math.sqrt( 3.0 ) - 1.0 );\n\t\tconst s = ( xin + yin ) * F2; // Hairy factor for 2D\n\t\tconst i = Math.floor( xin + s );\n\t\tconst j = Math.floor( yin + s );\n\t\tconst G2 = ( 3.0 - Math.sqrt( 3.0 ) ) / 6.0;\n\t\tconst t = ( i + j ) * G2;\n\t\tconst X0 = i - t; // Unskew the cell origin back to (x,y) space\n\t\tconst Y0 = j - t;\n\t\tconst x0 = xin - X0; // The x,y distances from the cell origin\n\t\tconst y0 = yin - Y0;\n\n\t\t// For the 2D case, the simplex shape is an equilateral triangle.\n\t\t// Determine which simplex we are in.\n\t\tlet i1; // Offsets for second (middle) corner of simplex in (i,j) coords\n\n\t\tlet j1;\n\t\tif ( x0 > y0 ) {\n\n\t\t\ti1 = 1; j1 = 0;\n\n\t\t\t// lower triangle, XY order: (0,0)->(1,0)->(1,1)\n\n\t\t}\telse {\n\n\t\t\ti1 = 0; j1 = 1;\n\n\t\t} // upper triangle, YX order: (0,0)->(0,1)->(1,1)\n\n\t\t// A step of (1,0) in (i,j) means a step of (1-c,-c) in (x,y), and\n\t\t// a step of (0,1) in (i,j) means a step of (-c,1-c) in (x,y), where\n\t\t// c = (3-sqrt(3))/6\n\t\tconst x1 = x0 - i1 + G2; // Offsets for middle corner in (x,y) unskewed coords\n\t\tconst y1 = y0 - j1 + G2;\n\t\tconst x2 = x0 - 1.0 + 2.0 * G2; // Offsets for last corner in (x,y) unskewed coords\n\t\tconst y2 = y0 - 1.0 + 2.0 * G2;\n\t\t// Work out the hashed gradient indices of the three simplex corners\n\t\tconst ii = i & 255;\n\t\tconst jj = j & 255;\n\t\tconst gi0 = this.perm[ ii + this.perm[ jj ] ] % 12;\n\t\tconst gi1 = this.perm[ ii + i1 + this.perm[ jj + j1 ] ] % 12;\n\t\tconst gi2 = this.perm[ ii + 1 + this.perm[ jj + 1 ] ] % 12;\n\t\t// Calculate the contribution from the three corners\n\t\tlet t0 = 0.5 - x0 * x0 - y0 * y0;\n\t\tif ( t0 < 0 ) n0 = 0.0;\n\t\telse {\n\n\t\t\tt0 *= t0;\n\t\t\tn0 = t0 * t0 * this._dot( this.grad3[ gi0 ], x0, y0 ); // (x,y) of grad3 used for 2D gradient\n\n\t\t}\n\n\t\tlet t1 = 0.5 - x1 * x1 - y1 * y1;\n\t\tif ( t1 < 0 ) n1 = 0.0;\n\t\telse {\n\n\t\t\tt1 *= t1;\n\t\t\tn1 = t1 * t1 * this._dot( this.grad3[ gi1 ], x1, y1 );\n\n\t\t}\n\n\t\tlet t2 = 0.5 - x2 * x2 - y2 * y2;\n\t\tif ( t2 < 0 ) n2 = 0.0;\n\t\telse {\n\n\t\t\tt2 *= t2;\n\t\t\tn2 = t2 * t2 * this._dot( this.grad3[ gi2 ], x2, y2 );\n\n\t\t}\n\n\t\t// Add contributions from each corner to get the final noise value.\n\t\t// The result is scaled to return values in the interval [-1,1].\n\t\treturn 70.0 * ( n0 + n1 + n2 );\n\n\t}\n\n\t/**\n\t * A 3D simplex noise method.\n\t *\n\t * @param {number} xin - The x coordinate.\n\t * @param {number} yin - The y coordinate.\n\t * @param {number} zin - The z coordinate.\n\t * @return {number} The noise value.\n\t */\n\tnoise3d( xin, yin, zin ) {\n\n\t\tlet n0; // Noise contributions from the four corners\n\t\tlet n1;\n\t\tlet n2;\n\t\tlet n3;\n\t\t// Skew the input space to determine which simplex cell we're in\n\t\tconst F3 = 1.0 / 3.0;\n\t\tconst s = ( xin + yin + zin ) * F3; // Very nice and simple skew factor for 3D\n\t\tconst i = Math.floor( xin + s );\n\t\tconst j = Math.floor( yin + s );\n\t\tconst k = Math.floor( zin + s );\n\t\tconst G3 = 1.0 / 6.0; // Very nice and simple unskew factor, too\n\t\tconst t = ( i + j + k ) * G3;\n\t\tconst X0 = i - t; // Unskew the cell origin back to (x,y,z) space\n\t\tconst Y0 = j - t;\n\t\tconst Z0 = k - t;\n\t\tconst x0 = xin - X0; // The x,y,z distances from the cell origin\n\t\tconst y0 = yin - Y0;\n\t\tconst z0 = zin - Z0;\n\n\t\t// For the 3D case, the simplex shape is a slightly irregular tetrahedron.\n\t\t// Determine which simplex we are in.\n\t\tlet i1; // Offsets for second corner of simplex in (i,j,k) coords\n\n\t\tlet j1;\n\t\tlet k1;\n\t\tlet i2; // Offsets for third corner of simplex in (i,j,k) coords\n\t\tlet j2;\n\t\tlet k2;\n\t\tif ( x0 >= y0 ) {\n\n\t\t\tif ( y0 >= z0 ) {\n\n\t\t\t\ti1 = 1; j1 = 0; k1 = 0; i2 = 1; j2 = 1; k2 = 0;\n\n\t\t\t\t// X Y Z order\n\n\t\t\t} else if ( x0 >= z0 ) {\n\n\t\t\t\ti1 = 1; j1 = 0; k1 = 0; i2 = 1; j2 = 0; k2 = 1;\n\n\t\t\t\t// X Z Y order\n\n\t\t\t} else {\n\n\t\t\t\ti1 = 0; j1 = 0; k1 = 1; i2 = 1; j2 = 0; k2 = 1;\n\n\t\t\t} // Z X Y order\n\n\t\t} else { // x0<y0\n\n\t\t\tif ( y0 < z0 ) {\n\n\t\t\t\ti1 = 0; j1 = 0; k1 = 1; i2 = 0; j2 = 1; k2 = 1;\n\n\t\t\t\t// Z Y X order\n\n\t\t\t} else if ( x0 < z0 ) {\n\n\t\t\t\ti1 = 0; j1 = 1; k1 = 0; i2 = 0; j2 = 1; k2 = 1;\n\n\t\t\t\t// Y Z X order\n\n\t\t\t} else {\n\n\t\t\t\ti1 = 0; j1 = 1; k1 = 0; i2 = 1; j2 = 1; k2 = 0;\n\n\t\t\t} // Y X Z order\n\n\t\t}\n\n\t\t// A step of (1,0,0) in (i,j,k) means a step of (1-c,-c,-c) in (x,y,z),\n\t\t// a step of (0,1,0) in (i,j,k) means a step of (-c,1-c,-c) in (x,y,z), and\n\t\t// a step of (0,0,1) in (i,j,k) means a step of (-c,-c,1-c) in (x,y,z), where\n\t\t// c = 1/6.\n\t\tconst x1 = x0 - i1 + G3; // Offsets for second corner in (x,y,z) coords\n\t\tconst y1 = y0 - j1 + G3;\n\t\tconst z1 = z0 - k1 + G3;\n\t\tconst x2 = x0 - i2 + 2.0 * G3; // Offsets for third corner in (x,y,z) coords\n\t\tconst y2 = y0 - j2 + 2.0 * G3;\n\t\tconst z2 = z0 - k2 + 2.0 * G3;\n\t\tconst x3 = x0 - 1.0 + 3.0 * G3; // Offsets for last corner in (x,y,z) coords\n\t\tconst y3 = y0 - 1.0 + 3.0 * G3;\n\t\tconst z3 = z0 - 1.0 + 3.0 * G3;\n\t\t// Work out the hashed gradient indices of the four simplex corners\n\t\tconst ii = i & 255;\n\t\tconst jj = j & 255;\n\t\tconst kk = k & 255;\n\t\tconst gi0 = this.perm[ ii + this.perm[ jj + this.perm[ kk ] ] ] % 12;\n\t\tconst gi1 = this.perm[ ii + i1 + this.perm[ jj + j1 + this.perm[ kk + k1 ] ] ] % 12;\n\t\tconst gi2 = this.perm[ ii + i2 + this.perm[ jj + j2 + this.perm[ kk + k2 ] ] ] % 12;\n\t\tconst gi3 = this.perm[ ii + 1 + this.perm[ jj + 1 + this.perm[ kk + 1 ] ] ] % 12;\n\t\t// Calculate the contribution from the four corners\n\t\tlet t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0;\n\t\tif ( t0 < 0 ) n0 = 0.0;\n\t\telse {\n\n\t\t\tt0 *= t0;\n\t\t\tn0 = t0 * t0 * this._dot3( this.grad3[ gi0 ], x0, y0, z0 );\n\n\t\t}\n\n\t\tlet t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1;\n\t\tif ( t1 < 0 ) n1 = 0.0;\n\t\telse {\n\n\t\t\tt1 *= t1;\n\t\t\tn1 = t1 * t1 * this._dot3( this.grad3[ gi1 ], x1, y1, z1 );\n\n\t\t}\n\n\t\tlet t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2;\n\t\tif ( t2 < 0 ) n2 = 0.0;\n\t\telse {\n\n\t\t\tt2 *= t2;\n\t\t\tn2 = t2 * t2 * this._dot3( this.grad3[ gi2 ], x2, y2, z2 );\n\n\t\t}\n\n\t\tlet t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3;\n\t\tif ( t3 < 0 ) n3 = 0.0;\n\t\telse {\n\n\t\t\tt3 *= t3;\n\t\t\tn3 = t3 * t3 * this._dot3( this.grad3[ gi3 ], x3, y3, z3 );\n\n\t\t}\n\n\t\t// Add contributions from each corner to get the final noise value.\n\t\t// The result is scaled to stay just inside [-1,1]\n\t\treturn 32.0 * ( n0 + n1 + n2 + n3 );\n\n\t}\n\n\t/**\n\t * A 4D simplex noise method.\n\t *\n\t * @param {number} x - The x coordinate.\n\t * @param {number} y - The y coordinate.\n\t * @param {number} z - The z coordinate.\n\t * @param {number} w - The w coordinate.\n\t * @return {number} The noise value.\n\t */\n\tnoise4d( x, y, z, w ) {\n\n\t\t// For faster and easier lookups\n\t\tconst grad4 = this.grad4;\n\t\tconst simplex = this.simplex;\n\t\tconst perm = this.perm;\n\n\t\t// The skewing and unskewing factors are hairy again for the 4D case\n\t\tconst F4 = ( Math.sqrt( 5.0 ) - 1.0 ) / 4.0;\n\t\tconst G4 = ( 5.0 - Math.sqrt( 5.0 ) ) / 20.0;\n\t\tlet n0; // Noise contributions from the five corners\n\t\tlet n1;\n\t\tlet n2;\n\t\tlet n3;\n\t\tlet n4;\n\t\t// Skew the (x,y,z,w) space to determine which cell of 24 simplices we're in\n\t\tconst s = ( x + y + z + w ) * F4; // Factor for 4D skewing\n\t\tconst i = Math.floor( x + s );\n\t\tconst j = Math.floor( y + s );\n\t\tconst k = Math.floor( z + s );\n\t\tconst l = Math.floor( w + s );\n\t\tconst t = ( i + j + k + l ) * G4; // Factor for 4D unskewing\n\t\tconst X0 = i - t; // Unskew the cell origin back to (x,y,z,w) space\n\t\tconst Y0 = j - t;\n\t\tconst Z0 = k - t;\n\t\tconst W0 = l - t;\n\t\tconst x0 = x - X0; // The x,y,z,w distances from the cell origin\n\t\tconst y0 = y - Y0;\n\t\tconst z0 = z - Z0;\n\t\tconst w0 = w - W0;\n\n\t\t// For the 4D case, the simplex is a 4D shape I won't even try to describe.\n\t\t// To find out which of the 24 possible simplices we're in, we need to\n\t\t// determine the magnitude ordering of x0, y0, z0 and w0.\n\t\t// The method below is a good way of finding the ordering of x,y,z,w and\n\t\t// then find the correct traversal order for the simplex we’re in.\n\t\t// First, six pair-wise comparisons are performed between each possible pair\n\t\t// of the four coordinates, and the results are used to add up binary bits\n\t\t// for an integer index.\n\t\tconst c1 = ( x0 > y0 ) ? 32 : 0;\n\t\tconst c2 = ( x0 > z0 ) ? 16 : 0;\n\t\tconst c3 = ( y0 > z0 ) ? 8 : 0;\n\t\tconst c4 = ( x0 > w0 ) ? 4 : 0;\n\t\tconst c5 = ( y0 > w0 ) ? 2 : 0;\n\t\tconst c6 = ( z0 > w0 ) ? 1 : 0;\n\t\tconst c = c1 + c2 + c3 + c4 + c5 + c6;\n\n\t\t// simplex[c] is a 4-vector with the numbers 0, 1, 2 and 3 in some order.\n\t\t// Many values of c will never occur, since e.g. x>y>z>w makes x<z, y<w and x<w\n\t\t// impossible. Only the 24 indices which have non-zero entries make any sense.\n\t\t// We use a thresholding to set the coordinates in turn from the largest magnitude.\n\t\t// The number 3 in the \"simplex\" array is at the position of the largest coordinate.\n\t\tconst i1 = simplex[ c ][ 0 ] >= 3 ? 1 : 0;\n\t\tconst j1 = simplex[ c ][ 1 ] >= 3 ? 1 : 0;\n\t\tconst k1 = simplex[ c ][ 2 ] >= 3 ? 1 : 0;\n\t\tconst l1 = simplex[ c ][ 3 ] >= 3 ? 1 : 0;\n\t\t// The number 2 in the \"simplex\" array is at the second largest coordinate.\n\t\tconst i2 = simplex[ c ][ 0 ] >= 2 ? 1 : 0;\n\t\tconst j2 = simplex[ c ][ 1 ] >= 2 ? 1 : 0;\n\t\tconst k2 = simplex[ c ][ 2 ] >= 2 ? 1 : 0;\n\t\tconst l2 = simplex[ c ][ 3 ] >= 2 ? 1 : 0;\n\t\t// The number 1 in the \"simplex\" array is at the second smallest coordinate.\n\t\tconst i3 = simplex[ c ][ 0 ] >= 1 ? 1 : 0;\n\t\tconst j3 = simplex[ c ][ 1 ] >= 1 ? 1 : 0;\n\t\tconst k3 = simplex[ c ][ 2 ] >= 1 ? 1 : 0;\n\t\tconst l3 = simplex[ c ][ 3 ] >= 1 ? 1 : 0;\n\t\t// The fifth corner has all coordinate offsets = 1, so no need to look that up.\n\t\tconst x1 = x0 - i1 + G4; // Offsets for second corner in (x,y,z,w) coords\n\t\tconst y1 = y0 - j1 + G4;\n\t\tconst z1 = z0 - k1 + G4;\n\t\tconst w1 = w0 - l1 + G4;\n\t\tconst x2 = x0 - i2 + 2.0 * G4; // Offsets for third corner in (x,y,z,w) coords\n\t\tconst y2 = y0 - j2 + 2.0 * G4;\n\t\tconst z2 = z0 - k2 + 2.0 * G4;\n\t\tconst w2 = w0 - l2 + 2.0 * G4;\n\t\tconst x3 = x0 - i3 + 3.0 * G4; // Offsets for fourth corner in (x,y,z,w) coords\n\t\tconst y3 = y0 - j3 + 3.0 * G4;\n\t\tconst z3 = z0 - k3 + 3.0 * G4;\n\t\tconst w3 = w0 - l3 + 3.0 * G4;\n\t\tconst x4 = x0 - 1.0 + 4.0 * G4; // Offsets for last corner in (x,y,z,w) coords\n\t\tconst y4 = y0 - 1.0 + 4.0 * G4;\n\t\tconst z4 = z0 - 1.0 + 4.0 * G4;\n\t\tconst w4 = w0 - 1.0 + 4.0 * G4;\n\t\t// Work out the hashed gradient indices of the five simplex corners\n\t\tconst ii = i & 255;\n\t\tconst jj = j & 255;\n\t\tconst kk = k & 255;\n\t\tconst ll = l & 255;\n\t\tconst gi0 = perm[ ii + perm[ jj + perm[ kk + perm[ ll ] ] ] ] % 32;\n\t\tconst gi1 = perm[ ii + i1 + perm[ jj + j1 + perm[ kk + k1 + perm[ ll + l1 ] ] ] ] % 32;\n\t\tconst gi2 = perm[ ii + i2 + perm[ jj + j2 + perm[ kk + k2 + perm[ ll + l2 ] ] ] ] % 32;\n\t\tconst gi3 = perm[ ii + i3 + perm[ jj + j3 + perm[ kk + k3 + perm[ ll + l3 ] ] ] ] % 32;\n\t\tconst gi4 = perm[ ii + 1 + perm[ jj + 1 + perm[ kk + 1 + perm[ ll + 1 ] ] ] ] % 32;\n\t\t// Calculate the contribution from the five corners\n\t\tlet t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0 - w0 * w0;\n\t\tif ( t0 < 0 ) n0 = 0.0;\n\t\telse {\n\n\t\t\tt0 *= t0;\n\t\t\tn0 = t0 * t0 * this._dot4( grad4[ gi0 ], x0, y0, z0, w0 );\n\n\t\t}\n\n\t\tlet t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1 - w1 * w1;\n\t\tif ( t1 < 0 ) n1 = 0.0;\n\t\telse {\n\n\t\t\tt1 *= t1;\n\t\t\tn1 = t1 * t1 * this._dot4( grad4[ gi1 ], x1, y1, z1, w1 );\n\n\t\t}\n\n\t\tlet t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2 - w2 * w2;\n\t\tif ( t2 < 0 ) n2 = 0.0;\n\t\telse {\n\n\t\t\tt2 *= t2;\n\t\t\tn2 = t2 * t2 * this._dot4( grad4[ gi2 ], x2, y2, z2, w2 );\n\n\t\t}\n\n\t\tlet t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3 - w3 * w3;\n\t\tif ( t3 < 0 ) n3 = 0.0;\n\t\telse {\n\n\t\t\tt3 *= t3;\n\t\t\tn3 = t3 * t3 * this._dot4( grad4[ gi3 ], x3, y3, z3, w3 );\n\n\t\t}\n\n\t\tlet t4 = 0.6 - x4 * x4 - y4 * y4 - z4 * z4 - w4 * w4;\n\t\tif ( t4 < 0 ) n4 = 0.0;\n\t\telse {\n\n\t\t\tt4 *= t4;\n\t\t\tn4 = t4 * t4 * this._dot4( grad4[ gi4 ], x4, y4, z4, w4 );\n\n\t\t}\n\n\t\t// Sum up and scale the result to cover the range [-1,1]\n\t\treturn 27.0 * ( n0 + n1 + n2 + n3 + n4 );\n\n\t}\n\n\t// private\n\n\t_dot( g, x, y ) {\n\n\t\treturn g[ 0 ] * x + g[ 1 ] * y;\n\n\t}\n\n\t_dot3( g, x, y, z ) {\n\n\t\treturn g[ 0 ] * x + g[ 1 ] * y + g[ 2 ] * z;\n\n\t}\n\n\t_dot4( g, x, y, z, w ) {\n\n\t\treturn g[ 0 ] * x + g[ 1 ] * y + g[ 2 ] * z + g[ 3 ] * w;\n\n\t}\n\n}\n\nexport { SimplexNoise };\n","import {\n\tAddEquation,\n\tColor,\n\tCustomBlending,\n\tDataTexture,\n\tDepthTexture,\n\tDepthStencilFormat,\n\tDstAlphaFactor,\n\tDstColorFactor,\n\tHalfFloatType,\n\tMeshNormalMaterial,\n\tNearestFilter,\n\tNoBlending,\n\tRepeatWrapping,\n\tRGBAFormat,\n\tShaderMaterial,\n\tUniformsUtils,\n\tUnsignedByteType,\n\tUnsignedInt248Type,\n\tWebGLRenderTarget,\n\tZeroFactor\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { generateMagicSquareNoise, GTAOShader, GTAODepthShader, GTAOBlendShader } from '../shaders/GTAOShader.js';\nimport { generatePdSamplePointInitializer, PoissonDenoiseShader } from '../shaders/PoissonDenoiseShader.js';\nimport { CopyShader } from '../shaders/CopyShader.js';\nimport { SimplexNoise } from '../math/SimplexNoise.js';\n\n/**\n * A pass for an GTAO effect.\n *\n * `GTAOPass` provides better quality than {@link SSAOPass} but is also more expensive.\n *\n * ```js\n * const gtaoPass = new GTAOPass( scene, camera, width, height );\n * gtaoPass.output = GTAOPass.OUTPUT.Denoise;\n * composer.addPass( gtaoPass );\n * ```\n *\n * @augments Pass\n * @three_import import { GTAOPass } from 'three/addons/postprocessing/GTAOPass.js';\n */\nclass GTAOPass extends Pass {\n\n\t/**\n\t * Constructs a new GTAO pass.\n\t *\n\t * @param {Scene} scene - The scene to compute the AO for.\n\t * @param {Camera} camera - The camera.\n\t * @param {number} [width=512] - The width of the effect.\n\t * @param {number} [height=512] - The height of the effect.\n\t * @param {Object} [parameters] - The pass parameters.\n\t * @param {Object} [aoParameters] - The AO parameters.\n\t * @param {Object} [pdParameters] - The denoise parameters.\n\t */\n\tconstructor( scene, camera, width = 512, height = 512, parameters, aoParameters, pdParameters ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The width of the effect.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 512\n\t\t */\n\t\tthis.width = width;\n\n\t\t/**\n\t\t * The height of the effect.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 512\n\t\t */\n\t\tthis.height = height;\n\n\t\t/**\n\t\t * Overwritten to perform a clear operation by default.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.clear = true;\n\n\t\t/**\n\t\t * The camera.\n\t\t *\n\t\t * @type {Camera}\n\t\t */\n\t\tthis.camera = camera;\n\n\t\t/**\n\t\t * The scene to render the AO for.\n\t\t *\n\t\t * @type {Scene}\n\t\t */\n\t\tthis.scene = scene;\n\n\t\t/**\n\t\t * The output configuration.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.output = 0;\n\t\tthis._renderGBuffer = true;\n\t\tthis._visibilityCache = [];\n\n\t\t/**\n\t\t * The AO blend intensity.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.blendIntensity = 1.;\n\n\t\t/**\n\t\t * The number of Poisson Denoise rings.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 2\n\t\t */\n\t\tthis.pdRings = 2.;\n\n\t\t/**\n\t\t * The Poisson Denoise radius exponent.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 2\n\t\t */\n\t\tthis.pdRadiusExponent = 2.;\n\n\t\t/**\n\t\t * The Poisson Denoise sample count.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 16\n\t\t */\n\t\tthis.pdSamples = 16;\n\n\t\tthis.gtaoNoiseTexture = generateMagicSquareNoise();\n\t\tthis.pdNoiseTexture = this._generateNoise();\n\n\t\tthis.gtaoRenderTarget = new WebGLRenderTarget( this.width, this.height, { type: HalfFloatType } );\n\t\tthis.pdRenderTarget = this.gtaoRenderTarget.clone();\n\n\t\tthis.gtaoMaterial = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, GTAOShader.defines ),\n\t\t\tuniforms: UniformsUtils.clone( GTAOShader.uniforms ),\n\t\t\tvertexShader: GTAOShader.vertexShader,\n\t\t\tfragmentShader: GTAOShader.fragmentShader,\n\t\t\tblending: NoBlending,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t} );\n\t\tthis.gtaoMaterial.defines.PERSPECTIVE_CAMERA = this.camera.isPerspectiveCamera ? 1 : 0;\n\t\tthis.gtaoMaterial.uniforms.tNoise.value = this.gtaoNoiseTexture;\n\t\tthis.gtaoMaterial.uniforms.resolution.value.set( this.width, this.height );\n\t\tthis.gtaoMaterial.uniforms.cameraNear.value = this.camera.near;\n\t\tthis.gtaoMaterial.uniforms.cameraFar.value = this.camera.far;\n\n\t\tthis.normalMaterial = new MeshNormalMaterial();\n\t\tthis.normalMaterial.blending = NoBlending;\n\n\t\tthis.pdMaterial = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, PoissonDenoiseShader.defines ),\n\t\t\tuniforms: UniformsUtils.clone( PoissonDenoiseShader.uniforms ),\n\t\t\tvertexShader: PoissonDenoiseShader.vertexShader,\n\t\t\tfragmentShader: PoissonDenoiseShader.fragmentShader,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t} );\n\t\tthis.pdMaterial.uniforms.tDiffuse.value = this.gtaoRenderTarget.texture;\n\t\tthis.pdMaterial.uniforms.tNoise.value = this.pdNoiseTexture;\n\t\tthis.pdMaterial.uniforms.resolution.value.set( this.width, this.height );\n\t\tthis.pdMaterial.uniforms.lumaPhi.value = 10;\n\t\tthis.pdMaterial.uniforms.depthPhi.value = 2;\n\t\tthis.pdMaterial.uniforms.normalPhi.value = 3;\n\t\tthis.pdMaterial.uniforms.radius.value = 8;\n\n\t\tthis.depthRenderMaterial = new ShaderMaterial( {\n\t\t\tdefines: Object.assign( {}, GTAODepthShader.defines ),\n\t\t\tuniforms: UniformsUtils.clone( GTAODepthShader.uniforms ),\n\t\t\tvertexShader: GTAODepthShader.vertexShader,\n\t\t\tfragmentShader: GTAODepthShader.fragmentShader,\n\t\t\tblending: NoBlending\n\t\t} );\n\t\tthis.depthRenderMaterial.uniforms.cameraNear.value = this.camera.near;\n\t\tthis.depthRenderMaterial.uniforms.cameraFar.value = this.camera.far;\n\n\t\tthis.copyMaterial = new ShaderMaterial( {\n\t\t\tuniforms: UniformsUtils.clone( CopyShader.uniforms ),\n\t\t\tvertexShader: CopyShader.vertexShader,\n\t\t\tfragmentShader: CopyShader.fragmentShader,\n\t\t\ttransparent: true,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\tblendSrc: DstColorFactor,\n\t\t\tblendDst: ZeroFactor,\n\t\t\tblendEquation: AddEquation,\n\t\t\tblendSrcAlpha: DstAlphaFactor,\n\t\t\tblendDstAlpha: ZeroFactor,\n\t\t\tblendEquationAlpha: AddEquation\n\t\t} );\n\n\t\tthis.blendMaterial = new ShaderMaterial( {\n\t\t\tuniforms: UniformsUtils.clone( GTAOBlendShader.uniforms ),\n\t\t\tvertexShader: GTAOBlendShader.vertexShader,\n\t\t\tfragmentShader: GTAOBlendShader.fragmentShader,\n\t\t\ttransparent: true,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\tblending: CustomBlending,\n\t\t\tblendSrc: DstColorFactor,\n\t\t\tblendDst: ZeroFactor,\n\t\t\tblendEquation: AddEquation,\n\t\t\tblendSrcAlpha: DstAlphaFactor,\n\t\t\tblendDstAlpha: ZeroFactor,\n\t\t\tblendEquationAlpha: AddEquation\n\t\t} );\n\n\t\tthis._fsQuad = new FullScreenQuad( null );\n\n\t\tthis._originalClearColor = new Color();\n\n\t\tthis.setGBuffer( parameters ? parameters.depthTexture : undefined, parameters ? parameters.normalTexture : undefined );\n\n\t\tif ( aoParameters !== undefined ) {\n\n\t\t\tthis.updateGtaoMaterial( aoParameters );\n\n\t\t}\n\n\t\tif ( pdParameters !== undefined ) {\n\n\t\t\tthis.updatePdMaterial( pdParameters );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Sets the size of the pass.\n\t *\n\t * @param {number} width - The width to set.\n\t * @param {number} height - The height to set.\n\t */\n\tsetSize( width, height ) {\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\n\t\tthis.gtaoRenderTarget.setSize( width, height );\n\t\tthis.normalRenderTarget.setSize( width, height );\n\t\tthis.pdRenderTarget.setSize( width, height );\n\n\t\tthis.gtaoMaterial.uniforms.resolution.value.set( width, height );\n\t\tthis.gtaoMaterial.uniforms.cameraProjectionMatrix.value.copy( this.camera.projectionMatrix );\n\t\tthis.gtaoMaterial.uniforms.cameraProjectionMatrixInverse.value.copy( this.camera.projectionMatrixInverse );\n\n\t\tthis.pdMaterial.uniforms.resolution.value.set( width, height );\n\t\tthis.pdMaterial.uniforms.cameraProjectionMatrixInverse.value.copy( this.camera.projectionMatrixInverse );\n\n\t}\n\n\t/**\n\t * Frees the GPU-related resources allocated by this instance. Call this\n\t * method whenever the pass is no longer used in your app.\n\t */\n\tdispose() {\n\n\t\tthis.gtaoNoiseTexture.dispose();\n\t\tthis.pdNoiseTexture.dispose();\n\t\tthis.normalRenderTarget.dispose();\n\t\tthis.gtaoRenderTarget.dispose();\n\t\tthis.pdRenderTarget.dispose();\n\t\tthis.normalMaterial.dispose();\n\t\tthis.pdMaterial.dispose();\n\t\tthis.copyMaterial.dispose();\n\t\tthis.depthRenderMaterial.dispose();\n\t\tthis._fsQuad.dispose();\n\n\t}\n\n\t/**\n\t * A texture holding the computed AO.\n\t *\n\t * @type {Texture}\n\t * @readonly\n\t */\n\tget gtaoMap() {\n\n\t\treturn this.pdRenderTarget.texture;\n\n\t}\n\n\t/**\n\t * Configures the GBuffer of this pass. If no arguments are passed,\n\t * the pass creates an internal render target for holding depth\n\t * and normal data.\n\t *\n\t * @param {DepthTexture} [depthTexture] - The depth texture.\n\t * @param {DepthTexture} [normalTexture] - The normal texture.\n\t */\n\tsetGBuffer( depthTexture, normalTexture ) {\n\n\t\tif ( depthTexture !== undefined ) {\n\n\t\t\tthis.depthTexture = depthTexture;\n\t\t\tthis.normalTexture = normalTexture;\n\t\t\tthis._renderGBuffer = false;\n\n\t\t} else {\n\n\t\t\tthis.depthTexture = new DepthTexture();\n\t\t\tthis.depthTexture.format = DepthStencilFormat;\n\t\t\tthis.depthTexture.type = UnsignedInt248Type;\n\t\t\tthis.normalRenderTarget = new WebGLRenderTarget( this.width, this.height, {\n\t\t\t\tminFilter: NearestFilter,\n\t\t\t\tmagFilter: NearestFilter,\n\t\t\t\ttype: HalfFloatType,\n\t\t\t\tdepthTexture: this.depthTexture\n\t\t\t} );\n\t\t\tthis.normalTexture = this.normalRenderTarget.texture;\n\t\t\tthis._renderGBuffer = true;\n\n\t\t}\n\n\t\tconst normalVectorType = ( this.normalTexture ) ? 1 : 0;\n\t\tconst depthValueSource = ( this.depthTexture === this.normalTexture ) ? 'w' : 'x';\n\n\t\tthis.gtaoMaterial.defines.NORMAL_VECTOR_TYPE = normalVectorType;\n\t\tthis.gtaoMaterial.defines.DEPTH_SWIZZLING = depthValueSource;\n\t\tthis.gtaoMaterial.uniforms.tNormal.value = this.normalTexture;\n\t\tthis.gtaoMaterial.uniforms.tDepth.value = this.depthTexture;\n\n\t\tthis.pdMaterial.defines.NORMAL_VECTOR_TYPE = normalVectorType;\n\t\tthis.pdMaterial.defines.DEPTH_SWIZZLING = depthValueSource;\n\t\tthis.pdMaterial.uniforms.tNormal.value = this.normalTexture;\n\t\tthis.pdMaterial.uniforms.tDepth.value = this.depthTexture;\n\n\t\tthis.depthRenderMaterial.uniforms.tDepth.value = this.normalRenderTarget.depthTexture;\n\n\t}\n\n\t/**\n\t * Configures the clip box of the GTAO shader with the given AABB.\n\t *\n\t * @param {?Box3} box - The AABB enclosing the scene that should receive AO. When passing\n\t * `null`, to clip box is used.\n\t */\n\tsetSceneClipBox( box ) {\n\n\t\tif ( box ) {\n\n\t\t\tthis.gtaoMaterial.needsUpdate = this.gtaoMaterial.defines.SCENE_CLIP_BOX !== 1;\n\t\t\tthis.gtaoMaterial.defines.SCENE_CLIP_BOX = 1;\n\t\t\tthis.gtaoMaterial.uniforms.sceneBoxMin.value.copy( box.min );\n\t\t\tthis.gtaoMaterial.uniforms.sceneBoxMax.value.copy( box.max );\n\n\t\t} else {\n\n\t\t\tthis.gtaoMaterial.needsUpdate = this.gtaoMaterial.defines.SCENE_CLIP_BOX === 0;\n\t\t\tthis.gtaoMaterial.defines.SCENE_CLIP_BOX = 0;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates the GTAO material from the given parameter object.\n\t *\n\t * @param {Object} parameters - The GTAO material parameters.\n\t */\n\tupdateGtaoMaterial( parameters ) {\n\n\t\tif ( parameters.radius !== undefined ) {\n\n\t\t\tthis.gtaoMaterial.uniforms.radius.value = parameters.radius;\n\n\t\t}\n\n\t\tif ( parameters.distanceExponent !== undefined ) {\n\n\t\t\tthis.gtaoMaterial.uniforms.distanceExponent.value = parameters.distanceExponent;\n\n\t\t}\n\n\t\tif ( parameters.thickness !== undefined ) {\n\n\t\t\tthis.gtaoMaterial.uniforms.thickness.value = parameters.thickness;\n\n\t\t}\n\n\t\tif ( parameters.distanceFallOff !== undefined ) {\n\n\t\t\tthis.gtaoMaterial.uniforms.distanceFallOff.value = parameters.distanceFallOff;\n\t\t\tthis.gtaoMaterial.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( parameters.scale !== undefined ) {\n\n\t\t\tthis.gtaoMaterial.uniforms.scale.value = parameters.scale;\n\n\t\t}\n\n\t\tif ( parameters.samples !== undefined && parameters.samples !== this.gtaoMaterial.defines.SAMPLES ) {\n\n\t\t\tthis.gtaoMaterial.defines.SAMPLES = parameters.samples;\n\t\t\tthis.gtaoMaterial.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( parameters.screenSpaceRadius !== undefined && ( parameters.screenSpaceRadius ? 1 : 0 ) !== this.gtaoMaterial.defines.SCREEN_SPACE_RADIUS ) {\n\n\t\t\tthis.gtaoMaterial.defines.SCREEN_SPACE_RADIUS = parameters.screenSpaceRadius ? 1 : 0;\n\t\t\tthis.gtaoMaterial.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates the Denoise material from the given parameter object.\n\t *\n\t * @param {Object} parameters - The denoise parameters.\n\t */\n\tupdatePdMaterial( parameters ) {\n\n\t\tlet updateShader = false;\n\n\t\tif ( parameters.lumaPhi !== undefined ) {\n\n\t\t\tthis.pdMaterial.uniforms.lumaPhi.value = parameters.lumaPhi;\n\n\t\t}\n\n\t\tif ( parameters.depthPhi !== undefined ) {\n\n\t\t\tthis.pdMaterial.uniforms.depthPhi.value = parameters.depthPhi;\n\n\t\t}\n\n\t\tif ( parameters.normalPhi !== undefined ) {\n\n\t\t\tthis.pdMaterial.uniforms.normalPhi.value = parameters.normalPhi;\n\n\t\t}\n\n\t\tif ( parameters.radius !== undefined && parameters.radius !== this.radius ) {\n\n\t\t\tthis.pdMaterial.uniforms.radius.value = parameters.radius;\n\n\t\t}\n\n\t\tif ( parameters.radiusExponent !== undefined && parameters.radiusExponent !== this.pdRadiusExponent ) {\n\n\t\t\tthis.pdRadiusExponent = parameters.radiusExponent;\n\t\t\tupdateShader = true;\n\n\t\t}\n\n\t\tif ( parameters.rings !== undefined && parameters.rings !== this.pdRings ) {\n\n\t\t\tthis.pdRings = parameters.rings;\n\t\t\tupdateShader = true;\n\n\t\t}\n\n\t\tif ( parameters.samples !== undefined && parameters.samples !== this.pdSamples ) {\n\n\t\t\tthis.pdSamples = parameters.samples;\n\t\t\tupdateShader = true;\n\n\t\t}\n\n\t\tif ( updateShader ) {\n\n\t\t\tthis.pdMaterial.defines.SAMPLES = this.pdSamples;\n\t\t\tthis.pdMaterial.defines.SAMPLE_VECTORS = generatePdSamplePointInitializer( this.pdSamples, this.pdRings, this.pdRadiusExponent );\n\t\t\tthis.pdMaterial.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Performs the GTAO pass.\n\t *\n\t * @param {WebGLRenderer} renderer - The renderer.\n\t * @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering\n\t * destination for the pass.\n\t * @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the\n\t * previous pass from this buffer.\n\t * @param {number} deltaTime - The delta time in seconds.\n\t * @param {boolean} maskActive - Whether masking is active or not.\n\t */\n\trender( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n\t\t// render normals and depth (honor only meshes, points and lines do not contribute to AO)\n\n\t\tif ( this._renderGBuffer ) {\n\n\t\t\tthis._overrideVisibility();\n\t\t\tthis._renderOverride( renderer, this.normalMaterial, this.normalRenderTarget, 0x7777ff, 1.0 );\n\t\t\tthis._restoreVisibility();\n\n\t\t}\n\n\t\t// render AO\n\n\t\tthis.gtaoMaterial.uniforms.cameraNear.value = this.camera.near;\n\t\tthis.gtaoMaterial.uniforms.cameraFar.value = this.camera.far;\n\t\tthis.gtaoMaterial.uniforms.cameraProjectionMatrix.value.copy( this.camera.projectionMatrix );\n\t\tthis.gtaoMaterial.uniforms.cameraProjectionMatrixInverse.value.copy( this.camera.projectionMatrixInverse );\n\t\tthis.gtaoMaterial.uniforms.cameraWorldMatrix.value.copy( this.camera.matrixWorld );\n\t\tthis._renderPass( renderer, this.gtaoMaterial, this.gtaoRenderTarget, 0xffffff, 1.0 );\n\n\t\t// render poisson denoise\n\n\t\tthis.pdMaterial.uniforms.cameraProjectionMatrixInverse.value.copy( this.camera.projectionMatrixInverse );\n\t\tthis._renderPass( renderer, this.pdMaterial, this.pdRenderTarget, 0xffffff, 1.0 );\n\n\t\t// output result to screen\n\n\t\tswitch ( this.output ) {\n\n\t\t\tcase GTAOPass.OUTPUT.Off:\n\t\t\t\tbreak;\n\n\t\t\tcase GTAOPass.OUTPUT.Diffuse:\n\n\t\t\t\tthis.copyMaterial.uniforms.tDiffuse.value = readBuffer.texture;\n\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\tthis._renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tcase GTAOPass.OUTPUT.AO:\n\n\t\t\t\tthis.copyMaterial.uniforms.tDiffuse.value = this.gtaoRenderTarget.texture;\n\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\tthis._renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tcase GTAOPass.OUTPUT.Denoise:\n\n\t\t\t\tthis.copyMaterial.uniforms.tDiffuse.value = this.pdRenderTarget.texture;\n\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\tthis._renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tcase GTAOPass.OUTPUT.Depth:\n\n\t\t\t\tthis.depthRenderMaterial.uniforms.cameraNear.value = this.camera.near;\n\t\t\t\tthis.depthRenderMaterial.uniforms.cameraFar.value = this.camera.far;\n\t\t\t\tthis._renderPass( renderer, this.depthRenderMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tcase GTAOPass.OUTPUT.Normal:\n\n\t\t\t\tthis.copyMaterial.uniforms.tDiffuse.value = this.normalRenderTarget.texture;\n\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\tthis._renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tcase GTAOPass.OUTPUT.Default:\n\n\t\t\t\tthis.copyMaterial.uniforms.tDiffuse.value = readBuffer.texture;\n\t\t\t\tthis.copyMaterial.blending = NoBlending;\n\t\t\t\tthis._renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\tthis.blendMaterial.uniforms.intensity.value = this.blendIntensity;\n\t\t\t\tthis.blendMaterial.uniforms.tDiffuse.value = this.pdRenderTarget.texture;\n\t\t\t\tthis._renderPass( renderer, this.blendMaterial, this.renderToScreen ? null : writeBuffer );\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn( 'THREE.GTAOPass: Unknown output type.' );\n\n\t\t}\n\n\t}\n\n\t// internals\n\n\t_renderPass( renderer, passMaterial, renderTarget, clearColor, clearAlpha ) {\n\n\t\t// save original state\n\t\trenderer.getClearColor( this._originalClearColor );\n\t\tconst originalClearAlpha = renderer.getClearAlpha();\n\t\tconst originalAutoClear = renderer.autoClear;\n\n\t\trenderer.setRenderTarget( renderTarget );\n\n\t\t// setup pass state\n\t\trenderer.autoClear = false;\n\t\tif ( ( clearColor !== undefined ) && ( clearColor !== null ) ) {\n\n\t\t\trenderer.setClearColor( clearColor );\n\t\t\trenderer.setClearAlpha( clearAlpha || 0.0 );\n\t\t\trenderer.clear();\n\n\t\t}\n\n\t\tthis._fsQuad.material = passMaterial;\n\t\tthis._fsQuad.render( renderer );\n\n\t\t// restore original state\n\t\trenderer.autoClear = originalAutoClear;\n\t\trenderer.setClearColor( this._originalClearColor );\n\t\trenderer.setClearAlpha( originalClearAlpha );\n\n\t}\n\n\t_renderOverride( renderer, overrideMaterial, renderTarget, clearColor, clearAlpha ) {\n\n\t\trenderer.getClearColor( this._originalClearColor );\n\t\tconst originalClearAlpha = renderer.getClearAlpha();\n\t\tconst originalAutoClear = renderer.autoClear;\n\n\t\trenderer.setRenderTarget( renderTarget );\n\t\trenderer.autoClear = false;\n\n\t\tclearColor = overrideMaterial.clearColor || clearColor;\n\t\tclearAlpha = overrideMaterial.clearAlpha || clearAlpha;\n\n\t\tif ( ( clearColor !== undefined ) && ( clearColor !== null ) ) {\n\n\t\t\trenderer.setClearColor( clearColor );\n\t\t\trenderer.setClearAlpha( clearAlpha || 0.0 );\n\t\t\trenderer.clear();\n\n\t\t}\n\n\t\tthis.scene.overrideMaterial = overrideMaterial;\n\t\trenderer.render( this.scene, this.camera );\n\t\tthis.scene.overrideMaterial = null;\n\n\t\trenderer.autoClear = originalAutoClear;\n\t\trenderer.setClearColor( this._originalClearColor );\n\t\trenderer.setClearAlpha( originalClearAlpha );\n\n\t}\n\n\t_overrideVisibility() {\n\n\t\tconst scene = this.scene;\n\t\tconst cache = this._visibilityCache;\n\n\t\tscene.traverse( function ( object ) {\n\n\t\t\tif ( ( object.isPoints || object.isLine || object.isLine2 ) && object.visible ) {\n\n\t\t\t\tobject.visible = false;\n\t\t\t\tcache.push( object );\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\t_restoreVisibility() {\n\n\t\tconst cache = this._visibilityCache;\n\n\t\tfor ( let i = 0; i < cache.length; i ++ ) {\n\n\t\t\tcache[ i ].visible = true;\n\n\t\t}\n\n\t\tcache.length = 0;\n\n\t}\n\n\t_generateNoise( size = 64 ) {\n\n\t\tconst simplex = new SimplexNoise();\n\n\t\tconst arraySize = size * size * 4;\n\t\tconst data = new Uint8Array( arraySize );\n\n\t\tfor ( let i = 0; i < size; i ++ ) {\n\n\t\t\tfor ( let j = 0; j < size; j ++ ) {\n\n\t\t\t\tconst x = i;\n\t\t\t\tconst y = j;\n\n\t\t\t\tdata[ ( i * size + j ) * 4 ] = ( simplex.noise( x, y ) * 0.5 + 0.5 ) * 255;\n\t\t\t\tdata[ ( i * size + j ) * 4 + 1 ] = ( simplex.noise( x + size, y ) * 0.5 + 0.5 ) * 255;\n\t\t\t\tdata[ ( i * size + j ) * 4 + 2 ] = ( simplex.noise( x, y + size ) * 0.5 + 0.5 ) * 255;\n\t\t\t\tdata[ ( i * size + j ) * 4 + 3 ] = ( simplex.noise( x + size, y + size ) * 0.5 + 0.5 ) * 255;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst noiseTexture = new DataTexture( data, size, size, RGBAFormat, UnsignedByteType );\n\t\tnoiseTexture.wrapS = RepeatWrapping;\n\t\tnoiseTexture.wrapT = RepeatWrapping;\n\t\tnoiseTexture.needsUpdate = true;\n\n\t\treturn noiseTexture;\n\n\t}\n\n}\n\nGTAOPass.OUTPUT = {\n\t'Off': - 1,\n\t'Default': 0,\n\t'Diffuse': 1,\n\t'Depth': 2,\n\t'Normal': 3,\n\t'AO': 4,\n\t'Denoise': 5,\n};\n\nexport { GTAOPass };\n","import {\n\tColor\n} from 'three';\n\n/**\n * @module LuminosityHighPassShader\n * @three_import import { LuminosityHighPassShader } from 'three/addons/shaders/LuminosityHighPassShader.js';\n */\n\n/**\n * Luminosity high pass shader.\n *\n * @constant\n * @type {ShaderMaterial~Shader}\n */\nconst LuminosityHighPassShader = {\n\n\tname: 'LuminosityHighPassShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'luminosityThreshold': { value: 1.0 },\n\t\t'smoothWidth': { value: 1.0 },\n\t\t'defaultColor': { value: new Color( 0x000000 ) },\n\t\t'defaultOpacity': { value: 0.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform vec3 defaultColor;\n\t\tuniform float defaultOpacity;\n\t\tuniform float luminosityThreshold;\n\t\tuniform float smoothWidth;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 texel = texture2D( tDiffuse, vUv );\n\n\t\t\tfloat v = luminance( texel.xyz );\n\n\t\t\tvec4 outputColor = vec4( defaultColor.rgb, defaultOpacity );\n\n\t\t\tfloat alpha = smoothstep( luminosityThreshold, luminosityThreshold + smoothWidth, v );\n\n\t\t\tgl_FragColor = mix( outputColor, texel, alpha );\n\n\t\t}`\n\n};\n\nexport { LuminosityHighPassShader };\n","import {\n\tAdditiveBlending,\n\tColor,\n\tHalfFloatType,\n\tMeshBasicMaterial,\n\tShaderMaterial,\n\tUniformsUtils,\n\tVector2,\n\tVector3,\n\tWebGLRenderTarget\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { CopyShader } from '../shaders/CopyShader.js';\nimport { LuminosityHighPassShader } from '../shaders/LuminosityHighPassShader.js';\n\n/**\n * This pass is inspired by the bloom pass of Unreal Engine. It creates a\n * mip map chain of bloom textures and blurs them with different radii. Because\n * of the weighted combination of mips, and because larger blurs are done on\n * higher mips, this effect provides good quality and performance.\n *\n * When using this pass, tone mapping must be enabled in the renderer settings.\n *\n * Reference:\n * - [Bloom in Unreal Engine](https://docs.unrealengine.com/latest/INT/Engine/Rendering/PostProcessEffects/Bloom/)\n *\n * ```js\n * const resolution = new THREE.Vector2( window.innerWidth, window.innerHeight );\n * const bloomPass = new UnrealBloomPass( resolution, 1.5, 0.4, 0.85 );\n * composer.addPass( bloomPass );\n * ```\n *\n * @augments Pass\n * @three_import import { UnrealBloomPass } from 'three/addons/postprocessing/UnrealBloomPass.js';\n */\nclass UnrealBloomPass extends Pass {\n\n\t/**\n\t * Constructs a new Unreal Bloom pass.\n\t *\n\t * @param {Vector2} [resolution] - The effect's resolution.\n\t * @param {number} [strength=1] - The Bloom strength.\n\t * @param {number} radius - The Bloom radius.\n\t * @param {number} threshold - The luminance threshold limits which bright areas contribute to the Bloom effect.\n\t */\n\tconstructor( resolution, strength = 1, radius, threshold ) {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The Bloom strength.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.strength = strength;\n\n\t\t/**\n\t\t * The Bloom radius.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.radius = radius;\n\n\t\t/**\n\t\t * The luminance threshold limits which bright areas contribute to the Bloom effect.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.threshold = threshold;\n\n\t\t/**\n\t\t * The effect's resolution.\n\t\t *\n\t\t * @type {Vector2}\n\t\t * @default (256,256)\n\t\t */\n\t\tthis.resolution = ( resolution !== undefined ) ? new Vector2( resolution.x, resolution.y ) : new Vector2( 256, 256 );\n\n\t\t/**\n\t\t * The effect's clear color\n\t\t *\n\t\t * @type {Color}\n\t\t * @default (0,0,0)\n\t\t */\n\t\tthis.clearColor = new Color( 0, 0, 0 );\n\n\t\t/**\n\t\t * Overwritten to disable the swap.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.needsSwap = false;\n\n\t\t// internals\n\n\t\t// render targets\n\t\tthis.renderTargetsHorizontal = [];\n\t\tthis.renderTargetsVertical = [];\n\t\tthis.nMips = 5;\n\t\tlet resx = Math.round( this.resolution.x / 2 );\n\t\tlet resy = Math.round( this.resolution.y / 2 );\n\n\t\tthis.renderTargetBright = new WebGLRenderTarget( resx, resy, { type: HalfFloatType } );\n\t\tthis.renderTargetBright.texture.name = 'UnrealBloomPass.bright';\n\t\tthis.renderTargetBright.texture.generateMipmaps = false;\n\n\t\tfor ( let i = 0; i < this.nMips; i ++ ) {\n\n\t\t\tconst renderTargetHorizontal = new WebGLRenderTarget( resx, resy, { type: HalfFloatType } );\n\n\t\t\trenderTargetHorizontal.texture.name = 'UnrealBloomPass.h' + i;\n\t\t\trenderTargetHorizontal.texture.generateMipmaps = false;\n\n\t\t\tthis.renderTargetsHorizontal.push( renderTargetHorizontal );\n\n\t\t\tconst renderTargetVertical = new WebGLRenderTarget( resx, resy, { type: HalfFloatType } );\n\n\t\t\trenderTargetVertical.texture.name = 'UnrealBloomPass.v' + i;\n\t\t\trenderTargetVertical.texture.generateMipmaps = false;\n\n\t\t\tthis.renderTargetsVertical.push( renderTargetVertical );\n\n\t\t\tresx = Math.round( resx / 2 );\n\n\t\t\tresy = Math.round( resy / 2 );\n\n\t\t}\n\n\t\t// luminosity high pass material\n\n\t\tconst highPassShader = LuminosityHighPassShader;\n\t\tthis.highPassUniforms = UniformsUtils.clone( highPassShader.uniforms );\n\n\t\tthis.highPassUniforms[ 'luminosityThreshold' ].value = threshold;\n\t\tthis.highPassUniforms[ 'smoothWidth' ].value = 0.01;\n\n\t\tthis.materialHighPassFilter = new ShaderMaterial( {\n\t\t\tuniforms: this.highPassUniforms,\n\t\t\tvertexShader: highPassShader.vertexShader,\n\t\t\tfragmentShader: highPassShader.fragmentShader\n\t\t} );\n\n\t\t// gaussian blur materials\n\n\t\tthis.separableBlurMaterials = [];\n\t\t// These sizes have been changed to account for the altered coefficients-calculation to avoid blockiness,\n\t\t// while retaining the same blur-strength. For details see https://github.com/mrdoob/three.js/pull/31528\n\t\tconst kernelSizeArray = [ 6, 10, 14, 18, 22 ];\n\t\tresx = Math.round( this.resolution.x / 2 );\n\t\tresy = Math.round( this.resolution.y / 2 );\n\n\t\tfor ( let i = 0; i < this.nMips; i ++ ) {\n\n\t\t\tthis.separableBlurMaterials.push( this._getSeparableBlurMaterial( kernelSizeArray[ i ] ) );\n\n\t\t\tthis.separableBlurMaterials[ i ].uniforms[ 'invSize' ].value = new Vector2( 1 / resx, 1 / resy );\n\n\t\t\tresx = Math.round( resx / 2 );\n\n\t\t\tresy = Math.round( resy / 2 );\n\n\t\t}\n\n\t\t// composite material\n\n\t\tthis.compositeMaterial = this._getCompositeMaterial( this.nMips );\n\t\tthis.compositeMaterial.uniforms[ 'blurTexture1' ].value = this.renderTargetsVertical[ 0 ].texture;\n\t\tthis.compositeMaterial.uniforms[ 'blurTexture2' ].value = this.renderTargetsVertical[ 1 ].texture;\n\t\tthis.compositeMaterial.uniforms[ 'blurTexture3' ].value = this.renderTargetsVertical[ 2 ].texture;\n\t\tthis.compositeMaterial.uniforms[ 'blurTexture4' ].value = this.renderTargetsVertical[ 3 ].texture;\n\t\tthis.compositeMaterial.uniforms[ 'blurTexture5' ].value = this.renderTargetsVertical[ 4 ].texture;\n\t\tthis.compositeMaterial.uniforms[ 'bloomStrength' ].value = strength;\n\t\tthis.compositeMaterial.uniforms[ 'bloomRadius' ].value = 0.1;\n\n\t\tconst bloomFactors = [ 1.0, 0.8, 0.6, 0.4, 0.2 ];\n\t\tthis.compositeMaterial.uniforms[ 'bloomFactors' ].value = bloomFactors;\n\t\tthis.bloomTintColors = [ new Vector3( 1, 1, 1 ), new Vector3( 1, 1, 1 ), new Vector3( 1, 1, 1 ), new Vector3( 1, 1, 1 ), new Vector3( 1, 1, 1 ) ];\n\t\tthis.compositeMaterial.uniforms[ 'bloomTintColors' ].value = this.bloomTintColors;\n\n\t\t// blend material\n\n\t\tthis.copyUniforms = UniformsUtils.clone( CopyShader.uniforms );\n\n\t\tthis.blendMaterial = new ShaderMaterial( {\n\t\t\tuniforms: this.copyUniforms,\n\t\t\tvertexShader: CopyShader.vertexShader,\n\t\t\tfragmentShader: CopyShader.fragmentShader,\n\t\t\tblending: AdditiveBlending,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false,\n\t\t\ttransparent: true\n\t\t} );\n\n\t\tthis._oldClearColor = new Color();\n\t\tthis._oldClearAlpha = 1;\n\n\t\tthis._basic = new MeshBasicMaterial();\n\n\t\tthis._fsQuad = new FullScreenQuad( null );\n\n\t}\n\n\t/**\n\t * Frees the GPU-related resources allocated by this instance. Call this\n\t * method whenever the pass is no longer used in your app.\n\t */\n\tdispose() {\n\n\t\tfor ( let i = 0; i < this.renderTargetsHorizontal.length; i ++ ) {\n\n\t\t\tthis.renderTargetsHorizontal[ i ].dispose();\n\n\t\t}\n\n\t\tfor ( let i = 0; i < this.renderTargetsVertical.length; i ++ ) {\n\n\t\t\tthis.renderTargetsVertical[ i ].dispose();\n\n\t\t}\n\n\t\tthis.renderTargetBright.dispose();\n\n\t\t//\n\n\t\tfor ( let i = 0; i < this.separableBlurMaterials.length; i ++ ) {\n\n\t\t\tthis.separableBlurMaterials[ i ].dispose();\n\n\t\t}\n\n\t\tthis.compositeMaterial.dispose();\n\t\tthis.blendMaterial.dispose();\n\t\tthis._basic.dispose();\n\n\t\t//\n\n\t\tthis._fsQuad.dispose();\n\n\t}\n\n\t/**\n\t * Sets the size of the pass.\n\t *\n\t * @param {number} width - The width to set.\n\t * @param {number} height - The height to set.\n\t */\n\tsetSize( width, height ) {\n\n\t\tlet resx = Math.round( width / 2 );\n\t\tlet resy = Math.round( height / 2 );\n\n\t\tthis.renderTargetBright.setSize( resx, resy );\n\n\t\tfor ( let i = 0; i < this.nMips; i ++ ) {\n\n\t\t\tthis.renderTargetsHorizontal[ i ].setSize( resx, resy );\n\t\t\tthis.renderTargetsVertical[ i ].setSize( resx, resy );\n\n\t\t\tthis.separableBlurMaterials[ i ].uniforms[ 'invSize' ].value = new Vector2( 1 / resx, 1 / resy );\n\n\t\t\tresx = Math.round( resx / 2 );\n\t\t\tresy = Math.round( resy / 2 );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Performs the Bloom pass.\n\t *\n\t * @param {WebGLRenderer} renderer - The renderer.\n\t * @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering\n\t * destination for the pass.\n\t * @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the\n\t * previous pass from this buffer.\n\t * @param {number} deltaTime - The delta time in seconds.\n\t * @param {boolean} maskActive - Whether masking is active or not.\n\t */\n\trender( renderer, writeBuffer, readBuffer, deltaTime, maskActive ) {\n\n\t\trenderer.getClearColor( this._oldClearColor );\n\t\tthis._oldClearAlpha = renderer.getClearAlpha();\n\t\tconst oldAutoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\trenderer.setClearColor( this.clearColor, 0 );\n\n\t\tif ( maskActive ) renderer.state.buffers.stencil.setTest( false );\n\n\t\t// Render input to screen\n\n\t\tif ( this.renderToScreen ) {\n\n\t\t\tthis._fsQuad.material = this._basic;\n\t\t\tthis._basic.map = readBuffer.texture;\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\trenderer.clear();\n\t\t\tthis._fsQuad.render( renderer );\n\n\t\t}\n\n\t\t// 1. Extract Bright Areas\n\n\t\tthis.highPassUniforms[ 'tDiffuse' ].value = readBuffer.texture;\n\t\tthis.highPassUniforms[ 'luminosityThreshold' ].value = this.threshold;\n\t\tthis._fsQuad.material = this.materialHighPassFilter;\n\n\t\trenderer.setRenderTarget( this.renderTargetBright );\n\t\trenderer.clear();\n\t\tthis._fsQuad.render( renderer );\n\n\t\t// 2. Blur All the mips progressively\n\n\t\tlet inputRenderTarget = this.renderTargetBright;\n\n\t\tfor ( let i = 0; i < this.nMips; i ++ ) {\n\n\t\t\tthis._fsQuad.material = this.separableBlurMaterials[ i ];\n\n\t\t\tthis.separableBlurMaterials[ i ].uniforms[ 'colorTexture' ].value = inputRenderTarget.texture;\n\t\t\tthis.separableBlurMaterials[ i ].uniforms[ 'direction' ].value = UnrealBloomPass.BlurDirectionX;\n\t\t\trenderer.setRenderTarget( this.renderTargetsHorizontal[ i ] );\n\t\t\trenderer.clear();\n\t\t\tthis._fsQuad.render( renderer );\n\n\t\t\tthis.separableBlurMaterials[ i ].uniforms[ 'colorTexture' ].value = this.renderTargetsHorizontal[ i ].texture;\n\t\t\tthis.separableBlurMaterials[ i ].uniforms[ 'direction' ].value = UnrealBloomPass.BlurDirectionY;\n\t\t\trenderer.setRenderTarget( this.renderTargetsVertical[ i ] );\n\t\t\trenderer.clear();\n\t\t\tthis._fsQuad.render( renderer );\n\n\t\t\tinputRenderTarget = this.renderTargetsVertical[ i ];\n\n\t\t}\n\n\t\t// Composite All the mips\n\n\t\tthis._fsQuad.material = this.compositeMaterial;\n\t\tthis.compositeMaterial.uniforms[ 'bloomStrength' ].value = this.strength;\n\t\tthis.compositeMaterial.uniforms[ 'bloomRadius' ].value = this.radius;\n\t\tthis.compositeMaterial.uniforms[ 'bloomTintColors' ].value = this.bloomTintColors;\n\n\t\trenderer.setRenderTarget( this.renderTargetsHorizontal[ 0 ] );\n\t\trenderer.clear();\n\t\tthis._fsQuad.render( renderer );\n\n\t\t// Blend it additively over the input texture\n\n\t\tthis._fsQuad.material = this.blendMaterial;\n\t\tthis.copyUniforms[ 'tDiffuse' ].value = this.renderTargetsHorizontal[ 0 ].texture;\n\n\t\tif ( maskActive ) renderer.state.buffers.stencil.setTest( true );\n\n\t\tif ( this.renderToScreen ) {\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\tthis._fsQuad.render( renderer );\n\n\t\t} else {\n\n\t\t\trenderer.setRenderTarget( readBuffer );\n\t\t\tthis._fsQuad.render( renderer );\n\n\t\t}\n\n\t\t// Restore renderer settings\n\n\t\trenderer.setClearColor( this._oldClearColor, this._oldClearAlpha );\n\t\trenderer.autoClear = oldAutoClear;\n\n\t}\n\n\t// internals\n\n\t_getSeparableBlurMaterial( kernelRadius ) {\n\n\t\tconst coefficients = [];\n\t\tconst sigma = kernelRadius / 3;\n\n\t\tfor ( let i = 0; i < kernelRadius; i ++ ) {\n\n\t\t\tcoefficients.push( 0.39894 * Math.exp( - 0.5 * i * i / ( sigma * sigma ) ) / sigma );\n\n\t\t}\n\n\t\treturn new ShaderMaterial( {\n\n\t\t\tdefines: {\n\t\t\t\t'KERNEL_RADIUS': kernelRadius\n\t\t\t},\n\n\t\t\tuniforms: {\n\t\t\t\t'colorTexture': { value: null },\n\t\t\t\t'invSize': { value: new Vector2( 0.5, 0.5 ) }, // inverse texture size\n\t\t\t\t'direction': { value: new Vector2( 0.5, 0.5 ) },\n\t\t\t\t'gaussianCoefficients': { value: coefficients } // precomputed Gaussian coefficients\n\t\t\t},\n\n\t\t\tvertexShader:\n\t\t\t\t`varying vec2 vUv;\n\t\t\t\tvoid main() {\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t}`,\n\n\t\t\tfragmentShader:\n\t\t\t\t`#include <common>\n\t\t\t\tvarying vec2 vUv;\n\t\t\t\tuniform sampler2D colorTexture;\n\t\t\t\tuniform vec2 invSize;\n\t\t\t\tuniform vec2 direction;\n\t\t\t\tuniform float gaussianCoefficients[KERNEL_RADIUS];\n\n\t\t\t\tvoid main() {\n\t\t\t\t\tfloat weightSum = gaussianCoefficients[0];\n\t\t\t\t\tvec3 diffuseSum = texture2D( colorTexture, vUv ).rgb * weightSum;\n\t\t\t\t\tfor( int i = 1; i < KERNEL_RADIUS; i ++ ) {\n\t\t\t\t\t\tfloat x = float(i);\n\t\t\t\t\t\tfloat w = gaussianCoefficients[i];\n\t\t\t\t\t\tvec2 uvOffset = direction * invSize * x;\n\t\t\t\t\t\tvec3 sample1 = texture2D( colorTexture, vUv + uvOffset ).rgb;\n\t\t\t\t\t\tvec3 sample2 = texture2D( colorTexture, vUv - uvOffset ).rgb;\n\t\t\t\t\t\tdiffuseSum += ( sample1 + sample2 ) * w;\n\t\t\t\t\t}\n\t\t\t\t\tgl_FragColor = vec4( diffuseSum, 1.0 );\n\t\t\t\t}`\n\t\t} );\n\n\t}\n\n\t_getCompositeMaterial( nMips ) {\n\n\t\treturn new ShaderMaterial( {\n\n\t\t\tdefines: {\n\t\t\t\t'NUM_MIPS': nMips\n\t\t\t},\n\n\t\t\tuniforms: {\n\t\t\t\t'blurTexture1': { value: null },\n\t\t\t\t'blurTexture2': { value: null },\n\t\t\t\t'blurTexture3': { value: null },\n\t\t\t\t'blurTexture4': { value: null },\n\t\t\t\t'blurTexture5': { value: null },\n\t\t\t\t'bloomStrength': { value: 1.0 },\n\t\t\t\t'bloomFactors': { value: null },\n\t\t\t\t'bloomTintColors': { value: null },\n\t\t\t\t'bloomRadius': { value: 0.0 }\n\t\t\t},\n\n\t\t\tvertexShader:\n\t\t\t\t`varying vec2 vUv;\n\t\t\t\tvoid main() {\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t}`,\n\n\t\t\tfragmentShader:\n\t\t\t\t`varying vec2 vUv;\n\t\t\t\tuniform sampler2D blurTexture1;\n\t\t\t\tuniform sampler2D blurTexture2;\n\t\t\t\tuniform sampler2D blurTexture3;\n\t\t\t\tuniform sampler2D blurTexture4;\n\t\t\t\tuniform sampler2D blurTexture5;\n\t\t\t\tuniform float bloomStrength;\n\t\t\t\tuniform float bloomRadius;\n\t\t\t\tuniform float bloomFactors[NUM_MIPS];\n\t\t\t\tuniform vec3 bloomTintColors[NUM_MIPS];\n\n\t\t\t\tfloat lerpBloomFactor(const in float factor) {\n\t\t\t\t\tfloat mirrorFactor = 1.2 - factor;\n\t\t\t\t\treturn mix(factor, mirrorFactor, bloomRadius);\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\t\t\t\t\tgl_FragColor = bloomStrength * ( lerpBloomFactor(bloomFactors[0]) * vec4(bloomTintColors[0], 1.0) * texture2D(blurTexture1, vUv) +\n\t\t\t\t\t\tlerpBloomFactor(bloomFactors[1]) * vec4(bloomTintColors[1], 1.0) * texture2D(blurTexture2, vUv) +\n\t\t\t\t\t\tlerpBloomFactor(bloomFactors[2]) * vec4(bloomTintColors[2], 1.0) * texture2D(blurTexture3, vUv) +\n\t\t\t\t\t\tlerpBloomFactor(bloomFactors[3]) * vec4(bloomTintColors[3], 1.0) * texture2D(blurTexture4, vUv) +\n\t\t\t\t\t\tlerpBloomFactor(bloomFactors[4]) * vec4(bloomTintColors[4], 1.0) * texture2D(blurTexture5, vUv) );\n\t\t\t\t}`\n\t\t} );\n\n\t}\n\n}\n\nUnrealBloomPass.BlurDirectionX = new Vector2( 1.0, 0.0 );\nUnrealBloomPass.BlurDirectionY = new Vector2( 0.0, 1.0 );\n\nexport { UnrealBloomPass };\n","/**\n * @module OutputShader\n * @three_import import { OutputShader } from 'three/addons/shaders/OutputShader.js';\n */\n\n/**\n * Performs tone mapping and color space conversion for\n * FX workflows.\n *\n * Used by {@link OutputPass}.\n *\n * @constant\n * @type {ShaderMaterial~Shader}\n */\nconst OutputShader = {\n\n\tname: 'OutputShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'toneMappingExposure': { value: 1 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\t\tprecision highp float;\n\n\t\tuniform mat4 modelViewMatrix;\n\t\tuniform mat4 projectionMatrix;\n\n\t\tattribute vec3 position;\n\t\tattribute vec2 uv;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tprecision highp float;\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\t#include <tonemapping_pars_fragment>\n\t\t#include <colorspace_pars_fragment>\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tgl_FragColor = texture2D( tDiffuse, vUv );\n\n\t\t\t// tone mapping\n\n\t\t\t#ifdef LINEAR_TONE_MAPPING\n\n\t\t\t\tgl_FragColor.rgb = LinearToneMapping( gl_FragColor.rgb );\n\n\t\t\t#elif defined( REINHARD_TONE_MAPPING )\n\n\t\t\t\tgl_FragColor.rgb = ReinhardToneMapping( gl_FragColor.rgb );\n\n\t\t\t#elif defined( CINEON_TONE_MAPPING )\n\n\t\t\t\tgl_FragColor.rgb = CineonToneMapping( gl_FragColor.rgb );\n\n\t\t\t#elif defined( ACES_FILMIC_TONE_MAPPING )\n\n\t\t\t\tgl_FragColor.rgb = ACESFilmicToneMapping( gl_FragColor.rgb );\n\n\t\t\t#elif defined( AGX_TONE_MAPPING )\n\n\t\t\t\tgl_FragColor.rgb = AgXToneMapping( gl_FragColor.rgb );\n\n\t\t\t#elif defined( NEUTRAL_TONE_MAPPING )\n\n\t\t\t\tgl_FragColor.rgb = NeutralToneMapping( gl_FragColor.rgb );\n\n\t\t\t#elif defined( CUSTOM_TONE_MAPPING )\n\n\t\t\t\tgl_FragColor.rgb = CustomToneMapping( gl_FragColor.rgb );\n\n\t\t\t#endif\n\n\t\t\t// color space\n\n\t\t\t#ifdef SRGB_TRANSFER\n\n\t\t\t\tgl_FragColor = sRGBTransferOETF( gl_FragColor );\n\n\t\t\t#endif\n\n\t\t}`\n\n};\n\nexport { OutputShader };\n","import {\n\tColorManagement,\n\tRawShaderMaterial,\n\tUniformsUtils,\n\tLinearToneMapping,\n\tReinhardToneMapping,\n\tCineonToneMapping,\n\tAgXToneMapping,\n\tACESFilmicToneMapping,\n\tNeutralToneMapping,\n\tCustomToneMapping,\n\tSRGBTransfer\n} from 'three';\nimport { Pass, FullScreenQuad } from './Pass.js';\nimport { OutputShader } from '../shaders/OutputShader.js';\n\n/**\n * This pass is responsible for including tone mapping and color space conversion\n * into your pass chain. In most cases, this pass should be included at the end\n * of each pass chain. If a pass requires sRGB input (e.g. like FXAA), the pass\n * must follow `OutputPass` in the pass chain.\n *\n * The tone mapping and color space settings are extracted from the renderer.\n *\n * ```js\n * const outputPass = new OutputPass();\n * composer.addPass( outputPass );\n * ```\n *\n * @augments Pass\n * @three_import import { OutputPass } from 'three/addons/postprocessing/OutputPass.js';\n */\nclass OutputPass extends Pass {\n\n\t/**\n\t * Constructs a new output pass.\n\t */\n\tconstructor() {\n\n\t\tsuper();\n\n\t\t/**\n\t\t * The pass uniforms.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.uniforms = UniformsUtils.clone( OutputShader.uniforms );\n\n\t\t/**\n\t\t * The pass material.\n\t\t *\n\t\t * @type {RawShaderMaterial}\n\t\t */\n\t\tthis.material = new RawShaderMaterial( {\n\t\t\tname: OutputShader.name,\n\t\t\tuniforms: this.uniforms,\n\t\t\tvertexShader: OutputShader.vertexShader,\n\t\t\tfragmentShader: OutputShader.fragmentShader\n\t\t} );\n\n\t\t// internals\n\n\t\tthis._fsQuad = new FullScreenQuad( this.material );\n\n\t\tthis._outputColorSpace = null;\n\t\tthis._toneMapping = null;\n\n\t}\n\n\t/**\n\t * Performs the output pass.\n\t *\n\t * @param {WebGLRenderer} renderer - The renderer.\n\t * @param {WebGLRenderTarget} writeBuffer - The write buffer. This buffer is intended as the rendering\n\t * destination for the pass.\n\t * @param {WebGLRenderTarget} readBuffer - The read buffer. The pass can access the result from the\n\t * previous pass from this buffer.\n\t * @param {number} deltaTime - The delta time in seconds.\n\t * @param {boolean} maskActive - Whether masking is active or not.\n\t */\n\trender( renderer, writeBuffer, readBuffer/*, deltaTime, maskActive */ ) {\n\n\t\tthis.uniforms[ 'tDiffuse' ].value = readBuffer.texture;\n\t\tthis.uniforms[ 'toneMappingExposure' ].value = renderer.toneMappingExposure;\n\n\t\t// rebuild defines if required\n\n\t\tif ( this._outputColorSpace !== renderer.outputColorSpace || this._toneMapping !== renderer.toneMapping ) {\n\n\t\t\tthis._outputColorSpace = renderer.outputColorSpace;\n\t\t\tthis._toneMapping = renderer.toneMapping;\n\n\t\t\tthis.material.defines = {};\n\n\t\t\tif ( ColorManagement.getTransfer( this._outputColorSpace ) === SRGBTransfer ) this.material.defines.SRGB_TRANSFER = '';\n\n\t\t\tif ( this._toneMapping === LinearToneMapping ) this.material.defines.LINEAR_TONE_MAPPING = '';\n\t\t\telse if ( this._toneMapping === ReinhardToneMapping ) this.material.defines.REINHARD_TONE_MAPPING = '';\n\t\t\telse if ( this._toneMapping === CineonToneMapping ) this.material.defines.CINEON_TONE_MAPPING = '';\n\t\t\telse if ( this._toneMapping === ACESFilmicToneMapping ) this.material.defines.ACES_FILMIC_TONE_MAPPING = '';\n\t\t\telse if ( this._toneMapping === AgXToneMapping ) this.material.defines.AGX_TONE_MAPPING = '';\n\t\t\telse if ( this._toneMapping === NeutralToneMapping ) this.material.defines.NEUTRAL_TONE_MAPPING = '';\n\t\t\telse if ( this._toneMapping === CustomToneMapping ) this.material.defines.CUSTOM_TONE_MAPPING = '';\n\n\t\t\tthis.material.needsUpdate = true;\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.renderToScreen === true ) {\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\tthis._fsQuad.render( renderer );\n\n\t\t} else {\n\n\t\t\trenderer.setRenderTarget( writeBuffer );\n\t\t\tif ( this.clear ) renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\t\t\tthis._fsQuad.render( renderer );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Frees the GPU-related resources allocated by this instance. Call this\n\t * method whenever the pass is no longer used in your app.\n\t */\n\tdispose() {\n\n\t\tthis.material.dispose();\n\t\tthis._fsQuad.dispose();\n\n\t}\n\n}\n\nexport { OutputPass };\n","import {\n\tVector2\n} from 'three';\n\n/**\n * @module FXAAShader\n * @three_import import { FXAAShader } from 'three/addons/shaders/FXAAShader.js';\n */\n\n/**\n * FXAA algorithm from NVIDIA, C# implementation by Jasper Flick, GLSL port by Dave Hoskins.\n *\n * References:\n * - {@link http://developer.download.nvidia.com/assets/gamedev/files/sdk/11/FXAA_WhitePaper.pdf}.\n * - {@link https://catlikecoding.com/unity/tutorials/advanced-rendering/fxaa/}.\n *\n * @constant\n * @type {ShaderMaterial~Shader}\n */\nconst FXAAShader = {\n\n\tname: 'FXAAShader',\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'resolution': { value: new Vector2( 1 / 1024, 1 / 512 ) }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform vec2 resolution;\n\t\tvarying vec2 vUv;\n\n\t\t#define EDGE_STEP_COUNT 6\n\t\t#define EDGE_GUESS 8.0\n\t\t#define EDGE_STEPS 1.0, 1.5, 2.0, 2.0, 2.0, 4.0\n\t\tconst float edgeSteps[EDGE_STEP_COUNT] = float[EDGE_STEP_COUNT]( EDGE_STEPS );\n\n\t\tfloat _ContrastThreshold = 0.0312;\n\t\tfloat _RelativeThreshold = 0.063;\n\t\tfloat _SubpixelBlending = 1.0;\n\n\t\tvec4 Sample( sampler2D tex2D, vec2 uv ) {\n\n\t\t\treturn texture( tex2D, uv );\n\n\t\t}\n\n\t\tfloat SampleLuminance( sampler2D tex2D, vec2 uv ) {\n\n\t\t\treturn dot( Sample( tex2D, uv ).rgb, vec3( 0.3, 0.59, 0.11 ) );\n\n\t\t}\n\n\t\tfloat SampleLuminance( sampler2D tex2D, vec2 texSize, vec2 uv, float uOffset, float vOffset ) {\n\n\t\t\tuv += texSize * vec2(uOffset, vOffset);\n\t\t\treturn SampleLuminance(tex2D, uv);\n\n\t\t}\n\n\t\tstruct LuminanceData {\n\n\t\t\tfloat m, n, e, s, w;\n\t\t\tfloat ne, nw, se, sw;\n\t\t\tfloat highest, lowest, contrast;\n\n\t\t};\n\n\t\tLuminanceData SampleLuminanceNeighborhood( sampler2D tex2D, vec2 texSize, vec2 uv ) {\n\n\t\t\tLuminanceData l;\n\t\t\tl.m = SampleLuminance( tex2D, uv );\n\t\t\tl.n = SampleLuminance( tex2D, texSize, uv, 0.0, 1.0 );\n\t\t\tl.e = SampleLuminance( tex2D, texSize, uv, 1.0, 0.0 );\n\t\t\tl.s = SampleLuminance( tex2D, texSize, uv, 0.0, -1.0 );\n\t\t\tl.w = SampleLuminance( tex2D, texSize, uv, -1.0, 0.0 );\n\n\t\t\tl.ne = SampleLuminance( tex2D, texSize, uv, 1.0, 1.0 );\n\t\t\tl.nw = SampleLuminance( tex2D, texSize, uv, -1.0, 1.0 );\n\t\t\tl.se = SampleLuminance( tex2D, texSize, uv, 1.0, -1.0 );\n\t\t\tl.sw = SampleLuminance( tex2D, texSize, uv, -1.0, -1.0 );\n\n\t\t\tl.highest = max( max( max( max( l.n, l.e ), l.s ), l.w ), l.m );\n\t\t\tl.lowest = min( min( min( min( l.n, l.e ), l.s ), l.w ), l.m );\n\t\t\tl.contrast = l.highest - l.lowest;\n\t\t\treturn l;\n\n\t\t}\n\n\t\tbool ShouldSkipPixel( LuminanceData l ) {\n\n\t\t\tfloat threshold = max( _ContrastThreshold, _RelativeThreshold * l.highest );\n\t\t\treturn l.contrast < threshold;\n\n\t\t}\n\n\t\tfloat DeterminePixelBlendFactor( LuminanceData l ) {\n\n\t\t\tfloat f = 2.0 * ( l.n + l.e + l.s + l.w );\n\t\t\tf += l.ne + l.nw + l.se + l.sw;\n\t\t\tf *= 1.0 / 12.0;\n\t\t\tf = abs( f - l.m );\n\t\t\tf = clamp( f / l.contrast, 0.0, 1.0 );\n\n\t\t\tfloat blendFactor = smoothstep( 0.0, 1.0, f );\n\t\t\treturn blendFactor * blendFactor * _SubpixelBlending;\n\n\t\t}\n\n\t\tstruct EdgeData {\n\n\t\t\tbool isHorizontal;\n\t\t\tfloat pixelStep;\n\t\t\tfloat oppositeLuminance, gradient;\n\n\t\t};\n\n\t\tEdgeData DetermineEdge( vec2 texSize, LuminanceData l ) {\n\n\t\t\tEdgeData e;\n\t\t\tfloat horizontal =\n\t\t\t\tabs( l.n + l.s - 2.0 * l.m ) * 2.0 +\n\t\t\t\tabs( l.ne + l.se - 2.0 * l.e ) +\n\t\t\t\tabs( l.nw + l.sw - 2.0 * l.w );\n\t\t\tfloat vertical =\n\t\t\t\tabs( l.e + l.w - 2.0 * l.m ) * 2.0 +\n\t\t\t\tabs( l.ne + l.nw - 2.0 * l.n ) +\n\t\t\t\tabs( l.se + l.sw - 2.0 * l.s );\n\t\t\te.isHorizontal = horizontal >= vertical;\n\n\t\t\tfloat pLuminance = e.isHorizontal ? l.n : l.e;\n\t\t\tfloat nLuminance = e.isHorizontal ? l.s : l.w;\n\t\t\tfloat pGradient = abs( pLuminance - l.m );\n\t\t\tfloat nGradient = abs( nLuminance - l.m );\n\n\t\t\te.pixelStep = e.isHorizontal ? texSize.y : texSize.x;\n\n\t\t\tif (pGradient < nGradient) {\n\n\t\t\t\te.pixelStep = -e.pixelStep;\n\t\t\t\te.oppositeLuminance = nLuminance;\n\t\t\t\te.gradient = nGradient;\n\n\t\t\t} else {\n\n\t\t\t\te.oppositeLuminance = pLuminance;\n\t\t\t\te.gradient = pGradient;\n\n\t\t\t}\n\n\t\t\treturn e;\n\n\t\t}\n\n\t\tfloat DetermineEdgeBlendFactor( sampler2D tex2D, vec2 texSize, LuminanceData l, EdgeData e, vec2 uv ) {\n\n\t\t\tvec2 uvEdge = uv;\n\t\t\tvec2 edgeStep;\n\t\t\tif (e.isHorizontal) {\n\n\t\t\t\tuvEdge.y += e.pixelStep * 0.5;\n\t\t\t\tedgeStep = vec2( texSize.x, 0.0 );\n\n\t\t\t} else {\n\n\t\t\t\tuvEdge.x += e.pixelStep * 0.5;\n\t\t\t\tedgeStep = vec2( 0.0, texSize.y );\n\n\t\t\t}\n\n\t\t\tfloat edgeLuminance = ( l.m + e.oppositeLuminance ) * 0.5;\n\t\t\tfloat gradientThreshold = e.gradient * 0.25;\n\n\t\t\tvec2 puv = uvEdge + edgeStep * edgeSteps[0];\n\t\t\tfloat pLuminanceDelta = SampleLuminance( tex2D, puv ) - edgeLuminance;\n\t\t\tbool pAtEnd = abs( pLuminanceDelta ) >= gradientThreshold;\n\n\t\t\tfor ( int i = 1; i < EDGE_STEP_COUNT && !pAtEnd; i++ ) {\n\n\t\t\t\tpuv += edgeStep * edgeSteps[i];\n\t\t\t\tpLuminanceDelta = SampleLuminance( tex2D, puv ) - edgeLuminance;\n\t\t\t\tpAtEnd = abs( pLuminanceDelta ) >= gradientThreshold;\n\n\t\t\t}\n\n\t\t\tif ( !pAtEnd ) {\n\n\t\t\t\tpuv += edgeStep * EDGE_GUESS;\n\n\t\t\t}\n\n\t\t\tvec2 nuv = uvEdge - edgeStep * edgeSteps[0];\n\t\t\tfloat nLuminanceDelta = SampleLuminance( tex2D, nuv ) - edgeLuminance;\n\t\t\tbool nAtEnd = abs( nLuminanceDelta ) >= gradientThreshold;\n\n\t\t\tfor ( int i = 1; i < EDGE_STEP_COUNT && !nAtEnd; i++ ) {\n\n\t\t\t\tnuv -= edgeStep * edgeSteps[i];\n\t\t\t\tnLuminanceDelta = SampleLuminance( tex2D, nuv ) - edgeLuminance;\n\t\t\t\tnAtEnd = abs( nLuminanceDelta ) >= gradientThreshold;\n\n\t\t\t}\n\n\t\t\tif ( !nAtEnd ) {\n\n\t\t\t\tnuv -= edgeStep * EDGE_GUESS;\n\n\t\t\t}\n\n\t\t\tfloat pDistance, nDistance;\n\t\t\tif ( e.isHorizontal ) {\n\n\t\t\t\tpDistance = puv.x - uv.x;\n\t\t\t\tnDistance = uv.x - nuv.x;\n\n\t\t\t} else {\n\n\t\t\t\tpDistance = puv.y - uv.y;\n\t\t\t\tnDistance = uv.y - nuv.y;\n\n\t\t\t}\n\n\t\t\tfloat shortestDistance;\n\t\t\tbool deltaSign;\n\t\t\tif ( pDistance <= nDistance ) {\n\n\t\t\t\tshortestDistance = pDistance;\n\t\t\t\tdeltaSign = pLuminanceDelta >= 0.0;\n\n\t\t\t} else {\n\n\t\t\t\tshortestDistance = nDistance;\n\t\t\t\tdeltaSign = nLuminanceDelta >= 0.0;\n\n\t\t\t}\n\n\t\t\tif ( deltaSign == ( l.m - edgeLuminance >= 0.0 ) ) {\n\n\t\t\t\treturn 0.0;\n\n\t\t\t}\n\n\t\t\treturn 0.5 - shortestDistance / ( pDistance + nDistance );\n\n\t\t}\n\n\t\tvec4 ApplyFXAA( sampler2D tex2D, vec2 texSize, vec2 uv ) {\n\n\t\t\tLuminanceData luminance = SampleLuminanceNeighborhood( tex2D, texSize, uv );\n\t\t\tif ( ShouldSkipPixel( luminance ) ) {\n\n\t\t\t\treturn Sample( tex2D, uv );\n\n\t\t\t}\n\n\t\t\tfloat pixelBlend = DeterminePixelBlendFactor( luminance );\n\t\t\tEdgeData edge = DetermineEdge( texSize, luminance );\n\t\t\tfloat edgeBlend = DetermineEdgeBlendFactor( tex2D, texSize, luminance, edge, uv );\n\t\t\tfloat finalBlend = max( pixelBlend, edgeBlend );\n\n\t\t\tif (edge.isHorizontal) {\n\n\t\t\t\tuv.y += edge.pixelStep * finalBlend;\n\n\t\t\t} else {\n\n\t\t\t\tuv.x += edge.pixelStep * finalBlend;\n\n\t\t\t}\n\n\t\t\treturn Sample( tex2D, uv );\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tgl_FragColor = ApplyFXAA( tDiffuse, resolution.xy, vUv );\n\n\t\t}`\n\n};\n\nexport { FXAAShader };\n","export const SaturationShader = {\r\n uniforms: {\r\n 'tDiffuse': { value: null },\r\n 'saturation': { value: 1.2 }, // 饱和度值,1.0为原始,大于1.0增加饱和度\r\n 'contrast': { value: 1.2 } // 对比度值,1.0为原始,大于1.0增加对比度\r\n },\r\n vertexShader: `\r\n varying vec2 vUv;\r\n void main() {\r\n vUv = uv;\r\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n }\r\n `,\r\n fragmentShader: `\r\n uniform sampler2D tDiffuse;\r\n uniform float saturation;\r\n uniform float contrast;\r\n varying vec2 vUv;\r\n \r\n void main() {\r\n vec4 color = texture2D(tDiffuse, vUv);\r\n \r\n // 转换为灰度值用于饱和度调整\r\n float gray = dot(color.rgb, vec3(0.299, 0.587, 0.114));\r\n \r\n // 混合原始颜色和灰度值来调整饱和度\r\n color.rgb = mix(vec3(gray), color.rgb, saturation);\r\n \r\n // 调整对比度\r\n color.rgb = (color.rgb - 0.5) * contrast + 0.5;\r\n \r\n gl_FragColor = color;\r\n }\r\n `\r\n };","import * as THREE from 'three';\r\nimport { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js';\r\nimport { RenderPass } from 'three/examples/jsm/postprocessing/RenderPass.js';\r\nimport { GTAOPass } from 'three/examples/jsm/postprocessing/GTAOPass.js';\r\nimport { UnrealBloomPass } from 'three/examples/jsm/postprocessing/UnrealBloomPass.js';\r\nimport { OutputPass } from 'three/examples/jsm/postprocessing/OutputPass.js';\r\nimport { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js';\r\nimport { FXAAShader } from 'three/examples/jsm/shaders/FXAAShader.js';\r\nimport { SaturationShader } from '../shader/SaturationShader.ts';\r\nexport class ComposerModule{\r\n private engine: any;\r\n public composer: any;\r\n private saturationPass: any; \r\n constructor(engine: any){\r\n this.engine = engine;\r\n\r\n }\r\n\r\n public resize(){\r\n // Update OutlineManager size\r\n const { width, height } = this.engine.deviceModule.getContainerSize();\r\n const pixelRatio = width/height;\r\n \r\n\r\n if (this.composer) {\r\n this.composer.setPixelRatio(pixelRatio);\r\n this.composer.setSize(width, height); \r\n // Update FXAA resolution\r\n const fxaaPass = this.composer.passes.find((pass: any) => pass instanceof ShaderPass && pass.material.uniforms['resolution']) as ShaderPass;\r\n if (fxaaPass) {\r\n fxaaPass.material.uniforms['resolution'].value.x = 1 / (width * pixelRatio);\r\n fxaaPass.material.uniforms['resolution'].value.y = 1 / (height * pixelRatio);\r\n }\r\n }\r\n }\r\n\r\n public init(){\r\n const { width, height } = this.engine.deviceModule.getContainerSize();\r\n const scene = this.engine.scene;\r\n const camera = this.engine.camera;\r\n const renderer = this.engine.renderer;\r\n const pixelRatio = width/height;\r\n\r\n // 创建带有 stencil buffer 的 render target,用于支持剖切补面功能\r\n const renderTarget = new THREE.WebGLRenderTarget(width, height, {\r\n minFilter: THREE.LinearFilter,\r\n magFilter: THREE.LinearFilter,\r\n format: THREE.RGBAFormat,\r\n samples: 4, // 启用多重采样抗锯齿\r\n });\r\n\r\n this.composer = new EffectComposer(renderer, renderTarget);\r\n this.composer.setPixelRatio(pixelRatio);\r\n this.composer.setSize(width, height);\r\n\r\n\r\n // 1. Render Pass (Base Scene)\r\n const renderPass = new RenderPass(scene, camera);\r\n this.composer.addPass(renderPass);\r\n\r\n // 2. GTAO Pass (Ambient Occlusion)\r\n const gtaoPass = new GTAOPass(scene, camera, width, height);\r\n gtaoPass.output = GTAOPass.OUTPUT.Default;\r\n \r\n // 增强效果可见性\r\n // 直接在 Pass 上增加混合强度 (在源码中发现)\r\n gtaoPass.blendIntensity = 0.5; \r\n \r\n // 调整参数以获得 \"3A\" 级逼真阴影\r\n if (gtaoPass.updateGtaoMaterial) {\r\n gtaoPass.updateGtaoMaterial({\r\n radius: 1.0, // 减小半径以获得更紧密、更逼真的接触阴影 (原为 10)\r\n distanceExponent: 1.0, // 衰减\r\n thickness: 1.0, // 厚度\r\n scale: 1.0, // 缩放\r\n distanceFallOff: 1.0, // 距离衰减\r\n screenSpaceRadius: true\r\n });\r\n }\r\n //this.composer.addPass(gtaoPass);\r\n\r\n \r\n\r\n // 4. Unreal Bloom Pass (辉光)\r\n // 为明亮区域(如阳光反射、自发光材质)添加柔和的光晕效果\r\n const bloomPass = new UnrealBloomPass(\r\n new THREE.Vector2(width, height),\r\n 0.1, // 强度\r\n 0.1, // 半径\r\n 0.5 // 阈值\r\n );\r\n // 会导致背景变暗\r\n //this.composer.addPass(bloomPass);\r\n\r\n // 5. Saturation Pass (色彩饱和度和对比度调整)\r\n this.saturationPass = new ShaderPass(SaturationShader);\r\n this.saturationPass.uniforms['saturation'].value = 1.3; // 提高饱和度到1.3\r\n this.saturationPass.uniforms['contrast'].value = 1.1; // 提高对比度到1.15\r\n this.composer.addPass(this.saturationPass);\r\n\r\n // 6. Output Pass (Tone Mapping & Color Correction)\r\n const outputPass = new OutputPass();\r\n this.composer.addPass(outputPass);\r\n\r\n // 7. FXAA Pass (Antialiasing - Last Step)\r\n const fxaaPass = new ShaderPass(FXAAShader);\r\n fxaaPass.material.uniforms['resolution'].value.x = 1 / (width * pixelRatio);\r\n fxaaPass.material.uniforms['resolution'].value.y = 1 / (height * pixelRatio);\r\n this.composer.addPass(fxaaPass);\r\n\r\n }\r\n\r\n\r\n}","/*!\n\nJSZip v3.10.1 - A JavaScript class for generating and reading zip files\n<http://stuartk.com/jszip>\n\n(c) 2009-2016 Stuart Knightley <stuart [at] stuartk.com>\nDual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown.\n\nJSZip uses the library pako released under the MIT license :\nhttps://github.com/nodeca/pako/blob/main/LICENSE\n*/\n\n!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{(\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this).JSZip=e()}}(function(){return function s(a,o,h){function u(r,e){if(!o[r]){if(!a[r]){var t=\"function\"==typeof require&&require;if(!e&&t)return t(r,!0);if(l)return l(r,!0);var n=new Error(\"Cannot find module '\"+r+\"'\");throw n.code=\"MODULE_NOT_FOUND\",n}var i=o[r]={exports:{}};a[r][0].call(i.exports,function(e){var t=a[r][1][e];return u(t||e)},i,i.exports,s,a,o,h)}return o[r].exports}for(var l=\"function\"==typeof require&&require,e=0;e<h.length;e++)u(h[e]);return u}({1:[function(e,t,r){\"use strict\";var d=e(\"./utils\"),c=e(\"./support\"),p=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";r.encode=function(e){for(var t,r,n,i,s,a,o,h=[],u=0,l=e.length,f=l,c=\"string\"!==d.getTypeOf(e);u<e.length;)f=l-u,n=c?(t=e[u++],r=u<l?e[u++]:0,u<l?e[u++]:0):(t=e.charCodeAt(u++),r=u<l?e.charCodeAt(u++):0,u<l?e.charCodeAt(u++):0),i=t>>2,s=(3&t)<<4|r>>4,a=1<f?(15&r)<<2|n>>6:64,o=2<f?63&n:64,h.push(p.charAt(i)+p.charAt(s)+p.charAt(a)+p.charAt(o));return h.join(\"\")},r.decode=function(e){var t,r,n,i,s,a,o=0,h=0,u=\"data:\";if(e.substr(0,u.length)===u)throw new Error(\"Invalid base64 input, it looks like a data url.\");var l,f=3*(e=e.replace(/[^A-Za-z0-9+/=]/g,\"\")).length/4;if(e.charAt(e.length-1)===p.charAt(64)&&f--,e.charAt(e.length-2)===p.charAt(64)&&f--,f%1!=0)throw new Error(\"Invalid base64 input, bad content length.\");for(l=c.uint8array?new Uint8Array(0|f):new Array(0|f);o<e.length;)t=p.indexOf(e.charAt(o++))<<2|(i=p.indexOf(e.charAt(o++)))>>4,r=(15&i)<<4|(s=p.indexOf(e.charAt(o++)))>>2,n=(3&s)<<6|(a=p.indexOf(e.charAt(o++))),l[h++]=t,64!==s&&(l[h++]=r),64!==a&&(l[h++]=n);return l}},{\"./support\":30,\"./utils\":32}],2:[function(e,t,r){\"use strict\";var n=e(\"./external\"),i=e(\"./stream/DataWorker\"),s=e(\"./stream/Crc32Probe\"),a=e(\"./stream/DataLengthProbe\");function o(e,t,r,n,i){this.compressedSize=e,this.uncompressedSize=t,this.crc32=r,this.compression=n,this.compressedContent=i}o.prototype={getContentWorker:function(){var e=new i(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a(\"data_length\")),t=this;return e.on(\"end\",function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error(\"Bug : uncompressed data size mismatch\")}),e},getCompressedWorker:function(){return new i(n.Promise.resolve(this.compressedContent)).withStreamInfo(\"compressedSize\",this.compressedSize).withStreamInfo(\"uncompressedSize\",this.uncompressedSize).withStreamInfo(\"crc32\",this.crc32).withStreamInfo(\"compression\",this.compression)}},o.createWorkerFrom=function(e,t,r){return e.pipe(new s).pipe(new a(\"uncompressedSize\")).pipe(t.compressWorker(r)).pipe(new a(\"compressedSize\")).withStreamInfo(\"compression\",t)},t.exports=o},{\"./external\":6,\"./stream/Crc32Probe\":25,\"./stream/DataLengthProbe\":26,\"./stream/DataWorker\":27}],3:[function(e,t,r){\"use strict\";var n=e(\"./stream/GenericWorker\");r.STORE={magic:\"\\0\\0\",compressWorker:function(){return new n(\"STORE compression\")},uncompressWorker:function(){return new n(\"STORE decompression\")}},r.DEFLATE=e(\"./flate\")},{\"./flate\":7,\"./stream/GenericWorker\":28}],4:[function(e,t,r){\"use strict\";var n=e(\"./utils\");var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?\"string\"!==n.getTypeOf(e)?function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a<s;a++)e=e>>>8^i[255&(e^t[a])];return-1^e}(0|t,e,e.length,0):function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a<s;a++)e=e>>>8^i[255&(e^t.charCodeAt(a))];return-1^e}(0|t,e,e.length,0):0}},{\"./utils\":32}],5:[function(e,t,r){\"use strict\";r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],6:[function(e,t,r){\"use strict\";var n=null;n=\"undefined\"!=typeof Promise?Promise:e(\"lie\"),t.exports={Promise:n}},{lie:37}],7:[function(e,t,r){\"use strict\";var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Uint32Array,i=e(\"pako\"),s=e(\"./utils\"),a=e(\"./stream/GenericWorker\"),o=n?\"uint8array\":\"array\";function h(e,t){a.call(this,\"FlateWorker/\"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}r.magic=\"\\b\\0\",s.inherits(h,a),h.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,e.data),!1)},h.prototype.flush=function(){a.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},h.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},h.prototype._createPako=function(){this._pako=new i[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var t=this;this._pako.onData=function(e){t.push({data:e,meta:t.meta})}},r.compressWorker=function(e){return new h(\"Deflate\",e)},r.uncompressWorker=function(){return new h(\"Inflate\",{})}},{\"./stream/GenericWorker\":28,\"./utils\":32,pako:38}],8:[function(e,t,r){\"use strict\";function A(e,t){var r,n=\"\";for(r=0;r<t;r++)n+=String.fromCharCode(255&e),e>>>=8;return n}function n(e,t,r,n,i,s){var a,o,h=e.file,u=e.compression,l=s!==O.utf8encode,f=I.transformTo(\"string\",s(h.name)),c=I.transformTo(\"string\",O.utf8encode(h.name)),d=h.comment,p=I.transformTo(\"string\",s(d)),m=I.transformTo(\"string\",O.utf8encode(d)),_=c.length!==h.name.length,g=m.length!==d.length,b=\"\",v=\"\",y=\"\",w=h.dir,k=h.date,x={crc32:0,compressedSize:0,uncompressedSize:0};t&&!r||(x.crc32=e.crc32,x.compressedSize=e.compressedSize,x.uncompressedSize=e.uncompressedSize);var S=0;t&&(S|=8),l||!_&&!g||(S|=2048);var z=0,C=0;w&&(z|=16),\"UNIX\"===i?(C=798,z|=function(e,t){var r=e;return e||(r=t?16893:33204),(65535&r)<<16}(h.unixPermissions,w)):(C=20,z|=function(e){return 63&(e||0)}(h.dosPermissions)),a=k.getUTCHours(),a<<=6,a|=k.getUTCMinutes(),a<<=5,a|=k.getUTCSeconds()/2,o=k.getUTCFullYear()-1980,o<<=4,o|=k.getUTCMonth()+1,o<<=5,o|=k.getUTCDate(),_&&(v=A(1,1)+A(B(f),4)+c,b+=\"up\"+A(v.length,2)+v),g&&(y=A(1,1)+A(B(p),4)+m,b+=\"uc\"+A(y.length,2)+y);var E=\"\";return E+=\"\\n\\0\",E+=A(S,2),E+=u.magic,E+=A(a,2),E+=A(o,2),E+=A(x.crc32,4),E+=A(x.compressedSize,4),E+=A(x.uncompressedSize,4),E+=A(f.length,2),E+=A(b.length,2),{fileRecord:R.LOCAL_FILE_HEADER+E+f+b,dirRecord:R.CENTRAL_FILE_HEADER+A(C,2)+E+A(p.length,2)+\"\\0\\0\\0\\0\"+A(z,4)+A(n,4)+f+b+p}}var I=e(\"../utils\"),i=e(\"../stream/GenericWorker\"),O=e(\"../utf8\"),B=e(\"../crc32\"),R=e(\"../signature\");function s(e,t,r,n){i.call(this,\"ZipFileWorker\"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=r,this.encodeFileName=n,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}I.inherits(s,i),s.prototype.push=function(e){var t=e.meta.percent||0,r=this.entriesCount,n=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,i.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:r?(t+100*(r-n-1))/r:100}}))},s.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var r=n(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},s.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,r=n(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),t)this.push({data:function(e){return R.DATA_DESCRIPTOR+A(e.crc32,4)+A(e.compressedSize,4)+A(e.uncompressedSize,4)}(e),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},s.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t<this.dirRecords.length;t++)this.push({data:this.dirRecords[t],meta:{percent:100}});var r=this.bytesWritten-e,n=function(e,t,r,n,i){var s=I.transformTo(\"string\",i(n));return R.CENTRAL_DIRECTORY_END+\"\\0\\0\\0\\0\"+A(e,2)+A(e,2)+A(t,4)+A(r,4)+A(s.length,2)+s}(this.dirRecords.length,r,e,this.zipComment,this.encodeFileName);this.push({data:n,meta:{percent:100}})},s.prototype.prepareNextSource=function(){this.previous=this._sources.shift(),this.openedSource(this.previous.streamInfo),this.isPaused?this.previous.pause():this.previous.resume()},s.prototype.registerPrevious=function(e){this._sources.push(e);var t=this;return e.on(\"data\",function(e){t.processChunk(e)}),e.on(\"end\",function(){t.closedSource(t.previous.streamInfo),t._sources.length?t.prepareNextSource():t.end()}),e.on(\"error\",function(e){t.error(e)}),this},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this.previous&&this._sources.length?(this.prepareNextSource(),!0):this.previous||this._sources.length||this.generatedError?void 0:(this.end(),!0))},s.prototype.error=function(e){var t=this._sources;if(!i.prototype.error.call(this,e))return!1;for(var r=0;r<t.length;r++)try{t[r].error(e)}catch(e){}return!0},s.prototype.lock=function(){i.prototype.lock.call(this);for(var e=this._sources,t=0;t<e.length;t++)e[t].lock()},t.exports=s},{\"../crc32\":4,\"../signature\":23,\"../stream/GenericWorker\":28,\"../utf8\":31,\"../utils\":32}],9:[function(e,t,r){\"use strict\";var u=e(\"../compressions\"),n=e(\"./ZipFileWorker\");r.generateWorker=function(e,a,t){var o=new n(a.streamFiles,t,a.platform,a.encodeFileName),h=0;try{e.forEach(function(e,t){h++;var r=function(e,t){var r=e||t,n=u[r];if(!n)throw new Error(r+\" is not a valid compression method !\");return n}(t.options.compression,a.compression),n=t.options.compressionOptions||a.compressionOptions||{},i=t.dir,s=t.date;t._compressWorker(r,n).withStreamInfo(\"file\",{name:e,dir:i,date:s,comment:t.comment||\"\",unixPermissions:t.unixPermissions,dosPermissions:t.dosPermissions}).pipe(o)}),o.entriesCount=h}catch(e){o.error(e)}return o}},{\"../compressions\":3,\"./ZipFileWorker\":8}],10:[function(e,t,r){\"use strict\";function n(){if(!(this instanceof n))return new n;if(arguments.length)throw new Error(\"The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.\");this.files=Object.create(null),this.comment=null,this.root=\"\",this.clone=function(){var e=new n;for(var t in this)\"function\"!=typeof this[t]&&(e[t]=this[t]);return e}}(n.prototype=e(\"./object\")).loadAsync=e(\"./load\"),n.support=e(\"./support\"),n.defaults=e(\"./defaults\"),n.version=\"3.10.1\",n.loadAsync=function(e,t){return(new n).loadAsync(e,t)},n.external=e(\"./external\"),t.exports=n},{\"./defaults\":5,\"./external\":6,\"./load\":11,\"./object\":15,\"./support\":30}],11:[function(e,t,r){\"use strict\";var u=e(\"./utils\"),i=e(\"./external\"),n=e(\"./utf8\"),s=e(\"./zipEntries\"),a=e(\"./stream/Crc32Probe\"),l=e(\"./nodejsUtils\");function f(n){return new i.Promise(function(e,t){var r=n.decompressed.getContentWorker().pipe(new a);r.on(\"error\",function(e){t(e)}).on(\"end\",function(){r.streamInfo.crc32!==n.decompressed.crc32?t(new Error(\"Corrupted zip : CRC32 mismatch\")):e()}).resume()})}t.exports=function(e,o){var h=this;return o=u.extend(o||{},{base64:!1,checkCRC32:!1,optimizedBinaryString:!1,createFolders:!1,decodeFileName:n.utf8decode}),l.isNode&&l.isStream(e)?i.Promise.reject(new Error(\"JSZip can't accept a stream when loading a zip file.\")):u.prepareContent(\"the loaded zip file\",e,!0,o.optimizedBinaryString,o.base64).then(function(e){var t=new s(o);return t.load(e),t}).then(function(e){var t=[i.Promise.resolve(e)],r=e.files;if(o.checkCRC32)for(var n=0;n<r.length;n++)t.push(f(r[n]));return i.Promise.all(t)}).then(function(e){for(var t=e.shift(),r=t.files,n=0;n<r.length;n++){var i=r[n],s=i.fileNameStr,a=u.resolve(i.fileNameStr);h.file(a,i.decompressed,{binary:!0,optimizedBinaryString:!0,date:i.date,dir:i.dir,comment:i.fileCommentStr.length?i.fileCommentStr:null,unixPermissions:i.unixPermissions,dosPermissions:i.dosPermissions,createFolders:o.createFolders}),i.dir||(h.file(a).unsafeOriginalName=s)}return t.zipComment.length&&(h.comment=t.zipComment),h})}},{\"./external\":6,\"./nodejsUtils\":14,\"./stream/Crc32Probe\":25,\"./utf8\":31,\"./utils\":32,\"./zipEntries\":33}],12:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"../stream/GenericWorker\");function s(e,t){i.call(this,\"Nodejs stream input adapter for \"+e),this._upstreamEnded=!1,this._bindStream(t)}n.inherits(s,i),s.prototype._bindStream=function(e){var t=this;(this._stream=e).pause(),e.on(\"data\",function(e){t.push({data:e,meta:{percent:0}})}).on(\"error\",function(e){t.isPaused?this.generatedError=e:t.error(e)}).on(\"end\",function(){t.isPaused?t._upstreamEnded=!0:t.end()})},s.prototype.pause=function(){return!!i.prototype.pause.call(this)&&(this._stream.pause(),!0)},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(this._upstreamEnded?this.end():this._stream.resume(),!0)},t.exports=s},{\"../stream/GenericWorker\":28,\"../utils\":32}],13:[function(e,t,r){\"use strict\";var i=e(\"readable-stream\").Readable;function n(e,t,r){i.call(this,t),this._helper=e;var n=this;e.on(\"data\",function(e,t){n.push(e)||n._helper.pause(),r&&r(t)}).on(\"error\",function(e){n.emit(\"error\",e)}).on(\"end\",function(){n.push(null)})}e(\"../utils\").inherits(n,i),n.prototype._read=function(){this._helper.resume()},t.exports=n},{\"../utils\":32,\"readable-stream\":16}],14:[function(e,t,r){\"use strict\";t.exports={isNode:\"undefined\"!=typeof Buffer,newBufferFrom:function(e,t){if(Buffer.from&&Buffer.from!==Uint8Array.from)return Buffer.from(e,t);if(\"number\"==typeof e)throw new Error('The \"data\" argument must not be a number');return new Buffer(e,t)},allocBuffer:function(e){if(Buffer.alloc)return Buffer.alloc(e);var t=new Buffer(e);return t.fill(0),t},isBuffer:function(e){return Buffer.isBuffer(e)},isStream:function(e){return e&&\"function\"==typeof e.on&&\"function\"==typeof e.pause&&\"function\"==typeof e.resume}}},{}],15:[function(e,t,r){\"use strict\";function s(e,t,r){var n,i=u.getTypeOf(t),s=u.extend(r||{},f);s.date=s.date||new Date,null!==s.compression&&(s.compression=s.compression.toUpperCase()),\"string\"==typeof s.unixPermissions&&(s.unixPermissions=parseInt(s.unixPermissions,8)),s.unixPermissions&&16384&s.unixPermissions&&(s.dir=!0),s.dosPermissions&&16&s.dosPermissions&&(s.dir=!0),s.dir&&(e=g(e)),s.createFolders&&(n=_(e))&&b.call(this,n,!0);var a=\"string\"===i&&!1===s.binary&&!1===s.base64;r&&void 0!==r.binary||(s.binary=!a),(t instanceof c&&0===t.uncompressedSize||s.dir||!t||0===t.length)&&(s.base64=!1,s.binary=!0,t=\"\",s.compression=\"STORE\",i=\"string\");var o=null;o=t instanceof c||t instanceof l?t:p.isNode&&p.isStream(t)?new m(e,t):u.prepareContent(e,t,s.binary,s.optimizedBinaryString,s.base64);var h=new d(e,o,s);this.files[e]=h}var i=e(\"./utf8\"),u=e(\"./utils\"),l=e(\"./stream/GenericWorker\"),a=e(\"./stream/StreamHelper\"),f=e(\"./defaults\"),c=e(\"./compressedObject\"),d=e(\"./zipObject\"),o=e(\"./generate\"),p=e(\"./nodejsUtils\"),m=e(\"./nodejs/NodejsStreamInputAdapter\"),_=function(e){\"/\"===e.slice(-1)&&(e=e.substring(0,e.length-1));var t=e.lastIndexOf(\"/\");return 0<t?e.substring(0,t):\"\"},g=function(e){return\"/\"!==e.slice(-1)&&(e+=\"/\"),e},b=function(e,t){return t=void 0!==t?t:f.createFolders,e=g(e),this.files[e]||s.call(this,e,null,{dir:!0,createFolders:t}),this.files[e]};function h(e){return\"[object RegExp]\"===Object.prototype.toString.call(e)}var n={load:function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},forEach:function(e){var t,r,n;for(t in this.files)n=this.files[t],(r=t.slice(this.root.length,t.length))&&t.slice(0,this.root.length)===this.root&&e(r,n)},filter:function(r){var n=[];return this.forEach(function(e,t){r(e,t)&&n.push(t)}),n},file:function(e,t,r){if(1!==arguments.length)return e=this.root+e,s.call(this,e,t,r),this;if(h(e)){var n=e;return this.filter(function(e,t){return!t.dir&&n.test(e)})}var i=this.files[this.root+e];return i&&!i.dir?i:null},folder:function(r){if(!r)return this;if(h(r))return this.filter(function(e,t){return t.dir&&r.test(e)});var e=this.root+r,t=b.call(this,e),n=this.clone();return n.root=t.name,n},remove:function(r){r=this.root+r;var e=this.files[r];if(e||(\"/\"!==r.slice(-1)&&(r+=\"/\"),e=this.files[r]),e&&!e.dir)delete this.files[r];else for(var t=this.filter(function(e,t){return t.name.slice(0,r.length)===r}),n=0;n<t.length;n++)delete this.files[t[n].name];return this},generate:function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},generateInternalStream:function(e){var t,r={};try{if((r=u.extend(e||{},{streamFiles:!1,compression:\"STORE\",compressionOptions:null,type:\"\",platform:\"DOS\",comment:null,mimeType:\"application/zip\",encodeFileName:i.utf8encode})).type=r.type.toLowerCase(),r.compression=r.compression.toUpperCase(),\"binarystring\"===r.type&&(r.type=\"string\"),!r.type)throw new Error(\"No output type specified.\");u.checkSupport(r.type),\"darwin\"!==r.platform&&\"freebsd\"!==r.platform&&\"linux\"!==r.platform&&\"sunos\"!==r.platform||(r.platform=\"UNIX\"),\"win32\"===r.platform&&(r.platform=\"DOS\");var n=r.comment||this.comment||\"\";t=o.generateWorker(this,r,n)}catch(e){(t=new l(\"error\")).error(e)}return new a(t,r.type||\"string\",r.mimeType)},generateAsync:function(e,t){return this.generateInternalStream(e).accumulate(t)},generateNodeStream:function(e,t){return(e=e||{}).type||(e.type=\"nodebuffer\"),this.generateInternalStream(e).toNodejsStream(t)}};t.exports=n},{\"./compressedObject\":2,\"./defaults\":5,\"./generate\":9,\"./nodejs/NodejsStreamInputAdapter\":12,\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./stream/StreamHelper\":29,\"./utf8\":31,\"./utils\":32,\"./zipObject\":35}],16:[function(e,t,r){\"use strict\";t.exports=e(\"stream\")},{stream:void 0}],17:[function(e,t,r){\"use strict\";var n=e(\"./DataReader\");function i(e){n.call(this,e);for(var t=0;t<this.data.length;t++)e[t]=255&e[t]}e(\"../utils\").inherits(i,n),i.prototype.byteAt=function(e){return this.data[this.zero+e]},i.prototype.lastIndexOfSignature=function(e){for(var t=e.charCodeAt(0),r=e.charCodeAt(1),n=e.charCodeAt(2),i=e.charCodeAt(3),s=this.length-4;0<=s;--s)if(this.data[s]===t&&this.data[s+1]===r&&this.data[s+2]===n&&this.data[s+3]===i)return s-this.zero;return-1},i.prototype.readAndCheckSignature=function(e){var t=e.charCodeAt(0),r=e.charCodeAt(1),n=e.charCodeAt(2),i=e.charCodeAt(3),s=this.readData(4);return t===s[0]&&r===s[1]&&n===s[2]&&i===s[3]},i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return[];var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./DataReader\":18}],18:[function(e,t,r){\"use strict\";var n=e(\"../utils\");function i(e){this.data=e,this.length=e.length,this.index=0,this.zero=0}i.prototype={checkOffset:function(e){this.checkIndex(this.index+e)},checkIndex:function(e){if(this.length<this.zero+e||e<0)throw new Error(\"End of data reached (data length = \"+this.length+\", asked index = \"+e+\"). Corrupted zip ?\")},setIndex:function(e){this.checkIndex(e),this.index=e},skip:function(e){this.setIndex(this.index+e)},byteAt:function(){},readInt:function(e){var t,r=0;for(this.checkOffset(e),t=this.index+e-1;t>=this.index;t--)r=(r<<8)+this.byteAt(t);return this.index+=e,r},readString:function(e){return n.transformTo(\"string\",this.readData(e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=i},{\"../utils\":32}],19:[function(e,t,r){\"use strict\";var n=e(\"./Uint8ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./Uint8ArrayReader\":21}],20:[function(e,t,r){\"use strict\";var n=e(\"./DataReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},i.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},i.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./DataReader\":18}],21:[function(e,t,r){\"use strict\";var n=e(\"./ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./ArrayReader\":17}],22:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"../support\"),s=e(\"./ArrayReader\"),a=e(\"./StringReader\"),o=e(\"./NodeBufferReader\"),h=e(\"./Uint8ArrayReader\");t.exports=function(e){var t=n.getTypeOf(e);return n.checkSupport(t),\"string\"!==t||i.uint8array?\"nodebuffer\"===t?new o(e):i.uint8array?new h(n.transformTo(\"uint8array\",e)):new s(n.transformTo(\"array\",e)):new a(e)}},{\"../support\":30,\"../utils\":32,\"./ArrayReader\":17,\"./NodeBufferReader\":19,\"./StringReader\":20,\"./Uint8ArrayReader\":21}],23:[function(e,t,r){\"use strict\";r.LOCAL_FILE_HEADER=\"PK\u0003\u0004\",r.CENTRAL_FILE_HEADER=\"PK\u0001\u0002\",r.CENTRAL_DIRECTORY_END=\"PK\u0005\u0006\",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR=\"PK\u0006\u0007\",r.ZIP64_CENTRAL_DIRECTORY_END=\"PK\u0006\u0006\",r.DATA_DESCRIPTOR=\"PK\u0007\\b\"},{}],24:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../utils\");function s(e){n.call(this,\"ConvertWorker to \"+e),this.destType=e}i.inherits(s,n),s.prototype.processChunk=function(e){this.push({data:i.transformTo(this.destType,e.data),meta:e.meta})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],25:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../crc32\");function s(){n.call(this,\"Crc32Probe\"),this.withStreamInfo(\"crc32\",0)}e(\"../utils\").inherits(s,n),s.prototype.processChunk=function(e){this.streamInfo.crc32=i(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=s},{\"../crc32\":4,\"../utils\":32,\"./GenericWorker\":28}],26:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataLengthProbe for \"+e),this.propName=e,this.withStreamInfo(e,0)}n.inherits(s,i),s.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}i.prototype.processChunk.call(this,e)},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],27:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataWorker\");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type=\"\",this._tickScheduled=!1,e.then(function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=n.getTypeOf(e),t.isPaused||t._tickAndRepeat()},function(e){t.error(e)})}n.inherits(s,i),s.prototype.cleanUp=function(){i.prototype.cleanUp.call(this),this.data=null},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,n.delay(this._tickAndRepeat,[],this)),!0)},s.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(n.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},s.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case\"string\":e=this.data.substring(this.index,t);break;case\"uint8array\":e=this.data.subarray(this.index,t);break;case\"array\":case\"nodebuffer\":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],28:[function(e,t,r){\"use strict\";function n(e){this.name=e||\"default\",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}n.prototype={push:function(e){this.emit(\"data\",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit(\"end\"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit(\"error\",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit(\"error\",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var r=0;r<this._listeners[e].length;r++)this._listeners[e][r].call(this,t)},pipe:function(e){return e.registerPrevious(this)},registerPrevious:function(e){if(this.isLocked)throw new Error(\"The stream '\"+this+\"' has already been used.\");this.streamInfo=e.streamInfo,this.mergeStreamInfo(),this.previous=e;var t=this;return e.on(\"data\",function(e){t.processChunk(e)}),e.on(\"end\",function(){t.end()}),e.on(\"error\",function(e){t.error(e)}),this},pause:function(){return!this.isPaused&&!this.isFinished&&(this.isPaused=!0,this.previous&&this.previous.pause(),!0)},resume:function(){if(!this.isPaused||this.isFinished)return!1;var e=this.isPaused=!1;return this.generatedError&&(this.error(this.generatedError),e=!0),this.previous&&this.previous.resume(),!e},flush:function(){},processChunk:function(e){this.push(e)},withStreamInfo:function(e,t){return this.extraStreamInfo[e]=t,this.mergeStreamInfo(),this},mergeStreamInfo:function(){for(var e in this.extraStreamInfo)Object.prototype.hasOwnProperty.call(this.extraStreamInfo,e)&&(this.streamInfo[e]=this.extraStreamInfo[e])},lock:function(){if(this.isLocked)throw new Error(\"The stream '\"+this+\"' has already been used.\");this.isLocked=!0,this.previous&&this.previous.lock()},toString:function(){var e=\"Worker \"+this.name;return this.previous?this.previous+\" -> \"+e:e}},t.exports=n},{}],29:[function(e,t,r){\"use strict\";var h=e(\"../utils\"),i=e(\"./ConvertWorker\"),s=e(\"./GenericWorker\"),u=e(\"../base64\"),n=e(\"../support\"),a=e(\"../external\"),o=null;if(n.nodestream)try{o=e(\"../nodejs/NodejsStreamOutputAdapter\")}catch(e){}function l(e,o){return new a.Promise(function(t,r){var n=[],i=e._internalType,s=e._outputType,a=e._mimeType;e.on(\"data\",function(e,t){n.push(e),o&&o(t)}).on(\"error\",function(e){n=[],r(e)}).on(\"end\",function(){try{var e=function(e,t,r){switch(e){case\"blob\":return h.newBlob(h.transformTo(\"arraybuffer\",t),r);case\"base64\":return u.encode(t);default:return h.transformTo(e,t)}}(s,function(e,t){var r,n=0,i=null,s=0;for(r=0;r<t.length;r++)s+=t[r].length;switch(e){case\"string\":return t.join(\"\");case\"array\":return Array.prototype.concat.apply([],t);case\"uint8array\":for(i=new Uint8Array(s),r=0;r<t.length;r++)i.set(t[r],n),n+=t[r].length;return i;case\"nodebuffer\":return Buffer.concat(t);default:throw new Error(\"concat : unsupported type '\"+e+\"'\")}}(i,n),a);t(e)}catch(e){r(e)}n=[]}).resume()})}function f(e,t,r){var n=t;switch(t){case\"blob\":case\"arraybuffer\":n=\"uint8array\";break;case\"base64\":n=\"string\"}try{this._internalType=n,this._outputType=t,this._mimeType=r,h.checkSupport(n),this._worker=e.pipe(new i(n)),e.lock()}catch(e){this._worker=new s(\"error\"),this._worker.error(e)}}f.prototype={accumulate:function(e){return l(this,e)},on:function(e,t){var r=this;return\"data\"===e?this._worker.on(e,function(e){t.call(r,e.data,e.meta)}):this._worker.on(e,function(){h.delay(t,arguments,r)}),this},resume:function(){return h.delay(this._worker.resume,[],this._worker),this},pause:function(){return this._worker.pause(),this},toNodejsStream:function(e){if(h.checkSupport(\"nodestream\"),\"nodebuffer\"!==this._outputType)throw new Error(this._outputType+\" is not supported by this method\");return new o(this,{objectMode:\"nodebuffer\"!==this._outputType},e)}},t.exports=f},{\"../base64\":1,\"../external\":6,\"../nodejs/NodejsStreamOutputAdapter\":13,\"../support\":30,\"../utils\":32,\"./ConvertWorker\":24,\"./GenericWorker\":28}],30:[function(e,t,r){\"use strict\";if(r.base64=!0,r.array=!0,r.string=!0,r.arraybuffer=\"undefined\"!=typeof ArrayBuffer&&\"undefined\"!=typeof Uint8Array,r.nodebuffer=\"undefined\"!=typeof Buffer,r.uint8array=\"undefined\"!=typeof Uint8Array,\"undefined\"==typeof ArrayBuffer)r.blob=!1;else{var n=new ArrayBuffer(0);try{r.blob=0===new Blob([n],{type:\"application/zip\"}).size}catch(e){try{var i=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);i.append(n),r.blob=0===i.getBlob(\"application/zip\").size}catch(e){r.blob=!1}}}try{r.nodestream=!!e(\"readable-stream\").Readable}catch(e){r.nodestream=!1}},{\"readable-stream\":16}],31:[function(e,t,s){\"use strict\";for(var o=e(\"./utils\"),h=e(\"./support\"),r=e(\"./nodejsUtils\"),n=e(\"./stream/GenericWorker\"),u=new Array(256),i=0;i<256;i++)u[i]=252<=i?6:248<=i?5:240<=i?4:224<=i?3:192<=i?2:1;u[254]=u[254]=1;function a(){n.call(this,\"utf-8 decode\"),this.leftOver=null}function l(){n.call(this,\"utf-8 encode\")}s.utf8encode=function(e){return h.nodebuffer?r.newBufferFrom(e,\"utf-8\"):function(e){var t,r,n,i,s,a=e.length,o=0;for(i=0;i<a;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),o+=r<128?1:r<2048?2:r<65536?3:4;for(t=h.uint8array?new Uint8Array(o):new Array(o),i=s=0;s<o;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),r<128?t[s++]=r:(r<2048?t[s++]=192|r>>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t}(e)},s.utf8decode=function(e){return h.nodebuffer?o.transformTo(\"nodebuffer\",e).toString(\"utf-8\"):function(e){var t,r,n,i,s=e.length,a=new Array(2*s);for(t=r=0;t<s;)if((n=e[t++])<128)a[r++]=n;else if(4<(i=u[n]))a[r++]=65533,t+=i-1;else{for(n&=2===i?31:3===i?15:7;1<i&&t<s;)n=n<<6|63&e[t++],i--;1<i?a[r++]=65533:n<65536?a[r++]=n:(n-=65536,a[r++]=55296|n>>10&1023,a[r++]=56320|1023&n)}return a.length!==r&&(a.subarray?a=a.subarray(0,r):a.length=r),o.applyFromCharCode(a)}(e=o.transformTo(h.uint8array?\"uint8array\":\"array\",e))},o.inherits(a,n),a.prototype.processChunk=function(e){var t=o.transformTo(h.uint8array?\"uint8array\":\"array\",e.data);if(this.leftOver&&this.leftOver.length){if(h.uint8array){var r=t;(t=new Uint8Array(r.length+this.leftOver.length)).set(this.leftOver,0),t.set(r,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var n=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}(t),i=t;n!==t.length&&(h.uint8array?(i=t.subarray(0,n),this.leftOver=t.subarray(n,t.length)):(i=t.slice(0,n),this.leftOver=t.slice(n,t.length))),this.push({data:s.utf8decode(i),meta:e.meta})},a.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:s.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},s.Utf8DecodeWorker=a,o.inherits(l,n),l.prototype.processChunk=function(e){this.push({data:s.utf8encode(e.data),meta:e.meta})},s.Utf8EncodeWorker=l},{\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./support\":30,\"./utils\":32}],32:[function(e,t,a){\"use strict\";var o=e(\"./support\"),h=e(\"./base64\"),r=e(\"./nodejsUtils\"),u=e(\"./external\");function n(e){return e}function l(e,t){for(var r=0;r<e.length;++r)t[r]=255&e.charCodeAt(r);return t}e(\"setimmediate\"),a.newBlob=function(t,r){a.checkSupport(\"blob\");try{return new Blob([t],{type:r})}catch(e){try{var n=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);return n.append(t),n.getBlob(r)}catch(e){throw new Error(\"Bug : can't construct the Blob.\")}}};var i={stringifyByChunk:function(e,t,r){var n=[],i=0,s=e.length;if(s<=r)return String.fromCharCode.apply(null,e);for(;i<s;)\"array\"===t||\"nodebuffer\"===t?n.push(String.fromCharCode.apply(null,e.slice(i,Math.min(i+r,s)))):n.push(String.fromCharCode.apply(null,e.subarray(i,Math.min(i+r,s)))),i+=r;return n.join(\"\")},stringifyByChar:function(e){for(var t=\"\",r=0;r<e.length;r++)t+=String.fromCharCode(e[r]);return t},applyCanBeUsed:{uint8array:function(){try{return o.uint8array&&1===String.fromCharCode.apply(null,new Uint8Array(1)).length}catch(e){return!1}}(),nodebuffer:function(){try{return o.nodebuffer&&1===String.fromCharCode.apply(null,r.allocBuffer(1)).length}catch(e){return!1}}()}};function s(e){var t=65536,r=a.getTypeOf(e),n=!0;if(\"uint8array\"===r?n=i.applyCanBeUsed.uint8array:\"nodebuffer\"===r&&(n=i.applyCanBeUsed.nodebuffer),n)for(;1<t;)try{return i.stringifyByChunk(e,r,t)}catch(e){t=Math.floor(t/2)}return i.stringifyByChar(e)}function f(e,t){for(var r=0;r<e.length;r++)t[r]=e[r];return t}a.applyFromCharCode=s;var c={};c.string={string:n,array:function(e){return l(e,new Array(e.length))},arraybuffer:function(e){return c.string.uint8array(e).buffer},uint8array:function(e){return l(e,new Uint8Array(e.length))},nodebuffer:function(e){return l(e,r.allocBuffer(e.length))}},c.array={string:s,array:n,arraybuffer:function(e){return new Uint8Array(e).buffer},uint8array:function(e){return new Uint8Array(e)},nodebuffer:function(e){return r.newBufferFrom(e)}},c.arraybuffer={string:function(e){return s(new Uint8Array(e))},array:function(e){return f(new Uint8Array(e),new Array(e.byteLength))},arraybuffer:n,uint8array:function(e){return new Uint8Array(e)},nodebuffer:function(e){return r.newBufferFrom(new Uint8Array(e))}},c.uint8array={string:s,array:function(e){return f(e,new Array(e.length))},arraybuffer:function(e){return e.buffer},uint8array:n,nodebuffer:function(e){return r.newBufferFrom(e)}},c.nodebuffer={string:s,array:function(e){return f(e,new Array(e.length))},arraybuffer:function(e){return c.nodebuffer.uint8array(e).buffer},uint8array:function(e){return f(e,new Uint8Array(e.length))},nodebuffer:n},a.transformTo=function(e,t){if(t=t||\"\",!e)return t;a.checkSupport(e);var r=a.getTypeOf(t);return c[r][e](t)},a.resolve=function(e){for(var t=e.split(\"/\"),r=[],n=0;n<t.length;n++){var i=t[n];\".\"===i||\"\"===i&&0!==n&&n!==t.length-1||(\"..\"===i?r.pop():r.push(i))}return r.join(\"/\")},a.getTypeOf=function(e){return\"string\"==typeof e?\"string\":\"[object Array]\"===Object.prototype.toString.call(e)?\"array\":o.nodebuffer&&r.isBuffer(e)?\"nodebuffer\":o.uint8array&&e instanceof Uint8Array?\"uint8array\":o.arraybuffer&&e instanceof ArrayBuffer?\"arraybuffer\":void 0},a.checkSupport=function(e){if(!o[e.toLowerCase()])throw new Error(e+\" is not supported by this platform\")},a.MAX_VALUE_16BITS=65535,a.MAX_VALUE_32BITS=-1,a.pretty=function(e){var t,r,n=\"\";for(r=0;r<(e||\"\").length;r++)n+=\"\\\\x\"+((t=e.charCodeAt(r))<16?\"0\":\"\")+t.toString(16).toUpperCase();return n},a.delay=function(e,t,r){setImmediate(function(){e.apply(r||null,t||[])})},a.inherits=function(e,t){function r(){}r.prototype=t.prototype,e.prototype=new r},a.extend=function(){var e,t,r={};for(e=0;e<arguments.length;e++)for(t in arguments[e])Object.prototype.hasOwnProperty.call(arguments[e],t)&&void 0===r[t]&&(r[t]=arguments[e][t]);return r},a.prepareContent=function(r,e,n,i,s){return u.Promise.resolve(e).then(function(n){return o.blob&&(n instanceof Blob||-1!==[\"[object File]\",\"[object Blob]\"].indexOf(Object.prototype.toString.call(n)))&&\"undefined\"!=typeof FileReader?new u.Promise(function(t,r){var e=new FileReader;e.onload=function(e){t(e.target.result)},e.onerror=function(e){r(e.target.error)},e.readAsArrayBuffer(n)}):n}).then(function(e){var t=a.getTypeOf(e);return t?(\"arraybuffer\"===t?e=a.transformTo(\"uint8array\",e):\"string\"===t&&(s?e=h.decode(e):n&&!0!==i&&(e=function(e){return l(e,o.uint8array?new Uint8Array(e.length):new Array(e.length))}(e))),e):u.Promise.reject(new Error(\"Can't read the data of '\"+r+\"'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?\"))})}},{\"./base64\":1,\"./external\":6,\"./nodejsUtils\":14,\"./support\":30,setimmediate:54}],33:[function(e,t,r){\"use strict\";var n=e(\"./reader/readerFor\"),i=e(\"./utils\"),s=e(\"./signature\"),a=e(\"./zipEntry\"),o=e(\"./support\");function h(e){this.files=[],this.loadOptions=e}h.prototype={checkSignature:function(e){if(!this.reader.readAndCheckSignature(e)){this.reader.index-=4;var t=this.reader.readString(4);throw new Error(\"Corrupted zip or bug: unexpected signature (\"+i.pretty(t)+\", expected \"+i.pretty(e)+\")\")}},isSignature:function(e,t){var r=this.reader.index;this.reader.setIndex(e);var n=this.reader.readString(4)===t;return this.reader.setIndex(r),n},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2);var e=this.reader.readData(this.zipCommentLength),t=o.uint8array?\"uint8array\":\"array\",r=i.transformTo(t,e);this.zipComment=this.loadOptions.decodeFileName(r)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.reader.skip(4),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var e,t,r,n=this.zip64EndOfCentralSize-44;0<n;)e=this.reader.readInt(2),t=this.reader.readInt(4),r=this.reader.readData(t),this.zip64ExtensibleData[e]={id:e,length:t,value:r}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),1<this.disksCount)throw new Error(\"Multi-volumes zip are not supported\")},readLocalFiles:function(){var e,t;for(e=0;e<this.files.length;e++)t=this.files[e],this.reader.setIndex(t.localHeaderOffset),this.checkSignature(s.LOCAL_FILE_HEADER),t.readLocalPart(this.reader),t.handleUTF8(),t.processAttributes()},readCentralDir:function(){var e;for(this.reader.setIndex(this.centralDirOffset);this.reader.readAndCheckSignature(s.CENTRAL_FILE_HEADER);)(e=new a({zip64:this.zip64},this.loadOptions)).readCentralPart(this.reader),this.files.push(e);if(this.centralDirRecords!==this.files.length&&0!==this.centralDirRecords&&0===this.files.length)throw new Error(\"Corrupted zip or bug: expected \"+this.centralDirRecords+\" records in central dir, got \"+this.files.length)},readEndOfCentral:function(){var e=this.reader.lastIndexOfSignature(s.CENTRAL_DIRECTORY_END);if(e<0)throw!this.isSignature(0,s.LOCAL_FILE_HEADER)?new Error(\"Can't find end of central directory : is this a zip file ? If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html\"):new Error(\"Corrupted zip: can't find end of central directory\");this.reader.setIndex(e);var t=e;if(this.checkSignature(s.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===i.MAX_VALUE_16BITS||this.diskWithCentralDirStart===i.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===i.MAX_VALUE_16BITS||this.centralDirRecords===i.MAX_VALUE_16BITS||this.centralDirSize===i.MAX_VALUE_32BITS||this.centralDirOffset===i.MAX_VALUE_32BITS){if(this.zip64=!0,(e=this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR))<0)throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory locator\");if(this.reader.setIndex(e),this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),!this.isSignature(this.relativeOffsetEndOfZip64CentralDir,s.ZIP64_CENTRAL_DIRECTORY_END)&&(this.relativeOffsetEndOfZip64CentralDir=this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_END),this.relativeOffsetEndOfZip64CentralDir<0))throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory\");this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir),this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}var r=this.centralDirOffset+this.centralDirSize;this.zip64&&(r+=20,r+=12+this.zip64EndOfCentralSize);var n=t-r;if(0<n)this.isSignature(t,s.CENTRAL_FILE_HEADER)||(this.reader.zero=n);else if(n<0)throw new Error(\"Corrupted zip: missing \"+Math.abs(n)+\" bytes.\")},prepareReader:function(e){this.reader=n(e)},load:function(e){this.prepareReader(e),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},t.exports=h},{\"./reader/readerFor\":22,\"./signature\":23,\"./support\":30,\"./utils\":32,\"./zipEntry\":34}],34:[function(e,t,r){\"use strict\";var n=e(\"./reader/readerFor\"),s=e(\"./utils\"),i=e(\"./compressedObject\"),a=e(\"./crc32\"),o=e(\"./utf8\"),h=e(\"./compressions\"),u=e(\"./support\");function l(e,t){this.options=e,this.loadOptions=t}l.prototype={isEncrypted:function(){return 1==(1&this.bitFlag)},useUTF8:function(){return 2048==(2048&this.bitFlag)},readLocalPart:function(e){var t,r;if(e.skip(22),this.fileNameLength=e.readInt(2),r=e.readInt(2),this.fileName=e.readData(this.fileNameLength),e.skip(r),-1===this.compressedSize||-1===this.uncompressedSize)throw new Error(\"Bug or corrupted zip : didn't get enough information from the central directory (compressedSize === -1 || uncompressedSize === -1)\");if(null===(t=function(e){for(var t in h)if(Object.prototype.hasOwnProperty.call(h,t)&&h[t].magic===e)return h[t];return null}(this.compressionMethod)))throw new Error(\"Corrupted zip : compression \"+s.pretty(this.compressionMethod)+\" unknown (inner file : \"+s.transformTo(\"string\",this.fileName)+\")\");this.decompressed=new i(this.compressedSize,this.uncompressedSize,this.crc32,t,e.readData(this.compressedSize))},readCentralPart:function(e){this.versionMadeBy=e.readInt(2),e.skip(2),this.bitFlag=e.readInt(2),this.compressionMethod=e.readString(2),this.date=e.readDate(),this.crc32=e.readInt(4),this.compressedSize=e.readInt(4),this.uncompressedSize=e.readInt(4);var t=e.readInt(2);if(this.extraFieldsLength=e.readInt(2),this.fileCommentLength=e.readInt(2),this.diskNumberStart=e.readInt(2),this.internalFileAttributes=e.readInt(2),this.externalFileAttributes=e.readInt(4),this.localHeaderOffset=e.readInt(4),this.isEncrypted())throw new Error(\"Encrypted zip are not supported\");e.skip(t),this.readExtraFields(e),this.parseZIP64ExtraField(e),this.fileComment=e.readData(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var e=this.versionMadeBy>>8;this.dir=!!(16&this.externalFileAttributes),0==e&&(this.dosPermissions=63&this.externalFileAttributes),3==e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||\"/\"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var e=n(this.extraFields[1].value);this.uncompressedSize===s.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===s.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===s.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===s.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(e){var t,r,n,i=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4<i;)t=e.readInt(2),r=e.readInt(2),n=e.readData(r),this.extraFields[t]={id:t,length:r,value:n};e.setIndex(i)},handleUTF8:function(){var e=u.uint8array?\"uint8array\":\"array\";if(this.useUTF8())this.fileNameStr=o.utf8decode(this.fileName),this.fileCommentStr=o.utf8decode(this.fileComment);else{var t=this.findExtraFieldUnicodePath();if(null!==t)this.fileNameStr=t;else{var r=s.transformTo(e,this.fileName);this.fileNameStr=this.loadOptions.decodeFileName(r)}var n=this.findExtraFieldUnicodeComment();if(null!==n)this.fileCommentStr=n;else{var i=s.transformTo(e,this.fileComment);this.fileCommentStr=this.loadOptions.decodeFileName(i)}}},findExtraFieldUnicodePath:function(){var e=this.extraFields[28789];if(e){var t=n(e.value);return 1!==t.readInt(1)?null:a(this.fileName)!==t.readInt(4)?null:o.utf8decode(t.readData(e.length-5))}return null},findExtraFieldUnicodeComment:function(){var e=this.extraFields[25461];if(e){var t=n(e.value);return 1!==t.readInt(1)?null:a(this.fileComment)!==t.readInt(4)?null:o.utf8decode(t.readData(e.length-5))}return null}},t.exports=l},{\"./compressedObject\":2,\"./compressions\":3,\"./crc32\":4,\"./reader/readerFor\":22,\"./support\":30,\"./utf8\":31,\"./utils\":32}],35:[function(e,t,r){\"use strict\";function n(e,t,r){this.name=e,this.dir=r.dir,this.date=r.date,this.comment=r.comment,this.unixPermissions=r.unixPermissions,this.dosPermissions=r.dosPermissions,this._data=t,this._dataBinary=r.binary,this.options={compression:r.compression,compressionOptions:r.compressionOptions}}var s=e(\"./stream/StreamHelper\"),i=e(\"./stream/DataWorker\"),a=e(\"./utf8\"),o=e(\"./compressedObject\"),h=e(\"./stream/GenericWorker\");n.prototype={internalStream:function(e){var t=null,r=\"string\";try{if(!e)throw new Error(\"No output type specified.\");var n=\"string\"===(r=e.toLowerCase())||\"text\"===r;\"binarystring\"!==r&&\"text\"!==r||(r=\"string\"),t=this._decompressWorker();var i=!this._dataBinary;i&&!n&&(t=t.pipe(new a.Utf8EncodeWorker)),!i&&n&&(t=t.pipe(new a.Utf8DecodeWorker))}catch(e){(t=new h(\"error\")).error(e)}return new s(t,r,\"\")},async:function(e,t){return this.internalStream(e).accumulate(t)},nodeStream:function(e,t){return this.internalStream(e||\"nodebuffer\").toNodejsStream(t)},_compressWorker:function(e,t){if(this._data instanceof o&&this._data.compression.magic===e.magic)return this._data.getCompressedWorker();var r=this._decompressWorker();return this._dataBinary||(r=r.pipe(new a.Utf8EncodeWorker)),o.createWorkerFrom(r,e,t)},_decompressWorker:function(){return this._data instanceof o?this._data.getContentWorker():this._data instanceof h?this._data:new i(this._data)}};for(var u=[\"asText\",\"asBinary\",\"asNodeBuffer\",\"asUint8Array\",\"asArrayBuffer\"],l=function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},f=0;f<u.length;f++)n.prototype[u[f]]=l;t.exports=n},{\"./compressedObject\":2,\"./stream/DataWorker\":27,\"./stream/GenericWorker\":28,\"./stream/StreamHelper\":29,\"./utf8\":31}],36:[function(e,l,t){(function(t){\"use strict\";var r,n,e=t.MutationObserver||t.WebKitMutationObserver;if(e){var i=0,s=new e(u),a=t.document.createTextNode(\"\");s.observe(a,{characterData:!0}),r=function(){a.data=i=++i%2}}else if(t.setImmediate||void 0===t.MessageChannel)r=\"document\"in t&&\"onreadystatechange\"in t.document.createElement(\"script\")?function(){var e=t.document.createElement(\"script\");e.onreadystatechange=function(){u(),e.onreadystatechange=null,e.parentNode.removeChild(e),e=null},t.document.documentElement.appendChild(e)}:function(){setTimeout(u,0)};else{var o=new t.MessageChannel;o.port1.onmessage=u,r=function(){o.port2.postMessage(0)}}var h=[];function u(){var e,t;n=!0;for(var r=h.length;r;){for(t=h,h=[],e=-1;++e<r;)t[e]();r=h.length}n=!1}l.exports=function(e){1!==h.push(e)||n||r()}}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],37:[function(e,t,r){\"use strict\";var i=e(\"immediate\");function u(){}var l={},s=[\"REJECTED\"],a=[\"FULFILLED\"],n=[\"PENDING\"];function o(e){if(\"function\"!=typeof e)throw new TypeError(\"resolver must be a function\");this.state=n,this.queue=[],this.outcome=void 0,e!==u&&d(this,e)}function h(e,t,r){this.promise=e,\"function\"==typeof t&&(this.onFulfilled=t,this.callFulfilled=this.otherCallFulfilled),\"function\"==typeof r&&(this.onRejected=r,this.callRejected=this.otherCallRejected)}function f(t,r,n){i(function(){var e;try{e=r(n)}catch(e){return l.reject(t,e)}e===t?l.reject(t,new TypeError(\"Cannot resolve promise with itself\")):l.resolve(t,e)})}function c(e){var t=e&&e.then;if(e&&(\"object\"==typeof e||\"function\"==typeof e)&&\"function\"==typeof t)return function(){t.apply(e,arguments)}}function d(t,e){var r=!1;function n(e){r||(r=!0,l.reject(t,e))}function i(e){r||(r=!0,l.resolve(t,e))}var s=p(function(){e(i,n)});\"error\"===s.status&&n(s.value)}function p(e,t){var r={};try{r.value=e(t),r.status=\"success\"}catch(e){r.status=\"error\",r.value=e}return r}(t.exports=o).prototype.finally=function(t){if(\"function\"!=typeof t)return this;var r=this.constructor;return this.then(function(e){return r.resolve(t()).then(function(){return e})},function(e){return r.resolve(t()).then(function(){throw e})})},o.prototype.catch=function(e){return this.then(null,e)},o.prototype.then=function(e,t){if(\"function\"!=typeof e&&this.state===a||\"function\"!=typeof t&&this.state===s)return this;var r=new this.constructor(u);this.state!==n?f(r,this.state===a?e:t,this.outcome):this.queue.push(new h(r,e,t));return r},h.prototype.callFulfilled=function(e){l.resolve(this.promise,e)},h.prototype.otherCallFulfilled=function(e){f(this.promise,this.onFulfilled,e)},h.prototype.callRejected=function(e){l.reject(this.promise,e)},h.prototype.otherCallRejected=function(e){f(this.promise,this.onRejected,e)},l.resolve=function(e,t){var r=p(c,t);if(\"error\"===r.status)return l.reject(e,r.value);var n=r.value;if(n)d(e,n);else{e.state=a,e.outcome=t;for(var i=-1,s=e.queue.length;++i<s;)e.queue[i].callFulfilled(t)}return e},l.reject=function(e,t){e.state=s,e.outcome=t;for(var r=-1,n=e.queue.length;++r<n;)e.queue[r].callRejected(t);return e},o.resolve=function(e){if(e instanceof this)return e;return l.resolve(new this(u),e)},o.reject=function(e){var t=new this(u);return l.reject(t,e)},o.all=function(e){var r=this;if(\"[object Array]\"!==Object.prototype.toString.call(e))return this.reject(new TypeError(\"must be an array\"));var n=e.length,i=!1;if(!n)return this.resolve([]);var s=new Array(n),a=0,t=-1,o=new this(u);for(;++t<n;)h(e[t],t);return o;function h(e,t){r.resolve(e).then(function(e){s[t]=e,++a!==n||i||(i=!0,l.resolve(o,s))},function(e){i||(i=!0,l.reject(o,e))})}},o.race=function(e){var t=this;if(\"[object Array]\"!==Object.prototype.toString.call(e))return this.reject(new TypeError(\"must be an array\"));var r=e.length,n=!1;if(!r)return this.resolve([]);var i=-1,s=new this(u);for(;++i<r;)a=e[i],t.resolve(a).then(function(e){n||(n=!0,l.resolve(s,e))},function(e){n||(n=!0,l.reject(s,e))});var a;return s}},{immediate:36}],38:[function(e,t,r){\"use strict\";var n={};(0,e(\"./lib/utils/common\").assign)(n,e(\"./lib/deflate\"),e(\"./lib/inflate\"),e(\"./lib/zlib/constants\")),t.exports=n},{\"./lib/deflate\":39,\"./lib/inflate\":40,\"./lib/utils/common\":41,\"./lib/zlib/constants\":44}],39:[function(e,t,r){\"use strict\";var a=e(\"./zlib/deflate\"),o=e(\"./utils/common\"),h=e(\"./utils/strings\"),i=e(\"./zlib/messages\"),s=e(\"./zlib/zstream\"),u=Object.prototype.toString,l=0,f=-1,c=0,d=8;function p(e){if(!(this instanceof p))return new p(e);this.options=o.assign({level:f,method:d,chunkSize:16384,windowBits:15,memLevel:8,strategy:c,to:\"\"},e||{});var t=this.options;t.raw&&0<t.windowBits?t.windowBits=-t.windowBits:t.gzip&&0<t.windowBits&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new s,this.strm.avail_out=0;var r=a.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(r!==l)throw new Error(i[r]);if(t.header&&a.deflateSetHeader(this.strm,t.header),t.dictionary){var n;if(n=\"string\"==typeof t.dictionary?h.string2buf(t.dictionary):\"[object ArrayBuffer]\"===u.call(t.dictionary)?new Uint8Array(t.dictionary):t.dictionary,(r=a.deflateSetDictionary(this.strm,n))!==l)throw new Error(i[r]);this._dict_set=!0}}function n(e,t){var r=new p(t);if(r.push(e,!0),r.err)throw r.msg||i[r.err];return r.result}p.prototype.push=function(e,t){var r,n,i=this.strm,s=this.options.chunkSize;if(this.ended)return!1;n=t===~~t?t:!0===t?4:0,\"string\"==typeof e?i.input=h.string2buf(e):\"[object ArrayBuffer]\"===u.call(e)?i.input=new Uint8Array(e):i.input=e,i.next_in=0,i.avail_in=i.input.length;do{if(0===i.avail_out&&(i.output=new o.Buf8(s),i.next_out=0,i.avail_out=s),1!==(r=a.deflate(i,n))&&r!==l)return this.onEnd(r),!(this.ended=!0);0!==i.avail_out&&(0!==i.avail_in||4!==n&&2!==n)||(\"string\"===this.options.to?this.onData(h.buf2binstring(o.shrinkBuf(i.output,i.next_out))):this.onData(o.shrinkBuf(i.output,i.next_out)))}while((0<i.avail_in||0===i.avail_out)&&1!==r);return 4===n?(r=a.deflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===l):2!==n||(this.onEnd(l),!(i.avail_out=0))},p.prototype.onData=function(e){this.chunks.push(e)},p.prototype.onEnd=function(e){e===l&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=o.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},r.Deflate=p,r.deflate=n,r.deflateRaw=function(e,t){return(t=t||{}).raw=!0,n(e,t)},r.gzip=function(e,t){return(t=t||{}).gzip=!0,n(e,t)}},{\"./utils/common\":41,\"./utils/strings\":42,\"./zlib/deflate\":46,\"./zlib/messages\":51,\"./zlib/zstream\":53}],40:[function(e,t,r){\"use strict\";var c=e(\"./zlib/inflate\"),d=e(\"./utils/common\"),p=e(\"./utils/strings\"),m=e(\"./zlib/constants\"),n=e(\"./zlib/messages\"),i=e(\"./zlib/zstream\"),s=e(\"./zlib/gzheader\"),_=Object.prototype.toString;function a(e){if(!(this instanceof a))return new a(e);this.options=d.assign({chunkSize:16384,windowBits:0,to:\"\"},e||{});var t=this.options;t.raw&&0<=t.windowBits&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(0<=t.windowBits&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),15<t.windowBits&&t.windowBits<48&&0==(15&t.windowBits)&&(t.windowBits|=15),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new i,this.strm.avail_out=0;var r=c.inflateInit2(this.strm,t.windowBits);if(r!==m.Z_OK)throw new Error(n[r]);this.header=new s,c.inflateGetHeader(this.strm,this.header)}function o(e,t){var r=new a(t);if(r.push(e,!0),r.err)throw r.msg||n[r.err];return r.result}a.prototype.push=function(e,t){var r,n,i,s,a,o,h=this.strm,u=this.options.chunkSize,l=this.options.dictionary,f=!1;if(this.ended)return!1;n=t===~~t?t:!0===t?m.Z_FINISH:m.Z_NO_FLUSH,\"string\"==typeof e?h.input=p.binstring2buf(e):\"[object ArrayBuffer]\"===_.call(e)?h.input=new Uint8Array(e):h.input=e,h.next_in=0,h.avail_in=h.input.length;do{if(0===h.avail_out&&(h.output=new d.Buf8(u),h.next_out=0,h.avail_out=u),(r=c.inflate(h,m.Z_NO_FLUSH))===m.Z_NEED_DICT&&l&&(o=\"string\"==typeof l?p.string2buf(l):\"[object ArrayBuffer]\"===_.call(l)?new Uint8Array(l):l,r=c.inflateSetDictionary(this.strm,o)),r===m.Z_BUF_ERROR&&!0===f&&(r=m.Z_OK,f=!1),r!==m.Z_STREAM_END&&r!==m.Z_OK)return this.onEnd(r),!(this.ended=!0);h.next_out&&(0!==h.avail_out&&r!==m.Z_STREAM_END&&(0!==h.avail_in||n!==m.Z_FINISH&&n!==m.Z_SYNC_FLUSH)||(\"string\"===this.options.to?(i=p.utf8border(h.output,h.next_out),s=h.next_out-i,a=p.buf2string(h.output,i),h.next_out=s,h.avail_out=u-s,s&&d.arraySet(h.output,h.output,i,s,0),this.onData(a)):this.onData(d.shrinkBuf(h.output,h.next_out)))),0===h.avail_in&&0===h.avail_out&&(f=!0)}while((0<h.avail_in||0===h.avail_out)&&r!==m.Z_STREAM_END);return r===m.Z_STREAM_END&&(n=m.Z_FINISH),n===m.Z_FINISH?(r=c.inflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===m.Z_OK):n!==m.Z_SYNC_FLUSH||(this.onEnd(m.Z_OK),!(h.avail_out=0))},a.prototype.onData=function(e){this.chunks.push(e)},a.prototype.onEnd=function(e){e===m.Z_OK&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=d.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},r.Inflate=a,r.inflate=o,r.inflateRaw=function(e,t){return(t=t||{}).raw=!0,o(e,t)},r.ungzip=o},{\"./utils/common\":41,\"./utils/strings\":42,\"./zlib/constants\":44,\"./zlib/gzheader\":47,\"./zlib/inflate\":49,\"./zlib/messages\":51,\"./zlib/zstream\":53}],41:[function(e,t,r){\"use strict\";var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Int32Array;r.assign=function(e){for(var t=Array.prototype.slice.call(arguments,1);t.length;){var r=t.shift();if(r){if(\"object\"!=typeof r)throw new TypeError(r+\"must be non-object\");for(var n in r)r.hasOwnProperty(n)&&(e[n]=r[n])}}return e},r.shrinkBuf=function(e,t){return e.length===t?e:e.subarray?e.subarray(0,t):(e.length=t,e)};var i={arraySet:function(e,t,r,n,i){if(t.subarray&&e.subarray)e.set(t.subarray(r,r+n),i);else for(var s=0;s<n;s++)e[i+s]=t[r+s]},flattenChunks:function(e){var t,r,n,i,s,a;for(t=n=0,r=e.length;t<r;t++)n+=e[t].length;for(a=new Uint8Array(n),t=i=0,r=e.length;t<r;t++)s=e[t],a.set(s,i),i+=s.length;return a}},s={arraySet:function(e,t,r,n,i){for(var s=0;s<n;s++)e[i+s]=t[r+s]},flattenChunks:function(e){return[].concat.apply([],e)}};r.setTyped=function(e){e?(r.Buf8=Uint8Array,r.Buf16=Uint16Array,r.Buf32=Int32Array,r.assign(r,i)):(r.Buf8=Array,r.Buf16=Array,r.Buf32=Array,r.assign(r,s))},r.setTyped(n)},{}],42:[function(e,t,r){\"use strict\";var h=e(\"./common\"),i=!0,s=!0;try{String.fromCharCode.apply(null,[0])}catch(e){i=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(e){s=!1}for(var u=new h.Buf8(256),n=0;n<256;n++)u[n]=252<=n?6:248<=n?5:240<=n?4:224<=n?3:192<=n?2:1;function l(e,t){if(t<65537&&(e.subarray&&s||!e.subarray&&i))return String.fromCharCode.apply(null,h.shrinkBuf(e,t));for(var r=\"\",n=0;n<t;n++)r+=String.fromCharCode(e[n]);return r}u[254]=u[254]=1,r.string2buf=function(e){var t,r,n,i,s,a=e.length,o=0;for(i=0;i<a;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),o+=r<128?1:r<2048?2:r<65536?3:4;for(t=new h.Buf8(o),i=s=0;s<o;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),r<128?t[s++]=r:(r<2048?t[s++]=192|r>>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t},r.buf2binstring=function(e){return l(e,e.length)},r.binstring2buf=function(e){for(var t=new h.Buf8(e.length),r=0,n=t.length;r<n;r++)t[r]=e.charCodeAt(r);return t},r.buf2string=function(e,t){var r,n,i,s,a=t||e.length,o=new Array(2*a);for(r=n=0;r<a;)if((i=e[r++])<128)o[n++]=i;else if(4<(s=u[i]))o[n++]=65533,r+=s-1;else{for(i&=2===s?31:3===s?15:7;1<s&&r<a;)i=i<<6|63&e[r++],s--;1<s?o[n++]=65533:i<65536?o[n++]=i:(i-=65536,o[n++]=55296|i>>10&1023,o[n++]=56320|1023&i)}return l(o,n)},r.utf8border=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}},{\"./common\":41}],43:[function(e,t,r){\"use strict\";t.exports=function(e,t,r,n){for(var i=65535&e|0,s=e>>>16&65535|0,a=0;0!==r;){for(r-=a=2e3<r?2e3:r;s=s+(i=i+t[n++]|0)|0,--a;);i%=65521,s%=65521}return i|s<<16|0}},{}],44:[function(e,t,r){\"use strict\";t.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],45:[function(e,t,r){\"use strict\";var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a<s;a++)e=e>>>8^i[255&(e^t[a])];return-1^e}},{}],46:[function(e,t,r){\"use strict\";var h,c=e(\"../utils/common\"),u=e(\"./trees\"),d=e(\"./adler32\"),p=e(\"./crc32\"),n=e(\"./messages\"),l=0,f=4,m=0,_=-2,g=-1,b=4,i=2,v=8,y=9,s=286,a=30,o=19,w=2*s+1,k=15,x=3,S=258,z=S+x+1,C=42,E=113,A=1,I=2,O=3,B=4;function R(e,t){return e.msg=n[t],t}function T(e){return(e<<1)-(4<e?9:0)}function D(e){for(var t=e.length;0<=--t;)e[t]=0}function F(e){var t=e.state,r=t.pending;r>e.avail_out&&(r=e.avail_out),0!==r&&(c.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function N(e,t){u._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,F(e.strm)}function U(e,t){e.pending_buf[e.pending++]=t}function P(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function L(e,t){var r,n,i=e.max_chain_length,s=e.strstart,a=e.prev_length,o=e.nice_match,h=e.strstart>e.w_size-z?e.strstart-(e.w_size-z):0,u=e.window,l=e.w_mask,f=e.prev,c=e.strstart+S,d=u[s+a-1],p=u[s+a];e.prev_length>=e.good_match&&(i>>=2),o>e.lookahead&&(o=e.lookahead);do{if(u[(r=t)+a]===p&&u[r+a-1]===d&&u[r]===u[s]&&u[++r]===u[s+1]){s+=2,r++;do{}while(u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&s<c);if(n=S-(c-s),s=c-S,a<n){if(e.match_start=t,o<=(a=n))break;d=u[s+a-1],p=u[s+a]}}}while((t=f[t&l])>h&&0!=--i);return a<=e.lookahead?a:e.lookahead}function j(e){var t,r,n,i,s,a,o,h,u,l,f=e.w_size;do{if(i=e.window_size-e.lookahead-e.strstart,e.strstart>=f+(f-z)){for(c.arraySet(e.window,e.window,f,f,0),e.match_start-=f,e.strstart-=f,e.block_start-=f,t=r=e.hash_size;n=e.head[--t],e.head[t]=f<=n?n-f:0,--r;);for(t=r=f;n=e.prev[--t],e.prev[t]=f<=n?n-f:0,--r;);i+=f}if(0===e.strm.avail_in)break;if(a=e.strm,o=e.window,h=e.strstart+e.lookahead,u=i,l=void 0,l=a.avail_in,u<l&&(l=u),r=0===l?0:(a.avail_in-=l,c.arraySet(o,a.input,a.next_in,l,h),1===a.state.wrap?a.adler=d(a.adler,o,l,h):2===a.state.wrap&&(a.adler=p(a.adler,o,l,h)),a.next_in+=l,a.total_in+=l,l),e.lookahead+=r,e.lookahead+e.insert>=x)for(s=e.strstart-e.insert,e.ins_h=e.window[s],e.ins_h=(e.ins_h<<e.hash_shift^e.window[s+1])&e.hash_mask;e.insert&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[s+x-1])&e.hash_mask,e.prev[s&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=s,s++,e.insert--,!(e.lookahead+e.insert<x)););}while(e.lookahead<z&&0!==e.strm.avail_in)}function Z(e,t){for(var r,n;;){if(e.lookahead<z){if(j(e),e.lookahead<z&&t===l)return A;if(0===e.lookahead)break}if(r=0,e.lookahead>=x&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!==r&&e.strstart-r<=e.w_size-z&&(e.match_length=L(e,r)),e.match_length>=x)if(n=u._tr_tally(e,e.strstart-e.match_start,e.match_length-x),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=x){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart,0!=--e.match_length;);e.strstart++}else e.strstart+=e.match_length,e.match_length=0,e.ins_h=e.window[e.strstart],e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+1])&e.hash_mask;else n=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++;if(n&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=e.strstart<x-1?e.strstart:x-1,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}function W(e,t){for(var r,n,i;;){if(e.lookahead<z){if(j(e),e.lookahead<z&&t===l)return A;if(0===e.lookahead)break}if(r=0,e.lookahead>=x&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),e.prev_length=e.match_length,e.prev_match=e.match_start,e.match_length=x-1,0!==r&&e.prev_length<e.max_lazy_match&&e.strstart-r<=e.w_size-z&&(e.match_length=L(e,r),e.match_length<=5&&(1===e.strategy||e.match_length===x&&4096<e.strstart-e.match_start)&&(e.match_length=x-1)),e.prev_length>=x&&e.match_length<=e.prev_length){for(i=e.strstart+e.lookahead-x,n=u._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-x),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=i&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!=--e.prev_length;);if(e.match_available=0,e.match_length=x-1,e.strstart++,n&&(N(e,!1),0===e.strm.avail_out))return A}else if(e.match_available){if((n=u._tr_tally(e,0,e.window[e.strstart-1]))&&N(e,!1),e.strstart++,e.lookahead--,0===e.strm.avail_out)return A}else e.match_available=1,e.strstart++,e.lookahead--}return e.match_available&&(n=u._tr_tally(e,0,e.window[e.strstart-1]),e.match_available=0),e.insert=e.strstart<x-1?e.strstart:x-1,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}function M(e,t,r,n,i){this.good_length=e,this.max_lazy=t,this.nice_length=r,this.max_chain=n,this.func=i}function H(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=v,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new c.Buf16(2*w),this.dyn_dtree=new c.Buf16(2*(2*a+1)),this.bl_tree=new c.Buf16(2*(2*o+1)),D(this.dyn_ltree),D(this.dyn_dtree),D(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new c.Buf16(k+1),this.heap=new c.Buf16(2*s+1),D(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new c.Buf16(2*s+1),D(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function G(e){var t;return e&&e.state?(e.total_in=e.total_out=0,e.data_type=i,(t=e.state).pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=t.wrap?C:E,e.adler=2===t.wrap?0:1,t.last_flush=l,u._tr_init(t),m):R(e,_)}function K(e){var t=G(e);return t===m&&function(e){e.window_size=2*e.w_size,D(e.head),e.max_lazy_match=h[e.level].max_lazy,e.good_match=h[e.level].good_length,e.nice_match=h[e.level].nice_length,e.max_chain_length=h[e.level].max_chain,e.strstart=0,e.block_start=0,e.lookahead=0,e.insert=0,e.match_length=e.prev_length=x-1,e.match_available=0,e.ins_h=0}(e.state),t}function Y(e,t,r,n,i,s){if(!e)return _;var a=1;if(t===g&&(t=6),n<0?(a=0,n=-n):15<n&&(a=2,n-=16),i<1||y<i||r!==v||n<8||15<n||t<0||9<t||s<0||b<s)return R(e,_);8===n&&(n=9);var o=new H;return(e.state=o).strm=e,o.wrap=a,o.gzhead=null,o.w_bits=n,o.w_size=1<<o.w_bits,o.w_mask=o.w_size-1,o.hash_bits=i+7,o.hash_size=1<<o.hash_bits,o.hash_mask=o.hash_size-1,o.hash_shift=~~((o.hash_bits+x-1)/x),o.window=new c.Buf8(2*o.w_size),o.head=new c.Buf16(o.hash_size),o.prev=new c.Buf16(o.w_size),o.lit_bufsize=1<<i+6,o.pending_buf_size=4*o.lit_bufsize,o.pending_buf=new c.Buf8(o.pending_buf_size),o.d_buf=1*o.lit_bufsize,o.l_buf=3*o.lit_bufsize,o.level=t,o.strategy=s,o.method=r,K(e)}h=[new M(0,0,0,0,function(e,t){var r=65535;for(r>e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(j(e),0===e.lookahead&&t===l)return A;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,N(e,!1),0===e.strm.avail_out))return A;if(e.strstart-e.block_start>=e.w_size-z&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):(e.strstart>e.block_start&&(N(e,!1),e.strm.avail_out),A)}),new M(4,4,8,4,Z),new M(4,5,16,8,Z),new M(4,6,32,32,Z),new M(4,4,16,16,W),new M(8,16,32,32,W),new M(8,16,128,128,W),new M(8,32,128,256,W),new M(32,128,258,1024,W),new M(32,258,258,4096,W)],r.deflateInit=function(e,t){return Y(e,t,v,15,8,0)},r.deflateInit2=Y,r.deflateReset=K,r.deflateResetKeep=G,r.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?_:(e.state.gzhead=t,m):_},r.deflate=function(e,t){var r,n,i,s;if(!e||!e.state||5<t||t<0)return e?R(e,_):_;if(n=e.state,!e.output||!e.input&&0!==e.avail_in||666===n.status&&t!==f)return R(e,0===e.avail_out?-5:_);if(n.strm=e,r=n.last_flush,n.last_flush=t,n.status===C)if(2===n.wrap)e.adler=0,U(n,31),U(n,139),U(n,8),n.gzhead?(U(n,(n.gzhead.text?1:0)+(n.gzhead.hcrc?2:0)+(n.gzhead.extra?4:0)+(n.gzhead.name?8:0)+(n.gzhead.comment?16:0)),U(n,255&n.gzhead.time),U(n,n.gzhead.time>>8&255),U(n,n.gzhead.time>>16&255),U(n,n.gzhead.time>>24&255),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(U(n,255&n.gzhead.extra.length),U(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=p(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69):(U(n,0),U(n,0),U(n,0),U(n,0),U(n,0),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,3),n.status=E);else{var a=v+(n.w_bits-8<<4)<<8;a|=(2<=n.strategy||n.level<2?0:n.level<6?1:6===n.level?2:3)<<6,0!==n.strstart&&(a|=32),a+=31-a%31,n.status=E,P(n,a),0!==n.strstart&&(P(n,e.adler>>>16),P(n,65535&e.adler)),e.adler=1}if(69===n.status)if(n.gzhead.extra){for(i=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending!==n.pending_buf_size));)U(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=73)}else n.status=73;if(73===n.status)if(n.gzhead.name){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindex<n.gzhead.name.length?255&n.gzhead.name.charCodeAt(n.gzindex++):0,U(n,s)}while(0!==s);n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.gzindex=0,n.status=91)}else n.status=91;if(91===n.status)if(n.gzhead.comment){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindex<n.gzhead.comment.length?255&n.gzhead.comment.charCodeAt(n.gzindex++):0,U(n,s)}while(0!==s);n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.status=103)}else n.status=103;if(103===n.status&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&F(e),n.pending+2<=n.pending_buf_size&&(U(n,255&e.adler),U(n,e.adler>>8&255),e.adler=0,n.status=E)):n.status=E),0!==n.pending){if(F(e),0===e.avail_out)return n.last_flush=-1,m}else if(0===e.avail_in&&T(t)<=T(r)&&t!==f)return R(e,-5);if(666===n.status&&0!==e.avail_in)return R(e,-5);if(0!==e.avail_in||0!==n.lookahead||t!==l&&666!==n.status){var o=2===n.strategy?function(e,t){for(var r;;){if(0===e.lookahead&&(j(e),0===e.lookahead)){if(t===l)return A;break}if(e.match_length=0,r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):3===n.strategy?function(e,t){for(var r,n,i,s,a=e.window;;){if(e.lookahead<=S){if(j(e),e.lookahead<=S&&t===l)return A;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=x&&0<e.strstart&&(n=a[i=e.strstart-1])===a[++i]&&n===a[++i]&&n===a[++i]){s=e.strstart+S;do{}while(n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&i<s);e.match_length=S-(s-i),e.match_length>e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=x?(r=u._tr_tally(e,1,e.match_length-x),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):h[n.level].func(n,t);if(o!==O&&o!==B||(n.status=666),o===A||o===O)return 0===e.avail_out&&(n.last_flush=-1),m;if(o===I&&(1===t?u._tr_align(n):5!==t&&(u._tr_stored_block(n,0,0,!1),3===t&&(D(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),F(e),0===e.avail_out))return n.last_flush=-1,m}return t!==f?m:n.wrap<=0?1:(2===n.wrap?(U(n,255&e.adler),U(n,e.adler>>8&255),U(n,e.adler>>16&255),U(n,e.adler>>24&255),U(n,255&e.total_in),U(n,e.total_in>>8&255),U(n,e.total_in>>16&255),U(n,e.total_in>>24&255)):(P(n,e.adler>>>16),P(n,65535&e.adler)),F(e),0<n.wrap&&(n.wrap=-n.wrap),0!==n.pending?m:1)},r.deflateEnd=function(e){var t;return e&&e.state?(t=e.state.status)!==C&&69!==t&&73!==t&&91!==t&&103!==t&&t!==E&&666!==t?R(e,_):(e.state=null,t===E?R(e,-3):m):_},r.deflateSetDictionary=function(e,t){var r,n,i,s,a,o,h,u,l=t.length;if(!e||!e.state)return _;if(2===(s=(r=e.state).wrap)||1===s&&r.status!==C||r.lookahead)return _;for(1===s&&(e.adler=d(e.adler,t,l,0)),r.wrap=0,l>=r.w_size&&(0===s&&(D(r.head),r.strstart=0,r.block_start=0,r.insert=0),u=new c.Buf8(r.w_size),c.arraySet(u,t,l-r.w_size,r.w_size,0),t=u,l=r.w_size),a=e.avail_in,o=e.next_in,h=e.input,e.avail_in=l,e.next_in=0,e.input=t,j(r);r.lookahead>=x;){for(n=r.strstart,i=r.lookahead-(x-1);r.ins_h=(r.ins_h<<r.hash_shift^r.window[n+x-1])&r.hash_mask,r.prev[n&r.w_mask]=r.head[r.ins_h],r.head[r.ins_h]=n,n++,--i;);r.strstart=n,r.lookahead=x-1,j(r)}return r.strstart+=r.lookahead,r.block_start=r.strstart,r.insert=r.lookahead,r.lookahead=0,r.match_length=r.prev_length=x-1,r.match_available=0,e.next_in=o,e.input=h,e.avail_in=a,r.wrap=s,m},r.deflateInfo=\"pako deflate (from Nodeca project)\"},{\"../utils/common\":41,\"./adler32\":43,\"./crc32\":45,\"./messages\":51,\"./trees\":52}],47:[function(e,t,r){\"use strict\";t.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name=\"\",this.comment=\"\",this.hcrc=0,this.done=!1}},{}],48:[function(e,t,r){\"use strict\";t.exports=function(e,t){var r,n,i,s,a,o,h,u,l,f,c,d,p,m,_,g,b,v,y,w,k,x,S,z,C;r=e.state,n=e.next_in,z=e.input,i=n+(e.avail_in-5),s=e.next_out,C=e.output,a=s-(t-e.avail_out),o=s+(e.avail_out-257),h=r.dmax,u=r.wsize,l=r.whave,f=r.wnext,c=r.window,d=r.hold,p=r.bits,m=r.lencode,_=r.distcode,g=(1<<r.lenbits)-1,b=(1<<r.distbits)-1;e:do{p<15&&(d+=z[n++]<<p,p+=8,d+=z[n++]<<p,p+=8),v=m[d&g];t:for(;;){if(d>>>=y=v>>>24,p-=y,0===(y=v>>>16&255))C[s++]=65535&v;else{if(!(16&y)){if(0==(64&y)){v=m[(65535&v)+(d&(1<<y)-1)];continue t}if(32&y){r.mode=12;break e}e.msg=\"invalid literal/length code\",r.mode=30;break e}w=65535&v,(y&=15)&&(p<y&&(d+=z[n++]<<p,p+=8),w+=d&(1<<y)-1,d>>>=y,p-=y),p<15&&(d+=z[n++]<<p,p+=8,d+=z[n++]<<p,p+=8),v=_[d&b];r:for(;;){if(d>>>=y=v>>>24,p-=y,!(16&(y=v>>>16&255))){if(0==(64&y)){v=_[(65535&v)+(d&(1<<y)-1)];continue r}e.msg=\"invalid distance code\",r.mode=30;break e}if(k=65535&v,p<(y&=15)&&(d+=z[n++]<<p,(p+=8)<y&&(d+=z[n++]<<p,p+=8)),h<(k+=d&(1<<y)-1)){e.msg=\"invalid distance too far back\",r.mode=30;break e}if(d>>>=y,p-=y,(y=s-a)<k){if(l<(y=k-y)&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break e}if(S=c,(x=0)===f){if(x+=u-y,y<w){for(w-=y;C[s++]=c[x++],--y;);x=s-k,S=C}}else if(f<y){if(x+=u+f-y,(y-=f)<w){for(w-=y;C[s++]=c[x++],--y;);if(x=0,f<w){for(w-=y=f;C[s++]=c[x++],--y;);x=s-k,S=C}}}else if(x+=f-y,y<w){for(w-=y;C[s++]=c[x++],--y;);x=s-k,S=C}for(;2<w;)C[s++]=S[x++],C[s++]=S[x++],C[s++]=S[x++],w-=3;w&&(C[s++]=S[x++],1<w&&(C[s++]=S[x++]))}else{for(x=s-k;C[s++]=C[x++],C[s++]=C[x++],C[s++]=C[x++],2<(w-=3););w&&(C[s++]=C[x++],1<w&&(C[s++]=C[x++]))}break}}break}}while(n<i&&s<o);n-=w=p>>3,d&=(1<<(p-=w<<3))-1,e.next_in=n,e.next_out=s,e.avail_in=n<i?i-n+5:5-(n-i),e.avail_out=s<o?o-s+257:257-(s-o),r.hold=d,r.bits=p}},{}],49:[function(e,t,r){\"use strict\";var I=e(\"../utils/common\"),O=e(\"./adler32\"),B=e(\"./crc32\"),R=e(\"./inffast\"),T=e(\"./inftrees\"),D=1,F=2,N=0,U=-2,P=1,n=852,i=592;function L(e){return(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function s(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new I.Buf16(320),this.work=new I.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function a(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg=\"\",t.wrap&&(e.adler=1&t.wrap),t.mode=P,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new I.Buf32(n),t.distcode=t.distdyn=new I.Buf32(i),t.sane=1,t.back=-1,N):U}function o(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,a(e)):U}function h(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15<t)?U:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=r,n.wbits=t,o(e))):U}function u(e,t){var r,n;return e?(n=new s,(e.state=n).window=null,(r=h(e,t))!==N&&(e.state=null),r):U}var l,f,c=!0;function j(e){if(c){var t;for(l=new I.Buf32(512),f=new I.Buf32(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(T(D,e.lens,0,288,l,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;T(F,e.lens,0,32,f,0,e.work,{bits:5}),c=!1}e.lencode=l,e.lenbits=9,e.distcode=f,e.distbits=5}function Z(e,t,r,n){var i,s=e.state;return null===s.window&&(s.wsize=1<<s.wbits,s.wnext=0,s.whave=0,s.window=new I.Buf8(s.wsize)),n>=s.wsize?(I.arraySet(s.window,t,r-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):(n<(i=s.wsize-s.wnext)&&(i=n),I.arraySet(s.window,t,r-n,i,s.wnext),(n-=i)?(I.arraySet(s.window,t,r-n,n,0),s.wnext=n,s.whave=s.wsize):(s.wnext+=i,s.wnext===s.wsize&&(s.wnext=0),s.whave<s.wsize&&(s.whave+=i))),0}r.inflateReset=o,r.inflateReset2=h,r.inflateResetKeep=a,r.inflateInit=function(e){return u(e,15)},r.inflateInit2=u,r.inflate=function(e,t){var r,n,i,s,a,o,h,u,l,f,c,d,p,m,_,g,b,v,y,w,k,x,S,z,C=0,E=new I.Buf8(4),A=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!e||!e.state||!e.output||!e.input&&0!==e.avail_in)return U;12===(r=e.state).mode&&(r.mode=13),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,u=r.hold,l=r.bits,f=o,c=h,x=N;e:for(;;)switch(r.mode){case P:if(0===r.wrap){r.mode=13;break}for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(2&r.wrap&&35615===u){E[r.check=0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0),l=u=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&u)<<8)+(u>>8))%31){e.msg=\"incorrect header check\",r.mode=30;break}if(8!=(15&u)){e.msg=\"unknown compression method\",r.mode=30;break}if(l-=4,k=8+(15&(u>>>=4)),0===r.wbits)r.wbits=k;else if(k>r.wbits){e.msg=\"invalid window size\",r.mode=30;break}r.dmax=1<<k,e.adler=r.check=1,r.mode=512&u?10:12,l=u=0;break;case 2:for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(r.flags=u,8!=(255&r.flags)){e.msg=\"unknown compression method\",r.mode=30;break}if(57344&r.flags){e.msg=\"unknown header flags set\",r.mode=30;break}r.head&&(r.head.text=u>>8&1),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=3;case 3:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.head&&(r.head.time=u),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,E[2]=u>>>16&255,E[3]=u>>>24&255,r.check=B(r.check,E,4,0)),l=u=0,r.mode=4;case 4:for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.head&&(r.head.xflags=255&u,r.head.os=u>>8),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=5;case 5:if(1024&r.flags){for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.length=u,r.head&&(r.head.extra_len=u),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(o<(d=r.length)&&(d=o),d&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),I.arraySet(r.head.extra,n,s,d,k)),512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,r.length-=d),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k)),k&&d<o;);if(512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,k)break e}else r.head&&(r.head.name=null);r.length=0,r.mode=8;case 8:if(4096&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.comment+=String.fromCharCode(k)),k&&d<o;);if(512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,k)break e}else r.head&&(r.head.comment=null);r.mode=9;case 9:if(512&r.flags){for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(u!==(65535&r.check)){e.msg=\"header crc mismatch\",r.mode=30;break}l=u=0}r.head&&(r.head.hcrc=r.flags>>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=12;break;case 10:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}e.adler=r.check=L(u),l=u=0,r.mode=11;case 11:if(0===r.havedict)return e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,2;e.adler=r.check=1,r.mode=12;case 12:if(5===t||6===t)break e;case 13:if(r.last){u>>>=7&l,l-=7&l,r.mode=27;break}for(;l<3;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}switch(r.last=1&u,l-=1,3&(u>>>=1)){case 0:r.mode=14;break;case 1:if(j(r),r.mode=20,6!==t)break;u>>>=2,l-=2;break e;case 2:r.mode=17;break;case 3:e.msg=\"invalid block type\",r.mode=30}u>>>=2,l-=2;break;case 14:for(u>>>=7&l,l-=7&l;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if((65535&u)!=(u>>>16^65535)){e.msg=\"invalid stored block lengths\",r.mode=30;break}if(r.length=65535&u,l=u=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(d=r.length){if(o<d&&(d=o),h<d&&(d=h),0===d)break e;I.arraySet(i,n,s,d,a),o-=d,s+=d,h-=d,a+=d,r.length-=d;break}r.mode=12;break;case 17:for(;l<14;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(r.nlen=257+(31&u),u>>>=5,l-=5,r.ndist=1+(31&u),u>>>=5,l-=5,r.ncode=4+(15&u),u>>>=4,l-=4,286<r.nlen||30<r.ndist){e.msg=\"too many length or distance symbols\",r.mode=30;break}r.have=0,r.mode=18;case 18:for(;r.have<r.ncode;){for(;l<3;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.lens[A[r.have++]]=7&u,u>>>=3,l-=3}for(;r.have<19;)r.lens[A[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,S={bits:r.lenbits},x=T(0,r.lens,0,19,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid code lengths set\",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have<r.nlen+r.ndist;){for(;g=(C=r.lencode[u&(1<<r.lenbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(b<16)u>>>=_,l-=_,r.lens[r.have++]=b;else{if(16===b){for(z=_+2;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(u>>>=_,l-=_,0===r.have){e.msg=\"invalid bit length repeat\",r.mode=30;break}k=r.lens[r.have-1],d=3+(3&u),u>>>=2,l-=2}else if(17===b){for(z=_+3;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}l-=_,k=0,d=3+(7&(u>>>=_)),u>>>=3,l-=3}else{for(z=_+7;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}l-=_,k=0,d=11+(127&(u>>>=_)),u>>>=7,l-=7}if(r.have+d>r.nlen+r.ndist){e.msg=\"invalid bit length repeat\",r.mode=30;break}for(;d--;)r.lens[r.have++]=k}}if(30===r.mode)break;if(0===r.lens[256]){e.msg=\"invalid code -- missing end-of-block\",r.mode=30;break}if(r.lenbits=9,S={bits:r.lenbits},x=T(D,r.lens,0,r.nlen,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid literal/lengths set\",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,S={bits:r.distbits},x=T(F,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,S),r.distbits=S.bits,x){e.msg=\"invalid distances set\",r.mode=30;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(6<=o&&258<=h){e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,R(e,c),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,u=r.hold,l=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;g=(C=r.lencode[u&(1<<r.lenbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(g&&0==(240&g)){for(v=_,y=g,w=b;g=(C=r.lencode[w+((u&(1<<v+y)-1)>>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}u>>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,r.length=b,0===g){r.mode=26;break}if(32&g){r.back=-1,r.mode=12;break}if(64&g){e.msg=\"invalid literal/length code\",r.mode=30;break}r.extra=15&g,r.mode=22;case 22:if(r.extra){for(z=r.extra;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.length+=u&(1<<r.extra)-1,u>>>=r.extra,l-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;g=(C=r.distcode[u&(1<<r.distbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(0==(240&g)){for(v=_,y=g,w=b;g=(C=r.distcode[w+((u&(1<<v+y)-1)>>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}u>>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,64&g){e.msg=\"invalid distance code\",r.mode=30;break}r.offset=b,r.extra=15&g,r.mode=24;case 24:if(r.extra){for(z=r.extra;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.offset+=u&(1<<r.extra)-1,u>>>=r.extra,l-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg=\"invalid distance too far back\",r.mode=30;break}r.mode=25;case 25:if(0===h)break e;if(d=c-h,r.offset>d){if((d=r.offset-d)>r.whave&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break}p=d>r.wnext?(d-=r.wnext,r.wsize-d):r.wnext-d,d>r.length&&(d=r.length),m=r.window}else m=i,p=a-r.offset,d=r.length;for(h<d&&(d=h),h-=d,r.length-=d;i[a++]=m[p++],--d;);0===r.length&&(r.mode=21);break;case 26:if(0===h)break e;i[a++]=r.length,h--,r.mode=21;break;case 27:if(r.wrap){for(;l<32;){if(0===o)break e;o--,u|=n[s++]<<l,l+=8}if(c-=h,e.total_out+=c,r.total+=c,c&&(e.adler=r.check=r.flags?B(r.check,i,c,a-c):O(r.check,i,c,a-c)),c=h,(r.flags?u:L(u))!==r.check){e.msg=\"incorrect data check\",r.mode=30;break}l=u=0}r.mode=28;case 28:if(r.wrap&&r.flags){for(;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(u!==(4294967295&r.total)){e.msg=\"incorrect length check\",r.mode=30;break}l=u=0}r.mode=29;case 29:x=1;break e;case 30:x=-3;break e;case 31:return-4;case 32:default:return U}return e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,(r.wsize||c!==e.avail_out&&r.mode<30&&(r.mode<27||4!==t))&&Z(e,e.output,e.next_out,c-e.avail_out)?(r.mode=31,-4):(f-=e.avail_in,c-=e.avail_out,e.total_in+=f,e.total_out+=c,r.total+=c,r.wrap&&c&&(e.adler=r.check=r.flags?B(r.check,i,c,e.next_out-c):O(r.check,i,c,e.next_out-c)),e.data_type=r.bits+(r.last?64:0)+(12===r.mode?128:0)+(20===r.mode||15===r.mode?256:0),(0==f&&0===c||4===t)&&x===N&&(x=-5),x)},r.inflateEnd=function(e){if(!e||!e.state)return U;var t=e.state;return t.window&&(t.window=null),e.state=null,N},r.inflateGetHeader=function(e,t){var r;return e&&e.state?0==(2&(r=e.state).wrap)?U:((r.head=t).done=!1,N):U},r.inflateSetDictionary=function(e,t){var r,n=t.length;return e&&e.state?0!==(r=e.state).wrap&&11!==r.mode?U:11===r.mode&&O(1,t,n,0)!==r.check?-3:Z(e,t,n,n)?(r.mode=31,-4):(r.havedict=1,N):U},r.inflateInfo=\"pako inflate (from Nodeca project)\"},{\"../utils/common\":41,\"./adler32\":43,\"./crc32\":45,\"./inffast\":48,\"./inftrees\":50}],50:[function(e,t,r){\"use strict\";var D=e(\"../utils/common\"),F=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],N=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],U=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],P=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];t.exports=function(e,t,r,n,i,s,a,o){var h,u,l,f,c,d,p,m,_,g=o.bits,b=0,v=0,y=0,w=0,k=0,x=0,S=0,z=0,C=0,E=0,A=null,I=0,O=new D.Buf16(16),B=new D.Buf16(16),R=null,T=0;for(b=0;b<=15;b++)O[b]=0;for(v=0;v<n;v++)O[t[r+v]]++;for(k=g,w=15;1<=w&&0===O[w];w--);if(w<k&&(k=w),0===w)return i[s++]=20971520,i[s++]=20971520,o.bits=1,0;for(y=1;y<w&&0===O[y];y++);for(k<y&&(k=y),b=z=1;b<=15;b++)if(z<<=1,(z-=O[b])<0)return-1;if(0<z&&(0===e||1!==w))return-1;for(B[1]=0,b=1;b<15;b++)B[b+1]=B[b]+O[b];for(v=0;v<n;v++)0!==t[r+v]&&(a[B[t[r+v]]++]=v);if(d=0===e?(A=R=a,19):1===e?(A=F,I-=257,R=N,T-=257,256):(A=U,R=P,-1),b=y,c=s,S=v=E=0,l=-1,f=(C=1<<(x=k))-1,1===e&&852<C||2===e&&592<C)return 1;for(;;){for(p=b-S,_=a[v]<d?(m=0,a[v]):a[v]>d?(m=R[T+a[v]],A[I+a[v]]):(m=96,0),h=1<<b-S,y=u=1<<x;i[c+(E>>S)+(u-=h)]=p<<24|m<<16|_|0,0!==u;);for(h=1<<b-1;E&h;)h>>=1;if(0!==h?(E&=h-1,E+=h):E=0,v++,0==--O[b]){if(b===w)break;b=t[r+a[v]]}if(k<b&&(E&f)!==l){for(0===S&&(S=k),c+=y,z=1<<(x=b-S);x+S<w&&!((z-=O[x+S])<=0);)x++,z<<=1;if(C+=1<<x,1===e&&852<C||2===e&&592<C)return 1;i[l=E&f]=k<<24|x<<16|c-s|0}}return 0!==E&&(i[c+E]=b-S<<24|64<<16|0),o.bits=k,0}},{\"../utils/common\":41}],51:[function(e,t,r){\"use strict\";t.exports={2:\"need dictionary\",1:\"stream end\",0:\"\",\"-1\":\"file error\",\"-2\":\"stream error\",\"-3\":\"data error\",\"-4\":\"insufficient memory\",\"-5\":\"buffer error\",\"-6\":\"incompatible version\"}},{}],52:[function(e,t,r){\"use strict\";var i=e(\"../utils/common\"),o=0,h=1;function n(e){for(var t=e.length;0<=--t;)e[t]=0}var s=0,a=29,u=256,l=u+1+a,f=30,c=19,_=2*l+1,g=15,d=16,p=7,m=256,b=16,v=17,y=18,w=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],k=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],x=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],S=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],z=new Array(2*(l+2));n(z);var C=new Array(2*f);n(C);var E=new Array(512);n(E);var A=new Array(256);n(A);var I=new Array(a);n(I);var O,B,R,T=new Array(f);function D(e,t,r,n,i){this.static_tree=e,this.extra_bits=t,this.extra_base=r,this.elems=n,this.max_length=i,this.has_stree=e&&e.length}function F(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}function N(e){return e<256?E[e]:E[256+(e>>>7)]}function U(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function P(e,t,r){e.bi_valid>d-r?(e.bi_buf|=t<<e.bi_valid&65535,U(e,e.bi_buf),e.bi_buf=t>>d-e.bi_valid,e.bi_valid+=r-d):(e.bi_buf|=t<<e.bi_valid&65535,e.bi_valid+=r)}function L(e,t,r){P(e,r[2*t],r[2*t+1])}function j(e,t){for(var r=0;r|=1&e,e>>>=1,r<<=1,0<--t;);return r>>>1}function Z(e,t,r){var n,i,s=new Array(g+1),a=0;for(n=1;n<=g;n++)s[n]=a=a+r[n-1]<<1;for(i=0;i<=t;i++){var o=e[2*i+1];0!==o&&(e[2*i]=j(s[o]++,o))}}function W(e){var t;for(t=0;t<l;t++)e.dyn_ltree[2*t]=0;for(t=0;t<f;t++)e.dyn_dtree[2*t]=0;for(t=0;t<c;t++)e.bl_tree[2*t]=0;e.dyn_ltree[2*m]=1,e.opt_len=e.static_len=0,e.last_lit=e.matches=0}function M(e){8<e.bi_valid?U(e,e.bi_buf):0<e.bi_valid&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function H(e,t,r,n){var i=2*t,s=2*r;return e[i]<e[s]||e[i]===e[s]&&n[t]<=n[r]}function G(e,t,r){for(var n=e.heap[r],i=r<<1;i<=e.heap_len&&(i<e.heap_len&&H(t,e.heap[i+1],e.heap[i],e.depth)&&i++,!H(t,n,e.heap[i],e.depth));)e.heap[r]=e.heap[i],r=i,i<<=1;e.heap[r]=n}function K(e,t,r){var n,i,s,a,o=0;if(0!==e.last_lit)for(;n=e.pending_buf[e.d_buf+2*o]<<8|e.pending_buf[e.d_buf+2*o+1],i=e.pending_buf[e.l_buf+o],o++,0===n?L(e,i,t):(L(e,(s=A[i])+u+1,t),0!==(a=w[s])&&P(e,i-=I[s],a),L(e,s=N(--n),r),0!==(a=k[s])&&P(e,n-=T[s],a)),o<e.last_lit;);L(e,m,t)}function Y(e,t){var r,n,i,s=t.dyn_tree,a=t.stat_desc.static_tree,o=t.stat_desc.has_stree,h=t.stat_desc.elems,u=-1;for(e.heap_len=0,e.heap_max=_,r=0;r<h;r++)0!==s[2*r]?(e.heap[++e.heap_len]=u=r,e.depth[r]=0):s[2*r+1]=0;for(;e.heap_len<2;)s[2*(i=e.heap[++e.heap_len]=u<2?++u:0)]=1,e.depth[i]=0,e.opt_len--,o&&(e.static_len-=a[2*i+1]);for(t.max_code=u,r=e.heap_len>>1;1<=r;r--)G(e,s,r);for(i=h;r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],G(e,s,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,s[2*i]=s[2*r]+s[2*n],e.depth[i]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,s[2*r+1]=s[2*n+1]=i,e.heap[1]=i++,G(e,s,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,i,s,a,o,h=t.dyn_tree,u=t.max_code,l=t.stat_desc.static_tree,f=t.stat_desc.has_stree,c=t.stat_desc.extra_bits,d=t.stat_desc.extra_base,p=t.stat_desc.max_length,m=0;for(s=0;s<=g;s++)e.bl_count[s]=0;for(h[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<_;r++)p<(s=h[2*h[2*(n=e.heap[r])+1]+1]+1)&&(s=p,m++),h[2*n+1]=s,u<n||(e.bl_count[s]++,a=0,d<=n&&(a=c[n-d]),o=h[2*n],e.opt_len+=o*(s+a),f&&(e.static_len+=o*(l[2*n+1]+a)));if(0!==m){do{for(s=p-1;0===e.bl_count[s];)s--;e.bl_count[s]--,e.bl_count[s+1]+=2,e.bl_count[p]--,m-=2}while(0<m);for(s=p;0!==s;s--)for(n=e.bl_count[s];0!==n;)u<(i=e.heap[--r])||(h[2*i+1]!==s&&(e.opt_len+=(s-h[2*i+1])*h[2*i],h[2*i+1]=s),n--)}}(e,t),Z(s,u,e.bl_count)}function X(e,t,r){var n,i,s=-1,a=t[1],o=0,h=7,u=4;for(0===a&&(h=138,u=3),t[2*(r+1)+1]=65535,n=0;n<=r;n++)i=a,a=t[2*(n+1)+1],++o<h&&i===a||(o<u?e.bl_tree[2*i]+=o:0!==i?(i!==s&&e.bl_tree[2*i]++,e.bl_tree[2*b]++):o<=10?e.bl_tree[2*v]++:e.bl_tree[2*y]++,s=i,u=(o=0)===a?(h=138,3):i===a?(h=6,3):(h=7,4))}function V(e,t,r){var n,i,s=-1,a=t[1],o=0,h=7,u=4;for(0===a&&(h=138,u=3),n=0;n<=r;n++)if(i=a,a=t[2*(n+1)+1],!(++o<h&&i===a)){if(o<u)for(;L(e,i,e.bl_tree),0!=--o;);else 0!==i?(i!==s&&(L(e,i,e.bl_tree),o--),L(e,b,e.bl_tree),P(e,o-3,2)):o<=10?(L(e,v,e.bl_tree),P(e,o-3,3)):(L(e,y,e.bl_tree),P(e,o-11,7));s=i,u=(o=0)===a?(h=138,3):i===a?(h=6,3):(h=7,4)}}n(T);var q=!1;function J(e,t,r,n){P(e,(s<<1)+(n?1:0),3),function(e,t,r,n){M(e),n&&(U(e,r),U(e,~r)),i.arraySet(e.pending_buf,e.window,t,r,e.pending),e.pending+=r}(e,t,r,!0)}r._tr_init=function(e){q||(function(){var e,t,r,n,i,s=new Array(g+1);for(n=r=0;n<a-1;n++)for(I[n]=r,e=0;e<1<<w[n];e++)A[r++]=n;for(A[r-1]=n,n=i=0;n<16;n++)for(T[n]=i,e=0;e<1<<k[n];e++)E[i++]=n;for(i>>=7;n<f;n++)for(T[n]=i<<7,e=0;e<1<<k[n]-7;e++)E[256+i++]=n;for(t=0;t<=g;t++)s[t]=0;for(e=0;e<=143;)z[2*e+1]=8,e++,s[8]++;for(;e<=255;)z[2*e+1]=9,e++,s[9]++;for(;e<=279;)z[2*e+1]=7,e++,s[7]++;for(;e<=287;)z[2*e+1]=8,e++,s[8]++;for(Z(z,l+1,s),e=0;e<f;e++)C[2*e+1]=5,C[2*e]=j(e,5);O=new D(z,w,u+1,l,g),B=new D(C,k,0,f,g),R=new D(new Array(0),x,0,c,p)}(),q=!0),e.l_desc=new F(e.dyn_ltree,O),e.d_desc=new F(e.dyn_dtree,B),e.bl_desc=new F(e.bl_tree,R),e.bi_buf=0,e.bi_valid=0,W(e)},r._tr_stored_block=J,r._tr_flush_block=function(e,t,r,n){var i,s,a=0;0<e.level?(2===e.strm.data_type&&(e.strm.data_type=function(e){var t,r=4093624447;for(t=0;t<=31;t++,r>>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return o;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return h;for(t=32;t<u;t++)if(0!==e.dyn_ltree[2*t])return h;return o}(e)),Y(e,e.l_desc),Y(e,e.d_desc),a=function(e){var t;for(X(e,e.dyn_ltree,e.l_desc.max_code),X(e,e.dyn_dtree,e.d_desc.max_code),Y(e,e.bl_desc),t=c-1;3<=t&&0===e.bl_tree[2*S[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t}(e),i=e.opt_len+3+7>>>3,(s=e.static_len+3+7>>>3)<=i&&(i=s)):i=s=r+5,r+4<=i&&-1!==t?J(e,t,r,n):4===e.strategy||s===i?(P(e,2+(n?1:0),3),K(e,z,C)):(P(e,4+(n?1:0),3),function(e,t,r,n){var i;for(P(e,t-257,5),P(e,r-1,5),P(e,n-4,4),i=0;i<n;i++)P(e,e.bl_tree[2*S[i]+1],3);V(e,e.dyn_ltree,t-1),V(e,e.dyn_dtree,r-1)}(e,e.l_desc.max_code+1,e.d_desc.max_code+1,a+1),K(e,e.dyn_ltree,e.dyn_dtree)),W(e),n&&M(e)},r._tr_tally=function(e,t,r){return e.pending_buf[e.d_buf+2*e.last_lit]=t>>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(A[r]+u+1)]++,e.dyn_dtree[2*N(t)]++),e.last_lit===e.lit_bufsize-1},r._tr_align=function(e){P(e,2,3),L(e,m,z),function(e){16===e.bi_valid?(U(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{\"../utils/common\":41}],53:[function(e,t,r){\"use strict\";t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(e,t,r){(function(e){!function(r,n){\"use strict\";if(!r.setImmediate){var i,s,t,a,o=1,h={},u=!1,l=r.document,e=Object.getPrototypeOf&&Object.getPrototypeOf(r);e=e&&e.setTimeout?e:r,i=\"[object process]\"==={}.toString.call(r.process)?function(e){process.nextTick(function(){c(e)})}:function(){if(r.postMessage&&!r.importScripts){var e=!0,t=r.onmessage;return r.onmessage=function(){e=!1},r.postMessage(\"\",\"*\"),r.onmessage=t,e}}()?(a=\"setImmediate$\"+Math.random()+\"$\",r.addEventListener?r.addEventListener(\"message\",d,!1):r.attachEvent(\"onmessage\",d),function(e){r.postMessage(a+e,\"*\")}):r.MessageChannel?((t=new MessageChannel).port1.onmessage=function(e){c(e.data)},function(e){t.port2.postMessage(e)}):l&&\"onreadystatechange\"in l.createElement(\"script\")?(s=l.documentElement,function(e){var t=l.createElement(\"script\");t.onreadystatechange=function(){c(e),t.onreadystatechange=null,s.removeChild(t),t=null},s.appendChild(t)}):function(e){setTimeout(c,0,e)},e.setImmediate=function(e){\"function\"!=typeof e&&(e=new Function(\"\"+e));for(var t=new Array(arguments.length-1),r=0;r<t.length;r++)t[r]=arguments[r+1];var n={callback:e,args:t};return h[o]=n,i(o),o++},e.clearImmediate=f}function f(e){delete h[e]}function c(e){if(u)setTimeout(c,0,e);else{var t=h[e];if(t){u=!0;try{!function(e){var t=e.callback,r=e.args;switch(r.length){case 0:t();break;case 1:t(r[0]);break;case 2:t(r[0],r[1]);break;case 3:t(r[0],r[1],r[2]);break;default:t.apply(n,r)}}(t)}finally{f(e),u=!1}}}}function d(e){e.source===r&&\"string\"==typeof e.data&&0===e.data.indexOf(a)&&c(+e.data.slice(a.length))}}(\"undefined\"==typeof self?void 0===e?this:e:self)}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}]},{},[10])(10)});","'use strict';\n\n/**\n * Create a bound version of a function with a specified `this` context\n *\n * @param {Function} fn - The function to bind\n * @param {*} thisArg - The value to be passed as the `this` parameter\n * @returns {Function} A new function that will call the original function with the specified `this` context\n */\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n","'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\nconst {iterator, toStringTag} = Symbol;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(toStringTag in val) && !(iterator in val);\n}\n\n/**\n * Determine if a value is an empty object (safely handles Buffers)\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an empty object, otherwise false\n */\nconst isEmptyObject = (val) => {\n // Early return for non-objects or Buffers to prevent RangeError\n if (!isObject(val) || isBuffer(val)) {\n return false;\n }\n\n try {\n return Object.keys(val).length === 0 && Object.getPrototypeOf(val) === Object.prototype;\n } catch (e) {\n // Fallback for any other objects that might cause RangeError with Object.keys()\n return false;\n }\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) || (\n isFunction(thing.append) && (\n (kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n )\n )\n )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Buffer check\n if (isBuffer(obj)) {\n return;\n }\n\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n if (isBuffer(obj)){\n return null;\n }\n\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless, skipUndefined} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else if (!skipUndefined || !isUndefined(val)) {\n result[targetKey] = val;\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[iterator];\n\n const _iterator = generator.call(obj);\n\n let result;\n\n while ((result = _iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n }\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n}\n\n\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[toStringTag] === 'FormData' && thing[iterator]);\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n //Buffer check\n if (isBuffer(source)) {\n return source;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n }\n\n return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n if (setImmediateSupported) {\n return setImmediate;\n }\n\n return postMessageSupported ? ((token, callbacks) => {\n _global.addEventListener(\"message\", ({source, data}) => {\n if (source === _global && data === token) {\n callbacks.length && callbacks.shift()();\n }\n }, false);\n\n return (cb) => {\n callbacks.push(cb);\n _global.postMessage(token, \"*\");\n }\n })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\n})(\n typeof setImmediate === 'function',\n isFunction(_global.postMessage)\n);\n\nconst asap = typeof queueMicrotask !== 'undefined' ?\n queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate);\n\n// *********************\n\n\nconst isIterable = (thing) => thing != null && isFunction(thing[iterator]);\n\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isEmptyObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable,\n setImmediate: _setImmediate,\n asap,\n isIterable\n};\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n if (response) {\n this.response = response;\n this.status = response.status ? response.status : null;\n }\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.status\n };\n }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n const msg = error && error.message ? error.message : 'Error';\n\n // Prefer explicit code; otherwise copy the low-level error's code (e.g. ECONNREFUSED)\n const errCode = code == null && error ? error.code : code;\n AxiosError.call(axiosError, msg, errCode, config, request, response);\n\n // Chain the original error on the standard field; non-enumerable to avoid JSON noise\n if (error && axiosError.cause == null) {\n Object.defineProperty(axiosError, 'cause', { value: error, configurable: true });\n }\n\n axiosError.name = (error && error.name) || 'Error';\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nexport default AxiosError;\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (utils.isBoolean(value)) {\n return value.toString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array<String|Number>} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n if (utils.isFunction(options)) {\n options = {\n serialize: options\n };\n } \n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {void}\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv,\n _navigator as navigator,\n origin\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), {\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n },\n ...options\n });\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data) ||\n utils.isReadableStream(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (utils.isResponse(data) || utils.isReadableStream(data)) {\n return data;\n }\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data, this.parseReviver);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils.isObject(header) && utils.isIterable(header)) {\n let obj = {}, dest, key;\n for (const entry of header) {\n if (!utils.isArray(entry)) {\n throw TypeError('Object iterator must return a key-value pair');\n }\n\n obj[key = entry[0]] = (dest = obj[key]) ?\n (utils.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]]) : entry[1];\n }\n\n setHeaders(obj, valueOrRewrite)\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n getSetCookie() {\n return this.get(\"set-cookie\") || [];\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nexport default CanceledError;\n","'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n let threshold = 1000 / freq;\n let lastArgs;\n let timer;\n\n const invoke = (args, now = Date.now()) => {\n timestamp = now;\n lastArgs = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n fn(...args);\n }\n\n const throttled = (...args) => {\n const now = Date.now();\n const passed = now - timestamp;\n if ( passed >= threshold) {\n invoke(args, now);\n } else {\n lastArgs = args;\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n invoke(lastArgs)\n }, threshold - passed);\n }\n }\n }\n\n const flush = () => lastArgs && invoke(lastArgs);\n\n return [throttled, flush];\n}\n\nexport default throttle;\n","import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null,\n [isDownloadStream ? 'download' : 'upload']: true\n };\n\n listener(data);\n }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n const lengthComputable = total != null;\n\n return [(loaded) => throttled[0]({\n lengthComputable,\n total,\n loaded\n }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n","import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {\n url = new URL(url, platform.origin);\n\n return (\n origin.protocol === url.protocol &&\n origin.host === url.host &&\n (isMSIE || origin.port === url.port)\n );\n})(\n new URL(platform.origin),\n platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n) : () => true;\n","import utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure, sameSite) {\n if (typeof document === 'undefined') return;\n\n const cookie = [`${name}=${encodeURIComponent(value)}`];\n\n if (utils.isNumber(expires)) {\n cookie.push(`expires=${new Date(expires).toUTCString()}`);\n }\n if (utils.isString(path)) {\n cookie.push(`path=${path}`);\n }\n if (utils.isString(domain)) {\n cookie.push(`domain=${domain}`);\n }\n if (secure === true) {\n cookie.push('secure');\n }\n if (utils.isString(sameSite)) {\n cookie.push(`SameSite=${sameSite}`);\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n if (typeof document === 'undefined') return null;\n const match = document.cookie.match(new RegExp('(?:^|; )' + name + '=([^;]*)'));\n return match ? decodeURIComponent(match[1]) : null;\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000, '/');\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\n let isRelativeUrl = !isAbsoluteURL(requestedURL);\n if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, prop, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, prop, caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, prop, caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, prop, caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b, prop) => mergeDeepProperties(headersToObject(a), headersToObject(b), prop, true)\n };\n\n utils.forEach(Object.keys({...config1, ...config2}), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n const newConfig = mergeConfig({}, config);\n\n let { data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth } = newConfig;\n\n newConfig.headers = headers = AxiosHeaders.from(headers);\n\n newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n if (utils.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // browser handles it\n } else if (utils.isFunction(data.getHeaders)) {\n // Node.js FormData (like form-data package)\n const formHeaders = data.getHeaders();\n // Only set safe headers to avoid overwriting security headers\n const allowedHeaders = ['content-type', 'content-length'];\n Object.entries(formHeaders).forEach(([key, val]) => {\n if (allowedHeaders.includes(key.toLowerCase())) {\n headers.set(key, val);\n }\n });\n }\n } \n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n}\n\n","import utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {progressEventReducer} from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = resolveConfig(config);\n let requestData = _config.data;\n const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n let {responseType, onUploadProgress, onDownloadProgress} = _config;\n let onCanceled;\n let uploadThrottled, downloadThrottled;\n let flushUpload, flushDownload;\n\n function done() {\n flushUpload && flushUpload(); // flush events\n flushDownload && flushDownload(); // flush events\n\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError(event) {\n // Browsers deliver a ProgressEvent in XHR onerror\n // (message may be empty; when present, surface it)\n // See https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/error_event\n const msg = event && event.message ? event.message : 'Network Error';\n const err = new AxiosError(msg, AxiosError.ERR_NETWORK, config, request);\n // attach the underlying event for consumers who want details\n err.event = event || null;\n reject(err);\n request = null;\n };\n \n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || transitionalDefaults;\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (onDownloadProgress) {\n ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n request.addEventListener('progress', downloadThrottled);\n }\n\n // Not all browsers support upload events\n if (onUploadProgress && request.upload) {\n ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n request.upload.addEventListener('progress', uploadThrottled);\n\n request.upload.addEventListener('loadend', flushUpload);\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(_config.url);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n","import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n if (timeout || length) {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (reason) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = reason instanceof Error ? reason : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n timer = null;\n onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT))\n }, timeout)\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = () => utils.asap(unsubscribe);\n\n return signal;\n }\n}\n\nexport default composeSignals;\n","\nexport const streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (!chunkSize || len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n}\n\nexport const readBytes = async function* (iterable, chunkSize) {\n for await (const chunk of readStream(iterable)) {\n yield* streamChunk(chunk, chunkSize);\n }\n}\n\nconst readStream = async function* (stream) {\n if (stream[Symbol.asyncIterator]) {\n yield* stream;\n return;\n }\n\n const reader = stream.getReader();\n try {\n for (;;) {\n const {done, value} = await reader.read();\n if (done) {\n break;\n }\n yield value;\n }\n } finally {\n await reader.cancel();\n }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n const iterator = readBytes(stream, chunkSize);\n\n let bytes = 0;\n let done;\n let _onFinish = (e) => {\n if (!done) {\n done = true;\n onFinish && onFinish(e);\n }\n }\n\n return new ReadableStream({\n async pull(controller) {\n try {\n const {done, value} = await iterator.next();\n\n if (done) {\n _onFinish();\n controller.close();\n return;\n }\n\n let len = value.byteLength;\n if (onProgress) {\n let loadedBytes = bytes += len;\n onProgress(loadedBytes);\n }\n controller.enqueue(new Uint8Array(value));\n } catch (err) {\n _onFinish(err);\n throw err;\n }\n },\n cancel(reason) {\n _onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst {isFunction} = utils;\n\nconst globalFetchAPI = (({Request, Response}) => ({\n Request, Response\n}))(utils.global);\n\nconst {\n ReadableStream, TextEncoder\n} = utils.global;\n\n\nconst test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false\n }\n}\n\nconst factory = (env) => {\n env = utils.merge.call({\n skipUndefined: true\n }, globalFetchAPI, env);\n\n const {fetch: envFetch, Request, Response} = env;\n const isFetchSupported = envFetch ? isFunction(envFetch) : typeof fetch === 'function';\n const isRequestSupported = isFunction(Request);\n const isResponseSupported = isFunction(Response);\n\n if (!isFetchSupported) {\n return false;\n }\n\n const isReadableStreamSupported = isFetchSupported && isFunction(ReadableStream);\n\n const encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Request(str).arrayBuffer())\n );\n\n const supportsRequestStream = isRequestSupported && isReadableStreamSupported && test(() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(platform.origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n });\n\n const supportsResponseStream = isResponseSupported && isReadableStreamSupported &&\n test(() => utils.isReadableStream(new Response('').body));\n\n const resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n };\n\n isFetchSupported && ((() => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = (res, config) => {\n let method = res && res[type];\n\n if (method) {\n return method.call(res);\n }\n\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n })\n });\n })());\n\n const getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if (utils.isBlob(body)) {\n return body.size;\n }\n\n if (utils.isSpecCompliantForm(body)) {\n const _request = new Request(platform.origin, {\n method: 'POST',\n body,\n });\n return (await _request.arrayBuffer()).byteLength;\n }\n\n if (utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n return body.byteLength;\n }\n\n if (utils.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if (utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n }\n\n const resolveBodyLength = async (headers, body) => {\n const length = utils.toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n }\n\n return async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = resolveConfig(config);\n\n let _fetch = envFetch || fetch;\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n let request = null;\n\n const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n composedSignal.unsubscribe();\n });\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader)\n }\n\n if (_request.body) {\n const [onProgress, flush] = progressEventDecorator(\n requestContentLength,\n progressEventReducer(asyncDecorator(onUploadProgress))\n );\n\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n }\n }\n\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'include' : 'omit';\n }\n\n // Cloudflare Workers throws when credentials are defined\n // see https://github.com/cloudflare/workerd/issues/902\n const isCredentialsSupported = isRequestSupported && \"credentials\" in Request.prototype;\n\n const resolvedOptions = {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n credentials: isCredentialsSupported ? withCredentials : undefined\n };\n\n request = isRequestSupported && new Request(url, resolvedOptions);\n\n let response = await (isRequestSupported ? _fetch(request, fetchOptions) : _fetch(url, resolvedOptions));\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n responseContentLength,\n progressEventReducer(asyncDecorator(onDownloadProgress), true)\n ) || [];\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n flush && flush();\n unsubscribe && unsubscribe();\n }),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && unsubscribe && unsubscribe();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n unsubscribe && unsubscribe();\n\n if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) {\n throw Object.assign(\n new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw AxiosError.from(err, err && err.code, config, request);\n }\n }\n}\n\nconst seedCache = new Map();\n\nexport const getFetch = (config) => {\n let env = (config && config.env) || {};\n const {fetch, Request, Response} = env;\n const seeds = [\n Request, Response, fetch\n ];\n\n let len = seeds.length, i = len,\n seed, target, map = seedCache;\n\n while (i--) {\n seed = seeds[i];\n target = map.get(seed);\n\n target === undefined && map.set(seed, target = (i ? new Map() : factory(env)))\n\n map = target;\n }\n\n return target;\n};\n\nconst adapter = getFetch();\n\nexport default adapter;\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport * as fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\n/**\n * Known adapters mapping.\n * Provides environment-specific adapters for Axios:\n * - `http` for Node.js\n * - `xhr` for browsers\n * - `fetch` for fetch API-based requests\n * \n * @type {Object<string, Function|Object>}\n */\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter,\n fetch: {\n get: fetchAdapter.getFetch,\n }\n};\n\n// Assign adapter names for easier debugging and identification\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', { value });\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', { value });\n }\n});\n\n/**\n * Render a rejection reason string for unknown or unsupported adapters\n * \n * @param {string} reason\n * @returns {string}\n */\nconst renderReason = (reason) => `- ${reason}`;\n\n/**\n * Check if the adapter is resolved (function, null, or false)\n * \n * @param {Function|null|false} adapter\n * @returns {boolean}\n */\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\n/**\n * Get the first suitable adapter from the provided list.\n * Tries each adapter in order until a supported one is found.\n * Throws an AxiosError if no adapter is suitable.\n * \n * @param {Array<string|Function>|string|Function} adapters - Adapter(s) by name or function.\n * @param {Object} config - Axios request configuration\n * @throws {AxiosError} If no suitable adapter is available\n * @returns {Function} The resolved adapter function\n */\nfunction getAdapter(adapters, config) {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const { length } = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter && (utils.isFunction(adapter) || (adapter = adapter.get(config)))) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n}\n\n/**\n * Exports Axios adapters and utility to resolve an adapter\n */\nexport default {\n /**\n * Resolve an adapter from a list of adapter names or functions.\n * @type {Function}\n */\n getAdapter,\n\n /**\n * Exposes all known adapters\n * @type {Object<string, Function|Object>}\n */\n adapters: knownAdapters\n};\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults.adapter, config);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n","export const VERSION = \"1.13.2\";","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\nvalidators.spelling = function spelling(correctSpelling) {\n return (value, opt) => {\n // eslint-disable-next-line no-console\n console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n return true;\n }\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n","'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig || {};\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy = {};\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.allowAbsoluteUrls\n if (config.allowAbsoluteUrls !== undefined) {\n // do nothing\n } else if (this.defaults.allowAbsoluteUrls !== undefined) {\n config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n } else {\n config.allowAbsoluteUrls = true;\n }\n\n validator.assertOptions(config, {\n baseUrl: validators.spelling('baseURL'),\n withXsrfToken: validators.spelling('withXSRFToken')\n }, true);\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift(...requestInterceptorChain);\n chain.push(...responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n toAbortSignal() {\n const controller = new AbortController();\n\n const abort = (err) => {\n controller.abort(err);\n };\n\n this.subscribe(abort);\n\n controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n return controller.signal;\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n WebServerIsDown: 521,\n ConnectionTimedOut: 522,\n OriginIsUnreachable: 523,\n TimeoutOccurred: 524,\n SslHandshakeFailed: 525,\n InvalidSslCertificate: 526,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n","import axios from './lib/axios.js';\n\n// This module is intended to unwrap Axios default export as named.\n// Keep top-level export same with static properties\n// so that it can keep same with es module or cjs\nconst {\n Axios,\n AxiosError,\n CanceledError,\n isCancel,\n CancelToken,\n VERSION,\n all,\n Cancel,\n isAxiosError,\n spread,\n toFormData,\n AxiosHeaders,\n HttpStatusCode,\n formToJSON,\n getAdapter,\n mergeConfig\n} = axios;\n\nexport {\n axios as default,\n Axios,\n AxiosError,\n CanceledError,\n isCancel,\n CancelToken,\n VERSION,\n all,\n Cancel,\n isAxiosError,\n spread,\n toFormData,\n AxiosHeaders,\n HttpStatusCode,\n formToJSON,\n getAdapter,\n mergeConfig\n}\n","import JSZip from \"jszip\";\nimport axios from 'axios'\n//加载json文件\nexport function LoadJSON(_path, callback) { \n\tvar test;\n\tif (window.XMLHttpRequest) {\n\t\ttest = new XMLHttpRequest();\n\t} else if (window.ActiveXObject) {\n\t\ttest = new window.ActiveXObject();\n\t} else {\n\t\talert(\"请升级至最新版本的浏览器\");\n\t}\n\tif (test != null) {\n\t\t// test.open(\"GET\", \"info.json\", true);\n\t\tlet url = _path + '?timestamp=' + new Date().getTime()\n\t\ttest.open(\"GET\", url, true);\n\t\ttest.send(null)\n\t\ttest.onreadystatechange = function() {\n\t\t\t\tif (test.readyState == 4 && test.status == 200) {\n\t\t\t\t\tif (test.responseText.includes('</html>', 0) && test.responseText.includes('</body>', 0) && test\n\t\t\t\t\t\t.responseText.includes('</head>', 0)) {\n\t\t\t\t\t\tcallback(null);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcallback(test.responseText);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\ttest.onloadend = function() { \n\t\t\t\tif (test.readyState == 4 && test.status == 404 && test.status == 502) {\n\t\t\t\t\tcallback(null);\n\t\t\t\t}\n\t\t\t}\n\t}\n}\n\n\nexport function LoadZipJson(_path, callback) {\n\taxios({\n\t\tmethod: 'get',\n\t\tresponseType: 'blob',\n\t\turl: _path+'?timestamp=' + new Date().getTime() // 文件所在阿里云的链接地址\n\t}).then(res => {\n\t\t// 把blob格式文件转成FIle类型\n\t\tlet files = new window.File([res.data], 'semantics', {\n\t\t\ttype: 'zip'\n\t\t})\n\t\t// 读取zip压缩文件里面的文件内容\n\t\tJSZip.loadAsync(files).then((zip) => {\n\t\t\tfor (let key in zip.files) {\n\t\t\t\t// 用blob的格式读取,方便后面下载到本地\n\t\t\t\tlet base = zip.file(zip.files[key].name).async('blob')\n\t\t\t\tbase.then(res => {\n\t\t\t\t\t//下载文件\n\t\t\t\t\t// doDownload(res, zip.files[key].name)\n\t\t\t\t\t//读取文件\n\t\t\t\t\treadTextAs(res, \"utf-8\", function(error, text) {\n\t\t\t\t\t\tcallback(text);\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t}\n\t\t})\n\t})\n\t//读取内容\n\tfunction readTextAs(arrayBuffer, encoding, callback) {\n\t\tvar reader = new FileReader();\n\t\tvar blob = new Blob([arrayBuffer]);\n\t\treader.onload = function(evt) {\n\t\t\tcallback(null, evt.target.result);\n\t\t};\n\t\treader.onerror = function(evt) {\n\t\t\tcallback(evt.error, null);\n\t\t};\n\t\treader.readAsText(blob, encoding);\n\t}\n}\n","import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tColor,\n\tColorManagement,\n\tFileLoader,\n\tLoader,\n\tLinearSRGBColorSpace,\n\tSRGBColorSpace,\n\tInterleavedBuffer,\n\tInterleavedBufferAttribute\n} from 'three';\n\nconst _taskCache = new WeakMap();\n\n/**\n * A loader for the Draco format.\n *\n * [Draco](https://google.github.io/draco/) is an open source library for compressing\n * and decompressing 3D meshes and point clouds. Compressed geometry can be significantly smaller,\n * at the cost of additional decoding time on the client device.\n *\n * Standalone Draco files have a `.drc` extension, and contain vertex positions, normals, colors,\n * and other attributes. Draco files do not contain materials, textures, animation, or node hierarchies –\n * to use these features, embed Draco geometry inside of a glTF file. A normal glTF file can be converted\n * to a Draco-compressed glTF file using [glTF-Pipeline](https://github.com/CesiumGS/gltf-pipeline).\n * When using Draco with glTF, an instance of `DRACOLoader` will be used internally by {@link GLTFLoader}.\n *\n * It is recommended to create one DRACOLoader instance and reuse it to avoid loading and creating\n * multiple decoder instances.\n *\n * `DRACOLoader` will automatically use either the JS or the WASM decoding library, based on\n * browser capabilities.\n *\n * ```js\n * const loader = new DRACOLoader();\n * loader.setDecoderPath( '/examples/jsm/libs/draco/' );\n *\n * const geometry = await dracoLoader.loadAsync( 'models/draco/bunny.drc' );\n * geometry.computeVertexNormals(); // optional\n *\n * dracoLoader.dispose();\n * ```\n *\n * @augments Loader\n * @three_import import { DRACOLoader } from 'three/addons/loaders/DRACOLoader.js';\n */\nclass DRACOLoader extends Loader {\n\n\t/**\n\t * Constructs a new Draco loader.\n\t *\n\t * @param {LoadingManager} [manager] - The loading manager.\n\t */\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.decoderPath = '';\n\t\tthis.decoderConfig = {};\n\t\tthis.decoderBinary = null;\n\t\tthis.decoderPending = null;\n\n\t\tthis.workerLimit = 4;\n\t\tthis.workerPool = [];\n\t\tthis.workerNextTaskID = 1;\n\t\tthis.workerSourceURL = '';\n\n\t\tthis.defaultAttributeIDs = {\n\t\t\tposition: 'POSITION',\n\t\t\tnormal: 'NORMAL',\n\t\t\tcolor: 'COLOR',\n\t\t\tuv: 'TEX_COORD'\n\t\t};\n\t\tthis.defaultAttributeTypes = {\n\t\t\tposition: 'Float32Array',\n\t\t\tnormal: 'Float32Array',\n\t\t\tcolor: 'Float32Array',\n\t\t\tuv: 'Float32Array'\n\t\t};\n\n\t}\n\n\t/**\n\t * Provides configuration for the decoder libraries. Configuration cannot be changed after decoding begins.\n\t *\n\t * @param {string} path - The decoder path.\n\t * @return {DRACOLoader} A reference to this loader.\n\t */\n\tsetDecoderPath( path ) {\n\n\t\tthis.decoderPath = path;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Provides configuration for the decoder libraries. Configuration cannot be changed after decoding begins.\n\t *\n\t * @param {{type:('js'|'wasm')}} config - The decoder config.\n\t * @return {DRACOLoader} A reference to this loader.\n\t */\n\tsetDecoderConfig( config ) {\n\n\t\tthis.decoderConfig = config;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the maximum number of Web Workers to be used during decoding.\n\t * A lower limit may be preferable if workers are also for other tasks in the application.\n\t *\n\t * @param {number} workerLimit - The worker limit.\n\t * @return {DRACOLoader} A reference to this loader.\n\t */\n\tsetWorkerLimit( workerLimit ) {\n\n\t\tthis.workerLimit = workerLimit;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Starts loading from the given URL and passes the loaded Draco asset\n\t * to the `onLoad()` callback.\n\t *\n\t * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.\n\t * @param {function(BufferGeometry)} onLoad - Executed when the loading process has been finished.\n\t * @param {onProgressCallback} onProgress - Executed while the loading is in progress.\n\t * @param {onErrorCallback} onError - Executed when errors occur.\n\t */\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst loader = new FileLoader( this.manager );\n\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tloader.load( url, ( buffer ) => {\n\n\t\t\tthis.parse( buffer, onLoad, onError );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\t/**\n\t * Parses the given Draco data.\n\t *\n\t * @param {ArrayBuffer} buffer - The raw Draco data as an array buffer.\n\t * @param {function(BufferGeometry)} onLoad - Executed when the loading/parsing process has been finished.\n\t * @param {onErrorCallback} onError - Executed when errors occur.\n\t */\n\tparse( buffer, onLoad, onError = ()=>{} ) {\n\n\t\tthis.decodeDracoFile( buffer, onLoad, null, null, SRGBColorSpace, onError ).catch( onError );\n\n\t}\n\n\t//\n\n\tdecodeDracoFile( buffer, callback, attributeIDs, attributeTypes, vertexColorSpace = LinearSRGBColorSpace, onError = () => {} ) {\n\n\t\tconst taskConfig = {\n\t\t\tattributeIDs: attributeIDs || this.defaultAttributeIDs,\n\t\t\tattributeTypes: attributeTypes || this.defaultAttributeTypes,\n\t\t\tuseUniqueIDs: !! attributeIDs,\n\t\t\tvertexColorSpace: vertexColorSpace,\n\t\t};\n\n\t\treturn this.decodeGeometry( buffer, taskConfig ).then( callback ).catch( onError );\n\n\t}\n\n\tdecodeGeometry( buffer, taskConfig ) {\n\n\t\tconst taskKey = JSON.stringify( taskConfig );\n\n\t\t// Check for an existing task using this buffer. A transferred buffer cannot be transferred\n\t\t// again from this thread.\n\t\tif ( _taskCache.has( buffer ) ) {\n\n\t\t\tconst cachedTask = _taskCache.get( buffer );\n\n\t\t\tif ( cachedTask.key === taskKey ) {\n\n\t\t\t\treturn cachedTask.promise;\n\n\t\t\t} else if ( buffer.byteLength === 0 ) {\n\n\t\t\t\t// Technically, it would be possible to wait for the previous task to complete,\n\t\t\t\t// transfer the buffer back, and decode again with the second configuration. That\n\t\t\t\t// is complex, and I don't know of any reason to decode a Draco buffer twice in\n\t\t\t\t// different ways, so this is left unimplemented.\n\t\t\t\tthrow new Error(\n\n\t\t\t\t\t'THREE.DRACOLoader: Unable to re-decode a buffer with different ' +\n\t\t\t\t\t'settings. Buffer has already been transferred.'\n\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tlet worker;\n\t\tconst taskID = this.workerNextTaskID ++;\n\t\tconst taskCost = buffer.byteLength;\n\n\t\t// Obtain a worker and assign a task, and construct a geometry instance\n\t\t// when the task completes.\n\t\tconst geometryPending = this._getWorker( taskID, taskCost )\n\t\t\t.then( ( _worker ) => {\n\n\t\t\t\tworker = _worker;\n\n\t\t\t\treturn new Promise( ( resolve, reject ) => {\n\n\t\t\t\t\tworker._callbacks[ taskID ] = { resolve, reject };\n\n\t\t\t\t\tworker.postMessage( { type: 'decode', id: taskID, taskConfig, buffer }, [ buffer ] );\n\n\t\t\t\t\t// this.debug();\n\n\t\t\t\t} );\n\n\t\t\t} )\n\t\t\t.then( ( message ) => this._createGeometry( message.geometry ) );\n\n\t\t// Remove task from the task list.\n\t\t// Note: replaced '.finally()' with '.catch().then()' block - iOS 11 support (#19416)\n\t\tgeometryPending\n\t\t\t.catch( () => true )\n\t\t\t.then( () => {\n\n\t\t\t\tif ( worker && taskID ) {\n\n\t\t\t\t\tthis._releaseTask( worker, taskID );\n\n\t\t\t\t\t// this.debug();\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t// Cache the task result.\n\t\t_taskCache.set( buffer, {\n\n\t\t\tkey: taskKey,\n\t\t\tpromise: geometryPending\n\n\t\t} );\n\n\t\treturn geometryPending;\n\n\t}\n\n\t_createGeometry( geometryData ) {\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tif ( geometryData.index ) {\n\n\t\t\tgeometry.setIndex( new BufferAttribute( geometryData.index.array, 1 ) );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < geometryData.attributes.length; i ++ ) {\n\n\t\t\tconst { name, array, itemSize, stride, vertexColorSpace } = geometryData.attributes[ i ];\n\n\t\t\tlet attribute;\n\n\t\t\tif ( itemSize === stride ) {\n\n\t\t\t\tattribute = new BufferAttribute( array, itemSize );\n\n\t\t\t} else {\n\n\t\t\t\tconst buffer = new InterleavedBuffer( array, stride );\n\n\t\t\t\tattribute = new InterleavedBufferAttribute( buffer, itemSize, 0 );\n\n\t\t\t}\n\n\t\t\tif ( name === 'color' ) {\n\n\t\t\t\tthis._assignVertexColorSpace( attribute, vertexColorSpace );\n\n\t\t\t\tattribute.normalized = ( array instanceof Float32Array ) === false;\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( name, attribute );\n\n\t\t}\n\n\t\treturn geometry;\n\n\t}\n\n\t_assignVertexColorSpace( attribute, inputColorSpace ) {\n\n\t\t// While .drc files do not specify colorspace, the only 'official' tooling\n\t\t// is PLY and OBJ converters, which use sRGB. We'll assume sRGB when a .drc\n\t\t// file is passed into .load() or .parse(). GLTFLoader uses internal APIs\n\t\t// to decode geometry, and vertex colors are already Linear-sRGB in there.\n\n\t\tif ( inputColorSpace !== SRGBColorSpace ) return;\n\n\t\tconst _color = new Color();\n\n\t\tfor ( let i = 0, il = attribute.count; i < il; i ++ ) {\n\n\t\t\t_color.fromBufferAttribute( attribute, i );\n\t\t\tColorManagement.colorSpaceToWorking( _color, SRGBColorSpace );\n\t\t\tattribute.setXYZ( i, _color.r, _color.g, _color.b );\n\n\t\t}\n\n\t}\n\n\t_loadLibrary( url, responseType ) {\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.decoderPath );\n\t\tloader.setResponseType( responseType );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\treturn new Promise( ( resolve, reject ) => {\n\n\t\t\tloader.load( url, resolve, undefined, reject );\n\n\t\t} );\n\n\t}\n\n\tpreload() {\n\n\t\tthis._initDecoder();\n\n\t\treturn this;\n\n\t}\n\n\t_initDecoder() {\n\n\t\tif ( this.decoderPending ) return this.decoderPending;\n\n\t\tconst useJS = typeof WebAssembly !== 'object' || this.decoderConfig.type === 'js';\n\t\tconst librariesPending = [];\n\n\t\tif ( useJS ) {\n\n\t\t\tlibrariesPending.push( this._loadLibrary( 'draco_decoder.js', 'text' ) );\n\n\t\t} else {\n\n\t\t\tlibrariesPending.push( this._loadLibrary( 'draco_wasm_wrapper.js', 'text' ) );\n\t\t\tlibrariesPending.push( this._loadLibrary( 'draco_decoder.wasm', 'arraybuffer' ) );\n\n\t\t}\n\n\t\tthis.decoderPending = Promise.all( librariesPending )\n\t\t\t.then( ( libraries ) => {\n\n\t\t\t\tconst jsContent = libraries[ 0 ];\n\n\t\t\t\tif ( ! useJS ) {\n\n\t\t\t\t\tthis.decoderConfig.wasmBinary = libraries[ 1 ];\n\n\t\t\t\t}\n\n\t\t\t\tconst fn = DRACOWorker.toString();\n\n\t\t\t\tconst body = [\n\t\t\t\t\t'/* draco decoder */',\n\t\t\t\t\tjsContent,\n\t\t\t\t\t'',\n\t\t\t\t\t'/* worker */',\n\t\t\t\t\tfn.substring( fn.indexOf( '{' ) + 1, fn.lastIndexOf( '}' ) )\n\t\t\t\t].join( '\\n' );\n\n\t\t\t\tthis.workerSourceURL = URL.createObjectURL( new Blob( [ body ] ) );\n\n\t\t\t} );\n\n\t\treturn this.decoderPending;\n\n\t}\n\n\t_getWorker( taskID, taskCost ) {\n\n\t\treturn this._initDecoder().then( () => {\n\n\t\t\tif ( this.workerPool.length < this.workerLimit ) {\n\n\t\t\t\tconst worker = new Worker( this.workerSourceURL );\n\n\t\t\t\tworker._callbacks = {};\n\t\t\t\tworker._taskCosts = {};\n\t\t\t\tworker._taskLoad = 0;\n\n\t\t\t\tworker.postMessage( { type: 'init', decoderConfig: this.decoderConfig } );\n\n\t\t\t\tworker.onmessage = function ( e ) {\n\n\t\t\t\t\tconst message = e.data;\n\n\t\t\t\t\tswitch ( message.type ) {\n\n\t\t\t\t\t\tcase 'decode':\n\t\t\t\t\t\t\tworker._callbacks[ message.id ].resolve( message );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'error':\n\t\t\t\t\t\t\tworker._callbacks[ message.id ].reject( message );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.DRACOLoader: Unexpected message, \"' + message.type + '\"' );\n\n\t\t\t\t\t}\n\n\t\t\t\t};\n\n\t\t\t\tthis.workerPool.push( worker );\n\n\t\t\t} else {\n\n\t\t\t\tthis.workerPool.sort( function ( a, b ) {\n\n\t\t\t\t\treturn a._taskLoad > b._taskLoad ? - 1 : 1;\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tconst worker = this.workerPool[ this.workerPool.length - 1 ];\n\t\t\tworker._taskCosts[ taskID ] = taskCost;\n\t\t\tworker._taskLoad += taskCost;\n\t\t\treturn worker;\n\n\t\t} );\n\n\t}\n\n\t_releaseTask( worker, taskID ) {\n\n\t\tworker._taskLoad -= worker._taskCosts[ taskID ];\n\t\tdelete worker._callbacks[ taskID ];\n\t\tdelete worker._taskCosts[ taskID ];\n\n\t}\n\n\tdebug() {\n\n\t\tconsole.log( 'Task load: ', this.workerPool.map( ( worker ) => worker._taskLoad ) );\n\n\t}\n\n\tdispose() {\n\n\t\tfor ( let i = 0; i < this.workerPool.length; ++ i ) {\n\n\t\t\tthis.workerPool[ i ].terminate();\n\n\t\t}\n\n\t\tthis.workerPool.length = 0;\n\n\t\tif ( this.workerSourceURL !== '' ) {\n\n\t\t\tURL.revokeObjectURL( this.workerSourceURL );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\n/* WEB WORKER */\n\nfunction DRACOWorker() {\n\n\tlet decoderConfig;\n\tlet decoderPending;\n\n\tonmessage = function ( e ) {\n\n\t\tconst message = e.data;\n\n\t\tswitch ( message.type ) {\n\n\t\t\tcase 'init':\n\t\t\t\tdecoderConfig = message.decoderConfig;\n\t\t\t\tdecoderPending = new Promise( function ( resolve/*, reject*/ ) {\n\n\t\t\t\t\tdecoderConfig.onModuleLoaded = function ( draco ) {\n\n\t\t\t\t\t\t// Module is Promise-like. Wrap before resolving to avoid loop.\n\t\t\t\t\t\tresolve( { draco: draco } );\n\n\t\t\t\t\t};\n\n\t\t\t\t\tDracoDecoderModule( decoderConfig ); // eslint-disable-line no-undef\n\n\t\t\t\t} );\n\t\t\t\tbreak;\n\n\t\t\tcase 'decode':\n\t\t\t\tconst buffer = message.buffer;\n\t\t\t\tconst taskConfig = message.taskConfig;\n\t\t\t\tdecoderPending.then( ( module ) => {\n\n\t\t\t\t\tconst draco = module.draco;\n\t\t\t\t\tconst decoder = new draco.Decoder();\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\tconst geometry = decodeGeometry( draco, decoder, new Int8Array( buffer ), taskConfig );\n\n\t\t\t\t\t\tconst buffers = geometry.attributes.map( ( attr ) => attr.array.buffer );\n\n\t\t\t\t\t\tif ( geometry.index ) buffers.push( geometry.index.array.buffer );\n\n\t\t\t\t\t\tself.postMessage( { type: 'decode', id: message.id, geometry }, buffers );\n\n\t\t\t\t\t} catch ( error ) {\n\n\t\t\t\t\t\tconsole.error( error );\n\n\t\t\t\t\t\tself.postMessage( { type: 'error', id: message.id, error: error.message } );\n\n\t\t\t\t\t} finally {\n\n\t\t\t\t\t\tdraco.destroy( decoder );\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t};\n\n\tfunction decodeGeometry( draco, decoder, array, taskConfig ) {\n\n\t\tconst attributeIDs = taskConfig.attributeIDs;\n\t\tconst attributeTypes = taskConfig.attributeTypes;\n\n\t\tlet dracoGeometry;\n\t\tlet decodingStatus;\n\n\t\tconst geometryType = decoder.GetEncodedGeometryType( array );\n\n\t\tif ( geometryType === draco.TRIANGULAR_MESH ) {\n\n\t\t\tdracoGeometry = new draco.Mesh();\n\t\t\tdecodingStatus = decoder.DecodeArrayToMesh( array, array.byteLength, dracoGeometry );\n\n\t\t} else if ( geometryType === draco.POINT_CLOUD ) {\n\n\t\t\tdracoGeometry = new draco.PointCloud();\n\t\t\tdecodingStatus = decoder.DecodeArrayToPointCloud( array, array.byteLength, dracoGeometry );\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.DRACOLoader: Unexpected geometry type.' );\n\n\t\t}\n\n\t\tif ( ! decodingStatus.ok() || dracoGeometry.ptr === 0 ) {\n\n\t\t\tthrow new Error( 'THREE.DRACOLoader: Decoding failed: ' + decodingStatus.error_msg() );\n\n\t\t}\n\n\t\tconst geometry = { index: null, attributes: [] };\n\n\t\t// Gather all vertex attributes.\n\t\tfor ( const attributeName in attributeIDs ) {\n\n\t\t\tconst attributeType = self[ attributeTypes[ attributeName ] ];\n\n\t\t\tlet attribute;\n\t\t\tlet attributeID;\n\n\t\t\t// A Draco file may be created with default vertex attributes, whose attribute IDs\n\t\t\t// are mapped 1:1 from their semantic name (POSITION, NORMAL, ...). Alternatively,\n\t\t\t// a Draco file may contain a custom set of attributes, identified by known unique\n\t\t\t// IDs. glTF files always do the latter, and `.drc` files typically do the former.\n\t\t\tif ( taskConfig.useUniqueIDs ) {\n\n\t\t\t\tattributeID = attributeIDs[ attributeName ];\n\t\t\t\tattribute = decoder.GetAttributeByUniqueId( dracoGeometry, attributeID );\n\n\t\t\t} else {\n\n\t\t\t\tattributeID = decoder.GetAttributeId( dracoGeometry, draco[ attributeIDs[ attributeName ] ] );\n\n\t\t\t\tif ( attributeID === - 1 ) continue;\n\n\t\t\t\tattribute = decoder.GetAttribute( dracoGeometry, attributeID );\n\n\t\t\t}\n\n\t\t\tconst attributeResult = decodeAttribute( draco, decoder, dracoGeometry, attributeName, attributeType, attribute );\n\n\t\t\tif ( attributeName === 'color' ) {\n\n\t\t\t\tattributeResult.vertexColorSpace = taskConfig.vertexColorSpace;\n\n\t\t\t}\n\n\t\t\tgeometry.attributes.push( attributeResult );\n\n\t\t}\n\n\t\t// Add index.\n\t\tif ( geometryType === draco.TRIANGULAR_MESH ) {\n\n\t\t\tgeometry.index = decodeIndex( draco, decoder, dracoGeometry );\n\n\t\t}\n\n\t\tdraco.destroy( dracoGeometry );\n\n\t\treturn geometry;\n\n\t}\n\n\tfunction decodeIndex( draco, decoder, dracoGeometry ) {\n\n\t\tconst numFaces = dracoGeometry.num_faces();\n\t\tconst numIndices = numFaces * 3;\n\t\tconst byteLength = numIndices * 4;\n\n\t\tconst ptr = draco._malloc( byteLength );\n\t\tdecoder.GetTrianglesUInt32Array( dracoGeometry, byteLength, ptr );\n\t\tconst index = new Uint32Array( draco.HEAPF32.buffer, ptr, numIndices ).slice();\n\t\tdraco._free( ptr );\n\n\t\treturn { array: index, itemSize: 1 };\n\n\t}\n\n\tfunction decodeAttribute( draco, decoder, dracoGeometry, attributeName, TypedArray, attribute ) {\n\n\t\tconst count = dracoGeometry.num_points();\n\t\tconst itemSize = attribute.num_components();\n\t\tconst dracoDataType = getDracoDataType( draco, TypedArray );\n\n\t\t// Reference: https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#data-alignment\n\t\tconst srcByteStride = itemSize * TypedArray.BYTES_PER_ELEMENT;\n\t\tconst dstByteStride = Math.ceil( srcByteStride / 4 ) * 4;\n\n\t\tconst dstStride = dstByteStride / TypedArray.BYTES_PER_ELEMENT\n\n\t\tconst srcByteLength = count * srcByteStride;\n\t\tconst dstByteLength = count * dstByteStride;\n\n\t\tconst ptr = draco._malloc( srcByteLength );\n\t\tdecoder.GetAttributeDataArrayForAllPoints( dracoGeometry, attribute, dracoDataType, srcByteLength, ptr );\n\n\t\tconst srcArray = new TypedArray( draco.HEAPF32.buffer, ptr, srcByteLength / TypedArray.BYTES_PER_ELEMENT );\n\t\tlet dstArray;\n\n\t\tif ( srcByteStride === dstByteStride ) {\n\n\t\t\t// THREE.BufferAttribute\n\n\t\t\tdstArray = srcArray.slice();\n\n\t\t} else {\n\n\t\t\t// THREE.InterleavedBufferAttribute\n\n\t\t\tdstArray = new TypedArray( dstByteLength / TypedArray.BYTES_PER_ELEMENT );\n\n\t\t\tlet dstOffset = 0\n\n\t\t\tfor ( let i = 0, il = srcArray.length; i < il; i++ ) {\n\n\t\t\t\tfor ( let j = 0; j < itemSize; j++ ) {\n\n\t\t\t\t\tdstArray[ dstOffset + j ] = srcArray[ i * itemSize + j ]\n\n\t\t\t\t}\n\n\t\t\t\tdstOffset += dstStride;\n\n\t\t\t}\n\n\t\t}\n\n\t\tdraco._free( ptr );\n\n\t\treturn {\n\t\t\tname: attributeName,\n\t\t\tcount: count,\n\t\t\titemSize: itemSize,\n\t\t\tarray: dstArray,\n\t\t\tstride: dstStride\n\t\t};\n\n\t}\n\n\tfunction getDracoDataType( draco, TypedArray ) {\n\n\t\tswitch ( TypedArray ) {\n\n\t\t\tcase Float32Array: return draco.DT_FLOAT32;\n\t\t\tcase Int8Array: return draco.DT_INT8;\n\t\t\tcase Int16Array: return draco.DT_INT16;\n\t\t\tcase Int32Array: return draco.DT_INT32;\n\t\t\tcase Uint8Array: return draco.DT_UINT8;\n\t\t\tcase Uint16Array: return draco.DT_UINT16;\n\t\t\tcase Uint32Array: return draco.DT_UINT32;\n\n\t\t}\n\n\t}\n\n}\n\nexport { DRACOLoader };\n","/**\r\n * 事件类型枚举\r\n */\r\nexport enum EventType {\r\n // 资源类\r\n ModelLoadStart = 'model-load-start',\r\n ModelLoadProgress = 'model-load-progress',\r\n ModelLoaded = 'model-loaded',\r\n ModelError = 'model-error',\r\n\r\n // 交互类\r\n SelectionChanged = 'selection-changed', // data: { ids: string[], modelId: string }\r\n HoverChanged = 'hover-changed', // data: { id: string | null, point: Vector3 }\r\n Click = 'click', // data: MouseEventData\r\n MouseMove = 'mouse-move', // data: MouseEventData - 鼠标移动事件\r\n\r\n // 视图类\r\n CameraChanged = 'camera-changed', // 相机移动时持续触发\r\n CameraIdle = 'camera-idle', // 相机静止后触发\r\n\r\n // 引擎状态\r\n EngineFree = 'engine-free',\r\n EngineBusy = 'engine-busy',\r\n}\r\n\r\n/**\r\n * 鼠标事件数据接口\r\n * 注意:originalEvent 可以是 MouseEvent 或 PointerEvent\r\n * PointerEvent 继承自 MouseEvent,支持鼠标、触控笔和触摸事件\r\n */\r\nexport interface MouseEventData {\r\n x: number; // 屏幕坐标\r\n y: number;\r\n worldPoint?: { x: number, y: number, z: number }; // 射线检测到的世界坐标\r\n entityId?: string; // 击中的构件 ID\r\n originalEvent: MouseEvent | PointerEvent; // 原生 DOM 事件(支持 MouseEvent 和 PointerEvent)\r\n}\r\n\r\n/**\r\n * 事件模块接口\r\n * 负责系统的事件订阅与发布。\r\n */\r\nexport interface IEventModule {\r\n /** 订阅事件 */\r\n on<T = any>(event: EventType, callback: (data: T) => void): void;\r\n /** 取消订阅 */\r\n off<T = any>(event: EventType, callback: (data: T) => void): void;\r\n /** 触发事件 (通常由引擎内部调用,但也暴露给插件开发) */\r\n trigger(event: EventType, data?: any): void;\r\n}\r\n","import * as THREE from \"three\";\r\nimport { LoadZipJson, LoadJSON } from '../../../../common/LoadJSON'\r\n\r\n\r\n// 导入mep模型\r\nexport function loadMep(engine: any, modelMep: any,url: string, callback: any) {\r\n // 加载机电模型\r\n let off_x = 0;\r\n let off_y = 0;\r\n let off_z = 0;\r\n\r\n let model = engine.models.find((x:any)=>x.url == url)\r\n\r\n let pipeLoadNum = 0;\r\n // 开始价值mep模型\r\n\r\n let circularMepsList = modelMep.circularMeps; //圆形管道\r\n let rectMepsList = modelMep.rectMeps.filter(item => item.type === \"风管\"); //矩形风管\r\n let bridgeMepsList = modelMep.rectMeps.filter(item => item.type === \"桥架\"); //矩形桥架\r\n let ellipseMepsList = modelMep.ellipseMeps; //椭圆管道\r\n let meshList = []; //所有mesh\r\n\r\n let scene = engine.scene;\r\n\r\n const material = new THREE.MeshBasicMaterial();\r\n const geometry = new THREE.BufferGeometry();\r\n\r\n\r\n // ************************绘制圆形管道***********************\r\n CreateEmptyModel(scene, \"InstancedMesh\", { index: 2, material: material, geometry: geometry });\r\n if (circularMepsList && circularMepsList.length) { \r\n let meshParamList = [];\r\n for (let Mep of circularMepsList) {\r\n Mep.color = new THREE.Color(`rgb(${Mep.color})`);\r\n Mep.position = {\r\n x: Mep.startPoint.X * 0.3048 + off_x,\r\n y: Mep.startPoint.Z * 0.3048 + off_y,\r\n z: -Mep.startPoint.Y * 0.3048 + off_z\r\n }\r\n Mep.rotation = {\r\n x: 0,\r\n y: 0,\r\n z: 0\r\n }\r\n \r\n model.nodesMap.set(Mep.id,[Mep])\r\n meshParamList.push(Mep);\r\n } \r\n mergeBufferModel(\"Circle\", scene, meshParamList,2,() => {\r\n \r\n });\r\n }\r\n // ************************矩形风管***********************\r\n CreateEmptyModel(scene, \"InstancedMesh\", { index: 3, material: material, geometry: geometry });\r\n if (rectMepsList && rectMepsList.length) { \r\n let meshParamList = [];\r\n for (let Mep of rectMepsList) {\r\n Mep.color = new THREE.Color(`rgb(${Mep.color})`);\r\n (Mep.position = {\r\n x: Mep.startPoint.X * 0.3048 + off_x,\r\n y: Mep.startPoint.Z * 0.3048 + off_y,\r\n z: -Mep.startPoint.Y * 0.3048 + off_z\r\n }),\r\n (Mep.rotation = {\r\n x: 0,\r\n y: 0,\r\n z: 0\r\n });\r\n model.nodesMap.set(Mep.id,[Mep])\r\n meshParamList.push(Mep);\r\n }\r\n mergeBufferModel(\"Rect\", scene, meshParamList,3,() => {\r\n \r\n });\r\n }\r\n // ************************椭圆形风管***********************\r\n CreateEmptyModel(scene, \"InstancedMesh\", { index: 4, material: material, geometry: geometry });\r\n if (ellipseMepsList && ellipseMepsList.length) { \r\n let meshParamList = [];\r\n for (let Mep of ellipseMepsList) {\r\n Mep.color = new THREE.Color(`rgb(${Mep.color})`);\r\n Mep.position = {\r\n x: Mep.startPoint.X * 0.3048 + off_x,\r\n y: Mep.startPoint.Z * 0.3048 + off_y,\r\n z: -Mep.startPoint.Y * 0.3048 + off_z\r\n }\r\n Mep.rotation = {\r\n x: 0,\r\n y: 0,\r\n z: 0\r\n }\r\n model.nodesMap.set(Mep.id,[Mep])\r\n meshParamList.push(Mep);\r\n }\r\n mergeBufferModel(\"Ellipse\", scene, meshParamList,4,() => {\r\n \r\n });\r\n }\r\n // ************************矩形桥架***********************\r\n CreateEmptyModel(scene, \"InstancedMesh\", { index: 5, material: material, geometry: geometry });\r\n if (bridgeMepsList && bridgeMepsList.length) { \r\n let meshParamList = [];\r\n for (let Mep of bridgeMepsList) {\r\n Mep.color = new THREE.Color(`rgb(${Mep.color})`);\r\n Mep.position = {\r\n x: Mep.startPoint.X * 0.3048 + off_x,\r\n y: Mep.startPoint.Z * 0.3048 + off_y,\r\n z: -Mep.startPoint.Y * 0.3048 + off_z\r\n }\r\n Mep.rotation = {\r\n x: 0,\r\n y: 0,\r\n z: 0\r\n }\r\n model.nodesMap.set(Mep.id,[Mep])\r\n meshParamList.push(Mep);\r\n }\r\n mergeBufferModel(\"Bridge\", scene, meshParamList,5,() => {\r\n \r\n });\r\n } \r\n\r\n}\r\n\r\n\r\n// 创建空物体\r\nexport function CreateEmptyModel(Scene, param) {\r\n let instancedMesh = new THREE.InstancedMesh(param.geometry, param.material, 1);\r\n instancedMesh.index = param.index;\r\n instancedMesh.dataType = param.type;\r\n instancedMesh.url = param.url;\r\n instancedMesh.relativeIndex = param.relativeIndex;\r\n instancedMesh.name = \"机电\"\r\n Scene.add(instancedMesh);\r\n}\r\n\r\n\r\n// 生成模型\r\nfunction mergeBufferModel(type, scene, meshs,index,callback) {\r\n let needSetColor = true;\r\n let instancedMesh, mesh;\r\n let Param = {\r\n width: 1,\r\n height: 1,\r\n length: 1,\r\n diameter: 1,\r\n color: new THREE.Color(),\r\n position: {\r\n x: 0,\r\n y: 0,\r\n z: 0\r\n },\r\n rotation: {\r\n x: 0,\r\n y: 0,\r\n z: 0\r\n }\r\n };\r\n switch (type) {\r\n case \"Rect\":\r\n mesh = DrawPipes(\"Rect\", Param, scene);\r\n break;\r\n case \"Bridge\":\r\n mesh = DrawPipes(\"Bridge\", Param, scene);\r\n break;\r\n case \"Circle\":\r\n mesh = DrawPipes(\"Circle\", Param, scene);\r\n break;\r\n case \"Ellipse\":\r\n mesh = DrawPipes(\"Ellipse\", Param, scene);\r\n break;\r\n }\r\n\r\n if (mesh) {\r\n instancedMesh = new THREE.InstancedMesh(mesh.geometry, mesh.material, meshs.length);\r\n }\r\n\r\n let ElementInfoArray = []; // 将你的要赋值的多个material放入到该数组\r\n\r\n \r\n for (var j = 0; j < meshs.length; j++) {\r\n let param = meshs[j];\r\n\r\n let start = new THREE.Vector3(param.startPoint.X, 0, -param.startPoint.Y);\r\n let end = new THREE.Vector3(param.endPoint.X, 0, -param.endPoint.Y);\r\n\r\n let start_ = new THREE.Vector3(param.startPoint.X, param.startPoint.Z, -param.startPoint.Y);\r\n let end_ = new THREE.Vector3(param.endPoint.X, param.endPoint.Z, -param.endPoint.Y);\r\n\r\n let angle_x = 0;\r\n let angle_y = 0;\r\n let angle_z = 0;\r\n //end.clone().sub(start.clone())是起点到终点的投影向量\r\n if (Math.abs(end.clone().sub(start.clone()).z) < 0.01 && Math.abs(end.clone().sub(start.clone()).x) < 0.01) {\r\n //立管\r\n let dir = param.startPoint.Z > param.endPoint.Z ? 1 : -1; //判断立管是向上还是向下的\r\n angle_x = dir * Math.PI * 0.5; //旋转90度,让管子竖起来\r\n if (param.base_x != null) {\r\n var basex = new THREE.Vector3(param.base_x.X, 0, -param.base_x.Y);\r\n let dir_ = basex.clone().cross(new THREE.Vector3(0, 0, 1)).y <= 0 ? 1 : -1;\r\n\r\n angle_y = dir_ * basex.angleTo(new THREE.Vector3(0, 0, 1)) + Math.PI * 0.5;\r\n }\r\n } else {\r\n //普通管道\r\n let dir = end.clone().sub(start.clone()).cross(new THREE.Vector3(0, 0, 1)).y > 0 ? -1 : 1;\r\n angle_y = dir * end.clone().sub(start.clone()).angleTo(new THREE.Vector3(0, 0, 1));\r\n //倾斜管道\r\n let dir_ = param.startPoint.Z > param.endPoint.Z ? 1 : -1;\r\n angle_x = dir_ * end.clone().sub(start.clone()).angleTo(end_.clone().sub(start_.clone()));\r\n }\r\n\r\n let matrix = new THREE.Matrix4();\r\n const euler = new THREE.Euler(angle_x, angle_y, angle_z, \"YXZ\");\r\n\r\n // 创建旋转矩阵\r\n let T1 = matrix.clone().makeRotationFromEuler(euler);\r\n // 创建缩放矩阵\r\n let width, height;\r\n if (type === \"Circle\") {\r\n width = param.diameter;\r\n height = param.diameter;\r\n } else {\r\n width = param.width;\r\n height = param.height;\r\n }\r\n let T2 = matrix.clone().makeScale(width, height, param.length);\r\n // 旋转和缩放合并\r\n matrix.multiplyMatrices(T1, T2);\r\n //设置矩阵位置\r\n matrix.setPosition(param.position.x, param.position.y, param.position.z);\r\n\r\n //更新矩阵\r\n instancedMesh.setMatrixAt(j, matrix.clone());\r\n //更新颜色\r\n needSetColor && instancedMesh.setColorAt(j, param.color);\r\n\r\n instancedMesh.geometry.computeBoundingBox();\r\n let _min = instancedMesh.geometry.boundingBox.min.clone().applyMatrix4(matrix.clone());\r\n let _max = instancedMesh.geometry.boundingBox.max.clone().applyMatrix4(matrix.clone());\r\n let min = new THREE.Vector3(Math.min(_min.x, _max.x), Math.min(_min.y, _max.y), Math.min(_min.z, _max.z));\r\n let max = new THREE.Vector3(Math.max(_min.x, _max.x), Math.max(_min.y, _max.y), Math.max(_min.z, _max.z));\r\n let center = min.clone().add(max.clone()).multiplyScalar(0.5);\r\n\r\n let elementInfoItem = {\r\n name: param.name,\r\n min: min,\r\n max: max,\r\n center: center,\r\n dbid: j,\r\n // url: path + \"/\" + type,\r\n // basePath: url,\r\n // relativePath: relativePath,\r\n materialName: mesh.material.name\r\n };\r\n // 起点和终点的圆心\r\n let minC = null,\r\n maxC = null;\r\n if (type === \"Circle\") {\r\n minC = {\r\n x: param.startPoint.X * 0.3048,\r\n y: param.startPoint.Z * 0.3048,\r\n z: -param.startPoint.Y * 0.3048\r\n };\r\n maxC = {\r\n x: param.endPoint.X * 0.3048,\r\n y: param.endPoint.Z * 0.3048,\r\n z: -param.endPoint.Y * 0.3048\r\n };\r\n elementInfoItem.minC = minC;\r\n elementInfoItem.maxC = maxC;\r\n }\r\n\r\n ElementInfoArray.push(elementInfoItem);\r\n }\r\n\r\n instancedMesh.castShadow = true;\r\n instancedMesh.ElementInfos = ElementInfoArray;\r\n instancedMesh.name = \"rootModel\";\r\n instancedMesh.TypeName = \"InstancedMesh-Pipe\";\r\n instancedMesh.PipeType = type;\r\n instancedMesh.MeshId = null;\r\n instancedMesh.realMaterial = instancedMesh.material.clone();\r\n instancedMesh.originalMaterial = instancedMesh.material.clone();\r\n //instancedMesh.basePath = url;\r\n //instancedMesh.relativePath = relativePath;\r\n let copyMeshs = [];\r\n copyMeshs = {\r\n geometry: instancedMesh.geometry,\r\n matrix: instancedMesh.matrix,\r\n position: instancedMesh.position,\r\n rotation: instancedMesh.rotation\r\n };\r\n instancedMesh.meshs = copyMeshs; //instancedMesh\r\n //instancedMesh.url = path + \"/\" + type;\r\n // 保存 instanceMatrix 的备份数组(用于后续操作)\r\n // 注意:不能替换 instanceMatrix 本身,它必须是 InstancedBufferAttribute 对象\r\n if (instancedMesh.instanceMatrix && instancedMesh.instanceMatrix.array) {\r\n instancedMesh.cloneInstanceMatrix = Array.from(instancedMesh.instanceMatrix.array);\r\n }\r\n //instancedMesh.sortid = path + \"_\" + type;\r\n instancedMesh.index = index;\r\n instancedMesh.Version = \"V1\";\r\n scene.children[index] = instancedMesh;\r\n // scene.add(instancedMesh);\r\n\r\n \r\n}\r\n\r\n\r\n\r\n\r\n// 绘制形状 \r\nfunction DrawPipes(type, param, scene) {\r\n let Shape = new THREE.Shape();\r\n param.width = param.width * 0.3048;\r\n param.height = param.height * 0.3048;\r\n param.diameter = param.diameter * 0.3048;\r\n switch (type) {\r\n case \"Rect\":\r\n Shape.moveTo(-param.width / 2, -param.height / 2); //绘制直线\r\n Shape.lineTo(-param.width / 2, param.height / 2);\r\n Shape.lineTo(param.width / 2, param.height / 2);\r\n Shape.lineTo(param.width / 2, -param.height / 2);\r\n Shape.lineTo(-param.width / 2, -param.height / 2);\r\n break;\r\n case \"Ellipse\":\r\n Shape.moveTo(-param.width / 2, -param.height / 2); //绘制直线\r\n Shape.lineTo(-param.width / 2, param.height / 2);\r\n Shape.lineTo(param.width / 2, param.height / 2);\r\n Shape.lineTo(param.width / 2, -param.height / 2);\r\n Shape.lineTo(-param.width / 2, -param.height / 2);\r\n break;\r\n case \"Bridge\":\r\n Shape.moveTo(-param.width / 2, -param.height / 2);\r\n Shape.lineTo(-param.width / 2, param.height / 2);\r\n Shape.lineTo(-param.width / 2 + 0.01, param.height / 2);\r\n Shape.lineTo(-param.width / 2 + 0.01, -param.height / 2 + 0.01);\r\n Shape.lineTo(param.width / 2 - 0.01, -param.height / 2 + 0.01);\r\n Shape.lineTo(param.width / 2 - 0.01, param.height / 2);\r\n Shape.lineTo(param.width / 2, param.height / 2);\r\n Shape.lineTo(param.width / 2, -param.height / 2);\r\n Shape.lineTo(-param.width / 2, -param.height / 2);\r\n break;\r\n case \"Circle\":\r\n Shape.moveTo(0, 0);\r\n Shape.absarc(0, 0, param.diameter * 0.5, 0, Math.PI * 2, false);\r\n break;\r\n }\r\n const extrudeSettings = {\r\n depth: param.length * 0.3048, //拉伸长度\r\n bevelEnabled: false\r\n };\r\n return addShape(Shape, extrudeSettings, param.color, param.position, param.rotation);\r\n function addShape(shape, extrudeSettings, color, position, rotation) {\r\n let geometry = new THREE.ExtrudeGeometry(shape, extrudeSettings);\r\n let mat = new THREE.MeshPhongMaterial({\r\n color: color,\r\n side: THREE.DoubleSide,\r\n // depthTest:false\r\n // name: path + \"/\" + type + \"/material\"\r\n });\r\n\r\n let mesh = new THREE.Mesh(geometry, mat);\r\n mesh.position.set(position.x, position.y, position.z);\r\n mesh.rotation._order = \"YXZ\";\r\n mesh.rotation.set(rotation.x, rotation.y, rotation.z);\r\n return mesh;\r\n }\r\n}","import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tFloat32BufferAttribute,\n\tInstancedBufferAttribute,\n\tInterleavedBuffer,\n\tInterleavedBufferAttribute,\n\tTriangleFanDrawMode,\n\tTriangleStripDrawMode,\n\tTrianglesDrawMode,\n\tVector3,\n} from 'three';\n\n/**\n * @module BufferGeometryUtils\n * @three_import import * as BufferGeometryUtils from 'three/addons/utils/BufferGeometryUtils.js';\n */\n\n/**\n * Computes vertex tangents using the MikkTSpace algorithm. MikkTSpace generates the same tangents consistently,\n * and is used in most modelling tools and normal map bakers. Use MikkTSpace for materials with normal maps,\n * because inconsistent tangents may lead to subtle visual issues in the normal map, particularly around mirrored\n * UV seams.\n *\n * In comparison to this method, {@link BufferGeometry#computeTangents} (a custom algorithm) generates tangents that\n * probably will not match the tangents in other software. The custom algorithm is sufficient for general use with a\n * custom material, and may be faster than MikkTSpace.\n *\n * Returns the original BufferGeometry. Indexed geometries will be de-indexed. Requires position, normal, and uv attributes.\n *\n * @param {BufferGeometry} geometry - The geometry to compute tangents for.\n * @param {Object} MikkTSpace - Instance of `examples/jsm/libs/mikktspace.module.js`, or `mikktspace` npm package.\n * Await `MikkTSpace.ready` before use.\n * @param {boolean} [negateSign=true] - Whether to negate the sign component (.w) of each tangent.\n * Required for normal map conventions in some formats, including glTF.\n * @return {BufferGeometry} The updated geometry.\n */\nfunction computeMikkTSpaceTangents( geometry, MikkTSpace, negateSign = true ) {\n\n\tif ( ! MikkTSpace || ! MikkTSpace.isReady ) {\n\n\t\tthrow new Error( 'BufferGeometryUtils: Initialized MikkTSpace library required.' );\n\n\t}\n\n\tif ( ! geometry.hasAttribute( 'position' ) || ! geometry.hasAttribute( 'normal' ) || ! geometry.hasAttribute( 'uv' ) ) {\n\n\t\tthrow new Error( 'BufferGeometryUtils: Tangents require \"position\", \"normal\", and \"uv\" attributes.' );\n\n\t}\n\n\tfunction getAttributeArray( attribute ) {\n\n\t\tif ( attribute.normalized || attribute.isInterleavedBufferAttribute ) {\n\n\t\t\tconst dstArray = new Float32Array( attribute.count * attribute.itemSize );\n\n\t\t\tfor ( let i = 0, j = 0; i < attribute.count; i ++ ) {\n\n\t\t\t\tdstArray[ j ++ ] = attribute.getX( i );\n\t\t\t\tdstArray[ j ++ ] = attribute.getY( i );\n\n\t\t\t\tif ( attribute.itemSize > 2 ) {\n\n\t\t\t\t\tdstArray[ j ++ ] = attribute.getZ( i );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn dstArray;\n\n\t\t}\n\n\t\tif ( attribute.array instanceof Float32Array ) {\n\n\t\t\treturn attribute.array;\n\n\t\t}\n\n\t\treturn new Float32Array( attribute.array );\n\n\t}\n\n\t// MikkTSpace algorithm requires non-indexed input.\n\n\tconst _geometry = geometry.index ? geometry.toNonIndexed() : geometry;\n\n\t// Compute vertex tangents.\n\n\tconst tangents = MikkTSpace.generateTangents(\n\n\t\tgetAttributeArray( _geometry.attributes.position ),\n\t\tgetAttributeArray( _geometry.attributes.normal ),\n\t\tgetAttributeArray( _geometry.attributes.uv )\n\n\t);\n\n\t// Texture coordinate convention of glTF differs from the apparent\n\t// default of the MikkTSpace library; .w component must be flipped.\n\n\tif ( negateSign ) {\n\n\t\tfor ( let i = 3; i < tangents.length; i += 4 ) {\n\n\t\t\ttangents[ i ] *= - 1;\n\n\t\t}\n\n\t}\n\n\t//\n\n\t_geometry.setAttribute( 'tangent', new BufferAttribute( tangents, 4 ) );\n\n\tif ( geometry !== _geometry ) {\n\n\t\tgeometry.copy( _geometry );\n\n\t}\n\n\treturn geometry;\n\n}\n\n/**\n * Merges a set of geometries into a single instance. All geometries must have compatible attributes.\n *\n * @param {Array<BufferGeometry>} geometries - The geometries to merge.\n * @param {boolean} [useGroups=false] - Whether to use groups or not.\n * @return {?BufferGeometry} The merged geometry. Returns `null` if the merge does not succeed.\n */\nfunction mergeGeometries( geometries, useGroups = false ) {\n\n\tconst isIndexed = geometries[ 0 ].index !== null;\n\n\tconst attributesUsed = new Set( Object.keys( geometries[ 0 ].attributes ) );\n\tconst morphAttributesUsed = new Set( Object.keys( geometries[ 0 ].morphAttributes ) );\n\n\tconst attributes = {};\n\tconst morphAttributes = {};\n\n\tconst morphTargetsRelative = geometries[ 0 ].morphTargetsRelative;\n\n\tconst mergedGeometry = new BufferGeometry();\n\n\tlet offset = 0;\n\n\tfor ( let i = 0; i < geometries.length; ++ i ) {\n\n\t\tconst geometry = geometries[ i ];\n\t\tlet attributesCount = 0;\n\n\t\t// ensure that all geometries are indexed, or none\n\n\t\tif ( isIndexed !== ( geometry.index !== null ) ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// gather attributes, exit early if they're different\n\n\t\tfor ( const name in geometry.attributes ) {\n\n\t\t\tif ( ! attributesUsed.has( name ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. All geometries must have compatible attributes; make sure \"' + name + '\" attribute exists among all geometries, or in none of them.' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tif ( attributes[ name ] === undefined ) attributes[ name ] = [];\n\n\t\t\tattributes[ name ].push( geometry.attributes[ name ] );\n\n\t\t\tattributesCount ++;\n\n\t\t}\n\n\t\t// ensure geometries have the same number of attributes\n\n\t\tif ( attributesCount !== attributesUsed.size ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. Make sure all geometries have the same number of attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// gather morph attributes, exit early if they're different\n\n\t\tif ( morphTargetsRelative !== geometry.morphTargetsRelative ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. .morphTargetsRelative must be consistent throughout all geometries.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tfor ( const name in geometry.morphAttributes ) {\n\n\t\t\tif ( ! morphAttributesUsed.has( name ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. .morphAttributes must be consistent throughout all geometries.' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tif ( morphAttributes[ name ] === undefined ) morphAttributes[ name ] = [];\n\n\t\t\tmorphAttributes[ name ].push( geometry.morphAttributes[ name ] );\n\n\t\t}\n\n\t\tif ( useGroups ) {\n\n\t\t\tlet count;\n\n\t\t\tif ( isIndexed ) {\n\n\t\t\t\tcount = geometry.index.count;\n\n\t\t\t} else if ( geometry.attributes.position !== undefined ) {\n\n\t\t\t\tcount = geometry.attributes.position.count;\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. The geometry must have either an index or a position attribute' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tmergedGeometry.addGroup( offset, count, i );\n\n\t\t\toffset += count;\n\n\t\t}\n\n\t}\n\n\t// merge indices\n\n\tif ( isIndexed ) {\n\n\t\tlet indexOffset = 0;\n\t\tconst mergedIndex = [];\n\n\t\tfor ( let i = 0; i < geometries.length; ++ i ) {\n\n\t\t\tconst index = geometries[ i ].index;\n\n\t\t\tfor ( let j = 0; j < index.count; ++ j ) {\n\n\t\t\t\tmergedIndex.push( index.getX( j ) + indexOffset );\n\n\t\t\t}\n\n\t\t\tindexOffset += geometries[ i ].attributes.position.count;\n\n\t\t}\n\n\t\tmergedGeometry.setIndex( mergedIndex );\n\n\t}\n\n\t// merge attributes\n\n\tfor ( const name in attributes ) {\n\n\t\tconst mergedAttribute = mergeAttributes( attributes[ name ] );\n\n\t\tif ( ! mergedAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the ' + name + ' attribute.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tmergedGeometry.setAttribute( name, mergedAttribute );\n\n\t}\n\n\t// merge morph attributes\n\n\tfor ( const name in morphAttributes ) {\n\n\t\tconst numMorphTargets = morphAttributes[ name ][ 0 ].length;\n\n\t\tif ( numMorphTargets === 0 ) break;\n\n\t\tmergedGeometry.morphAttributes = mergedGeometry.morphAttributes || {};\n\t\tmergedGeometry.morphAttributes[ name ] = [];\n\n\t\tfor ( let i = 0; i < numMorphTargets; ++ i ) {\n\n\t\t\tconst morphAttributesToMerge = [];\n\n\t\t\tfor ( let j = 0; j < morphAttributes[ name ].length; ++ j ) {\n\n\t\t\t\tmorphAttributesToMerge.push( morphAttributes[ name ][ j ][ i ] );\n\n\t\t\t}\n\n\t\t\tconst mergedMorphAttribute = mergeAttributes( morphAttributesToMerge );\n\n\t\t\tif ( ! mergedMorphAttribute ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the ' + name + ' morphAttribute.' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tmergedGeometry.morphAttributes[ name ].push( mergedMorphAttribute );\n\n\t\t}\n\n\t}\n\n\treturn mergedGeometry;\n\n}\n\n/**\n * Merges a set of attributes into a single instance. All attributes must have compatible properties and types.\n * Instances of {@link InterleavedBufferAttribute} are not supported.\n *\n * @param {Array<BufferAttribute>} attributes - The attributes to merge.\n * @return {?BufferAttribute} The merged attribute. Returns `null` if the merge does not succeed.\n */\nfunction mergeAttributes( attributes ) {\n\n\tlet TypedArray;\n\tlet itemSize;\n\tlet normalized;\n\tlet gpuType = - 1;\n\tlet arrayLength = 0;\n\n\tfor ( let i = 0; i < attributes.length; ++ i ) {\n\n\t\tconst attribute = attributes[ i ];\n\n\t\tif ( TypedArray === undefined ) TypedArray = attribute.array.constructor;\n\t\tif ( TypedArray !== attribute.array.constructor ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( itemSize === undefined ) itemSize = attribute.itemSize;\n\t\tif ( itemSize !== attribute.itemSize ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( normalized === undefined ) normalized = attribute.normalized;\n\t\tif ( normalized !== attribute.normalized ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( gpuType === - 1 ) gpuType = attribute.gpuType;\n\t\tif ( gpuType !== attribute.gpuType ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.gpuType must be consistent across matching attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tarrayLength += attribute.count * itemSize;\n\n\t}\n\n\tconst array = new TypedArray( arrayLength );\n\tconst result = new BufferAttribute( array, itemSize, normalized );\n\tlet offset = 0;\n\n\tfor ( let i = 0; i < attributes.length; ++ i ) {\n\n\t\tconst attribute = attributes[ i ];\n\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\tconst tupleOffset = offset / itemSize;\n\t\t\tfor ( let j = 0, l = attribute.count; j < l; j ++ ) {\n\n\t\t\t\tfor ( let c = 0; c < itemSize; c ++ ) {\n\n\t\t\t\t\tconst value = attribute.getComponent( j, c );\n\t\t\t\t\tresult.setComponent( j + tupleOffset, c, value );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tarray.set( attribute.array, offset );\n\n\t\t}\n\n\t\toffset += attribute.count * itemSize;\n\n\t}\n\n\tif ( gpuType !== undefined ) {\n\n\t\tresult.gpuType = gpuType;\n\n\t}\n\n\treturn result;\n\n}\n\n/**\n * Performs a deep clone of the given buffer attribute.\n *\n * @param {BufferAttribute} attribute - The attribute to clone.\n * @return {BufferAttribute} The cloned attribute.\n */\nfunction deepCloneAttribute( attribute ) {\n\n\tif ( attribute.isInstancedInterleavedBufferAttribute || attribute.isInterleavedBufferAttribute ) {\n\n\t\treturn deinterleaveAttribute( attribute );\n\n\t}\n\n\tif ( attribute.isInstancedBufferAttribute ) {\n\n\t\treturn new InstancedBufferAttribute().copy( attribute );\n\n\t}\n\n\treturn new BufferAttribute().copy( attribute );\n\n}\n\n/**\n * Interleaves a set of attributes and returns a new array of corresponding attributes that share a\n * single {@link InterleavedBuffer} instance. All attributes must have compatible types.\n *\n * @param {Array<BufferAttribute>} attributes - The attributes to interleave.\n * @return {?Array<InterleavedBufferAttribute>} An array of interleaved attributes. If interleave does not succeed, the method returns `null`.\n */\nfunction interleaveAttributes( attributes ) {\n\n\t// Interleaves the provided attributes into an InterleavedBuffer and returns\n\t// a set of InterleavedBufferAttributes for each attribute\n\tlet TypedArray;\n\tlet arrayLength = 0;\n\tlet stride = 0;\n\n\t// calculate the length and type of the interleavedBuffer\n\tfor ( let i = 0, l = attributes.length; i < l; ++ i ) {\n\n\t\tconst attribute = attributes[ i ];\n\n\t\tif ( TypedArray === undefined ) TypedArray = attribute.array.constructor;\n\t\tif ( TypedArray !== attribute.array.constructor ) {\n\n\t\t\tconsole.error( 'AttributeBuffers of different types cannot be interleaved' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tarrayLength += attribute.array.length;\n\t\tstride += attribute.itemSize;\n\n\t}\n\n\t// Create the set of buffer attributes\n\tconst interleavedBuffer = new InterleavedBuffer( new TypedArray( arrayLength ), stride );\n\tlet offset = 0;\n\tconst res = [];\n\tconst getters = [ 'getX', 'getY', 'getZ', 'getW' ];\n\tconst setters = [ 'setX', 'setY', 'setZ', 'setW' ];\n\n\tfor ( let j = 0, l = attributes.length; j < l; j ++ ) {\n\n\t\tconst attribute = attributes[ j ];\n\t\tconst itemSize = attribute.itemSize;\n\t\tconst count = attribute.count;\n\t\tconst iba = new InterleavedBufferAttribute( interleavedBuffer, itemSize, offset, attribute.normalized );\n\t\tres.push( iba );\n\n\t\toffset += itemSize;\n\n\t\t// Move the data for each attribute into the new interleavedBuffer\n\t\t// at the appropriate offset\n\t\tfor ( let c = 0; c < count; c ++ ) {\n\n\t\t\tfor ( let k = 0; k < itemSize; k ++ ) {\n\n\t\t\t\tiba[ setters[ k ] ]( c, attribute[ getters[ k ] ]( c ) );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn res;\n\n}\n\n/**\n * Returns a new, non-interleaved version of the given attribute.\n *\n * @param {InterleavedBufferAttribute} attribute - The interleaved attribute.\n * @return {BufferAttribute} The non-interleaved attribute.\n */\nfunction deinterleaveAttribute( attribute ) {\n\n\tconst cons = attribute.data.array.constructor;\n\tconst count = attribute.count;\n\tconst itemSize = attribute.itemSize;\n\tconst normalized = attribute.normalized;\n\n\tconst array = new cons( count * itemSize );\n\tlet newAttribute;\n\tif ( attribute.isInstancedInterleavedBufferAttribute ) {\n\n\t\tnewAttribute = new InstancedBufferAttribute( array, itemSize, normalized, attribute.meshPerAttribute );\n\n\t} else {\n\n\t\tnewAttribute = new BufferAttribute( array, itemSize, normalized );\n\n\t}\n\n\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\tnewAttribute.setX( i, attribute.getX( i ) );\n\n\t\tif ( itemSize >= 2 ) {\n\n\t\t\tnewAttribute.setY( i, attribute.getY( i ) );\n\n\t\t}\n\n\t\tif ( itemSize >= 3 ) {\n\n\t\t\tnewAttribute.setZ( i, attribute.getZ( i ) );\n\n\t\t}\n\n\t\tif ( itemSize >= 4 ) {\n\n\t\t\tnewAttribute.setW( i, attribute.getW( i ) );\n\n\t\t}\n\n\t}\n\n\treturn newAttribute;\n\n}\n\n/**\n * Deinterleaves all attributes on the given geometry.\n *\n * @param {BufferGeometry} geometry - The geometry to deinterleave.\n */\nfunction deinterleaveGeometry( geometry ) {\n\n\tconst attributes = geometry.attributes;\n\tconst morphTargets = geometry.morphTargets;\n\tconst attrMap = new Map();\n\n\tfor ( const key in attributes ) {\n\n\t\tconst attr = attributes[ key ];\n\t\tif ( attr.isInterleavedBufferAttribute ) {\n\n\t\t\tif ( ! attrMap.has( attr ) ) {\n\n\t\t\t\tattrMap.set( attr, deinterleaveAttribute( attr ) );\n\n\t\t\t}\n\n\t\t\tattributes[ key ] = attrMap.get( attr );\n\n\t\t}\n\n\t}\n\n\tfor ( const key in morphTargets ) {\n\n\t\tconst attr = morphTargets[ key ];\n\t\tif ( attr.isInterleavedBufferAttribute ) {\n\n\t\t\tif ( ! attrMap.has( attr ) ) {\n\n\t\t\t\tattrMap.set( attr, deinterleaveAttribute( attr ) );\n\n\t\t\t}\n\n\t\t\tmorphTargets[ key ] = attrMap.get( attr );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Returns the amount of bytes used by all attributes to represent the geometry.\n *\n * @param {BufferGeometry} geometry - The geometry.\n * @return {number} The estimate bytes used.\n */\nfunction estimateBytesUsed( geometry ) {\n\n\t// Return the estimated memory used by this geometry in bytes\n\t// Calculate using itemSize, count, and BYTES_PER_ELEMENT to account\n\t// for InterleavedBufferAttributes.\n\tlet mem = 0;\n\tfor ( const name in geometry.attributes ) {\n\n\t\tconst attr = geometry.getAttribute( name );\n\t\tmem += attr.count * attr.itemSize * attr.array.BYTES_PER_ELEMENT;\n\n\t}\n\n\tconst indices = geometry.getIndex();\n\tmem += indices ? indices.count * indices.itemSize * indices.array.BYTES_PER_ELEMENT : 0;\n\treturn mem;\n\n}\n\n/**\n * Returns a new geometry with vertices for which all similar vertex attributes (within tolerance) are merged.\n *\n * @param {BufferGeometry} geometry - The geometry to merge vertices for.\n * @param {number} [tolerance=1e-4] - The tolerance value.\n * @return {BufferGeometry} - The new geometry with merged vertices.\n */\nfunction mergeVertices( geometry, tolerance = 1e-4 ) {\n\n\ttolerance = Math.max( tolerance, Number.EPSILON );\n\n\t// Generate an index buffer if the geometry doesn't have one, or optimize it\n\t// if it's already available.\n\tconst hashToIndex = {};\n\tconst indices = geometry.getIndex();\n\tconst positions = geometry.getAttribute( 'position' );\n\tconst vertexCount = indices ? indices.count : positions.count;\n\n\t// next value for triangle indices\n\tlet nextIndex = 0;\n\n\t// attributes and new attribute arrays\n\tconst attributeNames = Object.keys( geometry.attributes );\n\tconst tmpAttributes = {};\n\tconst tmpMorphAttributes = {};\n\tconst newIndices = [];\n\tconst getters = [ 'getX', 'getY', 'getZ', 'getW' ];\n\tconst setters = [ 'setX', 'setY', 'setZ', 'setW' ];\n\n\t// Initialize the arrays, allocating space conservatively. Extra\n\t// space will be trimmed in the last step.\n\tfor ( let i = 0, l = attributeNames.length; i < l; i ++ ) {\n\n\t\tconst name = attributeNames[ i ];\n\t\tconst attr = geometry.attributes[ name ];\n\n\t\ttmpAttributes[ name ] = new attr.constructor(\n\t\t\tnew attr.array.constructor( attr.count * attr.itemSize ),\n\t\t\tattr.itemSize,\n\t\t\tattr.normalized\n\t\t);\n\n\t\tconst morphAttributes = geometry.morphAttributes[ name ];\n\t\tif ( morphAttributes ) {\n\n\t\t\tif ( ! tmpMorphAttributes[ name ] ) tmpMorphAttributes[ name ] = [];\n\t\t\tmorphAttributes.forEach( ( morphAttr, i ) => {\n\n\t\t\t\tconst array = new morphAttr.array.constructor( morphAttr.count * morphAttr.itemSize );\n\t\t\t\ttmpMorphAttributes[ name ][ i ] = new morphAttr.constructor( array, morphAttr.itemSize, morphAttr.normalized );\n\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n\t// convert the error tolerance to an amount of decimal places to truncate to\n\tconst halfTolerance = tolerance * 0.5;\n\tconst exponent = Math.log10( 1 / tolerance );\n\tconst hashMultiplier = Math.pow( 10, exponent );\n\tconst hashAdditive = halfTolerance * hashMultiplier;\n\tfor ( let i = 0; i < vertexCount; i ++ ) {\n\n\t\tconst index = indices ? indices.getX( i ) : i;\n\n\t\t// Generate a hash for the vertex attributes at the current index 'i'\n\t\tlet hash = '';\n\t\tfor ( let j = 0, l = attributeNames.length; j < l; j ++ ) {\n\n\t\t\tconst name = attributeNames[ j ];\n\t\t\tconst attribute = geometry.getAttribute( name );\n\t\t\tconst itemSize = attribute.itemSize;\n\n\t\t\tfor ( let k = 0; k < itemSize; k ++ ) {\n\n\t\t\t\t// double tilde truncates the decimal value\n\t\t\t\thash += `${ ~ ~ ( attribute[ getters[ k ] ]( index ) * hashMultiplier + hashAdditive ) },`;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Add another reference to the vertex if it's already\n\t\t// used by another index\n\t\tif ( hash in hashToIndex ) {\n\n\t\t\tnewIndices.push( hashToIndex[ hash ] );\n\n\t\t} else {\n\n\t\t\t// copy data to the new index in the temporary attributes\n\t\t\tfor ( let j = 0, l = attributeNames.length; j < l; j ++ ) {\n\n\t\t\t\tconst name = attributeNames[ j ];\n\t\t\t\tconst attribute = geometry.getAttribute( name );\n\t\t\t\tconst morphAttributes = geometry.morphAttributes[ name ];\n\t\t\t\tconst itemSize = attribute.itemSize;\n\t\t\t\tconst newArray = tmpAttributes[ name ];\n\t\t\t\tconst newMorphArrays = tmpMorphAttributes[ name ];\n\n\t\t\t\tfor ( let k = 0; k < itemSize; k ++ ) {\n\n\t\t\t\t\tconst getterFunc = getters[ k ];\n\t\t\t\t\tconst setterFunc = setters[ k ];\n\t\t\t\t\tnewArray[ setterFunc ]( nextIndex, attribute[ getterFunc ]( index ) );\n\n\t\t\t\t\tif ( morphAttributes ) {\n\n\t\t\t\t\t\tfor ( let m = 0, ml = morphAttributes.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\t\tnewMorphArrays[ m ][ setterFunc ]( nextIndex, morphAttributes[ m ][ getterFunc ]( index ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\thashToIndex[ hash ] = nextIndex;\n\t\t\tnewIndices.push( nextIndex );\n\t\t\tnextIndex ++;\n\n\t\t}\n\n\t}\n\n\t// generate result BufferGeometry\n\tconst result = geometry.clone();\n\tfor ( const name in geometry.attributes ) {\n\n\t\tconst tmpAttribute = tmpAttributes[ name ];\n\n\t\tresult.setAttribute( name, new tmpAttribute.constructor(\n\t\t\ttmpAttribute.array.slice( 0, nextIndex * tmpAttribute.itemSize ),\n\t\t\ttmpAttribute.itemSize,\n\t\t\ttmpAttribute.normalized,\n\t\t) );\n\n\t\tif ( ! ( name in tmpMorphAttributes ) ) continue;\n\n\t\tfor ( let j = 0; j < tmpMorphAttributes[ name ].length; j ++ ) {\n\n\t\t\tconst tmpMorphAttribute = tmpMorphAttributes[ name ][ j ];\n\n\t\t\tresult.morphAttributes[ name ][ j ] = new tmpMorphAttribute.constructor(\n\t\t\t\ttmpMorphAttribute.array.slice( 0, nextIndex * tmpMorphAttribute.itemSize ),\n\t\t\t\ttmpMorphAttribute.itemSize,\n\t\t\t\ttmpMorphAttribute.normalized,\n\t\t\t);\n\n\t\t}\n\n\t}\n\n\t// indices\n\n\tresult.setIndex( newIndices );\n\n\treturn result;\n\n}\n\n/**\n * Returns a new indexed geometry based on `TrianglesDrawMode` draw mode.\n * This mode corresponds to the `gl.TRIANGLES` primitive in WebGL.\n *\n * @param {BufferGeometry} geometry - The geometry to convert.\n * @param {number} drawMode - The current draw mode.\n * @return {BufferGeometry} The new geometry using `TrianglesDrawMode`.\n */\nfunction toTrianglesDrawMode( geometry, drawMode ) {\n\n\tif ( drawMode === TrianglesDrawMode ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles.' );\n\t\treturn geometry;\n\n\t}\n\n\tif ( drawMode === TriangleFanDrawMode || drawMode === TriangleStripDrawMode ) {\n\n\t\tlet index = geometry.getIndex();\n\n\t\t// generate index if not present\n\n\t\tif ( index === null ) {\n\n\t\t\tconst indices = [];\n\n\t\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\t\tif ( position !== undefined ) {\n\n\t\t\t\tfor ( let i = 0; i < position.count; i ++ ) {\n\n\t\t\t\t\tindices.push( i );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setIndex( indices );\n\t\t\t\tindex = geometry.getIndex();\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible.' );\n\t\t\t\treturn geometry;\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tconst numberOfTriangles = index.count - 2;\n\t\tconst newIndices = [];\n\n\t\tif ( drawMode === TriangleFanDrawMode ) {\n\n\t\t\t// gl.TRIANGLE_FAN\n\n\t\t\tfor ( let i = 1; i <= numberOfTriangles; i ++ ) {\n\n\t\t\t\tnewIndices.push( index.getX( 0 ) );\n\t\t\t\tnewIndices.push( index.getX( i ) );\n\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// gl.TRIANGLE_STRIP\n\n\t\t\tfor ( let i = 0; i < numberOfTriangles; i ++ ) {\n\n\t\t\t\tif ( i % 2 === 0 ) {\n\n\t\t\t\t\tnewIndices.push( index.getX( i ) );\n\t\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\t\t\t\t\tnewIndices.push( index.getX( i + 2 ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tnewIndices.push( index.getX( i + 2 ) );\n\t\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\t\t\t\t\tnewIndices.push( index.getX( i ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( ( newIndices.length / 3 ) !== numberOfTriangles ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.' );\n\n\t\t}\n\n\t\t// build final geometry\n\n\t\tconst newGeometry = geometry.clone();\n\t\tnewGeometry.setIndex( newIndices );\n\t\tnewGeometry.clearGroups();\n\n\t\treturn newGeometry;\n\n\t} else {\n\n\t\tconsole.error( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:', drawMode );\n\t\treturn geometry;\n\n\t}\n\n}\n\n/**\n * Calculates the morphed attributes of a morphed/skinned BufferGeometry.\n *\n * Helpful for Raytracing or Decals (i.e. a `DecalGeometry` applied to a morphed Object with a `BufferGeometry`\n * will use the original `BufferGeometry`, not the morphed/skinned one, generating an incorrect result.\n * Using this function to create a shadow `Object3`D the `DecalGeometry` can be correctly generated).\n *\n * @param {Mesh|Line|Points} object - The 3D object to compute morph attributes for.\n * @return {Object} An object with original position/normal attributes and morphed ones.\n */\nfunction computeMorphedAttributes( object ) {\n\n\tconst _vA = new Vector3();\n\tconst _vB = new Vector3();\n\tconst _vC = new Vector3();\n\n\tconst _tempA = new Vector3();\n\tconst _tempB = new Vector3();\n\tconst _tempC = new Vector3();\n\n\tconst _morphA = new Vector3();\n\tconst _morphB = new Vector3();\n\tconst _morphC = new Vector3();\n\n\tfunction _calculateMorphedAttributeData(\n\t\tobject,\n\t\tattribute,\n\t\tmorphAttribute,\n\t\tmorphTargetsRelative,\n\t\ta,\n\t\tb,\n\t\tc,\n\t\tmodifiedAttributeArray\n\t) {\n\n\t\t_vA.fromBufferAttribute( attribute, a );\n\t\t_vB.fromBufferAttribute( attribute, b );\n\t\t_vC.fromBufferAttribute( attribute, c );\n\n\t\tconst morphInfluences = object.morphTargetInfluences;\n\n\t\tif ( morphAttribute && morphInfluences ) {\n\n\t\t\t_morphA.set( 0, 0, 0 );\n\t\t\t_morphB.set( 0, 0, 0 );\n\t\t\t_morphC.set( 0, 0, 0 );\n\n\t\t\tfor ( let i = 0, il = morphAttribute.length; i < il; i ++ ) {\n\n\t\t\t\tconst influence = morphInfluences[ i ];\n\t\t\t\tconst morph = morphAttribute[ i ];\n\n\t\t\t\tif ( influence === 0 ) continue;\n\n\t\t\t\t_tempA.fromBufferAttribute( morph, a );\n\t\t\t\t_tempB.fromBufferAttribute( morph, b );\n\t\t\t\t_tempC.fromBufferAttribute( morph, c );\n\n\t\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t\t_morphA.addScaledVector( _tempA, influence );\n\t\t\t\t\t_morphB.addScaledVector( _tempB, influence );\n\t\t\t\t\t_morphC.addScaledVector( _tempC, influence );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_morphA.addScaledVector( _tempA.sub( _vA ), influence );\n\t\t\t\t\t_morphB.addScaledVector( _tempB.sub( _vB ), influence );\n\t\t\t\t\t_morphC.addScaledVector( _tempC.sub( _vC ), influence );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_vA.add( _morphA );\n\t\t\t_vB.add( _morphB );\n\t\t\t_vC.add( _morphC );\n\n\t\t}\n\n\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\tobject.applyBoneTransform( a, _vA );\n\t\t\tobject.applyBoneTransform( b, _vB );\n\t\t\tobject.applyBoneTransform( c, _vC );\n\n\t\t}\n\n\t\tmodifiedAttributeArray[ a * 3 + 0 ] = _vA.x;\n\t\tmodifiedAttributeArray[ a * 3 + 1 ] = _vA.y;\n\t\tmodifiedAttributeArray[ a * 3 + 2 ] = _vA.z;\n\t\tmodifiedAttributeArray[ b * 3 + 0 ] = _vB.x;\n\t\tmodifiedAttributeArray[ b * 3 + 1 ] = _vB.y;\n\t\tmodifiedAttributeArray[ b * 3 + 2 ] = _vB.z;\n\t\tmodifiedAttributeArray[ c * 3 + 0 ] = _vC.x;\n\t\tmodifiedAttributeArray[ c * 3 + 1 ] = _vC.y;\n\t\tmodifiedAttributeArray[ c * 3 + 2 ] = _vC.z;\n\n\t}\n\n\tconst geometry = object.geometry;\n\tconst material = object.material;\n\n\tlet a, b, c;\n\tconst index = geometry.index;\n\tconst positionAttribute = geometry.attributes.position;\n\tconst morphPosition = geometry.morphAttributes.position;\n\tconst morphTargetsRelative = geometry.morphTargetsRelative;\n\tconst normalAttribute = geometry.attributes.normal;\n\tconst morphNormal = geometry.morphAttributes.position;\n\n\tconst groups = geometry.groups;\n\tconst drawRange = geometry.drawRange;\n\tlet i, j, il, jl;\n\tlet group;\n\tlet start, end;\n\n\tconst modifiedPosition = new Float32Array( positionAttribute.count * positionAttribute.itemSize );\n\tconst modifiedNormal = new Float32Array( normalAttribute.count * normalAttribute.itemSize );\n\n\tif ( index !== null ) {\n\n\t\t// indexed buffer geometry\n\n\t\tif ( Array.isArray( material ) ) {\n\n\t\t\tfor ( i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\tgroup = groups[ i ];\n\n\t\t\t\tstart = Math.max( group.start, drawRange.start );\n\t\t\t\tend = Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\ta = index.getX( j );\n\t\t\t\t\tb = index.getX( j + 1 );\n\t\t\t\t\tc = index.getX( j + 2 );\n\n\t\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\t\tobject,\n\t\t\t\t\t\tpositionAttribute,\n\t\t\t\t\t\tmorphPosition,\n\t\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\t\ta, b, c,\n\t\t\t\t\t\tmodifiedPosition\n\t\t\t\t\t);\n\n\t\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\t\tobject,\n\t\t\t\t\t\tnormalAttribute,\n\t\t\t\t\t\tmorphNormal,\n\t\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\t\ta, b, c,\n\t\t\t\t\t\tmodifiedNormal\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tstart = Math.max( 0, drawRange.start );\n\t\t\tend = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\ta = index.getX( i );\n\t\t\t\tb = index.getX( i + 1 );\n\t\t\t\tc = index.getX( i + 2 );\n\n\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\tobject,\n\t\t\t\t\tpositionAttribute,\n\t\t\t\t\tmorphPosition,\n\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\ta, b, c,\n\t\t\t\t\tmodifiedPosition\n\t\t\t\t);\n\n\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\tobject,\n\t\t\t\t\tnormalAttribute,\n\t\t\t\t\tmorphNormal,\n\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\ta, b, c,\n\t\t\t\t\tmodifiedNormal\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t} else {\n\n\t\t// non-indexed buffer geometry\n\n\t\tif ( Array.isArray( material ) ) {\n\n\t\t\tfor ( i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\tgroup = groups[ i ];\n\n\t\t\t\tstart = Math.max( group.start, drawRange.start );\n\t\t\t\tend = Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\ta = j;\n\t\t\t\t\tb = j + 1;\n\t\t\t\t\tc = j + 2;\n\n\t\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\t\tobject,\n\t\t\t\t\t\tpositionAttribute,\n\t\t\t\t\t\tmorphPosition,\n\t\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\t\ta, b, c,\n\t\t\t\t\t\tmodifiedPosition\n\t\t\t\t\t);\n\n\t\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\t\tobject,\n\t\t\t\t\t\tnormalAttribute,\n\t\t\t\t\t\tmorphNormal,\n\t\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\t\ta, b, c,\n\t\t\t\t\t\tmodifiedNormal\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tstart = Math.max( 0, drawRange.start );\n\t\t\tend = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\ta = i;\n\t\t\t\tb = i + 1;\n\t\t\t\tc = i + 2;\n\n\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\tobject,\n\t\t\t\t\tpositionAttribute,\n\t\t\t\t\tmorphPosition,\n\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\ta, b, c,\n\t\t\t\t\tmodifiedPosition\n\t\t\t\t);\n\n\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\tobject,\n\t\t\t\t\tnormalAttribute,\n\t\t\t\t\tmorphNormal,\n\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\ta, b, c,\n\t\t\t\t\tmodifiedNormal\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tconst morphedPositionAttribute = new Float32BufferAttribute( modifiedPosition, 3 );\n\tconst morphedNormalAttribute = new Float32BufferAttribute( modifiedNormal, 3 );\n\n\treturn {\n\n\t\tpositionAttribute: positionAttribute,\n\t\tnormalAttribute: normalAttribute,\n\t\tmorphedPositionAttribute: morphedPositionAttribute,\n\t\tmorphedNormalAttribute: morphedNormalAttribute\n\n\t};\n\n}\n\n/**\n * Merges the {@link BufferGeometry#groups} for the given geometry.\n *\n * @param {BufferGeometry} geometry - The geometry to modify.\n * @return {BufferGeometry} - The updated geometry\n */\nfunction mergeGroups( geometry ) {\n\n\tif ( geometry.groups.length === 0 ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometryUtils.mergeGroups(): No groups are defined. Nothing to merge.' );\n\t\treturn geometry;\n\n\t}\n\n\tlet groups = geometry.groups;\n\n\t// sort groups by material index\n\n\tgroups = groups.sort( ( a, b ) => {\n\n\t\tif ( a.materialIndex !== b.materialIndex ) return a.materialIndex - b.materialIndex;\n\n\t\treturn a.start - b.start;\n\n\t} );\n\n\t// create index for non-indexed geometries\n\n\tif ( geometry.getIndex() === null ) {\n\n\t\tconst positionAttribute = geometry.getAttribute( 'position' );\n\t\tconst indices = [];\n\n\t\tfor ( let i = 0; i < positionAttribute.count; i += 3 ) {\n\n\t\t\tindices.push( i, i + 1, i + 2 );\n\n\t\t}\n\n\t\tgeometry.setIndex( indices );\n\n\t}\n\n\t// sort index\n\n\tconst index = geometry.getIndex();\n\n\tconst newIndices = [];\n\n\tfor ( let i = 0; i < groups.length; i ++ ) {\n\n\t\tconst group = groups[ i ];\n\n\t\tconst groupStart = group.start;\n\t\tconst groupLength = groupStart + group.count;\n\n\t\tfor ( let j = groupStart; j < groupLength; j ++ ) {\n\n\t\t\tnewIndices.push( index.getX( j ) );\n\n\t\t}\n\n\t}\n\n\tgeometry.dispose(); // Required to force buffer recreation\n\tgeometry.setIndex( newIndices );\n\n\t// update groups indices\n\n\tlet start = 0;\n\n\tfor ( let i = 0; i < groups.length; i ++ ) {\n\n\t\tconst group = groups[ i ];\n\n\t\tgroup.start = start;\n\t\tstart += group.count;\n\n\t}\n\n\t// merge groups\n\n\tlet currentGroup = groups[ 0 ];\n\n\tgeometry.groups = [ currentGroup ];\n\n\tfor ( let i = 1; i < groups.length; i ++ ) {\n\n\t\tconst group = groups[ i ];\n\n\t\tif ( currentGroup.materialIndex === group.materialIndex ) {\n\n\t\t\tcurrentGroup.count += group.count;\n\n\t\t} else {\n\n\t\t\tcurrentGroup = group;\n\t\t\tgeometry.groups.push( currentGroup );\n\n\t\t}\n\n\t}\n\n\treturn geometry;\n\n}\n\n/**\n * Modifies the supplied geometry if it is non-indexed, otherwise creates a new,\n * non-indexed geometry. Returns the geometry with smooth normals everywhere except\n * faces that meet at an angle greater than the crease angle.\n *\n * @param {BufferGeometry} geometry - The geometry to modify.\n * @param {number} [creaseAngle=Math.PI/3] - The crease angle in radians.\n * @return {BufferGeometry} - The updated geometry\n */\nfunction toCreasedNormals( geometry, creaseAngle = Math.PI / 3 /* 60 degrees */ ) {\n\n\tconst creaseDot = Math.cos( creaseAngle );\n\tconst hashMultiplier = ( 1 + 1e-10 ) * 1e2;\n\n\t// reusable vectors\n\tconst verts = [ new Vector3(), new Vector3(), new Vector3() ];\n\tconst tempVec1 = new Vector3();\n\tconst tempVec2 = new Vector3();\n\tconst tempNorm = new Vector3();\n\tconst tempNorm2 = new Vector3();\n\n\t// hashes a vector\n\tfunction hashVertex( v ) {\n\n\t\tconst x = ~ ~ ( v.x * hashMultiplier );\n\t\tconst y = ~ ~ ( v.y * hashMultiplier );\n\t\tconst z = ~ ~ ( v.z * hashMultiplier );\n\t\treturn `${x},${y},${z}`;\n\n\t}\n\n\t// BufferGeometry.toNonIndexed() warns if the geometry is non-indexed\n\t// and returns the original geometry\n\tconst resultGeometry = geometry.index ? geometry.toNonIndexed() : geometry;\n\tconst posAttr = resultGeometry.attributes.position;\n\tconst vertexMap = {};\n\n\t// find all the normals shared by commonly located vertices\n\tfor ( let i = 0, l = posAttr.count / 3; i < l; i ++ ) {\n\n\t\tconst i3 = 3 * i;\n\t\tconst a = verts[ 0 ].fromBufferAttribute( posAttr, i3 + 0 );\n\t\tconst b = verts[ 1 ].fromBufferAttribute( posAttr, i3 + 1 );\n\t\tconst c = verts[ 2 ].fromBufferAttribute( posAttr, i3 + 2 );\n\n\t\ttempVec1.subVectors( c, b );\n\t\ttempVec2.subVectors( a, b );\n\n\t\t// add the normal to the map for all vertices\n\t\tconst normal = new Vector3().crossVectors( tempVec1, tempVec2 ).normalize();\n\t\tfor ( let n = 0; n < 3; n ++ ) {\n\n\t\t\tconst vert = verts[ n ];\n\t\t\tconst hash = hashVertex( vert );\n\t\t\tif ( ! ( hash in vertexMap ) ) {\n\n\t\t\t\tvertexMap[ hash ] = [];\n\n\t\t\t}\n\n\t\t\tvertexMap[ hash ].push( normal );\n\n\t\t}\n\n\t}\n\n\t// average normals from all vertices that share a common location if they are within the\n\t// provided crease threshold\n\tconst normalArray = new Float32Array( posAttr.count * 3 );\n\tconst normAttr = new BufferAttribute( normalArray, 3, false );\n\tfor ( let i = 0, l = posAttr.count / 3; i < l; i ++ ) {\n\n\t\t// get the face normal for this vertex\n\t\tconst i3 = 3 * i;\n\t\tconst a = verts[ 0 ].fromBufferAttribute( posAttr, i3 + 0 );\n\t\tconst b = verts[ 1 ].fromBufferAttribute( posAttr, i3 + 1 );\n\t\tconst c = verts[ 2 ].fromBufferAttribute( posAttr, i3 + 2 );\n\n\t\ttempVec1.subVectors( c, b );\n\t\ttempVec2.subVectors( a, b );\n\n\t\ttempNorm.crossVectors( tempVec1, tempVec2 ).normalize();\n\n\t\t// average all normals that meet the threshold and set the normal value\n\t\tfor ( let n = 0; n < 3; n ++ ) {\n\n\t\t\tconst vert = verts[ n ];\n\t\t\tconst hash = hashVertex( vert );\n\t\t\tconst otherNormals = vertexMap[ hash ];\n\t\t\ttempNorm2.set( 0, 0, 0 );\n\n\t\t\tfor ( let k = 0, lk = otherNormals.length; k < lk; k ++ ) {\n\n\t\t\t\tconst otherNorm = otherNormals[ k ];\n\t\t\t\tif ( tempNorm.dot( otherNorm ) > creaseDot ) {\n\n\t\t\t\t\ttempNorm2.add( otherNorm );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttempNorm2.normalize();\n\t\t\tnormAttr.setXYZ( i3 + n, tempNorm2.x, tempNorm2.y, tempNorm2.z );\n\n\t\t}\n\n\t}\n\n\tresultGeometry.setAttribute( 'normal', normAttr );\n\treturn resultGeometry;\n\n}\n\nexport {\n\tcomputeMikkTSpaceTangents,\n\tmergeGeometries,\n\tmergeAttributes,\n\tdeepCloneAttribute,\n\tdeinterleaveAttribute,\n\tdeinterleaveGeometry,\n\tinterleaveAttributes,\n\testimateBytesUsed,\n\tmergeVertices,\n\ttoTrianglesDrawMode,\n\tcomputeMorphedAttributes,\n\tmergeGroups,\n\ttoCreasedNormals\n};\n","import {\n\tAnimationClip,\n\tBone,\n\tBox3,\n\tBufferAttribute,\n\tBufferGeometry,\n\tClampToEdgeWrapping,\n\tColor,\n\tColorManagement,\n\tDirectionalLight,\n\tDoubleSide,\n\tFileLoader,\n\tFrontSide,\n\tGroup,\n\tImageBitmapLoader,\n\tInstancedMesh,\n\tInterleavedBuffer,\n\tInterleavedBufferAttribute,\n\tInterpolant,\n\tInterpolateDiscrete,\n\tInterpolateLinear,\n\tLine,\n\tLineBasicMaterial,\n\tLineLoop,\n\tLineSegments,\n\tLinearFilter,\n\tLinearMipmapLinearFilter,\n\tLinearMipmapNearestFilter,\n\tLinearSRGBColorSpace,\n\tLoader,\n\tLoaderUtils,\n\tMaterial,\n\tMathUtils,\n\tMatrix4,\n\tMesh,\n\tMeshBasicMaterial,\n\tMeshPhysicalMaterial,\n\tMeshStandardMaterial,\n\tMirroredRepeatWrapping,\n\tNearestFilter,\n\tNearestMipmapLinearFilter,\n\tNearestMipmapNearestFilter,\n\tNumberKeyframeTrack,\n\tObject3D,\n\tOrthographicCamera,\n\tPerspectiveCamera,\n\tPointLight,\n\tPoints,\n\tPointsMaterial,\n\tPropertyBinding,\n\tQuaternion,\n\tQuaternionKeyframeTrack,\n\tRepeatWrapping,\n\tSkeleton,\n\tSkinnedMesh,\n\tSphere,\n\tSpotLight,\n\tTexture,\n\tTextureLoader,\n\tTriangleFanDrawMode,\n\tTriangleStripDrawMode,\n\tVector2,\n\tVector3,\n\tVectorKeyframeTrack,\n\tSRGBColorSpace,\n\tInstancedBufferAttribute\n} from 'three';\nimport { toTrianglesDrawMode } from '../utils/BufferGeometryUtils.js';\n\n/**\n * A loader for the glTF 2.0 format.\n *\n * [glTF](https://www.khronos.org/gltf/} (GL Transmission Format) is an [open format specification]{@link https://github.com/KhronosGroup/glTF/tree/main/specification/2.0)\n * for efficient delivery and loading of 3D content. Assets may be provided either in JSON (.gltf) or binary (.glb)\n * format. External files store textures (.jpg, .png) and additional binary data (.bin). A glTF asset may deliver\n * one or more scenes, including meshes, materials, textures, skins, skeletons, morph targets, animations, lights,\n * and/or cameras.\n *\n * `GLTFLoader` uses {@link ImageBitmapLoader} whenever possible. Be advised that image bitmaps are not\n * automatically GC-collected when they are no longer referenced, and they require special handling during\n * the disposal process.\n *\n * `GLTFLoader` supports the following glTF 2.0 extensions:\n * - KHR_draco_mesh_compression\n * - KHR_materials_clearcoat\n * - KHR_materials_dispersion\n * - KHR_materials_ior\n * - KHR_materials_specular\n * - KHR_materials_transmission\n * - KHR_materials_iridescence\n * - KHR_materials_unlit\n * - KHR_materials_volume\n * - KHR_mesh_quantization\n * - KHR_lights_punctual\n * - KHR_texture_basisu\n * - KHR_texture_transform\n * - EXT_texture_webp\n * - EXT_meshopt_compression\n * - EXT_mesh_gpu_instancing\n *\n * The following glTF 2.0 extension is supported by an external user plugin:\n * - [KHR_materials_variants](https://github.com/takahirox/three-gltf-extensions)\n * - [MSFT_texture_dds](https://github.com/takahirox/three-gltf-extensions)\n * - [KHR_animation_pointer](https://github.com/needle-tools/three-animation-pointer)\n * - [NEEDLE_progressive](https://github.com/needle-tools/gltf-progressive)\n *\n * ```js\n * const loader = new GLTFLoader();\n *\n * // Optional: Provide a DRACOLoader instance to decode compressed mesh data\n * const dracoLoader = new DRACOLoader();\n * dracoLoader.setDecoderPath( '/examples/jsm/libs/draco/' );\n * loader.setDRACOLoader( dracoLoader );\n *\n * const gltf = await loader.loadAsync( 'models/gltf/duck/duck.gltf' );\n * scene.add( gltf.scene );\n * ```\n *\n * @augments Loader\n * @three_import import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';\n */\nclass GLTFLoader extends Loader {\n\n\t/**\n\t * Constructs a new glTF loader.\n\t *\n\t * @param {LoadingManager} [manager] - The loading manager.\n\t */\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.dracoLoader = null;\n\t\tthis.ktx2Loader = null;\n\t\tthis.meshoptDecoder = null;\n\n\t\tthis.pluginCallbacks = [];\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsClearcoatExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsDispersionExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFTextureBasisUExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFTextureWebPExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFTextureAVIFExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsSheenExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsTransmissionExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsVolumeExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsIorExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsEmissiveStrengthExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsSpecularExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsIridescenceExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsAnisotropyExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsBumpExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFLightsExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMeshoptCompression( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMeshGpuInstancing( parser );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Starts loading from the given URL and passes the loaded glTF asset\n\t * to the `onLoad()` callback.\n\t *\n\t * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.\n\t * @param {function(GLTFLoader~LoadObject)} onLoad - Executed when the loading process has been finished.\n\t * @param {onProgressCallback} onProgress - Executed while the loading is in progress.\n\t * @param {onErrorCallback} onError - Executed when errors occur.\n\t */\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tlet resourcePath;\n\n\t\tif ( this.resourcePath !== '' ) {\n\n\t\t\tresourcePath = this.resourcePath;\n\n\t\t} else if ( this.path !== '' ) {\n\n\t\t\t// If a base path is set, resources will be relative paths from that plus the relative path of the gltf file\n\t\t\t// Example path = 'https://my-cnd-server.com/', url = 'assets/models/model.gltf'\n\t\t\t// resourcePath = 'https://my-cnd-server.com/assets/models/'\n\t\t\t// referenced resource 'model.bin' will be loaded from 'https://my-cnd-server.com/assets/models/model.bin'\n\t\t\t// referenced resource '../textures/texture.png' will be loaded from 'https://my-cnd-server.com/assets/textures/texture.png'\n\t\t\tconst relativeUrl = LoaderUtils.extractUrlBase( url );\n\t\t\tresourcePath = LoaderUtils.resolveURL( relativeUrl, this.path );\n\n\t\t} else {\n\n\t\t\tresourcePath = LoaderUtils.extractUrlBase( url );\n\n\t\t}\n\n\t\t// Tells the LoadingManager to track an extra item, which resolves after\n\t\t// the model is fully loaded. This means the count of items loaded will\n\t\t// be incorrect, but ensures manager.onLoad() does not fire early.\n\t\tthis.manager.itemStart( url );\n\n\t\tconst _onError = function ( e ) {\n\n\t\t\tif ( onError ) {\n\n\t\t\t\tonError( e );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( e );\n\n\t\t\t}\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t};\n\n\t\tconst loader = new FileLoader( this.manager );\n\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tloader.load( url, function ( data ) {\n\n\t\t\ttry {\n\n\t\t\t\tscope.parse( data, resourcePath, function ( gltf ) {\n\n\t\t\t\t\tonLoad( gltf );\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}, _onError );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\t_onError( e );\n\n\t\t\t}\n\n\t\t}, onProgress, _onError );\n\n\t}\n\n\t/**\n\t * Sets the given Draco loader to this loader. Required for decoding assets\n\t * compressed with the `KHR_draco_mesh_compression` extension.\n\t *\n\t * @param {DRACOLoader} dracoLoader - The Draco loader to set.\n\t * @return {GLTFLoader} A reference to this loader.\n\t */\n\tsetDRACOLoader( dracoLoader ) {\n\n\t\tthis.dracoLoader = dracoLoader;\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the given KTX2 loader to this loader. Required for loading KTX2\n\t * compressed textures.\n\t *\n\t * @param {KTX2Loader} ktx2Loader - The KTX2 loader to set.\n\t * @return {GLTFLoader} A reference to this loader.\n\t */\n\tsetKTX2Loader( ktx2Loader ) {\n\n\t\tthis.ktx2Loader = ktx2Loader;\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the given meshopt decoder. Required for decoding assets\n\t * compressed with the `EXT_meshopt_compression` extension.\n\t *\n\t * @param {Object} meshoptDecoder - The meshopt decoder to set.\n\t * @return {GLTFLoader} A reference to this loader.\n\t */\n\tsetMeshoptDecoder( meshoptDecoder ) {\n\n\t\tthis.meshoptDecoder = meshoptDecoder;\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Registers a plugin callback. This API is internally used to implement the various\n\t * glTF extensions but can also used by third-party code to add additional logic\n\t * to the loader.\n\t *\n\t * @param {function(parser:GLTFParser)} callback - The callback function to register.\n\t * @return {GLTFLoader} A reference to this loader.\n\t */\n\tregister( callback ) {\n\n\t\tif ( this.pluginCallbacks.indexOf( callback ) === - 1 ) {\n\n\t\t\tthis.pluginCallbacks.push( callback );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Unregisters a plugin callback.\n\t *\n\t * @param {Function} callback - The callback function to unregister.\n\t * @return {GLTFLoader} A reference to this loader.\n\t */\n\tunregister( callback ) {\n\n\t\tif ( this.pluginCallbacks.indexOf( callback ) !== - 1 ) {\n\n\t\t\tthis.pluginCallbacks.splice( this.pluginCallbacks.indexOf( callback ), 1 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Parses the given FBX data and returns the resulting group.\n\t *\n\t * @param {string|ArrayBuffer} data - The raw glTF data.\n\t * @param {string} path - The URL base path.\n\t * @param {function(GLTFLoader~LoadObject)} onLoad - Executed when the loading process has been finished.\n\t * @param {onErrorCallback} onError - Executed when errors occur.\n\t */\n\tparse( data, path, onLoad, onError ) {\n\n\t\tlet json;\n\t\tconst extensions = {};\n\t\tconst plugins = {};\n\t\tconst textDecoder = new TextDecoder();\n\n\t\tif ( typeof data === 'string' ) {\n\n\t\t\tjson = JSON.parse( data );\n\n\t\t} else if ( data instanceof ArrayBuffer ) {\n\n\t\t\tconst magic = textDecoder.decode( new Uint8Array( data, 0, 4 ) );\n\n\t\t\tif ( magic === BINARY_EXTENSION_HEADER_MAGIC ) {\n\n\t\t\t\ttry {\n\n\t\t\t\t\textensions[ EXTENSIONS.KHR_BINARY_GLTF ] = new GLTFBinaryExtension( data );\n\n\t\t\t\t} catch ( error ) {\n\n\t\t\t\t\tif ( onError ) onError( error );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tjson = JSON.parse( extensions[ EXTENSIONS.KHR_BINARY_GLTF ].content );\n\n\t\t\t} else {\n\n\t\t\t\tjson = JSON.parse( textDecoder.decode( data ) );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tjson = data;\n\n\t\t}\n\n\t\tif ( json.asset === undefined || json.asset.version[ 0 ] < 2 ) {\n\n\t\t\tif ( onError ) onError( new Error( 'THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.' ) );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst parser = new GLTFParser( json, {\n\n\t\t\tpath: path || this.resourcePath || '',\n\t\t\tcrossOrigin: this.crossOrigin,\n\t\t\trequestHeader: this.requestHeader,\n\t\t\tmanager: this.manager,\n\t\t\tktx2Loader: this.ktx2Loader,\n\t\t\tmeshoptDecoder: this.meshoptDecoder\n\n\t\t} );\n\n\t\tparser.fileLoader.setRequestHeader( this.requestHeader );\n\n\t\tfor ( let i = 0; i < this.pluginCallbacks.length; i ++ ) {\n\n\t\t\tconst plugin = this.pluginCallbacks[ i ]( parser );\n\n\t\t\tif ( ! plugin.name ) console.error( 'THREE.GLTFLoader: Invalid plugin found: missing name' );\n\n\t\t\tplugins[ plugin.name ] = plugin;\n\n\t\t\t// Workaround to avoid determining as unknown extension\n\t\t\t// in addUnknownExtensionsToUserData().\n\t\t\t// Remove this workaround if we move all the existing\n\t\t\t// extension handlers to plugin system\n\t\t\textensions[ plugin.name ] = true;\n\n\t\t}\n\n\t\tif ( json.extensionsUsed ) {\n\n\t\t\tfor ( let i = 0; i < json.extensionsUsed.length; ++ i ) {\n\n\t\t\t\tconst extensionName = json.extensionsUsed[ i ];\n\t\t\t\tconst extensionsRequired = json.extensionsRequired || [];\n\n\t\t\t\tswitch ( extensionName ) {\n\n\t\t\t\t\tcase EXTENSIONS.KHR_MATERIALS_UNLIT:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFMaterialsUnlitExtension();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase EXTENSIONS.KHR_DRACO_MESH_COMPRESSION:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFDracoMeshCompressionExtension( json, this.dracoLoader );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase EXTENSIONS.KHR_TEXTURE_TRANSFORM:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFTextureTransformExtension();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase EXTENSIONS.KHR_MESH_QUANTIZATION:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFMeshQuantizationExtension();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tif ( extensionsRequired.indexOf( extensionName ) >= 0 && plugins[ extensionName ] === undefined ) {\n\n\t\t\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Unknown extension \"' + extensionName + '\".' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tparser.setExtensions( extensions );\n\t\tparser.setPlugins( plugins );\n\t\tparser.parse( onLoad, onError );\n\n\t}\n\n\t/**\n\t * Async version of {@link GLTFLoader#parse}.\n\t *\n\t * @async\n\t * @param {string|ArrayBuffer} data - The raw glTF data.\n\t * @param {string} path - The URL base path.\n\t * @return {Promise<GLTFLoader~LoadObject>} A Promise that resolves with the loaded glTF when the parsing has been finished.\n\t */\n\tparseAsync( data, path ) {\n\n\t\tconst scope = this;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tscope.parse( data, path, resolve, reject );\n\n\t\t} );\n\n\t}\n\n}\n\n/* GLTFREGISTRY */\n\nfunction GLTFRegistry() {\n\n\tlet objects = {};\n\n\treturn\t{\n\n\t\tget: function ( key ) {\n\n\t\t\treturn objects[ key ];\n\n\t\t},\n\n\t\tadd: function ( key, object ) {\n\n\t\t\tobjects[ key ] = object;\n\n\t\t},\n\n\t\tremove: function ( key ) {\n\n\t\t\tdelete objects[ key ];\n\n\t\t},\n\n\t\tremoveAll: function () {\n\n\t\t\tobjects = {};\n\n\t\t}\n\n\t};\n\n}\n\n/*********************************/\n/********** EXTENSIONS ***********/\n/*********************************/\n\nconst EXTENSIONS = {\n\tKHR_BINARY_GLTF: 'KHR_binary_glTF',\n\tKHR_DRACO_MESH_COMPRESSION: 'KHR_draco_mesh_compression',\n\tKHR_LIGHTS_PUNCTUAL: 'KHR_lights_punctual',\n\tKHR_MATERIALS_CLEARCOAT: 'KHR_materials_clearcoat',\n\tKHR_MATERIALS_DISPERSION: 'KHR_materials_dispersion',\n\tKHR_MATERIALS_IOR: 'KHR_materials_ior',\n\tKHR_MATERIALS_SHEEN: 'KHR_materials_sheen',\n\tKHR_MATERIALS_SPECULAR: 'KHR_materials_specular',\n\tKHR_MATERIALS_TRANSMISSION: 'KHR_materials_transmission',\n\tKHR_MATERIALS_IRIDESCENCE: 'KHR_materials_iridescence',\n\tKHR_MATERIALS_ANISOTROPY: 'KHR_materials_anisotropy',\n\tKHR_MATERIALS_UNLIT: 'KHR_materials_unlit',\n\tKHR_MATERIALS_VOLUME: 'KHR_materials_volume',\n\tKHR_TEXTURE_BASISU: 'KHR_texture_basisu',\n\tKHR_TEXTURE_TRANSFORM: 'KHR_texture_transform',\n\tKHR_MESH_QUANTIZATION: 'KHR_mesh_quantization',\n\tKHR_MATERIALS_EMISSIVE_STRENGTH: 'KHR_materials_emissive_strength',\n\tEXT_MATERIALS_BUMP: 'EXT_materials_bump',\n\tEXT_TEXTURE_WEBP: 'EXT_texture_webp',\n\tEXT_TEXTURE_AVIF: 'EXT_texture_avif',\n\tEXT_MESHOPT_COMPRESSION: 'EXT_meshopt_compression',\n\tEXT_MESH_GPU_INSTANCING: 'EXT_mesh_gpu_instancing'\n};\n\n/**\n * Punctual Lights Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_lights_punctual\n *\n * @private\n */\nclass GLTFLightsExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_LIGHTS_PUNCTUAL;\n\n\t\t// Object3D instance caches\n\t\tthis.cache = { refs: {}, uses: {} };\n\n\t}\n\n\t_markDefs() {\n\n\t\tconst parser = this.parser;\n\t\tconst nodeDefs = this.parser.json.nodes || [];\n\n\t\tfor ( let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex ++ ) {\n\n\t\t\tconst nodeDef = nodeDefs[ nodeIndex ];\n\n\t\t\tif ( nodeDef.extensions\n\t\t\t\t\t&& nodeDef.extensions[ this.name ]\n\t\t\t\t\t&& nodeDef.extensions[ this.name ].light !== undefined ) {\n\n\t\t\t\tparser._addNodeRef( this.cache, nodeDef.extensions[ this.name ].light );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_loadLight( lightIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst cacheKey = 'light:' + lightIndex;\n\t\tlet dependency = parser.cache.get( cacheKey );\n\n\t\tif ( dependency ) return dependency;\n\n\t\tconst json = parser.json;\n\t\tconst extensions = ( json.extensions && json.extensions[ this.name ] ) || {};\n\t\tconst lightDefs = extensions.lights || [];\n\t\tconst lightDef = lightDefs[ lightIndex ];\n\t\tlet lightNode;\n\n\t\tconst color = new Color( 0xffffff );\n\n\t\tif ( lightDef.color !== undefined ) color.setRGB( lightDef.color[ 0 ], lightDef.color[ 1 ], lightDef.color[ 2 ], LinearSRGBColorSpace );\n\n\t\tconst range = lightDef.range !== undefined ? lightDef.range : 0;\n\n\t\tswitch ( lightDef.type ) {\n\n\t\t\tcase 'directional':\n\t\t\t\tlightNode = new DirectionalLight( color );\n\t\t\t\tlightNode.target.position.set( 0, 0, - 1 );\n\t\t\t\tlightNode.add( lightNode.target );\n\t\t\t\tbreak;\n\n\t\t\tcase 'point':\n\t\t\t\tlightNode = new PointLight( color );\n\t\t\t\tlightNode.distance = range;\n\t\t\t\tbreak;\n\n\t\t\tcase 'spot':\n\t\t\t\tlightNode = new SpotLight( color );\n\t\t\t\tlightNode.distance = range;\n\t\t\t\t// Handle spotlight properties.\n\t\t\t\tlightDef.spot = lightDef.spot || {};\n\t\t\t\tlightDef.spot.innerConeAngle = lightDef.spot.innerConeAngle !== undefined ? lightDef.spot.innerConeAngle : 0;\n\t\t\t\tlightDef.spot.outerConeAngle = lightDef.spot.outerConeAngle !== undefined ? lightDef.spot.outerConeAngle : Math.PI / 4.0;\n\t\t\t\tlightNode.angle = lightDef.spot.outerConeAngle;\n\t\t\t\tlightNode.penumbra = 1.0 - lightDef.spot.innerConeAngle / lightDef.spot.outerConeAngle;\n\t\t\t\tlightNode.target.position.set( 0, 0, - 1 );\n\t\t\t\tlightNode.add( lightNode.target );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: Unexpected light type: ' + lightDef.type );\n\n\t\t}\n\n\t\t// Some lights (e.g. spot) default to a position other than the origin. Reset the position\n\t\t// here, because node-level parsing will only override position if explicitly specified.\n\t\tlightNode.position.set( 0, 0, 0 );\n\n\t\tassignExtrasToUserData( lightNode, lightDef );\n\n\t\tif ( lightDef.intensity !== undefined ) lightNode.intensity = lightDef.intensity;\n\n\t\tlightNode.name = parser.createUniqueName( lightDef.name || ( 'light_' + lightIndex ) );\n\n\t\tdependency = Promise.resolve( lightNode );\n\n\t\tparser.cache.add( cacheKey, dependency );\n\n\t\treturn dependency;\n\n\t}\n\n\tgetDependency( type, index ) {\n\n\t\tif ( type !== 'light' ) return;\n\n\t\treturn this._loadLight( index );\n\n\t}\n\n\tcreateNodeAttachment( nodeIndex ) {\n\n\t\tconst self = this;\n\t\tconst parser = this.parser;\n\t\tconst json = parser.json;\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\t\tconst lightDef = ( nodeDef.extensions && nodeDef.extensions[ this.name ] ) || {};\n\t\tconst lightIndex = lightDef.light;\n\n\t\tif ( lightIndex === undefined ) return null;\n\n\t\treturn this._loadLight( lightIndex ).then( function ( light ) {\n\n\t\t\treturn parser._getNodeRef( self.cache, lightIndex, light );\n\n\t\t} );\n\n\t}\n\n}\n\n/**\n * Unlit Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_unlit\n *\n * @private\n */\nclass GLTFMaterialsUnlitExtension {\n\n\tconstructor() {\n\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_UNLIT;\n\n\t}\n\n\tgetMaterialType() {\n\n\t\treturn MeshBasicMaterial;\n\n\t}\n\n\textendParams( materialParams, materialDef, parser ) {\n\n\t\tconst pending = [];\n\n\t\tmaterialParams.color = new Color( 1.0, 1.0, 1.0 );\n\t\tmaterialParams.opacity = 1.0;\n\n\t\tconst metallicRoughness = materialDef.pbrMetallicRoughness;\n\n\t\tif ( metallicRoughness ) {\n\n\t\t\tif ( Array.isArray( metallicRoughness.baseColorFactor ) ) {\n\n\t\t\t\tconst array = metallicRoughness.baseColorFactor;\n\n\t\t\t\tmaterialParams.color.setRGB( array[ 0 ], array[ 1 ], array[ 2 ], LinearSRGBColorSpace );\n\t\t\t\tmaterialParams.opacity = array[ 3 ];\n\n\t\t\t}\n\n\t\t\tif ( metallicRoughness.baseColorTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture, SRGBColorSpace ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials Emissive Strength Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/blob/5768b3ce0ef32bc39cdf1bef10b948586635ead3/extensions/2.0/Khronos/KHR_materials_emissive_strength/README.md\n *\n * @private\n */\nclass GLTFMaterialsEmissiveStrengthExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_EMISSIVE_STRENGTH;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst emissiveStrength = materialDef.extensions[ this.name ].emissiveStrength;\n\n\t\tif ( emissiveStrength !== undefined ) {\n\n\t\t\tmaterialParams.emissiveIntensity = emissiveStrength;\n\n\t\t}\n\n\t\treturn Promise.resolve();\n\n\t}\n\n}\n\n/**\n * Clearcoat Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_clearcoat\n *\n * @private\n */\nclass GLTFMaterialsClearcoatExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_CLEARCOAT;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.clearcoatFactor !== undefined ) {\n\n\t\t\tmaterialParams.clearcoat = extension.clearcoatFactor;\n\n\t\t}\n\n\t\tif ( extension.clearcoatTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'clearcoatMap', extension.clearcoatTexture ) );\n\n\t\t}\n\n\t\tif ( extension.clearcoatRoughnessFactor !== undefined ) {\n\n\t\t\tmaterialParams.clearcoatRoughness = extension.clearcoatRoughnessFactor;\n\n\t\t}\n\n\t\tif ( extension.clearcoatRoughnessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'clearcoatRoughnessMap', extension.clearcoatRoughnessTexture ) );\n\n\t\t}\n\n\t\tif ( extension.clearcoatNormalTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'clearcoatNormalMap', extension.clearcoatNormalTexture ) );\n\n\t\t\tif ( extension.clearcoatNormalTexture.scale !== undefined ) {\n\n\t\t\t\tconst scale = extension.clearcoatNormalTexture.scale;\n\n\t\t\t\tmaterialParams.clearcoatNormalScale = new Vector2( scale, scale );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials dispersion Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_dispersion\n *\n * @private\n */\nclass GLTFMaterialsDispersionExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_DISPERSION;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.dispersion = extension.dispersion !== undefined ? extension.dispersion : 0;\n\n\t\treturn Promise.resolve();\n\n\t}\n\n}\n\n/**\n * Iridescence Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_iridescence\n *\n * @private\n */\nclass GLTFMaterialsIridescenceExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_IRIDESCENCE;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.iridescenceFactor !== undefined ) {\n\n\t\t\tmaterialParams.iridescence = extension.iridescenceFactor;\n\n\t\t}\n\n\t\tif ( extension.iridescenceTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'iridescenceMap', extension.iridescenceTexture ) );\n\n\t\t}\n\n\t\tif ( extension.iridescenceIor !== undefined ) {\n\n\t\t\tmaterialParams.iridescenceIOR = extension.iridescenceIor;\n\n\t\t}\n\n\t\tif ( materialParams.iridescenceThicknessRange === undefined ) {\n\n\t\t\tmaterialParams.iridescenceThicknessRange = [ 100, 400 ];\n\n\t\t}\n\n\t\tif ( extension.iridescenceThicknessMinimum !== undefined ) {\n\n\t\t\tmaterialParams.iridescenceThicknessRange[ 0 ] = extension.iridescenceThicknessMinimum;\n\n\t\t}\n\n\t\tif ( extension.iridescenceThicknessMaximum !== undefined ) {\n\n\t\t\tmaterialParams.iridescenceThicknessRange[ 1 ] = extension.iridescenceThicknessMaximum;\n\n\t\t}\n\n\t\tif ( extension.iridescenceThicknessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'iridescenceThicknessMap', extension.iridescenceThicknessTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Sheen Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_sheen\n *\n * @private\n */\nclass GLTFMaterialsSheenExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_SHEEN;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tmaterialParams.sheenColor = new Color( 0, 0, 0 );\n\t\tmaterialParams.sheenRoughness = 0;\n\t\tmaterialParams.sheen = 1;\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.sheenColorFactor !== undefined ) {\n\n\t\t\tconst colorFactor = extension.sheenColorFactor;\n\t\t\tmaterialParams.sheenColor.setRGB( colorFactor[ 0 ], colorFactor[ 1 ], colorFactor[ 2 ], LinearSRGBColorSpace );\n\n\t\t}\n\n\t\tif ( extension.sheenRoughnessFactor !== undefined ) {\n\n\t\t\tmaterialParams.sheenRoughness = extension.sheenRoughnessFactor;\n\n\t\t}\n\n\t\tif ( extension.sheenColorTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'sheenColorMap', extension.sheenColorTexture, SRGBColorSpace ) );\n\n\t\t}\n\n\t\tif ( extension.sheenRoughnessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'sheenRoughnessMap', extension.sheenRoughnessTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Transmission Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_transmission\n * Draft: https://github.com/KhronosGroup/glTF/pull/1698\n *\n * @private\n */\nclass GLTFMaterialsTransmissionExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_TRANSMISSION;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.transmissionFactor !== undefined ) {\n\n\t\t\tmaterialParams.transmission = extension.transmissionFactor;\n\n\t\t}\n\n\t\tif ( extension.transmissionTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'transmissionMap', extension.transmissionTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials Volume Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_volume\n *\n * @private\n */\nclass GLTFMaterialsVolumeExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_VOLUME;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.thickness = extension.thicknessFactor !== undefined ? extension.thicknessFactor : 0;\n\n\t\tif ( extension.thicknessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'thicknessMap', extension.thicknessTexture ) );\n\n\t\t}\n\n\t\tmaterialParams.attenuationDistance = extension.attenuationDistance || Infinity;\n\n\t\tconst colorArray = extension.attenuationColor || [ 1, 1, 1 ];\n\t\tmaterialParams.attenuationColor = new Color().setRGB( colorArray[ 0 ], colorArray[ 1 ], colorArray[ 2 ], LinearSRGBColorSpace );\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials ior Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_ior\n *\n * @private\n */\nclass GLTFMaterialsIorExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_IOR;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.ior = extension.ior !== undefined ? extension.ior : 1.5;\n\n\t\treturn Promise.resolve();\n\n\t}\n\n}\n\n/**\n * Materials specular Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_specular\n *\n * @private\n */\nclass GLTFMaterialsSpecularExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_SPECULAR;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.specularIntensity = extension.specularFactor !== undefined ? extension.specularFactor : 1.0;\n\n\t\tif ( extension.specularTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'specularIntensityMap', extension.specularTexture ) );\n\n\t\t}\n\n\t\tconst colorArray = extension.specularColorFactor || [ 1, 1, 1 ];\n\t\tmaterialParams.specularColor = new Color().setRGB( colorArray[ 0 ], colorArray[ 1 ], colorArray[ 2 ], LinearSRGBColorSpace );\n\n\t\tif ( extension.specularColorTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'specularColorMap', extension.specularColorTexture, SRGBColorSpace ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n\n/**\n * Materials bump Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/EXT_materials_bump\n *\n * @private\n */\nclass GLTFMaterialsBumpExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.EXT_MATERIALS_BUMP;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.bumpScale = extension.bumpFactor !== undefined ? extension.bumpFactor : 1.0;\n\n\t\tif ( extension.bumpTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'bumpMap', extension.bumpTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials anisotropy Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_anisotropy\n *\n * @private\n */\nclass GLTFMaterialsAnisotropyExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_ANISOTROPY;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.anisotropyStrength !== undefined ) {\n\n\t\t\tmaterialParams.anisotropy = extension.anisotropyStrength;\n\n\t\t}\n\n\t\tif ( extension.anisotropyRotation !== undefined ) {\n\n\t\t\tmaterialParams.anisotropyRotation = extension.anisotropyRotation;\n\n\t\t}\n\n\t\tif ( extension.anisotropyTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'anisotropyMap', extension.anisotropyTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * BasisU Texture Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_basisu\n *\n * @private\n */\nclass GLTFTextureBasisUExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_TEXTURE_BASISU;\n\n\t}\n\n\tloadTexture( textureIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst json = parser.json;\n\n\t\tconst textureDef = json.textures[ textureIndex ];\n\n\t\tif ( ! textureDef.extensions || ! textureDef.extensions[ this.name ] ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst extension = textureDef.extensions[ this.name ];\n\t\tconst loader = parser.options.ktx2Loader;\n\n\t\tif ( ! loader ) {\n\n\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( this.name ) >= 0 ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures' );\n\n\t\t\t} else {\n\n\t\t\t\t// Assumes that the extension is optional and that a fallback texture is present\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn parser.loadTextureImage( textureIndex, extension.source, loader );\n\n\t}\n\n}\n\n/**\n * WebP Texture Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_texture_webp\n *\n * @private\n */\nclass GLTFTextureWebPExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.EXT_TEXTURE_WEBP;\n\n\t}\n\n\tloadTexture( textureIndex ) {\n\n\t\tconst name = this.name;\n\t\tconst parser = this.parser;\n\t\tconst json = parser.json;\n\n\t\tconst textureDef = json.textures[ textureIndex ];\n\n\t\tif ( ! textureDef.extensions || ! textureDef.extensions[ name ] ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst extension = textureDef.extensions[ name ];\n\t\tconst source = json.images[ extension.source ];\n\n\t\tlet loader = parser.textureLoader;\n\t\tif ( source.uri ) {\n\n\t\t\tconst handler = parser.options.manager.getHandler( source.uri );\n\t\t\tif ( handler !== null ) loader = handler;\n\n\t\t}\n\n\t\treturn parser.loadTextureImage( textureIndex, extension.source, loader );\n\n\t}\n\n}\n\n/**\n * AVIF Texture Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_texture_avif\n *\n * @private\n */\nclass GLTFTextureAVIFExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.EXT_TEXTURE_AVIF;\n\n\t}\n\n\tloadTexture( textureIndex ) {\n\n\t\tconst name = this.name;\n\t\tconst parser = this.parser;\n\t\tconst json = parser.json;\n\n\t\tconst textureDef = json.textures[ textureIndex ];\n\n\t\tif ( ! textureDef.extensions || ! textureDef.extensions[ name ] ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst extension = textureDef.extensions[ name ];\n\t\tconst source = json.images[ extension.source ];\n\n\t\tlet loader = parser.textureLoader;\n\t\tif ( source.uri ) {\n\n\t\t\tconst handler = parser.options.manager.getHandler( source.uri );\n\t\t\tif ( handler !== null ) loader = handler;\n\n\t\t}\n\n\t\treturn parser.loadTextureImage( textureIndex, extension.source, loader );\n\n\t}\n\n}\n\n/**\n * meshopt BufferView Compression Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_meshopt_compression\n *\n * @private\n */\nclass GLTFMeshoptCompression {\n\n\tconstructor( parser ) {\n\n\t\tthis.name = EXTENSIONS.EXT_MESHOPT_COMPRESSION;\n\t\tthis.parser = parser;\n\n\t}\n\n\tloadBufferView( index ) {\n\n\t\tconst json = this.parser.json;\n\t\tconst bufferView = json.bufferViews[ index ];\n\n\t\tif ( bufferView.extensions && bufferView.extensions[ this.name ] ) {\n\n\t\t\tconst extensionDef = bufferView.extensions[ this.name ];\n\n\t\t\tconst buffer = this.parser.getDependency( 'buffer', extensionDef.buffer );\n\t\t\tconst decoder = this.parser.options.meshoptDecoder;\n\n\t\t\tif ( ! decoder || ! decoder.supported ) {\n\n\t\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( this.name ) >= 0 ) {\n\n\t\t\t\t\tthrow new Error( 'THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files' );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Assumes that the extension is optional and that fallback buffer data is present\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn buffer.then( function ( res ) {\n\n\t\t\t\tconst byteOffset = extensionDef.byteOffset || 0;\n\t\t\t\tconst byteLength = extensionDef.byteLength || 0;\n\n\t\t\t\tconst count = extensionDef.count;\n\t\t\t\tconst stride = extensionDef.byteStride;\n\n\t\t\t\tconst source = new Uint8Array( res, byteOffset, byteLength );\n\n\t\t\t\tif ( decoder.decodeGltfBufferAsync ) {\n\n\t\t\t\t\treturn decoder.decodeGltfBufferAsync( count, stride, source, extensionDef.mode, extensionDef.filter ).then( function ( res ) {\n\n\t\t\t\t\t\treturn res.buffer;\n\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Support for MeshoptDecoder 0.18 or earlier, without decodeGltfBufferAsync\n\t\t\t\t\treturn decoder.ready.then( function () {\n\n\t\t\t\t\t\tconst result = new ArrayBuffer( count * stride );\n\t\t\t\t\t\tdecoder.decodeGltfBuffer( new Uint8Array( result ), count, stride, source, extensionDef.mode, extensionDef.filter );\n\t\t\t\t\t\treturn result;\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} else {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * GPU Instancing Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_mesh_gpu_instancing\n *\n * @private\n */\nclass GLTFMeshGpuInstancing {\n\n\tconstructor( parser ) {\n\n\t\tthis.name = EXTENSIONS.EXT_MESH_GPU_INSTANCING;\n\t\tthis.parser = parser;\n\n\t}\n\n\tcreateNodeMesh( nodeIndex ) {\n\n\t\tconst json = this.parser.json;\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\n\t\tif ( ! nodeDef.extensions || ! nodeDef.extensions[ this.name ] ||\n\t\t\tnodeDef.mesh === undefined ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst meshDef = json.meshes[ nodeDef.mesh ];\n\n\t\t// No Points or Lines + Instancing support yet\n\n\t\tfor ( const primitive of meshDef.primitives ) {\n\n\t\t\tif ( primitive.mode !== WEBGL_CONSTANTS.TRIANGLES &&\n\t\t\t\t primitive.mode !== WEBGL_CONSTANTS.TRIANGLE_STRIP &&\n\t\t\t\t primitive.mode !== WEBGL_CONSTANTS.TRIANGLE_FAN &&\n\t\t\t\t primitive.mode !== undefined ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst extensionDef = nodeDef.extensions[ this.name ];\n\t\tconst attributesDef = extensionDef.attributes;\n\n\t\t// @TODO: Can we support InstancedMesh + SkinnedMesh?\n\n\t\tconst pending = [];\n\t\tconst attributes = {};\n\n\t\tfor ( const key in attributesDef ) {\n\n\t\t\tpending.push( this.parser.getDependency( 'accessor', attributesDef[ key ] ).then( accessor => {\n\n\t\t\t\tattributes[ key ] = accessor;\n\t\t\t\treturn attributes[ key ];\n\n\t\t\t} ) );\n\n\t\t}\n\n\t\tif ( pending.length < 1 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tpending.push( this.parser.createNodeMesh( nodeIndex ) );\n\n\t\treturn Promise.all( pending ).then( results => {\n\n\t\t\tconst nodeObject = results.pop();\n\t\t\tconst meshes = nodeObject.isGroup ? nodeObject.children : [ nodeObject ];\n\t\t\tconst count = results[ 0 ].count; // All attribute counts should be same\n\t\t\tconst instancedMeshes = [];\n\n\t\t\tfor ( const mesh of meshes ) {\n\n\t\t\t\t// Temporal variables\n\t\t\t\tconst m = new Matrix4();\n\t\t\t\tconst p = new Vector3();\n\t\t\t\tconst q = new Quaternion();\n\t\t\t\tconst s = new Vector3( 1, 1, 1 );\n\n\t\t\t\tconst instancedMesh = new InstancedMesh( mesh.geometry, mesh.material, count );\n\n\t\t\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\t\t\tif ( attributes.TRANSLATION ) {\n\n\t\t\t\t\t\tp.fromBufferAttribute( attributes.TRANSLATION, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attributes.ROTATION ) {\n\n\t\t\t\t\t\tq.fromBufferAttribute( attributes.ROTATION, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attributes.SCALE ) {\n\n\t\t\t\t\t\ts.fromBufferAttribute( attributes.SCALE, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tinstancedMesh.setMatrixAt( i, m.compose( p, q, s ) );\n\n\t\t\t\t}\n\n\t\t\t\t// Add instance attributes to the geometry, excluding TRS.\n\t\t\t\tfor ( const attributeName in attributes ) {\n\n\t\t\t\t\tif ( attributeName === '_COLOR_0' ) {\n\n\t\t\t\t\t\tconst attr = attributes[ attributeName ];\n\t\t\t\t\t\tinstancedMesh.instanceColor = new InstancedBufferAttribute( attr.array, attr.itemSize, attr.normalized );\n\n\t\t\t\t\t} else if ( attributeName !== 'TRANSLATION' &&\n\t\t\t\t\t\t attributeName !== 'ROTATION' &&\n\t\t\t\t\t\t attributeName !== 'SCALE' ) {\n\n\t\t\t\t\t\tmesh.geometry.setAttribute( attributeName, attributes[ attributeName ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// Just in case\n\t\t\t\tObject3D.prototype.copy.call( instancedMesh, mesh );\n\n\t\t\t\tthis.parser.assignFinalMaterial( instancedMesh );\n\n\t\t\t\tinstancedMeshes.push( instancedMesh );\n\n\t\t\t}\n\n\t\t\tif ( nodeObject.isGroup ) {\n\n\t\t\t\tnodeObject.clear();\n\n\t\t\t\tnodeObject.add( ... instancedMeshes );\n\n\t\t\t\treturn nodeObject;\n\n\t\t\t}\n\n\t\t\treturn instancedMeshes[ 0 ];\n\n\t\t} );\n\n\t}\n\n}\n\n/* BINARY EXTENSION */\nconst BINARY_EXTENSION_HEADER_MAGIC = 'glTF';\nconst BINARY_EXTENSION_HEADER_LENGTH = 12;\nconst BINARY_EXTENSION_CHUNK_TYPES = { JSON: 0x4E4F534A, BIN: 0x004E4942 };\n\nclass GLTFBinaryExtension {\n\n\tconstructor( data ) {\n\n\t\tthis.name = EXTENSIONS.KHR_BINARY_GLTF;\n\t\tthis.content = null;\n\t\tthis.body = null;\n\n\t\tconst headerView = new DataView( data, 0, BINARY_EXTENSION_HEADER_LENGTH );\n\t\tconst textDecoder = new TextDecoder();\n\n\t\tthis.header = {\n\t\t\tmagic: textDecoder.decode( new Uint8Array( data.slice( 0, 4 ) ) ),\n\t\t\tversion: headerView.getUint32( 4, true ),\n\t\t\tlength: headerView.getUint32( 8, true )\n\t\t};\n\n\t\tif ( this.header.magic !== BINARY_EXTENSION_HEADER_MAGIC ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Unsupported glTF-Binary header.' );\n\n\t\t} else if ( this.header.version < 2.0 ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Legacy binary file detected.' );\n\n\t\t}\n\n\t\tconst chunkContentsLength = this.header.length - BINARY_EXTENSION_HEADER_LENGTH;\n\t\tconst chunkView = new DataView( data, BINARY_EXTENSION_HEADER_LENGTH );\n\t\tlet chunkIndex = 0;\n\n\t\twhile ( chunkIndex < chunkContentsLength ) {\n\n\t\t\tconst chunkLength = chunkView.getUint32( chunkIndex, true );\n\t\t\tchunkIndex += 4;\n\n\t\t\tconst chunkType = chunkView.getUint32( chunkIndex, true );\n\t\t\tchunkIndex += 4;\n\n\t\t\tif ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.JSON ) {\n\n\t\t\t\tconst contentArray = new Uint8Array( data, BINARY_EXTENSION_HEADER_LENGTH + chunkIndex, chunkLength );\n\t\t\t\tthis.content = textDecoder.decode( contentArray );\n\n\t\t\t} else if ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.BIN ) {\n\n\t\t\t\tconst byteOffset = BINARY_EXTENSION_HEADER_LENGTH + chunkIndex;\n\t\t\t\tthis.body = data.slice( byteOffset, byteOffset + chunkLength );\n\n\t\t\t}\n\n\t\t\t// Clients must ignore chunks with unknown types.\n\n\t\t\tchunkIndex += chunkLength;\n\n\t\t}\n\n\t\tif ( this.content === null ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: JSON content not found.' );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * DRACO Mesh Compression Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_draco_mesh_compression\n *\n * @private\n */\nclass GLTFDracoMeshCompressionExtension {\n\n\tconstructor( json, dracoLoader ) {\n\n\t\tif ( ! dracoLoader ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: No DRACOLoader instance provided.' );\n\n\t\t}\n\n\t\tthis.name = EXTENSIONS.KHR_DRACO_MESH_COMPRESSION;\n\t\tthis.json = json;\n\t\tthis.dracoLoader = dracoLoader;\n\t\tthis.dracoLoader.preload();\n\n\t}\n\n\tdecodePrimitive( primitive, parser ) {\n\n\t\tconst json = this.json;\n\t\tconst dracoLoader = this.dracoLoader;\n\t\tconst bufferViewIndex = primitive.extensions[ this.name ].bufferView;\n\t\tconst gltfAttributeMap = primitive.extensions[ this.name ].attributes;\n\t\tconst threeAttributeMap = {};\n\t\tconst attributeNormalizedMap = {};\n\t\tconst attributeTypeMap = {};\n\n\t\tfor ( const attributeName in gltfAttributeMap ) {\n\n\t\t\tconst threeAttributeName = ATTRIBUTES[ attributeName ] || attributeName.toLowerCase();\n\n\t\t\tthreeAttributeMap[ threeAttributeName ] = gltfAttributeMap[ attributeName ];\n\n\t\t}\n\n\t\tfor ( const attributeName in primitive.attributes ) {\n\n\t\t\tconst threeAttributeName = ATTRIBUTES[ attributeName ] || attributeName.toLowerCase();\n\n\t\t\tif ( gltfAttributeMap[ attributeName ] !== undefined ) {\n\n\t\t\t\tconst accessorDef = json.accessors[ primitive.attributes[ attributeName ] ];\n\t\t\t\tconst componentType = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];\n\n\t\t\t\tattributeTypeMap[ threeAttributeName ] = componentType.name;\n\t\t\t\tattributeNormalizedMap[ threeAttributeName ] = accessorDef.normalized === true;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn parser.getDependency( 'bufferView', bufferViewIndex ).then( function ( bufferView ) {\n\n\t\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\t\tdracoLoader.decodeDracoFile( bufferView, function ( geometry ) {\n\n\t\t\t\t\tfor ( const attributeName in geometry.attributes ) {\n\n\t\t\t\t\t\tconst attribute = geometry.attributes[ attributeName ];\n\t\t\t\t\t\tconst normalized = attributeNormalizedMap[ attributeName ];\n\n\t\t\t\t\t\tif ( normalized !== undefined ) attribute.normalized = normalized;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve( geometry );\n\n\t\t\t\t}, threeAttributeMap, attributeTypeMap, LinearSRGBColorSpace, reject );\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n}\n\n/**\n * Texture Transform Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_transform\n *\n * @private\n */\nclass GLTFTextureTransformExtension {\n\n\tconstructor() {\n\n\t\tthis.name = EXTENSIONS.KHR_TEXTURE_TRANSFORM;\n\n\t}\n\n\textendTexture( texture, transform ) {\n\n\t\tif ( ( transform.texCoord === undefined || transform.texCoord === texture.channel )\n\t\t\t&& transform.offset === undefined\n\t\t\t&& transform.rotation === undefined\n\t\t\t&& transform.scale === undefined ) {\n\n\t\t\t// See https://github.com/mrdoob/three.js/issues/21819.\n\t\t\treturn texture;\n\n\t\t}\n\n\t\ttexture = texture.clone();\n\n\t\tif ( transform.texCoord !== undefined ) {\n\n\t\t\ttexture.channel = transform.texCoord;\n\n\t\t}\n\n\t\tif ( transform.offset !== undefined ) {\n\n\t\t\ttexture.offset.fromArray( transform.offset );\n\n\t\t}\n\n\t\tif ( transform.rotation !== undefined ) {\n\n\t\t\ttexture.rotation = transform.rotation;\n\n\t\t}\n\n\t\tif ( transform.scale !== undefined ) {\n\n\t\t\ttexture.repeat.fromArray( transform.scale );\n\n\t\t}\n\n\t\ttexture.needsUpdate = true;\n\n\t\treturn texture;\n\n\t}\n\n}\n\n/**\n * Mesh Quantization Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization\n *\n * @private\n */\nclass GLTFMeshQuantizationExtension {\n\n\tconstructor() {\n\n\t\tthis.name = EXTENSIONS.KHR_MESH_QUANTIZATION;\n\n\t}\n\n}\n\n/*********************************/\n/********** INTERPOLATION ********/\n/*********************************/\n\n// Spline Interpolation\n// Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#appendix-c-spline-interpolation\nclass GLTFCubicSplineInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tcopySampleValue_( index ) {\n\n\t\t// Copies a sample value to the result buffer. See description of glTF\n\t\t// CUBICSPLINE values layout in interpolate_() function below.\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tvalueSize = this.valueSize,\n\t\t\toffset = index * valueSize * 3 + valueSize;\n\n\t\tfor ( let i = 0; i !== valueSize; i ++ ) {\n\n\t\t\tresult[ i ] = values[ offset + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer;\n\t\tconst values = this.sampleValues;\n\t\tconst stride = this.valueSize;\n\n\t\tconst stride2 = stride * 2;\n\t\tconst stride3 = stride * 3;\n\n\t\tconst td = t1 - t0;\n\n\t\tconst p = ( t - t0 ) / td;\n\t\tconst pp = p * p;\n\t\tconst ppp = pp * p;\n\n\t\tconst offset1 = i1 * stride3;\n\t\tconst offset0 = offset1 - stride3;\n\n\t\tconst s2 = - 2 * ppp + 3 * pp;\n\t\tconst s3 = ppp - pp;\n\t\tconst s0 = 1 - s2;\n\t\tconst s1 = s3 - pp + p;\n\n\t\t// Layout of keyframe output values for CUBICSPLINE animations:\n\t\t// [ inTangent_1, splineVertex_1, outTangent_1, inTangent_2, splineVertex_2, ... ]\n\t\tfor ( let i = 0; i !== stride; i ++ ) {\n\n\t\t\tconst p0 = values[ offset0 + i + stride ]; // splineVertex_k\n\t\t\tconst m0 = values[ offset0 + i + stride2 ] * td; // outTangent_k * (t_k+1 - t_k)\n\t\t\tconst p1 = values[ offset1 + i + stride ]; // splineVertex_k+1\n\t\t\tconst m1 = values[ offset1 + i ] * td; // inTangent_k+1 * (t_k+1 - t_k)\n\n\t\t\tresult[ i ] = s0 * p0 + s1 * m0 + s2 * p1 + s3 * m1;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\nconst _quaternion = new Quaternion();\n\nclass GLTFCubicSplineQuaternionInterpolant extends GLTFCubicSplineInterpolant {\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = super.interpolate_( i1, t0, t, t1 );\n\n\t\t_quaternion.fromArray( result ).normalize().toArray( result );\n\n\t\treturn result;\n\n\t}\n\n}\n\n\n/*********************************/\n/********** INTERNALS ************/\n/*********************************/\n\n/* CONSTANTS */\n\nconst WEBGL_CONSTANTS = {\n\tFLOAT: 5126,\n\t//FLOAT_MAT2: 35674,\n\tFLOAT_MAT3: 35675,\n\tFLOAT_MAT4: 35676,\n\tFLOAT_VEC2: 35664,\n\tFLOAT_VEC3: 35665,\n\tFLOAT_VEC4: 35666,\n\tLINEAR: 9729,\n\tREPEAT: 10497,\n\tSAMPLER_2D: 35678,\n\tPOINTS: 0,\n\tLINES: 1,\n\tLINE_LOOP: 2,\n\tLINE_STRIP: 3,\n\tTRIANGLES: 4,\n\tTRIANGLE_STRIP: 5,\n\tTRIANGLE_FAN: 6,\n\tUNSIGNED_BYTE: 5121,\n\tUNSIGNED_SHORT: 5123\n};\n\nconst WEBGL_COMPONENT_TYPES = {\n\t5120: Int8Array,\n\t5121: Uint8Array,\n\t5122: Int16Array,\n\t5123: Uint16Array,\n\t5125: Uint32Array,\n\t5126: Float32Array\n};\n\nconst WEBGL_FILTERS = {\n\t9728: NearestFilter,\n\t9729: LinearFilter,\n\t9984: NearestMipmapNearestFilter,\n\t9985: LinearMipmapNearestFilter,\n\t9986: NearestMipmapLinearFilter,\n\t9987: LinearMipmapLinearFilter\n};\n\nconst WEBGL_WRAPPINGS = {\n\t33071: ClampToEdgeWrapping,\n\t33648: MirroredRepeatWrapping,\n\t10497: RepeatWrapping\n};\n\nconst WEBGL_TYPE_SIZES = {\n\t'SCALAR': 1,\n\t'VEC2': 2,\n\t'VEC3': 3,\n\t'VEC4': 4,\n\t'MAT2': 4,\n\t'MAT3': 9,\n\t'MAT4': 16\n};\n\nconst ATTRIBUTES = {\n\tPOSITION: 'position',\n\tNORMAL: 'normal',\n\tTANGENT: 'tangent',\n\tTEXCOORD_0: 'uv',\n\tTEXCOORD_1: 'uv1',\n\tTEXCOORD_2: 'uv2',\n\tTEXCOORD_3: 'uv3',\n\tCOLOR_0: 'color',\n\tWEIGHTS_0: 'skinWeight',\n\tJOINTS_0: 'skinIndex',\n};\n\nconst PATH_PROPERTIES = {\n\tscale: 'scale',\n\ttranslation: 'position',\n\trotation: 'quaternion',\n\tweights: 'morphTargetInfluences'\n};\n\nconst INTERPOLATION = {\n\tCUBICSPLINE: undefined, // We use a custom interpolant (GLTFCubicSplineInterpolation) for CUBICSPLINE tracks. Each\n\t\t // keyframe track will be initialized with a default interpolation type, then modified.\n\tLINEAR: InterpolateLinear,\n\tSTEP: InterpolateDiscrete\n};\n\nconst ALPHA_MODES = {\n\tOPAQUE: 'OPAQUE',\n\tMASK: 'MASK',\n\tBLEND: 'BLEND'\n};\n\n/**\n * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#default-material\n *\n * @private\n * @param {Object<string, Material>} cache\n * @return {Material}\n */\nfunction createDefaultMaterial( cache ) {\n\n\tif ( cache[ 'DefaultMaterial' ] === undefined ) {\n\n\t\tcache[ 'DefaultMaterial' ] = new MeshStandardMaterial( {\n\t\t\tcolor: 0xFFFFFF,\n\t\t\temissive: 0x000000,\n\t\t\tmetalness: 1,\n\t\t\troughness: 1,\n\t\t\ttransparent: false,\n\t\t\tdepthTest: true,\n\t\t\tside: FrontSide\n\t\t} );\n\n\t}\n\n\treturn cache[ 'DefaultMaterial' ];\n\n}\n\nfunction addUnknownExtensionsToUserData( knownExtensions, object, objectDef ) {\n\n\t// Add unknown glTF extensions to an object's userData.\n\n\tfor ( const name in objectDef.extensions ) {\n\n\t\tif ( knownExtensions[ name ] === undefined ) {\n\n\t\t\tobject.userData.gltfExtensions = object.userData.gltfExtensions || {};\n\t\t\tobject.userData.gltfExtensions[ name ] = objectDef.extensions[ name ];\n\n\t\t}\n\n\t}\n\n}\n\n/**\n *\n * @private\n * @param {Object3D|Material|BufferGeometry|Object|AnimationClip} object\n * @param {GLTF.definition} gltfDef\n */\nfunction assignExtrasToUserData( object, gltfDef ) {\n\n\tif ( gltfDef.extras !== undefined ) {\n\n\t\tif ( typeof gltfDef.extras === 'object' ) {\n\n\t\t\tObject.assign( object.userData, gltfDef.extras );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Ignoring primitive type .extras, ' + gltfDef.extras );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#morph-targets\n *\n * @private\n * @param {BufferGeometry} geometry\n * @param {Array<GLTF.Target>} targets\n * @param {GLTFParser} parser\n * @return {Promise<BufferGeometry>}\n */\nfunction addMorphTargets( geometry, targets, parser ) {\n\n\tlet hasMorphPosition = false;\n\tlet hasMorphNormal = false;\n\tlet hasMorphColor = false;\n\n\tfor ( let i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\tconst target = targets[ i ];\n\n\t\tif ( target.POSITION !== undefined ) hasMorphPosition = true;\n\t\tif ( target.NORMAL !== undefined ) hasMorphNormal = true;\n\t\tif ( target.COLOR_0 !== undefined ) hasMorphColor = true;\n\n\t\tif ( hasMorphPosition && hasMorphNormal && hasMorphColor ) break;\n\n\t}\n\n\tif ( ! hasMorphPosition && ! hasMorphNormal && ! hasMorphColor ) return Promise.resolve( geometry );\n\n\tconst pendingPositionAccessors = [];\n\tconst pendingNormalAccessors = [];\n\tconst pendingColorAccessors = [];\n\n\tfor ( let i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\tconst target = targets[ i ];\n\n\t\tif ( hasMorphPosition ) {\n\n\t\t\tconst pendingAccessor = target.POSITION !== undefined\n\t\t\t\t? parser.getDependency( 'accessor', target.POSITION )\n\t\t\t\t: geometry.attributes.position;\n\n\t\t\tpendingPositionAccessors.push( pendingAccessor );\n\n\t\t}\n\n\t\tif ( hasMorphNormal ) {\n\n\t\t\tconst pendingAccessor = target.NORMAL !== undefined\n\t\t\t\t? parser.getDependency( 'accessor', target.NORMAL )\n\t\t\t\t: geometry.attributes.normal;\n\n\t\t\tpendingNormalAccessors.push( pendingAccessor );\n\n\t\t}\n\n\t\tif ( hasMorphColor ) {\n\n\t\t\tconst pendingAccessor = target.COLOR_0 !== undefined\n\t\t\t\t? parser.getDependency( 'accessor', target.COLOR_0 )\n\t\t\t\t: geometry.attributes.color;\n\n\t\t\tpendingColorAccessors.push( pendingAccessor );\n\n\t\t}\n\n\t}\n\n\treturn Promise.all( [\n\t\tPromise.all( pendingPositionAccessors ),\n\t\tPromise.all( pendingNormalAccessors ),\n\t\tPromise.all( pendingColorAccessors )\n\t] ).then( function ( accessors ) {\n\n\t\tconst morphPositions = accessors[ 0 ];\n\t\tconst morphNormals = accessors[ 1 ];\n\t\tconst morphColors = accessors[ 2 ];\n\n\t\tif ( hasMorphPosition ) geometry.morphAttributes.position = morphPositions;\n\t\tif ( hasMorphNormal ) geometry.morphAttributes.normal = morphNormals;\n\t\tif ( hasMorphColor ) geometry.morphAttributes.color = morphColors;\n\t\tgeometry.morphTargetsRelative = true;\n\n\t\treturn geometry;\n\n\t} );\n\n}\n\n/**\n *\n * @private\n * @param {Mesh} mesh\n * @param {GLTF.Mesh} meshDef\n */\nfunction updateMorphTargets( mesh, meshDef ) {\n\n\tmesh.updateMorphTargets();\n\n\tif ( meshDef.weights !== undefined ) {\n\n\t\tfor ( let i = 0, il = meshDef.weights.length; i < il; i ++ ) {\n\n\t\t\tmesh.morphTargetInfluences[ i ] = meshDef.weights[ i ];\n\n\t\t}\n\n\t}\n\n\t// .extras has user-defined data, so check that .extras.targetNames is an array.\n\tif ( meshDef.extras && Array.isArray( meshDef.extras.targetNames ) ) {\n\n\t\tconst targetNames = meshDef.extras.targetNames;\n\n\t\tif ( mesh.morphTargetInfluences.length === targetNames.length ) {\n\n\t\t\tmesh.morphTargetDictionary = {};\n\n\t\t\tfor ( let i = 0, il = targetNames.length; i < il; i ++ ) {\n\n\t\t\t\tmesh.morphTargetDictionary[ targetNames[ i ] ] = i;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.' );\n\n\t\t}\n\n\t}\n\n}\n\nfunction createPrimitiveKey( primitiveDef ) {\n\n\tlet geometryKey;\n\n\tconst dracoExtension = primitiveDef.extensions && primitiveDef.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ];\n\n\tif ( dracoExtension ) {\n\n\t\tgeometryKey = 'draco:' + dracoExtension.bufferView\n\t\t\t\t+ ':' + dracoExtension.indices\n\t\t\t\t+ ':' + createAttributesKey( dracoExtension.attributes );\n\n\t} else {\n\n\t\tgeometryKey = primitiveDef.indices + ':' + createAttributesKey( primitiveDef.attributes ) + ':' + primitiveDef.mode;\n\n\t}\n\n\tif ( primitiveDef.targets !== undefined ) {\n\n\t\tfor ( let i = 0, il = primitiveDef.targets.length; i < il; i ++ ) {\n\n\t\t\tgeometryKey += ':' + createAttributesKey( primitiveDef.targets[ i ] );\n\n\t\t}\n\n\t}\n\n\treturn geometryKey;\n\n}\n\nfunction createAttributesKey( attributes ) {\n\n\tlet attributesKey = '';\n\n\tconst keys = Object.keys( attributes ).sort();\n\n\tfor ( let i = 0, il = keys.length; i < il; i ++ ) {\n\n\t\tattributesKey += keys[ i ] + ':' + attributes[ keys[ i ] ] + ';';\n\n\t}\n\n\treturn attributesKey;\n\n}\n\nfunction getNormalizedComponentScale( constructor ) {\n\n\t// Reference:\n\t// https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization#encoding-quantized-data\n\n\tswitch ( constructor ) {\n\n\t\tcase Int8Array:\n\t\t\treturn 1 / 127;\n\n\t\tcase Uint8Array:\n\t\t\treturn 1 / 255;\n\n\t\tcase Int16Array:\n\t\t\treturn 1 / 32767;\n\n\t\tcase Uint16Array:\n\t\t\treturn 1 / 65535;\n\n\t\tdefault:\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Unsupported normalized accessor component type.' );\n\n\t}\n\n}\n\nfunction getImageURIMimeType( uri ) {\n\n\tif ( uri.search( /\\.jpe?g($|\\?)/i ) > 0 || uri.search( /^data\\:image\\/jpeg/ ) === 0 ) return 'image/jpeg';\n\tif ( uri.search( /\\.webp($|\\?)/i ) > 0 || uri.search( /^data\\:image\\/webp/ ) === 0 ) return 'image/webp';\n\tif ( uri.search( /\\.ktx2($|\\?)/i ) > 0 || uri.search( /^data\\:image\\/ktx2/ ) === 0 ) return 'image/ktx2';\n\n\treturn 'image/png';\n\n}\n\nconst _identityMatrix = new Matrix4();\n\n/* GLTF PARSER */\n\nclass GLTFParser {\n\n\tconstructor( json = {}, options = {} ) {\n\n\t\tthis.json = json;\n\t\tthis.extensions = {};\n\t\tthis.plugins = {};\n\t\tthis.options = options;\n\n\t\t// loader object cache\n\t\tthis.cache = new GLTFRegistry();\n\n\t\t// associations between Three.js objects and glTF elements\n\t\tthis.associations = new Map();\n\n\t\t// BufferGeometry caching\n\t\tthis.primitiveCache = {};\n\n\t\t// Node cache\n\t\tthis.nodeCache = {};\n\n\t\t// Object3D instance caches\n\t\tthis.meshCache = { refs: {}, uses: {} };\n\t\tthis.cameraCache = { refs: {}, uses: {} };\n\t\tthis.lightCache = { refs: {}, uses: {} };\n\n\t\tthis.sourceCache = {};\n\t\tthis.textureCache = {};\n\n\t\t// Track node names, to ensure no duplicates\n\t\tthis.nodeNamesUsed = {};\n\n\t\t// Use an ImageBitmapLoader if imageBitmaps are supported. Moves much of the\n\t\t// expensive work of uploading a texture to the GPU off the main thread.\n\n\t\tlet isSafari = false;\n\t\tlet safariVersion = - 1;\n\t\tlet isFirefox = false;\n\t\tlet firefoxVersion = - 1;\n\n\t\tif ( typeof navigator !== 'undefined' ) {\n\n\t\t\tconst userAgent = navigator.userAgent;\n\n\t\t\tisSafari = /^((?!chrome|android).)*safari/i.test( userAgent ) === true;\n\t\t\tconst safariMatch = userAgent.match( /Version\\/(\\d+)/ );\n\t\t\tsafariVersion = isSafari && safariMatch ? parseInt( safariMatch[ 1 ], 10 ) : - 1;\n\n\t\t\tisFirefox = userAgent.indexOf( 'Firefox' ) > - 1;\n\t\t\tfirefoxVersion = isFirefox ? userAgent.match( /Firefox\\/([0-9]+)\\./ )[ 1 ] : - 1;\n\n\t\t}\n\n\t\tif ( typeof createImageBitmap === 'undefined' || ( isSafari && safariVersion < 17 ) || ( isFirefox && firefoxVersion < 98 ) ) {\n\n\t\t\tthis.textureLoader = new TextureLoader( this.options.manager );\n\n\t\t} else {\n\n\t\t\tthis.textureLoader = new ImageBitmapLoader( this.options.manager );\n\n\t\t}\n\n\t\tthis.textureLoader.setCrossOrigin( this.options.crossOrigin );\n\t\tthis.textureLoader.setRequestHeader( this.options.requestHeader );\n\n\t\tthis.fileLoader = new FileLoader( this.options.manager );\n\t\tthis.fileLoader.setResponseType( 'arraybuffer' );\n\n\t\tif ( this.options.crossOrigin === 'use-credentials' ) {\n\n\t\t\tthis.fileLoader.setWithCredentials( true );\n\n\t\t}\n\n\t}\n\n\tsetExtensions( extensions ) {\n\n\t\tthis.extensions = extensions;\n\n\t}\n\n\tsetPlugins( plugins ) {\n\n\t\tthis.plugins = plugins;\n\n\t}\n\n\tparse( onLoad, onError ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\n\t\t// Clear the loader cache\n\t\tthis.cache.removeAll();\n\t\tthis.nodeCache = {};\n\n\t\t// Mark the special nodes/meshes in json for efficient parse\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\treturn ext._markDefs && ext._markDefs();\n\n\t\t} );\n\n\t\tPromise.all( this._invokeAll( function ( ext ) {\n\n\t\t\treturn ext.beforeRoot && ext.beforeRoot();\n\n\t\t} ) ).then( function () {\n\n\t\t\treturn Promise.all( [\n\n\t\t\t\tparser.getDependencies( 'scene' ),\n\t\t\t\tparser.getDependencies( 'animation' ),\n\t\t\t\tparser.getDependencies( 'camera' ),\n\n\t\t\t] );\n\n\t\t} ).then( function ( dependencies ) {\n\n\t\t\tconst result = {\n\t\t\t\tscene: dependencies[ 0 ][ json.scene || 0 ],\n\t\t\t\tscenes: dependencies[ 0 ],\n\t\t\t\tanimations: dependencies[ 1 ],\n\t\t\t\tcameras: dependencies[ 2 ],\n\t\t\t\tasset: json.asset,\n\t\t\t\tparser: parser,\n\t\t\t\tuserData: {}\n\t\t\t};\n\n\t\t\taddUnknownExtensionsToUserData( extensions, result, json );\n\n\t\t\tassignExtrasToUserData( result, json );\n\n\t\t\treturn Promise.all( parser._invokeAll( function ( ext ) {\n\n\t\t\t\treturn ext.afterRoot && ext.afterRoot( result );\n\n\t\t\t} ) ).then( function () {\n\n\t\t\t\tfor ( const scene of result.scenes ) {\n\n\t\t\t\t\tscene.updateMatrixWorld();\n\n\t\t\t\t}\n\n\t\t\t\tonLoad( result );\n\n\t\t\t} );\n\n\t\t} ).catch( onError );\n\n\t}\n\n\t/**\n\t * Marks the special nodes/meshes in json for efficient parse.\n\t *\n\t * @private\n\t */\n\t_markDefs() {\n\n\t\tconst nodeDefs = this.json.nodes || [];\n\t\tconst skinDefs = this.json.skins || [];\n\t\tconst meshDefs = this.json.meshes || [];\n\n\t\t// Nothing in the node definition indicates whether it is a Bone or an\n\t\t// Object3D. Use the skins' joint references to mark bones.\n\t\tfor ( let skinIndex = 0, skinLength = skinDefs.length; skinIndex < skinLength; skinIndex ++ ) {\n\n\t\t\tconst joints = skinDefs[ skinIndex ].joints;\n\n\t\t\tfor ( let i = 0, il = joints.length; i < il; i ++ ) {\n\n\t\t\t\tnodeDefs[ joints[ i ] ].isBone = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Iterate over all nodes, marking references to shared resources,\n\t\t// as well as skeleton joints.\n\t\tfor ( let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex ++ ) {\n\n\t\t\tconst nodeDef = nodeDefs[ nodeIndex ];\n\n\t\t\tif ( nodeDef.mesh !== undefined ) {\n\n\t\t\t\tthis._addNodeRef( this.meshCache, nodeDef.mesh );\n\n\t\t\t\t// Nothing in the mesh definition indicates whether it is\n\t\t\t\t// a SkinnedMesh or Mesh. Use the node's mesh reference\n\t\t\t\t// to mark SkinnedMesh if node has skin.\n\t\t\t\tif ( nodeDef.skin !== undefined ) {\n\n\t\t\t\t\tmeshDefs[ nodeDef.mesh ].isSkinnedMesh = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( nodeDef.camera !== undefined ) {\n\n\t\t\t\tthis._addNodeRef( this.cameraCache, nodeDef.camera );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Counts references to shared node / Object3D resources. These resources\n\t * can be reused, or \"instantiated\", at multiple nodes in the scene\n\t * hierarchy. Mesh, Camera, and Light instances are instantiated and must\n\t * be marked. Non-scenegraph resources (like Materials, Geometries, and\n\t * Textures) can be reused directly and are not marked here.\n\t *\n\t * Example: CesiumMilkTruck sample model reuses \"Wheel\" meshes.\n\t *\n\t * @private\n\t * @param {Object} cache\n\t * @param {Object3D} index\n\t */\n\t_addNodeRef( cache, index ) {\n\n\t\tif ( index === undefined ) return;\n\n\t\tif ( cache.refs[ index ] === undefined ) {\n\n\t\t\tcache.refs[ index ] = cache.uses[ index ] = 0;\n\n\t\t}\n\n\t\tcache.refs[ index ] ++;\n\n\t}\n\n\t/**\n\t * Returns a reference to a shared resource, cloning it if necessary.\n\t *\n\t * @private\n\t * @param {Object} cache\n\t * @param {number} index\n\t * @param {Object} object\n\t * @return {Object}\n\t */\n\t_getNodeRef( cache, index, object ) {\n\n\t\tif ( cache.refs[ index ] <= 1 ) return object;\n\n\t\tconst ref = object.clone();\n\n\t\t// Propagates mappings to the cloned object, prevents mappings on the\n\t\t// original object from being lost.\n\t\tconst updateMappings = ( original, clone ) => {\n\n\t\t\tconst mappings = this.associations.get( original );\n\t\t\tif ( mappings != null ) {\n\n\t\t\t\tthis.associations.set( clone, mappings );\n\n\t\t\t}\n\n\t\t\tfor ( const [ i, child ] of original.children.entries() ) {\n\n\t\t\t\tupdateMappings( child, clone.children[ i ] );\n\n\t\t\t}\n\n\t\t};\n\n\t\tupdateMappings( object, ref );\n\n\t\tref.name += '_instance_' + ( cache.uses[ index ] ++ );\n\n\t\treturn ref;\n\n\t}\n\n\t_invokeOne( func ) {\n\n\t\tconst extensions = Object.values( this.plugins );\n\t\textensions.push( this );\n\n\t\tfor ( let i = 0; i < extensions.length; i ++ ) {\n\n\t\t\tconst result = func( extensions[ i ] );\n\n\t\t\tif ( result ) return result;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t_invokeAll( func ) {\n\n\t\tconst extensions = Object.values( this.plugins );\n\t\textensions.unshift( this );\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0; i < extensions.length; i ++ ) {\n\n\t\t\tconst result = func( extensions[ i ] );\n\n\t\t\tif ( result ) pending.push( result );\n\n\t\t}\n\n\t\treturn pending;\n\n\t}\n\n\t/**\n\t * Requests the specified dependency asynchronously, with caching.\n\t *\n\t * @private\n\t * @param {string} type\n\t * @param {number} index\n\t * @return {Promise<Object3D|Material|Texture|AnimationClip|ArrayBuffer|Object>}\n\t */\n\tgetDependency( type, index ) {\n\n\t\tconst cacheKey = type + ':' + index;\n\t\tlet dependency = this.cache.get( cacheKey );\n\n\t\tif ( ! dependency ) {\n\n\t\t\tswitch ( type ) {\n\n\t\t\t\tcase 'scene':\n\t\t\t\t\tdependency = this.loadScene( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'node':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadNode && ext.loadNode( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'mesh':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadMesh && ext.loadMesh( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'accessor':\n\t\t\t\t\tdependency = this.loadAccessor( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'bufferView':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadBufferView && ext.loadBufferView( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'buffer':\n\t\t\t\t\tdependency = this.loadBuffer( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'material':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadMaterial && ext.loadMaterial( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'texture':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadTexture && ext.loadTexture( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'skin':\n\t\t\t\t\tdependency = this.loadSkin( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'animation':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadAnimation && ext.loadAnimation( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'camera':\n\t\t\t\t\tdependency = this.loadCamera( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext != this && ext.getDependency && ext.getDependency( type, index );\n\n\t\t\t\t\t} );\n\n\t\t\t\t\tif ( ! dependency ) {\n\n\t\t\t\t\t\tthrow new Error( 'Unknown type: ' + type );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tthis.cache.add( cacheKey, dependency );\n\n\t\t}\n\n\t\treturn dependency;\n\n\t}\n\n\t/**\n\t * Requests all dependencies of the specified type asynchronously, with caching.\n\t *\n\t * @private\n\t * @param {string} type\n\t * @return {Promise<Array<Object>>}\n\t */\n\tgetDependencies( type ) {\n\n\t\tlet dependencies = this.cache.get( type );\n\n\t\tif ( ! dependencies ) {\n\n\t\t\tconst parser = this;\n\t\t\tconst defs = this.json[ type + ( type === 'mesh' ? 'es' : 's' ) ] || [];\n\n\t\t\tdependencies = Promise.all( defs.map( function ( def, index ) {\n\n\t\t\t\treturn parser.getDependency( type, index );\n\n\t\t\t} ) );\n\n\t\t\tthis.cache.add( type, dependencies );\n\n\t\t}\n\n\t\treturn dependencies;\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views\n\t *\n\t * @private\n\t * @param {number} bufferIndex\n\t * @return {Promise<ArrayBuffer>}\n\t */\n\tloadBuffer( bufferIndex ) {\n\n\t\tconst bufferDef = this.json.buffers[ bufferIndex ];\n\t\tconst loader = this.fileLoader;\n\n\t\tif ( bufferDef.type && bufferDef.type !== 'arraybuffer' ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: ' + bufferDef.type + ' buffer type is not supported.' );\n\n\t\t}\n\n\t\t// If present, GLB container is required to be the first buffer.\n\t\tif ( bufferDef.uri === undefined && bufferIndex === 0 ) {\n\n\t\t\treturn Promise.resolve( this.extensions[ EXTENSIONS.KHR_BINARY_GLTF ].body );\n\n\t\t}\n\n\t\tconst options = this.options;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tloader.load( LoaderUtils.resolveURL( bufferDef.uri, options.path ), resolve, undefined, function () {\n\n\t\t\t\treject( new Error( 'THREE.GLTFLoader: Failed to load buffer \"' + bufferDef.uri + '\".' ) );\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views\n\t *\n\t * @private\n\t * @param {number} bufferViewIndex\n\t * @return {Promise<ArrayBuffer>}\n\t */\n\tloadBufferView( bufferViewIndex ) {\n\n\t\tconst bufferViewDef = this.json.bufferViews[ bufferViewIndex ];\n\n\t\treturn this.getDependency( 'buffer', bufferViewDef.buffer ).then( function ( buffer ) {\n\n\t\t\tconst byteLength = bufferViewDef.byteLength || 0;\n\t\t\tconst byteOffset = bufferViewDef.byteOffset || 0;\n\t\t\treturn buffer.slice( byteOffset, byteOffset + byteLength );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#accessors\n\t *\n\t * @private\n\t * @param {number} accessorIndex\n\t * @return {Promise<BufferAttribute|InterleavedBufferAttribute>}\n\t */\n\tloadAccessor( accessorIndex ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\n\t\tconst accessorDef = this.json.accessors[ accessorIndex ];\n\n\t\tif ( accessorDef.bufferView === undefined && accessorDef.sparse === undefined ) {\n\n\t\t\tconst itemSize = WEBGL_TYPE_SIZES[ accessorDef.type ];\n\t\t\tconst TypedArray = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];\n\t\t\tconst normalized = accessorDef.normalized === true;\n\n\t\t\tconst array = new TypedArray( accessorDef.count * itemSize );\n\t\t\treturn Promise.resolve( new BufferAttribute( array, itemSize, normalized ) );\n\n\t\t}\n\n\t\tconst pendingBufferViews = [];\n\n\t\tif ( accessorDef.bufferView !== undefined ) {\n\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.bufferView ) );\n\n\t\t} else {\n\n\t\t\tpendingBufferViews.push( null );\n\n\t\t}\n\n\t\tif ( accessorDef.sparse !== undefined ) {\n\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.sparse.indices.bufferView ) );\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.sparse.values.bufferView ) );\n\n\t\t}\n\n\t\treturn Promise.all( pendingBufferViews ).then( function ( bufferViews ) {\n\n\t\t\tconst bufferView = bufferViews[ 0 ];\n\n\t\t\tconst itemSize = WEBGL_TYPE_SIZES[ accessorDef.type ];\n\t\t\tconst TypedArray = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];\n\n\t\t\t// For VEC3: itemSize is 3, elementBytes is 4, itemBytes is 12.\n\t\t\tconst elementBytes = TypedArray.BYTES_PER_ELEMENT;\n\t\t\tconst itemBytes = elementBytes * itemSize;\n\t\t\tconst byteOffset = accessorDef.byteOffset || 0;\n\t\t\tconst byteStride = accessorDef.bufferView !== undefined ? json.bufferViews[ accessorDef.bufferView ].byteStride : undefined;\n\t\t\tconst normalized = accessorDef.normalized === true;\n\t\t\tlet array, bufferAttribute;\n\n\t\t\t// The buffer is not interleaved if the stride is the item size in bytes.\n\t\t\tif ( byteStride && byteStride !== itemBytes ) {\n\n\t\t\t\t// Each \"slice\" of the buffer, as defined by 'count' elements of 'byteStride' bytes, gets its own InterleavedBuffer\n\t\t\t\t// This makes sure that IBA.count reflects accessor.count properly\n\t\t\t\tconst ibSlice = Math.floor( byteOffset / byteStride );\n\t\t\t\tconst ibCacheKey = 'InterleavedBuffer:' + accessorDef.bufferView + ':' + accessorDef.componentType + ':' + ibSlice + ':' + accessorDef.count;\n\t\t\t\tlet ib = parser.cache.get( ibCacheKey );\n\n\t\t\t\tif ( ! ib ) {\n\n\t\t\t\t\tarray = new TypedArray( bufferView, ibSlice * byteStride, accessorDef.count * byteStride / elementBytes );\n\n\t\t\t\t\t// Integer parameters to IB/IBA are in array elements, not bytes.\n\t\t\t\t\tib = new InterleavedBuffer( array, byteStride / elementBytes );\n\n\t\t\t\t\tparser.cache.add( ibCacheKey, ib );\n\n\t\t\t\t}\n\n\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( ib, itemSize, ( byteOffset % byteStride ) / elementBytes, normalized );\n\n\t\t\t} else {\n\n\t\t\t\tif ( bufferView === null ) {\n\n\t\t\t\t\tarray = new TypedArray( accessorDef.count * itemSize );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tarray = new TypedArray( bufferView, byteOffset, accessorDef.count * itemSize );\n\n\t\t\t\t}\n\n\t\t\t\tbufferAttribute = new BufferAttribute( array, itemSize, normalized );\n\n\t\t\t}\n\n\t\t\t// https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#sparse-accessors\n\t\t\tif ( accessorDef.sparse !== undefined ) {\n\n\t\t\t\tconst itemSizeIndices = WEBGL_TYPE_SIZES.SCALAR;\n\t\t\t\tconst TypedArrayIndices = WEBGL_COMPONENT_TYPES[ accessorDef.sparse.indices.componentType ];\n\n\t\t\t\tconst byteOffsetIndices = accessorDef.sparse.indices.byteOffset || 0;\n\t\t\t\tconst byteOffsetValues = accessorDef.sparse.values.byteOffset || 0;\n\n\t\t\t\tconst sparseIndices = new TypedArrayIndices( bufferViews[ 1 ], byteOffsetIndices, accessorDef.sparse.count * itemSizeIndices );\n\t\t\t\tconst sparseValues = new TypedArray( bufferViews[ 2 ], byteOffsetValues, accessorDef.sparse.count * itemSize );\n\n\t\t\t\tif ( bufferView !== null ) {\n\n\t\t\t\t\t// Avoid modifying the original ArrayBuffer, if the bufferView wasn't initialized with zeroes.\n\t\t\t\t\tbufferAttribute = new BufferAttribute( bufferAttribute.array.slice(), bufferAttribute.itemSize, bufferAttribute.normalized );\n\n\t\t\t\t}\n\n\t\t\t\t// Ignore normalized since we copy from sparse\n\t\t\t\tbufferAttribute.normalized = false;\n\n\t\t\t\tfor ( let i = 0, il = sparseIndices.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst index = sparseIndices[ i ];\n\n\t\t\t\t\tbufferAttribute.setX( index, sparseValues[ i * itemSize ] );\n\t\t\t\t\tif ( itemSize >= 2 ) bufferAttribute.setY( index, sparseValues[ i * itemSize + 1 ] );\n\t\t\t\t\tif ( itemSize >= 3 ) bufferAttribute.setZ( index, sparseValues[ i * itemSize + 2 ] );\n\t\t\t\t\tif ( itemSize >= 4 ) bufferAttribute.setW( index, sparseValues[ i * itemSize + 3 ] );\n\t\t\t\t\tif ( itemSize >= 5 ) throw new Error( 'THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.' );\n\n\t\t\t\t}\n\n\t\t\t\tbufferAttribute.normalized = normalized;\n\n\t\t\t}\n\n\t\t\treturn bufferAttribute;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#textures\n\t *\n\t * @private\n\t * @param {number} textureIndex\n\t * @return {Promise<?Texture>}\n\t */\n\tloadTexture( textureIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst options = this.options;\n\t\tconst textureDef = json.textures[ textureIndex ];\n\t\tconst sourceIndex = textureDef.source;\n\t\tconst sourceDef = json.images[ sourceIndex ];\n\n\t\tlet loader = this.textureLoader;\n\n\t\tif ( sourceDef.uri ) {\n\n\t\t\tconst handler = options.manager.getHandler( sourceDef.uri );\n\t\t\tif ( handler !== null ) loader = handler;\n\n\t\t}\n\n\t\treturn this.loadTextureImage( textureIndex, sourceIndex, loader );\n\n\t}\n\n\tloadTextureImage( textureIndex, sourceIndex, loader ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\n\t\tconst textureDef = json.textures[ textureIndex ];\n\t\tconst sourceDef = json.images[ sourceIndex ];\n\n\t\tconst cacheKey = ( sourceDef.uri || sourceDef.bufferView ) + ':' + textureDef.sampler;\n\n\t\tif ( this.textureCache[ cacheKey ] ) {\n\n\t\t\t// See https://github.com/mrdoob/three.js/issues/21559.\n\t\t\treturn this.textureCache[ cacheKey ];\n\n\t\t}\n\n\t\tconst promise = this.loadImageSource( sourceIndex, loader ).then( function ( texture ) {\n\n\t\t\ttexture.flipY = false;\n\n\t\t\ttexture.name = textureDef.name || sourceDef.name || '';\n\n\t\t\tif ( texture.name === '' && typeof sourceDef.uri === 'string' && sourceDef.uri.startsWith( 'data:image/' ) === false ) {\n\n\t\t\t\ttexture.name = sourceDef.uri;\n\n\t\t\t}\n\n\t\t\tconst samplers = json.samplers || {};\n\t\t\tconst sampler = samplers[ textureDef.sampler ] || {};\n\n\t\t\ttexture.magFilter = WEBGL_FILTERS[ sampler.magFilter ] || LinearFilter;\n\t\t\ttexture.minFilter = WEBGL_FILTERS[ sampler.minFilter ] || LinearMipmapLinearFilter;\n\t\t\ttexture.wrapS = WEBGL_WRAPPINGS[ sampler.wrapS ] || RepeatWrapping;\n\t\t\ttexture.wrapT = WEBGL_WRAPPINGS[ sampler.wrapT ] || RepeatWrapping;\n\t\t\ttexture.generateMipmaps = ! texture.isCompressedTexture && texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter;\n\n\t\t\tparser.associations.set( texture, { textures: textureIndex } );\n\n\t\t\treturn texture;\n\n\t\t} ).catch( function () {\n\n\t\t\treturn null;\n\n\t\t} );\n\n\t\tthis.textureCache[ cacheKey ] = promise;\n\n\t\treturn promise;\n\n\t}\n\n\tloadImageSource( sourceIndex, loader ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst options = this.options;\n\n\t\tif ( this.sourceCache[ sourceIndex ] !== undefined ) {\n\n\t\t\treturn this.sourceCache[ sourceIndex ].then( ( texture ) => texture.clone() );\n\n\t\t}\n\n\t\tconst sourceDef = json.images[ sourceIndex ];\n\n\t\tconst URL = self.URL || self.webkitURL;\n\n\t\tlet sourceURI = sourceDef.uri || '';\n\t\tlet isObjectURL = false;\n\n\t\tif ( sourceDef.bufferView !== undefined ) {\n\n\t\t\t// Load binary image data from bufferView, if provided.\n\n\t\t\tsourceURI = parser.getDependency( 'bufferView', sourceDef.bufferView ).then( function ( bufferView ) {\n\n\t\t\t\tisObjectURL = true;\n\t\t\t\tconst blob = new Blob( [ bufferView ], { type: sourceDef.mimeType } );\n\t\t\t\tsourceURI = URL.createObjectURL( blob );\n\t\t\t\treturn sourceURI;\n\n\t\t\t} );\n\n\t\t} else if ( sourceDef.uri === undefined ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Image ' + sourceIndex + ' is missing URI and bufferView' );\n\n\t\t}\n\n\t\tconst promise = Promise.resolve( sourceURI ).then( function ( sourceURI ) {\n\n\t\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\t\tlet onLoad = resolve;\n\n\t\t\t\tif ( loader.isImageBitmapLoader === true ) {\n\n\t\t\t\t\tonLoad = function ( imageBitmap ) {\n\n\t\t\t\t\t\tconst texture = new Texture( imageBitmap );\n\t\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\t\tresolve( texture );\n\n\t\t\t\t\t};\n\n\t\t\t\t}\n\n\t\t\t\tloader.load( LoaderUtils.resolveURL( sourceURI, options.path ), onLoad, undefined, reject );\n\n\t\t\t} );\n\n\t\t} ).then( function ( texture ) {\n\n\t\t\t// Clean up resources and configure Texture.\n\n\t\t\tif ( isObjectURL === true ) {\n\n\t\t\t\tURL.revokeObjectURL( sourceURI );\n\n\t\t\t}\n\n\t\t\tassignExtrasToUserData( texture, sourceDef );\n\n\t\t\ttexture.userData.mimeType = sourceDef.mimeType || getImageURIMimeType( sourceDef.uri );\n\n\t\t\treturn texture;\n\n\t\t} ).catch( function ( error ) {\n\n\t\t\tconsole.error( 'THREE.GLTFLoader: Couldn\\'t load texture', sourceURI );\n\t\t\tthrow error;\n\n\t\t} );\n\n\t\tthis.sourceCache[ sourceIndex ] = promise;\n\t\treturn promise;\n\n\t}\n\n\t/**\n\t * Asynchronously assigns a texture to the given material parameters.\n\t *\n\t * @private\n\t * @param {Object} materialParams\n\t * @param {string} mapName\n\t * @param {Object} mapDef\n\t * @param {string} [colorSpace]\n\t * @return {Promise<Texture>}\n\t */\n\tassignTexture( materialParams, mapName, mapDef, colorSpace ) {\n\n\t\tconst parser = this;\n\n\t\treturn this.getDependency( 'texture', mapDef.index ).then( function ( texture ) {\n\n\t\t\tif ( ! texture ) return null;\n\n\t\t\tif ( mapDef.texCoord !== undefined && mapDef.texCoord > 0 ) {\n\n\t\t\t\ttexture = texture.clone();\n\t\t\t\ttexture.channel = mapDef.texCoord;\n\n\t\t\t}\n\n\t\t\tif ( parser.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ] ) {\n\n\t\t\t\tconst transform = mapDef.extensions !== undefined ? mapDef.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ] : undefined;\n\n\t\t\t\tif ( transform ) {\n\n\t\t\t\t\tconst gltfReference = parser.associations.get( texture );\n\t\t\t\t\ttexture = parser.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ].extendTexture( texture, transform );\n\t\t\t\t\tparser.associations.set( texture, gltfReference );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( colorSpace !== undefined ) {\n\n\t\t\t\ttexture.colorSpace = colorSpace;\n\n\t\t\t}\n\n\t\t\tmaterialParams[ mapName ] = texture;\n\n\t\t\treturn texture;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Assigns final material to a Mesh, Line, or Points instance. The instance\n\t * already has a material (generated from the glTF material options alone)\n\t * but reuse of the same glTF material may require multiple threejs materials\n\t * to accommodate different primitive types, defines, etc. New materials will\n\t * be created if necessary, and reused from a cache.\n\t *\n\t * @private\n\t * @param {Object3D} mesh Mesh, Line, or Points instance.\n\t */\n\tassignFinalMaterial( mesh ) {\n\n\t\tconst geometry = mesh.geometry;\n\t\tlet material = mesh.material;\n\n\t\tconst useDerivativeTangents = geometry.attributes.tangent === undefined;\n\t\tconst useVertexColors = geometry.attributes.color !== undefined;\n\t\tconst useFlatShading = geometry.attributes.normal === undefined;\n\n\t\tif ( mesh.isPoints ) {\n\n\t\t\tconst cacheKey = 'PointsMaterial:' + material.uuid;\n\n\t\t\tlet pointsMaterial = this.cache.get( cacheKey );\n\n\t\t\tif ( ! pointsMaterial ) {\n\n\t\t\t\tpointsMaterial = new PointsMaterial();\n\t\t\t\tMaterial.prototype.copy.call( pointsMaterial, material );\n\t\t\t\tpointsMaterial.color.copy( material.color );\n\t\t\t\tpointsMaterial.map = material.map;\n\t\t\t\tpointsMaterial.sizeAttenuation = false; // glTF spec says points should be 1px\n\n\t\t\t\tthis.cache.add( cacheKey, pointsMaterial );\n\n\t\t\t}\n\n\t\t\tmaterial = pointsMaterial;\n\n\t\t} else if ( mesh.isLine ) {\n\n\t\t\tconst cacheKey = 'LineBasicMaterial:' + material.uuid;\n\n\t\t\tlet lineMaterial = this.cache.get( cacheKey );\n\n\t\t\tif ( ! lineMaterial ) {\n\n\t\t\t\tlineMaterial = new LineBasicMaterial();\n\t\t\t\tMaterial.prototype.copy.call( lineMaterial, material );\n\t\t\t\tlineMaterial.color.copy( material.color );\n\t\t\t\tlineMaterial.map = material.map;\n\n\t\t\t\tthis.cache.add( cacheKey, lineMaterial );\n\n\t\t\t}\n\n\t\t\tmaterial = lineMaterial;\n\n\t\t}\n\n\t\t// Clone the material if it will be modified\n\t\tif ( useDerivativeTangents || useVertexColors || useFlatShading ) {\n\n\t\t\tlet cacheKey = 'ClonedMaterial:' + material.uuid + ':';\n\n\t\t\tif ( useDerivativeTangents ) cacheKey += 'derivative-tangents:';\n\t\t\tif ( useVertexColors ) cacheKey += 'vertex-colors:';\n\t\t\tif ( useFlatShading ) cacheKey += 'flat-shading:';\n\n\t\t\tlet cachedMaterial = this.cache.get( cacheKey );\n\n\t\t\tif ( ! cachedMaterial ) {\n\n\t\t\t\tcachedMaterial = material.clone();\n\n\t\t\t\tif ( useVertexColors ) cachedMaterial.vertexColors = true;\n\t\t\t\tif ( useFlatShading ) cachedMaterial.flatShading = true;\n\n\t\t\t\tif ( useDerivativeTangents ) {\n\n\t\t\t\t\t// https://github.com/mrdoob/three.js/issues/11438#issuecomment-507003995\n\t\t\t\t\tif ( cachedMaterial.normalScale ) cachedMaterial.normalScale.y *= - 1;\n\t\t\t\t\tif ( cachedMaterial.clearcoatNormalScale ) cachedMaterial.clearcoatNormalScale.y *= - 1;\n\n\t\t\t\t}\n\n\t\t\t\tthis.cache.add( cacheKey, cachedMaterial );\n\n\t\t\t\tthis.associations.set( cachedMaterial, this.associations.get( material ) );\n\n\t\t\t}\n\n\t\t\tmaterial = cachedMaterial;\n\n\t\t}\n\n\t\tmesh.material = material;\n\n\t}\n\n\tgetMaterialType( /* materialIndex */ ) {\n\n\t\treturn MeshStandardMaterial;\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#materials\n\t *\n\t * @private\n\t * @param {number} materialIndex\n\t * @return {Promise<Material>}\n\t */\n\tloadMaterial( materialIndex ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\t\tconst materialDef = json.materials[ materialIndex ];\n\n\t\tlet materialType;\n\t\tconst materialParams = {};\n\t\tconst materialExtensions = materialDef.extensions || {};\n\n\t\tconst pending = [];\n\n\t\tif ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_UNLIT ] ) {\n\n\t\t\tconst kmuExtension = extensions[ EXTENSIONS.KHR_MATERIALS_UNLIT ];\n\t\t\tmaterialType = kmuExtension.getMaterialType();\n\t\t\tpending.push( kmuExtension.extendParams( materialParams, materialDef, parser ) );\n\n\t\t} else {\n\n\t\t\t// Specification:\n\t\t\t// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#metallic-roughness-material\n\n\t\t\tconst metallicRoughness = materialDef.pbrMetallicRoughness || {};\n\n\t\t\tmaterialParams.color = new Color( 1.0, 1.0, 1.0 );\n\t\t\tmaterialParams.opacity = 1.0;\n\n\t\t\tif ( Array.isArray( metallicRoughness.baseColorFactor ) ) {\n\n\t\t\t\tconst array = metallicRoughness.baseColorFactor;\n\n\t\t\t\tmaterialParams.color.setRGB( array[ 0 ], array[ 1 ], array[ 2 ], LinearSRGBColorSpace );\n\t\t\t\tmaterialParams.opacity = array[ 3 ];\n\n\t\t\t}\n\n\t\t\tif ( metallicRoughness.baseColorTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture, SRGBColorSpace ) );\n\n\t\t\t}\n\n\t\t\tmaterialParams.metalness = metallicRoughness.metallicFactor !== undefined ? metallicRoughness.metallicFactor : 1.0;\n\t\t\tmaterialParams.roughness = metallicRoughness.roughnessFactor !== undefined ? metallicRoughness.roughnessFactor : 1.0;\n\n\t\t\tif ( metallicRoughness.metallicRoughnessTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'metalnessMap', metallicRoughness.metallicRoughnessTexture ) );\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'roughnessMap', metallicRoughness.metallicRoughnessTexture ) );\n\n\t\t\t}\n\n\t\t\tmaterialType = this._invokeOne( function ( ext ) {\n\n\t\t\t\treturn ext.getMaterialType && ext.getMaterialType( materialIndex );\n\n\t\t\t} );\n\n\t\t\tpending.push( Promise.all( this._invokeAll( function ( ext ) {\n\n\t\t\t\treturn ext.extendMaterialParams && ext.extendMaterialParams( materialIndex, materialParams );\n\n\t\t\t} ) ) );\n\n\t\t}\n\n\t\tif ( materialDef.doubleSided === true ) {\n\n\t\t\tmaterialParams.side = DoubleSide;\n\n\t\t}\n\n\t\tconst alphaMode = materialDef.alphaMode || ALPHA_MODES.OPAQUE;\n\n\t\tif ( alphaMode === ALPHA_MODES.BLEND ) {\n\n\t\t\tmaterialParams.transparent = true;\n\n\t\t\t// See: https://github.com/mrdoob/three.js/issues/17706\n\t\t\tmaterialParams.depthWrite = false;\n\n\t\t} else {\n\n\t\t\tmaterialParams.transparent = false;\n\n\t\t\tif ( alphaMode === ALPHA_MODES.MASK ) {\n\n\t\t\t\tmaterialParams.alphaTest = materialDef.alphaCutoff !== undefined ? materialDef.alphaCutoff : 0.5;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.normalTexture !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'normalMap', materialDef.normalTexture ) );\n\n\t\t\tmaterialParams.normalScale = new Vector2( 1, 1 );\n\n\t\t\tif ( materialDef.normalTexture.scale !== undefined ) {\n\n\t\t\t\tconst scale = materialDef.normalTexture.scale;\n\n\t\t\t\tmaterialParams.normalScale.set( scale, scale );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.occlusionTexture !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'aoMap', materialDef.occlusionTexture ) );\n\n\t\t\tif ( materialDef.occlusionTexture.strength !== undefined ) {\n\n\t\t\t\tmaterialParams.aoMapIntensity = materialDef.occlusionTexture.strength;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.emissiveFactor !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tconst emissiveFactor = materialDef.emissiveFactor;\n\t\t\tmaterialParams.emissive = new Color().setRGB( emissiveFactor[ 0 ], emissiveFactor[ 1 ], emissiveFactor[ 2 ], LinearSRGBColorSpace );\n\n\t\t}\n\n\t\tif ( materialDef.emissiveTexture !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'emissiveMap', materialDef.emissiveTexture, SRGBColorSpace ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending ).then( function () {\n\n\t\t\tconst material = new materialType( materialParams );\n\n\t\t\tif ( materialDef.name ) material.name = materialDef.name;\n\n\t\t\tassignExtrasToUserData( material, materialDef );\n\n\t\t\tparser.associations.set( material, { materials: materialIndex } );\n\n\t\t\tif ( materialDef.extensions ) addUnknownExtensionsToUserData( extensions, material, materialDef );\n\n\t\t\treturn material;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * When Object3D instances are targeted by animation, they need unique names.\n\t *\n\t * @private\n\t * @param {string} originalName\n\t * @return {string}\n\t */\n\tcreateUniqueName( originalName ) {\n\n\t\tconst sanitizedName = PropertyBinding.sanitizeNodeName( originalName || '' );\n\n\t\tif ( sanitizedName in this.nodeNamesUsed ) {\n\n\t\t\treturn sanitizedName + '_' + ( ++ this.nodeNamesUsed[ sanitizedName ] );\n\n\t\t} else {\n\n\t\t\tthis.nodeNamesUsed[ sanitizedName ] = 0;\n\n\t\t\treturn sanitizedName;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#geometry\n\t *\n\t * Creates BufferGeometries from primitives.\n\t *\n\t * @private\n\t * @param {Array<GLTF.Primitive>} primitives\n\t * @return {Promise<Array<BufferGeometry>>}\n\t */\n\tloadGeometries( primitives ) {\n\n\t\tconst parser = this;\n\t\tconst extensions = this.extensions;\n\t\tconst cache = this.primitiveCache;\n\n\t\tfunction createDracoPrimitive( primitive ) {\n\n\t\t\treturn extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ]\n\t\t\t\t.decodePrimitive( primitive, parser )\n\t\t\t\t.then( function ( geometry ) {\n\n\t\t\t\t\treturn addPrimitiveAttributes( geometry, primitive, parser );\n\n\t\t\t\t} );\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0, il = primitives.length; i < il; i ++ ) {\n\n\t\t\tconst primitive = primitives[ i ];\n\t\t\tconst cacheKey = createPrimitiveKey( primitive );\n\n\t\t\t// See if we've already created this geometry\n\t\t\tconst cached = cache[ cacheKey ];\n\n\t\t\tif ( cached ) {\n\n\t\t\t\t// Use the cached geometry if it exists\n\t\t\t\tpending.push( cached.promise );\n\n\t\t\t} else {\n\n\t\t\t\tlet geometryPromise;\n\n\t\t\t\tif ( primitive.extensions && primitive.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ] ) {\n\n\t\t\t\t\t// Use DRACO geometry if available\n\t\t\t\t\tgeometryPromise = createDracoPrimitive( primitive );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Otherwise create a new geometry\n\t\t\t\t\tgeometryPromise = addPrimitiveAttributes( new BufferGeometry(), primitive, parser );\n\n\t\t\t\t}\n\n\t\t\t\t// Cache this geometry\n\t\t\t\tcache[ cacheKey ] = { primitive: primitive, promise: geometryPromise };\n\n\t\t\t\tpending.push( geometryPromise );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#meshes\n\t *\n\t * @private\n\t * @param {number} meshIndex\n\t * @return {Promise<Group|Mesh|SkinnedMesh|Line|Points>}\n\t */\n\tloadMesh( meshIndex ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\n\t\tconst meshDef = json.meshes[ meshIndex ];\n\t\tconst primitives = meshDef.primitives;\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0, il = primitives.length; i < il; i ++ ) {\n\n\t\t\tconst material = primitives[ i ].material === undefined\n\t\t\t\t? createDefaultMaterial( this.cache )\n\t\t\t\t: this.getDependency( 'material', primitives[ i ].material );\n\n\t\t\tpending.push( material );\n\n\t\t}\n\n\t\tpending.push( parser.loadGeometries( primitives ) );\n\n\t\treturn Promise.all( pending ).then( function ( results ) {\n\n\t\t\tconst materials = results.slice( 0, results.length - 1 );\n\t\t\tconst geometries = results[ results.length - 1 ];\n\n\t\t\tconst meshes = [];\n\n\t\t\tfor ( let i = 0, il = geometries.length; i < il; i ++ ) {\n\n\t\t\t\tconst geometry = geometries[ i ];\n\t\t\t\tconst primitive = primitives[ i ];\n\n\t\t\t\t// 1. create Mesh\n\n\t\t\t\tlet mesh;\n\n\t\t\t\tconst material = materials[ i ];\n\n\t\t\t\tif ( primitive.mode === WEBGL_CONSTANTS.TRIANGLES ||\n\t\t\t\t\t\tprimitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ||\n\t\t\t\t\t\tprimitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ||\n\t\t\t\t\t\tprimitive.mode === undefined ) {\n\n\t\t\t\t\t// .isSkinnedMesh isn't in glTF spec. See ._markDefs()\n\t\t\t\t\tmesh = meshDef.isSkinnedMesh === true\n\t\t\t\t\t\t? new SkinnedMesh( geometry, material )\n\t\t\t\t\t\t: new Mesh( geometry, material );\n\n\t\t\t\t\tif ( mesh.isSkinnedMesh === true ) {\n\n\t\t\t\t\t\t// normalize skin weights to fix malformed assets (see #15319)\n\t\t\t\t\t\tmesh.normalizeSkinWeights();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ) {\n\n\t\t\t\t\t\tmesh.geometry = toTrianglesDrawMode( mesh.geometry, TriangleStripDrawMode );\n\n\t\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ) {\n\n\t\t\t\t\t\tmesh.geometry = toTrianglesDrawMode( mesh.geometry, TriangleFanDrawMode );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINES ) {\n\n\t\t\t\t\tmesh = new LineSegments( geometry, material );\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINE_STRIP ) {\n\n\t\t\t\t\tmesh = new Line( geometry, material );\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINE_LOOP ) {\n\n\t\t\t\t\tmesh = new LineLoop( geometry, material );\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.POINTS ) {\n\n\t\t\t\t\tmesh = new Points( geometry, material );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( 'THREE.GLTFLoader: Primitive mode unsupported: ' + primitive.mode );\n\n\t\t\t\t}\n\n\t\t\t\tif ( Object.keys( mesh.geometry.morphAttributes ).length > 0 ) {\n\n\t\t\t\t\tupdateMorphTargets( mesh, meshDef );\n\n\t\t\t\t}\n\n\t\t\t\tmesh.name = parser.createUniqueName( meshDef.name || ( 'mesh_' + meshIndex ) );\n\n\t\t\t\tassignExtrasToUserData( mesh, meshDef );\n\n\t\t\t\tif ( primitive.extensions ) addUnknownExtensionsToUserData( extensions, mesh, primitive );\n\n\t\t\t\tparser.assignFinalMaterial( mesh );\n\n\t\t\t\tmeshes.push( mesh );\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, il = meshes.length; i < il; i ++ ) {\n\n\t\t\t\tparser.associations.set( meshes[ i ], {\n\t\t\t\t\tmeshes: meshIndex,\n\t\t\t\t\tprimitives: i\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tif ( meshes.length === 1 ) {\n\n\t\t\t\tif ( meshDef.extensions ) addUnknownExtensionsToUserData( extensions, meshes[ 0 ], meshDef );\n\n\t\t\t\treturn meshes[ 0 ];\n\n\t\t\t}\n\n\t\t\tconst group = new Group();\n\n\t\t\tif ( meshDef.extensions ) addUnknownExtensionsToUserData( extensions, group, meshDef );\n\n\t\t\tparser.associations.set( group, { meshes: meshIndex } );\n\n\t\t\tfor ( let i = 0, il = meshes.length; i < il; i ++ ) {\n\n\t\t\t\tgroup.add( meshes[ i ] );\n\n\t\t\t}\n\n\t\t\treturn group;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#cameras\n\t *\n\t * @private\n\t * @param {number} cameraIndex\n\t * @return {Promise<Camera>|undefined}\n\t */\n\tloadCamera( cameraIndex ) {\n\n\t\tlet camera;\n\t\tconst cameraDef = this.json.cameras[ cameraIndex ];\n\t\tconst params = cameraDef[ cameraDef.type ];\n\n\t\tif ( ! params ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing camera parameters.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( cameraDef.type === 'perspective' ) {\n\n\t\t\tcamera = new PerspectiveCamera( MathUtils.radToDeg( params.yfov ), params.aspectRatio || 1, params.znear || 1, params.zfar || 2e6 );\n\n\t\t} else if ( cameraDef.type === 'orthographic' ) {\n\n\t\t\tcamera = new OrthographicCamera( - params.xmag, params.xmag, params.ymag, - params.ymag, params.znear, params.zfar );\n\n\t\t}\n\n\t\tif ( cameraDef.name ) camera.name = this.createUniqueName( cameraDef.name );\n\n\t\tassignExtrasToUserData( camera, cameraDef );\n\n\t\treturn Promise.resolve( camera );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#skins\n\t *\n\t * @private\n\t * @param {number} skinIndex\n\t * @return {Promise<Skeleton>}\n\t */\n\tloadSkin( skinIndex ) {\n\n\t\tconst skinDef = this.json.skins[ skinIndex ];\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0, il = skinDef.joints.length; i < il; i ++ ) {\n\n\t\t\tpending.push( this._loadNodeShallow( skinDef.joints[ i ] ) );\n\n\t\t}\n\n\t\tif ( skinDef.inverseBindMatrices !== undefined ) {\n\n\t\t\tpending.push( this.getDependency( 'accessor', skinDef.inverseBindMatrices ) );\n\n\t\t} else {\n\n\t\t\tpending.push( null );\n\n\t\t}\n\n\t\treturn Promise.all( pending ).then( function ( results ) {\n\n\t\t\tconst inverseBindMatrices = results.pop();\n\t\t\tconst jointNodes = results;\n\n\t\t\t// Note that bones (joint nodes) may or may not be in the\n\t\t\t// scene graph at this time.\n\n\t\t\tconst bones = [];\n\t\t\tconst boneInverses = [];\n\n\t\t\tfor ( let i = 0, il = jointNodes.length; i < il; i ++ ) {\n\n\t\t\t\tconst jointNode = jointNodes[ i ];\n\n\t\t\t\tif ( jointNode ) {\n\n\t\t\t\t\tbones.push( jointNode );\n\n\t\t\t\t\tconst mat = new Matrix4();\n\n\t\t\t\t\tif ( inverseBindMatrices !== null ) {\n\n\t\t\t\t\t\tmat.fromArray( inverseBindMatrices.array, i * 16 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tboneInverses.push( mat );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Joint \"%s\" could not be found.', skinDef.joints[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new Skeleton( bones, boneInverses );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#animations\n\t *\n\t * @private\n\t * @param {number} animationIndex\n\t * @return {Promise<AnimationClip>}\n\t */\n\tloadAnimation( animationIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst parser = this;\n\n\t\tconst animationDef = json.animations[ animationIndex ];\n\t\tconst animationName = animationDef.name ? animationDef.name : 'animation_' + animationIndex;\n\n\t\tconst pendingNodes = [];\n\t\tconst pendingInputAccessors = [];\n\t\tconst pendingOutputAccessors = [];\n\t\tconst pendingSamplers = [];\n\t\tconst pendingTargets = [];\n\n\t\tfor ( let i = 0, il = animationDef.channels.length; i < il; i ++ ) {\n\n\t\t\tconst channel = animationDef.channels[ i ];\n\t\t\tconst sampler = animationDef.samplers[ channel.sampler ];\n\t\t\tconst target = channel.target;\n\t\t\tconst name = target.node;\n\t\t\tconst input = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.input ] : sampler.input;\n\t\t\tconst output = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.output ] : sampler.output;\n\n\t\t\tif ( target.node === undefined ) continue;\n\n\t\t\tpendingNodes.push( this.getDependency( 'node', name ) );\n\t\t\tpendingInputAccessors.push( this.getDependency( 'accessor', input ) );\n\t\t\tpendingOutputAccessors.push( this.getDependency( 'accessor', output ) );\n\t\t\tpendingSamplers.push( sampler );\n\t\t\tpendingTargets.push( target );\n\n\t\t}\n\n\t\treturn Promise.all( [\n\n\t\t\tPromise.all( pendingNodes ),\n\t\t\tPromise.all( pendingInputAccessors ),\n\t\t\tPromise.all( pendingOutputAccessors ),\n\t\t\tPromise.all( pendingSamplers ),\n\t\t\tPromise.all( pendingTargets )\n\n\t\t] ).then( function ( dependencies ) {\n\n\t\t\tconst nodes = dependencies[ 0 ];\n\t\t\tconst inputAccessors = dependencies[ 1 ];\n\t\t\tconst outputAccessors = dependencies[ 2 ];\n\t\t\tconst samplers = dependencies[ 3 ];\n\t\t\tconst targets = dependencies[ 4 ];\n\n\t\t\tconst tracks = [];\n\n\t\t\tfor ( let i = 0, il = nodes.length; i < il; i ++ ) {\n\n\t\t\t\tconst node = nodes[ i ];\n\t\t\t\tconst inputAccessor = inputAccessors[ i ];\n\t\t\t\tconst outputAccessor = outputAccessors[ i ];\n\t\t\t\tconst sampler = samplers[ i ];\n\t\t\t\tconst target = targets[ i ];\n\n\t\t\t\tif ( node === undefined ) continue;\n\n\t\t\t\tif ( node.updateMatrix ) {\n\n\t\t\t\t\tnode.updateMatrix();\n\n\t\t\t\t}\n\n\t\t\t\tconst createdTracks = parser._createAnimationTracks( node, inputAccessor, outputAccessor, sampler, target );\n\n\t\t\t\tif ( createdTracks ) {\n\n\t\t\t\t\tfor ( let k = 0; k < createdTracks.length; k ++ ) {\n\n\t\t\t\t\t\ttracks.push( createdTracks[ k ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst animation = new AnimationClip( animationName, undefined, tracks );\n\n\t\t\tassignExtrasToUserData( animation, animationDef );\n\n\t\t\treturn animation;\n\n\t\t} );\n\n\t}\n\n\tcreateNodeMesh( nodeIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst parser = this;\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\n\t\tif ( nodeDef.mesh === undefined ) return null;\n\n\t\treturn parser.getDependency( 'mesh', nodeDef.mesh ).then( function ( mesh ) {\n\n\t\t\tconst node = parser._getNodeRef( parser.meshCache, nodeDef.mesh, mesh );\n\n\t\t\t// if weights are provided on the node, override weights on the mesh.\n\t\t\tif ( nodeDef.weights !== undefined ) {\n\n\t\t\t\tnode.traverse( function ( o ) {\n\n\t\t\t\t\tif ( ! o.isMesh ) return;\n\n\t\t\t\t\tfor ( let i = 0, il = nodeDef.weights.length; i < il; i ++ ) {\n\n\t\t\t\t\t\to.morphTargetInfluences[ i ] = nodeDef.weights[ i ];\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\treturn node;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#nodes-and-hierarchy\n\t *\n\t * @private\n\t * @param {number} nodeIndex\n\t * @return {Promise<Object3D>}\n\t */\n\tloadNode( nodeIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst parser = this;\n\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\n\t\tconst nodePending = parser._loadNodeShallow( nodeIndex );\n\n\t\tconst childPending = [];\n\t\tconst childrenDef = nodeDef.children || [];\n\n\t\tfor ( let i = 0, il = childrenDef.length; i < il; i ++ ) {\n\n\t\t\tchildPending.push( parser.getDependency( 'node', childrenDef[ i ] ) );\n\n\t\t}\n\n\t\tconst skeletonPending = nodeDef.skin === undefined\n\t\t\t? Promise.resolve( null )\n\t\t\t: parser.getDependency( 'skin', nodeDef.skin );\n\n\t\treturn Promise.all( [\n\t\t\tnodePending,\n\t\t\tPromise.all( childPending ),\n\t\t\tskeletonPending\n\t\t] ).then( function ( results ) {\n\n\t\t\tconst node = results[ 0 ];\n\t\t\tconst children = results[ 1 ];\n\t\t\tconst skeleton = results[ 2 ];\n\n\t\t\tif ( skeleton !== null ) {\n\n\t\t\t\t// This full traverse should be fine because\n\t\t\t\t// child glTF nodes have not been added to this node yet.\n\t\t\t\tnode.traverse( function ( mesh ) {\n\n\t\t\t\t\tif ( ! mesh.isSkinnedMesh ) return;\n\n\t\t\t\t\tmesh.bind( skeleton, _identityMatrix );\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, il = children.length; i < il; i ++ ) {\n\n\t\t\t\tnode.add( children[ i ] );\n\n\t\t\t}\n\n\t\t\treturn node;\n\n\t\t} );\n\n\t}\n\n\t// ._loadNodeShallow() parses a single node.\n\t// skin and child nodes are created and added in .loadNode() (no '_' prefix).\n\t_loadNodeShallow( nodeIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\t\tconst parser = this;\n\n\t\t// This method is called from .loadNode() and .loadSkin().\n\t\t// Cache a node to avoid duplication.\n\n\t\tif ( this.nodeCache[ nodeIndex ] !== undefined ) {\n\n\t\t\treturn this.nodeCache[ nodeIndex ];\n\n\t\t}\n\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\n\t\t// reserve node's name before its dependencies, so the root has the intended name.\n\t\tconst nodeName = nodeDef.name ? parser.createUniqueName( nodeDef.name ) : '';\n\n\t\tconst pending = [];\n\n\t\tconst meshPromise = parser._invokeOne( function ( ext ) {\n\n\t\t\treturn ext.createNodeMesh && ext.createNodeMesh( nodeIndex );\n\n\t\t} );\n\n\t\tif ( meshPromise ) {\n\n\t\t\tpending.push( meshPromise );\n\n\t\t}\n\n\t\tif ( nodeDef.camera !== undefined ) {\n\n\t\t\tpending.push( parser.getDependency( 'camera', nodeDef.camera ).then( function ( camera ) {\n\n\t\t\t\treturn parser._getNodeRef( parser.cameraCache, nodeDef.camera, camera );\n\n\t\t\t} ) );\n\n\t\t}\n\n\t\tparser._invokeAll( function ( ext ) {\n\n\t\t\treturn ext.createNodeAttachment && ext.createNodeAttachment( nodeIndex );\n\n\t\t} ).forEach( function ( promise ) {\n\n\t\t\tpending.push( promise );\n\n\t\t} );\n\n\t\tthis.nodeCache[ nodeIndex ] = Promise.all( pending ).then( function ( objects ) {\n\n\t\t\tlet node;\n\n\t\t\t// .isBone isn't in glTF spec. See ._markDefs\n\t\t\tif ( nodeDef.isBone === true ) {\n\n\t\t\t\tnode = new Bone();\n\n\t\t\t} else if ( objects.length > 1 ) {\n\n\t\t\t\tnode = new Group();\n\n\t\t\t} else if ( objects.length === 1 ) {\n\n\t\t\t\tnode = objects[ 0 ];\n\n\t\t\t} else {\n\n\t\t\t\tnode = new Object3D();\n\n\t\t\t}\n\n\t\t\tif ( node !== objects[ 0 ] ) {\n\n\t\t\t\tfor ( let i = 0, il = objects.length; i < il; i ++ ) {\n\n\t\t\t\t\tnode.add( objects[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( nodeDef.name ) {\n\n\t\t\t\tnode.userData.name = nodeDef.name;\n\t\t\t\tnode.name = nodeName;\n\n\t\t\t}\n\n\t\t\tassignExtrasToUserData( node, nodeDef );\n\n\t\t\tif ( nodeDef.extensions ) addUnknownExtensionsToUserData( extensions, node, nodeDef );\n\n\t\t\tif ( nodeDef.matrix !== undefined ) {\n\n\t\t\t\tconst matrix = new Matrix4();\n\t\t\t\tmatrix.fromArray( nodeDef.matrix );\n\t\t\t\tnode.applyMatrix4( matrix );\n\n\t\t\t} else {\n\n\t\t\t\tif ( nodeDef.translation !== undefined ) {\n\n\t\t\t\t\tnode.position.fromArray( nodeDef.translation );\n\n\t\t\t\t}\n\n\t\t\t\tif ( nodeDef.rotation !== undefined ) {\n\n\t\t\t\t\tnode.quaternion.fromArray( nodeDef.rotation );\n\n\t\t\t\t}\n\n\t\t\t\tif ( nodeDef.scale !== undefined ) {\n\n\t\t\t\t\tnode.scale.fromArray( nodeDef.scale );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( ! parser.associations.has( node ) ) {\n\n\t\t\t\tparser.associations.set( node, {} );\n\n\t\t\t} else if ( nodeDef.mesh !== undefined && parser.meshCache.refs[ nodeDef.mesh ] > 1 ) {\n\n\t\t\t\tconst mapping = parser.associations.get( node );\n\t\t\t\tparser.associations.set( node, { ...mapping } );\n\n\t\t\t}\n\n\t\t\tparser.associations.get( node ).nodes = nodeIndex;\n\n\t\t\treturn node;\n\n\t\t} );\n\n\t\treturn this.nodeCache[ nodeIndex ];\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#scenes\n\t *\n\t * @private\n\t * @param {number} sceneIndex\n\t * @return {Promise<Group>}\n\t */\n\tloadScene( sceneIndex ) {\n\n\t\tconst extensions = this.extensions;\n\t\tconst sceneDef = this.json.scenes[ sceneIndex ];\n\t\tconst parser = this;\n\n\t\t// Loader returns Group, not Scene.\n\t\t// See: https://github.com/mrdoob/three.js/issues/18342#issuecomment-578981172\n\t\tconst scene = new Group();\n\t\tif ( sceneDef.name ) scene.name = parser.createUniqueName( sceneDef.name );\n\n\t\tassignExtrasToUserData( scene, sceneDef );\n\n\t\tif ( sceneDef.extensions ) addUnknownExtensionsToUserData( extensions, scene, sceneDef );\n\n\t\tconst nodeIds = sceneDef.nodes || [];\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0, il = nodeIds.length; i < il; i ++ ) {\n\n\t\t\tpending.push( parser.getDependency( 'node', nodeIds[ i ] ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending ).then( function ( nodes ) {\n\n\t\t\tfor ( let i = 0, il = nodes.length; i < il; i ++ ) {\n\n\t\t\t\tscene.add( nodes[ i ] );\n\n\t\t\t}\n\n\t\t\t// Removes dangling associations, associations that reference a node that\n\t\t\t// didn't make it into the scene.\n\t\t\tconst reduceAssociations = ( node ) => {\n\n\t\t\t\tconst reducedAssociations = new Map();\n\n\t\t\t\tfor ( const [ key, value ] of parser.associations ) {\n\n\t\t\t\t\tif ( key instanceof Material || key instanceof Texture ) {\n\n\t\t\t\t\t\treducedAssociations.set( key, value );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tnode.traverse( ( node ) => {\n\n\t\t\t\t\tconst mappings = parser.associations.get( node );\n\n\t\t\t\t\tif ( mappings != null ) {\n\n\t\t\t\t\t\treducedAssociations.set( node, mappings );\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\treturn reducedAssociations;\n\n\t\t\t};\n\n\t\t\tparser.associations = reduceAssociations( scene );\n\n\t\t\treturn scene;\n\n\t\t} );\n\n\t}\n\n\t_createAnimationTracks( node, inputAccessor, outputAccessor, sampler, target ) {\n\n\t\tconst tracks = [];\n\n\t\tconst targetName = node.name ? node.name : node.uuid;\n\t\tconst targetNames = [];\n\n\t\tif ( PATH_PROPERTIES[ target.path ] === PATH_PROPERTIES.weights ) {\n\n\t\t\tnode.traverse( function ( object ) {\n\n\t\t\t\tif ( object.morphTargetInfluences ) {\n\n\t\t\t\t\ttargetNames.push( object.name ? object.name : object.uuid );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} else {\n\n\t\t\ttargetNames.push( targetName );\n\n\t\t}\n\n\t\tlet TypedKeyframeTrack;\n\n\t\tswitch ( PATH_PROPERTIES[ target.path ] ) {\n\n\t\t\tcase PATH_PROPERTIES.weights:\n\n\t\t\t\tTypedKeyframeTrack = NumberKeyframeTrack;\n\t\t\t\tbreak;\n\n\t\t\tcase PATH_PROPERTIES.rotation:\n\n\t\t\t\tTypedKeyframeTrack = QuaternionKeyframeTrack;\n\t\t\t\tbreak;\n\n\t\t\tcase PATH_PROPERTIES.translation:\n\t\t\tcase PATH_PROPERTIES.scale:\n\n\t\t\t\tTypedKeyframeTrack = VectorKeyframeTrack;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tswitch ( outputAccessor.itemSize ) {\n\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tTypedKeyframeTrack = NumberKeyframeTrack;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\tcase 3:\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tTypedKeyframeTrack = VectorKeyframeTrack;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tconst interpolation = sampler.interpolation !== undefined ? INTERPOLATION[ sampler.interpolation ] : InterpolateLinear;\n\n\n\t\tconst outputArray = this._getArrayFromAccessor( outputAccessor );\n\n\t\tfor ( let j = 0, jl = targetNames.length; j < jl; j ++ ) {\n\n\t\t\tconst track = new TypedKeyframeTrack(\n\t\t\t\ttargetNames[ j ] + '.' + PATH_PROPERTIES[ target.path ],\n\t\t\t\tinputAccessor.array,\n\t\t\t\toutputArray,\n\t\t\t\tinterpolation\n\t\t\t);\n\n\t\t\t// Override interpolation with custom factory method.\n\t\t\tif ( sampler.interpolation === 'CUBICSPLINE' ) {\n\n\t\t\t\tthis._createCubicSplineTrackInterpolant( track );\n\n\t\t\t}\n\n\t\t\ttracks.push( track );\n\n\t\t}\n\n\t\treturn tracks;\n\n\t}\n\n\t_getArrayFromAccessor( accessor ) {\n\n\t\tlet outputArray = accessor.array;\n\n\t\tif ( accessor.normalized ) {\n\n\t\t\tconst scale = getNormalizedComponentScale( outputArray.constructor );\n\t\t\tconst scaled = new Float32Array( outputArray.length );\n\n\t\t\tfor ( let j = 0, jl = outputArray.length; j < jl; j ++ ) {\n\n\t\t\t\tscaled[ j ] = outputArray[ j ] * scale;\n\n\t\t\t}\n\n\t\t\toutputArray = scaled;\n\n\t\t}\n\n\t\treturn outputArray;\n\n\t}\n\n\t_createCubicSplineTrackInterpolant( track ) {\n\n\t\ttrack.createInterpolant = function InterpolantFactoryMethodGLTFCubicSpline( result ) {\n\n\t\t\t// A CUBICSPLINE keyframe in glTF has three output values for each input value,\n\t\t\t// representing inTangent, splineVertex, and outTangent. As a result, track.getValueSize()\n\t\t\t// must be divided by three to get the interpolant's sampleSize argument.\n\n\t\t\tconst interpolantType = ( this instanceof QuaternionKeyframeTrack ) ? GLTFCubicSplineQuaternionInterpolant : GLTFCubicSplineInterpolant;\n\n\t\t\treturn new interpolantType( this.times, this.values, this.getValueSize() / 3, result );\n\n\t\t};\n\n\t\t// Mark as CUBICSPLINE. `track.getInterpolation()` doesn't support custom interpolants.\n\t\ttrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = true;\n\n\t}\n\n}\n\n/**\n *\n * @private\n * @param {BufferGeometry} geometry\n * @param {GLTF.Primitive} primitiveDef\n * @param {GLTFParser} parser\n */\nfunction computeBounds( geometry, primitiveDef, parser ) {\n\n\tconst attributes = primitiveDef.attributes;\n\n\tconst box = new Box3();\n\n\tif ( attributes.POSITION !== undefined ) {\n\n\t\tconst accessor = parser.json.accessors[ attributes.POSITION ];\n\n\t\tconst min = accessor.min;\n\t\tconst max = accessor.max;\n\n\t\t// glTF requires 'min' and 'max', but VRM (which extends glTF) currently ignores that requirement.\n\n\t\tif ( min !== undefined && max !== undefined ) {\n\n\t\t\tbox.set(\n\t\t\t\tnew Vector3( min[ 0 ], min[ 1 ], min[ 2 ] ),\n\t\t\t\tnew Vector3( max[ 0 ], max[ 1 ], max[ 2 ] )\n\t\t\t);\n\n\t\t\tif ( accessor.normalized ) {\n\n\t\t\t\tconst boxScale = getNormalizedComponentScale( WEBGL_COMPONENT_TYPES[ accessor.componentType ] );\n\t\t\t\tbox.min.multiplyScalar( boxScale );\n\t\t\t\tbox.max.multiplyScalar( boxScale );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing min/max properties for accessor POSITION.' );\n\n\t\t\treturn;\n\n\t\t}\n\n\t} else {\n\n\t\treturn;\n\n\t}\n\n\tconst targets = primitiveDef.targets;\n\n\tif ( targets !== undefined ) {\n\n\t\tconst maxDisplacement = new Vector3();\n\t\tconst vector = new Vector3();\n\n\t\tfor ( let i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\t\tconst target = targets[ i ];\n\n\t\t\tif ( target.POSITION !== undefined ) {\n\n\t\t\t\tconst accessor = parser.json.accessors[ target.POSITION ];\n\t\t\t\tconst min = accessor.min;\n\t\t\t\tconst max = accessor.max;\n\n\t\t\t\t// glTF requires 'min' and 'max', but VRM (which extends glTF) currently ignores that requirement.\n\n\t\t\t\tif ( min !== undefined && max !== undefined ) {\n\n\t\t\t\t\t// we need to get max of absolute components because target weight is [-1,1]\n\t\t\t\t\tvector.setX( Math.max( Math.abs( min[ 0 ] ), Math.abs( max[ 0 ] ) ) );\n\t\t\t\t\tvector.setY( Math.max( Math.abs( min[ 1 ] ), Math.abs( max[ 1 ] ) ) );\n\t\t\t\t\tvector.setZ( Math.max( Math.abs( min[ 2 ] ), Math.abs( max[ 2 ] ) ) );\n\n\n\t\t\t\t\tif ( accessor.normalized ) {\n\n\t\t\t\t\t\tconst boxScale = getNormalizedComponentScale( WEBGL_COMPONENT_TYPES[ accessor.componentType ] );\n\t\t\t\t\t\tvector.multiplyScalar( boxScale );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Note: this assumes that the sum of all weights is at most 1. This isn't quite correct - it's more conservative\n\t\t\t\t\t// to assume that each target can have a max weight of 1. However, for some use cases - notably, when morph targets\n\t\t\t\t\t// are used to implement key-frame animations and as such only two are active at a time - this results in very large\n\t\t\t\t\t// boxes. So for now we make a box that's sometimes a touch too small but is hopefully mostly of reasonable size.\n\t\t\t\t\tmaxDisplacement.max( vector );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing min/max properties for accessor POSITION.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// As per comment above this box isn't conservative, but has a reasonable size for a very large number of morph targets.\n\t\tbox.expandByVector( maxDisplacement );\n\n\t}\n\n\tgeometry.boundingBox = box;\n\n\tconst sphere = new Sphere();\n\n\tbox.getCenter( sphere.center );\n\tsphere.radius = box.min.distanceTo( box.max ) / 2;\n\n\tgeometry.boundingSphere = sphere;\n\n}\n\n/**\n *\n * @private\n * @param {BufferGeometry} geometry\n * @param {GLTF.Primitive} primitiveDef\n * @param {GLTFParser} parser\n * @return {Promise<BufferGeometry>}\n */\nfunction addPrimitiveAttributes( geometry, primitiveDef, parser ) {\n\n\tconst attributes = primitiveDef.attributes;\n\n\tconst pending = [];\n\n\tfunction assignAttributeAccessor( accessorIndex, attributeName ) {\n\n\t\treturn parser.getDependency( 'accessor', accessorIndex )\n\t\t\t.then( function ( accessor ) {\n\n\t\t\t\tgeometry.setAttribute( attributeName, accessor );\n\n\t\t\t} );\n\n\t}\n\n\tfor ( const gltfAttributeName in attributes ) {\n\n\t\tconst threeAttributeName = ATTRIBUTES[ gltfAttributeName ] || gltfAttributeName.toLowerCase();\n\n\t\t// Skip attributes already provided by e.g. Draco extension.\n\t\tif ( threeAttributeName in geometry.attributes ) continue;\n\n\t\tpending.push( assignAttributeAccessor( attributes[ gltfAttributeName ], threeAttributeName ) );\n\n\t}\n\n\tif ( primitiveDef.indices !== undefined && ! geometry.index ) {\n\n\t\tconst accessor = parser.getDependency( 'accessor', primitiveDef.indices ).then( function ( accessor ) {\n\n\t\t\tgeometry.setIndex( accessor );\n\n\t\t} );\n\n\t\tpending.push( accessor );\n\n\t}\n\n\tif ( ColorManagement.workingColorSpace !== LinearSRGBColorSpace && 'COLOR_0' in attributes ) {\n\n\t\tconsole.warn( `THREE.GLTFLoader: Converting vertex colors from \"srgb-linear\" to \"${ColorManagement.workingColorSpace}\" not supported.` );\n\n\t}\n\n\tassignExtrasToUserData( geometry, primitiveDef );\n\n\tcomputeBounds( geometry, primitiveDef, parser );\n\n\treturn Promise.all( pending ).then( function () {\n\n\t\treturn primitiveDef.targets !== undefined\n\t\t\t? addMorphTargets( geometry, primitiveDef.targets, parser )\n\t\t\t: geometry;\n\n\t} );\n\n}\n\n/**\n * Loader result of `GLTFLoader`.\n *\n * @typedef {Object} GLTFLoader~LoadObject\n * @property {Array<AnimationClip>} animations - An array of animation clips.\n * @property {Object} asset - Meta data about the loaded asset.\n * @property {Array<Camera>} cameras - An array of cameras.\n * @property {GLTFParser} parser - A reference to the internal parser.\n * @property {Group} scene - The default scene.\n * @property {Array<Group>} scenes - glTF assets might define multiple scenes.\n * @property {Object} userData - Additional data.\n **/\n\nexport { GLTFLoader };\n","import {LoadZipJson,LoadJSON} from '../../../../common/LoadJSON'\r\nimport * as THREE from 'three'\r\nimport { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader.js' \r\nimport { EventType } from '../../../../api/modules/IEventModule';\r\nimport Info from 'three/src/renderers/common/Info.js';\r\nimport { any, min } from 'three/tsl';\r\nimport {loadMep} from './loaderMep'\r\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';\r\nimport * as BufferGeometryUtils from 'three/examples/jsm/utils/BufferGeometryUtils.js';\r\nimport { LineSegmentsGeometry } from 'three/examples/jsm/lines/LineSegmentsGeometry.js';\r\nimport { LineMaterial } from 'three/examples/jsm/lines/LineMaterial.js';\r\nimport { LineSegments2 } from 'three/examples/jsm/lines/LineSegments2.js';\r\n\r\n\r\n\r\n// 导入轻量化模型\r\nexport function loadLightModel(engine: any,url: string, options?: LoadModelOptions): Promise<IModel> {\r\n // 专门新增一个group 用来存储轻量化模型\r\n let group = new THREE.Group()\r\n group.name = url\r\n engine.scene.add(group)\r\n // 往这个group里面添加实体模型\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n // 首先加载模型的index.zip\r\n LoadZipJson(url+'/info.zip'+'?v='+Date.now(),(res)=>{\r\n let json = JSON.parse(res) \r\n engine.engineStatus.models.push({\r\n type: 'light',\r\n info: json,\r\n name: json.baseInfo.name,\r\n status: 'loading',\r\n url: url,\r\n elements:new Map<string,any>()\r\n }) \r\n if(engine.models==null){\r\n engine.models = []\r\n }\r\n // 添加模型数据\r\n engine.models.push({\r\n url: url,\r\n nodesMap: new Map<string, any>(),\r\n boundingBox: {\r\n min:new THREE.Vector3(json.baseInfo.min.X*0.3048,json.baseInfo.min.Z*0.3048,-json.baseInfo.min.Y*0.3048),\r\n max:new THREE.Vector3(json.baseInfo.max.X*0.3048,json.baseInfo.max.Z*0.3048,-json.baseInfo.max.Y*0.3048)\r\n }\r\n }) \r\n // 提交加载事件 \r\n engine.events.trigger(EventType.EngineFree, null);\r\n }) \r\n}\r\n\r\n// 查询需要加载的模型\r\nexport function getNeedLoadModel(engine:any){ \r\n // //////////////////////////\r\n engine.engineStatus.models.forEach(item => {\r\n // 初始化加载状态,各个板块的加载状态\r\n if(item.loadStatus==null){\r\n item.loadStatus = {\r\n mep:false,\r\n instance:false,\r\n normal:false\r\n }\r\n }\r\n // ***************加载中***************\r\n if(item.status === 'loading'){\r\n if(item.type === 'light'){\r\n // 检查还没加载完的内容,加载机电模型\r\n if(item.loadStatus.modelMep!=true){\r\n item.loadStatus.modelMep = true\r\n loadMep(engine,item.info.modelMep,item.url,(res)=>{\r\n console.log(\"加载机电模型\",res)\r\n }) \r\n } \r\n // 加载实例模型\r\n if(item.loadStatus.normal!=true){\r\n // 加载普通模型\r\n loadNode(engine,item)\r\n } \r\n }\r\n }\r\n }) \r\n}\r\n\r\n// 导入node数据\r\nexport function loadNode(engine:any,item:any){ \r\n // 获取相机位置\r\n let camera = engine.camera\r\n let position = camera.position\r\n let size = item.size\r\n // 遍历不同层级\r\n if(item.info==null || item.info.lods==null){\r\n return\r\n }\r\n \r\n // 判断是否要加载这个级别的模型 \r\n item.info.lods.forEach(lod=>{\r\n if(lod.status != true){ \r\n // 加载glb\r\n if(lod.glbs==null){ \r\n console.log(\"加载GLB.............\")\r\n lod.glbs = {}\r\n LoadJSON(item.url + lod.path +'/nodes.json'+'?v='+Date.now(),(res)=>{ \r\n let json = JSON.parse(res)\r\n // 重新梳理nodes数据,做出map \r\n let nodesMap = new Map<string, any>() \r\n engine.models.find((x:any)=>x.url == item.url)!.nodesMap = nodesMap \r\n // json是一个对象, 遍历所有的属性\r\n let count = 0\r\n for(let key in json){ \r\n // 重新组值 \r\n json[key].forEach((node:any)=>{ \r\n node.glb = key\r\n if(nodesMap.has(node.id)==false){\r\n nodesMap.set(node.id,{infos: [node]})\r\n }else{\r\n nodesMap.get(node.id).infos.push(node)\r\n } \r\n }) \r\n // 加载glb模型数据\r\n let loader = new GLTFLoader()\r\n const dracoLoader = new DRACOLoader();\r\n dracoLoader.setDecoderPath(\"/static/js/draco/\");\r\n dracoLoader.preload(); \r\n loader.setDRACOLoader(dracoLoader);\r\n loader.load(item.url + lod.path + key+'.glb',(glb)=>{ \r\n lod.glbs[key] = glb.scene.children\r\n count++\r\n if(count == Object.keys(json).length){ \r\n if(engine.engineStatus.isFree){ \r\n engine.events.trigger(EventType.EngineFree, null);\r\n engine.viewCube.CameraGoHome();\r\n }\r\n }\r\n })\r\n } \r\n }) \r\n }else{ \r\n console.log(\"加载模型.............\")\r\n // 计算需要加载的模型\r\n let totalIds = recursion(item,lod,lod.octreeBox)\r\n let totalMeshes:any[] = []\r\n // 根据待加载的模型去加载模型\r\n let model = engine.models.find((x:any)=>x.url == item.url)\r\n totalIds.forEach(id=>{\r\n if(model.nodesMap.has(id)){\r\n model.nodesMap.get(id).infos.forEach((node:any)=>{\r\n let mesh = lod.glbs[node.glb][node.mesh]\r\n if(mesh!=null && mesh.geometry!=null && mesh.material!=null){\r\n let matrix = new THREE.Matrix4()\r\n matrix.elements = node.matrix \r\n let newMesh = new THREE.Mesh(mesh.geometry.clone().applyMatrix4(matrix),mesh.material) \r\n\r\n let boundingBox = new THREE.Box3().setFromObject(newMesh)\r\n node.box = boundingBox\r\n node.mesh = newMesh\r\n\r\n\r\n newMesh.name = id\r\n newMesh.glb = node.glb\r\n newMesh.url = item.url\r\n totalMeshes.push(newMesh) \r\n }\r\n }) \r\n }\r\n }) \r\n console.log(\"加载模型数量\", totalMeshes.length)\r\n // 开始加载模型\r\n mergeMesh(item.url,engine,totalMeshes)\r\n } \r\n }\r\n }) \r\n\r\n\r\n function recursion(item:any,lod:any,octree:any){\r\n let ids:number[] = []\r\n if(octree.status != true){ \r\n if(!engine.engineStatus.isFree){\r\n return ids\r\n } \r\n // 判断这个节点是否加载,如果不加载就返回\r\n // 计算box大小 \r\n let min = new THREE.Vector3(octree.min.X,octree.min.Z,-octree.min.Y)\r\n let max = new THREE.Vector3(octree.max.X,octree.max.Z,-octree.max.Y)\r\n let distance = max.distanceTo(min)\r\n // 计算相机位置\r\n let cameraPoint = engine.camera.position\r\n\r\n // 计算相机到中心的位置\r\n let center = new THREE.Vector3(min.x + max.x / 2, min.y + max.y / 2, min.z + max.z / 2)\r\n let cameraDistance = cameraPoint.distanceTo(center)\r\n \r\n \r\n \r\n\r\n\r\n // 遍历所有的八叉树节点,找到符合要求的节点\r\n octree.elements.forEach(id=>{\r\n ids.push(id)\r\n }) \r\n // 继续递归\r\n octree.children.forEach(child=>{\r\n ids.push(...recursion(item,lod,child))\r\n })\r\n // 判断儿子,如果儿子都加载完了,就把自己也设置成加载完了\r\n if(octree.children.findIndex(child=>child.status != true) == -1){\r\n octree.status = true\r\n } \r\n if(octree.children.length == 0){\r\n octree.status = true\r\n }\r\n }\r\n return ids\r\n } \r\n} \r\n\r\n// 合并网格到模型\r\nfunction mergeMesh(url:string, engine:any, meshes:any[]){\r\n let allMat:any[] = []\r\n meshes.forEach(mesh=>{\r\n if(allMat.findIndex(item=>item.glb == mesh.glb) == -1){\r\n allMat.push({ \r\n glb:mesh.glb,\r\n meshes:[mesh],\r\n currentIndex: mesh.geometry.index.count,\r\n indexes: new Map<number, any[]>()\r\n })\r\n }else{\r\n allMat.find(item=>item.glb == mesh.glb).meshes.push(mesh)\r\n allMat.find(item=>item.glb == mesh.glb).currentIndex += mesh.geometry.index.count\r\n }\r\n // 设置当前模型的索引\r\n let mat = allMat.find(item=>item.glb == mesh.glb)\r\n mat.indexes.set(Number(mesh.name), [mat.currentIndex-mesh.geometry.index.count, mat.currentIndex]) \r\n })\r\n \r\n allMat.forEach((mat: any)=>{\r\n let currentMesh = engine.scene.children.find((item: any)=>item instanceof THREE.Mesh \r\n && item.url == url \r\n && item.glb == mat.glb)\r\n if(currentMesh != undefined){\r\n // 将新的网格合并到currentMesh中\r\n //let geometries = [currentMesh.geometry, ...mat.meshes.map((mesh: THREE.Mesh)=>mesh.geometry)]\r\n //currentMesh.geometry = BufferGeometryUtils.mergeGeometries(geometries)\r\n // 确保已有网格也能接收阴影\r\n currentMesh.castShadow = true;\r\n currentMesh.receiveShadow = true;\r\n }else{\r\n // 现有的这些合并,并添加到场景\r\n let newGeometry = new THREE.BufferGeometry()\r\n let mats = (mat.meshes.map((mesh: THREE.Mesh)=>mesh.material))\r\n newGeometry = BufferGeometryUtils.mergeGeometries(mat.meshes.map((mesh: THREE.Mesh)=>mesh.geometry),true)\r\n let newMesh = new THREE.Mesh(newGeometry,mat.meshes.map((mesh: THREE.Mesh)=>mesh.material))\r\n // 设置阴影相关属性\r\n newMesh.castShadow = true;\r\n newMesh.receiveShadow = true;\r\n engine.scene.add(newMesh)\r\n newMesh.index = engine.scene.children.length-1;\r\n newMesh.url = url\r\n newMesh.glb = mat.glb\r\n newMesh.indexes = mat.indexes \r\n newMesh.materialClone = mat.meshes[0].material\r\n // 设置全局索引\r\n let model = engine.models.find((x:any)=>x.url == url)\r\n if(model!=null){\r\n let i = 0\r\n mat.indexes.forEach((index:any)=>{\r\n if(model.nodesMap.get(Number(mat.meshes[i].name)).indexes==null){\r\n model.nodesMap.get(Number(mat.meshes[i].name)).indexes = []\r\n }\r\n model.nodesMap.get(Number(mat.meshes[i].name)).indexes.push([newMesh.index,i++, index[0], index[1]])\r\n })\r\n }\r\n\r\n if(newMesh.material instanceof Array){\r\n newMesh.material.forEach((material:any)=>{\r\n optimizeMaterial(material)\r\n }) \r\n }\r\n else{\r\n optimizeMaterial(newMesh.material)\r\n }\r\n \r\n }\r\n }) \r\n}\r\n\r\n\r\n /**\r\n * 优化材质设置\r\n * @param material 需要优化的材质\r\n */\r\n function optimizeMaterial(material: THREE.Material) {\r\n // 接受阴影\r\n material.shadowSide = THREE.FrontSide;\r\n material.roughness = 0.6\r\n material.metalness = 0.0\r\n material.side = THREE.DoubleSide\r\n \r\n if(material.map!=null){\r\n material.map.colorSpace = THREE.SRGBColorSpace;\r\n material.map.needsUpdate = true;\r\n console.log(\"优化贴图\")\r\n }\r\n\r\n \r\n\r\n if (material instanceof THREE.MeshStandardMaterial) {\r\n // 设置贴图的sRGB编码\r\n if (material.map) {\r\n material.map.colorSpace = THREE.SRGBColorSpace;\r\n material.map.needsUpdate = true;\r\n }\r\n\r\n if (material.emissiveMap) {\r\n material.emissiveMap.colorSpace = THREE.SRGBColorSpace;\r\n material.emissiveMap.needsUpdate = true;\r\n }\r\n\r\n if (material.roughnessMap) {\r\n material.roughnessMap.colorSpace = THREE.LinearSRGBColorSpace;\r\n material.roughnessMap.needsUpdate = true;\r\n }\r\n\r\n if (material.metalnessMap) {\r\n material.metalnessMap.colorSpace = THREE.LinearSRGBColorSpace;\r\n material.metalnessMap.needsUpdate = true;\r\n }\r\n\r\n if (material.normalMap) {\r\n material.normalMap.colorSpace = THREE.LinearSRGBColorSpace;\r\n material.normalMap.needsUpdate = true;\r\n }\r\n\r\n if (material.aoMap) {\r\n material.aoMap.colorSpace = THREE.LinearSRGBColorSpace;\r\n material.aoMap.needsUpdate = true;\r\n }\r\n\r\n // 调整材质的roughness和metalness参数\r\n // 确保值在合理范围内,避免材质过度反光或过于暗淡\r\n material.roughness = Math.max(0.1, Math.min(1.0, material.roughness));\r\n material.metalness = Math.max(0.0, Math.min(1.0, material.metalness));\r\n\r\n // 确保环境贴图强度设置正确\r\n material.envMapIntensity = material.envMapIntensity || 1.0;\r\n\r\n // 设置材质的其他优化参数\r\n material.needsUpdate = true;\r\n }\r\n\r\n // 处理MeshPhysicalMaterial\r\n if (material instanceof THREE.MeshPhysicalMaterial) {\r\n // 继承MeshStandardMaterial的所有优化\r\n this.optimizeMaterial(material as THREE.MeshStandardMaterial);\r\n\r\n // 设置透明度和相关贴图\r\n if (material.transmissionMap) {\r\n material.transmissionMap.colorSpace = THREE.LinearSRGBColorSpace;\r\n material.transmissionMap.needsUpdate = true;\r\n }\r\n\r\n if (material.thicknessMap) {\r\n material.thicknessMap.colorSpace = THREE.LinearSRGBColorSpace;\r\n material.thicknessMap.needsUpdate = true;\r\n }\r\n\r\n // 确保物理属性在合理范围内\r\n material.transmission = Math.max(0.0, Math.min(1.0, material.transmission));\r\n material.thickness = Math.max(0.0, Math.min(10.0, material.thickness));\r\n }\r\n\r\n // 处理MeshBasicMaterial\r\n if (material instanceof THREE.MeshBasicMaterial) {\r\n if (material.map) {\r\n material.map.colorSpace = THREE.SRGBColorSpace;\r\n material.map.needsUpdate = true;\r\n }\r\n }\r\n\r\n // 处理MeshLambertMaterial\r\n if (material instanceof THREE.MeshLambertMaterial) {\r\n if (material.map) {\r\n material.map.colorSpace = THREE.SRGBColorSpace;\r\n material.map.needsUpdate = true;\r\n }\r\n\r\n if (material.emissiveMap) {\r\n material.emissiveMap.colorSpace = THREE.SRGBColorSpace;\r\n material.emissiveMap.needsUpdate = true;\r\n }\r\n }\r\n }","import {LoadModelOptions} from '../../../api/modules/ILoaderModule'; \r\nimport { loadLightModel } from './modelLoader/loaderLightModel'; \r\n\r\nexport class LoaderModule { \r\n private engine: any;\r\n constructor(engine: any){\r\n this.engine = engine;\r\n } \r\n // 加载多个模型\r\n async loadModels(urls: string[], options?: LoadModelOptions){\r\n for (const url of urls) {\r\n let modelType = getModelType(url);\r\n if(modelType === \"light\"){\r\n loadLightModel(this.engine,url,options);\r\n } \r\n } \r\n // 获取待加载的模型类型\r\n function getModelType(url: string){\r\n const ext = url.split('.').pop();\r\n if (ext === 'glb' || ext === 'gltf') {\r\n return 'gltf';\r\n }\r\n return 'light';\r\n }\r\n } \r\n}\r\n","// 监听引擎状态\r\nimport { EventType } from '../../../api/modules/IEventModule'; \r\nimport {getNeedLoadModel} from '../modules/modelLoader/loaderLightModel'\r\nexport class EngineStatus{\r\n private engine: any;\r\n public isFree: boolean;\r\n public highlightModels: any[];\r\n public hideModels: any[];\r\n public models: any[];\r\n \r\n constructor(engine: any){\r\n this.engine = engine;\r\n this.isFree = true;\r\n this.highlightModels = [];\r\n this.hideModels = [];\r\n this.models = [];\r\n }\r\n\r\n \r\n public init() {\r\n // 监听空闲状态\r\n this.engine.events.on(EventType.EngineFree,()=>{\r\n this.updateFree(true);\r\n // 触发事件\r\n console.log(\"引擎空闲\")\r\n getNeedLoadModel(this.engine);\r\n })\r\n // 监听引擎的状态\r\n this.engine.events.on(EventType.EngineBusy,()=>{\r\n this.updateFree(false);\r\n // 触发事件\r\n console.log(\"引擎繁忙\")\r\n }) \r\n } \r\n // 更新引擎空闲状态\r\n public updateFree(status: boolean) {\r\n this.isFree = status;\r\n } \r\n // 关闭所有功能\r\n public closeAllFunction = () => {\r\n \r\n } \r\n}\r\n\r\n\r\n\r\n","import {EventType } from '../../../api/modules/IEventModule';\r\n\r\nexport class EventModule{\r\n private listeners: Map<EventType, Function[]> = new Map();\r\n\r\n on<T = any>(event: EventType, callback: (data: T) => void): void {\r\n if (!this.listeners.has(event)) {\r\n this.listeners.set(event, []);\r\n }\r\n this.listeners.get(event)!.push(callback);\r\n }\r\n\r\n off<T = any>(event: EventType, callback: (data: T) => void): void {\r\n if (!this.listeners.has(event)) return;\r\n const callbacks = this.listeners.get(event)!;\r\n const index = callbacks.indexOf(callback);\r\n if (index !== -1) {\r\n callbacks.splice(index, 1);\r\n }\r\n }\r\n\r\n trigger(event: EventType, data?: any): void {\r\n if (!this.listeners.has(event)) return;\r\n this.listeners.get(event)!.forEach(callback => {\r\n try {\r\n callback(data);\r\n } catch (e) {\r\n console.error(`Error in event listener for ${event}:`, e);\r\n }\r\n });\r\n }\r\n}\r\n","import * as THREE from 'three';\r\nexport class LightModule{\r\n private engine: any; \r\n constructor(engine: any){\r\n this.engine = engine;\r\n }\r\n // 加入场景基本光照\r\n public init(){ \r\n const dirLight = new THREE.DirectionalLight( 0xffffff, 2);\r\n dirLight.position.set(10, 20, 10);\r\n dirLight.castShadow = true;\r\n \r\n // Optimize shadow map - AAA Quality\r\n dirLight.shadow.mapSize.width = 4096; // High Res Shadows\r\n dirLight.shadow.mapSize.height = 4096;\r\n dirLight.shadow.camera.near = 0.1;\r\n dirLight.shadow.camera.far = 500;\r\n dirLight.shadow.bias = -0.00005; // Tighter bias for high res\r\n dirLight.shadow.normalBias = 0.02; // Reduces shadow acne on curved surfaces\r\n \r\n // Increase shadow camera frustum to cover scene\r\n const d = 50;\r\n dirLight.shadow.camera.left = -d;\r\n dirLight.shadow.camera.right = d;\r\n dirLight.shadow.camera.top = d;\r\n dirLight.shadow.camera.bottom = -d;\r\n \r\n // Softens shadow edges slightly\r\n dirLight.shadow.radius = 2; \r\n\r\n this.engine.scene.add(dirLight);\r\n\r\n // Soft Fill Light\r\n // Enhanced ambient light for better overall illumination\r\n const ambientLight = new THREE.AmbientLight(0xffffff, 1);\r\n this.engine.scene.add(ambientLight);\r\n }\r\n}","/**\r\n * 事件类型枚举\r\n */\r\nexport enum EventType {\r\n // 资源类\r\n ModelLoadStart = 'model-load-start',\r\n ModelLoadProgress = 'model-load-progress',\r\n ModelLoaded = 'model-loaded',\r\n ModelError = 'model-error',\r\n\r\n // 交互类\r\n SelectionChanged = 'selection-changed', // data: { ids: string[], modelId: string }\r\n HoverChanged = 'hover-changed', // data: { id: string | null, point: Vector3 }\r\n Click = 'click', // data: MouseEventData\r\n MouseMove = 'mouse-move', // data: MouseEventData - 鼠标移动事件\r\n\r\n // 视图类\r\n CameraChanged = 'camera-changed', // 相机移动时持续触发\r\n CameraIdle = 'camera-idle', // 相机静止后触发\r\n\r\n // 引擎状态\r\n EngineFree = 'engine-free',\r\n EngineBusy = 'engine-busy',\r\n\r\n\r\n // 业务类\r\n // 测量值变化\r\n MeasureChanged = 'measure-changed',\r\n}","import * as THREE from 'three';\r\nimport { EventType } from '../enum/eventType';\r\nexport class InteractionModule {\r\n private engine: any;\r\n private behavior: any;\r\n private isCtrlDown: boolean = false;\r\n constructor(engine: any){\r\n this.engine = engine;\r\n }\r\n\r\n\r\n public init(){\r\n this.behavior = this.engine.handelBehaved;\r\n this.behavior.init(this) \r\n }\r\n\r\n\r\n public active(){ \r\n this.behavior.active();\r\n }\r\n\r\n public disActive(){\r\n this.behavior.disActive();\r\n }\r\n\r\n\r\n // 键盘事件\r\n public handelKeyCtrlUp(){ \r\n this.isCtrlDown = false; \r\n }\r\n public handelKeyCtrlDown(){ \r\n this.isCtrlDown = true; \r\n } \r\n\r\n // 业务功能-监听鼠标谈起,点选模型\r\n public handleMouseClick(event: any){ \r\n if (event.catch) {\r\n const hit = event.catch;\r\n const selected = hit.object as THREE.Mesh;\r\n this.engine.events.trigger(EventType.Click, hit); \r\n let model = hit.object \r\n // 先取消其他高亮\r\n if(!this.isCtrlDown){\r\n this.engine.modelToolModule.unhighlightAllModels(); \r\n } \r\n console.log([{url:model.url,ids:[model.name]}]);\r\n this.engine.modelToolModule.highlightModel([{url:model.url,ids:[model.name]}]); \r\n } else {\r\n this.engine.modelToolModule.unhighlightAllModels(); \r\n } \r\n } \r\n\r\n // 双击模型事件\r\n public handleMouseDoubleClick(event: any){ \r\n if (event.catch) {\r\n const hit = event.catch;\r\n const selected = hit.object as THREE.Mesh;\r\n this.engine.events.trigger(EventType.Click, hit); \r\n let model = hit.object \r\n let model_ = this.engine.models.find((item:any) => item.url === model.url);\r\n let node = model_.nodesMap.get(model.name);\r\n let boxs = node.infos.map((item:any)=>item.box);\r\n // 获取总体的box\r\n let box = getBox(boxs); \r\n this.engine.viewCube.zoomToModel(box);\r\n }\r\n function getBox(boxs:any[]){\r\n let min = new THREE.Vector3(100000000, 1000000000, 10000000000);\r\n let max = new THREE.Vector3(-100000000, -1000000000, -10000000000);\r\n boxs.forEach((item:any)=>{\r\n if(item.min.x < min.x){\r\n min.x = item.min.x;\r\n }\r\n if(item.min.y < min.y){\r\n min.y = item.min.y;\r\n }\r\n if(item.min.z < min.z){\r\n min.z = item.min.z;\r\n }\r\n if(item.max.x > max.x){\r\n max.x = item.max.x;\r\n }\r\n if(item.max.y > max.y){\r\n max.y = item.max.y;\r\n }\r\n if(item.max.z > max.z){\r\n max.z = item.max.z;\r\n }\r\n });\r\n return new THREE.Box3(min, max);\r\n } \r\n }\r\n}","// 设置模型高亮\r\nimport * as THREE from 'three';\r\nexport class ModelToolModule {\r\n private engine: any;\r\n private highlightMaterial: THREE.MeshBasicMaterial;\r\n private hideMaterial: THREE.MeshBasicMaterial;\r\n constructor(engine_: any) {\r\n this.engine = engine_;\r\n // 模型高亮材质\r\n this.highlightMaterial = new THREE.MeshBasicMaterial({\r\n color: 0x00aaff, // 明显的蓝色\r\n depthTest: false, // 不进行深度测试,始终显示\r\n depthWrite: false, // 不写入深度缓冲\r\n transparent: true,\r\n opacity: 0.5, // 半透明效果\r\n side: THREE.DoubleSide // 双面渲染\r\n });\r\n // 模型隐藏材质,透明度为0\r\n this.hideMaterial = new THREE.MeshBasicMaterial({\r\n color: 0x000000, // 明显的蓝色\r\n depthTest: false, // 不进行深度测试,始终显示\r\n depthWrite: false, // 不写入深度缓冲\r\n transparent: true,\r\n opacity: 0, // 半透明效果\r\n side: THREE.DoubleSide // 双面渲染\r\n });\r\n }\r\n // 设置模型高亮\r\n public highlightModel(models: any) {\r\n // 找到所有这个id的模型\r\n models.forEach((model:any)=>{ \r\n model.ids.forEach((id:any)=>{\r\n let node = this.engine.models.find((x:any)=>x.url == model.url).nodesMap.get(id); \r\n // 修改模型高亮材质\r\n node.indexes.forEach((n:any)=>{\r\n splitModelMaterial(this.engine.scene.children[n[0]]);\r\n this.engine.scene.children[n[0]].material[n[1]] = this.highlightMaterial;\r\n })\r\n }) \r\n this.engine.engineStatus.highlightModels.push(model);\r\n }) \r\n }\r\n\r\n // 取消模型高亮\r\n public unhighlightModel(models: any) { \r\n models.forEach((model:any)=>{\r\n model.ids.forEach((id:any)=>{\r\n let node = this.engine.models.find((x:any)=>x.url == model.url).nodesMap.get(id); \r\n node.indexes.forEach((n:any)=>{\r\n this.engine.scene.children[n[0]].material[n[1]] = this.engine.scene.children[n[0]].materialClone;\r\n })\r\n })\r\n })\r\n }\r\n\r\n // 取消所有模型高亮\r\n public unhighlightAllModels() {\r\n this.engine.engineStatus.highlightModels.forEach((model:any)=>{\r\n this.unhighlightModel([model]);\r\n }) \r\n this.engine.engineStatus.highlightModels = [];\r\n }\r\n\r\n // 隐藏模型\r\n public hideModel(models: any) {\r\n // 找到所有这个id的模型\r\n models.forEach((model:any)=>{ \r\n model.ids.forEach((id:any)=>{\r\n let node = this.engine.models.find((x:any)=>x.url == model.url).nodesMap.get(id); \r\n this.engine.modelEdge.hideModelEdge(model.url,id);\r\n //this.engine.modelEdge.showModelEdge(model.url,id);\r\n // 修改模型高亮材质\r\n node.indexes.forEach((n:any)=>{\r\n splitModelMaterial(this.engine.scene.children[n[0]]);\r\n this.engine.scene.children[n[0]].material[n[1]] = this.hideMaterial;\r\n })\r\n }) \r\n\r\n\r\n // 添加到隐藏模型中\r\n let hiddenModel = this.engine.engineStatus.hideModels.find((x:any) => x.url == model.url);\r\n if(hiddenModel!=null){\r\n hiddenModel.ids.push(...model.ids);\r\n }else{\r\n this.engine.engineStatus.hideModels.push({\r\n url: model.url,\r\n ids: model.ids\r\n });\r\n } \r\n this.engine.engineStatus.highlightModels = []\r\n }) \r\n }\r\n\r\n // 显示模型\r\n public showModel(models: any) {\r\n models.forEach((model:any)=>{ \r\n model.ids.forEach((id:any)=>{\r\n let node = this.engine.models.find((x:any)=>x.url == model.url).nodesMap.get(id); \r\n this.engine.modelEdge.showModelEdge(model.url,id);\r\n // 修改模型高亮材质\r\n node.indexes.forEach((n:any)=>{\r\n this.engine.scene.children[n[0]].material[n[1]] = this.engine.scene.children[n[0]].materialClone;\r\n })\r\n }) \r\n this.engine.engineStatus.hideModels.push(model);\r\n }) \r\n }\r\n\r\n // 隔离模型 - 只显示传入的模型,隐藏其他所有模型\r\n public isolateModel(models: any) {\r\n // 获取所有已加载的模型及其所有节点ID\r\n const allModels: any[] = [];\r\n this.engine.models.forEach((model: any) => {\r\n const allIds = Array.from(model.nodesMap.keys());\r\n allModels.push({\r\n url: model.url,\r\n ids: allIds\r\n });\r\n });\r\n\r\n // 找出需要隐藏的模型(所有模型减去传入的模型)\r\n const modelsToHide: any[] = [];\r\n allModels.forEach((allModel: any) => {\r\n const targetModel = models.find((m: any) => m.url === allModel.url);\r\n\r\n if (targetModel) {\r\n // 如果URL匹配,隐藏除了传入ID之外的其他ID\r\n const idsToHide = allModel.ids.filter((id: any) => !targetModel.ids.includes(id));\r\n if (idsToHide.length > 0) {\r\n modelsToHide.push({\r\n url: allModel.url,\r\n ids: idsToHide\r\n });\r\n }\r\n } else {\r\n // 如果URL不匹配,隐藏该URL下的所有模型\r\n modelsToHide.push(allModel);\r\n }\r\n });\r\n\r\n // 隐藏需要隐藏的模型\r\n if (modelsToHide.length > 0) {\r\n this.hideModel(modelsToHide);\r\n }\r\n }\r\n\r\n // 显示所有模型\r\n public showAllModels() {\r\n\r\n\r\n\r\n\r\n\r\n\r\n }\r\n \r\n\r\n // 设置模型颜色\r\n public setModelColor(model: any, color: string) {\r\n model.material.color.set(color);\r\n }\r\n\r\n // 设置所有模型颜色\r\n public setAllModelsColor(color: string) {\r\n this.engine.scene.children.forEach((child: any) => {\r\n if (child.isMesh) {\r\n\r\n }\r\n });\r\n }\r\n\r\n // 恢复所有模型颜色\r\n public restoreAllModelsColor() {\r\n this.engine.scene.children.forEach((child: any) => {\r\n if (child.isMesh) {\r\n \r\n }\r\n });\r\n }\r\n\r\n\r\n // 获取当前选中模型的box包围盒\r\n public getModelsBox(models: any){ \r\n let box = new THREE.Box3();\r\n let boxs:any[] = [];\r\n models.forEach((model:any)=>{\r\n let node_ = this.engine.models.find((x:any)=>x.url == model.url) \r\n model.ids.forEach((id:any)=>{\r\n let node = node_.nodesMap.get(id);\r\n node.infos.forEach((item:any)=>{\r\n boxs.push(item.box);\r\n })\r\n })\r\n })\r\n return getBox(boxs);\r\n \r\n function getBox(boxs:any[]){\r\n let min = new THREE.Vector3(100000000, 1000000000, 10000000000);\r\n let max = new THREE.Vector3(-100000000, -1000000000, -10000000000);\r\n boxs.forEach((item:any)=>{\r\n if(item.min.x < min.x){\r\n min.x = item.min.x;\r\n }\r\n if(item.min.y < min.y){\r\n min.y = item.min.y;\r\n }\r\n if(item.min.z < min.z){\r\n min.z = item.min.z;\r\n }\r\n if(item.max.x > max.x){\r\n max.x = item.max.x;\r\n }\r\n if(item.max.y > max.y){\r\n max.y = item.max.y;\r\n }\r\n if(item.max.z > max.z){\r\n max.z = item.max.z;\r\n }\r\n });\r\n return new THREE.Box3(min, max);\r\n } \r\n }\r\n\r\n\r\n\r\n\r\n // 获取模型的精准位置描述,给大模型用的,主要是\r\n public getModelDescription(model: any){\r\n // 标高\r\n\r\n\r\n\r\n\r\n // 轴网\r\n\r\n\r\n\r\n\r\n // 房间\r\n \r\n\r\n\r\n \r\n // 属性信息\r\n\r\n\r\n \r\n\r\n\r\n // 工程量信息\r\n\r\n\r\n\r\n\r\n } \r\n}\r\n\r\n\r\n\r\n// 拆分模型材质\r\nfunction splitModelMaterial(model: any) {\r\n // 如果模型没有拆分过,则拆分\r\n if(model.isSplit==null || model.isSplit==undefined || model.isSplit == false){\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n model.isSplit = true; \r\n }\r\n}\r\n","import * as THREE from 'three';\r\n/**\r\n * 行为处理器 - 管理引擎的交互行为(鼠标、键盘事件等)\r\n * @param engine 引擎实例\r\n * @returns 行为处理器对象\r\n */\r\nexport function HandelBehaved(engine: any) {\r\n\r\n\t// 行为处理器内部状态\r\n\tconst _handelBehaved: any = {\r\n\t\tself: null as any, // 当前激活的行为对象\r\n\t\toptions: null as any, // 行为配置选项\r\n\t\tmouseDownTime: 0, // 鼠标按下时的时间戳\r\n\t\tlastClickTime: 0, // 上次点击时间\r\n\t};\r\n\r\n\t/**\r\n\t * 初始化行为处理器\r\n\t * @param self 要激活的行为对象\r\n\t * @param options 行为配置选项\r\n\t */\r\n\t_handelBehaved.init = function(self: any, options: any): void {\r\n\t\t// 关闭上一个功能\r\n\t\tif (_handelBehaved.self != null && _handelBehaved.self.disActive != null) {\r\n\t\t\t_handelBehaved.self.disActive();\r\n\t\t}\r\n\t\t_handelBehaved.self = self;\r\n\t\t// 一些基本配置\r\n\t\t_handelBehaved.options = options;\r\n\t};\r\n\r\n\t/**\r\n\t * 刷帧 - 调用当前行为对象的渲染方法\r\n\t */\r\n\t_handelBehaved.render = function(): void {\r\n\t\tif (_handelBehaved.self && _handelBehaved.self.render != null) {\r\n\t\t\t_handelBehaved.self.render();\r\n\t\t}\r\n\t};\r\n\r\n\t/**\r\n\t * 开启事务 - 激活事件监听\r\n\t */\r\n\t_handelBehaved.active = function(): void {\r\n\t\t// 恢复控制器\r\n\t\tengine.container.addEventListener('mousedown', handle_Mouse_Down);\r\n\t\tengine.container.addEventListener('mouseup', handle_Mouse_Up);\r\n\t\tengine.container.addEventListener('mousemove', handle_Mouse_Move); \r\n\t\twindow.addEventListener('keydown', handle_key_down);\r\n\t\twindow.addEventListener('keyup', handle_key_up);\r\n\t};\r\n\r\n\t/**\r\n\t * 关闭事务 - 禁用事件监听\r\n\t */\r\n\t_handelBehaved.disActive = function(): void {\r\n\t\t// 禁用控制器\r\n\t\tengine.container.removeEventListener('mousedown', handle_Mouse_Down);\r\n\t\tengine.container.removeEventListener('mouseup', handle_Mouse_Up);\r\n\t\tengine.container.removeEventListener('mousemove', handle_Mouse_Move);\r\n\t\twindow.removeEventListener('keydown', handle_key_down);\r\n\t\twindow.removeEventListener('keyup', handle_key_up); \r\n\t};\r\n\r\n\t/**\r\n\t * 处理键盘按下事件\r\n\t * @param event 键盘事件对象\r\n\t */\r\n\tfunction handle_key_down(event: any): void {\r\n\t\t// 处理删除键(Backspace: 8, Delete: 46)\r\n\t\tif (event.keyCode === 8 || event.keyCode === 46) {\r\n\t\t\tif (_handelBehaved.self && _handelBehaved.self.handelKeyDeleteDown != null) {\r\n\t\t\t\t_handelBehaved.self.handelKeyDeleteDown();\r\n\t\t\t}\r\n\t\t}\r\n\t\t// esc\r\n\t\tif (event.keyCode === 27) {\r\n\t\t\tif (_handelBehaved.self && _handelBehaved.self.handelKeyEscDown != null) {\r\n\t\t\t\t_handelBehaved.self.handelKeyEscDown();\r\n\t\t\t}\r\n\t\t}\r\n\t\t// enter\r\n\t\tif (event.keyCode === 13) {\r\n\t\t\tif (_handelBehaved.self && _handelBehaved.self.handelKeyEnterDown != null) {\r\n\t\t\t\t_handelBehaved.self.handelKeyEnterDown();\r\n\t\t\t}\r\n\t\t}\r\n\t\t// space\r\n\t\tif (event.keyCode === 32) {\r\n\t\t\tif (_handelBehaved.self && _handelBehaved.self.handelKeySpaceDown != null) {\r\n\t\t\t\t_handelBehaved.self.handelKeySpaceDown();\r\n\t\t\t}\r\n\t\t}\r\n\t\t// ctrl\r\n\t\tif (event.key === 'Control') {\r\n\t\t\tif (_handelBehaved.self && _handelBehaved.self.handelKeyCtrlDown != null) {\r\n\t\t\t\t_handelBehaved.self.handelKeyCtrlDown();\r\n\t\t\t}\r\n\t\t}\r\n\t\t// delete\r\n\t\tif (event.key === 'Delete') {\r\n\t\t\tif (_handelBehaved.self && _handelBehaved.self.handelKeyDeleteDown != null) {\r\n\t\t\t\t_handelBehaved.self.handelKeyDeleteDown();\r\n\t\t\t}\r\n\t\t}\r\n\t\t// shift\r\n\t\tif (event.key === 'Shift') {\r\n\t\t\tif (_handelBehaved.self && _handelBehaved.self.handelKeyShiftDown != null) {\r\n\t\t\t\t_handelBehaved.self.handelKeyShiftDown();\r\n\t\t\t}\r\n\t\t}\r\n\t\t// meta\r\n\t\tif (event.key === 'Meta') {\r\n\t\t\tif (_handelBehaved.self && _handelBehaved.self.handelKeyMetaDown != null) {\r\n\t\t\t\t_handelBehaved.self.handelKeyMetaDown();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tfunction handle_key_up(event: any): void { \r\n\t\t// alt\r\n\t\tif (event.key === 'Alt') {\r\n\t\t\tif (_handelBehaved.self && _handelBehaved.self.handelKeyAltUp != null) {\r\n\t\t\t\t_handelBehaved.self.handelKeyAltUp();\r\n\t\t\t}\r\n\t\t}\r\n\t\t// tab\r\n\t\tif (event.key === 'Tab') {\r\n\t\t\tif (_handelBehaved.self && _handelBehaved.self.handelKeyTabUp != null) {\r\n\t\t\t\t_handelBehaved.self.handelKeyTabUp();\r\n\t\t\t}\r\n\t\t}\r\n\t\t// ctrl\r\n\t\tif (event.key === 'Control') {\r\n\t\t\tif (_handelBehaved.self && _handelBehaved.self.handelKeyCtrlUp != null) {\r\n\t\t\t\t_handelBehaved.self.handelKeyCtrlUp();\r\n\t\t\t}\r\n\t\t}\r\n\t\t// shift\r\n\t\tif (event.key === 'Shift') {\r\n\t\t\tif (_handelBehaved.self && _handelBehaved.self.handelKeyShiftUp != null) {\r\n\t\t\t\t_handelBehaved.self.handelKeyShiftUp();\r\n\t\t\t}\r\n\t\t}\r\n\t\t// meta\r\n\t\tif (event.key === 'Meta') {\r\n\t\t\tif (_handelBehaved.self && _handelBehaved.self.handelKeyMetaUp != null) {\r\n\t\t\t\t_handelBehaved.self.handelKeyMetaUp();\r\n\t\t\t}\r\n\t\t}\r\n\t\t// command\r\n\t\tif (event.key === 'Command') {\r\n\t\t\tif (_handelBehaved.self && _handelBehaved.self.handelKeyCommandUp != null) {\r\n\t\t\t\t_handelBehaved.self.handelKeyCommandUp();\r\n\t\t\t}\r\n\t\t}\r\n\t\t// windows\r\n\t\tif (event.key === 'Windows') {\r\n\t\t\tif (_handelBehaved.self && _handelBehaved.self.handelKeyWindowsUp != null) {\r\n\t\t\t\t_handelBehaved.self.handelKeyWindowsUp();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * 将鼠标事件坐标转换为标准化设备坐标(NDC)\r\n\t * @param event 鼠标事件对象\r\n\t * @returns 标准化后的鼠标坐标\r\n\t */\r\n\tfunction getNormalizedMousePosition(event: any): THREE.Vector2 {\r\n\t\tconst mouse = new THREE.Vector2();\r\n\t\tconst width = engine.renderer.domElement.clientWidth;\r\n\t\tconst height = engine.renderer.domElement.clientHeight;\r\n\t\tmouse.x = (event.clientX / width) * 2 - 1;\r\n\t\tmouse.y = -(event.clientY / height) * 2 + 1;\r\n\t\treturn mouse;\r\n\t}\r\n\r\n\t/**\r\n\t * 创建射线投射器并设置从相机到鼠标位置的射线\r\n\t * @param event 鼠标事件对象\r\n\t * @returns 配置好的射线投射器\r\n\t */\r\n\tfunction createRaycaster(event: any): THREE.Raycaster {\r\n\t\tconst raycaster = new THREE.Raycaster();\r\n\t\tconst mouse = getNormalizedMousePosition(event);\r\n\t\traycaster.setFromCamera(mouse, engine.camera);\r\n\t\treturn raycaster;\r\n\t}\r\n\r\n\t/**\r\n\t * 为事件对象添加射线投射器和捕捉结果\r\n\t * @param event 鼠标事件对象\r\n\t * @param includeCatch 是否包含捕捉结果\r\n\t */\r\n\tfunction enrichEventWithRaycast(event: any, includeCatch: boolean = false): void {\r\n\t\tconst raycaster = createRaycaster(event);\r\n\t\tevent.raycaster = raycaster;\r\n\t\tif (includeCatch) {\r\n\t\t\tconst catchResult = handle_catch(raycaster,event);\r\n\t\t\tevent.catch = catchResult;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * 鼠标按下事件处理\r\n\t * @param event 鼠标事件对象\r\n\t */\r\n\tfunction handle_Mouse_Down(event: any): void {\r\n\t\t// 只处理左键(button === 0)\r\n\t\tif (event.button !== 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t// 记录鼠标按下的时间\r\n\t\t_handelBehaved.mouseDownTime = Date.now();\r\n\t\t// 如果当前行为对象有处理鼠标按下的方法,则调用\r\n\t\tif (_handelBehaved.self && _handelBehaved.self.handleMouseDown != null) {\r\n\t\t\tenrichEventWithRaycast(event, true);\r\n\t\t\t_handelBehaved.self.handleMouseDown(event);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * 鼠标移动事件处理\r\n\t * @param event 鼠标事件对象\r\n\t */\r\n\tfunction handle_Mouse_Move(event: any): void {\r\n\t\t// 如果当前行为对象有处理鼠标移动的方法,则调用\r\n\t\tif (_handelBehaved.self && _handelBehaved.self.handleMouseMove != null) {\r\n\t\t\tenrichEventWithRaycast(event, true);\r\n\t\t\t_handelBehaved.self.handleMouseMove(event);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * 鼠标弹起事件处理\r\n\t * @param event 鼠标事件对象\r\n\t */\r\n\tfunction handle_Mouse_Up(event: any): void {\r\n\t\t// 只处理左键(button === 0)\r\n\t\tif (event.button !== 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t// 计算鼠标按下到弹起的时间差\r\n\t\tconst nowTime = Date.now();\r\n\t\tconst timeDiff = nowTime - _handelBehaved.mouseDownTime;\r\n\t\t\r\n\t\t// 如果当前行为对象有处理鼠标弹起的方法,则调用\r\n\t\tif (_handelBehaved.self && _handelBehaved.self.handleMouseUp != null) {\r\n\t\t\tenrichEventWithRaycast(event, false);\r\n\t\t\t_handelBehaved.self.handleMouseUp(event);\r\n\t\t}\r\n\t\t\r\n\t\t// 判断是否为单击(按下到弹起的时间小于100毫秒)\r\n\t\tif (timeDiff < 100) {\r\n\t\t\tif (_handelBehaved.self && _handelBehaved.self.handleMouseClick != null) {\r\n\t\t\t\tenrichEventWithRaycast(event, true); \r\n\t\t\t\tconst timeDiff_double = nowTime - _handelBehaved.lastClickTime;\r\n\t\t\t\tconsole.log(timeDiff_double);\r\n\t\t\t\tif(timeDiff_double < 200) { \r\n\t\t\t\t\t_handelBehaved.self.handleMouseDoubleClick(event);\r\n\t\t\t\t}\r\n\t\t\t\telse{ \r\n\t\t\t\t\t_handelBehaved.self.handleMouseClick(event);\r\n\t\t\t\t} \r\n\t\t\t\t_handelBehaved.lastClickTime = Date.now();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * 捕捉功能 - 通过射线投射检测与模型的交点\r\n\t * @param raycaster 射线投射器\r\n\t * @returns 捕捉结果(包含交点和法线),如果没有交点则返回 undefined\r\n\t */\r\n\tfunction handle_catch(raycaster: any,event: any): any { \r\n\t\tengine.catchSvg.innerHTML = '';\r\n\t\t// 使用八叉树进行射线与模型的交互检测\r\n\t\tconst intersects = engine.octreeBox.rayInterationModel(raycaster);\r\n\t\t//const intersects = raycaster.intersectObjects(engine.scene.children, true); \r\n\t\t// 当 intersects.length > 0 说明射线击中了物体(可能为多个重合的物体)\r\n\t\t// 获取最近的物体(第一个交点)进行判断\r\n\t\tif (intersects.length === 0) {\r\n\t\t\treturn undefined;\r\n\t\t}\r\n // 设置捕捉点\r\n\t\t// 预览捕捉点\r\n\t\t// 啦啦啦啦啦啦啦啦啦啦\r\n\t\tlet url = intersects[0].object.url;\r\n\t\tlet id = intersects[0].object.name; \r\n\t\t// 获取到这个模型的edge\r\n\t\tlet edge = engine.modelEdge.getModelEdge(url,id);\r\n\t\tif(!edge){\r\n\t\t\t// 模拟空数据\r\n\t\t\tedge = [0,0,[]]\r\n\t\t}\r\n\r\n // 绘制点线面\r\n\t\tlet catchTye = \"face\" \r\n\t\t// 先判断点的捕捉\r\n\t\tlet point_list:any[] = [];\r\n\t\tlet line_list:any[] = [];\r\n\t\tlet mini = 5\r\n\t\tedge[2].map((x:any)=>x[0]).forEach((item:any)=>{\r\n\t\t\tlet p = new THREE.Vector3(item.X,item.Z,-item.Y);\r\n\t\t\tlet xy = engine.worldToScreen.worldToScreen(p);\r\n\t\t\t// 计算离鼠标的距离\r\n\t\t\tlet distance = Math.sqrt(Math.pow(xy.x - event.clientX, 2) + Math.pow(xy.y - event.clientY, 2));\r\n\t\t\tif(distance < mini){\r\n\t\t\t\tmini = distance;\r\n\t\t\t\tpoint_list.push({\r\n\t\t\t\t\tpoint: p,\r\n\t\t\t\t\tdistance: distance,\r\n\t\t\t\t\tpointxy: xy,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t\tif(point_list.length > 0){\r\n\t\t\t// 点捕捉\r\n\t\t\tpoint_list.sort((a:any,b:any)=>a.distance - b.distance);\r\n\t\t\tcatchTye = \"point\";\r\n\t\t}else{\r\n\t\t\t// 线捕捉\r\n\t\t\tedge[2].forEach((line:any)=>{\r\n\t\t\t\tlet start = new THREE.Vector3(line[0].X,line[0].Z,-line[0].Y);\r\n\t\t\t\tlet end = new THREE.Vector3(line[1].X,line[1].Z,-line[1].Y);\r\n\t\t\t\tlet start_xy = engine.worldToScreen.worldToScreen(start);\r\n\t\t\t\tlet end_xy = engine.worldToScreen.worldToScreen(end);\r\n\r\n\t\t\t\tlet dis = pointToLineDistance(new THREE.Vector2(event.clientX,event.clientY),start_xy,end_xy)\r\n\t\t\t\tif(dis < mini){\r\n\t\t\t\t\tlet project = pointToLineProjection(new THREE.Vector2(event.clientX,event.clientY),start_xy,end_xy)\r\n\t\t\t\t\tlet point = pointToLineProjection3D(project,start,end)\r\n\r\n\t\t\t\t\tline_list.push({\r\n\t\t\t\t\t\tdistance:dis,\r\n\t\t\t\t\t\tpoint:point,\r\n\t\t\t\t\t\tpointxy:engine.worldToScreen.worldToScreen(point),\r\n\t\t\t\t\t\tstart:start_xy,\r\n\t\t\t\t\t\tend:end_xy,\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tif(line_list.length>0){\r\n\t\t\t\tline_list.sort((a:any,b:any)=>a.distance - b.distance);\r\n\t\t\t\tcatchTye = \"line\";\r\n\t\t\t} \r\n\t\t} \r\n\t\t// 渲染捕捉点\r\n\t\tif(catchTye == \"point\"){\r\n\t\t\t// 绘制点\r\n\t\t\tconst screenPoint = engine.worldToScreen.worldToScreen(point_list[0].point); \r\n\t\t\tconsole.log('捕捉点屏幕坐标:', screenPoint.x, screenPoint.y);\r\n\t\t\tconsole.log('Canvas尺寸:', engine.renderer.domElement.width, engine.renderer.domElement.height);\r\n\t\t\tconsole.log('SVG尺寸:', engine.catchSvg.clientWidth, engine.catchSvg.clientHeight);\r\n\t\t\t// 清空之前的捕捉点\r\n\t\t\tengine.catchSvg.innerHTML = '';\r\n\t\t\t// 使用SVG命名空间创建circle元素\r\n\t\t\tconst circle = document.createElementNS('http://www.w3.org/2000/svg', 'circle');\r\n\t\t\tcircle.setAttribute('class', 'catchPoint');\r\n\t\t\tcircle.setAttribute('cx', screenPoint.x.toString());\r\n\t\t\tcircle.setAttribute('cy', screenPoint.y.toString());\r\n\t\t\tcircle.setAttribute('r', '5');\r\n\t\t\t// 设置颜色\r\n\t\t\tcircle.setAttribute('fill', 'rgb(0, 255, 247)');\r\n\t\t\tengine.catchSvg.appendChild(circle); \r\n\t\t}else if(catchTye == \"line\"){\r\n\t\t\t// 绘制线 \r\n\t\t\tconst screenPoint = engine.worldToScreen.worldToScreen(line_list[0].point); \r\n\t\t\tconst start = line_list[0].start;\r\n\t\t\tconst end = line_list[0].end; \r\n\t\t\tconsole.log('捕捉点屏幕坐标:', screenPoint.x, screenPoint.y);\r\n\t\t\tconsole.log('Canvas尺寸:', engine.renderer.domElement.width, engine.renderer.domElement.height);\r\n\t\t\tconsole.log('SVG尺寸:', engine.catchSvg.clientWidth, engine.catchSvg.clientHeight);\r\n\t\t\t// 清空之前的捕捉点\r\n\t\t\tengine.catchSvg.innerHTML = '';\r\n\t\t\t// 绘制线条\r\n\t\t\tconst line = document.createElementNS('http://www.w3.org/2000/svg', 'line');\r\n\t\t\tline.setAttribute('class', 'catchLine');\r\n\t\t\tline.setAttribute('x1', start.x.toString());\r\n\t\t\tline.setAttribute('y1', start.y.toString());\r\n\t\t\tline.setAttribute('x2', end.x.toString());\r\n\t\t\tline.setAttribute('y2', end.y.toString());\r\n\t\t\tline.setAttribute('stroke', 'rgb(0, 255, 247)');\r\n\t\t\tline.setAttribute('stroke-width', '2');\r\n\t\t\tengine.catchSvg.appendChild(line); \r\n\t\t}else if(catchTye == \"face\"){\r\n\t\t\t// 绘制面\r\n\t\t\tlet point = intersects[0].point.clone();\r\n\t\t\tlet normal = intersects[0].normal || (intersects[0].face ? intersects[0].face.normal : null);\r\n\t\t\tconst faceNormal = (normal ? normal.clone() : new THREE.Vector3(0, 0, 1)).normalize(); \r\n\t\t\t// 计算垂直于 normal 的两个向量,作为该平面的基\r\n\t\t\tconst referenceAxis = Math.abs(faceNormal.y) < 0.9 ? new THREE.Vector3(0, 1, 0) : new THREE.Vector3(1, 0, 0);\r\n\t\t\tconst tangent1 = new THREE.Vector3().crossVectors(faceNormal, referenceAxis).normalize();\r\n\t\t\tconst tangent2 = new THREE.Vector3().crossVectors(faceNormal, tangent1).normalize(); \r\n\t\t\t// 使用基向量创建一个小正方形\r\n\t\t\tconst halfSize = 0.05;\r\n\t\t\tconst offsets = [\r\n\t\t\t\tnew THREE.Vector3().copy(tangent1).add(tangent2).multiplyScalar(halfSize),\r\n\t\t\t\tnew THREE.Vector3().copy(tangent1).sub(tangent2).multiplyScalar(halfSize),\r\n\t\t\t\tnew THREE.Vector3().copy(tangent1).multiplyScalar(-1).sub(tangent2).multiplyScalar(halfSize),\r\n\t\t\t\tnew THREE.Vector3().copy(tangent1).multiplyScalar(-1).add(tangent2).multiplyScalar(halfSize),\r\n\t\t\t];\r\n\t\t\tconst squarePoints = offsets.map(offset => new THREE.Vector3().copy(point).add(offset));\r\n\t\t\tconst screenPoints = squarePoints.map(p => engine.worldToScreen.worldToScreen(p)); \r\n\t\t\tengine.catchSvg.innerHTML = '';\r\n\t\t\tconst polygon = document.createElementNS('http://www.w3.org/2000/svg', 'polygon');\r\n\t\t\tpolygon.setAttribute('class', 'catchFace');\r\n\t\t\tpolygon.setAttribute('points', screenPoints.map(p => `${p.x},${p.y}`).join(' '));\r\n\t\t\tpolygon.setAttribute('fill', 'rgba(1, 238, 255, 0.2)');\r\n\t\t\tpolygon.setAttribute('stroke', 'rgb(0, 255, 247)');\r\n\t\t\tpolygon.setAttribute('stroke-width', '1');\r\n\t\t\tengine.catchSvg.appendChild(polygon);\r\n\t\t}\r\n\t\treturn intersects[0]; \r\n\r\n\r\n\r\n\t\t// 计算点到线的距离,2维\r\n\t\tfunction pointToLineDistance(point: THREE.Vector2, start: THREE.Vector2, end: THREE.Vector2): number {\r\n\t\t\tconst lineDir = new THREE.Vector2().subVectors(end, start);\r\n\t\t\tconst lineLengthSq = lineDir.lengthSq();\r\n\t\t\tif (lineLengthSq < 1e-10) {\r\n\t\t\t\treturn point.distanceTo(start);\r\n\t\t\t}\r\n\t\t\tconst toPoint = new THREE.Vector2().subVectors(point, start);\r\n\t\t\tconst t = THREE.MathUtils.clamp(toPoint.dot(lineDir) / lineLengthSq, 0, 1);\r\n\t\t\tconst projectionPoint = new THREE.Vector2().copy(lineDir).multiplyScalar(t).add(start);\r\n\t\t\treturn point.distanceTo(projectionPoint);\r\n\t\t}\r\n\t\t// 计算点投影到线上的比例\r\n\t\tfunction pointToLineProjection(point: THREE.Vector2, start: THREE.Vector2, end: THREE.Vector2): number {\r\n\t\t\tconst lineDir = new THREE.Vector2().subVectors(end, start);\r\n\t\t\tconst lineLengthSq = lineDir.lengthSq();\r\n\t\t\tif (lineLengthSq < 1e-10) {\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\t\t\tconst toPoint = new THREE.Vector2().subVectors(point, start);\r\n\t\t\treturn THREE.MathUtils.clamp(toPoint.dot(lineDir) / lineLengthSq, 0, 1);\r\n\t\t}\r\n\r\n\t\t// 通过比例找到三维的点\r\n\t\tfunction pointToLineProjection3D(project:number, start: THREE.Vector3, end: THREE.Vector3): THREE.Vector3 {\r\n\t\t\tconst clamped = THREE.MathUtils.clamp(project, 0, 1);\r\n\t\t\treturn new THREE.Vector3().lerpVectors(start, end, clamped);\r\n\t\t}\r\n\t}\r\n\treturn _handelBehaved;\r\n}\r\n","import * as THREE from 'three';\r\n\r\n/**\r\n * 世界坐标与屏幕坐标转换工具类\r\n * 提供世界坐标(3D空间坐标)与屏幕坐标(2D像素坐标)之间的双向转换功能\r\n */\r\nexport class WorldToScreen {\r\n private raycaster: THREE.Raycaster;\r\n\r\n /**\r\n * 构造函数\r\n * @param camera - Three.js 相机对象(用于投影计算)\r\n * @param renderer - Three.js 渲染器对象(用于获取画布尺寸)\r\n * @param scene - Three.js 场景对象(用于屏幕坐标转世界坐标时的射线检测,可选)\r\n */\r\n constructor(\r\n private camera: THREE.Camera,\r\n private renderer: THREE.WebGLRenderer,\r\n private scene?: THREE.Scene\r\n ) {\r\n // 初始化射线检测器,用于屏幕坐标转世界坐标\r\n this.raycaster = new THREE.Raycaster();\r\n }\r\n\r\n /**\r\n * 将世界坐标转换为屏幕坐标(归一化坐标,范围 -1 到 1)\r\n * @param worldPos - 世界空间中的3D坐标点\r\n * @returns 归一化的屏幕坐标,x 和 y 的范围都是 -1 到 1\r\n * x: -1 表示屏幕左边缘,1 表示屏幕右边缘\r\n * y: -1 表示屏幕下边缘,1 表示屏幕上边缘\r\n */\r\n public worldToScreenNormalized(worldPos: THREE.Vector3): THREE.Vector2 {\r\n // 克隆坐标点,避免修改原始对象\r\n const pos = worldPos.clone();\r\n // 使用相机的投影矩阵将世界坐标投影到归一化设备坐标(NDC)\r\n pos.project(this.camera);\r\n // 返回归一化的屏幕坐标\r\n return new THREE.Vector2(pos.x, pos.y);\r\n }\r\n\r\n /**\r\n * 将世界坐标转换为屏幕坐标(像素坐标)\r\n * @param worldPos - 世界空间中的3D坐标点\r\n * @returns 屏幕像素坐标,x 和 y 表示在画布上的实际像素位置\r\n * x: 0 表示屏幕左边缘,width 表示屏幕右边缘\r\n * y: 0 表示屏幕上边缘,height 表示屏幕下边缘\r\n */\r\n public worldToScreen(worldPos: THREE.Vector3): THREE.Vector2 {\r\n // 先获取归一化坐标\r\n const normalized = this.worldToScreenNormalized(worldPos);\r\n \r\n // 获取画布的尺寸\r\n const width = this.renderer.domElement.width;\r\n const height = this.renderer.domElement.height;\r\n \r\n // 将归一化坐标转换为像素坐标\r\n // x: 从 [-1, 1] 映射到 [0, width]\r\n // y: 从 [-1, 1] 映射到 [0, height],注意 Y 轴需要翻转(屏幕坐标系 Y 轴向下)\r\n const x = (normalized.x + 1) * width / 2;\r\n const y = (1 - normalized.y) * height / 2;\r\n \r\n return new THREE.Vector2(x, y);\r\n }\r\n\r\n /**\r\n * 将屏幕坐标(像素坐标)转换为归一化坐标\r\n * @param screenX - 屏幕像素 X 坐标\r\n * @param screenY - 屏幕像素 Y 坐标\r\n * @returns 归一化的屏幕坐标,范围 -1 到 1\r\n */\r\n public screenToNormalized(screenX: number, screenY: number): THREE.Vector2 {\r\n // 获取画布的尺寸\r\n const width = this.renderer.domElement.width;\r\n const height = this.renderer.domElement.height;\r\n \r\n // 将像素坐标转换为归一化坐标\r\n // x: 从 [0, width] 映射到 [-1, 1]\r\n // y: 从 [0, height] 映射到 [-1, 1],注意 Y 轴需要翻转\r\n const x = (screenX / width) * 2 - 1;\r\n const y = -((screenY / height) * 2 - 1);\r\n \r\n return new THREE.Vector2(x, y);\r\n }\r\n\r\n /**\r\n * 将屏幕坐标(像素坐标)转换为世界坐标\r\n * 使用射线检测,返回与场景中第一个相交对象的世界坐标点\r\n * @param screenX - 屏幕像素 X 坐标\r\n * @param screenY - 屏幕像素 Y 坐标\r\n * @param objects - 可选,指定要检测的对象数组。如果不提供且 scene 存在,则检测场景中的所有对象\r\n * @returns 世界坐标点,如果没有相交则返回 null\r\n */\r\n public screenToWorld(\r\n screenX: number, \r\n screenY: number, \r\n objects?: THREE.Object3D[]\r\n ): THREE.Vector3 | null {\r\n // 如果没有提供场景,无法进行射线检测\r\n if (!this.scene && !objects) {\r\n console.warn('WorldToScreen: 需要提供 scene 或 objects 参数才能进行屏幕坐标转世界坐标');\r\n return null;\r\n }\r\n\r\n // 将屏幕坐标转换为归一化坐标\r\n const normalized = this.screenToNormalized(screenX, screenY);\r\n \r\n // 设置射线检测器的起点和方向\r\n this.raycaster.setFromCamera(normalized, this.camera);\r\n \r\n // 确定要检测的对象列表\r\n const objectsToTest = objects || this.scene!.children;\r\n \r\n // 执行射线检测,获取所有相交点\r\n const intersects = this.raycaster.intersectObjects(objectsToTest, true);\r\n \r\n // 如果存在相交点,返回第一个相交点的世界坐标\r\n if (intersects.length > 0) {\r\n return intersects[0].point;\r\n }\r\n \r\n // 如果没有相交,返回 null\r\n return null;\r\n }\r\n\r\n /**\r\n * 将屏幕坐标(像素坐标)转换为世界坐标(指定深度)\r\n * 使用相机的逆投影,在指定的深度平面上计算世界坐标\r\n * @param screenX - 屏幕像素 X 坐标\r\n * @param screenY - 屏幕像素 Y 坐标\r\n * @param depth - 深度值(距离相机的距离),默认为 0(相机近平面)\r\n * @returns 世界坐标点\r\n */\r\n public screenToWorldWithDepth(\r\n screenX: number, \r\n screenY: number, \r\n depth: number = 0\r\n ): THREE.Vector3 {\r\n // 将屏幕坐标转换为归一化坐标\r\n const normalized = this.screenToNormalized(screenX, screenY);\r\n \r\n // 创建临时向量,用于存储归一化坐标和深度\r\n const vector = new THREE.Vector3(normalized.x, normalized.y, depth);\r\n \r\n // 使用相机的逆投影矩阵将归一化坐标转换回世界坐标\r\n vector.unproject(this.camera);\r\n \r\n return vector;\r\n }\r\n\r\n /**\r\n * 更新相机引用(当相机发生变化时调用)\r\n * @param camera - 新的相机对象\r\n */\r\n public updateCamera(camera: THREE.Camera): void {\r\n this.camera = camera;\r\n }\r\n\r\n /**\r\n * 更新渲染器引用(当渲染器发生变化时调用)\r\n * @param renderer - 新的渲染器对象\r\n */\r\n public updateRenderer(renderer: THREE.WebGLRenderer): void {\r\n this.renderer = renderer;\r\n }\r\n\r\n /**\r\n * 更新场景引用(当场景发生变化时调用)\r\n * @param scene - 新的场景对象\r\n */\r\n public updateScene(scene: THREE.Scene): void {\r\n this.scene = scene;\r\n }\r\n}","// stats.js - http://github.com/mrdoob/stats.js\n(function(f,e){\"object\"===typeof exports&&\"undefined\"!==typeof module?module.exports=e():\"function\"===typeof define&&define.amd?define(e):f.Stats=e()})(this,function(){var f=function(){function e(a){c.appendChild(a.dom);return a}function u(a){for(var d=0;d<c.children.length;d++)c.children[d].style.display=d===a?\"block\":\"none\";l=a}var l=0,c=document.createElement(\"div\");c.style.cssText=\"position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000\";c.addEventListener(\"click\",function(a){a.preventDefault();\nu(++l%c.children.length)},!1);var k=(performance||Date).now(),g=k,a=0,r=e(new f.Panel(\"FPS\",\"#0ff\",\"#002\")),h=e(new f.Panel(\"MS\",\"#0f0\",\"#020\"));if(self.performance&&self.performance.memory)var t=e(new f.Panel(\"MB\",\"#f08\",\"#201\"));u(0);return{REVISION:16,dom:c,addPanel:e,showPanel:u,begin:function(){k=(performance||Date).now()},end:function(){a++;var c=(performance||Date).now();h.update(c-k,200);if(c>g+1E3&&(r.update(1E3*a/(c-g),100),g=c,a=0,t)){var d=performance.memory;t.update(d.usedJSHeapSize/\n1048576,d.jsHeapSizeLimit/1048576)}return c},update:function(){k=this.end()},domElement:c,setMode:u}};f.Panel=function(e,f,l){var c=Infinity,k=0,g=Math.round,a=g(window.devicePixelRatio||1),r=80*a,h=48*a,t=3*a,v=2*a,d=3*a,m=15*a,n=74*a,p=30*a,q=document.createElement(\"canvas\");q.width=r;q.height=h;q.style.cssText=\"width:80px;height:48px\";var b=q.getContext(\"2d\");b.font=\"bold \"+9*a+\"px Helvetica,Arial,sans-serif\";b.textBaseline=\"top\";b.fillStyle=l;b.fillRect(0,0,r,h);b.fillStyle=f;b.fillText(e,t,v);\nb.fillRect(d,m,n,p);b.fillStyle=l;b.globalAlpha=.9;b.fillRect(d,m,n,p);return{dom:q,update:function(h,w){c=Math.min(c,h);k=Math.max(k,h);b.fillStyle=l;b.globalAlpha=1;b.fillRect(0,0,r,m);b.fillStyle=f;b.fillText(g(h)+\" \"+e+\" (\"+g(c)+\"-\"+g(k)+\")\",t,v);b.drawImage(q,d+a,m,n-a,p,d,m,n-a,p);b.fillRect(d+n-a,m,a,p);b.fillStyle=l;b.globalAlpha=.9;b.fillRect(d+n-a,m,a,g((1-h/w)*p))}}};return f});\n","/**\n * The Ease class provides a collection of easing functions for use with tween.js.\n */\nvar Easing = Object.freeze({\n Linear: Object.freeze({\n None: function (amount) {\n return amount;\n },\n In: function (amount) {\n return amount;\n },\n Out: function (amount) {\n return amount;\n },\n InOut: function (amount) {\n return amount;\n },\n }),\n Quadratic: Object.freeze({\n In: function (amount) {\n return amount * amount;\n },\n Out: function (amount) {\n return amount * (2 - amount);\n },\n InOut: function (amount) {\n if ((amount *= 2) < 1) {\n return 0.5 * amount * amount;\n }\n return -0.5 * (--amount * (amount - 2) - 1);\n },\n }),\n Cubic: Object.freeze({\n In: function (amount) {\n return amount * amount * amount;\n },\n Out: function (amount) {\n return --amount * amount * amount + 1;\n },\n InOut: function (amount) {\n if ((amount *= 2) < 1) {\n return 0.5 * amount * amount * amount;\n }\n return 0.5 * ((amount -= 2) * amount * amount + 2);\n },\n }),\n Quartic: Object.freeze({\n In: function (amount) {\n return amount * amount * amount * amount;\n },\n Out: function (amount) {\n return 1 - --amount * amount * amount * amount;\n },\n InOut: function (amount) {\n if ((amount *= 2) < 1) {\n return 0.5 * amount * amount * amount * amount;\n }\n return -0.5 * ((amount -= 2) * amount * amount * amount - 2);\n },\n }),\n Quintic: Object.freeze({\n In: function (amount) {\n return amount * amount * amount * amount * amount;\n },\n Out: function (amount) {\n return --amount * amount * amount * amount * amount + 1;\n },\n InOut: function (amount) {\n if ((amount *= 2) < 1) {\n return 0.5 * amount * amount * amount * amount * amount;\n }\n return 0.5 * ((amount -= 2) * amount * amount * amount * amount + 2);\n },\n }),\n Sinusoidal: Object.freeze({\n In: function (amount) {\n return 1 - Math.sin(((1.0 - amount) * Math.PI) / 2);\n },\n Out: function (amount) {\n return Math.sin((amount * Math.PI) / 2);\n },\n InOut: function (amount) {\n return 0.5 * (1 - Math.sin(Math.PI * (0.5 - amount)));\n },\n }),\n Exponential: Object.freeze({\n In: function (amount) {\n return amount === 0 ? 0 : Math.pow(1024, amount - 1);\n },\n Out: function (amount) {\n return amount === 1 ? 1 : 1 - Math.pow(2, -10 * amount);\n },\n InOut: function (amount) {\n if (amount === 0) {\n return 0;\n }\n if (amount === 1) {\n return 1;\n }\n if ((amount *= 2) < 1) {\n return 0.5 * Math.pow(1024, amount - 1);\n }\n return 0.5 * (-Math.pow(2, -10 * (amount - 1)) + 2);\n },\n }),\n Circular: Object.freeze({\n In: function (amount) {\n return 1 - Math.sqrt(1 - amount * amount);\n },\n Out: function (amount) {\n return Math.sqrt(1 - --amount * amount);\n },\n InOut: function (amount) {\n if ((amount *= 2) < 1) {\n return -0.5 * (Math.sqrt(1 - amount * amount) - 1);\n }\n return 0.5 * (Math.sqrt(1 - (amount -= 2) * amount) + 1);\n },\n }),\n Elastic: Object.freeze({\n In: function (amount) {\n if (amount === 0) {\n return 0;\n }\n if (amount === 1) {\n return 1;\n }\n return -Math.pow(2, 10 * (amount - 1)) * Math.sin((amount - 1.1) * 5 * Math.PI);\n },\n Out: function (amount) {\n if (amount === 0) {\n return 0;\n }\n if (amount === 1) {\n return 1;\n }\n return Math.pow(2, -10 * amount) * Math.sin((amount - 0.1) * 5 * Math.PI) + 1;\n },\n InOut: function (amount) {\n if (amount === 0) {\n return 0;\n }\n if (amount === 1) {\n return 1;\n }\n amount *= 2;\n if (amount < 1) {\n return -0.5 * Math.pow(2, 10 * (amount - 1)) * Math.sin((amount - 1.1) * 5 * Math.PI);\n }\n return 0.5 * Math.pow(2, -10 * (amount - 1)) * Math.sin((amount - 1.1) * 5 * Math.PI) + 1;\n },\n }),\n Back: Object.freeze({\n In: function (amount) {\n var s = 1.70158;\n return amount === 1 ? 1 : amount * amount * ((s + 1) * amount - s);\n },\n Out: function (amount) {\n var s = 1.70158;\n return amount === 0 ? 0 : --amount * amount * ((s + 1) * amount + s) + 1;\n },\n InOut: function (amount) {\n var s = 1.70158 * 1.525;\n if ((amount *= 2) < 1) {\n return 0.5 * (amount * amount * ((s + 1) * amount - s));\n }\n return 0.5 * ((amount -= 2) * amount * ((s + 1) * amount + s) + 2);\n },\n }),\n Bounce: Object.freeze({\n In: function (amount) {\n return 1 - Easing.Bounce.Out(1 - amount);\n },\n Out: function (amount) {\n if (amount < 1 / 2.75) {\n return 7.5625 * amount * amount;\n }\n else if (amount < 2 / 2.75) {\n return 7.5625 * (amount -= 1.5 / 2.75) * amount + 0.75;\n }\n else if (amount < 2.5 / 2.75) {\n return 7.5625 * (amount -= 2.25 / 2.75) * amount + 0.9375;\n }\n else {\n return 7.5625 * (amount -= 2.625 / 2.75) * amount + 0.984375;\n }\n },\n InOut: function (amount) {\n if (amount < 0.5) {\n return Easing.Bounce.In(amount * 2) * 0.5;\n }\n return Easing.Bounce.Out(amount * 2 - 1) * 0.5 + 0.5;\n },\n }),\n generatePow: function (power) {\n if (power === void 0) { power = 4; }\n power = power < Number.EPSILON ? Number.EPSILON : power;\n power = power > 10000 ? 10000 : power;\n return {\n In: function (amount) {\n return Math.pow(amount, power);\n },\n Out: function (amount) {\n return 1 - Math.pow((1 - amount), power);\n },\n InOut: function (amount) {\n if (amount < 0.5) {\n return Math.pow((amount * 2), power) / 2;\n }\n return (1 - Math.pow((2 - amount * 2), power)) / 2 + 0.5;\n },\n };\n },\n});\n\nvar now = function () { return performance.now(); };\n\n/**\n * Controlling groups of tweens\n *\n * Using the TWEEN singleton to manage your tweens can cause issues in large apps with many components.\n * In these cases, you may want to create your own smaller groups of tween\n */\nvar Group = /** @class */ (function () {\n function Group() {\n this._tweens = {};\n this._tweensAddedDuringUpdate = {};\n }\n Group.prototype.getAll = function () {\n var _this = this;\n return Object.keys(this._tweens).map(function (tweenId) {\n return _this._tweens[tweenId];\n });\n };\n Group.prototype.removeAll = function () {\n this._tweens = {};\n };\n Group.prototype.add = function (tween) {\n this._tweens[tween.getId()] = tween;\n this._tweensAddedDuringUpdate[tween.getId()] = tween;\n };\n Group.prototype.remove = function (tween) {\n delete this._tweens[tween.getId()];\n delete this._tweensAddedDuringUpdate[tween.getId()];\n };\n Group.prototype.update = function (time, preserve) {\n if (time === void 0) { time = now(); }\n if (preserve === void 0) { preserve = false; }\n var tweenIds = Object.keys(this._tweens);\n if (tweenIds.length === 0) {\n return false;\n }\n // Tweens are updated in \"batches\". If you add a new tween during an\n // update, then the new tween will be updated in the next batch.\n // If you remove a tween during an update, it may or may not be updated.\n // However, if the removed tween was added during the current batch,\n // then it will not be updated.\n while (tweenIds.length > 0) {\n this._tweensAddedDuringUpdate = {};\n for (var i = 0; i < tweenIds.length; i++) {\n var tween = this._tweens[tweenIds[i]];\n var autoStart = !preserve;\n if (tween && tween.update(time, autoStart) === false && !preserve) {\n delete this._tweens[tweenIds[i]];\n }\n }\n tweenIds = Object.keys(this._tweensAddedDuringUpdate);\n }\n return true;\n };\n return Group;\n}());\n\n/**\n *\n */\nvar Interpolation = {\n Linear: function (v, k) {\n var m = v.length - 1;\n var f = m * k;\n var i = Math.floor(f);\n var fn = Interpolation.Utils.Linear;\n if (k < 0) {\n return fn(v[0], v[1], f);\n }\n if (k > 1) {\n return fn(v[m], v[m - 1], m - f);\n }\n return fn(v[i], v[i + 1 > m ? m : i + 1], f - i);\n },\n Bezier: function (v, k) {\n var b = 0;\n var n = v.length - 1;\n var pw = Math.pow;\n var bn = Interpolation.Utils.Bernstein;\n for (var i = 0; i <= n; i++) {\n b += pw(1 - k, n - i) * pw(k, i) * v[i] * bn(n, i);\n }\n return b;\n },\n CatmullRom: function (v, k) {\n var m = v.length - 1;\n var f = m * k;\n var i = Math.floor(f);\n var fn = Interpolation.Utils.CatmullRom;\n if (v[0] === v[m]) {\n if (k < 0) {\n i = Math.floor((f = m * (1 + k)));\n }\n return fn(v[(i - 1 + m) % m], v[i], v[(i + 1) % m], v[(i + 2) % m], f - i);\n }\n else {\n if (k < 0) {\n return v[0] - (fn(v[0], v[0], v[1], v[1], -f) - v[0]);\n }\n if (k > 1) {\n return v[m] - (fn(v[m], v[m], v[m - 1], v[m - 1], f - m) - v[m]);\n }\n return fn(v[i ? i - 1 : 0], v[i], v[m < i + 1 ? m : i + 1], v[m < i + 2 ? m : i + 2], f - i);\n }\n },\n Utils: {\n Linear: function (p0, p1, t) {\n return (p1 - p0) * t + p0;\n },\n Bernstein: function (n, i) {\n var fc = Interpolation.Utils.Factorial;\n return fc(n) / fc(i) / fc(n - i);\n },\n Factorial: (function () {\n var a = [1];\n return function (n) {\n var s = 1;\n if (a[n]) {\n return a[n];\n }\n for (var i = n; i > 1; i--) {\n s *= i;\n }\n a[n] = s;\n return s;\n };\n })(),\n CatmullRom: function (p0, p1, p2, p3, t) {\n var v0 = (p2 - p0) * 0.5;\n var v1 = (p3 - p1) * 0.5;\n var t2 = t * t;\n var t3 = t * t2;\n return (2 * p1 - 2 * p2 + v0 + v1) * t3 + (-3 * p1 + 3 * p2 - 2 * v0 - v1) * t2 + v0 * t + p1;\n },\n },\n};\n\n/**\n * Utils\n */\nvar Sequence = /** @class */ (function () {\n function Sequence() {\n }\n Sequence.nextId = function () {\n return Sequence._nextId++;\n };\n Sequence._nextId = 0;\n return Sequence;\n}());\n\nvar mainGroup = new Group();\n\n/**\n * Tween.js - Licensed under the MIT license\n * https://github.com/tweenjs/tween.js\n * ----------------------------------------------\n *\n * See https://github.com/tweenjs/tween.js/graphs/contributors for the full list of contributors.\n * Thank you all, you're awesome!\n */\nvar Tween = /** @class */ (function () {\n function Tween(_object, _group) {\n if (_group === void 0) { _group = mainGroup; }\n this._object = _object;\n this._group = _group;\n this._isPaused = false;\n this._pauseStart = 0;\n this._valuesStart = {};\n this._valuesEnd = {};\n this._valuesStartRepeat = {};\n this._duration = 1000;\n this._isDynamic = false;\n this._initialRepeat = 0;\n this._repeat = 0;\n this._yoyo = false;\n this._isPlaying = false;\n this._reversed = false;\n this._delayTime = 0;\n this._startTime = 0;\n this._easingFunction = Easing.Linear.None;\n this._interpolationFunction = Interpolation.Linear;\n // eslint-disable-next-line\n this._chainedTweens = [];\n this._onStartCallbackFired = false;\n this._onEveryStartCallbackFired = false;\n this._id = Sequence.nextId();\n this._isChainStopped = false;\n this._propertiesAreSetUp = false;\n this._goToEnd = false;\n }\n Tween.prototype.getId = function () {\n return this._id;\n };\n Tween.prototype.isPlaying = function () {\n return this._isPlaying;\n };\n Tween.prototype.isPaused = function () {\n return this._isPaused;\n };\n Tween.prototype.getDuration = function () {\n return this._duration;\n };\n Tween.prototype.to = function (target, duration) {\n if (duration === void 0) { duration = 1000; }\n if (this._isPlaying)\n throw new Error('Can not call Tween.to() while Tween is already started or paused. Stop the Tween first.');\n this._valuesEnd = target;\n this._propertiesAreSetUp = false;\n this._duration = duration < 0 ? 0 : duration;\n return this;\n };\n Tween.prototype.duration = function (duration) {\n if (duration === void 0) { duration = 1000; }\n this._duration = duration < 0 ? 0 : duration;\n return this;\n };\n Tween.prototype.dynamic = function (dynamic) {\n if (dynamic === void 0) { dynamic = false; }\n this._isDynamic = dynamic;\n return this;\n };\n Tween.prototype.start = function (time, overrideStartingValues) {\n if (time === void 0) { time = now(); }\n if (overrideStartingValues === void 0) { overrideStartingValues = false; }\n if (this._isPlaying) {\n return this;\n }\n // eslint-disable-next-line\n this._group && this._group.add(this);\n this._repeat = this._initialRepeat;\n if (this._reversed) {\n // If we were reversed (f.e. using the yoyo feature) then we need to\n // flip the tween direction back to forward.\n this._reversed = false;\n for (var property in this._valuesStartRepeat) {\n this._swapEndStartRepeatValues(property);\n this._valuesStart[property] = this._valuesStartRepeat[property];\n }\n }\n this._isPlaying = true;\n this._isPaused = false;\n this._onStartCallbackFired = false;\n this._onEveryStartCallbackFired = false;\n this._isChainStopped = false;\n this._startTime = time;\n this._startTime += this._delayTime;\n if (!this._propertiesAreSetUp || overrideStartingValues) {\n this._propertiesAreSetUp = true;\n // If dynamic is not enabled, clone the end values instead of using the passed-in end values.\n if (!this._isDynamic) {\n var tmp = {};\n for (var prop in this._valuesEnd)\n tmp[prop] = this._valuesEnd[prop];\n this._valuesEnd = tmp;\n }\n this._setupProperties(this._object, this._valuesStart, this._valuesEnd, this._valuesStartRepeat, overrideStartingValues);\n }\n return this;\n };\n Tween.prototype.startFromCurrentValues = function (time) {\n return this.start(time, true);\n };\n Tween.prototype._setupProperties = function (_object, _valuesStart, _valuesEnd, _valuesStartRepeat, overrideStartingValues) {\n for (var property in _valuesEnd) {\n var startValue = _object[property];\n var startValueIsArray = Array.isArray(startValue);\n var propType = startValueIsArray ? 'array' : typeof startValue;\n var isInterpolationList = !startValueIsArray && Array.isArray(_valuesEnd[property]);\n // If `to()` specifies a property that doesn't exist in the source object,\n // we should not set that property in the object\n if (propType === 'undefined' || propType === 'function') {\n continue;\n }\n // Check if an Array was provided as property value\n if (isInterpolationList) {\n var endValues = _valuesEnd[property];\n if (endValues.length === 0) {\n continue;\n }\n // Handle an array of relative values.\n // Creates a local copy of the Array with the start value at the front\n var temp = [startValue];\n for (var i = 0, l = endValues.length; i < l; i += 1) {\n var value = this._handleRelativeValue(startValue, endValues[i]);\n if (isNaN(value)) {\n isInterpolationList = false;\n console.warn('Found invalid interpolation list. Skipping.');\n break;\n }\n temp.push(value);\n }\n if (isInterpolationList) {\n // if (_valuesStart[property] === undefined) { // handle end values only the first time. NOT NEEDED? setupProperties is now guarded by _propertiesAreSetUp.\n _valuesEnd[property] = temp;\n // }\n }\n }\n // handle the deepness of the values\n if ((propType === 'object' || startValueIsArray) && startValue && !isInterpolationList) {\n _valuesStart[property] = startValueIsArray ? [] : {};\n var nestedObject = startValue;\n for (var prop in nestedObject) {\n _valuesStart[property][prop] = nestedObject[prop];\n }\n // TODO? repeat nested values? And yoyo? And array values?\n _valuesStartRepeat[property] = startValueIsArray ? [] : {};\n var endValues = _valuesEnd[property];\n // If dynamic is not enabled, clone the end values instead of using the passed-in end values.\n if (!this._isDynamic) {\n var tmp = {};\n for (var prop in endValues)\n tmp[prop] = endValues[prop];\n _valuesEnd[property] = endValues = tmp;\n }\n this._setupProperties(nestedObject, _valuesStart[property], endValues, _valuesStartRepeat[property], overrideStartingValues);\n }\n else {\n // Save the starting value, but only once unless override is requested.\n if (typeof _valuesStart[property] === 'undefined' || overrideStartingValues) {\n _valuesStart[property] = startValue;\n }\n if (!startValueIsArray) {\n // eslint-disable-next-line\n // @ts-ignore FIXME?\n _valuesStart[property] *= 1.0; // Ensures we're using numbers, not strings\n }\n if (isInterpolationList) {\n // eslint-disable-next-line\n // @ts-ignore FIXME?\n _valuesStartRepeat[property] = _valuesEnd[property].slice().reverse();\n }\n else {\n _valuesStartRepeat[property] = _valuesStart[property] || 0;\n }\n }\n }\n };\n Tween.prototype.stop = function () {\n if (!this._isChainStopped) {\n this._isChainStopped = true;\n this.stopChainedTweens();\n }\n if (!this._isPlaying) {\n return this;\n }\n // eslint-disable-next-line\n this._group && this._group.remove(this);\n this._isPlaying = false;\n this._isPaused = false;\n if (this._onStopCallback) {\n this._onStopCallback(this._object);\n }\n return this;\n };\n Tween.prototype.end = function () {\n this._goToEnd = true;\n this.update(Infinity);\n return this;\n };\n Tween.prototype.pause = function (time) {\n if (time === void 0) { time = now(); }\n if (this._isPaused || !this._isPlaying) {\n return this;\n }\n this._isPaused = true;\n this._pauseStart = time;\n // eslint-disable-next-line\n this._group && this._group.remove(this);\n return this;\n };\n Tween.prototype.resume = function (time) {\n if (time === void 0) { time = now(); }\n if (!this._isPaused || !this._isPlaying) {\n return this;\n }\n this._isPaused = false;\n this._startTime += time - this._pauseStart;\n this._pauseStart = 0;\n // eslint-disable-next-line\n this._group && this._group.add(this);\n return this;\n };\n Tween.prototype.stopChainedTweens = function () {\n for (var i = 0, numChainedTweens = this._chainedTweens.length; i < numChainedTweens; i++) {\n this._chainedTweens[i].stop();\n }\n return this;\n };\n Tween.prototype.group = function (group) {\n if (group === void 0) { group = mainGroup; }\n this._group = group;\n return this;\n };\n Tween.prototype.delay = function (amount) {\n if (amount === void 0) { amount = 0; }\n this._delayTime = amount;\n return this;\n };\n Tween.prototype.repeat = function (times) {\n if (times === void 0) { times = 0; }\n this._initialRepeat = times;\n this._repeat = times;\n return this;\n };\n Tween.prototype.repeatDelay = function (amount) {\n this._repeatDelayTime = amount;\n return this;\n };\n Tween.prototype.yoyo = function (yoyo) {\n if (yoyo === void 0) { yoyo = false; }\n this._yoyo = yoyo;\n return this;\n };\n Tween.prototype.easing = function (easingFunction) {\n if (easingFunction === void 0) { easingFunction = Easing.Linear.None; }\n this._easingFunction = easingFunction;\n return this;\n };\n Tween.prototype.interpolation = function (interpolationFunction) {\n if (interpolationFunction === void 0) { interpolationFunction = Interpolation.Linear; }\n this._interpolationFunction = interpolationFunction;\n return this;\n };\n // eslint-disable-next-line\n Tween.prototype.chain = function () {\n var tweens = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n tweens[_i] = arguments[_i];\n }\n this._chainedTweens = tweens;\n return this;\n };\n Tween.prototype.onStart = function (callback) {\n this._onStartCallback = callback;\n return this;\n };\n Tween.prototype.onEveryStart = function (callback) {\n this._onEveryStartCallback = callback;\n return this;\n };\n Tween.prototype.onUpdate = function (callback) {\n this._onUpdateCallback = callback;\n return this;\n };\n Tween.prototype.onRepeat = function (callback) {\n this._onRepeatCallback = callback;\n return this;\n };\n Tween.prototype.onComplete = function (callback) {\n this._onCompleteCallback = callback;\n return this;\n };\n Tween.prototype.onStop = function (callback) {\n this._onStopCallback = callback;\n return this;\n };\n /**\n * @returns true if the tween is still playing after the update, false\n * otherwise (calling update on a paused tween still returns true because\n * it is still playing, just paused).\n */\n Tween.prototype.update = function (time, autoStart) {\n var _this = this;\n var _a;\n if (time === void 0) { time = now(); }\n if (autoStart === void 0) { autoStart = true; }\n if (this._isPaused)\n return true;\n var property;\n var endTime = this._startTime + this._duration;\n if (!this._goToEnd && !this._isPlaying) {\n if (time > endTime)\n return false;\n if (autoStart)\n this.start(time, true);\n }\n this._goToEnd = false;\n if (time < this._startTime) {\n return true;\n }\n if (this._onStartCallbackFired === false) {\n if (this._onStartCallback) {\n this._onStartCallback(this._object);\n }\n this._onStartCallbackFired = true;\n }\n if (this._onEveryStartCallbackFired === false) {\n if (this._onEveryStartCallback) {\n this._onEveryStartCallback(this._object);\n }\n this._onEveryStartCallbackFired = true;\n }\n var elapsedTime = time - this._startTime;\n var durationAndDelay = this._duration + ((_a = this._repeatDelayTime) !== null && _a !== void 0 ? _a : this._delayTime);\n var totalTime = this._duration + this._repeat * durationAndDelay;\n var calculateElapsedPortion = function () {\n if (_this._duration === 0)\n return 1;\n if (elapsedTime > totalTime) {\n return 1;\n }\n var timesRepeated = Math.trunc(elapsedTime / durationAndDelay);\n var timeIntoCurrentRepeat = elapsedTime - timesRepeated * durationAndDelay;\n // TODO use %?\n // const timeIntoCurrentRepeat = elapsedTime % durationAndDelay\n var portion = Math.min(timeIntoCurrentRepeat / _this._duration, 1);\n if (portion === 0 && elapsedTime === _this._duration) {\n return 1;\n }\n return portion;\n };\n var elapsed = calculateElapsedPortion();\n var value = this._easingFunction(elapsed);\n // properties transformations\n this._updateProperties(this._object, this._valuesStart, this._valuesEnd, value);\n if (this._onUpdateCallback) {\n this._onUpdateCallback(this._object, elapsed);\n }\n if (this._duration === 0 || elapsedTime >= this._duration) {\n if (this._repeat > 0) {\n var completeCount = Math.min(Math.trunc((elapsedTime - this._duration) / durationAndDelay) + 1, this._repeat);\n if (isFinite(this._repeat)) {\n this._repeat -= completeCount;\n }\n // Reassign starting values, restart by making startTime = now\n for (property in this._valuesStartRepeat) {\n if (!this._yoyo && typeof this._valuesEnd[property] === 'string') {\n this._valuesStartRepeat[property] =\n // eslint-disable-next-line\n // @ts-ignore FIXME?\n this._valuesStartRepeat[property] + parseFloat(this._valuesEnd[property]);\n }\n if (this._yoyo) {\n this._swapEndStartRepeatValues(property);\n }\n this._valuesStart[property] = this._valuesStartRepeat[property];\n }\n if (this._yoyo) {\n this._reversed = !this._reversed;\n }\n this._startTime += durationAndDelay * completeCount;\n if (this._onRepeatCallback) {\n this._onRepeatCallback(this._object);\n }\n this._onEveryStartCallbackFired = false;\n return true;\n }\n else {\n if (this._onCompleteCallback) {\n this._onCompleteCallback(this._object);\n }\n for (var i = 0, numChainedTweens = this._chainedTweens.length; i < numChainedTweens; i++) {\n // Make the chained tweens start exactly at the time they should,\n // even if the `update()` method was called way past the duration of the tween\n this._chainedTweens[i].start(this._startTime + this._duration, false);\n }\n this._isPlaying = false;\n return false;\n }\n }\n return true;\n };\n Tween.prototype._updateProperties = function (_object, _valuesStart, _valuesEnd, value) {\n for (var property in _valuesEnd) {\n // Don't update properties that do not exist in the source object\n if (_valuesStart[property] === undefined) {\n continue;\n }\n var start = _valuesStart[property] || 0;\n var end = _valuesEnd[property];\n var startIsArray = Array.isArray(_object[property]);\n var endIsArray = Array.isArray(end);\n var isInterpolationList = !startIsArray && endIsArray;\n if (isInterpolationList) {\n _object[property] = this._interpolationFunction(end, value);\n }\n else if (typeof end === 'object' && end) {\n // eslint-disable-next-line\n // @ts-ignore FIXME?\n this._updateProperties(_object[property], start, end, value);\n }\n else {\n // Parses relative end values with start as base (e.g.: +10, -3)\n end = this._handleRelativeValue(start, end);\n // Protect against non numeric properties.\n if (typeof end === 'number') {\n // eslint-disable-next-line\n // @ts-ignore FIXME?\n _object[property] = start + (end - start) * value;\n }\n }\n }\n };\n Tween.prototype._handleRelativeValue = function (start, end) {\n if (typeof end !== 'string') {\n return end;\n }\n if (end.charAt(0) === '+' || end.charAt(0) === '-') {\n return start + parseFloat(end);\n }\n return parseFloat(end);\n };\n Tween.prototype._swapEndStartRepeatValues = function (property) {\n var tmp = this._valuesStartRepeat[property];\n var endValue = this._valuesEnd[property];\n if (typeof endValue === 'string') {\n this._valuesStartRepeat[property] = this._valuesStartRepeat[property] + parseFloat(endValue);\n }\n else {\n this._valuesStartRepeat[property] = this._valuesEnd[property];\n }\n this._valuesEnd[property] = tmp;\n };\n return Tween;\n}());\n\nvar VERSION = '23.1.3';\n\n/**\n * Tween.js - Licensed under the MIT license\n * https://github.com/tweenjs/tween.js\n * ----------------------------------------------\n *\n * See https://github.com/tweenjs/tween.js/graphs/contributors for the full list of contributors.\n * Thank you all, you're awesome!\n */\nvar nextId = Sequence.nextId;\n/**\n * Controlling groups of tweens\n *\n * Using the TWEEN singleton to manage your tweens can cause issues in large apps with many components.\n * In these cases, you may want to create your own smaller groups of tweens.\n */\nvar TWEEN = mainGroup;\n// This is the best way to export things in a way that's compatible with both ES\n// Modules and CommonJS, without build hacks, and so as not to break the\n// existing API.\n// https://github.com/rollup/rollup/issues/1961#issuecomment-423037881\nvar getAll = TWEEN.getAll.bind(TWEEN);\nvar removeAll = TWEEN.removeAll.bind(TWEEN);\nvar add = TWEEN.add.bind(TWEEN);\nvar remove = TWEEN.remove.bind(TWEEN);\nvar update = TWEEN.update.bind(TWEEN);\nvar exports = {\n Easing: Easing,\n Group: Group,\n Interpolation: Interpolation,\n now: now,\n Sequence: Sequence,\n nextId: nextId,\n Tween: Tween,\n VERSION: VERSION,\n getAll: getAll,\n removeAll: removeAll,\n add: add,\n remove: remove,\n update: update,\n};\n\nexport { Easing, Group, Interpolation, Sequence, Tween, VERSION, add, exports as default, getAll, nextId, now, remove, removeAll, update };\n","import * as THREE from 'three';\r\nimport \"three/examples/jsm/controls/OrbitControls\"; //控制操作加载库\r\nimport \"three/examples/jsm/controls/TransformControls.js\"; \r\nimport { RGBELoader } from 'three/examples/jsm/loaders/RGBELoader.js';\r\n//初始化场景\r\nexport function InitScene() {\r\n let scene = new THREE.Scene(); //创建场景\r\n // scene.background = new THREE.Color( '#b9d3ff' );\r\n return scene;\r\n}\r\n\r\n//初始化辅助坐标轴\r\nexport function InitAxesHelper(scene) {\r\n const axesHelper = new THREE.AxesHelper(100); //红色代表 X 轴. 绿色代表 Y 轴. 蓝色代表 Z 轴\r\n let rootGroupModel = GetRootGroupModel(scene);\r\n rootGroupModel.add(axesHelper);\r\n}\r\n\r\n//创建地面\r\nexport function InitGround(scene) {\r\n var groundGeometry = new THREE.PlaneGeometry(10000, 10000);\r\n var groundMaterial = new THREE.ShadowMaterial({ color: 0xfefbfb, side: THREE.DoubleSide, roughness: 1, normalScale: 0.5 });\r\n var ground = new THREE.Mesh(groundGeometry, groundMaterial);\r\n ground.rotation.x = -Math.PI / 2;\r\n ground.position.set(0, 0, 0);\r\n ground.name = \"rootGround\";\r\n // ground.receiveShadow = true;\r\n ground.visible = true;\r\n scene.ground = ground;\r\n ground.cloneShadowMaterial = groundMaterial;\r\n let rootGroupModel = GetRootGroupModel(scene);\r\n rootGroupModel.add(ground);\r\n}\r\n\r\n//初始化光线\r\nexport function InitLight(scene) {\r\n let rootGroupModel = GetRootGroupModel(scene);\r\n //环境光\r\n var ambientLight = new THREE.AmbientLight(0xffffff, 0.8);\r\n rootGroupModel.add(ambientLight);\r\n scene.ambientLight = ambientLight;\r\n\r\n const dir_z_light = new THREE.DirectionalLight(0xffffff, 0.5);\r\n dir_z_light.position.set(0, 1, 1);\r\n // 解决暗影 0.00 <---> 0.05 最好的区间\r\n dir_z_light.shadow.bias = 0.05; // 平面\r\n dir_z_light.shadow.normalBias = 0.05; // 圆形表面,缩小受影响的网格,使其不会在自身上投射阴影\r\n rootGroupModel.add(dir_z_light);\r\n // const shadowCameraHelper = new THREE.CameraHelper(dir_z_light.shadow.camera); // 可视化阴影相机\r\n // _Engine.scene.add(shadowCameraHelper);\r\n}\r\n\r\n//初始化透视相机\r\nexport function InitPerCamera(scene) {\r\n if (!scene.perCamera) {\r\n var perCamera = new THREE.PerspectiveCamera(50, window.innerWidth / window.innerHeight, 0.01, 30000); //透视相机\r\n perCamera.position.set(1000, 500, 1000); //设置相机位置\r\n perCamera.lookAt(scene.position); //设置相机方向(指向的场景对象)\r\n scene.perCamera = perCamera;\r\n }\r\n return scene.perCamera;\r\n}\r\n\r\n//初始化正交相机\r\nexport function InitOrthCamera(scene) {\r\n if (!scene.perCamera) {\r\n console.error(\"透视相机不存在\");\r\n return null;\r\n }\r\n if (!scene.orthCamera) {\r\n //1.计算透视相机到场景 scene 的深度距离 depth\r\n let target = scene.position.clone();\r\n let camPos = scene.perCamera.position.clone();\r\n let depth = camPos.sub(target).length();\r\n\r\n //2.得到透视相机的宽高比和垂直可视角度\r\n let aspect = scene.perCamera.aspect;\r\n let fov = scene.perCamera.fov;\r\n\r\n //3.根据上述变量计算正交投影相机的视口矩形\r\n let top_ortho = depth * Math.atan(((Math.PI / 180) * fov) / 2);\r\n let right_ortho = top_ortho * aspect;\r\n let bottom_ortho = -top_ortho;\r\n let left_ortho = -right_ortho;\r\n\r\n //4.最后创建正交投影相机\r\n let near = scene.perCamera.near;\r\n let far = scene.perCamera.far;\r\n scene.orthCamera = new THREE.OrthographicCamera(left_ortho, right_ortho, top_ortho, bottom_ortho, near, far);\r\n }\r\n return scene.orthCamera;\r\n}\r\n\r\n//初始化渲染器\r\nexport function InitRenender(dom) {\r\n var width = dom.clientWidth; //窗口宽度\r\n var height = dom.clientHeight; //窗口高度\r\n var renderer = new THREE.WebGLRenderer({\r\n // powerPreference: \"high-performance\",\r\n alpha: true,\r\n antialias: true,\r\n preserveDrawingBuffer: true, //保留图形缓冲区\r\n logarithmicDepthBuffer: true // 设置对数深度缓冲区,优化深度冲突问题\r\n }); //创建渲染器\r\n // renderer.setPixelRatio(window.devicePixelRatio);\r\n renderer.setSize(width, height); //设置渲染区域尺寸\r\n // renderer.setClearColor(0xb9d3ff, 1); //设置背景颜色\r\n renderer.setClearAlpha(0); //设置背景颜色透明\r\n renderer.shadowMap.enabled = true;\r\n renderer.shadowMap.type = THREE.PCFSoftShadowMap;\r\n renderer.localClippingEnabled = true;\r\n renderer.domElement.className = \"user-select-none\";\r\n return renderer;\r\n}\r\n\r\n\r\n//初始化Orbit控制器\r\nexport function InitOrbitControl(_Engine, camera, renderer) {\r\n //轨道控制 镜头的移动\r\n let controls = new THREE.OrbitControls(_Engine, camera, renderer.domElement);\r\n return controls;\r\n}\r\n\r\n//初始化Transform控制器\r\nexport function InitTransformControl(_Engine, camera, renderer) {\r\n let controls = new THREE.TransformControls(camera, renderer.domElement); //创建Transform控制器\r\n controls.name = \"TransformControls\";\r\n controls.visible = false;\r\n let rootGroupModel = _Engine.GetRootGroupModel();\r\n rootGroupModel.add(controls); //控制器添加到场景中\r\n}\r\n\r\n//初始背景图场景\r\nexport function InitBackgroundScene(scene) {\r\n new RGBELoader().setPath(\"cosApi/static/textures/\").load(\"kloofendal_43d_clear_puresky_4k.hdr\", function (texture) {\r\n texture.mapping = THREE.EquirectangularReflectionMapping;\r\n // scene.background = texture; //背景图\r\n scene.environment = texture; //环境图\r\n });\r\n}\r\n\r\n//其他内容初始化\r\nexport function InitOthers(dom, renderer) {\r\n dom.appendChild(renderer.domElement); //渲染到浏览器\r\n}\r\n\r\n//定义物体\r\nexport function setGeometrys() {\r\n //创建形状 BoxGeometry\r\n var geometry = new THREE.BoxGeometry(1, 1, 1);\r\n var cubeMaterial = [\r\n //右\r\n new THREE.MeshLambertMaterial({ color: 0xffffff, side: THREE.DoubleSide }),\r\n //左\r\n new THREE.MeshBasicMaterial({ map: new THREE.TextureLoader().load(\"images/2.png\"), side: THREE.DoubleSide }),\r\n //上\r\n new THREE.MeshBasicMaterial({ map: new THREE.TextureLoader().load(\"images/3.png\"), side: THREE.DoubleSide }),\r\n //下\r\n new THREE.MeshBasicMaterial({ map: new THREE.TextureLoader().load(\"images/4.png\"), side: THREE.DoubleSide }),\r\n //前\r\n new THREE.MeshBasicMaterial({ map: new THREE.TextureLoader().load(\"images/5.png\"), side: THREE.DoubleSide }),\r\n //后\r\n new THREE.MeshBasicMaterial({ map: new THREE.TextureLoader().load(\"images/6.png\"), side: THREE.DoubleSide })\r\n ];\r\n //创建材料 wireframe是否使用线条\r\n //var material = new THREE.MeshBasicMaterial({color:0xFFFFFF,wireframe:true});\r\n var material = new THREE.MeshFaceMaterial(cubeMaterial);\r\n\r\n //将材料和形状结合\r\n var cube = new THREE.Mesh(geometry, material);\r\n\r\n //物体加入场景中\r\n scene.add(cube);\r\n}\r\n\r\n// 获得根部group模型,用于承载除了用于展示的模型以外的模型(如灯光、控制器、相机、地面等等)\r\nexport function GetRootGroupModel(scene) {\r\n let index = scene.children.findIndex(o => o.name == \"rootGroup\");\r\n let rootGroupModel = index > -1 ? scene.children[index] : null;\r\n if (!rootGroupModel) {\r\n rootGroupModel = new THREE.Group();\r\n rootGroupModel.name = \"rootGroup\";\r\n scene.add(rootGroupModel);\r\n }\r\n return rootGroupModel;\r\n}\r\n","// 视图小方块\r\nimport \"./index.css\";\r\nimport TWEEN from \"@tweenjs/tween.js\";\r\nimport * as THREE from 'three';\r\nimport { InitOthers, InitScene } from \"./InitThreejsSence.js\";\r\n// import { SetDeviceStyle } from \"@/views/tools/style/deviceStyleSet.js\";\r\n\r\n// 图片资源URL - 从public文件夹引用 \r\nexport function ViewCubeTool(engine, scene, domid) {\r\n // require(\"@/views/tools/style/\" + SetDeviceStyle() + \"/mainstyle.scss\"); \r\n var _viewCube = new Object();\r\n _viewCube.visible = true;\r\n let AnimationFrame = null;\r\n let dom; //根部dom节点\r\n let domattr;\r\n let boundaryModels = []; // 参与方位矩形点击的模型\r\n _viewCube.init = function () {\r\n if (!dom) {\r\n CreateUI(); // 创建UI\r\n CreateSecne(); // 创建方位操作场景,并添加到dom节点中\r\n CreateDirectionBox(); // 在方位操作场景中创建模型 - 方位立方体\r\n }\r\n };\r\n _viewCube.Hide = function () {\r\n dom.style.display = \"none\";\r\n _viewCube.visible = false;\r\n };\r\n _viewCube.Show = function () {\r\n dom.style.display = \"block\";\r\n _viewCube.visible = true;\r\n };\r\n\r\n //渲染场景更新\r\n _viewCube.RenderScene = function () {\r\n //先转动\r\n _viewCube.camera.quaternion.copy(scene.camera.quaternion); //Quaternion(表示对象局部旋转的四元数)\r\n let pLocal = new THREE.Vector3(0, 0, -1);\r\n let pWorld = pLocal.clone().applyMatrix4(scene.camera.matrixWorld.clone());\r\n let direction = scene.camera.position.clone().sub(pWorld.clone()).setLength(100);\r\n //坐标设置\r\n _viewCube.camera.position.copy(direction);\r\n //注视原点\r\n _viewCube.camera.lookAt(new THREE.Vector3());\r\n _viewCube.sceneOrtho.renderer.render(_viewCube.sceneOrtho, _viewCube.camera); //执行渲染操作\r\n };\r\n\r\n /**\r\n * 切换视图方位\r\n * @param {String} dir 方向 top/down/front/left/back/right/top_front/top_left/top_back/top_right/down_front/down_left/down_back/down_right/front_right/right_back/back_left/left_front/top_left_front/top_front_right/top_right_back/top_back_left/button_left_front/button_front_right/button_right_back/button_back_left\r\n */\r\n _viewCube.ToggleDirectionView = function (dir) {\r\n console.log(dir);\r\n //面\r\n var normal = new THREE.Vector3(0, 0, 0);\r\n if (dir == \"top\") {\r\n normal = new THREE.Vector3(0, 1, 0);\r\n } else if (dir == \"down\") {\r\n normal = new THREE.Vector3(0, -1, 0);\r\n } else if (dir == \"front\") {\r\n normal = new THREE.Vector3(0, 0, 1);\r\n } else if (dir == \"left\") {\r\n normal = new THREE.Vector3(-1, 0, 0);\r\n } else if (dir == \"back\") {\r\n normal = new THREE.Vector3(0, 0, -1);\r\n } else if (dir == \"right\") {\r\n normal = new THREE.Vector3(1, 0, 0);\r\n }\r\n //线\r\n else if (dir == \"top_front\") {\r\n normal = new THREE.Vector3(1, 1, 0);\r\n } else if (dir == \"top_left\") {\r\n normal = new THREE.Vector3(0, 1, -1);\r\n } else if (dir == \"top_back\") {\r\n normal = new THREE.Vector3(-1, 1, 0);\r\n } else if (dir == \"top_right\") {\r\n normal = new THREE.Vector3(0, 1, 1);\r\n } else if (dir == \"down_front\") {\r\n normal = new THREE.Vector3(1, -1, 0);\r\n } else if (dir == \"down_left\") {\r\n normal = new THREE.Vector3(0, -1, -1);\r\n } else if (dir == \"down_back\") {\r\n normal = new THREE.Vector3(-1, -1, 0);\r\n } else if (dir == \"down_right\") {\r\n normal = new THREE.Vector3(0, -1, 1);\r\n } else if (dir == \"front_right\") {\r\n normal = new THREE.Vector3(1, 0, 1);\r\n } else if (dir == \"right_back\") {\r\n normal = new THREE.Vector3(-1, 0, 1);\r\n } else if (dir == \"back_left\") {\r\n normal = new THREE.Vector3(-1, 0, -1);\r\n } else if (dir == \"left_front\") {\r\n normal = new THREE.Vector3(1, 0, -1);\r\n }\r\n //点\r\n else if (dir == \"top_left_front\") {\r\n normal = new THREE.Vector3(1, 1, -1);\r\n } else if (dir == \"top_front_right\") {\r\n normal = new THREE.Vector3(1, 1, 1);\r\n } else if (dir == \"top_right_back\") {\r\n normal = new THREE.Vector3(-1, 1, 1);\r\n } else if (dir == \"top_back_left\") {\r\n normal = new THREE.Vector3(-1, 1, -1);\r\n } else if (dir == \"button_left_front\") {\r\n normal = new THREE.Vector3(1, -1, -1);\r\n } else if (dir == \"button_front_right\") {\r\n normal = new THREE.Vector3(1, -1, 1);\r\n } else if (dir == \"button_right_back\") {\r\n normal = new THREE.Vector3(-1, 1, 1);\r\n } else if (dir == \"button_back_left\") {\r\n normal = new THREE.Vector3(-1, -1, -1);\r\n }\r\n var box = engine.octreeBox.getBoundingBox()\r\n var min = box.min;\r\n var max = box.max;\r\n var target = min.clone().add(max.clone()).multiplyScalar(0.5);\r\n var tergetCamera = target.clone().add(normal.multiplyScalar(1 * max.distanceTo(min)));\r\n\r\n animateCamera(scene.camera.position, tergetCamera, engine.controls.target.clone(), target);\r\n };\r\n //获取相机姿态\r\n _viewCube.GetCameraPose = function () {\r\n //获取当前相机参数\r\n var quaternion = scene.camera.quaternion; //Quaternion(表示对象局部旋转的四元数)\r\n var position = scene.camera.position; //获取相机位置\r\n var target = engine.controls.target; //获取目标点\r\n ////相机基本满足 自身坐标 target 旋转值\r\n var cameraData = {\r\n quaternion: quaternion,\r\n position: position,\r\n target: target\r\n };\r\n return cameraData;\r\n };\r\n //还原相机姿态\r\n _viewCube.ReductionCameraPose = function (cameraData, time = 1000, callback) {\r\n //先转动\r\n var quaternion = new THREE.Quaternion(\r\n cameraData.quaternion._x,\r\n cameraData.quaternion._y,\r\n cameraData.quaternion._z,\r\n cameraData.quaternion._w\r\n );\r\n var position = new THREE.Vector3(cameraData.position.x, cameraData.position.y, cameraData.position.z);\r\n var target = new THREE.Vector3(cameraData.target.x, cameraData.target.y, cameraData.target.z);\r\n let isBack = false;\r\n animateCamera(\r\n scene.camera.position,\r\n position,\r\n engine.controls.target.clone(),\r\n target,\r\n scene.camera.quaternion,\r\n quaternion,\r\n time,\r\n res => {\r\n if (callback) {\r\n if (!isBack) {\r\n callback(res);\r\n isBack = true;\r\n }\r\n }\r\n }\r\n );\r\n if (callback) {\r\n setTimeout(() => {\r\n if (!isBack) {\r\n callback(true);\r\n isBack = true;\r\n }\r\n }, time + 10);\r\n }\r\n };\r\n //相机回归正位\r\n _viewCube.CameraGoHome = function () {\r\n var box = engine.octreeBox.getBoundingBox() \r\n console.log(box.min,box.max)\r\n var target = box.min.clone().add(box.max.clone()).multiplyScalar(0.5);\r\n let dir = new THREE.Vector3(1, 1, 1);\r\n var tergetCamera = target.clone().add(dir.multiplyScalar(1 * box.max.distanceTo(box.min)));\r\n animateCamera(scene.camera.position, tergetCamera, engine.controls.target.clone(), target);\r\n //相机运动\r\n };\r\n \r\n // 缩放到指定盒子\r\n _viewCube.zoomToBox = function (box) {\r\n var target = box.min.clone().add(box.max.clone()).multiplyScalar(0.5);\r\n // 当前相机面向的方向\r\n let currentDirection = scene.camera.position.clone().sub(engine.controls.target.clone()).normalize();\r\n let dir = currentDirection\r\n var tergetCamera = target.clone().add(dir.multiplyScalar(1 * box.max.distanceTo(box.min)));\r\n animateCamera(scene.camera.position, tergetCamera, engine.controls.target.clone(), target);\r\n };\r\n\r\n\r\n //相机平滑跳转\r\n // current1 相机当前的位置\r\n // target1 相机的目标位置\r\n // current2 当前的controls的target\r\n // target2 新的controls的target\r\n // current3 相机当前quaternion\r\n // target3 相机的目标quaternion\r\n function animateCamera(current1, target1, current2, target2, current3, target3, time = 1000, callback) {\r\n var tween;\r\n if (current3 && target3) {\r\n tween = new TWEEN.Tween({\r\n x1: current1.x, // 相机当前位置x\r\n y1: current1.y, // 相机当前位置y\r\n z1: current1.z, // 相机当前位置z\r\n x2: current2.x, // 控制当前的中心点x\r\n y2: current2.y, // 控制当前的中心点y\r\n z2: current2.z, // 控制当前的中心点z\r\n _x: current3._x, // 相机当前quaternion\r\n _y: current3._y, // 相机当前quaternion\r\n _z: current3._z, // 相机当前quaternion\r\n _w: current3._w // 相机当前quaternion\r\n });\r\n tween.to(\r\n {\r\n x1: target1.x, // 新的相机位置x\r\n y1: target1.y, // 新的相机位置y\r\n z1: target1.z, // 新的相机位置z\r\n x2: target2.x, // 新的控制中心点位置x\r\n y2: target2.y, // 新的控制中心点位置x\r\n z2: target2.z, // 新的控制中心点位置x\r\n _x: target3._x, // 新的相机quaternion\r\n _y: target3._y, // 新的相机quaternion\r\n _z: target3._z, // 新的相机quaternion\r\n _w: target3._w // 新的相机quaternion\r\n },\r\n time\r\n );\r\n } else {\r\n tween = new TWEEN.Tween({\r\n x1: current1.x, // 相机当前位置x\r\n y1: current1.y, // 相机当前位置y\r\n z1: current1.z, // 相机当前位置z\r\n x2: current2.x, // 控制当前的中心点x\r\n y2: current2.y, // 控制当前的中心点y\r\n z2: current2.z // 控制当前的中心点z\r\n });\r\n tween.to(\r\n {\r\n x1: target1.x, // 新的相机位置x\r\n y1: target1.y, // 新的相机位置y\r\n z1: target1.z, // 新的相机位置z\r\n x2: target2.x, // 新的控制中心点位置x\r\n y2: target2.y, // 新的控制中心点位置x\r\n z2: target2.z // 新的控制中心点位置x\r\n },\r\n time\r\n );\r\n }\r\n tween.onUpdate(function (res) {\r\n if (current3 && target3) {\r\n scene.camera.quaternion._x = res._x;\r\n scene.camera.quaternion._y = res._y;\r\n scene.camera.quaternion._z = res._z;\r\n scene.camera.quaternion._w = res._w;\r\n } else {\r\n engine.controls.auto = true;\r\n }\r\n scene.camera.position.x = res.x1;\r\n scene.camera.position.y = res.y1;\r\n scene.camera.position.z = res.z1;\r\n engine.controls.target.x = res.x2;\r\n engine.controls.target.y = res.y2;\r\n engine.controls.target.z = res.z2;\r\n engine.controls.update();\r\n _viewCube.RenderScene();\r\n });\r\n tween.onComplete(function (res) {\r\n engine.controls.auto = false;\r\n _viewCube.RenderScene();\r\n callback && callback(true);\r\n cancelAnimationFrame(AnimationFrame); //清除动画\r\n AnimationFrame = null;\r\n });\r\n tween.easing(TWEEN.Easing.Cubic.InOut);\r\n\r\n function animate(time) {\r\n AnimationFrame = requestAnimationFrame(animate);\r\n tween.update();\r\n }\r\n tween.start();\r\n animate();\r\n }\r\n\r\n // 创建UI\r\n function CreateUI() {\r\n // 创建根元素\r\n dom = document.createElement(\"div\");\r\n dom.className = \"ViewCube\";\r\n domid.appendChild(dom);\r\n\r\n // 创建根元素\r\n domattr = document.createElement(\"div\");\r\n domattr.className = \"viewSettingWrapper\";\r\n domattr.innerHTML = \"...\";\r\n dom.appendChild(domattr);\r\n\r\n // 创建home初始位置按钮并添加点击事件\r\n var home = document.createElement(\"div\");\r\n home.className = \"homeViewWrapper\";\r\n home.addEventListener(\"mousedown\", function () {\r\n console.log(\"归位\")\r\n _viewCube.CameraGoHome();\r\n });\r\n dom.appendChild(home);\r\n\r\n // 创建视图切换按钮(正交/透视)\r\n const cameraToggle = document.createElement(\"div\");\r\n cameraToggle.className = \"cameraToggleWrapper\";\r\n cameraToggle.title = \"切换正交/透视视图\";\r\n cameraToggle.innerHTML = \"⊞\";\r\n cameraToggle.addEventListener(\"mousedown\", function (e) {\r\n e.stopPropagation();\r\n console.log(\"切换视图\");\r\n _viewCube.ToggleCameraType();\r\n closeAllButton();\r\n });\r\n dom.appendChild(cameraToggle);\r\n\r\n // 创建截图按钮\r\n const screenshot = document.createElement(\"div\");\r\n screenshot.className = \"screenshotWrapper\";\r\n screenshot.title = \"截图\";\r\n screenshot.innerHTML = \"📷\";\r\n screenshot.addEventListener(\"mousedown\", function (e) {\r\n e.stopPropagation();\r\n console.log(\"截图\");\r\n _viewCube.TakeScreenshot();\r\n closeAllButton();\r\n \r\n });\r\n dom.appendChild(screenshot);\r\n\r\n // 创建全屏按钮\r\n const fullscreen = document.createElement(\"div\");\r\n fullscreen.className = \"fullscreenWrapper\";\r\n fullscreen.title = \"全屏\";\r\n fullscreen.innerHTML = \"⛶\";\r\n fullscreen.addEventListener(\"mousedown\", function (e) {\r\n e.stopPropagation();\r\n console.log(\"全屏\");\r\n _viewCube.ToggleFullscreen();\r\n closeAllButton();\r\n });\r\n dom.appendChild(fullscreen);\r\n\r\n // 点击设置按钮切换功能按钮的显示/隐藏\r\n domattr.addEventListener(\"mousedown\", function (e) {\r\n e.stopPropagation();\r\n const isShowing = cameraToggle.classList.contains('show');\r\n\r\n if (isShowing) {\r\n closeAllButton();\r\n console.log(\"隐藏功能按钮\");\r\n } else {\r\n showAllButton();\r\n console.log(\"显示功能按钮\");\r\n }\r\n });\r\n\r\n function closeAllButton() {\r\n cameraToggle.classList.remove('show');\r\n screenshot.classList.remove('show');\r\n fullscreen.classList.remove('show');\r\n }\r\n function showAllButton() {\r\n cameraToggle.classList.add('show');\r\n screenshot.classList.add('show');\r\n fullscreen.classList.add('show');\r\n }\r\n\r\n }\r\n\r\n // 创建场景 - 方位操作场景\r\n function CreateSecne() {\r\n //创建场景\r\n _viewCube.sceneOrtho = InitScene();\r\n var width = domid.clientWidth; //窗口宽度\r\n var height = domid.clientWidth; //窗口高度\r\n var aspect = width > height ? width / height : height / width; //窗口宽高比\r\n\r\n // 创建相机 \r\n var frustumSize = 300; //三维场景显示范围控制系数,系数越大,显示的范围越大\r\n _viewCube.camera = new THREE.OrthographicCamera(\r\n (frustumSize * aspect) / -2,\r\n (frustumSize * aspect) / 2,\r\n (frustumSize) / 2,\r\n (frustumSize) / -2,\r\n 0.01,\r\n 10000\r\n );\r\n var width = dom.clientWidth; //视口宽度\r\n var height = dom.clientHeight; //视口高度\r\n //初始化渲染器\r\n var renderer = new THREE.WebGLRenderer({\r\n alpha: true\r\n }); //创建渲染器\r\n renderer.setSize(width, height); //设置渲染区域尺寸\r\n renderer.setClearAlpha(0);\r\n _viewCube.sceneOrtho.renderer = renderer;\r\n //环境光的颜色以及强弱\r\n let ambientLight = new THREE.AmbientLight(0xffffff, 0.8);\r\n _viewCube.sceneOrtho.add(ambientLight);\r\n //渲染到指定dom节点中\r\n InitOthers(dom, renderer);\r\n }\r\n\r\n // 创建模型 - 方位立方体\r\n function CreateDirectionBox() {\r\n // 使用public文件夹中的图片资源\r\n const baseUrl = '/assets/viewcube/';\r\n let OrientList = [\r\n {\r\n label: \"右\",\r\n icon: baseUrl + 'cn_right.png'\r\n },\r\n {\r\n label: \"左\",\r\n icon: baseUrl + 'cn_left.png'\r\n },\r\n {\r\n label: \"顶\",\r\n icon: baseUrl + 'cn_top.png'\r\n },\r\n {\r\n label: \"底\",\r\n icon: baseUrl + 'cn_bottom.png'\r\n },\r\n {\r\n label: \"前\",\r\n icon: baseUrl + 'cn_front.png'\r\n },\r\n {\r\n label: \"后\",\r\n icon: baseUrl + 'cn_back.png'\r\n }\r\n ];\r\n\r\n \r\n\r\n var materialArr = [];\r\n for (const item of OrientList) {\r\n materialArr.push(\r\n new THREE.MeshBasicMaterial({\r\n color: 0xffffff,\r\n map: new THREE.TextureLoader().load(item.icon)\r\n })\r\n );\r\n }\r\n // const geometry = new THREE.BoxGeometry(1, 1, 1);\r\n const material = new THREE.MeshLambertMaterial({\r\n color: 0x0000ff\r\n });\r\n var viewBox = new THREE.Mesh(new THREE.BoxGeometry(110, 110, 110), materialArr);\r\n // var viewBox = new THREE.Mesh(new THREE.BoxBufferGeometry(130, 130, 130, 1, 1, 1), materialArr); \r\n //添加各个方向的点击面\r\n _viewCube.sceneOrtho.add(viewBox);\r\n AddClickPlane(122); //添加各个方向的点击面\r\n //点击事件\r\n dom.addEventListener(\"mousedown\", evt => {\r\n var pointer = {};\r\n pointer.x = (evt.offsetX / dom.clientWidth) * 2 - 1;\r\n pointer.y = -(evt.offsetY / dom.clientHeight) * 2 + 1;\r\n var raycaster = new THREE.Raycaster();\r\n raycaster.setFromCamera(pointer, _viewCube.camera);\r\n const intersects = raycaster.intersectObjects(boundaryModels, false);\r\n if (intersects.length > 0) { \r\n _viewCube.ToggleDirectionView(intersects[0].object.name);\r\n }\r\n });\r\n // 鼠标移动高亮事件\r\n dom.addEventListener(\"mousemove\", evt => {\r\n var pointer = {};\r\n pointer.x = (evt.offsetX / dom.clientWidth) * 2 - 1;\r\n pointer.y = -(evt.offsetY / dom.clientHeight) * 2 + 1;\r\n var raycaster = new THREE.Raycaster();\r\n raycaster.setFromCamera(pointer, _viewCube.camera);\r\n const intersects = raycaster.intersectObjects(boundaryModels, false);\r\n //先将其他的材质归0;\r\n for (var obj of boundaryModels) {\r\n obj.material.opacity = 0.01;\r\n }\r\n if (intersects.length > 0) {\r\n intersects[0].object.material.opacity = 0.2;\r\n }\r\n });\r\n }\r\n\r\n //添加各个方向的点击面\r\n function AddClickPlane(size) {\r\n var newsize = size * 0.5 - 20; \r\n //绘制6个面\r\n var faces = [\r\n {\r\n name: \"right\",\r\n a: 30,\r\n b: 75,\r\n c: 75,\r\n point: new THREE.Vector3(newsize, 0, 0)\r\n },\r\n {\r\n name: \"back\",\r\n a: 75,\r\n b: 75,\r\n c: 30,\r\n point: new THREE.Vector3(0, 0, -newsize)\r\n },\r\n {\r\n name: \"left\",\r\n a: 30,\r\n b: 75,\r\n c: 75,\r\n point: new THREE.Vector3(-newsize, 0, 0)\r\n },\r\n {\r\n name: \"front\",\r\n a: 75,\r\n b: 75,\r\n c: 30,\r\n point: new THREE.Vector3(0, 0, newsize)\r\n },\r\n {\r\n name: \"top\",\r\n a: 75,\r\n b: 30,\r\n c: 75,\r\n point: new THREE.Vector3(0, newsize, 0)\r\n },\r\n {\r\n name: \"button\",\r\n a: 75,\r\n b: 30,\r\n c: 75,\r\n point: new THREE.Vector3(0, -newsize, 0)\r\n }\r\n ];\r\n //绘制8个点\r\n var points = [\r\n {\r\n name: \"top_right_back\",\r\n a: 30,\r\n b: 30,\r\n c: 30,\r\n point: new THREE.Vector3(-newsize, newsize, newsize)\r\n },\r\n {\r\n name: \"button_front_right\",\r\n a: 30,\r\n b: 30,\r\n c: 30,\r\n point: new THREE.Vector3(-newsize, -newsize, newsize)\r\n },\r\n {\r\n name: \"top_front_right\",\r\n a: 30,\r\n b: 30,\r\n c: 30,\r\n point: new THREE.Vector3(newsize, newsize, newsize)\r\n },\r\n {\r\n name: \"button_right_back\",\r\n a: 30,\r\n b: 30,\r\n c: 30,\r\n point: new THREE.Vector3(newsize, -newsize, newsize)\r\n },\r\n {\r\n name: \"top_back_left\",\r\n a: 30,\r\n b: 30,\r\n c: 30,\r\n point: new THREE.Vector3(-newsize, newsize, -newsize)\r\n },\r\n {\r\n name: \"button_back_left\",\r\n a: 30,\r\n b: 30,\r\n c: 30,\r\n point: new THREE.Vector3(-newsize, -newsize, -newsize)\r\n },\r\n {\r\n name: \"top_left_front\",\r\n a: 30,\r\n b: 30,\r\n c: 30,\r\n point: new THREE.Vector3(newsize, newsize, -newsize)\r\n },\r\n {\r\n name: \"button_left_front\",\r\n a: 30,\r\n b: 30,\r\n c: 30,\r\n point: new THREE.Vector3(newsize, -newsize, -newsize)\r\n }\r\n ];\r\n //绘制12条线\r\n var edges = [\r\n {\r\n name: \"top_front\",\r\n a: 30,\r\n b: 30,\r\n c: 75,\r\n point: new THREE.Vector3(newsize, newsize, 0)\r\n },\r\n {\r\n name: \"top_right\",\r\n a: 75,\r\n b: 30,\r\n c: 30,\r\n point: new THREE.Vector3(0, newsize, newsize)\r\n },\r\n {\r\n name: \"top_back\",\r\n a: 30,\r\n b: 30,\r\n c: 75,\r\n point: new THREE.Vector3(-newsize, newsize, 0)\r\n },\r\n {\r\n name: \"top_left\",\r\n a: 75,\r\n b: 30,\r\n c: 30,\r\n point: new THREE.Vector3(0, newsize, -newsize)\r\n },\r\n {\r\n name: \"button_front\",\r\n a: 30,\r\n b: 30,\r\n c: 75,\r\n point: new THREE.Vector3(newsize, -newsize, 0)\r\n },\r\n {\r\n name: \"button_right\",\r\n a: 75,\r\n b: 30,\r\n c: 30,\r\n point: new THREE.Vector3(0, -newsize, newsize)\r\n },\r\n {\r\n name: \"button_back\",\r\n a: 30,\r\n b: 30,\r\n c: 75,\r\n point: new THREE.Vector3(-newsize, -newsize, 0)\r\n },\r\n {\r\n name: \"button_left\",\r\n a: 75,\r\n b: 30,\r\n c: 30,\r\n point: new THREE.Vector3(0, -newsize, -newsize)\r\n },\r\n {\r\n name: \"front_right\",\r\n a: 30,\r\n b: 75,\r\n c: 30,\r\n point: new THREE.Vector3(newsize, 0, newsize)\r\n },\r\n {\r\n name: \"right_back\",\r\n a: 30,\r\n b: 75,\r\n c: 30,\r\n point: new THREE.Vector3(-newsize, 0, newsize)\r\n },\r\n {\r\n name: \"back_left\",\r\n a: 30,\r\n b: 75,\r\n c: 30,\r\n point: new THREE.Vector3(-newsize, 0, -newsize)\r\n },\r\n {\r\n name: \"left_front\",\r\n a: 30,\r\n b: 75,\r\n c: 30,\r\n point: new THREE.Vector3(newsize, 0, -newsize)\r\n }\r\n ];\r\n for (var i = 0; i < faces.length; i++) {\r\n boundaryModels.push(CreatorCube(faces[i]));\r\n }\r\n for (var i = 0; i < points.length; i++) {\r\n boundaryModels.push(CreatorCube(points[i]));\r\n }\r\n for (var i = 0; i < edges.length; i++) {\r\n boundaryModels.push(CreatorCube(edges[i]));\r\n }\r\n }\r\n\r\n function CreatorCube(item) {\r\n const geometry = new THREE.BoxGeometry(item.a, item.b, item.c);\r\n const material = new THREE.MeshBasicMaterial({\r\n color: \"blue\",\r\n transparent: true,\r\n opacity: 0.01\r\n });\r\n\t// 创建一个平移矩阵\r\n\tconst translationMatrix = new THREE.Matrix4().makeTranslation(item.point.x, item.point.y, item.point.z);\r\n\tlet newgeometry = geometry.applyMatrix4(translationMatrix)\r\n\tlet mesh = new THREE.Mesh(newgeometry, material);\r\n\tmesh.name = item.name;\r\n\t// 将平移矩阵应用到网格\r\n\t_viewCube.sceneOrtho.add(mesh);\r\n return mesh;\r\n }\r\n\r\n // 切换相机类型(正交/透视)\r\n _viewCube.ToggleCameraType = function () {\r\n engine.cameraModule.switchCurrentCamera();\r\n };\r\n\r\n // 截图功能\r\n _viewCube.TakeScreenshot = function () {\r\n try {\r\n if (!engine.renderer) {\r\n console.error(\"渲染器未初始化\");\r\n return;\r\n }\r\n\r\n // 渲染当前场景\r\n engine.renderer.render(scene, scene.camera);\r\n\r\n // 获取canvas并转换为图片\r\n const canvas = engine.renderer.domElement;\r\n const dataURL = canvas.toDataURL('image/png');\r\n\r\n // 创建下载链接\r\n const link = document.createElement('a');\r\n const timestamp = new Date().toISOString().replaceAll(/[:.]/g, '-');\r\n link.download = `screenshot_${timestamp}.png`;\r\n link.href = dataURL;\r\n link.click();\r\n\r\n console.log(\"截图已保存\");\r\n } catch (error) {\r\n console.error(\"截图失败:\", error);\r\n }\r\n };\r\n\r\n // 全屏功能\r\n _viewCube.ToggleFullscreen = function () {\r\n const element = domid || document.documentElement;\r\n\r\n if (!document.fullscreenElement &&\r\n !document.webkitFullscreenElement &&\r\n !document.mozFullScreenElement &&\r\n !document.msFullscreenElement) {\r\n // 进入全屏\r\n if (element.requestFullscreen) {\r\n element.requestFullscreen();\r\n } else if (element.webkitRequestFullscreen) {\r\n element.webkitRequestFullscreen();\r\n } else if (element.mozRequestFullScreen) {\r\n element.mozRequestFullScreen();\r\n } else if (element.msRequestFullscreen) {\r\n element.msRequestFullscreen();\r\n }\r\n console.log(\"已进入全屏模式\");\r\n } else {\r\n // 退出全屏\r\n if (document.exitFullscreen) {\r\n document.exitFullscreen();\r\n } else if (document.webkitExitFullscreen) {\r\n document.webkitExitFullscreen();\r\n } else if (document.mozCancelFullScreen) {\r\n document.mozCancelFullScreen();\r\n } else if (document.msExitFullscreen) {\r\n document.msExitFullscreen();\r\n }\r\n console.log(\"已退出全屏模式\");\r\n }\r\n };\r\n\r\n return _viewCube;\r\n}\r\n","import * as THREE from 'three'; \r\n\r\nimport {ViewCubeTool} from './viewCubeTool.js';\r\n\r\nexport class ViewCube{\r\n private engine: any;\r\n public cubeTool: any;\r\n constructor(engine: any){\r\n this.engine = engine;\r\n } \r\n public init(){ \r\n this.cubeTool = ViewCubeTool(this.engine, this.engine.scene, this.engine.container) as any;\r\n this.cubeTool.init();\r\n }\r\n // 相机回归正位\r\n public CameraGoHome(){\r\n this.cubeTool.CameraGoHome();\r\n }\r\n // 缩放到指定模型\r\n public zoomToModel(box: any){\r\n this.cubeTool.zoomToBox(box);\r\n }\r\n}","import * as THREE from 'three';\r\n// 获取八叉树组件\r\nexport function OctreeBox(engine) {\r\n\tlet _octreeBox = new Object(); \r\n\t// 获取全场景的大小包围盒\r\n\t_octreeBox.getBoundingBox = function() {\r\n\t\t// 获取所有模型\r\n\t\tlet models = engine.models;\r\n\t\t// 便利每个模型下面的所有mesh\r\n\t\tlet min = new THREE.Vector3(100000000, 1000000000, 10000000000)\r\n\t\tlet max = new THREE.Vector3(-100000000, -1000000000, -10000000000)\r\n\t\tmodels.forEach(model => {\r\n\t\t\tlet c_min = model.boundingBox.min\r\n\t\t\tlet c_max = model.boundingBox.max \r\n\t\t\tif (c_min.x < min.x) {\r\n\t\t\t\tmin.x = c_min.x\r\n\t\t\t}\r\n\t\t\tif (c_min.y < min.y) {\r\n\t\t\t\tmin.y = c_min.y\r\n\t\t\t}\r\n\t\t\tif (c_min.z < min.z) {\r\n\t\t\t\tmin.z = c_min.z\r\n\t\t\t}\r\n\t\t\tif (c_max.x > max.x) {\r\n\t\t\t\tmax.x = c_max.x\r\n\t\t\t}\r\n\t\t\tif (c_max.y > max.y) {\r\n\t\t\t\tmax.y = c_max.y\r\n\t\t\t}\r\n\t\t\tif (c_max.z > max.z) {\r\n\t\t\t\tmax.z = c_max.z\r\n\t\t\t}\r\n\t\t})\r\n\r\n\r\n\t\tlet minx = Math.min(min.x,max.x)\r\n\t\tlet miny = Math.min(min.y,max.y)\r\n\t\tlet minz = Math.min(min.z,max.z)\r\n\r\n\t\tlet maxx = Math.max(min.x,max.x)\r\n\t\tlet maxy = Math.max(min.y,max.y)\r\n\t\tlet maxz = Math.max(min.z,max.z)\r\n\t\t \r\n\t\treturn {\r\n\t\t\tmin: new THREE.Vector3(minx,miny,minz),\r\n\t\t\tmax: new THREE.Vector3(maxx,maxy,maxz),\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\r\n\r\n\t//循环迭代,获取射线选中的目标\r\n\t_octreeBox.rayInterationModel = function(rayCaster) {\r\n let hiddenModels = []; \r\n\t\tlet meshs = [];\r\n\t\tvar pickBoxElementIds = [];\r\n\t\tengine.engineStatus.models.forEach(model => {\r\n\t\t\tmodel.info.lods.forEach(node => {\r\n\t\t\t let ocbox =\tnode.octreeBox\r\n\t\t\t\tRecurrentIteration(rayCaster,ocbox,model)\r\n\t\t\t});\r\n\t\t});\r\n \r\n\t\t// 获取盒子 \r\n\t\tconst intersects = rayCaster.intersectObjects(meshs, false);\r\n\t\treturn intersects;\r\n\t\t//循环迭代\r\n\t\tfunction RecurrentIteration(rayCaster, box, m) {\r\n\t\t\tif (box == null) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tlet min = new THREE.Vector3(box.min.X*0.3048, box.min.Z*0.3048, -box.min.Y*0.3048);\r\n\t\t\tlet max = new THREE.Vector3(box.max.X*0.3048, box.max.Z*0.3048, -box.max.Y*0.3048);\r\n\r\n\r\n\t\t\tlet min_ = new THREE.Vector3(Math.min(min.x, max.X), Math.min(min.y, max.y), Math.min(min.z, max.z));\r\n\t\t\tlet max_ = new THREE.Vector3(Math.max(max.x, min.x), Math.max(max.y, min.y), Math.max(max.z, min.z));\r\n \r\n\r\n\t\t\tlet ThreeBox = new THREE.Box3(min_, max_);\r\n\t\t\tlet isinter = rayCaster.ray.intersectsBox(ThreeBox);\r\n\t\t\tif (isinter == null || isinter == false) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\t//查询数据\r\n\t\t\tif (box.children == null || box.children.length == 0) {\r\n\t\t\t\tif (box.elements != null) {\r\n\t\t\t\t\tfor (var ele of box.elements) {\r\n\t\t\t\t\t\tlet ids = engine.engineStatus.hideModels.find(item => item.url == m.url)?.ids;\r\n\t\t\t\t\t\tif(ids!=null && ids.includes(ele)){\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tpickBoxElementIds.push(ele); \r\n\t\t\t\t\t\tlet model = engine.models.find(item => item.url == m.url);\r\n\t\t\t\t\t\tlet node = model.nodesMap.get(ele);\r\n\t\t\t\t\t\tif(node!=null){\r\n\t\t\t\t\t\t\tlet meshs_ = node.infos.map(item => item.mesh);\r\n\t\t\t\t\t\t\tmeshs_.forEach(item => {\r\n\t\t\t\t\t\t\t\tmeshs.push(item);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t} \r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif (box.elements != null) {\r\n\t\t\t\t\tfor (var ele of box.elements) {\r\n\t\t\t\t\t\tlet ids = engine.engineStatus.hideModels.find(item => item.url == m.url)?.ids;\r\n\t\t\t\t\t\tif(ids!=null && ids.includes(ele)){\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t} \r\n\t\t\t\t\t\tpickBoxElementIds.push(ele); \r\n\t\t\t\t\t\tlet model = engine.models.find(item => item.url == m.url);\r\n\t\t\t\t\t\tlet node = model.nodesMap.get(ele);\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif(node!=null){\r\n\t\t\t\t\t\t\tlet meshs_ = node.infos.map(item => item.mesh);\r\n\t\t\t\t\t\t\tmeshs_.forEach(item => {\r\n\t\t\t\t\t\t\t\tmeshs.push(item);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tfor (let bbox of box.children) {\r\n\t\t\t\t\tRecurrentIteration(rayCaster, bbox, m);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} \r\n\t\tfunction xyzToVector3(xyz) {\r\n\t\t\treturn new THREE.Vector3(xyz.X*0.3048, xyz.Z*0.3048, -xyz.Y*0.3048);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\treturn _octreeBox\r\n}\r\n\r\n\r\n","import * as THREE from 'three';\r\nimport { WorldToScreen } from '../../../../common/worldToScreen';\r\n\r\n/**\r\n * RangeScale - 范围缩放工具\r\n * \r\n * 功能:\r\n * 1. 用户在屏幕上绘制一个区域(通过鼠标拖拽)\r\n * 2. 将屏幕区域转换为世界坐标\r\n * 3. 计算该区域在世界空间中的包围盒\r\n * 4. 调整相机位置和视角,使该区域适合视口\r\n */\r\nexport class RangeScale {\r\n private engine: any;\r\n \r\n // 绘制状态\r\n private isDrawing: boolean = false;\r\n private startPoint: THREE.Vector2 = new THREE.Vector2();\r\n private endPoint: THREE.Vector2 = new THREE.Vector2();\r\n \r\n // UI绘制框元素\r\n private selectionBox: HTMLDivElement | null = null;\r\n \r\n // 坐标转换工具\r\n private worldToScreen: WorldToScreen | null = null;\r\n \r\n // 事件处理函数绑定(用于后续移除监听器)\r\n private boundMouseDown: (e: MouseEvent) => void;\r\n private boundMouseMove: (e: MouseEvent) => void;\r\n private boundMouseUp: (e: MouseEvent) => void;\r\n private boundKeyDown: (e: KeyboardEvent) => void;\r\n \r\n constructor(engine: any) {\r\n this.engine = engine;\r\n\r\n // 绑定事件处理函数,以便后续可以移除监听器\r\n this.boundMouseDown = this.onMouseDown.bind(this);\r\n this.boundMouseMove = this.onMouseMove.bind(this);\r\n this.boundMouseUp = this.onMouseUp.bind(this);\r\n this.boundKeyDown = this.onKeyDown.bind(this);\r\n }\r\n \r\n /**\r\n * 初始化工具\r\n * 创建绘制框UI元素,初始化坐标转换工具\r\n */\r\n public init() {\r\n // 创建绘制框UI元素\r\n this.createSelectionBoxElement();\r\n \r\n // 初始化坐标转换工具\r\n if (this.engine.scene && this.engine.camera && this.engine.renderer) {\r\n this.worldToScreen = new WorldToScreen(\r\n this.engine.camera,\r\n this.engine.renderer,\r\n this.engine.scene\r\n );\r\n }\r\n }\r\n \r\n /**\r\n * 激活工具\r\n * 禁用控制器,添加鼠标事件监听器和键盘事件监听器\r\n */\r\n public active() {\r\n // 禁用控制器\r\n this.engine.controlModule.disActive();\r\n\r\n // 添加鼠标事件监听器\r\n const canvas = this.engine.renderer?.domElement;\r\n if (canvas) {\r\n canvas.addEventListener('mousedown', this.boundMouseDown);\r\n canvas.addEventListener('mousemove', this.boundMouseMove);\r\n canvas.addEventListener('mouseup', this.boundMouseUp);\r\n // 设置鼠标样式为十字光标,提示用户可以绘制\r\n canvas.style.cursor = 'crosshair';\r\n }\r\n\r\n // 添加键盘事件监听器\r\n window.addEventListener('keydown', this.boundKeyDown);\r\n }\r\n \r\n /**\r\n * 停用工具\r\n * 启用控制器,移除鼠标事件监听器和键盘事件监听器\r\n */\r\n public disActive() {\r\n // 启用控制器\r\n this.engine.controlModule.active();\r\n\r\n // 移除鼠标事件监听器\r\n const canvas = this.engine.renderer?.domElement;\r\n if (canvas) {\r\n canvas.removeEventListener('mousedown', this.boundMouseDown);\r\n canvas.removeEventListener('mousemove', this.boundMouseMove);\r\n canvas.removeEventListener('mouseup', this.boundMouseUp);\r\n // 恢复默认鼠标样式\r\n canvas.style.cursor = 'default';\r\n }\r\n\r\n // 移除键盘事件监听器\r\n window.removeEventListener('keydown', this.boundKeyDown);\r\n\r\n // 如果正在绘制,结束绘制\r\n if (this.isDrawing) {\r\n this.endDrawing();\r\n }\r\n }\r\n \r\n /**\r\n * 创建绘制框UI元素\r\n * 用于在屏幕上显示用户绘制的区域\r\n */\r\n private createSelectionBoxElement() {\r\n this.selectionBox = document.createElement('div');\r\n this.selectionBox.style.position = 'absolute';\r\n this.selectionBox.style.border = '2px dashed #00aaff';\r\n this.selectionBox.style.backgroundColor = 'rgba(0, 170, 255, 0.1)';\r\n this.selectionBox.style.pointerEvents = 'none';\r\n this.selectionBox.style.display = 'none';\r\n this.selectionBox.style.zIndex = '1000';\r\n this.selectionBox.style.boxSizing = 'border-box';\r\n \r\n // 将绘制框添加到canvas的父容器中\r\n const canvas = this.engine.renderer?.domElement;\r\n if (canvas && canvas.parentElement) {\r\n canvas.parentElement.appendChild(this.selectionBox);\r\n }\r\n }\r\n \r\n /**\r\n * 鼠标按下事件处理\r\n * 开始绘制区域\r\n */\r\n private onMouseDown(event: MouseEvent) {\r\n // 只处理左键\r\n if (event.button !== 0) return;\r\n \r\n // 记录起点\r\n const canvas = this.engine.renderer?.domElement;\r\n if (!canvas) return;\r\n \r\n const rect = canvas.getBoundingClientRect();\r\n this.startPoint.set(event.clientX - rect.left, event.clientY - rect.top);\r\n this.endPoint.copy(this.startPoint);\r\n \r\n // 开始绘制\r\n this.isDrawing = true;\r\n \r\n // 显示绘制框\r\n if (this.selectionBox) {\r\n this.selectionBox.style.display = 'block';\r\n this.updateSelectionBoxUI();\r\n }\r\n \r\n // 阻止默认行为\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n \r\n /**\r\n * 鼠标移动事件处理\r\n * 更新绘制框的显示\r\n */\r\n private onMouseMove(event: MouseEvent) {\r\n if (!this.isDrawing) return;\r\n \r\n // 更新终点\r\n const canvas = this.engine.renderer?.domElement;\r\n if (!canvas) return;\r\n \r\n const rect = canvas.getBoundingClientRect();\r\n this.endPoint.set(event.clientX - rect.left, event.clientY - rect.top);\r\n \r\n // 更新绘制框UI\r\n this.updateSelectionBoxUI();\r\n \r\n // 阻止默认行为\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n \r\n /**\r\n * 鼠标释放事件处理\r\n * 结束绘制,执行缩放操作\r\n */\r\n private onMouseUp(event: MouseEvent) {\r\n if (!this.isDrawing) return;\r\n\r\n // 结束绘制并执行缩放\r\n this.endDrawing();\r\n this.performZoom();\r\n\r\n // 阻止默认行为\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n this.disActive();\r\n }\r\n\r\n /**\r\n * 键盘按下事件处理\r\n * 按下 ESC 键时退出功能\r\n */\r\n private onKeyDown(event: KeyboardEvent) {\r\n // 检查是否按下 ESC 键\r\n if (event.key === 'Escape') {\r\n // 退出功能\r\n this.disActive();\r\n\r\n // 阻止默认行为\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n }\r\n\r\n /**\r\n * 结束绘制\r\n * 隐藏绘制框\r\n */\r\n private endDrawing() {\r\n if (!this.isDrawing) return;\r\n\r\n this.isDrawing = false;\r\n\r\n // 隐藏绘制框\r\n if (this.selectionBox) {\r\n this.selectionBox.style.display = 'none';\r\n }\r\n }\r\n \r\n /**\r\n * 更新绘制框UI\r\n * 根据起点和终点更新绘制框的位置和大小\r\n */\r\n private updateSelectionBoxUI() {\r\n if (!this.selectionBox) return;\r\n \r\n const left = Math.min(this.startPoint.x, this.endPoint.x);\r\n const top = Math.min(this.startPoint.y, this.endPoint.y);\r\n const width = Math.abs(this.endPoint.x - this.startPoint.x);\r\n const height = Math.abs(this.endPoint.y - this.startPoint.y);\r\n \r\n this.selectionBox.style.left = `${left}px`;\r\n this.selectionBox.style.top = `${top}px`;\r\n this.selectionBox.style.width = `${width}px`;\r\n this.selectionBox.style.height = `${height}px`;\r\n }\r\n \r\n /**\r\n * 执行缩放操作\r\n * 将屏幕区域转换为世界坐标,计算包围盒,调整相机视角\r\n */\r\n private performZoom() {\r\n // 检查绘制区域是否太小(小于5像素),如果太小则忽略\r\n const width = Math.abs(this.endPoint.x - this.startPoint.x);\r\n const height = Math.abs(this.endPoint.y - this.startPoint.y);\r\n if (width < 5 || height < 5) {\r\n return;\r\n }\r\n \r\n // 如果没有坐标转换工具,无法执行缩放\r\n if (!this.worldToScreen) {\r\n console.warn('RangeScale: 坐标转换工具未初始化');\r\n return;\r\n }\r\n \r\n // 获取绘制区域的四个角点(屏幕坐标)\r\n const minX = Math.min(this.startPoint.x, this.endPoint.x);\r\n const maxX = Math.max(this.startPoint.x, this.endPoint.x);\r\n const minY = Math.min(this.startPoint.y, this.endPoint.y);\r\n const maxY = Math.max(this.startPoint.y, this.endPoint.y);\r\n \r\n // 将屏幕坐标的四个角点转换为世界坐标\r\n // 使用射线检测获取与场景相交的世界坐标点\r\n const worldPoints: THREE.Vector3[] = [];\r\n \r\n // 四个角点\r\n const corners = [\r\n { x: minX, y: minY }, // 左上\r\n { x: maxX, y: minY }, // 右上\r\n { x: maxX, y: maxY }, // 右下\r\n { x: minX, y: maxY } // 左下\r\n ];\r\n \r\n // 将每个角点转换为世界坐标\r\n for (const corner of corners) {\r\n const worldPoint = this.worldToScreen.screenToWorld(corner.x, corner.y);\r\n if (worldPoint) {\r\n worldPoints.push(worldPoint);\r\n }\r\n }\r\n \r\n // 如果无法获取足够的点,尝试使用深度平面方法\r\n if (worldPoints.length < 3) {\r\n // 使用当前相机到场景中心的距离作为深度\r\n const camera = this.engine.camera;\r\n const scene = this.engine.scene;\r\n \r\n // 计算场景的包围盒\r\n const sceneBox = new THREE.Box3();\r\n scene.traverse((object: any) => {\r\n if (object.isMesh && object.visible) {\r\n if (object.geometry) {\r\n object.geometry.computeBoundingBox();\r\n if (object.geometry.boundingBox) {\r\n const box = object.geometry.boundingBox.clone();\r\n box.applyMatrix4(object.matrixWorld);\r\n sceneBox.union(box);\r\n }\r\n }\r\n }\r\n });\r\n \r\n // 如果场景包围盒有效,使用其中心作为参考深度\r\n if (!sceneBox.isEmpty()) {\r\n const center = new THREE.Vector3();\r\n sceneBox.getCenter(center);\r\n const cameraToCenter = center.clone().sub(camera.position);\r\n const depth = cameraToCenter.length();\r\n \r\n // 使用深度平面方法转换四个角点\r\n for (const corner of corners) {\r\n const worldPoint = this.worldToScreen.screenToWorldWithDepth(corner.x, corner.y, depth);\r\n worldPoints.push(worldPoint);\r\n }\r\n } else {\r\n // 如果场景为空,使用默认深度\r\n const defaultDepth = 10;\r\n for (const corner of corners) {\r\n const worldPoint = this.worldToScreen.screenToWorldWithDepth(corner.x, corner.y, defaultDepth);\r\n worldPoints.push(worldPoint);\r\n }\r\n }\r\n }\r\n \r\n // 如果仍然没有足够的点,无法执行缩放\r\n if (worldPoints.length < 3) {\r\n console.warn('RangeScale: 无法将屏幕区域转换为世界坐标');\r\n return;\r\n }\r\n \r\n // 计算世界坐标点的包围盒\r\n const boundingBox = new THREE.Box3();\r\n for (const point of worldPoints) {\r\n boundingBox.expandByPoint(point);\r\n }\r\n \r\n // 如果包围盒无效,无法执行缩放\r\n if (boundingBox.isEmpty()) {\r\n console.warn('RangeScale: 计算得到的包围盒无效');\r\n return;\r\n }\r\n \r\n // 调整相机视角以适应包围盒\r\n this.fitCameraToBoundingBox(boundingBox);\r\n }\r\n \r\n /**\r\n * 调整相机视角以适应包围盒\r\n * @param boundingBox - 要适应的包围盒\r\n */\r\n private fitCameraToBoundingBox(boundingBox: THREE.Box3) {\r\n const camera = this.engine.camera;\r\n const controls = this.engine.controls;\r\n \r\n if (!camera || !controls) {\r\n console.warn('RangeScale: 相机或控制器未初始化');\r\n return;\r\n }\r\n \r\n // 计算包围盒的中心和尺寸\r\n const center = new THREE.Vector3();\r\n boundingBox.getCenter(center);\r\n const size = new THREE.Vector3();\r\n boundingBox.getSize(size);\r\n \r\n // 计算包围盒的最大尺寸\r\n const maxDim = Math.max(size.x, size.y, size.z);\r\n \r\n // 如果是透视相机\r\n if (camera instanceof THREE.PerspectiveCamera) {\r\n // 计算相机到包围盒中心的距离\r\n // 使用视野角度和包围盒尺寸来计算合适的距离\r\n const fov = camera.fov * (Math.PI / 180); // 转换为弧度\r\n const distance = maxDim / (2 * Math.tan(fov / 2));\r\n \r\n // 添加一些边距(20%)\r\n const distanceWithMargin = distance * 1.2;\r\n \r\n // 计算相机的新位置\r\n // 保持当前相机的方向,从中心点沿着当前方向后退\r\n const currentDirection = new THREE.Vector3();\r\n camera.getWorldDirection(currentDirection);\r\n \r\n // 如果当前方向与中心点方向相反,需要调整\r\n const toCenter = center.clone().sub(camera.position);\r\n const dot = currentDirection.dot(toCenter.normalize());\r\n \r\n // 如果相机朝向与中心方向相反,使用相反的方向\r\n if (dot < 0) {\r\n currentDirection.negate();\r\n }\r\n \r\n // 计算新位置:从中心点沿着方向后退\r\n const newPosition = center.clone().sub(currentDirection.multiplyScalar(distanceWithMargin));\r\n \r\n // 更新相机位置和目标\r\n camera.position.copy(newPosition);\r\n if (controls.target) {\r\n controls.target.copy(center);\r\n }\r\n camera.lookAt(center);\r\n \r\n // 更新控制器\r\n controls.update();\r\n } else if (camera instanceof THREE.OrthographicCamera) {\r\n // 如果是正交相机\r\n // 计算合适的正交相机尺寸\r\n const margin = 1.2; // 20%边距\r\n const cameraSize = maxDim * margin;\r\n \r\n // 获取画布宽高比\r\n const canvas = this.engine.renderer?.domElement;\r\n const aspect = canvas ? canvas.width / canvas.height : 1;\r\n \r\n // 更新正交相机的参数\r\n camera.left = -cameraSize * aspect / 2;\r\n camera.right = cameraSize * aspect / 2;\r\n camera.top = cameraSize / 2;\r\n camera.bottom = -cameraSize / 2;\r\n camera.updateProjectionMatrix();\r\n \r\n // 更新相机位置和目标\r\n const currentDirection = new THREE.Vector3();\r\n camera.getWorldDirection(currentDirection);\r\n const distance = maxDim * 1.5;\r\n const newPosition = center.clone().sub(currentDirection.multiplyScalar(distance));\r\n \r\n camera.position.copy(newPosition);\r\n if (controls.target) {\r\n controls.target.copy(center);\r\n }\r\n camera.lookAt(center);\r\n \r\n // 更新控制器\r\n controls.update();\r\n }\r\n }\r\n}\r\n","import * as THREE from 'three';\r\nimport { GTAOPass } from 'three/examples/jsm/postprocessing/GTAOPass.js';\r\n\r\n// 设置功能\r\nexport class Setting{\r\n private engine: any;\r\n private ground: THREE.Mesh | null = null; // 地面对象\r\n\r\n constructor(engine: any){\r\n this.engine = engine;\r\n }\r\n\r\n public init(){\r\n\r\n }\r\n\r\n /**\r\n * 隐藏或显示性能监视器\r\n * @param visible - true显示,false隐藏\r\n */\r\n public setStatsVisible(visible: boolean): void {\r\n if (this.engine.stats?.dom) {\r\n this.engine.stats.dom.style.display = visible ? 'block' : 'none';\r\n }\r\n }\r\n\r\n /**\r\n * 设置环境光照强度\r\n * @param intensity - 光照强度,默认范围 0-5\r\n */\r\n public setAmbientLightIntensity(intensity: number): void {\r\n const ambientLight = this.engine.scene.children.find(\r\n (child: any) => child instanceof THREE.AmbientLight\r\n );\r\n if (ambientLight) {\r\n ambientLight.intensity = intensity;\r\n }\r\n }\r\n\r\n /**\r\n * 设置环境光照颜色\r\n * @param color - 颜色,可以是十六进制数字 (0xffffff) 或字符串 ('#ffffff')\r\n */\r\n public setAmbientLightColor(color: number | string): void {\r\n const ambientLight = this.engine.scene.children.find(\r\n (child: any) => child instanceof THREE.AmbientLight\r\n );\r\n if (ambientLight) {\r\n ambientLight.color.set(color);\r\n }\r\n }\r\n\r\n /**\r\n * 设置定向光源强度\r\n * @param intensity - 光照强度,默认范围 0-5\r\n */\r\n public setDirectionalLightIntensity(intensity: number): void {\r\n const dirLight = this.engine.scene.children.find(\r\n (child: any) => child instanceof THREE.DirectionalLight\r\n );\r\n if (dirLight) {\r\n dirLight.intensity = intensity;\r\n }\r\n }\r\n\r\n /**\r\n * 设置定向光源颜色\r\n * @param color - 颜色,可以是十六进制数字 (0xffffff) 或字符串 ('#ffffff')\r\n */\r\n public setDirectionalLightColor(color: number | string): void {\r\n const dirLight = this.engine.scene.children.find(\r\n (child: any) => child instanceof THREE.DirectionalLight\r\n );\r\n if (dirLight) {\r\n dirLight.color.set(color);\r\n }\r\n }\r\n\r\n /**\r\n * 设置阴影精细度(阴影贴图分辨率)\r\n * @param quality - 质量等级:'low' (1024), 'medium' (2048), 'high' (4096), 'ultra' (8192)\r\n */\r\n public setShadowQuality(quality: 'low' | 'medium' | 'high' | 'ultra'): void {\r\n const dirLight = this.engine.scene.children.find(\r\n (child: any) => child instanceof THREE.DirectionalLight\r\n );\r\n if (dirLight?.shadow) {\r\n const sizeMap: Record<string, number> = {\r\n 'low': 1024,\r\n 'medium': 2048,\r\n 'high': 4096,\r\n 'ultra': 8192\r\n };\r\n const size = sizeMap[quality];\r\n dirLight.shadow.mapSize.width = size;\r\n dirLight.shadow.mapSize.height = size;\r\n dirLight.shadow.map?.dispose();\r\n dirLight.shadow.map = null;\r\n }\r\n }\r\n\r\n /**\r\n * 设置是否开启定向光阴影\r\n * @param enabled - true开启,false关闭\r\n */\r\n public setDirectionalLightShadow(enabled: boolean): void {\r\n const dirLight = this.engine.scene.children.find(\r\n (child: any) => child instanceof THREE.DirectionalLight\r\n );\r\n if (dirLight) {\r\n dirLight.castShadow = enabled;\r\n }\r\n\r\n // 同时控制渲染器的阴影映射\r\n if (this.engine.renderer) {\r\n this.engine.renderer.shadowMap.enabled = enabled;\r\n }\r\n }\r\n\r\n /**\r\n * 设置是否开启GTAO阴影(环境光遮蔽)\r\n * @param enabled - true开启,false关闭\r\n */\r\n public setGTAOEnabled(enabled: boolean): void {\r\n if (!this.engine.composerModule?.composer) {\r\n console.warn('Composer not initialized');\r\n return;\r\n }\r\n\r\n const composer = this.engine.composerModule.composer;\r\n const gtaoPass = composer.passes.find((pass: any) => pass instanceof GTAOPass);\r\n\r\n if (enabled) {\r\n // 如果要开启但不存在,则创建并添加\r\n if (gtaoPass) {\r\n gtaoPass.enabled = true;\r\n } else {\r\n const { width, height } = this.engine.deviceModule.getContainerSize();\r\n const newGtaoPass = new GTAOPass(\r\n this.engine.scene,\r\n this.engine.camera,\r\n width,\r\n height\r\n );\r\n newGtaoPass.output = GTAOPass.OUTPUT.Default;\r\n newGtaoPass.blendIntensity = 0.5;\r\n\r\n if (newGtaoPass.updateGtaoMaterial) {\r\n newGtaoPass.updateGtaoMaterial({\r\n radius: 1,\r\n distanceExponent: 1,\r\n thickness: 1,\r\n scale: 1,\r\n distanceFallOff: 1,\r\n screenSpaceRadius: true\r\n });\r\n }\r\n\r\n // 在renderPass之后插入\r\n const renderPassIndex = composer.passes.findIndex(\r\n (pass: any) => pass.constructor.name === 'RenderPass'\r\n );\r\n composer.passes.splice(renderPassIndex + 1, 0, newGtaoPass);\r\n }\r\n } else if (gtaoPass) {\r\n gtaoPass.enabled = false;\r\n }\r\n }\r\n\r\n /**\r\n * 设置场景饱和度\r\n * @param saturation - 饱和度值,1.0为正常,>1增强,<1降低,推荐范围 0.5-2.0\r\n */\r\n public setSceneSaturation(saturation: number): void {\r\n if (!this.engine.composerModule?.saturationPass) {\r\n console.warn('Saturation pass not initialized');\r\n return;\r\n }\r\n\r\n this.engine.composerModule.saturationPass.uniforms['saturation'].value = saturation;\r\n }\r\n\r\n /**\r\n * 设置场景对比度\r\n * @param contrast - 对比度值,1.0为正常,>1增强,<1降低,推荐范围 0.5-2.0\r\n */\r\n public setSceneContrast(contrast: number): void {\r\n if (!this.engine.composerModule?.saturationPass) {\r\n console.warn('Saturation pass not initialized');\r\n return;\r\n }\r\n\r\n this.engine.composerModule.saturationPass.uniforms['contrast'].value = contrast;\r\n }\r\n\r\n /**\r\n * 设置是否开启地面\r\n * @param enabled - true开启,false关闭\r\n * @param options - 地面配置选项\r\n */\r\n public setGroundEnabled(\r\n enabled: boolean,\r\n options?: {\r\n size?: number;\r\n color?: number | string;\r\n opacity?: number;\r\n }\r\n ): void {\r\n if (enabled) {\r\n // 如果地面不存在,则创建\r\n if (this.ground) {\r\n // 如果已存在,则显示\r\n this.ground.visible = true;\r\n } else {\r\n const size = options?.size ?? 100;\r\n const color = options?.color ?? 0x808080;\r\n const opacity = options?.opacity ?? 0.3;\r\n\r\n const geometry = new THREE.PlaneGeometry(size, size);\r\n const material = new THREE.MeshStandardMaterial({\r\n color: color,\r\n transparent: true,\r\n opacity: opacity,\r\n side: THREE.DoubleSide\r\n });\r\n\r\n this.ground = new THREE.Mesh(geometry, material);\r\n this.ground.rotation.x = -Math.PI / 2;\r\n this.ground.position.y = 0;\r\n this.ground.receiveShadow = true;\r\n this.ground.name = 'ground';\r\n\r\n this.engine.scene.add(this.ground);\r\n }\r\n } else if (this.ground) {\r\n // 隐藏地面\r\n this.ground.visible = false;\r\n }\r\n }\r\n\r\n /**\r\n * 设置HDR背景\r\n * @param hdrTexture - HDR环境贴图(THREE.Texture),传入null则移除背景\r\n */\r\n public setHDRBackground(hdrTexture: THREE.Texture | null): void {\r\n if (hdrTexture) {\r\n this.engine.scene.background = hdrTexture;\r\n this.engine.scene.environment = hdrTexture;\r\n } else {\r\n this.engine.scene.background = null;\r\n this.engine.scene.environment = null;\r\n }\r\n }\r\n}\r\n","export function guid() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\r\n var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n}","\r\nimport { WorldToScreen } from \"../../../../common/worldToScreen\"; \r\nimport * as THREE from 'three';\r\nimport { HandelBehaved } from \"../../status/handelBehaved\";\r\n\r\nimport { guid } from \"../../../../common/guid\";\r\n// 一些绘制功能类\r\nclass Tools {\r\n private engine: any;\r\n private handelBehaved: any;\r\n constructor(engine: any) {\r\n this.engine = engine;\r\n this.handelBehaved = HandelBehaved(engine); \r\n this.handelBehaved.init(this, null);\r\n }\r\n\r\n active() { \r\n this.handelBehaved.active();\r\n }\r\n\r\n disActive() {\r\n this.handelBehaved.disActive();\r\n }\r\n\r\n // 取消当前选中的标注\r\n cancelCurrentSelectedAnnotation() {\r\n // 遍历所有标注,取消选中\r\n let annotationData: any = this.engine.measure.annotationData;\r\n for(let key in annotationData) {\r\n annotationData[key].forEach((item: any) => {\r\n if(item.highlight == true) {\r\n item.highlight = false;\r\n item.container.classList.remove(\"Hight\");\r\n item.container.getElementsByTagName(\"svg\")[0].classList.remove(\"Hight\");\r\n } \r\n });\r\n }\r\n\r\n }\r\n\r\n\r\n // 监听按下esc\r\n handelKeyEscDown() { \r\n this.cancelCurrentSelectedAnnotation();\r\n\r\n let annotationData: any = this.engine.measure.annotationData;\r\n for(let key in annotationData) {\r\n // for,倒序遍历,删除\r\n for(let i = annotationData[key].length - 1; i >= 0; i--) {\r\n let item = annotationData[key][i];\r\n if(item.isSelect == true) {\r\n item.container.remove();\r\n annotationData[key].splice(i, 1);\r\n }\r\n } \r\n } \r\n\r\n // 调用相应的功能,清空points\r\n this.engine.measure.clearAllPoints();\r\n }\r\n\r\n // 监听按下delete\r\n handelKeyDeleteDown() {\r\n // 获取当前选中的标注\r\n let annotationData: any = this.engine.measure.annotationData;\r\n for(let key in annotationData) {\r\n // for,倒序遍历,删除\r\n for(let i = annotationData[key].length - 1; i >= 0; i--) {\r\n let item = annotationData[key][i];\r\n if(item.highlight == true) {\r\n item.container.remove();\r\n annotationData[key].splice(i, 1);\r\n }\r\n } \r\n } \r\n }\r\n \r\n public clearHighlight() {\r\n // 遍历所有标注,取消选中\r\n let annotationData: any = this.engine.measure.annotationData;\r\n for(let key in annotationData) {\r\n annotationData[key].forEach((item: any) => {\r\n item.highlight = false;\r\n item.container.classList.remove(\"Hight\");\r\n item.container.getElementsByTagName(\"svg\")[0].classList.remove(\"Hight\");\r\n });\r\n }\r\n }\r\n\r\n\r\n // 绘制普通标注\r\n public drawNormalAnnotation() {\r\n let this_ = this; \r\n // 获取所有需要绘制的元素\r\n let normalAnnotationsData = this.engine.measure.annotationData.normalAnnotation; \r\n let index = 0;\r\n normalAnnotationsData.forEach((item: any) => {\r\n renderNormalAnnotation(item); \r\n index++;\r\n })\r\n\r\n let elevationAnnotationsData = this.engine.measure.annotationData.elevationAnnotation; \r\n elevationAnnotationsData.forEach((item: any) => {\r\n renderElevationAnnotation(item); \r\n index++;\r\n })\r\n \r\n let coordinateAnnotationsData = this.engine.measure.annotationData.coordinateAnnotation; \r\n coordinateAnnotationsData.forEach((item: any) => {\r\n renderCoordinateAnnotation(item); \r\n index++;\r\n })\r\n\r\n let angleAnnotationsData = this.engine.measure.annotationData.angleAnnotation; \r\n angleAnnotationsData.forEach((item: any) => {\r\n renderAngleAnnotation(item); \r\n index++;\r\n })\r\n\r\n let areaAnnotationsData = this.engine.measure.annotationData.areaAnnotation; \r\n areaAnnotationsData.forEach((item: any) => {\r\n renderAreaAnnotation(item); \r\n index++;\r\n })\r\n\r\n let slopeAnnotationsData = this.engine.measure.annotationData.slopeAnnotation; \r\n slopeAnnotationsData.forEach((item: any) => {\r\n renderSlopeAnnotation(item); \r\n index++;\r\n })\r\n\r\n\r\n // 绘制角度标注\r\n function renderAngleAnnotation(item: any) {\r\n // 首先查找是否已经有了该元素\r\n if(item.container == null) {\r\n // html - 绘制三个点、两条线和角度文本\r\n let html = [\r\n '<svg class=\"measureSvg\">',\r\n '<circle cx=\"50\" cy=\"50\" r=\"5\" fill=\"#f99d0b\" />', // 起点\r\n '<circle cx=\"50\" cy=\"50\" r=\"5\" fill=\"#f99d0b\" />', // 顶点\r\n '<circle cx=\"50\" cy=\"50\" r=\"5\" fill=\"#f99d0b\" />', // 终点\r\n '<polyline stroke=\"orange\" stroke-width=\"2\" points=\"0,0 0,0\" style=\"fill: none; opacity: 1;\"/>', // 起点到顶点的线\r\n '<polyline stroke=\"orange\" stroke-width=\"2\" points=\"0,0 0,0\" style=\"fill: none; opacity: 1;\"/>', // 顶点到终点的线\r\n '<rect x=\"0\" y=\"0\" width=\"80\" height=\"25\" class=\"measureBack\" />',\r\n '<text x=\"40\" y=\"16\" text-anchor=\"middle\" class=\"measureLabel\">' + item.text + '</text>', \r\n '</svg>'\r\n ].join(\"\")\r\n \r\n item.container = document.createElement('div');\r\n item.container.className = 'angle-annotation';\r\n item.container.id = item.id;\r\n item.container.style.pointerEvents = 'none';\r\n item.container.innerHTML = html;\r\n this_.engine.measure.annotationContainer.appendChild(item.container); \r\n // 监听点击事件 \r\n item.container.getElementsByTagName(\"svg\")[0].addEventListener(\"click\", function() {\r\n // 清除其他的标注线高亮 \r\n this_.clearHighlight();\r\n item.container.getElementsByTagName(\"svg\")[0].classList.add(\"Hight\"); \r\n item.highlight = true;\r\n }); \r\n } \r\n \r\n // 更新位置\r\n // 将三个点的世界坐标转换为屏幕坐标\r\n let p1_s = new WorldToScreen(this_.engine.camera, this_.engine.renderer, this_.engine.scene).worldToScreen(item.point1); // 起点\r\n let p2_s = new WorldToScreen(this_.engine.camera, this_.engine.renderer, this_.engine.scene).worldToScreen(item.point2); // 顶点\r\n let p3_s = new WorldToScreen(this_.engine.camera, this_.engine.renderer, this_.engine.scene).worldToScreen(item.point3); // 终点\r\n \r\n let dom = item.container;\r\n // 更新三个圆圈的位置\r\n dom.getElementsByTagName(\"circle\")[0].setAttribute(\"cx\", p1_s.x);\r\n dom.getElementsByTagName(\"circle\")[0].setAttribute(\"cy\", p1_s.y);\r\n dom.getElementsByTagName(\"circle\")[1].setAttribute(\"cx\", p2_s.x);\r\n dom.getElementsByTagName(\"circle\")[1].setAttribute(\"cy\", p2_s.y);\r\n dom.getElementsByTagName(\"circle\")[2].setAttribute(\"cx\", p3_s.x);\r\n dom.getElementsByTagName(\"circle\")[2].setAttribute(\"cy\", p3_s.y);\r\n \r\n // 更新两条线的位置\r\n // 第一条线:起点到顶点\r\n dom.getElementsByTagName(\"polyline\")[0].setAttribute(\"points\", p1_s.x + \",\" + p1_s.y + \" \" + p2_s.x + \",\" + p2_s.y);\r\n // 第二条线:顶点到终点\r\n dom.getElementsByTagName(\"polyline\")[1].setAttribute(\"points\", p2_s.x + \",\" + p2_s.y + \" \" + p3_s.x + \",\" + p3_s.y);\r\n \r\n // 更新角度文本的位置(显示在顶点附近,稍微偏移)\r\n let textX = p2_s.x;\r\n let textY = p2_s.y - 30; // 在顶点上方30像素\r\n dom.getElementsByTagName(\"rect\")[0].setAttribute(\"x\", textX - 40);\r\n dom.getElementsByTagName(\"rect\")[0].setAttribute(\"y\", textY - 12.5);\r\n dom.getElementsByTagName(\"text\")[0].setAttribute(\"x\", textX);\r\n dom.getElementsByTagName(\"text\")[0].setAttribute(\"y\", textY + 4);\r\n \r\n // 更新文本内容\r\n dom.getElementsByTagName(\"text\")[0].innerHTML = item.text;\r\n dom.style.top = 0 + \"px\";\r\n dom.style.left = 0 + \"px\";\r\n\r\n \r\n }\r\n \r\n // 绘制面积标注\r\n function renderAreaAnnotation(item: any) {\r\n // 首先查找是否已经有了该元素\r\n if(item.container == null) {\r\n // html - 绘制多个点、闭合多边形和面积文本\r\n let html = [\r\n '<svg class=\"measureSvg\">',\r\n '<polygon fill=\"rgba(255, 165, 0, 0.3)\" stroke=\"orange\" stroke-width=\"2\" points=\"\" style=\"opacity: 0.3;\"/>', // 填充区域\r\n '<polyline stroke=\"orange\" stroke-width=\"2\" points=\"\" style=\"fill: none; opacity: 1;\"/>', // 边界线\r\n '<rect x=\"0\" y=\"0\" width=\"80\" height=\"25\" class=\"measureBack\" />',\r\n '<text x=\"40\" y=\"16\" text-anchor=\"middle\" class=\"measureLabel\">' + item.text + '</text>', \r\n '</svg>'\r\n ].join(\"\")\r\n \r\n item.container = document.createElement('div');\r\n item.container.className = 'area-annotation';\r\n item.container.id = item.id;\r\n item.container.innerHTML = html;\r\n this_.engine.measure.annotationContainer.appendChild(item.container); \r\n // 监听点击事件\r\n item.container.getElementsByTagName(\"svg\")[0].addEventListener(\"click\", function() {\r\n // 清除其他的标注线高亮 \r\n this_.clearHighlight();\r\n item.container.getElementsByTagName(\"svg\")[0].classList.add(\"Hight\"); \r\n item.highlight = true;\r\n });\r\n } \r\n \r\n // 更新位置\r\n // 至少需要3个点才能绘制面积\r\n if (!item.points || item.points.length < 3) {\r\n return;\r\n }\r\n \r\n // 将多个点的世界坐标转换为屏幕坐标\r\n let screenPoints: any[] = [];\r\n let centerX = 0;\r\n let centerY = 0;\r\n \r\n for (let i = 0; i < item.points.length; i++) {\r\n let p_s = new WorldToScreen(this_.engine.camera, this_.engine.renderer, this_.engine.scene).worldToScreen(item.points[i]);\r\n screenPoints.push(p_s);\r\n centerX += p_s.x;\r\n centerY += p_s.y;\r\n }\r\n \r\n // 计算中心点(用于显示文本)\r\n centerX = centerX / screenPoints.length;\r\n centerY = centerY / screenPoints.length;\r\n \r\n // 构建点的字符串(用于polygon和polyline)\r\n let pointsStr = screenPoints.map(p => p.x + \",\" + p.y).join(\" \");\r\n \r\n let dom = item.container;\r\n // 更新多边形填充区域\r\n dom.getElementsByTagName(\"polygon\")[0].setAttribute(\"points\", pointsStr);\r\n // 更新边界线\r\n dom.getElementsByTagName(\"polyline\")[0].setAttribute(\"points\", pointsStr);\r\n \r\n // 更新面积文本的位置(显示在中心点)\r\n let textX = centerX;\r\n let textY = centerY;\r\n dom.getElementsByTagName(\"rect\")[0].setAttribute(\"x\", textX - 40);\r\n dom.getElementsByTagName(\"rect\")[0].setAttribute(\"y\", textY - 12.5);\r\n dom.getElementsByTagName(\"text\")[0].setAttribute(\"x\", textX);\r\n dom.getElementsByTagName(\"text\")[0].setAttribute(\"y\", textY + 4);\r\n \r\n // 更新文本内容\r\n dom.getElementsByTagName(\"text\")[0].innerHTML = item.text;\r\n dom.style.top = 0 + \"px\";\r\n dom.style.left = 0 + \"px\";\r\n }\r\n \r\n // 绘制坡度标注\r\n function renderSlopeAnnotation(item: any) {\r\n // 首先查找是否已经有了该元素\r\n if(item.container == null) {\r\n // html - 绘制两个点、一条带箭头的线和坡度文本\r\n let html = [\r\n '<svg class=\"measureSvg\">',\r\n '<defs>',\r\n '<marker id=\"slope-arrow-' + item.id + '\" markerWidth=\"10\" markerHeight=\"10\" refX=\"9\" refY=\"3\" orient=\"auto\" markerUnits=\"strokeWidth\">',\r\n '<path d=\"M0,0 L0,6 L9,3 z\" fill=\"orange\" stroke=\"orange\" />', // 箭头形状\r\n '</marker>',\r\n '</defs>', \r\n '<polyline stroke=\"orange\" stroke-width=\"2\" points=\"0,0 0,0\" marker-end=\"url(#slope-arrow-' + item.id + ')\" style=\"fill: none; opacity: 1;\"/>', // 起点到终点的线,带箭头\r\n '<rect x=\"0\" y=\"0\" width=\"100\" height=\"25\" class=\"measureBack\" />',\r\n '<text x=\"50\" y=\"16\" text-anchor=\"middle\" class=\"measureLabel\">' + item.text + '</text>', \r\n '</svg>'\r\n ].join(\"\")\r\n \r\n item.container = document.createElement('div');\r\n item.container.className = 'slope-annotation';\r\n item.container.id = item.id;\r\n item.container.innerHTML = html;\r\n this_.engine.measure.annotationContainer.appendChild(item.container); \r\n // 监听点击事件\r\n item.container.getElementsByTagName(\"svg\")[0].addEventListener(\"click\", function() {\r\n // 清除其他的标注线高亮 \r\n this_.clearHighlight();\r\n item.container.getElementsByTagName(\"svg\")[0].classList.add(\"Hight\"); \r\n item.highlight = true;\r\n });\r\n } \r\n // 更新位置\r\n // 将两个点的世界坐标转换为屏幕坐标\r\n let p1_s = new WorldToScreen(this_.engine.camera, this_.engine.renderer, this_.engine.scene).worldToScreen(item.point1); // 起点\r\n let p2_s = new WorldToScreen(this_.engine.camera, this_.engine.renderer, this_.engine.scene).worldToScreen(item.point2); // 终点\r\n \r\n let dom = item.container; \r\n \r\n // 更新线的位置\r\n dom.getElementsByTagName(\"polyline\")[0].setAttribute(\"points\", p1_s.x + \",\" + p1_s.y + \" \" + p2_s.x + \",\" + p2_s.y);\r\n \r\n // 更新坡度文本的位置(显示在线的中点)\r\n let textX = (p1_s.x + p2_s.x) / 2;\r\n let textY = (p1_s.y + p2_s.y) / 2 - 30; // 在线上方30像素\r\n dom.getElementsByTagName(\"rect\")[0].setAttribute(\"x\", textX - 50);\r\n dom.getElementsByTagName(\"rect\")[0].setAttribute(\"y\", textY - 12.5);\r\n dom.getElementsByTagName(\"text\")[0].setAttribute(\"x\", textX);\r\n dom.getElementsByTagName(\"text\")[0].setAttribute(\"y\", textY + 4);\r\n \r\n // 更新文本内容\r\n dom.getElementsByTagName(\"text\")[0].innerHTML = item.text;\r\n dom.style.top = 0 + \"px\";\r\n dom.style.left = 0 + \"px\";\r\n }\r\n \r\n // 绘制坐标标注\r\n function renderCoordinateAnnotation(item: any) {\r\n if(item.container == null) {\r\n // SVG不设置固定尺寸,使用CSS中的measureSvg类来设置尺寸(1920x1080)\r\n // 这样SVG可以覆盖整个屏幕,元素可以使用屏幕坐标\r\n let html = [\r\n '<svg class=\"measureSvg\">',\r\n '<circle cx=\"0\" cy=\"0\" r=\"5\" fill=\"#f99d0b\" />',\r\n '<rect x=\"0\" y=\"-25\" width=\"100\" height=\"25\" class=\"measureBack\" />',\r\n '<text x=\"40\" y=\"-11\" text-anchor=\"middle\" class=\"measureLabel\">' + item.textX + '</text>', \r\n '<rect x=\"0\" y=\"-10\" width=\"100\" height=\"25\" class=\"measureBack\" />',\r\n '<text x=\"40\" y=\"25\" text-anchor=\"middle\" class=\"measureLabel\">' + item.textY + '</text>', \r\n '<rect x=\"0\" y=\"10\" width=\"100\" height=\"25\" class=\"measureBack\" />',\r\n '<text x=\"40\" y=\"51\" text-anchor=\"middle\" class=\"measureLabel\">' + item.textZ + '</text>', \r\n '</svg>'\r\n ].join(\"\")\r\n\r\n item.container = document.createElement('div');\r\n item.container.className = 'coordinate-annotation';\r\n item.container.id = item.id;\r\n // 设置绝对定位,使 top 和 left 偏移生效\r\n item.container.style.position = 'absolute';\r\n item.container.style.pointerEvents = 'none';\r\n item.container.innerHTML = html;\r\n this_.engine.measure.annotationContainer.appendChild(item.container); \r\n\r\n // 监听点击事件\r\n item.container.getElementsByTagName(\"svg\")[0].addEventListener(\"click\", function() {\r\n // 清除其他的标注线高亮 \r\n this_.clearHighlight();\r\n item.container.getElementsByTagName(\"svg\")[0].classList.add(\"Hight\"); \r\n item.highlight = true;\r\n });\r\n }\r\n\r\n // 更新位置\r\n let dom = item.container;\r\n // 将世界坐标转换为屏幕坐标\r\n let p_s = new WorldToScreen(this_.engine.camera, this_.engine.renderer, this_.engine.scene).worldToScreen(item.point);\r\n \r\n // 容器位置设置为(0, 0),因为SVG使用屏幕坐标系统\r\n dom.style.top = \"0px\"\r\n\t\t\tdom.style.left = \"0px\" \r\n\r\n // 更新圆圈位置,直接使用屏幕坐标,使其显示在坐标点上\r\n let circle = dom.getElementsByTagName(\"circle\")[0];\r\n if(circle) {\r\n circle.setAttribute(\"cx\", p_s.x);\r\n circle.setAttribute(\"cy\", p_s.y);\r\n }\r\n\r\n // 更新标注框的位置,在坐标点右下方偏移10px\r\n let rects = dom.getElementsByTagName(\"rect\");\r\n let texts = dom.getElementsByTagName(\"text\");\r\n\r\n let offset = -55;\r\n // 第一个rect(X坐标)\r\n if(rects[0]) {\r\n rects[0].setAttribute(\"x\", p_s.x + 10);\r\n rects[0].setAttribute(\"y\", p_s.y + 10 + offset);\r\n }\r\n if(texts[0]) {\r\n texts[0].setAttribute(\"x\", p_s.x + 10 + 40 );\r\n texts[0].setAttribute(\"y\", p_s.y + 10 + 16 + offset);\r\n }\r\n // 第二个rect(Y坐标)\r\n if(rects[1]) {\r\n rects[1].setAttribute(\"x\", p_s.x + 10);\r\n rects[1].setAttribute(\"y\", p_s.y + 10 + 30 + offset);\r\n }\r\n if(texts[1]) {\r\n texts[1].setAttribute(\"x\", p_s.x + 10 + 40 );\r\n texts[1].setAttribute(\"y\", p_s.y + 10 + 46 + offset);\r\n }\r\n // 第三个rect(Z坐标)\r\n if(rects[2]) {\r\n rects[2].setAttribute(\"x\", p_s.x + 10);\r\n rects[2].setAttribute(\"y\", p_s.y + 10 + 60 + offset);\r\n }\r\n if(texts[2]) {\r\n texts[2].setAttribute(\"x\", p_s.x + 10 + 40);\r\n texts[2].setAttribute(\"y\", p_s.y + 10 + 76 + offset);\r\n }\r\n\r\n // 更新文本内容\r\n if(texts[0]) texts[0].innerHTML = item.textX;\r\n if(texts[1]) texts[1].innerHTML = item.textY;\r\n if(texts[2]) texts[2].innerHTML = item.textZ;\r\n \r\n } \r\n // 绘制标高标注\r\n function renderElevationAnnotation(item: any) {\r\n if(item.container == null) {\r\n let html = [\r\n '<svg width=\"100\" height=\"50\" class=\"measureSvg\">',\r\n '<rect x=\"0\" y=\"0\" width=\"80\" height=\"25\" class=\"measureBack\" />',\r\n '<text x=\"40\" y=\"16\" text-anchor=\"middle\" class=\"measureLabel\">' + item.text + '</text>',\r\n '<polyline stroke=\"#f99d0b\" stroke-width=\"2\" points=\"80,32 0,32 16,48 32,32\" style=\"fill: none; opacity: 1;\"/>',\r\n '</svg>'\r\n ].join(\"\")\r\n\r\n item.container = document.createElement('div');\r\n item.container.className = 'elevation-annotation';\r\n item.container.id = item.id;\r\n // 设置绝对定位,使 top 和 left 偏移生效\r\n item.container.style.position = 'absolute';\r\n item.container.style.pointerEvents = 'none';\r\n item.container.innerHTML = html;\r\n this_.engine.measure.annotationContainer.appendChild(item.container); \r\n\r\n // 监听点击事件\r\n item.container.getElementsByTagName(\"svg\")[0].addEventListener(\"click\", function() {\r\n // 清除其他的标注线高亮 \r\n this_.clearHighlight();\r\n item.container.getElementsByTagName(\"svg\")[0].classList.add(\"Hight\"); \r\n item.highlight = true;\r\n });\r\n }\r\n\r\n // 更新位置\r\n let dom = item.container;\r\n let p_s = new WorldToScreen(this_.engine.camera, this_.engine.renderer, this_.engine.scene).worldToScreen(item.point);\r\n \r\n\r\n dom.style.top = (p_s.y - 48) + \"px\"\r\n\t\t\tdom.style.left = (p_s.x - 16) + \"px\" \r\n\r\n dom.getElementsByTagName(\"text\")[0].innerHTML = item.text;\r\n } \r\n // 渲染普通标注\r\n function renderNormalAnnotation(item: any) {\r\n // 首先查找是否已经有了改元素\r\n if(item.container == null) {\r\n // html \r\n let html = [\r\n '<svg class=\"measureSvg\">',\r\n '<circle cx=\"50\" cy=\"50\" r=\"5\" fill=\"#f99d0b\" />',\r\n '<circle cx=\"50\" cy=\"50\" r=\"5\" fill=\"#f99d0b\" />',\r\n '<polyline stroke=\"orange\" stroke-width=\"2\" points=\"80,32 0,32\" style=\"fill: none; opacity: 1;\"/>',\r\n '<rect x=\"0\" y=\"0\" width=\"80\" height=\"25\" class=\"measureBack\" />',\r\n '<text x=\"40\" y=\"16\" text-anchor=\"middle\" class=\"measureLabel\">' + item.text + '</text>', \r\n '</svg>'\r\n ].join(\"\")\r\n \r\n item.container = document.createElement('div');\r\n item.container.className = 'normal-annotation';\r\n item.container.id = item.id;\r\n item.container.innerHTML = html;\r\n this_.engine.measure.annotationContainer.appendChild(item.container); \r\n // 监听点击事件\r\n item.container.getElementsByTagName(\"svg\")[0].addEventListener(\"click\", function() {\r\n // 清除其他的标注线高亮 \r\n this_.clearHighlight();\r\n item.container.getElementsByTagName(\"svg\")[0].classList.add(\"Hight\"); \r\n item.highlight = true;\r\n });\r\n } \r\n // 更新位置\r\n \r\n // 先更新两个点的位置\r\n let p_s = new WorldToScreen(this_.engine.camera, this_.engine.renderer, this_.engine.scene).worldToScreen(item.point1);\r\n let p_e = new WorldToScreen(this_.engine.camera, this_.engine.renderer, this_.engine.scene).worldToScreen(item.point2);\r\n \r\n \r\n \r\n let dom = item.container;\r\n dom.getElementsByTagName(\"polyline\")[0].setAttribute(\"points\", p_s.x + \",\" + p_s.y + \" \" + p_e.x + \",\" + p_e.y)\r\n\t\t\t\r\n\t\t\tdom.getElementsByTagName(\"circle\")[0].setAttribute(\"cx\",p_s.x)\r\n\t\t\tdom.getElementsByTagName(\"circle\")[0].setAttribute(\"cy\",p_s.y)\r\n\t\t\t\r\n\t\t\tdom.getElementsByTagName(\"circle\")[1].setAttribute(\"cx\",p_e.x)\r\n\t\t\tdom.getElementsByTagName(\"circle\")[1].setAttribute(\"cy\",p_e.y)\r\n\t\t\t\r\n\t\t\tdom.getElementsByTagName(\"rect\")[0].setAttribute(\"x\", p_s.x*0.5+p_e.x*0.5-40)\r\n\t\t\tdom.getElementsByTagName(\"rect\")[0].setAttribute(\"y\", p_s.y*0.5+p_e.y*0.5-12.5)\r\n\t\t\t\r\n\t\t\tdom.getElementsByTagName(\"text\")[0].setAttribute(\"x\", p_s.x*0.5+p_e.x*0.5+40-40)\r\n\t\t\tdom.getElementsByTagName(\"text\")[0].setAttribute(\"y\", p_s.y*0.5+p_e.y*0.5+16-12.5)\r\n\r\n dom.getElementsByTagName(\"text\")[0].innerHTML = item.text;\r\n\t\t\tdom.style.top = 0 + \"px\"\r\n\t\t\tdom.style.left = 0 + \"px\" \r\n \r\n } \r\n } \r\n}\r\nexport { Tools };","import { EventType } from \"../../enum/eventType\";\r\nimport { guid } from \"../../../../common/Guid.ts\";\r\nimport {Tools} from \"./tools.ts\";\r\nimport * as THREE from 'three';\r\n\r\nexport class ClearHeightMeasure {\r\n private engine: any;\r\n private isActive: boolean = false;\r\n private tools: Tools;\r\n private points: any[] = [];\r\n private behavior: any;\r\n \r\n constructor(engine: any) {\r\n this.engine = engine;\r\n this.tools = new Tools(engine); \r\n }\r\n\r\n // 启动净高测量\r\n public active() { \r\n this.engine.measure.tools.cancelCurrentSelectedAnnotation();\r\n this.isActive = true;\r\n \r\n this.behavior = this.engine.handelBehaved;\r\n this.behavior.init(this)\r\n this.behavior.active()\r\n\r\n \r\n }\r\n\r\n // 停止净高测量\r\n public disActive() {\r\n this.isActive = false; \r\n this.behavior.disActive()\r\n }\r\n\r\n // 清空所有点\r\n public clearAllPoints() {\r\n this.points = [];\r\n }\r\n\r\n\r\n // 鼠标点击\r\n public handleMouseClick(event: any) {\r\n if(event.catch == null) {\r\n return;\r\n }\r\n if(this.points.length==0){\r\n this.points.push(event.catch.point);\r\n return;\r\n }\r\n // 正式保存测量\r\n let c_measure = this.engine.measure.annotationData.normalAnnotation.find((x: any) => x.isSelect == true)\r\n if(c_measure != null) {\r\n c_measure.isSelect = false; \r\n } \r\n }\r\n\r\n\r\n // 鼠标移动\r\n public handleMouseMove(event: any) {\r\n if(event.catch == null) {\r\n return;\r\n }\r\n if(this.points.length==0){\r\n return;\r\n }\r\n // 临时保存测量\r\n let c_measure = this.engine.measure.annotationData.normalAnnotation.find((x: any) => x.isSelect == true)\r\n if(c_measure == null) {\r\n c_measure = { \r\n text: null,\r\n id:guid(),\r\n isSelect: true,\r\n }\r\n this.engine.measure.annotationData.normalAnnotation.push(c_measure);\r\n }\r\n // 更新临时数据\r\n let raycaster = new THREE.Raycaster(event.catch.point, new THREE.Vector3(0, 1, 0));\r\n // 使用八叉树进行射线与模型的交互检测\r\n const intersects = this.engine.octreeBox.rayInterationModel(raycaster);\r\n //const intersects = raycaster.intersectObjects(engine.scene.children, true); \r\n // 当 intersects.length > 0 说明射线击中了物体(可能为多个重合的物体)\r\n // 获取最近的物体(第一个交点)进行判断\r\n if (intersects.length === 0) {\r\n return undefined;\r\n }\r\n \r\n let catchResult = event.catch\r\n c_measure.point1 = catchResult.point;\r\n c_measure.point2 = intersects[0].point; \r\n c_measure.text = (c_measure.point1.clone().distanceTo(c_measure.point2.clone())).toFixed(2) + \" m\";\r\n }\r\n \r\n} ","// 距离测量功能\r\nimport { Tools } from \"./tools.ts\";\r\nimport * as THREE from 'three';\r\nimport { guid } from '../../../../common/guid.ts';\r\nimport { EventType } from \"../../enum/eventType\"; \r\n\r\nexport class DistanceMeasure {\r\n private engine: any;\r\n private tools: Tools;\r\n private isActive: boolean = false;\r\n private points: any[] = [];\r\n\r\n private behavior: any;\r\n\r\n constructor(engine: any) {\r\n this.engine = engine;\r\n this.tools = new Tools(engine);\r\n }\r\n\r\n // 启动距离测量\r\n public active() {\r\n this.engine.measure.tools.cancelCurrentSelectedAnnotation();\r\n this.isActive = true;\r\n this.points = [];\r\n // 初始化鼠标交互组件 \r\n this.behavior = this.engine.handelBehaved;\r\n this.behavior.init(this)\r\n this.behavior.active()\r\n\r\n }\r\n\r\n // 停止距离测量\r\n public disActive() {\r\n this.points = [];\r\n this.isActive = false; \r\n this.behavior.disActive()\r\n }\r\n\r\n // 清空所有点\r\n public clearAllPoints() {\r\n this.points = [];\r\n }\r\n\r\n\r\n // 鼠标点击\r\n public handleMouseClick(event: any) { \r\n if(event.catch == null) {\r\n return;\r\n }\r\n let catchResult = event.catch; \r\n if(this.points.length == 0) {\r\n this.points.push(catchResult.point);\r\n } else if(this.points.length == 1) {\r\n let c_measure = this.engine.measure.annotationData.normalAnnotation.find((x: any) => x.isSelect == true)\r\n if(c_measure == null) {\r\n return;\r\n }\r\n c_measure.point2 = catchResult.point;\r\n c_measure.isSelect = false;\r\n this.points = []; \r\n // 回调数据变化\r\n this.engine.events.trigger(EventType.MeasureChanged, c_measure);\r\n } \r\n }\r\n\r\n // 鼠标移动\r\n public handleMouseMove(event: any) { \r\n if(event.catch == null) {\r\n return;\r\n }\r\n let catchResult = event.catch\r\n // 绘制一根垂直的线\r\n if(catchResult == null) {\r\n return;\r\n } \r\n if(this.points.length == 1) {\r\n let c_measure = this.engine.measure.annotationData.normalAnnotation.find((x: any) => x.isSelect == true)\r\n if(c_measure == null) {\r\n c_measure = {\r\n id: guid(),\r\n point1: this.points[0].clone(),\r\n point2: catchResult.point.clone(),\r\n text: (this.points[0].clone().distanceTo(catchResult.point.clone())).toFixed(2) + \" m\",\r\n isSelect: true\r\n }\r\n this.engine.measure.annotationData.normalAnnotation.push(c_measure);\r\n } \r\n c_measure.point2 = catchResult.point; \r\n c_measure.text = (c_measure.point1.clone().distanceTo(c_measure.point2.clone())).toFixed(2) + \" m\"; \r\n console.log(\"距离\", c_measure.text); \r\n } \r\n }\r\n\r\n \r\n\r\n // 按下esc\r\n \r\n \r\n \r\n \r\n\r\n\r\n}","import { Tools } from \"./tools.ts\";\r\nimport { guid } from \"../../../../common/guid.ts\";\r\nimport * as THREE from 'three';\r\nexport class ClearDistanceMeasure {\r\n private engine: any;\r\n private isActive: boolean = false;\r\n private tools: Tools;\r\n private points: any[] = [];\r\n private behavior: any;\r\n \r\n constructor(engine: any) {\r\n this.engine = engine;\r\n this.tools = new Tools(engine); \r\n }\r\n\r\n // 启动净高测量\r\n public active() { \r\n this.engine.measure.tools.cancelCurrentSelectedAnnotation();\r\n this.isActive = true;\r\n \r\n this.behavior = this.engine.handelBehaved;\r\n this.behavior.init(this)\r\n this.behavior.active()\r\n\r\n \r\n }\r\n\r\n // 停止净高测量\r\n public disActive() {\r\n this.isActive = false; \r\n this.behavior.disActive()\r\n }\r\n\r\n // 清空所有点\r\n public clearAllPoints() {\r\n this.points = [];\r\n }\r\n\r\n\r\n // 鼠标点击\r\n public handleMouseClick(event: any) {\r\n if(event.catch == null) {\r\n return;\r\n }\r\n if(this.points.length==0){\r\n this.points.push(event.catch.point);\r\n return;\r\n }\r\n // 正式保存测量\r\n let c_measure = this.engine.measure.annotationData.normalAnnotation.find((x: any) => x.isSelect == true)\r\n if(c_measure != null) {\r\n c_measure.isSelect = false; \r\n } \r\n }\r\n // 鼠标移动\r\n public handleMouseMove(event: any) {\r\n if(event.catch == null) {\r\n return;\r\n }\r\n if(this.points.length==0){\r\n return;\r\n }\r\n // 临时保存测量\r\n let c_measure = this.engine.measure.annotationData.normalAnnotation.find((x: any) => x.isSelect == true)\r\n if(c_measure == null) {\r\n c_measure = { \r\n text: null,\r\n id:guid(),\r\n isSelect: true,\r\n }\r\n this.engine.measure.annotationData.normalAnnotation.push(c_measure);\r\n }\r\n // 更新临时数据\r\n let raycaster = new THREE.Raycaster(event.catch.point,event.catch.normal);\r\n // 使用八叉树进行射线与模型的交互检测\r\n const intersects = this.engine.octreeBox.rayInterationModel(raycaster);\r\n //const intersects = raycaster.intersectObjects(engine.scene.children, true); \r\n // 当 intersects.length > 0 说明射线击中了物体(可能为多个重合的物体)\r\n // 获取最近的物体(第一个交点)进行判断\r\n if (intersects.length === 0) {\r\n return undefined;\r\n }\r\n \r\n let catchResult = this.tools.renderCatchElement(event.catch); \r\n c_measure.point1 = catchResult.point;\r\n c_measure.point2 = intersects[0].point; \r\n c_measure.text = (c_measure.point1.clone().distanceTo(c_measure.point2.clone())).toFixed(2) + \" m\";\r\n }\r\n \r\n} ","import { EventType } from \"../../enum/eventType\";\r\nimport { Tools } from \"./tools.ts\";\r\nimport { guid } from \"../../../../common/guid.ts\";\r\nexport class ElevationMeasure {\r\n private engine: any;\r\n private isActive: boolean = false;\r\n private tools: Tools;\r\n private points: any[] = [];\r\n\r\n private behavior: any;\r\n constructor(engine: any) {\r\n this.engine = engine;\r\n this.tools = new Tools(engine);\r\n }\r\n \r\n public active() {\r\n this.engine.measure.tools.cancelCurrentSelectedAnnotation();\r\n this.behavior = this.engine.handelBehaved;\r\n this.behavior.init(this);\r\n this.behavior.active();\r\n this.isActive = true;\r\n }\r\n\r\n public disActive() {\r\n this.isActive = false;\r\n this.behavior.disActive();\r\n }\r\n\r\n // 清空所有点\r\n public clearAllPoints() {\r\n this.points = [];\r\n }\r\n\r\n\r\n public handleMouseMove(event: any) {\r\n if(event.catch == null) {\r\n return;\r\n } \r\n \r\n let c_measure = this.engine.measure.annotationData.elevationAnnotation.find((x: any) => x.isSelect == true)\r\n if(c_measure == null) {\r\n c_measure = {\r\n id: guid(),\r\n point: event.catch.point.clone(),\r\n text: Math.round(event.catch.point.y) + \" m\",\r\n isSelect: true\r\n }\r\n this.engine.measure.annotationData.elevationAnnotation.push(c_measure);\r\n } \r\n c_measure.point = event.catch.point.clone();\r\n c_measure.text = Math.round(event.catch.point.y) + \" m\"; \r\n }\r\n\r\n public handleMouseClick(event: any) {\r\n if(event.catch == null) {\r\n return;\r\n } \r\n \r\n let c_measure = this.engine.measure.annotationData.elevationAnnotation.find((x: any) => x.isSelect == true)\r\n if(c_measure == null) {\r\n return;\r\n }\r\n c_measure.isSelect = false;\r\n c_measure.point = event.catch.point.clone();\r\n c_measure.text = Math.round(event.catch.point.y) + \" m\";\r\n // 回调数据变化\r\n this.engine.events.trigger(EventType.MeasureChanged, c_measure); \r\n } \r\n}","import { EventType } from \"../../enum/eventType\";\r\nimport { Tools } from \"./tools.ts\";\r\nimport { guid } from \"../../../../common/guid.ts\";\r\nexport class PointMeasure {\r\n private engine: any;\r\n private isActive: boolean = false;\r\n private tools: Tools;\r\n private points: any[] = [];\r\n\r\n private behavior: any;\r\n constructor(engine: any) {\r\n this.engine = engine;\r\n this.tools = new Tools(engine);\r\n }\r\n \r\n public active() {\r\n this.engine.measure.tools.cancelCurrentSelectedAnnotation();\r\n this.behavior = this.engine.handelBehaved;\r\n this.behavior.init(this);\r\n this.behavior.active();\r\n this.isActive = true;\r\n }\r\n\r\n public disActive() {\r\n this.isActive = false;\r\n this.behavior.disActive();\r\n }\r\n\r\n // 清空所有点\r\n public clearAllPoints() {\r\n this.points = [];\r\n }\r\n\r\n public handleMouseMove(event: any) {\r\n if(event.catch == null) {\r\n return;\r\n } \r\n \r\n let c_measure = this.engine.measure.annotationData.coordinateAnnotation.find((x: any) => x.isSelect == true)\r\n if(c_measure == null) {\r\n c_measure = {\r\n id: guid(),\r\n point: event.catch.point.clone(),\r\n text: Math.round(event.catch.point.y) + \" m\",\r\n isSelect: true\r\n }\r\n this.engine.measure.annotationData.coordinateAnnotation.push(c_measure);\r\n } \r\n c_measure.point = event.catch.point.clone();\r\n c_measure.textX = Math.round(event.catch.point.x) + \" m\"; \r\n c_measure.textY = Math.round(event.catch.point.y) + \" m\"; \r\n c_measure.textZ = Math.round(event.catch.point.z) + \" m\"; \r\n }\r\n\r\n public handleMouseClick(event: any) {\r\n if(event.catch == null) {\r\n return;\r\n } \r\n \r\n let c_measure = this.engine.measure.annotationData.coordinateAnnotation.find((x: any) => x.isSelect == true)\r\n if(c_measure == null) {\r\n return;\r\n }\r\n c_measure.isSelect = false;\r\n c_measure.point = event.catch.point.clone();\r\n c_measure.textX = Math.round(event.catch.point.x) + \" m\";\r\n c_measure.textY = Math.round(event.catch.point.y) + \" m\";\r\n c_measure.textZ = Math.round(event.catch.point.z) + \" m\";\r\n // 回调数据变化\r\n this.engine.events.trigger(EventType.MeasureChanged, c_measure); \r\n } \r\n}","// 角度测量功能\r\nimport { Tools } from \"./tools.ts\";\r\nimport * as THREE from 'three';\r\nimport { guid } from '../../../../common/Guid.ts';\r\nimport { EventType } from \"../../enum/eventType\"; \r\n\r\nexport class AngleMeasure {\r\n private engine: any;\r\n private tools: Tools;\r\n // 存储三个点:起点、顶点(中间点)、终点\r\n private points: any[] = [];\r\n private behavior: any;\r\n\r\n constructor(engine: any) {\r\n this.engine = engine;\r\n this.tools = new Tools(engine);\r\n }\r\n\r\n // 启动角度测量\r\n public active() {\r\n this.engine.measure.tools.cancelCurrentSelectedAnnotation();\r\n this.points = [];\r\n // 初始化鼠标交互组件 \r\n this.behavior = this.engine.handelBehaved;\r\n this.behavior.init(this);\r\n this.behavior.active();\r\n }\r\n\r\n // 停止角度测量\r\n public disActive() {\r\n this.points = [];\r\n this.behavior.disActive();\r\n }\r\n\r\n // 清空所有点\r\n public clearAllPoints() {\r\n this.points = [];\r\n }\r\n\r\n // 计算三点形成的角度(以第二个点为顶点)\r\n // point1: 起点, point2: 顶点, point3: 终点\r\n private calculateAngle(point1: THREE.Vector3, point2: THREE.Vector3, point3: THREE.Vector3): number {\r\n // 从顶点到起点的向量\r\n const v1 = new THREE.Vector3().subVectors(point1, point2);\r\n // 从顶点到终点的向量\r\n const v2 = new THREE.Vector3().subVectors(point3, point2);\r\n \r\n // 计算向量的长度\r\n const length1 = v1.length();\r\n const length2 = v2.length();\r\n \r\n // 如果向量长度为0,返回0度\r\n if (length1 === 0 || length2 === 0) {\r\n return 0;\r\n }\r\n \r\n // 计算点积\r\n const dot = v1.dot(v2);\r\n // 计算角度(弧度)\r\n const cosAngle = dot / (length1 * length2);\r\n // 限制cos值在[-1, 1]范围内,避免数值误差\r\n const clampedCos = Math.max(-1, Math.min(1, cosAngle));\r\n // 转换为角度(度)\r\n const angleRad = Math.acos(clampedCos);\r\n const angleDeg = angleRad * (180 / Math.PI);\r\n \r\n return angleDeg;\r\n }\r\n\r\n // 处理鼠标点击事件\r\n public handleMouseClick(event: any) { \r\n if (event.catch == null) {\r\n return;\r\n }\r\n \r\n let catchResult = event.catch\r\n \r\n // 第一次点击:添加起点\r\n if (this.points.length == 0) {\r\n this.points.push(catchResult.point);\r\n } \r\n // 第二次点击:添加顶点(中间点)\r\n else if (this.points.length == 1) {\r\n this.points.push(catchResult.point);\r\n } \r\n // 第三次点击:完成测量,添加终点\r\n else if (this.points.length == 2) {\r\n let c_measure = this.engine.measure.annotationData.angleAnnotation.find((x: any) => x.isSelect == true);\r\n if (c_measure == null) {\r\n return;\r\n }\r\n // 设置第三个点(终点)\r\n c_measure.point3 = catchResult.point.clone();\r\n // 计算最终角度\r\n c_measure.angle = this.calculateAngle(c_measure.point1, c_measure.point2, c_measure.point3);\r\n c_measure.text = c_measure.angle.toFixed(2) + \"°\";\r\n c_measure.isSelect = false;\r\n // 清空点数组,准备下一次测量\r\n this.points = []; \r\n // 回调数据变化\r\n this.engine.events.trigger(EventType.MeasureChanged, c_measure);\r\n } \r\n \r\n }\r\n\r\n // 处理鼠标移动事件\r\n public handleMouseMove(event: any) { \r\n if (event.catch == null) {\r\n return;\r\n }\r\n \r\n let catchResult = this.tools.renderCatchElement(event.catch);\r\n if (catchResult == null) {\r\n return;\r\n } \r\n \r\n // 如果已经有一个点(起点),准备添加第二个点(顶点)\r\n if (this.points.length == 1) {\r\n // 此时只是移动,不创建标注,等待第二次点击\r\n return;\r\n }\r\n // 如果已经有两个点(起点和顶点),实时更新第三个点(终点)和角度值\r\n else if (this.points.length == 2) {\r\n let c_measure = this.engine.measure.annotationData.angleAnnotation.find((x: any) => x.isSelect == true);\r\n if (c_measure == null) {\r\n // 创建新的角度标注\r\n c_measure = {\r\n id: guid(),\r\n point1: this.points[0].clone(), // 起点\r\n point2: this.points[1].clone(), // 顶点(中间点)\r\n point3: catchResult.point.clone(), // 终点(实时更新)\r\n angle: 0,\r\n text: \"0.00°\",\r\n isSelect: true\r\n };\r\n this.engine.measure.annotationData.angleAnnotation.push(c_measure);\r\n } \r\n // 更新第三个点(终点)\r\n c_measure.point3 = catchResult.point.clone();\r\n // 计算角度\r\n c_measure.angle = this.calculateAngle(c_measure.point1, c_measure.point2, c_measure.point3);\r\n c_measure.text = c_measure.angle.toFixed(2) + \"°\";\r\n console.log(\"角度\", c_measure.text); \r\n } \r\n }\r\n}","// 面积测量功能\r\nimport { Tools } from \"./tools.ts\";\r\nimport * as THREE from 'three';\r\nimport { guid } from '../../../../common/guid.ts';\r\nimport { EventType } from \"../../enum/eventType\"; \r\n\r\nexport class AreaMeasure {\r\n private engine: any;\r\n private tools: Tools;\r\n // 存储多个点,用于围成区域\r\n private points: any[] = [];\r\n private behavior: any;\r\n\r\n constructor(engine: any) {\r\n this.engine = engine;\r\n this.tools = new Tools(engine);\r\n }\r\n\r\n // 启动面积测量\r\n public active() {\r\n this.engine.measure.tools.cancelCurrentSelectedAnnotation();\r\n this.points = [];\r\n // 初始化鼠标交互组件 \r\n this.behavior = this.engine.handelBehaved;\r\n this.behavior.init(this);\r\n this.behavior.active();\r\n }\r\n\r\n // 停止面积测量\r\n public disActive() {\r\n this.points = [];\r\n this.behavior.disActive();\r\n }\r\n\r\n // 清空所有点\r\n public clearAllPoints() {\r\n this.points = [];\r\n }\r\n\r\n // 计算多边形面积(使用鞋带公式/Shoelace formula)\r\n // 注意:这个方法假设点在同一个平面上,使用XZ平面投影计算面积\r\n private calculateArea(points: THREE.Vector3[]): number {\r\n // 至少需要3个点才能形成面积\r\n if (points.length < 3) {\r\n return 0;\r\n }\r\n\r\n // 使用鞋带公式计算多边形面积\r\n // 公式:Area = 0.5 * |Σ(xi * yi+1 - xi+1 * yi)|\r\n // 这里使用XZ平面投影(忽略Y坐标)\r\n let area = 0;\r\n const n = points.length;\r\n \r\n for (let i = 0; i < n; i++) {\r\n const j = (i + 1) % n; // 下一个点的索引,最后一个点连接到第一个点\r\n // 使用XZ平面计算(x对应x坐标,z对应y坐标)\r\n area += points[i].x * points[j].z;\r\n area -= points[j].x * points[i].z;\r\n }\r\n \r\n // 取绝对值并除以2\r\n area = Math.abs(area) / 2;\r\n \r\n return area;\r\n }\r\n\r\n // 处理鼠标点击事件\r\n public handleMouseClick(event: any) { \r\n if (event.catch == null) {\r\n return;\r\n }\r\n \r\n let catchResult = event.catch\r\n \r\n // 添加新点\r\n this.points.push(catchResult.point.clone());\r\n \r\n // 如果已经有至少3个点,创建或更新面积标注\r\n if (this.points.length >= 3) {\r\n let c_measure = this.engine.measure.annotationData.areaAnnotation.find((x: any) => x.isSelect == true);\r\n if (c_measure == null) {\r\n // 创建新的面积标注\r\n c_measure = {\r\n id: guid(),\r\n points: this.points.map(p => p.clone()), // 复制所有点\r\n area: 0,\r\n text: \"0.00 m²\",\r\n isSelect: true\r\n };\r\n this.engine.measure.annotationData.areaAnnotation.push(c_measure);\r\n } else {\r\n // 更新点数组\r\n c_measure.points = this.points.map(p => p.clone());\r\n }\r\n \r\n // 计算面积\r\n c_measure.area = this.calculateArea(c_measure.points);\r\n c_measure.text = c_measure.area.toFixed(2) + \" m²\";\r\n console.log(\"面积\", c_measure.text);\r\n }\r\n }\r\n\r\n // 处理鼠标移动事件\r\n public handleMouseMove(event: any) { \r\n if (event.catch == null) {\r\n return;\r\n }\r\n \r\n let catchResult = this.tools.renderCatchElement(event.catch);\r\n if (catchResult == null) {\r\n return;\r\n } \r\n \r\n // 如果已经有至少2个点,实时更新最后一个点(临时点)和面积值\r\n if (this.points.length >= 2) {\r\n let c_measure = this.engine.measure.annotationData.areaAnnotation.find((x: any) => x.isSelect == true);\r\n if (c_measure == null) {\r\n // 如果还没有创建标注,但已经有2个点,创建临时标注\r\n if (this.points.length >= 2) {\r\n // 创建临时点数组(包含当前鼠标位置)\r\n let tempPoints = this.points.map(p => p.clone());\r\n tempPoints.push(catchResult.point.clone());\r\n \r\n // 至少需要3个点才能显示面积\r\n if (tempPoints.length >= 3) {\r\n c_measure = {\r\n id: guid(),\r\n points: tempPoints,\r\n area: 0,\r\n text: \"0.00 m²\",\r\n isSelect: true\r\n };\r\n this.engine.measure.annotationData.areaAnnotation.push(c_measure);\r\n }\r\n }\r\n } else {\r\n // 更新临时点(最后一个点)\r\n if (c_measure.points.length > 0) {\r\n // 更新最后一个点为当前鼠标位置\r\n const lastIndex = c_measure.points.length - 1;\r\n c_measure.points[lastIndex] = catchResult.point.clone();\r\n } else {\r\n // 如果点数组为空,重新构建\r\n c_measure.points = this.points.map(p => p.clone());\r\n c_measure.points.push(catchResult.point.clone());\r\n }\r\n }\r\n \r\n // 如果有标注且至少有3个点,计算并更新面积\r\n if (c_measure && c_measure.points.length >= 3) {\r\n c_measure.area = this.calculateArea(c_measure.points);\r\n c_measure.text = c_measure.area.toFixed(2) + \" m²\";\r\n }\r\n } \r\n }\r\n\r\n // 完成面积测量(可以用于双击或右键完成)\r\n public finishMeasure() {\r\n let c_measure = this.engine.measure.annotationData.areaAnnotation.find((x: any) => x.isSelect == true);\r\n if (c_measure != null && c_measure.points.length >= 3) {\r\n // 移除临时点(如果存在)\r\n if (c_measure.points.length > this.points.length) {\r\n c_measure.points = this.points.map(p => p.clone());\r\n }\r\n // 计算最终面积\r\n c_measure.area = this.calculateArea(c_measure.points);\r\n c_measure.text = c_measure.area.toFixed(2) + \" m²\";\r\n c_measure.isSelect = false;\r\n // 清空点数组,准备下一次测量\r\n this.points = [];\r\n // 回调数据变化\r\n this.engine.events.trigger(EventType.MeasureChanged, c_measure);\r\n }\r\n }\r\n}\r\n","// 坡度测量功能\r\nimport { Tools } from \"./tools.ts\";\r\nimport * as THREE from 'three';\r\nimport { guid } from '../../../../common/guid.ts';\r\nimport { EventType } from \"../../enum/eventType\"; \r\n\r\nexport class SlopeMeasure {\r\n private engine: any;\r\n private tools: Tools;\r\n // 存储两个点:起点和终点\r\n private points: any[] = [];\r\n private behavior: any;\r\n\r\n constructor(engine: any) {\r\n this.engine = engine;\r\n this.tools = new Tools(engine);\r\n }\r\n\r\n // 启动坡度测量\r\n public active() {\r\n this.engine.measure.tools.cancelCurrentSelectedAnnotation();\r\n this.points = [];\r\n // 初始化鼠标交互组件 \r\n this.behavior = this.engine.handelBehaved;\r\n this.behavior.init(this);\r\n this.behavior.active();\r\n }\r\n\r\n // 停止坡度测量\r\n public disActive() {\r\n this.points = [];\r\n this.behavior.disActive();\r\n }\r\n\r\n\r\n // 清空所有点\r\n public clearAllPoints() {\r\n this.points = [];\r\n }\r\n // 计算两点之间的坡度\r\n // point1: 起点, point2: 终点\r\n // 返回:{ percentage: 坡度百分比, angle: 坡度角度(度), heightDiff: 高度差, horizontalDist: 水平距离 }\r\n private calculateSlope(point1: THREE.Vector3, point2: THREE.Vector3): any {\r\n // 计算高度差(Y坐标差)\r\n const heightDiff = point2.y - point1.y;\r\n \r\n // 计算水平距离(在XZ平面上的距离)\r\n const dx = point2.x - point1.x;\r\n const dz = point2.z - point1.z;\r\n const horizontalDist = Math.sqrt(dx * dx + dz * dz);\r\n \r\n // 如果水平距离为0,返回0坡度\r\n if (horizontalDist === 0) {\r\n return {\r\n percentage: 0,\r\n angle: 0,\r\n heightDiff: heightDiff,\r\n horizontalDist: 0\r\n };\r\n }\r\n \r\n // 计算坡度百分比 = (高度差 / 水平距离) * 100%\r\n const percentage = (heightDiff / horizontalDist) * 100;\r\n \r\n // 计算坡度角度 = arctan(高度差 / 水平距离) * 180 / π\r\n const angleRad = Math.atan(heightDiff / horizontalDist);\r\n const angleDeg = angleRad * (180 / Math.PI);\r\n \r\n return {\r\n percentage: percentage,\r\n angle: angleDeg,\r\n heightDiff: heightDiff,\r\n horizontalDist: horizontalDist\r\n };\r\n }\r\n\r\n // 处理鼠标点击事件\r\n public handleMouseClick(event: any) { \r\n if (event.catch == null) {\r\n return;\r\n }\r\n \r\n let catchResult = this.tools.renderCatchElement(event.catch); \r\n \r\n // 第一次点击:添加起点\r\n if (this.points.length == 0) {\r\n this.points.push(catchResult.point);\r\n } \r\n // 第二次点击:完成测量,添加终点\r\n else if (this.points.length == 1) {\r\n let c_measure = this.engine.measure.annotationData.slopeAnnotation.find((x: any) => x.isSelect == true);\r\n if (c_measure == null) {\r\n return;\r\n }\r\n // 设置第二个点(终点)\r\n c_measure.point2 = catchResult.point.clone();\r\n // 计算最终坡度\r\n const slopeData = this.calculateSlope(c_measure.point1, c_measure.point2);\r\n c_measure.slopePercentage = slopeData.percentage;\r\n c_measure.slopeAngle = slopeData.angle;\r\n c_measure.heightDiff = slopeData.heightDiff;\r\n c_measure.horizontalDist = slopeData.horizontalDist;\r\n // 格式化显示文本:显示坡度百分比和角度\r\n c_measure.text = slopeData.percentage.toFixed(2) + \"% (\" + slopeData.angle.toFixed(2) + \"°)\";\r\n c_measure.isSelect = false;\r\n // 清空点数组,准备下一次测量\r\n this.points = []; \r\n // 回调数据变化\r\n this.engine.events.trigger(EventType.MeasureChanged, c_measure);\r\n } \r\n }\r\n\r\n // 处理鼠标移动事件\r\n public handleMouseMove(event: any) { \r\n if (event.catch == null) {\r\n return;\r\n }\r\n \r\n let catchResult = this.tools.renderCatchElement(event.catch);\r\n if (catchResult == null) {\r\n return;\r\n } \r\n \r\n // 如果已经有一个点(起点),实时更新第二个点(终点)和坡度值\r\n if (this.points.length == 1) {\r\n let c_measure = this.engine.measure.annotationData.slopeAnnotation.find((x: any) => x.isSelect == true);\r\n if (c_measure == null) {\r\n // 创建新的坡度标注\r\n c_measure = {\r\n id: guid(),\r\n point1: this.points[0].clone(), // 起点\r\n point2: catchResult.point.clone(), // 终点(实时更新)\r\n slopePercentage: 0,\r\n slopeAngle: 0,\r\n heightDiff: 0,\r\n horizontalDist: 0,\r\n text: \"0.00% (0.00°)\",\r\n isSelect: true\r\n };\r\n this.engine.measure.annotationData.slopeAnnotation.push(c_measure);\r\n } \r\n // 更新第二个点(终点)\r\n c_measure.point2 = catchResult.point.clone();\r\n // 计算坡度\r\n const slopeData = this.calculateSlope(c_measure.point1, c_measure.point2);\r\n c_measure.slopePercentage = slopeData.percentage;\r\n c_measure.slopeAngle = slopeData.angle;\r\n c_measure.heightDiff = slopeData.heightDiff;\r\n c_measure.horizontalDist = slopeData.horizontalDist;\r\n // 格式化显示文本\r\n c_measure.text = slopeData.percentage.toFixed(2) + \"% (\" + slopeData.angle.toFixed(2) + \"°)\";\r\n console.log(\"坡度\", c_measure.text); \r\n } \r\n }\r\n}\r\n\r\n","import { ClearHeightMeasure } from \"./clear_height_measure.ts\";\r\nimport { DistanceMeasure } from \"./distance_measure.ts\";\r\nimport { ClearDistanceMeasure } from \"./clear_distance_measure.ts\";\r\nimport { ElevationMeasure } from \"./elevation_measure.ts\";\r\nimport { PointMeasure } from \"./point_measure.ts\";\r\nimport { AngleMeasure } from \"./angle_measure.ts\";\r\nimport { AreaMeasure } from \"./area_measure.ts\";\r\nimport { SlopeMeasure } from \"./slope_measure.ts\";\r\nimport { EventType } from \"../../../../api/modules/IEventModule\";\r\nimport { Tools } from \"./tools.ts\";\r\nimport './index.css';\r\n\r\nclass Measure {\r\n private isActive: boolean = false;\r\n private engine: any;\r\n private clearHeightMeasure: ClearHeightMeasure;\r\n private distanceMeasure: DistanceMeasure;\r\n private clearDistanceMeasure: ClearDistanceMeasure;\r\n private elevationMeasure: ElevationMeasure;\r\n private pointMeasure: PointMeasure;\r\n private angleMeasure: AngleMeasure;\r\n private areaMeasure: AreaMeasure;\r\n private slopeMeasure: SlopeMeasure;\r\n private tools: Tools;\r\n private annotationContainer: HTMLElement;\r\n // 存储标注信息\r\n private annotationData: any = {\r\n normalAnnotation: [],\r\n textAnnotation: [],\r\n coordinateAnnotation: [],\r\n angleAnnotation: [],\r\n distanceAnnotation: [],\r\n areaAnnotation: [],\r\n slopeAnnotation: [],\r\n elevationAnnotation: [],\r\n volumeAnnotation: []\r\n }\r\n\r\n constructor(engine: any) {\r\n this.engine = engine;\r\n this.clearHeightMeasure = new ClearHeightMeasure(engine);\r\n this.distanceMeasure = new DistanceMeasure(engine);\r\n this.clearDistanceMeasure = new ClearDistanceMeasure(engine);\r\n this.elevationMeasure = new ElevationMeasure(engine);\r\n this.pointMeasure = new PointMeasure(engine);\r\n this.angleMeasure = new AngleMeasure(engine);\r\n this.areaMeasure = new AreaMeasure(engine);\r\n this.slopeMeasure = new SlopeMeasure(engine);\r\n this.tools = new Tools(engine);\r\n // 创建一个div专门用来放标注的 \r\n this.annotationContainer = document.createElement('div');\r\n this.annotationContainer.className = 'annotation-container';\r\n engine.container.parentElement.appendChild(this.annotationContainer); \r\n }\r\n\r\n\r\n public active() {\r\n this.isActive = true; \r\n this.tools.active();\r\n }\r\n public disActive() {\r\n this.tools.disActive();\r\n this.clearAll();\r\n this.isActive = false;\r\n this.clearHeightMeasure.disActive();\r\n this.distanceMeasure.disActive();\r\n this.clearDistanceMeasure.disActive();\r\n this.elevationMeasure.disActive();\r\n this.pointMeasure.disActive();\r\n this.angleMeasure.disActive();\r\n this.areaMeasure.disActive();\r\n this.slopeMeasure.disActive(); \r\n // 恢复点选功能\r\n this.engine.interactionModule.active();\r\n \r\n }\r\n\r\n\r\n // 清空所有点的测量\r\n public clearAllPoints() {\r\n this.clearHeightMeasure.clearAllPoints();\r\n this.distanceMeasure.clearAllPoints();\r\n this.clearDistanceMeasure.clearAllPoints();\r\n this.elevationMeasure.clearAllPoints();\r\n this.pointMeasure.clearAllPoints();\r\n this.angleMeasure.clearAllPoints();\r\n this.areaMeasure.clearAllPoints();\r\n this.slopeMeasure.clearAllPoints();\r\n }\r\n \r\n\r\n // 清除所有测量\r\n public clearAll() { \r\n clearAnnotation(this.annotationData.normalAnnotation);\r\n clearAnnotation(this.annotationData.textAnnotation);\r\n clearAnnotation(this.annotationData.coordinateAnnotation);\r\n clearAnnotation(this.annotationData.angleAnnotation);\r\n clearAnnotation(this.annotationData.distanceAnnotation);\r\n clearAnnotation(this.annotationData.areaAnnotation);\r\n clearAnnotation(this.annotationData.slopeAnnotation);\r\n clearAnnotation(this.annotationData.elevationAnnotation);\r\n clearAnnotation(this.annotationData.volumeAnnotation); \r\n\r\n function clearAnnotation(annotation: any) {\r\n for(let i = 0; i < annotation.length; i++) {\r\n annotation[i].container.remove();\r\n }\r\n annotation = []\r\n }\r\n }\r\n \r\n\r\n // 更新标注\r\n update() {\r\n if(!this.isActive) {\r\n return;\r\n }\r\n this.tools.drawNormalAnnotation(); \r\n } \r\n \r\n}\r\nexport { Measure };\r\n","import * as THREE from 'three';\r\nexport class sectionPlaneX {\r\n\r\n\tprivate engine: any;\r\n\tprivate isActive: boolean = false;\r\n\tprivate isDrag: boolean = false;\r\n\tprivate meshs: any[] = [];\r\n\tprivate box: any;\r\n\tprivate pickPoint: any;\r\n\tprivate pickNormal: any;\r\n\tprivate pickMesh: any;\r\n\tprivate box_: any;\r\n\tprivate plane: any;\r\n\tconstructor(engine: any) {\r\n\t\tthis.engine = engine\r\n\t\tthis.meshs = []\r\n\t\tthis.box = null\r\n\t}\r\n\t// 启动\r\n\tactive() {\r\n\t\tif (this.isActive == true) {\r\n\t\t\treturn\r\n\t\t}\r\n\t\tthis.isActive = true\r\n\t\tthis.init()\r\n\t\t// 初始化鼠标交互组件\r\n\t\tthis.engine.handelBehaved.init(this)\r\n\t\tthis.engine.handelBehaved.active();\r\n \r\n\t\t\r\n\t\tlet this_ = this\r\n\t\tthis_.engine.scene.children.filter((o: any) => o.type == \"Mesh\" && o.url).forEach((mesh: any) => {\r\n\t\t\tif(mesh.material && Array.isArray(mesh.material)){\r\n\t\t\t mesh.material.forEach((m: any) => {\r\n\t\t\t\t m.clippingPlanes = this_.engine.sectionPlane\r\n\t\t\t })\r\n\t\t } else {\r\n\t\t\t mesh.material.clippingPlanes = this_.engine.sectionPlane\r\n\t\t }\r\n\t\t // 补面\r\n\t\t this_.engine.clipping.clippingStencil.addMesh(this_.engine.sectionPlane.find((o: any) => o.name == \"前\"),mesh)\r\n\t })\r\n\t}\r\n\tdisActive() {\r\n\t\tthis.isActive = false\r\n\t\tthis.engine.handelBehaved.disActive();\r\n\t}\r\n\t// 初始化\r\n\tinit() {\r\n\t\t// 默认先以全局来生成剖切面\r\n\t\tlet box = this.engine.octreeBox.getBoundingBox()\r\n\t\tthis.box = box\r\n\r\n\t\t// 然后是6个面\r\n\t\tthis.updata_face(box);\r\n\t}\r\n\r\n\t// 更新面\r\n\tupdata_face(box: any) {\r\n\t\tlet this_ = this\r\n\t\tlet group = this_.engine.scene.children.find((o: any) => o.type == \"Group\" && o.name == \"ClippingBox\")\r\n\t\tif(group == null){\r\n\t\t\tgroup = new THREE.Group()\r\n\t\t\tgroup.name = \"ClippingBox\"\r\n\t\t\tthis_.engine.scene.add(group)\r\n\t\t} \r\n \r\n\t\tlet face = [\r\n\t\t\tnew THREE.Vector3(box.min.x, box.min.y, box.min.z),\r\n\t\t\tnew THREE.Vector3(box.max.x, box.min.y, box.min.z),\r\n\t\t\tnew THREE.Vector3(box.max.x, box.max.y, box.min.z),\r\n\t\t\tnew THREE.Vector3(box.min.x, box.max.y, box.min.z)\r\n\t\t]\r\n\t\tcreateFace(face, new THREE.Vector3(0, 0, -1), \"前\")\r\n\t\t\r\n\t\t\r\n\t\t// 生成面\r\n\t\tfunction createFace(vs: any, normal: any, name: any) {\r\n\t\t\t// 创建几何体\r\n\t\t\tconst geometry = new THREE.BufferGeometry();\r\n\t\t\t// 设置顶点\r\n\t\t\tconst vertices = new Float32Array([\r\n\t\t\t\tvs[0].x, vs[0].y, vs[0].z, // 点1\r\n\t\t\t\tvs[1].x, vs[1].y, vs[1].z, // 点2\r\n\t\t\t\tvs[2].x, vs[2].y, vs[2].z, // 点3\r\n\t\t\t\tvs[3].x, vs[3].y, vs[3].z, // 点4\r\n\t\t\t]);\r\n\t\t\t// 设置顶点索引(定义两个三角形组成一个面)\r\n\t\t\tconst indices = [\r\n\t\t\t\t0, 1, 2, // 第一个三角形\r\n\t\t\t\t0, 2, 3, // 第二个三角形\r\n\t\t\t];\r\n\t\t\t// 将顶点和索引添加到几何体\r\n\t\t\tgeometry.setAttribute('position', new THREE.BufferAttribute(vertices, 3));\r\n\t\t\tgeometry.setIndex(indices);\r\n\t\t\tlet ms = this_.meshs.find(o => o.name == name)\r\n\t\t\tif (ms == null) {\r\n\t\t\t\tconst material = new THREE.MeshBasicMaterial({\r\n\t\t\t\t\tcolor: 0x00ff00, // 绿色\r\n\t\t\t\t\ttransparent: true,\r\n\t\t\t\t\topacity: 0.02,\r\n\t\t\t\t\tside: THREE.DoubleSide, // 双面渲染\r\n\t\t\t\t});\r\n\t\t\t\t// 创建网格\r\n\t\t\t\tconst mesh = new THREE.Mesh(geometry, material);\r\n\t\t\t\t(mesh as any).normal = normal\r\n\t\t\t\tmesh.name = name\r\n\t\t\t\tgroup.add(mesh);\r\n\t\t\t\tthis_.meshs.push(mesh)\r\n\t\t\t} else {\r\n\t\t\t\tms.geometry = geometry\r\n\t\t\t}\r\n\r\n\r\n\r\n\r\n\r\n\r\n // *****************绘制线*****************\r\n const vertices_line = new Float32Array([\r\n\t\t\t\tvs[0].x, vs[0].y, vs[0].z, // 点1\r\n\t\t\t\tvs[1].x, vs[1].y, vs[1].z, // 点2\r\n\t\t\t\tvs[2].x, vs[2].y, vs[2].z, // 点3\r\n\t\t\t\tvs[3].x, vs[3].y, vs[3].z, // 点4 \r\n vs[0].x, vs[0].y, vs[0].z, // 点1\r\n\t\t\t]);\r\n let line_material = new THREE.LineBasicMaterial({ color: 0x0000ff });\r\n let line_geometry = new THREE.BufferGeometry(); \r\n line_geometry.setAttribute('position', new THREE.BufferAttribute(vertices_line, 3));\r\n // 更新边线\r\n let line = this_.meshs.find((o: any) => o.name == name + \"Line\") \r\n if(line == null){\r\n line = new THREE.Line(line_geometry, line_material);\r\n line.name = name + \"Line\";\r\n group.add(line);\r\n this_.meshs.push(line);\r\n }\r\n line.geometry = line_geometry;\r\n line.material = line_material;\r\n\r\n\r\n\r\n\r\n\r\n\r\n\t\t\tif (name == \"前\" || name == \"左\" || name == \"底\") {\r\n\t\t\t\tthis_.engine.sectionPlane.find((o: any) => o.name == name).setFromNormalAndCoplanarPoint(normal.clone().setLength(-1), box.min)\r\n\t\t\t} else {\r\n\t\t\t\tthis_.engine.sectionPlane.find((o: any) => o.name == name).setFromNormalAndCoplanarPoint(normal.clone().setLength(-1), box.max)\r\n\t\t\t}\r\n\t\t\t\r\n\t\t}\r\n\t}\r\n // 重写鼠标按下事件\r\n\thandleMouseDown(event: any) {\r\n\t\tthis.isDrag = true\r\n\t\tconst intersects = event.raycaster.intersectObjects(this.meshs, false);\r\n\t\tif (intersects != null && intersects.length > 0) {\r\n\t\t\tthis.pickPoint = intersects[0].point\r\n\t\t\tthis.pickNormal = intersects[0].face.normal\r\n\t\t\tthis.engine.controls.enabled = false\r\n\t\t\tthis.pickMesh = intersects[0].object\r\n\t\t\tthis.box_ = {\r\n\t\t\t\tmin: this.box.min.clone(),\r\n\t\t\t\tmax: this.box.max.clone()\r\n\t\t\t}\r\n\t\t\t// 创建一个虚拟平面\r\n\t\t\tif (this.pickNormal.y == 0) {\r\n\t\t\t\t// 四个侧面\r\n\t\t\t\tconst plane = new THREE.Plane(); // 法线为 (0, 1, 0),距离为 0\r\n\t\t\t\tplane.setFromNormalAndCoplanarPoint(new THREE.Vector3(0, 1, 0), this.pickPoint);\r\n\t\t\t\tthis.plane = plane\r\n\t\t\t} else {\r\n\t\t\t\t// 上下面,那就要画一个相机发向的面了\r\n\t\t\t\tlet c_point = new THREE.Vector3(this.engine.camera.position.x, this.pickPoint.y, this.engine.camera\r\n\t\t\t\t\t.position.z)\r\n\t\t\t\tconst plane = new THREE.Plane(); // 法线为 (0, 1, 0),距离为 0\r\n\t\t\t\tplane.setFromNormalAndCoplanarPoint((c_point.clone().sub(this.pickPoint.clone())).setLength(1), this\r\n\t\t\t\t\t.pickPoint);\r\n\t\t\t\tthis.plane = plane\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\thandleMouseUp(event: any) {\r\n\t\tthis.isDrag = false\r\n\t\tthis.pickPoint = null\r\n\t\tthis.pickNormal = null\r\n\t\tthis.pickMesh = null\r\n\t\tthis.engine.controls.enabled = true\r\n\r\n\t}\r\n\thandleMouseMove(event: any) {\r\n\t\t// 如果拖动的话,并且鼠标在面上 \r\n\t\tthis.meshs.forEach(m => {\r\n\t\t\tm.material.opacity = 0\r\n\t\t})\r\n\t\t// 高亮面\r\n\r\n\t\tconst intersects = event.raycaster.intersectObjects(this.meshs, false);\r\n\t\tif (intersects != null && intersects.length > 0) {\r\n\t\t\tintersects[0].object.material.opacity = 0.05\r\n\t\t}\r\n\t\t// 移动组\r\n\t\tif (this.pickPoint != null) {\r\n\t\t\t// 存储交点的变量\r\n\t\t\tconst intersectionPoint = new THREE.Vector3();\r\n\t\t\t// 计算交点\r\n\t\t\tif (event.raycaster.ray.intersectPlane(this.plane, intersectionPoint)) {\r\n\t\t\t\t// 计算在法向上移动多少量 \r\n\t\t\t\tlet dir = (intersectionPoint.clone().sub(this.pickPoint.clone())).dot(this.pickNormal.clone());\r\n\t\t\t\tif (this.pickMesh.name == \"前\" || this.pickMesh.name == \"左\" || this.pickMesh.name == \"底\") {\r\n\t\t\t\t\tthis.box.min = this.box_.min.clone().add(this.pickNormal.clone().setLength(dir))\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.box.max = this.box_.max.clone().add(this.pickNormal.clone().setLength(dir))\r\n\t\t\t\t}\r\n\t\t\t\tthis.updata_face(this.box)\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}","import * as THREE from 'three';\r\nexport class sectionPlaneY {\r\n\r\n\tprivate engine: any;\r\n\tprivate isActive: boolean = false;\r\n\tprivate isDrag: boolean = false;\r\n\tprivate meshs: any[] = [];\r\n\tprivate box: any;\r\n\tprivate pickPoint: any;\r\n\tprivate pickNormal: any;\r\n\tprivate pickMesh: any;\r\n\tprivate box_: any;\r\n\tprivate plane: any;\r\n\tconstructor(engine: any) {\r\n\t\tthis.engine = engine\r\n\t\tthis.meshs = []\r\n\t\tthis.box = null\r\n\t}\r\n\r\n\t// 启动\r\n\tactive() {\r\n\t\tif (this.isActive == true) {\r\n\t\t\treturn\r\n\t\t}\r\n\t\tthis.isActive = true\r\n\t\tthis.init()\r\n\t\t// 初始化鼠标交互组件\r\n\t\tthis.engine.handelBehaved.init(this)\r\n\t\tthis.engine.handelBehaved.active();\r\n\t}\r\n\tdisActive() {\r\n\t\tthis.isActive = false\r\n\t\tthis.engine.handelBehaved.disActive();\r\n\t}\r\n\t// 初始化\r\n\tinit() {\r\n\t\t// 默认先以全局来生成剖切面\r\n\t\tlet box = this.engine.octreeBox.getBoundingBox()\r\n\t\tthis.box = box\r\n\r\n\t\t// 然后是6个面\r\n\t\tthis.updata_face(box);\r\n\t}\r\n\r\n\r\n\t// 更新面\r\n\tupdata_face(box: any) {\r\n\t\tlet this_ = this\r\n\t\tlet group = this_.engine.scene.children.find((o: any) => o.type == \"Group\" && o.name == \"ClippingBox\")\r\n\t\tif(group == null){\r\n\t\t\tgroup = new THREE.Group()\r\n\t\t\tgroup.name = \"ClippingBox\"\r\n\t\t\tthis_.engine.scene.add(group)\r\n\t\t} \r\n \r\n\t\tlet face = [\r\n\t\t\tnew THREE.Vector3(box.min.x, box.max.y, box.min.z),\r\n\t\t\tnew THREE.Vector3(box.max.x, box.max.y, box.min.z),\r\n\t\t\tnew THREE.Vector3(box.max.x, box.max.y, box.max.z),\r\n\t\t\tnew THREE.Vector3(box.min.x, box.max.y, box.max.z),\r\n\t\t]\r\n\t\tcreateFace(face, new THREE.Vector3(0, 1, 0), \"顶\")\r\n\t\t\r\n\t\t// 生成面\r\n\t\tfunction createFace(vs: any, normal: any, name: any) {\r\n\t\t\t// 创建几何体\r\n\t\t\tconst geometry = new THREE.BufferGeometry();\r\n\t\t\t// 设置顶点\r\n\t\t\tconst vertices = new Float32Array([\r\n\t\t\t\tvs[0].x, vs[0].y, vs[0].z, // 点1\r\n\t\t\t\tvs[1].x, vs[1].y, vs[1].z, // 点2\r\n\t\t\t\tvs[2].x, vs[2].y, vs[2].z, // 点3\r\n\t\t\t\tvs[3].x, vs[3].y, vs[3].z, // 点4\r\n\t\t\t]);\r\n\t\t\t// 设置顶点索引(定义两个三角形组成一个面)\r\n\t\t\tconst indices = [\r\n\t\t\t\t0, 1, 2, // 第一个三角形\r\n\t\t\t\t0, 2, 3, // 第二个三角形\r\n\t\t\t];\r\n\t\t\t// 将顶点和索引添加到几何体\r\n\t\t\tgeometry.setAttribute('position', new THREE.BufferAttribute(vertices, 3));\r\n\t\t\tgeometry.setIndex(indices);\r\n\t\t\tlet ms = this_.meshs.find(o => o.name == name)\r\n\t\t\tif (ms == null) {\r\n\t\t\t\tconst material = new THREE.MeshBasicMaterial({\r\n\t\t\t\t\tcolor: 0x00ff00, // 绿色\r\n\t\t\t\t\ttransparent: true,\r\n\t\t\t\t\topacity: 0.02,\r\n\t\t\t\t\tside: THREE.DoubleSide, // 双面渲染\r\n\t\t\t\t});\r\n\t\t\t\t// 创建网格\r\n\t\t\t\tconst mesh = new THREE.Mesh(geometry, material);\r\n\t\t\t\t(mesh as any).normal = normal\r\n\t\t\t\tmesh.name = name\r\n\t\t\t\tgroup.add(mesh);\r\n\t\t\t\tthis_.meshs.push(mesh)\r\n\t\t\t} else {\r\n\t\t\t\tms.geometry = geometry\r\n\t\t\t}\r\n\r\n\r\n\r\n // *****************绘制线*****************\r\n const vertices_line = new Float32Array([\r\n\t\t\t\tvs[0].x, vs[0].y, vs[0].z, // 点1\r\n\t\t\t\tvs[1].x, vs[1].y, vs[1].z, // 点2\r\n\t\t\t\tvs[2].x, vs[2].y, vs[2].z, // 点3\r\n\t\t\t\tvs[3].x, vs[3].y, vs[3].z, // 点4 \r\n vs[0].x, vs[0].y, vs[0].z, // 点1\r\n\t\t\t]);\r\n let line_material = new THREE.LineBasicMaterial({ color: 0x0000ff });\r\n let line_geometry = new THREE.BufferGeometry(); \r\n line_geometry.setAttribute('position', new THREE.BufferAttribute(vertices_line, 3));\r\n // 更新边线\r\n let line = this_.meshs.find((o: any) => o.name == name + \"Line\") \r\n if(line == null){\r\n line = new THREE.Line(line_geometry, line_material);\r\n line.name = name + \"Line\";\r\n group.add(line);\r\n this_.meshs.push(line);\r\n }\r\n line.geometry = line_geometry;\r\n line.material = line_material;\r\n\r\n\r\n\r\n\r\n\t\t\tif (name == \"前\" || name == \"左\" || name == \"底\") {\r\n\t\t\t\tthis_.engine.sectionPlane.find((o: any) => o.name == name).setFromNormalAndCoplanarPoint(normal.clone().setLength(-1), box.min)\r\n\t\t\t} else {\r\n\t\t\t\tthis_.engine.sectionPlane.find((o: any) => o.name == name).setFromNormalAndCoplanarPoint(normal.clone().setLength(-1), box.max)\r\n\t\t\t}\r\n\t\t\tthis_.engine.scene.children.filter((o: any) => o.type == \"Mesh\" && o.url).forEach((mesh: any) => {\r\n \t\t\t\tif(mesh.material && Array.isArray(mesh.material)){\r\n\t\t\t\t\tmesh.material.forEach((m: any) => {\r\n\t\t\t\t\t\tm.clippingPlanes = this_.engine.sectionPlane\r\n\t\t\t\t\t})\r\n\t\t\t\t} else {\r\n\t\t\t\t\tmesh.material.clippingPlanes = this_.engine.sectionPlane\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n // 重写鼠标按下事件\r\n\thandleMouseDown(event: any) {\r\n\t\tthis.isDrag = true\r\n\t\tconst intersects = event.raycaster.intersectObjects(this.meshs, false);\r\n\t\tif (intersects != null && intersects.length > 0) {\r\n\t\t\tthis.pickPoint = intersects[0].point\r\n\t\t\tthis.pickNormal = intersects[0].face.normal\r\n\t\t\tthis.engine.controls.enabled = false\r\n\t\t\tthis.pickMesh = intersects[0].object\r\n\t\t\tthis.box_ = {\r\n\t\t\t\tmin: this.box.min.clone(),\r\n\t\t\t\tmax: this.box.max.clone()\r\n\t\t\t}\r\n\t\t\t// 创建一个虚拟平面\r\n\t\t\tif (this.pickNormal.y == 0) {\r\n\t\t\t\t// 四个侧面\r\n\t\t\t\tconst plane = new THREE.Plane(); // 法线为 (0, 1, 0),距离为 0\r\n\t\t\t\tplane.setFromNormalAndCoplanarPoint(new THREE.Vector3(0, 1, 0), this.pickPoint);\r\n\t\t\t\tthis.plane = plane\r\n\t\t\t} else {\r\n\t\t\t\t// 上下面,那就要画一个相机发向的面了\r\n\t\t\t\tlet c_point = new THREE.Vector3(this.engine.camera.position.x, this.pickPoint.y, this.engine.camera\r\n\t\t\t\t\t.position.z)\r\n\t\t\t\tconst plane = new THREE.Plane(); // 法线为 (0, 1, 0),距离为 0\r\n\t\t\t\tplane.setFromNormalAndCoplanarPoint((c_point.clone().sub(this.pickPoint.clone())).setLength(1), this\r\n\t\t\t\t\t.pickPoint);\r\n\t\t\t\tthis.plane = plane\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\thandleMouseUp(event: any) {\r\n\t\tthis.isDrag = false\r\n\t\tthis.pickPoint = null\r\n\t\tthis.pickNormal = null\r\n\t\tthis.pickMesh = null\r\n\t\tthis.engine.controls.enabled = true\r\n\r\n\t}\r\n\thandleMouseMove(event: any) {\r\n\t\t// 如果拖动的话,并且鼠标在面上 \r\n\t\tthis.meshs.forEach(m => {\r\n\t\t\tm.material.opacity = 0\r\n\t\t})\r\n\t\t// 高亮面\r\n\r\n\t\tconst intersects = event.raycaster.intersectObjects(this.meshs, false);\r\n\t\tif (intersects != null && intersects.length > 0) {\r\n\t\t\tintersects[0].object.material.opacity = 0.05\r\n\t\t}\r\n\t\t// 移动组\r\n\t\tif (this.pickPoint != null) {\r\n\t\t\t// 存储交点的变量\r\n\t\t\tconst intersectionPoint = new THREE.Vector3();\r\n\t\t\t// 计算交点\r\n\t\t\tif (event.raycaster.ray.intersectPlane(this.plane, intersectionPoint)) {\r\n\t\t\t\t// 计算在法向上移动多少量 \r\n\t\t\t\tlet dir = (intersectionPoint.clone().sub(this.pickPoint.clone())).dot(this.pickNormal.clone());\r\n\t\t\t\tif (this.pickMesh.name == \"前\" || this.pickMesh.name == \"左\" || this.pickMesh.name == \"底\") {\r\n\t\t\t\t\tthis.box.min = this.box_.min.clone().add(this.pickNormal.clone().setLength(dir))\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.box.max = this.box_.max.clone().add(this.pickNormal.clone().setLength(dir))\r\n\t\t\t\t}\r\n\t\t\t\tthis.updata_face(this.box)\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}","import * as THREE from 'three';\r\nexport class sectionPlaneZ {\r\n\r\n\tprivate engine: any;\r\n\tprivate isActive: boolean = false;\r\n\tprivate isDrag: boolean = false;\r\n\tprivate meshs: any[] = [];\r\n\tprivate box: any;\r\n\tprivate pickPoint: any;\r\n\tprivate pickNormal: any;\r\n\tprivate pickMesh: any;\r\n\tprivate box_: any;\r\n\tprivate plane: any;\r\n\tconstructor(engine: any) {\r\n\t\tthis.engine = engine\r\n\t\tthis.meshs = []\r\n\t\tthis.box = null\r\n\t}\r\n\r\n\t// 启动\r\n\tactive() {\r\n\t\tif (this.isActive == true) {\r\n\t\t\treturn\r\n\t\t}\r\n\t\tthis.isActive = true\r\n\t\tthis.init()\r\n\t\t// 初始化鼠标交互组件\r\n\t\tthis.engine.handelBehaved.init(this)\r\n\t\tthis.engine.handelBehaved.active();\r\n\t}\r\n\tdisActive() {\r\n\t\tthis.isActive = false\r\n\t\tthis.engine.handelBehaved.disActive();\r\n\t}\r\n\t// 初始化\r\n\tinit() {\r\n\t\t// 默认先以全局来生成剖切面\r\n\t\tlet box = this.engine.octreeBox.getBoundingBox()\r\n\t\tthis.box = box\r\n\r\n\t\t// 然后是6个面\r\n\t\tthis.updata_face(box);\r\n\t}\r\n\r\n\r\n\t// 更新面\r\n\tupdata_face(box: any) {\r\n\t\tlet this_ = this\r\n\t\tlet group = this_.engine.scene.children.find((o: any) => o.type == \"Group\" && o.name == \"ClippingBox\")\r\n\t\tif(group == null){\r\n\t\t\tgroup = new THREE.Group()\r\n\t\t\tgroup.name = \"ClippingBox\"\r\n\t\t\tthis_.engine.scene.add(group)\r\n\t\t} \r\n\r\n\t\tlet face = [\r\n\t\t\tnew THREE.Vector3(box.min.x, box.min.y, box.max.z),\r\n\t\t\tnew THREE.Vector3(box.min.x, box.min.y, box.min.z),\r\n\t\t\tnew THREE.Vector3(box.min.x, box.max.y, box.min.z),\r\n\t\t\tnew THREE.Vector3(box.min.x, box.max.y, box.max.z),\r\n\t\t]\r\n\r\n\t\tcreateFace(face, new THREE.Vector3(-1, 0, 0), \"左\")\r\n\t\t\r\n\t\t// 生成面\r\n\t\tfunction createFace(vs: any, normal: any, name: any) {\r\n\t\t\t// 创建几何体\r\n\t\t\tconst geometry = new THREE.BufferGeometry();\r\n\t\t\t// 设置顶点\r\n\t\t\tconst vertices = new Float32Array([\r\n\t\t\t\tvs[0].x, vs[0].y, vs[0].z, // 点1\r\n\t\t\t\tvs[1].x, vs[1].y, vs[1].z, // 点2\r\n\t\t\t\tvs[2].x, vs[2].y, vs[2].z, // 点3\r\n\t\t\t\tvs[3].x, vs[3].y, vs[3].z, // 点4\r\n\t\t\t]);\r\n\t\t\t// 设置顶点索引(定义两个三角形组成一个面)\r\n\t\t\tconst indices = [\r\n\t\t\t\t0, 1, 2, // 第一个三角形\r\n\t\t\t\t0, 2, 3, // 第二个三角形\r\n\t\t\t];\r\n\t\t\t// 将顶点和索引添加到几何体\r\n\t\t\tgeometry.setAttribute('position', new THREE.BufferAttribute(vertices, 3));\r\n\t\t\tgeometry.setIndex(indices);\r\n\t\t\tlet ms = this_.meshs.find(o => o.name == name)\r\n\t\t\tif (ms == null) {\r\n\t\t\t\tconst material = new THREE.MeshBasicMaterial({\r\n\t\t\t\t\tcolor: 0x00ff00, // 绿色\r\n\t\t\t\t\ttransparent: true,\r\n\t\t\t\t\topacity: 0.02,\r\n\t\t\t\t\tside: THREE.DoubleSide, // 双面渲染\r\n\t\t\t\t});\r\n\t\t\t\t// 创建网格\r\n\t\t\t\tconst mesh = new THREE.Mesh(geometry, material);\r\n\t\t\t\t(mesh as any).normal = normal\r\n\t\t\t\tmesh.name = name\r\n\t\t\t\tgroup.add(mesh);\r\n\t\t\t\tthis_.meshs.push(mesh)\r\n\t\t\t} else {\r\n\t\t\t\tms.geometry = geometry\r\n\t\t\t}\r\n\r\n\r\n\r\n // *****************绘制线*****************\r\n const vertices_line = new Float32Array([\r\n\t\t\t\tvs[0].x, vs[0].y, vs[0].z, // 点1\r\n\t\t\t\tvs[1].x, vs[1].y, vs[1].z, // 点2\r\n\t\t\t\tvs[2].x, vs[2].y, vs[2].z, // 点3\r\n\t\t\t\tvs[3].x, vs[3].y, vs[3].z, // 点4 \r\n vs[0].x, vs[0].y, vs[0].z, // 点1\r\n\t\t\t]);\r\n let line_material = new THREE.LineBasicMaterial({ color: 0x0000ff });\r\n let line_geometry = new THREE.BufferGeometry(); \r\n line_geometry.setAttribute('position', new THREE.BufferAttribute(vertices_line, 3));\r\n // 更新边线\r\n let line = this_.meshs.find((o: any) => o.name == name + \"Line\") \r\n if(line == null){\r\n line = new THREE.Line(line_geometry, line_material);\r\n line.name = name + \"Line\";\r\n group.add(line);\r\n this_.meshs.push(line);\r\n }\r\n line.geometry = line_geometry;\r\n line.material = line_material;\r\n\r\n\r\n\r\n\r\n\t\t\tif (name == \"前\" || name == \"左\" || name == \"底\") {\r\n\t\t\t\tthis_.engine.sectionPlane.find((o: any) => o.name == name).setFromNormalAndCoplanarPoint(normal.clone().setLength(-1), box.min)\r\n\t\t\t} else {\r\n\t\t\t\tthis_.engine.sectionPlane.find((o: any) => o.name == name).setFromNormalAndCoplanarPoint(normal.clone().setLength(-1), box.max)\r\n\t\t\t}\r\n\t\t\tthis_.engine.scene.children.filter((o: any) => o.type == \"Mesh\" && o.url).forEach((mesh: any) => {\r\n \t\t\t\tif(mesh.material && Array.isArray(mesh.material)){\r\n\t\t\t\t\tmesh.material.forEach((m: any) => {\r\n\t\t\t\t\t\tm.clippingPlanes = this_.engine.sectionPlane\r\n\t\t\t\t\t})\r\n\t\t\t\t} else {\r\n\t\t\t\t\tmesh.material.clippingPlanes = this_.engine.sectionPlane\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n\r\n // 重写鼠标按下事件\r\n\thandleMouseDown(event: any) {\r\n\t\tthis.isDrag = true\r\n\t\tconst intersects = event.raycaster.intersectObjects(this.meshs, false);\r\n\t\tif (intersects != null && intersects.length > 0) {\r\n\t\t\tthis.pickPoint = intersects[0].point\r\n\t\t\tthis.pickNormal = intersects[0].face.normal\r\n\t\t\tthis.engine.controls.enabled = false\r\n\t\t\tthis.pickMesh = intersects[0].object\r\n\t\t\tthis.box_ = {\r\n\t\t\t\tmin: this.box.min.clone(),\r\n\t\t\t\tmax: this.box.max.clone()\r\n\t\t\t}\r\n\t\t\t// 创建一个虚拟平面\r\n\t\t\tif (this.pickNormal.y == 0) {\r\n\t\t\t\t// 四个侧面\r\n\t\t\t\tconst plane = new THREE.Plane(); // 法线为 (0, 1, 0),距离为 0\r\n\t\t\t\tplane.setFromNormalAndCoplanarPoint(new THREE.Vector3(0, 1, 0), this.pickPoint);\r\n\t\t\t\tthis.plane = plane\r\n\t\t\t} else {\r\n\t\t\t\t// 上下面,那就要画一个相机发向的面了\r\n\t\t\t\tlet c_point = new THREE.Vector3(this.engine.camera.position.x, this.pickPoint.y, this.engine.camera\r\n\t\t\t\t\t.position.z)\r\n\t\t\t\tconst plane = new THREE.Plane(); // 法线为 (0, 1, 0),距离为 0\r\n\t\t\t\tplane.setFromNormalAndCoplanarPoint((c_point.clone().sub(this.pickPoint.clone())).setLength(1), this\r\n\t\t\t\t\t.pickPoint);\r\n\t\t\t\tthis.plane = plane\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\thandleMouseUp(event: any) {\r\n\t\tthis.isDrag = false\r\n\t\tthis.pickPoint = null\r\n\t\tthis.pickNormal = null\r\n\t\tthis.pickMesh = null\r\n\t\tthis.engine.controls.enabled = true\r\n\r\n\t}\r\n\thandleMouseMove(event: any) {\r\n\t\t// 如果拖动的话,并且鼠标在面上 \r\n\t\tthis.meshs.forEach(m => {\r\n\t\t\tm.material.opacity = 0\r\n\t\t})\r\n\t\t// 高亮面\r\n\r\n\t\tconst intersects = event.raycaster.intersectObjects(this.meshs, false);\r\n\t\tif (intersects != null && intersects.length > 0) {\r\n\t\t\tintersects[0].object.material.opacity = 0.05\r\n\t\t}\r\n\t\t// 移动组\r\n\t\tif (this.pickPoint != null) {\r\n\t\t\t// 存储交点的变量\r\n\t\t\tconst intersectionPoint = new THREE.Vector3();\r\n\t\t\t// 计算交点\r\n\t\t\tif (event.raycaster.ray.intersectPlane(this.plane, intersectionPoint)) {\r\n\t\t\t\t// 计算在法向上移动多少量 \r\n\t\t\t\tlet dir = (intersectionPoint.clone().sub(this.pickPoint.clone())).dot(this.pickNormal.clone());\r\n\t\t\t\tif (this.pickMesh.name == \"前\" || this.pickMesh.name == \"左\" || this.pickMesh.name == \"底\") {\r\n\t\t\t\t\tthis.box.min = this.box_.min.clone().add(this.pickNormal.clone().setLength(dir))\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.box.max = this.box_.max.clone().add(this.pickNormal.clone().setLength(dir))\r\n\t\t\t\t}\r\n\t\t\t\tthis.updata_face(this.box)\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}","import * as THREE from 'three';\r\nexport class SectionBox {\r\n private engine: any;\r\n private isActive: boolean = false;\r\n private box: any;\r\n\r\n\r\n\r\n private pickPoint: any;\r\n private pickNormal: any;\r\n private pickMesh: any;\r\n private box_: any;\r\n private plane: any;\r\n private meshs: any;\r\n private isDrag: boolean = false;\r\n constructor(engine: any) {\r\n this.engine = engine;\r\n this.meshs = []\r\n\r\n \r\n }\r\n public active() { \r\n this.isActive = true; \r\n this.init()\r\n\r\n // 初始化鼠标交互组件\r\n\t\tthis.engine.handelBehaved.init(this)\r\n\t\tthis.engine.handelBehaved.active(); \r\n }\r\n public disActive() {\r\n this.isActive = false;\r\n this.engine.handelBehaved.disActive(); \r\n } \r\n\r\n\r\n // 初始化\r\n\tinit() {\r\n\t\t// 默认先以全局来生成剖切面\r\n\t\tlet box = this.engine.octreeBox.getBoundingBox()\r\n\t\tthis.box = box \r\n\t\t// 然后是6个面\r\n\t\tthis.updata_face(box);\r\n\t}\r\n // 获取xyz值\r\n public getboxXyz(){\r\n return {\r\n minX:this.box.min.x,\r\n minY:this.box.min.y,\r\n minZ:this.box.min.z,\r\n maxX:this.box.max.x,\r\n maxY:this.box.max.y,\r\n maxZ:this.box.max.z\r\n }\r\n }\r\n\r\n public setboxXyz(xyz:any){\r\n this.box.min.x = xyz.minX\r\n this.box.min.y = xyz.minY\r\n this.box.min.z = xyz.minZ\r\n this.box.max.x = xyz.maxX\r\n this.box.max.y = xyz.maxY\r\n this.box.max.z = xyz.maxZ\r\n this.updata_face(this.box)\r\n }\r\n\r\n // 设置剖切的box\r\n public setBox(box:any){\r\n this.box = box\r\n this.updata_face(box)\r\n } \r\n // 反向剖切\r\n public reverseBox(){\r\n \r\n \r\n\r\n\r\n\r\n\r\n }\r\n\r\n\r\n \r\n // 重写鼠标按下事件\r\n handleMouseDown(event: any) {\r\n this.isDrag = true\r\n const intersects = event.raycaster.intersectObjects(this.meshs, false);\r\n if (intersects != null && intersects.length > 0) {\r\n this.pickPoint = intersects[0].point\r\n this.pickNormal = intersects[0].face.normal\r\n this.engine.controls.enabled = false\r\n this.pickMesh = intersects[0].object\r\n this.box_ = {\r\n min: this.box.min.clone(),\r\n max: this.box.max.clone()\r\n }\r\n // 创建一个虚拟平面\r\n if (this.pickNormal.y == 0) {\r\n // 四个侧面\r\n const plane = new THREE.Plane(); // 法线为 (0, 1, 0),距离为 0\r\n plane.setFromNormalAndCoplanarPoint(new THREE.Vector3(0, 1, 0), this.pickPoint);\r\n this.plane = plane\r\n } else {\r\n // 上下面,那就要画一个相机发向的面了\r\n let c_point = new THREE.Vector3(this.engine.camera.position.x, this.pickPoint.y, this.engine.camera\r\n .position.z)\r\n const plane = new THREE.Plane(); // 法线为 (0, 1, 0),距离为 0\r\n plane.setFromNormalAndCoplanarPoint((c_point.clone().sub(this.pickPoint.clone())).setLength(1), this\r\n .pickPoint);\r\n this.plane = plane\r\n }\r\n }\r\n }\r\n handleMouseUp(event: any) {\r\n this.isDrag = false\r\n this.pickPoint = null\r\n this.pickNormal = null\r\n this.pickMesh = null\r\n this.engine.controls.enabled = true\r\n\r\n }\r\n handleMouseMove(event: any) {\r\n // 如果拖动的话,并且鼠标在面上 \r\n this.meshs.forEach((m: any) => {\r\n m.material.opacity = 0\r\n })\r\n // 高亮面\r\n\r\n const intersects = event.raycaster.intersectObjects(this.meshs, false);\r\n if (intersects != null && intersects.length > 0) {\r\n intersects[0].object.material.opacity = 0.05\r\n }\r\n // 移动组\r\n if (this.pickPoint != null) {\r\n // 存储交点的变量\r\n const intersectionPoint = new THREE.Vector3();\r\n // 计算交点\r\n if (event.raycaster.ray.intersectPlane(this.plane, intersectionPoint)) {\r\n // 计算在法向上移动多少量 \r\n let dir = (intersectionPoint.clone().sub(this.pickPoint.clone())).dot(this.pickNormal.clone());\r\n if (this.pickMesh.name == \"前\" || this.pickMesh.name == \"左\" || this.pickMesh.name == \"底\") {\r\n this.box.min = this.box_.min.clone().add(this.pickNormal.clone().setLength(dir))\r\n } else {\r\n this.box.max = this.box_.max.clone().add(this.pickNormal.clone().setLength(dir))\r\n }\r\n this.updata_face(this.box)\r\n }\r\n }\r\n }\r\n\r\n\r\n\r\n\r\n // 更新面\r\n\tupdata_face(box: any) { \r\n\t\tlet this_ = this\r\n // 前后\r\n\t\tlet face1_1 = [\r\n\t\t\tnew THREE.Vector3(box.min.x, box.min.y, box.min.z),\r\n\t\t\tnew THREE.Vector3(box.max.x, box.min.y, box.min.z),\r\n\t\t\tnew THREE.Vector3(box.max.x, box.max.y, box.min.z),\r\n\t\t\tnew THREE.Vector3(box.min.x, box.max.y, box.min.z)\r\n\t\t]\r\n let face1_2 = [\r\n new THREE.Vector3(box.min.x, box.min.y, box.max.z),\r\n new THREE.Vector3(box.max.x, box.min.y, box.max.z),\r\n new THREE.Vector3(box.max.x, box.max.y, box.max.z),\r\n new THREE.Vector3(box.min.x, box.max.y, box.max.z)\r\n ]\r\n\r\n // 左右\r\n let face2_1 = [\r\n new THREE.Vector3(box.max.x, box.min.y, box.max.z),\r\n new THREE.Vector3(box.max.x, box.min.y, box.min.z),\r\n new THREE.Vector3(box.max.x, box.max.y, box.min.z),\r\n new THREE.Vector3(box.max.x, box.max.y, box.max.z)\r\n ]\r\n let face2_2 = [ \r\n new THREE.Vector3(box.min.x, box.min.y, box.min.z),\r\n new THREE.Vector3(box.min.x, box.min.y, box.max.z),\r\n new THREE.Vector3(box.min.x, box.max.y, box.max.z),\r\n new THREE.Vector3(box.min.x, box.max.y, box.min.z)\r\n ]\r\n \r\n // 上下\r\n let face3_1 = [\r\n new THREE.Vector3(box.min.x, box.max.y, box.min.z),\r\n new THREE.Vector3(box.max.x, box.max.y, box.min.z),\r\n new THREE.Vector3(box.max.x, box.max.y, box.max.z),\r\n new THREE.Vector3(box.min.x, box.max.y, box.max.z)\r\n ] \r\n let face3_2 = [ \r\n new THREE.Vector3(box.min.x, box.min.y, box.min.z),\r\n new THREE.Vector3(box.max.x, box.min.y, box.min.z),\r\n new THREE.Vector3(box.max.x, box.min.y, box.max.z),\r\n new THREE.Vector3(box.min.x, box.min.y, box.max.z)\r\n ]\r\n\r\n\r\n\t\tcreateFace(face1_1, new THREE.Vector3(0, 0, -1), \"前\")\r\n\t\tcreateFace(face1_2, new THREE.Vector3(0, 0, 1), \"后\")\r\n\t\tcreateFace(face2_1, new THREE.Vector3(1, 0, 0), \"右\")\r\n\t\tcreateFace(face2_2, new THREE.Vector3(-1, 0, 0), \"左\") \r\n createFace(face3_1, new THREE.Vector3(0, 1, 0), \"顶\")\r\n\t\tcreateFace(face3_2, new THREE.Vector3(0, -1, 0), \"底\")\r\n\t\t\r\n\t\t// 生成面\r\n\t\tfunction createFace(vs: any, normal: any, name: any) {\r\n\t\t\t// 创建几何体\r\n\t\t\tconst geometry = new THREE.BufferGeometry();\r\n\t\t\t// 设置顶点\r\n\t\t\tconst vertices = new Float32Array([\r\n\t\t\t\tvs[0].x, vs[0].y, vs[0].z, // 点1\r\n\t\t\t\tvs[1].x, vs[1].y, vs[1].z, // 点2\r\n\t\t\t\tvs[2].x, vs[2].y, vs[2].z, // 点3\r\n\t\t\t\tvs[3].x, vs[3].y, vs[3].z, // 点4\r\n\t\t\t]);\r\n\t\t\t// 设置顶点索引(定义两个三角形组成一个面)\r\n\t\t\tconst indices = [\r\n\t\t\t\t0, 1, 2, // 第一个三角形\r\n\t\t\t\t0, 2, 3, // 第二个三角形\r\n\t\t\t];\r\n\t\t\t// 将顶点和索引添加到几何体\r\n\t\t\tgeometry.setAttribute('position', new THREE.BufferAttribute(vertices, 3));\r\n\t\t\tgeometry.setIndex(indices);\r\n let group = this_.engine.scene.children.find((o: any) => o.type == \"Group\" && o.name == \"ClippingBox\")\r\n if(group == null){\r\n group = new THREE.Group()\r\n group.name = \"ClippingBox\"\r\n this_.engine.scene.add(group)\r\n } \r\n\t\t\tlet ms = this_.meshs.find((o: any) => o.name == name)\r\n\t\t\tif (ms == null) {\r\n\t\t\t\tconst material = new THREE.MeshBasicMaterial({\r\n\t\t\t\t\tcolor: 0x00ff00, // 绿色\r\n\t\t\t\t\ttransparent: true,\r\n\t\t\t\t\topacity: 0,\r\n\t\t\t\t\tside: THREE.DoubleSide, // 双面渲染\r\n\t\t\t\t});\r\n\t\t\t\t// 创建网格\r\n\t\t\t\tconst mesh = new THREE.Mesh(geometry, material);\r\n\t\t\t\t(mesh as any).normal = normal\r\n\t\t\t\tmesh.name = name\r\n\t\t\t\tgroup.add(mesh);\r\n\t\t\t\tthis_.meshs.push(mesh) \r\n\t\t\t} else {\r\n\t\t\t\tms.geometry = geometry\r\n\t\t\t}\r\n\r\n\r\n // *****************绘制线*****************\r\n const vertices_line = new Float32Array([\r\n\t\t\t\tvs[0].x, vs[0].y, vs[0].z, // 点1\r\n\t\t\t\tvs[1].x, vs[1].y, vs[1].z, // 点2\r\n\t\t\t\tvs[2].x, vs[2].y, vs[2].z, // 点3\r\n\t\t\t\tvs[3].x, vs[3].y, vs[3].z, // 点4 \r\n vs[0].x, vs[0].y, vs[0].z, // 点1\r\n\t\t\t]);\r\n let line_material = new THREE.LineBasicMaterial({ color: 0x0000ff });\r\n let line_geometry = new THREE.BufferGeometry(); \r\n line_geometry.setAttribute('position', new THREE.BufferAttribute(vertices_line, 3));\r\n // 更新边线\r\n let line = this_.meshs.find((o: any) => o.name == name + \"Line\") \r\n if(line == null){\r\n line = new THREE.Line(line_geometry, line_material);\r\n line.name = name + \"Line\";\r\n group.add(line);\r\n this_.meshs.push(line);\r\n }\r\n line.geometry = line_geometry;\r\n line.material = line_material;\r\n \r\n\r\n // *****************更新平面*****************\r\n\t\t\tif (name == \"前\" || name == \"左\" || name == \"底\") {\r\n\t\t\t\tthis_.engine.sectionPlane.find((o: any) => o.name == name).setFromNormalAndCoplanarPoint(normal.clone().setLength(-1), box.min)\r\n\t\t\t} else {\r\n\t\t\t\tthis_.engine.sectionPlane.find((o: any) => o.name == name).setFromNormalAndCoplanarPoint(normal.clone().setLength(-1), box.max)\r\n\t\t\t}\r\n\t\t\tthis_.engine.scene.children.filter((o: any) => o.type == \"Mesh\" && o.url).forEach((mesh: any) => {\r\n \t\t\t\tif(mesh.material && Array.isArray(mesh.material)){\r\n\t\t\t\t\tmesh.material.forEach((m: any) => {\r\n\t\t\t\t\t\tm.clippingPlanes = this_.engine.sectionPlane\r\n\t\t\t\t\t})\r\n\t\t\t\t} else {\r\n\t\t\t\t\tmesh.material.clippingPlanes = this_.engine.sectionPlane\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n}","import * as THREE from 'three';\r\nexport class ClippingStencil {\r\n private engine: any;\r\n public planeObjects:any[] = []\r\n public planes:any[] = []\r\n public isActive:boolean = false;\r\n private planeSize: number = 100; // 缓存平面大小,避免每帧计算\r\n\r\n constructor(engine: any) {\r\n this.engine = engine;\r\n // 添加一个group专门用来放剖切模型\r\n\r\n\r\n }\r\n\r\n\r\n public init(){\r\n // 计算场景包围盒一次,用于确定合适的平面尺寸\r\n this.calculateSceneSize();\r\n\r\n // 使用计算好的平面大小\r\n const planeGeom = new THREE.PlaneGeometry( this.planeSize, this.planeSize );\r\n let i = 0\r\n this.planes.forEach((plane:any)=>{\r\n const poGroup = new THREE.Group();\r\n // 默认灰色\r\n const planeMat = new THREE.MeshStandardMaterial( {\r\n color:new THREE.Color(0x808080),\r\n metalness: 0.1,\r\n roughness: 0.75,\r\n clippingPlanes: this.planes.filter( p => p !== plane ),\r\n stencilWrite: true,\r\n stencilRef: 0,\r\n stencilFunc: THREE.NotEqualStencilFunc,\r\n stencilFail: THREE.ReplaceStencilOp,\r\n stencilZFail: THREE.ReplaceStencilOp,\r\n stencilZPass: THREE.ReplaceStencilOp,\r\n side: THREE.DoubleSide,\r\n depthWrite: true,\r\n depthTest: true\r\n } );\r\n const po = new THREE.Mesh( planeGeom, planeMat );\r\n po.onAfterRender = function ( renderer ) {\r\n renderer.clearStencil();\r\n };\r\n po.renderOrder = i + 1.1;\r\n // 初始时不可见,只有在剖切激活时才显示\r\n po.visible = false;\r\n this.planeObjects.push(po)\r\n i = i + 1\r\n\r\n poGroup.add( po );\r\n\t\t\tthis.engine.scene.add( poGroup );\r\n })\r\n }\r\n\r\n public active() {\r\n this.isActive = true;\r\n // 激活时显示补面\r\n this.planeObjects.forEach(po => {\r\n po.visible = true;\r\n });\r\n }\r\n public disActive() {\r\n this.isActive = false;\r\n // 停用时隐藏补面\r\n this.planeObjects.forEach(po => {\r\n po.visible = false;\r\n });\r\n }\r\n \r\n\r\n // 计算场景大小(只在初始化和添加模型时调用)\r\n private calculateSceneSize() {\r\n const boundingBox = new THREE.Box3();\r\n this.engine.scene.traverse((obj: any) => {\r\n if (obj.isMesh && obj.geometry) {\r\n const box = new THREE.Box3().setFromObject(obj);\r\n boundingBox.union(box);\r\n }\r\n });\r\n\r\n if (!boundingBox.isEmpty()) {\r\n const size = boundingBox.getSize(new THREE.Vector3());\r\n const maxSize = Math.max(size.x, size.y, size.z);\r\n // 使用场景最大尺寸的2倍作为补面大小\r\n this.planeSize = maxSize * 2;\r\n } else {\r\n // 如果场景为空,使用默认大小\r\n this.planeSize = 100;\r\n }\r\n }\r\n\r\n // 添加模型\r\n public addMesh(plane:any,mesh:any){\r\n const group = this.createPlaneStencilGroup(mesh.geometry.clone(),plane,1)\r\n this.engine.scene.add(group)\r\n // 添加模型后重新计算场景大小\r\n this.calculateSceneSize();\r\n // 更新所有平面对象的几何体\r\n this.updatePlaneGeometry();\r\n }\r\n\r\n // 更新平面几何体大小\r\n private updatePlaneGeometry() {\r\n const newGeom = new THREE.PlaneGeometry(this.planeSize, this.planeSize);\r\n this.planeObjects.forEach(po => {\r\n po.geometry.dispose();\r\n po.geometry = newGeom;\r\n });\r\n }\r\n \r\n // 生成补面模型\r\n public createPlaneStencilGroup( geometry:any, plane:any, renderOrder:any ) { \r\n const group = new THREE.Group();\r\n const baseMat = new THREE.MeshBasicMaterial();\r\n baseMat.depthWrite = false;\r\n baseMat.depthTest = false;\r\n baseMat.colorWrite = false;\r\n baseMat.stencilWrite = true;\r\n baseMat.stencilFunc = THREE.AlwaysStencilFunc;\r\n\r\n // back faces\r\n const mat0 = baseMat.clone();\r\n mat0.side = THREE.BackSide;\r\n mat0.clippingPlanes = [ plane ];\r\n mat0.stencilFail = THREE.IncrementWrapStencilOp;\r\n mat0.stencilZFail = THREE.IncrementWrapStencilOp;\r\n mat0.stencilZPass = THREE.IncrementWrapStencilOp;\r\n\r\n const mesh0 = new THREE.Mesh( geometry, mat0 );\r\n mesh0.renderOrder = renderOrder;\r\n group.add( mesh0 );\r\n\r\n // front faces\r\n const mat1 = baseMat.clone(); \r\n mat1.side = THREE.FrontSide;\r\n mat1.clippingPlanes = [ plane ];\r\n mat1.stencilFail = THREE.DecrementWrapStencilOp;\r\n mat1.stencilZFail = THREE.DecrementWrapStencilOp;\r\n mat1.stencilZPass = THREE.DecrementWrapStencilOp;\r\n\r\n const mesh1 = new THREE.Mesh( geometry, mat1 );\r\n mesh1.renderOrder = renderOrder;\r\n\r\n group.add( mesh1 );\r\n\r\n return group;\r\n\r\n }\r\n\r\n\r\n\r\n\r\n\r\n\r\n // 更新\r\n public updata(){\r\n if(!this.isActive){\r\n return\r\n }\r\n // 更新平面位置和方向\r\n for ( let i = 0; i < this.planeObjects.length; i ++ ) {\r\n const plane = this.planes[ i ];\r\n const po = this.planeObjects[ i ];\r\n\r\n // 只有当平面的constant不是极大值时才显示(表示平面被激活)\r\n if (Math.abs(plane.constant) < 99999) {\r\n po.visible = true;\r\n plane.coplanarPoint( po.position );\r\n po.lookAt(\r\n po.position.x - plane.normal.x,\r\n po.position.y - plane.normal.y,\r\n po.position.z - plane.normal.z,\r\n );\r\n } else {\r\n // 未激活的平面隐藏\r\n po.visible = false;\r\n }\r\n }\r\n }\r\n\r\n}","/* \r\n * ClippingManager - 剖切管理器\r\n * 负责剖切的管理和操作\r\n */\r\n\r\nimport * as THREE from 'three';\r\n\r\nimport {sectionPlaneX} from './section_plane_x.ts';\r\nimport {sectionPlaneY} from './section_plane_y.ts';\r\nimport {sectionPlaneZ} from './section_plane_z.ts';\r\nimport {SectionBox} from './section_box.ts';\r\nimport {ClippingStencil} from './clipping_stencil.ts';\r\n\r\n// 导出新的 CSG 剖切方案\r\nexport {ClippingCSG} from './clipping_csg.ts';\r\nexport {ClippingCSGOptimized} from './clipping_csg_optimized.ts';\r\nexport {CSGClippingManager} from './clipping_csg_example.ts';\r\n\r\n// 剖切管理器类\r\nexport class Clipping {\r\n private engine: any;\r\n \r\n public sectionPlaneX: any;\r\n public sectionPlaneY: any;\r\n public sectionPlaneZ: any; \r\n public sectionBox: any;\r\n public clippingStencil: any;\r\n\r\n constructor(engine: any) {\r\n this.engine = engine;\r\n this.sectionPlaneX = new sectionPlaneX(engine);\r\n this.sectionPlaneY = new sectionPlaneY(engine);\r\n this.sectionPlaneZ = new sectionPlaneZ(engine); \r\n this.sectionBox = new SectionBox(engine);\r\n // 新建三个平面\r\n let plane1: any = new THREE.Plane(new THREE.Vector3(0, 0, 1), 100000)\r\n plane1.name = \"前\"\r\n let plane2: any = new THREE.Plane(new THREE.Vector3(0, 0, 1), 100000)\r\n plane2.name = \"左\"\r\n let plane3: any = new THREE.Plane(new THREE.Vector3(0, 0, 1), 100000)\r\n plane3.name = \"后\"\r\n let plane4: any = new THREE.Plane(new THREE.Vector3(0, 0, 1), 100000)\r\n plane4.name = \"右\"\r\n let plane5: any = new THREE.Plane(new THREE.Vector3(0, 0, 1), 100000)\r\n plane5.name = \"顶\"\r\n let plane6: any = new THREE.Plane(new THREE.Vector3(0, 0, 1), 100000)\r\n plane6.name = \"底\"\r\n this.engine.sectionPlane = [plane1, plane2, plane3, plane4, plane5, plane6] \r\n\r\n this.clippingStencil = new ClippingStencil(engine);\r\n this.clippingStencil.planes = [plane1, plane2, plane3, plane4, plane5, plane6]\r\n this.clippingStencil.init()\r\n // 不要立即激活,等待实际剖切操作时再激活\r\n this.clippingStencil.active()\r\n }\r\n \r\n\r\n public disActive() {\r\n this.sectionPlaneX.disActive();\r\n this.sectionPlaneY.disActive();\r\n this.sectionPlaneZ.disActive();\r\n this.sectionBox.disActive();\r\n }\r\n}","export class ModelTree {\r\n private engine: any;\r\n constructor(engine: any) {\r\n this.engine = engine;\r\n } \r\n // 获取模型树数据\r\n public getTreeData():any[]{\r\n let treeData:any[] = []\r\n this.engine.engineStatus.models.forEach((model: any) => {\r\n treeData.push({\r\n children:model.info.modelTree.modelTreeLevel,\r\n name:model.info.baseInfo.name,\r\n })\r\n \r\n })\r\n return treeData\r\n } \r\n}","import * as THREE from 'three';\r\n\r\n/**\r\n * 引擎信息统计类\r\n * 用于统计引擎中模型的顶点和三角面数量\r\n */\r\nexport class EngineInfo {\r\n private engine: any;\r\n \r\n constructor(engine: any) {\r\n this.engine = engine;\r\n }\r\n\r\n /**\r\n * 获取引擎统计信息\r\n * 统计场景中所有网格的顶点数和三角面数\r\n * @returns 返回包含顶点数和三角面数的对象\r\n */\r\n public getEngineInfo(): {\r\n totalVertices: number; // 总顶点数\r\n totalTriangles: number; // 总三角面数\r\n meshCount: number; // 网格数量\r\n } {\r\n // 初始化统计变量\r\n let totalVertices = 0; // 总顶点数\r\n let totalTriangles = 0; // 总三角面数\r\n let meshCount = 0; // 网格数量\r\n\r\n // 检查场景是否存在\r\n if (!this.engine || !this.engine.scene) {\r\n return {\r\n totalVertices: 0,\r\n totalTriangles: 0,\r\n meshCount: 0\r\n };\r\n }\r\n\r\n // 遍历场景中的所有对象(包括嵌套的 Group)\r\n this.engine.scene.traverse((object: any) => {\r\n // 只处理 Mesh 类型的对象\r\n if (object instanceof THREE.Mesh) {\r\n const geometry = object.geometry;\r\n \r\n // 检查几何体是否存在\r\n if (geometry && geometry.attributes) {\r\n // 获取顶点位置属性\r\n const positionAttribute = geometry.attributes.position;\r\n \r\n if (positionAttribute) {\r\n // 累加顶点数\r\n const vertexCount = positionAttribute.count;\r\n totalVertices += vertexCount;\r\n \r\n // 计算三角面数\r\n let triangleCount = 0;\r\n \r\n // 如果几何体有索引,使用索引计算三角面数\r\n if (geometry.index) {\r\n // 索引数量除以3得到三角面数(每个三角形有3个索引)\r\n triangleCount = geometry.index.count / 3;\r\n } else {\r\n // 如果没有索引,顶点数除以3得到三角面数\r\n triangleCount = vertexCount / 3;\r\n }\r\n \r\n // 累加三角面数\r\n totalTriangles += triangleCount;\r\n \r\n // 增加网格计数\r\n meshCount++;\r\n }\r\n }\r\n }\r\n });\r\n\r\n // 返回统计结果\r\n return {\r\n totalVertices: Math.floor(totalVertices),\r\n totalTriangles: Math.floor(totalTriangles),\r\n meshCount: meshCount\r\n };\r\n }\r\n}\r\n","import { LoadZipJson } from \"../../../../common/LoadJSON\";\r\nexport class ModelProperties {\r\n private engine: any;\r\n constructor(engine: any) {\r\n this.engine = engine;\r\n }\r\n public init(){\r\n \r\n } \r\n // 查询构件属性\r\n public getModelProperties(url: string, id: string,callback: (properties: any) => void){ \r\n // 判断是否加载了模型属性\r\n let model = this.engine.engineStatus.models.find((model: any) => model.url === url)\r\n if(model.properties==null){\r\n LoadZipJson(url+'/property.zip',(res:any)=>{ \r\n let json = JSON.parse(res)\r\n model.properties = json \r\n setTimeout(()=>{\r\n getProperties(json,id,callback)\r\n },100)\r\n })\r\n } \r\n getProperties(model.properties,id,callback) \r\n // 查询消息\r\n function getProperties(json: any,id: string,callback: (properties: any) => void){\r\n let result:any[] = []\r\n let infos = json.models[(id.toString())||'']\r\n let groupIndexs = infos.map((item: any) => item[0])\r\n // 去重\r\n groupIndexs = groupIndexs.filter((item: any,index: number) => groupIndexs.indexOf(item) === index)\r\n // 查询组信息\r\n groupIndexs.forEach((item: any) => { \r\n let child:any = {\r\n name:json.categorys[item],\r\n children:[] \r\n }; \r\n result.push(child); \r\n infos.filter((o:any)=>o[0]===item).forEach((item: any) => {\r\n child.children.push({\r\n name:json.names[item[1]],\r\n value:json.values[item[2]], \r\n })\r\n }) \r\n }) \r\n if(callback!=null){\r\n callback({\r\n properties:result,\r\n materials:[]\r\n })\r\n }\r\n }\r\n }\r\n}","import * as THREE from 'three';\r\n\r\n\r\nexport class ModelMapperBatch {\r\n private engine: any; \r\n\r\n constructor(engine: any) {\r\n this.engine = engine;\r\n }\r\n\r\n // 获取模型中所有的类型\r\n public getModelTypes(){\r\n let result:any[] = [];\r\n this.engine.engineStatus.models.forEach((model:any)=>{\r\n let mappers = model.info.modelMapper;\r\n mappers.forEach((mapper:any)=>{\r\n result.push(mapper.typeName);\r\n });\r\n });\r\n }\r\n // 获取模型中所有的专业\r\n public getModelMajors(){\r\n let result:any[] = [];\r\n this.engine.engineStatus.models.forEach((model:any)=>{\r\n let mappers = model.info.modelMapper;\r\n mappers.forEach((mapper:any)=>{\r\n result.push(mapper.majorName);\r\n });\r\n });\r\n }\r\n // 获取模型中所有的楼层\r\n public getModelLevels(){\r\n let result:any[] = [];\r\n this.engine.engineStatus.models.forEach((model:any)=>{\r\n let mappers = model.info.modelMapper;\r\n mappers.forEach((mapper:any)=>{\r\n result.push(mapper.levelName);\r\n });\r\n });\r\n }\r\n // 批量获取模型映射\r\n public getModelMappers(models:any[]){\r\n \r\n \r\n\r\n\r\n\r\n\r\n\r\n\r\n }\r\n // 获取模型的mapper\r\n public getModelMapper(url:string,id:number){\r\n let model = this.engine.engineStatus.models.find((model:any)=>{\r\n return model.url == url;\r\n });\r\n if(!model){\r\n return null;\r\n }\r\n let mappers = model.info.modelMapper;\r\n let mapper = mappers.find((mapper:any)=>{\r\n return mapper.id == id;\r\n });\r\n return mapper;\r\n }\r\n \r\n // 获取通类构件\r\n public getModelSWithType(type:string,callback:any){\r\n let result:any[] = [];\r\n this.engine.engineStatus.models.forEach((model:any)=>{\r\n let child = {\r\n url:model.url,\r\n ids:[] as number[]\r\n }\r\n result.push(child);\r\n let mappers = model.info.modelMapper;\r\n mappers.filter((mapper:any)=>{\r\n return mapper.typeName === type;\r\n }).forEach((mapper:any)=>{\r\n child.ids.push(Number(mapper.id));\r\n }); \r\n });\r\n callback(result);\r\n return result;\r\n } \r\n // 获取同层构件\r\n public getModelSWithLevel(level:string,callback:any){\r\n let result:any[] = [];\r\n this.engine.engineStatus.models.forEach((model:any)=>{\r\n let child = {\r\n url:model.url,\r\n ids:[] as number[]\r\n }\r\n result.push(child);\r\n let mappers = model.info.modelMapper;\r\n mappers.filter((mapper:any)=>{\r\n return mapper.levelName === level;\r\n }).forEach((mapper:any)=>{\r\n child.ids.push(Number(mapper.id));\r\n }); \r\n });\r\n callback(result);\r\n return result;\r\n } \r\n // 获取通专业构件 \r\n public getModelsWithMajor(major:string,callback:any){ \r\n let result:any[] = [];\r\n this.engine.engineStatus.models.forEach((model:any)=>{\r\n let child = {\r\n url:model.url,\r\n ids:[] as number[]\r\n }\r\n result.push(child);\r\n let mappers = model.info.modelMapper;\r\n mappers.filter((mapper:any)=>{\r\n return mapper.majorName === major;\r\n }).forEach((mapper:any)=>{\r\n child.ids.push(Number(mapper.id));\r\n }); \r\n });\r\n callback(result);\r\n return result;\r\n } \r\n\r\n}","// 边线管理器\r\nimport * as THREE from \"three\";\r\nimport { Group } from \"three/examples/jsm/libs/tween.module.js\";\r\nexport class ModelEdge{ \r\n private engine: any;\r\n private isActive: boolean = false; \r\n private groupEdge: any;\r\n private material: any;\r\n private indexes:Map<string,any> = new Map<string,any>();\r\n constructor(engine: any){\r\n this.engine = engine; \r\n this.groupEdge = this.engine.scene.getObjectByName(\"groupEdge\");\r\n this.material = new THREE.LineBasicMaterial({\r\n color: \"#000000\",\r\n depthTest: true,\r\n }); \r\n }\r\n\r\n\r\n // 启动\r\n public active(){\r\n this.isActive = true;\r\n this.groupEdge.visible = true;\r\n this.show()\r\n } \r\n // 关闭\r\n public disActive(){\r\n this.isActive = false;\r\n this.groupEdge.visible = false;\r\n }\r\n \r\n\r\n // 显示模型边线\r\n private show(){\r\n // 遍历所有的模型\r\n this.engine.engineStatus.models.forEach((item:any)=>{\r\n let model = this.groupEdge.children.find((x:any)=>x.url == item.url)\r\n if(!model){\r\n let json = item.info;\r\n let positions:any[] = []\r\n let itemIndex:Map<Number,any> = new Map<Number,any>();\r\n json.modelEdge.forEach((edge_ele:any)=>{\r\n let index_:Number = positions.length\r\n for(let i=0;i<edge_ele.points.length;i++){\r\n if(edge_ele.points[i].length==2){\r\n positions.push(edge_ele.points[i][0].X)\r\n positions.push(edge_ele.points[i][0].Z)\r\n positions.push(-edge_ele.points[i][0].Y)\r\n\r\n positions.push(edge_ele.points[i][1].X)\r\n positions.push(edge_ele.points[i][1].Z)\r\n positions.push(-edge_ele.points[i][1].Y)\r\n }\r\n }\r\n itemIndex.set(Number(edge_ele.id),[index_,positions.length,edge_ele.points]);\r\n })\r\n this.indexes.set(item.url,itemIndex);\r\n let geometry = new THREE.BufferGeometry();\r\n geometry.setAttribute(\"position\", new THREE.Float32BufferAttribute(positions, 3));\r\n const line = new THREE.LineSegments(geometry, this.material);\r\n (line as any).url = item.url;\r\n this.groupEdge.add(line);\r\n }\r\n })\r\n }\r\n\r\n // 获取指定模型的边线\r\n public getModelEdge(url:string,id:Number){\r\n let itemIndex = this.indexes.get(url); \r\n if(itemIndex){\r\n let item = itemIndex.get(id);\r\n if(item){\r\n return item;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n\r\n\r\n //隐藏边线\r\n public hideModelEdge(url:string,id:Number){\r\n let itemIndex = this.indexes.get(url);\r\n if(itemIndex){\r\n let item = itemIndex.get(id);\r\n if(item){\r\n let [start,end,points_] = item;\r\n let line = this.groupEdge.children.find((x:any)=>(x as any).url == url);\r\n if(line){\r\n let positions = line.geometry.attributes.position.array;\r\n // 将所有顶点坐标设置为 NaN 或使用很大的值让其不可见\r\n for(let i=start;i<end;i++){\r\n positions[i] = NaN;\r\n }\r\n // 标记需要更新\r\n line.geometry.attributes.position.needsUpdate = true;\r\n }\r\n }\r\n }\r\n }\r\n // 显示边线\r\n public showModelEdge(url:string,id:Number){\r\n let itemIndex = this.indexes.get(url);\r\n if(itemIndex){\r\n let item = itemIndex.get(id);\r\n if(item){\r\n let [start,end,points_] = item;\r\n let line = this.groupEdge.children.find((x:any)=>(x as any).url == url);\r\n if(line){\r\n let positions = line.geometry.attributes.position.array;\r\n // 从原始点数据恢复坐标\r\n let pointIndex = 0;\r\n for(let i=start;i<end;i+=3){\r\n const pointPairIndex = Math.floor(pointIndex / 6);\r\n const isSecondPoint = (pointIndex % 6) >= 3;\r\n if(points_[pointPairIndex] && points_[pointPairIndex].length === 2){\r\n const point = isSecondPoint ? points_[pointPairIndex][1] : points_[pointPairIndex][0];\r\n positions[i] = point.X;\r\n positions[i+1] = point.Z;\r\n positions[i+2] = -point.Y;\r\n }\r\n pointIndex += 3;\r\n }\r\n // 标记需要更新\r\n line.geometry.attributes.position.needsUpdate = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n\r\n\r\n\r\n\r\n \r\n}","import * as THREE from 'three';\r\nimport { SceneModule } from './modules/sceneModule';\r\nimport { CameraModule } from './modules/cameraModule';\r\nimport { DeviceModule } from './modules/deviceModule';\r\nimport { RenderModule } from './modules/renderModule';\r\nimport { ControlModule } from './modules/controlModule';\r\nimport { ComposerModule } from './modules/composerModule';\r\nimport { LoaderModule } from './modules/loaderModule';\r\nimport { EngineStatus } from './status/engineStatus';\r\nimport { EventModule } from './modules/eventModule';\r\nimport { LightModule } from './modules/lightModule';\r\nimport { InteractionModule } from './modules/interactionModule';\r\nimport { ModelToolModule } from './modules/modelToolModule';\r\nimport { HandelBehaved } from './status/handelBehaved';\r\nimport { WorldToScreen } from '../../common/WorldToScreen';\r\n\r\n\r\nimport Stats from 'stats.js';\r\n\r\nimport { ViewCube } from './managers/viewCube';\r\nimport { OctreeBox } from './managers/octreeBox';\r\nimport { RangeScale } from './managers/rangeScale';\r\nimport { Setting } from './managers/setting';\r\nimport { Measure } from './managers/measure';\r\nimport { Clipping } from './managers/clipping';\r\nimport { ModelTree } from './managers/modelTree';\r\nimport { EngineInfo } from './managers/engineInfo';\r\nimport { ModelProperties } from './managers/modelProperties';\r\nimport { ModelMapperBatch } from './managers/modelMapperBatch';\r\nimport { ModelEdge } from './managers/modelEdge';\r\n\r\n\r\n\r\n\r\n// 引擎核心组件\r\nexport class EngineKernelV2{\r\n // 引擎参数\r\n private options: any; \r\n private DeviceType: string; \r\n private animationId: number | null = null;\r\n private animate: () => void; \r\n // 基础模块\r\n public scene: THREE.Scene|null;\r\n public camera: THREE.Camera|null;\r\n public renderer: THREE.WebGLRenderer|null;\r\n public sceneModule: SceneModule;\r\n public cameraModule: CameraModule;\r\n public deviceModule: DeviceModule;\r\n public renderModule: RenderModule;\r\n public controlModule: ControlModule;\r\n public composerModule: ComposerModule;\r\n public loaderModule: LoaderModule;\r\n public engineStatus: EngineStatus;\r\n public events: EventModule;\r\n public lightModule: LightModule;\r\n public interactionModule: InteractionModule;\r\n public modelToolModule: ModelToolModule;\r\n public worldToScreen: WorldToScreen;\r\n public handelBehaved: typeof HandelBehaved;\r\n public octreeBox: any;\r\n public controls: any;\r\n public stats: Stats;\r\n public catchSvg: SVGSVGElement;\r\n\r\n\r\n\r\n\r\n\r\n // 功能模块 \r\n public viewCube: ViewCube;\r\n public rangeScale: RangeScale;\r\n public setting: Setting;\r\n public measure: Measure;\r\n public clipping: Clipping;\r\n public modelTree: ModelTree;\r\n public engineInfo: EngineInfo;\r\n public modelProperties: ModelProperties;\r\n public modelMapperBatch: ModelMapperBatch;\r\n public modelEdge: ModelEdge;\r\n\r\n // 业务数据\r\n public models: any[] = [];\r\n\r\n\r\n\r\n // 引擎容器\r\n private container: HTMLElement|null;\r\n constructor(options: any){\r\n // 引擎参数\r\n this.options = options;\r\n // 引擎容器\r\n this.container = document.getElementById(options.containerId);\r\n if(!this.container){\r\n throw new Error(`Container ${options.containerId} not found`);\r\n }\r\n // 初始化设备模块\r\n this.deviceModule = new DeviceModule(this);\r\n this.DeviceType = this.deviceModule.getDeviceType(); \r\n // 初始化相机模块\r\n this.cameraModule = new CameraModule(this);\r\n // 初始化三维场景 \r\n this.sceneModule = new SceneModule(this);\r\n this.scene = this.sceneModule.scene; \r\n // 初始化渲染模块\r\n this.renderModule = new RenderModule(this);\r\n this.renderer = this.renderModule.createRenderer();\r\n this.camera = this.cameraModule.orthographicCamera;\r\n (this.scene as any).camera = this.camera;\r\n // 初始化控制模块\r\n this.controlModule = new ControlModule(this); \r\n this.controlModule.switchDefaultMode();\r\n this.controls = this.controlModule.orbitControls;\r\n // 初始化合成器模块\r\n this.composerModule = new ComposerModule(this);\r\n this.composerModule.init(); \r\n // 初始化引擎状态\r\n this.events = new EventModule();\r\n this.engineStatus = new EngineStatus(this);\r\n this.engineStatus.init();\r\n // 初始化加载器模块\r\n this.loaderModule = new LoaderModule(this); \r\n // 初始化光照模块\r\n this.lightModule = new LightModule(this);\r\n this.lightModule.init();\r\n // 初始化视图小方块\r\n this.viewCube = new ViewCube(this);\r\n this.viewCube.init();\r\n // 初始化八叉树\r\n this.octreeBox = OctreeBox(this); \r\n // 初始化范围缩放\r\n this.rangeScale = new RangeScale(this);\r\n this.rangeScale.init();\r\n // 初始化剖切\r\n this.clipping = new Clipping(this); \r\n // 初始化设置\r\n this.setting = new Setting(this);\r\n this.setting.init();\r\n\r\n this.handelBehaved = HandelBehaved(this);\r\n\r\n // 初始化模型批量\r\n this.modelMapperBatch = new ModelMapperBatch(this);\r\n // 初始化测量\r\n this.measure = new Measure(this); \r\n\r\n this.modelToolModule = new ModelToolModule(this);\r\n\r\n // 初始化模型属性\r\n this.modelProperties = new ModelProperties(this);\r\n // 初始化交互模块\r\n this.interactionModule = new InteractionModule(this);\r\n this.interactionModule.init();\r\n this.interactionModule.active();\r\n\r\n // 初始化模型边线\r\n this.modelEdge = new ModelEdge(this);\r\n\r\n // 初始化模型树\r\n this.modelTree = new ModelTree(this); \r\n\r\n // 初始化引擎信息统计\r\n this.engineInfo = new EngineInfo(this);\r\n // 事件监听\r\n\r\n this.worldToScreen = new WorldToScreen(this.camera, this.renderer, this.scene as any);\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n // 初始化性能监视器\r\n this.stats = new Stats();\r\n this.stats.showPanel(0); // 0: fps, 1: ms, 2: mb, 3+: custom\r\n this.stats.dom.style.position = 'absolute';\r\n this.stats.dom.style.top = '0px';\r\n this.stats.dom.style.left = '0px';\r\n this.stats.dom.style.zIndex = '1000';\r\n this.container.appendChild(this.stats.dom);\r\n\r\n // 捕捉点 - 创建SVG覆盖层\r\n let catchSvg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\r\n catchSvg.style.position = 'absolute';\r\n catchSvg.style.width = '100%';\r\n catchSvg.style.height = '100%';\r\n catchSvg.style.zIndex = '1000';\r\n catchSvg.style.left = '0px';\r\n catchSvg.style.top = '0px';\r\n catchSvg.style.pointerEvents = 'none';\r\n // 设置viewBox以匹配渲染器的实际尺寸\r\n const rendererWidth = this.renderer?.domElement.width || 1920;\r\n const rendererHeight = this.renderer?.domElement.height || 1080;\r\n catchSvg.setAttribute('viewBox', `0 0 ${rendererWidth} ${rendererHeight}`);\r\n catchSvg.setAttribute('preserveAspectRatio', 'none');\r\n this.container.appendChild(catchSvg);\r\n this.catchSvg = catchSvg;\r\n\r\n\r\n\r\n\r\n\r\n // 刷帧\r\n this.animate = () => {\r\n this.animationId = requestAnimationFrame(this.animate); \r\n if (this.stats) {\r\n this.stats.begin();\r\n }\r\n\r\n if (this.composerModule) {\r\n //this.composerModule.composer.render();\r\n }\r\n this.renderer?.render(this.scene as any, this.camera as any);\r\n\r\n\r\n \r\n this.viewCube.cubeTool.RenderScene();\r\n //this.renderer?.render(this.scene as any, this.camera as any);\r\n this.measure.update();\r\n\r\n this.controlModule.update();\r\n\r\n\r\n if(this.clipping && this.clipping.clippingStencil){\r\n this.clipping.clippingStencil.updata();\r\n }\r\n \r\n\r\n\r\n if (this.stats) {\r\n this.stats.end();\r\n }\r\n };\r\n this.animate();\r\n \r\n\r\n }\r\n}","import { EngineKernelV2 } from './core/v2/EngineKernel'; \r\nimport * as THREE from 'three';\r\nimport { EngineOptions } from './types';\r\n\r\n/**\r\n * Factory function to create the BIM Engine instance.\r\n * \r\n * @param options Configuration options\r\n * @returns An instance adhering to IBimEngine interface\r\n */\r\nexport function createEngine(options: EngineOptions){ \r\n let engine = new EngineKernelV2(options); \r\n return engine;\r\n} "],"names":["SceneModule","engine","THREE","groupEdge","CameraModule","frustumSize","aspect","currentPosition","currentTarget","camera","type","pose","DeviceModule","RenderModule","width","height","_changeEvent","_startEvent","_endEvent","_ray","Ray","_plane","Plane","_TILT_LIMIT","MathUtils","_v","Vector3","_twoPI","_STATE","_EPS","OrbitControls","Controls","object","domElement","MOUSE","TOUCH","Quaternion","Spherical","Vector2","onPointerMove","onPointerDown","onPointerUp","onContextMenu","onMouseWheel","onKeyDown","onTouchStart","onTouchMove","onMouseDown","onMouseMove","interceptControlDown","interceptControlUp","element","deltaTime","position","min","max","zoomChanged","prevRadius","newRadius","radiusDelta","mouseBefore","prevZoom","mouseAfter","delta","normalizedDelta","angle","distance","objectMatrix","deltaX","deltaY","targetDistance","dollyScale","x","y","rect","dx","dy","w","h","dist","event","needsUpdate","centerX","centerY","i","pointerId","mode","newEvent","mouseAction","FirstPersonCameraControl","_Engine","rayCastObjects","colliders","isEnabled","deviceType","isPC","direction","movementX","movementY","xVal","myEvent","value","isFalling","intersect","newPosition","clonePosition","minHeight","BoundingBox","origin","ground","ControlModule","CopyShader","Pass","_camera","OrthographicCamera","FullscreenTriangleGeometry","BufferGeometry","Float32BufferAttribute","_geometry","FullScreenQuad","material","Mesh","renderer","ShaderPass","shader","textureID","ShaderMaterial","UniformsUtils","writeBuffer","readBuffer","MaskPass","scene","context","state","writeValue","clearValue","ClearMaskPass","EffectComposer","renderTarget","size","WebGLRenderTarget","HalfFloatType","NoBlending","Clock","tmp","pass","index","passIndex","currentRenderTarget","maskActive","il","stencil","effectiveWidth","effectiveHeight","pixelRatio","RenderPass","overrideMaterial","clearColor","clearAlpha","Color","oldAutoClear","oldClearAlpha","oldOverrideMaterial","GTAOShader","Matrix4","GTAODepthShader","GTAOBlendShader","generateMagicSquareNoise","noiseSize","magicSquare","generateMagicSquare","noiseSquareSize","data","inx","iAng","randomVec","noiseTexture","DataTexture","RepeatWrapping","j","num","PoissonDenoiseShader","generatePdSamplePointInitializer","samples","rings","radiusExponent","poissonDisk","generateDenoiseSamples","glslCode","sample","numSamples","numRings","radius","SimplexNoise","r","xin","yin","n0","n1","n2","F2","s","G2","t","X0","Y0","x0","y0","i1","j1","x1","y1","x2","y2","ii","jj","gi0","gi1","gi2","t0","t1","t2","zin","n3","k","G3","Z0","z0","k1","i2","j2","k2","z1","z2","x3","y3","z3","kk","gi3","t3","z","grad4","simplex","perm","F4","G4","n4","l","W0","w0","c1","c2","c3","c4","c5","c6","c","l1","l2","i3","j3","k3","l3","w1","w2","w3","x4","y4","z4","w4","ll","gi4","t4","g","GTAOPass","parameters","aoParameters","pdParameters","MeshNormalMaterial","DstColorFactor","ZeroFactor","AddEquation","DstAlphaFactor","CustomBlending","depthTexture","normalTexture","DepthTexture","DepthStencilFormat","UnsignedInt248Type","NearestFilter","normalVectorType","depthValueSource","box","updateShader","passMaterial","originalClearAlpha","originalAutoClear","cache","arraySize","RGBAFormat","UnsignedByteType","LuminosityHighPassShader","UnrealBloomPass","resolution","strength","threshold","resx","resy","renderTargetHorizontal","renderTargetVertical","highPassShader","kernelSizeArray","bloomFactors","AdditiveBlending","MeshBasicMaterial","inputRenderTarget","kernelRadius","coefficients","sigma","nMips","OutputShader","OutputPass","RawShaderMaterial","ColorManagement","SRGBTransfer","LinearToneMapping","ReinhardToneMapping","CineonToneMapping","ACESFilmicToneMapping","AgXToneMapping","NeutralToneMapping","CustomToneMapping","FXAAShader","SaturationShader","ComposerModule","fxaaPass","renderPass","gtaoPass","outputPass","e","module","a","o","u","require","n","d","p","f","A","O","I","m","_","b","v","S","C","B","E","R","global","T","D","F","U","P","L","Z","W","M","H","G","K","Y","N","X","V","q","J","bind","fn","thisArg","toString","getPrototypeOf","iterator","toStringTag","kindOf","thing","str","kindOfTest","typeOfTest","isArray","isUndefined","isBuffer","val","isFunction","isArrayBuffer","isArrayBufferView","result","isString","isNumber","isObject","isBoolean","isPlainObject","prototype","isEmptyObject","isDate","isFile","isBlob","isFileList","isStream","isFormData","kind","isURLSearchParams","isReadableStream","isRequest","isResponse","isHeaders","trim","forEach","obj","allOwnKeys","keys","len","key","findKey","_key","_global","isContextDefined","merge","caseless","skipUndefined","assignValue","targetKey","extend","stripBOM","content","inherits","constructor","superConstructor","props","descriptors","toFlatObject","sourceObj","destObj","filter","propFilter","prop","merged","endsWith","searchString","lastIndex","toArray","arr","isTypedArray","TypedArray","forEachEntry","_iterator","pair","matchAll","regExp","matches","isHTMLForm","toCamelCase","p1","p2","hasOwnProperty","isRegExp","reduceDescriptors","reducer","reducedDescriptors","descriptor","name","ret","freezeMethods","toObjectSet","arrayOrString","delimiter","define","noop","toFiniteNumber","defaultValue","isSpecCompliantForm","toJSONObject","stack","visit","source","target","reducedValue","isAsyncFn","isThenable","_setImmediate","setImmediateSupported","postMessageSupported","token","callbacks","cb","asap","utils$1","AxiosError","message","code","config","request","response","utils","error","customProps","axiosError","msg","errCode","httpAdapter","isVisitable","removeBrackets","renderKey","path","dots","isFlatArray","predicates","toFormData","formData","options","option","metaTokens","visitor","defaultVisitor","indexes","useBlob","convertValue","el","exposedHelpers","build","encode","charMap","match","AxiosURLSearchParams","params","encoder","_encode","buildURL","url","serializeFn","serializedParams","hashmarkIndex","InterceptorManager","fulfilled","rejected","id","transitionalDefaults","platform$1","hasBrowserEnv","_navigator","hasStandardBrowserEnv","hasStandardBrowserWebWorkerEnv","platform","toURLEncodedForm","helpers","parsePropPath","arrayToObject","formDataToJSON","buildPath","isNumericKey","isLast","stringifySafely","rawValue","parser","defaults","headers","contentType","hasJSONContentType","isObjectPayload","_FormData","transitional","forcedJSONParsing","JSONRequested","strictJSONParsing","status","method","ignoreDuplicateOf","parseHeaders","rawHeaders","parsed","line","$internals","normalizeHeader","header","normalizeValue","parseTokens","tokens","tokensRE","isValidHeaderName","matchHeaderValue","isHeaderNameFilter","formatHeader","char","buildAccessors","accessorName","methodName","arg1","arg2","arg3","AxiosHeaders$1","valueOrRewrite","rewrite","self","setHeader","_value","_header","_rewrite","lHeader","setHeaders","dest","entry","matcher","deleted","deleteHeader","format","normalized","targets","asStrings","first","computed","accessors","defineAccessor","AxiosHeaders","mapped","headerValue","transformData","fns","isCancel","CanceledError","settle","resolve","reject","validateStatus","parseProtocol","speedometer","samplesCount","bytes","timestamps","head","tail","firstSampleTS","chunkLength","now","startedAt","bytesCount","passed","throttle","freq","timestamp","lastArgs","timer","invoke","args","progressEventReducer","listener","isDownloadStream","bytesNotified","_speedometer","loaded","total","progressBytes","rate","inRange","progressEventDecorator","throttled","lengthComputable","asyncDecorator","isURLSameOrigin","isMSIE","cookies","expires","domain","secure","sameSite","cookie","isAbsoluteURL","combineURLs","baseURL","relativeURL","buildFullPath","requestedURL","allowAbsoluteUrls","isRelativeUrl","headersToObject","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","configValue","resolveConfig","newConfig","withXSRFToken","xsrfHeaderName","xsrfCookieName","auth","formHeaders","allowedHeaders","xsrfValue","xhrAdapter","_config","requestData","requestHeaders","responseType","onUploadProgress","onDownloadProgress","onCanceled","uploadThrottled","downloadThrottled","flushUpload","flushDownload","done","onloadend","responseHeaders","err","timeoutErrorMessage","cancel","protocol","composeSignals","signals","timeout","length","controller","aborted","onabort","reason","unsubscribe","signal","streamChunk","chunk","chunkSize","pos","end","readBytes","iterable","readStream","stream","reader","trackStream","onProgress","onFinish","_onFinish","loadedBytes","DEFAULT_CHUNK_SIZE","globalFetchAPI","Request","Response","ReadableStream","TextEncoder","test","factory","env","envFetch","isFetchSupported","isRequestSupported","isResponseSupported","isReadableStreamSupported","encodeText","supportsRequestStream","duplexAccessed","hasContentType","supportsResponseStream","resolvers","res","getBodyLength","body","resolveBodyLength","cancelToken","withCredentials","fetchOptions","_fetch","composedSignal","requestContentLength","_request","contentTypeHeader","flush","isCredentialsSupported","resolvedOptions","isStreamResponse","responseContentLength","responseData","seedCache","getFetch","fetch","seeds","seed","map","knownAdapters","fetchAdapter.getFetch","renderReason","isResolvedHandle","adapter","getAdapter","adapters","nameOrAdapter","rejectedReasons","reasons","throwIfCancellationRequested","dispatchRequest","VERSION","validators","deprecatedWarnings","validator","version","formatMessage","opt","desc","opts","correctSpelling","assertOptions","schema","allowUnknown","Axios$1","instanceConfig","configOrUrl","dummy","paramsSerializer","contextHeaders","requestInterceptorChain","synchronousRequestInterceptors","interceptor","responseInterceptorChain","promise","chain","onFulfilled","onRejected","fullPath","Axios","generateHTTPMethod","isForm","CancelToken$1","CancelToken","executor","resolvePromise","onfulfilled","_resolve","abort","spread","callback","isAxiosError","payload","HttpStatusCode","createInstance","defaultConfig","instance","axios","promises","all","Cancel","formToJSON","LoadJSON","_path","LoadZipJson","files","JSZip","zip","readTextAs","text","arrayBuffer","encoding","blob","evt","_taskCache","DRACOLoader","Loader","manager","workerLimit","onLoad","onError","loader","FileLoader","buffer","SRGBColorSpace","attributeIDs","attributeTypes","vertexColorSpace","LinearSRGBColorSpace","taskConfig","taskKey","cachedTask","worker","taskID","taskCost","geometryPending","_worker","geometryData","geometry","BufferAttribute","array","itemSize","stride","attribute","InterleavedBuffer","InterleavedBufferAttribute","inputColorSpace","_color","useJS","librariesPending","libraries","jsContent","DRACOWorker","decoderConfig","decoderPending","draco","decoder","decodeGeometry","buffers","attr","dracoGeometry","decodingStatus","geometryType","attributeName","attributeType","attributeID","attributeResult","decodeAttribute","decodeIndex","numIndices","byteLength","ptr","count","dracoDataType","getDracoDataType","srcByteStride","dstByteStride","dstStride","srcByteLength","dstByteLength","srcArray","dstArray","dstOffset","EventType","loadMep","modelMep","off_x","off_y","off_z","model","circularMepsList","rectMepsList","item","bridgeMepsList","ellipseMepsList","CreateEmptyModel","meshParamList","Mep","mergeBufferModel","Scene","param","instancedMesh","meshs","mesh","Param","DrawPipes","ElementInfoArray","start","start_","end_","angle_x","angle_y","angle_z","basex","matrix","euler","T1","T2","_min","_max","center","elementInfoItem","minC","maxC","copyMeshs","Shape","extrudeSettings","addShape","shape","color","rotation","mat","mergeGeometries","geometries","useGroups","isIndexed","attributesUsed","morphAttributesUsed","attributes","morphAttributes","morphTargetsRelative","mergedGeometry","offset","attributesCount","indexOffset","mergedIndex","mergedAttribute","mergeAttributes","numMorphTargets","morphAttributesToMerge","mergedMorphAttribute","gpuType","arrayLength","tupleOffset","toTrianglesDrawMode","drawMode","TrianglesDrawMode","TriangleFanDrawMode","TriangleStripDrawMode","indices","numberOfTriangles","newIndices","newGeometry","GLTFLoader","GLTFMaterialsClearcoatExtension","GLTFMaterialsDispersionExtension","GLTFTextureBasisUExtension","GLTFTextureWebPExtension","GLTFTextureAVIFExtension","GLTFMaterialsSheenExtension","GLTFMaterialsTransmissionExtension","GLTFMaterialsVolumeExtension","GLTFMaterialsIorExtension","GLTFMaterialsEmissiveStrengthExtension","GLTFMaterialsSpecularExtension","GLTFMaterialsIridescenceExtension","GLTFMaterialsAnisotropyExtension","GLTFMaterialsBumpExtension","GLTFLightsExtension","GLTFMeshoptCompression","GLTFMeshGpuInstancing","scope","resourcePath","relativeUrl","LoaderUtils","_onError","gltf","dracoLoader","ktx2Loader","meshoptDecoder","json","extensions","plugins","textDecoder","BINARY_EXTENSION_HEADER_MAGIC","EXTENSIONS","GLTFBinaryExtension","GLTFParser","plugin","extensionName","extensionsRequired","GLTFMaterialsUnlitExtension","GLTFDracoMeshCompressionExtension","GLTFTextureTransformExtension","GLTFMeshQuantizationExtension","GLTFRegistry","objects","nodeDefs","nodeIndex","nodeLength","nodeDef","lightIndex","cacheKey","dependency","lightDef","lightNode","range","DirectionalLight","PointLight","SpotLight","assignExtrasToUserData","light","materialParams","materialDef","pending","metallicRoughness","materialIndex","emissiveStrength","MeshPhysicalMaterial","extension","scale","colorFactor","colorArray","textureIndex","textureDef","handler","bufferView","extensionDef","byteOffset","meshDef","primitive","WEBGL_CONSTANTS","attributesDef","accessor","results","nodeObject","meshes","instancedMeshes","InstancedMesh","InstancedBufferAttribute","Object3D","BINARY_EXTENSION_HEADER_LENGTH","BINARY_EXTENSION_CHUNK_TYPES","headerView","chunkContentsLength","chunkView","chunkIndex","chunkType","contentArray","bufferViewIndex","gltfAttributeMap","threeAttributeMap","attributeNormalizedMap","attributeTypeMap","threeAttributeName","ATTRIBUTES","accessorDef","componentType","WEBGL_COMPONENT_TYPES","texture","transform","GLTFCubicSplineInterpolant","Interpolant","parameterPositions","sampleValues","sampleSize","resultBuffer","values","valueSize","stride2","stride3","td","pp","ppp","offset1","offset0","s2","s3","s0","s1","p0","m0","m1","_quaternion","GLTFCubicSplineQuaternionInterpolant","WEBGL_FILTERS","LinearFilter","NearestMipmapNearestFilter","LinearMipmapNearestFilter","NearestMipmapLinearFilter","LinearMipmapLinearFilter","WEBGL_WRAPPINGS","ClampToEdgeWrapping","MirroredRepeatWrapping","WEBGL_TYPE_SIZES","PATH_PROPERTIES","INTERPOLATION","InterpolateLinear","InterpolateDiscrete","ALPHA_MODES","createDefaultMaterial","MeshStandardMaterial","FrontSide","addUnknownExtensionsToUserData","knownExtensions","objectDef","gltfDef","addMorphTargets","hasMorphPosition","hasMorphNormal","hasMorphColor","pendingPositionAccessors","pendingNormalAccessors","pendingColorAccessors","pendingAccessor","morphPositions","morphNormals","morphColors","updateMorphTargets","targetNames","createPrimitiveKey","primitiveDef","geometryKey","dracoExtension","createAttributesKey","attributesKey","getNormalizedComponentScale","getImageURIMimeType","uri","_identityMatrix","isSafari","safariVersion","isFirefox","firefoxVersion","userAgent","safariMatch","TextureLoader","ImageBitmapLoader","ext","dependencies","skinDefs","meshDefs","skinIndex","skinLength","joints","ref","updateMappings","original","clone","mappings","child","func","defs","def","bufferIndex","bufferDef","bufferViewDef","accessorIndex","pendingBufferViews","bufferViews","elementBytes","itemBytes","byteStride","bufferAttribute","ibSlice","ibCacheKey","ib","itemSizeIndices","TypedArrayIndices","byteOffsetIndices","byteOffsetValues","sparseIndices","sparseValues","sourceIndex","sourceDef","sampler","URL","sourceURI","isObjectURL","imageBitmap","Texture","mapName","mapDef","colorSpace","gltfReference","useDerivativeTangents","useVertexColors","useFlatShading","pointsMaterial","PointsMaterial","Material","lineMaterial","LineBasicMaterial","cachedMaterial","materialType","materialExtensions","kmuExtension","DoubleSide","alphaMode","emissiveFactor","originalName","sanitizedName","PropertyBinding","primitives","createDracoPrimitive","addPrimitiveAttributes","cached","geometryPromise","meshIndex","materials","SkinnedMesh","LineSegments","Line","LineLoop","Points","group","Group","cameraIndex","cameraDef","PerspectiveCamera","skinDef","inverseBindMatrices","jointNodes","bones","boneInverses","jointNode","Skeleton","animationIndex","animationDef","animationName","pendingNodes","pendingInputAccessors","pendingOutputAccessors","pendingSamplers","pendingTargets","channel","input","output","nodes","inputAccessors","outputAccessors","samplers","tracks","node","inputAccessor","outputAccessor","createdTracks","animation","AnimationClip","nodePending","childPending","childrenDef","skeletonPending","children","skeleton","nodeName","meshPromise","Bone","mapping","sceneIndex","sceneDef","nodeIds","reduceAssociations","reducedAssociations","targetName","TypedKeyframeTrack","NumberKeyframeTrack","QuaternionKeyframeTrack","VectorKeyframeTrack","interpolation","outputArray","jl","track","scaled","interpolantType","computeBounds","Box3","boxScale","maxDisplacement","vector","sphere","Sphere","assignAttributeAccessor","gltfAttributeName","loadLightModel","getNeedLoadModel","loadNode","lod","nodesMap","glb","totalIds","recursion","totalMeshes","newMesh","boundingBox","mergeMesh","octree","ids","cameraPoint","allMat","currentMesh","BufferGeometryUtils.mergeGeometries","optimizeMaterial","LoaderModule","urls","getModelType","EngineStatus","EventModule","LightModule","dirLight","ambientLight","InteractionModule","hit","boxs","getBox","ModelToolModule","engine_","models","splitModelMaterial","hiddenModel","allModels","allIds","modelsToHide","allModel","targetModel","idsToHide","node_","HandelBehaved","_handelBehaved","handle_Mouse_Down","handle_Mouse_Up","handle_Mouse_Move","handle_key_down","handle_key_up","getNormalizedMousePosition","mouse","createRaycaster","raycaster","enrichEventWithRaycast","includeCatch","catchResult","handle_catch","nowTime","timeDiff","timeDiff_double","intersects","edge","catchTye","point_list","line_list","mini","xy","start_xy","end_xy","dis","pointToLineDistance","project","pointToLineProjection","point","pointToLineProjection3D","screenPoint","circle","normal","faceNormal","referenceAxis","tangent1","tangent2","halfSize","screenPoints","polygon","lineDir","lineLengthSq","toPoint","projectionPoint","clamped","WorldToScreen","worldPos","screenX","screenY","objectsToTest","depth","this","Easing","amount","power","_this","tweenId","tween","time","preserve","tweenIds","autoStart","Interpolation","Sequence","mainGroup","Tween","_object","_group","duration","dynamic","overrideStartingValues","property","_valuesStart","_valuesEnd","_valuesStartRepeat","startValue","startValueIsArray","propType","isInterpolationList","endValues","temp","nestedObject","numChainedTweens","times","yoyo","easingFunction","interpolationFunction","tweens","_i","_a","endTime","elapsedTime","durationAndDelay","totalTime","calculateElapsedPortion","timesRepeated","timeIntoCurrentRepeat","portion","elapsed","completeCount","startIsArray","endIsArray","endValue","TWEEN","exports","InitScene","InitOthers","dom","ViewCubeTool","domid","_viewCube","AnimationFrame","domattr","boundaryModels","CreateUI","CreateSecne","CreateDirectionBox","pWorld","dir","tergetCamera","animateCamera","quaternion","cameraData","isBack","current1","target1","current2","target2","current3","target3","animate","home","cameraToggle","closeAllButton","screenshot","fullscreen","showAllButton","baseUrl","OrientList","materialArr","viewBox","AddClickPlane","pointer","newsize","faces","points","edges","CreatorCube","translationMatrix","newgeometry","dataURL","link","ViewCube","OctreeBox","_octreeBox","c_min","c_max","minx","miny","minz","maxx","maxy","maxz","rayCaster","ocbox","RecurrentIteration","min_","max_","ThreeBox","isinter","ele","bbox","RangeScale","canvas","left","top","minX","maxX","minY","maxY","worldPoints","corners","corner","worldPoint","sceneBox","controls","maxDim","fov","distanceWithMargin","currentDirection","toCenter","cameraSize","Setting","visible","intensity","quality","enabled","composer","newGtaoPass","renderPassIndex","saturation","contrast","opacity","hdrTexture","guid","Tools","annotationData","this_","renderNormalAnnotation","renderElevationAnnotation","renderCoordinateAnnotation","renderAngleAnnotation","renderAreaAnnotation","renderSlopeAnnotation","html","p1_s","p2_s","p3_s","textX","textY","p_s","pointsStr","rects","texts","p_e","ClearHeightMeasure","c_measure","DistanceMeasure","ClearDistanceMeasure","ElevationMeasure","PointMeasure","AngleMeasure","point1","point2","point3","v1","v2","length1","length2","cosAngle","clampedCos","AreaMeasure","area","tempPoints","SlopeMeasure","heightDiff","dz","horizontalDist","percentage","angleDeg","slopeData","Measure","clearAnnotation","annotation","sectionPlaneX","face","createFace","vs","vertices","ms","vertices_line","line_material","line_geometry","plane","c_point","intersectionPoint","sectionPlaneY","sectionPlaneZ","SectionBox","xyz","face1_1","face1_2","face2_1","face2_2","face3_1","face3_2","ClippingStencil","planeGeom","poGroup","planeMat","po","maxSize","newGeom","renderOrder","baseMat","mat0","mesh0","mat1","mesh1","Clipping","plane1","plane2","plane3","plane4","plane5","plane6","ModelTree","treeData","EngineInfo","totalVertices","totalTriangles","meshCount","positionAttribute","vertexCount","triangleCount","ModelProperties","getProperties","infos","groupIndexs","ModelMapperBatch","mapper","level","major","ModelEdge","positions","itemIndex","edge_ele","index_","points_","pointIndex","pointPairIndex","isSecondPoint","EngineKernelV2","Stats","catchSvg","rendererWidth","rendererHeight","createEngine"],"mappings":"0iBAEO,MAAMA,EAAW,CACZ,OACD,MAEP,YAAYC,EAAY,CACpB,KAAK,OAASA,EACd,KAAK,MAAQ,IAAIC,EAAM,MAGvB,IAAIC,EAAY,IAAID,EAAM,MAC1BC,EAAU,KAAO,YACjB,KAAK,MAAM,IAAIA,CAAS,CAQ5B,CACJ,CCJO,MAAMC,EAAY,CACb,OAGD,kBAEA,mBAGP,YAAYH,EAAY,CACpB,KAAK,OAASA,EAGd,KAAK,kBAAoB,IAAIC,EAAM,kBAAkB,GAChD,KAAK,OAAO,UAAU,YAAc,KAAK,OAAO,UAAU,aAC1D,GAAK,GAAA,EAEV,KAAK,kBAAkB,SAAS,IAAI,EAAG,EAAG,CAAC,EAC3C,KAAK,kBAAkB,OAAO,EAAG,EAAG,CAAC,EAMrC,MAAMG,EAAc,GACdC,EAAS,KAAK,OAAO,UAAU,YAAc,KAAK,OAAO,UAAU,aACzE,KAAK,mBAAqB,IAAIJ,EAAM,mBAAmBG,EAAcC,EAAS,GAAID,EAAcC,EAAS,EAAGD,EAAc,EAAGA,EAAc,GAAI,GAAK,GAAI,CAO5J,CAGO,qBAAqB,CACrB,KAAK,OAAO,SAAW,KAAK,kBAC3B,KAAK,2BAAA,EAEL,KAAK,0BAAA,CAEb,CAIO,2BAA2B,CAE9B,MAAME,EAAkB,KAAK,OAAO,OAAO,SAAS,MAAA,EAC9CC,EAAgB,KAAK,OAAO,SAAS,OAAO,MAAA,EAGlD,KAAK,OAAO,OAAS,KAAK,kBACzB,KAAK,OAAO,MAAc,OAAS,KAAK,kBAGzC,KAAK,kBAAkB,SAAS,KAAKD,CAAe,EACpD,KAAK,kBAAkB,OAAOC,CAAa,EAG3C,KAAK,OAAO,cAAc,cAAc,OAAS,KAAK,kBACtD,KAAK,OAAO,cAAc,oBAAoB,OAAS,KAAK,kBAG5D,KAAK,OAAO,eAAe,KAAA,CAC/B,CAEO,4BAA4B,CAE/B,MAAMD,EAAkB,KAAK,OAAO,OAAO,SAAS,MAAA,EAC9CC,EAAgB,KAAK,OAAO,SAAS,OAAO,MAAA,EAGlD,KAAK,OAAO,OAAS,KAAK,mBACzB,KAAK,OAAO,MAAc,OAAS,KAAK,mBAGzC,KAAK,mBAAmB,SAAS,KAAKD,CAAe,EACrD,KAAK,mBAAmB,OAAOC,CAAa,EAG5C,KAAK,OAAO,cAAc,cAAc,OAAS,KAAK,mBACtD,KAAK,OAAO,cAAc,oBAAoB,OAAS,KAAK,mBAG5D,KAAK,OAAO,eAAe,KAAA,CAC/B,CAGO,eAA4B,CAC/B,OAAI,KAAK,OAAO,SAAW,KAAK,kBACrB,cACA,KAAK,OAAO,SAAW,KAAK,mBAC5B,eAGJ,aACX,CAGO,eAA6B,CAChC,MAAMC,EAAS,KAAK,OAAO,OACrBC,EAAO,KAAK,cAAA,EAEZC,EAAoB,CACtB,KAAAD,EACA,SAAU,CACN,EAAGD,EAAO,SAAS,EACnB,EAAGA,EAAO,SAAS,EACnB,EAAGA,EAAO,SAAS,CAAA,EAEvB,SAAU,CACN,EAAGA,EAAO,SAAS,EACnB,EAAGA,EAAO,SAAS,EACnB,EAAGA,EAAO,SAAS,CAAA,EAEvB,WAAY,CACR,EAAGA,EAAO,WAAW,EACrB,EAAGA,EAAO,WAAW,EACrB,EAAGA,EAAO,WAAW,EACrB,EAAGA,EAAO,WAAW,CAAA,CACzB,EAIJ,OAAI,KAAK,OAAO,UAAY,KAAK,OAAO,SAAS,SAC7CE,EAAK,OAAS,CACV,EAAG,KAAK,OAAO,SAAS,OAAO,EAC/B,EAAG,KAAK,OAAO,SAAS,OAAO,EAC/B,EAAG,KAAK,OAAO,SAAS,OAAO,CAAA,GAKnCD,IAAS,iBACTC,EAAK,KAAQF,EAAoC,MAG9CE,CACX,CAGO,kBAAkBA,EAAyB,CAE1B,KAAK,cAAA,IACLA,EAAK,OACjBA,EAAK,OAAS,cACd,KAAK,0BAAA,EAEL,KAAK,2BAAA,GAIb,MAAMF,EAAS,KAAK,OAAO,OAG3BA,EAAO,SAAS,IAAIE,EAAK,SAAS,EAAGA,EAAK,SAAS,EAAGA,EAAK,SAAS,CAAC,EAGjEA,EAAK,WACLF,EAAO,WAAW,IACdE,EAAK,WAAW,EAChBA,EAAK,WAAW,EAChBA,EAAK,WAAW,EAChBA,EAAK,WAAW,CAAA,EAEbA,EAAK,UACZF,EAAO,SAAS,IAAIE,EAAK,SAAS,EAAGA,EAAK,SAAS,EAAGA,EAAK,SAAS,CAAC,EAIrEA,EAAK,QAAU,KAAK,OAAO,UAAY,KAAK,OAAO,SAAS,QAC5D,KAAK,OAAO,SAAS,OAAO,IACxBA,EAAK,OAAO,EACZA,EAAK,OAAO,EACZA,EAAK,OAAO,CAAA,EAKhBA,EAAK,OAAS,gBAA2BA,EAAK,OAAS,SACtDF,EAAoC,KAAOE,EAAK,KACjDF,EAAO,uBAAA,GAIXA,EAAO,aAAA,EACPA,EAAO,kBAAkB,EAAI,EAGzB,KAAK,OAAO,UAAY,KAAK,OAAO,SAAS,QAC7C,KAAK,OAAO,SAAS,OAAA,CAE7B,CACJ,CCpNO,MAAMG,EAAY,CACb,OACD,WACP,YAAYX,EAAY,CACpB,KAAK,OAASA,EACd,KAAK,WAAa,IACtB,CAGO,eAAe,CAClB,OAAO,KAAK,UAChB,CAGO,kBAAkB,CACrB,MAAO,CACH,MAAO,KAAK,OAAO,UAAU,YAC7B,OAAQ,KAAK,OAAO,UAAU,YAAA,CAEtC,CACJ,CCnBO,MAAMY,EAAY,CACb,OACD,SACP,YAAYZ,EAAY,CACpB,KAAK,OAASA,EACd,KAAK,SAAW,IACpB,CAEO,gBAAgB,CACnB,KAAM,CAAE,MAAAa,EAAO,OAAAC,CAAA,EAAW,KAAK,OAAO,aAAa,iBAAA,EACnD,YAAK,SAAW,IAAIb,EAAM,cAAc,CACpC,UAAW,KAAK,OAAO,QAAQ,WAAa,GAC5C,MAAO,GACP,mBAAoB,GACpB,QAAS,EAAA,CACZ,EACD,KAAK,SAAS,cAAc,EAAU,CAAC,EACvC,KAAK,SAAS,QAAQY,EAAOC,CAAM,EACnC,KAAK,SAAS,cAAc,OAAO,gBAAgB,EAEnD,KAAK,SAAS,UAAU,QAAU,GAClC,KAAK,SAAS,UAAU,KAAOb,EAAM,iBAErC,KAAK,SAAS,qBAAuB,GAErC,KAAK,SAAS,iBAAmBA,EAAM,eACvC,KAAK,SAAS,YAAcA,EAAM,sBAClC,KAAK,SAAS,oBAAsB,IACpC,KAAK,OAAO,UAAU,YAAY,KAAK,SAAS,UAAU,EACnD,KAAK,QAChB,CAEO,iBAAiB,CACpB,KAAK,UAAU,QAAA,CACnB,CACJ,CCjBA,MAAMc,GAAe,CAAE,KAAM,UAQvBC,GAAc,CAAE,KAAM,SAQtBC,GAAY,CAAE,KAAM,OAEpBC,GAAO,IAAIC,EAAAA,IACXC,GAAS,IAAIC,EAAAA,MACbC,GAAc,KAAK,IAAK,GAAKC,EAAAA,UAAU,OAAO,EAE9CC,GAAK,IAAIC,EAAAA,QACTC,GAAS,EAAI,KAAK,GAElBC,GAAS,CACd,KAAM,GACN,OAAQ,EACR,MAAO,EACP,IAAK,EACL,aAAc,EACd,UAAW,EACX,gBAAiB,EACjB,mBAAoB,CACrB,EACMC,GAAO,KAiCb,MAAMC,WAAsBC,EAAAA,QAAS,CAQpC,YAAY9B,EAAQ+B,EAAQC,EAAa,KAAO,CAE/C,MAAOD,EAAQC,GACf,KAAK,OAAShC,EAEd,KAAK,MAAQ2B,GAAO,KAQpB,KAAK,OAAS,IAAIF,EAAAA,QASlB,KAAK,OAAS,IAAIA,EAAAA,QAQlB,KAAK,YAAc,EAQnB,KAAK,YAAc,IAQnB,KAAK,QAAU,EAQf,KAAK,QAAU,IAQf,KAAK,gBAAkB,EAQvB,KAAK,gBAAkB,IAQvB,KAAK,cAAgB,EAQrB,KAAK,cAAgB,KAAK,GAS1B,KAAK,gBAAkB,KASvB,KAAK,gBAAkB,IAUvB,KAAK,cAAgB,GAUrB,KAAK,cAAgB,IAQrB,KAAK,WAAa,GAQlB,KAAK,UAAY,EAYjB,KAAK,aAAe,GAQpB,KAAK,YAAc,EAQnB,KAAK,eAAiB,EAQtB,KAAK,UAAY,GAQjB,KAAK,SAAW,EAUhB,KAAK,mBAAqB,GAS1B,KAAK,YAAc,EAQnB,KAAK,aAAe,GAYpB,KAAK,WAAa,GAWlB,KAAK,gBAAkB,EAevB,KAAK,KAAO,CAAE,KAAM,YAAa,GAAI,UAAW,MAAO,aAAc,OAAQ,WAAW,EAcxF,KAAK,aAAe,CAAE,KAAMQ,EAAAA,MAAM,OAAQ,OAAQA,EAAAA,MAAM,MAAO,MAAOA,EAAAA,MAAM,GAAG,EAa/E,KAAK,QAAU,CAAE,IAAKC,EAAAA,MAAM,OAAQ,IAAKA,QAAM,WAO/C,KAAK,QAAU,KAAK,OAAO,MAAK,EAOhC,KAAK,UAAY,KAAK,OAAO,SAAS,MAAK,EAO3C,KAAK,MAAQ,KAAK,OAAO,KAGzB,KAAK,qBAAuB,KAI5B,KAAK,cAAgB,IAAIT,EAAAA,QACzB,KAAK,gBAAkB,IAAIU,EAAAA,WAC3B,KAAK,oBAAsB,IAAIV,EAAAA,QAG/B,KAAK,MAAQ,IAAIU,aAAU,EAAG,mBAAoBJ,EAAO,GAAI,IAAIN,EAAAA,QAAS,EAAG,EAAG,CAAC,CAAE,EACnF,KAAK,aAAe,KAAK,MAAM,MAAK,EAAG,SAGvC,KAAK,WAAa,IAAIW,EAAAA,UACtB,KAAK,gBAAkB,IAAIA,EAAAA,UAE3B,KAAK,OAAS,EACd,KAAK,WAAa,IAAIX,EAAAA,QAEtB,KAAK,aAAe,IAAIY,EAAAA,QACxB,KAAK,WAAa,IAAIA,EAAAA,QACtB,KAAK,aAAe,IAAIA,EAAAA,QAExB,KAAK,UAAY,IAAIA,EAAAA,QACrB,KAAK,QAAU,IAAIA,EAAAA,QACnB,KAAK,UAAY,IAAIA,EAAAA,QAErB,KAAK,YAAc,IAAIA,EAAAA,QACvB,KAAK,UAAY,IAAIA,EAAAA,QACrB,KAAK,YAAc,IAAIA,EAAAA,QAEvB,KAAK,gBAAkB,IAAIZ,EAAAA,QAC3B,KAAK,OAAS,IAAIY,EAAAA,QAClB,KAAK,mBAAqB,GAE1B,KAAK,UAAY,GACjB,KAAK,kBAAoB,GAEzB,KAAK,eAAiB,GAItB,KAAK,eAAiBC,GAAc,KAAM,IAAI,EAC9C,KAAK,eAAiBC,GAAc,KAAM,IAAI,EAC9C,KAAK,aAAeC,GAAY,KAAM,IAAI,EAC1C,KAAK,eAAiBC,GAAc,KAAM,IAAI,EAC9C,KAAK,cAAgBC,GAAa,KAAM,IAAI,EAC5C,KAAK,WAAaC,GAAU,KAAM,IAAI,EAEtC,KAAK,cAAgBC,GAAa,KAAM,IAAI,EAC5C,KAAK,aAAeC,GAAY,KAAM,IAAI,EAE1C,KAAK,aAAeC,GAAY,KAAM,IAAI,EAC1C,KAAK,aAAeC,GAAY,KAAM,IAAI,EAE1C,KAAK,sBAAwBC,GAAqB,KAAM,IAAI,EAC5D,KAAK,oBAAsBC,GAAmB,KAAM,IAAI,EAInD,KAAK,aAAe,MAExB,KAAK,QAAS,KAAK,YAIpB,KAAK,OAAM,CAEZ,CAEA,QAASC,EAAU,CAElB,MAAM,QAASA,GAEf,KAAK,WAAW,iBAAkB,cAAe,KAAK,cAAc,EACpE,KAAK,WAAW,iBAAkB,gBAAiB,KAAK,YAAY,EAEpE,KAAK,WAAW,iBAAkB,cAAe,KAAK,cAAc,EACpE,KAAK,WAAW,iBAAkB,QAAS,KAAK,cAAe,CAAE,QAAS,EAAK,GAE9D,KAAK,WAAW,YAAW,EACnC,iBAAkB,UAAW,KAAK,sBAAuB,CAAE,QAAS,GAAM,QAAS,EAAI,GAEhG,KAAK,WAAW,MAAM,YAAc,MAErC,CAEA,YAAa,CAEZ,KAAK,WAAW,oBAAqB,cAAe,KAAK,cAAc,EACvE,KAAK,WAAW,oBAAqB,cAAe,KAAK,cAAc,EACvE,KAAK,WAAW,oBAAqB,YAAa,KAAK,YAAY,EACnE,KAAK,WAAW,oBAAqB,gBAAiB,KAAK,YAAY,EAEvE,KAAK,WAAW,oBAAqB,QAAS,KAAK,aAAa,EAChE,KAAK,WAAW,oBAAqB,cAAe,KAAK,cAAc,EAEvE,KAAK,sBAAqB,EAET,KAAK,WAAW,YAAW,EACnC,oBAAqB,UAAW,KAAK,sBAAuB,CAAE,QAAS,EAAI,GAEpF,KAAK,WAAW,MAAM,YAAc,MAErC,CAEA,SAAU,CAET,KAAK,WAAU,CAEhB,CAOA,eAAgB,CAEf,OAAO,KAAK,WAAW,GAExB,CAOA,mBAAoB,CAEnB,OAAO,KAAK,WAAW,KAExB,CAOA,aAAc,CAEb,OAAO,KAAK,OAAO,SAAS,WAAY,KAAK,OAE9C,CAQA,kBAAmBlB,EAAa,CAE/BA,EAAW,iBAAkB,UAAW,KAAK,UAAU,EACvD,KAAK,qBAAuBA,CAE7B,CAKA,uBAAwB,CAElB,KAAK,uBAAyB,OAElC,KAAK,qBAAqB,oBAAqB,UAAW,KAAK,UAAU,EACzE,KAAK,qBAAuB,KAI9B,CAKA,WAAY,CAEX,KAAK,QAAQ,KAAM,KAAK,MAAM,EAC9B,KAAK,UAAU,KAAM,KAAK,OAAO,QAAQ,EACzC,KAAK,MAAQ,KAAK,OAAO,IAE1B,CAMA,OAAQ,CAEP,KAAK,OAAO,KAAM,KAAK,OAAO,EAC9B,KAAK,OAAO,SAAS,KAAM,KAAK,SAAS,EACzC,KAAK,OAAO,KAAO,KAAK,MAExB,KAAK,OAAO,yBACZ,KAAK,cAAejB,IAEpB,KAAK,OAAM,EAEX,KAAK,MAAQY,GAAO,IAErB,CAEA,OAAQwB,EAAY,KAAO,CAE1B,MAAMC,EAAW,KAAK,OAAO,SAE7B5B,GAAG,KAAM4B,CAAQ,EAAG,IAAK,KAAK,QAG9B5B,GAAG,gBAAiB,KAAK,OAGzB,KAAK,WAAW,eAAgBA,IAE3B,KAAK,YAAc,KAAK,QAAUG,GAAO,MAE7C,KAAK,YAAa,KAAK,sBAAuBwB,CAAS,CAAE,EAIrD,KAAK,eAET,KAAK,WAAW,OAAS,KAAK,gBAAgB,MAAQ,KAAK,cAC3D,KAAK,WAAW,KAAO,KAAK,gBAAgB,IAAM,KAAK,gBAIvD,KAAK,WAAW,OAAS,KAAK,gBAAgB,MAC9C,KAAK,WAAW,KAAO,KAAK,gBAAgB,KAM7C,IAAIE,EAAM,KAAK,gBACXC,EAAM,KAAK,gBAEV,SAAUD,CAAG,GAAM,SAAUC,CAAG,IAE/BD,EAAM,CAAE,KAAK,GAAKA,GAAO3B,GAAkB2B,EAAM,KAAK,KAAKA,GAAO3B,IAElE4B,EAAM,CAAE,KAAK,GAAKA,GAAO5B,GAAkB4B,EAAM,KAAK,KAAKA,GAAO5B,IAElE2B,GAAOC,EAEX,KAAK,WAAW,MAAQ,KAAK,IAAKD,EAAK,KAAK,IAAKC,EAAK,KAAK,WAAW,KAAK,CAAE,EAI7E,KAAK,WAAW,MAAU,KAAK,WAAW,OAAUD,EAAMC,GAAQ,EACjE,KAAK,IAAKD,EAAK,KAAK,WAAW,KAAK,EACpC,KAAK,IAAKC,EAAK,KAAK,WAAW,KAAK,GAOvC,KAAK,WAAW,IAAM,KAAK,IAAK,KAAK,cAAe,KAAK,IAAK,KAAK,cAAe,KAAK,WAAW,GAAG,GAErG,KAAK,WAAW,WAKX,KAAK,gBAAkB,GAE3B,KAAK,OAAO,gBAAiB,KAAK,WAAY,KAAK,eAInD,KAAK,OAAO,IAAK,KAAK,UAAU,EAKjC,KAAK,OAAO,IAAK,KAAK,MAAM,EAC5B,KAAK,OAAO,YAAa,KAAK,gBAAiB,KAAK,iBACpD,KAAK,OAAO,IAAK,KAAK,MAAM,EAE5B,IAAIC,EAAc,GAGlB,GAAK,KAAK,cAAgB,KAAK,oBAAsB,KAAK,OAAO,qBAEhE,KAAK,WAAW,OAAS,KAAK,eAAgB,KAAK,WAAW,YAExD,CAEN,MAAMC,EAAa,KAAK,WAAW,OACnC,KAAK,WAAW,OAAS,KAAK,eAAgB,KAAK,WAAW,OAAS,KAAK,QAC5ED,EAAcC,GAAc,KAAK,WAAW,MAE7C,CA2BA,GAzBAhC,GAAG,iBAAkB,KAAK,YAG1BA,GAAG,gBAAiB,KAAK,cAEzB4B,EAAS,KAAM,KAAK,MAAM,EAAG,IAAK5B,IAElC,KAAK,OAAO,OAAQ,KAAK,MAAM,EAE1B,KAAK,gBAAkB,IAE3B,KAAK,gBAAgB,OAAW,EAAI,KAAK,cACzC,KAAK,gBAAgB,KAAS,EAAI,KAAK,cAEvC,KAAK,WAAW,eAAgB,EAAI,KAAK,aAAa,IAItD,KAAK,gBAAgB,IAAK,EAAG,EAAG,CAAC,EAEjC,KAAK,WAAW,IAAK,EAAG,EAAG,CAAC,GAKxB,KAAK,cAAgB,KAAK,mBAAqB,CAEnD,IAAIiC,EAAY,KAChB,GAAK,KAAK,OAAO,oBAAsB,CAItC,MAAMD,EAAahC,GAAG,SACtBiC,EAAY,KAAK,eAAgBD,EAAa,KAAK,MAAM,EAEzD,MAAME,EAAcF,EAAaC,EACjC,KAAK,OAAO,SAAS,gBAAiB,KAAK,gBAAiBC,GAC5D,KAAK,OAAO,oBAEZH,EAAc,CAAC,CAAEG,CAElB,SAAY,KAAK,OAAO,qBAAuB,CAG9C,MAAMC,EAAc,IAAIlC,UAAS,KAAK,OAAO,EAAG,KAAK,OAAO,EAAG,GAC/DkC,EAAY,UAAW,KAAK,QAE5B,MAAMC,EAAW,KAAK,OAAO,KAC7B,KAAK,OAAO,KAAO,KAAK,IAAK,KAAK,QAAS,KAAK,IAAK,KAAK,QAAS,KAAK,OAAO,KAAO,KAAK,MAAM,GACjG,KAAK,OAAO,yBAEZL,EAAcK,IAAa,KAAK,OAAO,KAEvC,MAAMC,EAAa,IAAIpC,UAAS,KAAK,OAAO,EAAG,KAAK,OAAO,EAAG,GAC9DoC,EAAW,UAAW,KAAK,QAE3B,KAAK,OAAO,SAAS,IAAKA,GAAa,IAAKF,GAC5C,KAAK,OAAO,oBAEZF,EAAYjC,GAAG,QAEhB,MAEC,QAAQ,KAAM,2FACd,KAAK,aAAe,GAKhBiC,IAAc,OAEb,KAAK,mBAGT,KAAK,OAAO,IAAK,EAAG,EAAG,EAAG,EACxB,mBAAoB,KAAK,OAAO,MAAM,EACtC,eAAgBA,CAAS,EACzB,IAAK,KAAK,OAAO,WAKnBvC,GAAK,OAAO,KAAM,KAAK,OAAO,QAAQ,EACtCA,GAAK,UAAU,IAAK,EAAG,EAAG,EAAG,EAAG,mBAAoB,KAAK,OAAO,MAAM,EAIjE,KAAK,IAAK,KAAK,OAAO,GAAG,IAAKA,GAAK,UAAW,EAAKI,GAEvD,KAAK,OAAO,OAAQ,KAAK,MAAM,GAI/BF,GAAO,8BAA+B,KAAK,OAAO,GAAI,KAAK,QAC3DF,GAAK,eAAgBE,GAAQ,KAAK,MAAM,IAQ5C,SAAY,KAAK,OAAO,qBAAuB,CAE9C,MAAMwC,EAAW,KAAK,OAAO,KAC7B,KAAK,OAAO,KAAO,KAAK,IAAK,KAAK,QAAS,KAAK,IAAK,KAAK,QAAS,KAAK,OAAO,KAAO,KAAK,MAAM,GAE5FA,IAAa,KAAK,OAAO,OAE7B,KAAK,OAAO,yBACZL,EAAc,GAIhB,CASA,OAPA,KAAK,OAAS,EACd,KAAK,mBAAqB,GAMrBA,GACJ,KAAK,cAAc,kBAAmB,KAAK,OAAO,QAAQ,EAAK3B,IAC/D,GAAM,EAAI,KAAK,gBAAgB,IAAK,KAAK,OAAO,UAAU,GAAOA,IACjE,KAAK,oBAAoB,kBAAmB,KAAK,MAAM,EAAKA,IAE5D,KAAK,cAAeb,IAEpB,KAAK,cAAc,KAAM,KAAK,OAAO,QAAQ,EAC7C,KAAK,gBAAgB,KAAM,KAAK,OAAO,UAAU,EACjD,KAAK,oBAAoB,KAAM,KAAK,MAAM,EAEnC,IAID,EAER,CAEA,sBAAuBoC,EAAY,CAElC,OAAKA,IAAc,KAETzB,GAAS,GAAK,KAAK,gBAAoByB,EAIzCzB,GAAS,GAAK,GAAK,KAAK,eAIjC,CAEA,cAAeoC,EAAQ,CAEtB,MAAMC,EAAkB,KAAK,IAAKD,EAAQ,GAAI,EAC9C,OAAO,KAAK,IAAK,IAAM,KAAK,UAAYC,EAEzC,CAEA,YAAaC,EAAQ,CAEpB,KAAK,gBAAgB,OAASA,CAE/B,CAEA,UAAWA,EAAQ,CAElB,KAAK,gBAAgB,KAAOA,CAE7B,CAEA,SAAUC,EAAUC,EAAe,CAElC1C,GAAG,oBAAqB0C,EAAc,GACtC1C,GAAG,eAAgB,CAAEyC,GAErB,KAAK,WAAW,IAAKzC,GAEtB,CAEA,OAAQyC,EAAUC,EAAe,CAE3B,KAAK,qBAAuB,GAEhC1C,GAAG,oBAAqB0C,EAAc,IAItC1C,GAAG,oBAAqB0C,EAAc,GACtC1C,GAAG,aAAc,KAAK,OAAO,GAAIA,EAAE,GAIpCA,GAAG,eAAgByC,GAEnB,KAAK,WAAW,IAAKzC,GAEtB,CAGA,KAAM2C,EAAQC,EAAS,CAEtB,MAAMlB,EAAU,KAAK,WAErB,GAAK,KAAK,OAAO,oBAAsB,CAGtC,MAAME,EAAW,KAAK,OAAO,SAC7B5B,GAAG,KAAM4B,CAAQ,EAAG,IAAK,KAAK,QAC9B,IAAIiB,EAAiB7C,GAAG,SAGxB6C,GAAkB,KAAK,IAAO,KAAK,OAAO,IAAM,EAAM,KAAK,GAAK,GAAK,EAGrE,KAAK,SAAU,EAAIF,EAASE,EAAiBnB,EAAQ,aAAc,KAAK,OAAO,QAC/E,KAAK,OAAQ,EAAIkB,EAASC,EAAiBnB,EAAQ,aAAc,KAAK,OAAO,OAE9E,MAAY,KAAK,OAAO,sBAGvB,KAAK,SAAUiB,GAAW,KAAK,OAAO,MAAQ,KAAK,OAAO,MAAS,KAAK,OAAO,KAAOjB,EAAQ,YAAa,KAAK,OAAO,QACvH,KAAK,OAAQkB,GAAW,KAAK,OAAO,IAAM,KAAK,OAAO,QAAW,KAAK,OAAO,KAAOlB,EAAQ,aAAc,KAAK,OAAO,UAKtH,QAAQ,KAAM,gFACd,KAAK,UAAY,GAInB,CAEA,UAAWoB,EAAa,CAElB,KAAK,OAAO,qBAAuB,KAAK,OAAO,qBAEnD,KAAK,QAAUA,GAIf,QAAQ,KAAM,uFACd,KAAK,WAAa,GAIpB,CAEA,SAAUA,EAAa,CAEjB,KAAK,OAAO,qBAAuB,KAAK,OAAO,qBAEnD,KAAK,QAAUA,GAIf,QAAQ,KAAM,uFACd,KAAK,WAAa,GAIpB,CAEA,sBAAuBC,EAAGC,EAAI,CAE7B,GAAK,CAAE,KAAK,aAEX,OAID,KAAK,mBAAqB,GAE1B,MAAMC,EAAO,KAAK,WAAW,sBAAqB,EAC5CC,EAAKH,EAAIE,EAAK,KACdE,EAAKH,EAAIC,EAAK,IACdG,EAAIH,EAAK,MACTI,EAAIJ,EAAK,OAEf,KAAK,OAAO,EAAMC,EAAKE,EAAM,EAAI,EACjC,KAAK,OAAO,EAAI,EAAID,EAAKE,GAAM,EAAI,EAEnC,KAAK,gBAAgB,IAAK,KAAK,OAAO,EAAG,KAAK,OAAO,EAAG,CAAC,EAAG,UAAW,KAAK,MAAM,EAAG,IAAK,KAAK,OAAO,UAAW,WAElH,CAEA,eAAgBC,EAAO,CAEtB,OAAO,KAAK,IAAK,KAAK,YAAa,KAAK,IAAK,KAAK,YAAaA,CAAI,EAEpE,CAMA,uBAAwBC,EAAQ,CAE/B,KAAK,aAAa,IAAKA,EAAM,QAASA,EAAM,QAE7C,CAEA,sBAAuBA,EAAQ,CAE9B,KAAK,sBAAuBA,EAAM,QAASA,EAAM,OAAO,EACxD,KAAK,YAAY,IAAKA,EAAM,QAASA,EAAM,QAE5C,CAEA,oBAAqBA,EAAQ,CAE5B,KAAK,UAAU,IAAKA,EAAM,QAASA,EAAM,QAE1C,CAEA,uBAAwBA,EAAQ,CAE/B,KAAK,WAAW,IAAKA,EAAM,QAASA,EAAM,SAE1C,KAAK,aAAa,WAAY,KAAK,WAAY,KAAK,cAAe,eAAgB,KAAK,WAAW,EAEnG,MAAM7B,EAAU,KAAK,WAErB,KAAK,YAAaxB,GAAS,KAAK,aAAa,EAAIwB,EAAQ,cAEzD,KAAK,UAAWxB,GAAS,KAAK,aAAa,EAAIwB,EAAQ,cAEvD,KAAK,aAAa,KAAM,KAAK,UAAU,EAEvC,KAAK,OAAM,CAEZ,CAEA,sBAAuB6B,EAAQ,CAE9B,KAAK,UAAU,IAAKA,EAAM,QAASA,EAAM,SAEzC,KAAK,YAAY,WAAY,KAAK,UAAW,KAAK,aAE7C,KAAK,YAAY,EAAI,EAEzB,KAAK,UAAW,KAAK,cAAe,KAAK,YAAY,CAAC,GAE3C,KAAK,YAAY,EAAI,GAEhC,KAAK,SAAU,KAAK,cAAe,KAAK,YAAY,CAAC,GAItD,KAAK,YAAY,KAAM,KAAK,SAAS,EAErC,KAAK,OAAM,CAEZ,CAEA,oBAAqBA,EAAQ,CAE5B,KAAK,QAAQ,IAAKA,EAAM,QAASA,EAAM,SAEvC,KAAK,UAAU,WAAY,KAAK,QAAS,KAAK,WAAY,eAAgB,KAAK,QAAQ,EAEvF,KAAK,KAAM,KAAK,UAAU,EAAG,KAAK,UAAU,GAE5C,KAAK,UAAU,KAAM,KAAK,OAAO,EAEjC,KAAK,OAAM,CAEZ,CAEA,kBAAmBA,EAAQ,CAE1B,KAAK,sBAAuBA,EAAM,QAASA,EAAM,OAAO,EAEnDA,EAAM,OAAS,EAEnB,KAAK,SAAU,KAAK,cAAeA,EAAM,MAAM,GAEpCA,EAAM,OAAS,GAE1B,KAAK,UAAW,KAAK,cAAeA,EAAM,MAAM,GAIjD,KAAK,OAAM,CAEZ,CAEA,eAAgBA,EAAQ,CAEvB,IAAIC,EAAc,GAElB,OAASD,EAAM,KAAI,CAElB,KAAK,KAAK,KAAK,GAETA,EAAM,SAAWA,EAAM,SAAWA,EAAM,SAEvC,KAAK,cAET,KAAK,UAAWrD,GAAS,KAAK,eAAiB,KAAK,WAAW,cAM3D,KAAK,WAET,KAAK,KAAM,EAAG,KAAK,WAAW,EAMhCsD,EAAc,GACd,MAED,KAAK,KAAK,KAAK,OAETD,EAAM,SAAWA,EAAM,SAAWA,EAAM,SAEvC,KAAK,cAET,KAAK,UAAW,CAAErD,GAAS,KAAK,eAAiB,KAAK,WAAW,cAM7D,KAAK,WAET,KAAK,KAAM,EAAG,CAAE,KAAK,WAAW,EAMlCsD,EAAc,GACd,MAED,KAAK,KAAK,KAAK,KAETD,EAAM,SAAWA,EAAM,SAAWA,EAAM,SAEvC,KAAK,cAET,KAAK,YAAarD,GAAS,KAAK,eAAiB,KAAK,WAAW,cAM7D,KAAK,WAET,KAAK,KAAM,KAAK,YAAa,CAAC,EAMhCsD,EAAc,GACd,MAED,KAAK,KAAK,KAAK,MAETD,EAAM,SAAWA,EAAM,SAAWA,EAAM,SAEvC,KAAK,cAET,KAAK,YAAa,CAAErD,GAAS,KAAK,eAAiB,KAAK,WAAW,cAM/D,KAAK,WAET,KAAK,KAAM,CAAE,KAAK,YAAa,CAAC,EAMlCsD,EAAc,GACd,KAEJ,CAEOA,IAGJD,EAAM,eAAc,EAEpB,KAAK,OAAM,EAKb,CAEA,wBAAyBA,EAAQ,CAEhC,GAAK,KAAK,UAAU,SAAW,EAE9B,KAAK,aAAa,IAAKA,EAAM,MAAOA,EAAM,WAEpC,CAEN,MAAM3B,EAAW,KAAK,0BAA2B2B,CAAK,EAEhDR,EAAI,IAAQQ,EAAM,MAAQ3B,EAAS,GACnCoB,EAAI,IAAQO,EAAM,MAAQ3B,EAAS,GAEzC,KAAK,aAAa,IAAKmB,EAAGC,CAAC,CAE5B,CAED,CAEA,qBAAsBO,EAAQ,CAE7B,GAAK,KAAK,UAAU,SAAW,EAE9B,KAAK,UAAU,IAAKA,EAAM,MAAOA,EAAM,WAEjC,CAEN,MAAM3B,EAAW,KAAK,0BAA2B2B,CAAK,EAEhDR,EAAI,IAAQQ,EAAM,MAAQ3B,EAAS,GACnCoB,EAAI,IAAQO,EAAM,MAAQ3B,EAAS,GAEzC,KAAK,UAAU,IAAKmB,EAAGC,CAAC,CAEzB,CAED,CAEA,uBAAwBO,EAAQ,CAE/B,MAAM3B,EAAW,KAAK,0BAA2B2B,CAAK,EAEhDL,EAAKK,EAAM,MAAQ3B,EAAS,EAC5BuB,EAAKI,EAAM,MAAQ3B,EAAS,EAE5Ba,EAAW,KAAK,KAAMS,EAAKA,EAAKC,EAAKA,GAE3C,KAAK,YAAY,IAAK,EAAGV,CAAQ,CAElC,CAEA,0BAA2Bc,EAAQ,CAE7B,KAAK,YAAa,KAAK,uBAAwBA,CAAK,EAEpD,KAAK,WAAY,KAAK,qBAAsBA,CAAK,CAEvD,CAEA,6BAA8BA,EAAQ,CAEhC,KAAK,YAAa,KAAK,uBAAwBA,CAAK,EAEpD,KAAK,cAAe,KAAK,wBAAyBA,CAAK,CAE7D,CAEA,uBAAwBA,EAAQ,CAE/B,GAAK,KAAK,UAAU,QAAU,EAE7B,KAAK,WAAW,IAAKA,EAAM,MAAOA,EAAM,WAElC,CAEN,MAAM3B,EAAW,KAAK,0BAA2B2B,CAAK,EAEhDR,EAAI,IAAQQ,EAAM,MAAQ3B,EAAS,GACnCoB,EAAI,IAAQO,EAAM,MAAQ3B,EAAS,GAEzC,KAAK,WAAW,IAAKmB,EAAGC,CAAC,CAE1B,CAEA,KAAK,aAAa,WAAY,KAAK,WAAY,KAAK,cAAe,eAAgB,KAAK,WAAW,EAEnG,MAAMtB,EAAU,KAAK,WAErB,KAAK,YAAaxB,GAAS,KAAK,aAAa,EAAIwB,EAAQ,cAEzD,KAAK,UAAWxB,GAAS,KAAK,aAAa,EAAIwB,EAAQ,cAEvD,KAAK,aAAa,KAAM,KAAK,UAAU,CAExC,CAEA,oBAAqB6B,EAAQ,CAE5B,GAAK,KAAK,UAAU,SAAW,EAE9B,KAAK,QAAQ,IAAKA,EAAM,MAAOA,EAAM,WAE/B,CAEN,MAAM3B,EAAW,KAAK,0BAA2B2B,CAAK,EAEhDR,EAAI,IAAQQ,EAAM,MAAQ3B,EAAS,GACnCoB,EAAI,IAAQO,EAAM,MAAQ3B,EAAS,GAEzC,KAAK,QAAQ,IAAKmB,EAAGC,CAAC,CAEvB,CAEA,KAAK,UAAU,WAAY,KAAK,QAAS,KAAK,WAAY,eAAgB,KAAK,QAAQ,EAEvF,KAAK,KAAM,KAAK,UAAU,EAAG,KAAK,UAAU,GAE5C,KAAK,UAAU,KAAM,KAAK,OAAO,CAElC,CAEA,sBAAuBO,EAAQ,CAE9B,MAAM3B,EAAW,KAAK,0BAA2B2B,CAAK,EAEhDL,EAAKK,EAAM,MAAQ3B,EAAS,EAC5BuB,EAAKI,EAAM,MAAQ3B,EAAS,EAE5Ba,EAAW,KAAK,KAAMS,EAAKA,EAAKC,EAAKA,GAE3C,KAAK,UAAU,IAAK,EAAGV,CAAQ,EAE/B,KAAK,YAAY,IAAK,EAAG,KAAK,IAAK,KAAK,UAAU,EAAI,KAAK,YAAY,EAAG,KAAK,SAAS,GAExF,KAAK,UAAW,KAAK,YAAY,CAAC,EAElC,KAAK,YAAY,KAAM,KAAK,SAAS,EAErC,MAAMgB,GAAYF,EAAM,MAAQ3B,EAAS,GAAM,GACzC8B,GAAYH,EAAM,MAAQ3B,EAAS,GAAM,GAE/C,KAAK,sBAAuB6B,EAASC,EAEtC,CAEA,yBAA0BH,EAAQ,CAE5B,KAAK,YAAa,KAAK,sBAAuBA,CAAK,EAEnD,KAAK,WAAY,KAAK,oBAAqBA,CAAK,CAEtD,CAEA,4BAA6BA,EAAQ,CAE/B,KAAK,YAAa,KAAK,sBAAuBA,CAAK,EAEnD,KAAK,cAAe,KAAK,uBAAwBA,CAAK,CAE5D,CAIA,YAAaA,EAAQ,CAEpB,KAAK,UAAU,KAAMA,EAAM,SAAS,CAErC,CAEA,eAAgBA,EAAQ,CAEvB,OAAO,KAAK,kBAAmBA,EAAM,SAAS,EAE9C,QAAUI,EAAI,EAAGA,EAAI,KAAK,UAAU,OAAQA,IAE3C,GAAK,KAAK,UAAWA,CAAC,GAAMJ,EAAM,UAAY,CAE7C,KAAK,UAAU,OAAQI,EAAG,CAAC,EAC3B,MAED,CAIF,CAEA,mBAAoBJ,EAAQ,CAE3B,QAAUI,EAAI,EAAGA,EAAI,KAAK,UAAU,OAAQA,IAE3C,GAAK,KAAK,UAAWA,CAAC,GAAMJ,EAAM,UAAY,MAAO,GAItD,MAAO,EAER,CAEA,cAAeA,EAAQ,CAEtB,IAAI3B,EAAW,KAAK,kBAAmB2B,EAAM,SAAS,EAEjD3B,IAAa,SAEjBA,EAAW,IAAIf,EAAAA,QACf,KAAK,kBAAmB0C,EAAM,SAAS,EAAK3B,GAI7CA,EAAS,IAAK2B,EAAM,MAAOA,EAAM,KAAK,CAEvC,CAEA,0BAA2BA,EAAQ,CAElC,MAAMK,EAAcL,EAAM,YAAc,KAAK,UAAW,CAAC,EAAO,KAAK,UAAW,CAAC,EAAK,KAAK,UAAW,CAAC,EAEvG,OAAO,KAAK,kBAAmBK,EAEhC,CAIA,kBAAmBL,EAAQ,CAE1B,MAAMM,EAAON,EAAM,UAGbO,EAAW,CAChB,QAASP,EAAM,QACf,QAASA,EAAM,QACf,OAAQA,EAAM,MACjB,EAEE,OAASM,EAAI,CAEZ,IAAK,GACJC,EAAS,QAAU,GACnB,MAED,IAAK,GACJA,EAAS,QAAU,IACnB,KAEJ,CAGE,OAAKP,EAAM,SAAW,CAAE,KAAK,iBAE5BO,EAAS,QAAU,IAIbA,CAER,CAED,CAEA,SAAS/C,GAAewC,EAAQ,CAE1B,KAAK,UAAY,KAEjB,KAAK,UAAU,SAAW,IAE9B,KAAK,WAAW,kBAAmBA,EAAM,SAAS,EAElD,KAAK,WAAW,iBAAkB,cAAe,KAAK,cAAc,EACpE,KAAK,WAAW,iBAAkB,YAAa,KAAK,YAAY,GAM5D,MAAK,mBAAoBA,CAAK,IAInC,KAAK,YAAaA,GAEbA,EAAM,cAAgB,QAE1B,KAAK,cAAeA,GAIpB,KAAK,aAAcA,IAIrB,CAEA,SAASzC,GAAeyC,EAAQ,CAE1B,KAAK,UAAY,KAEjBA,EAAM,cAAgB,QAE1B,KAAK,aAAcA,GAInB,KAAK,aAAcA,GAIrB,CAEA,SAASvC,GAAauC,EAAQ,CAI7B,OAFA,KAAK,eAAgBA,GAEZ,KAAK,UAAU,OAAM,CAE7B,IAAK,GAEJ,KAAK,WAAW,sBAAuBA,EAAM,SAAS,EAEtD,KAAK,WAAW,oBAAqB,cAAe,KAAK,cAAc,EACvE,KAAK,WAAW,oBAAqB,YAAa,KAAK,YAAY,EAEnE,KAAK,cAAe9D,IAEpB,KAAK,MAAQU,GAAO,KAEpB,MAED,IAAK,GAEJ,MAAMyD,EAAY,KAAK,UAAW,CAAC,EAC7BhC,EAAW,KAAK,kBAAmBgC,CAAS,EAGlD,KAAK,cAAe,CAAE,UAAWA,EAAW,MAAOhC,EAAS,EAAG,MAAOA,EAAS,CAAC,CAAE,EAElF,KAEH,CAEA,CAEA,SAASN,GAAaiC,EAAQ,CAE7B,IAAIQ,EAEJ,OAASR,EAAM,OAAM,CAEpB,IAAK,GAEJQ,EAAc,KAAK,aAAa,KAChC,MAED,IAAK,GAEJA,EAAc,KAAK,aAAa,OAChC,MAED,IAAK,GAEJA,EAAc,KAAK,aAAa,MAChC,MAED,QAECA,EAAc,EAEjB,CAEC,OAASA,EAAW,CAEnB,KAAKtD,EAAAA,MAAM,MAEV,GAAK,KAAK,aAAe,GAAQ,OAEjC,KAAK,sBAAuB8C,GAE5B,KAAK,MAAQpD,GAAO,MAEpB,MAED,KAAKM,EAAAA,MAAM,OAEV,GAAK8C,EAAM,SAAWA,EAAM,SAAWA,EAAM,SAAW,CAEvD,GAAK,KAAK,YAAc,GAAQ,OAEhC,KAAK,oBAAqBA,GAE1B,KAAK,MAAQpD,GAAO,GAErB,KAAO,CAEN,GAAK,KAAK,eAAiB,GAAQ,OAEnC,KAAK,uBAAwBoD,GAE7B,KAAK,MAAQpD,GAAO,MAErB,CAEA,MAED,KAAKM,EAAAA,MAAM,IAEV,GAAK8C,EAAM,SAAWA,EAAM,SAAWA,EAAM,SAAW,CAEvD,GAAK,KAAK,eAAiB,GAAQ,OAEnC,KAAK,uBAAwBA,GAE7B,KAAK,MAAQpD,GAAO,MAErB,KAAO,CAEN,GAAK,KAAK,YAAc,GAAQ,OAEhC,KAAK,oBAAqBoD,GAE1B,KAAK,MAAQpD,GAAO,GAErB,CAEA,MAED,QAEC,KAAK,MAAQA,GAAO,IAEvB,CAEM,KAAK,QAAUA,GAAO,MAE1B,KAAK,cAAeX,GAItB,CAEA,SAAS+B,GAAagC,EAAQ,CAE7B,OAAS,KAAK,MAAK,CAElB,KAAKpD,GAAO,OAEX,GAAK,KAAK,eAAiB,GAAQ,OAEnC,KAAK,uBAAwBoD,GAE7B,MAED,KAAKpD,GAAO,MAEX,GAAK,KAAK,aAAe,GAAQ,OAEjC,KAAK,sBAAuBoD,GAE5B,MAED,KAAKpD,GAAO,IAEX,GAAK,KAAK,YAAc,GAAQ,OAEhC,KAAK,oBAAqBoD,GAE1B,KAEH,CAEA,CAEA,SAASrC,GAAcqC,EAAQ,CAEzB,KAAK,UAAY,IAAS,KAAK,aAAe,IAAS,KAAK,QAAUpD,GAAO,OAElFoD,EAAM,eAAc,EAEpB,KAAK,cAAe/D,IAEpB,KAAK,kBAAmB,KAAK,kBAAmB+D,CAAK,CAAE,EAEvD,KAAK,cAAe9D,IAErB,CAEA,SAAS0B,GAAWoC,EAAQ,CAEtB,KAAK,UAAY,IAEtB,KAAK,eAAgBA,EAEtB,CAEA,SAASnC,GAAcmC,EAAQ,CAI9B,OAFA,KAAK,cAAeA,GAEX,KAAK,UAAU,OAAM,CAE7B,IAAK,GAEJ,OAAS,KAAK,QAAQ,IAAG,CAExB,KAAK7C,EAAAA,MAAM,OAEV,GAAK,KAAK,eAAiB,GAAQ,OAEnC,KAAK,wBAAyB6C,GAE9B,KAAK,MAAQpD,GAAO,aAEpB,MAED,KAAKO,EAAAA,MAAM,IAEV,GAAK,KAAK,YAAc,GAAQ,OAEhC,KAAK,qBAAsB6C,GAE3B,KAAK,MAAQpD,GAAO,UAEpB,MAED,QAEC,KAAK,MAAQA,GAAO,IAEzB,CAEG,MAED,IAAK,GAEJ,OAAS,KAAK,QAAQ,IAAG,CAExB,KAAKO,EAAAA,MAAM,UAEV,GAAK,KAAK,aAAe,IAAS,KAAK,YAAc,GAAQ,OAE7D,KAAK,0BAA2B6C,GAEhC,KAAK,MAAQpD,GAAO,gBAEpB,MAED,KAAKO,EAAAA,MAAM,aAEV,GAAK,KAAK,aAAe,IAAS,KAAK,eAAiB,GAAQ,OAEhE,KAAK,6BAA8B6C,GAEnC,KAAK,MAAQpD,GAAO,mBAEpB,MAED,QAEC,KAAK,MAAQA,GAAO,IAEzB,CAEG,MAED,QAEC,KAAK,MAAQA,GAAO,IAEvB,CAEM,KAAK,QAAUA,GAAO,MAE1B,KAAK,cAAeX,GAItB,CAEA,SAAS6B,GAAakC,EAAQ,CAI7B,OAFA,KAAK,cAAeA,GAEX,KAAK,MAAK,CAElB,KAAKpD,GAAO,aAEX,GAAK,KAAK,eAAiB,GAAQ,OAEnC,KAAK,uBAAwBoD,GAE7B,KAAK,OAAM,EAEX,MAED,KAAKpD,GAAO,UAEX,GAAK,KAAK,YAAc,GAAQ,OAEhC,KAAK,oBAAqBoD,GAE1B,KAAK,OAAM,EAEX,MAED,KAAKpD,GAAO,gBAEX,GAAK,KAAK,aAAe,IAAS,KAAK,YAAc,GAAQ,OAE7D,KAAK,yBAA0BoD,GAE/B,KAAK,OAAM,EAEX,MAED,KAAKpD,GAAO,mBAEX,GAAK,KAAK,aAAe,IAAS,KAAK,eAAiB,GAAQ,OAEhE,KAAK,4BAA6BoD,GAElC,KAAK,OAAM,EAEX,MAED,QAEC,KAAK,MAAQpD,GAAO,IAEvB,CAEA,CAEA,SAASc,GAAesC,EAAQ,CAE1B,KAAK,UAAY,IAEtBA,EAAM,eAAc,CAErB,CAEA,SAAS/B,GAAsB+B,EAAQ,CAEjCA,EAAM,MAAQ,YAElB,KAAK,eAAiB,GAEL,KAAK,WAAW,YAAW,EAEnC,iBAAkB,QAAS,KAAK,oBAAqB,CAAE,QAAS,GAAM,QAAS,EAAI,GAI9F,CAEA,SAAS9B,GAAoB8B,EAAQ,CAE/BA,EAAM,MAAQ,YAElB,KAAK,eAAiB,GAEL,KAAK,WAAW,YAAW,EAEnC,oBAAqB,QAAS,KAAK,oBAAqB,CAAE,QAAS,GAAM,QAAS,EAAI,GAIjG,CC3zDO,MAAMS,EAAyB,CACpC,YAAYC,EAASjF,EAAQwB,EAAY0D,EAAgB,CACvD,KAAK,QAAUD,EACf,KAAK,OAASjF,EACd,KAAK,WAAawB,EAClB,KAAK,WAAa,GAClB,KAAK,iBAAmB,IAAI/B,EAAM,QAAQ,EAAG,GAAI,CAAC,EAClD,KAAK,qBAAuB,IAAIA,EAAM,QACtC,KAAK,WAAa,IAAIA,EAAM,QAC5B,KAAK,WAAa,IAAIA,EAAM,UAC5B,KAAK,aAAe,EAEpB,KAAK,OAAS,IAAIA,EAAM,MAAM,EAAG,EAAG,EAAG,KAAK,EAC5C,KAAK,YAAc,EACnB,KAAK,YAAc,EAEnB,KAAK,aAAe,GACpB,KAAK,iBAAmB,GACxB,KAAK,eAAiB,GACtB,KAAK,eAAiB,GACtB,KAAK,SAAW,EAChB,KAAK,UAAY,KACjB,KAAK,UAAY,IACjB,KAAK,aAAe,IACpB,KAAK,WAAa,GAClB,KAAK,EAAI,IAMT,KAAK,cAAgB,KAAK,SAAW,KAAK,QAAQ,aAAe,KAAO,KAAK,aAAa,KAAK,IAAI,EAAI,KAAK,YAAY,KAAK,IAAI,EACjI,KAAK,YAAc,KAAK,SAAW,KAAK,QAAQ,aAAe,KAAO,KAAK,WAAW,KAAK,IAAI,EAAI,KAAK,UAAU,KAAK,IAAI,EAC3H,KAAK,cAAgB,KAAK,SAAW,KAAK,QAAQ,aAAe,KAAO,KAAK,YAAY,KAAK,IAAI,EAAI,KAAK,YAAY,KAAK,IAAI,EAChI,KAAK,cAAgB,KAAK,UAAU,KAAK,IAAI,EAC7C,KAAK,YAAc,KAAK,QAAQ,KAAK,IAAI,EACzC,KAAK,eAAiB,KAAK,aAAa,KAAK,IAAI,EACjD,KAAK,eAAiB,GACtB,KAAK,aAAe,GACpB,KAAK,cAAgB,GACrB,KAAK,WACL,KAAK,QAAU,GACf,KAAK,UAAY,IACRwF,CAGX,CAKA,IAAI,UAAUE,EAAW,CACvB,KAAK,gBAAkBA,CACzB,CAKA,IAAI,QAAQC,EAAW,CAEjB,KAAK,aAAeA,IAGxB,KAAK,WAAaA,EAElB,KAAK,OAAO,kBAAkB,KAAK,OAAO,UAAU,EAEhDA,EACF,KAAK,UAAS,EAEd,KAAK,aAAY,EAErB,CAKA,IAAI,SAAU,CACZ,OAAO,KAAK,UACd,CAEA,WAAY,CAEV,MAAMC,EAAa,KAAK,SAAS,WAC3BC,EAAOD,IAAe,MAAQ,CAACA,EAErC,QAAQ,IAAI,qDAAsDA,EAAY,QAASC,CAAI,EAEtFA,GAOH,QAAQ,IAAI,2DAA2D,EACvE,KAAK,WAAW,iBAAiB,YAAa,KAAK,cAAe,EAAK,EACvE,KAAK,WAAW,iBAAiB,UAAW,KAAK,YAAa,EAAK,IAPnE,QAAQ,IAAI,sCAAsC,EAClD,KAAK,WAAW,iBAAiB,aAAc,KAAK,cAAe,EAAK,EACxE,KAAK,WAAW,iBAAiB,WAAY,KAAK,YAAa,EAAK,GAQtE,OAAO,iBAAiB,UAAW,KAAK,cAAe,EAAK,EAC5D,OAAO,iBAAiB,QAAS,KAAK,YAAa,EAAK,EAEpD,KAAK,iBACH,SAAS,kBACX,SAAS,iBAAiB,iBAAkB,KAAK,eAAgB,EAAK,EAExE,OAAO,iBAAiB,aAAc,KAAK,eAAgB,EAAK,EAEpE,CAEA,cAAe,CAET,KAAK,SAAW,KAAK,QAAQ,aAAe,MAE9C,KAAK,WAAW,oBAAoB,aAAc,KAAK,aAAa,EACpE,KAAK,WAAW,oBAAoB,WAAY,KAAK,WAAW,EAEhE,KAAK,WAAW,oBAAoB,YAAa,KAAK,aAAa,IAGnE,KAAK,WAAW,oBAAoB,YAAa,KAAK,aAAa,EACnE,KAAK,WAAW,oBAAoB,UAAW,KAAK,WAAW,EAE/D,KAAK,WAAW,oBAAoB,YAAa,KAAK,aAAa,GAGrE,OAAO,oBAAoB,UAAW,KAAK,aAAa,EACxD,OAAO,oBAAoB,QAAS,KAAK,WAAW,EAEhD,KAAK,iBACH,SAAS,kBACX,SAAS,oBAAoB,iBAAkB,KAAK,cAAc,EAEpE,OAAO,oBAAoB,aAAc,KAAK,cAAc,EAEhE,CAEA,aAAaf,EAAO,CAClB,SACA,IAAIgB,EAkBJ,OAjBIhB,EAAM,YAEJA,EAAM,WAAa,IACrBgB,EAAY,MAEVhB,EAAM,WAAa,IACrBgB,EAAY,SAELhB,EAAM,SAEXA,EAAM,OAAS,IACjBgB,EAAY,MAEVhB,EAAM,OAAS,IACjBgB,EAAY,SAGRA,EAAS,CACf,IAAK,KACH,KAAK,qBAAqB,EAAI,EAC9B,MACF,IAAK,OACH,KAAK,qBAAqB,EAAI,GAC9B,KACR,CACQ,KAAK,cAAgB,IAEvB,KAAK,aAAe,GACpB,KAAK,cAAgB,GACrB,KAAK,WAAa,WAAW,IAAM,CAC7B,KAAK,eAAiB,KACxB,KAAK,cAAgB,GACrB,KAAK,aAAe,GACpB,KAAK,qBAAqB,EAAI,EAElC,EAAG,GAAG,IAEN,aAAa,KAAK,UAAU,EAC5B,KAAK,WAAa,WAAW,IAAM,CAC7B,KAAK,eAAiB,KACxB,KAAK,cAAgB,GACrB,KAAK,aAAe,GACpB,KAAK,qBAAqB,EAAI,EAElC,EAAG,GAAG,EAEV,CAEA,YAAYhB,EAAO,CACjB,QAAQ,IAAI,6CAA8CA,CAAK,EAG/D,KAAK,WAAW,iBAAiB,YAAa,KAAK,cAAe,EAAK,EAEvE,KAAK,YAAcA,EAAM,QACzB,KAAK,YAAcA,EAAM,OAC3B,CAEA,YAAYA,EAAO,CAEjB,GAAI,KAAK,YAAc,GACrB,OAIF,IAAIiB,EAAY,KAAK,YAAcjB,EAAM,QAAU,KAAK,YAAc,EAClEkB,EAAY,KAAK,YAAclB,EAAM,QAAU,KAAK,YAAc,EAIlEmB,EAAO,KAAK,OAAO,EAAID,EAAY,KAAK,SAAW,KAAK,UACxDC,GAAQ,EACNA,EAAO,KAAK,WACd,KAAK,OAAO,EAAIA,EAEhB,KAAK,OAAO,EAAI,KAAK,WAGnBA,EAAO,CAAC,KAAK,WACf,KAAK,OAAO,EAAIA,EAEhB,KAAK,OAAO,EAAI,CAAC,KAAK,WAI1B,KAAK,OAAO,GAAKF,EAAY,KAAK,UAElC,KAAK,OAAO,WAAW,aAAa,KAAK,MAAM,EAC/C,KAAK,YAAcjB,EAAM,QACzB,KAAK,YAAcA,EAAM,QACzB,IAAIU,EAAU,KAAK,YACnBA,EAAQ,UAAY,GACpB,IAAIU,EAAU,IAAI,YAAY,yBAA0B,CACtD,OAAQ,EACd,CAAK,EACD,OAAO,cAAcA,CAAO,CAC9B,CAEA,UAAUpB,EAAO,CACf,IAAIU,EAAU,KAAK,YACnBA,EAAQ,UAAY,GAEpB,KAAK,WAAW,oBAAoB,YAAa,KAAK,aAAa,CACrE,CAEA,aAAaV,EAAO,CAClB,KAAK,WAAW,iBAAiB,YAAa,KAAK,cAAe,EAAK,EACvE,KAAK,YAAcA,EAAM,cAAc,CAAC,EAAE,QAC1C,KAAK,YAAcA,EAAM,cAAc,CAAC,EAAE,OAC5C,CACA,YAAYA,EAAO,CACjB,GAAI,KAAK,YAAc,GACrB,OAEF,IAAIiB,EAAY,KAAK,YAAcjB,EAAM,cAAc,CAAC,EAAE,QAAU,KAAK,YAAc,EACnFkB,EAAY,KAAK,YAAclB,EAAM,cAAc,CAAC,EAAE,QAAU,KAAK,YAAc,EAInFmB,EAAO,KAAK,OAAO,EAAID,EAAY,KAAK,SAAW,KAAK,UACxDC,GAAQ,EACNA,EAAO,KAAK,WACd,KAAK,OAAO,EAAIA,EAEhB,KAAK,OAAO,EAAI,KAAK,WAGnBA,EAAO,CAAC,KAAK,WACf,KAAK,OAAO,EAAIA,EAEhB,KAAK,OAAO,EAAI,CAAC,KAAK,WAI1B,KAAK,OAAO,GAAKF,EAAY,KAAK,UAElC,KAAK,OAAO,WAAW,aAAa,KAAK,MAAM,EAC/C,KAAK,YAAcjB,EAAM,cAAc,CAAC,EAAE,QAC1C,KAAK,YAAcA,EAAM,cAAc,CAAC,EAAE,QAC1C,IAAIU,EAAU,KAAK,YACnBA,EAAQ,UAAY,GACpB,IAAIU,EAAU,IAAI,YAAY,yBAA0B,CACtD,OAAQ,EACd,CAAK,EACD,OAAO,cAAcA,CAAO,CAC9B,CACA,WAAWpB,EAAO,CAChB,IAAIU,EAAU,KAAK,YACnBA,EAAQ,UAAY,GACpB,KAAK,WAAW,oBAAoB,YAAa,KAAK,aAAa,CACrE,CAEA,UAAUV,EAAO,CACf,IAAIoB,EAAU,IAAI,YAAY,yBAA0B,CACtD,OAAQ,EACd,CAAK,EACD,IAAIV,EAAU,KAAK,YAGnB,OAFAA,EAAQ,UAAY,GACpB,OAAO,cAAcU,CAAO,EACpBpB,EAAM,QAAO,CACnB,IAAK,IACH,KAAK,QAAQ,EAAE,EACf,MACF,IAAK,IACH,KAAK,QAAU,GACf,KAAK,qBAAqB,EAAI,EAC9B,MACF,IAAK,IACH,KAAK,qBAAqB,EAAI,GAC9B,MACF,IAAK,IACH,KAAK,qBAAqB,EAAI,EAC9B,MAEF,IAAK,IACH,KAAK,QAAQ,EAAE,EACf,MACF,IAAK,IACH,KAAK,qBAAqB,EAAI,GAC9B,MAEF,IAAK,IACH,KAAK,QAAQ,CAAC,EACd,MAEF,IAAK,IACH,KAAK,qBAAqB,EAAI,GAC9B,MAEF,IAAK,IACH,KAAK,QAAQ,CAAC,EACd,MACF,IAAK,IACH,KAAK,qBAAqB,EAAI,EAE9B,KACR,CACE,CAEA,QAAQA,EAAO,CACb,IAAIU,EAAU,KAAK,YAEnB,OADAA,EAAQ,UAAY,GACZV,EAAM,QAAO,CACnB,IAAK,IAEL,IAAK,IACH,KAAK,qBAAqB,EAAI,EAC9B,MAEF,IAAK,IACL,IAAK,IACH,KAAK,qBAAqB,EAAI,EAC9B,MACF,IAAK,IACL,IAAK,IACH,KAAK,qBAAqB,EAAI,EAC9B,MAEF,IAAK,IACL,IAAK,IACH,KAAK,qBAAqB,EAAI,EAC9B,MACF,IAAK,IACL,IAAK,IACH,KAAK,QAAU,GACf,KAAK,qBAAqB,EAAI,EAC9B,KACR,CACE,CAOA,QAAQqB,EAAO,CACb,KAAK,OAAO,GAAKA,EAAQ,KAAK,UAC9B,KAAK,OAAO,WAAW,aAAa,KAAK,MAAM,CACjD,CAOA,QAAQA,EAAO,CACb,IAAIF,EAAO,KAAK,OAAO,EAAIE,EAAQ,KAAK,SAAW,GAAM,KAAK,UAC1DF,GAAQ,EACNA,EAAO,KAAK,WACd,KAAK,OAAO,EAAIA,EAEhB,KAAK,OAAO,EAAI,KAAK,WAGnBA,EAAO,CAAC,KAAK,WACf,KAAK,OAAO,EAAIA,EAEhB,KAAK,OAAO,EAAI,CAAC,KAAK,WAK1B,KAAK,OAAO,WAAW,aAAa,KAAK,MAAM,CACjD,CAKA,QAAS,CAEF,KAAK,SACR,KAAK,YAAW,EAGlB,KAAK,cAAa,CACpB,CAEA,aAAc,CACZ,GAAI,KAAK,aAAc,CACrB,IAAIG,EAAY,GAChB,KAAK,cAAgB,IACrB,KAAK,WAAW,IAAI,EAAG,GAAI,CAAC,EAC5B,MAAMC,EAAY,KAAK,UACvB,GAAIA,EAAW,CACb,MAAMC,EAAcD,EAAU,MAAM,IAAI,IAAIrG,EAAM,QAAQ,EAAG,KAAK,aAAc,CAAC,CAAC,EAClF,GAAI,KAAK,gBACP,GAAIsG,EAAY,GAAK,KAAK,OAAO,SAAS,GAAKA,EAAY,EAAI,KAAK,OAAO,SAAS,EAAI,GAAK,CAI3F,KAAK,gBAAgB,KAAK,OAAO,SAAS,GAAKA,EAAY,EAAI,KAAK,OAAO,SAAS,GAAK,GAAI,EAC7F,KAAK,aAAe,EACpBF,EAAY,GACZ,MACF,OACSC,EAAU,SAAW,KAAK,eAEnC,KAAK,gBAAgBC,EAAY,CAAC,EAClC,KAAK,aAAe,EACpBF,EAAY,GAEhB,CAEIA,GAEF,KAAK,gBAAgB,KAAK,OAAO,SAAS,EAAI,KAAK,EAAI,KAAK,IAAI,KAAK,aAAc,CAAC,CAAC,CAEzF,MACE,KAAK,gBAAgB,KAAK,OAAO,SAAS,CAAC,CAE/C,CAEA,eAAgB,CACV,KAAK,qBAAqB,IAAM,GAAG,KAAK,iBACxC,KAAK,qBAAqB,IAAM,GAAG,KAAK,iBACxC,KAAK,qBAAqB,IAAM,GAAG,KAAK,gBAC9C,CAEA,gBAAiB,CACf,IAAIZ,EAAU,KAAK,YAInB,GAHAA,EAAQ,UAAY,GACpB,KAAK,WAAW,oBAAoB,KAAK,OAAO,OAAQ,CAAC,EACzD,KAAK,WAAW,eAAe,KAAK,qBAAqB,CAAC,EACtD,KAAK,eAAgB,CACvB,MAAMa,EAAY,KAAK,UACvB,GAAIA,GAAaA,EAAU,SAAW,GACpC,MAEJ,CAEA,KAAK,OAAO,SAAS,gBAAgB,KAAK,WAAY,KAAK,SAAS,CACtE,CAEA,gBAAiB,CACf,IAAIb,EAAU,KAAK,YAKnB,GAJAA,EAAQ,UAAY,GACpB,KAAK,WAAW,oBAAoB,KAAK,OAAO,OAAQ,CAAC,EACzD,KAAK,WAAW,aAAa,KAAK,OAAO,GAAI,KAAK,UAAU,EAC5D,KAAK,WAAW,eAAe,KAAK,qBAAqB,CAAC,EACtD,KAAK,eAAgB,CACvB,MAAMa,EAAY,KAAK,UACvB,GAAIA,GAAaA,EAAU,SAAW,GACpC,MAEJ,CAEA,KAAK,OAAO,SAAS,gBAAgB,KAAK,WAAY,KAAK,SAAS,CACtE,CACA,gBAAiB,CACf,IAAIb,EAAU,KAAK,YAKnB,GAJAA,EAAQ,UAAY,GACpB,KAAK,WAAW,oBAAoB,KAAK,OAAO,OAAQ,CAAC,EACzD,KAAK,WAAa,IAAIxF,EAAM,QAAQ,EAAG,EAAG,CAAC,EAC3C,KAAK,WAAW,eAAe,KAAK,qBAAqB,CAAC,EACtD,KAAK,eAAgB,CACvB,MAAMqG,EAAY,KAAK,UACvB,GAAIA,GAAaA,EAAU,SAAW,GACpC,MAEJ,CAGA,IAAIE,EAAgB,KAAK,OAAO,SAAS,MAAK,EAAG,gBAAgB,KAAK,WAAY,KAAK,SAAS,EAChG,KAAK,gBAAgBA,EAAc,CAAC,CACtC,CAGA,gBAAgB1F,EAAQ,CACtB,IAAI2F,EAAY,KAAK,eACjB,KAAK,kBAAoBA,IAAc,QAAa3F,EAAS2F,EAC/D,KAAK,OAAO,SAAS,EAAIA,EAEzB,KAAK,OAAO,SAAS,EAAI3F,CAE7B,CAGA,cAAe,CACb,IAAI2F,EACAhB,EAAU,KAAK,YACfiB,EAAcjB,EAAQ,WAAaA,EAAQ,WAAW,eAAeA,CAAO,EAAI,KACpF,OAAIA,GAAWiB,IACbD,EAAYC,EAAY,IAAI,GAEvBD,CACT,CAEA,SAAU,CAER,MAAME,EAAS,KAAK,OAAO,SAAS,MAAK,EAAG,IAAI,KAAK,gBAAgB,EACrE,KAAK,WAAW,IAAI,OAASA,EAC7B,KAAK,WAAW,IAAI,UAAY,KAAK,WAIrC,IAAIC,EAHU,KAAK,YAGE,MAAM,OAC3B,OAAIA,GAAUA,EAAO,SAAS,KAKvB,IAeT,CACF,CC/iBO,MAAMC,EAAa,CACd,OACD,cACA,oBACA,SAAoB,GAC3B,YAAY7G,EAAY,CACpB,KAAK,OAASA,EACd,KAAK,KAAA,CACT,CAEO,MAAM,CACT,KAAK,cAAgB,IAAI6B,GAAc,KAAK,OAAQ,KAAK,OAAO,OAAQ,KAAK,OAAO,SAAS,UAAU,EACvG,KAAK,oBAAsB,IAAI2D,GAAyB,KAAK,OAAQ,KAAK,OAAO,OAAQ,KAAK,OAAO,SAAS,UAAU,CAC5H,CAGO,QAAQ,CACX,KAAK,SAAW,GAChB,KAAK,cAAc,QAAU,EAEjC,CAEO,WAAW,CACd,KAAK,SAAW,GAChB,KAAK,cAAc,QAAU,EACjC,CAIO,uBAAwB,CAE3B,KAAK,oBAAsB,IAAIA,GAC3B,KAAK,OACL,KAAK,OAAO,OACZ,KAAK,OAAO,SAAS,WACrB,CAAA,CAAC,EAGL,KAAK,cAAc,QAAU,GAE7B,KAAK,oBAAoB,QAAU,GACnC,KAAK,oBAAoB,SAAW,EACxC,CAEO,mBAAoB,CAEnB,KAAK,sBACL,KAAK,oBAAoB,QAAU,IAGvC,KAAK,cAAc,QAAU,EACjC,CAIO,QAAQ,CACR,KAAK,oBAAoB,SACxB,KAAK,oBAAoB,OAAA,CAEjC,CACJ,CCvDA,MAAMsB,GAAa,CAElB,KAAM,aAEN,SAAU,CAET,SAAY,CAAE,MAAO,IAAI,EACzB,QAAW,CAAE,MAAO,CAAG,CAEzB,EAEC,aAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAWxB,eAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAgB3B,EClCA,MAAMC,EAAK,CAKV,aAAc,CASb,KAAK,OAAS,GAQd,KAAK,QAAU,GAQf,KAAK,UAAY,GAQjB,KAAK,MAAQ,GASb,KAAK,eAAiB,EAEvB,CASA,SAA+B,CAAC,CAchC,QAAyE,CAExE,QAAQ,MAAO,4DAA4D,CAE5E,CAQA,SAAU,CAAC,CAEZ,CAIA,MAAMC,GAAU,IAAIC,EAAAA,mBAAoB,GAAK,EAAG,EAAG,GAAK,EAAG,CAAC,EAI5D,MAAMC,WAAmCC,EAAAA,cAAe,CAEvD,aAAc,CAEb,MAAK,EAEL,KAAK,aAAc,WAAY,IAAIC,EAAAA,uBAAwB,CAAE,GAAK,EAAG,EAAG,GAAK,GAAK,EAAG,EAAG,GAAK,CAAC,EAAI,EAAG,EACrG,KAAK,aAAc,KAAM,IAAIA,EAAAA,uBAAwB,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EAAI,CAAC,CAAE,CAE/E,CAED,CAEA,MAAMC,GAAY,IAAIH,GAetB,MAAMI,EAAe,CAOpB,YAAaC,EAAW,CAEvB,KAAK,MAAQ,IAAIC,OAAMH,GAAWE,CAAQ,CAE3C,CAMA,SAAU,CAET,KAAK,MAAM,SAAS,QAAO,CAE5B,CAOA,OAAQE,EAAW,CAElBA,EAAS,OAAQ,KAAK,MAAOT,EAAO,CAErC,CAOA,IAAI,UAAW,CAEd,OAAO,KAAK,MAAM,QAEnB,CAEA,IAAI,SAAUZ,EAAQ,CAErB,KAAK,MAAM,SAAWA,CAEvB,CAED,CCzKA,MAAMsB,WAAmBX,EAAK,CAU7B,YAAaY,EAAQC,EAAY,WAAa,CAE7C,MAAK,EAQL,KAAK,UAAYA,EAOjB,KAAK,SAAW,KAOhB,KAAK,SAAW,KAEXD,aAAkBE,EAAAA,gBAEtB,KAAK,SAAWF,EAAO,SAEvB,KAAK,SAAWA,GAELA,IAEX,KAAK,SAAWG,EAAAA,cAAc,MAAOH,EAAO,QAAQ,EAEpD,KAAK,SAAW,IAAIE,iBAAgB,CAEnC,KAAQF,EAAO,OAAS,OAAcA,EAAO,KAAO,cACpD,QAAS,OAAO,OAAQ,CAAA,EAAIA,EAAO,OAAO,EAC1C,SAAU,KAAK,SACf,aAAcA,EAAO,aACrB,eAAgBA,EAAO,cAE3B,CAAI,GAMF,KAAK,QAAU,IAAIL,GAAgB,KAAK,QAAQ,CAEjD,CAaA,OAAQG,EAAUM,EAAaC,EAA0C,CAEnE,KAAK,SAAU,KAAK,SAAS,IAEjC,KAAK,SAAU,KAAK,SAAS,EAAG,MAAQA,EAAW,SAIpD,KAAK,QAAQ,SAAW,KAAK,SAExB,KAAK,gBAETP,EAAS,gBAAiB,IAAI,EAC9B,KAAK,QAAQ,OAAQA,CAAQ,IAI7BA,EAAS,gBAAiBM,CAAW,EAEhC,KAAK,OAAQN,EAAS,MAAOA,EAAS,eAAgBA,EAAS,eAAgBA,EAAS,gBAAgB,EAC7G,KAAK,QAAQ,OAAQA,CAAQ,EAI/B,CAMA,SAAU,CAET,KAAK,SAAS,QAAO,EAErB,KAAK,QAAQ,QAAO,CAErB,CAED,CCpHA,MAAMQ,WAAiBlB,EAAK,CAQ3B,YAAamB,EAAO1H,EAAS,CAE5B,MAAK,EAOL,KAAK,MAAQ0H,EAOb,KAAK,OAAS1H,EAQd,KAAK,MAAQ,GAQb,KAAK,UAAY,GAQjB,KAAK,QAAU,EAEhB,CAaA,OAAQiH,EAAUM,EAAaC,EAA0C,CAExE,MAAMG,EAAUV,EAAS,WAAU,EAC7BW,EAAQX,EAAS,MAIvBW,EAAM,QAAQ,MAAM,QAAS,EAAK,EAClCA,EAAM,QAAQ,MAAM,QAAS,EAAK,EAIlCA,EAAM,QAAQ,MAAM,UAAW,EAAI,EACnCA,EAAM,QAAQ,MAAM,UAAW,EAAI,EAInC,IAAIC,EAAYC,EAEX,KAAK,SAETD,EAAa,EACbC,EAAa,IAIbD,EAAa,EACbC,EAAa,GAIdF,EAAM,QAAQ,QAAQ,QAAS,EAAI,EACnCA,EAAM,QAAQ,QAAQ,MAAOD,EAAQ,QAASA,EAAQ,QAASA,EAAQ,OAAO,EAC9EC,EAAM,QAAQ,QAAQ,QAASD,EAAQ,OAAQE,EAAY,UAAU,EACrED,EAAM,QAAQ,QAAQ,SAAUE,CAAU,EAC1CF,EAAM,QAAQ,QAAQ,UAAW,EAAI,EAIrCX,EAAS,gBAAiBO,CAAU,EAC/B,KAAK,OAAQP,EAAS,MAAK,EAChCA,EAAS,OAAQ,KAAK,MAAO,KAAK,MAAM,EAExCA,EAAS,gBAAiBM,CAAW,EAChC,KAAK,OAAQN,EAAS,MAAK,EAChCA,EAAS,OAAQ,KAAK,MAAO,KAAK,MAAM,EAIxCW,EAAM,QAAQ,MAAM,UAAW,EAAK,EACpCA,EAAM,QAAQ,MAAM,UAAW,EAAK,EAEpCA,EAAM,QAAQ,MAAM,QAAS,EAAI,EACjCA,EAAM,QAAQ,MAAM,QAAS,EAAI,EAIjCA,EAAM,QAAQ,QAAQ,UAAW,EAAK,EACtCA,EAAM,QAAQ,QAAQ,QAASD,EAAQ,MAAO,EAAG,YACjDC,EAAM,QAAQ,QAAQ,MAAOD,EAAQ,KAAMA,EAAQ,KAAMA,EAAQ,IAAI,EACrEC,EAAM,QAAQ,QAAQ,UAAW,EAAI,CAEtC,CAED,CAYA,MAAMG,WAAsBxB,EAAK,CAKhC,aAAc,CAEb,MAAK,EAQL,KAAK,UAAY,EAElB,CAaA,OAAQU,EAAiE,CAExEA,EAAS,MAAM,QAAQ,QAAQ,UAAW,EAAK,EAC/CA,EAAS,MAAM,QAAQ,QAAQ,QAAS,EAAK,CAE9C,CAED,CCvJA,MAAMe,EAAe,CAUpB,YAAaf,EAAUgB,EAAe,CAWrC,GAJA,KAAK,SAAWhB,EAEhB,KAAK,YAAcA,EAAS,cAAa,EAEpCgB,IAAiB,OAAY,CAEjC,MAAMC,EAAOjB,EAAS,QAAS,IAAIpF,EAAAA,OAAS,EAC5C,KAAK,OAASqG,EAAK,MACnB,KAAK,QAAUA,EAAK,OAEpBD,EAAe,IAAIE,EAAAA,kBAAmB,KAAK,OAAS,KAAK,YAAa,KAAK,QAAU,KAAK,YAAa,CAAE,KAAMC,EAAAA,aAAa,CAAE,EAC9HH,EAAa,QAAQ,KAAO,oBAE7B,MAEC,KAAK,OAASA,EAAa,MAC3B,KAAK,QAAUA,EAAa,OAI7B,KAAK,cAAgBA,EACrB,KAAK,cAAgBA,EAAa,MAAK,EACvC,KAAK,cAAc,QAAQ,KAAO,qBAQlC,KAAK,YAAc,KAAK,cAQxB,KAAK,WAAa,KAAK,cAQvB,KAAK,eAAiB,GAOtB,KAAK,OAAS,CAAA,EAQd,KAAK,SAAW,IAAIf,GAAYZ,EAAU,EAC1C,KAAK,SAAS,SAAS,SAAW+B,EAAAA,WAQlC,KAAK,MAAQ,IAAIC,OAElB,CAKA,aAAc,CAEb,MAAMC,EAAM,KAAK,WACjB,KAAK,WAAa,KAAK,YACvB,KAAK,YAAcA,CAEpB,CAOA,QAASC,EAAO,CAEf,KAAK,OAAO,KAAMA,CAAI,EACtBA,EAAK,QAAS,KAAK,OAAS,KAAK,YAAa,KAAK,QAAU,KAAK,WAAW,CAE9E,CAQA,WAAYA,EAAMC,EAAQ,CAEzB,KAAK,OAAO,OAAQA,EAAO,EAAGD,CAAI,EAClCA,EAAK,QAAS,KAAK,OAAS,KAAK,YAAa,KAAK,QAAU,KAAK,WAAW,CAE9E,CAOA,WAAYA,EAAO,CAElB,MAAMC,EAAQ,KAAK,OAAO,QAASD,CAAI,EAElCC,IAAU,IAEd,KAAK,OAAO,OAAQA,EAAO,CAAC,CAI9B,CAQA,kBAAmBC,EAAY,CAE9B,QAAU/D,EAAI+D,EAAY,EAAG/D,EAAI,KAAK,OAAO,OAAQA,IAEpD,GAAK,KAAK,OAAQA,CAAC,EAAG,QAErB,MAAO,GAMT,MAAO,EAER,CAQA,OAAQhC,EAAY,CAIdA,IAAc,SAElBA,EAAY,KAAK,MAAM,SAAQ,GAIhC,MAAMgG,EAAsB,KAAK,SAAS,gBAAe,EAEzD,IAAIC,EAAa,GAEjB,QAAU,EAAI,EAAGC,EAAK,KAAK,OAAO,OAAQ,EAAIA,EAAI,IAAO,CAExD,MAAML,EAAO,KAAK,OAAQ,CAAC,EAE3B,GAAKA,EAAK,UAAY,GAKtB,IAHAA,EAAK,eAAmB,KAAK,gBAAkB,KAAK,kBAAmB,GACvEA,EAAK,OAAQ,KAAK,SAAU,KAAK,YAAa,KAAK,WAAY7F,EAAWiG,CAAU,EAE/EJ,EAAK,UAAY,CAErB,GAAKI,EAAa,CAEjB,MAAMjB,EAAU,KAAK,SAAS,WAAU,EAClCmB,EAAU,KAAK,SAAS,MAAM,QAAQ,QAG5CA,EAAQ,QAASnB,EAAQ,SAAU,EAAG,UAAU,EAEhD,KAAK,SAAS,OAAQ,KAAK,SAAU,KAAK,YAAa,KAAK,WAAYhF,CAAS,EAGjFmG,EAAQ,QAASnB,EAAQ,MAAO,EAAG,UAAU,CAE9C,CAEA,KAAK,YAAW,CAEjB,CAEKF,KAAa,SAEZe,aAAgBf,GAEpBmB,EAAa,GAEFJ,aAAgBT,KAE3Ba,EAAa,KAMhB,CAEA,KAAK,SAAS,gBAAiBD,CAAmB,CAEnD,CAQA,MAAOV,EAAe,CAErB,GAAKA,IAAiB,OAAY,CAEjC,MAAMC,EAAO,KAAK,SAAS,QAAS,IAAIrG,EAAAA,OAAS,EACjD,KAAK,YAAc,KAAK,SAAS,cAAa,EAC9C,KAAK,OAASqG,EAAK,MACnB,KAAK,QAAUA,EAAK,OAEpBD,EAAe,KAAK,cAAc,MAAK,EACvCA,EAAa,QAAS,KAAK,OAAS,KAAK,YAAa,KAAK,QAAU,KAAK,WAAW,CAEtF,CAEA,KAAK,cAAc,QAAO,EAC1B,KAAK,cAAc,QAAO,EAC1B,KAAK,cAAgBA,EACrB,KAAK,cAAgBA,EAAa,MAAK,EAEvC,KAAK,YAAc,KAAK,cACxB,KAAK,WAAa,KAAK,aAExB,CASA,QAAS5H,EAAOC,EAAS,CAExB,KAAK,OAASD,EACd,KAAK,QAAUC,EAEf,MAAMyI,EAAiB,KAAK,OAAS,KAAK,YACpCC,EAAkB,KAAK,QAAU,KAAK,YAE5C,KAAK,cAAc,QAASD,EAAgBC,CAAe,EAC3D,KAAK,cAAc,QAASD,EAAgBC,CAAe,EAE3D,QAAUrE,EAAI,EAAGA,EAAI,KAAK,OAAO,OAAQA,IAExC,KAAK,OAAQA,CAAC,EAAG,QAASoE,EAAgBC,CAAe,CAI3D,CAQA,cAAeC,EAAa,CAE3B,KAAK,YAAcA,EAEnB,KAAK,QAAS,KAAK,OAAQ,KAAK,OAAO,CAExC,CAMA,SAAU,CAET,KAAK,cAAc,QAAO,EAC1B,KAAK,cAAc,QAAO,EAE1B,KAAK,SAAS,QAAO,CAEtB,CAED,CCvVA,MAAMC,WAAmB3C,EAAK,CAY7B,YAAamB,EAAO1H,EAAQmJ,EAAmB,KAAMC,EAAa,KAAMC,EAAa,KAAO,CAE3F,MAAK,EAOL,KAAK,MAAQ3B,EAOb,KAAK,OAAS1H,EASd,KAAK,iBAAmBmJ,EAQxB,KAAK,WAAaC,EAQlB,KAAK,WAAaC,EAQlB,KAAK,MAAQ,GAQb,KAAK,WAAa,GAQlB,KAAK,UAAY,GACjB,KAAK,eAAiB,IAAIC,OAE3B,CAaA,OAAQrC,EAAUM,EAAaC,EAA0C,CAExE,MAAM+B,EAAetC,EAAS,UAC9BA,EAAS,UAAY,GAErB,IAAIuC,EAAeC,EAEd,KAAK,mBAAqB,OAE9BA,EAAsB,KAAK,MAAM,iBAEjC,KAAK,MAAM,iBAAmB,KAAK,kBAI/B,KAAK,aAAe,OAExBxC,EAAS,cAAe,KAAK,cAAc,EAC3CA,EAAS,cAAe,KAAK,WAAYA,EAAS,cAAa,CAAE,GAI7D,KAAK,aAAe,OAExBuC,EAAgBvC,EAAS,cAAa,EACtCA,EAAS,cAAe,KAAK,UAAU,GAInC,KAAK,YAAc,IAEvBA,EAAS,WAAU,EAIpBA,EAAS,gBAAiB,KAAK,eAAiB,KAAOO,CAAU,EAE5D,KAAK,QAAU,IAGnBP,EAAS,MAAOA,EAAS,eAAgBA,EAAS,eAAgBA,EAAS,gBAAgB,EAI5FA,EAAS,OAAQ,KAAK,MAAO,KAAK,MAAM,EAInC,KAAK,aAAe,MAExBA,EAAS,cAAe,KAAK,cAAc,EAIvC,KAAK,aAAe,MAExBA,EAAS,cAAeuC,CAAa,EAIjC,KAAK,mBAAqB,OAE9B,KAAK,MAAM,iBAAmBC,GAI/BxC,EAAS,UAAYsC,CAEtB,CAED,CC7JA,MAAMG,GAAa,CAIlB,QAAS,CACR,mBAAoB,EACpB,QAAS,GACT,mBAAoB,EACpB,gBAAiB,IACjB,oBAAqB,EACrB,0BAA2B,IAC3B,eAAgB,CAClB,EAEC,SAAU,CACT,QAAS,CAAE,MAAO,IAAI,EACtB,OAAQ,CAAE,MAAO,IAAI,EACrB,OAAQ,CAAE,MAAO,IAAI,EACrB,WAAY,CAAE,MAAO,IAAI7H,EAAAA,OAAS,EAClC,WAAY,CAAE,MAAO,IAAI,EACzB,UAAW,CAAE,MAAO,IAAI,EACxB,uBAAwB,CAAE,MAAO,IAAI8H,EAAAA,OAAS,EAC9C,8BAA+B,CAAE,MAAO,IAAIA,EAAAA,OAAS,EACrD,kBAAmB,CAAE,MAAO,IAAIA,EAAAA,OAAS,EACzC,OAAQ,CAAE,MAAO,GAAI,EACrB,iBAAkB,CAAE,MAAO,CAAE,EAC7B,UAAW,CAAE,MAAO,CAAE,EACtB,gBAAiB,CAAE,MAAO,CAAE,EAC5B,MAAO,CAAE,MAAO,CAAE,EAClB,YAAa,CAAE,MAAO,IAAI1I,EAAAA,QAAS,GAAK,GAAK,GAAK,EAClD,YAAa,CAAE,MAAO,IAAIA,EAAAA,QAAS,EAAG,EAAG,EAAG,CAC9C,EAEC,aAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KASxB,eAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAkL3B,EAQM2I,GAAkB,CAIvB,QAAS,CACR,mBAAoB,CACtB,EAEC,SAAU,CACT,OAAQ,CAAE,MAAO,IAAI,EACrB,WAAY,CAAE,MAAO,IAAI,EACzB,UAAW,CAAE,MAAO,IAAI,CAC1B,EAEC,aAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAQxB,eAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAwB3B,EAQMC,GAAkB,CAIvB,SAAU,CACT,SAAU,CAAE,MAAO,IAAI,EACvB,UAAW,CAAE,MAAO,CAAG,CACzB,EAEC,aAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAQxB,eAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAU3B,EAGA,SAASC,GAA0B5B,EAAO,EAAI,CAE7C,MAAM6B,EAAY,KAAK,MAAO7B,CAAI,EAAK,IAAM,EAAI,KAAK,MAAOA,CAAI,EAAK,EAAI,KAAK,MAAOA,CAAI,EACpF8B,EAAcC,GAAqBF,CAAS,EAC5CG,EAAkBF,EAAY,OAC9BG,EAAO,IAAI,WAAYD,EAAkB,CAAC,EAEhD,QAAUE,EAAM,EAAGA,EAAMF,EAAiB,EAAGE,EAAM,CAElD,MAAMC,EAAOL,EAAaI,CAAG,EACvB5G,EAAU,EAAI,KAAK,GAAK6G,EAASH,EACjCI,EAAY,IAAIrJ,EAAAA,QACrB,KAAK,IAAKuC,CAAK,EACf,KAAK,IAAKA,CAAK,EACf,CACH,EAAI,UAAS,EACX2G,EAAMC,EAAM,IAAQE,EAAU,EAAI,GAAM,IAAQ,IAChDH,EAAMC,EAAM,EAAI,CAAC,GAAOE,EAAU,EAAI,GAAM,IAAQ,IACpDH,EAAMC,EAAM,EAAI,CAAC,EAAK,IACtBD,EAAMC,EAAM,EAAI,CAAC,EAAK,GAEvB,CAEA,MAAMG,EAAe,IAAIC,EAAAA,YAAaL,EAAMJ,EAAWA,CAAS,EAChE,OAAAQ,EAAa,MAAQE,EAAAA,eACrBF,EAAa,MAAQE,EAAAA,eACrBF,EAAa,YAAc,GAEpBA,CAER,CAEA,SAASN,GAAqB/B,EAAO,CAEpC,MAAM6B,EAAY,KAAK,MAAO7B,CAAI,EAAK,IAAM,EAAI,KAAK,MAAOA,CAAI,EAAK,EAAI,KAAK,MAAOA,CAAI,EACpFgC,EAAkBH,EAAYA,EAC9BC,EAAc,MAAOE,CAAe,EAAG,KAAM,CAAC,EACpD,IAAI,EAAI,KAAK,MAAOH,EAAY,CAAC,EAC7BW,EAAIX,EAAY,EAEpB,QAAUY,EAAM,EAAGA,GAAOT,GAAmB,CAuB5C,GArBK,IAAM,IAAOQ,IAAMX,GAEvBW,EAAIX,EAAY,EAChB,EAAI,IAICW,IAAMX,IAEVW,EAAI,GAIA,EAAI,IAER,EAAIX,EAAY,IAMbC,EAAa,EAAID,EAAYW,CAAC,IAAO,EAAI,CAE7CA,GAAK,EACL,IACA,QAED,MAECV,EAAa,EAAID,EAAYW,CAAC,EAAKC,IAIpCD,IACA,GAED,CAEA,OAAOV,CAER,CC5YA,MAAMY,GAAuB,CAI5B,QAAS,CACR,QAAW,GACX,eAAkBC,GAAkC,GAAI,EAAG,CAAC,EAC5D,mBAAsB,EACtB,mBAAsB,CACxB,EAEC,SAAU,CACT,SAAY,CAAE,MAAO,IAAI,EACzB,QAAW,CAAE,MAAO,IAAI,EACxB,OAAU,CAAE,MAAO,IAAI,EACvB,OAAU,CAAE,MAAO,IAAI,EACvB,WAAc,CAAE,MAAO,IAAIhJ,EAAAA,OAAS,EACpC,8BAAiC,CAAE,MAAO,IAAI8H,EAAAA,OAAS,EACvD,QAAW,CAAE,MAAO,CAAE,EACtB,SAAY,CAAE,MAAO,CAAE,EACvB,UAAa,CAAE,MAAO,CAAE,EACxB,OAAU,CAAE,MAAO,CAAE,EACrB,MAAS,CAAE,MAAO,CAAC,CACrB,EAEC,aAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KASxB,eAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IA4I3B,EAEA,SAASkB,GAAkCC,EAASC,EAAOC,EAAiB,CAE3E,MAAMC,EAAcC,GACnBJ,EACAC,EACAC,CACF,EAEC,IAAIG,EAAW,iBAEf,QAAUxG,EAAI,EAAGA,EAAImG,EAASnG,IAAO,CAEpC,MAAMyG,EAASH,EAAatG,CAAC,EAC7BwG,GAAY,QAAQC,EAAO,CAAC,KAAKA,EAAO,CAAC,KAAKA,EAAO,CAAC,IAAMzG,EAAImG,EAAU,EAAM,IAAM,GAAG,EAE1F,CAEA,OAAOK,CAER,CAEA,SAASD,GAAwBG,EAAYC,EAAUN,EAAiB,CAEvE,MAAMF,EAAU,CAAA,EAEhB,QAAU,EAAI,EAAG,EAAIO,EAAY,IAAO,CAEvC,MAAM7H,EAAQ,EAAI,KAAK,GAAK8H,EAAW,EAAID,EACrCE,EAAS,KAAK,IAAK,GAAMF,EAAa,GAAKL,CAAc,EAC/DF,EAAQ,KAAM,IAAI7J,EAAAA,QAAS,KAAK,IAAKuC,CAAK,EAAI,KAAK,IAAKA,CAAK,EAAI+H,CAAM,CAAE,CAE1E,CAEA,OAAOT,CAER,CChOA,MAAMU,EAAa,CAQlB,YAAaC,EAAI,KAAO,CAEvB,KAAK,MAAQ,CAAC,CAAE,EAAG,EAAG,CAAC,EAAI,CAAE,GAAK,EAAG,GAAK,CAAE,EAAG,GAAK,CAAC,EAAI,CAAE,GAAK,GAAK,CAAC,EACrE,CAAE,EAAG,EAAG,CAAC,EAAI,CAAE,GAAK,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,EAAI,CAAE,GAAK,EAAG,EAAG,EACxD,CAAE,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,GAAK,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,EAAI,CAAE,EAAG,GAAK,GAAK,EAE3D,KAAK,MAAQ,CAAC,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,EAAG,EAAI,CAAE,EAAG,EAAG,GAAK,GAAK,CAAE,EAAG,EAAG,GAAK,EAAG,EACjF,CAAE,EAAG,GAAK,EAAG,CAAC,EAAI,CAAE,EAAG,GAAK,EAAG,EAAG,EAAI,CAAE,EAAG,GAAK,GAAK,CAAC,EAAI,CAAE,EAAG,GAAK,GAAK,EAAG,EAC5E,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,EAAG,EAAI,CAAE,EAAG,EAAG,GAAK,CAAC,EAAI,CAAE,EAAG,EAAG,GAAK,EAAG,EACpE,CAAE,GAAK,EAAG,EAAG,CAAC,EAAI,CAAE,GAAK,EAAG,EAAG,EAAG,EAAI,CAAE,GAAK,EAAG,GAAK,CAAC,EAAI,CAAE,GAAK,EAAG,GAAK,EAAG,EAC5E,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,EAAG,EAAI,CAAE,EAAG,GAAK,EAAG,CAAC,EAAI,CAAE,EAAG,GAAK,EAAG,EAAG,EACpE,CAAE,GAAK,EAAG,EAAG,CAAC,EAAI,CAAE,GAAK,EAAG,EAAG,EAAG,EAAI,CAAE,GAAK,GAAK,EAAG,CAAC,EAAI,CAAE,GAAK,GAAK,EAAG,EAAG,EAC5E,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,GAAK,CAAC,EAAI,CAAE,EAAG,GAAK,EAAG,CAAC,EAAI,CAAE,EAAG,GAAK,GAAK,CAAC,EACpE,CAAE,GAAK,EAAG,EAAG,CAAC,EAAI,CAAE,GAAK,EAAG,GAAK,CAAC,EAAI,CAAE,GAAK,GAAK,EAAG,CAAC,EAAI,CAAE,GAAK,GAAK,GAAK,EAAG,EAE/E,KAAK,EAAI,CAAA,EAET,QAAU9G,EAAI,EAAGA,EAAI,IAAKA,IAEzB,KAAK,EAAGA,GAAM,KAAK,MAAO8G,EAAE,OAAM,EAAK,GAAG,EAK3C,KAAK,KAAO,CAAA,EAEZ,QAAU9G,EAAI,EAAGA,EAAI,IAAKA,IAEzB,KAAK,KAAMA,CAAC,EAAK,KAAK,EAAGA,EAAI,GAAG,EAMjC,KAAK,QAAU,CACd,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAC,EAC5H,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAC,EAC5H,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAC,EAC5H,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAC,EAC5H,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAC,EAC5H,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAC,EAC5H,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAC,EAAI,CAAE,EAAG,EA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","x_google_ignoreList":[7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,76,79,80,91,92]}
|