u-space 0.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -0
- package/dist/index.cjs +1 -0
- package/dist/index.js +1374 -0
- package/dist/plugins/atmosphere/Atmosphere.d.ts +9 -0
- package/dist/plugins/atmosphere/index.cjs +1 -0
- package/dist/plugins/atmosphere/index.d.ts +1 -0
- package/dist/plugins/atmosphere/index.js +15 -0
- package/dist/plugins/curve-movement/CurveMovement.d.ts +78 -0
- package/dist/plugins/curve-movement/CurveMovementCamera.d.ts +8 -0
- package/dist/plugins/curve-movement/CurveMovementObject.d.ts +14 -0
- package/dist/plugins/curve-movement/index.cjs +1 -0
- package/dist/plugins/curve-movement/index.d.ts +3 -0
- package/dist/plugins/curve-movement/index.js +153 -0
- package/dist/plugins/keyboard-controls/KeyboardControls.d.ts +31 -0
- package/dist/plugins/keyboard-controls/index.cjs +1 -0
- package/dist/plugins/keyboard-controls/index.d.ts +1 -0
- package/dist/plugins/keyboard-controls/index.js +67 -0
- package/dist/plugins/minimap/Minimap.d.ts +22 -0
- package/dist/plugins/minimap/index.cjs +1 -0
- package/dist/plugins/minimap/index.d.ts +1 -0
- package/dist/plugins/minimap/index.js +67 -0
- package/dist/plugins/tiles/ArcgisTilesRenderer.d.ts +14 -0
- package/dist/plugins/tiles/Globe.d.ts +22 -0
- package/dist/plugins/tiles/index.cjs +1 -0
- package/dist/plugins/tiles/index.d.ts +2 -0
- package/dist/plugins/tiles/index.js +179 -0
- package/dist/plugins/tiles/plugins/TileMaterialReplacementPlugin.d.ts +11 -0
- package/dist/plugins/tiles/plugins/fade/FadeMaterialManager.d.ts +17 -0
- package/dist/plugins/tiles/plugins/fade/TilesFadePlugin.d.ts +5 -0
- package/dist/plugins/tiles/plugins/fade/wrapFadeNodeMaterial.d.ts +3 -0
- package/dist/plugins/tracking-controls/TrackingControls.d.ts +13 -0
- package/dist/plugins/tracking-controls/index.cjs +1 -0
- package/dist/plugins/tracking-controls/index.d.ts +1 -0
- package/dist/plugins/tracking-controls/index.js +23 -0
- package/dist/plugins/u-manager/Watermarker.d.ts +12 -0
- package/dist/plugins/u-manager/constants.d.ts +5 -0
- package/dist/plugins/u-manager/index.cjs +86 -0
- package/dist/plugins/u-manager/index.d.ts +6 -0
- package/dist/plugins/u-manager/index.js +20877 -0
- package/dist/plugins/u-manager/license/decryptUtils.d.ts +5 -0
- package/dist/plugins/u-manager/loaders/AnimationsLoader.d.ts +59 -0
- package/dist/plugins/u-manager/loaders/BaseFileLoader.d.ts +5 -0
- package/dist/plugins/u-manager/loaders/PropertiesLoader.d.ts +12 -0
- package/dist/plugins/u-manager/loaders/SceneLoader.d.ts +15 -0
- package/dist/plugins/u-manager/loaders/TopologiesLoader.d.ts +10 -0
- package/dist/plugins/u-manager/loaders/VisionsLoader.d.ts +26 -0
- package/dist/plugins/u-manager/types.d.ts +84 -0
- package/dist/src/animations/Tween.d.ts +20 -0
- package/dist/src/animations/index.d.ts +1 -0
- package/dist/src/effects/MaterialEffects.d.ts +10 -0
- package/dist/src/effects/TSLEffects.d.ts +24 -0
- package/dist/src/effects/index.d.ts +2 -0
- package/dist/src/index.d.ts +9 -0
- package/dist/src/interactions/InteractionEvent.d.ts +39 -0
- package/dist/src/interactions/InteractionManager.d.ts +55 -0
- package/dist/src/interactions/index.d.ts +2 -0
- package/dist/src/interfaces/base.d.ts +11 -0
- package/dist/src/interfaces/index.d.ts +1 -0
- package/dist/src/loaders/ModelLoaderManager.d.ts +40 -0
- package/dist/src/loaders/SBMLoader.d.ts +6 -0
- package/dist/src/loaders/SBMUtils.d.ts +5 -0
- package/dist/src/loaders/SBMXLoader.d.ts +6 -0
- package/dist/src/loaders/TextureLoaderManager.d.ts +11 -0
- package/dist/src/loaders/index.d.ts +4 -0
- package/dist/src/managers/ObjectManager.d.ts +60 -0
- package/dist/src/managers/index.d.ts +1 -0
- package/dist/src/objects/BaseGroup.d.ts +8 -0
- package/dist/src/objects/BaseMesh.d.ts +8 -0
- package/dist/src/objects/BaseSprite.d.ts +8 -0
- package/dist/src/objects/CircleMesh.d.ts +17 -0
- package/dist/src/objects/ExtrudeMesh.d.ts +17 -0
- package/dist/src/objects/Model.d.ts +17 -0
- package/dist/src/objects/ObjectUtils.d.ts +4 -0
- package/dist/src/objects/PlaneMesh.d.ts +17 -0
- package/dist/src/objects/Poi.d.ts +38 -0
- package/dist/src/objects/ShapeMesh.d.ts +17 -0
- package/dist/src/objects/SphereMesh.d.ts +20 -0
- package/dist/src/objects/Topology.d.ts +64 -0
- package/dist/src/objects/TubeMesh.d.ts +18 -0
- package/dist/src/objects/index.d.ts +13 -0
- package/dist/src/types.d.ts +1 -0
- package/dist/src/viewers/CameraControls.d.ts +19 -0
- package/dist/src/viewers/Info.d.ts +18 -0
- package/dist/src/viewers/RenderPipeline.d.ts +17 -0
- package/dist/src/viewers/RoomEnvironment.d.ts +11 -0
- package/dist/src/viewers/Viewer.d.ts +59 -0
- package/dist/src/viewers/ViewerHelper.d.ts +12 -0
- package/dist/src/viewers/index.d.ts +3 -0
- package/docs/api-interactions.md +64 -0
- package/docs/api-managers.md +54 -0
- package/docs/api-objects.md +65 -0
- package/docs/api-plugins.md +103 -0
- package/docs/api-viewer.md +84 -0
- package/docs/examples-guide.md +48 -0
- package/docs/getting-started.md +126 -0
- package/package.json +60 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});class s{viewer;constructor(e){this.viewer=e}enable(){}disable(){}dispose(){}}exports.Atmosphere=s;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './Atmosphere';
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { EventDispatcher, Vector3, type Curve } from 'three/webgpu';
|
|
2
|
+
import type { Viewer } from 'u-space';
|
|
3
|
+
export type CurveMovementEventMap = {
|
|
4
|
+
update: {
|
|
5
|
+
progress: number;
|
|
6
|
+
};
|
|
7
|
+
complete: {};
|
|
8
|
+
};
|
|
9
|
+
declare class CurveMovement extends EventDispatcher<CurveMovementEventMap> {
|
|
10
|
+
viewer: Viewer;
|
|
11
|
+
/** 路径曲线 */
|
|
12
|
+
path: Curve<Vector3> | null;
|
|
13
|
+
/** 当前进度 (0-1) */
|
|
14
|
+
progress: number;
|
|
15
|
+
/** 移动速度 (每秒进度) */
|
|
16
|
+
speed: number;
|
|
17
|
+
/** 循环模式 */
|
|
18
|
+
loop: 'once' | 'repeat' | 'pingpong';
|
|
19
|
+
/** 是否往返移动 */
|
|
20
|
+
pingPong: boolean;
|
|
21
|
+
/** 位置偏移 */
|
|
22
|
+
positionOffset: Vector3;
|
|
23
|
+
/** 是否自动朝向路径前方 */
|
|
24
|
+
autoLookAt: boolean;
|
|
25
|
+
/** Y轴朝向角度偏移 (弧度) */
|
|
26
|
+
lookAtOffset: number;
|
|
27
|
+
/** 当前方向 (1: 正向, -1: 反向) */
|
|
28
|
+
direction: 1 | -1;
|
|
29
|
+
/** 是否正在播放 */
|
|
30
|
+
protected _isPlaying: boolean;
|
|
31
|
+
/** 临时向量用于计算 */
|
|
32
|
+
protected _tempPosition: Vector3;
|
|
33
|
+
protected _tempTangent: Vector3;
|
|
34
|
+
protected _tempLookAt: Vector3;
|
|
35
|
+
constructor(viewer: Viewer);
|
|
36
|
+
/**
|
|
37
|
+
* 从点数组创建 CatmullRom 曲线路径
|
|
38
|
+
*/
|
|
39
|
+
setFromPoints(points: Vector3[], closed?: boolean): this;
|
|
40
|
+
/**
|
|
41
|
+
* 设置路径曲线
|
|
42
|
+
*/
|
|
43
|
+
setPath(path: Curve<Vector3>): this;
|
|
44
|
+
/**
|
|
45
|
+
* 设置当前进度并更新位置
|
|
46
|
+
*/
|
|
47
|
+
setProgress(progress: number): this;
|
|
48
|
+
/**
|
|
49
|
+
* 获取是否正在播放
|
|
50
|
+
*/
|
|
51
|
+
get isPlaying(): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* 开始移动动画
|
|
54
|
+
*/
|
|
55
|
+
play(): this;
|
|
56
|
+
resume(): this;
|
|
57
|
+
/**
|
|
58
|
+
* 暂停移动动画
|
|
59
|
+
*/
|
|
60
|
+
pause(): this;
|
|
61
|
+
/**
|
|
62
|
+
* 停止并重置进度
|
|
63
|
+
*/
|
|
64
|
+
stop(): this;
|
|
65
|
+
/**
|
|
66
|
+
* 反转移动方向
|
|
67
|
+
*/
|
|
68
|
+
reverse(): this;
|
|
69
|
+
/**
|
|
70
|
+
* 更新动画帧
|
|
71
|
+
*/
|
|
72
|
+
private _update;
|
|
73
|
+
/**
|
|
74
|
+
* 销毁插件
|
|
75
|
+
*/
|
|
76
|
+
dispose(): void;
|
|
77
|
+
}
|
|
78
|
+
export { CurveMovement };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type Object3D } from 'three';
|
|
2
|
+
import type { Viewer } from 'u-space';
|
|
3
|
+
import { CurveMovement } from './CurveMovement';
|
|
4
|
+
declare class CurveMovementObject extends CurveMovement {
|
|
5
|
+
/** 移动目标对象 */
|
|
6
|
+
target: Object3D | null;
|
|
7
|
+
constructor(viewer: Viewer);
|
|
8
|
+
/**
|
|
9
|
+
* 更新动画帧
|
|
10
|
+
*/
|
|
11
|
+
private _updateObject;
|
|
12
|
+
dispose(): void;
|
|
13
|
+
}
|
|
14
|
+
export { CurveMovementObject };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("three/webgpu");require("three");class s extends e.EventDispatcher{viewer;path=null;progress=0;speed=.1;loop="once";pingPong=!1;positionOffset=new e.Vector3;autoLookAt=!0;lookAtOffset=0;direction=1;_isPlaying=!1;_tempPosition=new e.Vector3;_tempTangent=new e.Vector3;_tempLookAt=new e.Vector3;constructor(t){super(),this.viewer=t}setFromPoints(t,r=!1){return this.setPath(new e.CatmullRomCurve3(t,r,"catmullrom",0))}setPath(t){return this.path=t,this}setProgress(t){return this.progress=Math.max(0,Math.min(1,t)),this}get isPlaying(){return this._isPlaying}play(){return this.resume(),this.progress=0,this.direction=1,this}resume(){return this._isPlaying=!0,this.viewer.addEventListener("beforeControlsUpdate",this._update),this}pause(){return this._isPlaying=!1,this.viewer.removeEventListener("beforeControlsUpdate",this._update),this}stop(){return this.pause(),this.progress=0,this.direction=1,this}reverse(){return this.direction*=-1,this}_update=()=>{if(!this._isPlaying||!this.path)return;const t=this.viewer.timer.getDelta();if(this.progress+=this.speed*t*this.direction,this.progress>=1)switch(this.loop){case"once":this.progress=1,this.pause(),this.dispatchEvent({type:"complete"});break;case"repeat":this.progress=0;break;case"pingpong":this.progress=1,this.direction=-1;break}else if(this.progress<=0)switch(this.loop){case"once":this.progress=0,this.pause(),this.dispatchEvent({type:"complete"});break;case"repeat":this.progress=1;break;case"pingpong":this.progress=0,this.direction=1;break}this.path.getPointAt(this.progress,this._tempPosition),this._tempPosition.add(this.positionOffset),this.autoLookAt&&(this.path.getTangentAt(this.progress,this._tempTangent),this._tempLookAt.copy(this._tempPosition).add(this._tempTangent)),this.dispatchEvent({type:"update",progress:this.progress}),this.viewer.render()};dispose(){this.stop(),this.path=null}}class o extends s{constructor(t){super(t),this.addEventListener("update",this._updateCamera)}_updateCamera=()=>{this.viewer.controls.setPosition(this._tempPosition.x,this._tempPosition.y,this._tempPosition.z),this.autoLookAt&&(this.viewer.controls.setTarget(this._tempLookAt.x,this._tempLookAt.y,this._tempLookAt.z),this.lookAtOffset!==0&&this.viewer.controls.rotate(this.lookAtOffset,0))};dispose(){super.dispose(),this.removeEventListener("update",this._updateCamera)}}class h extends s{target=null;constructor(t){super(t),this.addEventListener("update",this._updateObject)}_updateObject(){this.target&&(this.target.position.copy(this._tempPosition),this.autoLookAt&&(this.target.lookAt(this._tempLookAt),this.lookAtOffset!==0&&this.target.rotateY(this.lookAtOffset)))}dispose(){super.dispose(),this.removeEventListener("update",this._updateObject),this.target=null}}exports.CurveMovement=s;exports.CurveMovementCamera=o;exports.CurveMovementObject=h;
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { EventDispatcher as r, Vector3 as e, CatmullRomCurve3 as h } from "three/webgpu";
|
|
2
|
+
import "three";
|
|
3
|
+
class i extends r {
|
|
4
|
+
viewer;
|
|
5
|
+
/** 路径曲线 */
|
|
6
|
+
path = null;
|
|
7
|
+
/** 当前进度 (0-1) */
|
|
8
|
+
progress = 0;
|
|
9
|
+
/** 移动速度 (每秒进度) */
|
|
10
|
+
speed = 0.1;
|
|
11
|
+
/** 循环模式 */
|
|
12
|
+
loop = "once";
|
|
13
|
+
/** 是否往返移动 */
|
|
14
|
+
pingPong = !1;
|
|
15
|
+
/** 位置偏移 */
|
|
16
|
+
positionOffset = new e();
|
|
17
|
+
/** 是否自动朝向路径前方 */
|
|
18
|
+
autoLookAt = !0;
|
|
19
|
+
/** Y轴朝向角度偏移 (弧度) */
|
|
20
|
+
lookAtOffset = 0;
|
|
21
|
+
/** 当前方向 (1: 正向, -1: 反向) */
|
|
22
|
+
direction = 1;
|
|
23
|
+
/** 是否正在播放 */
|
|
24
|
+
_isPlaying = !1;
|
|
25
|
+
/** 临时向量用于计算 */
|
|
26
|
+
_tempPosition = new e();
|
|
27
|
+
_tempTangent = new e();
|
|
28
|
+
_tempLookAt = new e();
|
|
29
|
+
constructor(t) {
|
|
30
|
+
super(), this.viewer = t;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* 从点数组创建 CatmullRom 曲线路径
|
|
34
|
+
*/
|
|
35
|
+
setFromPoints(t, o = !1) {
|
|
36
|
+
return this.setPath(new h(t, o, "catmullrom", 0));
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* 设置路径曲线
|
|
40
|
+
*/
|
|
41
|
+
setPath(t) {
|
|
42
|
+
return this.path = t, this;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* 设置当前进度并更新位置
|
|
46
|
+
*/
|
|
47
|
+
setProgress(t) {
|
|
48
|
+
return this.progress = Math.max(0, Math.min(1, t)), this;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* 获取是否正在播放
|
|
52
|
+
*/
|
|
53
|
+
get isPlaying() {
|
|
54
|
+
return this._isPlaying;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* 开始移动动画
|
|
58
|
+
*/
|
|
59
|
+
play() {
|
|
60
|
+
return this.resume(), this.progress = 0, this.direction = 1, this;
|
|
61
|
+
}
|
|
62
|
+
resume() {
|
|
63
|
+
return this._isPlaying = !0, this.viewer.addEventListener("beforeControlsUpdate", this._update), this;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* 暂停移动动画
|
|
67
|
+
*/
|
|
68
|
+
pause() {
|
|
69
|
+
return this._isPlaying = !1, this.viewer.removeEventListener("beforeControlsUpdate", this._update), this;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* 停止并重置进度
|
|
73
|
+
*/
|
|
74
|
+
stop() {
|
|
75
|
+
return this.pause(), this.progress = 0, this.direction = 1, this;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* 反转移动方向
|
|
79
|
+
*/
|
|
80
|
+
reverse() {
|
|
81
|
+
return this.direction *= -1, this;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* 更新动画帧
|
|
85
|
+
*/
|
|
86
|
+
_update = () => {
|
|
87
|
+
if (!this._isPlaying || !this.path) return;
|
|
88
|
+
const t = this.viewer.timer.getDelta();
|
|
89
|
+
if (this.progress += this.speed * t * this.direction, this.progress >= 1)
|
|
90
|
+
switch (this.loop) {
|
|
91
|
+
case "once":
|
|
92
|
+
this.progress = 1, this.pause(), this.dispatchEvent({ type: "complete" });
|
|
93
|
+
break;
|
|
94
|
+
case "repeat":
|
|
95
|
+
this.progress = 0;
|
|
96
|
+
break;
|
|
97
|
+
case "pingpong":
|
|
98
|
+
this.progress = 1, this.direction = -1;
|
|
99
|
+
break;
|
|
100
|
+
}
|
|
101
|
+
else if (this.progress <= 0)
|
|
102
|
+
switch (this.loop) {
|
|
103
|
+
case "once":
|
|
104
|
+
this.progress = 0, this.pause(), this.dispatchEvent({ type: "complete" });
|
|
105
|
+
break;
|
|
106
|
+
case "repeat":
|
|
107
|
+
this.progress = 1;
|
|
108
|
+
break;
|
|
109
|
+
case "pingpong":
|
|
110
|
+
this.progress = 0, this.direction = 1;
|
|
111
|
+
break;
|
|
112
|
+
}
|
|
113
|
+
this.path.getPointAt(this.progress, this._tempPosition), this._tempPosition.add(this.positionOffset), this.autoLookAt && (this.path.getTangentAt(this.progress, this._tempTangent), this._tempLookAt.copy(this._tempPosition).add(this._tempTangent)), this.dispatchEvent({ type: "update", progress: this.progress }), this.viewer.render();
|
|
114
|
+
};
|
|
115
|
+
/**
|
|
116
|
+
* 销毁插件
|
|
117
|
+
*/
|
|
118
|
+
dispose() {
|
|
119
|
+
this.stop(), this.path = null;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
class n extends i {
|
|
123
|
+
constructor(t) {
|
|
124
|
+
super(t), this.addEventListener("update", this._updateCamera);
|
|
125
|
+
}
|
|
126
|
+
_updateCamera = () => {
|
|
127
|
+
this.viewer.controls.setPosition(this._tempPosition.x, this._tempPosition.y, this._tempPosition.z), this.autoLookAt && (this.viewer.controls.setTarget(this._tempLookAt.x, this._tempLookAt.y, this._tempLookAt.z), this.lookAtOffset !== 0 && this.viewer.controls.rotate(this.lookAtOffset, 0));
|
|
128
|
+
};
|
|
129
|
+
dispose() {
|
|
130
|
+
super.dispose(), this.removeEventListener("update", this._updateCamera);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
class u extends i {
|
|
134
|
+
/** 移动目标对象 */
|
|
135
|
+
target = null;
|
|
136
|
+
constructor(t) {
|
|
137
|
+
super(t), this.addEventListener("update", this._updateObject);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* 更新动画帧
|
|
141
|
+
*/
|
|
142
|
+
_updateObject() {
|
|
143
|
+
this.target && (this.target.position.copy(this._tempPosition), this.autoLookAt && (this.target.lookAt(this._tempLookAt), this.lookAtOffset !== 0 && this.target.rotateY(this.lookAtOffset)));
|
|
144
|
+
}
|
|
145
|
+
dispose() {
|
|
146
|
+
super.dispose(), this.removeEventListener("update", this._updateObject), this.target = null;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
export {
|
|
150
|
+
i as CurveMovement,
|
|
151
|
+
n as CurveMovementCamera,
|
|
152
|
+
u as CurveMovementObject
|
|
153
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { Viewer } from 'u-space';
|
|
2
|
+
export declare const ACTION: Readonly<{
|
|
3
|
+
MOVE_FORWARD: "move-forward";
|
|
4
|
+
MOVE_BACKWARD: "move-backward";
|
|
5
|
+
MOVE_LEFT: "move-left";
|
|
6
|
+
MOVE_RIGHT: "move-right";
|
|
7
|
+
MOVE_UP: "move-up";
|
|
8
|
+
MOVE_DOWN: "move-down";
|
|
9
|
+
ROTATE_LEFT: "rotate-left";
|
|
10
|
+
ROTATE_RIGHT: "rotate-right";
|
|
11
|
+
ROTATE_UP: "rotate-up";
|
|
12
|
+
ROTATE_DOWN: "rotate-down";
|
|
13
|
+
}>;
|
|
14
|
+
type ActionValue = (typeof ACTION)[keyof typeof ACTION];
|
|
15
|
+
declare class KeyboardControls {
|
|
16
|
+
viewer: Viewer;
|
|
17
|
+
moveDistanceDelta: number;
|
|
18
|
+
rotateAngleDelta: number;
|
|
19
|
+
keys: Record<string, ActionValue>;
|
|
20
|
+
_state: Record<ActionValue, {
|
|
21
|
+
fn: () => void;
|
|
22
|
+
pressed: boolean;
|
|
23
|
+
}>;
|
|
24
|
+
constructor(viewer: Viewer);
|
|
25
|
+
_onKeyDown: (event: KeyboardEvent) => void;
|
|
26
|
+
_onKeyUp: (event: KeyboardEvent) => void;
|
|
27
|
+
_update: () => void;
|
|
28
|
+
enable(): this;
|
|
29
|
+
disable(): this;
|
|
30
|
+
}
|
|
31
|
+
export { KeyboardControls };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=Object.freeze({MOVE_FORWARD:"move-forward",MOVE_BACKWARD:"move-backward",MOVE_LEFT:"move-left",MOVE_RIGHT:"move-right",MOVE_UP:"move-up",MOVE_DOWN:"move-down",ROTATE_LEFT:"rotate-left",ROTATE_RIGHT:"rotate-right",ROTATE_UP:"rotate-up",ROTATE_DOWN:"rotate-down"});class r{viewer;moveDistanceDelta=.1;rotateAngleDelta=Math.PI/180;keys={KeyW:e.MOVE_FORWARD,KeyS:e.MOVE_BACKWARD,KeyA:e.MOVE_LEFT,KeyD:e.MOVE_RIGHT,KeyQ:e.MOVE_UP,KeyE:e.MOVE_DOWN,ArrowLeft:e.ROTATE_LEFT,ArrowRight:e.ROTATE_RIGHT,ArrowUp:e.ROTATE_UP,ArrowDown:e.ROTATE_DOWN};_state={[e.MOVE_FORWARD]:{fn:()=>this.viewer.controls.forward(this.moveDistanceDelta),pressed:!1},[e.MOVE_BACKWARD]:{fn:()=>this.viewer.controls.forward(-this.moveDistanceDelta),pressed:!1},[e.MOVE_LEFT]:{fn:()=>this.viewer.controls.truck(-this.moveDistanceDelta,0),pressed:!1},[e.MOVE_RIGHT]:{fn:()=>this.viewer.controls.truck(this.moveDistanceDelta,0),pressed:!1},[e.MOVE_UP]:{fn:()=>this.viewer.controls.elevate(this.moveDistanceDelta),pressed:!1},[e.MOVE_DOWN]:{fn:()=>this.viewer.controls.elevate(-this.moveDistanceDelta),pressed:!1},[e.ROTATE_LEFT]:{fn:()=>this.viewer.controls.rotate(this.rotateAngleDelta,0),pressed:!1},[e.ROTATE_RIGHT]:{fn:()=>this.viewer.controls.rotate(-this.rotateAngleDelta,0),pressed:!1},[e.ROTATE_UP]:{fn:()=>this.viewer.controls.rotate(0,this.rotateAngleDelta),pressed:!1},[e.ROTATE_DOWN]:{fn:()=>this.viewer.controls.rotate(0,-this.rotateAngleDelta),pressed:!1}};constructor(t){this.viewer=t}_onKeyDown=t=>{const s=this.keys[t.code];s&&(this._state[s].pressed=!0)};_onKeyUp=t=>{const s=this.keys[t.code];s&&(this._state[s].pressed=!1)};_update=()=>{const{_state:t}=this;for(const{pressed:s,fn:o}of Object.values(t))s&&o()};enable(){return window.addEventListener("keydown",this._onKeyDown),window.addEventListener("keyup",this._onKeyUp),this.viewer.addEventListener("beforeControlsUpdate",this._update),this}disable(){return window.removeEventListener("keydown",this._onKeyDown),window.removeEventListener("keyup",this._onKeyUp),this.viewer.removeEventListener("beforeControlsUpdate",this._update),this}}exports.ACTION=e;exports.KeyboardControls=r;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './KeyboardControls';
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
const e = Object.freeze({
|
|
2
|
+
MOVE_FORWARD: "move-forward",
|
|
3
|
+
MOVE_BACKWARD: "move-backward",
|
|
4
|
+
MOVE_LEFT: "move-left",
|
|
5
|
+
MOVE_RIGHT: "move-right",
|
|
6
|
+
MOVE_UP: "move-up",
|
|
7
|
+
MOVE_DOWN: "move-down",
|
|
8
|
+
ROTATE_LEFT: "rotate-left",
|
|
9
|
+
ROTATE_RIGHT: "rotate-right",
|
|
10
|
+
ROTATE_UP: "rotate-up",
|
|
11
|
+
ROTATE_DOWN: "rotate-down"
|
|
12
|
+
});
|
|
13
|
+
class n {
|
|
14
|
+
viewer;
|
|
15
|
+
moveDistanceDelta = 0.1;
|
|
16
|
+
rotateAngleDelta = Math.PI / 180;
|
|
17
|
+
keys = {
|
|
18
|
+
KeyW: e.MOVE_FORWARD,
|
|
19
|
+
KeyS: e.MOVE_BACKWARD,
|
|
20
|
+
KeyA: e.MOVE_LEFT,
|
|
21
|
+
KeyD: e.MOVE_RIGHT,
|
|
22
|
+
KeyQ: e.MOVE_UP,
|
|
23
|
+
KeyE: e.MOVE_DOWN,
|
|
24
|
+
ArrowLeft: e.ROTATE_LEFT,
|
|
25
|
+
ArrowRight: e.ROTATE_RIGHT,
|
|
26
|
+
ArrowUp: e.ROTATE_UP,
|
|
27
|
+
ArrowDown: e.ROTATE_DOWN
|
|
28
|
+
};
|
|
29
|
+
_state = {
|
|
30
|
+
[e.MOVE_FORWARD]: { fn: () => this.viewer.controls.forward(this.moveDistanceDelta), pressed: !1 },
|
|
31
|
+
[e.MOVE_BACKWARD]: { fn: () => this.viewer.controls.forward(-this.moveDistanceDelta), pressed: !1 },
|
|
32
|
+
[e.MOVE_LEFT]: { fn: () => this.viewer.controls.truck(-this.moveDistanceDelta, 0), pressed: !1 },
|
|
33
|
+
[e.MOVE_RIGHT]: { fn: () => this.viewer.controls.truck(this.moveDistanceDelta, 0), pressed: !1 },
|
|
34
|
+
[e.MOVE_UP]: { fn: () => this.viewer.controls.elevate(this.moveDistanceDelta), pressed: !1 },
|
|
35
|
+
[e.MOVE_DOWN]: { fn: () => this.viewer.controls.elevate(-this.moveDistanceDelta), pressed: !1 },
|
|
36
|
+
[e.ROTATE_LEFT]: { fn: () => this.viewer.controls.rotate(this.rotateAngleDelta, 0), pressed: !1 },
|
|
37
|
+
[e.ROTATE_RIGHT]: { fn: () => this.viewer.controls.rotate(-this.rotateAngleDelta, 0), pressed: !1 },
|
|
38
|
+
[e.ROTATE_UP]: { fn: () => this.viewer.controls.rotate(0, this.rotateAngleDelta), pressed: !1 },
|
|
39
|
+
[e.ROTATE_DOWN]: { fn: () => this.viewer.controls.rotate(0, -this.rotateAngleDelta), pressed: !1 }
|
|
40
|
+
};
|
|
41
|
+
constructor(t) {
|
|
42
|
+
this.viewer = t;
|
|
43
|
+
}
|
|
44
|
+
_onKeyDown = (t) => {
|
|
45
|
+
const s = this.keys[t.code];
|
|
46
|
+
s && (this._state[s].pressed = !0);
|
|
47
|
+
};
|
|
48
|
+
_onKeyUp = (t) => {
|
|
49
|
+
const s = this.keys[t.code];
|
|
50
|
+
s && (this._state[s].pressed = !1);
|
|
51
|
+
};
|
|
52
|
+
_update = () => {
|
|
53
|
+
const { _state: t } = this;
|
|
54
|
+
for (const { pressed: s, fn: o } of Object.values(t))
|
|
55
|
+
s && o();
|
|
56
|
+
};
|
|
57
|
+
enable() {
|
|
58
|
+
return window.addEventListener("keydown", this._onKeyDown), window.addEventListener("keyup", this._onKeyUp), this.viewer.addEventListener("beforeControlsUpdate", this._update), this;
|
|
59
|
+
}
|
|
60
|
+
disable() {
|
|
61
|
+
return window.removeEventListener("keydown", this._onKeyDown), window.removeEventListener("keyup", this._onKeyUp), this.viewer.removeEventListener("beforeControlsUpdate", this._update), this;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
export {
|
|
65
|
+
e as ACTION,
|
|
66
|
+
n as KeyboardControls
|
|
67
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { CanvasTarget, Mesh, MeshBasicNodeMaterial, OrthographicCamera, PlaneGeometry, RenderTarget, Scene, type Object3D } from 'three/webgpu';
|
|
2
|
+
import { type Viewer, CameraControls } from 'u-space';
|
|
3
|
+
declare class Minimap {
|
|
4
|
+
viewer: Viewer;
|
|
5
|
+
camera: OrthographicCamera;
|
|
6
|
+
scene: Scene;
|
|
7
|
+
canvas: HTMLCanvasElement;
|
|
8
|
+
canvasTarget: CanvasTarget;
|
|
9
|
+
renderTarget: RenderTarget;
|
|
10
|
+
controls: CameraControls;
|
|
11
|
+
plane: Mesh<PlaneGeometry, MeshBasicNodeMaterial>;
|
|
12
|
+
target: Object3D | null;
|
|
13
|
+
marker: Object3D;
|
|
14
|
+
needsUpdate: boolean;
|
|
15
|
+
constructor(viewer: Viewer);
|
|
16
|
+
_update: () => Promise<void>;
|
|
17
|
+
setSize(width: number, height: number, updateStyle?: boolean): void;
|
|
18
|
+
enable(): this;
|
|
19
|
+
disable(): this;
|
|
20
|
+
dispose(): void;
|
|
21
|
+
}
|
|
22
|
+
export { Minimap };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("three/tsl"),t=require("three/webgpu"),c=require("u-space"),n=new t.Vector3,g=new t.Vector3;class v{viewer;camera;scene;canvas;canvasTarget;renderTarget;controls;plane;target;marker;needsUpdate;constructor(e){this.viewer=e,this.canvas=document.createElement("canvas"),this.canvas.style.position="absolute",this.canvas.style.top="10px",this.canvas.style.left="10px",this.canvasTarget=new t.CanvasTarget(this.canvas),this.camera=new t.OrthographicCamera,this.camera.position.z=1,this.scene=new t.Scene,this.scene.environment=e.scene.environment,this.renderTarget=new t.RenderTarget(1,1,{flipY:!1}),this.controls=new c.CameraControls(this.camera,this.canvas),this.controls.enabled=!1,this.plane=new t.Mesh(new t.PlaneGeometry(1,1).rotateX(-Math.PI/2),new t.MeshBasicNodeMaterial({colorNode:a.texture(this.renderTarget.texture,a.vec2(a.uv().x,a.uv().y.oneMinus())),transparent:!0,depthTest:!1})),this.target=null,this.marker=new t.Mesh(new t.ShapeGeometry(new t.Shape([new t.Vector2(0,.9),new t.Vector2(.6,-.9),new t.Vector2(0,-.4),new t.Vector2(-.6,-.9)])).rotateX(-Math.PI/2),new t.MeshBasicNodeMaterial({color:16711680,transparent:!0,depthTest:!1})),this.marker.scale.setScalar(5),this.marker.renderOrder=1,this.needsUpdate=!1,this.setSize(300,300)}_update=async()=>{const{renderer:e,timer:s,controls:r}=this.viewer;if(this.needsUpdate&&this.target){this.needsUpdate=!1;const o=this.target.parent;this.scene.attach(this.target);const i=new t.Box3().setFromObject(this.target),p=i.getCenter(n),h=i.getSize(g);this.plane.position.copy(p),this.plane.scale.set(h.x,1,h.z),this.scene.remove(this.plane),this.scene.remove(this.marker),this.controls.flyToBox(i,{viewpoint:"top",enableTransition:!1}),this.controls.update(s.getDelta());const m=e.getRenderTarget();e.setRenderTarget(this.renderTarget),e.render(this.scene,this.camera),e.setRenderTarget(m),o?o.attach(this.target):this.scene.remove(this.target),this.scene.add(this.plane),this.scene.add(this.marker)}r.getPosition(n),this.marker.position.x=n.x,this.marker.position.y=this.plane.position.y,this.marker.position.z=n.z,this.marker.rotation.y=r.azimuthAngle;const l=e.getCanvasTarget(),d=e.getRenderTarget();e.setCanvasTarget(this.canvasTarget),e.setRenderTarget(null),e.render(this.scene,this.camera),e.setCanvasTarget(l),e.setRenderTarget(d)};setSize(e,s,r=!0){this.canvasTarget.setSize(e,s,r),this.camera.left=-e/2,this.camera.right=e/2,this.camera.top=s/2,this.camera.bottom=-s/2,this.camera.updateProjectionMatrix(),this.renderTarget.setSize(e,s)}enable(){return this.viewer.el.appendChild(this.canvas),this.viewer.addEventListener("afterRender",this._update),this}disable(){return this.viewer.el.removeChild(this.canvas),this.viewer.removeEventListener("afterRender",this._update),this}dispose(){this.disable(),c.ObjectUtils.traverseMeshes(this.marker,e=>{e.geometry.dispose(),e.material.dispose()}),this.plane.geometry.dispose(),this.plane.material.dispose(),this.renderTarget.dispose(),this.renderTarget.texture.dispose(),this.controls.dispose()}}exports.Minimap=v;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './Minimap';
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { texture as T, vec2 as w, uv as h } from "three/tsl";
|
|
2
|
+
import { Vector3 as d, CanvasTarget as u, OrthographicCamera as f, Scene as x, RenderTarget as y, Mesh as c, PlaneGeometry as k, MeshBasicNodeMaterial as l, ShapeGeometry as z, Shape as C, Vector2 as a, Box3 as b } from "three/webgpu";
|
|
3
|
+
import { CameraControls as M, ObjectUtils as R } from "u-space";
|
|
4
|
+
const r = new d(), S = new d();
|
|
5
|
+
class j {
|
|
6
|
+
viewer;
|
|
7
|
+
camera;
|
|
8
|
+
scene;
|
|
9
|
+
canvas;
|
|
10
|
+
canvasTarget;
|
|
11
|
+
renderTarget;
|
|
12
|
+
controls;
|
|
13
|
+
plane;
|
|
14
|
+
target;
|
|
15
|
+
marker;
|
|
16
|
+
needsUpdate;
|
|
17
|
+
constructor(e) {
|
|
18
|
+
this.viewer = e, this.canvas = document.createElement("canvas"), this.canvas.style.position = "absolute", this.canvas.style.top = "10px", this.canvas.style.left = "10px", this.canvasTarget = new u(this.canvas), this.camera = new f(), this.camera.position.z = 1, this.scene = new x(), this.scene.environment = e.scene.environment, this.renderTarget = new y(1, 1, { flipY: !1 }), this.controls = new M(this.camera, this.canvas), this.controls.enabled = !1, this.plane = new c(
|
|
19
|
+
new k(1, 1).rotateX(-Math.PI / 2),
|
|
20
|
+
new l({
|
|
21
|
+
colorNode: T(this.renderTarget.texture, w(h().x, h().y.oneMinus())),
|
|
22
|
+
transparent: !0,
|
|
23
|
+
depthTest: !1
|
|
24
|
+
})
|
|
25
|
+
), this.target = null, this.marker = new c(
|
|
26
|
+
new z(
|
|
27
|
+
new C([new a(0, 0.9), new a(0.6, -0.9), new a(0, -0.4), new a(-0.6, -0.9)])
|
|
28
|
+
).rotateX(-Math.PI / 2),
|
|
29
|
+
new l({ color: 16711680, transparent: !0, depthTest: !1 })
|
|
30
|
+
), this.marker.scale.setScalar(5), this.marker.renderOrder = 1, this.needsUpdate = !1, this.setSize(300, 300);
|
|
31
|
+
}
|
|
32
|
+
_update = async () => {
|
|
33
|
+
const { renderer: e, timer: t, controls: s } = this.viewer;
|
|
34
|
+
if (this.needsUpdate && this.target) {
|
|
35
|
+
this.needsUpdate = !1;
|
|
36
|
+
const i = this.target.parent;
|
|
37
|
+
this.scene.attach(this.target);
|
|
38
|
+
const n = new b().setFromObject(this.target), g = n.getCenter(r), o = n.getSize(S);
|
|
39
|
+
this.plane.position.copy(g), this.plane.scale.set(o.x, 1, o.z), this.scene.remove(this.plane), this.scene.remove(this.marker), this.controls.flyToBox(n, {
|
|
40
|
+
viewpoint: "top",
|
|
41
|
+
enableTransition: !1
|
|
42
|
+
}), this.controls.update(t.getDelta());
|
|
43
|
+
const v = e.getRenderTarget();
|
|
44
|
+
e.setRenderTarget(this.renderTarget), e.render(this.scene, this.camera), e.setRenderTarget(v), i ? i.attach(this.target) : this.scene.remove(this.target), this.scene.add(this.plane), this.scene.add(this.marker);
|
|
45
|
+
}
|
|
46
|
+
s.getPosition(r), this.marker.position.x = r.x, this.marker.position.y = this.plane.position.y, this.marker.position.z = r.z, this.marker.rotation.y = s.azimuthAngle;
|
|
47
|
+
const p = e.getCanvasTarget(), m = e.getRenderTarget();
|
|
48
|
+
e.setCanvasTarget(this.canvasTarget), e.setRenderTarget(null), e.render(this.scene, this.camera), e.setCanvasTarget(p), e.setRenderTarget(m);
|
|
49
|
+
};
|
|
50
|
+
setSize(e, t, s = !0) {
|
|
51
|
+
this.canvasTarget.setSize(e, t, s), this.camera.left = -e / 2, this.camera.right = e / 2, this.camera.top = t / 2, this.camera.bottom = -t / 2, this.camera.updateProjectionMatrix(), this.renderTarget.setSize(e, t);
|
|
52
|
+
}
|
|
53
|
+
enable() {
|
|
54
|
+
return this.viewer.el.appendChild(this.canvas), this.viewer.addEventListener("afterRender", this._update), this;
|
|
55
|
+
}
|
|
56
|
+
disable() {
|
|
57
|
+
return this.viewer.el.removeChild(this.canvas), this.viewer.removeEventListener("afterRender", this._update), this;
|
|
58
|
+
}
|
|
59
|
+
dispose() {
|
|
60
|
+
this.disable(), R.traverseMeshes(this.marker, (e) => {
|
|
61
|
+
e.geometry.dispose(), e.material.dispose();
|
|
62
|
+
}), this.plane.geometry.dispose(), this.plane.material.dispose(), this.renderTarget.dispose(), this.renderTarget.texture.dispose(), this.controls.dispose();
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
export {
|
|
66
|
+
j as Minimap
|
|
67
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Viewer } from 'u-space';
|
|
2
|
+
import { Globe } from './Globe';
|
|
3
|
+
declare class ArcgisTilesRenderer extends Globe {
|
|
4
|
+
viewer: Viewer;
|
|
5
|
+
loedTilesSets: Set<() => void>;
|
|
6
|
+
constructor(viewer: Viewer);
|
|
7
|
+
render: () => void;
|
|
8
|
+
beforeRenderHandler: () => void;
|
|
9
|
+
enable(): this;
|
|
10
|
+
disable(): this;
|
|
11
|
+
invalidate(lon: number, lat: number, alt: number): () => void;
|
|
12
|
+
dispose(): void;
|
|
13
|
+
}
|
|
14
|
+
export { ArcgisTilesRenderer };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { TilesRenderer } from '3d-tiles-renderer';
|
|
2
|
+
import { TileCompressionPlugin, UpdateOnChangePlugin, ReorientationPlugin, XYZTilesPlugin } from '3d-tiles-renderer/plugins';
|
|
3
|
+
import { TilesFadePlugin } from './plugins/fade/TilesFadePlugin';
|
|
4
|
+
import { TileMaterialReplacementPlugin } from './plugins/TileMaterialReplacementPlugin';
|
|
5
|
+
declare class Globe {
|
|
6
|
+
tiles: TilesRenderer;
|
|
7
|
+
tileCompressionPlugin: TileCompressionPlugin;
|
|
8
|
+
updateOnChangePlugin: UpdateOnChangePlugin;
|
|
9
|
+
reorientationPlugin: ReorientationPlugin;
|
|
10
|
+
xyzTilesPlugin: XYZTilesPlugin;
|
|
11
|
+
tilesFadePlugin: TilesFadePlugin;
|
|
12
|
+
tileMaterialReplacementPlugin: TileMaterialReplacementPlugin;
|
|
13
|
+
constructor();
|
|
14
|
+
_initTilesRenderer(): TilesRenderer<import("3d-tiles-renderer").TilesRendererEventMap>;
|
|
15
|
+
_initTileCompressionPlugin(): TileCompressionPlugin;
|
|
16
|
+
_initUpdateOnChangePlugin(): UpdateOnChangePlugin;
|
|
17
|
+
_initReorientationPlugin(): ReorientationPlugin;
|
|
18
|
+
_initXYZTilesPlugin(): XYZTilesPlugin;
|
|
19
|
+
_initTilesFadePlugin(): TilesFadePlugin;
|
|
20
|
+
_initTileMaterialReplacementPlugin(): TileMaterialReplacementPlugin;
|
|
21
|
+
}
|
|
22
|
+
export { Globe };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("three/webgpu"),v=require("3d-tiles-renderer"),l=require("3d-tiles-renderer/plugins"),f=require("3d-tiles-renderer/src/three/plugins/fade/FadeMaterialManager.js"),M=require("3d-tiles-renderer/src/three/plugins/fade/wrapFadeMaterial.js"),s=require("three/tsl"),o=require("@takram/three-geospatial"),c=require("@takram/three-geospatial/webgpu"),u=Symbol("FADE_PARAMS"),h=c.FnLayout({name:"bayerDither2x2",type:"float",inputs:[{name:"v",type:"vec2"}]})(([t])=>(o.reinterpretType(t),t.y.mul(3).add(t.x.mul(2)).mod(4))),T=c.FnLayout({name:"bayerDither4x4",type:"float",inputs:[{name:"v",type:"vec2"}]})(([t])=>{o.reinterpretType(t);const e=t.mod(2),i=t.mod(4).mul(.5).floor();return h(e).mul(4).add(h(i))}),y=s.uniform(0).onObjectUpdate(({material:t})=>t!=null?t?.params?.fadeIn.value??0:0),R=s.uniform(0).onObjectUpdate(({material:t})=>t!=null?t?.params?.fadeOut.value??0:0),w=s.Fn(()=>{const i=T(s.screenCoordinate.xy.mod(4).floor()).add(.5).div(16);return s.If(i.greaterThanEqual(y),()=>{s.Discard()}),s.If(i.lessThan(R),()=>{s.Discard()}),s.output})();function E(t){if(o.reinterpretType(t),t[u]!=null)return t[u];const e={fadeIn:{value:0},fadeOut:{value:0},fadeTexture:{value:null}};let i=0;return t.params=e,t.defines={get FEATURE_FADE(){return i},set FEATURE_FADE(r){r!==i&&(i=r,t.outputNode=r===1?w:null)}},e}class F extends f.FadeMaterialManager{prepareMaterial(e){const i=this._fadeParams;if(i.has(e))return;let r;e instanceof n.NodeMaterial?r=E(e):r=M.wrapFadeMaterial(e,e.onBeforeCompile),i.set(e,r)}}class _ extends l.TilesFadePlugin{constructor(...e){super(...e),this._fadeMaterialManager=new F}}function p(t,e){const i=t.material;if(Array.isArray(i))throw new Error("Multiple materials are not supported yet.");const r=new e;"map"in i&&i.map!=null&&"map"in r&&(o.reinterpretType(i.map),o.reinterpretType(r.map),i.map.flipY=!1,r.map=i.map.clone()),t.material=r,i.dispose()}class b{tiles;overrideMaterial;constructor(e=n.MeshBasicNodeMaterial){this.overrideMaterial=e}init(e){this.tiles=e,e.group.traverse(i=>{i instanceof n.Mesh&&p(i,this.overrideMaterial)}),e.addEventListener("load-model",this.handleLoadModel),e.addEventListener("dispose-model",this.handleDisposeModel)}handleLoadModel=({scene:e})=>{e.traverse(i=>{i instanceof n.Mesh&&p(i,this.overrideMaterial)})};handleDisposeModel=({scene:e})=>{e.traverse(i=>{i instanceof n.Mesh&&i.material.dispose()})};dispose(){this.tiles?.removeEventListener("load-model",this.handleLoadModel),this.tiles?.removeEventListener("dispose-model",this.handleDisposeModel)}}class g{tiles;tileCompressionPlugin;updateOnChangePlugin;reorientationPlugin;xyzTilesPlugin;tilesFadePlugin;tileMaterialReplacementPlugin;constructor(){this.tiles=this._initTilesRenderer(),this.tileCompressionPlugin=this._initTileCompressionPlugin(),this.updateOnChangePlugin=this._initUpdateOnChangePlugin(),this.reorientationPlugin=this._initReorientationPlugin(),this.xyzTilesPlugin=this._initXYZTilesPlugin(),this.tilesFadePlugin=this._initTilesFadePlugin(),this.tileMaterialReplacementPlugin=this._initTileMaterialReplacementPlugin()}_initTilesRenderer(){const e=new v.TilesRenderer;return e.maxDepth=20,e.errorTarget=1,e}_initTileCompressionPlugin(){const e=new l.TileCompressionPlugin;return this.tiles.registerPlugin(e),e}_initUpdateOnChangePlugin(){const e=new l.UpdateOnChangePlugin;return this.tiles.registerPlugin(e),e}_initReorientationPlugin(){const e=new l.ReorientationPlugin;return this.tiles.registerPlugin(e),e}_initXYZTilesPlugin(){const e=new l.XYZTilesPlugin({center:!0,shape:"ellipsoid",url:"https://server.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}"});return this.tiles.registerPlugin(e),e}_initTilesFadePlugin(){const e=new _;return this.tiles.registerPlugin(e),e}_initTileMaterialReplacementPlugin(){const e=new b(n.MeshBasicNodeMaterial);return this.tiles.registerPlugin(e),e}}class L extends g{viewer;loedTilesSets=new Set;constructor(e){super(),this.viewer=e,this.tiles.addEventListener("needs-render",this.render),this.tiles.addEventListener("needs-update",this.render)}render=()=>{this.viewer.render()};beforeRenderHandler=()=>{this.viewer.camera.updateMatrixWorld(),this.tiles.setCamera(this.viewer.camera),this.tiles.setResolutionFromRenderer(this.viewer.camera,this.viewer.renderer),this.tiles.update()};enable(){return this.viewer.scene.add(this.tiles.group),this.viewer.addEventListener("beforeRender",this.beforeRenderHandler),this}disable(){return this.viewer.scene.remove(this.tiles.group),this.viewer.removeEventListener("beforeRender",this.beforeRenderHandler),this}invalidate(e,i,r){const a=()=>{const m=n.MathUtils.degToRad(i),P=n.MathUtils.degToRad(e);this.reorientationPlugin.transformLatLonHeightToOrigin(m,P,r),this.render(),d()},d=()=>{this.tiles.removeEventListener("load-root-tileset",a),this.loedTilesSets.delete(a)};return this.tiles.addEventListener("load-root-tileset",a),this.loedTilesSets.add(a),this.tiles.root&&a(),d}dispose(){this.disable(),this.loedTilesSets.forEach(e=>this.tiles.removeEventListener("load-root-tileset",e)),this.loedTilesSets.clear(),this.tiles.removeEventListener("needs-render",this.render),this.tiles.removeEventListener("needs-update",this.render),this.tiles.dispose()}}exports.ArcgisTilesRenderer=L;exports.Globe=g;
|