itowns 2.44.3-next.40 → 2.44.3-next.41

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 (199) hide show
  1. package/README.md +3 -129
  2. package/package.json +16 -72
  3. package/CODING.md +0 -120
  4. package/CONTRIBUTING.md +0 -150
  5. package/CONTRIBUTORS.md +0 -56
  6. package/LICENSE.md +0 -44
  7. package/changelog.md +0 -1361
  8. package/dist/455.js +0 -2
  9. package/dist/455.js.map +0 -1
  10. package/dist/debug.js +0 -3
  11. package/dist/debug.js.LICENSE.txt +0 -13
  12. package/dist/debug.js.map +0 -1
  13. package/dist/itowns.js +0 -3
  14. package/dist/itowns.js.LICENSE.txt +0 -5
  15. package/dist/itowns.js.map +0 -1
  16. package/dist/itowns_lasparser.js +0 -2
  17. package/dist/itowns_lasparser.js.map +0 -1
  18. package/dist/itowns_lasworker.js +0 -2
  19. package/dist/itowns_lasworker.js.map +0 -1
  20. package/dist/itowns_potree2worker.js +0 -2
  21. package/dist/itowns_potree2worker.js.map +0 -1
  22. package/dist/itowns_widgets.js +0 -2
  23. package/dist/itowns_widgets.js.map +0 -1
  24. package/examples/.eslintrc.cjs +0 -35
  25. package/examples/jsm/.eslintrc.cjs +0 -38
  26. package/lib/Controls/FirstPersonControls.js +0 -308
  27. package/lib/Controls/FlyControls.js +0 -175
  28. package/lib/Controls/GlobeControls.js +0 -1179
  29. package/lib/Controls/PlanarControls.js +0 -1025
  30. package/lib/Controls/StateControl.js +0 -432
  31. package/lib/Controls/StreetControls.js +0 -392
  32. package/lib/Converter/Feature2Mesh.js +0 -614
  33. package/lib/Converter/Feature2Texture.js +0 -175
  34. package/lib/Converter/convertToTile.js +0 -70
  35. package/lib/Converter/textureConverter.js +0 -43
  36. package/lib/Core/3DTiles/C3DTBatchTable.js +0 -131
  37. package/lib/Core/3DTiles/C3DTBatchTableHierarchyExtension.js +0 -96
  38. package/lib/Core/3DTiles/C3DTBoundingVolume.js +0 -157
  39. package/lib/Core/3DTiles/C3DTExtensions.js +0 -97
  40. package/lib/Core/3DTiles/C3DTFeature.js +0 -110
  41. package/lib/Core/3DTiles/C3DTilesEnums.js +0 -20
  42. package/lib/Core/3DTiles/C3DTileset.js +0 -99
  43. package/lib/Core/3DTiles/utils/BinaryPropertyAccessor.js +0 -100
  44. package/lib/Core/AnimationPlayer.js +0 -142
  45. package/lib/Core/CopcNode.js +0 -174
  46. package/lib/Core/Deprecated/Undeprecator.js +0 -74
  47. package/lib/Core/EntwinePointTileNode.js +0 -126
  48. package/lib/Core/Feature.js +0 -489
  49. package/lib/Core/Geographic/CoordStars.js +0 -80
  50. package/lib/Core/Geographic/Coordinates.js +0 -331
  51. package/lib/Core/Geographic/Crs.js +0 -170
  52. package/lib/Core/Geographic/Extent.js +0 -550
  53. package/lib/Core/Geographic/GeoidGrid.js +0 -109
  54. package/lib/Core/Label.js +0 -222
  55. package/lib/Core/MainLoop.js +0 -209
  56. package/lib/Core/Math/Ellipsoid.js +0 -185
  57. package/lib/Core/Picking.js +0 -255
  58. package/lib/Core/PointCloudNode.js +0 -42
  59. package/lib/Core/Potree2Node.js +0 -206
  60. package/lib/Core/Potree2PointAttributes.js +0 -139
  61. package/lib/Core/PotreeNode.js +0 -101
  62. package/lib/Core/Prefab/Globe/Atmosphere.js +0 -295
  63. package/lib/Core/Prefab/Globe/GlobeLayer.js +0 -152
  64. package/lib/Core/Prefab/Globe/GlobeTileBuilder.js +0 -111
  65. package/lib/Core/Prefab/Globe/SkyShader.js +0 -78
  66. package/lib/Core/Prefab/GlobeView.js +0 -156
  67. package/lib/Core/Prefab/Planar/PlanarLayer.js +0 -59
  68. package/lib/Core/Prefab/Planar/PlanarTileBuilder.js +0 -72
  69. package/lib/Core/Prefab/PlanarView.js +0 -62
  70. package/lib/Core/Prefab/TileBuilder.js +0 -82
  71. package/lib/Core/Prefab/computeBufferTileGeometry.js +0 -248
  72. package/lib/Core/Scheduler/Cache.js +0 -17
  73. package/lib/Core/Scheduler/CancelledCommandException.js +0 -15
  74. package/lib/Core/Scheduler/Scheduler.js +0 -294
  75. package/lib/Core/Style.js +0 -660
  76. package/lib/Core/StyleOptions.js +0 -486
  77. package/lib/Core/System/Capabilities.js +0 -63
  78. package/lib/Core/Tile/Tile.js +0 -207
  79. package/lib/Core/Tile/TileGrid.js +0 -49
  80. package/lib/Core/TileGeometry.js +0 -124
  81. package/lib/Core/TileMesh.js +0 -108
  82. package/lib/Core/View.js +0 -1116
  83. package/lib/Layer/C3DTilesLayer.js +0 -459
  84. package/lib/Layer/ColorLayer.js +0 -154
  85. package/lib/Layer/CopcLayer.js +0 -63
  86. package/lib/Layer/ElevationLayer.js +0 -139
  87. package/lib/Layer/EntwinePointTileLayer.js +0 -71
  88. package/lib/Layer/FeatureGeometryLayer.js +0 -77
  89. package/lib/Layer/GeoidLayer.js +0 -80
  90. package/lib/Layer/GeometryLayer.js +0 -233
  91. package/lib/Layer/InfoLayer.js +0 -64
  92. package/lib/Layer/LabelLayer.js +0 -470
  93. package/lib/Layer/Layer.js +0 -335
  94. package/lib/Layer/LayerUpdateState.js +0 -89
  95. package/lib/Layer/LayerUpdateStrategy.js +0 -80
  96. package/lib/Layer/OGC3DTilesLayer.js +0 -543
  97. package/lib/Layer/OrientedImageLayer.js +0 -228
  98. package/lib/Layer/PointCloudLayer.js +0 -405
  99. package/lib/Layer/Potree2Layer.js +0 -171
  100. package/lib/Layer/PotreeLayer.js +0 -72
  101. package/lib/Layer/RasterLayer.js +0 -37
  102. package/lib/Layer/ReferencingLayerProperties.js +0 -62
  103. package/lib/Layer/TiledGeometryLayer.js +0 -459
  104. package/lib/Loader/LASLoader.js +0 -193
  105. package/lib/Loader/Potree2BrotliLoader.js +0 -261
  106. package/lib/Loader/Potree2Loader.js +0 -207
  107. package/lib/Main.js +0 -115
  108. package/lib/MainBundle.js +0 -4
  109. package/lib/Parser/B3dmParser.js +0 -174
  110. package/lib/Parser/CameraCalibrationParser.js +0 -94
  111. package/lib/Parser/GDFParser.js +0 -72
  112. package/lib/Parser/GTXParser.js +0 -75
  113. package/lib/Parser/GeoJsonParser.js +0 -212
  114. package/lib/Parser/GpxParser.js +0 -25
  115. package/lib/Parser/ISGParser.js +0 -71
  116. package/lib/Parser/KMLParser.js +0 -25
  117. package/lib/Parser/LASParser.js +0 -137
  118. package/lib/Parser/MapBoxUrlParser.js +0 -83
  119. package/lib/Parser/PntsParser.js +0 -131
  120. package/lib/Parser/Potree2BinParser.js +0 -92
  121. package/lib/Parser/PotreeBinParser.js +0 -106
  122. package/lib/Parser/PotreeCinParser.js +0 -29
  123. package/lib/Parser/ShapefileParser.js +0 -78
  124. package/lib/Parser/VectorTileParser.js +0 -215
  125. package/lib/Parser/XbilParser.js +0 -120
  126. package/lib/Parser/deprecated/LegacyGLTFLoader.js +0 -1386
  127. package/lib/Parser/iGLTFLoader.js +0 -168
  128. package/lib/Process/3dTilesProcessing.js +0 -304
  129. package/lib/Process/FeatureProcessing.js +0 -76
  130. package/lib/Process/LayeredMaterialNodeProcessing.js +0 -221
  131. package/lib/Process/ObjectRemovalHelper.js +0 -97
  132. package/lib/Process/handlerNodeError.js +0 -23
  133. package/lib/Provider/3dTilesProvider.js +0 -149
  134. package/lib/Provider/DataSourceProvider.js +0 -8
  135. package/lib/Provider/Fetcher.js +0 -233
  136. package/lib/Provider/PointCloudProvider.js +0 -45
  137. package/lib/Provider/TileProvider.js +0 -16
  138. package/lib/Provider/URLBuilder.js +0 -116
  139. package/lib/Renderer/Camera.js +0 -281
  140. package/lib/Renderer/Color.js +0 -56
  141. package/lib/Renderer/ColorLayersOrdering.js +0 -115
  142. package/lib/Renderer/CommonMaterial.js +0 -31
  143. package/lib/Renderer/Label2DRenderer.js +0 -192
  144. package/lib/Renderer/LayeredMaterial.js +0 -243
  145. package/lib/Renderer/OBB.js +0 -151
  146. package/lib/Renderer/OrientedImageCamera.js +0 -118
  147. package/lib/Renderer/OrientedImageMaterial.js +0 -167
  148. package/lib/Renderer/PointsMaterial.js +0 -485
  149. package/lib/Renderer/RasterTile.js +0 -208
  150. package/lib/Renderer/RenderMode.js +0 -31
  151. package/lib/Renderer/Shader/ShaderChunk.js +0 -160
  152. package/lib/Renderer/Shader/ShaderUtils.js +0 -47
  153. package/lib/Renderer/SphereHelper.js +0 -17
  154. package/lib/Renderer/WebXR.js +0 -51
  155. package/lib/Renderer/c3DEngine.js +0 -214
  156. package/lib/Source/C3DTilesGoogleSource.js +0 -74
  157. package/lib/Source/C3DTilesIonSource.js +0 -54
  158. package/lib/Source/C3DTilesSource.js +0 -30
  159. package/lib/Source/CopcSource.js +0 -126
  160. package/lib/Source/EntwinePointTileSource.js +0 -72
  161. package/lib/Source/FileSource.js +0 -188
  162. package/lib/Source/OGC3DTilesGoogleSource.js +0 -29
  163. package/lib/Source/OGC3DTilesIonSource.js +0 -34
  164. package/lib/Source/OGC3DTilesSource.js +0 -21
  165. package/lib/Source/OrientedImageSource.js +0 -59
  166. package/lib/Source/Potree2Source.js +0 -167
  167. package/lib/Source/PotreeSource.js +0 -82
  168. package/lib/Source/Source.js +0 -203
  169. package/lib/Source/TMSSource.js +0 -144
  170. package/lib/Source/VectorTilesSource.js +0 -182
  171. package/lib/Source/WFSSource.js +0 -170
  172. package/lib/Source/WMSSource.js +0 -168
  173. package/lib/Source/WMTSSource.js +0 -92
  174. package/lib/ThreeExtended/capabilities/WebGL.js +0 -69
  175. package/lib/ThreeExtended/libs/ktx-parse.module.js +0 -506
  176. package/lib/ThreeExtended/libs/zstddec.module.js +0 -29
  177. package/lib/ThreeExtended/loaders/DDSLoader.js +0 -200
  178. package/lib/ThreeExtended/loaders/DRACOLoader.js +0 -400
  179. package/lib/ThreeExtended/loaders/GLTFLoader.js +0 -2879
  180. package/lib/ThreeExtended/loaders/KTX2Loader.js +0 -709
  181. package/lib/ThreeExtended/math/ColorSpaces.js +0 -59
  182. package/lib/ThreeExtended/utils/BufferGeometryUtils.js +0 -846
  183. package/lib/ThreeExtended/utils/WorkerPool.js +0 -70
  184. package/lib/Utils/CameraUtils.js +0 -555
  185. package/lib/Utils/DEMUtils.js +0 -350
  186. package/lib/Utils/FeaturesUtils.js +0 -156
  187. package/lib/Utils/Gradients.js +0 -16
  188. package/lib/Utils/OrientationUtils.js +0 -457
  189. package/lib/Utils/ThreeUtils.js +0 -115
  190. package/lib/Utils/gui/C3DTilesStyle.js +0 -215
  191. package/lib/Utils/gui/Main.js +0 -7
  192. package/lib/Utils/gui/Minimap.js +0 -154
  193. package/lib/Utils/gui/Navigation.js +0 -245
  194. package/lib/Utils/gui/Scale.js +0 -107
  195. package/lib/Utils/gui/Searchbar.js +0 -234
  196. package/lib/Utils/gui/Widget.js +0 -80
  197. package/lib/Utils/placeObjectOnGround.js +0 -136
  198. package/lib/Worker/LASLoaderWorker.js +0 -19
  199. 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
- };