@cesium/engine 18.3.1-ion.1 → 20.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 (192) hide show
  1. package/Build/ThirdParty/Workers/pako_deflate.min.js +3 -3
  2. package/Build/ThirdParty/Workers/pako_inflate.min.js +3 -3
  3. package/Build/ThirdParty/Workers/z-worker-pako.js +80 -89
  4. package/Build/Workers/{chunk-G7F2CKBW.js → chunk-22LUVCO3.js} +2 -2
  5. package/Build/Workers/{chunk-AIBIEA2N.js → chunk-3BO4XBWM.js} +12 -12
  6. package/Build/Workers/{chunk-LPLMZKZS.js → chunk-3SQPZVG4.js} +1 -1
  7. package/Build/Workers/{chunk-KQ7OYXT6.js → chunk-4O5SZ2RE.js} +3 -3
  8. package/Build/Workers/{chunk-EF747DYS.js → chunk-4UIKSIEZ.js} +9 -9
  9. package/Build/Workers/{chunk-LDFRBRJO.js → chunk-5FZEM66Y.js} +12 -12
  10. package/Build/Workers/{chunk-Z7UO3S7L.js → chunk-5G56VVL3.js} +10 -10
  11. package/Build/Workers/{chunk-KUVAFSVU.js → chunk-5GKRDXYJ.js} +12 -12
  12. package/Build/Workers/{chunk-GIRJEZHU.js → chunk-5W4EBNO3.js} +14 -14
  13. package/Build/Workers/{chunk-XMFKOU5X.js → chunk-67RLCIDP.js} +7 -7
  14. package/Build/Workers/{chunk-ACOAKTBU.js → chunk-74VODBWB.js} +4 -4
  15. package/Build/Workers/{chunk-QTFE5TBC.js → chunk-7HOD2LGH.js} +10 -10
  16. package/Build/Workers/{chunk-GOSJZP7N.js → chunk-D25QOWHR.js} +1 -1
  17. package/Build/Workers/{chunk-5UWLMG6V.js → chunk-D63DK275.js} +7 -7
  18. package/Build/Workers/{chunk-4JMMKZ4N.js → chunk-EHOOC4HJ.js} +5 -5
  19. package/Build/Workers/{chunk-PFTYXAVG.js → chunk-ELI5ZYDR.js} +5 -5
  20. package/Build/Workers/{chunk-RQRKALHB.js → chunk-FGF4ETPY.js} +9 -9
  21. package/Build/Workers/{chunk-YPMSP4IH.js → chunk-FKWL63D4.js} +5 -5
  22. package/Build/Workers/{chunk-IC5M3JRR.js → chunk-FLH3ZH2X.js} +4 -4
  23. package/Build/Workers/{chunk-5DF22LFV.js → chunk-HDOFAYEE.js} +16 -16
  24. package/Build/Workers/{chunk-37V6UO2J.js → chunk-HHUHFFYN.js} +5 -5
  25. package/Build/Workers/{chunk-GSLSXQGX.js → chunk-IHUXLSNT.js} +5 -4
  26. package/Build/Workers/{chunk-K4HUWRWA.js → chunk-IJM2HVTV.js} +1 -1
  27. package/Build/Workers/{chunk-AKLRSDAY.js → chunk-IPXMWP5Z.js} +6 -6
  28. package/Build/Workers/{chunk-G6I5XO4E.js → chunk-IWKYS6RV.js} +6 -6
  29. package/Build/Workers/{chunk-RVQ7LHW3.js → chunk-JMX3P7DE.js} +8 -8
  30. package/Build/Workers/{chunk-OQNQNBEM.js → chunk-JQSMAZAT.js} +9 -9
  31. package/Build/Workers/{chunk-GGNZKIG3.js → chunk-JRLT2FQV.js} +8 -8
  32. package/Build/Workers/{chunk-GK5WVMVN.js → chunk-KRXL3KZL.js} +13 -13
  33. package/Build/Workers/{chunk-OVXYMPQ7.js → chunk-KWB7PPVO.js} +2 -2
  34. package/Build/Workers/{chunk-DG4CHTQN.js → chunk-M62PWLGC.js} +16 -16
  35. package/Build/Workers/{chunk-T3UE5LOS.js → chunk-MSLO3MQF.js} +5 -5
  36. package/Build/Workers/{chunk-ZGH3R3CO.js → chunk-MZZK44UI.js} +6 -6
  37. package/Build/Workers/{chunk-3T2QV5NN.js → chunk-NB2NKFJL.js} +6 -6
  38. package/Build/Workers/{chunk-W2EMENZQ.js → chunk-NJYFQE5B.js} +1 -1
  39. package/Build/Workers/{chunk-GG2NLIC6.js → chunk-O2O4FYNI.js} +2 -2
  40. package/Build/Workers/{chunk-6HT3OW6S.js → chunk-PZEPLREA.js} +2 -2
  41. package/Build/Workers/{chunk-MYMBUYST.js → chunk-S2RSJJQI.js} +4 -4
  42. package/Build/Workers/{chunk-QBRCP474.js → chunk-S3UYLP3X.js} +8 -8
  43. package/Build/Workers/{chunk-JVSY3BGV.js → chunk-TH3P77KJ.js} +5 -5
  44. package/Build/Workers/{chunk-4HDG7AFU.js → chunk-UGSQJYGE.js} +6 -6
  45. package/Build/Workers/{chunk-SMVRX64E.js → chunk-UUXOFY6G.js} +12 -12
  46. package/Build/Workers/{chunk-DPG3EG2U.js → chunk-V36BVRDX.js} +11 -11
  47. package/Build/Workers/{chunk-3HRMP3V7.js → chunk-VJ2DNCFT.js} +4 -4
  48. package/Build/Workers/{chunk-DH3XQXDD.js → chunk-VQUVJWBK.js} +4 -4
  49. package/Build/Workers/{chunk-AJANTRVW.js → chunk-VWQWZ7OL.js} +5 -5
  50. package/Build/Workers/{chunk-XPXBRZXF.js → chunk-VXBNLAG4.js} +7 -7
  51. package/Build/Workers/{chunk-GXEQK7P4.js → chunk-W3KNMQT2.js} +6 -6
  52. package/Build/Workers/{chunk-5RUDB5R4.js → chunk-WIGH3CPD.js} +2 -2
  53. package/Build/Workers/{chunk-GMNXNBM4.js → chunk-XVHLXVN3.js} +1 -1
  54. package/Build/Workers/{chunk-KSNUH6WJ.js → chunk-YHB3RNF2.js} +4 -4
  55. package/Build/Workers/{chunk-BTXGNWFF.js → chunk-ZSHDRKLT.js} +4 -4
  56. package/Build/Workers/combineGeometry.js +21 -21
  57. package/Build/Workers/createBoxGeometry.js +15 -15
  58. package/Build/Workers/createBoxOutlineGeometry.js +13 -13
  59. package/Build/Workers/createCircleGeometry.js +23 -23
  60. package/Build/Workers/createCircleOutlineGeometry.js +16 -16
  61. package/Build/Workers/createCoplanarPolygonGeometry.js +30 -30
  62. package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +28 -28
  63. package/Build/Workers/createCorridorGeometry.js +26 -26
  64. package/Build/Workers/createCorridorOutlineGeometry.js +25 -25
  65. package/Build/Workers/createCylinderGeometry.js +17 -17
  66. package/Build/Workers/createCylinderOutlineGeometry.js +15 -15
  67. package/Build/Workers/createEllipseGeometry.js +23 -23
  68. package/Build/Workers/createEllipseOutlineGeometry.js +16 -16
  69. package/Build/Workers/createEllipsoidGeometry.js +16 -16
  70. package/Build/Workers/createEllipsoidOutlineGeometry.js +15 -15
  71. package/Build/Workers/createFrustumGeometry.js +15 -15
  72. package/Build/Workers/createFrustumOutlineGeometry.js +15 -15
  73. package/Build/Workers/createGeometry.js +21 -21
  74. package/Build/Workers/createGroundPolylineGeometry.js +19 -19
  75. package/Build/Workers/createPlaneGeometry.js +13 -13
  76. package/Build/Workers/createPlaneOutlineGeometry.js +12 -12
  77. package/Build/Workers/createPolygonGeometry.js +29 -29
  78. package/Build/Workers/createPolygonOutlineGeometry.js +27 -27
  79. package/Build/Workers/createPolylineGeometry.js +22 -22
  80. package/Build/Workers/createPolylineVolumeGeometry.js +28 -28
  81. package/Build/Workers/createPolylineVolumeOutlineGeometry.js +24 -24
  82. package/Build/Workers/createRectangleGeometry.js +24 -24
  83. package/Build/Workers/createRectangleOutlineGeometry.js +17 -17
  84. package/Build/Workers/createSimplePolylineGeometry.js +20 -20
  85. package/Build/Workers/createSphereGeometry.js +16 -16
  86. package/Build/Workers/createSphereOutlineGeometry.js +15 -15
  87. package/Build/Workers/createTaskProcessorWorker.js +3 -3
  88. package/Build/Workers/createVectorTileClampedPolylines.js +12 -12
  89. package/Build/Workers/createVectorTileGeometries.js +21 -21
  90. package/Build/Workers/createVectorTilePoints.js +11 -11
  91. package/Build/Workers/createVectorTilePolygons.js +19 -19
  92. package/Build/Workers/createVectorTilePolylines.js +12 -12
  93. package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +19 -19
  94. package/Build/Workers/createVerticesFromHeightmap.js +25 -25
  95. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +16 -16
  96. package/Build/Workers/createWallGeometry.js +21 -21
  97. package/Build/Workers/createWallOutlineGeometry.js +20 -20
  98. package/Build/Workers/decodeDraco.js +10 -10
  99. package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +5 -5
  100. package/Build/Workers/decodeI3S.js +9 -9
  101. package/Build/Workers/gaussianSplatSorter.js +4 -4
  102. package/Build/Workers/gaussianSplatTextureGenerator.js +4 -4
  103. package/Build/Workers/transcodeKTX2.js +17 -16
  104. package/Build/Workers/transferTypedArrayTest.js +1 -1
  105. package/Build/Workers/upsampleQuantizedTerrainMesh.js +19 -19
  106. package/LICENSE.md +32 -25
  107. package/Source/Core/Ellipsoid.js +9 -0
  108. package/Source/Core/ITwinPlatform.js +8 -1
  109. package/Source/Core/Ion.js +1 -1
  110. package/Source/Core/IonResource.js +14 -8
  111. package/Source/Core/ScreenSpaceEventHandler.js +3 -3
  112. package/Source/Core/addAllToArray.js +40 -0
  113. package/Source/DataSources/StaticGroundGeometryPerMaterialBatch.js +54 -26
  114. package/Source/Renderer/Context.js +8 -4
  115. package/Source/Renderer/Renderbuffer.js +4 -2
  116. package/Source/Renderer/Sampler.js +13 -0
  117. package/Source/Renderer/ShaderBuilder.js +7 -6
  118. package/Source/Renderer/SharedContext.js +186 -0
  119. package/Source/Renderer/Texture.js +4 -5
  120. package/Source/Renderer/Texture3D.js +17 -7
  121. package/Source/Scene/ArcGisMapService.js +1 -1
  122. package/Source/Scene/BillboardCollection.js +1 -1
  123. package/Source/Scene/BingMapsImageryProvider.js +1 -1
  124. package/Source/Scene/Cesium3DTileBatchTable.js +6 -4
  125. package/Source/Scene/Cesium3DTileContentFactory.js +7 -16
  126. package/Source/Scene/Cesium3DTileStyle.js +4 -3
  127. package/Source/Scene/Cesium3DTileset.js +2 -2
  128. package/Source/Scene/ConditionsExpression.js +3 -2
  129. package/Source/Scene/GaussianSplat3DTileContent.js +253 -9
  130. package/Source/Scene/GaussianSplatPrimitive.js +167 -15
  131. package/Source/Scene/GltfLoader.js +23 -4
  132. package/Source/Scene/GltfPipeline/ForEach.js +7 -7
  133. package/Source/Scene/GltfPipeline/addDefaults.js +1 -2
  134. package/Source/Scene/GltfPipeline/addToArray.js +2 -0
  135. package/Source/Scene/GltfPipeline/findAccessorMinMax.js +1 -1
  136. package/Source/Scene/GltfPipeline/getComponentReader.js +16 -16
  137. package/Source/Scene/GltfPipeline/moveTechniqueRenderStates.js +1 -1
  138. package/Source/Scene/GltfPipeline/moveTechniquesToExtension.js +3 -3
  139. package/Source/Scene/GltfPipeline/parseGlb.js +1 -1
  140. package/Source/Scene/GltfPipeline/readAccessorPacked.js +2 -2
  141. package/Source/Scene/GltfPipeline/removeUnusedElements.js +5 -6
  142. package/Source/Scene/GltfPipeline/updateAccessorComponentTypes.js +1 -1
  143. package/Source/Scene/GltfPipeline/updateVersion.js +13 -13
  144. package/Source/Scene/GltfSpzLoader.js +3 -1
  145. package/Source/Scene/GltfVertexBufferLoader.js +56 -2
  146. package/Source/Scene/HeightReference.js +1 -1
  147. package/Source/Scene/ITwinData.js +49 -25
  148. package/Source/Scene/ImageBasedLighting.js +6 -2
  149. package/Source/Scene/ImageryLayer.js +10 -10
  150. package/Source/Scene/MetadataTableProperty.js +2 -1
  151. package/Source/Scene/Model/ClassificationModelDrawCommand.js +7 -6
  152. package/Source/Scene/Model/GeoJsonLoader.js +3 -1
  153. package/Source/Scene/Model/ImageryConfiguration.js +1 -0
  154. package/Source/Scene/Model/ImageryPipelineStage.js +8 -2
  155. package/Source/Scene/Model/InstancingPipelineStage.js +3 -8
  156. package/Source/Scene/Model/MaterialPipelineStage.js +10 -1
  157. package/Source/Scene/Model/Model.js +3 -0
  158. package/Source/Scene/Model/ModelClippingPolygonsPipelineStage.js +8 -2
  159. package/Source/Scene/Model/ModelImagery.js +3 -0
  160. package/Source/Scene/Model/ModelSceneGraph.js +2 -1
  161. package/Source/Scene/Model/ModelUtility.js +1 -0
  162. package/Source/Scene/Model/PntsLoader.js +7 -3
  163. package/Source/Scene/Picking.js +41 -1
  164. package/Source/Scene/PntsParser.js +6 -3
  165. package/Source/Scene/Primitive.js +0 -1
  166. package/Source/Scene/PrimitiveCollection.js +32 -6
  167. package/Source/Scene/PrimitiveLoadPlan.js +1 -37
  168. package/Source/Scene/PropertyTable.js +7 -12
  169. package/Source/Scene/Scene.js +41 -32
  170. package/Source/Scene/ScreenSpaceCameraController.js +2 -0
  171. package/Source/Scene/VertexAttributeSemantic.js +4 -2
  172. package/Source/Scene/WebMapServiceImageryProvider.js +3 -2
  173. package/Source/Scene/WebMapTileServiceImageryProvider.js +0 -22
  174. package/Source/Scene/getMeshPrimitives.js +72 -0
  175. package/Source/Shaders/Builtin/Functions/modelToWindowCoordinates.glsl +2 -1
  176. package/Source/Shaders/Builtin/Functions/modelToWindowCoordinates.js +2 -1
  177. package/Source/Shaders/EllipsoidVS.glsl +4 -4
  178. package/Source/Shaders/EllipsoidVS.js +4 -4
  179. package/Source/Shaders/FXAA3_11.glsl +2 -0
  180. package/Source/Shaders/FXAA3_11.js +2 -0
  181. package/Source/Shaders/GlobeVS.glsl +2 -1
  182. package/Source/Shaders/GlobeVS.js +2 -1
  183. package/Source/Shaders/PrimitiveGaussianSplatFS.glsl +5 -5
  184. package/Source/Shaders/PrimitiveGaussianSplatFS.js +5 -5
  185. package/Source/Shaders/PrimitiveGaussianSplatVS.glsl +102 -5
  186. package/Source/Shaders/PrimitiveGaussianSplatVS.js +102 -5
  187. package/Source/Shaders/SkyAtmosphereVS.glsl +2 -1
  188. package/Source/Shaders/SkyAtmosphereVS.js +2 -1
  189. package/Source/ThirdParty/Workers/z-worker-pako.js +1 -1
  190. package/index.d.ts +191 -54
  191. package/index.js +93 -90
  192. package/package.json +4 -4
package/LICENSE.md CHANGED
@@ -305,35 +305,42 @@ https://gist.github.com/banksean/300494
305
305
  >
306
306
  > THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
307
307
 
308
- ### NVIDIA GameWorks Graphics Samples
308
+ ### NVIDIA GameWorks FXAA Shader
309
309
 
310
- https://github.com/NVIDIAGameWorks/GraphicsSamples
310
+ Original source (archived): https://archive.org/details/nvidiagame-works-graphics-samples-master
311
+ Fork: https://github.com/lyntel/GraphicsSamples/blob/3d30817ebeeade64fe6a4fc3aa1fe4265c29b6fd/samples/es3-kepler/FXAA/FXAA3_11.h
311
312
 
312
- > Copyright 2016 NVIDIA Corporation
313
+ > ----------------------------------------------------------------------------------
314
+ > File: es3-kepler\FXAA/FXAA3_11.h
315
+ > SDK Version: v3.00
316
+ > Email: gameworks@nvidia.com
317
+ > Site: http://developer.nvidia.com/
313
318
  >
314
- > BY DOWNLOADING THE SOFTWARE AND OTHER AVAILABLE MATERIALS, YOU ("DEVELOPER") AGREE TO BE BOUND BY THE FOLLOWING TERMS AND CONDITIONS
319
+ > Copyright (c) 2014-2015, NVIDIA CORPORATION. All rights reserved.
315
320
  >
316
- > The materials available for download to Developers may include software in both sample source ("Source Code") and object code ("Object Code") versions, documentation ("Documentation"), certain art work ("Art Assets") and other materials (collectively, these materials referred to herein as "Materials"). Except as expressly indicated herein, all terms and conditions of this Agreement apply to all of the Materials.
317
- >
318
- > Except as expressly set forth herein, NVIDIA owns all of the Materials and makes them available to Developer only under the terms and conditions set forth in this Agreement.
319
- >
320
- > License: Subject to the terms of this Agreement, NVIDIA hereby grants to Developer a royalty-free, non-exclusive license to possess and to use the Materials. The following terms apply to the specified type of Material:
321
- >
322
- > Source Code: Developer shall have the right to modify and create derivative works with the Source Code. Developer shall own any derivative works ("Derivatives") it creates to the Source Code, provided that Developer uses the Materials in accordance with the terms of this Agreement. Developer may distribute the Derivatives, provided that all NVIDIA copyright notices and trademarks are used properly and the Derivatives include the following statement: "This software contains source code provided by NVIDIA Corporation."
323
- >
324
- > Object Code: Developer agrees not to disassemble, decompile or reverse engineer the Object Code versions of any of the Materials. Developer acknowledges that certain of the Materials provided in Object Code version may contain third party components that may be subject to restrictions, and expressly agrees not to attempt to modify or distribute such Materials without first receiving consent from NVIDIA.
325
- >
326
- > Art Assets: Developer shall have the right to modify and create Derivatives of the Art Assets, but may not distribute any of the Art Assets or Derivatives created therefrom without NVIDIA's prior written consent.
327
- >
328
- > Government End Users: If you are acquiring the Software on behalf of any unit or agency of the United States Government, the following provisions apply. The Government agrees the Software and documentation were developed at private expense and are provided with "RESTRICTED RIGHTS". Use, duplication, or disclosure by the Government is subject to restrictions as set forth in DFARS 227.7202-1(a) and 227.7202-3(a) (1995), DFARS 252.227-7013(c)(1)(ii) (Oct 1988), FAR 12.212(a)(1995), FAR 52.227-19, (June 1987) or FAR 52.227-14(ALT III) (June 1987),as amended from time to time. In the event that this License, or any part thereof, is deemed inconsistent with the minimum rights identified in the Restricted Rights provisions, the minimum rights shall prevail.
329
- > No Other License. No rights or licenses are granted by NVIDIA under this License, expressly or by implication, with respect to any proprietary information or patent, copyright, trade secret or other intellectual property right owned or controlled by NVIDIA, except as expressly provided in this License.
330
- > Term: This License is effective until terminated. NVIDIA may terminate this Agreement (and with it, all of Developer's right to the Materials) immediately upon written notice (which may include email) to Developer, with or without cause.
331
- >
332
- > Support: NVIDIA has no obligation to support or to continue providing or updating any of the Materials.
333
- >
334
- > No Warranty: THE SOFTWARE AND ANY OTHER MATERIALS PROVIDED BY NVIDIA TO DEVELOPER HEREUNDER ARE PROVIDED "AS IS." NVIDIA DISCLAIMS ALL WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
335
- >
336
- > LIMITATION OF LIABILITY: NVIDIA SHALL NOT BE LIABLE TO DEVELOPER, DEVELOPER'S CUSTOMERS, OR ANY OTHER PERSON OR ENTITY CLAIMING THROUGH OR UNDER DEVELOPER FOR ANY LOSS OF PROFITS, INCOME, SAVINGS, OR ANY OTHER CONSEQUENTIAL, INCIDENTAL, SPECIAL, PUNITIVE, DIRECT OR INDIRECT DAMAGES (WHETHER IN AN ACTION IN CONTRACT, TORT OR BASED ON A WARRANTY), EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS SHALL APPLY NOTWITHSTANDING ANY FAILURE OF THE ESSENTIAL PURPOSE OF ANY LIMITED REMEDY. IN NO EVENT SHALL NVIDIA'S AGGREGATE LIABILITY TO DEVELOPER OR ANY OTHER PERSON OR ENTITY CLAIMING THROUGH OR UNDER DEVELOPER EXCEED THE AMOUNT OF MONEY ACTUALLY PAID BY DEVELOPER TO NVIDIA FOR THE SOFTWARE OR ANY OTHER MATERIALS.
321
+ > Redistribution and use in source and binary forms, with or without
322
+ > modification, are permitted provided that the following conditions
323
+ > are met:
324
+ > * Redistributions of source code must retain the above copyright
325
+ > notice, this list of conditions and the following disclaimer.
326
+ > * Redistributions in binary form must reproduce the above copyright
327
+ > notice, this list of conditions and the following disclaimer in the
328
+ > documentation and/or other materials provided with the distribution.
329
+ > * Neither the name of NVIDIA CORPORATION nor the names of its
330
+ > contributors may be used to endorse or promote products derived
331
+ > from this software without specific prior written permission.
332
+ >
333
+ > THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
334
+ > EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
335
+ > IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
336
+ > PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
337
+ > CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
338
+ > EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
339
+ > PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
340
+ > PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
341
+ > OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
342
+ > (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
343
+ > OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
337
344
 
338
345
  ### jsep
339
346
 
@@ -254,6 +254,15 @@ Ellipsoid.MOON = Object.freeze(
254
254
  ),
255
255
  );
256
256
 
257
+ /**
258
+ * An Ellipsoid instance initialized to a sphere with the mean radii of Mars.
259
+ * Source: https://epsg.io/104905
260
+ *
261
+ * @type {Ellipsoid}
262
+ * @constant
263
+ */
264
+ Ellipsoid.MARS = Object.freeze(new Ellipsoid(3396190.0, 3396190.0, 3376200.0));
265
+
257
266
  Ellipsoid._default = Ellipsoid.WGS84;
258
267
  Object.defineProperties(Ellipsoid, {
259
268
  /**
@@ -153,13 +153,17 @@ ITwinPlatform.apiEndpoint = new Resource({
153
153
  * @private
154
154
  *
155
155
  * @param {string} iModelId iModel id
156
+ * @param {string} [changesetId] The id of the changeset to filter results by. If not provided, exports from the latest available changesets will be returned.
156
157
  * @returns {Promise<GetExportsResponse>}
157
158
  *
158
159
  * @throws {RuntimeError} If the iTwin API request is not successful
159
160
  */
160
- ITwinPlatform.getExports = async function (iModelId) {
161
+ ITwinPlatform.getExports = async function (iModelId, changesetId) {
161
162
  //>>includeStart('debug', pragmas.debug);
162
163
  Check.typeOf.string("iModelId", iModelId);
164
+ if (defined(changesetId)) {
165
+ Check.typeOf.string("changesetId", changesetId);
166
+ }
163
167
  if (
164
168
  !defined(ITwinPlatform.defaultAccessToken) &&
165
169
  !defined(ITwinPlatform.defaultShareKey)
@@ -191,6 +195,9 @@ ITwinPlatform.getExports = async function (iModelId) {
191
195
  if (typeof CESIUM_VERSION !== "undefined") {
192
196
  resource.appendQueryParameters({ clientVersion: CESIUM_VERSION });
193
197
  }
198
+ if (defined(changesetId) && changesetId !== "") {
199
+ resource.appendQueryParameters({ changesetId: changesetId });
200
+ }
194
201
 
195
202
  try {
196
203
  const response = await resource.fetchJson();
@@ -4,7 +4,7 @@ import Resource from "./Resource.js";
4
4
 
5
5
  let defaultTokenCredit;
6
6
  const defaultAccessToken =
7
- "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIwNDljNWFmZC03MzRlLTRiMDMtYWIwMi00Yjk4YWQ4NzQwZGEiLCJpZCI6MjU5LCJpYXQiOjE3NTEzNzkyMzR9.OTqPNs3UGNnT1LYkPTavV80wN8Es_YphpJgQcpdnqWc";
7
+ "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI2NTEwZTU2Yi0wOGEyLTQyZjgtOTJjNi04Mzc2NGRlNzA4NTkiLCJpZCI6MjU5LCJpYXQiOjE3NTY4NDExOTJ9._Y3MIsYgGKTVTpkEpKPNT0cQSa_hUocY0DdH7h0U-xM";
8
8
  /**
9
9
  * Default settings for accessing the Cesium ion API.
10
10
  *
@@ -199,15 +199,8 @@ IonResource.prototype._makeRequest = function (options) {
199
199
  return Resource.prototype._makeRequest.call(this, options);
200
200
  }
201
201
 
202
- if (!defined(options.headers)) {
203
- options.headers = {};
204
- }
202
+ addClientHeaders(options);
205
203
  options.headers.Authorization = `Bearer ${this._ionEndpoint.accessToken}`;
206
- options.headers["X-Cesium-Client"] = "CesiumJS";
207
- /* global CESIUM_VERSION */
208
- if (typeof CESIUM_VERSION !== "undefined") {
209
- options.headers["X-Cesium-Client-Version"] = CESIUM_VERSION;
210
- }
211
204
 
212
205
  return Resource.prototype._makeRequest.call(this, options);
213
206
  };
@@ -233,9 +226,22 @@ IonResource._createEndpointResource = function (assetId, options) {
233
226
  resourceOptions.queryParameters = { access_token: accessToken };
234
227
  }
235
228
 
229
+ addClientHeaders(resourceOptions);
230
+
236
231
  return server.getDerivedResource(resourceOptions);
237
232
  };
238
233
 
234
+ function addClientHeaders(options) {
235
+ if (!defined(options.headers)) {
236
+ options.headers = {};
237
+ }
238
+ options.headers["X-Cesium-Client"] = "CesiumJS";
239
+ /* global CESIUM_VERSION */
240
+ if (typeof CESIUM_VERSION !== "undefined") {
241
+ options.headers["X-Cesium-Client-Version"] = CESIUM_VERSION;
242
+ }
243
+ }
244
+
239
245
  function retryCallback(that, error) {
240
246
  const ionRoot = that._ionRoot ?? that;
241
247
  const endpointResource = ionRoot._ionEndpointResource;
@@ -981,9 +981,9 @@ function handlePointerMove(screenSpaceEventHandler, event) {
981
981
  function ScreenSpaceEventHandler(element) {
982
982
  this._inputEvents = {};
983
983
  this._buttonDown = {
984
- LEFT: false,
985
- MIDDLE: false,
986
- RIGHT: false,
984
+ [MouseButton.LEFT]: false,
985
+ [MouseButton.MIDDLE]: false,
986
+ [MouseButton.RIGHT]: false,
987
987
  };
988
988
  this._isPinching = false;
989
989
  this._isTouchHolding = false;
@@ -0,0 +1,40 @@
1
+ import defined from "./defined.js";
2
+
3
+ /**
4
+ * Adds all elements from the given source array to the given target array.
5
+ *
6
+ * If the <code>source</code> is <code>null</code>, <code>undefined</code>,
7
+ * or empty, then nothing will be done. Otherwise, this has the same
8
+ * semantics as<br>
9
+ * <code>for (const s of source) target.push(s);</code><br>
10
+ * but is usually more efficient than a <code>for</code>-loop, and does not
11
+ * put the elements of the source on the stack, as it would be done with the
12
+ * spread operator or when using <code>target.push.apply(source)</code>.
13
+ *
14
+ * @function
15
+ * @private
16
+ *
17
+ * @param {Array} target The target array
18
+ * @param {Array|undefined} source The source array
19
+ *
20
+ * @example
21
+ * const target = [ 0, 1, 2 ];
22
+ * const source = [ 3, 4, 5 ];
23
+ * Cesium.addAllToArray(target, source);
24
+ * // The target is now [ 0, 1, 2, 3, 4, 5 ]
25
+ */
26
+ function addAllToArray(target, source) {
27
+ if (!defined(source)) {
28
+ return;
29
+ }
30
+ const sourceLength = source.length;
31
+ if (sourceLength === 0) {
32
+ return;
33
+ }
34
+ const targetLength = target.length;
35
+ target.length += sourceLength;
36
+ for (let i = 0; i < sourceLength; i++) {
37
+ target[targetLength + i] = source[i];
38
+ }
39
+ }
40
+ export default addAllToArray;
@@ -23,24 +23,18 @@ function Batch(
23
23
  usingSphericalTextureCoordinates,
24
24
  zIndex,
25
25
  ) {
26
- this.primitives = primitives; // scene level primitive collection
26
+ this.primitives = primitives; // scene level primitive collection (each Batch manages its own Primitive from this collection)
27
27
  this.classificationType = classificationType;
28
28
  this.appearanceType = appearanceType;
29
29
  this.materialProperty = materialProperty;
30
- this.updaters = new AssociativeArray();
30
+ this.updaters = new AssociativeArray(); // GeometryUpdaters that manage the visual representation of the primitive.
31
31
  this.createPrimitive = true;
32
32
  this.primitive = undefined; // a GroundPrimitive encapsulating all the entities
33
- this.oldPrimitive = undefined;
33
+ this.oldPrimitive = undefined; // a GroundPrimitive that is being replaced by the current primitive, but will still be shown until the current primitive is ready.
34
34
  this.geometry = new AssociativeArray();
35
35
  this.material = undefined;
36
36
  this.updatersWithAttributes = new AssociativeArray();
37
37
  this.attributes = new AssociativeArray();
38
- this.invalidated = false;
39
- this.removeMaterialSubscription =
40
- materialProperty.definitionChanged.addEventListener(
41
- Batch.prototype.onMaterialChanged,
42
- this,
43
- );
44
38
  this.subscriptions = new AssociativeArray();
45
39
  this.showsUpdated = new AssociativeArray();
46
40
  this.usingSphericalTextureCoordinates = usingSphericalTextureCoordinates;
@@ -48,10 +42,6 @@ function Batch(
48
42
  this.rectangleCollisionCheck = new RectangleCollisionChecker();
49
43
  }
50
44
 
51
- Batch.prototype.onMaterialChanged = function () {
52
- this.invalidated = true;
53
- };
54
-
55
45
  Batch.prototype.overlapping = function (rectangle) {
56
46
  return this.rectangleCollisionCheck.collides(rectangle);
57
47
  };
@@ -71,6 +61,13 @@ Batch.prototype.isMaterial = function (updater) {
71
61
  return defined(material) && material.equals(updaterMaterial);
72
62
  };
73
63
 
64
+ /**
65
+ * Adds an updater to the Batch, and signals for a new Primitive to be created on the next update.
66
+ * @param {JulianDate} time
67
+ * @param {GeometryUpdater} updater
68
+ * @param {GeometryInstance} geometryInstance
69
+ * @private
70
+ */
74
71
  Batch.prototype.add = function (time, updater, geometryInstance) {
75
72
  const id = updater.id;
76
73
  this.updaters.set(id, updater);
@@ -100,6 +97,13 @@ Batch.prototype.add = function (time, updater, geometryInstance) {
100
97
  this.createPrimitive = true;
101
98
  };
102
99
 
100
+ /**
101
+ * Remove an updater from the Batch, and potentially signals for a new Primitive to be created
102
+ * on the next update.
103
+ * @param {GeometryUpdater} updater
104
+ * @returns true if the updater was removed, false if it was not found.
105
+ * @private
106
+ */
103
107
  Batch.prototype.remove = function (updater) {
104
108
  const id = updater.id;
105
109
  const geometryInstance = this.geometry.get(id);
@@ -120,6 +124,13 @@ Batch.prototype.remove = function (updater) {
120
124
  return false;
121
125
  };
122
126
 
127
+ /**
128
+ * Update a Batch, creating a new primitive, if necessary, or swapping out an old primitive for a new one that's ready.
129
+ * A new primitive is created whenever an updater is added to or removed from a Batch.
130
+ * @param {JulianDate} time
131
+ * @returns a boolean indicating whether the Batch was updated.
132
+ * @private
133
+ */
123
134
  Batch.prototype.update = function (time) {
124
135
  let isUpdated = true;
125
136
  let primitive = this.primitive;
@@ -295,6 +306,10 @@ Batch.prototype.getBoundingSphere = function (updater, result) {
295
306
  return BoundingSphereState.DONE;
296
307
  };
297
308
 
309
+ /**
310
+ * Removes a Batch's primitive (and oldPrimitive, if it exists).
311
+ * @private
312
+ */
298
313
  Batch.prototype.destroy = function () {
299
314
  const primitive = this.primitive;
300
315
  const primitives = this.primitives;
@@ -305,10 +320,11 @@ Batch.prototype.destroy = function () {
305
320
  if (defined(oldPrimitive)) {
306
321
  primitives.remove(oldPrimitive);
307
322
  }
308
- this.removeMaterialSubscription();
309
323
  };
310
324
 
311
325
  /**
326
+ * A container of Batch objects of ground geometry primitives, where a Batch is grouped by material,
327
+ * texture coordinate type, and spatial overlap.
312
328
  * @private
313
329
  */
314
330
  function StaticGroundGeometryPerMaterialBatch(
@@ -316,12 +332,20 @@ function StaticGroundGeometryPerMaterialBatch(
316
332
  classificationType,
317
333
  appearanceType,
318
334
  ) {
319
- this._items = [];
320
- this._primitives = primitives;
335
+ this._items = []; // array of Batch objects, each containing representing a primitive and a set of updaters that manage the visual representation of the primitive.
336
+ this._primitives = primitives; // scene level primitive collection
321
337
  this._classificationType = classificationType;
322
338
  this._appearanceType = appearanceType;
323
339
  }
324
340
 
341
+ /**
342
+ * Adds an geometry updater to a Batch. Tries to find a preexisting compatible Batch, or else creates a new Batch.
343
+ * Used by Visualizer classes to add and update (remove->add) a primitive's Updater set.
344
+ *
345
+ * @param {JulianDate} time
346
+ * @param {GeometryUpdater} updater A GeometryUpdater that manages the visual representation of a primitive.
347
+ * @private
348
+ */
325
349
  StaticGroundGeometryPerMaterialBatch.prototype.add = function (time, updater) {
326
350
  const items = this._items;
327
351
  const length = items.length;
@@ -361,21 +385,30 @@ StaticGroundGeometryPerMaterialBatch.prototype.add = function (time, updater) {
361
385
  items.push(batch);
362
386
  };
363
387
 
388
+ /**
389
+ * Removes an updater from a Batch. Defers potential deletion until the next update.
390
+ * @param {GeometryUpdater} updater A GeometryUpdater that manages the visual representation of a primitive.
391
+ * @private
392
+ */
364
393
  StaticGroundGeometryPerMaterialBatch.prototype.remove = function (updater) {
365
394
  const items = this._items;
366
395
  const length = items.length;
367
396
  for (let i = length - 1; i >= 0; i--) {
368
397
  const item = items[i];
369
398
  if (item.remove(updater)) {
370
- if (item.updaters.length === 0) {
371
- items.splice(i, 1);
372
- item.destroy();
373
- }
399
+ // If the item is now empty, delete it (deferred until the next update,
400
+ // in case a new updater is added to the same item first).
374
401
  break;
375
402
  }
376
403
  }
377
404
  };
378
405
 
406
+ /**
407
+ * Updates all the items (Batches) in the collection, and deletes any that are empty.
408
+ * @param {JulianDate} time
409
+ * @returns a boolean indicating whether any of the items (Batches) were updated.
410
+ * @private
411
+ */
379
412
  StaticGroundGeometryPerMaterialBatch.prototype.update = function (time) {
380
413
  let i;
381
414
  const items = this._items;
@@ -383,13 +416,8 @@ StaticGroundGeometryPerMaterialBatch.prototype.update = function (time) {
383
416
 
384
417
  for (i = length - 1; i >= 0; i--) {
385
418
  const item = items[i];
386
- if (item.invalidated) {
419
+ if (item.updaters.length === 0) {
387
420
  items.splice(i, 1);
388
- const updaters = item.updaters.values;
389
- const updatersLength = updaters.length;
390
- for (let h = 0; h < updatersLength; h++) {
391
- this.add(time, updaters[h]);
392
- }
393
421
  item.destroy();
394
422
  }
395
423
  }
@@ -1415,6 +1415,10 @@ Context.prototype.draw = function (
1415
1415
  continueDraw(this, drawCommand, shaderProgram, uniformMap);
1416
1416
  };
1417
1417
 
1418
+ Context.prototype.beginFrame = function () {
1419
+ // A no-op. Overridden when drawing to a SharedContext.
1420
+ };
1421
+
1418
1422
  Context.prototype.endFrame = function () {
1419
1423
  const gl = this._gl;
1420
1424
  gl.useProgram(null);
@@ -1442,8 +1446,8 @@ Context.prototype.endFrame = function () {
1442
1446
  * @param {object} readState An object with the following properties:
1443
1447
  * @param {number} [readState.x=0] The x offset of the rectangle to read from.
1444
1448
  * @param {number} [readState.y=0] The y offset of the rectangle to read from.
1445
- * @param {number} [readState.width=gl.drawingBufferWidth] The width of the rectangle to read from.
1446
- * @param {number} [readState.height=gl.drawingBufferHeight] The height of the rectangle to read from.
1449
+ * @param {number} [readState.width=this.drawingBufferWidth] The width of the rectangle to read from.
1450
+ * @param {number} [readState.height=this.drawingBufferHeight] The height of the rectangle to read from.
1447
1451
  * @param {Framebuffer} [readState.framebuffer] The framebuffer to read from. If undefined, the read will be from the default framebuffer.
1448
1452
  * @returns {Uint8Array|Uint16Array|Float32Array|Uint32Array} The pixels in the specified rectangle.
1449
1453
  */
@@ -1453,8 +1457,8 @@ Context.prototype.readPixels = function (readState) {
1453
1457
  readState = readState ?? Frozen.EMPTY_OBJECT;
1454
1458
  const x = Math.max(readState.x ?? 0, 0);
1455
1459
  const y = Math.max(readState.y ?? 0, 0);
1456
- const width = readState.width ?? gl.drawingBufferWidth;
1457
- const height = readState.height ?? gl.drawingBufferHeight;
1460
+ const width = readState.width ?? this.drawingBufferWidth;
1461
+ const height = readState.height ?? this.drawingBufferHeight;
1458
1462
  const framebuffer = readState.framebuffer;
1459
1463
 
1460
1464
  //>>includeStart('debug', pragmas.debug);
@@ -21,10 +21,12 @@ function Renderbuffer(options) {
21
21
  const maximumRenderbufferSize = ContextLimits.maximumRenderbufferSize;
22
22
 
23
23
  const format = options.format ?? RenderbufferFormat.RGBA4;
24
- const width = defined(options.width) ? options.width : gl.drawingBufferWidth;
24
+ const width = defined(options.width)
25
+ ? options.width
26
+ : context.drawingBufferWidth;
25
27
  const height = defined(options.height)
26
28
  ? options.height
27
- : gl.drawingBufferHeight;
29
+ : context.drawingBufferHeight;
28
30
  const numSamples = options.numSamples ?? 1;
29
31
 
30
32
  //>>includeStart('debug', pragmas.debug);
@@ -13,6 +13,7 @@ function Sampler(options) {
13
13
  options = options ?? Frozen.EMPTY_OBJECT;
14
14
 
15
15
  const {
16
+ wrapR = TextureWrap.CLAMP_TO_EDGE,
16
17
  wrapS = TextureWrap.CLAMP_TO_EDGE,
17
18
  wrapT = TextureWrap.CLAMP_TO_EDGE,
18
19
  minificationFilter = TextureMinificationFilter.LINEAR,
@@ -21,6 +22,10 @@ function Sampler(options) {
21
22
  } = options;
22
23
 
23
24
  //>>includeStart('debug', pragmas.debug);
25
+ if (!TextureWrap.validate(wrapR)) {
26
+ throw new DeveloperError("Invalid sampler.wrapR.");
27
+ }
28
+
24
29
  if (!TextureWrap.validate(wrapS)) {
25
30
  throw new DeveloperError("Invalid sampler.wrapS.");
26
31
  }
@@ -44,6 +49,7 @@ function Sampler(options) {
44
49
  );
45
50
  //>>includeEnd('debug');
46
51
 
52
+ this._wrapR = wrapR;
47
53
  this._wrapS = wrapS;
48
54
  this._wrapT = wrapT;
49
55
  this._minificationFilter = minificationFilter;
@@ -52,6 +58,11 @@ function Sampler(options) {
52
58
  }
53
59
 
54
60
  Object.defineProperties(Sampler.prototype, {
61
+ wrapR: {
62
+ get: function () {
63
+ return this._wrapR;
64
+ },
65
+ },
55
66
  wrapS: {
56
67
  get: function () {
57
68
  return this._wrapS;
@@ -84,6 +95,7 @@ Sampler.equals = function (left, right) {
84
95
  left === right ||
85
96
  (defined(left) &&
86
97
  defined(right) &&
98
+ left._wrapR === right._wrapR &&
87
99
  left._wrapS === right._wrapS &&
88
100
  left._wrapT === right._wrapT &&
89
101
  left._minificationFilter === right._minificationFilter &&
@@ -94,6 +106,7 @@ Sampler.equals = function (left, right) {
94
106
 
95
107
  Sampler.NEAREST = Object.freeze(
96
108
  new Sampler({
109
+ wrapR: TextureWrap.CLAMP_TO_EDGE,
97
110
  wrapS: TextureWrap.CLAMP_TO_EDGE,
98
111
  wrapT: TextureWrap.CLAMP_TO_EDGE,
99
112
  minificationFilter: TextureMinificationFilter.NEAREST,
@@ -7,6 +7,7 @@ import ShaderProgram from "./ShaderProgram.js";
7
7
  import ShaderSource from "./ShaderSource.js";
8
8
  import ShaderStruct from "./ShaderStruct.js";
9
9
  import ShaderFunction from "./ShaderFunction.js";
10
+ import addAllToArray from "../Core/addAllToArray.js";
10
11
 
11
12
  /**
12
13
  * An object that makes it easier to build the text of a {@link ShaderProgram}. This tracks GLSL code for both the vertex shader and the fragment shader.
@@ -413,7 +414,7 @@ ShaderBuilder.prototype.addVertexLines = function (lines) {
413
414
 
414
415
  const vertexLines = this._vertexShaderParts.shaderLines;
415
416
  if (Array.isArray(lines)) {
416
- vertexLines.push.apply(vertexLines, lines);
417
+ addAllToArray(vertexLines, lines);
417
418
  } else {
418
419
  // Single string case
419
420
  vertexLines.push(lines);
@@ -448,7 +449,7 @@ ShaderBuilder.prototype.addFragmentLines = function (lines) {
448
449
 
449
450
  const fragmentLines = this._fragmentShaderParts.shaderLines;
450
451
  if (Array.isArray(lines)) {
451
- fragmentLines.push.apply(fragmentLines, lines);
452
+ addAllToArray(fragmentLines, lines);
452
453
  } else {
453
454
  // Single string case
454
455
  fragmentLines.push(lines);
@@ -533,7 +534,7 @@ function generateStructLines(shaderBuilder) {
533
534
  structId = structIds[i];
534
535
  struct = shaderBuilder._structs[structId];
535
536
  structLines = struct.generateGlslLines();
536
- vertexLines.push.apply(vertexLines, structLines);
537
+ addAllToArray(vertexLines, structLines);
537
538
  }
538
539
 
539
540
  structIds = shaderBuilder._fragmentShaderParts.structIds;
@@ -541,7 +542,7 @@ function generateStructLines(shaderBuilder) {
541
542
  structId = structIds[i];
542
543
  struct = shaderBuilder._structs[structId];
543
544
  structLines = struct.generateGlslLines();
544
- fragmentLines.push.apply(fragmentLines, structLines);
545
+ addAllToArray(fragmentLines, structLines);
545
546
  }
546
547
 
547
548
  return {
@@ -576,7 +577,7 @@ function generateFunctionLines(shaderBuilder) {
576
577
  functionId = functionIds[i];
577
578
  func = shaderBuilder._functions[functionId];
578
579
  functionLines = func.generateGlslLines();
579
- vertexLines.push.apply(vertexLines, functionLines);
580
+ addAllToArray(vertexLines, functionLines);
580
581
  }
581
582
 
582
583
  functionIds = shaderBuilder._fragmentShaderParts.functionIds;
@@ -584,7 +585,7 @@ function generateFunctionLines(shaderBuilder) {
584
585
  functionId = functionIds[i];
585
586
  func = shaderBuilder._functions[functionId];
586
587
  functionLines = func.generateGlslLines();
587
- fragmentLines.push.apply(fragmentLines, functionLines);
588
+ addAllToArray(fragmentLines, functionLines);
588
589
  }
589
590
 
590
591
  return {