itowns 2.44.3-next.9 → 2.45.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (214) hide show
  1. package/README.md +3 -129
  2. package/examples/3dtiles_loader.html +20 -6
  3. package/examples/config.json +1 -0
  4. package/examples/copc_simple_loader.html +15 -5
  5. package/examples/effects_stereo.html +2 -2
  6. package/examples/entwine_3d_loader.html +3 -1
  7. package/examples/entwine_simple_loader.html +1 -1
  8. package/examples/images/itowns_logo.svg +123 -0
  9. package/examples/js/plugins/COGParser.js +1 -1
  10. package/examples/jsm/OGC3DTilesHelper.js +6 -1
  11. package/examples/layers/JSONLayers/GeoidMNT.json +3 -1
  12. package/examples/misc_collada.html +2 -2
  13. package/examples/source_file_geojson_3d.html +0 -1
  14. package/examples/source_file_kml_raster_usgs.html +0 -1
  15. package/examples/source_stream_wfs_raster.html +0 -7
  16. package/examples/vector_tile_mapbox_raster.html +91 -0
  17. package/examples/view_3d_map_webxr.html +3 -1
  18. package/examples/view_multi_25d.html +2 -2
  19. package/package.json +21 -75
  20. package/CODING.md +0 -120
  21. package/CONTRIBUTING.md +0 -150
  22. package/CONTRIBUTORS.md +0 -55
  23. package/LICENSE.md +0 -44
  24. package/changelog.md +0 -1361
  25. package/dist/455.js +0 -2
  26. package/dist/455.js.map +0 -1
  27. package/dist/debug.js +0 -3
  28. package/dist/debug.js.LICENSE.txt +0 -13
  29. package/dist/debug.js.map +0 -1
  30. package/dist/itowns.js +0 -3
  31. package/dist/itowns.js.LICENSE.txt +0 -7
  32. package/dist/itowns.js.map +0 -1
  33. package/dist/itowns_lasparser.js +0 -2
  34. package/dist/itowns_lasparser.js.map +0 -1
  35. package/dist/itowns_lasworker.js +0 -2
  36. package/dist/itowns_lasworker.js.map +0 -1
  37. package/dist/itowns_potree2worker.js +0 -2
  38. package/dist/itowns_potree2worker.js.map +0 -1
  39. package/dist/itowns_widgets.js +0 -2
  40. package/dist/itowns_widgets.js.map +0 -1
  41. package/examples/.eslintrc.cjs +0 -35
  42. package/examples/jsm/.eslintrc.cjs +0 -38
  43. package/lib/Controls/FirstPersonControls.js +0 -308
  44. package/lib/Controls/FlyControls.js +0 -175
  45. package/lib/Controls/GlobeControls.js +0 -1162
  46. package/lib/Controls/PlanarControls.js +0 -1025
  47. package/lib/Controls/StateControl.js +0 -429
  48. package/lib/Controls/StreetControls.js +0 -392
  49. package/lib/Converter/Feature2Mesh.js +0 -615
  50. package/lib/Converter/Feature2Texture.js +0 -170
  51. package/lib/Converter/convertToTile.js +0 -75
  52. package/lib/Converter/textureConverter.js +0 -44
  53. package/lib/Core/3DTiles/C3DTBatchTable.js +0 -131
  54. package/lib/Core/3DTiles/C3DTBatchTableHierarchyExtension.js +0 -96
  55. package/lib/Core/3DTiles/C3DTBoundingVolume.js +0 -157
  56. package/lib/Core/3DTiles/C3DTExtensions.js +0 -97
  57. package/lib/Core/3DTiles/C3DTFeature.js +0 -110
  58. package/lib/Core/3DTiles/C3DTilesEnums.js +0 -20
  59. package/lib/Core/3DTiles/C3DTileset.js +0 -99
  60. package/lib/Core/3DTiles/utils/BinaryPropertyAccessor.js +0 -100
  61. package/lib/Core/AnimationPlayer.js +0 -142
  62. package/lib/Core/CopcNode.js +0 -174
  63. package/lib/Core/Deprecated/Undeprecator.js +0 -75
  64. package/lib/Core/EntwinePointTileNode.js +0 -126
  65. package/lib/Core/Feature.js +0 -490
  66. package/lib/Core/Geographic/CoordStars.js +0 -80
  67. package/lib/Core/Geographic/Coordinates.js +0 -320
  68. package/lib/Core/Geographic/Crs.js +0 -175
  69. package/lib/Core/Geographic/Extent.js +0 -534
  70. package/lib/Core/Geographic/GeoidGrid.js +0 -109
  71. package/lib/Core/Label.js +0 -222
  72. package/lib/Core/MainLoop.js +0 -211
  73. package/lib/Core/Math/Ellipsoid.js +0 -144
  74. package/lib/Core/Picking.js +0 -255
  75. package/lib/Core/PointCloudNode.js +0 -42
  76. package/lib/Core/Potree2Node.js +0 -206
  77. package/lib/Core/Potree2PointAttributes.js +0 -139
  78. package/lib/Core/PotreeNode.js +0 -101
  79. package/lib/Core/Prefab/Globe/Atmosphere.js +0 -299
  80. package/lib/Core/Prefab/Globe/BuilderEllipsoidTile.js +0 -110
  81. package/lib/Core/Prefab/Globe/GlobeLayer.js +0 -145
  82. package/lib/Core/Prefab/Globe/SkyShader.js +0 -78
  83. package/lib/Core/Prefab/GlobeView.js +0 -161
  84. package/lib/Core/Prefab/Planar/PlanarLayer.js +0 -53
  85. package/lib/Core/Prefab/Planar/PlanarTileBuilder.js +0 -72
  86. package/lib/Core/Prefab/PlanarView.js +0 -62
  87. package/lib/Core/Prefab/TileBuilder.js +0 -80
  88. package/lib/Core/Prefab/computeBufferTileGeometry.js +0 -183
  89. package/lib/Core/Scheduler/Cache.js +0 -256
  90. package/lib/Core/Scheduler/CancelledCommandException.js +0 -15
  91. package/lib/Core/Scheduler/Scheduler.js +0 -294
  92. package/lib/Core/Style.js +0 -1121
  93. package/lib/Core/System/Capabilities.js +0 -63
  94. package/lib/Core/Tile/Tile.js +0 -219
  95. package/lib/Core/Tile/TileGrid.js +0 -46
  96. package/lib/Core/TileGeometry.js +0 -40
  97. package/lib/Core/TileMesh.js +0 -109
  98. package/lib/Core/View.js +0 -1109
  99. package/lib/Layer/C3DTilesLayer.js +0 -456
  100. package/lib/Layer/ColorLayer.js +0 -128
  101. package/lib/Layer/CopcLayer.js +0 -58
  102. package/lib/Layer/ElevationLayer.js +0 -107
  103. package/lib/Layer/EntwinePointTileLayer.js +0 -64
  104. package/lib/Layer/FeatureGeometryLayer.js +0 -63
  105. package/lib/Layer/GeoidLayer.js +0 -80
  106. package/lib/Layer/GeometryLayer.js +0 -202
  107. package/lib/Layer/InfoLayer.js +0 -64
  108. package/lib/Layer/LabelLayer.js +0 -456
  109. package/lib/Layer/Layer.js +0 -304
  110. package/lib/Layer/LayerUpdateState.js +0 -89
  111. package/lib/Layer/LayerUpdateStrategy.js +0 -80
  112. package/lib/Layer/OGC3DTilesLayer.js +0 -412
  113. package/lib/Layer/OrientedImageLayer.js +0 -222
  114. package/lib/Layer/PointCloudLayer.js +0 -359
  115. package/lib/Layer/Potree2Layer.js +0 -164
  116. package/lib/Layer/PotreeLayer.js +0 -65
  117. package/lib/Layer/RasterLayer.js +0 -27
  118. package/lib/Layer/ReferencingLayerProperties.js +0 -62
  119. package/lib/Layer/TiledGeometryLayer.js +0 -403
  120. package/lib/Loader/LASLoader.js +0 -193
  121. package/lib/Loader/Potree2BrotliLoader.js +0 -261
  122. package/lib/Loader/Potree2Loader.js +0 -207
  123. package/lib/Main.js +0 -115
  124. package/lib/MainBundle.js +0 -4
  125. package/lib/Parser/B3dmParser.js +0 -174
  126. package/lib/Parser/CameraCalibrationParser.js +0 -94
  127. package/lib/Parser/GDFParser.js +0 -72
  128. package/lib/Parser/GTXParser.js +0 -75
  129. package/lib/Parser/GeoJsonParser.js +0 -212
  130. package/lib/Parser/GpxParser.js +0 -25
  131. package/lib/Parser/ISGParser.js +0 -71
  132. package/lib/Parser/KMLParser.js +0 -25
  133. package/lib/Parser/LASParser.js +0 -137
  134. package/lib/Parser/MapBoxUrlParser.js +0 -83
  135. package/lib/Parser/PntsParser.js +0 -131
  136. package/lib/Parser/Potree2BinParser.js +0 -92
  137. package/lib/Parser/PotreeBinParser.js +0 -106
  138. package/lib/Parser/PotreeCinParser.js +0 -29
  139. package/lib/Parser/ShapefileParser.js +0 -78
  140. package/lib/Parser/VectorTileParser.js +0 -202
  141. package/lib/Parser/XbilParser.js +0 -119
  142. package/lib/Parser/deprecated/LegacyGLTFLoader.js +0 -1386
  143. package/lib/Parser/iGLTFLoader.js +0 -168
  144. package/lib/Process/3dTilesProcessing.js +0 -304
  145. package/lib/Process/FeatureProcessing.js +0 -76
  146. package/lib/Process/LayeredMaterialNodeProcessing.js +0 -221
  147. package/lib/Process/ObjectRemovalHelper.js +0 -97
  148. package/lib/Process/handlerNodeError.js +0 -23
  149. package/lib/Provider/3dTilesProvider.js +0 -149
  150. package/lib/Provider/DataSourceProvider.js +0 -8
  151. package/lib/Provider/Fetcher.js +0 -229
  152. package/lib/Provider/PointCloudProvider.js +0 -45
  153. package/lib/Provider/TileProvider.js +0 -16
  154. package/lib/Provider/URLBuilder.js +0 -116
  155. package/lib/Renderer/Camera.js +0 -281
  156. package/lib/Renderer/Color.js +0 -56
  157. package/lib/Renderer/ColorLayersOrdering.js +0 -115
  158. package/lib/Renderer/CommonMaterial.js +0 -31
  159. package/lib/Renderer/Label2DRenderer.js +0 -190
  160. package/lib/Renderer/LayeredMaterial.js +0 -243
  161. package/lib/Renderer/OBB.js +0 -153
  162. package/lib/Renderer/OrientedImageCamera.js +0 -118
  163. package/lib/Renderer/OrientedImageMaterial.js +0 -167
  164. package/lib/Renderer/PointsMaterial.js +0 -485
  165. package/lib/Renderer/RasterTile.js +0 -209
  166. package/lib/Renderer/RenderMode.js +0 -31
  167. package/lib/Renderer/Shader/ShaderChunk.js +0 -160
  168. package/lib/Renderer/Shader/ShaderUtils.js +0 -47
  169. package/lib/Renderer/SphereHelper.js +0 -23
  170. package/lib/Renderer/WebXR.js +0 -51
  171. package/lib/Renderer/c3DEngine.js +0 -214
  172. package/lib/Source/C3DTilesGoogleSource.js +0 -74
  173. package/lib/Source/C3DTilesIonSource.js +0 -54
  174. package/lib/Source/C3DTilesSource.js +0 -30
  175. package/lib/Source/CopcSource.js +0 -115
  176. package/lib/Source/EntwinePointTileSource.js +0 -62
  177. package/lib/Source/FileSource.js +0 -189
  178. package/lib/Source/OGC3DTilesGoogleSource.js +0 -29
  179. package/lib/Source/OGC3DTilesIonSource.js +0 -34
  180. package/lib/Source/OGC3DTilesSource.js +0 -21
  181. package/lib/Source/OrientedImageSource.js +0 -59
  182. package/lib/Source/Potree2Source.js +0 -167
  183. package/lib/Source/PotreeSource.js +0 -82
  184. package/lib/Source/Source.js +0 -223
  185. package/lib/Source/TMSSource.js +0 -145
  186. package/lib/Source/VectorTilesSource.js +0 -178
  187. package/lib/Source/WFSSource.js +0 -168
  188. package/lib/Source/WMSSource.js +0 -133
  189. package/lib/Source/WMTSSource.js +0 -86
  190. package/lib/ThreeExtended/capabilities/WebGL.js +0 -69
  191. package/lib/ThreeExtended/libs/ktx-parse.module.js +0 -470
  192. package/lib/ThreeExtended/libs/zstddec.module.js +0 -29
  193. package/lib/ThreeExtended/loaders/DDSLoader.js +0 -200
  194. package/lib/ThreeExtended/loaders/DRACOLoader.js +0 -399
  195. package/lib/ThreeExtended/loaders/GLTFLoader.js +0 -2876
  196. package/lib/ThreeExtended/loaders/KTX2Loader.js +0 -625
  197. package/lib/ThreeExtended/utils/BufferGeometryUtils.js +0 -846
  198. package/lib/ThreeExtended/utils/WorkerPool.js +0 -70
  199. package/lib/Utils/CameraUtils.js +0 -555
  200. package/lib/Utils/DEMUtils.js +0 -350
  201. package/lib/Utils/FeaturesUtils.js +0 -156
  202. package/lib/Utils/Gradients.js +0 -16
  203. package/lib/Utils/OrientationUtils.js +0 -457
  204. package/lib/Utils/ThreeUtils.js +0 -115
  205. package/lib/Utils/gui/C3DTilesStyle.js +0 -215
  206. package/lib/Utils/gui/Main.js +0 -7
  207. package/lib/Utils/gui/Minimap.js +0 -154
  208. package/lib/Utils/gui/Navigation.js +0 -245
  209. package/lib/Utils/gui/Scale.js +0 -107
  210. package/lib/Utils/gui/Searchbar.js +0 -234
  211. package/lib/Utils/gui/Widget.js +0 -80
  212. package/lib/Utils/placeObjectOnGround.js +0 -137
  213. package/lib/Worker/LASLoaderWorker.js +0 -19
  214. package/lib/Worker/Potree2Worker.js +0 -21
@@ -1,221 +0,0 @@
1
- import { chooseNextLevelToFetch } from "../Layer/LayerUpdateStrategy.js";
2
- import LayerUpdateState from "../Layer/LayerUpdateState.js";
3
- import handlingError from "./handlerNodeError.js";
4
- function materialCommandQueuePriorityFunction(material) {
5
- // We know that 'node' is visible because commands can only be
6
- // issued for visible nodes.
7
- // TODO: need priorization of displayed nodes
8
- // Then prefer displayed node over non-displayed one
9
- return material.visible ? 100 : 10;
10
- }
11
- function refinementCommandCancellationFn(cmd) {
12
- if (!cmd.requester.parent || !cmd.requester.material) {
13
- return true;
14
- }
15
- // Cancel the command if the tile already has a better texture.
16
- // This is only needed for elevation layers, because we may have several
17
- // concurrent layers but we can only use one texture.
18
- if (cmd.layer.isElevationLayer && cmd.requester.material.getElevationLayer() && cmd.targetLevel <= cmd.requester.material.getElevationLayer().level) {
19
- return true;
20
- }
21
-
22
- // Cancel the command if the layer was removed between command scheduling and command execution
23
- if (!cmd.requester.layerUpdateState[cmd.layer.id] || !cmd.layer.source._featuresCaches[cmd.layer.crs]) {
24
- return true;
25
- }
26
- return !cmd.requester.material.visible;
27
- }
28
- function buildCommand(view, layer, extentsSource, extentsDestination, requester) {
29
- return {
30
- view,
31
- layer,
32
- extentsSource,
33
- extentsDestination,
34
- requester,
35
- priority: materialCommandQueuePriorityFunction(requester.material),
36
- earlyDropFunction: refinementCommandCancellationFn
37
- };
38
- }
39
- export function updateLayeredMaterialNodeImagery(context, layer, node, parent) {
40
- const material = node.material;
41
- if (!parent || !material) {
42
- return;
43
- }
44
- const extentsDestination = node.getExtentsByProjection(layer.crs);
45
- const zoom = extentsDestination[0].zoom;
46
- if (zoom > layer.zoom.max || zoom < layer.zoom.min) {
47
- return;
48
- }
49
- let nodeLayer = material.getLayer(layer.id);
50
-
51
- // Initialisation
52
- if (node.layerUpdateState[layer.id] === undefined) {
53
- node.layerUpdateState[layer.id] = new LayerUpdateState();
54
- if (!layer.source.extentInsideLimit(node.extent, zoom)) {
55
- // we also need to check that tile's parent doesn't have a texture for this layer,
56
- // because even if this tile is outside of the layer, it could inherit it's
57
- // parent texture
58
- if (!(!layer.noTextureParentOutsideLimit && parent.material && parent.material.getLayer && parent.material.getLayer(layer.id))) {
59
- node.layerUpdateState[layer.id].noMoreUpdatePossible();
60
- return;
61
- } // ok, we're going to inherit our parent's texture
62
- }
63
- if (!nodeLayer) {
64
- // Create new raster node
65
- nodeLayer = layer.setupRasterNode(node);
66
-
67
- // Init the node by parent
68
- const parentLayer = parent.material?.getLayer(layer.id);
69
- nodeLayer.initFromParent(parentLayer, extentsDestination);
70
- }
71
-
72
- // Proposed new process, two separate processes:
73
- // * FIRST PASS: initNodeXXXFromParent and get out of the function
74
- // * SECOND PASS: Fetch best texture
75
-
76
- // The two-step allows you to filter out unnecessary requests
77
- // Indeed in the second pass, their state (not visible or not displayed) can block them to fetch
78
- if (nodeLayer.level >= layer.source.zoom.min) {
79
- context.view.notifyChange(node, false);
80
- return;
81
- }
82
- }
83
-
84
- // Node is hidden, no need to update it
85
- if (!material.visible) {
86
- return;
87
- }
88
-
89
- // An update is pending / or impossible -> abort
90
- if (!layer.visible || !node.layerUpdateState[layer.id].canTryUpdate()) {
91
- return;
92
- }
93
- if (nodeLayer.level >= extentsDestination[0].zoom) {
94
- // default decision method
95
- node.layerUpdateState[layer.id].noMoreUpdatePossible();
96
- return;
97
- }
98
-
99
- // is fetching data from this layer disabled?
100
- if (layer.frozen) {
101
- return;
102
- }
103
- const failureParams = node.layerUpdateState[layer.id].failureParams;
104
- const destinationLevel = extentsDestination[0].zoom || node.level;
105
- const targetLevel = chooseNextLevelToFetch(layer.updateStrategy.type, node, destinationLevel, nodeLayer.level, layer, failureParams);
106
- if (!layer.source.isVectorSource && targetLevel <= nodeLayer.level || targetLevel > destinationLevel) {
107
- if (failureParams.lowestLevelError != Infinity) {
108
- // this is the highest level found in case of error.
109
- node.layerUpdateState[layer.id].noMoreUpdatePossible();
110
- }
111
- return;
112
- } else if (!layer.source.extentInsideLimit(node.extent, targetLevel)) {
113
- node.layerUpdateState[layer.id].noData({
114
- targetLevel
115
- });
116
- context.view.notifyChange(node, false);
117
- return;
118
- }
119
- const extentsSource = extentsDestination.map(e => e.tiledExtentParent(targetLevel));
120
- node.layerUpdateState[layer.id].newTry();
121
- const command = buildCommand(context.view, layer, extentsSource, extentsDestination, node);
122
- return context.scheduler.execute(command).then(result => {
123
- // Does nothing if the layer has been removed while command was being or waiting to be executed
124
- if (!node.layerUpdateState[layer.id]) {
125
- return;
126
- }
127
- // TODO: Handle error : result is undefined in provider. throw error
128
- const pitchs = extentsDestination.map((ext, i) => ext.offsetToParent(result[i].extent, nodeLayer.offsetScales[i]));
129
- nodeLayer.setTextures(result, pitchs);
130
- node.layerUpdateState[layer.id].success();
131
- }, err => handlingError(err, node, layer, targetLevel, context.view));
132
- }
133
- export function updateLayeredMaterialNodeElevation(context, layer, node, parent) {
134
- const material = node.material;
135
- if (!parent || !material) {
136
- return;
137
- }
138
-
139
- // TODO: we need either
140
- // - compound or exclusive layers
141
- // - support for multiple elevation layers
142
-
143
- // Elevation is currently handled differently from color layers.
144
- // This is caused by a LayeredMaterial limitation: only 1 elevation texture
145
- // can be used (where a tile can have N textures x M layers)
146
- const extentsDestination = node.getExtentsByProjection(layer.crs);
147
- const zoom = extentsDestination[0].zoom;
148
- if (zoom > layer.zoom.max || zoom < layer.zoom.min) {
149
- return;
150
- }
151
- // Init elevation layer, and inherit from parent if possible
152
- let nodeLayer = material.getElevationLayer();
153
- if (!nodeLayer) {
154
- nodeLayer = layer.setupRasterNode(node);
155
- }
156
- if (node.layerUpdateState[layer.id] === undefined) {
157
- node.layerUpdateState[layer.id] = new LayerUpdateState();
158
- const parentLayer = parent.material?.getLayer(layer.id);
159
- nodeLayer.initFromParent(parentLayer, extentsDestination);
160
- if (nodeLayer.level >= layer.source.zoom.min) {
161
- context.view.notifyChange(node, false);
162
- return;
163
- }
164
- }
165
-
166
- // Possible conditions to *not* update the elevation texture
167
- if (layer.frozen || !material.visible || !node.layerUpdateState[layer.id].canTryUpdate()) {
168
- return;
169
- }
170
- const failureParams = node.layerUpdateState[layer.id].failureParams;
171
- const targetLevel = chooseNextLevelToFetch(layer.updateStrategy.type, node, extentsDestination[0].zoom, nodeLayer.level, layer, failureParams);
172
- if (targetLevel <= nodeLayer.level || targetLevel > extentsDestination[0].zoom) {
173
- node.layerUpdateState[layer.id].noMoreUpdatePossible();
174
- return;
175
- } else if (!layer.source.extentInsideLimit(node.extent, targetLevel)) {
176
- node.layerUpdateState[layer.id].noData({
177
- targetLevel
178
- });
179
- context.view.notifyChange(node, false);
180
- return;
181
- }
182
- const extentsSource = extentsDestination.map(e => e.tiledExtentParent(targetLevel));
183
- node.layerUpdateState[layer.id].newTry();
184
- const command = buildCommand(context.view, layer, extentsSource, extentsDestination, node);
185
- return context.scheduler.execute(command).then(result => {
186
- // Does nothing if the layer has been removed while command was being or waiting to be executed
187
- if (!node.layerUpdateState[layer.id]) {
188
- return;
189
- }
190
-
191
- // Do not apply the new texture if its level is < than the current
192
- // one. This is only needed for elevation layers, because we may
193
- // have several concurrent layers but we can only use one texture.
194
- if (targetLevel <= nodeLayer.level) {
195
- node.layerUpdateState[layer.id].noMoreUpdatePossible();
196
- return;
197
- }
198
- const pitchs = extentsDestination.map((ext, i) => ext.offsetToParent(result[i].extent, nodeLayer.offsetScales[i]));
199
- nodeLayer.setTextures(result, pitchs);
200
- node.layerUpdateState[layer.id].success();
201
- }, err => handlingError(err, node, layer, targetLevel, context.view));
202
- }
203
- export function removeLayeredMaterialNodeLayer(layerId) {
204
- /**
205
- * @param {TileMesh} node - The node to udpate.
206
- */
207
- return function (node) {
208
- if (node.material?.removeLayer) {
209
- if (node.material.elevationLayerIds.indexOf(layerId) > -1) {
210
- node.setBBoxZ({
211
- min: 0,
212
- max: 0
213
- });
214
- }
215
- node.material.removeLayer(layerId);
216
- }
217
- if (node.layerUpdateState && node.layerUpdateState[layerId]) {
218
- delete node.layerUpdateState[layerId];
219
- }
220
- };
221
- }
@@ -1,97 +0,0 @@
1
- function disposeSingleMaterialAndTextures(material) {
2
- material.dispose();
3
- // dispose textures
4
- for (const key of Object.keys(material)) {
5
- const val = material[key];
6
- if (val && val.isTexture) {
7
- val.dispose();
8
- }
9
- }
10
- }
11
- export default {
12
- /**
13
- * Cleanup obj to release three.js allocated resources
14
- * @param {Object3D} obj object to release
15
- */
16
- cleanup(obj) {
17
- obj.layer = null;
18
-
19
- // THREE.Scene dispose function displays a deprecation message
20
- if (!obj.isScene && typeof obj.dispose === 'function') {
21
- obj.dispose();
22
- } else {
23
- if (obj.geometry) {
24
- obj.geometry.dispose();
25
- // the Object Removal Helper causes inconsistencies
26
- // when it assigns null to a geometry present in the Cache.
27
- // Actually, the cache can provide a mesh whose geometry is null.
28
- // see https://github.com/iTowns/itowns/issues/869
29
- // obj.geometry = null;
30
- }
31
- if (obj.material) {
32
- if (Array.isArray(obj.material)) {
33
- for (const material of obj.material) {
34
- disposeSingleMaterialAndTextures(material);
35
- }
36
- } else {
37
- disposeSingleMaterialAndTextures(obj.material);
38
- }
39
- }
40
- obj.dispatchEvent({
41
- type: 'dispose'
42
- });
43
- }
44
- },
45
- /**
46
- * Remove obj's children belonging to a layer.
47
- * Neither obj nor its children will be disposed!
48
- * @param {Layer} layer The layer that objects must belong to. Other object are ignored
49
- * @param {Object3D} obj The Object3D we want to clean
50
- * @return {Array} an array of removed Object3D from obj (not including the recursive removals)
51
- */
52
- removeChildren(layer, obj) {
53
- const toRemove = obj.children.filter(c => (c.layer && c.layer.id) === layer.id);
54
- obj.remove(...toRemove);
55
- return toRemove;
56
- },
57
- /**
58
- * Remove an obj and all its children belonging to a layer and only cleanup the obj (and not its children).
59
- * obj will be disposed but its children **won't**!
60
- * @param {Layer} layer The layer that objects must belong to. Other object are ignored
61
- * @param {Object3D} obj The Object3D we want to clean
62
- * @return {Array} an array of removed Object3D from obj (not including the recursive removals)
63
- */
64
- removeChildrenAndCleanup(layer, obj) {
65
- const toRemove = obj.children.filter(c => (c.layer && c.layer.id) === layer.id);
66
- obj.remove(...toRemove);
67
- if (obj.layer === layer) {
68
- this.cleanup(obj);
69
- }
70
- return toRemove;
71
- },
72
- /**
73
- * Recursively remove an obj and all its children belonging to a layer.
74
- * All removed obj will have their geometry/material disposed.
75
- * @param {Layer} layer The layer that objects must belong to. Other object are ignored
76
- * @param {Object3D} obj The Object3D we want to clean
77
- * @return {Array} an array of removed Object3D from obj (not including the recursive removals)
78
- */
79
- removeChildrenAndCleanupRecursively(layer, obj) {
80
- // Objects are filtered by id because the obj hierarchy may also contain labels that have been added as childs
81
- // of the objects which have their own removal logic
82
- let toRemove = obj.children.filter(c => c.layer && c.layer.id === layer.id);
83
- const linked = obj.link && obj.link[layer.id];
84
- if (linked?.children.length) {
85
- toRemove = toRemove.concat(linked.children);
86
- delete obj.link[layer.id];
87
- }
88
- for (const c of toRemove) {
89
- this.removeChildrenAndCleanupRecursively(layer, c);
90
- }
91
- obj.remove(...toRemove);
92
- if (obj.layer && obj.layer.id === layer.id) {
93
- this.cleanup(obj);
94
- }
95
- return toRemove;
96
- }
97
- };
@@ -1,23 +0,0 @@
1
- // max retry loading before changing the status to definitiveError
2
- const MAX_RETRY = 4;
3
- export default function handlingError(err, node, layer, targetLevel, view) {
4
- // Cancel error handling if the layer was removed between command scheduling and its execution
5
- if (!node.layerUpdateState[layer.id]) {
6
- return;
7
- }
8
- if (err.isCancelledCommandException) {
9
- node.layerUpdateState[layer.id].success();
10
- } else if (err instanceof SyntaxError) {
11
- node.layerUpdateState[layer.id].failure(0, true);
12
- } else {
13
- const definitiveError = node.layerUpdateState[layer.id].errorCount > MAX_RETRY;
14
- node.layerUpdateState[layer.id].failure(Date.now(), definitiveError, {
15
- targetLevel
16
- });
17
- if (!definitiveError) {
18
- window.setTimeout(() => {
19
- view.notifyChange(node, false);
20
- }, node.layerUpdateState[layer.id].secondsUntilNextTry() * 1000);
21
- }
22
- }
23
- }
@@ -1,149 +0,0 @@
1
- import * as THREE from 'three';
2
- import B3dmParser from "../Parser/B3dmParser.js";
3
- import PntsParser from "../Parser/PntsParser.js";
4
- import Fetcher from "./Fetcher.js";
5
- import ReferLayerProperties from "../Layer/ReferencingLayerProperties.js";
6
- import PointsMaterial from "../Renderer/PointsMaterial.js";
7
- // A bit weird but temporary until we remove this deprecated provider. Mainly to benefit from the enableDracoLoader and enableKtx2Loader
8
- // methods.
9
- import { itownsGLTFLoader } from "../Layer/OGC3DTilesLayer.js";
10
- const utf8Decoder = new TextDecoder();
11
- function b3dmToMesh(data, layer, url) {
12
- const urlBase = THREE.LoaderUtils.extractUrlBase(url);
13
- const options = {
14
- gltfUpAxis: layer.tileset.asset.gltfUpAxis,
15
- urlBase,
16
- overrideMaterials: layer.overrideMaterials,
17
- doNotPatchMaterial: layer.doNotPatchMaterial,
18
- registeredExtensions: layer.registeredExtensions,
19
- layer
20
- };
21
- return B3dmParser.parse(data, options).then(result => {
22
- const batchTable = result.batchTable;
23
- // object3d is actually a THREE.Scene
24
- const object3d = result.gltf.scene;
25
- return {
26
- batchTable,
27
- object3d
28
- };
29
- });
30
- }
31
- function gltfToMesh(data, layer, url) {
32
- const urlBase = THREE.LoaderUtils.extractUrlBase(url);
33
- return itownsGLTFLoader.parseAsync(data, urlBase).then(result => ({
34
- object3d: result.scene
35
- }));
36
- }
37
- function pntsParse(data, layer) {
38
- return PntsParser.parse(data, layer.registeredExtensions).then(result => {
39
- const material = layer.material ? layer.material.clone() : new PointsMaterial({
40
- size: 1,
41
- mode: layer.pntsMode,
42
- shape: layer.pntsShape,
43
- classificationScheme: layer.classification,
44
- sizeMode: layer.pntsSizeMode,
45
- minAttenuatedSize: layer.pntsMinAttenuatedSize,
46
- maxAttenuatedSize: layer.pntsMaxAttenuatedSize
47
- });
48
-
49
- // refer material properties in the layer so when layers opacity and visibility is updated, the material is
50
- // automatically updated
51
- ReferLayerProperties(material, layer);
52
-
53
- // creation points with geometry and material
54
- const points = new THREE.Points(result.point.geometry, material);
55
- if (result.point.offset) {
56
- points.position.copy(result.point.offset);
57
- }
58
- return {
59
- object3d: points,
60
- batchTable: result.batchTable
61
- };
62
- });
63
- }
64
- export function configureTile(tile, layer, metadata, parent) {
65
- tile.frustumCulled = false;
66
- tile.layer = layer;
67
-
68
- // parse metadata
69
- if (metadata.transform) {
70
- tile.applyMatrix4(metadata.transform);
71
- }
72
- tile.geometricError = metadata.geometricError;
73
- tile.tileId = metadata.tileId;
74
- if (metadata.refine) {
75
- tile.additiveRefinement = metadata.refine.toUpperCase() === 'ADD';
76
- } else {
77
- tile.additiveRefinement = parent ? parent.additiveRefinement : false;
78
- }
79
- tile.viewerRequestVolume = metadata.viewerRequestVolume;
80
- tile.boundingVolume = metadata.boundingVolume;
81
- tile.updateMatrixWorld();
82
- }
83
- function executeCommand(command) {
84
- const layer = command.layer;
85
- const metadata = command.metadata;
86
- const tile = new THREE.Object3D();
87
- configureTile(tile, layer, metadata, command.requester);
88
- // Patch for supporting 3D Tiles pre 1.0 (metadata.content.url) and 1.0
89
- // (metadata.content.uri)
90
- const path = metadata.content && (metadata.content.url || metadata.content.uri);
91
- const setLayer = obj => {
92
- obj.userData.metadata = metadata;
93
- obj.layer = layer;
94
- };
95
- if (path) {
96
- // Check if we have relative or absolute url (with tileset's lopocs for example)
97
- let url = path.startsWith('http') ? path : metadata.baseURL + path;
98
- if (layer.source.isC3DTilesGoogleSource) {
99
- url = layer.source.getTileUrl(url);
100
- }
101
- const supportedFormats = {
102
- b3dm: b3dmToMesh,
103
- pnts: pntsParse,
104
- gltf: gltfToMesh
105
- };
106
- return Fetcher.arrayBuffer(url, layer.source.networkOptions).then(result => {
107
- if (result !== undefined) {
108
- let func;
109
- const magic = utf8Decoder.decode(new Uint8Array(result, 0, 4));
110
- if (magic[0] === '{') {
111
- result = JSON.parse(utf8Decoder.decode(new Uint8Array(result)));
112
- // Another specifics of 3D tiles from Google: tilesets in tilesets are required from the root base
113
- // url and not from their parent base url
114
- const newPrefix = layer.source.isC3DTilesGoogleSource ? layer.source.baseUrl : url.slice(0, url.lastIndexOf('/') + 1);
115
- layer.tileset.extendTileset(result, metadata.tileId, newPrefix, layer.registeredExtensions);
116
- } else if (magic == 'b3dm') {
117
- func = supportedFormats.b3dm;
118
- } else if (magic == 'pnts') {
119
- layer.hasPnts = true;
120
- func = supportedFormats.pnts;
121
- } else if (magic == 'glTF') {
122
- func = supportedFormats.gltf;
123
- } else {
124
- return Promise.reject(`Unsupported magic code ${magic}`);
125
- }
126
- if (func) {
127
- // TODO: request should be delayed if there is a viewerRequestVolume
128
- return func(result, layer, url).then(content => {
129
- tile.content = content.object3d;
130
- if (content.batchTable) {
131
- tile.batchTable = content.batchTable;
132
- }
133
- tile.add(content.object3d);
134
- tile.traverse(setLayer);
135
- return tile;
136
- });
137
- }
138
- }
139
- tile.traverse(setLayer);
140
- return tile;
141
- });
142
- } else {
143
- tile.traverse(setLayer);
144
- return Promise.resolve(tile);
145
- }
146
- }
147
- export default {
148
- executeCommand
149
- };
@@ -1,8 +0,0 @@
1
- export default {
2
- executeCommand(command) {
3
- const layer = command.layer;
4
- const src = command.extentsSource;
5
- const dst = command.extentsDestination || src;
6
- return Promise.all(src.map((from, i) => layer.getData(from, dst[i])));
7
- }
8
- };