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,239 @@
1
+ import { createContext, useContext, useState, useEffect, useRef, forwardRef, useMemo } from 'react';
2
+ import { useThree, useFrame } from '@react-three/fiber';
3
+ import { Vector3 } from 'three';
4
+ import { TilesRenderer as TilesRendererImpl } from '../../three/TilesRenderer.js';
5
+ import { useDeepOptions, useShallowOptions } from '../utilities/useOptions.jsx';
6
+ import { useObjectDep } from '../utilities/useObjectDep.jsx';
7
+ import { useForceUpdate } from '../utilities/useForceUpdate.jsx';
8
+
9
+ // context for accessing the tile set
10
+ export const TilesRendererContext = createContext( null );
11
+
12
+ // group that matches the transform of the tile set root group
13
+ function TileSetRoot( { children } ) {
14
+
15
+ const tiles = useContext( TilesRendererContext );
16
+ const ref = useRef();
17
+ useEffect( () => {
18
+
19
+ if ( tiles ) {
20
+
21
+ ref.current.matrixWorld = tiles.group.matrixWorld;
22
+
23
+ }
24
+
25
+ }, [ tiles ] );
26
+
27
+ return <group ref={ ref } matrixWorldAutoUpdate={ false } matrixAutoUpdate={ false }>{ children }</group>;
28
+
29
+ }
30
+
31
+ const _vec = /* @__PURE__ */ new Vector3();
32
+ export function EastNorthUpFrame( props ) {
33
+
34
+ const {
35
+ lat = 0,
36
+ lon = 0,
37
+ height = 0,
38
+ az = 0,
39
+ el = 0,
40
+ roll = 0,
41
+ children,
42
+ } = props;
43
+ const ref = useRef();
44
+ const tiles = useContext( TilesRendererContext );
45
+ const ellipsoid = tiles && tiles.ellipsoid || null;
46
+ useEffect( () => {
47
+
48
+ if ( ellipsoid === null ) {
49
+
50
+ return;
51
+
52
+ }
53
+
54
+ const group = ref.current;
55
+ group.matrix.identity();
56
+
57
+ ellipsoid.getRotationMatrixFromAzElRoll( lat, lon, az, el, roll, group.matrix );
58
+ ellipsoid.getCartographicToPosition( lat, lon, height, _vec );
59
+ group.matrix.setPosition( _vec );
60
+ group.matrix.decompose( group.position, group.quaternion, group.scale );
61
+ group.updateMatrixWorld();
62
+
63
+ }, [ ellipsoid, lat, lon, height, az, el, roll ] );
64
+
65
+ return <group ref={ ref }>{ children }</group>;
66
+
67
+ }
68
+
69
+ // component for registering a plugin
70
+ export const TilesPlugin = forwardRef( function TilesPlugin( props, ref ) {
71
+
72
+ const { plugin, args, ...options } = props;
73
+ const tiles = useContext( TilesRendererContext );
74
+
75
+ // create the instance
76
+ const instance = useMemo( () => {
77
+
78
+ if ( tiles === null ) {
79
+
80
+ return null;
81
+
82
+ }
83
+
84
+ let instance;
85
+ if ( Array.isArray( args ) ) {
86
+
87
+ instance = new plugin( ...args );
88
+
89
+ } else {
90
+
91
+ instance = new plugin( args );
92
+
93
+ }
94
+
95
+ return instance;
96
+
97
+ // we must create a new plugin if the tile set has changed
98
+
99
+ }, [ tiles, plugin, useObjectDep( args ) ] ); // eslint-disable-line
100
+
101
+ // assigns any provided options to the plugin
102
+ useShallowOptions( instance, options );
103
+
104
+ // assign ref
105
+ useEffect( () => {
106
+
107
+ if ( ref ) {
108
+
109
+ if ( ref instanceof Function ) {
110
+
111
+ ref( instance );
112
+
113
+ } else {
114
+
115
+ ref.current = instance;
116
+
117
+ }
118
+
119
+ }
120
+
121
+ }, [ instance, ref ] );
122
+
123
+ // register the instance
124
+ useEffect( () => {
125
+
126
+ if ( tiles === null ) {
127
+
128
+ return;
129
+
130
+ }
131
+
132
+ tiles.registerPlugin( instance );
133
+ return () => {
134
+
135
+ tiles.unregisterPlugin( instance );
136
+
137
+ };
138
+
139
+ }, [ instance, tiles ] );
140
+
141
+ } );
142
+
143
+ // component for adding a TilesRenderer to the scene
144
+ export const TilesRenderer = forwardRef( function TilesRenderer( props, ref ) {
145
+
146
+ const { url, group = {}, children, ...options } = props;
147
+ const [ tiles, setTiles ] = useState( null );
148
+ const [ camera, gl, invalidate ] = useThree( state => [ state.camera, state.gl, state.invalidate ] );
149
+ const [ forceUpdateIndex, forceUpdate ] = useForceUpdate();
150
+
151
+ // create the tile set
152
+ useEffect( () => {
153
+
154
+ const tiles = new TilesRendererImpl( url );
155
+ tiles.addEventListener( 'load-content', () => invalidate() );
156
+ tiles.addEventListener( 'force-rerender', () => invalidate() );
157
+ setTiles( tiles );
158
+
159
+ return () => {
160
+
161
+ tiles.dispose();
162
+
163
+ };
164
+
165
+ }, [ url, invalidate ] );
166
+
167
+ // update the resolution for the camera
168
+ useFrame( () => {
169
+
170
+ if ( tiles === null ) {
171
+
172
+ return;
173
+
174
+ }
175
+
176
+ camera.updateMatrixWorld();
177
+ tiles.setResolutionFromRenderer( camera, gl );
178
+ tiles.update();
179
+
180
+ } );
181
+
182
+ // add the camera
183
+ useEffect( () => {
184
+
185
+ if ( tiles === null ) {
186
+
187
+ return;
188
+
189
+ }
190
+
191
+ tiles.setCamera( camera );
192
+ return () => {
193
+
194
+ tiles.deleteCamera( camera );
195
+
196
+ };
197
+
198
+ }, [ tiles, camera ] );
199
+
200
+ // assign ref
201
+ useEffect( () => {
202
+
203
+ if ( ref ) {
204
+
205
+ if ( ref instanceof Function ) {
206
+
207
+ ref( tiles );
208
+
209
+ } else {
210
+
211
+ ref.current = tiles;
212
+
213
+ }
214
+
215
+ }
216
+
217
+ }, [ tiles, ref ] );
218
+
219
+ // assign options recursively
220
+ useDeepOptions( tiles, options );
221
+
222
+ // because options modify tiles settings non-reactively we force an update and
223
+ // pass the update index into the tiles context to force children to update
224
+ useEffect( () => {
225
+
226
+ forceUpdate();
227
+
228
+ }, [ tiles, useObjectDep( options ) ] ); // eslint-disable-line
229
+
230
+ return <>
231
+ { tiles ? <primitive object={ tiles.group } { ...group } /> : null }
232
+ <TilesRendererContext.Provider value={ tiles } key={ forceUpdateIndex }>
233
+ <TileSetRoot>
234
+ { children }
235
+ </TileSetRoot>
236
+ </TilesRendererContext.Provider>
237
+ </>;
238
+
239
+ } );
@@ -0,0 +1,6 @@
1
+ export * from './components/TilesRenderer.jsx';
2
+ export * from './components/TilesAttributionOverlay.jsx';
3
+ export * from './components/CanvasDOMOverlay.jsx';
4
+ export * from './components/CameraControls.jsx';
5
+ export * from './components/CompassGizmo.jsx';
6
+ export * from './components/CameraTransition.jsx';
@@ -0,0 +1,8 @@
1
+ import { useState } from 'react';
2
+
3
+ export function useForceUpdate() {
4
+
5
+ const [ value, setValue ] = useState( 0 );
6
+ return [ value, () => setValue( value + 1 ) ];
7
+
8
+ }
@@ -0,0 +1,59 @@
1
+ import { useRef } from 'react';
2
+
3
+ // checks if the first level of object key-values are equal
4
+ function areObjectsEqual( a, b ) {
5
+
6
+ // early check for equivalence
7
+ if ( a === b ) {
8
+
9
+ return true;
10
+
11
+ }
12
+
13
+ // if either of the objects is null or undefined, then perform a simple check
14
+ if ( ! a || ! b ) {
15
+
16
+ return a === b;
17
+
18
+ }
19
+
20
+ // check all keys and values in the first object
21
+ for ( const key in a ) {
22
+
23
+ if ( a[ key ] !== b[ key ] ) {
24
+
25
+ return false;
26
+
27
+ }
28
+
29
+ }
30
+
31
+ // check all keys and values in the second object
32
+ for ( const key in b ) {
33
+
34
+ if ( a[ key ] !== b[ key ] ) {
35
+
36
+ return false;
37
+
38
+ }
39
+
40
+ }
41
+
42
+ return true;
43
+
44
+ }
45
+
46
+ // Helper for using an object as a dependency in a useEffect or useMemo array
47
+ export function useObjectDep( object ) {
48
+
49
+ // only modify the returned object reference if it has changed
50
+ const ref = useRef();
51
+ if ( ! areObjectsEqual( ref.current, object ) ) {
52
+
53
+ ref.current = object;
54
+
55
+ }
56
+
57
+ return ref.current;
58
+
59
+ }
@@ -0,0 +1,143 @@
1
+ import { useEffect } from 'react';
2
+ import { useObjectDep } from './useObjectDep.jsx';
3
+
4
+ // return true if the given key is for registering an event
5
+ function isEventName( key ) {
6
+
7
+ return /^on/g.test( key );
8
+
9
+ }
10
+
11
+ // returns the event name to register for the given key
12
+ function getEventName( key ) {
13
+
14
+ return key
15
+ .replace( /^on/, '' )
16
+ .replace( /[a-z][A-Z]/g, match => `${ match[ 0 ] }-${ match[ 1 ] }` )
17
+ .toLowerCase();
18
+
19
+ }
20
+
21
+ // returns a dash-separated key as a list of tokens
22
+ function getPath( key ) {
23
+
24
+ return key.split( '-' );
25
+
26
+ }
27
+
28
+ // gets the value from the object at the given path
29
+ function getValueAtPath( object, path ) {
30
+
31
+ let curr = object;
32
+ const tokens = [ ...path ];
33
+ while ( tokens.length !== 0 ) {
34
+
35
+ const key = tokens.shift();
36
+ curr = curr[ key ];
37
+
38
+ }
39
+
40
+ return curr;
41
+
42
+ }
43
+
44
+ // sets the value of the object at the given path
45
+ function setValueAtPath( object, path, value ) {
46
+
47
+ const tokens = [ ...path ];
48
+ const finalKey = tokens.pop();
49
+ getValueAtPath( object, tokens )[ finalKey ] = value;
50
+
51
+ }
52
+
53
+ // Recursively assigns a set of options to an object, interpreting dashes as periods
54
+ export function useDeepOptions( target, options ) {
55
+
56
+ // assign options recursively
57
+ useEffect( () => {
58
+
59
+ if ( target === null ) {
60
+
61
+ return;
62
+
63
+ }
64
+
65
+ const previousState = {};
66
+ for ( const key in options ) {
67
+
68
+ if ( isEventName( key ) ) {
69
+
70
+ target.addEventListener( getEventName( key ), options[ key ] );
71
+
72
+ } else {
73
+
74
+ const path = getPath( key );
75
+ previousState[ key ] = getValueAtPath( target, path );
76
+ setValueAtPath( target, path, options[ key ] );
77
+
78
+ }
79
+
80
+ }
81
+
82
+ return () => {
83
+
84
+ for ( const key in options ) {
85
+
86
+ if ( isEventName( key ) ) {
87
+
88
+ target.removeEventListener( getEventName( key ), options[ key ] );
89
+
90
+ }
91
+
92
+ }
93
+
94
+ for ( const key in options ) {
95
+
96
+ const path = getPath( key );
97
+ setValueAtPath( target, path, options[ key ] );
98
+
99
+ }
100
+
101
+ };
102
+
103
+ }, [ target, useObjectDep( options ) ] ); // eslint-disable-line
104
+
105
+ }
106
+
107
+ // Assigns a set of options to an object shallowly, interpreting dashes as periods
108
+ export function useShallowOptions( instance, options ) {
109
+
110
+ // assigns any provided options to the plugin
111
+ useEffect( () => {
112
+
113
+ if ( instance === null ) {
114
+
115
+ return;
116
+
117
+ }
118
+
119
+ const previousState = {};
120
+ for ( const key in options ) {
121
+
122
+ if ( key in instance ) {
123
+
124
+ previousState[ key ] = instance[ key ];
125
+ instance[ key ] = options[ key ];
126
+
127
+ }
128
+
129
+ }
130
+
131
+ return () => {
132
+
133
+ for ( const key in previousState ) {
134
+
135
+ instance[ key ] = previousState[ key ];
136
+
137
+ }
138
+
139
+ };
140
+
141
+ }, [ instance, useObjectDep( options ) ] ); // eslint-disable-line
142
+
143
+ }
@@ -0,0 +1,28 @@
1
+ import { TilesRenderer } from './TilesRenderer';
2
+ import { Color } from 'three';
3
+
4
+ export enum ColorMode {}
5
+ export const NONE : ColorMode;
6
+ export const SCREEN_ERROR : ColorMode;
7
+ export const GEOMETRIC_ERROR : ColorMode;
8
+ export const DISTANCE : ColorMode;
9
+ export const DEPTH : ColorMode;
10
+ export const RELATIVE_DEPTH : ColorMode;
11
+ export const IS_LEAF : ColorMode;
12
+ export const RANDOM_COLOR : ColorMode;
13
+ export const RANDOM_NODE_COLOR: ColorMode;
14
+ export const CUSTOM_COLOR: ColorMode;
15
+ export class DebugTilesRenderer extends TilesRenderer {
16
+
17
+ displayBoxBounds : Boolean;
18
+ displaySphereBounds : Boolean;
19
+ displayRegionBounds : Boolean;
20
+ colorMode : ColorMode;
21
+
22
+ maxDebugDepth : Number;
23
+ maxDebugDistance : Number;
24
+ maxDebugError : Number;
25
+
26
+ getDebugColor : ( val: Number, target: Color ) => void;
27
+
28
+ }
@@ -0,0 +1,58 @@
1
+ import { TilesRenderer } from './TilesRenderer.js';
2
+ import { DebugTilesPlugin } from './plugins/DebugTilesPlugin.js';
3
+
4
+ export * from './plugins/DebugTilesPlugin.js';
5
+
6
+ const DEBUG_PLUGIN = Symbol( 'DEBUG_PLUGIN' );
7
+ export class DebugTilesRenderer extends TilesRenderer {
8
+
9
+ constructor( ...args ) {
10
+
11
+ super( ...args );
12
+
13
+ console.warn( 'DebugTilesRenderer: "DebugTilesRenderer" has been deprecated in favor of "DebugTilesPlugin".' );
14
+
15
+ this[ DEBUG_PLUGIN ] = new DebugTilesPlugin();
16
+ this.registerPlugin( this[ DEBUG_PLUGIN ] );
17
+
18
+ }
19
+
20
+ }
21
+
22
+ [
23
+ 'displayBoxBounds',
24
+ 'displaySphereBounds',
25
+ 'displayRegionBounds',
26
+ 'colorMode',
27
+ 'customColorCallback',
28
+ 'boxGroup',
29
+ 'sphereGroup',
30
+ 'regionGroup',
31
+ 'maxDebugDepth',
32
+ 'maxDebugDistance',
33
+ 'maxDebugError',
34
+ 'getDebugColor',
35
+ 'extremeDebugDepth',
36
+ 'extremeDebugError',
37
+ ].forEach( key => {
38
+
39
+ Object.defineProperty(
40
+ DebugTilesRenderer.prototype,
41
+ key,
42
+ {
43
+ get() {
44
+
45
+ return this[ DEBUG_PLUGIN ][ key ];
46
+
47
+ },
48
+
49
+ set( v ) {
50
+
51
+ this[ DEBUG_PLUGIN ][ key ] = v;
52
+
53
+ }
54
+
55
+ }
56
+ );
57
+
58
+ } );
@@ -0,0 +1,9 @@
1
+ import { Group } from 'three';
2
+ import { TilesRenderer } from './TilesRenderer';
3
+
4
+ export class TilesGroup extends Group {
5
+
6
+ tilesRenderer : TilesRenderer;
7
+ constructor( tilesRenderer : TilesRenderer );
8
+
9
+ }
@@ -0,0 +1,91 @@
1
+ import { Group, Matrix4 } from 'three';
2
+
3
+ // Specialization of "Group" that only updates world matrices of children if
4
+ // the transform has changed since the last update and ignores the "force"
5
+ // parameter under the assumption that the children tiles will not move.
6
+ const tempMat = new Matrix4();
7
+ export class TilesGroup extends Group {
8
+
9
+ constructor( tilesRenderer ) {
10
+
11
+ super();
12
+ this.name = 'TilesRenderer.TilesGroup';
13
+ this.tilesRenderer = tilesRenderer;
14
+
15
+ }
16
+
17
+ raycast( raycaster, intersects ) {
18
+
19
+ // returning "false" ends raycast traversal
20
+ if ( this.tilesRenderer.optimizeRaycast ) {
21
+
22
+ this.tilesRenderer.raycast( raycaster, intersects );
23
+ return false;
24
+
25
+ }
26
+
27
+ return true;
28
+
29
+ }
30
+
31
+ updateMatrixWorld( force ) {
32
+
33
+ if ( this.matrixAutoUpdate ) {
34
+
35
+ this.updateMatrix();
36
+
37
+ }
38
+
39
+ if ( this.matrixWorldNeedsUpdate || force ) {
40
+
41
+ if ( this.parent === null ) {
42
+
43
+ tempMat.copy( this.matrix );
44
+
45
+ } else {
46
+
47
+ tempMat.multiplyMatrices( this.parent.matrixWorld, this.matrix );
48
+
49
+ }
50
+
51
+ this.matrixWorldNeedsUpdate = false;
52
+
53
+ // check if the matrix changed relative to what it was.
54
+ const elA = tempMat.elements;
55
+ const elB = this.matrixWorld.elements;
56
+ let isDifferent = false;
57
+ for ( let i = 0; i < 16; i ++ ) {
58
+
59
+ const itemA = elA[ i ];
60
+ const itemB = elB[ i ];
61
+ const diff = Math.abs( itemA - itemB );
62
+
63
+ if ( diff > Number.EPSILON ) {
64
+
65
+ isDifferent = true;
66
+ break;
67
+
68
+ }
69
+
70
+ }
71
+
72
+ if ( isDifferent ) {
73
+
74
+ this.matrixWorld.copy( tempMat );
75
+
76
+ // update children
77
+ // the children will not have to change unless the parent group has updated
78
+ const children = this.children;
79
+ for ( let i = 0, l = children.length; i < l; i ++ ) {
80
+
81
+ children[ i ].updateMatrixWorld();
82
+
83
+ }
84
+
85
+ }
86
+
87
+ }
88
+
89
+ }
90
+
91
+ }
@@ -0,0 +1,37 @@
1
+ import { Box3, Camera, Vector2, Matrix4, WebGLRenderer, Object3D, LoadingManager, Sphere } from 'three';
2
+ import { Tile } from '../base/Tile';
3
+ import { TilesRendererBase } from '../base/TilesRendererBase';
4
+ import { TilesGroup } from './TilesGroup';
5
+ import { Ellipsoid } from './math/Ellipsoid';
6
+
7
+ export class TilesRenderer extends TilesRendererBase {
8
+
9
+ ellipsoid: Ellipsoid;
10
+ autoDisableRendererCulling : Boolean;
11
+ optimizeRaycast : Boolean;
12
+
13
+ manager : LoadingManager;
14
+
15
+ group : TilesGroup;
16
+
17
+ getBoundingBox( box : Box3 ) : Boolean;
18
+ getOrientedBoundingBox( box : Box3, matrix : Matrix4 ) : Boolean;
19
+ getBoundingSphere( sphere: Sphere ) : Boolean;
20
+
21
+ hasCamera( camera : Camera ) : Boolean;
22
+ setCamera( camera : Camera ) : Boolean;
23
+ deleteCamera( camera : Camera ) : Boolean;
24
+
25
+ setResolution( camera : Camera, x : Number, y : Number ) : Boolean;
26
+ setResolution( camera : Camera, resolution : Vector2 ) : Boolean;
27
+ setResolutionFromRenderer( camera : Camera, renderer : WebGLRenderer ) : Boolean;
28
+
29
+ forEachLoadedModel( callback : ( scene : Object3D, tile : Tile ) => void ) : void;
30
+
31
+ addEventListener( type: String, cb: ( e : Object ) => void );
32
+ hasEventListener( type: String, cb: ( e : Object ) => void );
33
+ removeEventListener( type: String, cb: ( e : Object ) => void );
34
+ dispatchEvent( e : Object );
35
+
36
+ setLatLonToYUp( lat : number, lon : number)
37
+ }