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,68 @@
1
+ import { DefaultLoadingManager } from 'three';
2
+ import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
3
+ import { LoaderBase } from '../../base/loaders/LoaderBase.js';
4
+ import { GLTFCesiumRTCExtension } from './gltf/GLTFCesiumRTCExtension.js';
5
+
6
+ export class GLTFExtensionLoader extends LoaderBase {
7
+
8
+ constructor( manager = DefaultLoadingManager ) {
9
+
10
+ super();
11
+ this.manager = manager;
12
+
13
+ }
14
+
15
+ parse( buffer ) {
16
+
17
+ return new Promise( ( resolve, reject ) => {
18
+
19
+ const manager = this.manager;
20
+ const fetchOptions = this.fetchOptions;
21
+ let loader = manager.getHandler( 'path.gltf' ) || manager.getHandler( 'path.glb' );
22
+
23
+ if ( ! loader ) {
24
+
25
+ loader = new GLTFLoader( manager );
26
+
27
+ loader.register( () => new GLTFCesiumRTCExtension() );
28
+
29
+ }
30
+
31
+ if ( fetchOptions.credentials === 'include' && fetchOptions.mode === 'cors' ) {
32
+
33
+ loader.setCrossOrigin( 'use-credentials' );
34
+
35
+ }
36
+
37
+ if ( 'credentials' in fetchOptions ) {
38
+
39
+ loader.setWithCredentials( fetchOptions.credentials === 'include' );
40
+
41
+ }
42
+
43
+ if ( fetchOptions.headers ) {
44
+
45
+ loader.setRequestHeader( fetchOptions.headers );
46
+
47
+ }
48
+
49
+ // assume any pre-registered loader has paths configured as the user desires, but if we're making
50
+ // a new loader, use the working path during parse to support relative uris on other hosts
51
+ let resourcePath = loader.resourcePath || loader.path || this.workingPath;
52
+ if ( ! /[\\/]$/.test( resourcePath ) && resourcePath.length ) {
53
+
54
+ resourcePath += '/';
55
+
56
+ }
57
+
58
+ loader.parse( buffer, resourcePath, model => {
59
+
60
+ resolve( model );
61
+
62
+ }, reject );
63
+
64
+ } );
65
+
66
+ }
67
+
68
+ }
@@ -0,0 +1,26 @@
1
+ import { I3DMBaseResult } from '../../base/loaders/I3DMLoaderBase';
2
+ import { BatchTable } from '../../utilities/BatchTable';
3
+ import { FeatureTable } from '../../utilities/FeatureTable';
4
+ import { GLTF } from 'three/examples/jsm/loaders/GLTFLoader';
5
+ import { Group, LoadingManager } from 'three';
6
+
7
+ interface I3DMScene extends Group {
8
+
9
+ batchTable : BatchTable;
10
+ featureTable : FeatureTable;
11
+
12
+ }
13
+
14
+ export interface I3DMResult extends GLTF, I3DMBaseResult {
15
+
16
+ scene : I3DMScene;
17
+
18
+ }
19
+
20
+ export class I3DMLoader {
21
+
22
+ constructor( manager : LoadingManager );
23
+ load( url : String ) : Promise< I3DMResult >;
24
+ parse( buffer : ArrayBuffer ) : Promise< I3DMResult >;
25
+
26
+ }
@@ -0,0 +1,256 @@
1
+ import { I3DMLoaderBase } from '../../base/loaders/I3DMLoaderBase.js';
2
+ import { DefaultLoadingManager, Matrix4, InstancedMesh, Vector3, Quaternion } from 'three';
3
+ import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
4
+ import { WGS84_ELLIPSOID } from '../math/GeoConstants.js';
5
+
6
+ const tempFwd = /* @__PURE__ */ new Vector3();
7
+ const tempUp = /* @__PURE__ */ new Vector3();
8
+ const tempRight = /* @__PURE__ */ new Vector3();
9
+ const tempPos = /* @__PURE__ */ new Vector3();
10
+ const tempQuat = /* @__PURE__ */ new Quaternion();
11
+ const tempSca = /* @__PURE__ */ new Vector3();
12
+ const tempMat = /* @__PURE__ */ new Matrix4();
13
+ const tempMat2 = /* @__PURE__ */ new Matrix4();
14
+
15
+ const tempGlobePos = /* @__PURE__ */ new Vector3();
16
+ const tempEnuFrame = /* @__PURE__ */ new Matrix4();
17
+ const tempLocalQuat = /* @__PURE__ */ new Quaternion();
18
+ const tempLatLon = {};
19
+
20
+ export class I3DMLoader extends I3DMLoaderBase {
21
+
22
+ constructor( manager = DefaultLoadingManager ) {
23
+
24
+ super();
25
+ this.manager = manager;
26
+ this.adjustmentTransform = new Matrix4();
27
+ this.ellipsoid = WGS84_ELLIPSOID.clone();
28
+
29
+ }
30
+
31
+ resolveExternalURL( url ) {
32
+
33
+ return this.manager.resolveURL( super.resolveExternalURL( url ) );
34
+
35
+ }
36
+
37
+ parse( buffer ) {
38
+
39
+ return super
40
+ .parse( buffer )
41
+ .then( i3dm => {
42
+
43
+ const { featureTable, batchTable } = i3dm;
44
+ const gltfBuffer = i3dm.glbBytes.slice().buffer;
45
+ return new Promise( ( resolve, reject ) => {
46
+
47
+ const fetchOptions = this.fetchOptions;
48
+ const manager = this.manager;
49
+ const loader = manager.getHandler( 'path.gltf' ) || new GLTFLoader( manager );
50
+
51
+ if ( fetchOptions.credentials === 'include' && fetchOptions.mode === 'cors' ) {
52
+
53
+ loader.setCrossOrigin( 'use-credentials' );
54
+
55
+ }
56
+
57
+ if ( 'credentials' in fetchOptions ) {
58
+
59
+ loader.setWithCredentials( fetchOptions.credentials === 'include' );
60
+
61
+ }
62
+
63
+ if ( fetchOptions.headers ) {
64
+
65
+ loader.setRequestHeader( fetchOptions.headers );
66
+
67
+ }
68
+
69
+ // GLTFLoader assumes the working path ends in a slash
70
+ let workingPath = i3dm.gltfWorkingPath ?? this.workingPath;
71
+ if ( ! /[\\/]$/.test( workingPath ) ) {
72
+
73
+ workingPath += '/';
74
+
75
+ }
76
+
77
+ const adjustmentTransform = this.adjustmentTransform;
78
+
79
+ loader.parse( gltfBuffer, workingPath, model => {
80
+
81
+ const INSTANCES_LENGTH = featureTable.getData( 'INSTANCES_LENGTH' );
82
+ const POSITION = featureTable.getData( 'POSITION', INSTANCES_LENGTH, 'FLOAT', 'VEC3' );
83
+ const NORMAL_UP = featureTable.getData( 'NORMAL_UP', INSTANCES_LENGTH, 'FLOAT', 'VEC3' );
84
+ const NORMAL_RIGHT = featureTable.getData( 'NORMAL_RIGHT', INSTANCES_LENGTH, 'FLOAT', 'VEC3' );
85
+ const SCALE_NON_UNIFORM = featureTable.getData( 'SCALE_NON_UNIFORM', INSTANCES_LENGTH, 'FLOAT', 'VEC3' );
86
+ const SCALE = featureTable.getData( 'SCALE', INSTANCES_LENGTH, 'FLOAT', 'SCALAR' );
87
+ const RTC_CENTER = featureTable.getData( 'RTC_CENTER' );
88
+ const EAST_NORTH_UP = featureTable.getData( 'EAST_NORTH_UP' );
89
+
90
+ [
91
+ 'QUANTIZED_VOLUME_OFFSET',
92
+ 'QUANTIZED_VOLUME_SCALE',
93
+ 'POSITION_QUANTIZED',
94
+ 'NORMAL_UP_OCT32P',
95
+ 'NORMAL_RIGHT_OCT32P',
96
+ ].forEach( feature => {
97
+
98
+ if ( feature in featureTable.header ) {
99
+
100
+ console.warn( `I3DMLoader: Unsupported FeatureTable feature "${ feature }" detected.` );
101
+
102
+ }
103
+
104
+ } );
105
+
106
+ // get the average vector center so we can avoid floating point error due to lower
107
+ // precision transformation calculations on the GPU
108
+ const averageVector = new Vector3();
109
+ for ( let i = 0; i < INSTANCES_LENGTH; i ++ ) {
110
+
111
+ averageVector.x += POSITION[ i * 3 + 0 ] / INSTANCES_LENGTH;
112
+ averageVector.y += POSITION[ i * 3 + 1 ] / INSTANCES_LENGTH;
113
+ averageVector.z += POSITION[ i * 3 + 2 ] / INSTANCES_LENGTH;
114
+
115
+ }
116
+
117
+ // find all the children and create associated instance meshes
118
+ const instances = [];
119
+ const meshes = [];
120
+ model.scene.updateMatrixWorld();
121
+
122
+ model.scene.traverse( child => {
123
+
124
+ if ( child.isMesh ) {
125
+
126
+ meshes.push( child );
127
+
128
+ const { geometry, material } = child;
129
+ const instancedMesh = new InstancedMesh( geometry, material, INSTANCES_LENGTH );
130
+ instancedMesh.position.copy( averageVector );
131
+
132
+ if ( RTC_CENTER ) {
133
+
134
+ instancedMesh.position.x += RTC_CENTER[ 0 ];
135
+ instancedMesh.position.y += RTC_CENTER[ 1 ];
136
+ instancedMesh.position.z += RTC_CENTER[ 2 ];
137
+
138
+ }
139
+
140
+ instances.push( instancedMesh );
141
+
142
+ }
143
+
144
+ } );
145
+
146
+ // generate positions for all instances
147
+ for ( let i = 0; i < INSTANCES_LENGTH; i ++ ) {
148
+
149
+ // position
150
+ tempPos.set(
151
+ POSITION[ i * 3 + 0 ] - averageVector.x,
152
+ POSITION[ i * 3 + 1 ] - averageVector.y,
153
+ POSITION[ i * 3 + 2 ] - averageVector.z,
154
+ );
155
+
156
+ // rotation
157
+ tempQuat.identity();
158
+
159
+ // account for EAST_NORTH_UP per-instance below
160
+
161
+ if ( NORMAL_UP ) {
162
+
163
+ tempUp.set(
164
+ NORMAL_UP[ i * 3 + 0 ],
165
+ NORMAL_UP[ i * 3 + 1 ],
166
+ NORMAL_UP[ i * 3 + 2 ],
167
+ );
168
+
169
+ tempRight.set(
170
+ NORMAL_RIGHT[ i * 3 + 0 ],
171
+ NORMAL_RIGHT[ i * 3 + 1 ],
172
+ NORMAL_RIGHT[ i * 3 + 2 ],
173
+ );
174
+
175
+ tempFwd.crossVectors( tempRight, tempUp )
176
+ .normalize();
177
+
178
+ tempMat.makeBasis(
179
+ tempRight,
180
+ tempUp,
181
+ tempFwd,
182
+ );
183
+
184
+ tempQuat.setFromRotationMatrix( tempMat );
185
+
186
+ }
187
+
188
+ // scale
189
+ tempSca.set( 1, 1, 1 );
190
+
191
+ if ( SCALE_NON_UNIFORM ) {
192
+
193
+ tempSca.set(
194
+ SCALE_NON_UNIFORM[ i * 3 + 0 ],
195
+ SCALE_NON_UNIFORM[ i * 3 + 1 ],
196
+ SCALE_NON_UNIFORM[ i * 3 + 2 ],
197
+ );
198
+
199
+ }
200
+
201
+ if ( SCALE ) {
202
+
203
+ tempSca.multiplyScalar( SCALE[ i ] );
204
+
205
+ }
206
+
207
+ // multiple in the original meshes world transform
208
+ for ( let j = 0, l = instances.length; j < l; j ++ ) {
209
+
210
+ const instance = instances[ j ];
211
+ tempLocalQuat.copy( tempQuat );
212
+
213
+ // Handle east-north-up frame generation
214
+ if ( EAST_NORTH_UP ) {
215
+
216
+ instance.updateMatrixWorld();
217
+
218
+ // transform the instance position to global frame and get the rotation from the associated ENU frame.
219
+ tempGlobePos.copy( tempPos ).applyMatrix4( instance.matrixWorld );
220
+ this.ellipsoid.getPositionToCartographic( tempGlobePos, tempLatLon );
221
+ this.ellipsoid.getEastNorthUpFrame( tempLatLon.lat, tempLatLon.lon, tempEnuFrame );
222
+ tempLocalQuat.setFromRotationMatrix( tempEnuFrame );
223
+
224
+ }
225
+
226
+ tempMat.compose( tempPos, tempLocalQuat, tempSca ).multiply( adjustmentTransform );
227
+
228
+ const mesh = meshes[ j ];
229
+ tempMat2.multiplyMatrices( tempMat, mesh.matrixWorld );
230
+ instance.setMatrixAt( i, tempMat2 );
231
+
232
+ }
233
+
234
+ }
235
+
236
+ // replace all geometry with the instances
237
+ model.scene.clear();
238
+ model.scene.add( ...instances );
239
+
240
+ model.batchTable = batchTable;
241
+ model.featureTable = featureTable;
242
+
243
+ model.scene.batchTable = batchTable;
244
+ model.scene.featureTable = featureTable;
245
+
246
+ resolve( model );
247
+
248
+ }, reject );
249
+
250
+ } );
251
+
252
+ } );
253
+
254
+ }
255
+
256
+ }
@@ -0,0 +1,25 @@
1
+ import { PNTSBaseResult, PNTSLoaderBase } from '../../base/loaders/PNTSLoaderBase';
2
+ import { BatchTable } from '../../utilities/BatchTable';
3
+ import { FeatureTable } from '../../utilities/FeatureTable';
4
+ import { Points, LoadingManager } from 'three';
5
+
6
+ interface PNTSScene extends Points {
7
+
8
+ batchTable : BatchTable
9
+ featureTable : FeatureTable;
10
+
11
+ }
12
+
13
+ export interface PNTSResult extends PNTSBaseResult {
14
+
15
+ scene : PNTSScene;
16
+
17
+ }
18
+
19
+ export class PNTSLoader extends PNTSLoaderBase {
20
+
21
+ constructor( manager : LoadingManager );
22
+ load( url : String ) : Promise< PNTSResult >;
23
+ parse( buffer : ArrayBuffer ) : Promise< PNTSResult >;
24
+
25
+ }
@@ -0,0 +1,202 @@
1
+ import { PNTSLoaderBase } from '../../base/loaders/PNTSLoaderBase.js';
2
+ import {
3
+ Points,
4
+ PointsMaterial,
5
+ BufferGeometry,
6
+ BufferAttribute,
7
+ DefaultLoadingManager,
8
+ Vector3,
9
+ Color,
10
+ } from 'three';
11
+ import { rgb565torgb } from '../../utilities/rgb565torgb.js';
12
+
13
+ const DRACO_ATTRIBUTE_MAP = {
14
+ RGB: 'color',
15
+ POSITION: 'position',
16
+ };
17
+
18
+ export class PNTSLoader extends PNTSLoaderBase {
19
+
20
+ constructor( manager = DefaultLoadingManager ) {
21
+
22
+ super();
23
+ this.manager = manager;
24
+
25
+ }
26
+
27
+ parse( buffer ) {
28
+
29
+ return super.parse( buffer ).then( async ( result ) => {
30
+
31
+ const { featureTable, batchTable } = result;
32
+
33
+ const material = new PointsMaterial();
34
+ const extensions = featureTable.header.extensions;
35
+ const translationOffset = new Vector3();
36
+ let geometry;
37
+
38
+ // handle loading the draco data
39
+ if ( extensions && extensions[ '3DTILES_draco_point_compression' ] ) {
40
+
41
+ const { byteOffset, byteLength, properties } = extensions[ '3DTILES_draco_point_compression' ];
42
+ const dracoLoader = this.manager.getHandler( 'draco.drc' );
43
+ if ( dracoLoader == null ) {
44
+
45
+ throw new Error( 'PNTSLoader: dracoLoader not available.' );
46
+
47
+ }
48
+
49
+ // map PNTS keys to draco types
50
+ const attributeIDs = {};
51
+ for ( const key in properties ) {
52
+
53
+ if ( key in DRACO_ATTRIBUTE_MAP && key in properties ) {
54
+
55
+ const mappedKey = DRACO_ATTRIBUTE_MAP[ key ];
56
+ attributeIDs[ mappedKey ] = properties[ key ];
57
+
58
+ }
59
+
60
+ }
61
+
62
+ // decode the geometry
63
+ const taskConfig = {
64
+ attributeIDs,
65
+ attributeTypes: {
66
+ position: 'Float32Array',
67
+ color: 'Uint8Array',
68
+ },
69
+ useUniqueIDs: true,
70
+ };
71
+
72
+ const buffer = featureTable.getBuffer( byteOffset, byteLength );
73
+ geometry = await dracoLoader.decodeGeometry( buffer, taskConfig );
74
+ if ( geometry.attributes.color ) {
75
+
76
+ material.vertexColors = true;
77
+
78
+ }
79
+
80
+ } else {
81
+
82
+ // handle non compressed case
83
+ const POINTS_LENGTH = featureTable.getData( 'POINTS_LENGTH' );
84
+ const POSITION = featureTable.getData( 'POSITION', POINTS_LENGTH, 'FLOAT', 'VEC3' );
85
+ const RGB = featureTable.getData( 'RGB', POINTS_LENGTH, 'UNSIGNED_BYTE', 'VEC3' );
86
+ const RGBA = featureTable.getData( 'RGBA', POINTS_LENGTH, 'UNSIGNED_BYTE', 'VEC4' );
87
+ const RGB565 = featureTable.getData( 'RGB565', POINTS_LENGTH, 'UNSIGNED_SHORT', 'SCALAR' );
88
+ const CONSTANT_RGBA = featureTable.getData( 'CONSTANT_RGBA', POINTS_LENGTH, 'UNSIGNED_BYTE', 'VEC4' );
89
+ const POSITION_QUANTIZED = featureTable.getData( 'POSITION_QUANTIZED', POINTS_LENGTH, 'UNSIGNED_SHORT', 'VEC3' );
90
+ const QUANTIZED_VOLUME_SCALE = featureTable.getData( 'QUANTIZED_VOLUME_SCALE', POINTS_LENGTH, 'FLOAT', 'VEC3' );
91
+ const QUANTIZED_VOLUME_OFFSET = featureTable.getData( 'QUANTIZED_VOLUME_OFFSET', POINTS_LENGTH, 'FLOAT', 'VEC3' );
92
+
93
+ geometry = new BufferGeometry();
94
+
95
+ if ( POSITION_QUANTIZED ) {
96
+
97
+ const decodedPositions = new Float32Array( POINTS_LENGTH * 3 );
98
+ for ( let i = 0; i < POINTS_LENGTH; i ++ ) {
99
+
100
+ for ( let j = 0; j < 3; j ++ ) {
101
+
102
+ const index = 3 * i + j;
103
+ decodedPositions[ index ] = ( POSITION_QUANTIZED[ index ] / 65535.0 ) * QUANTIZED_VOLUME_SCALE[ j ];
104
+
105
+ }
106
+
107
+ }
108
+ translationOffset.x = QUANTIZED_VOLUME_OFFSET[ 0 ];
109
+ translationOffset.y = QUANTIZED_VOLUME_OFFSET[ 1 ];
110
+ translationOffset.z = QUANTIZED_VOLUME_OFFSET[ 2 ];
111
+ geometry.setAttribute( 'position', new BufferAttribute( decodedPositions, 3, false ) );
112
+
113
+ } else {
114
+
115
+ geometry.setAttribute( 'position', new BufferAttribute( POSITION, 3, false ) );
116
+
117
+ }
118
+
119
+ if ( RGBA !== null ) {
120
+
121
+ geometry.setAttribute( 'color', new BufferAttribute( RGBA, 4, true ) );
122
+ material.vertexColors = true;
123
+ material.transparent = true;
124
+ material.depthWrite = false;
125
+
126
+ } else if ( RGB !== null ) {
127
+
128
+ geometry.setAttribute( 'color', new BufferAttribute( RGB, 3, true ) );
129
+ material.vertexColors = true;
130
+
131
+ } else if ( RGB565 !== null ) {
132
+
133
+ const color = new Uint8Array( POINTS_LENGTH * 3 );
134
+ for ( let i = 0; i < POINTS_LENGTH; i ++ ) {
135
+
136
+ const rgbColor = rgb565torgb( RGB565[ i ] );
137
+ for ( let j = 0; j < 3; j ++ ) {
138
+
139
+ const index = 3 * i + j;
140
+ color[ index ] = rgbColor[ j ];
141
+
142
+ }
143
+
144
+ }
145
+ geometry.setAttribute( 'color', new BufferAttribute( color, 3, true ) );
146
+ material.vertexColors = true;
147
+
148
+ } else if ( CONSTANT_RGBA !== null ) {
149
+
150
+ const color = new Color( CONSTANT_RGBA[ 0 ], CONSTANT_RGBA[ 1 ], CONSTANT_RGBA[ 2 ] );
151
+ material.color = color;
152
+ const opacity = CONSTANT_RGBA[ 3 ] / 255;
153
+ if ( opacity < 1 ) {
154
+
155
+ material.opacity = opacity;
156
+ material.transparent = true;
157
+ material.depthWrite = false;
158
+
159
+ }
160
+
161
+ }
162
+
163
+ }
164
+
165
+ [
166
+ 'BATCH_LENGTH',
167
+ 'NORMAL',
168
+ 'NORMAL_OCT16P',
169
+ ].forEach( ( feature ) => {
170
+
171
+ if ( feature in featureTable.header ) {
172
+
173
+ console.warn(
174
+ `PNTSLoader: Unsupported FeatureTable feature "${feature}" detected.`
175
+ );
176
+
177
+ }
178
+
179
+ } );
180
+
181
+ const object = new Points( geometry, material );
182
+ object.position.copy( translationOffset );
183
+ result.scene = object;
184
+ result.scene.featureTable = featureTable;
185
+ result.scene.batchTable = batchTable;
186
+
187
+ const rtcCenter = featureTable.getData( 'RTC_CENTER' );
188
+ if ( rtcCenter ) {
189
+
190
+ result.scene.position.x += rtcCenter[ 0 ];
191
+ result.scene.position.y += rtcCenter[ 1 ];
192
+ result.scene.position.z += rtcCenter[ 2 ];
193
+
194
+ }
195
+
196
+ return result;
197
+
198
+ } );
199
+
200
+ }
201
+
202
+ }
@@ -0,0 +1,12 @@
1
+ import { GLTFCesiumRTCExtension as GLTFCesiumRTCExtensionImpl } from '../../../plugins/index.js';
2
+
3
+ export class GLTFCesiumRTCExtension extends GLTFCesiumRTCExtensionImpl {
4
+
5
+ constructor( ...args ) {
6
+
7
+ super( ...args );
8
+ console.warn( 'GLTFCesiumRTCExtension: Plugins should now be imported from "3d-tiles-renderer/plugins" path.' );
9
+
10
+ }
11
+
12
+ }
@@ -0,0 +1,12 @@
1
+ import { GLTFMeshFeaturesExtension as GLTFMeshFeaturesExtensionImpl } from '../../../plugins/index.js';
2
+
3
+ export class GLTFMeshFeaturesExtension extends GLTFMeshFeaturesExtensionImpl {
4
+
5
+ constructor( ...args ) {
6
+
7
+ super( ...args );
8
+ console.warn( 'GLTFMeshFeaturesExtension: Plugins should now be imported from "3d-tiles-renderer/plugins" path.' );
9
+
10
+ }
11
+
12
+ }
@@ -0,0 +1,12 @@
1
+ import { GLTFStructuralMetadataExtension as GLTFStructuralMetadataExtensionImpl } from '../../../plugins/index.js';
2
+
3
+ export class GLTFStructuralMetadataExtension extends GLTFStructuralMetadataExtensionImpl {
4
+
5
+ constructor( ...args ) {
6
+
7
+ super( ...args );
8
+ console.warn( 'GLTFStructuralMetadataExtension: Plugins should now be imported from "3d-tiles-renderer/plugins" path.' );
9
+
10
+ }
11
+
12
+ }
@@ -0,0 +1,31 @@
1
+ import { Vector3, Matrix4 } from 'three';
2
+
3
+ export enum Frames {}
4
+ export const ENU_FRAME: Frames;
5
+ export const CAMERA_FRAME: Frames;
6
+ export const OBJECT_FRAME: Frames;
7
+
8
+ export class Ellipsoid {
9
+
10
+ radius: Vector3;
11
+
12
+ constructor( x: Number, y: Number, z: Number );
13
+ getCartographicToPosition( lat: Number, lon: Number, height: Number, target: Vector3 ): Vector3;
14
+ getPositionToCartographic( pos: Vector3, target: Object ): { lat: Number, lon: Number, height: Number };
15
+ getCartographicToNormal( lat: Number, lon: Number, target: Vector3 ): Vector3;
16
+ getPositionToNormal( pos: Vector3, target: Vector3 ): Vector3;
17
+ getPositionToSurfacePoint( pos: Vector3, target: Vector3 ): Vector3;
18
+
19
+ getAzElRollFromRotationMatrix(
20
+ lat: Number, lon: Number, rotationMatrix: Matrix4,
21
+ target: Object, frame: Frames,
22
+ ): { azimuth: Number, elevation: Number, roll: Number };
23
+ getRotationMatrixFromAzElRoll(
24
+ lat: Number, lon: Number, az: Number, el: Number, roll: Number,
25
+ target: Matrix4, frame: Frames,
26
+ ): Matrix4;
27
+
28
+ getEastNorthUpFrame( lat: Number, lon: Number, target: Matrix4 ): Matrix4;
29
+ getEastNorthUpAxes( lat: Number, lon: Number, vecEast: Vector3, vecNorth: Vector3, vecUp: Vector3, point?: Vector3 );
30
+
31
+ }