@cesium/engine 25.0.0 → 26.0.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 (187) hide show
  1. package/Build/Workers/{chunk-GPIGURCG.js → chunk-3VFEWOBI.js} +7 -7
  2. package/Build/Workers/{chunk-BTX2NL3P.js → chunk-424RNO3D.js} +18 -18
  3. package/Build/Workers/{chunk-HSVQATK2.js → chunk-4MGMYHOO.js} +6 -6
  4. package/Build/Workers/{chunk-FIBS5S7R.js → chunk-4S7IE3LB.js} +2 -2
  5. package/Build/Workers/{chunk-A7ZBMVFS.js → chunk-52JDLOEM.js} +14 -14
  6. package/Build/Workers/{chunk-ZCCIIBZT.js → chunk-54I6Y66F.js} +6 -6
  7. package/Build/Workers/{chunk-J647NNZW.js → chunk-6YEE6JDR.js} +6 -6
  8. package/Build/Workers/{chunk-HVMG6AG4.js → chunk-7J2HKPRH.js} +9 -9
  9. package/Build/Workers/{chunk-K6NFIRFB.js → chunk-7WM2PX4V.js} +5 -5
  10. package/Build/Workers/{chunk-3LSD7OOA.js → chunk-ACXQXN46.js} +16 -16
  11. package/Build/Workers/{chunk-CZ23Y3RM.js → chunk-AYKR4VBR.js} +2 -2
  12. package/Build/Workers/{chunk-4MTRQFJP.js → chunk-C6J67V5A.js} +1 -1
  13. package/Build/Workers/{chunk-WTQGE7Q6.js → chunk-C6KNZ7T4.js} +17 -17
  14. package/Build/Workers/{chunk-AWFZHD2B.js → chunk-CFQP6LYM.js} +4 -4
  15. package/Build/Workers/{chunk-ST2UWDUU.js → chunk-CXOYE2WM.js} +5 -5
  16. package/Build/Workers/{chunk-H2A4USJR.js → chunk-CZEYZU4N.js} +10 -10
  17. package/Build/Workers/{chunk-DFEI5MAV.js → chunk-DBOEKL43.js} +7 -7
  18. package/Build/Workers/{chunk-A7A433MD.js → chunk-DDWSZVMY.js} +5 -5
  19. package/Build/Workers/{chunk-J7KQEKPK.js → chunk-DOBXCNC3.js} +13 -13
  20. package/Build/Workers/{chunk-URUCCIPS.js → chunk-E7VQ76KE.js} +6 -6
  21. package/Build/Workers/{chunk-ZAPOS52G.js → chunk-EBSIOBXY.js} +8 -8
  22. package/Build/Workers/{chunk-3VDDRF2E.js → chunk-EF2QYXGA.js} +14 -14
  23. package/Build/Workers/{chunk-WN6P5UDH.js → chunk-EPYXRCDB.js} +12 -12
  24. package/Build/Workers/{chunk-EZARA5FJ.js → chunk-F6QDY6HU.js} +13 -13
  25. package/Build/Workers/{chunk-GL7DNVUS.js → chunk-FRQZECAO.js} +5 -5
  26. package/Build/Workers/{chunk-VQKLRBIK.js → chunk-G7PXZRVF.js} +7 -7
  27. package/Build/Workers/{chunk-4QQXGTCE.js → chunk-INUEEEQA.js} +8 -8
  28. package/Build/Workers/{chunk-ITD2IN7N.js → chunk-IRBKFCEJ.js} +2 -2
  29. package/Build/Workers/{chunk-6SDGQI27.js → chunk-IYOUHCZB.js} +1 -1
  30. package/Build/Workers/{chunk-DYT5NR6P.js → chunk-J6BWOHUF.js} +3 -3
  31. package/Build/Workers/{chunk-4GF4MVPY.js → chunk-KFSTQKNM.js} +7 -7
  32. package/Build/Workers/{chunk-4XXHJI6Y.js → chunk-KKOSKAZB.js} +17 -17
  33. package/Build/Workers/{chunk-WC57YYBN.js → chunk-KSSWJIZW.js} +2 -2
  34. package/Build/Workers/{chunk-5T6QQAJW.js → chunk-M3B5JKSM.js} +1 -1
  35. package/Build/Workers/{chunk-QO2CGXMP.js → chunk-MPZHGZU6.js} +6 -6
  36. package/Build/Workers/{chunk-WUBKZFF6.js → chunk-MYP774IS.js} +9 -9
  37. package/Build/Workers/{chunk-WNN5D4W3.js → chunk-O3EA5HS7.js} +10 -10
  38. package/Build/Workers/{chunk-77RL3MBD.js → chunk-P3CK7MCY.js} +25 -4
  39. package/Build/Workers/{chunk-QXNQQYPV.js → chunk-Q3PY526V.js} +8 -8
  40. package/Build/Workers/{chunk-CKQP3DSS.js → chunk-QN67VG36.js} +6 -6
  41. package/Build/Workers/{chunk-ACFFCHHZ.js → chunk-QRWGUWI6.js} +11 -11
  42. package/Build/Workers/{chunk-LH5SF3XV.js → chunk-S4MCOY6I.js} +5 -5
  43. package/Build/Workers/{chunk-FVLVVOBQ.js → chunk-SMQZZOW6.js} +10 -10
  44. package/Build/Workers/{chunk-TA777BGS.js → chunk-TKKIREQ6.js} +1 -1
  45. package/Build/Workers/{chunk-AEAVLYPS.js → chunk-U3ZA64U7.js} +2 -2
  46. package/Build/Workers/{chunk-7LSFAEWF.js → chunk-UA25D5MX.js} +10 -10
  47. package/Build/Workers/{chunk-J3OFS2RD.js → chunk-UOOIQ3KX.js} +12 -12
  48. package/Build/Workers/{chunk-ND3NTTOF.js → chunk-V7VQKN6N.js} +6 -6
  49. package/Build/Workers/{chunk-I3A6DXYZ.js → chunk-VQYETPWC.js} +4 -4
  50. package/Build/Workers/{chunk-35H3UBIO.js → chunk-VWV2IJRB.js} +11 -11
  51. package/Build/Workers/{chunk-QSDY4NS7.js → chunk-XZMBNNDX.js} +9 -9
  52. package/Build/Workers/{chunk-TAI4HLII.js → chunk-Y57HREW5.js} +4 -4
  53. package/Build/Workers/{chunk-3TKLDHV3.js → chunk-Y5BF6AFU.js} +2 -2
  54. package/Build/Workers/{chunk-3XY3MVPG.js → chunk-YLY7NKAB.js} +4 -4
  55. package/Build/Workers/{chunk-BVAIWR7O.js → chunk-ZK3CF7ZD.js} +12 -12
  56. package/Build/Workers/{chunk-DH26SNAB.js → chunk-ZP7JMQV4.js} +1 -1
  57. package/Build/Workers/{chunk-3RFFPH4M.js → chunk-ZZ46LWL6.js} +1 -1
  58. package/Build/Workers/combineGeometry.js +24 -24
  59. package/Build/Workers/createBoxGeometry.js +18 -18
  60. package/Build/Workers/createBoxOutlineGeometry.js +16 -16
  61. package/Build/Workers/createCircleGeometry.js +26 -26
  62. package/Build/Workers/createCircleOutlineGeometry.js +19 -19
  63. package/Build/Workers/createCoplanarPolygonGeometry.js +33 -33
  64. package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +31 -31
  65. package/Build/Workers/createCorridorGeometry.js +29 -29
  66. package/Build/Workers/createCorridorOutlineGeometry.js +28 -28
  67. package/Build/Workers/createCylinderGeometry.js +20 -20
  68. package/Build/Workers/createCylinderOutlineGeometry.js +18 -18
  69. package/Build/Workers/createEllipseGeometry.js +26 -26
  70. package/Build/Workers/createEllipseOutlineGeometry.js +19 -19
  71. package/Build/Workers/createEllipsoidGeometry.js +19 -19
  72. package/Build/Workers/createEllipsoidOutlineGeometry.js +18 -18
  73. package/Build/Workers/createFrustumGeometry.js +18 -18
  74. package/Build/Workers/createFrustumOutlineGeometry.js +18 -18
  75. package/Build/Workers/createGeometry.js +24 -24
  76. package/Build/Workers/createGroundPolylineGeometry.js +22 -22
  77. package/Build/Workers/createPlaneGeometry.js +16 -16
  78. package/Build/Workers/createPlaneOutlineGeometry.js +15 -15
  79. package/Build/Workers/createPolygonGeometry.js +32 -32
  80. package/Build/Workers/createPolygonOutlineGeometry.js +30 -30
  81. package/Build/Workers/createPolylineGeometry.js +25 -25
  82. package/Build/Workers/createPolylineVolumeGeometry.js +31 -31
  83. package/Build/Workers/createPolylineVolumeOutlineGeometry.js +27 -27
  84. package/Build/Workers/createRectangleGeometry.js +27 -27
  85. package/Build/Workers/createRectangleOutlineGeometry.js +20 -20
  86. package/Build/Workers/createSimplePolylineGeometry.js +23 -23
  87. package/Build/Workers/createSphereGeometry.js +19 -19
  88. package/Build/Workers/createSphereOutlineGeometry.js +18 -18
  89. package/Build/Workers/createTaskProcessorWorker.js +3 -3
  90. package/Build/Workers/createVectorTileClampedPolylines.js +14 -14
  91. package/Build/Workers/createVectorTileGeometries.js +24 -24
  92. package/Build/Workers/createVectorTilePoints.js +13 -13
  93. package/Build/Workers/createVectorTilePolygons.js +22 -22
  94. package/Build/Workers/createVectorTilePolylines.js +14 -14
  95. package/Build/Workers/createVerticesFromCesium3DTilesTerrain.js +25 -25
  96. package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +22 -22
  97. package/Build/Workers/createVerticesFromHeightmap.js +22 -22
  98. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +20 -20
  99. package/Build/Workers/createWallGeometry.js +24 -24
  100. package/Build/Workers/createWallOutlineGeometry.js +23 -23
  101. package/Build/Workers/decodeDraco.js +10 -10
  102. package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +5 -5
  103. package/Build/Workers/decodeI3S.js +10 -10
  104. package/Build/Workers/gaussianSplatSorter.js +4 -4
  105. package/Build/Workers/gaussianSplatTextureGenerator.js +4 -4
  106. package/Build/Workers/incrementallyBuildTerrainPicker.js +10 -10
  107. package/Build/Workers/transcodeKTX2.js +6 -6
  108. package/Build/Workers/transferTypedArrayTest.js +1 -1
  109. package/Build/Workers/upsampleQuantizedTerrainMesh.js +22 -22
  110. package/Build/Workers/upsampleVerticesFromCesium3DTilesTerrain.js +25 -25
  111. package/Source/Core/Cartesian2.js +1 -1
  112. package/Source/Core/Cartesian3.js +1 -1
  113. package/Source/Core/Cartesian4.js +1 -1
  114. package/Source/Core/ComponentDatatype.js +35 -0
  115. package/Source/Core/Ion.js +1 -1
  116. package/Source/Core/MapProjection.js +1 -0
  117. package/Source/Core/Matrix2.js +1 -1
  118. package/Source/Core/Matrix3.js +1 -1
  119. package/Source/Core/Matrix4.js +1 -1
  120. package/Source/Core/Resource.js +1 -1
  121. package/Source/Core/ScreenSpaceEventHandler.js +51 -41
  122. package/Source/Core/createColorRamp.js +37 -0
  123. package/Source/Core/globalTypes.js +25 -0
  124. package/Source/Renderer/Pass.js +3 -2
  125. package/Source/Renderer/createUniform.js +346 -239
  126. package/Source/Renderer/createUniformArray.js +494 -381
  127. package/Source/Scene/ArcGisMapService.js +1 -1
  128. package/Source/Scene/BufferPoint.js +1 -0
  129. package/Source/Scene/BufferPointCollection.js +14 -1
  130. package/Source/Scene/BufferPolygon.js +3 -2
  131. package/Source/Scene/BufferPolygonCollection.js +10 -0
  132. package/Source/Scene/BufferPolyline.js +1 -0
  133. package/Source/Scene/BufferPolylineCollection.js +2 -0
  134. package/Source/Scene/BufferPrimitiveCollection.js +79 -28
  135. package/Source/Scene/CameraEventAggregator.js +30 -18
  136. package/Source/Scene/Cesium3DTile.js +54 -1
  137. package/Source/Scene/Cesium3DTileContent.js +195 -254
  138. package/Source/Scene/Cesium3DTileContentFactory.js +10 -2
  139. package/Source/Scene/Cesium3DTileset.js +45 -5
  140. package/Source/Scene/Composite3DTileContent.js +254 -292
  141. package/Source/Scene/EdgeDisplayMode.js +50 -0
  142. package/Source/Scene/Empty3DTileContent.js +100 -132
  143. package/Source/Scene/GaussianSplat3DTileContent.js +436 -478
  144. package/Source/Scene/GeoJsonPrimitive.js +874 -0
  145. package/Source/Scene/Geometry3DTileContent.js +151 -185
  146. package/Source/Scene/GltfLoader.js +109 -0
  147. package/Source/Scene/Implicit3DTileContent.js +179 -214
  148. package/Source/Scene/MVTDataProvider.js +147 -0
  149. package/Source/Scene/Model/EdgeVisibilityPipelineStage.js +79 -311
  150. package/Source/Scene/Model/Model.js +34 -0
  151. package/Source/Scene/Model/Model3DTileContent.js +424 -458
  152. package/Source/Scene/Model/ModelDrawCommand.js +31 -3
  153. package/Source/Scene/Model/ModelUtility.js +4 -0
  154. package/Source/Scene/Model/createVectorTileBuffersFromModelComponents.js +466 -150
  155. package/Source/Scene/ModelComponents.js +39 -1
  156. package/Source/Scene/Multiple3DTileContent.js +291 -334
  157. package/Source/Scene/Scene.js +26 -0
  158. package/Source/Scene/Tileset3DTileContent.js +113 -146
  159. package/Source/Scene/UrlTemplate3DTilesDataProvider.js +499 -0
  160. package/Source/Scene/Vector3DTileContent.js +205 -234
  161. package/Source/Scene/VectorGltf3DTileContent.js +85 -36
  162. package/Source/Scene/VoxelPrimitive.js +159 -175
  163. package/Source/Scene/VoxelProvider.js +64 -91
  164. package/Source/Scene/buildVectorGltfFromMVT.js +1059 -0
  165. package/Source/Scene/buildVoxelCustomShader.js +199 -0
  166. package/Source/Scene/decodeMVT.js +634 -0
  167. package/Source/Scene/renderBufferPointCollection.js +110 -64
  168. package/Source/Scene/renderBufferPolygonCollection.js +102 -55
  169. package/Source/Scene/renderBufferPolylineCollection.js +365 -166
  170. package/Source/Shaders/BufferPointMaterialFS.glsl +1 -0
  171. package/Source/Shaders/BufferPointMaterialFS.js +1 -0
  172. package/Source/Shaders/BufferPointMaterialVS.glsl +19 -9
  173. package/Source/Shaders/BufferPointMaterialVS.js +20 -10
  174. package/Source/Shaders/BufferPolygonMaterialVS.glsl +13 -4
  175. package/Source/Shaders/BufferPolygonMaterialVS.js +14 -5
  176. package/Source/Shaders/BufferPolylineMaterialVS.glsl +16 -2
  177. package/Source/Shaders/BufferPolylineMaterialVS.js +17 -3
  178. package/Source/Shaders/Builtin/Constants/passCesium3DTileEdgesDirect.glsl +9 -0
  179. package/Source/Shaders/Builtin/Constants/passCesium3DTileEdgesDirect.js +11 -0
  180. package/Source/Shaders/Builtin/Constants/passOverlay.glsl +1 -1
  181. package/Source/Shaders/Builtin/Constants/passOverlay.js +1 -1
  182. package/Source/Shaders/Builtin/CzmBuiltins.js +2 -0
  183. package/Source/Shaders/Model/EdgeVisibilityStageVS.glsl +0 -1
  184. package/Source/Shaders/Model/EdgeVisibilityStageVS.js +0 -1
  185. package/index.d.ts +253 -35
  186. package/index.js +71 -62
  187. package/package.json +2 -2
@@ -27,219 +27,225 @@ import BoundingVolumeSemantics from "./BoundingVolumeSemantics.js";
27
27
  * </p>
28
28
  * This object is normally not instantiated directly, use {@link Implicit3DTileContent.fromSubtreeJson}.
29
29
  *
30
- * @alias Implicit3DTileContent
31
- * @constructor
32
- *
33
- * @param {Cesium3DTileset} tileset The tileset this content belongs to
34
- * @param {Cesium3DTile} tile The tile this content belongs to.
35
- * @param {Resource} resource The resource for the tileset
36
- * @param {object} [json] The JSON object containing the subtree. Mutually exclusive with arrayBuffer.
37
- * @param {ArrayBuffer} [arrayBuffer] The array buffer that stores the content payload. Mutually exclusive with json.
38
- * @param {number} [byteOffset=0] The offset into the array buffer, if one was provided
39
- *
40
- * @exception {DeveloperError} One of json and arrayBuffer must be defined.
41
- *
30
+ * @implements Cesium3DTileContent
42
31
  * @private
43
32
  * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.
44
33
  */
45
- function Implicit3DTileContent(tileset, tile, resource) {
46
- //>>includeStart('debug', pragmas.debug);
47
- Check.defined("tile.implicitTileset", tile.implicitTileset);
48
- Check.defined("tile.implicitCoordinates", tile.implicitCoordinates);
49
- //>>includeEnd('debug');
50
-
51
- const implicitTileset = tile.implicitTileset;
52
- const implicitCoordinates = tile.implicitCoordinates;
53
-
54
- this._implicitTileset = implicitTileset;
55
- this._implicitCoordinates = implicitCoordinates;
56
- this._implicitSubtree = undefined;
57
- this._tileset = tileset;
58
- this._tile = tile;
59
- this._resource = resource;
60
-
61
- this._metadata = undefined;
62
-
63
- this.featurePropertiesDirty = false;
64
- this._group = undefined;
65
-
66
- const templateValues = implicitCoordinates.getTemplateValues();
67
- const subtreeResource = implicitTileset.subtreeUriTemplate.getDerivedResource(
68
- {
69
- templateValues: templateValues,
70
- },
71
- );
72
- this._url = subtreeResource.getUrlComponent(true);
73
-
74
- this._ready = false;
75
- }
34
+ class Implicit3DTileContent {
35
+ /**
36
+ * @param {Cesium3DTileset} tileset The tileset this content belongs to
37
+ * @param {Cesium3DTile} tile The tile this content belongs to.
38
+ * @param {Resource} resource The resource for the tileset
39
+ * @param {object} [json] The JSON object containing the subtree. Mutually exclusive with arrayBuffer.
40
+ * @param {ArrayBuffer} [arrayBuffer] The array buffer that stores the content payload. Mutually exclusive with json.
41
+ * @param {number} [byteOffset=0] The offset into the array buffer, if one was provided
42
+ *
43
+ * @exception {DeveloperError} One of json and arrayBuffer must be defined.
44
+ */
45
+ constructor(tileset, tile, resource) {
46
+ //>>includeStart('debug', pragmas.debug);
47
+ Check.defined("tile.implicitTileset", tile.implicitTileset);
48
+ Check.defined("tile.implicitCoordinates", tile.implicitCoordinates);
49
+ //>>includeEnd('debug');
50
+
51
+ const implicitTileset = tile.implicitTileset;
52
+ const implicitCoordinates = tile.implicitCoordinates;
53
+
54
+ this._implicitTileset = implicitTileset;
55
+ this._implicitCoordinates = implicitCoordinates;
56
+ this._implicitSubtree = undefined;
57
+ this._tileset = tileset;
58
+ this._tile = tile;
59
+ this._resource = resource;
60
+
61
+ this._metadata = undefined;
62
+
63
+ this.featurePropertiesDirty = false;
64
+ this._group = undefined;
65
+
66
+ const templateValues = implicitCoordinates.getTemplateValues();
67
+ const subtreeResource =
68
+ implicitTileset.subtreeUriTemplate.getDerivedResource({
69
+ templateValues: templateValues,
70
+ });
71
+ this._url = subtreeResource.getUrlComponent(true);
72
+
73
+ this._ready = false;
74
+ }
76
75
 
77
- Object.defineProperties(Implicit3DTileContent.prototype, {
78
- featuresLength: {
79
- get: function () {
80
- return 0;
81
- },
82
- },
76
+ get featuresLength() {
77
+ return 0;
78
+ }
83
79
 
84
- pointsLength: {
85
- get: function () {
86
- return 0;
87
- },
88
- },
80
+ get pointsLength() {
81
+ return 0;
82
+ }
89
83
 
90
- trianglesLength: {
91
- get: function () {
92
- return 0;
93
- },
94
- },
84
+ get trianglesLength() {
85
+ return 0;
86
+ }
95
87
 
96
- geometryByteLength: {
97
- get: function () {
98
- return 0;
99
- },
100
- },
88
+ get geometryByteLength() {
89
+ return 0;
90
+ }
101
91
 
102
- texturesByteLength: {
103
- get: function () {
104
- return 0;
105
- },
106
- },
92
+ get texturesByteLength() {
93
+ return 0;
94
+ }
107
95
 
108
- batchTableByteLength: {
109
- get: function () {
110
- return 0;
111
- },
112
- },
96
+ get batchTableByteLength() {
97
+ return 0;
98
+ }
113
99
 
114
- innerContents: {
115
- get: function () {
116
- return undefined;
117
- },
118
- },
100
+ get innerContents() {
101
+ return undefined;
102
+ }
119
103
 
120
104
  /**
121
105
  * Returns true when the tile's content is ready to render; otherwise false
122
106
  *
123
- * @memberof Implicit3DTileContent.prototype
124
107
  *
125
108
  * @type {boolean}
126
109
  * @readonly
127
110
  * @private
128
111
  */
129
- ready: {
130
- get: function () {
131
- return this._ready;
132
- },
133
- },
112
+ get ready() {
113
+ return this._ready;
114
+ }
134
115
 
135
- tileset: {
136
- get: function () {
137
- return this._tileset;
138
- },
139
- },
116
+ get tileset() {
117
+ return this._tileset;
118
+ }
140
119
 
141
- tile: {
142
- get: function () {
143
- return this._tile;
144
- },
145
- },
120
+ get tile() {
121
+ return this._tile;
122
+ }
146
123
 
147
- url: {
148
- get: function () {
149
- return this._url;
150
- },
151
- },
124
+ get url() {
125
+ return this._url;
126
+ }
152
127
 
153
128
  /**
154
129
  * Part of the {@link Cesium3DTileContent} interface. <code>Implicit3DTileContent</code>
155
130
  * always returns <code>undefined</code>. Only transcoded tiles have content metadata.
156
- * @memberof Implicit3DTileContent.prototype
157
131
  * @private
158
132
  */
159
- metadata: {
160
- get: function () {
161
- return undefined;
162
- },
163
- set: function () {
164
- //>>includeStart('debug', pragmas.debug);
165
- throw new DeveloperError("Implicit3DTileContent cannot have metadata");
166
- //>>includeEnd('debug');
167
- },
168
- },
169
-
170
- batchTable: {
171
- get: function () {
172
- return undefined;
173
- },
174
- },
133
+ get metadata() {
134
+ return undefined;
135
+ }
175
136
 
176
- group: {
177
- get: function () {
178
- return this._group;
179
- },
180
- set: function (value) {
181
- this._group = value;
182
- },
183
- },
184
- });
137
+ set metadata(_) {
138
+ //>>includeStart('debug', pragmas.debug);
139
+ throw new DeveloperError("Implicit3DTileContent cannot have metadata");
140
+ //>>includeEnd('debug');
141
+ }
185
142
 
186
- /**
187
- * Initialize the implicit content by parsing the subtree resource and setting
188
- * up a promise chain to expand the immediate subtree.
189
- *
190
- * @param {Cesium3DTileset} tileset The tileset this content belongs to
191
- * @param {Cesium3DTile} tile The tile this content belongs to.
192
- * @param {Resource} resource The resource for the tileset
193
- * @param {object} [json] The JSON containing the subtree. Mutually exclusive with arrayBuffer.
194
- * @param {ArrayBuffer} [arrayBuffer] The ArrayBuffer containing a subtree binary. Mutually exclusive with json.
195
- * @param {number} [byteOffset=0] The byte offset into the arrayBuffer
196
- * @return {Promise<Implicit3DTileContent>}
197
- *
198
- * @exception {DeveloperError} One of json and arrayBuffer must be defined.
199
- *
200
- * @private
201
- */
202
- Implicit3DTileContent.fromSubtreeJson = async function (
203
- tileset,
204
- tile,
205
- resource,
206
- json,
207
- arrayBuffer,
208
- byteOffset,
209
- ) {
210
- //>>includeStart('debug', pragmas.debug);
211
- Check.defined("tile.implicitTileset", tile.implicitTileset);
212
- Check.defined("tile.implicitCoordinates", tile.implicitCoordinates);
213
- if (defined(json) === defined(arrayBuffer)) {
214
- throw new DeveloperError("One of json and arrayBuffer must be defined.");
143
+ get batchTable() {
144
+ return undefined;
215
145
  }
216
- //>>includeEnd('debug');
217
146
 
218
- byteOffset = byteOffset ?? 0;
219
- let uint8Array;
220
- if (defined(arrayBuffer)) {
221
- uint8Array = new Uint8Array(arrayBuffer, byteOffset);
147
+ get group() {
148
+ return this._group;
222
149
  }
223
150
 
224
- const implicitTileset = tile.implicitTileset;
225
- const implicitCoordinates = tile.implicitCoordinates;
151
+ set group(value) {
152
+ this._group = value;
153
+ }
226
154
 
227
- const subtree = await ImplicitSubtree.fromSubtreeJson(
155
+ /**
156
+ * Initialize the implicit content by parsing the subtree resource and setting
157
+ * up a promise chain to expand the immediate subtree.
158
+ *
159
+ * @param {Cesium3DTileset} tileset The tileset this content belongs to
160
+ * @param {Cesium3DTile} tile The tile this content belongs to.
161
+ * @param {Resource} resource The resource for the tileset
162
+ * @param {object} [json] The JSON containing the subtree. Mutually exclusive with arrayBuffer.
163
+ * @param {ArrayBuffer} [arrayBuffer] The ArrayBuffer containing a subtree binary. Mutually exclusive with json.
164
+ * @param {number} [byteOffset=0] The byte offset into the arrayBuffer
165
+ * @return {Promise<Implicit3DTileContent>}
166
+ *
167
+ * @exception {DeveloperError} One of json and arrayBuffer must be defined.
168
+ *
169
+ * @private
170
+ */
171
+ static async fromSubtreeJson(
172
+ tileset,
173
+ tile,
228
174
  resource,
229
175
  json,
230
- uint8Array,
231
- implicitTileset,
232
- implicitCoordinates,
233
- );
176
+ arrayBuffer,
177
+ byteOffset,
178
+ ) {
179
+ //>>includeStart('debug', pragmas.debug);
180
+ Check.defined("tile.implicitTileset", tile.implicitTileset);
181
+ Check.defined("tile.implicitCoordinates", tile.implicitCoordinates);
182
+ if (defined(json) === defined(arrayBuffer)) {
183
+ throw new DeveloperError("One of json and arrayBuffer must be defined.");
184
+ }
185
+ //>>includeEnd('debug');
186
+
187
+ byteOffset = byteOffset ?? 0;
188
+ let uint8Array;
189
+ if (defined(arrayBuffer)) {
190
+ uint8Array = new Uint8Array(arrayBuffer, byteOffset);
191
+ }
192
+
193
+ const implicitTileset = tile.implicitTileset;
194
+ const implicitCoordinates = tile.implicitCoordinates;
195
+
196
+ const subtree = await ImplicitSubtree.fromSubtreeJson(
197
+ resource,
198
+ json,
199
+ uint8Array,
200
+ implicitTileset,
201
+ implicitCoordinates,
202
+ );
203
+
204
+ const content = new Implicit3DTileContent(tileset, tile, resource);
234
205
 
235
- const content = new Implicit3DTileContent(tileset, tile, resource);
206
+ content._implicitSubtree = subtree;
207
+ expandSubtree(content, subtree);
208
+ content._ready = true;
236
209
 
237
- content._implicitSubtree = subtree;
238
- expandSubtree(content, subtree);
239
- content._ready = true;
210
+ return content;
211
+ }
240
212
 
241
- return content;
242
- };
213
+ /**
214
+ * Part of the {@link Cesium3DTileContent} interface. <code>Implicit3DTileContent</code>
215
+ * always returns <code>false</code> since a tile of this type does not have any features.
216
+ * @private
217
+ */
218
+ hasProperty(batchId, name) {
219
+ return false;
220
+ }
221
+
222
+ /**
223
+ * Part of the {@link Cesium3DTileContent} interface. <code>Implicit3DTileContent</code>
224
+ * always returns <code>undefined</code> since a tile of this type does not have any features.
225
+ * @private
226
+ */
227
+ getFeature(batchId) {
228
+ return undefined;
229
+ }
230
+
231
+ applyDebugSettings(enabled, color) {}
232
+ applyStyle(style) {}
233
+ update(tileset, frameState) {}
234
+
235
+ pick(ray, frameState, result) {
236
+ return undefined;
237
+ }
238
+
239
+ isDestroyed() {
240
+ return false;
241
+ }
242
+
243
+ destroy() {
244
+ this._implicitSubtree =
245
+ this._implicitSubtree && this._implicitSubtree.destroy();
246
+ return destroyObject(this);
247
+ }
248
+ }
243
249
 
244
250
  /**
245
251
  * Expand a single subtree placeholder tile. This transcodes the subtree into
@@ -1157,47 +1163,6 @@ function makeTile(content, baseResource, tileJson, parentTile) {
1157
1163
  return new Cesium3DTile(content._tileset, baseResource, tileJson, parentTile);
1158
1164
  }
1159
1165
 
1160
- /**
1161
- * Part of the {@link Cesium3DTileContent} interface. <code>Implicit3DTileContent</code>
1162
- * always returns <code>false</code> since a tile of this type does not have any features.
1163
- * @private
1164
- */
1165
- Implicit3DTileContent.prototype.hasProperty = function (batchId, name) {
1166
- return false;
1167
- };
1168
-
1169
- /**
1170
- * Part of the {@link Cesium3DTileContent} interface. <code>Implicit3DTileContent</code>
1171
- * always returns <code>undefined</code> since a tile of this type does not have any features.
1172
- * @private
1173
- */
1174
- Implicit3DTileContent.prototype.getFeature = function (batchId) {
1175
- return undefined;
1176
- };
1177
-
1178
- Implicit3DTileContent.prototype.applyDebugSettings = function (
1179
- enabled,
1180
- color,
1181
- ) {};
1182
-
1183
- Implicit3DTileContent.prototype.applyStyle = function (style) {};
1184
-
1185
- Implicit3DTileContent.prototype.update = function (tileset, frameState) {};
1186
-
1187
- Implicit3DTileContent.prototype.pick = function (ray, frameState, result) {
1188
- return undefined;
1189
- };
1190
-
1191
- Implicit3DTileContent.prototype.isDestroyed = function () {
1192
- return false;
1193
- };
1194
-
1195
- Implicit3DTileContent.prototype.destroy = function () {
1196
- this._implicitSubtree =
1197
- this._implicitSubtree && this._implicitSubtree.destroy();
1198
- return destroyObject(this);
1199
- };
1200
-
1201
1166
  // Exposed for testing
1202
1167
  Implicit3DTileContent._deriveBoundingBox = deriveBoundingBox;
1203
1168
  Implicit3DTileContent._deriveBoundingRegion = deriveBoundingRegion;
@@ -0,0 +1,147 @@
1
+ // @ts-check
2
+
3
+ import Axis from "./Axis.js";
4
+ import Empty3DTileContent from "./Empty3DTileContent.js";
5
+ import RuntimeError from "../Core/RuntimeError.js";
6
+ import UrlTemplate3DTilesDataProvider from "./UrlTemplate3DTilesDataProvider.js";
7
+ import VectorGltf3DTileContent from "./VectorGltf3DTileContent.js";
8
+ import buildVectorGltfFromMVT from "./buildVectorGltfFromMVT.js";
9
+ import decodeMVT from "./decodeMVT.js";
10
+ import oneTimeWarning from "../Core/oneTimeWarning.js";
11
+ import defined from "../Core/defined.js";
12
+
13
+ /** @import Cesium3DTile from "./Cesium3DTile.js"; */
14
+ /** @import Cesium3DTileset from "./Cesium3DTileset.js"; */
15
+ /** @import Rectangle from "../Core/Rectangle.js"; */
16
+ /** @import Resource from "../Core/Resource.js"; */
17
+
18
+ /**
19
+ * A Mapbox Vector Tiles (MVT) data provider. Loads .mvt or .pbf tiles, converting tiles
20
+ * dynamically (at runtime) into 3D Tiles.
21
+ *
22
+ * <div class="notice">
23
+ * This object is normally not instantiated directly, use {@link MVTDataProvider.fromUrl}.
24
+ * </div>
25
+ *
26
+ * @experimental This feature is not final and is subject to change without Cesium's standard deprecation policy.
27
+ */
28
+ class MVTDataProvider extends UrlTemplate3DTilesDataProvider {
29
+ /**
30
+ * Creates an MVTDataProvider from the specified URL template and options.
31
+ *
32
+ * @param {Resource|string} url URL template, containing {z}, {x}, and {y} placeholders.
33
+ * @param {object} [options] Provider options.
34
+ * @param {number} [options.minZoom=0] Minimum zoom level represented in the generated tileset.
35
+ * @param {number} [options.maxZoom=14] Maximum zoom level represented in the generated tileset.
36
+ * @param {Rectangle} [options.extent] Optional geographic extent in radians to constrain the generated tile tree.
37
+ * @param {string} [options.featureIdProperty] MVT property name to use as feature ID.
38
+ */
39
+ static async fromUrl(url, options) {
40
+ return /** @type {Promise<MVTDataProvider>} */ (
41
+ super.fromUrl(url, options)
42
+ );
43
+ }
44
+
45
+ /**
46
+ * @returns {object}
47
+ * @protected
48
+ * @ignore
49
+ */
50
+ _createTilesetLoadOptions() {
51
+ return {
52
+ skipLevelOfDetail: false,
53
+ enablePick: true,
54
+ featureIdLabel: "featureId_0",
55
+ instanceFeatureIdLabel: "instanceFeatureId_0",
56
+ };
57
+ }
58
+
59
+ /**
60
+ * @param {Cesium3DTileset} tileset
61
+ * @protected
62
+ * @ignore
63
+ */
64
+ _configureTileset(tileset) {
65
+ tileset._modelUpAxis = Axis.Z;
66
+ tileset._modelForwardAxis = Axis.X;
67
+ }
68
+
69
+ /**
70
+ * @returns {object}
71
+ * @protected
72
+ * @ignore
73
+ */
74
+ _createCodec() {
75
+ const featureIdProperty = this._featureIdProperty;
76
+ return {
77
+ contentType: "mvt",
78
+ missingTilePolicy: { statusCodes: [404, 204] },
79
+
80
+ /**
81
+ * @param {Cesium3DTileset} tileset
82
+ * @param {Cesium3DTile} tile
83
+ * @param {Resource} resource
84
+ * @param {ArrayBuffer} arrayBuffer
85
+ * @ignore
86
+ */
87
+ createContent: async (tileset, tile, resource, arrayBuffer) => {
88
+ const decodedTile = decodeMVT(arrayBuffer);
89
+ const tileCoordinates = parseTileCoordinates(
90
+ resource.getUrlComponent(true),
91
+ );
92
+ const glb = buildVectorGltfFromMVT(decodedTile, tileCoordinates, {
93
+ featureIdProperty: featureIdProperty,
94
+ });
95
+ if (!defined(glb)) {
96
+ if (!hasAnyDecodedFeatures(decodedTile)) {
97
+ return new Empty3DTileContent(tileset, tile);
98
+ }
99
+ throw new RuntimeError(
100
+ "Decoded MVT tile did not produce vector glTF content.",
101
+ );
102
+ }
103
+ return VectorGltf3DTileContent.fromGltf(tileset, tile, resource, glb);
104
+ },
105
+ };
106
+ }
107
+ }
108
+
109
+ /**
110
+ * @param {string} url
111
+ * @returns {{tileZ:number, tileX:number, tileY:number}}
112
+ * @ignore
113
+ */
114
+ function parseTileCoordinates(url) {
115
+ const match = url.match(/\/(\d+)\/(\d+)\/(\d+)(?:\.[^/?#]+)?(?:[?#]|$)/i);
116
+ if (!match) {
117
+ oneTimeWarning(
118
+ "MVTDataProvider.parseTileCoordinates",
119
+ `MVT tile URL did not match /{z}/{x}/{y} pattern. Falling back to z/x/y = 0/0/0. URL: ${url}`,
120
+ );
121
+ return { tileZ: 0, tileX: 0, tileY: 0 };
122
+ }
123
+ return {
124
+ tileZ: parseInt(match[1], 10),
125
+ tileX: parseInt(match[2], 10),
126
+ tileY: parseInt(match[3], 10),
127
+ };
128
+ }
129
+
130
+ /**
131
+ * @param {{layers:Array<{features:Array<*>}>}} decodedTile
132
+ * @returns {boolean}
133
+ * @ignore
134
+ */
135
+ function hasAnyDecodedFeatures(decodedTile) {
136
+ const layers = decodedTile.layers;
137
+ for (let i = 0; i < layers.length; i++) {
138
+ if (layers[i].features.length > 0) {
139
+ return true;
140
+ }
141
+ }
142
+ return false;
143
+ }
144
+
145
+ MVTDataProvider._parseTileCoordinates = parseTileCoordinates;
146
+
147
+ export default MVTDataProvider;