@hztxi/cesium-engine 25.0.6 → 26.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (484) hide show
  1. package/Build/Workers/chunk-2GJAWJJT.js +1344 -0
  2. package/Build/Workers/chunk-2J2VS5RI.js +288 -0
  3. package/Build/Workers/chunk-2NCNUVAT.js +56 -0
  4. package/Build/Workers/chunk-2ZYRUVVU.js +301 -0
  5. package/Build/Workers/chunk-36IU7N4V.js +1284 -0
  6. package/Build/Workers/chunk-375SHKGW.js +44 -0
  7. package/Build/Workers/chunk-3BDLET5S.js +198 -0
  8. package/Build/Workers/chunk-3PRHI4KX.js +241 -0
  9. package/Build/Workers/chunk-3R6E2SH4.js +672 -0
  10. package/Build/Workers/chunk-3ZKKXEXL.js +415 -0
  11. package/Build/Workers/chunk-47KVKPTO.js +415 -0
  12. package/Build/Workers/chunk-4N227IPR.js +973 -0
  13. package/Build/Workers/chunk-4P6OAPBM.js +97 -0
  14. package/Build/Workers/chunk-4ZOLEPZK.js +519 -0
  15. package/Build/Workers/chunk-5EF3WWQG.js +352 -0
  16. package/Build/Workers/chunk-5FYUSABU.js +945 -0
  17. package/Build/Workers/chunk-5I76476T.js +288 -0
  18. package/Build/Workers/chunk-5PBZKBAP.js +511 -0
  19. package/Build/Workers/chunk-5RVAAW26.js +82 -0
  20. package/Build/Workers/chunk-5VWK76PO.js +511 -0
  21. package/Build/Workers/chunk-5WU37CUJ.js +630 -0
  22. package/Build/Workers/chunk-6EBDN5WS.js +97 -0
  23. package/Build/Workers/chunk-75HIWCEV.js +301 -0
  24. package/Build/Workers/chunk-77DBX23X.js +455 -0
  25. package/Build/Workers/chunk-7AMVPXZY.js +1992 -0
  26. package/Build/Workers/chunk-7BMDD6SM.js +124 -0
  27. package/Build/Workers/chunk-7GQOWCSN.js +959 -0
  28. package/Build/Workers/chunk-7J2ONMKC.js +198 -0
  29. package/Build/Workers/chunk-7MHUHXZZ.js +219 -0
  30. package/Build/Workers/chunk-7MQPHOAS.js +455 -0
  31. package/Build/Workers/chunk-7NJ5O7TP.js +387 -0
  32. package/Build/Workers/chunk-7OME2OKM.js +171 -0
  33. package/Build/Workers/chunk-7Y642MCO.js +352 -0
  34. package/Build/Workers/chunk-7ZFKBLUE.js +1054 -0
  35. package/Build/Workers/chunk-A2BROW3D.js +352 -0
  36. package/Build/Workers/chunk-A7LGY5XS.js +140 -0
  37. package/Build/Workers/chunk-AN2NVYL6.js +1483 -0
  38. package/Build/Workers/chunk-B4XOVZGA.js +476 -0
  39. package/Build/Workers/chunk-B7PT2VL5.js +630 -0
  40. package/Build/Workers/chunk-C6XQGBPV.js +476 -0
  41. package/Build/Workers/chunk-CAEC5DA2.js +57 -0
  42. package/Build/Workers/chunk-CBCOHH5O.js +837 -0
  43. package/Build/Workers/chunk-CDLPLYLV.js +1287 -0
  44. package/Build/Workers/chunk-CEKCKPFN.js +368 -0
  45. package/Build/Workers/chunk-CEMXKBQO.js +1800 -0
  46. package/Build/Workers/chunk-CHMDKP5L.js +2342 -0
  47. package/Build/Workers/chunk-CKW3STKA.js +1067 -0
  48. package/Build/Workers/chunk-CV5RICKT.js +1992 -0
  49. package/Build/Workers/chunk-CWGB3D4Z.js +257 -0
  50. package/Build/Workers/chunk-DBWSISJT.js +56 -0
  51. package/Build/Workers/chunk-DQEUGBGA.js +2719 -0
  52. package/Build/Workers/chunk-DSBSPPPJ.js +1344 -0
  53. package/Build/Workers/chunk-DSGLDRTI.js +278 -0
  54. package/Build/Workers/chunk-DUBE5G2H.js +497 -0
  55. package/Build/Workers/chunk-DXD7OPSP.js +1992 -0
  56. package/Build/Workers/chunk-DXECZBSA.js +368 -0
  57. package/Build/Workers/chunk-DZIRO6ZK.js +682 -0
  58. package/Build/Workers/chunk-E4CRPGX5.js +140 -0
  59. package/Build/Workers/chunk-E4IVMEBH.js +52 -0
  60. package/Build/Workers/chunk-E4PBNWWK.js +58 -0
  61. package/Build/Workers/chunk-E5MWOMVC.js +57 -0
  62. package/Build/Workers/chunk-ECN3VUMA.js +73 -0
  63. package/Build/Workers/chunk-ECSKVHUB.js +476 -0
  64. package/Build/Workers/chunk-EE3XBOQI.js +1483 -0
  65. package/Build/Workers/chunk-EHA2ZDPZ.js +415 -0
  66. package/Build/Workers/chunk-EKEKPAJF.js +454 -0
  67. package/Build/Workers/chunk-EL4B5CSQ.js +162 -0
  68. package/Build/Workers/chunk-EOHKUXPX.js +198 -0
  69. package/Build/Workers/chunk-ERENMHG2.js +754 -0
  70. package/Build/Workers/chunk-ESQGFRLZ.js +163 -0
  71. package/Build/Workers/chunk-FAYBQGKO.js +219 -0
  72. package/Build/Workers/chunk-FGCXPEZM.js +3201 -0
  73. package/Build/Workers/chunk-FHCRXPA6.js +44 -0
  74. package/Build/Workers/chunk-FQ42MT7M.js +58 -0
  75. package/Build/Workers/chunk-FQDYQG4P.js +1284 -0
  76. package/Build/Workers/chunk-FTCBY5HH.js +138 -0
  77. package/Build/Workers/chunk-FV4OWDV4.js +9230 -0
  78. package/Build/Workers/chunk-FYRNNQSL.js +280 -0
  79. package/Build/Workers/chunk-GI5RWJAY.js +101 -0
  80. package/Build/Workers/chunk-GNLMSDRO.js +945 -0
  81. package/Build/Workers/chunk-GVUJ6O3R.js +73 -0
  82. package/Build/Workers/chunk-HCGU7OCG.js +97 -0
  83. package/Build/Workers/chunk-HRIPVWSC.js +58 -0
  84. package/Build/Workers/chunk-IC3BR6SC.js +102 -0
  85. package/Build/Workers/chunk-IU3YAYPT.js +1344 -0
  86. package/Build/Workers/chunk-J7MZR7B2.js +1483 -0
  87. package/Build/Workers/chunk-JMF4ATAS.js +3794 -0
  88. package/Build/Workers/chunk-KEJKMITY.js +82 -0
  89. package/Build/Workers/chunk-KSIEJYNL.js +3822 -0
  90. package/Build/Workers/chunk-KT3GG7AW.js +754 -0
  91. package/Build/Workers/chunk-KW2QZDUS.js +147 -0
  92. package/Build/Workers/chunk-KYCEM22I.js +1800 -0
  93. package/Build/Workers/chunk-L6B5XPBL.js +73 -0
  94. package/Build/Workers/chunk-LGJXN2VP.js +352 -0
  95. package/Build/Workers/chunk-LJTQW46H.js +57 -0
  96. package/Build/Workers/chunk-LMQGYJME.js +672 -0
  97. package/Build/Workers/chunk-LOBYJQA4.js +76 -0
  98. package/Build/Workers/chunk-LOF32O7F.js +163 -0
  99. package/Build/Workers/chunk-LOTIJA7D.js +124 -0
  100. package/Build/Workers/chunk-LY2UG3HV.js +38 -0
  101. package/Build/Workers/chunk-M7Z3MPAX.js +973 -0
  102. package/Build/Workers/chunk-MHNLTQHO.js +3201 -0
  103. package/Build/Workers/chunk-ML7OMD72.js +2342 -0
  104. package/Build/Workers/chunk-NBTGXEMT.js +945 -0
  105. package/Build/Workers/chunk-NCPJBP24.js +140 -0
  106. package/Build/Workers/chunk-NFY5V6MR.js +102 -0
  107. package/Build/Workers/chunk-NQZC37F7.js +38 -0
  108. package/Build/Workers/chunk-O3X3D2Z3.js +352 -0
  109. package/Build/Workers/chunk-OBUIHPKF.js +352 -0
  110. package/Build/Workers/chunk-OYPSUED3.js +1067 -0
  111. package/Build/Workers/chunk-PAEWNYIV.js +138 -0
  112. package/Build/Workers/chunk-PANJ7YH6.js +102 -0
  113. package/Build/Workers/chunk-PCL3Y7H5.js +82 -0
  114. package/Build/Workers/chunk-PIIUGRQD.js +387 -0
  115. package/Build/Workers/chunk-POKD22OT.js +2719 -0
  116. package/Build/Workers/chunk-PQMA7MFS.js +9237 -0
  117. package/Build/Workers/chunk-PURIPUSY.js +682 -0
  118. package/Build/Workers/chunk-QIOOTLWN.js +56 -0
  119. package/Build/Workers/chunk-QQZPPXY4.js +3822 -0
  120. package/Build/Workers/chunk-QUPRALOD.js +101 -0
  121. package/Build/Workers/chunk-QXLQLGL2.js +1067 -0
  122. package/Build/Workers/chunk-RBEVHHXK.js +3201 -0
  123. package/Build/Workers/chunk-RC4YC3VU.js +278 -0
  124. package/Build/Workers/chunk-RGNNWVR6.js +171 -0
  125. package/Build/Workers/chunk-RHO5HV52.js +305 -0
  126. package/Build/Workers/chunk-SBBIEHYT.js +44 -0
  127. package/Build/Workers/chunk-SVCZUP5R.js +837 -0
  128. package/Build/Workers/chunk-SWVZTU6X.js +305 -0
  129. package/Build/Workers/chunk-T3EUPM5A.js +454 -0
  130. package/Build/Workers/chunk-TA6IU2XL.js +171 -0
  131. package/Build/Workers/chunk-TBHW5UME.js +973 -0
  132. package/Build/Workers/chunk-TLSGD5TR.js +280 -0
  133. package/Build/Workers/chunk-TOXDLWKZ.js +368 -0
  134. package/Build/Workers/chunk-TPOX6IOR.js +1054 -0
  135. package/Build/Workers/chunk-TZBM6TAB.js +124 -0
  136. package/Build/Workers/chunk-U2OY6MX6.js +398 -0
  137. package/Build/Workers/chunk-UCY4B5EV.js +288 -0
  138. package/Build/Workers/chunk-ULNBTI6R.js +138 -0
  139. package/Build/Workers/chunk-UMUS2AQQ.js +398 -0
  140. package/Build/Workers/chunk-UZ7GTP2L.js +162 -0
  141. package/Build/Workers/chunk-V52FEPCV.js +754 -0
  142. package/Build/Workers/chunk-VBEXZBG5.js +147 -0
  143. package/Build/Workers/chunk-VC76B6GM.js +959 -0
  144. package/Build/Workers/chunk-VCUOYHWC.js +519 -0
  145. package/Build/Workers/chunk-VJIL5H6K.js +2719 -0
  146. package/Build/Workers/chunk-VMF7KOGY.js +162 -0
  147. package/Build/Workers/chunk-W3C7OHXF.js +387 -0
  148. package/Build/Workers/chunk-W5OCKMPJ.js +101 -0
  149. package/Build/Workers/chunk-WB5GWYDP.js +455 -0
  150. package/Build/Workers/chunk-WN6MAL25.js +682 -0
  151. package/Build/Workers/chunk-WTR7KMQA.js +693 -0
  152. package/Build/Workers/chunk-WTTFMU3P.js +241 -0
  153. package/Build/Workers/chunk-WULONJZC.js +1800 -0
  154. package/Build/Workers/chunk-WZPMAVTV.js +511 -0
  155. package/Build/Workers/chunk-XHT5SVP4.js +52 -0
  156. package/Build/Workers/chunk-XITBARMZ.js +2342 -0
  157. package/Build/Workers/chunk-XLQZNQ4Z.js +163 -0
  158. package/Build/Workers/chunk-XZ6HDXKM.js +76 -0
  159. package/Build/Workers/chunk-Y7KVUJEB.js +219 -0
  160. package/Build/Workers/chunk-Y7NDFEQ3.js +398 -0
  161. package/Build/Workers/chunk-YBBQDYX2.js +301 -0
  162. package/Build/Workers/chunk-YHPYPVAB.js +837 -0
  163. package/Build/Workers/chunk-YNKK6BXY.js +454 -0
  164. package/Build/Workers/chunk-YRAJ74HR.js +305 -0
  165. package/Build/Workers/chunk-YULTZK5O.js +147 -0
  166. package/Build/Workers/chunk-YUNQYP3Z.js +9237 -0
  167. package/Build/Workers/chunk-Z6JV4DZG.js +1046 -0
  168. package/Build/Workers/chunk-Z7BONRW2.js +241 -0
  169. package/Build/Workers/chunk-ZK2R3DEJ.js +1054 -0
  170. package/Build/Workers/chunk-ZTK5EBUI.js +76 -0
  171. package/Build/Workers/chunk-ZZPDORJK.js +56 -0
  172. package/Build/Workers/combineGeometry.js +24 -24
  173. package/Build/Workers/createBoxGeometry.js +18 -18
  174. package/Build/Workers/createBoxOutlineGeometry.js +18 -18
  175. package/Build/Workers/createCircleGeometry.js +26 -26
  176. package/Build/Workers/createCircleOutlineGeometry.js +19 -19
  177. package/Build/Workers/createCoplanarPolygonGeometry.js +39 -39
  178. package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +33 -33
  179. package/Build/Workers/createCorridorGeometry.js +36 -37
  180. package/Build/Workers/createCorridorOutlineGeometry.js +34 -35
  181. package/Build/Workers/createCylinderGeometry.js +20 -20
  182. package/Build/Workers/createCylinderOutlineGeometry.js +20 -20
  183. package/Build/Workers/createEllipseGeometry.js +26 -26
  184. package/Build/Workers/createEllipseOutlineGeometry.js +19 -19
  185. package/Build/Workers/createEllipsoidGeometry.js +19 -19
  186. package/Build/Workers/createEllipsoidOutlineGeometry.js +18 -18
  187. package/Build/Workers/createFrustumGeometry.js +18 -18
  188. package/Build/Workers/createFrustumOutlineGeometry.js +20 -20
  189. package/Build/Workers/createGeometry.js +25 -24
  190. package/Build/Workers/createGroundPolylineGeometry.js +98 -34
  191. package/Build/Workers/createMvtTile.js +111 -19
  192. package/Build/Workers/createPlaneGeometry.js +18 -18
  193. package/Build/Workers/createPlaneOutlineGeometry.js +17 -17
  194. package/Build/Workers/createPolygonGeometry.js +36 -36
  195. package/Build/Workers/createPolygonOutlineGeometry.js +33 -33
  196. package/Build/Workers/createPolylineGeometry.js +28 -28
  197. package/Build/Workers/createPolylineVolumeGeometry.js +38 -36
  198. package/Build/Workers/createPolylineVolumeOutlineGeometry.js +32 -31
  199. package/Build/Workers/createRectangleGeometry.js +29 -29
  200. package/Build/Workers/createRectangleOutlineGeometry.js +23 -23
  201. package/Build/Workers/createSimplePolylineGeometry.js +26 -26
  202. package/Build/Workers/createSphereGeometry.js +19 -19
  203. package/Build/Workers/createSphereOutlineGeometry.js +18 -18
  204. package/Build/Workers/createTaskProcessorWorker.js +3 -3
  205. package/Build/Workers/createVectorTileClampedPolylines.js +14 -14
  206. package/Build/Workers/createVectorTileGeometries.js +24 -24
  207. package/Build/Workers/createVectorTilePoints.js +13 -13
  208. package/Build/Workers/createVectorTilePolygons.js +22 -22
  209. package/Build/Workers/createVectorTilePolylines.js +14 -14
  210. package/Build/Workers/createVerticesFromCesium3DTilesTerrain.js +26 -26
  211. package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +23 -23
  212. package/Build/Workers/createVerticesFromHeightmap.js +23 -23
  213. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +21 -21
  214. package/Build/Workers/createWallGeometry.js +26 -26
  215. package/Build/Workers/createWallOutlineGeometry.js +26 -26
  216. package/Build/Workers/decodeDraco.js +10 -10
  217. package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +993 -2334
  218. package/Build/Workers/decodeI3S.js +10 -10
  219. package/Build/Workers/gaussianSplatSorter.js +4 -4
  220. package/Build/Workers/gaussianSplatTextureGenerator.js +4 -4
  221. package/Build/Workers/incrementallyBuildTerrainPicker.js +10 -10
  222. package/Build/Workers/transcodeKTX2.js +6 -6
  223. package/Build/Workers/transferTypedArrayTest.js +1 -1
  224. package/Build/Workers/upsampleQuantizedTerrainMesh.js +23 -23
  225. package/Build/Workers/upsampleVerticesFromCesium3DTilesTerrain.js +26 -26
  226. package/Source/Core/ArcGISTiledElevationTerrainProvider.js +1 -5
  227. package/Source/Core/BoundingRectangle.js +6 -8
  228. package/Source/Core/BoundingSphere.js +0 -3
  229. package/Source/Core/Cartesian2.js +1 -1
  230. package/Source/Core/Cartesian3.js +1 -1
  231. package/Source/Core/Cartesian4.js +1 -1
  232. package/Source/Core/Cesium3DTilesTerrainGeometryProcessor.js +3 -4
  233. package/Source/Core/Color.js +1 -0
  234. package/Source/Core/ComponentDatatype.js +35 -0
  235. package/Source/Core/CoplanarPolygonGeometry.js +2 -2
  236. package/Source/Core/CorridorGeometry.js +2 -4
  237. package/Source/Core/CorridorOutlineGeometry.js +1 -3
  238. package/Source/Core/EarthOrientationParameters.js +2 -2
  239. package/Source/Core/EllipseGeometryLibrary.js +2 -2
  240. package/Source/Core/EllipsoidGeodesic.js +3 -3
  241. package/Source/Core/EllipsoidRhumbLine.js +1 -1
  242. package/Source/Core/GroundPolylineGeometry.js +99 -4
  243. package/Source/Core/Heap.js +1 -1
  244. package/Source/Core/HermitePolynomialApproximation.js +215 -179
  245. package/Source/Core/InterpolationAlgorithm.js +58 -50
  246. package/Source/Core/Ion.js +1 -1
  247. package/Source/Core/JulianDate.js +1 -1
  248. package/Source/Core/LagrangePolynomialApproximation.js +55 -52
  249. package/Source/Core/LinearApproximation.js +69 -66
  250. package/Source/Core/MapProjection.js +1 -0
  251. package/Source/Core/Math.js +59 -0
  252. package/Source/Core/Matrix2.js +3 -3
  253. package/Source/Core/Matrix3.js +3 -3
  254. package/Source/Core/Matrix4.js +1 -1
  255. package/Source/Core/OrthographicFrustum.js +1 -1
  256. package/Source/Core/PerspectiveFrustum.js +1 -1
  257. package/Source/Core/PolygonGeometry.js +2 -2
  258. package/Source/Core/PolygonGeometryLibrary.js +1 -1
  259. package/Source/Core/PolygonOutlineGeometry.js +1 -1
  260. package/Source/Core/PolylineGeometry.js +1 -1
  261. package/Source/Core/PolylinePipeline.js +9 -2
  262. package/Source/Core/PolylineVolumeGeometryLibrary.js +1 -1
  263. package/Source/Core/Rectangle.js +7 -1
  264. package/Source/Core/RectangleOutlineGeometry.js +1 -1
  265. package/Source/Core/Resource.js +1 -1
  266. package/Source/Core/ScreenSpaceEventHandler.js +51 -41
  267. package/Source/Core/SimplePolylineGeometry.js +1 -1
  268. package/Source/Core/TerrainEncoding.js +2 -2
  269. package/Source/Core/TerrainMesh.js +3 -3
  270. package/Source/Core/TerrainPicker.js +180 -168
  271. package/Source/Core/TimeIntervalCollection.js +1 -3
  272. package/Source/Core/Tipsify.js +1 -1
  273. package/Source/Core/Transforms.js +5 -1
  274. package/Source/Core/VectorPipeline.js +1117 -0
  275. package/Source/Core/VectorProvider.js +429 -0
  276. package/Source/Core/WallOutlineGeometry.js +1 -1
  277. package/Source/Core/createColorRamp.js +37 -0
  278. package/Source/Core/getTimestamp.js +4 -2
  279. package/Source/Core/globalTypes.js +25 -0
  280. package/Source/Core/writeTextToCanvas.js +1 -0
  281. package/Source/DataSources/CompositeEntityCollection.js +0 -1
  282. package/Source/DataSources/CzmlDataSource.js +14 -0
  283. package/Source/DataSources/DataSourceDisplay.js +1 -1
  284. package/Source/DataSources/GeoJsonDataSource.js +0 -1
  285. package/Source/DataSources/GeometryVisualizer.js +1 -1
  286. package/Source/DataSources/KmlDataSource.js +529 -557
  287. package/Source/DataSources/PathGraphics.js +8 -1
  288. package/Source/DataSources/PathMode.js +27 -0
  289. package/Source/DataSources/PathVisualizer.js +298 -1
  290. package/Source/DataSources/PolylineGeometryUpdater.js +125 -7
  291. package/Source/DataSources/PolylineVisualizer.js +1 -1
  292. package/Source/DataSources/StaticOutlineGeometryBatch.js +1 -1
  293. package/Source/Renderer/AutomaticUniforms.js +23 -0
  294. package/Source/Renderer/Context.js +9 -3
  295. package/Source/Renderer/DrawCommand.js +22 -0
  296. package/Source/Renderer/Framebuffer.js +4 -0
  297. package/Source/Renderer/Pass.js +11 -9
  298. package/Source/Renderer/Texture.js +12 -1
  299. package/Source/Renderer/UniformState.js +7 -0
  300. package/Source/Renderer/VertexArray.js +1 -1
  301. package/Source/Renderer/createUniform.js +346 -239
  302. package/Source/Renderer/createUniformArray.js +494 -381
  303. package/Source/Scene/ArcGisMapServerImageryProvider.js +0 -5
  304. package/Source/Scene/ArcGisMapService.js +1 -1
  305. package/Source/Scene/Billboard.js +2 -1
  306. package/Source/Scene/BillboardCollection.js +15 -5
  307. package/Source/Scene/BillboardTexture.js +5 -3
  308. package/Source/Scene/BufferPointCollection.js +11 -1
  309. package/Source/Scene/BufferPolygonCollection.js +26 -0
  310. package/Source/Scene/BufferPolylineCollection.js +2 -0
  311. package/Source/Scene/BufferPrimitiveCollection.js +105 -32
  312. package/Source/Scene/Camera.js +137 -8
  313. package/Source/Scene/CameraEventAggregator.js +30 -18
  314. package/Source/Scene/CameraFlightPath.js +17 -0
  315. package/Source/Scene/Cesium3DTile.js +102 -4
  316. package/Source/Scene/Cesium3DTileContent.js +195 -254
  317. package/Source/Scene/Cesium3DTileContentFactory.js +10 -2
  318. package/Source/Scene/Cesium3DTileOptimizations.js +4 -6
  319. package/Source/Scene/Cesium3DTileStyle.js +40 -0
  320. package/Source/Scene/Cesium3DTileset.js +213 -8
  321. package/Source/Scene/Cesium3DTilesetTraversal.js +14 -0
  322. package/Source/Scene/ClippingPlaneCollection.js +4 -4
  323. package/Source/Scene/ClippingPolygon.js +2 -0
  324. package/Source/Scene/ClippingPolygonCollection.js +2 -2
  325. package/Source/Scene/ColumbusWorlds.js +190 -0
  326. package/Source/Scene/Composite3DTileContent.js +254 -292
  327. package/Source/Scene/Controllers/Controller.js +63 -0
  328. package/Source/Scene/Controllers/ControllerHost.js +78 -0
  329. package/Source/Scene/Controllers/HybridScreenSpacePanCameraController.js +106 -0
  330. package/Source/Scene/Controllers/MouseButton.js +32 -0
  331. package/Source/Scene/Controllers/ScreenSpaceElevatorCameraController.js +295 -0
  332. package/Source/Scene/Controllers/ScreenSpaceInputBindings.js +154 -0
  333. package/Source/Scene/Controllers/ScreenSpaceMapCameraController.js +310 -0
  334. package/Source/Scene/Controllers/ScreenSpaceTiltOrbitCameraController.js +642 -0
  335. package/Source/Scene/Controllers/ScreenSpaceZoomCameraController.js +431 -0
  336. package/Source/Scene/Controllers/defaultPickWorldPosition.js +84 -0
  337. package/Source/Scene/DerivedCommand.js +98 -0
  338. package/Source/Scene/EdgeDisplayMode.js +50 -0
  339. package/Source/Scene/EdgeFramebuffer.js +1 -5
  340. package/Source/Scene/Empty3DTileContent.js +100 -132
  341. package/Source/Scene/Expression.js +6 -8
  342. package/Source/Scene/FrameState.js +27 -0
  343. package/Source/Scene/GaussianSplat3DTileContent.js +436 -478
  344. package/Source/Scene/GeoJsonPrimitive.js +874 -0
  345. package/Source/Scene/Geometry3DTileContent.js +151 -185
  346. package/Source/Scene/Globe.js +110 -22
  347. package/Source/Scene/GlobeDepth.js +243 -6
  348. package/Source/Scene/GlobeSurfaceShaderSet.js +637 -540
  349. package/Source/Scene/GlobeSurfaceTile.js +575 -398
  350. package/Source/Scene/GlobeSurfaceTileProvider.js +2289 -1842
  351. package/Source/Scene/GltfBufferViewLoader.js +3 -3
  352. package/Source/Scene/GltfLoader.js +146 -3
  353. package/Source/Scene/GltfLoaderUtil.js +20 -4
  354. package/Source/Scene/GltfPipeline/forEachTextureInMaterial.js +10 -0
  355. package/Source/Scene/GltfPipeline/removeUnusedElements.js +21 -11
  356. package/Source/Scene/GltfSpzLoader.js +1 -1
  357. package/Source/Scene/GltfVertexBufferLoader.js +6 -3
  358. package/Source/Scene/GroundPolylinePrimitive.js +2 -1
  359. package/Source/Scene/I3SDataProvider.js +1 -1
  360. package/Source/Scene/I3SLayer.js +1 -1
  361. package/Source/Scene/I3SNode.js +2 -2
  362. package/Source/Scene/ImageryLayer.js +2 -2
  363. package/Source/Scene/ImageryLayerCollection.js +190 -6
  364. package/Source/Scene/Implicit3DTileContent.js +192 -216
  365. package/Source/Scene/ImplicitTileCoordinates.js +17 -0
  366. package/Source/Scene/IonImageryProvider.js +1 -5
  367. package/Source/Scene/Label.js +4 -4
  368. package/Source/Scene/LabelCollection.js +4 -1
  369. package/Source/Scene/MVTDataProvider.js +555 -0
  370. package/Source/Scene/Material.js +1 -0
  371. package/Source/Scene/Model/B3dmLoader.js +1 -2
  372. package/Source/Scene/Model/EdgeVisibilityPipelineStage.js +82 -312
  373. package/Source/Scene/Model/Extensions/Gpm/GltfGpmLoader.js +4 -0
  374. package/Source/Scene/Model/I3dmLoader.js +1 -1
  375. package/Source/Scene/Model/InstancingPipelineStage.js +4 -7
  376. package/Source/Scene/Model/MaterialPipelineStage.js +124 -1
  377. package/Source/Scene/Model/Model.js +45 -10
  378. package/Source/Scene/Model/Model3DTileContent.js +424 -458
  379. package/Source/Scene/Model/ModelClippingPlanesPipelineStage.js +28 -1
  380. package/Source/Scene/Model/ModelDrawCommand.js +180 -8
  381. package/Source/Scene/Model/ModelDrawCommands.js +4 -0
  382. package/Source/Scene/Model/ModelSceneGraph.js +21 -0
  383. package/Source/Scene/Model/ModelUtility.js +5 -0
  384. package/Source/Scene/Model/PickingPipelineStage.js +29 -0
  385. package/Source/Scene/Model/PrimitiveRenderResources.js +24 -0
  386. package/Source/Scene/Model/createVectorTileBuffersFromModelComponents.js +645 -153
  387. package/Source/Scene/ModelComponents.js +112 -0
  388. package/Source/Scene/Multiple3DTileContent.js +291 -334
  389. package/Source/Scene/MvtLabelCandidates.js +295 -0
  390. package/Source/Scene/MvtLabelManager.js +1069 -0
  391. package/Source/Scene/Picking.js +19 -3
  392. package/Source/Scene/PlanarFillIdFramebuffer.js +172 -0
  393. package/Source/Scene/PntsParser.js +1 -1
  394. package/Source/Scene/Polyline.js +32 -5
  395. package/Source/Scene/PolylineCollection.js +39 -0
  396. package/Source/Scene/PostProcessStage.js +4 -2
  397. package/Source/Scene/Primitive.js +12 -13
  398. package/Source/Scene/PrimitivePipeline.js +158 -28
  399. package/Source/Scene/QuadtreePrimitive.js +3 -2
  400. package/Source/Scene/ResourceCache.js +7 -4
  401. package/Source/Scene/ResourceCacheKey.js +21 -18
  402. package/Source/Scene/Scene.js +655 -6
  403. package/Source/Scene/SceneTransforms.js +18 -0
  404. package/Source/Scene/ScreenSpaceCameraController.js +12 -3
  405. package/Source/Scene/ShadowMap.js +9 -3
  406. package/Source/Scene/ShadowMapShader.js +50 -2
  407. package/Source/Scene/SnapFramebuffer.js +121 -0
  408. package/Source/Scene/Snapping.js +184 -0
  409. package/Source/Scene/TerrainFillMesh.js +3 -2
  410. package/Source/Scene/Tileset3DTileContent.js +113 -146
  411. package/Source/Scene/UrlTemplate3DTilesDataProvider.js +543 -0
  412. package/Source/Scene/Vector3DTileContent.js +207 -237
  413. package/Source/Scene/VectorGltf3DTileContent.js +185 -45
  414. package/Source/Scene/View.js +10 -8
  415. package/Source/Scene/VoxelPrimitive.js +159 -175
  416. package/Source/Scene/VoxelProvider.js +64 -91
  417. package/Source/Scene/VoxelTraversal.js +1 -1
  418. package/Source/Scene/buildVectorGltfFromMVT.js +1208 -0
  419. package/Source/Scene/buildVoxelCustomShader.js +199 -0
  420. package/Source/Scene/createElevationBandMaterial.js +1 -1
  421. package/Source/Scene/decodeMVT.js +877 -0
  422. package/Source/Scene/findMeshoptExtension.js +23 -0
  423. package/Source/Scene/renderBufferPointCollection.js +114 -64
  424. package/Source/Scene/renderBufferPolygonCollection.js +245 -53
  425. package/Source/Scene/renderBufferPolylineCollection.js +271 -145
  426. package/Source/Shaders/BillboardCollectionVS.glsl +23 -25
  427. package/Source/Shaders/BillboardCollectionVS.js +23 -25
  428. package/Source/Shaders/BufferPointMaterialFS.glsl +1 -0
  429. package/Source/Shaders/BufferPointMaterialFS.js +1 -0
  430. package/Source/Shaders/BufferPointMaterialVS.glsl +19 -9
  431. package/Source/Shaders/BufferPointMaterialVS.js +20 -10
  432. package/Source/Shaders/BufferPolygonMaterialFS.glsl +13 -0
  433. package/Source/Shaders/BufferPolygonMaterialFS.js +13 -0
  434. package/Source/Shaders/BufferPolygonMaterialVS.glsl +22 -4
  435. package/Source/Shaders/BufferPolygonMaterialVS.js +23 -5
  436. package/Source/Shaders/BufferPolylineMaterialVS.glsl +16 -2
  437. package/Source/Shaders/BufferPolylineMaterialVS.js +17 -3
  438. package/Source/Shaders/Builtin/Constants/passCesium3DTile.glsl +1 -1
  439. package/Source/Shaders/Builtin/Constants/passCesium3DTile.js +1 -1
  440. package/Source/Shaders/Builtin/Constants/passCesium3DTileClassification.glsl +1 -1
  441. package/Source/Shaders/Builtin/Constants/passCesium3DTileClassification.js +1 -1
  442. package/Source/Shaders/Builtin/Constants/passCesium3DTileClassificationIgnoreShow.glsl +1 -1
  443. package/Source/Shaders/Builtin/Constants/passCesium3DTileClassificationIgnoreShow.js +1 -1
  444. package/Source/Shaders/Builtin/Constants/passCesium3DTileEdgesDirect.glsl +9 -0
  445. package/Source/Shaders/Builtin/Constants/passCesium3DTileEdgesDirect.js +11 -0
  446. package/Source/Shaders/Builtin/Constants/passCesium3DTilePlanarFillId.glsl +9 -0
  447. package/Source/Shaders/Builtin/Constants/passCesium3DTilePlanarFillId.js +11 -0
  448. package/Source/Shaders/Builtin/Constants/passClassification.glsl +1 -1
  449. package/Source/Shaders/Builtin/Constants/passClassification.js +1 -1
  450. package/Source/Shaders/Builtin/Constants/passGaussianSplats.glsl +1 -1
  451. package/Source/Shaders/Builtin/Constants/passGaussianSplats.js +1 -1
  452. package/Source/Shaders/Builtin/Constants/passOpaque.glsl +1 -1
  453. package/Source/Shaders/Builtin/Constants/passOpaque.js +1 -1
  454. package/Source/Shaders/Builtin/Constants/passOverlay.glsl +1 -1
  455. package/Source/Shaders/Builtin/Constants/passOverlay.js +1 -1
  456. package/Source/Shaders/Builtin/Constants/passTranslucent.glsl +1 -1
  457. package/Source/Shaders/Builtin/Constants/passTranslucent.js +1 -1
  458. package/Source/Shaders/Builtin/Constants/passVoxels.glsl +1 -1
  459. package/Source/Shaders/Builtin/Constants/passVoxels.js +1 -1
  460. package/Source/Shaders/Builtin/CzmBuiltins.js +4 -0
  461. package/Source/Shaders/GlobeFS.glsl +10 -6
  462. package/Source/Shaders/GlobeFS.js +10 -6
  463. package/Source/Shaders/Materials/PolylineGlowMaterial.glsl +1 -1
  464. package/Source/Shaders/Materials/PolylineGlowMaterial.js +1 -1
  465. package/Source/Shaders/Model/EdgeVisibilityStageVS.glsl +0 -1
  466. package/Source/Shaders/Model/EdgeVisibilityStageVS.js +0 -1
  467. package/Source/Shaders/Model/MaterialStageFS.glsl +8 -2
  468. package/Source/Shaders/Model/MaterialStageFS.js +8 -2
  469. package/Source/Shaders/Model/ModelFS.glsl +105 -0
  470. package/Source/Shaders/Model/ModelFS.js +105 -0
  471. package/Source/Shaders/PolylineShadowVolumeFS.glsl +14 -0
  472. package/Source/Shaders/PolylineShadowVolumeFS.js +14 -0
  473. package/Source/Shaders/RestoreDepth.glsl +8 -0
  474. package/Source/Shaders/RestoreDepth.js +10 -0
  475. package/Source/Shaders/VectorCommon.glsl +178 -0
  476. package/Source/Shaders/VectorCommon.js +180 -0
  477. package/Source/ThirdParty/zip-module.wasm +0 -0
  478. package/Source/Widget/CesiumWidget.js +30 -0
  479. package/Source/Workers/createMvtTile.js +39 -0
  480. package/Source/Workers/decodeGoogleEarthEnterprisePacket.js +2 -2
  481. package/Source/Workers/incrementallyBuildTerrainPicker.js +2 -0
  482. package/index.d.ts +535 -1393
  483. package/index.js +125 -93
  484. package/package.json +13 -13
@@ -3,6 +3,7 @@ import Cartesian2 from "../Core/Cartesian2.js";
3
3
  import Cartesian3 from "../Core/Cartesian3.js";
4
4
  import Cartesian4 from "../Core/Cartesian4.js";
5
5
  import Cartographic from "../Core/Cartographic.js";
6
+ import Check from "../Core/Check.js";
6
7
  import Frozen from "../Core/Frozen.js";
7
8
  import defined from "../Core/defined.js";
8
9
  import DeveloperError from "../Core/DeveloperError.js";
@@ -26,6 +27,7 @@ import Ray from "../Core/Ray.js";
26
27
  import Rectangle from "../Core/Rectangle.js";
27
28
  import Transforms from "../Core/Transforms.js";
28
29
  import CameraFlightPath from "./CameraFlightPath.js";
30
+ import ColumbusWorlds from "./ColumbusWorlds.js";
29
31
  import MapMode2D from "./MapMode2D.js";
30
32
  import SceneMode from "./SceneMode.js";
31
33
 
@@ -537,6 +539,18 @@ function convertTransformForColumbusView(camera) {
537
539
  camera._transform,
538
540
  camera._actualTransform,
539
541
  );
542
+
543
+ if (camera._scene.columbusRepeatWorlds === true) {
544
+ // Columbus repeat worlds: anchor the converted reference frame on the
545
+ // world copy nearest the camera (element [13] is the translation's
546
+ // map-u component in the column-major matrix) so the frame, and offsets
547
+ // within it, stay continuous with the camera's current copy.
548
+ camera._actualTransform[13] = ColumbusWorlds.nearestWorldU(
549
+ camera._positionWC.y,
550
+ camera._actualTransform[13],
551
+ camera._projection,
552
+ );
553
+ }
540
554
  }
541
555
 
542
556
  const scratchCartographic = new Cartographic();
@@ -752,6 +766,18 @@ function updateMembers(camera) {
752
766
  }
753
767
 
754
768
  camera._projection.unproject(positionENU, camera._positionCartographic);
769
+
770
+ if (
771
+ (mode === SceneMode.SCENE2D || mode === SceneMode.COLUMBUS_VIEW) &&
772
+ camera._scene.columbusRepeatWorlds === true
773
+ ) {
774
+ // Repeat worlds: the camera may sit on any world copy, which unprojects
775
+ // to a longitude outside [-180°, 180°]; wrap it so rectangle
776
+ // containment checks see the equivalent primary point.
777
+ camera._positionCartographic.longitude = CesiumMath.negativePiToPi(
778
+ camera._positionCartographic.longitude,
779
+ );
780
+ }
755
781
  }
756
782
  }
757
783
 
@@ -1315,6 +1341,15 @@ function setViewCV(camera, position, hpr, convert) {
1315
1341
  );
1316
1342
  position = projection.project(cartographic, scratchSetViewCartesian);
1317
1343
  }
1344
+ if (camera._scene.columbusRepeatWorlds === true) {
1345
+ // Columbus repeat worlds: keep the view continuous with the camera's
1346
+ // current world copy instead of snapping back to the primary world.
1347
+ position.x = ColumbusWorlds.nearestWorldU(
1348
+ camera.positionWC.y,
1349
+ position.x,
1350
+ camera._projection,
1351
+ );
1352
+ }
1318
1353
  Cartesian3.clone(position, camera.position);
1319
1354
  }
1320
1355
  hpr.heading = hpr.heading - CesiumMath.PI_OVER_TWO;
@@ -1353,6 +1388,16 @@ function setView2D(camera, position, hpr, convert) {
1353
1388
 
1354
1389
  Cartesian2.clone(position, camera.position);
1355
1390
 
1391
+ if (camera._scene.columbusRepeatWorlds === true) {
1392
+ // Repeat worlds: keep the destination on the camera's current world copy
1393
+ // instead of snapping the view back to the primary world.
1394
+ camera.position.x = ColumbusWorlds.nearestWorldU(
1395
+ camera.positionWC.y,
1396
+ camera.position.x,
1397
+ camera._projection,
1398
+ );
1399
+ }
1400
+
1356
1401
  const newLeft = -position.z * 0.5;
1357
1402
  const newRight = -newLeft;
1358
1403
 
@@ -2356,7 +2401,7 @@ const scratchLookAtHeadingPitchRangeQuaternion1 = new Quaternion();
2356
2401
  const scratchLookAtHeadingPitchRangeQuaternion2 = new Quaternion();
2357
2402
  const scratchHeadingPitchRangeMatrix3 = new Matrix3();
2358
2403
 
2359
- function offsetFromHeadingPitchRange(heading, pitch, range) {
2404
+ function offsetFromHeadingPitchRange(heading, pitch, range, result) {
2360
2405
  pitch = CesiumMath.clamp(
2361
2406
  pitch,
2362
2407
  -CesiumMath.PI_OVER_TWO,
@@ -2380,10 +2425,7 @@ function offsetFromHeadingPitchRange(heading, pitch, range) {
2380
2425
  scratchHeadingPitchRangeMatrix3,
2381
2426
  );
2382
2427
 
2383
- const offset = Cartesian3.clone(
2384
- Cartesian3.UNIT_X,
2385
- scratchLookAtHeadingPitchRangeOffset,
2386
- );
2428
+ const offset = Cartesian3.clone(Cartesian3.UNIT_X, result);
2387
2429
  Matrix3.multiplyByVector(rotMatrix, offset, offset);
2388
2430
  Cartesian3.negate(offset, offset);
2389
2431
  Cartesian3.multiplyByScalar(offset, range, offset);
@@ -2441,6 +2483,7 @@ Camera.prototype.lookAtTransform = function (transform, offset) {
2441
2483
  offset.heading,
2442
2484
  offset.pitch,
2443
2485
  offset.range,
2486
+ scratchLookAtHeadingPitchRangeOffset,
2444
2487
  );
2445
2488
  } else {
2446
2489
  cartesianOffset = offset;
@@ -2492,6 +2535,72 @@ Camera.prototype.lookAtTransform = function (transform, offset) {
2492
2535
  this._adjustOrthographicFrustum(true);
2493
2536
  };
2494
2537
 
2538
+ const scratchLookAtWorldPositionTransform = new Matrix4();
2539
+ const scratchLookAtWorldPositionDirection = new Cartesian3();
2540
+ const scratchLookAtWorldPositionWorldUp = new Cartesian3();
2541
+ const scratchLookAtWorldPositionRight = new Cartesian3();
2542
+
2543
+ /**
2544
+ * Sets the camera orientation to look at a target position in world coordinates. The camera's up vector will be oriented to the world up vector at the target position.
2545
+ * If the camera is at the target position, the camera will be oriented to the world up vector at the target position.
2546
+ * @param {Cartesian3} target The target position in world coordinates.
2547
+ * @param {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid to use for determining the world up.
2548
+ */
2549
+ Camera.prototype.lookAtWorldPosition = function (
2550
+ target,
2551
+ ellipsoid = Ellipsoid.default,
2552
+ ) {
2553
+ //>>includeStart('debug', pragmas.debug);
2554
+ Check.typeOf.object("target", target);
2555
+ Check.typeOf.object("ellipsoid", ellipsoid);
2556
+ //>>includeEnd('debug');
2557
+
2558
+ const transform = Matrix4.clone(
2559
+ this._transform,
2560
+ scratchLookAtWorldPositionTransform,
2561
+ );
2562
+
2563
+ this._setTransform(Matrix4.IDENTITY);
2564
+
2565
+ // Get direction to look at target
2566
+ let direction = Cartesian3.subtract(
2567
+ target,
2568
+ this.positionWC,
2569
+ scratchLookAtWorldPositionDirection,
2570
+ );
2571
+
2572
+ // If the camera is at the target position, we can't look at it, but we should still continue to re-orient the camera to the world up vector at the target position.
2573
+ if (Cartesian3.magnitudeSquared(direction) < CesiumMath.EPSILON8) {
2574
+ direction = Cartesian3.clone(
2575
+ this.directionWC,
2576
+ scratchLookAtWorldPositionDirection,
2577
+ );
2578
+ }
2579
+
2580
+ direction = Cartesian3.normalize(direction, this.direction);
2581
+
2582
+ // Orient the camera to the world up vector at the target position
2583
+ const worldUp = ellipsoid.geodeticSurfaceNormal(
2584
+ target,
2585
+ scratchLookAtWorldPositionWorldUp,
2586
+ );
2587
+
2588
+ let right = Cartesian3.cross(
2589
+ direction,
2590
+ worldUp,
2591
+ scratchLookAtWorldPositionRight,
2592
+ );
2593
+ if (Cartesian3.magnitudeSquared(right) < CesiumMath.EPSILON8) {
2594
+ right = Cartesian3.clone(this.rightWC, scratchLookAtWorldPositionRight);
2595
+ }
2596
+ Cartesian3.normalize(right, this.right);
2597
+
2598
+ const up = Cartesian3.cross(right, direction, this.up);
2599
+ Cartesian3.normalize(up, this.up);
2600
+
2601
+ this._setTransform(transform);
2602
+ };
2603
+
2495
2604
  const viewRectangle3DCartographic1 = new Cartographic();
2496
2605
  const viewRectangle3DCartographic2 = new Cartographic();
2497
2606
  const viewRectangle3DNorthEast = new Cartesian3();
@@ -2874,13 +2983,19 @@ function pickMapColumbusView(camera, windowPosition, projection, result) {
2874
2983
 
2875
2984
  if (
2876
2985
  cart.latitude < -CesiumMath.PI_OVER_TWO ||
2877
- cart.latitude > CesiumMath.PI_OVER_TWO ||
2878
- cart.longitude < -Math.PI ||
2879
- cart.longitude > Math.PI
2986
+ cart.latitude > CesiumMath.PI_OVER_TWO
2880
2987
  ) {
2881
2988
  return undefined;
2882
2989
  }
2883
2990
 
2991
+ // The longitude may fall outside [-PI, PI] when Columbus repeat worlds are
2992
+ // enabled and the picked point is on a translated world copy. Accept it:
2993
+ // the returned ECEF position is the equivalent primary-world point, so
2994
+ // picks on world copies succeed instead of returning undefined. Callers
2995
+ // that need to know which copy was picked should use
2996
+ // Globe.pickWorldCoordinates or Scene.pickPosition, which operate in scene
2997
+ // (map-plane) world coordinates.
2998
+
2884
2999
  return projection.ellipsoid.cartographicToCartesian(cart, result);
2885
3000
  }
2886
3001
 
@@ -3190,6 +3305,19 @@ function createAnimationCV(camera, duration) {
3190
3305
 
3191
3306
  position = camera.cameraToWorldCoordinatesPoint(camera.position, posScratch);
3192
3307
 
3308
+ if (camera._scene.columbusRepeatWorlds === true) {
3309
+ // Columbus repeat worlds: the camera may sit on any world copy; wrapping
3310
+ // its map-u coordinate into the primary world is visually identical (the
3311
+ // map repeats) and keeps the bounds checks below meaningful.
3312
+ const worldWidth = ColumbusWorlds.getWorldWidth(camera._projection);
3313
+ position.y =
3314
+ CesiumMath.mod(position.y + worldWidth * 0.5, worldWidth) -
3315
+ worldWidth * 0.5;
3316
+ center.y =
3317
+ CesiumMath.mod(center.y + worldWidth * 0.5, worldWidth) -
3318
+ worldWidth * 0.5;
3319
+ }
3320
+
3193
3321
  const tanPhi = Math.tan(camera.frustum.fovy * 0.5);
3194
3322
  const tanTheta = camera.frustum.aspectRatio * tanPhi;
3195
3323
  const distToC = Cartesian3.magnitude(
@@ -3621,6 +3749,7 @@ Camera.prototype.flyToBoundingSphere = function (boundingSphere, options) {
3621
3749
  offset.heading,
3622
3750
  offset.pitch,
3623
3751
  offset.range,
3752
+ scratchflyToBoundingSphereDestination,
3624
3753
  );
3625
3754
  }
3626
3755
 
@@ -8,12 +8,29 @@ import ScreenSpaceEventHandler from "../Core/ScreenSpaceEventHandler.js";
8
8
  import ScreenSpaceEventType from "../Core/ScreenSpaceEventType.js";
9
9
  import CameraEventType from "./CameraEventType.js";
10
10
 
11
- function getKey(type, modifier) {
12
- let key = `${type}`;
13
- if (defined(modifier)) {
14
- key += `+${modifier}`;
11
+ const keyboardModifierCombinations = [
12
+ KeyboardEventModifier.SHIFT,
13
+ KeyboardEventModifier.CTRL,
14
+ KeyboardEventModifier.ALT,
15
+ [KeyboardEventModifier.SHIFT, KeyboardEventModifier.CTRL],
16
+ [KeyboardEventModifier.SHIFT, KeyboardEventModifier.ALT],
17
+ [KeyboardEventModifier.CTRL, KeyboardEventModifier.ALT],
18
+ [
19
+ KeyboardEventModifier.SHIFT,
20
+ KeyboardEventModifier.CTRL,
21
+ KeyboardEventModifier.ALT,
22
+ ],
23
+ ];
24
+
25
+ function getKey(type, modifiers) {
26
+ if (!defined(modifiers)) {
27
+ return `${type}`;
15
28
  }
16
- return key;
29
+
30
+ const modifierList = Array.isArray(modifiers)
31
+ ? modifiers.toSorted()
32
+ : [modifiers];
33
+ return `${type}+${modifierList.join("+")}`;
17
34
  }
18
35
 
19
36
  function clonePinchMovement(pinchMovement, result) {
@@ -219,7 +236,7 @@ function listenMouseButtonDownUp(aggregator, modifier, type) {
219
236
  aggregator._eventHandler.setInputAction(
220
237
  function () {
221
238
  cancelMouseDownAction(getKey(type, undefined), aggregator);
222
- for (const modifier of Object.values(KeyboardEventModifier)) {
239
+ for (const modifier of keyboardModifierCombinations) {
223
240
  const cancelKey = getKey(type, modifier);
224
241
  cancelMouseDownAction(cancelKey, aggregator);
225
242
  }
@@ -382,18 +399,13 @@ function CameraEventAggregator(canvas) {
382
399
  listenMouseButtonDownUp(this, undefined, CameraEventType.MIDDLE_DRAG);
383
400
  listenMouseMove(this, undefined);
384
401
 
385
- for (const modifierName in KeyboardEventModifier) {
386
- if (KeyboardEventModifier.hasOwnProperty(modifierName)) {
387
- const modifier = KeyboardEventModifier[modifierName];
388
- if (defined(modifier)) {
389
- listenToWheel(this, modifier);
390
- listenToPinch(this, modifier, canvas);
391
- listenMouseButtonDownUp(this, modifier, CameraEventType.LEFT_DRAG);
392
- listenMouseButtonDownUp(this, modifier, CameraEventType.RIGHT_DRAG);
393
- listenMouseButtonDownUp(this, modifier, CameraEventType.MIDDLE_DRAG);
394
- listenMouseMove(this, modifier);
395
- }
396
- }
402
+ for (const modifiers of keyboardModifierCombinations) {
403
+ listenToWheel(this, modifiers);
404
+ listenToPinch(this, modifiers, canvas);
405
+ listenMouseButtonDownUp(this, modifiers, CameraEventType.LEFT_DRAG);
406
+ listenMouseButtonDownUp(this, modifiers, CameraEventType.RIGHT_DRAG);
407
+ listenMouseButtonDownUp(this, modifiers, CameraEventType.MIDDLE_DRAG);
408
+ listenMouseMove(this, modifiers);
397
409
  }
398
410
  }
399
411
 
@@ -8,6 +8,7 @@ import EasingFunction from "../Core/EasingFunction.js";
8
8
  import CesiumMath from "../Core/Math.js";
9
9
  import PerspectiveFrustum from "../Core/PerspectiveFrustum.js";
10
10
  import PerspectiveOffCenterFrustum from "../Core/PerspectiveOffCenterFrustum.js";
11
+ import ColumbusWorlds from "./ColumbusWorlds.js";
11
12
  import SceneMode from "./SceneMode.js";
12
13
 
13
14
  /**
@@ -436,6 +437,22 @@ CameraFlightPath.createTween = function (scene, options) {
436
437
  }
437
438
 
438
439
  const camera = scene.camera;
440
+
441
+ if (
442
+ (mode === SceneMode.SCENE2D || mode === SceneMode.COLUMBUS_VIEW) &&
443
+ scene.columbusRepeatWorlds === true
444
+ ) {
445
+ // Repeat worlds: fly to the copy of the destination nearest the camera's
446
+ // current copy so the flight pans locally instead of crossing a full
447
+ // world. In local (u, v, h) coordinates, u is the x component.
448
+ scratchDestination.x = ColumbusWorlds.nearestWorldU(
449
+ camera.position.x,
450
+ destination.x,
451
+ projection,
452
+ );
453
+ destination = scratchDestination;
454
+ }
455
+
439
456
  const transform = options.endTransform;
440
457
  if (defined(transform)) {
441
458
  camera._setTransform(transform);
@@ -503,6 +503,7 @@ function Cesium3DTile(tileset, baseResource, header, parent) {
503
503
  this._selectedFrame = 0;
504
504
  this._wasSelectedLastFrame = false;
505
505
  this._requestedFrame = 0;
506
+ this._desiredFrame = 0;
506
507
  this._ancestorWithContent = undefined;
507
508
  this._ancestorWithContentAvailable = undefined;
508
509
  this._refines = false;
@@ -944,13 +945,34 @@ Cesium3DTile.prototype.getScreenSpaceError = function (
944
945
  error = geometricError / pixelSize;
945
946
  } else {
946
947
  // Avoid divide by zero when viewer is inside the tile
947
- const distance = Math.max(this._distanceToCamera, CesiumMath.EPSILON7);
948
+ const tileDistance = Math.max(this._distanceToCamera, CesiumMath.EPSILON7);
948
949
  const sseDenominator = frustum.sseDenominator;
949
- error = (geometricError * height) / (distance * sseDenominator);
950
+ error = (geometricError * height) / (tileDistance * sseDenominator);
951
+ const uniformLevel = tileset._uniformLevelState;
952
+ if (uniformLevel.active) {
953
+ const referenceDistance = Math.max(
954
+ uniformLevel.referenceDistance,
955
+ CesiumMath.EPSILON7,
956
+ );
957
+ const uniformError =
958
+ (geometricError * height) / (referenceDistance * sseDenominator);
959
+ const cappedUniformError = CesiumMath.clamp(
960
+ uniformError,
961
+ error / uniformLevel.coarsenFactor,
962
+ error * uniformLevel.deviationFactor,
963
+ );
964
+ error += (cappedUniformError - error) * uniformLevel.engage;
965
+ }
950
966
  if (tileset.dynamicScreenSpaceError) {
951
967
  const density = tileset._dynamicScreenSpaceErrorComputedDensity;
952
968
  const factor = tileset.dynamicScreenSpaceErrorFactor;
953
- const dynamicError = CesiumMath.fog(distance, density) * factor;
969
+ let dynamicError = CesiumMath.fog(tileDistance, density) * factor;
970
+ if (uniformLevel.active) {
971
+ const uniformDynamicError =
972
+ CesiumMath.fog(uniformLevel.referenceDistance, density) * factor;
973
+ dynamicError +=
974
+ (uniformDynamicError - dynamicError) * uniformLevel.engage;
975
+ }
954
976
  error -= dynamicError;
955
977
  }
956
978
  }
@@ -1232,6 +1254,16 @@ async function processArrayBuffer(
1232
1254
  return;
1233
1255
  }
1234
1256
 
1257
+ if (isEmptyTile(tile, error)) {
1258
+ if (expired) {
1259
+ tile.expireDate = undefined;
1260
+ }
1261
+ tile._content = new Empty3DTileContent(tileset, tile);
1262
+ markTileAsEmptyContent(tile);
1263
+ tile._contentState = Cesium3DTileContentState.PROCESSING;
1264
+ return tile._content;
1265
+ }
1266
+
1235
1267
  tile._contentState = Cesium3DTileContentState.FAILED;
1236
1268
  throw error;
1237
1269
  }
@@ -1256,6 +1288,7 @@ async function processArrayBuffer(
1256
1288
 
1257
1289
  if (tile.isDestroyed()) {
1258
1290
  // Tile is unloaded before the content can process
1291
+ destroyUnattachedContent(content);
1259
1292
  return;
1260
1293
  }
1261
1294
 
@@ -1264,6 +1297,9 @@ async function processArrayBuffer(
1264
1297
  }
1265
1298
 
1266
1299
  tile._content = content;
1300
+ if (content instanceof Empty3DTileContent) {
1301
+ markTileAsEmptyContent(tile);
1302
+ }
1267
1303
  tile._contentState = Cesium3DTileContentState.PROCESSING;
1268
1304
 
1269
1305
  return content;
@@ -1316,6 +1352,49 @@ function requestSingleContent(tile) {
1316
1352
  return processArrayBuffer(tile, tileset, request, expired, promise);
1317
1353
  }
1318
1354
 
1355
+ /**
1356
+ * Determines whether a tile load error should be interpreted as "no content"
1357
+ * (empty tile) rather than a true failure. A missing tile policy specifies
1358
+ * HTTP Status Codes to be interpreted as "no content", allowing tiles to be
1359
+ * statically hosted without generating and serving unnecessary content for
1360
+ * empty tiles.
1361
+ * @ignore
1362
+ */
1363
+ function isEmptyTile(tile, error) {
1364
+ const tileset = tile._tileset;
1365
+ const policy = tileset?._runtimeContentCodec?.missingTilePolicy;
1366
+ if (!defined(policy)) {
1367
+ return false;
1368
+ }
1369
+
1370
+ if (!defined(error.statusCode)) {
1371
+ return false;
1372
+ }
1373
+ return policy.statusCodes.includes(error.statusCode);
1374
+ }
1375
+
1376
+ function markTileAsEmptyContent(tile) {
1377
+ // These flags are mutable instance state initialized in the constructor.
1378
+ tile.hasEmptyContent = true;
1379
+ tile.hasRenderableContent = false;
1380
+ }
1381
+
1382
+ /**
1383
+ * Releases content that was constructed but never attached to its tile, which
1384
+ * happens when the tile is destroyed while the payload is still decoding. Some
1385
+ * content types register themselves with shared owners during construction, so
1386
+ * dropping the reference alone would leak.
1387
+ * @param {Cesium3DTileContent|undefined} content
1388
+ * @private
1389
+ */
1390
+ function destroyUnattachedContent(content) {
1391
+ if (defined(content) && !content.isDestroyed()) {
1392
+ content.destroy();
1393
+ }
1394
+ }
1395
+
1396
+ Cesium3DTile._isEmptyTile = isEmptyTile;
1397
+
1319
1398
  /**
1320
1399
  * Given a downloaded content payload, construct a {@link Cesium3DTileContent}.
1321
1400
  * <p>
@@ -1328,10 +1407,29 @@ function requestSingleContent(tile) {
1328
1407
  * @private
1329
1408
  */
1330
1409
  async function makeContent(tile, arrayBuffer) {
1410
+ const tileset = tile._tileset;
1411
+ const codec = tileset?._runtimeContentCodec;
1412
+ // Runtime codecs own leaf payloads. Implicit placeholder tiles first load a
1413
+ // subtree JSON/binary payload, which must continue through normal dispatch
1414
+ // so it can expand into the codec's derived content tiles.
1415
+ if (
1416
+ !defined(tile.implicitTileset) &&
1417
+ defined(codec) &&
1418
+ typeof codec.createContent === "function"
1419
+ ) {
1420
+ const content = await Promise.resolve(
1421
+ codec.createContent(tileset, tile, tile._contentResource, arrayBuffer),
1422
+ );
1423
+ if (tile.isDestroyed()) {
1424
+ destroyUnattachedContent(content);
1425
+ return;
1426
+ }
1427
+ return content;
1428
+ }
1429
+
1331
1430
  const preprocessed = preprocess3DTileContent(arrayBuffer);
1332
1431
 
1333
1432
  // Vector and Geometry tile rendering do not support the skip LOD optimization.
1334
- const tileset = tile._tileset;
1335
1433
  tileset._disableSkipLevelOfDetail =
1336
1434
  tileset._disableSkipLevelOfDetail ||
1337
1435
  preprocessed.contentType === Cesium3DTileContentType.GEOMETRY ||