@splnlss/3d-story-viewer 0.5.0
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 +104 -0
- package/build/assets/viewer/dot.png +0 -0
- package/build/assets/viewer/geojson.worker-bpUFQjm2.js +1 -0
- package/build/assets/viewer/neutral.hdr +0 -0
- package/build/computeElevation.js +4 -0
- package/build/favicon.png +0 -0
- package/build/index-C7Ow38PB.js +38826 -0
- package/build/types/src/main.d.ts +95 -0
- package/build/types/src/modules/EventDispatcher.d.ts +7 -0
- package/build/types/src/modules/StateDispatcher.d.ts +18 -0
- package/build/types/src/viewer/CesiumInAuth.d.ts +10 -0
- package/build/types/src/viewer/CesiumIonAuthPlugin.d.ts +27 -0
- package/build/types/src/viewer/ContentLayer/GaussianSplatLayer.d.ts +17 -0
- package/build/types/src/viewer/ContentLayer/GeojsonLayer.d.ts +6 -0
- package/build/types/src/viewer/ContentLayer/MeshLayer.d.ts +6 -0
- package/build/types/src/viewer/ContentLayer/TilesLayer.d.ts +12 -0
- package/build/types/src/viewer/ContentLayer/gaussianSplatUtils.d.ts +2 -0
- package/build/types/src/viewer/ContentLayer/index.d.ts +11 -0
- package/build/types/src/viewer/EnvironmentControls.d.ts +82 -0
- package/build/types/src/viewer/GlobeControls.d.ts +30 -0
- package/build/types/src/viewer/GlobeManager.d.ts +15 -0
- package/build/types/src/viewer/RGBEPromise.d.ts +1 -0
- package/build/types/src/viewer/Sky.d.ts +6 -0
- package/build/types/src/viewer/TileManager.d.ts +0 -0
- package/build/types/src/viewer/TransitionControls.d.ts +13 -0
- package/build/types/src/viewer/constants.d.ts +45 -0
- package/build/types/src/viewer/index.d.ts +107 -0
- package/build/types/src/viewer/mods.d.ts +1 -0
- package/build/types/src/viewer/shaders/chunks.d.ts +1 -0
- package/build/types/src/viewer/utils.d.ts +17 -0
- package/build/types/src/workers/WorkerPool.d.ts +16 -0
- package/build/types/src/workers/geojson.worker.d.ts +2 -0
- package/build/types/utils/elevation/gltf.d.ts +15 -0
- package/build/types/utils/elevation/index.d.ts +6 -0
- package/build/types/utils/elevation/test.d.ts +1 -0
- package/build/types/utils/elevation/tiles.d.ts +43 -0
- package/build/viewer.js +27977 -0
- package/package.json +62 -0
package/README.md
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# 3D Story Viewer
|
|
2
|
+
|
|
3
|
+
A browser-based 3D map and story viewer built with Vite, Svelte, Three.js, and `3d-tiles-renderer`.
|
|
4
|
+
|
|
5
|
+
The package exports:
|
|
6
|
+
|
|
7
|
+
- `Viewer`: the main 3D viewer class
|
|
8
|
+
- `ViewerEvents`: viewer lifecycle and transition event names
|
|
9
|
+
- `computeElevation`: helper for fetching elevation data
|
|
10
|
+
|
|
11
|
+
## Requirements
|
|
12
|
+
|
|
13
|
+
- Node.js
|
|
14
|
+
- Yarn
|
|
15
|
+
- A browser with WebGL support
|
|
16
|
+
|
|
17
|
+
## Install
|
|
18
|
+
|
|
19
|
+
```sh
|
|
20
|
+
yarn install
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Run Locally
|
|
24
|
+
|
|
25
|
+
```sh
|
|
26
|
+
yarn dev
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
The dev server is configured by Vite to serve the app from `src/` over HTTPS. Open the local URL printed by Vite.
|
|
30
|
+
|
|
31
|
+
## Build
|
|
32
|
+
|
|
33
|
+
```sh
|
|
34
|
+
yarn build
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Build output is written to `build/`. The package entry points are configured in `package.json`:
|
|
38
|
+
|
|
39
|
+
- `@splnlss/3d-story-viewer` -> `build/viewer.js`
|
|
40
|
+
- `@splnlss/3d-story-viewer/computeElevation` -> `build/computeElevation.js`
|
|
41
|
+
|
|
42
|
+
## Preview Build
|
|
43
|
+
|
|
44
|
+
```sh
|
|
45
|
+
yarn preview
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Basic Usage
|
|
49
|
+
|
|
50
|
+
```js
|
|
51
|
+
import { Viewer } from '@splnlss/3d-story-viewer';
|
|
52
|
+
|
|
53
|
+
const container = document.getElementById('app');
|
|
54
|
+
const viewer = new Viewer(container, {
|
|
55
|
+
cesiumToken: 'your-cesium-token',
|
|
56
|
+
googleMapsToken: 'your-google-maps-token',
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
viewer.loadEnv('/assets/viewer/neutral.hdr');
|
|
60
|
+
viewer.defineContentLayers([
|
|
61
|
+
{
|
|
62
|
+
id: 'example-layer',
|
|
63
|
+
name: 'Example Layer',
|
|
64
|
+
type: '3d-tiles',
|
|
65
|
+
labels: ['default'],
|
|
66
|
+
data: {
|
|
67
|
+
url: 'https://example.com/tileset.json',
|
|
68
|
+
},
|
|
69
|
+
options: {
|
|
70
|
+
renderOrder: 1,
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
]);
|
|
74
|
+
viewer.enableContentLayers(['default']);
|
|
75
|
+
viewer.alignCamera(-105.18896, 39.93, 9000);
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Environment Variables
|
|
79
|
+
|
|
80
|
+
Viewer tokens can be passed directly in the constructor or provided through Vite environment variables:
|
|
81
|
+
|
|
82
|
+
```sh
|
|
83
|
+
VITE_CESIUM_TOKEN=...
|
|
84
|
+
VITE_GOOGLE_MAPS_TOKEN=...
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Demo App
|
|
88
|
+
|
|
89
|
+
`src/index.html` contains a simple demo that:
|
|
90
|
+
|
|
91
|
+
- creates a `Viewer`
|
|
92
|
+
- loads `public/assets/viewer/neutral.hdr`
|
|
93
|
+
- defines layers from `utils/mapLayers.js`
|
|
94
|
+
- enables the `default` layer group
|
|
95
|
+
- registers number-pad shortcuts for sample camera positions and time frames
|
|
96
|
+
|
|
97
|
+
## Useful Files
|
|
98
|
+
|
|
99
|
+
- `src/main.js`: public module exports
|
|
100
|
+
- `src/viewer/index.js`: main viewer implementation
|
|
101
|
+
- `src/viewer/ContentLayer/`: supported content layer types
|
|
102
|
+
- `utils/mapLayers.js`: example layer definitions
|
|
103
|
+
- `utils/elevation/`: elevation utilities
|
|
104
|
+
- `public/assets/viewer/`: static viewer assets
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
!function(){"use strict";const t=2e3,s={};function e(...t){t=function(t){const s=t[0];if("string"==typeof s&&s.startsWith("TSL:")){const s=t[1];s&&s.isStackTrace?t[0]+=" "+s.getLocation():t[1]='Stack trace not available. Enable "THREE.Node.captureStackTrace" to capture stack traces.'}return t}(t);t.shift();{const s=t[0];s&&s.isStackTrace}}function i(...t){const i=t.join(" ");i in s||(s[i]=!0,e(...t))}const r=["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"];let h=1234567;const n=Math.PI/180,a=180/Math.PI;function o(t,s,e){return Math.max(s,Math.min(e,t))}function u(t,s){return(t%s+s)%s}function l(t,s,e){return(1-e)*t+e*s}const c={DEG2RAD:n,RAD2DEG:a,generateUUID:function(){const t=4294967295*Math.random()|0,s=4294967295*Math.random()|0,e=4294967295*Math.random()|0,i=4294967295*Math.random()|0;return(r[255&t]+r[t>>8&255]+r[t>>16&255]+r[t>>24&255]+"-"+r[255&s]+r[s>>8&255]+"-"+r[s>>16&15|64]+r[s>>24&255]+"-"+r[63&e|128]+r[e>>8&255]+"-"+r[e>>16&255]+r[e>>24&255]+r[255&i]+r[i>>8&255]+r[i>>16&255]+r[i>>24&255]).toLowerCase()},clamp:o,euclideanModulo:u,mapLinear:function(t,s,e,i,r){return i+(t-s)*(r-i)/(e-s)},inverseLerp:function(t,s,e){return t!==s?(e-t)/(s-t):0},lerp:l,damp:function(t,s,e,i){return l(t,s,1-Math.exp(-e*i))},pingpong:function(t,s=1){return s-Math.abs(u(t,2*s)-s)},smoothstep:function(t,s,e){return t<=s?0:t>=e?1:(t=(t-s)/(e-s))*t*(3-2*t)},smootherstep:function(t,s,e){return t<=s?0:t>=e?1:(t=(t-s)/(e-s))*t*t*(t*(6*t-15)+10)},randInt:function(t,s){return t+Math.floor(Math.random()*(s-t+1))},randFloat:function(t,s){return t+Math.random()*(s-t)},randFloatSpread:function(t){return t*(.5-Math.random())},seededRandom:function(t){void 0!==t&&(h=t);let s=h+=1831565813;return s=Math.imul(s^s>>>15,1|s),s^=s+Math.imul(s^s>>>7,61|s),((s^s>>>14)>>>0)/4294967296},degToRad:function(t){return t*n},radToDeg:function(t){return t*a},isPowerOfTwo:function(t){return!(t&t-1)&&0!==t},ceilPowerOfTwo:function(t){return Math.pow(2,Math.ceil(Math.log(t)/Math.LN2))},floorPowerOfTwo:function(t){return Math.pow(2,Math.floor(Math.log(t)/Math.LN2))},setQuaternionFromProperEuler:function(t,s,i,r,h){const n=Math.cos,a=Math.sin,o=n(i/2),u=a(i/2),l=n((s+r)/2),c=a((s+r)/2),x=n((s-r)/2),y=a((s-r)/2),m=n((r-s)/2),d=a((r-s)/2);switch(h){case"XYX":t.set(o*c,u*x,u*y,o*l);break;case"YZY":t.set(u*y,o*c,u*x,o*l);break;case"ZXZ":t.set(u*x,u*y,o*c,o*l);break;case"XZX":t.set(o*c,u*d,u*m,o*l);break;case"YXY":t.set(u*m,o*c,u*d,o*l);break;case"ZYZ":t.set(u*d,u*m,o*c,o*l);break;default:e("MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+h)}},normalize:function(t,s){switch(s.constructor){case Float32Array:return t;case Uint32Array:return Math.round(4294967295*t);case Uint16Array:return Math.round(65535*t);case Uint8Array:return Math.round(255*t);case Int32Array:return Math.round(2147483647*t);case Int16Array:return Math.round(32767*t);case Int8Array:return Math.round(127*t);default:throw new Error("THREE.MathUtils: Invalid component type.")}},denormalize:function(t,s){switch(s.constructor){case Float32Array:return t;case Uint32Array:return t/4294967295;case Uint16Array:return t/65535;case Uint8Array:return t/255;case Int32Array:return Math.max(t/2147483647,-1);case Int16Array:return Math.max(t/32767,-1);case Int8Array:return Math.max(t/127,-1);default:throw new Error("THREE.MathUtils: Invalid component type.")}}},x=class{constructor(t=0,s=0){this.x=t,this.y=s}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,s){return this.x=t,this.y=s,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(t,s){switch(t){case 0:this.x=s;break;case 1:this.y=s;break;default:throw new Error("THREE.Vector2: index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("THREE.Vector2: index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t){return this.x+=t.x,this.y+=t.y,this}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,s){return this.x=t.x+s.x,this.y=t.y+s.y,this}addScaledVector(t,s){return this.x+=t.x*s,this.y+=t.y*s,this}sub(t){return this.x-=t.x,this.y-=t.y,this}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,s){return this.x=t.x-s.x,this.y=t.y-s.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){const s=this.x,e=this.y,i=t.elements;return this.x=i[0]*s+i[3]*e+i[6],this.y=i[1]*s+i[4]*e+i[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,s){return this.x=o(this.x,t.x,s.x),this.y=o(this.y,t.y,s.y),this}clampScalar(t,s){return this.x=o(this.x,t,s),this.y=o(this.y,t,s),this}clampLength(t,s){const e=this.length();return this.divideScalar(e||1).multiplyScalar(o(e,t,s))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(t){const s=Math.sqrt(this.lengthSq()*t.lengthSq());if(0===s)return Math.PI/2;const e=this.dot(t)/s;return Math.acos(o(e,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const s=this.x-t.x,e=this.y-t.y;return s*s+e*e}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,s){return this.x+=(t.x-this.x)*s,this.y+=(t.y-this.y)*s,this}lerpVectors(t,s,e){return this.x=t.x+(s.x-t.x)*e,this.y=t.y+(s.y-t.y)*e,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,s=0){return this.x=t[s],this.y=t[s+1],this}toArray(t=[],s=0){return t[s]=this.x,t[s+1]=this.y,t}fromBufferAttribute(t,s){return this.x=t.getX(s),this.y=t.getY(s),this}rotateAround(t,s){const e=Math.cos(s),i=Math.sin(s),r=this.x-t.x,h=this.y-t.y;return this.x=r*e-h*i+t.x,this.y=r*i+h*e+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}};x.prototype.isVector2=!0;class y{constructor(t=0,s=0,e=0,i=1){this.isQuaternion=!0,this._x=t,this._y=s,this._z=e,this._w=i}static slerpFlat(t,s,e,i,r,h,n){let a=e[i+0],o=e[i+1],u=e[i+2],l=e[i+3],c=r[h+0],x=r[h+1],y=r[h+2],m=r[h+3];if(l!==m||a!==c||o!==x||u!==y){let t=a*c+o*x+u*y+l*m;t<0&&(c=-c,x=-x,y=-y,m=-m,t=-t);let s=1-n;if(t<.9995){const e=Math.acos(t),i=Math.sin(e);s=Math.sin(s*e)/i,a=a*s+c*(n=Math.sin(n*e)/i),o=o*s+x*n,u=u*s+y*n,l=l*s+m*n}else{a=a*s+c*n,o=o*s+x*n,u=u*s+y*n,l=l*s+m*n;const t=1/Math.sqrt(a*a+o*o+u*u+l*l);a*=t,o*=t,u*=t,l*=t}}t[s]=a,t[s+1]=o,t[s+2]=u,t[s+3]=l}static multiplyQuaternionsFlat(t,s,e,i,r,h){const n=e[i],a=e[i+1],o=e[i+2],u=e[i+3],l=r[h],c=r[h+1],x=r[h+2],y=r[h+3];return t[s]=n*y+u*l+a*x-o*c,t[s+1]=a*y+u*c+o*l-n*x,t[s+2]=o*y+u*x+n*c-a*l,t[s+3]=u*y-n*l-a*c-o*x,t}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,s,e,i){return this._x=t,this._y=s,this._z=e,this._w=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,s=!0){const i=t._x,r=t._y,h=t._z,n=t._order,a=Math.cos,o=Math.sin,u=a(i/2),l=a(r/2),c=a(h/2),x=o(i/2),y=o(r/2),m=o(h/2);switch(n){case"XYZ":this._x=x*l*c+u*y*m,this._y=u*y*c-x*l*m,this._z=u*l*m+x*y*c,this._w=u*l*c-x*y*m;break;case"YXZ":this._x=x*l*c+u*y*m,this._y=u*y*c-x*l*m,this._z=u*l*m-x*y*c,this._w=u*l*c+x*y*m;break;case"ZXY":this._x=x*l*c-u*y*m,this._y=u*y*c+x*l*m,this._z=u*l*m+x*y*c,this._w=u*l*c-x*y*m;break;case"ZYX":this._x=x*l*c-u*y*m,this._y=u*y*c+x*l*m,this._z=u*l*m-x*y*c,this._w=u*l*c+x*y*m;break;case"YZX":this._x=x*l*c+u*y*m,this._y=u*y*c+x*l*m,this._z=u*l*m-x*y*c,this._w=u*l*c-x*y*m;break;case"XZY":this._x=x*l*c-u*y*m,this._y=u*y*c-x*l*m,this._z=u*l*m+x*y*c,this._w=u*l*c+x*y*m;break;default:e("Quaternion: .setFromEuler() encountered an unknown order: "+n)}return!0===s&&this._onChangeCallback(),this}setFromAxisAngle(t,s){const e=s/2,i=Math.sin(e);return this._x=t.x*i,this._y=t.y*i,this._z=t.z*i,this._w=Math.cos(e),this._onChangeCallback(),this}setFromRotationMatrix(t){const s=t.elements,e=s[0],i=s[4],r=s[8],h=s[1],n=s[5],a=s[9],o=s[2],u=s[6],l=s[10],c=e+n+l;if(c>0){const t=.5/Math.sqrt(c+1);this._w=.25/t,this._x=(u-a)*t,this._y=(r-o)*t,this._z=(h-i)*t}else if(e>n&&e>l){const t=2*Math.sqrt(1+e-n-l);this._w=(u-a)/t,this._x=.25*t,this._y=(i+h)/t,this._z=(r+o)/t}else if(n>l){const t=2*Math.sqrt(1+n-e-l);this._w=(r-o)/t,this._x=(i+h)/t,this._y=.25*t,this._z=(a+u)/t}else{const t=2*Math.sqrt(1+l-e-n);this._w=(h-i)/t,this._x=(r+o)/t,this._y=(a+u)/t,this._z=.25*t}return this._onChangeCallback(),this}setFromUnitVectors(t,s){let e=t.dot(s)+1;return e<1e-8?(e=0,Math.abs(t.x)>Math.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=e):(this._x=0,this._y=-t.z,this._z=t.y,this._w=e)):(this._x=t.y*s.z-t.z*s.y,this._y=t.z*s.x-t.x*s.z,this._z=t.x*s.y-t.y*s.x,this._w=e),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(o(this.dot(t),-1,1)))}rotateTowards(t,s){const e=this.angleTo(t);if(0===e)return this;const i=Math.min(1,s/e);return this.slerp(t,i),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let t=this.length();return 0===t?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this}multiply(t){return this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,s){const e=t._x,i=t._y,r=t._z,h=t._w,n=s._x,a=s._y,o=s._z,u=s._w;return this._x=e*u+h*n+i*o-r*a,this._y=i*u+h*a+r*n-e*o,this._z=r*u+h*o+e*a-i*n,this._w=h*u-e*n-i*a-r*o,this._onChangeCallback(),this}slerp(t,s){let e=t._x,i=t._y,r=t._z,h=t._w,n=this.dot(t);n<0&&(e=-e,i=-i,r=-r,h=-h,n=-n);let a=1-s;if(n<.9995){const t=Math.acos(n),o=Math.sin(t);a=Math.sin(a*t)/o,s=Math.sin(s*t)/o,this._x=this._x*a+e*s,this._y=this._y*a+i*s,this._z=this._z*a+r*s,this._w=this._w*a+h*s,this._onChangeCallback()}else this._x=this._x*a+e*s,this._y=this._y*a+i*s,this._z=this._z*a+r*s,this._w=this._w*a+h*s,this.normalize();return this}slerpQuaternions(t,s,e){return this.copy(t).slerp(s,e)}random(){const t=2*Math.PI*Math.random(),s=2*Math.PI*Math.random(),e=Math.random(),i=Math.sqrt(1-e),r=Math.sqrt(e);return this.set(i*Math.sin(t),i*Math.cos(t),r*Math.sin(s),r*Math.cos(s))}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,s=0){return this._x=t[s],this._y=t[s+1],this._z=t[s+2],this._w=t[s+3],this._onChangeCallback(),this}toArray(t=[],s=0){return t[s]=this._x,t[s+1]=this._y,t[s+2]=this._z,t[s+3]=this._w,t}fromBufferAttribute(t,s){return this._x=t.getX(s),this._y=t.getY(s),this._z=t.getZ(s),this._w=t.getW(s),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}const m=class{constructor(t=0,s=0,e=0){this.x=t,this.y=s,this.z=e}set(t,s,e){return void 0===e&&(e=this.z),this.x=t,this.y=s,this.z=e,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(t,s){switch(t){case 0:this.x=s;break;case 1:this.y=s;break;case 2:this.z=s;break;default:throw new Error("THREE.Vector3: index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("THREE.Vector3: index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,s){return this.x=t.x+s.x,this.y=t.y+s.y,this.z=t.z+s.z,this}addScaledVector(t,s){return this.x+=t.x*s,this.y+=t.y*s,this.z+=t.z*s,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,s){return this.x=t.x-s.x,this.y=t.y-s.y,this.z=t.z-s.z,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,s){return this.x=t.x*s.x,this.y=t.y*s.y,this.z=t.z*s.z,this}applyEuler(t){return this.applyQuaternion(z.setFromEuler(t))}applyAxisAngle(t,s){return this.applyQuaternion(z.setFromAxisAngle(t,s))}applyMatrix3(t){const s=this.x,e=this.y,i=this.z,r=t.elements;return this.x=r[0]*s+r[3]*e+r[6]*i,this.y=r[1]*s+r[4]*e+r[7]*i,this.z=r[2]*s+r[5]*e+r[8]*i,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const s=this.x,e=this.y,i=this.z,r=t.elements,h=1/(r[3]*s+r[7]*e+r[11]*i+r[15]);return this.x=(r[0]*s+r[4]*e+r[8]*i+r[12])*h,this.y=(r[1]*s+r[5]*e+r[9]*i+r[13])*h,this.z=(r[2]*s+r[6]*e+r[10]*i+r[14])*h,this}applyQuaternion(t){const s=this.x,e=this.y,i=this.z,r=t.x,h=t.y,n=t.z,a=t.w,o=2*(h*i-n*e),u=2*(n*s-r*i),l=2*(r*e-h*s);return this.x=s+a*o+h*l-n*u,this.y=e+a*u+n*o-r*l,this.z=i+a*l+r*u-h*o,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){const s=this.x,e=this.y,i=this.z,r=t.elements;return this.x=r[0]*s+r[4]*e+r[8]*i,this.y=r[1]*s+r[5]*e+r[9]*i,this.z=r[2]*s+r[6]*e+r[10]*i,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,s){return this.x=o(this.x,t.x,s.x),this.y=o(this.y,t.y,s.y),this.z=o(this.z,t.z,s.z),this}clampScalar(t,s){return this.x=o(this.x,t,s),this.y=o(this.y,t,s),this.z=o(this.z,t,s),this}clampLength(t,s){const e=this.length();return this.divideScalar(e||1).multiplyScalar(o(e,t,s))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,s){return this.x+=(t.x-this.x)*s,this.y+=(t.y-this.y)*s,this.z+=(t.z-this.z)*s,this}lerpVectors(t,s,e){return this.x=t.x+(s.x-t.x)*e,this.y=t.y+(s.y-t.y)*e,this.z=t.z+(s.z-t.z)*e,this}cross(t){return this.crossVectors(this,t)}crossVectors(t,s){const e=t.x,i=t.y,r=t.z,h=s.x,n=s.y,a=s.z;return this.x=i*a-r*n,this.y=r*h-e*a,this.z=e*n-i*h,this}projectOnVector(t){const s=t.lengthSq();if(0===s)return this.set(0,0,0);const e=t.dot(this)/s;return this.copy(t).multiplyScalar(e)}projectOnPlane(t){return M.copy(this).projectOnVector(t),this.sub(M)}reflect(t){return this.sub(M.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const s=Math.sqrt(this.lengthSq()*t.lengthSq());if(0===s)return Math.PI/2;const e=this.dot(t)/s;return Math.acos(o(e,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const s=this.x-t.x,e=this.y-t.y,i=this.z-t.z;return s*s+e*e+i*i}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,s,e){const i=Math.sin(s)*t;return this.x=i*Math.sin(e),this.y=Math.cos(s)*t,this.z=i*Math.cos(e),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,s,e){return this.x=t*Math.sin(s),this.y=e,this.z=t*Math.cos(s),this}setFromMatrixPosition(t){const s=t.elements;return this.x=s[12],this.y=s[13],this.z=s[14],this}setFromMatrixScale(t){const s=this.setFromMatrixColumn(t,0).length(),e=this.setFromMatrixColumn(t,1).length(),i=this.setFromMatrixColumn(t,2).length();return this.x=s,this.y=e,this.z=i,this}setFromMatrixColumn(t,s){return this.fromArray(t.elements,4*s)}setFromMatrix3Column(t,s){return this.fromArray(t.elements,3*s)}setFromEuler(t){return this.x=t._x,this.y=t._y,this.z=t._z,this}setFromColor(t){return this.x=t.r,this.y=t.g,this.z=t.b,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,s=0){return this.x=t[s],this.y=t[s+1],this.z=t[s+2],this}toArray(t=[],s=0){return t[s]=this.x,t[s+1]=this.y,t[s+2]=this.z,t}fromBufferAttribute(t,s){return this.x=t.getX(s),this.y=t.getY(s),this.z=t.getZ(s),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const t=Math.random()*Math.PI*2,s=2*Math.random()-1,e=Math.sqrt(1-s*s);return this.x=e*Math.cos(t),this.y=s,this.z=e*Math.sin(t),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}};m.prototype.isVector3=!0;let d=m;const M=new d,z=new y,f=class{constructor(t,s,e,i,r,h,n,a,o){this.elements=[1,0,0,0,1,0,0,0,1],void 0!==t&&this.set(t,s,e,i,r,h,n,a,o)}set(t,s,e,i,r,h,n,a,o){const u=this.elements;return u[0]=t,u[1]=i,u[2]=n,u[3]=s,u[4]=r,u[5]=a,u[6]=e,u[7]=h,u[8]=o,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(t){const s=this.elements,e=t.elements;return s[0]=e[0],s[1]=e[1],s[2]=e[2],s[3]=e[3],s[4]=e[4],s[5]=e[5],s[6]=e[6],s[7]=e[7],s[8]=e[8],this}extractBasis(t,s,e){return t.setFromMatrix3Column(this,0),s.setFromMatrix3Column(this,1),e.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const s=t.elements;return this.set(s[0],s[4],s[8],s[1],s[5],s[9],s[2],s[6],s[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,s){const e=t.elements,i=s.elements,r=this.elements,h=e[0],n=e[3],a=e[6],o=e[1],u=e[4],l=e[7],c=e[2],x=e[5],y=e[8],m=i[0],d=i[3],M=i[6],z=i[1],f=i[4],p=i[7],w=i[2],_=i[5],g=i[8];return r[0]=h*m+n*z+a*w,r[3]=h*d+n*f+a*_,r[6]=h*M+n*p+a*g,r[1]=o*m+u*z+l*w,r[4]=o*d+u*f+l*_,r[7]=o*M+u*p+l*g,r[2]=c*m+x*z+y*w,r[5]=c*d+x*f+y*_,r[8]=c*M+x*p+y*g,this}multiplyScalar(t){const s=this.elements;return s[0]*=t,s[3]*=t,s[6]*=t,s[1]*=t,s[4]*=t,s[7]*=t,s[2]*=t,s[5]*=t,s[8]*=t,this}determinant(){const t=this.elements,s=t[0],e=t[1],i=t[2],r=t[3],h=t[4],n=t[5],a=t[6],o=t[7],u=t[8];return s*h*u-s*n*o-e*r*u+e*n*a+i*r*o-i*h*a}invert(){const t=this.elements,s=t[0],e=t[1],i=t[2],r=t[3],h=t[4],n=t[5],a=t[6],o=t[7],u=t[8],l=u*h-n*o,c=n*a-u*r,x=o*r-h*a,y=s*l+e*c+i*x;if(0===y)return this.set(0,0,0,0,0,0,0,0,0);const m=1/y;return t[0]=l*m,t[1]=(i*o-u*e)*m,t[2]=(n*e-i*h)*m,t[3]=c*m,t[4]=(u*s-i*a)*m,t[5]=(i*r-n*s)*m,t[6]=x*m,t[7]=(e*a-o*s)*m,t[8]=(h*s-e*r)*m,this}transpose(){let t;const s=this.elements;return t=s[1],s[1]=s[3],s[3]=t,t=s[2],s[2]=s[6],s[6]=t,t=s[5],s[5]=s[7],s[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).invert().transpose()}transposeIntoArray(t){const s=this.elements;return t[0]=s[0],t[1]=s[3],t[2]=s[6],t[3]=s[1],t[4]=s[4],t[5]=s[7],t[6]=s[2],t[7]=s[5],t[8]=s[8],this}setUvTransform(t,s,e,i,r,h,n){const a=Math.cos(r),o=Math.sin(r);return this.set(e*a,e*o,-e*(a*h+o*n)+h+t,-i*o,i*a,-i*(-o*h+a*n)+n+s,0,0,1),this}scale(t,s){return i("Matrix3: .scale() is deprecated. Use .makeScale() instead."),this.premultiply(w.makeScale(t,s)),this}rotate(t){return i("Matrix3: .rotate() is deprecated. Use .makeRotation() instead."),this.premultiply(w.makeRotation(-t)),this}translate(t,s){return i("Matrix3: .translate() is deprecated. Use .makeTranslation() instead."),this.premultiply(w.makeTranslation(t,s)),this}makeTranslation(t,s){return t.isVector2?this.set(1,0,t.x,0,1,t.y,0,0,1):this.set(1,0,t,0,1,s,0,0,1),this}makeRotation(t){const s=Math.cos(t),e=Math.sin(t);return this.set(s,-e,0,e,s,0,0,0,1),this}makeScale(t,s){return this.set(t,0,0,0,s,0,0,0,1),this}equals(t){const s=this.elements,e=t.elements;for(let i=0;i<9;i++)if(s[i]!==e[i])return!1;return!0}fromArray(t,s=0){for(let e=0;e<9;e++)this.elements[e]=t[e+s];return this}toArray(t=[],s=0){const e=this.elements;return t[s]=e[0],t[s+1]=e[1],t[s+2]=e[2],t[s+3]=e[3],t[s+4]=e[4],t[s+5]=e[5],t[s+6]=e[6],t[s+7]=e[7],t[s+8]=e[8],t}clone(){return(new this.constructor).fromArray(this.elements)}};f.prototype.isMatrix3=!0;let p=f;const w=new p,_=class{constructor(t=0,s=0,e=0,i=1){this.x=t,this.y=s,this.z=e,this.w=i}get width(){return this.z}set width(t){this.z=t}get height(){return this.w}set height(t){this.w=t}set(t,s,e,i){return this.x=t,this.y=s,this.z=e,this.w=i,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(t,s){switch(t){case 0:this.x=s;break;case 1:this.y=s;break;case 2:this.z=s;break;case 3:this.w=s;break;default:throw new Error("THREE.Vector4: index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("THREE.Vector4: index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=void 0!==t.w?t.w:1,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(t,s){return this.x=t.x+s.x,this.y=t.y+s.y,this.z=t.z+s.z,this.w=t.w+s.w,this}addScaledVector(t,s){return this.x+=t.x*s,this.y+=t.y*s,this.z+=t.z*s,this.w+=t.w*s,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(t,s){return this.x=t.x-s.x,this.y=t.y-s.y,this.z=t.z-s.z,this.w=t.w-s.w,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){const s=this.x,e=this.y,i=this.z,r=this.w,h=t.elements;return this.x=h[0]*s+h[4]*e+h[8]*i+h[12]*r,this.y=h[1]*s+h[5]*e+h[9]*i+h[13]*r,this.z=h[2]*s+h[6]*e+h[10]*i+h[14]*r,this.w=h[3]*s+h[7]*e+h[11]*i+h[15]*r,this}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this.w/=t.w,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);const s=Math.sqrt(1-t.w*t.w);return s<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/s,this.y=t.y/s,this.z=t.z/s),this}setAxisAngleFromRotationMatrix(t){let s,e,i,r;const h=.01,n=.1,a=t.elements,o=a[0],u=a[4],l=a[8],c=a[1],x=a[5],y=a[9],m=a[2],d=a[6],M=a[10];if(Math.abs(u-c)<h&&Math.abs(l-m)<h&&Math.abs(y-d)<h){if(Math.abs(u+c)<n&&Math.abs(l+m)<n&&Math.abs(y+d)<n&&Math.abs(o+x+M-3)<n)return this.set(1,0,0,0),this;s=Math.PI;const t=(o+1)/2,a=(x+1)/2,z=(M+1)/2,f=(u+c)/4,p=(l+m)/4,w=(y+d)/4;return t>a&&t>z?t<h?(e=0,i=.707106781,r=.707106781):(e=Math.sqrt(t),i=f/e,r=p/e):a>z?a<h?(e=.707106781,i=0,r=.707106781):(i=Math.sqrt(a),e=f/i,r=w/i):z<h?(e=.707106781,i=.707106781,r=0):(r=Math.sqrt(z),e=p/r,i=w/r),this.set(e,i,r,s),this}let z=Math.sqrt((d-y)*(d-y)+(l-m)*(l-m)+(c-u)*(c-u));return Math.abs(z)<.001&&(z=1),this.x=(d-y)/z,this.y=(l-m)/z,this.z=(c-u)/z,this.w=Math.acos((o+x+M-1)/2),this}setFromMatrixPosition(t){const s=t.elements;return this.x=s[12],this.y=s[13],this.z=s[14],this.w=s[15],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this.w=Math.min(this.w,t.w),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this.w=Math.max(this.w,t.w),this}clamp(t,s){return this.x=o(this.x,t.x,s.x),this.y=o(this.y,t.y,s.y),this.z=o(this.z,t.z,s.z),this.w=o(this.w,t.w,s.w),this}clampScalar(t,s){return this.x=o(this.x,t,s),this.y=o(this.y,t,s),this.z=o(this.z,t,s),this.w=o(this.w,t,s),this}clampLength(t,s){const e=this.length();return this.divideScalar(e||1).multiplyScalar(o(e,t,s))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this.w=Math.trunc(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z+this.w*t.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,s){return this.x+=(t.x-this.x)*s,this.y+=(t.y-this.y)*s,this.z+=(t.z-this.z)*s,this.w+=(t.w-this.w)*s,this}lerpVectors(t,s,e){return this.x=t.x+(s.x-t.x)*e,this.y=t.y+(s.y-t.y)*e,this.z=t.z+(s.z-t.z)*e,this.w=t.w+(s.w-t.w)*e,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z&&t.w===this.w}fromArray(t,s=0){return this.x=t[s],this.y=t[s+1],this.z=t[s+2],this.w=t[s+3],this}toArray(t=[],s=0){return t[s]=this.x,t[s+1]=this.y,t[s+2]=this.z,t[s+3]=this.w,t}fromBufferAttribute(t,s){return this.x=t.getX(s),this.y=t.getY(s),this.z=t.getZ(s),this.w=t.getW(s),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}};_.prototype.isVector4=!0;const g=class s{constructor(t,s,e,i,r,h,n,a,o,u,l,c,x,y,m,d){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],void 0!==t&&this.set(t,s,e,i,r,h,n,a,o,u,l,c,x,y,m,d)}set(t,s,e,i,r,h,n,a,o,u,l,c,x,y,m,d){const M=this.elements;return M[0]=t,M[4]=s,M[8]=e,M[12]=i,M[1]=r,M[5]=h,M[9]=n,M[13]=a,M[2]=o,M[6]=u,M[10]=l,M[14]=c,M[3]=x,M[7]=y,M[11]=m,M[15]=d,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return(new s).fromArray(this.elements)}copy(t){const s=this.elements,e=t.elements;return s[0]=e[0],s[1]=e[1],s[2]=e[2],s[3]=e[3],s[4]=e[4],s[5]=e[5],s[6]=e[6],s[7]=e[7],s[8]=e[8],s[9]=e[9],s[10]=e[10],s[11]=e[11],s[12]=e[12],s[13]=e[13],s[14]=e[14],s[15]=e[15],this}copyPosition(t){const s=this.elements,e=t.elements;return s[12]=e[12],s[13]=e[13],s[14]=e[14],this}setFromMatrix3(t){const s=t.elements;return this.set(s[0],s[3],s[6],0,s[1],s[4],s[7],0,s[2],s[5],s[8],0,0,0,0,1),this}extractBasis(t,s,e){return 0===this.determinantAffine()?(t.set(1,0,0),s.set(0,1,0),e.set(0,0,1),this):(t.setFromMatrixColumn(this,0),s.setFromMatrixColumn(this,1),e.setFromMatrixColumn(this,2),this)}makeBasis(t,s,e){return this.set(t.x,s.x,e.x,0,t.y,s.y,e.y,0,t.z,s.z,e.z,0,0,0,0,1),this}extractRotation(t){if(0===t.determinantAffine())return this.identity();const s=this.elements,e=t.elements,i=1/v.setFromMatrixColumn(t,0).length(),r=1/v.setFromMatrixColumn(t,1).length(),h=1/v.setFromMatrixColumn(t,2).length();return s[0]=e[0]*i,s[1]=e[1]*i,s[2]=e[2]*i,s[3]=0,s[4]=e[4]*r,s[5]=e[5]*r,s[6]=e[6]*r,s[7]=0,s[8]=e[8]*h,s[9]=e[9]*h,s[10]=e[10]*h,s[11]=0,s[12]=0,s[13]=0,s[14]=0,s[15]=1,this}makeRotationFromEuler(t){const s=this.elements,e=t.x,i=t.y,r=t.z,h=Math.cos(e),n=Math.sin(e),a=Math.cos(i),o=Math.sin(i),u=Math.cos(r),l=Math.sin(r);if("XYZ"===t.order){const t=h*u,e=h*l,i=n*u,r=n*l;s[0]=a*u,s[4]=-a*l,s[8]=o,s[1]=e+i*o,s[5]=t-r*o,s[9]=-n*a,s[2]=r-t*o,s[6]=i+e*o,s[10]=h*a}else if("YXZ"===t.order){const t=a*u,e=a*l,i=o*u,r=o*l;s[0]=t+r*n,s[4]=i*n-e,s[8]=h*o,s[1]=h*l,s[5]=h*u,s[9]=-n,s[2]=e*n-i,s[6]=r+t*n,s[10]=h*a}else if("ZXY"===t.order){const t=a*u,e=a*l,i=o*u,r=o*l;s[0]=t-r*n,s[4]=-h*l,s[8]=i+e*n,s[1]=e+i*n,s[5]=h*u,s[9]=r-t*n,s[2]=-h*o,s[6]=n,s[10]=h*a}else if("ZYX"===t.order){const t=h*u,e=h*l,i=n*u,r=n*l;s[0]=a*u,s[4]=i*o-e,s[8]=t*o+r,s[1]=a*l,s[5]=r*o+t,s[9]=e*o-i,s[2]=-o,s[6]=n*a,s[10]=h*a}else if("YZX"===t.order){const t=h*a,e=h*o,i=n*a,r=n*o;s[0]=a*u,s[4]=r-t*l,s[8]=i*l+e,s[1]=l,s[5]=h*u,s[9]=-n*u,s[2]=-o*u,s[6]=e*l+i,s[10]=t-r*l}else if("XZY"===t.order){const t=h*a,e=h*o,i=n*a,r=n*o;s[0]=a*u,s[4]=-l,s[8]=o*u,s[1]=t*l+r,s[5]=h*u,s[9]=e*l-i,s[2]=i*l-e,s[6]=n*u,s[10]=r*l+t}return s[3]=0,s[7]=0,s[11]=0,s[12]=0,s[13]=0,s[14]=0,s[15]=1,this}makeRotationFromQuaternion(t){return this.compose(A,t,k)}lookAt(t,s,e){const i=this.elements;return Z.subVectors(t,s),0===Z.lengthSq()&&(Z.z=1),Z.normalize(),C.crossVectors(e,Z),0===C.lengthSq()&&(1===Math.abs(e.z)?Z.x+=1e-4:Z.z+=1e-4,Z.normalize(),C.crossVectors(e,Z)),C.normalize(),E.crossVectors(Z,C),i[0]=C.x,i[4]=E.x,i[8]=Z.x,i[1]=C.y,i[5]=E.y,i[9]=Z.y,i[2]=C.z,i[6]=E.z,i[10]=Z.z,this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,s){const e=t.elements,i=s.elements,r=this.elements,h=e[0],n=e[4],a=e[8],o=e[12],u=e[1],l=e[5],c=e[9],x=e[13],y=e[2],m=e[6],d=e[10],M=e[14],z=e[3],f=e[7],p=e[11],w=e[15],_=i[0],g=i[4],b=i[8],v=i[12],S=i[1],A=i[5],k=i[9],C=i[13],E=i[2],Z=i[6],F=i[10],T=i[14],q=i[3],V=i[7],R=i[11],I=i[15];return r[0]=h*_+n*S+a*E+o*q,r[4]=h*g+n*A+a*Z+o*V,r[8]=h*b+n*k+a*F+o*R,r[12]=h*v+n*C+a*T+o*I,r[1]=u*_+l*S+c*E+x*q,r[5]=u*g+l*A+c*Z+x*V,r[9]=u*b+l*k+c*F+x*R,r[13]=u*v+l*C+c*T+x*I,r[2]=y*_+m*S+d*E+M*q,r[6]=y*g+m*A+d*Z+M*V,r[10]=y*b+m*k+d*F+M*R,r[14]=y*v+m*C+d*T+M*I,r[3]=z*_+f*S+p*E+w*q,r[7]=z*g+f*A+p*Z+w*V,r[11]=z*b+f*k+p*F+w*R,r[15]=z*v+f*C+p*T+w*I,this}multiplyScalar(t){const s=this.elements;return s[0]*=t,s[4]*=t,s[8]*=t,s[12]*=t,s[1]*=t,s[5]*=t,s[9]*=t,s[13]*=t,s[2]*=t,s[6]*=t,s[10]*=t,s[14]*=t,s[3]*=t,s[7]*=t,s[11]*=t,s[15]*=t,this}determinant(){const t=this.elements,s=t[0],e=t[4],i=t[8],r=t[12],h=t[1],n=t[5],a=t[9],o=t[13],u=t[2],l=t[6],c=t[10],x=t[14],y=t[3],m=t[7],d=t[11],M=t[15],z=a*x-o*c,f=n*x-o*l,p=n*c-a*l,w=h*x-o*u,_=h*c-a*u,g=h*l-n*u;return s*(m*z-d*f+M*p)-e*(y*z-d*w+M*_)+i*(y*f-m*w+M*g)-r*(y*p-m*_+d*g)}determinantAffine(){const t=this.elements,s=t[0],e=t[4],i=t[8],r=t[1],h=t[5],n=t[9],a=t[2],o=t[6],u=t[10];return s*(h*u-n*o)-e*(r*u-n*a)+i*(r*o-h*a)}transpose(){const t=this.elements;let s;return s=t[1],t[1]=t[4],t[4]=s,s=t[2],t[2]=t[8],t[8]=s,s=t[6],t[6]=t[9],t[9]=s,s=t[3],t[3]=t[12],t[12]=s,s=t[7],t[7]=t[13],t[13]=s,s=t[11],t[11]=t[14],t[14]=s,this}setPosition(t,s,e){const i=this.elements;return t.isVector3?(i[12]=t.x,i[13]=t.y,i[14]=t.z):(i[12]=t,i[13]=s,i[14]=e),this}invert(){const t=this.elements,s=t[0],e=t[1],i=t[2],r=t[3],h=t[4],n=t[5],a=t[6],o=t[7],u=t[8],l=t[9],c=t[10],x=t[11],y=t[12],m=t[13],d=t[14],M=t[15],z=s*n-e*h,f=s*a-i*h,p=s*o-r*h,w=e*a-i*n,_=e*o-r*n,g=i*o-r*a,b=u*m-l*y,v=u*d-c*y,S=u*M-x*y,A=l*d-c*m,k=l*M-x*m,C=c*M-x*d,E=z*C-f*k+p*A+w*S-_*v+g*b;if(0===E)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const Z=1/E;return t[0]=(n*C-a*k+o*A)*Z,t[1]=(i*k-e*C-r*A)*Z,t[2]=(m*g-d*_+M*w)*Z,t[3]=(c*_-l*g-x*w)*Z,t[4]=(a*S-h*C-o*v)*Z,t[5]=(s*C-i*S+r*v)*Z,t[6]=(d*p-y*g-M*f)*Z,t[7]=(u*g-c*p+x*f)*Z,t[8]=(h*k-n*S+o*b)*Z,t[9]=(e*S-s*k-r*b)*Z,t[10]=(y*_-m*p+M*z)*Z,t[11]=(l*p-u*_-x*z)*Z,t[12]=(n*v-h*A-a*b)*Z,t[13]=(s*A-e*v+i*b)*Z,t[14]=(m*f-y*w-d*z)*Z,t[15]=(u*w-l*f+c*z)*Z,this}scale(t){const s=this.elements,e=t.x,i=t.y,r=t.z;return s[0]*=e,s[4]*=i,s[8]*=r,s[1]*=e,s[5]*=i,s[9]*=r,s[2]*=e,s[6]*=i,s[10]*=r,s[3]*=e,s[7]*=i,s[11]*=r,this}getMaxScaleOnAxis(){const t=this.elements,s=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],e=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],i=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(s,e,i))}makeTranslation(t,s,e){return t.isVector3?this.set(1,0,0,t.x,0,1,0,t.y,0,0,1,t.z,0,0,0,1):this.set(1,0,0,t,0,1,0,s,0,0,1,e,0,0,0,1),this}makeRotationX(t){const s=Math.cos(t),e=Math.sin(t);return this.set(1,0,0,0,0,s,-e,0,0,e,s,0,0,0,0,1),this}makeRotationY(t){const s=Math.cos(t),e=Math.sin(t);return this.set(s,0,e,0,0,1,0,0,-e,0,s,0,0,0,0,1),this}makeRotationZ(t){const s=Math.cos(t),e=Math.sin(t);return this.set(s,-e,0,0,e,s,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,s){const e=Math.cos(s),i=Math.sin(s),r=1-e,h=t.x,n=t.y,a=t.z,o=r*h,u=r*n;return this.set(o*h+e,o*n-i*a,o*a+i*n,0,o*n+i*a,u*n+e,u*a-i*h,0,o*a-i*n,u*a+i*h,r*a*a+e,0,0,0,0,1),this}makeScale(t,s,e){return this.set(t,0,0,0,0,s,0,0,0,0,e,0,0,0,0,1),this}makeShear(t,s,e,i,r,h){return this.set(1,e,r,0,t,1,h,0,s,i,1,0,0,0,0,1),this}compose(t,s,e){const i=this.elements,r=s._x,h=s._y,n=s._z,a=s._w,o=r+r,u=h+h,l=n+n,c=r*o,x=r*u,y=r*l,m=h*u,d=h*l,M=n*l,z=a*o,f=a*u,p=a*l,w=e.x,_=e.y,g=e.z;return i[0]=(1-(m+M))*w,i[1]=(x+p)*w,i[2]=(y-f)*w,i[3]=0,i[4]=(x-p)*_,i[5]=(1-(c+M))*_,i[6]=(d+z)*_,i[7]=0,i[8]=(y+f)*g,i[9]=(d-z)*g,i[10]=(1-(c+m))*g,i[11]=0,i[12]=t.x,i[13]=t.y,i[14]=t.z,i[15]=1,this}decompose(t,s,e){const i=this.elements;t.x=i[12],t.y=i[13],t.z=i[14];const r=this.determinantAffine();if(0===r)return e.set(1,1,1),s.identity(),this;let h=v.set(i[0],i[1],i[2]).length();const n=v.set(i[4],i[5],i[6]).length(),a=v.set(i[8],i[9],i[10]).length();r<0&&(h=-h),S.copy(this);const o=1/h,u=1/n,l=1/a;return S.elements[0]*=o,S.elements[1]*=o,S.elements[2]*=o,S.elements[4]*=u,S.elements[5]*=u,S.elements[6]*=u,S.elements[8]*=l,S.elements[9]*=l,S.elements[10]*=l,s.setFromRotationMatrix(S),e.x=h,e.y=n,e.z=a,this}makePerspective(s,e,i,r,h,n,a=2e3,o=!1){const u=this.elements,l=2*h/(e-s),c=2*h/(i-r),x=(e+s)/(e-s),y=(i+r)/(i-r);let m,d;if(o)m=h/(n-h),d=n*h/(n-h);else if(a===t)m=-(n+h)/(n-h),d=-2*n*h/(n-h);else{if(2001!==a)throw new Error("THREE.Matrix4.makePerspective(): Invalid coordinate system: "+a);m=-n/(n-h),d=-n*h/(n-h)}return u[0]=l,u[4]=0,u[8]=x,u[12]=0,u[1]=0,u[5]=c,u[9]=y,u[13]=0,u[2]=0,u[6]=0,u[10]=m,u[14]=d,u[3]=0,u[7]=0,u[11]=-1,u[15]=0,this}makeOrthographic(s,e,i,r,h,n,a=2e3,o=!1){const u=this.elements,l=2/(e-s),c=2/(i-r),x=-(e+s)/(e-s),y=-(i+r)/(i-r);let m,d;if(o)m=1/(n-h),d=n/(n-h);else if(a===t)m=-2/(n-h),d=-(n+h)/(n-h);else{if(2001!==a)throw new Error("THREE.Matrix4.makeOrthographic(): Invalid coordinate system: "+a);m=-1/(n-h),d=-h/(n-h)}return u[0]=l,u[4]=0,u[8]=0,u[12]=x,u[1]=0,u[5]=c,u[9]=0,u[13]=y,u[2]=0,u[6]=0,u[10]=m,u[14]=d,u[3]=0,u[7]=0,u[11]=0,u[15]=1,this}equals(t){const s=this.elements,e=t.elements;for(let i=0;i<16;i++)if(s[i]!==e[i])return!1;return!0}fromArray(t,s=0){for(let e=0;e<16;e++)this.elements[e]=t[e+s];return this}toArray(t=[],s=0){const e=this.elements;return t[s]=e[0],t[s+1]=e[1],t[s+2]=e[2],t[s+3]=e[3],t[s+4]=e[4],t[s+5]=e[5],t[s+6]=e[6],t[s+7]=e[7],t[s+8]=e[8],t[s+9]=e[9],t[s+10]=e[10],t[s+11]=e[11],t[s+12]=e[12],t[s+13]=e[13],t[s+14]=e[14],t[s+15]=e[15],t}};g.prototype.isMatrix4=!0;let b=g;const v=new d,S=new b,A=new d(0,0,0),k=new d(1,1,1),C=new d,E=new d,Z=new d,F=class{constructor(t,s,e,i){this.elements=[1,0,0,1],void 0!==t&&this.set(t,s,e,i)}identity(){return this.set(1,0,0,1),this}fromArray(t,s=0){for(let e=0;e<4;e++)this.elements[e]=t[e+s];return this}set(t,s,e,i){const r=this.elements;return r[0]=t,r[2]=s,r[1]=e,r[3]=i,this}};F.prototype.isMatrix2=!0;"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register",{detail:{revision:"185"}})),"undefined"!=typeof window&&(window.__THREE__?e("WARNING: Multiple instances of Three.js being imported."):window.__THREE__="185");(new p).set(-1,0,0,0,1,0,0,0,1);function T(t,s,e){const i=.081819190842622,r=i*i,h=s*(Math.PI/180),n=t*(Math.PI/180),a=6378137/Math.sqrt(1-r*Math.sin(h)**2);return[(a+e)*Math.cos(h)*Math.cos(n),(a+e)*Math.cos(h)*Math.sin(n),((1-r)*a+e)*Math.sin(h)]}function q(t,s,e=2){const i=t.length;let r=function(t,s,e,i,r){let h;if(r===function(t,s,e,i){let r=0;for(let h=s,n=e-i;h<e;h+=i)r+=(t[n]-t[h])*(t[h+1]+t[n+1]),n=h;return r}(t,s,e,i)>0)for(let n=s;n<e;n+=i)h=G(n/i|0,t[n],t[n+1],h);else for(let n=e-i;n>=s;n-=i)h=G(n/i|0,t[n],t[n+1],h);h&&O(h,h.next)&&(J(h),h=h.next);return h}(t,0,i,e,!0);const h=[];if(!r||r.next===r.prev)return h;let n,a,o;if(t.length>80*e){n=1/0,a=1/0;let s=-1/0,r=-1/0;for(let h=e;h<i;h+=e){const e=t[h],i=t[h+1];e<n&&(n=e),i<a&&(a=i),e>s&&(s=e),i>r&&(r=i)}o=Math.max(s-n,r-a),o=0!==o?32767/o:0}return R(r,h,e,n,a,o,0),h}function V(t,s){if(!t)return t;s||(s=t);let e,i=t;do{if(e=!1,i.steiner||!O(i,i.next)&&0!==H(i.prev,i,i.next))i=i.next;else{if(J(i),i=s=i.prev,i===i.next)break;e=!0}}while(e||i!==s);return s}function R(t,s,e,i,r,h,n){if(!t)return;!n&&h&&function(t,s,e,i){let r=t;do{0===r.z&&(r.z=L(r.x,r.y,s,e,i)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next}while(r!==t);r.prevZ.nextZ=null,r.prevZ=null,function(t){let s,e=1;do{let i,r=t;t=null;let h=null;for(s=0;r;){s++;let n=r,a=0;for(let t=0;t<e&&(a++,n=n.nextZ,n);t++);let o=e;for(;a>0||o>0&&n;)0!==a&&(0===o||!n||r.z<=n.z)?(i=r,r=r.nextZ,a--):(i=n,n=n.nextZ,o--),h?h.nextZ=i:t=i,i.prevZ=h,h=i;r=n}h.nextZ=null,e*=2}while(s>1)}(r)}(t,i,r,h);let a=t;for(;t.prev!==t.next;){const o=t.prev,u=t.next;if(h?X(t,i,r,h):I(t))s.push(o.i,t.i,u.i),J(t),t=u.next,a=u.next;else if((t=u)===a){n?1===n?R(t=Y(V(t),s),s,e,i,r,h,2):2===n&&P(t,s,e,i,r,h):R(V(t),s,e,i,r,h,1);break}}}function I(t){const s=t.prev,e=t,i=t.next;if(H(s,e,i)>=0)return!1;const r=s.x,h=e.x,n=i.x,a=s.y,o=e.y,u=i.y,l=Math.min(r,h,n),c=Math.min(a,o,u),x=Math.max(r,h,n),y=Math.max(a,o,u);let m=i.next;for(;m!==s;){if(m.x>=l&&m.x<=x&&m.y>=c&&m.y<=y&&U(r,a,h,o,n,u,m.x,m.y)&&H(m.prev,m,m.next)>=0)return!1;m=m.next}return!0}function X(t,s,e,i){const r=t.prev,h=t,n=t.next;if(H(r,h,n)>=0)return!1;const a=r.x,o=h.x,u=n.x,l=r.y,c=h.y,x=n.y,y=Math.min(a,o,u),m=Math.min(l,c,x),d=Math.max(a,o,u),M=Math.max(l,c,x),z=L(y,m,s,e,i),f=L(d,M,s,e,i);let p=t.prevZ,w=t.nextZ;for(;p&&p.z>=z&&w&&w.z<=f;){if(p.x>=y&&p.x<=d&&p.y>=m&&p.y<=M&&p!==r&&p!==n&&U(a,l,o,c,u,x,p.x,p.y)&&H(p.prev,p,p.next)>=0)return!1;if(p=p.prevZ,w.x>=y&&w.x<=d&&w.y>=m&&w.y<=M&&w!==r&&w!==n&&U(a,l,o,c,u,x,w.x,w.y)&&H(w.prev,w,w.next)>=0)return!1;w=w.nextZ}for(;p&&p.z>=z;){if(p.x>=y&&p.x<=d&&p.y>=m&&p.y<=M&&p!==r&&p!==n&&U(a,l,o,c,u,x,p.x,p.y)&&H(p.prev,p,p.next)>=0)return!1;p=p.prevZ}for(;w&&w.z<=f;){if(w.x>=y&&w.x<=d&&w.y>=m&&w.y<=M&&w!==r&&w!==n&&U(a,l,o,c,u,x,w.x,w.y)&&H(w.prev,w,w.next)>=0)return!1;w=w.nextZ}return!0}function Y(t,s){let e=t;do{const i=e.prev,r=e.next.next;!O(i,r)&&Q(i,e,e.next,r)&&N(i,r)&&N(r,i)&&(s.push(i.i,e.i,r.i),J(e),J(e.next),e=t=r),e=e.next}while(e!==t);return V(e)}function P(t,s,e,i,r,h){let n=t;do{let t=n.next.next;for(;t!==n.prev;){if(n.i!==t.i&&B(n,t)){let a=W(n,t);return n=V(n,n.next),a=V(a,a.next),R(n,s,e,i,r,h,0),void R(a,s,e,i,r,h,0)}t=t.next}n=n.next}while(n!==t)}function L(t,s,e,i,r){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=(t-e)*r|0)|t<<8))|t<<4))|t<<2))|t<<1))|(s=1431655765&((s=858993459&((s=252645135&((s=16711935&((s=(s-i)*r|0)|s<<8))|s<<4))|s<<2))|s<<1))<<1}function U(t,s,e,i,r,h,n,a){return!(t===n&&s===a)&&function(t,s,e,i,r,h,n,a){return(r-n)*(s-a)>=(t-n)*(h-a)&&(t-n)*(i-a)>=(e-n)*(s-a)&&(e-n)*(h-a)>=(r-n)*(i-a)}(t,s,e,i,r,h,n,a)}function B(t,s){return t.next.i!==s.i&&t.prev.i!==s.i&&!function(t,s){let e=t;do{if(e.i!==t.i&&e.next.i!==t.i&&e.i!==s.i&&e.next.i!==s.i&&Q(e,e.next,t,s))return!0;e=e.next}while(e!==t);return!1}(t,s)&&(N(t,s)&&N(s,t)&&function(t,s){let e=t,i=!1;const r=(t.x+s.x)/2,h=(t.y+s.y)/2;do{e.y>h!=e.next.y>h&&e.next.y!==e.y&&r<(e.next.x-e.x)*(h-e.y)/(e.next.y-e.y)+e.x&&(i=!i),e=e.next}while(e!==t);return i}(t,s)&&(H(t.prev,t,s.prev)||H(t,s.prev,s))||O(t,s)&&H(t.prev,t,t.next)>0&&H(s.prev,s,s.next)>0)}function H(t,s,e){return(s.y-t.y)*(e.x-s.x)-(s.x-t.x)*(e.y-s.y)}function O(t,s){return t.x===s.x&&t.y===s.y}function Q(t,s,e,i){const r=j(H(t,s,e)),h=j(H(t,s,i)),n=j(H(e,i,t)),a=j(H(e,i,s));return r!==h&&n!==a||(!(0!==r||!D(t,e,s))||(!(0!==h||!D(t,i,s))||(!(0!==n||!D(e,t,i))||!(0!==a||!D(e,s,i)))))}function D(t,s,e){return s.x<=Math.max(t.x,e.x)&&s.x>=Math.min(t.x,e.x)&&s.y<=Math.max(t.y,e.y)&&s.y>=Math.min(t.y,e.y)}function j(t){return t>0?1:t<0?-1:0}function N(t,s){return H(t.prev,t,t.next)<0?H(t,s,t.next)>=0&&H(t,t.prev,s)>=0:H(t,s,t.prev)<0||H(t,t.next,s)<0}function W(t,s){const e=K(t.i,t.x,t.y),i=K(s.i,s.x,s.y),r=t.next,h=s.prev;return t.next=s,s.prev=t,e.next=r,r.prev=e,i.next=e,e.prev=i,h.next=i,i.prev=h,i}function G(t,s,e,i){const r=K(t,s,e);return i?(r.next=i.next,r.prev=i,i.next.prev=r,i.next=r):(r.prev=r,r.next=r),r}function J(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function K(t,s,e){return{i:t,x:s,y:e,prev:null,next:null,z:0,prevZ:null,nextZ:null,steiner:!1}}function $(t){return 255*(t=(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4))}function tt(t){const{geometry:s}=t,e=(new d).fromArray(T(...s.coordinates[0])),i=(new d).fromArray(T(...s.coordinates[1])),r=function(t,s){const e=c.degToRad(t),i=c.degToRad(s);return new d(Math.cos(i)*Math.cos(e),Math.cos(i)*Math.sin(e),Math.sin(i)).normalize()}(s.coordinates[0][0],s.coordinates[0][1]),h=(new d).subVectors(i,e),n=h.length(),a=h.clone().normalize(),o=(new d).crossVectors(r,a).normalize().multiplyScalar(10),u=e.clone(),l=i.clone(),x=u.clone().add(a.clone().multiplyScalar(n*(1-100/n))),y=u.clone().add(o),m=u.clone().sub(o),M=x.clone().add(o.clone()),z=x.clone().sub(o.clone()),f=x.clone().add(o.clone().multiplyScalar(4)),p=x.clone().sub(o.clone().multiplyScalar(4)),w=l;return{meshVertexBuffer:new Float32Array([...y.toArray(),...m.toArray(),...M.toArray(),...M.toArray(),...m.toArray(),...z.toArray(),...f.toArray(),...p.toArray(),...w.toArray()])}}(new p).set(-1,0,0,0,1,0,0,0,1),self.addEventListener("message",(async t=>{const{type:s,data:e,color:i}=t.data;let r={};switch(s){case"arrow":r=tt(e),self.postMessage({success:!0,code:0,...r});break;case"perimeter":r=function(t,s){const e=t.geometry.coordinates[0],i=[(r=s)>>16&255,r>>8&255,255&r];var r;i[0]=$(i[0]),i[1]=$(i[1]),i[2]=$(i[2]);const h=q(e.flat(),0,e[0].length);for(let l=0;l<e.length;l++)e[l][2]||(e[l][2]=0);const n=[],a=[],o=[],u=[];for(let l=0;l<e.length;l++){const[t,s,r]=e[l],h=T(t,s,r);n.push(...h),u.push(...i),o.push(...h),a.push(...i),l>0&&(o.push(...h),a.push(...i))}return{lineVertexBuffer:new Float32Array(o),lineVertexRGBBuffer:new Uint8Array(a),meshVertexBuffer:new Float32Array(n),meshVertexRGBBuffer:new Uint8Array(u),meshIndexBuffer:new Uint16Array(h.flat())}}(e,i),self.postMessage({success:!0,code:0,...r})}}))}();
|
|
Binary file
|
|
Binary file
|