easy-three-utils 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.
Files changed (166) hide show
  1. package/package.json +12 -0
  2. package/src/common/index.ts +24 -0
  3. package/src/common/useLine2.ts +87 -0
  4. package/src/common/useLoader.ts +184 -0
  5. package/src/common/useLocationCalculator.ts +145 -0
  6. package/src/common/useMark.ts +42 -0
  7. package/src/common/useTween.ts +86 -0
  8. package/src/core/basic/camera.ts +28 -0
  9. package/src/core/basic/clock.ts +11 -0
  10. package/src/core/basic/control.ts +32 -0
  11. package/src/core/basic/index.ts +35 -0
  12. package/src/core/basic/labelRenderer.ts +26 -0
  13. package/src/core/basic/light.ts +63 -0
  14. package/src/core/basic/renderer.ts +37 -0
  15. package/src/core/basic/scene.ts +11 -0
  16. package/src/core/basic/stats.ts +16 -0
  17. package/src/core/event.ts +74 -0
  18. package/src/core/index.ts +11 -0
  19. package/src/core/main.ts +389 -0
  20. package/src/draco/README.md +32 -0
  21. package/src/draco/draco_decoder.js +34 -0
  22. package/src/draco/draco_decoder.wasm +0 -0
  23. package/src/draco/draco_encoder.js +33 -0
  24. package/src/draco/draco_wasm_wrapper.js +117 -0
  25. package/src/draco/gltf/draco_decoder.js +33 -0
  26. package/src/draco/gltf/draco_decoder.wasm +0 -0
  27. package/src/draco/gltf/draco_encoder.js +33 -0
  28. package/src/draco/gltf/draco_wasm_wrapper.js +116 -0
  29. package/src/tileRenderer/base/Tile.d.ts +50 -0
  30. package/src/tileRenderer/base/TileBase.d.ts +76 -0
  31. package/src/tileRenderer/base/TileInternal.d.ts +36 -0
  32. package/src/tileRenderer/base/TilesRendererBase.d.ts +35 -0
  33. package/src/tileRenderer/base/TilesRendererBase.js +847 -0
  34. package/src/tileRenderer/base/Tileset.d.ts +66 -0
  35. package/src/tileRenderer/base/constants.d.ts +6 -0
  36. package/src/tileRenderer/base/constants.js +16 -0
  37. package/src/tileRenderer/base/loaders/B3DMLoaderBase.d.ts +18 -0
  38. package/src/tileRenderer/base/loaders/B3DMLoaderBase.js +85 -0
  39. package/src/tileRenderer/base/loaders/CMPTLoaderBase.d.ts +22 -0
  40. package/src/tileRenderer/base/loaders/CMPTLoaderBase.js +61 -0
  41. package/src/tileRenderer/base/loaders/I3DMLoaderBase.d.ts +21 -0
  42. package/src/tileRenderer/base/loaders/I3DMLoaderBase.js +130 -0
  43. package/src/tileRenderer/base/loaders/LoaderBase.d.ts +10 -0
  44. package/src/tileRenderer/base/loaders/LoaderBase.js +73 -0
  45. package/src/tileRenderer/base/loaders/PNTSLoaderBase.d.ts +17 -0
  46. package/src/tileRenderer/base/loaders/PNTSLoaderBase.js +82 -0
  47. package/src/tileRenderer/base/plugins/ImplicitTilingPlugin.js +12 -0
  48. package/src/tileRenderer/base/traverseFunctions.js +468 -0
  49. package/src/tileRenderer/gltf.js +144 -0
  50. package/src/tileRenderer/index.d.ts +41 -0
  51. package/src/tileRenderer/index.js +44 -0
  52. package/src/tileRenderer/plugins/README.md +578 -0
  53. package/src/tileRenderer/plugins/base/ImplicitTilingPlugin.d.ts +2 -0
  54. package/src/tileRenderer/plugins/base/ImplicitTilingPlugin.js +84 -0
  55. package/src/tileRenderer/plugins/base/SUBTREELoader.js +876 -0
  56. package/src/tileRenderer/plugins/index.d.ts +17 -0
  57. package/src/tileRenderer/plugins/index.js +17 -0
  58. package/src/tileRenderer/plugins/three/CesiumIonAuthPlugin.d.ts +9 -0
  59. package/src/tileRenderer/plugins/three/CesiumIonAuthPlugin.js +175 -0
  60. package/src/tileRenderer/plugins/three/DebugTilesPlugin.d.ts +29 -0
  61. package/src/tileRenderer/plugins/three/DebugTilesPlugin.js +677 -0
  62. package/src/tileRenderer/plugins/three/GLTFExtensionsPlugin.d.ts +18 -0
  63. package/src/tileRenderer/plugins/three/GLTFExtensionsPlugin.js +86 -0
  64. package/src/tileRenderer/plugins/three/GoogleAttributionsManager.js +62 -0
  65. package/src/tileRenderer/plugins/three/GoogleCloudAuthPlugin.d.ts +5 -0
  66. package/src/tileRenderer/plugins/three/GoogleCloudAuthPlugin.js +200 -0
  67. package/src/tileRenderer/plugins/three/ReorientationPlugin.d.ts +12 -0
  68. package/src/tileRenderer/plugins/three/ReorientationPlugin.js +136 -0
  69. package/src/tileRenderer/plugins/three/TileCompressionPlugin.d.ts +18 -0
  70. package/src/tileRenderer/plugins/three/TileCompressionPlugin.js +223 -0
  71. package/src/tileRenderer/plugins/three/UpdateOnChangePlugin.d.ts +5 -0
  72. package/src/tileRenderer/plugins/three/UpdateOnChangePlugin.js +87 -0
  73. package/src/tileRenderer/plugins/three/fade/FadeManager.js +370 -0
  74. package/src/tileRenderer/plugins/three/fade/TilesFadePlugin.d.ts +9 -0
  75. package/src/tileRenderer/plugins/three/fade/TilesFadePlugin.js +318 -0
  76. package/src/tileRenderer/plugins/three/gltf/GLTFCesiumRTCExtension.d.ts +5 -0
  77. package/src/tileRenderer/plugins/three/gltf/GLTFCesiumRTCExtension.js +27 -0
  78. package/src/tileRenderer/plugins/three/gltf/GLTFMeshFeaturesExtension.d.ts +30 -0
  79. package/src/tileRenderer/plugins/three/gltf/GLTFMeshFeaturesExtension.js +76 -0
  80. package/src/tileRenderer/plugins/three/gltf/GLTFStructuralMetadataExtension.d.ts +49 -0
  81. package/src/tileRenderer/plugins/three/gltf/GLTFStructuralMetadataExtension.js +147 -0
  82. package/src/tileRenderer/plugins/three/gltf/metadata/classes/ClassProperty.js +149 -0
  83. package/src/tileRenderer/plugins/three/gltf/metadata/classes/MeshFeatures.js +215 -0
  84. package/src/tileRenderer/plugins/three/gltf/metadata/classes/PropertyAttributeAccessor.js +107 -0
  85. package/src/tileRenderer/plugins/three/gltf/metadata/classes/PropertySetAccessor.js +45 -0
  86. package/src/tileRenderer/plugins/three/gltf/metadata/classes/PropertyTableAccessor.js +209 -0
  87. package/src/tileRenderer/plugins/three/gltf/metadata/classes/PropertyTextureAccessor.js +244 -0
  88. package/src/tileRenderer/plugins/three/gltf/metadata/classes/StructuralMetadata.js +202 -0
  89. package/src/tileRenderer/plugins/three/gltf/metadata/math/Matrix2.js +55 -0
  90. package/src/tileRenderer/plugins/three/gltf/metadata/utilities/ClassPropertyHelpers.js +495 -0
  91. package/src/tileRenderer/plugins/three/gltf/metadata/utilities/TexCoordUtilities.js +72 -0
  92. package/src/tileRenderer/plugins/three/gltf/metadata/utilities/TextureReadUtility.js +154 -0
  93. package/src/tileRenderer/plugins/three/objects/EllipsoidRegionHelper.js +186 -0
  94. package/src/tileRenderer/plugins/three/objects/SphereHelper.js +55 -0
  95. package/src/tileRenderer/r3f/README.md +238 -0
  96. package/src/tileRenderer/r3f/components/CameraControls.jsx +132 -0
  97. package/src/tileRenderer/r3f/components/CameraTransition.jsx +177 -0
  98. package/src/tileRenderer/r3f/components/CanvasDOMOverlay.jsx +54 -0
  99. package/src/tileRenderer/r3f/components/CompassGizmo.jsx +260 -0
  100. package/src/tileRenderer/r3f/components/TilesAttributionOverlay.jsx +110 -0
  101. package/src/tileRenderer/r3f/components/TilesRenderer.jsx +239 -0
  102. package/src/tileRenderer/r3f/index.jsx +6 -0
  103. package/src/tileRenderer/r3f/utilities/useForceUpdate.jsx +8 -0
  104. package/src/tileRenderer/r3f/utilities/useObjectDep.jsx +59 -0
  105. package/src/tileRenderer/r3f/utilities/useOptions.jsx +143 -0
  106. package/src/tileRenderer/three/DebugTilesRenderer.d.ts +28 -0
  107. package/src/tileRenderer/three/DebugTilesRenderer.js +58 -0
  108. package/src/tileRenderer/three/TilesGroup.d.ts +9 -0
  109. package/src/tileRenderer/three/TilesGroup.js +91 -0
  110. package/src/tileRenderer/three/TilesRenderer.d.ts +37 -0
  111. package/src/tileRenderer/three/TilesRenderer.js +1049 -0
  112. package/src/tileRenderer/three/controls/CameraTransitionManager.js +305 -0
  113. package/src/tileRenderer/three/controls/EnvironmentControls.js +1295 -0
  114. package/src/tileRenderer/three/controls/GlobeControls.js +684 -0
  115. package/src/tileRenderer/three/controls/PivotPointMesh.js +104 -0
  116. package/src/tileRenderer/three/controls/PointerTracker.js +257 -0
  117. package/src/tileRenderer/three/controls/utils.js +113 -0
  118. package/src/tileRenderer/three/loaders/B3DMLoader.d.ts +26 -0
  119. package/src/tileRenderer/three/loaders/B3DMLoader.js +85 -0
  120. package/src/tileRenderer/three/loaders/CMPTLoader.d.ts +19 -0
  121. package/src/tileRenderer/three/loaders/CMPTLoader.js +97 -0
  122. package/src/tileRenderer/three/loaders/GLTFExtensionLoader.d.ts +11 -0
  123. package/src/tileRenderer/three/loaders/GLTFExtensionLoader.js +68 -0
  124. package/src/tileRenderer/three/loaders/I3DMLoader.d.ts +26 -0
  125. package/src/tileRenderer/three/loaders/I3DMLoader.js +256 -0
  126. package/src/tileRenderer/three/loaders/PNTSLoader.d.ts +25 -0
  127. package/src/tileRenderer/three/loaders/PNTSLoader.js +202 -0
  128. package/src/tileRenderer/three/loaders/gltf/GLTFCesiumRTCExtension.js +12 -0
  129. package/src/tileRenderer/three/loaders/gltf/GLTFMeshFeaturesExtension.js +12 -0
  130. package/src/tileRenderer/three/loaders/gltf/GLTFStructuralMetadataExtension.js +12 -0
  131. package/src/tileRenderer/three/math/Ellipsoid.d.ts +31 -0
  132. package/src/tileRenderer/three/math/Ellipsoid.js +337 -0
  133. package/src/tileRenderer/three/math/EllipsoidRegion.d.ts +23 -0
  134. package/src/tileRenderer/three/math/EllipsoidRegion.js +178 -0
  135. package/src/tileRenderer/three/math/ExtendedFrustum.js +65 -0
  136. package/src/tileRenderer/three/math/GeoConstants.d.ts +4 -0
  137. package/src/tileRenderer/three/math/GeoConstants.js +5 -0
  138. package/src/tileRenderer/three/math/GeoUtils.d.ts +9 -0
  139. package/src/tileRenderer/three/math/GeoUtils.js +106 -0
  140. package/src/tileRenderer/three/math/OBB.js +179 -0
  141. package/src/tileRenderer/three/math/TileBoundingVolume.js +272 -0
  142. package/src/tileRenderer/three/plugins/CesiumIonAuthPlugin.js +12 -0
  143. package/src/tileRenderer/three/plugins/DebugTilesPlugin.js +26 -0
  144. package/src/tileRenderer/three/plugins/GoogleCloudAuthPlugin.js +12 -0
  145. package/src/tileRenderer/three/raycastTraverse.js +178 -0
  146. package/src/tileRenderer/three/renderers/CesiumIonTilesRenderer.d.ts +14 -0
  147. package/src/tileRenderer/three/renderers/CesiumIonTilesRenderer.js +21 -0
  148. package/src/tileRenderer/three/renderers/GoogleTilesRenderer.d.ts +43 -0
  149. package/src/tileRenderer/three/renderers/GoogleTilesRenderer.js +48 -0
  150. package/src/tileRenderer/three/utilities.js +54 -0
  151. package/src/tileRenderer/utilities/BatchTable.d.ts +24 -0
  152. package/src/tileRenderer/utilities/BatchTable.js +82 -0
  153. package/src/tileRenderer/utilities/BatchTableHierarchyExtension.js +127 -0
  154. package/src/tileRenderer/utilities/FeatureTable.d.ts +30 -0
  155. package/src/tileRenderer/utilities/FeatureTable.js +159 -0
  156. package/src/tileRenderer/utilities/LRUCache.d.ts +8 -0
  157. package/src/tileRenderer/utilities/LRUCache.js +385 -0
  158. package/src/tileRenderer/utilities/PriorityQueue.d.ts +16 -0
  159. package/src/tileRenderer/utilities/PriorityQueue.js +137 -0
  160. package/src/tileRenderer/utilities/arrayToString.js +7 -0
  161. package/src/tileRenderer/utilities/readMagicBytes.js +29 -0
  162. package/src/tileRenderer/utilities/rgb565torgb.js +22 -0
  163. package/src/tileRenderer/utilities/urlExtension.js +34 -0
  164. package/tsconfig.json +42 -0
  165. package/tsconfig.node.json +11 -0
  166. package/typings/three.d.ts +27 -0
@@ -0,0 +1,86 @@
1
+ import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
2
+ import { GLTFStructuralMetadataExtension } from './gltf/GLTFStructuralMetadataExtension.js';
3
+ import { GLTFMeshFeaturesExtension } from './gltf/GLTFMeshFeaturesExtension.js';
4
+ import { GLTFCesiumRTCExtension } from './gltf/GLTFCesiumRTCExtension.js';
5
+
6
+ export class GLTFExtensionsPlugin {
7
+
8
+ constructor( options ) {
9
+
10
+ options = {
11
+ metadata: true,
12
+ rtc: true,
13
+
14
+ plugins: [],
15
+
16
+ dracoLoader: null,
17
+ ktxLoader: null,
18
+ autoDispose: true,
19
+ ...options,
20
+ };
21
+
22
+ this.tiles = null;
23
+
24
+ this.metadata = options.metadata;
25
+ this.rtc = options.rtc;
26
+ this.plugins = options.plugins;
27
+
28
+ this.dracoLoader = options.dracoLoader;
29
+ this.ktxLoader = options.ktxLoader;
30
+ this._gltfRegex = /\.(gltf|glb)$/g;
31
+ this._dracoRegex = /\.drc$/g;
32
+ this._loader = null;
33
+
34
+ }
35
+
36
+ init( tiles ) {
37
+
38
+ const loader = new GLTFLoader( tiles.manager );
39
+ if ( this.dracoLoader ) {
40
+
41
+ loader.setDRACOLoader( this.dracoLoader );
42
+ tiles.manager.addHandler( this._dracoRegex, this.dracoLoader );
43
+
44
+ }
45
+
46
+ if ( this.ktxLoader ) {
47
+
48
+ loader.setKTX2Loader( this.ktxLoader );
49
+
50
+ }
51
+
52
+ if ( this.rtc ) {
53
+
54
+ loader.register( () => new GLTFCesiumRTCExtension() );
55
+
56
+ }
57
+
58
+ if ( this.metadata ) {
59
+
60
+ loader.register( () => new GLTFStructuralMetadataExtension() );
61
+ loader.register( () => new GLTFMeshFeaturesExtension() );
62
+
63
+ }
64
+
65
+ this.plugins.forEach( plugin => loader.register( plugin ) );
66
+
67
+ tiles.manager.addHandler( this._gltfRegex, loader );
68
+ this.tiles = tiles;
69
+ this._loader = loader;
70
+
71
+ }
72
+
73
+ dispose() {
74
+
75
+ this.tiles.manager.removeHandler( this._gltfRegex );
76
+ this.tiles.manager.removeHandler( this._dracoRegex );
77
+ if ( this.autoDispose ) {
78
+
79
+ this.ktxLoader.dispose();
80
+ this.dracoLoader.dispose();
81
+
82
+ }
83
+
84
+ }
85
+
86
+ }
@@ -0,0 +1,62 @@
1
+ export class GoogleAttributionsManager {
2
+
3
+ constructor() {
4
+
5
+ this.creditsCount = {};
6
+
7
+ }
8
+
9
+ _adjustAttributions( line, add ) {
10
+
11
+ const creditsCount = this.creditsCount;
12
+ const tokens = line.split( /;/g );
13
+ for ( let i = 0, l = tokens.length; i < l; i ++ ) {
14
+
15
+ const t = tokens[ i ];
16
+ if ( ! ( t in creditsCount ) ) {
17
+
18
+ creditsCount[ t ] = 0;
19
+
20
+ }
21
+
22
+ creditsCount[ t ] += add ? 1 : - 1;
23
+
24
+ if ( creditsCount[ t ] <= 0 ) {
25
+
26
+ delete creditsCount[ t ];
27
+
28
+ }
29
+
30
+ }
31
+
32
+ }
33
+
34
+ addAttributions( line ) {
35
+
36
+ this._adjustAttributions( line, true );
37
+
38
+ }
39
+
40
+ removeAttributions( line ) {
41
+
42
+ this._adjustAttributions( line, false );
43
+
44
+ }
45
+
46
+ toString() {
47
+
48
+ // attribution guidelines: https://developers.google.com/maps/documentation/tile/create-renderer#display-attributions
49
+
50
+ const sortedByCount = Object.entries( this.creditsCount ).sort( ( a, b ) => {
51
+
52
+ const countA = a[ 1 ];
53
+ const countB = b[ 1 ];
54
+ return countB - countA; // Descending order
55
+
56
+ } );
57
+
58
+ return sortedByCount.map( pair => pair[ 0 ] ).join( '; ' );
59
+
60
+ }
61
+
62
+ }
@@ -0,0 +1,5 @@
1
+ export class GoogleCloudAuthPlugin {
2
+
3
+ constructor(options: { url: string });
4
+
5
+ }
@@ -0,0 +1,200 @@
1
+ import { traverseSet } from '../../base/traverseFunctions.js';
2
+ import { GoogleAttributionsManager } from './GoogleAttributionsManager.js';
3
+
4
+ function getSessionToken(root) {
5
+
6
+ let sessionToken = null;
7
+ traverseSet(root, tile => {
8
+
9
+ if (tile.content && tile.content.uri) {
10
+
11
+ const [, params] = tile.content.uri.split('?');
12
+ sessionToken = new URLSearchParams(params).get('session');
13
+ return true;
14
+
15
+ }
16
+
17
+ return false;
18
+
19
+ });
20
+
21
+ return sessionToken;
22
+
23
+ }
24
+
25
+ export class GoogleCloudAuthPlugin {
26
+
27
+ constructor({ url, autoRefreshToken = false, logoUrl = null, useRecommendedSettings = true }) {
28
+
29
+ this.name = 'GOOGLE_CLOUD_AUTH_PLUGIN';
30
+ this.baseUrl = url;
31
+ this.autoRefreshToken = autoRefreshToken;
32
+ this.useRecommendedSettings = useRecommendedSettings;
33
+ this.logoUrl = logoUrl;
34
+ this.sessionToken = null;
35
+ this.tiles = null;
36
+
37
+ this._onLoadCallback = null;
38
+ this._visibilityChangeCallback = null;
39
+ this._tokenRefreshPromise = null;
40
+ this._attributionsManager = new GoogleAttributionsManager();
41
+ this._logoAttribution = {
42
+ value: '',
43
+ type: 'image',
44
+ collapsible: false,
45
+ };
46
+ this._attribution = {
47
+ value: '',
48
+ type: 'string',
49
+ collapsible: true,
50
+ };
51
+
52
+ }
53
+
54
+ init(tiles) {
55
+
56
+ if (tiles == null) {
57
+
58
+ return;
59
+
60
+ }
61
+
62
+ // reset the tiles in case this plugin was removed and re-added
63
+ tiles.resetFailedTiles();
64
+
65
+ if (tiles.rootURL == null) {
66
+
67
+ tiles.rootURL = this.baseUrl;
68
+
69
+ }
70
+
71
+ if (this.useRecommendedSettings) {
72
+
73
+ // This plugin changes below values to be more efficient for the photorealistic tiles
74
+ tiles.parseQueue.maxJobs = 10;
75
+ tiles.downloadQueue.maxJobs = 30;
76
+ tiles.errorTarget = 40;
77
+
78
+ }
79
+
80
+ this.tiles = tiles;
81
+ this._onLoadCallback = ({ tileSet }) => {
82
+
83
+ // the first tile set loaded will be the root
84
+ this.sessionToken = getSessionToken(tileSet.root);
85
+
86
+ // clear the callback once the root is loaded
87
+ tiles.removeEventListener('load-tile-set', this._onLoadCallback);
88
+
89
+ };
90
+
91
+ this._visibilityChangeCallback = ({ tile, visible }) => {
92
+
93
+ const copyright = tile.cached.metadata.asset.copyright || '';
94
+ if (visible) {
95
+
96
+ this._attributionsManager.addAttributions(copyright);
97
+
98
+ } else {
99
+
100
+ this._attributionsManager.removeAttributions(copyright);
101
+
102
+ }
103
+
104
+ };
105
+
106
+ tiles.addEventListener('load-tile-set', this._onLoadCallback);
107
+ tiles.addEventListener('tile-visibility-change', this._visibilityChangeCallback);
108
+
109
+ }
110
+
111
+ getAttributions(target) {
112
+
113
+ if (this.tiles.visibleTiles.size > 0) {
114
+
115
+ if (this.logoUrl) {
116
+
117
+ this._logoAttribution.value = this.logoUrl;
118
+ target.push(this._logoAttribution);
119
+
120
+ }
121
+
122
+ this._attribution.value = this._attributionsManager.toString();
123
+ target.push(this._attribution);
124
+
125
+ }
126
+
127
+ }
128
+
129
+ preprocessURL(uri) {
130
+
131
+ uri = new URL(uri);
132
+ if (/^http/.test(uri.protocol)) {
133
+
134
+ // uri.searchParams.append('key', this.apiToken);
135
+ if (this.sessionToken !== null) {
136
+
137
+ uri.searchParams.append('session', this.sessionToken);
138
+
139
+ }
140
+
141
+ }
142
+ return uri.toString();
143
+
144
+ }
145
+
146
+ dispose() {
147
+
148
+ const { tiles } = this;
149
+ tiles.removeEventListener('load-tile-set', this._onLoadCallback);
150
+ tiles.removeEventListener('tile-visibility-change', this._visibilityChangeCallback);
151
+
152
+ }
153
+
154
+ async fetchData(uri, options) {
155
+
156
+ // wait for the token to refresh if loading
157
+ if (this._tokenRefreshPromise !== null) {
158
+
159
+ await this._tokenRefreshPromise;
160
+ uri = this.preprocessURL(uri);
161
+
162
+ }
163
+
164
+ const res = await fetch(uri, options);
165
+ if (res.status >= 400 && res.status <= 499 && this.autoRefreshToken) {
166
+
167
+ await this._refreshToken(options);
168
+ return fetch(this.preprocessURL(uri), options);
169
+
170
+ } else {
171
+
172
+ return res;
173
+
174
+ }
175
+
176
+ }
177
+
178
+ _refreshToken(options) {
179
+
180
+ if (this._tokenRefreshPromise === null) {
181
+
182
+ // refetch the root if the token has expired
183
+ const rootURL = new URL(this.tiles.rootURL);
184
+ // rootURL.searchParams.append('key', this.apiToken);
185
+ this._tokenRefreshPromise = fetch(rootURL, options)
186
+ .then(res => res.json())
187
+ .then(res => {
188
+
189
+ this.sessionToken = getSessionToken(res.root);
190
+ this._tokenRefreshPromise = null;
191
+
192
+ });
193
+
194
+ }
195
+
196
+ return this._tokenRefreshPromise;
197
+
198
+ }
199
+
200
+ }
@@ -0,0 +1,12 @@
1
+ export class GLTFExtensionsPlugin {
2
+
3
+ constructor( options: {
4
+ up: '+x' | '-x' | '+y' | '-y' | '+z' | '-z',
5
+ recenter: Boolean,
6
+
7
+ lat: Number | null,
8
+ lon: Number | null,
9
+ height: Number,
10
+ } );
11
+
12
+ }
@@ -0,0 +1,136 @@
1
+ import { Sphere, Vector3 } from 'three';
2
+ import { OBJECT_FRAME } from '../../three/math/Ellipsoid.js';
3
+
4
+ const sphere = /* @__PURE__ */ new Sphere();
5
+ const vec = /* @__PURE__ */ new Vector3();
6
+ export class ReorientationPlugin {
7
+
8
+ constructor( options ) {
9
+
10
+ options = {
11
+ up: '+z',
12
+ recenter: true,
13
+
14
+ lat: null,
15
+ lon: null,
16
+ height: 0,
17
+ ...options,
18
+ };
19
+
20
+ this.tiles = null;
21
+
22
+ this.up = options.up.toLowerCase().replace( /\s+/, '' );
23
+ this.lat = options.lat;
24
+ this.lon = options.lon;
25
+ this.height = options.height;
26
+ this.recenter = options.recenter;
27
+ this._callback = null;
28
+
29
+ }
30
+
31
+ init( tiles ) {
32
+
33
+ this.tiles = tiles;
34
+
35
+ this._callback = () => {
36
+
37
+ const { up, lat, lon, height, recenter } = this;
38
+
39
+ if ( lat !== null && lon !== null ) {
40
+
41
+ // if the latitude and longitude are provided then remove the position offset
42
+ this.transformLatLonHeightToOrigin( lat, lon, height );
43
+
44
+ } else {
45
+
46
+ const { ellipsoid } = tiles;
47
+ const minRadii = Math.min( ...ellipsoid.radius );
48
+ tiles.getBoundingSphere( sphere );
49
+ if ( sphere.center.length() > minRadii * 0.5 ) {
50
+
51
+ // otherwise see if this is possibly a tile set on the surface of the globe based on the positioning
52
+ const cart = {};
53
+ ellipsoid.getPositionToCartographic( sphere.center, cart );
54
+ this.transformLatLonHeightToOrigin( cart.lat, cart.lon, cart.height );
55
+
56
+ } else {
57
+
58
+ // lastly fall back to orienting the up direction to +Y
59
+ const group = tiles.group;
60
+ group.rotation.set( 0, 0, 0 );
61
+ switch ( up ) {
62
+
63
+ case 'x': case '+x':
64
+ group.rotation.z = Math.PI / 2;
65
+ break;
66
+ case '-x':
67
+ group.rotation.z = - Math.PI / 2;
68
+ break;
69
+
70
+ case 'y': case '+y':
71
+ break;
72
+ case '-y':
73
+ group.rotation.z = Math.PI;
74
+ break;
75
+
76
+ case 'z': case '+z':
77
+ group.rotation.x = - Math.PI / 2;
78
+ break;
79
+ case '-z':
80
+ group.rotation.x = Math.PI / 2;
81
+ break;
82
+
83
+ }
84
+
85
+ tiles.group.position
86
+ .copy( sphere.center )
87
+ .applyEuler( group.rotation )
88
+ .multiplyScalar( - 1 );
89
+
90
+ }
91
+
92
+ }
93
+
94
+ if ( ! recenter ) {
95
+
96
+ tiles.group.position.setScalar( 0 );
97
+
98
+ }
99
+
100
+ tiles.removeEventListener( 'load-tile-set', this._callback );
101
+
102
+ };
103
+
104
+ tiles.addEventListener( 'load-tile-set', this._callback );
105
+
106
+ }
107
+
108
+ transformLatLonHeightToOrigin( lat, lon, height = 0 ) {
109
+
110
+ const { group, ellipsoid } = this.tiles;
111
+
112
+ // get ENU orientation (Z facing north and X facing west) and position
113
+ ellipsoid.getRotationMatrixFromAzElRoll( lat, lon, 0, 0, 0, group.matrix, OBJECT_FRAME );
114
+ ellipsoid.getCartographicToPosition( lat, lon, height, vec );
115
+
116
+ // adjust the group matrix
117
+ group.matrix
118
+ .setPosition( vec )
119
+ .invert()
120
+ .decompose( group.position, group.quaternion, group.scale );
121
+ group.updateMatrixWorld();
122
+
123
+ }
124
+
125
+ dispose() {
126
+
127
+ const { group } = this.tiles;
128
+ group.position.setScalar( 0 );
129
+ group.quaternion.identity();
130
+ group.scale.set( 1, 1, 1 );
131
+
132
+ this.tiles.addEventListener( 'load-tile-set', this._callback );
133
+
134
+ }
135
+
136
+ }
@@ -0,0 +1,18 @@
1
+ import { TypedArray } from 'three';
2
+
3
+ export class TileCompressionPlugin {
4
+
5
+ constructor( options: {
6
+ generateNormals: Boolean,
7
+ disableMipmaps: Boolean,
8
+ compressIndex: Boolean,
9
+ compressNormals: Boolean,
10
+ compressUvs: Boolean,
11
+ compressPosition: Boolean,
12
+
13
+ uvType: TypedArray,
14
+ normalType: TypedArray,
15
+ positionType: TypedArray,
16
+ } );
17
+
18
+ }