@arcgis/core 6.0.0-next.34 → 6.0.0-next.36

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 (232) hide show
  1. package/Basemap.d.ts +2 -2
  2. package/analysis/ShadowCastAnalysis.d.ts +11 -5
  3. package/arcgisGlobal.d.ts +1 -0
  4. package/assets/esri/core/libs/libtess/libtess-f32.wasm +0 -0
  5. package/assets/esri/core/libs/libtess/libtess-f64.wasm +0 -0
  6. package/assets/esri/core/workers/RemoteClient.js +1 -1
  7. package/assets/esri/core/workers/chunks/01f55004d64309f8538b.js +1 -0
  8. package/assets/esri/core/workers/chunks/0202eb8c2b2865f99981.js +1 -0
  9. package/assets/esri/core/workers/chunks/{67e533748435253aaba6.js → 0284f608d25c654fcc11.js} +1 -1
  10. package/assets/esri/core/workers/chunks/{7810586c35dfe1437516.js → 06102715e9a8f218e07c.js} +1 -1
  11. package/assets/esri/core/workers/chunks/{6029773458ab98600f67.js → 07e5482e1fc69be5de09.js} +1 -1
  12. package/assets/esri/core/workers/chunks/08140725277de5d2e41a.js +1 -0
  13. package/assets/esri/core/workers/chunks/{2d9a1f23ec6ce90723ac.js → 0d99bfb75dcb9fa29080.js} +1 -1
  14. package/assets/esri/core/workers/chunks/10ad7b35b6800d40444e.js +1 -0
  15. package/assets/esri/core/workers/chunks/1132e28aaa5825b10b6e.js +1 -0
  16. package/assets/esri/core/workers/chunks/{dd30b02c5978c1c5f511.js → 155861fbd0e5fc2db80c.js} +1 -1
  17. package/assets/esri/core/workers/chunks/165ca7a97b611c8f26c4.js +1 -0
  18. package/assets/esri/core/workers/chunks/1ae0c9345626e70affd3.js +2 -0
  19. package/assets/esri/core/workers/chunks/{cd355baab983033c3ef0.js → 1ec772eaa63eb6937231.js} +1 -1
  20. package/assets/esri/core/workers/chunks/{5c04835b0b52461183cd.js → 1fd82fcba2758741996a.js} +1 -1
  21. package/assets/esri/core/workers/chunks/21e1d423ee33f916547e.js +1 -0
  22. package/assets/esri/core/workers/chunks/{e8e54faf947a582b4cf7.js → 247617c0dbae2386ab3b.js} +1 -1
  23. package/assets/esri/core/workers/chunks/{97ec46605f16333144b7.js → 26ea39dfdf887f357fce.js} +1 -1
  24. package/assets/esri/core/workers/chunks/{85de980c5b296ec69323.js → 279089a6a3f08022c678.js} +1 -1
  25. package/assets/esri/core/workers/chunks/{b657363113f4a37e634b.js → 3223f9fbc76ba9ef8d13.js} +1 -1
  26. package/assets/esri/core/workers/chunks/322b22a5d54e404bebd5.js +1 -0
  27. package/assets/esri/core/workers/chunks/{122e75b21699a4e83b15.js → 338d800d4efcc91cead1.js} +1 -1
  28. package/assets/esri/core/workers/chunks/3537fe95b83a13b156cc.js +1 -0
  29. package/assets/esri/core/workers/chunks/{f09bc86cd52224febfcb.js → 3b380e64566a6cce59e2.js} +1 -1
  30. package/assets/esri/core/workers/chunks/{a1e8209d00809c9520a0.js → 3fe4c89acd325d36618d.js} +1 -1
  31. package/assets/esri/core/workers/chunks/449a2dee17b54946f245.js +1 -0
  32. package/assets/esri/core/workers/chunks/{311e4969f19df63451dd.js → 4e5405134d079bdf9b7a.js} +1 -1
  33. package/assets/esri/core/workers/chunks/{d070fcb73ce274ab80e4.js → 5504ec9bd9ee4d10af07.js} +1 -1
  34. package/assets/esri/core/workers/chunks/552c36b40e5a5ec117fb.js +1 -0
  35. package/assets/esri/core/workers/chunks/5622f3faa59434772857.js +1 -0
  36. package/assets/esri/core/workers/chunks/59a1b637d2c107504a04.js +1 -0
  37. package/assets/esri/core/workers/chunks/59a88dd53f8806bbec06.js +1 -0
  38. package/assets/esri/core/workers/chunks/5c2fe67527c9d7b4dba3.js +1 -0
  39. package/assets/esri/core/workers/chunks/5d781c2c6204cffffd0d.js +1 -0
  40. package/assets/esri/core/workers/chunks/61d36730564c5ac5edab.js +1 -0
  41. package/assets/esri/core/workers/chunks/6604272ef6fe85279032.js +1 -0
  42. package/assets/esri/core/workers/chunks/{90c1d10eae7ae71889b0.js → 7400b8c454b47ee4fb3c.js} +1 -1
  43. package/assets/esri/core/workers/chunks/796c6195b6bf59dcc9bd.js +1 -0
  44. package/assets/esri/core/workers/chunks/7b45ac83e279fe9516a5.js +1 -0
  45. package/assets/esri/core/workers/chunks/{2de077c7b971f2c215a6.js → 7ddbde8fdd1cf3c53f50.js} +1 -1
  46. package/assets/esri/core/workers/chunks/804606b194dc9e71d088.js +1 -0
  47. package/assets/esri/core/workers/chunks/8102f0bf5707c3be3310.js +1 -0
  48. package/assets/esri/core/workers/chunks/{676c8c0329d68f9f3ac4.js → 81bcc495e6eaf2cf7474.js} +1 -1
  49. package/assets/esri/core/workers/chunks/{d1d6154b4af1c9cc497b.js → 934e1f2153e6fad6ed23.js} +1 -1
  50. package/assets/esri/core/workers/chunks/{e096c1d9d53af74d3207.js → 990e96139b5a1dccb061.js} +1 -1
  51. package/assets/esri/core/workers/chunks/{f28b63c1179366dac8a2.js → 9e2c30b67bab5795306e.js} +1 -1
  52. package/assets/esri/core/workers/chunks/{9184c947cdefe06bf551.js → a18c3cbe505a19d29569.js} +1 -1
  53. package/assets/esri/core/workers/chunks/aa6ee2aa4ff6e6d41efb.js +1 -0
  54. package/assets/esri/core/workers/chunks/{3fd5c3cd8457ddc68798.js → aa779896fd9e5c341349.js} +1 -1
  55. package/assets/esri/core/workers/chunks/ac10c7d2c4829a150037.js +1 -0
  56. package/assets/esri/core/workers/chunks/{e0a7a75709121a26f255.js → afc8a9847f31bb66b13b.js} +1 -1
  57. package/assets/esri/core/workers/chunks/c7adb7b77721c75891f4.js +1 -0
  58. package/assets/esri/core/workers/chunks/{bead830a677690eeb6fb.js → ce8ef2eec290e1df6b2a.js} +1 -1
  59. package/assets/esri/core/workers/chunks/d3369ffed19f4c264dcd.js +1 -0
  60. package/assets/esri/core/workers/chunks/d3412518a7b518860fbb.js +1 -0
  61. package/assets/esri/core/workers/chunks/{3048e74e6246324ce6fc.js → d5916500514a41a4758f.js} +1 -1
  62. package/assets/esri/core/workers/chunks/{c034c30e577d620b8e28.js → dac69c0047488fdf986d.js} +1 -1
  63. package/assets/esri/core/workers/chunks/dcc782e4bf9e8a8202f9.js +1 -0
  64. package/assets/esri/core/workers/chunks/dcdf837a452dc0cac582.js +1 -0
  65. package/assets/esri/core/workers/chunks/{19a4fa965b70fc6f78f6.js → e209cb1f3f14bf576ebe.js} +1 -1
  66. package/assets/esri/core/workers/chunks/e67ea2f1714e5abeae44.js +1 -0
  67. package/assets/esri/core/workers/chunks/e8fb2ba7b7a4f0916325.js +1 -0
  68. package/assets/esri/core/workers/chunks/efcd38aad9aa667001b2.js +1 -0
  69. package/assets/esri/core/workers/chunks/{3aafdb905c697bc9b1ad.js → f372f4eb5527238c46f5.js} +1 -1
  70. package/assets/esri/core/workers/chunks/f497968055af459c5da4.js +1 -0
  71. package/assets/esri/core/workers/chunks/f7123ba1286f64e13e91.js +1 -0
  72. package/assets/esri/core/workers/chunks/fcb4707c2e95099b9f30.js +1 -0
  73. package/assets/esri/libs/lyr3d/lyr3DMain.wasm +0 -0
  74. package/assets/esri/libs/lyr3d/lyr3DWorker.wasm +0 -0
  75. package/chunks/BlurEmission.glsl.js +9 -4
  76. package/chunks/RibbonLine.glsl.js +158 -84
  77. package/chunks/Terrain.glsl.js +9 -9
  78. package/chunks/libtess-f32.js +1 -1
  79. package/chunks/libtess-f64.js +1 -1
  80. package/chunks/lyr3DMain.js +1 -1
  81. package/chunks/lyr3DWorker.js +2 -2
  82. package/config.d.ts +3 -3
  83. package/config.js +1 -1
  84. package/core/mathUtils.js +1 -1
  85. package/form/FormTemplate.d.ts +1 -1
  86. package/geometry/libtess.js +1 -1
  87. package/geometry/projection/projectors.js +1 -1
  88. package/identity/Credential.d.ts +1 -1
  89. package/identity/IdentityManager.d.ts +1 -1
  90. package/identity/OAuthInfo.d.ts +1 -1
  91. package/identity/ServerInfo.d.ts +1 -1
  92. package/kernel.js +1 -1
  93. package/layers/CSVLayer.js +1 -1
  94. package/layers/GaussianSplatLayer.js +1 -1
  95. package/layers/IntegratedMesh3DTilesLayer.js +1 -1
  96. package/layers/Lyr3DWasmPerSceneView.js +1 -1
  97. package/layers/VectorTileLayer.d.ts +2 -2
  98. package/layers/VideoLayer.js +1 -1
  99. package/layers/graphics/controllers/I3SOnDemandController.js +1 -1
  100. package/layers/graphics/sources/CSVSource.js +1 -1
  101. package/layers/graphics/sources/GeoJSONSource.js +1 -1
  102. package/layers/graphics/sources/MemorySource.js +2 -2
  103. package/layers/graphics/sources/support/ParquetSourceWorker.js +1 -1
  104. package/layers/graphics/sources/support/QueryTask.js +1 -1
  105. package/layers/graphics/sources/support/timeQueryUtils.js +2 -0
  106. package/layers/mixins/APIKeyMixin.d.ts +1 -1
  107. package/layers/ogc/types.d.ts +1 -1
  108. package/layers/support/TelemetryData.d.ts +28 -4
  109. package/layers/support/TimeInformation.js +1 -1
  110. package/layers/support/tiles3DUtils.js +1 -1
  111. package/layers/support/timeInfoUtils.js +2 -0
  112. package/layers/video/videoUtils.js +1 -1
  113. package/package.json +2 -2
  114. package/rest/query/executeAttributeBinsQuery.js +1 -1
  115. package/rest/query/executeForExtent.js +1 -1
  116. package/rest/query/executeForTopCount.js +1 -1
  117. package/rest/query/executeForTopExtents.js +1 -1
  118. package/rest/query/executeForTopIds.js +1 -1
  119. package/rest/query/executeTopFeaturesQuery.js +1 -1
  120. package/rest/query/operations/query.js +1 -1
  121. package/rest/query/operations/queryAttributeBins.js +1 -1
  122. package/rest/query/operations/queryTopFeatures.js +1 -1
  123. package/rest/support/timeUtils.js +1 -1
  124. package/support/timeUtils.js +1 -1
  125. package/views/2d/engine/webgl/FeatureDisplayList.js +1 -1
  126. package/views/2d/engine/webgl/GlyphMosaic.js +1 -1
  127. package/views/2d/engine/webgl/GlyphWorker.js +1 -1
  128. package/views/2d/engine/webgl/TextureManager.js +1 -1
  129. package/views/2d/engine/webgl/materialKeyUtils.js +2 -0
  130. package/views/2d/engine/webgl/mesh/MeshData.js +1 -1
  131. package/views/2d/engine/webgl/mesh/templates/shapingUtils.js +1 -1
  132. package/views/2d/engine/webgl/shaderGraph/techniques/animated/AnimatedMarkerMeshWriter.js +1 -1
  133. package/views/2d/engine/webgl/shaderGraph/techniques/animated/AnimatedPolyMeshWriters.js +1 -1
  134. package/views/2d/engine/webgl/shaderGraph/techniques/fill/ComplexOutlineFillMeshWriter.js +1 -1
  135. package/views/2d/engine/webgl/shaderGraph/techniques/fill/GradientFillMeshWriter.js +1 -1
  136. package/views/2d/engine/webgl/shaderGraph/techniques/fill/PatternFillMeshWriter.js +1 -1
  137. package/views/2d/engine/webgl/shaderGraph/techniques/fill/PatternOutlineFillMeshWriter.js +1 -1
  138. package/views/2d/engine/webgl/shaderGraph/techniques/labels/LabelMeshWriter.js +1 -1
  139. package/views/2d/engine/webgl/shaderGraph/techniques/line/GradientStrokeMeshWriter.js +1 -1
  140. package/views/2d/engine/webgl/shaderGraph/techniques/line/TexturedLineMeshWriter.js +1 -1
  141. package/views/2d/engine/webgl/shaderGraph/techniques/markers/MarkerMeshWriter.js +1 -1
  142. package/views/2d/engine/webgl/shaderGraph/techniques/text/TextMeshWriter.js +1 -1
  143. package/views/2d/layers/VideoLayerView2D.js +1 -1
  144. package/views/3d/analysis/LineOfSight/LineOfSightController.js +1 -1
  145. package/views/3d/analysis/LineOfSight/placementUtils.js +1 -1
  146. package/views/3d/analysis/ShadowCast/ShadowCastError.d.ts +40 -0
  147. package/views/3d/analysis/ShadowCast/ShadowCastError.js +2 -0
  148. package/views/3d/analysis/ShadowCast/sunlightUtils.js +2 -0
  149. package/views/3d/analysis/ShadowCastAnalysisView3D.d.ts +16 -1
  150. package/views/3d/analysis/ShadowCastAnalysisView3D.js +1 -1
  151. package/views/3d/analysis/Viewshed/placementUtils.js +1 -1
  152. package/views/3d/camera/constraintUtils/surfaceCollision.js +1 -1
  153. package/views/3d/camera/intersectionUtils.js +1 -1
  154. package/views/3d/interactive/Manipulator3D.js +1 -1
  155. package/views/3d/interactive/editingTools/draw/DrawGraphicTool3D.js +1 -1
  156. package/views/3d/interactive/editingTools/originGeometryVisualElementUtils.js +1 -1
  157. package/views/3d/layers/GaussianSplatLayerView3D.js +1 -1
  158. package/views/3d/layers/I3SMeshView3D.js +1 -1
  159. package/views/3d/layers/IntegratedMesh3DTilesLayerView3D.js +1 -1
  160. package/views/3d/layers/Lyr3DWorker.js +1 -1
  161. package/views/3d/layers/i3s/I3SIndex.js +1 -1
  162. package/views/3d/layers/i3s/I3SViewportQueries.js +1 -1
  163. package/views/3d/layers/i3s/LayerElevationProvider.js +1 -1
  164. package/views/3d/layers/support/FeatureMemory.js +1 -1
  165. package/views/3d/layers/support/FeatureTile.js +1 -1
  166. package/views/3d/layers/support/Tiles3DBVH.js +1 -1
  167. package/views/3d/layers/support/Tiles3DMeshIntersectionHandler.js +1 -1
  168. package/views/3d/navigation/modes/GroundNavigationMode3D.js +1 -1
  169. package/views/3d/state/Constraints.js +1 -1
  170. package/views/3d/state/NearFarHeuristic.js +1 -1
  171. package/views/3d/state/utils/groundNavigationUtils.js +1 -1
  172. package/views/3d/support/gaussianSplatting/GaussianSplatFadeHelper.js +1 -1
  173. package/views/3d/support/gaussianSplatting/GaussianSplatIntersectionHandler.js +1 -1
  174. package/views/3d/support/gaussianSplatting/GaussianSplatTextureAtlas.js +1 -1
  175. package/views/3d/support/gaussianSplatting/GaussianTile.js +1 -1
  176. package/views/3d/support/orientedBoundingBox.js +1 -1
  177. package/views/3d/support/pointsOfInterest/SurfaceGeometryUpdates.js +1 -1
  178. package/views/3d/support/sphereExtentUtils.js +1 -1
  179. package/views/3d/terrain/TerrainSurface.js +1 -1
  180. package/views/3d/terrain/TileRenderer.js +1 -1
  181. package/views/3d/terrain/tileUtils.js +1 -1
  182. package/views/3d/webgl-engine/collections/Component/ComponentObject.js +1 -1
  183. package/views/3d/webgl-engine/lib/Renderer.js +1 -1
  184. package/views/3d/webgl-engine/lib/TextTextureAtlas.js +1 -1
  185. package/views/3d/webgl-engine/lib/lodRendering/LodRenderer.js +1 -1
  186. package/views/3d/webgl.d.ts +1 -1
  187. package/views/draw/DrawTool.js +1 -1
  188. package/views/support/Scheduler.js +1 -1
  189. package/widgets/Directions.d.ts +1 -1
  190. package/widgets/OrientedImageryViewer/navigation/NavigationManager.js +1 -1
  191. package/widgets/OrientedImageryViewer/navigation/queries.js +1 -1
  192. package/widgets/OrientedImageryViewer/navigation/utils.js +1 -1
  193. package/widgets/OrientedImageryViewer.js +2 -2
  194. package/assets/esri/core/workers/chunks/0f6c0d42100c21367e5c.js +0 -1
  195. package/assets/esri/core/workers/chunks/176d0a06ebff5a29dedf.js +0 -1
  196. package/assets/esri/core/workers/chunks/18776a130d96879a68b1.js +0 -1
  197. package/assets/esri/core/workers/chunks/20a698709c3c11ff2c16.js +0 -1
  198. package/assets/esri/core/workers/chunks/24ada9511b074dc5ae27.js +0 -1
  199. package/assets/esri/core/workers/chunks/277263466837e1673f56.js +0 -1
  200. package/assets/esri/core/workers/chunks/2c8ca43563c4f3e94535.js +0 -1
  201. package/assets/esri/core/workers/chunks/379ef56f6b32494832a6.js +0 -1
  202. package/assets/esri/core/workers/chunks/38d852676677e5697864.js +0 -1
  203. package/assets/esri/core/workers/chunks/38df7b1d58c4bcf693d0.js +0 -1
  204. package/assets/esri/core/workers/chunks/507ecc3692e6d0700958.js +0 -1
  205. package/assets/esri/core/workers/chunks/5a9b7eb26f936f03d02e.js +0 -1
  206. package/assets/esri/core/workers/chunks/5f07f52bb8b7721f08d3.js +0 -1
  207. package/assets/esri/core/workers/chunks/661847f1b7044f21600f.js +0 -1
  208. package/assets/esri/core/workers/chunks/6b5c073dddd89d06ed80.js +0 -1
  209. package/assets/esri/core/workers/chunks/6ddc29a144640acb1192.js +0 -1
  210. package/assets/esri/core/workers/chunks/6ebe73f69ae822053b70.js +0 -1
  211. package/assets/esri/core/workers/chunks/6f6d1873753a9c6994aa.js +0 -1
  212. package/assets/esri/core/workers/chunks/7582654a0fc70910731c.js +0 -1
  213. package/assets/esri/core/workers/chunks/7e211d8a8ad6c6a7cf3e.js +0 -1
  214. package/assets/esri/core/workers/chunks/849f446c718e892f39ce.js +0 -1
  215. package/assets/esri/core/workers/chunks/8517d96fc8ba7b21d845.js +0 -2
  216. package/assets/esri/core/workers/chunks/a107f16cd004626b5018.js +0 -1
  217. package/assets/esri/core/workers/chunks/a65951f1d5702cfd996e.js +0 -1
  218. package/assets/esri/core/workers/chunks/bf62be00f3040f91aaee.js +0 -1
  219. package/assets/esri/core/workers/chunks/c570b90995c65bbb2e14.js +0 -1
  220. package/assets/esri/core/workers/chunks/c576bef77e34920af188.js +0 -1
  221. package/assets/esri/core/workers/chunks/caad4f475d6eb01c2850.js +0 -1
  222. package/assets/esri/core/workers/chunks/cf1ec61eb2ad147bb931.js +0 -1
  223. package/assets/esri/core/workers/chunks/daae21cf77864f3293ef.js +0 -1
  224. package/assets/esri/core/workers/chunks/dc2f93453dfa40f623ab.js +0 -1
  225. package/assets/esri/core/workers/chunks/e81173724e8de8c1e65b.js +0 -1
  226. package/assets/esri/core/workers/chunks/e83f9abee611c5b80009.js +0 -1
  227. package/assets/esri/core/workers/chunks/ec8b7476eac4718eb0ac.js +0 -1
  228. package/assets/esri/core/workers/chunks/f45064066e1ab041a0b2.js +0 -1
  229. package/assets/esri/core/workers/chunks/ffe49d9e7df081bef4a5.js +0 -1
  230. package/views/2d/engine/webgl/hashMosaic.js +0 -2
  231. package/views/3d/webgl-engine/lib/GaussianSplatPrepassDepthRenderer.js +0 -2
  232. /package/assets/esri/core/workers/chunks/{8517d96fc8ba7b21d845.js.LICENSE.txt → 1ae0c9345626e70affd3.js.LICENSE.txt} +0 -0
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import{update as t}from"../../../../core/arrayUtils.js";import{createTask as n}from"../../../../core/asyncUtils.js";import has from"../../../../core/has.js";import{removeMaybe as r,abortMaybe as i,destroyMaybe as a,releaseMaybe as o,releaseReferencedMaybe as s}from"../../../../core/maybe.js";import{throwIfAborted as c}from"../../../../core/promiseUtils.js";import{watch as l,syncAndInitial as u,initial as d,sync as f}from"../../../../core/reactiveUtils.js";import{signal as p}from"../../../../core/signal.js";import{property as m,subclass as h}from"../../../../core/accessorSupport/decorators.js";import{equals as g,invert as _,multiply as v,copy as y}from"../../../../core/libs/gl-matrix-2/math/mat4.js";import{IDENTITY as b,create as x}from"../../../../core/libs/gl-matrix-2/factories/mat4f64.js";import{set as ee}from"../../../../core/libs/gl-matrix-2/math/vec4.js";import{fromValues as te,ZEROS as S}from"../../../../core/libs/gl-matrix-2/factories/vec4f64.js";import{pruneIndexArrays as ne}from"../../../../geometry/support/Indices.js";import{InternalRenderCategory as C,RenderNodeOutput as w,AllRenderNodeOutputs as T,AllInternalRenderNodeOutputs as E}from"../../webgl.js";import{minNearDistanceInMeters as re}from"../../state/NearFarHeuristic.js";import{debugFlags as ie}from"../../support/debugFlags.js";import{FBOCache as ae}from"../core/FBOCache.js";import{RenderPassManager as oe}from"../core/renderPasses/RenderPassManager.js";import{isColor as se}from"../core/shaderLibrary/ShaderOutput.js";import{RenderNodes as ce}from"../effects/RenderNodes.js";import{RenderPluginContext as le}from"../effects/RenderPluginContext.js";import{RenderPluginManager as D}from"../effects/RenderPluginManager.js";import{WeatherFader as O}from"../effects/WeatherFader.js";import{innerAtmosphereFadeStart as ue}from"../effects/atmosphere/atmosphereUtils.js";import{Blit as de}from"../effects/blit/Blit.js";import{maxHighlightsPerChannel as fe,renderHighlightBuffer as pe}from"../effects/highlight/Highlight.js";import{OITBlend as me}from"../effects/transparency/OITBlend.js";import{AnimationTimer as he}from"./AnimationTimer.js";import{AnimationTimeStep as ge}from"./AnimationTimeStep.js";import{BoundingInfo as _e}from"./BoundingInfo.js";import{Compositor as ve}from"./Compositor.js";import{DepthRange as k}from"./DepthRange.js";import{depthRangeFromScene as A}from"./depthRangeUtils.js";import{MainFramebuffer as ye}from"./MainFramebuffer.js";import{NavigationDepthCache as be}from"./NavigationDepthCache.js";import{blendingColorAlphaClear as j}from"./OrderIndependentTransparency.js";import{RenderContext as M,defaultRenderOccludedMask as N}from"./RenderContext.js";import{RendererBase as xe}from"./RendererBase.js";import{setupFeatureDefaults as P}from"./RenderFeature.js";import{RenderPluginInput as F}from"./RenderPluginInput.js";import{ShadowMap as Se}from"./ShadowMap.js";import Ce from"./SliceHelper.js";import{MergedRenderer as we}from"../materials/renderers/MergedRenderer.js";import{RenderSceneResult as I}from"../parts/renderUtils.js";import{RendererPerformanceInfo as Te,PerformanceCategory as L}from"../statistics/RendererPerformanceInfo.js";import{PixelType as Ee,ColorAttachment0 as R,ColorAttachment1 as z,ColorAttachment2 as B,DrawBufferNone as De}from"../../../webgl/enums.js";const Oe=has(`disable-feature:async-navigation-3d-depth-readback`);let V=class extends xe{constructor(e,t,n,r,i){super({stage:e}),this._techniques=n,this._rctx=r,this._requestRender=i,this._pluginsHas={occludedHudElements:!1,hudElements:!1,water:!1},this.renderPassManager=new oe,this._isRendering=!1,this._backgroundColor=te(0,0,0,1),this._sliceHelper=new Ce,this._shadowAccumulator=null,this._shadowCastOptions=null,this.sceneDepthRange=p(k.Infinite),this._state=p(2),this._hasAnimations=!1,this._animationTimestep=new ge,this._loadEdgeViewTask=null,this._edgeViewCallbacks=[],this._reprojectionMatrixVersion=p(0),this._renderHiddenTransparentEdges=()=>{},this._pluginInput=new F,this._hasTransparentGeometry=!1,this._releaseNodeInputs=e=>{for(let t of Me)e.some(({name:e})=>e===t)&&this._pluginInput.release(t)},this._testsNeedsDepth=!1,this._fboCache=new ae(r),this._compositor=new ve(r,n),this._renderStateFeatures=p(P(e.view.qualityProfile));let a=new Se(this._fboCache,e.viewingMode);this._renderContext=new M(this._rctx,a,n),this._framebuffer=new ye(this._fboCache,this._bindParameters),this._performanceInfo=new Te(this._rctx),this._blit=new de(n),this.navigationDepthCache=new be(this._rctx,this._fboCache,n,()=>this._requestRender(0)),this._nodes=new ce(this._renderContext),this._plugins=new D(new le(this._renderContext,n,t,e,i)),this._plugins.add(this.renderPassManager),this.weatherFader=new O({view:e.view,context:this._renderContext}),this.addHandles([l(()=>e.view.state.camera,()=>i(),u),l(()=>ie.EDGES_SHOW_HIDDEN_TRANSPARENT_EDGES,e=>{this._renderHiddenTransparentEdges=e?()=>this._renderEdges(0):()=>{},i()},d),l(()=>e.view.environment.background?.color,e=>{let t=e?e.toUnitRGBA():S;ee(this._backgroundColor,t[0]*t[3],t[1]*t[3],t[2]*t[3],t[3]),i()},u),l(()=>e.view.environmentView.shadowsAvailable,e=>{this._bindParameters.shadowMap.enabled=e,this._requestRender(1)},u),l(()=>this._bindParameters.clouds.fadeFactor,()=>{this._bindParameters.fadeLighting(),this._requestRender(2)},f),l(()=>this._bindParameters.clouds.data?.state,()=>i(),f),l(()=>e.view.state.highlights,e=>{this._bindParameters.highlights=e,i()},d),l(()=>e.view.environment.lighting?.type===`sun`,e=>{this._bindParameters.enableFillLights=e,this._requestRender()},u)])}destroy(){this._gpuTimerHandle=r(this._gpuTimerHandle),this._nodes.destroy(),this._framebuffer.dispose(),this._shadowAccumulator=null,this._shadowCastOptions=null,this._loadEdgeViewTask=i(this._loadEdgeViewTask),this._edgeView=a(this._edgeView),this.renderPassManager.dispose(),this.weatherFader=a(this.weatherFader),this._releaseFBOs(),this._disposeOffscreenBuffers(),this.navigationDepthCache.destroy(),this._fboCache.destroy(),this._fboCache=null,this._renderContext.destroy(),this._plugins.destroy(),this._pluginInput=null,this._oitBlendOrNil=null,this._nodes=null,this._framebuffer=null,this._performanceInfo=null,_e.prune(),we.prune(),ne()}get renderContext(){return this._renderContext}get _bindParameters(){return this._renderContext.bind}get _oitBlend(){return this._oitBlendOrNil??=new me(this._techniques),this._oitBlendOrNil}get performanceInfo(){return this._performanceInfo}updateRenderFeatures(e){this._renderStateFeatures.value=P(e),this.updateGlobalIllumination(this.stage.view.environment.lighting.globalIllumination),this._requestRender()}updateGlobalIllumination(e){let t=P(this.stage.view.qualityProfile);for(let n of[0,1,2])this.setFeatureEnabled(11,n,e),this.setFeatureEnabled(10,n,e&&n===2),this.setFeatureEnabled(3,n,!e&&(t.get(n,3)??!1))}isFeatureEnabled(e,t=this._state.value){return this._renderStateFeatures.value.get(t,e)??!1}setFeatureEnabled(e,t,n){this.isFeatureEnabled(e,t)!==n&&(this._renderStateFeatures.mutate(r=>r.set(t,e,n)),this._requestRender())}setTime(e){this._renderContext.time=e}get hasReflections(){return this._bindParameters.screenSpaceReflections.enabled=this._pluginsHas.water&&this.isFeatureEnabled(4),this._bindParameters.screenSpaceReflections.enabled}get _hasHighlights(){return this._plugins.produces(10,2,4,18,12,13,14)}hasHighlight(e){return this._plugins.hasHighlight(e)}get _hasHUDHighlights(){return this._plugins.produces(10,12,13,14)}get hasAmbientIllumination(){return this._nodes.produces(C.AMBIENT_ILLUMINATION)}get hasGlobalIllumination(){return this.stage.renderView?.globalIllumination?.enabled??!1}get hasGlobalIlluminationHighQuality(){let e=this.stage.renderView?.globalIllumination;return this.hasGlobalIllumination&&e?.hasHighQuality===!0}get hasSMAA(){return this.isFeatureEnabled(0)}get _emissions(){let e=this._plugins.emissions;return this._hasTransparentGeometry?e:+(e===1||e===3)}get hasFloatBlend(){return this._rctx.driverTest.floatBufferBlend.result&&this.isFeatureEnabled(9)}get highResolutionAtmosphere(){return this.isFeatureEnabled(2)}get fboCache(){return this._fboCache}setShadowAccumulator(e){this._shadowAccumulator=e,this._shadowCastOptions&&e.setParameters(this._shadowCastOptions)}_releaseFBOs(){this._bindParameters.hudOcclusion=o(this._bindParameters.hudOcclusion),this._bindParameters.depth=null}_disposeOffscreenBuffers(){this._framebuffer.dispose();let e=this._bindParameters;e.globalIllumination=o(e.globalIllumination),e.reprojection.lastFrameDepth=o(e.reprojection.lastFrameDepth),e.reprojection.lastFrameEmission=o(e.reprojection.lastFrameEmission),this._disposeBindBuffers()}_disposeBindBuffers(){this._bindParameters.shadowMap.disposeOutputs()}get updating(){return this._loadEdgeViewTask&&!this._loadEdgeViewTask.finished||this._edgeView?.updating||this._plugins.updating||this.weatherFader?.readyToRun||!this.isCameraFinal}loadEdgeView(){return this._loadEdgeViewTask||=n(async e=>{let{EdgeView:t}=await import(`./edgeRendering/EdgeView.js`);c(e);let n=this._edgeView=new t({rctx:this._rctx,renderSR:this.stage.view.renderSpatialReference,viewingMode:this.stage.view.stage.viewingMode,techniques:this._techniques,setNeedsRender:()=>this._requestRender(),schedule:Ne(this.stage.view.resourceController)});return this.addHandles(l(()=>n.updating,()=>this._requestRender(),f)),this._requestRender(),this._edgeViewCallbacks.forEach(e=>e(n)),this._edgeViewCallbacks.length=0,n}),this._loadEdgeViewTask.promise}withEdgeView(e){this.loadEdgeView().catch(()=>{}),this._edgeView==null?this._edgeViewCallbacks.push(e):e(this._edgeView)}get edgeView(){return this._edgeView}get isCameraFinal(){return this._reprojectionMatrixVersion.value>=0&&g(this._bindParameters.reprojection.matrix,b)}set _reprojectionMatrix(e){t(this._bindParameters.reprojection.matrix,e)&&this._reprojectionMatrixVersion.value++}get shadowsEnabled(){return!!this._bindParameters.shadowMap.enabled}setParameters(e){e.shadowCast&&(this._shadowCastOptions={...this._shadowCastOptions,...e.shadowCast},this._shadowAccumulator?.setParameters(e.shadowCast))}set slice(e){this._sliceHelper.update(e)&&this._requestRender()}get plugins(){return this._plugins}commit(e,t){return this._isRendering&&console.warn(`Renderer.modify called while rendering`),super.commit(e,t,this._plugins.context)?(this.updateHasFlags(),!0):!1}addRenderer(e){this._plugins.add(e)}removeRenderer(e){this._plugins.remove(e)}get occludedRequiresStencil(){return this._occludedRequiresOccludeeStencil||this.occludedRequiresIntegratedMeshStencil}get _occludedRequiresOccludeeStencil(){return this._bindParameters.hasOccludees&&!!(this.plugins.renderOccludedFlags&8)}get occludedRequiresIntegratedMeshStencil(){return this._plugins.produces(0,0)&&this._plugins.produces(0,9)}updateHasFlags(){let has=this._pluginsHas;has.occludedHudElements=this._plugins.produces(0,13),has.hudElements=has.occludedHudElements||this._plugins.produces(0,...J),has.water=this._plugins.produces(4,19),this._bindParameters.hasOccludees=this._plugins.hasOccludees,this._requestRender()}updateAnimation(e,t){this._animationTimer??=new he(e.camera,t),this._animationTimer.advance(e.camera,t,this._animationTimeDilation);let n=this._hasAnimations;return this._hasAnimations=this._plugins.updateAnimation(this._animationTimer),this._hasAnimations=this._nodes.updateAnimation(this._animationTimer)||this._hasAnimations,this._hasAnimations!==n&&(this._gpuTimerHandle=n?r(this._gpuTimerHandle):this.performanceInfo.enableGPUPerformanceInfo()),this._hasAnimations}get animationTimestep(){return this._animationTimestep.value}get _animationTimeDilation(){return this._animationTimestep.timeDilation}resetAnimation(){this._animationTimestep.clear()}tick(){this.fboCache.clean()}render(e,t,n=!1){try{this._isRendering=!0,this._needsOffscreenPrepass(e.camera,t)&&this._render(e,3,n).color?.release();let r=this._render(e,t,n);return t!==0&&this._disposeOffscreenBuffers(),r}catch(e){console.error(`Exception during rendering: ${e}:\n${e.stack}`)}finally{this._isRendering=!1}return new I(this._pluginInput.get(w.FINAL),null)}_needsOffscreenPrepass(e,t){return(t===1||t===2)&&(this.hasGlobalIllumination||this.hasReflections)&&(!this._framebuffer.hasColor||!this._bindParameters.reprojection.lastFrameCamera.equals(e))}_render(e,t,n){let r=t===0;this.performanceInfo.startFrame(),this.fboCache.frameStart(),this.fboCache.interactive=r,this._disposeBindBuffers();let{camera:i,contentCamera:a,mode:c,alignPixelEnabled:l}=e;this._state.value=c,this._bindParameters.frameRendererTarget=t,this._bindParameters.output=0,this._bindParameters.emissions=this._emissions,this._bindParameters.alignPixelEnabled=l,this._bindParameters.metersPerRenderUnit=this.stage.view.renderCoordsHelper.unitInMeters,this._bindParameters.decorations=!n,this._bindParameters.mainDepth=null,this._bindParameters.useFloatBlend.value=this.hasFloatBlend;let u=!n||!this._sliceHelper.isDecoration;this._bindParameters.slicePlane=u?this._sliceHelper.plane:null,this._bindParameters.viewshedEnabled=this._nodes.produces(C.VIEWSHED),this._bindParameters.laserlinesEnabled=this._nodes.produces(C.LASERLINES),this._bindParameters.shadowAnalysisEnabled=!!this._shadowAccumulator?.active,this._bindParameters.cutFillComputationEnabled=this._nodes.produces(C.CUTFILL_COMPUTATION),this._bindParameters.cutFillVisualizationEnabled=this._nodes.produces(C.CUTFILL),this._ensureBindParameters(i,a),this._plugins.sortTestsTransparentOrderedSlots(Ae),this._plugins.prepareRender(),this._hasTransparentGeometry=this._plugins.produces(1,...U),this._renderOverlay(),i.setGLViewport(this._rctx);let d=this._framebuffer,f=d.initialize(i.fullWidth,i.fullHeight,this._backgroundColor);this.hasReflections?(f?.setName(`last frame color`),this._bindParameters.reprojection.lastFrameColor?.release(),this._bindParameters.reprojection.lastFrameColor=f):f?.release(),this._bindParameters.hasShadowHighlights=this._needsShadowHighlight&&!n,this._precompilePrepasses(),this.performanceInfo.advance(L.PREPARE);let p=this._computeShadowDepthRange(i);this._pluginInput.set(`normals`,this._renderNormals()),this._renderAmbientIlluminationAndDepth(),this._renderShadowMap(i,a,this._bindParameters.lighting.mainLight.direction,p),this._renderShadowAccumulation(p),d.bind(),this._bindParameters.mainDepth=d.depth.attachment,this._precompileShaders(r),this._bindParameters.output=0,this._renderOpaque(),this._renderPreTransparent(),this._renderTransparent(),this._3dGeometryRendered(),d.update(e=>this._renderNodes(C.CUTFILL_COMPUTATION,e)),this._pluginInput.set(C.FOCUSAREA_MASK,this._renderFocusAreaMask()),d.update(e=>this._renderNodes(C.TRANSPARENT_ENVIRONMENT,e)),d.update(e=>this._renderNodes(C.VIEWSHED,e)),d.update(e=>this._renderNodes(C.LASERLINES,e)),this._nodes.requireGeometryDepth&&(this._bindParameters.depth=s(this._bindParameters.depth)),d.update(e=>this._renderNodes(C.FOCUSAREA,e)),this._pluginInput.release(C.FOCUSAREA_MASK),d.update(e=>this._renderNodes(C.CUTFILL,e)),this._pluginInput.release(C.GROUND_DEPTH),d.update(e=>this._renderNodes(C.OCCLUDED,e)),this._pluginInput.set(`highlights`,this._renderHighlightPrepass());let m=t===2?this._renderObjectAndLayerIdColor():null;d.update(e=>this._renderNodes(w.COMPOSITE,e)),this._bindParameters.shadowMap.disposeOutputs(),this._bindParameters.shadowHighlight=o(this._bindParameters.shadowHighlight),d.update(e=>this._renderNodes(C.ANTIALIASING,e));let h=this._hasTransparentGeometry?2:1,g=this._bindParameters.emissions;this._bindParameters.emissions=0,this._hasHUDHighlights&&d.update(e=>this._renderHUD(h,e)),d.update(e=>this._renderNodes(C.HIGHLIGHT,e)),this._hasHUDHighlights||d.update(e=>this._renderHUD(h,e)),this._bindParameters.emissions=g,d.update(e=>this._renderNodes(C.MAGNIFIER,e)),d.update(e=>this._renderNodes(w.FINAL,e)),r&&(this._blit.toFramebuffer(d.color,this._bindParameters),Oe||c!==2&&c!==0||this.navigationDepthCache.update(this._bindParameters,d.depth.attachment,this._renderContext.time)),this._bindParameters.reprojection.lastFrameDepth?.release(),this.hasGlobalIllumination&&(this._bindParameters.reprojection.lastFrameDepth=this._bindParameters.depth),this._testsNeedsDepth&&(this._bindParameters.depth=s(this._bindParameters.depth)),this._releaseFBOs(),d.releaseDepth(),this._bindParameters.reprojection.lastFrameCamera.copyFrom(this._bindParameters.camera),this.fboCache.frameEnd();let _;return r||(_=d.color,_.retain()),this.performanceInfo.finishFrame(),new I(_,m)}_precompileShaders(e){++this._plugins.context.techniques.precompiling;let t=this._bindParameters;t.output=0;let n=t.emissions;if(this._precompileOpaqueGeometry(),this._nodes.precompile(C.OPAQUE_ENVIRONMENT,C.GAUSSIAN_SPLAT,C.OPAQUE_OCCLUSION_QUERY,C.VOXEL),this._precompileOpaqueGeometry(),t.output=3,this._plugins.precompile(...W),t.output=0,this._plugins.precompile(...W),this._hasTransparentGeometry){let e=this._pluginsHas.occludedHudElements;this._oitBlend.precompile(t,e,0),this._pluginsHas.hudElements&&this._oitBlend.precompile(t,!1,1),this._precompileTransparentGeometry(),t.hasTransparentEmission&&(t.emissions=3)}this._nodes.precompile(C.FOCUSAREA_MASK),this._compositor.precompile(this._usesPremultipliedAlphaBlit,!!this._needsEdges,t),this._hasTransparentGeometry||this._plugins.precompile(15),this._nodes.precompile(C.TRANSPARENT_ENVIRONMENT,C.VIEWSHED,C.CUTFILL_COMPUTATION,C.CUTFILL,C.LASERLINES,C.FOCUSAREA,C.OCCLUDED,C.ANTIALIASING),t.highlightMixTexture=t.highlights.length>1?this._rctx.emptyTexture:null,this._precompileHUD(0),t.emissions=0,this._precompileHUD(0),this._precompileHUD(1),t.emissions=n,this._hasHighlights&&(t.highlights.forEach((e,n)=>{t.highlightLevel=n,this._precompileAllGeometry(10),this._hasHUDHighlights&&this._plugins.precompile(13,12)}),t.highlightLevel=null,this._nodes.precompile(C.HIGHLIGHT)),t.highlightMixTexture=null,this._nodes.precompile(w.COMPOSITE,C.MAGNIFIER),this._nodes.precompile(C.TRANSPARENT_NO_DEPTH),this._plugins.precompile(8),t.hasOpaqueEmission&&(t.transparentWithoutDepthEmissionDimmingPass=!0,this._plugins.precompile(8),t.transparentWithoutDepthEmissionDimmingPass=!1),e&&this._blit.precompile(),--this._plugins.context.techniques.precompiling}_renderFocusAreaMask(){let e=this._nodes.produce(C.FOCUSAREA_MASK,this._pluginInput);return e&&this.performanceInfo.advance(L.FOCUS_AREA_MASK),e}_renderObjectAndLayerIdColor(){if(!this._nodes.produces(C.OBJECT_AND_LAYER_ID_COLOR))return null;let e=this._bindParameters.output;++this._techniques.precompiling;let{width:t,height:n}=this._framebuffer.size,r=this.fboCache.acquire(t,n,C.OBJECT_AND_LAYER_ID_COLOR).acquireDepth(14);return r=this._renderNodes(C.OBJECT_AND_LAYER_ID_COLOR,r),--this._techniques.precompiling,this._bindParameters.output=e,r}finish(e){this._hasAnimations||this._animationTimestep.clear();let t=this.performanceInfo.gpuSamplingEnabled,n=e===0,r=n?this.performanceInfo.elapsedTime:0;if(n||t){let e=0;t?e=this.performanceInfo.totalGPUTimeSampler.last:(this._rctx.gl.finish(),e=this.performanceInfo.elapsedTime);let i=Math.max(r,e);this._animationTimestep.frame(i,n)}}readAccumulatedShadow(e){return this._shadowAccumulator?.readAccumulatedShadow(e[0],e[1])??0}readMainDepth(e,t){let{mainDepth:n,camera:r}=this._bindParameters;if(!n)return;let i=this.fboCache.acquire(this._framebuffer.size.width,this._framebuffer.size.height,`linear depth`);this._rctx.bindFramebuffer(i.fbo),r.setGLViewport(this._rctx),this._rctx.setScissorRect(e[0],e[1],e[2],e[3]),this._rctx.setScissorTestEnabled(!0),this._rctx.clearFramebuffer(S),this._compositor.blitDepthToLinearDepth(this._bindParameters,n),this._rctx.setScissorTestEnabled(!1),this._rctx.setScissorRect(0,0,this._rctx.gl.canvas.width,this._rctx.gl.canvas.width),i.fbo?.readPixels(e[0],e[1],e[2],e[3],6408,Ee.UNSIGNED_BYTE,t),i.release()}get _needsEdges(){return this._edgeView?.shouldRender()?this._edgeView:null}_renderEdges(e){let t=this._needsEdges;if(!t)return;let{width:n,height:r}=this._framebuffer.size,i=this.fboCache.acquire(n,r,`edges`);i.attachDepth(this._framebuffer.depth),this._rctx.bindFramebuffer(i.fbo),this._rctx.clearFramebuffer(S),t.render(this._bindParameters,e),i.detachDepth(),this._framebuffer.bind(),this._compositor.composite(this._bindParameters,i.getTexture()),i.release(),this.performanceInfo.advance(e===1?L.OPAQUE_EDGES:L.TRANSPARENT_EDGES)}_renderOverlay(){this._bindParameters.overlay=this.overlay?.render(this._renderContext.time),this._bindParameters.overlay&&this.performanceInfo.advance(L.OVERLAY)}_renderShadowMap(e,t,n,r){if(!this.shadowsEnabled)return;let i=this._bindParameters.shadowMap;if(i.start(e,n,r,this.isFeatureEnabled(5),this.stage.view.qualitySettings.maximumPixelRatio),this._needsShadowHighlight){this._renderShadowCascades(6,i),e.setGLViewport(this._rctx),this._ensureBindParametersCamera(e,t);let n=this._bindParameters.output;this._bindParameters.output=0,this._bindParameters.shadowHighlight=this._nodes.produce(C.SHADOW_HIGHLIGHT,this._pluginInput),this._bindParameters.output=n,i.disposeOutput(6),i.clear(),this._renderShadowCascades(7,i)}else this._renderShadowCascades(5);e.setGLViewport(this._rctx),this._ensureBindParametersCamera(e,this._bindParameters.contentCamera),this._needsShadowHighlight&&(this._bindParameters.depth=s(this._bindParameters.depth)),this.performanceInfo.advance(C.SHADOWMAP)}_precompileShadowCascades(e){this._bindParameters.shadowMap.cascades.length!==0&&this._precompileAllGeometry(e)}_renderShadowCascades(e,t=this._bindParameters.shadowMap){let n=this._bindParameters.output,r=e!==6;t.bindFramebuffer();for(let n of t.cascades)n.camera.setGLViewport(this._rctx),this._ensureBindParametersCamera(n.camera,n.camera),this.renderAllGeometry(e),r&&this._renderShadowNodes(t.renderTarget);t.finish(e),this._bindParameters.output=n}_renderShadowNodes(e){this._renderInternalNodeCategory(C.SHADOWMAP,e)}get _needsDepth(){return+this._nodes.requireGeometryDepth+ +this.hasReflections+ +this.hasGlobalIllumination+ +this._testsNeedsDepth+ +this._needsShadowHighlight}get _usesPremultipliedAlphaBlit(){return this._pluginsHas.hudElements}_renderAmbientIlluminationAndDepth(){let e=this._bindParameters;e.depth=o(this._bindParameters.depth);let t=this._pluginInput.get(`normals`);if(t){let n=this._nodes.produce(C.AMBIENT_ILLUMINATION,this._pluginInput);this._pluginInput.set(C.AMBIENT_ILLUMINATION,n),this._releaseGlobalIlluminationBuffers(),e.ssao=this.hasGlobalIllumination?null:n,e.globalIllumination=this.hasGlobalIllumination?n:null,e.globalIlluminationEnabled=e.globalIllumination!=null,n&&this.performanceInfo.advance(this.hasGlobalIlluminationHighQuality?L.AMBIENT_ILLUMINATION_HIGH_QUALITY:L.AMBIENT_ILLUMINATION);let r=this._needsDepth;if(r){let n=t.obtainAttachment(R);this._rctx.bindFramebuffer(t.fbo),this._rctx.clear(1024),this._renderGeometryWithoutNormals(3),e.depth=t.obtainDepthTexture(),e.depth?.retain(r-1),t.attachColor(n,R),n?.release(),this.performanceInfo.advance(L.DEPTH)}else t.detachDepth();this.hasAmbientIllumination&&this._pluginInput.release(`normals`)}else this._releaseGlobalIlluminationBuffers(),e.ssao=null,this._pluginInput.set(C.AMBIENT_ILLUMINATION,null),this._renderAllGeometryDepth()}_renderAllGeometryDepth(){let e=this._needsDepth;if(e===0)return;let{width:t,height:n}=this._framebuffer.size,r=this.fboCache.acquire(t,n,`geometry depth`,14);this._rctx.bindFramebuffer(r.fbo),this._rctx.clear(1280),this.renderAllGeometry(3),this._renderGaussianSplatPrepassDepth(r),this._bindParameters.depth=r.obtainDepthTexture(),this._bindParameters.depth?.retain(e-1),r.release(),this.performanceInfo.advance(L.DEPTH)}_renderGaussianSplatPrepassDepth(e){let t=this._shadowAccumulator;if(!t?.active||!t.requireGeometryDepth)return;let n=this._bindParameters.output;this._bindParameters.output=3,this._renderInternalNodeCategory(C.GAUSSIAN_SPLAT_DEPTH,e),this._bindParameters.output=n}_renderGaussianSplatDepthAndNormals(e){let t=this._bindParameters.output;this._bindParameters.output=4,this._renderInternalNodeCategory(C.GAUSSIAN_SPLAT_DEPTH,e),this._bindParameters.output=t}get _needsShadowDepthRange(){return this._bindParameters.shadowMap.enabled||!!this._shadowAccumulator?.active}_computeShadowDepthRange(e){if(!this._needsShadowDepthRange)return k.Zero;let t=A(e,this._plugins.plugins,this.stage.layers,0);return t.union(this._plugins.queryDepthRange(e)),t.union(this._nodes.queryDepthRange(C.SHADOWMAP,e)),t.near=Math.max(e.near,t.near),t.far=Math.min(e.far,t.far),t}updateSceneDepthRange(e){if(!this.stage.view.state.isGlobal||this.stage.view.renderCoordsHelper.getAltitude(e.eye)<ue){this.sceneDepthRange.value=k.Infinite;return}let t=e.clone();t.near=re,t.far=1e10;let n=A(t,this._plugins.plugins,this.stage.layers,1);n.union(this._plugins.queryDepthRange(t)),this.sceneDepthRange.value.equals(n)||(this.sceneDepthRange.value=n)}get _normalsRequired(){return this._nodes.require(`normals`,...T,C.VIEWSHED,C.LASERLINES)+ +!!this.hasAmbientIllumination}_precompilePrepasses(){let e=!!this._normalsRequired;if(e?(this._precompilePlugins(4,G),this._needsDepth&&this._precompilePlugins(3,K)):this._needsDepth&&this._precompileAllGeometry(3),this.shadowsEnabled&&(this._needsShadowHighlight?(this._nodes.precompile(C.SHADOW_HIGHLIGHT),this._precompileShadowCascades(6),this._precompileShadowCascades(7)):this._precompileShadowCascades(5)),this._shadowAccumulator?.active&&(this._nodes.precompile(C.SHADOW_ACCUMULATION),this._precompileAllGeometry(5)),this._shadowAccumulator?.active||e){let t=this._bindParameters.output;this._bindParameters.output=e?4:3,this._nodes.precompile(C.GAUSSIAN_SPLAT_DEPTH),this._bindParameters.output=t}(this.shadowsEnabled||this._shadowAccumulator?.active)&&this._nodes.precompile(C.SHADOWMAP),this.hasAmbientIllumination&&e&&this._nodes.precompile(C.AMBIENT_ILLUMINATION)}_renderNormals(){let e=this._normalsRequired;if(e===0)return;let{width:t,height:n}=this._framebuffer.size,r=this.fboCache.acquire(t,n,`normals`);r.acquireDepth(14),this._rctx.bindFramebuffer(r.fbo),this._rctx.clearFramebuffer(S,!0,!0),this._bindParameters.output=4,this._plugins.render(...G),this._renderGaussianSplatDepthAndNormals(r);let i=this._nodes.optional(`normals`,...T,C.VIEWSHED);return r.retain(e+i-1),this.performanceInfo.advance(L.NORMALS),r}_releaseGlobalIlluminationBuffers(){let e=this._bindParameters;e.reprojection.lastFrameDepth=o(e.reprojection.lastFrameDepth),e.reprojection.lastFrameEmission=o(e.reprojection.lastFrameEmission),e.globalIllumination=s(e.globalIllumination),e.globalIlluminationEnabled=!1}_precompileAllGeometry(e){let t=this._bindParameters.output;this._bindParameters.output=e,this._precompileOpaqueGeometry(),this._precompileTransparentGeometry(),this._plugins.precompile(...W),this._bindParameters.output=t}renderAllGeometry(e){this._bindParameters.output=e,this._renderOpaqueAndTransparentGeometry(e),this._renderTransparentGround()}precompileSlots(e,...t){for(let n of t)this._bindParameters.slot=n,e.precompile(this._renderContext)}precompileOccludedSlots(e,t){for(let n of t)this._renderContext.renderOccludedMask=n,this.precompileSlots(e,...q);this._renderContext.renderOccludedMask=N}renderSlots(e,...t){for(let n of t)this._bindParameters.slot=n,e.forAll(e=>{let t=e.acquireTechniques(this._renderContext);t&&e.render(this._renderContext,t)})}renderOccludedSlots(e,t){this._renderContext.renderOccludedMask=t,this.plugins.renderOccludedFlags>1&&this._plugins.render(9),this.renderSlots(e,...q),this._renderContext.renderOccludedMask=N}renderHUD(e){this._bindParameters.hudRenderStyle=e,this._plugins.render(...je[e])}_renderHUDElements(e){this._bindParameters.hudRenderStyle=e,this._plugins.render(16),this.renderHUD(e),this._bindParameters.hudRenderStyle=e,this._plugins.render(14)}precompileViewshedShadowMap(){let e=this._bindParameters.output;this._bindParameters.output=8,this._precompileAllGeometry(8),this._nodes.precompile(C.SHADOWMAP),this._bindParameters.output=e}precompileCutFillDepth(){this._precompilePlugins(9,Y)}_precompilePlugins(e,t){let n=this._bindParameters.output;this._bindParameters.output=e,this._plugins.precompile(...t),this._bindParameters.output=n}renderViewshedShadowMap(e,t){let{camera:n,contentCamera:r}=this._bindParameters,i=this._bindParameters.output;e.setGLViewport(this._rctx),this._ensureBindParametersCamera(e,e),this.renderAllGeometry(8),this._renderShadowNodes(t),this._ensureBindParametersCamera(n,r),this._bindParameters.camera.setGLViewport(this._rctx),this._bindParameters.output=i}renderCutFillDepth(e){let{camera:t,contentCamera:n}=this._bindParameters,r=this._bindParameters.output;e.setGLViewport(this._rctx),this._ensureBindParametersCamera(e,e),this._bindParameters.output=9,this._plugins.render(...Y),this._ensureBindParametersCamera(t,n),t.setGLViewport(this._rctx),this._bindParameters.output=r}get _needsGroundDepth(){return this._bindParameters.cutFillVisualizationEnabled}_blitGroundDepth(){if(!this._needsGroundDepth)return null;let{width:e,height:t}=this._framebuffer.size,n=this.fboCache.acquire(e,t,C.GROUND_DEPTH,14);return this._rctx.blitFramebuffer(this._framebuffer.color.fbo,n.fbo,256),this._framebuffer.bind(),n}_renderOpaqueAndTransparentGeometry(e){this._bindParameters.output=e,this._renderOpaqueGeometry(),this._renderTransparentGeometry()}_renderGeometryWithoutNormals(e){this._bindParameters.output=e,this._plugins.render(...K)}_precompileOpaqueGeometry(){this._needsOpaquePass&&(this._plugins.precompile(...H),this._nodes.precompile(`opaque-color`))}_renderOpaqueGeometry(){this._plugins.render(...H)}_renderTransparentGeometry(){this._plugins.render(...U),this._hasTransparentGeometry&&this._plugins.render(15)}_renderTransparentGround(){this._plugins.render(...W)}_precompileHUD(e){if(!this._pluginsHas.hudElements)return;let t=this._bindParameters.output,n=this._bindParameters.hudRenderStyle,r=this._bindParameters.emissions;this._bindParameters.emissions=0,this._bindParameters.hudRenderStyle=e,this._bindParameters.output=1,this._plugins.precompile(...J),this._bindParameters.output=2,this._plugins.precompile(...J),this._bindParameters.output=0,this._oitBlend.precompile(this._bindParameters,!1,1),this._hasHighlights&&(this._bindParameters.output=10,this._plugins.precompile(...J)),this._bindParameters.emissions=r,this._bindParameters.output=t,this._bindParameters.hudRenderStyle=n}_renderHUD(e,t){if(!this._pluginsHas.hudElements)return t;let n=this._renderOIT(1,e);this._rctx.bindFramebuffer(t.fbo);let r=!!t.getTexture(z);return this._compositor.compositePreMultipliedAlpha(this._bindParameters,n.getTexture(),r),n.release(),this.performanceInfo.advance(e===0?L.HUD_OCCLUDED:L.HUD),t}get _needsShadowHighlight(){return this.shadowsEnabled&&this._plugins.produces(6,2)}_renderHighlightPrepass(){if(!this._hasHighlights)return;let{fboCache:e,_rctx:t,_bindParameters:n}=this,{width:r,height:i}=this._framebuffer.size,{highlights:a}=n,o=a.length>fe?3:1,s=e.acquire(r,i,`highlights`,o);s.acquireDepth(14);let c=this._plugins.produces(10,0);return c&&this._framebuffer.color.fbo&&s.fbo&&t.blitFramebuffer(this._framebuffer.color.fbo,s.fbo,1024),t.bindFramebuffer(s.fbo),t.gl.clearBufferuiv(6144,0,[0,0,0,0]),c||t.clear(1024),this._bindParameters.output=10,t.bindFramebuffer(s.fbo),pe(t,e,r,i,n,()=>this._renderHighlightGeometries()),s.detachDepth(),this.performanceInfo.advance(L.HIGHLIGHTS),s.retain(this._nodes.require(`highlights`,...E)+this._nodes.optional(`highlights`,...E)-1),s}_renderHighlightGeometries(){this._plugins.render(...ke),this._rctx.clear(256),this._renderHUDElements(2)}_renderShadowAccumulation(e){let t=this._shadowAccumulator;if(!t)return;t.updateDepthRange(e);let n=t.requireGeometryDepth;this._bindParameters.output=0;let r=this._nodes.produce(C.SHADOW_ACCUMULATION,this._pluginInput);t.didAccumulate&&this.performanceInfo.advance(L.ACCUMULATED_SHADOWS),this._pluginInput.set(C.SHADOW_ACCUMULATION,null),r?.release(),n&&(this._bindParameters.depth=s(this._bindParameters.depth))}renderShadowAccumulationShadowMap(e,t,n,r,i){let a=this.stage.view.qualitySettings.maximumPixelRatio;n.start(e,r,i,!0,a),this._renderShadowCascades(5,n),e.setGLViewport(this._rctx),this._ensureBindParametersCamera(e,t)}_precompileTransparentGeometry(){se(this._bindParameters.output)?(this._bindParameters.output=1,this._plugins.precompile(...U),this._hasTransparentGeometry&&this._plugins.precompile(15),this._bindParameters.output=2,this._plugins.precompile(...U),this._hasTransparentGeometry&&this._plugins.precompile(15),this._bindParameters.output=0):this._plugins.precompile(...U)}_renderOIT(e,t=2){let n=e===1,{width:r,height:i}=this._framebuffer.size,a=n?()=>this._renderHUDElements(t):()=>this._renderTransparentGeometry(),s=this._bindParameters,c=s.useFloatBlend.value?8:5,l=s.output;s.output=1;let u=n?`oit hud`:`oit`,d=this.fboCache.acquire(r,i,u,c).acquireColor(z,this.hasFloatBlend?7:0,`oit alpha`),f=s.hasEmission&&(e===0||t!==1);f&&d.acquireColor(B,c,`oit emissive`),n||d.attachDepth(this._framebuffer.depth),this._rctx.bindFramebuffer(d.fbo),this._rctx.clearFramebuffer(j),f&&this._rctx.clearBuffer(2,j),a(),d.detachDepth(),s.output=2;let p=this.fboCache.acquire(r,i,n?`oit front hud`:`oit front`);f&&p.acquireColor(z,c,`oit front emissive`),n?p.acquireDepth(this._hudDepthFormat):p.attachDepth(this._framebuffer.depth),this._rctx.bindFramebuffer(p.fbo),this._rctx.clearFramebuffer(S,n),a(),p.detachDepth();let m=this._pluginsHas.occludedHudElements&&!n,h=m&&s.emissions!==0?B:z;s.hudOcclusion=o(this._bindParameters.hudOcclusion),s.output=0;let g;return n?(g=this.fboCache.acquire(r,i,`oit composite hud`),this._rctx.bindFramebuffer(g.fbo),this._rctx.setClearColor(0,0,0,1e-13),this._rctx.clear(16384)):(s.emissions!==0&&this._framebuffer.ensureEmissionAttachment(),m&&(this._framebuffer.color.acquireColor(h,0,`hud occlusion`),this._rctx.clearBuffer(h-R,S)),this._framebuffer.bind()),this._oitBlend.blend(this._rctx,d,p,s,m,e,this._fboCache.debugCallback),g?.detachDepth(),n||(f&&(this._bindParameters.emissions=3),m&&(s.hudOcclusion=this._framebuffer.color.obtainAttachment(h))),p.release(),d.release(),s.output=l,g}get _hudDepthFormat(){return this.isFeatureEnabled(7)?14:13}get _needsOpaquePass(){return this.plugins.produces(0,...H)||this.plugins.produces(5,...H)||this.plugins.produces(3,3)}_renderOpaque(){let e=this._needsOpaquePass;e&&(this._plugins.render(0,1),this._pluginInput.set(C.GROUND_DEPTH,this._blitGroundDepth()),this._plugins.render(2,3));let t=this._framebuffer;t.update(t=>this._renderNodes(w.OPAQUE,t,e)),this.fboCache.debugCallback?.(w.OPAQUE,t.color.fbo),t.update(e=>this._renderNodes(C.OPAQUE_ENVIRONMENT,e)),this.fboCache.debugCallback?.(C.OPAQUE_ENVIRONMENT,t.color.fbo),this._renderEdges(1)}_renderPreTransparent(){this._framebuffer.update(e=>this._renderNodes(C.GAUSSIAN_SPLAT,e)),this.fboCache.debugCallback?.(C.GAUSSIAN_SPLAT,this._framebuffer.color.fbo),this._framebuffer.update(e=>this._renderNodes(C.OPAQUE_OCCLUSION_QUERY,e)),this.fboCache.debugCallback?.(C.OPAQUE_OCCLUSION_QUERY,this._framebuffer.color.fbo),this._framebuffer.update(e=>this._renderNodes(C.VOXEL,e)),this.fboCache.debugCallback?.(C.VOXEL,this._framebuffer.color.fbo)}_renderTransparent(){let e=this._framebuffer;if(this._renderHiddenTransparentEdges(),this._hasTransparentGeometry&&this._renderOIT(0),e.update(e=>this._renderNodes(w.TRANSPARENT,e,this._hasTransparentGeometry)),this.fboCache.debugCallback?.(w.TRANSPARENT,e.color.fbo),this._hasTransparentGeometry||this._plugins.render(15),this._renderEdges(0),this._bindParameters.ssao=o(this._bindParameters.ssao),e.update(e=>this._renderNodes(C.TRANSPARENT_NO_DEPTH,e)),this.fboCache.debugCallback?.(C.TRANSPARENT_NO_DEPTH,e.color.fbo),this._framebuffer.bind(),this._plugins.render(8),this._bindParameters.hasEmission){let e=this._rctx.setDrawBuffers([De,z]);this._bindParameters.transparentWithoutDepthEmissionDimmingPass=!0,this._plugins.render(8),this._bindParameters.transparentWithoutDepthEmissionDimmingPass=!1,this._rctx.setDrawBuffers(e)}this.performanceInfo.advance(L.TRANSPARENT_MATERIAL_WITHOUT_DEPTH)}_renderNodes(e,t,n=!1){if(t.setName(e),this._pluginInput.set(e,t),!this._nodes.produces(e))return n&&this.performanceInfo.advance(e),t;let r=this._nodes.render(t,this._pluginInput,this._releaseNodeInputs);return this.performanceInfo.advance(e),this._fboCache.debugCallback?.(e,r.fbo),r}_renderInternalNodeCategory(e,t){if(!t)return;let n=t.name;try{this._renderNodes(e,t)}finally{this._pluginInput.set(e,null),t.setName(n)}}_3dGeometryRendered(){let e=this._bindParameters;this.hasReflections&&(e.depth=s(e.depth),e.reprojection.lastFrameColor=s(e.reprojection.lastFrameColor)),e.shadowMap.disposeOutput(5);let t=this._framebuffer.color.getAttachment(z)?.attachment;if(this.hasGlobalIllumination&&t){let{width:n,height:r}=this._framebuffer.size,i=e.useFloatBlend.value?8:5;e.reprojection.lastFrameEmission=this.fboCache.acquire(n,r,`emissive`,i),this._blit.blitTexture(t,e,e.reprojection.lastFrameEmission.fbo)}}_ensureBindParameters(e,t){this._ensureBindParametersCamera(e,t),this._ensureBindParametersWeatherFader(),this._ensureBindParametersScreenSpaceReflections(),this._ensureBindParametersReprojection()}_ensureBindParametersCamera(e,t){this._bindParameters.camera=e,this._bindParameters.contentCamera=t}_ensureBindParametersWeatherFader(){this.stage.viewingMode===1&&(this._bindParameters.clouds.data&&(this._bindParameters.clouds.fade(this._bindParameters.camera,this.renderContext.time,this.stage.view.qualitySettings.fadeDuration,this.stage.view.state.stationary),this.weatherFader?.cleanupCubemap()),this._bindParameters.snowCover=this.weatherFader?.snowCover??0)}_ensureBindParametersScreenSpaceReflections(){let{time:e}=this.renderContext,{screenSpaceReflections:t}=this._bindParameters;if(this.hasReflections){this._ssrEnableTime??=e;let n=this.stage.view.qualitySettings.fadeDuration;t.fadeFactor=n>0?Math.min(n,e-this._ssrEnableTime)/n:1,t.fadeFactor<1&&this._requestRender()}else this._ssrEnableTime=null}_ensureBindParametersReprojection(){if(!(this.hasReflections||this.hasGlobalIllumination)){this._reprojectionMatrix=b;return}let{reprojection:e,camera:t}=this._bindParameters,{lastFrameCamera:n}=e,r=!n.equals(t);if(r?(_(Z,t.viewMatrix),_(X,t.projectionMatrix),v(Q,Z,X),v(Q,n.viewMatrix,Q),v(Q,n.projectionMatrix,Q),this._reprojectionMatrix=Q):this._reprojectionMatrix=b,this.hasGlobalIllumination){let{viewMatrix:t}=e;r?(v($,n.viewMatrix,Z),y(t,$)):y(t,b)}}addRenderNode(e){this._nodes.add(e),this._requestRender()}removeRenderNode(e){this._nodes.remove(e),this._requestRender()}updateLighting(e,t,n,r){this._bindParameters.updateLighting(e,t,n,r),this._requestRender(1)}get usedMemory(){return{fbos:this.fboCache.usedMemory,plugins:this._plugins.usedMemory,edges:this.edgeView?.usedMemory??0,clouds:this.weatherFader?.usedMemory??0}}get test(){}};e([m({readOnly:!0})],V.prototype,`highResolutionAtmosphere`,null),e([m()],V.prototype,`_edgeView`,void 0),e([m()],V.prototype,`updating`,null),V=e([h(`esri.views.3d.webgl-engine.lib.Renderer`)],V);const H=[0,1,2,3],U=[7,6,4,5],W=[7,6],G=[0,1,2,4,...W],K=[3,5],q=[2,4,8],J=[16,12,14,13],ke=[4,5,2,3,0,1,...W],Ae=[4,8,5,11],je={0:[13],1:[12],2:[13,12],3:[13,12]},Y=[0,1,...W],Me=[`normals`,`highlights`],X=x(),Z=x(),Q=x(),$=x();function Ne(e){return t=>e.immediate.schedule(t)}export{V as Renderer};
2
+ import{__decorate as e}from"tslib";import{update as t}from"../../../../core/arrayUtils.js";import{createTask as n}from"../../../../core/asyncUtils.js";import has from"../../../../core/has.js";import{removeMaybe as r,abortMaybe as i,destroyMaybe as a,releaseMaybe as o,releaseReferencedMaybe as s}from"../../../../core/maybe.js";import{throwIfAborted as c}from"../../../../core/promiseUtils.js";import{watch as l,syncAndInitial as u,initial as d,sync as f}from"../../../../core/reactiveUtils.js";import{signal as p}from"../../../../core/signal.js";import{property as m,subclass as h}from"../../../../core/accessorSupport/decorators.js";import{equals as g,invert as _,multiply as v,copy as y}from"../../../../core/libs/gl-matrix-2/math/mat4.js";import{IDENTITY as b,create as x}from"../../../../core/libs/gl-matrix-2/factories/mat4f64.js";import{set as ee}from"../../../../core/libs/gl-matrix-2/math/vec4.js";import{fromValues as te,ZEROS as S}from"../../../../core/libs/gl-matrix-2/factories/vec4f64.js";import{pruneIndexArrays as ne}from"../../../../geometry/support/Indices.js";import{InternalRenderCategory as C,RenderNodeOutput as w,AllRenderNodeOutputs as T,AllInternalRenderNodeOutputs as E}from"../../webgl.js";import{minNearDistanceInMeters as re}from"../../state/NearFarHeuristic.js";import{debugFlags as ie}from"../../support/debugFlags.js";import{FBOCache as ae}from"../core/FBOCache.js";import{RenderPassManager as oe}from"../core/renderPasses/RenderPassManager.js";import{isColor as se}from"../core/shaderLibrary/ShaderOutput.js";import{RenderNodes as ce}from"../effects/RenderNodes.js";import{RenderPluginContext as le}from"../effects/RenderPluginContext.js";import{RenderPluginManager as D}from"../effects/RenderPluginManager.js";import{WeatherFader as O}from"../effects/WeatherFader.js";import{innerAtmosphereFadeStart as ue}from"../effects/atmosphere/atmosphereUtils.js";import{Blit as de}from"../effects/blit/Blit.js";import{maxHighlightsPerChannel as fe,renderHighlightBuffer as pe}from"../effects/highlight/Highlight.js";import{OITBlend as me}from"../effects/transparency/OITBlend.js";import{AnimationTimer as he}from"./AnimationTimer.js";import{AnimationTimeStep as ge}from"./AnimationTimeStep.js";import{BoundingInfo as _e}from"./BoundingInfo.js";import{Compositor as ve}from"./Compositor.js";import{DepthRange as k}from"./DepthRange.js";import{depthRangeFromScene as A}from"./depthRangeUtils.js";import{MainFramebuffer as ye}from"./MainFramebuffer.js";import{NavigationDepthCache as be}from"./NavigationDepthCache.js";import{blendingColorAlphaClear as j}from"./OrderIndependentTransparency.js";import{RenderContext as M,defaultRenderOccludedMask as N}from"./RenderContext.js";import{RendererBase as xe}from"./RendererBase.js";import{setupFeatureDefaults as P}from"./RenderFeature.js";import{RenderPluginInput as F}from"./RenderPluginInput.js";import{ShadowMap as Se}from"./ShadowMap.js";import Ce from"./SliceHelper.js";import{MergedRenderer as we}from"../materials/renderers/MergedRenderer.js";import{RenderSceneResult as I}from"../parts/renderUtils.js";import{RendererPerformanceInfo as Te,PerformanceCategory as L}from"../statistics/RendererPerformanceInfo.js";import{PixelType as Ee,ColorAttachment0 as R,ColorAttachment1 as z,ColorAttachment2 as B,DrawBufferNone as De}from"../../../webgl/enums.js";const Oe=has(`disable-feature:async-navigation-3d-depth-readback`);let V=class extends xe{constructor(e,t,n,r,i){super({stage:e}),this._techniques=n,this._rctx=r,this._requestRender=i,this._pluginsHas={occludedHudElements:!1,hudElements:!1,water:!1},this.renderPassManager=new oe,this._isRendering=!1,this._backgroundColor=te(0,0,0,1),this._sliceHelper=new Ce,this._shadowAccumulator=null,this._shadowCastOptions=null,this.sceneDepthRange=p(k.Infinite),this._state=p(2),this._hasAnimations=!1,this._animationTimestep=new ge,this._loadEdgeViewTask=null,this._edgeViewCallbacks=[],this._reprojectionMatrixVersion=p(0),this._renderHiddenTransparentEdges=()=>{},this._pluginInput=new F,this._hasTransparentGeometry=!1,this._releaseNodeInputs=e=>{for(let t of Me)e.some(({name:e})=>e===t)&&this._pluginInput.release(t)},this._testsNeedsDepth=!1,this._fboCache=new ae(r),this._compositor=new ve(r,n),this._renderStateFeatures=p(P(e.view.qualityProfile));let a=new Se(this._fboCache,e.viewingMode);this._renderContext=new M(this._rctx,a,n),this._framebuffer=new ye(this._fboCache,this._bindParameters),this._performanceInfo=new Te(this._rctx),this._blit=new de(n),this.navigationDepthCache=new be(this._rctx,this._fboCache,n,()=>this._requestRender(0)),this._nodes=new ce(this._renderContext),this._plugins=new D(new le(this._renderContext,n,t,e,i)),this._plugins.add(this.renderPassManager),this.weatherFader=new O({view:e.view,context:this._renderContext}),this.addHandles([l(()=>e.view.state.camera,()=>i(),u),l(()=>ie.EDGES_SHOW_HIDDEN_TRANSPARENT_EDGES,e=>{this._renderHiddenTransparentEdges=e?()=>this._renderEdges(0):()=>{},i()},d),l(()=>e.view.environment.background?.color,e=>{let t=e?e.toUnitRGBA():S;ee(this._backgroundColor,t[0]*t[3],t[1]*t[3],t[2]*t[3],t[3]),i()},u),l(()=>e.view.environmentView.shadowsAvailable,e=>{this._bindParameters.shadowMap.enabled=e,this._requestRender(1)},u),l(()=>this._bindParameters.clouds.fadeFactor,()=>{this._bindParameters.fadeLighting(),this._requestRender(2)},f),l(()=>this._bindParameters.clouds.data?.state,()=>i(),f),l(()=>e.view.state.highlights,e=>{this._bindParameters.highlights=e,i()},d),l(()=>e.view.environment.lighting?.type===`sun`,e=>{this._bindParameters.enableFillLights=e,this._requestRender()},u)])}destroy(){this._gpuTimerHandle=r(this._gpuTimerHandle),this._nodes.destroy(),this._framebuffer.dispose(),this._shadowAccumulator=null,this._shadowCastOptions=null,this._loadEdgeViewTask=i(this._loadEdgeViewTask),this._edgeView=a(this._edgeView),this.renderPassManager.dispose(),this.weatherFader=a(this.weatherFader),this._releaseFBOs(),this._disposeOffscreenBuffers(),this.navigationDepthCache.destroy(),this._fboCache.destroy(),this._fboCache=null,this._renderContext.destroy(),this._plugins.destroy(),this._pluginInput=null,this._oitBlendOrNil=null,this._nodes=null,this._framebuffer=null,this._performanceInfo=null,_e.prune(),we.prune(),ne()}get renderContext(){return this._renderContext}get _bindParameters(){return this._renderContext.bind}get _oitBlend(){return this._oitBlendOrNil??=new me(this._techniques),this._oitBlendOrNil}get performanceInfo(){return this._performanceInfo}updateRenderFeatures(e){this._renderStateFeatures.value=P(e),this.updateGlobalIllumination(this.stage.view.environment.lighting.globalIllumination),this._requestRender()}updateGlobalIllumination(e){let t=P(this.stage.view.qualityProfile);for(let n of[0,1,2])this.setFeatureEnabled(11,n,e),this.setFeatureEnabled(10,n,e&&n===2),this.setFeatureEnabled(3,n,!e&&(t.get(n,3)??!1))}isFeatureEnabled(e,t=this._state.value){return this._renderStateFeatures.value.get(t,e)??!1}setFeatureEnabled(e,t,n){this.isFeatureEnabled(e,t)!==n&&(this._renderStateFeatures.mutate(r=>r.set(t,e,n)),this._requestRender())}setTime(e){this._renderContext.time=e}get hasReflections(){return this._bindParameters.screenSpaceReflections.enabled=this._pluginsHas.water&&this.isFeatureEnabled(4),this._bindParameters.screenSpaceReflections.enabled}get _hasHighlights(){return this._plugins.produces(10,2,4,18,12,13,14)}hasHighlight(e){return this._plugins.hasHighlight(e)}get _hasHUDHighlights(){return this._plugins.produces(10,12,13,14)}get hasAmbientIllumination(){return this._nodes.produces(C.AMBIENT_ILLUMINATION)}get hasGlobalIllumination(){return this.stage.renderView?.globalIllumination?.enabled??!1}get hasGlobalIlluminationHighQuality(){let e=this.stage.renderView?.globalIllumination;return this.hasGlobalIllumination&&e?.hasHighQuality===!0}get hasSMAA(){return this.isFeatureEnabled(0)}get _emissions(){let e=this._plugins.emissions;return this._hasTransparentGeometry?e:+(e===1||e===3)}get hasFloatBlend(){return this._rctx.driverTest.floatBufferBlend.result&&this.isFeatureEnabled(9)}get highResolutionAtmosphere(){return this.isFeatureEnabled(2)}get fboCache(){return this._fboCache}setShadowAccumulator(e){this._shadowAccumulator=e,this._shadowCastOptions&&e.setParameters(this._shadowCastOptions)}_releaseFBOs(){this._bindParameters.hudOcclusion=o(this._bindParameters.hudOcclusion),this._bindParameters.depth=null}_disposeOffscreenBuffers(){this._framebuffer.dispose();let e=this._bindParameters;e.globalIllumination=o(e.globalIllumination),e.reprojection.lastFrameDepth=o(e.reprojection.lastFrameDepth),e.reprojection.lastFrameEmission=o(e.reprojection.lastFrameEmission),this._disposeBindBuffers()}_disposeBindBuffers(){this._bindParameters.shadowMap.disposeOutputs()}get updating(){return this._loadEdgeViewTask&&!this._loadEdgeViewTask.finished||this._edgeView?.updating||this._plugins.updating||this.weatherFader?.readyToRun||!this.isCameraFinal}loadEdgeView(){return this._loadEdgeViewTask||=n(async e=>{let{EdgeView:t}=await import(`./edgeRendering/EdgeView.js`);c(e);let n=this._edgeView=new t({rctx:this._rctx,renderSR:this.stage.view.renderSpatialReference,viewingMode:this.stage.view.stage.viewingMode,techniques:this._techniques,setNeedsRender:()=>this._requestRender(),schedule:Ne(this.stage.view.resourceController)});return this.addHandles(l(()=>n.updating,()=>this._requestRender(),f)),this._requestRender(),this._edgeViewCallbacks.forEach(e=>e(n)),this._edgeViewCallbacks.length=0,n}),this._loadEdgeViewTask.promise}withEdgeView(e){this.loadEdgeView().catch(()=>{}),this._edgeView==null?this._edgeViewCallbacks.push(e):e(this._edgeView)}get edgeView(){return this._edgeView}get isCameraFinal(){return this._reprojectionMatrixVersion.value>=0&&g(this._bindParameters.reprojection.matrix,b)}set _reprojectionMatrix(e){t(this._bindParameters.reprojection.matrix,e)&&this._reprojectionMatrixVersion.value++}get shadowsEnabled(){return!!this._bindParameters.shadowMap.enabled}setParameters(e){e.shadowCast&&(this._shadowCastOptions={...this._shadowCastOptions,...e.shadowCast},this._shadowAccumulator?.setParameters(e.shadowCast))}set slice(e){this._sliceHelper.update(e)&&this._requestRender()}get plugins(){return this._plugins}commit(e,t){return this._isRendering&&console.warn(`Renderer.modify called while rendering`),super.commit(e,t,this._plugins.context)?(this.updateHasFlags(),!0):!1}addRenderer(e){this._plugins.add(e)}removeRenderer(e){this._plugins.remove(e)}get occludedRequiresStencil(){return this._occludedRequiresOccludeeStencil||this.occludedRequiresIntegratedMeshStencil}get _occludedRequiresOccludeeStencil(){return this._bindParameters.hasOccludees&&!!(this.plugins.renderOccludedFlags&8)}get occludedRequiresIntegratedMeshStencil(){return this._plugins.produces(0,0)&&this._plugins.produces(0,9)}updateHasFlags(){let has=this._pluginsHas;has.occludedHudElements=this._plugins.produces(0,13),has.hudElements=has.occludedHudElements||this._plugins.produces(0,...J),has.water=this._plugins.produces(4,19),this._bindParameters.hasOccludees=this._plugins.hasOccludees,this._requestRender()}updateAnimation(e,t){this._animationTimer??=new he(e.camera,t),this._animationTimer.advance(e.camera,t,this._animationTimeDilation);let n=this._hasAnimations;return this._hasAnimations=this._plugins.updateAnimation(this._animationTimer),this._hasAnimations=this._nodes.updateAnimation(this._animationTimer)||this._hasAnimations,this._hasAnimations!==n&&(this._gpuTimerHandle=n?r(this._gpuTimerHandle):this.performanceInfo.enableGPUPerformanceInfo()),this._hasAnimations}get animationTimestep(){return this._animationTimestep.value}get _animationTimeDilation(){return this._animationTimestep.timeDilation}resetAnimation(){this._animationTimestep.clear()}tick(){this.fboCache.clean()}render(e,t,n=!1){try{this._isRendering=!0,this._needsOffscreenPrepass(e.camera,t)&&this._render(e,3,n).color?.release();let r=this._render(e,t,n);return t!==0&&this._disposeOffscreenBuffers(),r}catch(e){console.error(`Exception during rendering: ${e}:\n${e.stack}`)}finally{this._isRendering=!1}return new I(this._pluginInput.get(w.FINAL),null)}_needsOffscreenPrepass(e,t){return(t===1||t===2)&&(this.hasGlobalIllumination||this.hasReflections)&&(!this._framebuffer.hasColor||!this._bindParameters.reprojection.lastFrameCamera.equals(e))}_render(e,t,n){let r=t===0;this.performanceInfo.startFrame(),this.fboCache.frameStart(),this.fboCache.interactive=r,this._disposeBindBuffers();let{camera:i,contentCamera:a,mode:c,alignPixelEnabled:l}=e;this._state.value=c,this._bindParameters.frameRendererTarget=t,this._bindParameters.output=0,this._bindParameters.emissions=this._emissions,this._bindParameters.alignPixelEnabled=l,this._bindParameters.metersPerRenderUnit=this.stage.view.renderCoordsHelper.unitInMeters,this._bindParameters.decorations=!n,this._bindParameters.mainDepth=null,this._bindParameters.useFloatBlend.value=this.hasFloatBlend;let u=!n||!this._sliceHelper.isDecoration;this._bindParameters.slicePlane=u?this._sliceHelper.plane:null,this._bindParameters.viewshedEnabled=this._nodes.produces(C.VIEWSHED),this._bindParameters.laserlinesEnabled=this._nodes.produces(C.LASERLINES),this._bindParameters.shadowAnalysisEnabled=!!this._shadowAccumulator?.active,this._bindParameters.cutFillComputationEnabled=this._nodes.produces(C.CUTFILL_COMPUTATION),this._bindParameters.cutFillVisualizationEnabled=this._nodes.produces(C.CUTFILL),this._ensureBindParameters(i,a),this._plugins.sortTestsTransparentOrderedSlots(Ae),this._plugins.prepareRender(),this._hasTransparentGeometry=this._plugins.produces(1,...U),this._renderOverlay(),i.setGLViewport(this._rctx);let d=this._framebuffer,f=d.initialize(i.fullWidth,i.fullHeight,this._backgroundColor);this.hasReflections?(f?.setName(`last frame color`),this._bindParameters.reprojection.lastFrameColor?.release(),this._bindParameters.reprojection.lastFrameColor=f):f?.release(),this._bindParameters.hasShadowHighlights=this._needsShadowHighlight&&!n,this._precompilePrepasses(),this.performanceInfo.advance(L.PREPARE);let p=this._computeShadowDepthRange(i);this._pluginInput.set(`normals`,this._renderNormals()),this._renderAmbientIlluminationAndDepth(),this._renderShadowMap(i,a,this._bindParameters.lighting.mainLight.direction,p),this._renderShadowAccumulation(p),d.bind(),this._bindParameters.mainDepth=d.depth.attachment,this._precompileShaders(r),this._bindParameters.output=0,this._renderOpaque(),this._renderPreTransparent(),this._renderTransparent(),this._3dGeometryRendered(),d.update(e=>this._renderNodes(C.CUTFILL_COMPUTATION,e)),this._pluginInput.set(C.FOCUSAREA_MASK,this._renderFocusAreaMask()),d.update(e=>this._renderNodes(C.TRANSPARENT_ENVIRONMENT,e)),d.update(e=>this._renderNodes(C.VIEWSHED,e)),d.update(e=>this._renderNodes(C.LASERLINES,e)),this._nodes.requireGeometryDepth&&(this._bindParameters.depth=s(this._bindParameters.depth)),d.update(e=>this._renderNodes(C.FOCUSAREA,e)),this._pluginInput.release(C.FOCUSAREA_MASK),d.update(e=>this._renderNodes(C.CUTFILL,e)),this._pluginInput.release(C.GROUND_DEPTH),d.update(e=>this._renderNodes(C.OCCLUDED,e)),this._pluginInput.set(`highlights`,this._renderHighlightPrepass());let m=t===2?this._renderObjectAndLayerIdColor():null;d.update(e=>this._renderNodes(w.COMPOSITE,e)),this._bindParameters.shadowMap.disposeOutputs(),this._bindParameters.shadowHighlight=o(this._bindParameters.shadowHighlight),d.update(e=>this._renderNodes(C.ANTIALIASING,e));let h=this._hasTransparentGeometry?2:1,g=this._bindParameters.emissions;this._bindParameters.emissions=0,this._hasHUDHighlights&&d.update(e=>this._renderHUD(h,e)),d.update(e=>this._renderNodes(C.HIGHLIGHT,e)),this._hasHUDHighlights||d.update(e=>this._renderHUD(h,e)),this._bindParameters.emissions=g,d.update(e=>this._renderNodes(C.MAGNIFIER,e)),d.update(e=>this._renderNodes(w.FINAL,e)),r&&(this._blit.toFramebuffer(d.color,this._bindParameters),Oe||c!==2&&c!==0||this.navigationDepthCache.update(this._bindParameters,d.depth.attachment,this._renderContext.time)),this._bindParameters.reprojection.lastFrameDepth?.release(),this.hasGlobalIllumination&&(this._bindParameters.reprojection.lastFrameDepth=this._bindParameters.depth),this._testsNeedsDepth&&(this._bindParameters.depth=s(this._bindParameters.depth)),this._releaseFBOs(),d.releaseDepth(),this._bindParameters.reprojection.lastFrameCamera.copyFrom(this._bindParameters.camera),this.fboCache.frameEnd();let _;return r||(_=d.color,_.retain()),this.performanceInfo.finishFrame(),new I(_,m)}_precompileShaders(e){++this._plugins.context.techniques.precompiling;let t=this._bindParameters;t.output=0;let n=t.emissions;if(this._precompileOpaqueGeometry(),this._nodes.precompile(C.OPAQUE_ENVIRONMENT,C.GAUSSIAN_SPLAT,C.OPAQUE_OCCLUSION_QUERY,C.VOXEL),this._precompileOpaqueGeometry(),t.output=3,this._plugins.precompile(...W),t.output=0,this._plugins.precompile(...W),this._hasTransparentGeometry){let e=this._pluginsHas.occludedHudElements;this._oitBlend.precompile(t,e,0),this._pluginsHas.hudElements&&this._oitBlend.precompile(t,!1,1),this._precompileTransparentGeometry(),t.hasTransparentEmission&&(t.emissions=3)}this._nodes.precompile(C.FOCUSAREA_MASK),this._compositor.precompile(this._usesPremultipliedAlphaBlit,!!this._needsEdges,t),this._hasTransparentGeometry||this._plugins.precompile(15),this._nodes.precompile(C.TRANSPARENT_ENVIRONMENT,C.VIEWSHED,C.CUTFILL_COMPUTATION,C.CUTFILL,C.LASERLINES,C.FOCUSAREA,C.OCCLUDED,C.ANTIALIASING),t.highlightMixTexture=t.highlights.length>1?this._rctx.emptyTexture:null,this._precompileHUD(0);let r=t.emissions;t.emissions=0,this._precompileHUD(0),this._precompileHUD(1),t.emissions=r,this._hasHighlights&&(t.highlights.forEach((e,n)=>{t.highlightLevel=n,this._precompileAllGeometry(10),this._hasHUDHighlights&&this._plugins.precompile(13,12)}),t.highlightLevel=null,this._nodes.precompile(C.HIGHLIGHT)),t.highlightMixTexture=null,this._nodes.precompile(w.COMPOSITE,C.MAGNIFIER),this._nodes.precompile(C.TRANSPARENT_NO_DEPTH),this._plugins.precompile(8),t.hasOpaqueEmission&&(t.transparentWithoutDepthEmissionDimmingPass=!0,this._plugins.precompile(8),t.transparentWithoutDepthEmissionDimmingPass=!1),e&&this._blit.precompile(),t.emissions=n,--this._plugins.context.techniques.precompiling}_renderFocusAreaMask(){let e=this._nodes.produce(C.FOCUSAREA_MASK,this._pluginInput);return e&&this.performanceInfo.advance(L.FOCUS_AREA_MASK),e}_renderObjectAndLayerIdColor(){if(!this._nodes.produces(C.OBJECT_AND_LAYER_ID_COLOR))return null;let e=this._bindParameters.output;++this._techniques.precompiling;let{width:t,height:n}=this._framebuffer.size,r=this.fboCache.acquire(t,n,C.OBJECT_AND_LAYER_ID_COLOR).acquireDepth(14);return r=this._renderNodes(C.OBJECT_AND_LAYER_ID_COLOR,r),--this._techniques.precompiling,this._bindParameters.output=e,r}finish(e){this._hasAnimations||this._animationTimestep.clear();let t=this.performanceInfo.gpuSamplingEnabled,n=e===0,r=n?this.performanceInfo.elapsedTime:0;if(n||t){let e=0;t?e=this.performanceInfo.totalGPUTimeSampler.last:(this._rctx.gl.finish(),e=this.performanceInfo.elapsedTime);let i=Math.max(r,e);this._animationTimestep.frame(i,n)}}readAccumulatedShadow(e){return this._shadowAccumulator?.readAccumulatedShadow(e[0],e[1])??0}readMainDepth(e,t){let{mainDepth:n,camera:r}=this._bindParameters;if(!n)return;let i=this.fboCache.acquire(this._framebuffer.size.width,this._framebuffer.size.height,`linear depth`);this._rctx.bindFramebuffer(i.fbo),r.setGLViewport(this._rctx),this._rctx.setScissorRect(e[0],e[1],e[2],e[3]),this._rctx.setScissorTestEnabled(!0),this._rctx.clearFramebuffer(S),this._compositor.blitDepthToLinearDepth(this._bindParameters,n),this._rctx.setScissorTestEnabled(!1),this._rctx.setScissorRect(0,0,this._rctx.gl.canvas.width,this._rctx.gl.canvas.width),i.fbo?.readPixels(e[0],e[1],e[2],e[3],6408,Ee.UNSIGNED_BYTE,t),i.release()}get _needsEdges(){return this._edgeView?.shouldRender()?this._edgeView:null}_renderEdges(e){let t=this._needsEdges;if(!t)return;let{width:n,height:r}=this._framebuffer.size,i=this.fboCache.acquire(n,r,`edges`);i.attachDepth(this._framebuffer.depth),this._rctx.bindFramebuffer(i.fbo),this._rctx.clearFramebuffer(S),t.render(this._bindParameters,e),i.detachDepth(),this._framebuffer.bind(),this._compositor.composite(this._bindParameters,i.getTexture()),i.release(),this.performanceInfo.advance(e===1?L.OPAQUE_EDGES:L.TRANSPARENT_EDGES)}_renderOverlay(){this._bindParameters.overlay=this.overlay?.render(this._renderContext.time),this._bindParameters.overlay&&this.performanceInfo.advance(L.OVERLAY)}_renderShadowMap(e,t,n,r){if(!this.shadowsEnabled)return;let i=this._bindParameters.shadowMap;if(i.start(e,n,r,this.isFeatureEnabled(5),this.stage.view.qualitySettings.maximumPixelRatio),this._needsShadowHighlight){this._renderShadowCascades(6,i),e.setGLViewport(this._rctx),this._ensureBindParametersCamera(e,t);let n=this._bindParameters.output;this._bindParameters.output=0,this._bindParameters.shadowHighlight=this._nodes.produce(C.SHADOW_HIGHLIGHT,this._pluginInput),this._bindParameters.output=n,i.disposeOutput(6),i.clear(),this._renderShadowCascades(7,i)}else this._renderShadowCascades(5);e.setGLViewport(this._rctx),this._ensureBindParametersCamera(e,this._bindParameters.contentCamera),this._needsShadowHighlight&&(this._bindParameters.depth=s(this._bindParameters.depth)),this.performanceInfo.advance(C.SHADOWMAP)}_precompileShadowCascades(e){this._bindParameters.shadowMap.cascades.length!==0&&this._precompileAllGeometry(e)}_renderShadowCascades(e,t=this._bindParameters.shadowMap){let n=this._bindParameters.output,r=e!==6;t.bindFramebuffer();for(let n of t.cascades)n.camera.setGLViewport(this._rctx),this._ensureBindParametersCamera(n.camera,n.camera),this.renderAllGeometry(e),r&&this._renderShadowNodes(t.renderTarget);t.finish(e),this._bindParameters.output=n}_renderShadowNodes(e){this._renderInternalNodeCategory(C.SHADOWMAP,e)}get _needsDepth(){return+this._nodes.requireGeometryDepth+ +this.hasReflections+ +this.hasGlobalIllumination+ +this._testsNeedsDepth+ +this._needsShadowHighlight}get _usesPremultipliedAlphaBlit(){return this._pluginsHas.hudElements}_renderAmbientIlluminationAndDepth(){let e=this._bindParameters;e.depth=o(this._bindParameters.depth);let t=this._pluginInput.get(`normals`);if(t){let n=this._nodes.produce(C.AMBIENT_ILLUMINATION,this._pluginInput);this._pluginInput.set(C.AMBIENT_ILLUMINATION,n),this._releaseGlobalIlluminationBuffers(),e.ssao=this.hasGlobalIllumination?null:n,e.globalIllumination=this.hasGlobalIllumination?n:null,e.globalIlluminationEnabled=e.globalIllumination!=null,n&&this.performanceInfo.advance(this.hasGlobalIlluminationHighQuality?L.AMBIENT_ILLUMINATION_HIGH_QUALITY:L.AMBIENT_ILLUMINATION);let r=this._needsDepth;if(r){let n=t.obtainAttachment(R);this._rctx.bindFramebuffer(t.fbo),this._rctx.clear(1024),this._renderGeometryWithoutNormals(3),e.depth=t.obtainDepthTexture(),e.depth?.retain(r-1),t.attachColor(n,R),n?.release(),this.performanceInfo.advance(L.DEPTH)}else t.detachDepth();this.hasAmbientIllumination&&this._pluginInput.release(`normals`)}else this._releaseGlobalIlluminationBuffers(),e.ssao=null,this._pluginInput.set(C.AMBIENT_ILLUMINATION,null),this._renderAllGeometryDepth()}_renderAllGeometryDepth(){let e=this._needsDepth;if(e===0)return;let{width:t,height:n}=this._framebuffer.size,r=this.fboCache.acquire(t,n,`geometry depth`,14);this._rctx.bindFramebuffer(r.fbo),this._rctx.clear(1280),this.renderAllGeometry(3),this._renderGaussianSplatPrepassDepth(r),this._bindParameters.depth=r.obtainDepthTexture(),this._bindParameters.depth?.retain(e-1),r.release(),this.performanceInfo.advance(L.DEPTH)}_renderGaussianSplatPrepassDepth(e){let t=this._shadowAccumulator;if(!t?.active||!t.requireGeometryDepth)return;let n=this._bindParameters.output;this._bindParameters.output=3,this._renderInternalNodeCategory(C.GAUSSIAN_SPLAT_DEPTH,e),this._bindParameters.output=n}_renderGaussianSplatDepthAndNormals(e){let t=this._bindParameters.output;this._bindParameters.output=4,this._renderInternalNodeCategory(C.GAUSSIAN_SPLAT_DEPTH,e),this._bindParameters.output=t}get _needsShadowDepthRange(){return this._bindParameters.shadowMap.enabled||!!this._shadowAccumulator?.active}_computeShadowDepthRange(e){if(!this._needsShadowDepthRange)return k.Zero;let t=A(e,this._plugins.plugins,this.stage.layers,0);return t.union(this._plugins.queryDepthRange(e)),t.union(this._nodes.queryDepthRange(C.SHADOWMAP,e)),t.near=Math.max(e.near,t.near),t.far=Math.min(e.far,t.far),t}updateSceneDepthRange(e){if(!this.stage.view.state.isGlobal||this.stage.view.renderCoordsHelper.getAltitude(e.eye)<ue){this.sceneDepthRange.value=k.Infinite;return}let t=e.clone();t.near=re,t.far=1e10;let n=A(t,this._plugins.plugins,this.stage.layers,1);n.union(this._plugins.queryDepthRange(t)),this.sceneDepthRange.value.equals(n)||(this.sceneDepthRange.value=n)}get _normalsRequired(){return this._nodes.require(`normals`,...T,C.VIEWSHED,C.LASERLINES)+ +!!this.hasAmbientIllumination}_precompilePrepasses(){let e=!!this._normalsRequired;if(e?(this._precompilePlugins(4,G),this._needsDepth&&this._precompilePlugins(3,K)):this._needsDepth&&this._precompileAllGeometry(3),this.shadowsEnabled&&(this._needsShadowHighlight?(this._nodes.precompile(C.SHADOW_HIGHLIGHT),this._precompileShadowCascades(6),this._precompileShadowCascades(7)):this._precompileShadowCascades(5)),this._shadowAccumulator?.active&&(this._nodes.precompile(C.SHADOW_ACCUMULATION),this._precompileAllGeometry(5)),this._shadowAccumulator?.active||e){let t=this._bindParameters.output;this._bindParameters.output=e?4:3,this._nodes.precompile(C.GAUSSIAN_SPLAT_DEPTH),this._bindParameters.output=t}(this.shadowsEnabled||this._shadowAccumulator?.active)&&this._nodes.precompile(C.SHADOWMAP),this.hasAmbientIllumination&&e&&this._nodes.precompile(C.AMBIENT_ILLUMINATION)}_renderNormals(){let e=this._normalsRequired;if(e===0)return;let{width:t,height:n}=this._framebuffer.size,r=this.fboCache.acquire(t,n,`normals`);r.acquireDepth(14),this._rctx.bindFramebuffer(r.fbo),this._rctx.clearFramebuffer(S,!0,!0),this._bindParameters.output=4,this._plugins.render(...G),this._renderGaussianSplatDepthAndNormals(r);let i=this._nodes.optional(`normals`,...T,C.VIEWSHED);return r.retain(e+i-1),this.performanceInfo.advance(L.NORMALS),r}_releaseGlobalIlluminationBuffers(){let e=this._bindParameters;e.reprojection.lastFrameDepth=o(e.reprojection.lastFrameDepth),e.reprojection.lastFrameEmission=o(e.reprojection.lastFrameEmission),e.globalIllumination=s(e.globalIllumination),e.globalIlluminationEnabled=!1}_precompileAllGeometry(e){let t=this._bindParameters.output;this._bindParameters.output=e,this._precompileOpaqueGeometry(),this._precompileTransparentGeometry(),this._plugins.precompile(...W),this._bindParameters.output=t}renderAllGeometry(e){this._bindParameters.output=e,this._renderOpaqueAndTransparentGeometry(e),this._renderTransparentGround()}precompileSlots(e,...t){for(let n of t)this._bindParameters.slot=n,e.precompile(this._renderContext)}precompileOccludedSlots(e,t){for(let n of t)this._renderContext.renderOccludedMask=n,this.precompileSlots(e,...q);this._renderContext.renderOccludedMask=N}renderSlots(e,...t){for(let n of t)this._bindParameters.slot=n,e.forAll(e=>{let t=e.acquireTechniques(this._renderContext);t&&e.render(this._renderContext,t)})}renderOccludedSlots(e,t){this._renderContext.renderOccludedMask=t,this.plugins.renderOccludedFlags>1&&this._plugins.render(9),this.renderSlots(e,...q),this._renderContext.renderOccludedMask=N}renderHUD(e){this._bindParameters.hudRenderStyle=e,this._plugins.render(...je[e])}_renderHUDElements(e){this._bindParameters.hudRenderStyle=e,this._plugins.render(16),this.renderHUD(e),this._bindParameters.hudRenderStyle=e,this._plugins.render(14)}precompileViewshedShadowMap(){let e=this._bindParameters.output;this._bindParameters.output=8,this._precompileAllGeometry(8),this._nodes.precompile(C.SHADOWMAP),this._bindParameters.output=e}precompileCutFillDepth(){this._precompilePlugins(9,Y)}_precompilePlugins(e,t){let n=this._bindParameters.output;this._bindParameters.output=e,this._plugins.precompile(...t),this._bindParameters.output=n}renderViewshedShadowMap(e,t){let{camera:n,contentCamera:r}=this._bindParameters,i=this._bindParameters.output;e.setGLViewport(this._rctx),this._ensureBindParametersCamera(e,e),this.renderAllGeometry(8),this._renderShadowNodes(t),this._ensureBindParametersCamera(n,r),this._bindParameters.camera.setGLViewport(this._rctx),this._bindParameters.output=i}renderCutFillDepth(e){let{camera:t,contentCamera:n}=this._bindParameters,r=this._bindParameters.output;e.setGLViewport(this._rctx),this._ensureBindParametersCamera(e,e),this._bindParameters.output=9,this._plugins.render(...Y),this._ensureBindParametersCamera(t,n),t.setGLViewport(this._rctx),this._bindParameters.output=r}get _needsGroundDepth(){return this._bindParameters.cutFillVisualizationEnabled}_blitGroundDepth(){if(!this._needsGroundDepth)return null;let{width:e,height:t}=this._framebuffer.size,n=this.fboCache.acquire(e,t,C.GROUND_DEPTH,14);return this._rctx.blitFramebuffer(this._framebuffer.color.fbo,n.fbo,256),this._framebuffer.bind(),n}_renderOpaqueAndTransparentGeometry(e){this._bindParameters.output=e,this._renderOpaqueGeometry(),this._renderTransparentGeometry()}_renderGeometryWithoutNormals(e){this._bindParameters.output=e,this._plugins.render(...K)}_precompileOpaqueGeometry(){this._needsOpaquePass&&(this._plugins.precompile(...H),this._nodes.precompile(`opaque-color`))}_renderOpaqueGeometry(){this._plugins.render(...H)}_renderTransparentGeometry(){this._plugins.render(...U),this._hasTransparentGeometry&&this._plugins.render(15)}_renderTransparentGround(){this._plugins.render(...W)}_precompileHUD(e){if(!this._pluginsHas.hudElements)return;let t=this._bindParameters.output,n=this._bindParameters.hudRenderStyle,r=this._bindParameters.emissions;this._bindParameters.emissions=0,this._bindParameters.hudRenderStyle=e,this._bindParameters.output=1,this._plugins.precompile(...J),this._bindParameters.output=2,this._plugins.precompile(...J),this._bindParameters.output=0,this._oitBlend.precompile(this._bindParameters,!1,1),this._hasHighlights&&(this._bindParameters.output=10,this._plugins.precompile(...J)),this._bindParameters.emissions=r,this._bindParameters.output=t,this._bindParameters.hudRenderStyle=n}_renderHUD(e,t){if(!this._pluginsHas.hudElements)return t;let n=this._renderOIT(1,e);this._rctx.bindFramebuffer(t.fbo);let r=!!t.getTexture(z);return this._compositor.compositePreMultipliedAlpha(this._bindParameters,n.getTexture(),r),n.release(),this.performanceInfo.advance(e===0?L.HUD_OCCLUDED:L.HUD),t}get _needsShadowHighlight(){return this.shadowsEnabled&&this._plugins.produces(6,2)}_renderHighlightPrepass(){if(!this._hasHighlights)return;let{fboCache:e,_rctx:t,_bindParameters:n}=this,{width:r,height:i}=this._framebuffer.size,{highlights:a}=n,o=a.length>fe?3:1,s=e.acquire(r,i,`highlights`,o);s.acquireDepth(14);let c=this._plugins.produces(10,0);return c&&this._framebuffer.color.fbo&&s.fbo&&t.blitFramebuffer(this._framebuffer.color.fbo,s.fbo,1024),t.bindFramebuffer(s.fbo),t.gl.clearBufferuiv(6144,0,[0,0,0,0]),c||t.clear(1024),this._bindParameters.output=10,t.bindFramebuffer(s.fbo),pe(t,e,r,i,n,()=>this._renderHighlightGeometries()),s.detachDepth(),this.performanceInfo.advance(L.HIGHLIGHTS),s.retain(this._nodes.require(`highlights`,...E)+this._nodes.optional(`highlights`,...E)-1),s}_renderHighlightGeometries(){this._plugins.render(...ke),this._rctx.clear(256),this._renderHUDElements(2)}_renderShadowAccumulation(e){let t=this._shadowAccumulator;if(!t)return;t.updateDepthRange(e);let n=t.requireGeometryDepth;this._bindParameters.output=0;let r=this._nodes.produce(C.SHADOW_ACCUMULATION,this._pluginInput);t.didAccumulate&&this.performanceInfo.advance(L.ACCUMULATED_SHADOWS),this._pluginInput.set(C.SHADOW_ACCUMULATION,null),r?.release(),n&&(this._bindParameters.depth=s(this._bindParameters.depth))}renderShadowAccumulationShadowMap(e,t,n,r,i){let a=this.stage.view.qualitySettings.maximumPixelRatio;n.start(e,r,i,!0,a),this._renderShadowCascades(5,n),e.setGLViewport(this._rctx),this._ensureBindParametersCamera(e,t)}_precompileTransparentGeometry(){se(this._bindParameters.output)?(this._bindParameters.output=1,this._plugins.precompile(...U),this._hasTransparentGeometry&&this._plugins.precompile(15),this._bindParameters.output=2,this._plugins.precompile(...U),this._hasTransparentGeometry&&this._plugins.precompile(15),this._bindParameters.output=0):this._plugins.precompile(...U)}_renderOIT(e,t=2){let n=e===1,{width:r,height:i}=this._framebuffer.size,a=n?()=>this._renderHUDElements(t):()=>this._renderTransparentGeometry(),s=this._bindParameters,c=s.useFloatBlend.value?8:5,l=s.output;s.output=1;let u=n?`oit hud`:`oit`,d=this.fboCache.acquire(r,i,u,c).acquireColor(z,this.hasFloatBlend?7:0,`oit alpha`),f=s.hasEmission&&(e===0||t!==1);f&&d.acquireColor(B,c,`oit emissive`),n||d.attachDepth(this._framebuffer.depth),this._rctx.bindFramebuffer(d.fbo),this._rctx.clearFramebuffer(j),f&&this._rctx.clearBuffer(2,j),a(),d.detachDepth(),s.output=2;let p=this.fboCache.acquire(r,i,n?`oit front hud`:`oit front`);f&&p.acquireColor(z,c,`oit front emissive`),n?p.acquireDepth(this._hudDepthFormat):p.attachDepth(this._framebuffer.depth),this._rctx.bindFramebuffer(p.fbo),this._rctx.clearFramebuffer(S,n),a(),p.detachDepth();let m=this._pluginsHas.occludedHudElements&&!n,h=m&&s.emissions!==0?B:z;s.hudOcclusion=o(this._bindParameters.hudOcclusion),s.output=0;let g;return n?(g=this.fboCache.acquire(r,i,`oit composite hud`),this._rctx.bindFramebuffer(g.fbo),this._rctx.setClearColor(0,0,0,1e-13),this._rctx.clear(16384)):(s.emissions!==0&&this._framebuffer.ensureEmissionAttachment(),m&&(this._framebuffer.color.acquireColor(h,0,`hud occlusion`),this._rctx.clearBuffer(h-R,S)),this._framebuffer.bind()),this._oitBlend.blend(this._rctx,d,p,s,m,e,this._fboCache.debugCallback),g?.detachDepth(),n||(f&&(this._bindParameters.emissions=3),m&&(s.hudOcclusion=this._framebuffer.color.obtainAttachment(h))),p.release(),d.release(),s.output=l,g}get _hudDepthFormat(){return this.isFeatureEnabled(7)?14:13}get _needsOpaquePass(){return this.plugins.produces(0,...H)||this.plugins.produces(5,...H)||this.plugins.produces(3,3)}_renderOpaque(){let e=this._needsOpaquePass;e&&(this._plugins.render(0,1),this._pluginInput.set(C.GROUND_DEPTH,this._blitGroundDepth()),this._plugins.render(2,3));let t=this._framebuffer;t.update(t=>this._renderNodes(w.OPAQUE,t,e)),this.fboCache.debugCallback?.(w.OPAQUE,t.color.fbo),t.update(e=>this._renderNodes(C.OPAQUE_ENVIRONMENT,e)),this.fboCache.debugCallback?.(C.OPAQUE_ENVIRONMENT,t.color.fbo),this._renderEdges(1)}_renderPreTransparent(){this._framebuffer.update(e=>this._renderNodes(C.GAUSSIAN_SPLAT,e)),this.fboCache.debugCallback?.(C.GAUSSIAN_SPLAT,this._framebuffer.color.fbo),this._framebuffer.update(e=>this._renderNodes(C.OPAQUE_OCCLUSION_QUERY,e)),this.fboCache.debugCallback?.(C.OPAQUE_OCCLUSION_QUERY,this._framebuffer.color.fbo),this._framebuffer.update(e=>this._renderNodes(C.VOXEL,e)),this.fboCache.debugCallback?.(C.VOXEL,this._framebuffer.color.fbo)}_renderTransparent(){let e=this._framebuffer;if(this._renderHiddenTransparentEdges(),this._hasTransparentGeometry&&this._renderOIT(0),e.update(e=>this._renderNodes(w.TRANSPARENT,e,this._hasTransparentGeometry)),this.fboCache.debugCallback?.(w.TRANSPARENT,e.color.fbo),this._hasTransparentGeometry||this._plugins.render(15),this._renderEdges(0),this._bindParameters.ssao=o(this._bindParameters.ssao),e.update(e=>this._renderNodes(C.TRANSPARENT_NO_DEPTH,e)),this.fboCache.debugCallback?.(C.TRANSPARENT_NO_DEPTH,e.color.fbo),this._framebuffer.bind(),this._plugins.render(8),this._bindParameters.hasEmission){let e=this._rctx.setDrawBuffers([De,z]);this._bindParameters.transparentWithoutDepthEmissionDimmingPass=!0,this._plugins.render(8),this._bindParameters.transparentWithoutDepthEmissionDimmingPass=!1,this._rctx.setDrawBuffers(e)}this.performanceInfo.advance(L.TRANSPARENT_MATERIAL_WITHOUT_DEPTH)}_renderNodes(e,t,n=!1){if(t.setName(e),this._pluginInput.set(e,t),!this._nodes.produces(e))return n&&this.performanceInfo.advance(e),t;let r=this._nodes.render(t,this._pluginInput,this._releaseNodeInputs);return this.performanceInfo.advance(e),this._fboCache.debugCallback?.(e,r.fbo),r}_renderInternalNodeCategory(e,t){if(!t)return;let n=t.name;try{this._renderNodes(e,t)}finally{this._pluginInput.set(e,null),t.setName(n)}}_3dGeometryRendered(){let e=this._bindParameters;this.hasReflections&&(e.depth=s(e.depth),e.reprojection.lastFrameColor=s(e.reprojection.lastFrameColor)),e.shadowMap.disposeOutput(5);let t=this._framebuffer.color.getAttachment(z)?.attachment;if(this.hasGlobalIllumination&&t){let{width:n,height:r}=this._framebuffer.size,i=e.useFloatBlend.value?8:5;e.reprojection.lastFrameEmission=this.fboCache.acquire(n,r,`emissive`,i),this._blit.blitTexture(t,e,e.reprojection.lastFrameEmission.fbo)}}_ensureBindParameters(e,t){this._ensureBindParametersCamera(e,t),this._ensureBindParametersWeatherFader(),this._ensureBindParametersScreenSpaceReflections(),this._ensureBindParametersReprojection()}_ensureBindParametersCamera(e,t){this._bindParameters.camera=e,this._bindParameters.contentCamera=t}_ensureBindParametersWeatherFader(){this.stage.viewingMode===1&&(this._bindParameters.clouds.data&&(this._bindParameters.clouds.fade(this._bindParameters.camera,this.renderContext.time,this.stage.view.qualitySettings.fadeDuration,this.stage.view.state.stationary),this.weatherFader?.cleanupCubemap()),this._bindParameters.snowCover=this.weatherFader?.snowCover??0)}_ensureBindParametersScreenSpaceReflections(){let{time:e}=this.renderContext,{screenSpaceReflections:t}=this._bindParameters;if(this.hasReflections){this._ssrEnableTime??=e;let n=this.stage.view.qualitySettings.fadeDuration;t.fadeFactor=n>0?Math.min(n,e-this._ssrEnableTime)/n:1,t.fadeFactor<1&&this._requestRender()}else this._ssrEnableTime=null}_ensureBindParametersReprojection(){if(!(this.hasReflections||this.hasGlobalIllumination)){this._reprojectionMatrix=b;return}let{reprojection:e,camera:t}=this._bindParameters,{lastFrameCamera:n}=e,r=!n.equals(t);if(r?(_(Z,t.viewMatrix),_(X,t.projectionMatrix),v(Q,Z,X),v(Q,n.viewMatrix,Q),v(Q,n.projectionMatrix,Q),this._reprojectionMatrix=Q):this._reprojectionMatrix=b,this.hasGlobalIllumination){let{viewMatrix:t}=e;r?(v($,n.viewMatrix,Z),y(t,$)):y(t,b)}}addRenderNode(e){this._nodes.add(e),this._requestRender()}removeRenderNode(e){this._nodes.remove(e),this._requestRender()}updateLighting(e,t,n,r){this._bindParameters.updateLighting(e,t,n,r),this._requestRender(1)}get usedMemory(){return{fbos:this.fboCache.usedMemory,plugins:this._plugins.usedMemory,edges:this.edgeView?.usedMemory??0,clouds:this.weatherFader?.usedMemory??0}}get test(){}};e([m({readOnly:!0})],V.prototype,`highResolutionAtmosphere`,null),e([m()],V.prototype,`_edgeView`,void 0),e([m()],V.prototype,`updating`,null),V=e([h(`esri.views.3d.webgl-engine.lib.Renderer`)],V);const H=[0,1,2,3],U=[7,6,4,5],W=[7,6],G=[0,1,2,4,...W],K=[3,5],q=[2,4,8],J=[16,12,14,13],ke=[4,5,2,3,0,1,...W],Ae=[4,8,5,11],je={0:[13],1:[12],2:[13,12],3:[13,12]},Y=[0,1,...W],Me=[`normals`,`highlights`],X=x(),Z=x(),Q=x(),$=x();function Ne(e){return t=>e.immediate.schedule(t)}export{V as Renderer};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import t from"../../../../core/Accessor.js";import{EventEmitter as n}from"../../../../core/Evented.js";import"../../../../core/has.js";import{disposeMaybe as r,removeMaybe as i}from"../../../../core/maybe.js";import{generateUID as a}from"../../../../core/uid.js";import{property as o,subclass as s}from"../../../../core/accessorSupport/decorators.js";import{exactEquals as c,set as l}from"../../../../core/libs/gl-matrix-2/math/vec4.js";import{ZEROS as u,create as d}from"../../../../core/libs/gl-matrix-2/factories/vec4f64.js";import{textTextureAtlas as f}from"./testUtils.js";import{applyTextureResizeModuloCeil as p}from"./textureUtils.js";import{TaskPriority as m}from"../../../support/Scheduler.js";import{Yield as h}from"../../../support/Yield.js";import g from"../../../webgl/Texture.js";import{TextureDescriptor as _}from"../../../webgl/TextureDescriptor.js";const v=4096;let y=class extends t{constructor(e){super(e),this.id=a(),this.events=new n,this._texture=null,this._atlas=new C(256,256),this._needsRepack=!1,this._canRepack=!0,this._elementsToRender=new Map,this._elements=new Map,this._uvCallbacks=new Map,this.updating=!1}initialize(){this._canvas=document.createElement(`canvas`),this._canvas.setAttribute(`id`,`textAtlasCanvas`),this._canvas.setAttribute(`style`,`display:none`),this._ctx=this._canvas.getContext(`2d`),this._stage=this.view.stage,this._stage.addTexture(this),this._updateCanvasElementSize(this._atlas),this._reset()}unload(){this._texture=r(this._texture),this._frameWorker=i(this._frameWorker),this.updating=!1,this.events.emit(`unloaded`)}get loaded(){return this._texture!=null}get texture(){return this._texture}static get maxSize(){return T=f.stableRendering?b:0,[v-b-T,v-b-T-x]}load(e){if(this._texture)return this._texture;let t=new _;return t.wrapMode=33071,t.samplingMode=9987,t.hasMipmap=!0,t.preMultiplyAlpha=!0,t.maxAnisotropy=e.parameters.maxMaxAnisotropy,this._texture=new g(e,t,this._canvas),this._frameWorker=this.view.resourceController.scheduler.registerTask(m.TEXT_TEXTURE_ATLAS,this),this.setDirty(),this._texture}dispose(){this._elements.clear(),this._elementsToRender.clear(),this._frameWorker=i(this._frameWorker),this._texture&&=(this._stage.removeTexture(this),r(this._texture)),this._canvas.width=0,this._canvas.height=0,this._canvas=null,this._ctx=null}_updateCanvasElementSize(e){this._canvas.width=e.width,this._canvas.height=e.height}_resizeAtlas(e,t){let{width:n,height:r}=this._atlas;(n!==e||r!==t)&&(this._atlas.width=e,this._atlas.height=t,this._texture?.resize(e,t),this._texture?.updateData(0,0,0,n,r,this._canvas),this._updateCanvasElementSize(this._atlas),this._elements.forEach(e=>this._uvCallbacks.get(e.textRenderer.key)?.forEach(t=>t(e.uv))),this._reset())}_reset(){this._elementsToRender.clear(),this._atlas.reset(),this._needsRepack=!0,this.setDirty()}_addAtlasElement(e,t,n,r){let i=this._atlas;if(i.width<n||i.height<r)return!1;let a=i.cursors.get(r);if(!a){if(i.height<i.nextY+r)return!1;a=[new w(i.nextY)],i.cursors.set(r,a),i.nextY+=r}let o=a.find(e=>i.width>=e.x+n);if(o==null){if(i.height<i.nextY+r)return!1;o=new w(i.nextY),i.nextY+=r,a.push(o)}return e.setNewPosition(o),this._elements.set(t,e),this._elementsToRender.set(t,e),o.x+=n,!0}_ensureCallbacks(e){let t=this._uvCallbacks.get(e);if(t)return t;let n=new Set;return this._uvCallbacks.set(e,n),n}_addCallback(e,t){this._ensureCallbacks(e).add(t)}_removeCallback(e,t){let n=this._uvCallbacks.get(e);return n?.delete(t)&&n.size===0?(this._uvCallbacks.delete(e),!0):!1}_processAddition(e){let t=e.textRenderer.key;if(this._needsRepack){this._elements.set(t,e);return}let n=this._atlas,r=e.textRenderer.renderedWidth,i=e.textRenderer.renderedHeight,a=r+b,o=i+b+x;if(!this._addAtlasElement(e,t,a,o)){if(this._canRepack)this._reset();else if(n.width<a){let e=p(Math.max(a,n.width*1.5),v);this._resizeAtlas(e,n.height)}else{let e=n.nextY+o,t=p(Math.max(e,n.height*1.5),v);if(t>n.height)this._resizeAtlas(n.width,t);else if(n.width<v){let e=p(n.width*1.5,v);this._resizeAtlas(e,n.height)}}this._elements.set(t,e)}}_renderElement(e){let t=e.commitNewPosition(),n=e.textRenderer;this._ctx.clearRect(t[0]-b,t[1]-b,n.renderedWidth+2*b,n.renderedHeight+2*b),n.render(this._ctx,t[0],t[1]),this._uvCallbacks.get(n.key)?.forEach(t=>t(e.uv))}get readyToRun(){return this.updating}runTask(e){if(this._texture==null)return h;for(;this._needsRepack&&(this._canRepack||this._atlas.height<v&&this._atlas.height<v);){this._canRepack=this._needsRepack=!1;let t=this._elements;this._elements=new Map,t.forEach(e=>this._processAddition(e)),e.madeProgress()}if(this._elementsToRender.size>0){for(let[t,n]of this._elementsToRender){if(e.done)break;this._renderElement(n),this._elementsToRender.delete(t),e.madeProgress()}this._texture.setData(this._canvas)}this.updating=this._elementsToRender.size>0}addText(e,t){let n=e.key;this._addCallback(n,t);let r=this._elements.get(n);return r?c(r.uv,u)||t(r.uv):(r=new S(e),this._processAddition(r),this.setDirty()),{remove:()=>this._removeText(e,t)}}_removeText(e,t){let n=e.key;this._elements.get(n)&&this._removeCallback(n,t)&&(this._elements.delete(n),this._elementsToRender.delete(n),this._canRepack=!0)}setDirty(){this._texture&&(this.updating=!0)}get test(){}get usedMemory(){return(this._texture?.usedMemory??0)+(this._canvas?.width??0)*(this._canvas?.height??0)*4}};e([o({constructOnly:!0})],y.prototype,`view`,void 0),e([o({type:Boolean})],y.prototype,`updating`,void 0),y=e([s(`esri.views.3d.webgl-engine.lib.TextTextureAtlas`)],y);const b=2,x=2;class S{constructor(e){this.textRenderer=e,this._uv=d(),this._newPosition=[0,0]}get uv(){if(this._xOffset==null||this._yOffset==null)return u;let{renderedWidth:e,renderedHeight:t}=this.textRenderer;return l(this._uv,this._xOffset,this._yOffset+t,this._xOffset+e,this._yOffset)}setNewPosition(e){this._newPosition[0]=e.x,this._newPosition[1]=e.y}commitNewPosition(){return this._xOffset=this._newPosition[0],this._yOffset=this._newPosition[1],this._newPosition}get xOffset(){return this._xOffset}get yOffset(){return this._yOffset}}class C{constructor(e,t){this.width=e,this.height=t,this.cursors=new Map,this.nextY=0}reset(){this.cursors.clear(),this.nextY=T}}class w{constructor(e){this.y=e,this.x=T}}let T=0;export{y as TextTextureAtlas};
2
+ import{__decorate as e}from"tslib";import t from"../../../../core/Accessor.js";import{EventEmitter as n}from"../../../../core/Evented.js";import"../../../../core/has.js";import{disposeMaybe as r,removeMaybe as i}from"../../../../core/maybe.js";import{generateUID as a}from"../../../../core/uid.js";import{property as o,subclass as s}from"../../../../core/accessorSupport/decorators.js";import{exactEquals as c,set as l}from"../../../../core/libs/gl-matrix-2/math/vec4.js";import{ZEROS as u,create as d}from"../../../../core/libs/gl-matrix-2/factories/vec4f64.js";import{textTextureAtlas as f}from"./testUtils.js";import{applyTextureResizeModuloCeil as p}from"./textureUtils.js";import{TaskPriority as m}from"../../../support/Scheduler.js";import{Yield as h}from"../../../support/Yield.js";import g from"../../../webgl/Texture.js";import{TextureDescriptor as _}from"../../../webgl/TextureDescriptor.js";const v=4096;let y=class extends t{constructor(e){super(e),this.id=a(),this.events=new n,this._texture=null,this._atlas=new C(256,256),this._needsRepack=!1,this._needsCleanup=!1,this._canRepack=!0,this._elementsToRender=new Map,this._elements=new Map,this._uvCallbacks=new Map,this.updating=!1}initialize(){this._stage=this.view.stage,this._stage.addTexture(this),this._updateCanvasElementSize(this._atlas),this._reset()}unload(){this._texture=r(this._texture),this._frameWorker=i(this._frameWorker),this.updating=!1,this.events.emit(`unloaded`)}get loaded(){return this._texture!=null}get texture(){return this._texture}static get maxSize(){return T=f.stableRendering?b:0,[v-b-T,v-b-T-x]}load(e){if(this._texture)return this._texture;let t=new _;return t.wrapMode=33071,t.samplingMode=9987,t.hasMipmap=!0,t.preMultiplyAlpha=!0,t.maxAnisotropy=e.parameters.maxMaxAnisotropy,this._texture=new g(e,t,this._canvas),this._frameWorker=this.view.resourceController.scheduler.registerTask(m.TEXT_TEXTURE_ATLAS,this),this.setDirty(),this._texture}dispose(){this._elements.clear(),this._elementsToRender.clear(),this._frameWorker=i(this._frameWorker),this._texture&&=(this._stage.removeTexture(this),r(this._texture)),this._canvas.width=0,this._canvas.height=0,this._canvas=null,this._ctx=null}_updateCanvasElementSize(e){let t=this._canvas;this._canvas=document.createElement(`canvas`),this._canvas.setAttribute(`id`,`textAtlasCanvas`),this._canvas.setAttribute(`style`,`display:none`),this._canvas.width=e.width,this._canvas.height=e.height,this._ctx=this._canvas.getContext(`2d`),t&&(this._ctx.drawImage(t,0,0),t.width=t.height=0)}_resizeAtlas(e,t){(this._atlas.width!==e||this._atlas.height!==t)&&(this._atlas.width=e,this._atlas.height=t,this._reset())}_reset(){this._needsCleanup||=this._elements.size>0||this._atlas.cursors.size>0,this._elementsToRender.clear(),this._atlas.reset(),this._needsRepack=!0,this.setDirty()}_addAtlasElement(e,t,n,r){let i=this._atlas;if(i.width<n||i.height<r)return!1;let a=i.cursors.get(r);if(!a){if(i.height<i.nextY+r)return!1;a=[new w(i.nextY)],i.cursors.set(r,a),i.nextY+=r}let o=a.find(e=>i.width>=e.x+n);if(o==null){if(i.height<i.nextY+r)return!1;o=new w(i.nextY),i.nextY+=r,a.push(o)}return e.setNewPosition(o),this._elements.set(t,e),this._elementsToRender.set(t,e),o.x+=n,!0}_ensureCallbacks(e){let t=this._uvCallbacks.get(e);if(t)return t;let n=new Set;return this._uvCallbacks.set(e,n),n}_addCallback(e,t){this._ensureCallbacks(e).add(t)}_removeCallback(e,t){let n=this._uvCallbacks.get(e);return n?.delete(t)&&n.size===0?(this._uvCallbacks.delete(e),!0):!1}_processAddition(e){let t=e.textRenderer.key;if(this._needsRepack){this._elements.set(t,e);return}let n=this._atlas,r=e.textRenderer.renderedWidth,i=e.textRenderer.renderedHeight,a=r+b,o=i+b+x;if(!this._addAtlasElement(e,t,a,o)){if(this._canRepack)this._reset();else if(n.width<a){let e=p(Math.max(a,n.width*1.5),v);this._resizeAtlas(e,n.height)}else{let e=n.nextY+o,t=p(Math.max(e,n.height*1.5),v);if(t>n.height)this._resizeAtlas(n.width,t);else if(n.width<v){let e=p(n.width*1.5,v);this._resizeAtlas(e,n.height)}}this._elements.set(t,e)}}_renderElement(e){let t=e.commitNewPosition(),n=e.textRenderer;this._ctx.clearRect(t[0]-b,t[1]-b,n.renderedWidth+2*b,n.renderedHeight+2*b),n.render(this._ctx,t[0],t[1]),this._uvCallbacks.get(n.key)?.forEach(t=>t(e.uv))}_clearUnusedPixels(){let e=new Path2D,t=!1;for(let n of this._elements.values()){let{xOffset:r,yOffset:i,textRenderer:a}=n;r!=null&&i!=null&&a.renderedWidth&&a.renderedHeight&&(e.rect(r,i,a.renderedWidth,a.renderedHeight),t=!0)}t?(this._ctx.save(),this._ctx.globalCompositeOperation=`destination-in`,this._ctx.fillStyle=`#000`,this._ctx.fill(e),this._ctx.restore()):this._ctx.clearRect(0,0,this._canvas.width,this._canvas.height),this._needsCleanup=!1}get readyToRun(){return this.updating}runTask(e){if(this._texture==null)return h;for(;this._needsRepack&&(this._canRepack||this._atlas.height<v&&this._atlas.height<v);){this._canRepack=this._needsRepack=!1;let t=this._elements;this._elements=new Map,t.forEach(e=>this._processAddition(e)),e.madeProgress()}let t=this._canvas.height,n=0,{width:r,height:i}=this._atlas;(this._canvas.width!==r||this._canvas.height!==i)&&(this._updateCanvasElementSize(this._atlas),this._texture.clearMipmap(),this._texture.resize(r,i),t=0,n=i,this._elements.forEach(e=>this._uvCallbacks.get(e.textRenderer.key)?.forEach(t=>t(e.uv))));for(let[r,i]of this._elementsToRender){if(e.done)break;this._renderElement(i);let a=i.yOffset;t=Math.min(t,Math.max(0,a-b)),n=Math.max(n,Math.min(this._canvas.height,a+i.textRenderer.renderedHeight+b)),this._elementsToRender.delete(r),e.madeProgress()}this._needsCleanup&&this._elementsToRender.size===0&&(this._clearUnusedPixels(),t=0,n=this._canvas.height),t<n&&(this._texture.updateData(0,0,t,this._canvas.width,n-t,this._canvas,t),this._texture.generateMipmap()),this.updating=this._elementsToRender.size>0}addText(e,t){let n=e.key;this._addCallback(n,t);let r=this._elements.get(n);return r?c(r.uv,u)||t(r.uv):(r=new S(e),this._processAddition(r),this.setDirty()),{remove:()=>this._removeText(e,t)}}_removeText(e,t){let n=e.key;this._elements.get(n)&&this._removeCallback(n,t)&&(this._elements.delete(n),this._elementsToRender.delete(n),this._canRepack=!0)}setDirty(){this._texture&&(this.updating=!0)}get test(){}get usedMemory(){return(this._texture?.usedMemory??0)+(this._canvas?.width??0)*(this._canvas?.height??0)*4}};e([o({constructOnly:!0})],y.prototype,`view`,void 0),e([o({type:Boolean})],y.prototype,`updating`,void 0),y=e([s(`esri.views.3d.webgl-engine.lib.TextTextureAtlas`)],y);const b=2,x=2;class S{constructor(e){this.textRenderer=e,this._uv=d(),this._newPosition=[0,0]}get uv(){if(this._xOffset==null||this._yOffset==null)return u;let{renderedWidth:e,renderedHeight:t}=this.textRenderer;return l(this._uv,this._xOffset,this._yOffset+t,this._xOffset+e,this._yOffset)}setNewPosition(e){this._newPosition[0]=e.x,this._newPosition[1]=e.y}commitNewPosition(){return this._xOffset=this._newPosition[0],this._yOffset=this._newPosition[1],this._newPosition}get xOffset(){return this._xOffset}get yOffset(){return this._yOffset}}class C{constructor(e,t){this.width=e,this.height=t,this.cursors=new Map,this.nextY=0}reset(){this.cursors.clear(),this.nextY=T}}class w{constructor(e){this.y=e,this.x=T}}let T=0;export{y as TextTextureAtlas};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import{isSome as t}from"../../../../../core/arrayUtils.js";import n from"../../../../../core/Error.js";import{someMap as r,getOrCreateMapValue as i}from"../../../../../core/MapUtils.js";import{destroyMaybe as a}from"../../../../../core/maybe.js";import{isAborted as o,throwIfAborted as s}from"../../../../../core/promiseUtils.js";import{property as c,subclass as l}from"../../../../../core/accessorSupport/decorators.js";import{create as u}from"../../../../../core/libs/gl-matrix-2/factories/mat4f64.js";import{subtract as d,dot as f,transformMat4 as p}from"../../../../../core/libs/gl-matrix-2/math/vec3.js";import{create as m}from"../../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{create as h,freeze as g}from"../../../../../core/libs/gl-matrix-2/factories/vec4f64.js";import{debugFlags as _}from"../../../support/debugFlags.js";import{glLayout as v}from"../../../support/buffer/glUtil.js";import y from"../../../webgl/RenderCamera.js";import{isColor as b}from"../../core/shaderLibrary/ShaderOutput.js";import{AsyncRenderPlugin as x}from"../../effects/RenderPlugin.js";import{getEmissions as S}from"../../effects/emissive/emissions.js";import{DepthRange as C}from"../DepthRange.js";import{assert as w}from"../Util.js";import{InstanceData as T}from"./InstanceData.js";import{InstanceOctree as E}from"./InstanceOctree.js";import{LevelSelector as D}from"./LevelSelector.js";import{LodLevel as O}from"./LodLevel.js";import{getRenderInstanceDataLayout as k,RenderInstanceData as A}from"./RenderInstanceData.js";import{colorMixModes as j}from"../../materials/internal/MaterialUtil.js";import{encodeDoubleVec3 as M}from"../../materials/renderers/utils.js";import{DefaultMaterialDrawParameters as N}from"../../shaders/DefaultMaterialTechnique.js";import{defaultHighlightName as P}from"../../../../support/HighlightDefaults.js";import{TaskPriority as F,noBudget as I}from"../../../../support/Scheduler.js";import{bindVertexBufferLayout as L}from"../../../../webgl/Util.js";import{fromLayout as R}from"../../../../webgl/VertexAttributeLocations.js";const z=e=>{let t=e.baseBoundingSphere.radius,n=e.levels.map(e=>e.minScreenSpaceRadius);return new D(t,n)};let B=class extends x{constructor(e,t){super(e),this.type=3,this.isGround=!1,this._levels=[],this._defaultRenderInstanceData=[],this._highlightRenderInstanceDatas=new Map,this._instanceIndex=0,this._cycleStartIndex=0,this._slicePlane=!1,this._camera=new y,this._updateCyclesWithStaticCamera=-1,this._needFullCycle=!1,this.produces=new Map([[2,e=>this._produces(e)],[4,e=>this._hasTransparentLevels()?this._produces(e):!1]]),this._instanceData=new T({shaderTransformation:e.shaderTransformation},e.symbol.materialParameters),this.addHandles(t.registerTask(F.LOD_RENDERER,this))}initialize(){this._instanceBufferLayout=k(this.symbol.materialParameters),this._glInstanceBufferLayout=v(this._instanceBufferLayout,1),this.addHandles([this._instanceData.events.on(`instances-changed`,()=>this._requestUpdateCycle()),this._instanceData.events.on(`instance-transform-changed`,({index:e})=>{this._requestUpdateCycle(),this.metadata.notifyGraphicGeometryChanged(e)}),this._instanceData.events.on(`instance-visibility-changed`,({index:e})=>{this._requestUpdateCycle(!0),this.metadata.notifyGraphicVisibilityChanged(e)}),this._instanceData.events.on(`instance-highlight-changed`,()=>this._requestUpdateCycle(!0))])}get _allRenderInstanceData(){return[this._defaultRenderInstanceData,...this._highlightRenderInstanceDatas.values()]}get _allRenderInstanceDataExceptHighlightShadow(){let e=[this._defaultRenderInstanceData];for(let t of this._highlightRenderInstanceDatas)t[0]!==P&&e.push(t[1]);return e}hasHighlight(e){return this._highlightRenderInstanceDatas.has(e)}get _enableLevelSelection(){return this.symbol.levels.length>1}get levels(){return this._levels}get baseBoundingBox(){return this._levels[this._levels.length-1].boundingBox}get baseBoundingSphere(){return this._levels[this._levels.length-1].boundingSphere}get baseMaterial(){return this._levels[this._levels.length-1].components[0].material}get slicePlaneEnabled(){return this._slicePlane}set slicePlaneEnabled(e){this._slicePlane=e}get layerViewUid(){return this.metadata.layerViewUid}get instanceData(){return this._instanceData}get emissions(){return S(this._levels)}get usedMemory(){return this._allRenderInstanceData.reduce((e,t)=>t.reduce((e,t)=>e+t.usedMemory,e),this._levels.reduce((e,t)=>e+t.components.reduce((e,t)=>e+t.usedMemory,0),0))}get renderStats(){let e=this._instanceData.size,t=[];return this._levels.forEach((e,n)=>{let r=this._allRenderInstanceData[0][n].size+this._allRenderInstanceData[1][n].size,i=e.triangleCount;t.push({renderedInstances:r,renderedTriangles:r*i,trianglesPerInstance:i})}),{totalInstances:e,renderedInstances:t.reduce((e,t)=>e+t.renderedInstances,0),renderedTriangles:t.reduce((e,t)=>e+t.renderedTriangles,0),levels:t}}_createRenderInstanceDataArray(){let{rctx:e}=this._context.renderContext;return this.symbol.levels.map(t=>new A(e,this._instanceBufferLayout))}async initializeRenderContext(e,n){this._context=e,this._defaultRenderInstanceData=this._createRenderInstanceDataArray();let r=await Promise.allSettled(this.symbol.levels.map(t=>O.create(e,t,n))),i=r.map(e=>e.status===`fulfilled`?e.value:null).filter(t);if(o(n)||i.length!==r.length){i.forEach(e=>e.destroy()),s(n);for(let e of r)if(e.status===`rejected`)throw e.reason}this._levels=i,this._levelSelector=z(this)}uninitializeRenderContext(){this._invalidateOctree(),this._levels.forEach(e=>e.destroy()),this._defaultRenderInstanceData.forEach(e=>e.destroy()),this._highlightRenderInstanceDatas.forEach(e=>e.forEach(e=>e.destroy()))}_hasTransparentLevels(){return this._levels.some(e=>e.components.some(e=>e.material.produces.get(4)?.(0)))}hasHighlights(){return r(this._highlightRenderInstanceDatas,e=>e.some(e=>e.size>0))}_produces(e){return(e!==10||this.hasHighlights())&&(e!==6||this.hasHighlight(P))}prepareRender(e){if(!_.LOD_INSTANCE_RENDERER_DISABLE_UPDATES){if(this._enableLevelSelection){let t=e.bind.contentCamera.equals(this._camera);this._camera.copyFrom(e.bind.contentCamera),t||this._requestUpdateCycle()}this._needFullCycle&&=(this.runTask(I),!1)}}acquireTechniques(e){if(!this.baseMaterial.visible||!this.baseMaterial.isVisibleForOutput(e.output))return null;let t=this._getInstanceDatas(e);if(!t)return null;let n=[],r=this.levels;return t.forEach(t=>r.forEach(({components:r},i)=>r.forEach(r=>n.push(this._beginComponent(e,t[i],r))))),n}render(e,t){let n=this._getInstanceDatas(e);if(!n||t==null)return;let r=0,i=this.levels;n.forEach(n=>i.forEach(({components:i},a)=>i.forEach(i=>this._renderComponent(e,t[r++],n[a],i,a)))),e.rctx.unbindBuffer(34962),e.rctx.bindVAO(null)}_getInstanceDatas(e){let{output:t,bind:n}=e,r=t===10,i=t===6,a=!r&&!i,o=t!==7;if(a)return o?this._allRenderInstanceData:this._allRenderInstanceDataExceptHighlightShadow;let{_highlightRenderInstanceDatas:s}=this;if(o){if(r){let e=n.highlight?.name;if(!e)return null;let t=s.get(e);return t?[t]:null}let e=s.get(P);return i?e?[e]:null:Array.from(s.values())}return null}intersectRay(e,t,n,r){if(!this.baseMaterial.visible||this._octree==null)return;let i=m();d(i,r,n);let a=i=>{let a=this._setupIntersectableInstance(e,i);a&&(p(K,n,e.transform.inverse),p(q,r,e.transform.inverse),a.intersect(e,t,K,q,i,this.metadata,this._levels.length))};this.baseMaterial.parameters.verticalOffset?this._octree.forEach(a):this._octree.forEachAlongRay(n,i,a)}*intersectScreenPolygon(e,t){if(!this.baseMaterial.visible||this._octree==null)return;let n=this.baseMaterial.parameters.verticalOffset?this._octree.values():this._octree.intersectingFrustumValues(t.broadPhaseFrustum,e=>!!(this._instanceData.getState(e)&4));for(let r of n)yield*this._intersectScreenPolygonInstance(e,t,r)}*_intersectScreenPolygonInstance(e,t,n){let r=this._setupIntersectableInstance(e,n);r&&(yield*r.intersectScreenPolygon(e,t,n,this.metadata,this._levels.length))}_setupIntersectableInstance(e,t){let n=this._instanceData.getState(t);if(!(n&4))return null;let r=this._instanceData.getLodLevel(t),i=this._levels.length;w(!!(n&18),`invalid instance state`),w(r>=0&&r<i,`invaid lod level`);let a=this._levels[r];return a==null?null:(this._instanceData.getCombinedModelTransform(t,G),e.transform.set(G),a)}notifyShaderTransformationChanged(){this._invalidateOctree(),this._requestUpdateCycle()}get _octree(){if(this._octreeCached==null){let e=this._instanceData,t=e.view?.state;if(!t)return null;this._octreeCached=new E(e,this.baseBoundingSphere);for(let n=0;n<e.capacity;++n)t.get(n)&18&&this._octreeCached.addInstance(n)}return this._octreeCached}_invalidateOctree(){this._octreeCached=a(this._octreeCached)}queryDepthRange(e){if(this._octree==null)return new C;let t=e.viewForward,n=this._octree.findClosest(t,1,e.frustum),r=this._octree.findClosest(t,-1,e.frustum);if(n==null||r==null)return new C;let i=e.eye,a=this._instanceData.view;a.boundingSphere.getVec(n,W),d(W,W,i);let o=f(W,t)-W[3];a.boundingSphere.getVec(r,W),d(W,W,i);let s=f(W,t)+W[3];return new C(o,s)}_requestUpdateCycle(e=!1){this._updateCyclesWithStaticCamera=-1,this._cycleStartIndex=this._instanceIndex,e&&(this._needFullCycle=!0,this._context.requestRender())}_startUpdateCycle(){this._updateCyclesWithStaticCamera++,this._allRenderInstanceData.forEach(e=>e.forEach(e=>e.startUpdateCycle()))}get readyToRun(){return this._instanceData.size>0&&this._updateCyclesWithStaticCamera<1}runTask(e){let{_enableLevelSelection:t,_camera:r,_levelSelector:a}=this;this._allRenderInstanceData.forEach(e=>e.forEach(e=>e.beginUpdate()));let o=this._instanceData,s=o.view,c=o.size,l=o.capacity,u=this._instanceIndex,d=Math.ceil(l/500),{_highlightRenderInstanceDatas:f}=this;for(let p=0;p<c&&!e.done;++p){u===this._cycleStartIndex&&this._startUpdateCycle();let p=s.state.get(u),m=0;if(!(p&1)){u=u+1===l?0:u+1,c++;continue}let h=s.lodLevel.get(u);if(p&2&&this._defaultRenderInstanceData[h].freeTail(),p&16){let e=o.geHighlightOptionsPrev(u);if(e){let t=f.get(e);if(t)t[h].freeTail(),t.every(e=>e.isEmpty)&&(t.forEach(e=>e.destroy()),f.delete(e));else throw new n(`internal:lod-renderer`,`Internal error in lodRenderer`)}}if(p&32)o.freeInstance(u);else if(p&4){let e=0;if(t&&(s.modelOrigin.getVec(u,U),e=a.selectLevel(U,o.getCombinedMedianScaleFactor(u),r)),m=p&-83,e>=0){if(p&8){let t=o.getHighlightName(u);if(t){let r=i(f,t,()=>{let e=this._createRenderInstanceDataArray();return e.forEach(e=>e.beginUpdate()),e});if(e>=r.length)throw new n(`internal:lod-renderer`,`LodRenderer internal error - missing lodLevel ${e}`);V(r[e],s,u)}m|=16}else V(this._defaultRenderInstanceData[e],s,u),m|=2}s.state.set(u,m),s.lodLevel.set(u,e)}else m=p&-83,s.state.set(u,m);let g=!!(p&18),_=!!(m&18);this._octreeCached!=null&&(!g&&_?this._octreeCached.addInstance(u):g&&!_?this._octreeCached.removeInstance(u):g&&_&&p&64&&(this._octreeCached.removeInstance(u),this._octreeCached.addInstance(u))),u=u+1===l?0:u+1,u%d===0&&e.madeProgress(),g!==_&&this.metadata.notifyGraphicVisibilityChanged(u),_&&p&64&&this.metadata.notifyGraphicGeometryChanged(u)}this._instanceIndex=u,this._allRenderInstanceData.forEach(e=>e.forEach(e=>e.endUpdate())),this._context.requestRender()}_beginComponent(e,t,n){return t.size===0?null:n.glMaterialLoader.load(e.rctx,e.bind.slot,e.output)?.beginSlot(e.bind)}_renderComponent(e,t,n,r,i){if(!t)return;let{bind:a,rctx:o}=e,s=o.bindTechnique(t,a,r.material.parameters,Y),c=this._glInstanceBufferLayout;s.assertCompatibleVertexAttributeLocations(r.vao,R(c)),o.bindVAO(r.vao),_.LOD_INSTANCE_RENDERER_COLORIZE_BY_LEVEL&&b(e.output)&&(s.setUniform4fv(`externalColor`,J[Math.min(i,J.length-1)]),s.setUniform1i(`symbolColorMixMode`,j.replace));let l=n.capacity,u=n.headIndex,d=n.tailIndex,f=n.firstIndex,p=(e,i)=>{L(o,s.locations,n.buffer,e),o.drawArraysInstanced(t.primitiveType,0,r.numVertices,i-e)};r.material.transparent&&f!=null?u>d?(w(f>=d&&f<=u,`invalid firstIndex`),p(f,u),p(d,f)):u<d&&(f<=u?(w(f>=0&&f<=u,`invalid firstIndex`),p(f,u),p(d,l),p(0,f)):(w(f>=d&&f<=l,`invalid firstIndex`),p(f,l),p(0,u),p(d,f))):u>d?p(d,u):u<d&&(p(0,u),p(d,l))}};e([c({constructOnly:!0})],B.prototype,`symbol`,void 0),e([c({constructOnly:!0})],B.prototype,`metadata`,void 0),e([c({constructOnly:!0})],B.prototype,`shaderTransformation`,void 0),e([c()],B.prototype,`_instanceData`,void 0),e([c()],B.prototype,`_cycleStartIndex`,void 0),e([c({readOnly:!0})],B.prototype,`_enableLevelSelection`,null),e([c()],B.prototype,`_updateCyclesWithStaticCamera`,void 0),e([c({readOnly:!0})],B.prototype,`readyToRun`,null),B=e([l(`esri.views.3d.webgl-engine.lib.lodRendering.LodRenderer`)],B);function V(e,t,n){let r=e.allocateHead();H(t,n,e.view,r)}function H(e,t,n,r){M(e.modelOrigin,t,n.modelOriginHi,n.modelOriginLo,r),n.model.copyFrom(r,e.model,t),n.modelNormal.copyFrom(r,e.modelNormal,t),e.color&&n.color&&n.color.copyFrom(r,e.color,t),e.olidColor&&n.olidColor&&n.olidColor.copyFrom(r,e.olidColor,t),e.featureAttribute&&n.featureAttribute&&n.featureAttribute.copyFrom(r,e.featureAttribute,t)}const U=m(),W=h(),G=u(),K=m(),q=m(),J=[g(1,0,1,1),g(0,0,1,1),g(0,1,0,1),g(1,1,0,1),g(1,0,0,1)],Y=new N;export{B as LodRenderer};
2
+ import{__decorate as e}from"tslib";import{isSome as t}from"../../../../../core/arrayUtils.js";import n from"../../../../../core/Error.js";import{someMap as r,getOrCreateMapValue as i}from"../../../../../core/MapUtils.js";import{destroyMaybe as a}from"../../../../../core/maybe.js";import{isAborted as o,throwIfAborted as s}from"../../../../../core/promiseUtils.js";import{property as c,subclass as l}from"../../../../../core/accessorSupport/decorators.js";import{create as u}from"../../../../../core/libs/gl-matrix-2/factories/mat4f64.js";import{subtract as d,dot as f,transformMat4 as p}from"../../../../../core/libs/gl-matrix-2/math/vec3.js";import{create as m}from"../../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{create as h,freeze as g}from"../../../../../core/libs/gl-matrix-2/factories/vec4f64.js";import{debugFlags as _}from"../../../support/debugFlags.js";import{glLayout as v}from"../../../support/buffer/glUtil.js";import y from"../../../webgl/RenderCamera.js";import{isColor as b}from"../../core/shaderLibrary/ShaderOutput.js";import{AsyncRenderPlugin as x}from"../../effects/RenderPlugin.js";import{getEmissions as S}from"../../effects/emissive/emissions.js";import{DepthRange as C}from"../DepthRange.js";import{assert as w}from"../Util.js";import{InstanceData as T}from"./InstanceData.js";import{InstanceOctree as E}from"./InstanceOctree.js";import{LevelSelector as D}from"./LevelSelector.js";import{LodLevel as O}from"./LodLevel.js";import{getRenderInstanceDataLayout as k,RenderInstanceData as A}from"./RenderInstanceData.js";import{colorMixModes as j}from"../../materials/internal/MaterialUtil.js";import{encodeDoubleVec3 as M}from"../../materials/renderers/utils.js";import{DefaultMaterialDrawParameters as N}from"../../shaders/DefaultMaterialTechnique.js";import{defaultHighlightName as P}from"../../../../support/HighlightDefaults.js";import{TaskPriority as F,noBudget as I}from"../../../../support/Scheduler.js";import{bindVertexBufferLayout as L}from"../../../../webgl/Util.js";import{fromLayout as R}from"../../../../webgl/VertexAttributeLocations.js";const z=e=>{let t=e.baseBoundingSphere.radius,n=e.levels.map(e=>e.minScreenSpaceRadius);return new D(t,n)};let B=class extends x{constructor(e,t){super(e),this.type=3,this.isGround=!1,this._levels=[],this._defaultRenderInstanceData=[],this._highlightRenderInstanceDatas=new Map,this._instanceIndex=0,this._cycleStartIndex=0,this._slicePlane=!1,this._camera=new y,this._updateCyclesWithStaticCamera=-1,this._needFullCycle=!1,this.produces=new Map([[2,e=>this._produces(e)],[4,e=>this._hasTransparentLevels()?this._produces(e):!1]]),this._instanceData=new T({shaderTransformation:e.shaderTransformation},e.symbol.materialParameters),this.addHandles(t.registerTask(F.LOD_RENDERER,this))}initialize(){this._instanceBufferLayout=k(this.symbol.materialParameters),this._glInstanceBufferLayout=v(this._instanceBufferLayout,1),this.addHandles([this._instanceData.events.on(`instances-changed`,()=>this._requestUpdateCycle()),this._instanceData.events.on(`instance-transform-changed`,({index:e})=>{this._requestUpdateCycle(),this.metadata.notifyGraphicGeometryChanged(e)}),this._instanceData.events.on(`instance-visibility-changed`,({index:e})=>{this._requestUpdateCycle(!0),this.metadata.notifyGraphicVisibilityChanged(e)}),this._instanceData.events.on(`instance-highlight-changed`,()=>this._requestUpdateCycle(!0))])}get _allRenderInstanceData(){return[this._defaultRenderInstanceData,...this._highlightRenderInstanceDatas.values()]}get _allRenderInstanceDataExceptHighlightShadow(){let e=[this._defaultRenderInstanceData];for(let t of this._highlightRenderInstanceDatas)t[0]!==P&&e.push(t[1]);return e}hasHighlight(e){return this._highlightRenderInstanceDatas.has(e)}get _enableLevelSelection(){return this.symbol.levels.length>1}get levels(){return this._levels}get baseBoundingBox(){return this._levels[this._levels.length-1].boundingBox}get baseBoundingSphere(){return this._levels[this._levels.length-1].boundingSphere}get baseMaterial(){return this._levels[this._levels.length-1].components[0].material}get slicePlaneEnabled(){return this._slicePlane}set slicePlaneEnabled(e){this._slicePlane=e}get layerViewUid(){return this.metadata.layerViewUid}get instanceData(){return this._instanceData}get emissions(){return this._allRenderInstanceData.some(e=>e.some(({size:e})=>e>0))?S(this._levels):0}get usedMemory(){return this._allRenderInstanceData.reduce((e,t)=>t.reduce((e,t)=>e+t.usedMemory,e),this._levels.reduce((e,t)=>e+t.components.reduce((e,t)=>e+t.usedMemory,0),0))}get renderStats(){let e=this._instanceData.size,t=[];return this._levels.forEach((e,n)=>{let r=this._allRenderInstanceData[0][n].size+this._allRenderInstanceData[1][n].size,i=e.triangleCount;t.push({renderedInstances:r,renderedTriangles:r*i,trianglesPerInstance:i})}),{totalInstances:e,renderedInstances:t.reduce((e,t)=>e+t.renderedInstances,0),renderedTriangles:t.reduce((e,t)=>e+t.renderedTriangles,0),levels:t}}_createRenderInstanceDataArray(){let{rctx:e}=this._context.renderContext;return this.symbol.levels.map(t=>new A(e,this._instanceBufferLayout))}async initializeRenderContext(e,n){this._context=e,this._defaultRenderInstanceData=this._createRenderInstanceDataArray();let r=await Promise.allSettled(this.symbol.levels.map(t=>O.create(e,t,n))),i=r.map(e=>e.status===`fulfilled`?e.value:null).filter(t);if(o(n)||i.length!==r.length){i.forEach(e=>e.destroy()),s(n);for(let e of r)if(e.status===`rejected`)throw e.reason}this._levels=i,this._levelSelector=z(this)}uninitializeRenderContext(){this._invalidateOctree(),this._levels.forEach(e=>e.destroy()),this._defaultRenderInstanceData.forEach(e=>e.destroy()),this._highlightRenderInstanceDatas.forEach(e=>e.forEach(e=>e.destroy()))}_hasTransparentLevels(){return this._levels.some(e=>e.components.some(e=>e.material.produces.get(4)?.(0)))}hasHighlights(){return r(this._highlightRenderInstanceDatas,e=>e.some(e=>e.size>0))}_produces(e){return(e!==10||this.hasHighlights())&&(e!==6||this.hasHighlight(P))}prepareRender(e){if(!_.LOD_INSTANCE_RENDERER_DISABLE_UPDATES){if(this._enableLevelSelection){let t=e.bind.contentCamera.equals(this._camera);this._camera.copyFrom(e.bind.contentCamera),t||this._requestUpdateCycle()}this._needFullCycle&&=(this.runTask(I),!1)}}acquireTechniques(e){if(!this.baseMaterial.visible||!this.baseMaterial.isVisibleForOutput(e.output))return null;let t=this._getInstanceDatas(e);if(!t)return null;let n=[],r=this.levels;return t.forEach(t=>r.forEach(({components:r},i)=>r.forEach(r=>n.push(this._beginComponent(e,t[i],r))))),n}render(e,t){let n=this._getInstanceDatas(e);if(!n||t==null)return;let r=0,i=this.levels;n.forEach(n=>i.forEach(({components:i},a)=>i.forEach(i=>this._renderComponent(e,t[r++],n[a],i,a)))),e.rctx.unbindBuffer(34962),e.rctx.bindVAO(null)}_getInstanceDatas(e){let{output:t,bind:n}=e,r=t===10,i=t===6,a=!r&&!i,o=t!==7;if(a)return o?this._allRenderInstanceData:this._allRenderInstanceDataExceptHighlightShadow;let{_highlightRenderInstanceDatas:s}=this;if(o){if(r){let e=n.highlight?.name;if(!e)return null;let t=s.get(e);return t?[t]:null}let e=s.get(P);return i?e?[e]:null:Array.from(s.values())}return null}intersectRay(e,t,n,r){if(!this.baseMaterial.visible||this._octree==null)return;let i=m();d(i,r,n);let a=i=>{let a=this._setupIntersectableInstance(e,i);a&&(p(K,n,e.transform.inverse),p(q,r,e.transform.inverse),a.intersect(e,t,K,q,i,this.metadata,this._levels.length))};this.baseMaterial.parameters.verticalOffset?this._octree.forEach(a):this._octree.forEachAlongRay(n,i,a)}*intersectScreenPolygon(e,t){if(!this.baseMaterial.visible||this._octree==null)return;let n=this.baseMaterial.parameters.verticalOffset?this._octree.values():this._octree.intersectingFrustumValues(t.broadPhaseFrustum,e=>!!(this._instanceData.getState(e)&4));for(let r of n)yield*this._intersectScreenPolygonInstance(e,t,r)}*_intersectScreenPolygonInstance(e,t,n){let r=this._setupIntersectableInstance(e,n);r&&(yield*r.intersectScreenPolygon(e,t,n,this.metadata,this._levels.length))}_setupIntersectableInstance(e,t){let n=this._instanceData.getState(t);if(!(n&4))return null;let r=this._instanceData.getLodLevel(t),i=this._levels.length;w(!!(n&18),`invalid instance state`),w(r>=0&&r<i,`invaid lod level`);let a=this._levels[r];return a==null?null:(this._instanceData.getCombinedModelTransform(t,G),e.transform.set(G),a)}notifyShaderTransformationChanged(){this._invalidateOctree(),this._requestUpdateCycle()}get _octree(){if(this._octreeCached==null){let e=this._instanceData,t=e.view?.state;if(!t)return null;this._octreeCached=new E(e,this.baseBoundingSphere);for(let n=0;n<e.capacity;++n)t.get(n)&18&&this._octreeCached.addInstance(n)}return this._octreeCached}_invalidateOctree(){this._octreeCached=a(this._octreeCached)}queryDepthRange(e){if(this._octree==null)return new C;let t=e.viewForward,n=this._octree.findClosest(t,1,e.frustum),r=this._octree.findClosest(t,-1,e.frustum);if(n==null||r==null)return new C;let i=e.eye,a=this._instanceData.view;a.boundingSphere.getVec(n,W),d(W,W,i);let o=f(W,t)-W[3];a.boundingSphere.getVec(r,W),d(W,W,i);let s=f(W,t)+W[3];return new C(o,s)}_requestUpdateCycle(e=!1){this._updateCyclesWithStaticCamera=-1,this._cycleStartIndex=this._instanceIndex,e&&(this._needFullCycle=!0,this._context.requestRender())}_startUpdateCycle(){this._updateCyclesWithStaticCamera++,this._allRenderInstanceData.forEach(e=>e.forEach(e=>e.startUpdateCycle()))}get readyToRun(){return this._instanceData.size>0&&this._updateCyclesWithStaticCamera<1}runTask(e){let{_enableLevelSelection:t,_camera:r,_levelSelector:a}=this;this._allRenderInstanceData.forEach(e=>e.forEach(e=>e.beginUpdate()));let o=this._instanceData,s=o.view,c=o.size,l=o.capacity,u=this._instanceIndex,d=Math.ceil(l/500),{_highlightRenderInstanceDatas:f}=this;for(let p=0;p<c&&!e.done;++p){u===this._cycleStartIndex&&this._startUpdateCycle();let p=s.state.get(u),m=0;if(!(p&1)){u=(u+1)%l,c++;continue}let h=s.lodLevel.get(u);if(p&2&&this._defaultRenderInstanceData[h].freeTail(),p&16){let e=o.geHighlightOptionsPrev(u);if(e){let t=f.get(e);if(t)t[h].freeTail(),t.every(e=>e.isEmpty)&&(t.forEach(e=>e.destroy()),f.delete(e));else throw new n(`internal:lod-renderer`,`Internal error in lodRenderer`)}}if(p&32)o.freeInstance(u);else if(p&4){let e=0;if(t&&(s.modelOrigin.getVec(u,U),e=a.selectLevel(U,o.getCombinedMedianScaleFactor(u),r)),m=p&-83,e>=0){if(p&8){let t=o.getHighlightName(u);if(t){let r=i(f,t,()=>{let e=this._createRenderInstanceDataArray();return e.forEach(e=>e.beginUpdate()),e});if(e>=r.length)throw new n(`internal:lod-renderer`,`LodRenderer internal error - missing lodLevel ${e}`);V(r[e],s,u)}m|=16}else V(this._defaultRenderInstanceData[e],s,u),m|=2}s.state.set(u,m),s.lodLevel.set(u,e)}else m=p&-83,s.state.set(u,m);let g=!!(p&18),_=!!(m&18);this._octreeCached!=null&&(!g&&_?this._octreeCached.addInstance(u):g&&!_?this._octreeCached.removeInstance(u):g&&_&&p&64&&(this._octreeCached.removeInstance(u),this._octreeCached.addInstance(u)));let v=u;u=(u+1)%l,u%d===0&&e.madeProgress(),g!==_&&this.metadata.notifyGraphicVisibilityChanged(v),_&&p&64&&this.metadata.notifyGraphicGeometryChanged(v)}this._instanceIndex=u,this._allRenderInstanceData.forEach(e=>e.forEach(e=>e.endUpdate())),this._context.requestRender()}_beginComponent(e,t,n){return t.size===0?null:n.glMaterialLoader.load(e.rctx,e.bind.slot,e.output)?.beginSlot(e.bind)}_renderComponent(e,t,n,r,i){if(!t)return;let{bind:a,rctx:o}=e,s=o.bindTechnique(t,a,r.material.parameters,Y),c=this._glInstanceBufferLayout;s.assertCompatibleVertexAttributeLocations(r.vao,R(c)),o.bindVAO(r.vao),_.LOD_INSTANCE_RENDERER_COLORIZE_BY_LEVEL&&b(e.output)&&(s.setUniform4fv(`externalColor`,J[Math.min(i,J.length-1)]),s.setUniform1i(`symbolColorMixMode`,j.replace));let l=n.capacity,u=n.headIndex,d=n.tailIndex,f=n.firstIndex,p=(e,i)=>{L(o,s.locations,n.buffer,e),o.drawArraysInstanced(t.primitiveType,0,r.numVertices,i-e)};r.material.transparent&&f!=null?u>d?(w(f>=d&&f<=u,`invalid firstIndex`),p(f,u),p(d,f)):u<d&&(f<=u?(w(f>=0&&f<=u,`invalid firstIndex`),p(f,u),p(d,l),p(0,f)):(w(f>=d&&f<=l,`invalid firstIndex`),p(f,l),p(0,u),p(d,f))):u>d?p(d,u):u<d&&(p(0,u),p(d,l))}};e([c({constructOnly:!0})],B.prototype,`symbol`,void 0),e([c({constructOnly:!0})],B.prototype,`metadata`,void 0),e([c({constructOnly:!0})],B.prototype,`shaderTransformation`,void 0),e([c()],B.prototype,`_instanceData`,void 0),e([c()],B.prototype,`_cycleStartIndex`,void 0),e([c({readOnly:!0})],B.prototype,`_enableLevelSelection`,null),e([c()],B.prototype,`_updateCyclesWithStaticCamera`,void 0),e([c({readOnly:!0})],B.prototype,`readyToRun`,null),B=e([l(`esri.views.3d.webgl-engine.lib.lodRendering.LodRenderer`)],B);function V(e,t,n){let r=e.allocateHead();H(t,n,e.view,r)}function H(e,t,n,r){M(e.modelOrigin,t,n.modelOriginHi,n.modelOriginLo,r),n.model.copyFrom(r,e.model,t),n.modelNormal.copyFrom(r,e.modelNormal,t),e.color&&n.color&&n.color.copyFrom(r,e.color,t),e.olidColor&&n.olidColor&&n.olidColor.copyFrom(r,e.olidColor,t),e.featureAttribute&&n.featureAttribute&&n.featureAttribute.copyFrom(r,e.featureAttribute,t)}const U=m(),W=h(),G=u(),K=m(),q=m(),J=[g(1,0,1,1),g(0,0,1,1),g(0,1,0,1),g(1,1,0,1),g(1,0,0,1)],Y=new N;export{B as LodRenderer};
@@ -222,4 +222,4 @@ export function fromRenderCamera(view: SceneView, camera: RenderCamera): Camera;
222
222
  * @param camera - The input render camera.
223
223
  * @returns The new camera using the spatial reference of the view.
224
224
  */
225
- export function toRenderCamera(view: SceneView, camera: Camera | null | undefined): RenderCamera;
225
+ export function toRenderCamera(view: SceneView, camera: Camera | null | undefined): RenderCamera | null | undefined;
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{__addDisposableResource as e,__disposeResources as t,__decorate as n}from"tslib";import{createTask as r}from"../../core/asyncUtils.js";import{makeHandle as i,disposable as a}from"../../core/handleUtils.js";import o from"../../core/Logger.js";import{getOrCreateMapValue as s}from"../../core/MapUtils.js";import{destroyMaybe as c,abortMaybe as l}from"../../core/maybe.js";import{ignoreAbortErrors as u}from"../../core/promiseUtils.js";import{when as d,initial as f,watch as p,syncAndInitial as ee,on as m,sync as h}from"../../core/reactiveUtils.js";import{screenPointEqual as g,createScreenPoint as _}from"../../core/screenUtils.js";import{diff as v}from"../../core/accessorSupport/diffUtils.js";import{property as y}from"../../core/accessorSupport/decorators/property.js";import{subclass as b}from"../../core/accessorSupport/decorators/subclass.js";import{UpdatingHandles as x}from"../../core/support/UpdatingHandles.js";import te from"../../geometry/Polygon.js";import{simplifyIsSimple as S,simplifyExecute as C}from"../../geometry/operators/simplifyOperator.js";import{isPolygon as w}from"../../geometry/support/typeUtils.js";import{isCurvedGeometry as T}from"../../geometry/support/curves/curveUtils.js";import{densifyCurvedGeometry as E}from"../../geometry/support/curves/densifyCurvedGeometry.js";import{getEffectiveElevationInfo as D}from"../../support/elevationInfoUtils.js";import{getMaxDeviationInPixels as O,getMinSegmentsPerCurve as k}from"../2d/layers/graphics/densificationConstants.js";import{createSnappingVisualizer as A}from"./support/createSnappingVisualizer.js";import{multipointFromGeometry as j,markHandled as M,getPointerType as N,getPointerId as P}from"./support/drawToolUtils.js";import{PluginContext as F}from"./support/PluginContext.js";import{viewEventToCommand as I}from"./support/input/drawToolInput.js";import{EditSessionManager as L}from"./support/managers/EditSessionManager.js";import{GlobalStateManager as R}from"./support/managers/GlobalStateManager.js";import{InteractiveHandleManager as z}from"./support/managers/InteractiveHandleManager.js";import{MeasurementManager as B}from"./support/managers/MeasurementManager.js";import{PluginLifecycleManager as V}from"./support/managers/PluginLifecycleManager.js";import{SurfaceManager as H}from"./support/managers/SurfaceManager.js";import{TooltipManager as U}from"./support/managers/TooltipManager.js";import{ViewEventPriorities as W}from"../input/InputManager.js";import{createCoordinateHelper as G}from"../interactive/coordinateHelper.js";import{InteractiveToolBase as K}from"../interactive/InteractiveToolBase.js";import{KeyBindings as q,mediaKeys as J,sketchKeys as Y,advancedSketchKeys as X,tooltipKeys as Z}from"../interactive/keybindings.js";import{isInputModeAvailable as ne}from"../interactive/tooltip/tooltipCommonUtils.js";const Q=Symbol();let $=class extends K{constructor(e){super(e),this._shapeVisualId=Symbol(),this._vertexVisualId=Symbol(),this._pluginContexts=new Map,this._queuedFeedbackEvents=[],this._flushingQueuedFeedbackEvents=!1,this._commandsSuspended=!1,this._snappingVisualizer=null,this._segmentLabels=null,this._segmentLabelsImportTask=null,this._updatingHandles=new x,this._keybindings=this._makeKeyBindings(),this._pendingBeginRequest=null,this.type=`draw-2.0`,this.automaticManipulatorSelection=!0,this.snappingManager=null,this.toolOptions=null,this.elevationInfo=null,this.hasZ=!1,this.defaultZ=0,this.lastScreenPosition=null,this.measurementManager=new B,this.globalStateManager=new R({getPluginStack:()=>this.pluginStack}),this.editSessionManager=new L({getContext:()=>this._editSessionManagerContext}),this.lifecycleManager=new V({getContext:this._getContextForPlugin.bind(this),editSessionManager:this.editSessionManager,afterAttach:this._afterAttach.bind(this),afterDetach:this._afterDetach.bind(this),beforeResume:this._beforeResume.bind(this)}),this.surfaceManager=null,this.interactiveHandleManager=null,this.renderer=null,this.readPluginSetting=null,this.enableVertexVisuals=!0}initialize(){let{view:e}=this;this.interactiveHandleManager=new z({view:e,renderer:this.renderer}),this._override(`manipulators`,this.interactiveHandleManager.manipulators),this.tooltipManager=new U({getDependencies:()=>this._tooltipDependencies,getLastScreenPosition:()=>this.lastScreenPosition}),this.addHandles(d(()=>this.renderer,t=>{t.addOrUpdateVisual(this._shapeVisualId,{role:`outputGeometry`}),t.addOrUpdateVisual(this._vertexVisualId,{role:`vertex`}),this._updatingHandles.addPromise(A(e,t).then(e=>this._snappingVisualizer=e))},f)),this.addHandles([p(()=>[this.view,this.coordinateHelper.spatialReference,this.defaultZ,this.hasZ,this.elevationInfo],([e,t,n,r,i])=>{this.surfaceManager?.destroy(),this.surfaceManager=new H({spatialReference:t,excludedGraphicsLayer:null,defaultZ:n,hasZ:r,view:e,elevationInfo:i,getContext:()=>({drawAtFixedElevation:this.globalStateManager.drawAtFixedElevation,elevationConstraint:this.tooltipManager?.elevationConstraint,constraintsEnabled:this.tooltipManager?.constraintsEnabled??!1})})},ee),d(()=>this.toolOptions?.tooltips.effectiveEnabled,()=>this.measurementManager.preloadMeasurementUtils(),{once:!0,initial:!0}),p(()=>[this.editGeometryOperations,this.toolOptions?.labels.enabled,this.globalStateManager.segmentLabelsDisabled],()=>{this._updatingHandles.addPromise(this._setupSegmentLabels())},f),m(()=>this.editSessionManager,`cancelPlugin`,({plugin:e})=>{this._suspendPlugin(e)},h),m(()=>this.editSessionManager,`restartPlugin`,({restartInfo:e})=>{this._resumePlugin(e)},h),p(()=>this.lifecycleManager.updating,e=>{e||this._emitQueuedFeedbackEvents()},h),m(()=>this.editGeometryOperations,[`vertex-add`,`vertex-update`,`vertex-remove`],e=>{let t=e.vertices.map(e=>({componentIndex:0,vertexIndex:e.index,coordinates:this.coordinateHelper.vectorToArray(e.pos)})),n=t.map(e=>e.coordinates);switch(e.type){case`vertex-add`:this._emitWhenReady(e.type,{...e,added:n,vertices:t});break;case`vertex-update`:this._emitWhenReady(e.type,{...e,updated:n,vertices:t});break;case`vertex-remove`:this._emitWhenReady(e.type,{...e,removed:n,vertices:t})}})])}destroy(){this.active&&this.onDeactivate(),this.editSessionManager.destroy(),this.lifecycleManager.destroy(),this.measurementManager.destroy(),this.globalStateManager.destroy();for(let e of this._pluginContexts.values())e.destroy();this._pluginContexts.clear(),this.surfaceManager=c(this.surfaceManager),this.interactiveHandleManager=c(this.interactiveHandleManager),this._segmentLabelsImportTask=l(this._segmentLabelsImportTask),this._segmentLabels=c(this._segmentLabels),this.tooltipManager=c(this.tooltipManager)}get _zOfLastUserInput(){let e=(this.mostDownstreamPlugin&&this.editSessionManager.getSession(this.mostDownstreamPlugin))?.firstPointAddedBySession?.point;return e?.hasZ?e.z:null}get _tooltipDependencies(){let{defaultZ:e,editGeometryOperations:t,toolOptions:n,directionOptions:r,elevationInfo:i,view:a}=this;return!t||!n||!a?null:{defaultZ:e,directionOptions:r,elevationInfo:i,editGeometryOperations:t,toolOptions:n,view:a,getActiveHandle:()=>this.interactiveHandleManager?.focusedHandle,getAllHandles:()=>this.interactiveHandleManager?.allhandles,getHelpMessageKey:()=>this.helpMessageKey,notifyTooltipsChanged:()=>{let{interactiveHandleManager:e,movementCommandContext:t}=this;e&&t&&e.reapplyPositions(t)}}}get _editSessionManagerContext(){let{coordinateHelper:e,view:t}=this;return t?{coordinateHelper:e,viewingMode:t.type===`3d`&&t.viewingMode===`global`?1:2}:null}get _densificationParameters(){let{view:e,coordinateHelper:t}=this,n=t.spatialReference,r=e?.spatialReference,i=e.resolution;if(!n||!r||!i||!Number.isFinite(i))return null;let a=r.metersPerUnit/n.metersPerUnit;return{maxDeviation:2**Math.round(Math.log2(i))*O()*a,minSegmentsPerCurve:k()}}get test(){return{densificationParameters:this._densificationParameters,segmentLabels:this._segmentLabels}}get updating(){return this._updatingHandles.updating||this.snappingManager?.updating||this.lifecycleManager.updating||!!this._segmentLabels?.updating}get coordinateHelper(){return G(this.hasZ,!1,this.view.spatialReference)}get editGeometry(){return this.editGeometryOperations?.data}get editGeometryOperations(){return this.editSessionManager.editGeometryOperations}get unprocessedGeometry(){return this.editSessionManager.outputGeometry}get simplifiedGeometryPreview(){let e=this.editSessionManager.outputGeometry;if(e&&w(e))try{let t=this._densificationParameters,n=T(e)&&t?new te({...E(e,t)}):e;if(!S(n))return C(n)}catch{return e}return e}get _suppressCoincidentPointOverlaysIn3D(){return this.view.type===`3d`&&this.unprocessedGeometry?.type===`point`&&!!this.interactiveHandleManager?.allhandles?.find(e=>e.role===`primary`)?.outputMapPosition}get _shapeVisualGeometry(){return this._suppressCoincidentPointOverlaysIn3D?null:this.simplifiedGeometryPreview}get _vertexVisualGeometry(){return this._suppressCoincidentPointOverlaysIn3D?null:this.unprocessedGeometry}get canUndo(){return this.editSessionManager.canUndo}get canRedo(){return this.editSessionManager.canRedo}get pluginStack(){return this.lifecycleManager.pluginStack}get mostDownstreamPlugin(){return this.pluginStack.at(-1)}get mostUpstreamPlugin(){return this.pluginStack.at(0)}get positionOfLastUserInput(){let e=this.lastScreenPosition;return e?this.surfaceManager?.screenToMap(e,{firstPointZ:this._zOfLastUserInput})??this.view.toMap(e):this.view.center}get movementCommandContext(){let{editGeometryOperations:e,tooltipManager:t,surfaceManager:n,snappingManager:r,interactiveHandleManager:i,_snappingVisualizer:a,defaultZ:o,hasZ:s,globalStateManager:{drawAtFixedElevation:c},view:l}=this;return{tooltipManager:t,editGeometryOperations:e,surfaceManager:n,interactiveHandleManager:i,snappingManager:r,snappingVisualizer:a,pointerType:`mouse`,hasZ:s,defaultZ:o,view:l,drawAtFixedElevation:c}}get tooltip(){return this.tooltipManager?.tooltip}get activeTooltipInfo(){return this.tooltipManager?.tooltipInfo}get helpMessageKey(){return this.pluginStack.items.findLast(e=>e.helpMessageKey)?.helpMessageKey??`noTool`}begin(e){this.active?(this.lifecycleManager.begin(e),this._pendingBeginRequest=null):this._pendingBeginRequest=e}complete(e){let t=this.lifecycleManager;if(e&&t.complete(e),t.pluginStack.length===0){let e=this.unprocessedGeometry,t=!e||e.type===`mesh`||S(e);this.emit(`complete`,{geometry:e,isSimple:t,aborted:!1,type:`complete`,vertices:[]}),this.view?.activeTool===this&&(this.view.activeTool=null)}}cancelFirstUserLeafPlugin(){let e=this.pluginStack.toArray().findLast(e=>e.configuration?.hidden!==!0);e&&this.lifecycleManager.cancel(e)}getVertexSnappingCandidates(){return this.interactiveHandleManager?.capturingHandle?.role===`secondary`?[]:this.snappingManager?.getVertexCandidates()??[]}replaceLeaf(e){let t=this.lifecycleManager;t.updating?o.getLogger(this).info(`Ignoring command; arrived while updating:`,`replaceLeaf`):t.replaceLeaf(e)}finishPart(){let e=this.mostUpstreamPlugin?.configuration;if(this.editGeometryOperations&&e&&e.kind?.includes(`multipart`)){let e=this.pluginStack.at(1);e&&this.complete(e)}}undo(){this._handleCommand({action:`undo`})}redo(){this._handleCommand({action:`redo`})}executeCommand(e){return this._handleCommand(e)}suspendCommands(){return this._commandsSuspended=!0,i(()=>{this._commandsSuspended=!1;let e=this.view?.inputManager.latestPointerInfo;if(e){let{x:t,y:n}=e.location;this._handleCommand({action:`manipulator-move-to`,x:t,y:n})}})}addPromise(e){return this._updatingHandles.addPromise(e)}readPluginSettingValue(e,t){return this.readPluginSetting?.(e,t)}getGeometryIfCompleted(){let e=this.lifecycleManager.gatherCompletablePlugins();return this.editSessionManager?.generatePreviewGeometryForPlugins(e)}onActivate(){super.onActivate();let{view:e}=this;this.lastScreenPosition=e?.inputManager.latestPointerInfo?.location,this.renderer?.activate(),this._pendingBeginRequest&&=(this.begin(this._pendingBeginRequest),null),this.enableVertexVisuals&&this.addHandles(p(()=>this._vertexVisualGeometry,e=>{this.renderer?.addOrUpdateVisual(this._vertexVisualId,{geometry:e?j(e):null})},f)),this.addHandles([p(()=>this._shapeVisualGeometry,e=>{this.renderer?.addOrUpdateVisual(this._shapeVisualId,{geometry:e})},f),d(()=>this.interactiveHandleManager?.capturingHandle?.screenPosition,e=>this.lastScreenPosition=e,{initial:!0,equals:g}),p(()=>this.interactiveHandleManager?.capturingHandle?.outputMapPosition,(e,t)=>{let n=this.interactiveHandleManager?.capturingHandle?.editSession?.endVertex;e&&t&&n&&this._emitWhenReady(`cursor-update`,{updated:n.pos,type:`vertex-update`,operation:`apply`,vertices:[{componentIndex:n.part.index,vertexIndex:n.index,coordinates:n.pos}]})},h),this._keybindings.register(e,W.TOOL),p(()=>e.viewpoint,(e,t)=>{e&&t&&v(e,t)&&this._handleCommand({action:`viewpoint-moved`})})],Q)}onDeactivate(){super.onDeactivate(),this.removeHandles(Q),this.renderer?.deactivate(),this.snappingManager?.doneSnapping(),this.lifecycleManager.cancelAll(),this._pendingBeginRequest=null}onInputEvent(e){e.type===`pointer-down`?this.interactiveHandleManager?.notePointerDown(e.pointerId,e.pointerType):(e.type===`pointer-up`||e.type===`pointer-leave`)&&this.interactiveHandleManager?.notePointerUp(e.pointerId,e.pointerType);let t=I(e);t&&this._handleCommand(t)}forceAddVertex(){this._commitNext()}_emitWhenReady(e,t){if(this.destroyed)return;let n=()=>{this.emit(e,t)};this.lifecycleManager.updating||this._flushingQueuedFeedbackEvents?this._queuedFeedbackEvents.push(n):n()}_emitQueuedFeedbackEvents(){if(!(this.destroyed||this._flushingQueuedFeedbackEvents||this.lifecycleManager.updating||this._queuedFeedbackEvents.length===0)){this._flushingQueuedFeedbackEvents=!0;try{for(;!this.destroyed&&!this.lifecycleManager.updating&&this._queuedFeedbackEvents.length>0;)this._queuedFeedbackEvents.shift()?.()}finally{this._flushingQueuedFeedbackEvents=!1}}}async _handleCommand(e){if(!this._commandsSuspended){if(this.lifecycleManager.updating)o.getLogger(this).info(`Ignoring command; arrived while updating:`,e.action);else switch(e.action){case`view-drag`:return await this._handleViewDragCommand(e);case`vertex-add`:return this._guardCommand(e,()=>{M(e),this._commitNext()});case`vertex-add-and-finish-part`:return this._handleVertexAddAndFinishPartCommand(e);case`cancel`:return this._guardCommand(e,()=>this.cancel());case`complete`:return this._guardCommand(e,()=>{this.mostUpstreamPlugin&&(M(e),this.complete(this.mostUpstreamPlugin))});case`finish-part`:return this._guardCommand(e,()=>this.finishPart());case`undo`:return this._guardCommand(e,()=>this.editSessionManager.undo());case`redo`:return this._guardCommand(e,()=>this.editSessionManager.redo());case`next-manipulator`:return this._guardCommand(e,()=>this.interactiveHandleManager?.cycleManipulator(`forward`));case`previous-manipulator`:return this._guardCommand(e,()=>this.interactiveHandleManager?.cycleManipulator(`backward`));case`toggle-manipulator-follow`:this.interactiveHandleManager?.toggleFollow()&&M(e);break;case`viewpoint-moved`:return await this._handleViewpointMovedCommand(e);case`manipulator-move-to`:return await this._handleManipulatorMoveToCommand(e);case`manipulator-drag-to`:return await this._handleManipulatorDragToCommand(e);case`vertex-add-at-point`:return await this._handleVertexAddAtPointCommand(e);case`show-tooltip`:return this._guardCommand(e,async()=>{let t=this.tooltipManager?.tooltip;t&&ne(t.info)&&(await t.enterInputMode(),M(e))});case`constraint-center`:this.globalStateManager.setCentered(e.enabled);break;case`constraint-aspect`:this.globalStateManager.setPreserveAspectRatio(e.enabled)}}}async _handleViewDragCommand(e){if(!this.editable)return;let t=e.originalEvent,n=this.interactiveHandleManager?.capturingHandle;(t&&`pointerType`in t&&t.pointerType===`touch`&&(n?.captureMode===`capture-always`||n?.captureMode===`capture-when-engaged`)||this.interactiveHandleManager?.capturingHandle?.captureMode===`capture-when-engaged`||this._before(e))&&M(e)}_handleVertexAddAndFinishPartCommand(e){this._before(e)||(M(e),this._commitNext(),this.finishPart())}async _handleViewpointMovedCommand(e){if(!this.editable)return;let t=N(e.originalEvent),n=P(e.originalEvent);await this._updatingHandles.addPromise(this.interactiveHandleManager?.capturingHandle?.moveTo(null,{...this.movementCommandContext,pointerType:t,pointerId:n})),this.interactiveHandleManager?.updateAllScreenPositions(this.movementCommandContext.surfaceManager)}async _handleManipulatorMoveToCommand(e){if(!this.editable)return;let t=N(e.originalEvent),n=P(e.originalEvent);if(!this.interactiveHandleManager?.shouldCaptureInput(n,t))return;let r=this._updateLastScreenPosition(e);this.interactiveHandleManager?.capturingHandle&&M(e),await this._updatingHandles.addPromise(this.interactiveHandleManager?.capturingHandle?.moveTo(r,{...this.movementCommandContext,pointerType:t,pointerId:n}))}async _handleManipulatorDragToCommand(e){if(!this.editable)return;let t=N(e.originalEvent),n=P(e.originalEvent);if(!this.interactiveHandleManager?.shouldCaptureInput(n,t))return;let r=this._updateLastScreenPosition(e),i=this.interactiveHandleManager?.findHandleByManipulator(r,t);t===`touch`&&i&&e.state===`start`&&this.interactiveHandleManager?.releaseHandle();let a=this.interactiveHandleManager?.findHandleDragging(),o=this.interactiveHandleManager?.capturingHandle,s=a??o??i;s&&!i&&M(e),s?.captureMode===`capture-when-engaged`||s?.captureMode===`capture-always`&&t===`touch`?e.state===`end`?await this._updatingHandles.addPromise(s.noteDragEnd(r,{...this.movementCommandContext,pointerType:t,pointerId:n}).then(()=>{s&&N(e.originalEvent)===`touch`&&s.captureMode!==`grabbable-object`&&s.defaultCaptureMode!==`capture-when-engaged`&&s.role===`primary`&&(this.interactiveHandleManager?.handleCount===1?this._handleCommand({action:`vertex-add`}):this.interactiveHandleManager?.releaseHandle())})):e.state===`start`?await this._updatingHandles.addPromise(s.noteDragStart(r,{...this.movementCommandContext,pointerType:t,pointerId:n}).then(()=>{s&&N(e.originalEvent)===`touch`&&s.captureMode!==`grabbable-object`&&s.defaultCaptureMode!==`capture-when-engaged`&&!s.editSession?.lastPointAddedBySession&&this._handleCommand({action:`vertex-add`})})):await this._updatingHandles.addPromise(s?.moveTo(r,{...this.movementCommandContext,pointerType:t,pointerId:n})):s?.captureMode===`grabbable-object`&&(this.interactiveHandleManager?.releaseHandle(o),await this._updatingHandles.addPromise(s.moveTo(r,{...this.movementCommandContext,pointerType:t,pointerId:n})))}async _handleVertexAddAtPointCommand(e){let t=this._updateLastScreenPosition(e),n=N(e.originalEvent),r=P(e.originalEvent);if(!this.interactiveHandleManager?.shouldCaptureInput(r,n))return;let i=this.interactiveHandleManager?.capturingHandle??this.interactiveHandleManager?.findHandleByManipulator(t,n);this.editable&&i&&(this._before(e)||(M(e),await this._updatingHandles.addPromise(i.moveTo(t,{...this.movementCommandContext,skipSnapping:!0,pointerType:n,pointerId:r}).finally(()=>this._commitNext()))))}_makeKeyBindings(){let e=new q,t=(t,n)=>{e.addToggle(t,e=>this._handleCommand({action:n,originalEvent:e,enabled:e.type===`key-down`}))},n=(t,n)=>{e.add(t,e=>this._handleCommand({action:n,originalEvent:e}))};return t(J.preserveAspectRatio,`constraint-aspect`),t(Y.center,`constraint-center`),n(X.toggleFollowManipulator,`toggle-manipulator-follow`),n(Y.undo,`undo`),n(Y.redo,`redo`),n(Y.complete,`complete`),n(Y.vertexAdd,`vertex-add`),n({key:Z.enterInputMode,continuePropagation:!0,repeats:!0},`show-tooltip`),e}_afterAttach(){}_afterDetach(e){this.interactiveHandleManager?.unregisterCustomConstraint(e),this.interactiveHandleManager?.unregisterHandle(e),this.tooltipManager?.unregisterPluginFields(e),this.globalStateManager.clearPluginOverrides(e);let t=this._pluginContexts.get(e);t&&(t.destroy(),this._pluginContexts.delete(e))}_beforeResume(e,t){this.interactiveHandleManager?.replaceEditSessions(e,t)}_commitNext(){let n={stack:[],error:void 0,hasError:!1};try{let t=this.mostDownstreamPlugin;if(!t)return;this.tooltipManager?.storeConstraintSnapshot();let r=this.tooltipManager?.getFieldsToUnlockOnVertexPlacement()??[],i=!1,o=this.editGeometryOperations;e(n,o?a(o.on(`vertex-add`,()=>i=!0)):null,!1),t.completeStep?t.completeStep():this.complete(t),i&&this.tooltipManager?.unlockOnVertexPlacement(r)}catch(e){n.error=e,n.hasError=!0}finally{t(n)}}_suspendPlugin(e){this.lifecycleManager.suspend(e),this.measurementManager.suspendPlugin(e)}_resumePlugin(e){this.lifecycleManager.resume(e)}_updateLastScreenPosition(e){let t=_(e.x,e.y);return this.lastScreenPosition=t,t}_getContextForPlugin(e,t){let n=s(this._pluginContexts,e,()=>new F({drawTool:this,plugin:e,session:t}));return n.session=t,n}_before(e){if(!this.hasEventListener(`before-${e.action}`))return!1;let t=new CustomEvent(`before-${e.action}`,{detail:e,cancelable:!0});return this.emit(`before-${e.action}`,t),t.defaultPrevented}_guardCommand(e,t,n){return this._before(e)?n?.():t()}async _setupSegmentLabels(){let e=this.editGeometryOperations,t=this.toolOptions?.labels,n=!!t?.enabled,r=this.globalStateManager.segmentLabelsDisabled;if(!e||!t||!n){this._segmentLabels=c(this._segmentLabels);return}if(r){this._segmentLabels&&(this._segmentLabels.visible=!1);return}if(this._segmentLabels?.context?.editGeometryOperations===e&&this._segmentLabels.context.labelOptions===t){this._segmentLabels.visible=!0;return}let i=await this._createSegmentLabels(e,t);i&&(this._segmentLabels=c(this._segmentLabels),this._segmentLabels=i)}async _createSegmentLabels(e,t){this._segmentLabelsImportTask?.abort();let n=this._segmentLabelsImportTask=r(async n=>{if(this.view.type===`3d`){let r=import(`../3d/interactive/SegmentLabels3D.js`),{SegmentLabels3D:i}=await this._updatingHandles.addPromise(r);return this._isSegmentLabelsSetupStale(n,e,t)?null:new i({context:{view:this.view,editGeometryOperations:e,elevationInfo:D(this.hasZ,this.elevationInfo),labelOptions:t},visible:!0})}let r=import(`../2d/interactive/SegmentLabels2D.js`),{SegmentLabels2D:i}=await this._updatingHandles.addPromise(r);return this._isSegmentLabelsSetupStale(n,e,t)?null:new i({context:{view:this.view,editGeometryOperations:e,elevationInfo:D(this.hasZ,this.elevationInfo),labelOptions:t},visible:!0})});return u(n.promise)}_isSegmentLabelsSetupStale(e,t,n){return e.aborted||this.editGeometryOperations!==t||this.toolOptions?.labels!==n||!n.enabled||this.globalStateManager.segmentLabelsDisabled}};n([y()],$.prototype,`_commandsSuspended`,void 0),n([y()],$.prototype,`_zOfLastUserInput`,null),n([y()],$.prototype,`_snappingVisualizer`,void 0),n([y()],$.prototype,`_segmentLabels`,void 0),n([y()],$.prototype,`_segmentLabelsImportTask`,void 0),n([y()],$.prototype,`_tooltipDependencies`,null),n([y()],$.prototype,`_editSessionManagerContext`,null),n([y()],$.prototype,`_densificationParameters`,null),n([y({constructOnly:!0,nonNullable:!0})],$.prototype,`view`,void 0),n([y()],$.prototype,`automaticManipulatorSelection`,void 0),n([y()],$.prototype,`updating`,null),n([y()],$.prototype,`coordinateHelper`,null),n([y()],$.prototype,`editGeometry`,null),n([y()],$.prototype,`editGeometryOperations`,null),n([y()],$.prototype,`unprocessedGeometry`,null),n([y()],$.prototype,`simplifiedGeometryPreview`,null),n([y()],$.prototype,`_suppressCoincidentPointOverlaysIn3D`,null),n([y()],$.prototype,`_shapeVisualGeometry`,null),n([y()],$.prototype,`_vertexVisualGeometry`,null),n([y()],$.prototype,`snappingManager`,void 0),n([y()],$.prototype,`toolOptions`,void 0),n([y()],$.prototype,`elevationInfo`,void 0),n([y()],$.prototype,`hasZ`,void 0),n([y()],$.prototype,`defaultZ`,void 0),n([y()],$.prototype,`directionOptions`,void 0),n([y()],$.prototype,`canUndo`,null),n([y()],$.prototype,`canRedo`,null),n([y()],$.prototype,`pluginStack`,null),n([y()],$.prototype,`mostDownstreamPlugin`,null),n([y()],$.prototype,`mostUpstreamPlugin`,null),n([y()],$.prototype,`lastScreenPosition`,void 0),n([y()],$.prototype,`positionOfLastUserInput`,null),n([y()],$.prototype,`tooltipManager`,void 0),n([y()],$.prototype,`measurementManager`,void 0),n([y()],$.prototype,`globalStateManager`,void 0),n([y()],$.prototype,`editSessionManager`,void 0),n([y()],$.prototype,`lifecycleManager`,void 0),n([y()],$.prototype,`surfaceManager`,void 0),n([y()],$.prototype,`interactiveHandleManager`,void 0),n([y()],$.prototype,`renderer`,void 0),n([y()],$.prototype,`readPluginSetting`,void 0),n([y()],$.prototype,`movementCommandContext`,null),n([y()],$.prototype,`tooltip`,null),n([y()],$.prototype,`activeTooltipInfo`,null),n([y()],$.prototype,`helpMessageKey`,null),n([y({constructOnly:!0})],$.prototype,`enableVertexVisuals`,void 0),$=n([b(`esri.views.draw.DrawTool`)],$);export{$ as DrawTool};
2
+ import{__addDisposableResource as e,__disposeResources as t,__decorate as n}from"tslib";import{createTask as r}from"../../core/asyncUtils.js";import{makeHandle as i,disposable as a}from"../../core/handleUtils.js";import o from"../../core/Logger.js";import{getOrCreateMapValue as s}from"../../core/MapUtils.js";import{destroyMaybe as c,abortMaybe as l}from"../../core/maybe.js";import{ignoreAbortErrors as u}from"../../core/promiseUtils.js";import{when as d,initial as f,watch as p,syncAndInitial as ee,on as m,sync as h}from"../../core/reactiveUtils.js";import{screenPointEqual as g,createScreenPoint as _}from"../../core/screenUtils.js";import{diff as v}from"../../core/accessorSupport/diffUtils.js";import{property as y}from"../../core/accessorSupport/decorators/property.js";import{subclass as b}from"../../core/accessorSupport/decorators/subclass.js";import{UpdatingHandles as x}from"../../core/support/UpdatingHandles.js";import te from"../../geometry/Polygon.js";import{simplifyIsSimple as S,simplifyExecute as C}from"../../geometry/operators/simplifyOperator.js";import{isPolygon as w}from"../../geometry/support/typeUtils.js";import{isCurvedGeometry as T}from"../../geometry/support/curves/curveUtils.js";import{densifyCurvedGeometry as E}from"../../geometry/support/curves/densifyCurvedGeometry.js";import{getEffectiveElevationInfo as D}from"../../support/elevationInfoUtils.js";import{getMaxDeviationInPixels as O,getMinSegmentsPerCurve as k}from"../2d/layers/graphics/densificationConstants.js";import{createSnappingVisualizer as A}from"./support/createSnappingVisualizer.js";import{multipointFromGeometry as j,markHandled as M,getPointerType as N,getPointerId as P}from"./support/drawToolUtils.js";import{PluginContext as F}from"./support/PluginContext.js";import{viewEventToCommand as I}from"./support/input/drawToolInput.js";import{EditSessionManager as L}from"./support/managers/EditSessionManager.js";import{GlobalStateManager as R}from"./support/managers/GlobalStateManager.js";import{InteractiveHandleManager as z}from"./support/managers/InteractiveHandleManager.js";import{MeasurementManager as B}from"./support/managers/MeasurementManager.js";import{PluginLifecycleManager as V}from"./support/managers/PluginLifecycleManager.js";import{SurfaceManager as H}from"./support/managers/SurfaceManager.js";import{TooltipManager as U}from"./support/managers/TooltipManager.js";import{ViewEventPriorities as W}from"../input/InputManager.js";import{createCoordinateHelper as G}from"../interactive/coordinateHelper.js";import{InteractiveToolBase as K}from"../interactive/InteractiveToolBase.js";import{KeyBindings as q,mediaKeys as J,sketchKeys as Y,advancedSketchKeys as X,tooltipKeys as Z}from"../interactive/keybindings.js";import{isInputModeAvailable as ne}from"../interactive/tooltip/tooltipCommonUtils.js";const Q=Symbol();let $=class extends K{constructor(e){super(e),this._shapeVisualId=Symbol(),this._vertexVisualId=Symbol(),this._pluginContexts=new Map,this._queuedFeedbackEvents=[],this._flushingQueuedFeedbackEvents=!1,this._commandsSuspended=!1,this._snappingVisualizer=null,this._segmentLabels=null,this._segmentLabelsImportTask=null,this._updatingHandles=new x,this._keybindings=this._makeKeyBindings(),this._pendingBeginRequest=null,this.type=`draw-2.0`,this.automaticManipulatorSelection=!0,this.snappingManager=null,this.toolOptions=null,this.disableTouchDrag=!1,this.elevationInfo=null,this.hasZ=!1,this.defaultZ=0,this.lastScreenPosition=null,this.measurementManager=new B,this.globalStateManager=new R({getPluginStack:()=>this.pluginStack}),this.editSessionManager=new L({getContext:()=>this._editSessionManagerContext}),this.lifecycleManager=new V({getContext:this._getContextForPlugin.bind(this),editSessionManager:this.editSessionManager,afterAttach:this._afterAttach.bind(this),afterDetach:this._afterDetach.bind(this),beforeResume:this._beforeResume.bind(this)}),this.surfaceManager=null,this.interactiveHandleManager=null,this.renderer=null,this.readPluginSetting=null,this.enableVertexVisuals=!0}initialize(){let{view:e}=this;this.interactiveHandleManager=new z({view:e,renderer:this.renderer}),this._override(`manipulators`,this.interactiveHandleManager.manipulators),this.tooltipManager=new U({getDependencies:()=>this._tooltipDependencies,getLastScreenPosition:()=>this.lastScreenPosition}),this.addHandles(d(()=>this.renderer,t=>{t.addOrUpdateVisual(this._shapeVisualId,{role:`outputGeometry`}),t.addOrUpdateVisual(this._vertexVisualId,{role:`vertex`}),this._updatingHandles.addPromise(A(e,t).then(e=>this._snappingVisualizer=e))},f)),this.addHandles([p(()=>[this.view,this.coordinateHelper.spatialReference,this.defaultZ,this.hasZ,this.elevationInfo],([e,t,n,r,i])=>{this.surfaceManager?.destroy(),this.surfaceManager=new H({spatialReference:t,excludedGraphicsLayer:null,defaultZ:n,hasZ:r,view:e,elevationInfo:i,getContext:()=>({drawAtFixedElevation:this.globalStateManager.drawAtFixedElevation,elevationConstraint:this.tooltipManager?.elevationConstraint,constraintsEnabled:this.tooltipManager?.constraintsEnabled??!1})})},ee),d(()=>this.toolOptions?.tooltips.effectiveEnabled,()=>this.measurementManager.preloadMeasurementUtils(),{once:!0,initial:!0}),p(()=>[this.editGeometryOperations,this.toolOptions?.labels.enabled,this.globalStateManager.segmentLabelsDisabled],()=>{this._updatingHandles.addPromise(this._setupSegmentLabels())},f),m(()=>this.editSessionManager,`cancelPlugin`,({plugin:e})=>{this._suspendPlugin(e)},h),m(()=>this.editSessionManager,`restartPlugin`,({restartInfo:e})=>{this._resumePlugin(e)},h),p(()=>this.lifecycleManager.updating,e=>{e||this._emitQueuedFeedbackEvents()},h),m(()=>this.editGeometryOperations,[`vertex-add`,`vertex-update`,`vertex-remove`],e=>{let t=e.vertices.map(e=>({componentIndex:0,vertexIndex:e.index,coordinates:this.coordinateHelper.vectorToArray(e.pos)})),n=t.map(e=>e.coordinates);switch(e.type){case`vertex-add`:this._emitWhenReady(e.type,{...e,added:n,vertices:t});break;case`vertex-update`:this._emitWhenReady(e.type,{...e,updated:n,vertices:t});break;case`vertex-remove`:this._emitWhenReady(e.type,{...e,removed:n,vertices:t})}})])}destroy(){this.active&&this.onDeactivate(),this.editSessionManager.destroy(),this.lifecycleManager.destroy(),this.measurementManager.destroy(),this.globalStateManager.destroy();for(let e of this._pluginContexts.values())e.destroy();this._pluginContexts.clear(),this.surfaceManager=c(this.surfaceManager),this.interactiveHandleManager=c(this.interactiveHandleManager),this._segmentLabelsImportTask=l(this._segmentLabelsImportTask),this._segmentLabels=c(this._segmentLabels),this.tooltipManager=c(this.tooltipManager)}get _zOfLastUserInput(){let e=(this.mostDownstreamPlugin&&this.editSessionManager.getSession(this.mostDownstreamPlugin))?.firstPointAddedBySession?.point;return e?.hasZ?e.z:null}get _tooltipDependencies(){let{defaultZ:e,editGeometryOperations:t,toolOptions:n,directionOptions:r,elevationInfo:i,view:a}=this;return!t||!n||!a?null:{defaultZ:e,directionOptions:r,elevationInfo:i,editGeometryOperations:t,toolOptions:n,view:a,getActiveHandle:()=>this.interactiveHandleManager?.focusedHandle,getAllHandles:()=>this.interactiveHandleManager?.allhandles,getHelpMessageKey:()=>this.helpMessageKey,notifyTooltipsChanged:()=>{let{interactiveHandleManager:e,movementCommandContext:t}=this;e&&t&&e.reapplyPositions(t)}}}get _editSessionManagerContext(){let{coordinateHelper:e,view:t}=this;return t?{coordinateHelper:e,viewingMode:t.type===`3d`&&t.viewingMode===`global`?1:2}:null}get _densificationParameters(){let{view:e,coordinateHelper:t}=this,n=t.spatialReference,r=e?.spatialReference,i=e.resolution;if(!n||!r||!i||!Number.isFinite(i))return null;let a=r.metersPerUnit/n.metersPerUnit;return{maxDeviation:2**Math.round(Math.log2(i))*O()*a,minSegmentsPerCurve:k()}}get test(){return{densificationParameters:this._densificationParameters,segmentLabels:this._segmentLabels}}get updating(){return this._updatingHandles.updating||this.snappingManager?.updating||this.lifecycleManager.updating||!!this._segmentLabels?.updating}get coordinateHelper(){return G(this.hasZ,!1,this.view.spatialReference)}get editGeometry(){return this.editGeometryOperations?.data}get editGeometryOperations(){return this.editSessionManager.editGeometryOperations}get unprocessedGeometry(){return this.editSessionManager.outputGeometry}get simplifiedGeometryPreview(){let e=this.editSessionManager.outputGeometry;if(e&&w(e))try{let t=this._densificationParameters,n=T(e)&&t?new te({...E(e,t)}):e;if(!S(n))return C(n)}catch{return e}return e}get _suppressCoincidentPointOverlaysIn3D(){return this.view.type===`3d`&&this.unprocessedGeometry?.type===`point`&&!!this.interactiveHandleManager?.allhandles?.find(e=>e.role===`primary`)?.outputMapPosition}get _shapeVisualGeometry(){return this._suppressCoincidentPointOverlaysIn3D?null:this.simplifiedGeometryPreview}get _vertexVisualGeometry(){return this._suppressCoincidentPointOverlaysIn3D?null:this.unprocessedGeometry}get canUndo(){return this.editSessionManager.canUndo}get canRedo(){return this.editSessionManager.canRedo}get pluginStack(){return this.lifecycleManager.pluginStack}get mostDownstreamPlugin(){return this.pluginStack.at(-1)}get mostUpstreamPlugin(){return this.pluginStack.at(0)}get positionOfLastUserInput(){let e=this.lastScreenPosition;return e?this.surfaceManager?.screenToMap(e,{firstPointZ:this._zOfLastUserInput})??this.view.toMap(e):this.view.center}get movementCommandContext(){let{editGeometryOperations:e,tooltipManager:t,surfaceManager:n,snappingManager:r,interactiveHandleManager:i,_snappingVisualizer:a,defaultZ:o,hasZ:s,globalStateManager:{drawAtFixedElevation:c},view:l}=this;return{tooltipManager:t,editGeometryOperations:e,surfaceManager:n,interactiveHandleManager:i,snappingManager:r,snappingVisualizer:a,pointerType:`mouse`,hasZ:s,defaultZ:o,view:l,drawAtFixedElevation:c}}get tooltip(){return this.tooltipManager?.tooltip}get activeTooltipInfo(){return this.tooltipManager?.tooltipInfo}get helpMessageKey(){return this.pluginStack.items.findLast(e=>e.helpMessageKey)?.helpMessageKey??`noTool`}begin(e){this.active?(this.lifecycleManager.begin(e),this._pendingBeginRequest=null):this._pendingBeginRequest=e}complete(e){let t=this.lifecycleManager;if(e&&t.complete(e),t.pluginStack.length===0){let e=this.unprocessedGeometry,t=!e||e.type===`mesh`||S(e);this.emit(`complete`,{geometry:e,isSimple:t,aborted:!1,type:`complete`,vertices:[]}),this.view?.activeTool===this&&(this.view.activeTool=null)}}cancelFirstUserLeafPlugin(){let e=this.pluginStack.toArray().findLast(e=>e.configuration?.hidden!==!0);e&&this.lifecycleManager.cancel(e)}getVertexSnappingCandidates(){return this.interactiveHandleManager?.capturingHandle?.role===`secondary`?[]:this.snappingManager?.getVertexCandidates()??[]}replaceLeaf(e){let t=this.lifecycleManager;t.updating?o.getLogger(this).info(`Ignoring command; arrived while updating:`,`replaceLeaf`):t.replaceLeaf(e)}finishPart(){let e=this.mostUpstreamPlugin?.configuration;if(this.editGeometryOperations&&e&&e.kind?.includes(`multipart`)){let e=this.pluginStack.at(1);e&&this.complete(e)}}undo(){this._handleCommand({action:`undo`})}redo(){this._handleCommand({action:`redo`})}executeCommand(e){return this._handleCommand(e)}suspendCommands(){return this._commandsSuspended=!0,i(()=>{this._commandsSuspended=!1;let e=this.view?.inputManager.latestPointerInfo;if(e){let{x:t,y:n}=e.location;this._handleCommand({action:`manipulator-move-to`,x:t,y:n})}})}addPromise(e){return this._updatingHandles.addPromise(e)}readPluginSettingValue(e,t){return this.readPluginSetting?.(e,t)}getGeometryIfCompleted(){let e=this.lifecycleManager.gatherCompletablePlugins();return this.editSessionManager?.generatePreviewGeometryForPlugins(e)}onActivate(){super.onActivate();let{view:e}=this;this.lastScreenPosition=e?.inputManager.latestPointerInfo?.location,this.renderer?.activate(),this._pendingBeginRequest&&=(this.begin(this._pendingBeginRequest),null),this.enableVertexVisuals&&this.addHandles(p(()=>this._vertexVisualGeometry,e=>{this.renderer?.addOrUpdateVisual(this._vertexVisualId,{geometry:e?j(e):null})},f)),this.addHandles([p(()=>this._shapeVisualGeometry,e=>{this.renderer?.addOrUpdateVisual(this._shapeVisualId,{geometry:e})},f),d(()=>this.interactiveHandleManager?.capturingHandle?.screenPosition,e=>this.lastScreenPosition=e,{initial:!0,equals:g}),p(()=>this.interactiveHandleManager?.capturingHandle?.outputMapPosition,(e,t)=>{let n=this.interactiveHandleManager?.capturingHandle?.editSession?.endVertex;e&&t&&n&&this._emitWhenReady(`cursor-update`,{updated:n.pos,type:`vertex-update`,operation:`apply`,vertices:[{componentIndex:n.part.index,vertexIndex:n.index,coordinates:n.pos}]})},h),this._keybindings.register(e,W.TOOL),p(()=>e.viewpoint,(e,t)=>{e&&t&&v(e,t)&&this._handleCommand({action:`viewpoint-moved`})})],Q)}onDeactivate(){super.onDeactivate(),this.removeHandles(Q),this.renderer?.deactivate(),this.snappingManager?.doneSnapping(),this.lifecycleManager.cancelAll(),this._pendingBeginRequest=null}onInputEvent(e){if(this.disableTouchDrag&&(e.type===`drag`||e.type===`pointer-drag`)&&e.pointerType===`touch`)return;e.type===`pointer-down`?this.interactiveHandleManager?.notePointerDown(e.pointerId,e.pointerType):(e.type===`pointer-up`||e.type===`pointer-leave`)&&this.interactiveHandleManager?.notePointerUp(e.pointerId,e.pointerType);let t=I(e);t&&this._handleCommand(t)}forceAddVertex(){this._commitNext()}_emitWhenReady(e,t){if(this.destroyed)return;let n=()=>{this.emit(e,t)};this.lifecycleManager.updating||this._flushingQueuedFeedbackEvents?this._queuedFeedbackEvents.push(n):n()}_emitQueuedFeedbackEvents(){if(!(this.destroyed||this._flushingQueuedFeedbackEvents||this.lifecycleManager.updating||this._queuedFeedbackEvents.length===0)){this._flushingQueuedFeedbackEvents=!0;try{for(;!this.destroyed&&!this.lifecycleManager.updating&&this._queuedFeedbackEvents.length>0;)this._queuedFeedbackEvents.shift()?.()}finally{this._flushingQueuedFeedbackEvents=!1}}}async _handleCommand(e){if(!this._commandsSuspended){if(this.lifecycleManager.updating)o.getLogger(this).info(`Ignoring command; arrived while updating:`,e.action);else switch(e.action){case`view-drag`:return await this._handleViewDragCommand(e);case`vertex-add`:return this._guardCommand(e,()=>{M(e),this._commitNext()});case`vertex-add-and-finish-part`:return this._handleVertexAddAndFinishPartCommand(e);case`cancel`:return this._guardCommand(e,()=>this.cancel());case`complete`:return this._guardCommand(e,()=>{this.mostUpstreamPlugin&&(M(e),this.complete(this.mostUpstreamPlugin))});case`finish-part`:return this._guardCommand(e,()=>this.finishPart());case`undo`:return this._guardCommand(e,()=>this.editSessionManager.undo());case`redo`:return this._guardCommand(e,()=>this.editSessionManager.redo());case`next-manipulator`:return this._guardCommand(e,()=>this.interactiveHandleManager?.cycleManipulator(`forward`));case`previous-manipulator`:return this._guardCommand(e,()=>this.interactiveHandleManager?.cycleManipulator(`backward`));case`toggle-manipulator-follow`:this.interactiveHandleManager?.toggleFollow()&&M(e);break;case`viewpoint-moved`:return await this._handleViewpointMovedCommand(e);case`manipulator-move-to`:return await this._handleManipulatorMoveToCommand(e);case`manipulator-drag-to`:return await this._handleManipulatorDragToCommand(e);case`vertex-add-at-point`:return await this._handleVertexAddAtPointCommand(e);case`show-tooltip`:return this._guardCommand(e,async()=>{let t=this.tooltipManager?.tooltip;t&&ne(t.info)&&(await t.enterInputMode(),M(e))});case`constraint-center`:this.globalStateManager.setCentered(e.enabled);break;case`constraint-aspect`:this.globalStateManager.setPreserveAspectRatio(e.enabled)}}}async _handleViewDragCommand(e){if(!this.editable)return;let t=e.originalEvent,n=this.interactiveHandleManager?.capturingHandle;(t&&`pointerType`in t&&t.pointerType===`touch`&&(n?.captureMode===`capture-always`||n?.captureMode===`capture-when-engaged`)||this.interactiveHandleManager?.capturingHandle?.captureMode===`capture-when-engaged`||this._before(e))&&M(e)}_handleVertexAddAndFinishPartCommand(e){this._before(e)||(M(e),this._commitNext(),this.finishPart())}async _handleViewpointMovedCommand(e){if(!this.editable)return;let t=N(e.originalEvent),n=P(e.originalEvent);await this._updatingHandles.addPromise(this.interactiveHandleManager?.capturingHandle?.moveTo(null,{...this.movementCommandContext,pointerType:t,pointerId:n})),this.interactiveHandleManager?.updateAllScreenPositions(this.movementCommandContext.surfaceManager)}async _handleManipulatorMoveToCommand(e){if(!this.editable)return;let t=N(e.originalEvent),n=P(e.originalEvent);if(!this.interactiveHandleManager?.shouldCaptureInput(n,t))return;let r=this._updateLastScreenPosition(e);this.interactiveHandleManager?.capturingHandle&&M(e),await this._updatingHandles.addPromise(this.interactiveHandleManager?.capturingHandle?.moveTo(r,{...this.movementCommandContext,pointerType:t,pointerId:n}))}async _handleManipulatorDragToCommand(e){if(!this.editable)return;let t=N(e.originalEvent),n=P(e.originalEvent);if(!this.interactiveHandleManager?.shouldCaptureInput(n,t))return;let r=this._updateLastScreenPosition(e),i=this.interactiveHandleManager?.findHandleByManipulator(r,t);t===`touch`&&i&&e.state===`start`&&this.interactiveHandleManager?.releaseHandle();let a=this.interactiveHandleManager?.findHandleDragging(),o=this.interactiveHandleManager?.capturingHandle,s=a??o??i;s&&!i&&M(e),s?.captureMode===`capture-when-engaged`||s?.captureMode===`capture-always`&&t===`touch`?e.state===`end`?await this._updatingHandles.addPromise(s.noteDragEnd(r,{...this.movementCommandContext,pointerType:t,pointerId:n}).then(()=>{s&&N(e.originalEvent)===`touch`&&s.captureMode!==`grabbable-object`&&s.defaultCaptureMode!==`capture-when-engaged`&&s.role===`primary`&&(this.interactiveHandleManager?.handleCount===1?this._handleCommand({action:`vertex-add`}):this.interactiveHandleManager?.releaseHandle())})):e.state===`start`?await this._updatingHandles.addPromise(s.noteDragStart(r,{...this.movementCommandContext,pointerType:t,pointerId:n}).then(()=>{s&&N(e.originalEvent)===`touch`&&s.captureMode!==`grabbable-object`&&s.defaultCaptureMode!==`capture-when-engaged`&&!s.editSession?.lastPointAddedBySession&&this._handleCommand({action:`vertex-add`})})):await this._updatingHandles.addPromise(s?.moveTo(r,{...this.movementCommandContext,pointerType:t,pointerId:n})):s?.captureMode===`grabbable-object`&&(this.interactiveHandleManager?.releaseHandle(o),await this._updatingHandles.addPromise(s.moveTo(r,{...this.movementCommandContext,pointerType:t,pointerId:n})))}async _handleVertexAddAtPointCommand(e){let t=this._updateLastScreenPosition(e),n=N(e.originalEvent),r=P(e.originalEvent);if(!this.interactiveHandleManager?.shouldCaptureInput(r,n))return;let i=this.interactiveHandleManager?.capturingHandle??this.interactiveHandleManager?.findHandleByManipulator(t,n);this.editable&&i&&(this._before(e)||(M(e),await this._updatingHandles.addPromise(i.moveTo(t,{...this.movementCommandContext,skipSnapping:!0,pointerType:n,pointerId:r}).finally(()=>this._commitNext()))))}_makeKeyBindings(){let e=new q,t=(t,n)=>{e.addToggle(t,e=>this._handleCommand({action:n,originalEvent:e,enabled:e.type===`key-down`}))},n=(t,n)=>{e.add(t,e=>this._handleCommand({action:n,originalEvent:e}))};return t(J.preserveAspectRatio,`constraint-aspect`),t(Y.center,`constraint-center`),n(X.toggleFollowManipulator,`toggle-manipulator-follow`),n(Y.undo,`undo`),n(Y.redo,`redo`),n(Y.complete,`complete`),n(Y.vertexAdd,`vertex-add`),n({key:Z.enterInputMode,continuePropagation:!0,repeats:!0},`show-tooltip`),e}_afterAttach(){}_afterDetach(e){this.interactiveHandleManager?.unregisterCustomConstraint(e),this.interactiveHandleManager?.unregisterHandle(e),this.tooltipManager?.unregisterPluginFields(e),this.globalStateManager.clearPluginOverrides(e);let t=this._pluginContexts.get(e);t&&(t.destroy(),this._pluginContexts.delete(e))}_beforeResume(e,t){this.interactiveHandleManager?.replaceEditSessions(e,t)}_commitNext(){let n={stack:[],error:void 0,hasError:!1};try{let t=this.mostDownstreamPlugin;if(!t)return;this.tooltipManager?.storeConstraintSnapshot();let r=this.tooltipManager?.getFieldsToUnlockOnVertexPlacement()??[],i=!1,o=this.editGeometryOperations;e(n,o?a(o.on(`vertex-add`,()=>i=!0)):null,!1),t.completeStep?t.completeStep():this.complete(t),i&&this.tooltipManager?.unlockOnVertexPlacement(r)}catch(e){n.error=e,n.hasError=!0}finally{t(n)}}_suspendPlugin(e){this.lifecycleManager.suspend(e),this.measurementManager.suspendPlugin(e)}_resumePlugin(e){this.lifecycleManager.resume(e)}_updateLastScreenPosition(e){let t=_(e.x,e.y);return this.lastScreenPosition=t,t}_getContextForPlugin(e,t){let n=s(this._pluginContexts,e,()=>new F({drawTool:this,plugin:e,session:t}));return n.session=t,n}_before(e){if(!this.hasEventListener(`before-${e.action}`))return!1;let t=new CustomEvent(`before-${e.action}`,{detail:e,cancelable:!0});return this.emit(`before-${e.action}`,t),t.defaultPrevented}_guardCommand(e,t,n){return this._before(e)?n?.():t()}async _setupSegmentLabels(){let e=this.editGeometryOperations,t=this.toolOptions?.labels,n=!!t?.enabled,r=this.globalStateManager.segmentLabelsDisabled;if(!e||!t||!n){this._segmentLabels=c(this._segmentLabels);return}if(r){this._segmentLabels&&(this._segmentLabels.visible=!1);return}if(this._segmentLabels?.context?.editGeometryOperations===e&&this._segmentLabels.context.labelOptions===t){this._segmentLabels.visible=!0;return}let i=await this._createSegmentLabels(e,t);i&&(this._segmentLabels=c(this._segmentLabels),this._segmentLabels=i)}async _createSegmentLabels(e,t){this._segmentLabelsImportTask?.abort();let n=this._segmentLabelsImportTask=r(async n=>{if(this.view.type===`3d`){let r=import(`../3d/interactive/SegmentLabels3D.js`),{SegmentLabels3D:i}=await this._updatingHandles.addPromise(r);return this._isSegmentLabelsSetupStale(n,e,t)?null:new i({context:{view:this.view,editGeometryOperations:e,elevationInfo:D(this.hasZ,this.elevationInfo),labelOptions:t},visible:!0})}let r=import(`../2d/interactive/SegmentLabels2D.js`),{SegmentLabels2D:i}=await this._updatingHandles.addPromise(r);return this._isSegmentLabelsSetupStale(n,e,t)?null:new i({context:{view:this.view,editGeometryOperations:e,elevationInfo:D(this.hasZ,this.elevationInfo),labelOptions:t},visible:!0})});return u(n.promise)}_isSegmentLabelsSetupStale(e,t,n){return e.aborted||this.editGeometryOperations!==t||this.toolOptions?.labels!==n||!n.enabled||this.globalStateManager.segmentLabelsDisabled}};n([y()],$.prototype,`_commandsSuspended`,void 0),n([y()],$.prototype,`_zOfLastUserInput`,null),n([y()],$.prototype,`_snappingVisualizer`,void 0),n([y()],$.prototype,`_segmentLabels`,void 0),n([y()],$.prototype,`_segmentLabelsImportTask`,void 0),n([y()],$.prototype,`_tooltipDependencies`,null),n([y()],$.prototype,`_editSessionManagerContext`,null),n([y()],$.prototype,`_densificationParameters`,null),n([y({constructOnly:!0,nonNullable:!0})],$.prototype,`view`,void 0),n([y()],$.prototype,`automaticManipulatorSelection`,void 0),n([y()],$.prototype,`updating`,null),n([y()],$.prototype,`coordinateHelper`,null),n([y()],$.prototype,`editGeometry`,null),n([y()],$.prototype,`editGeometryOperations`,null),n([y()],$.prototype,`unprocessedGeometry`,null),n([y()],$.prototype,`simplifiedGeometryPreview`,null),n([y()],$.prototype,`_suppressCoincidentPointOverlaysIn3D`,null),n([y()],$.prototype,`_shapeVisualGeometry`,null),n([y()],$.prototype,`_vertexVisualGeometry`,null),n([y()],$.prototype,`snappingManager`,void 0),n([y()],$.prototype,`toolOptions`,void 0),n([y()],$.prototype,`disableTouchDrag`,void 0),n([y()],$.prototype,`elevationInfo`,void 0),n([y()],$.prototype,`hasZ`,void 0),n([y()],$.prototype,`defaultZ`,void 0),n([y()],$.prototype,`directionOptions`,void 0),n([y()],$.prototype,`canUndo`,null),n([y()],$.prototype,`canRedo`,null),n([y()],$.prototype,`pluginStack`,null),n([y()],$.prototype,`mostDownstreamPlugin`,null),n([y()],$.prototype,`mostUpstreamPlugin`,null),n([y()],$.prototype,`lastScreenPosition`,void 0),n([y()],$.prototype,`positionOfLastUserInput`,null),n([y()],$.prototype,`tooltipManager`,void 0),n([y()],$.prototype,`measurementManager`,void 0),n([y()],$.prototype,`globalStateManager`,void 0),n([y()],$.prototype,`editSessionManager`,void 0),n([y()],$.prototype,`lifecycleManager`,void 0),n([y()],$.prototype,`surfaceManager`,void 0),n([y()],$.prototype,`interactiveHandleManager`,void 0),n([y()],$.prototype,`renderer`,void 0),n([y()],$.prototype,`readPluginSetting`,void 0),n([y()],$.prototype,`movementCommandContext`,null),n([y()],$.prototype,`tooltip`,null),n([y()],$.prototype,`activeTooltipInfo`,null),n([y()],$.prototype,`helpMessageKey`,null),n([y({constructOnly:!0})],$.prototype,`enableVertexVisuals`,void 0),$=n([b(`esri.views.draw.DrawTool`)],$);export{$ as DrawTool};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{removeUnordered as e,filterInPlace as t}from"../../core/arrayUtils.js";import n from"../../core/Handles.js";import"../../core/has.js";import r from"../../core/Logger.js";import{removeMaybe as i}from"../../core/maybe.js";import{recordPerformance as a}from"../../core/performance.js";import o from"../../core/PerformanceSampler.js";import{isAborted as s,createAbortError as c,when as l,isPromiseLike as u,ignoreAbortErrors as d}from"../../core/promiseUtils.js";import{watch as f,initial as p,when as m}from"../../core/reactiveUtils.js";import{signal as h}from"../../core/signal.js";import{Milliseconds as g}from"../../core/time.js";import _ from"./debugFlags.js";import{PromiseQueue as v}from"./PromiseQueue.js";import{Yield as y}from"./Yield.js";function b(){return new k}const x={RESOURCE_CONTROLLER_IMMEDIATE:`immediate`,RESOURCE_CONTROLLER:`schedule`,SLIDE:`slide`,STREAM_DATA_LOADER:`stream loader`,ELEVATION_QUERY:`elevation query`,TERRAIN_SURFACE:`terrain`,SURFACE_GEOMETRY_UPDATES:`surface geometry updates`,LOD_RENDERER:`LoD renderer`,GRAPHICS_CORE:`Graphics3D`,I3S:`I3S`,LYR3D:`Lyr3D`,TILES3D:`3DTiles`,POINT_CLOUD_LAYER:`point cloud`,FEATURE_TILE_FETCHER:`feature fetcher`,STREAM_CONTROLLER:`stream controller`,SCREEN_POLYGON_INTERSECTION:`screen polygon intersection`,OCCLUSION_QUERY:`occlusion query`,OVERLAY:`overlay`,OVERLAY_RENDERER:`overlay renderer`,STAGE:`stage`,GRAPHICS_DECONFLICTOR:`graphics deconflictor`,FILTER_VISIBILITY:`graphics filter visibility`,SCALE_VISIBILITY:`graphics scale visibility`,FRUSTUM_VISIBILITY:`graphics frustum visibility`,POINT_OF_INTEREST_FREQUENT:`POI frequent`,POINT_OF_INTEREST_INFREQUENT:`POI infrequent`,LABELER:`labeler`,FEATURE_QUERY_ENGINE:`feature query`,FEATURE_TILE_TREE:`feature tile tree`,FEATURE_TILE_TREE_ACTIVE:`fast feature tile tree`,ELEVATION_ALIGNMENT:`elevation alignment`,ELEVATION_ALIGNMENT_SCENE:`elevation alignment scene`,TEXT_TEXTURE_ATLAS:`text texture atlas`,TEXTURE_UNLOAD:`texture unload`,LINE_OF_SIGHT_TOOL:`line of sight tool`,LINE_OF_SIGHT_TOOL_INTERACTIVE:`interactive line of sight tool`,VOLUME_MEASUREMENT:`volume measurement`,ELEVATION_PROFILE:`elevation profile`,SNAPPING:`snapping`,SHADOW_ACCUMULATOR:`shadow accumulator`,CLOUDS_GENERATOR:`clouds generator`,FLOW_GENERATOR:`flow generator`,GAUSSIAN_SPLAT_SORTING:`gaussian splat sorting`,GAUSSIAN_SPLAT_TEXTURE_ATLAS:`gaussian splat texture atlas`,MAPVIEW_FETCH_QUEUE:`mapview fetch queue`,MAPVIEW_LAYERVIEW_UPDATE:`mapview layerview update`,MAPVIEW_VECTOR_TILE_PARSING_QUEUE:`mapview vector tile parsing queue`,NONE:0,TEST_PRIO:1},S=new Map([[x.RESOURCE_CONTROLLER_IMMEDIATE,0],[x.RESOURCE_CONTROLLER,4],[x.SLIDE,0],[x.STREAM_DATA_LOADER,0],[x.ELEVATION_QUERY,0],[x.TERRAIN_SURFACE,1],[x.SURFACE_GEOMETRY_UPDATES,1],[x.LOD_RENDERER,2],[x.GRAPHICS_CORE,2],[x.I3S,2],[x.LYR3D,2],[x.TILES3D,3],[x.POINT_CLOUD_LAYER,2],[x.FEATURE_TILE_FETCHER,2],[x.STREAM_CONTROLLER,2],[x.SCREEN_POLYGON_INTERSECTION,0],[x.CLOUDS_GENERATOR,2],[x.OCCLUSION_QUERY,2],[x.OVERLAY,4],[x.OVERLAY_RENDERER,4],[x.STAGE,4],[x.GRAPHICS_DECONFLICTOR,4],[x.FILTER_VISIBILITY,4],[x.SCALE_VISIBILITY,4],[x.FRUSTUM_VISIBILITY,4],[x.POINT_OF_INTEREST_FREQUENT,6],[x.POINT_OF_INTEREST_INFREQUENT,30],[x.LABELER,8],[x.FEATURE_QUERY_ENGINE,8],[x.FEATURE_TILE_TREE,16],[x.FEATURE_TILE_TREE_ACTIVE,0],[x.ELEVATION_ALIGNMENT,12],[x.ELEVATION_ALIGNMENT_SCENE,14],[x.TEXT_TEXTURE_ATLAS,12],[x.TEXTURE_UNLOAD,12],[x.LINE_OF_SIGHT_TOOL,16],[x.LINE_OF_SIGHT_TOOL_INTERACTIVE,0],[x.VOLUME_MEASUREMENT,4],[x.SNAPPING,0],[x.SHADOW_ACCUMULATOR,30],[x.FLOW_GENERATOR,12],[x.GAUSSIAN_SPLAT_SORTING,2],[x.GAUSSIAN_SPLAT_TEXTURE_ATLAS,12],[x.MAPVIEW_FETCH_QUEUE,0],[x.MAPVIEW_LAYERVIEW_UPDATE,2],[x.MAPVIEW_VECTOR_TILE_PARSING_QUEUE,0]]);function C(e){return S.has(e)?S.get(e):typeof e==`number`?e:1}const w=g(6.5),T=g(1),E=g(30),D=g(1e3/30),O=g(100);class k{get updating(){return this._updating.value}_updatingChanged(){this._updating.value=this._tasks.some(e=>e.needsUpdate)}constructor(){this._updating=h(!0),this._microTaskQueued=!1,this._frameNumber=0,this.performanceInfo={total:new o(`total`),tasks:new Map},this._frameTaskTimes=new Map,this._budget=new j,this.state=1,this._tasks=[],this._runQueue=[],this._load=0,this._forceTask=!1,this._debug=!1,this._debugHandle=f(()=>_.SCHEDULER_LOG_SLOW_TASKS,e=>this._debug=e,p);for(let e of Object.keys(x))this.performanceInfo.tasks.set(x[e],new o(String(x[e])))}destroy(){this._tasks.forEach(e=>e.remove()),this._tasks.length=0,this._runQueue.length=0,i(this._debugHandle),this._microTaskQueued=!1,this._updatingChanged()}taskRunningChanged(e){this._updatingChanged(),e&&this._budget.remaining>0&&!this._microTaskQueued&&(this._microTaskQueued=!0,queueMicrotask(()=>{this._microTaskQueued&&(this._microTaskQueued=!1,this._budget.remaining>0&&this._schedule()&&this._runFrame())}))}registerTask(e,t){let n=new A(this,e,t);return this._tasks.push(n),this._updatingChanged(),this.performanceInfo.tasks.has(e)||this.performanceInfo.tasks.set(e,new o(e)),n}get load(){return this._load}frame(e){if(this._startFrameTaskTimes(),this._updateBudget(e)){let e=this._budget.now();this._runFrame();let t=this._budget.now();this._recordFrameTaskTimes(t-e);let n=this.state===2?`Idle`:this.state===1?`Interacting`:`Animating`;return a(`${n} Frame Tasks`,e,t,`Maps SDK`,`Scheduling`),!0}return this._recordFrameTaskTimes(0),!1}_updateBudget(e){this._test&&(this._test.usedBudget=0),++this._frameNumber;let t=w,n=e.frameDuration,r=T;switch(this.state){case 2:t=g(0),n=g(Math.max(O,e.frameDuration)),r=E;break;case 1:n=g(Math.max(D,e.frameDuration))}return n=g(n-e.elapsedFrameTime-t),this.state!==2&&n<T&&!this._forceTask?(this._forceTask=!0,!1):(n=g(Math.max(n,r)),this._budget.reset(n),this._updateLoad(),this._schedule())}_runFrame(){this._forceTask=!1,this._microTaskQueued=!1,this._run(),this._test&&(this._test.usedBudget=this._budget.elapsed)}stopFrame(){this._budget.reset(g(0)),this._budget.madeProgress()}removeTask(t){e(this._tasks,t),e(this._runQueue,t),this._updatingChanged()}_updateTask(e){this._tasks.forEach(t=>{t.name===e&&t.setPriority(e)})}_getState(e){if(this._runQueue.some(t=>t.name===e))return`s`;let t=`i`;return this._tasks.forEach(n=>{n.name===e&&n.needsUpdate&&(n.schedulePriority<=1?t=`r`:t!==`r`&&(t=`w`))}),t}_getRuntime(e){let t=0;return this._tasks.forEach(n=>{n.name===e&&(t+=n.runtime)}),t}_resetRuntimes(){this._tasks.forEach(e=>e.runtime=0)}_getRunning(){let e=new Map;if(this._tasks.forEach(t=>{t.needsUpdate&&e.set(t.name,(e.get(t.name)||0)+1)}),e.size===0)return null;let t=``;return e.forEach((e,n)=>{t+=e>1?` ${e}x ${n}`:` ${n}`}),t}_updateLoad(){let e=this._tasks.reduce((e,t)=>t.needsUpdate?++e:e,0);this._load=this._load*.9+e*.09999999999999998}_schedule(){for(t(this._runQueue,e=>e.needsUpdate?!0:(e.schedulePriority=e.basePriority,!1)),this._tasks.forEach(e=>{e.basePriority===0&&e.needsUpdate&&!this._runQueue.includes(e)&&e.blockFrame!==this._frameNumber&&this._runQueue.unshift(e)});this._runQueue.length===0;){let e=!1,t=0;if(this._tasks.forEach(n=>{if(n.needsUpdate&&n.schedulePriority!==0&&n.basePriority!==0&&n.blockFrame!==this._frameNumber)switch(e=!0,t=Math.max(t,n.basePriority),n.schedulePriority){case 1:n.schedulePriority=0,this._runQueue.push(n);break;default:--n.schedulePriority}}),!e)return this._updatingChanged(),!1}return this._updatingChanged(),!0}_run(){do for(;this._runQueue.length>0;){let e=this._budget.now(),t=this._runQueue.pop();this._budget.resetProgress();try{t.task.runTask(this._budget)===y&&(t.blockFrame=this._frameNumber)}catch(e){r.getLogger(`esri.views.support.Scheduler`).error(`Exception in task "${t.name}"`,e),t.blockFrame=this._frameNumber}!this._budget.hasProgressed&&t.blockFrame!==this._frameNumber&&t.needsUpdate&&(t.name,x.I3S,t.blockFrame=this._frameNumber),t.schedulePriority=t.basePriority;let n=this._budget.now(),i=n-e;if(a(`${t.name}`,e,n,`Maps SDK`,`Scheduling`),t.runtime+=i,this._frameTaskTimes.set(t.priority,this._frameTaskTimes.get(t.priority)+i),this._budget.remaining<=0){this._updatingChanged();return}}while(this._schedule());this._updatingChanged()}_startFrameTaskTimes(){for(let e of Object.keys(x))this._frameTaskTimes.set(x[e],0)}_recordFrameTaskTimes(e){this._frameTaskTimes.forEach((e,t)=>this.performanceInfo.tasks.get(t).push(e)),this.performanceInfo.total.push(e)}get test(){return this._test}}class A{get task(){return this._task.value}get readyToRun(){return this._queue.readyToRun}get updating(){return this._queue.updating}constructor(e,t,r){this._scheduler=e,this.name=t,this.blockFrame=0,this.runtime=0,this._queue=new v,this._handles=new n,this._basePriority=C(t),this.schedulePriority=this._basePriority,this._task=h(r??this._queue),this._handles.add(m(()=>this.task.readyToRun,t=>e.taskRunningChanged(t)))}remove(){this._queue.drain(M),this._scheduler.removeTask(this),this.schedule=F.schedule,this.reschedule=F.reschedule,this.scheduleGenerator=F.scheduleGenerator,this._handles.destroy()}[Symbol.dispose](){this.remove()}get basePriority(){return this._basePriority}setPriority(e){if(this.name===e)return;this.name=e;let t=C(e);(this._basePriority===0||this.schedulePriority!==0)&&(this.schedulePriority=t),this._basePriority=t}get priority(){return this.name}set priority(e){this.setPriority(e)}get needsUpdate(){return this.readyToRun||!this.task.destroyed&&this.task.readyToRun}schedule(e,t,n){return this._queue.push(e,t,n)}reschedule(e,t,n){return this._queue.unshift(e,t,n)}scheduleGenerator(e,t,n){return this._queue.pushGenerator(e,t,n)}processQueue(e){return this._queue.runTask(e)}}class j{constructor(){this._begin=performance?.now()??0,this._budget=0,this._done=!1,this._progressed=!1,this._enabled=!0}run(e){return!this.done&&(e()===!0&&this.madeProgress(),!0)}get done(){return this._done}get budget(){return this._budget}madeProgress(){return this._progressed=!0,this._done=this.elapsed>=this._budget&&this._enabled,this._done}get enabled(){return this._enabled}set enabled(e){this._enabled=e}reset(e){this._begin=this.now(),this._budget=e,this.resetProgress()}get remaining(){return Math.max(this._budget-this.elapsed,0)}now(){return performance.now()}get elapsed(){return this.now()-this._begin}resetProgress(){this._progressed=!1,this._done=!1}get hasProgressed(){return this._progressed}}const M=new j;M.enabled=!1;function N(e){let t=new j;return t.reset(e),t}class P{remove(){}[Symbol.dispose](){this.remove()}processQueue(){}schedule(e,t,n){try{if(s(t)){let e=c();return n?Promise.resolve(n(e)):Promise.reject(e)}return l(e(M))}catch(e){return Promise.reject(e)}}reschedule(e,t,n){return this.schedule(e,t,n)}async scheduleGenerator(e,t,n){if(s(t)){let e=c();if(n)return n(e);throw e}let r=e(M);for(;;){let e=r.next(M),i=u(e)?await e:e;if(s(t)){let e=c();if(n){let t=n(e),i=r.return(null);return u(i)&&await d(i),t}let t=r.throw(e);throw u(t)&&await d(t),e}if(i.done)return i.value}}}const F=new P;export{F as ImmediateTask,x as TaskPriority,C as getTaskPriority,N as makeBudget,b as newScheduler,M as noBudget,S as taskPriorities};
2
+ import{removeUnordered as e,filterInPlace as t}from"../../core/arrayUtils.js";import n from"../../core/Handles.js";import"../../core/has.js";import r from"../../core/Logger.js";import{removeMaybe as i}from"../../core/maybe.js";import{recordPerformance as a}from"../../core/performance.js";import o from"../../core/PerformanceSampler.js";import{isAborted as s,createAbortError as c,when as l,isPromiseLike as u,ignoreAbortErrors as d}from"../../core/promiseUtils.js";import{watch as f,initial as p,when as m}from"../../core/reactiveUtils.js";import{signal as h}from"../../core/signal.js";import{Milliseconds as g}from"../../core/time.js";import _ from"./debugFlags.js";import{PromiseQueue as v}from"./PromiseQueue.js";import{Yield as y}from"./Yield.js";function b(){return new k}const x={RESOURCE_CONTROLLER_IMMEDIATE:`immediate`,RESOURCE_CONTROLLER:`schedule`,SLIDE:`slide`,STREAM_DATA_LOADER:`stream loader`,ELEVATION_QUERY:`elevation query`,TERRAIN_SURFACE:`terrain`,SURFACE_GEOMETRY_UPDATES:`surface geometry updates`,LOD_RENDERER:`LoD renderer`,GRAPHICS_CORE:`Graphics3D`,I3S:`I3S`,LYR3D:`Lyr3D`,TILES3D:`3DTiles`,POINT_CLOUD_LAYER:`point cloud`,FEATURE_TILE_FETCHER:`feature fetcher`,STREAM_CONTROLLER:`stream controller`,SCREEN_POLYGON_INTERSECTION:`screen polygon intersection`,OCCLUSION_QUERY:`occlusion query`,OVERLAY:`overlay`,OVERLAY_RENDERER:`overlay renderer`,STAGE:`stage`,GRAPHICS_DECONFLICTOR:`graphics deconflictor`,FILTER_VISIBILITY:`graphics filter visibility`,SCALE_VISIBILITY:`graphics scale visibility`,FRUSTUM_VISIBILITY:`graphics frustum visibility`,POINT_OF_INTEREST_FREQUENT:`POI frequent`,POINT_OF_INTEREST_INFREQUENT:`POI infrequent`,LABELER:`labeler`,FEATURE_QUERY_ENGINE:`feature query`,FEATURE_TILE_TREE:`feature tile tree`,FEATURE_TILE_TREE_ACTIVE:`fast feature tile tree`,ELEVATION_ALIGNMENT:`elevation alignment`,ELEVATION_ALIGNMENT_SCENE:`elevation alignment scene`,TEXT_TEXTURE_ATLAS:`text texture atlas`,TEXTURE_UNLOAD:`texture unload`,LINE_OF_SIGHT_TOOL:`line of sight tool`,LINE_OF_SIGHT_TOOL_INTERACTIVE:`interactive line of sight tool`,VOLUME_MEASUREMENT:`volume measurement`,ELEVATION_PROFILE:`elevation profile`,SNAPPING:`snapping`,SHADOW_ACCUMULATOR:`shadow accumulator`,CLOUDS_GENERATOR:`clouds generator`,FLOW_GENERATOR:`flow generator`,GAUSSIAN_SPLAT_SORTING:`gaussian splat sorting`,GAUSSIAN_SPLAT_TEXTURE_ATLAS:`gaussian splat texture atlas`,MAPVIEW_FETCH_QUEUE:`mapview fetch queue`,MAPVIEW_LAYERVIEW_UPDATE:`mapview layerview update`,MAPVIEW_VECTOR_TILE_PARSING_QUEUE:`mapview vector tile parsing queue`,NONE:0,TEST_PRIO:1},S=new Map([[x.RESOURCE_CONTROLLER_IMMEDIATE,0],[x.RESOURCE_CONTROLLER,4],[x.SLIDE,0],[x.STREAM_DATA_LOADER,0],[x.ELEVATION_QUERY,0],[x.TERRAIN_SURFACE,1],[x.SURFACE_GEOMETRY_UPDATES,1],[x.LOD_RENDERER,2],[x.GRAPHICS_CORE,2],[x.I3S,2],[x.LYR3D,2],[x.TILES3D,3],[x.POINT_CLOUD_LAYER,2],[x.FEATURE_TILE_FETCHER,2],[x.STREAM_CONTROLLER,2],[x.SCREEN_POLYGON_INTERSECTION,0],[x.CLOUDS_GENERATOR,2],[x.OCCLUSION_QUERY,2],[x.OVERLAY,4],[x.OVERLAY_RENDERER,4],[x.STAGE,4],[x.GRAPHICS_DECONFLICTOR,4],[x.FILTER_VISIBILITY,4],[x.SCALE_VISIBILITY,4],[x.FRUSTUM_VISIBILITY,4],[x.POINT_OF_INTEREST_FREQUENT,6],[x.POINT_OF_INTEREST_INFREQUENT,30],[x.LABELER,8],[x.FEATURE_QUERY_ENGINE,8],[x.FEATURE_TILE_TREE,16],[x.FEATURE_TILE_TREE_ACTIVE,0],[x.ELEVATION_ALIGNMENT,12],[x.ELEVATION_ALIGNMENT_SCENE,14],[x.TEXT_TEXTURE_ATLAS,12],[x.TEXTURE_UNLOAD,12],[x.LINE_OF_SIGHT_TOOL,16],[x.LINE_OF_SIGHT_TOOL_INTERACTIVE,0],[x.VOLUME_MEASUREMENT,4],[x.SNAPPING,0],[x.SHADOW_ACCUMULATOR,30],[x.FLOW_GENERATOR,12],[x.GAUSSIAN_SPLAT_SORTING,2],[x.GAUSSIAN_SPLAT_TEXTURE_ATLAS,12],[x.MAPVIEW_FETCH_QUEUE,0],[x.MAPVIEW_LAYERVIEW_UPDATE,2],[x.MAPVIEW_VECTOR_TILE_PARSING_QUEUE,0]]);function C(e){return S.has(e)?S.get(e):typeof e==`number`?e:1}const w=g(6.5),T=g(1),E=g(30),D=g(1e3/30),O=g(100);class k{get updating(){return this._updating.value}_updatingChanged(){this._updating.value=this._tasks.some(e=>e.needsUpdate)}constructor(){this._updating=h(!0),this._microTaskQueued=!1,this._frameNumber=0,this.performanceInfo={total:new o(`total`),tasks:new Map},this._frameTaskTimes=new Map,this._budget=new j,this.state=1,this._tasks=[],this._runQueue=[],this._load=0,this._forceTask=!1,this._debug=!1,this._debugHandle=f(()=>_.SCHEDULER_LOG_SLOW_TASKS,e=>this._debug=e,p);for(let e of Object.keys(x))this.performanceInfo.tasks.set(x[e],new o(String(x[e])))}destroy(){this._tasks.forEach(e=>e.remove()),this._tasks.length=0,this._runQueue.length=0,i(this._debugHandle),this._microTaskQueued=!1,this._updatingChanged()}taskRunningChanged(e){this._updatingChanged(),e&&this._budget.remaining>0&&!this._microTaskQueued&&(this._microTaskQueued=!0,queueMicrotask(()=>{this._microTaskQueued&&(this._microTaskQueued=!1,this._budget.remaining>0&&this._schedule()&&this._runFrame())}))}registerTask(e,t){let n=new A(this,e,t);return this._tasks.push(n),this._updatingChanged(),this.performanceInfo.tasks.has(e)||this.performanceInfo.tasks.set(e,new o(e)),n}get load(){return this._load}frame(e){if(this._startFrameTaskTimes(),this._updateBudget(e)){let e=this._budget.now();this._runFrame();let t=this._budget.now();this._recordFrameTaskTimes(t-e);let n=this.state===2?`Idle`:this.state===1?`Interacting`:`Animating`;return a(`${n} Frame Tasks`,e,t,`Maps SDK`,`Scheduling`),!0}return this._recordFrameTaskTimes(0),!1}_updateBudget(e){this._test&&(this._test.usedBudget=0),++this._frameNumber;let t=w,n=e.frameDuration,r=T;switch(this.state){case 2:t=g(0),n=g(Math.max(O,e.frameDuration)),r=E;break;case 1:n=g(Math.max(D,e.frameDuration))}return n=g(n-e.elapsedFrameTime-t),this.state!==2&&n<T&&!this._forceTask?(this._forceTask=!0,!1):(n=g(Math.max(n,r)),this._budget.reset(n),this._updateLoad(),this._schedule())}_runFrame(){this._forceTask=!1,this._microTaskQueued=!1,this._run(),this._test&&(this._test.usedBudget=this._budget.elapsed)}stopFrame(){this._budget.reset(g(0)),this._budget.madeProgress()}removeTask(t){e(this._tasks,t),e(this._runQueue,t),this._updatingChanged()}_updateTask(e){this._tasks.forEach(t=>{t.name===e&&t.setPriority(e)})}_getState(e){if(this._runQueue.some(t=>t.name===e))return`s`;let t=`i`;return this._tasks.forEach(n=>{n.name===e&&n.needsUpdate&&(n.schedulePriority<=1?t=`r`:t!==`r`&&(t=`w`))}),t}_getRuntime(e){let t=0;return this._tasks.forEach(n=>{n.name===e&&(t+=n.runtime)}),t}_resetRuntimes(){this._tasks.forEach(e=>e.runtime=0)}_getRunning(){let e=new Map;if(this._tasks.forEach(t=>{t.needsUpdate&&e.set(t.name,(e.get(t.name)||0)+1)}),e.size===0)return null;let t=``;return e.forEach((e,n)=>{t+=e>1?` ${e}x ${n}`:` ${n}`}),t}_updateLoad(){let e=this._tasks.reduce((e,t)=>t.needsUpdate?++e:e,0);this._load=this._load*.9+e*.09999999999999998}_schedule(){for(t(this._runQueue,e=>e.needsUpdate?!0:(e.schedulePriority=e.basePriority,!1)),this._tasks.forEach(e=>{e.basePriority===0&&e.needsUpdate&&!this._runQueue.includes(e)&&e.blockFrame!==this._frameNumber&&this._runQueue.unshift(e)});this._runQueue.length===0;){let e=!1,t=0;if(this._tasks.forEach(n=>{if(n.needsUpdate&&n.schedulePriority!==0&&n.basePriority!==0&&n.blockFrame!==this._frameNumber)switch(e=!0,t=Math.max(t,n.basePriority),n.schedulePriority){case 1:n.schedulePriority=0,this._runQueue.push(n);break;default:--n.schedulePriority}}),!e)return this._updatingChanged(),!1}return this._updatingChanged(),!0}_run(){do for(;this._runQueue.length>0;){let e=this._budget.now(),t=this._runQueue.pop();this._budget.resetProgress();try{t.task.runTask(this._budget)===y&&(t.blockFrame=this._frameNumber)}catch(e){r.getLogger(`esri.views.support.Scheduler`).error(`Exception in task "${t.name}"`,e),t.blockFrame=this._frameNumber}!this._budget.hasProgressed&&t.blockFrame!==this._frameNumber&&t.needsUpdate&&(t.name,x.I3S,t.blockFrame=this._frameNumber),t.schedulePriority=t.basePriority;let n=this._budget.now(),i=n-e;if(a(`${t.name}`,e,n,`Maps SDK`,`Scheduling`),t.runtime+=i,this._frameTaskTimes.set(t.priority,this._frameTaskTimes.get(t.priority)+i),this._budget.remaining<=0){this._updatingChanged();return}}while(this._schedule());this._updatingChanged()}_startFrameTaskTimes(){for(let e of Object.keys(x))this._frameTaskTimes.set(x[e],0)}_recordFrameTaskTimes(e){this._frameTaskTimes.forEach((e,t)=>this.performanceInfo.tasks.get(t).push(e)),this.performanceInfo.total.push(e)}get test(){return this._test}}class A{get task(){return this._task.value}get readyToRun(){return this._queue.readyToRun}get updating(){return this._queue.updating}constructor(e,t,r){this._scheduler=e,this.name=t,this.blockFrame=0,this.runtime=0,this._queue=new v,this._handles=new n,this._basePriority=C(t),this.schedulePriority=this._basePriority,this._task=h(r??this._queue),this._handles.add(m(()=>this.task.readyToRun,t=>e.taskRunningChanged(t)))}remove(){this._queue.drain(M),this._scheduler.removeTask(this),this.schedule=F.schedule,this.reschedule=F.reschedule,this.scheduleGenerator=F.scheduleGenerator,this._handles.destroy()}[Symbol.dispose](){this.remove()}get basePriority(){return this._basePriority}setPriority(e){if(this.name===e)return;this.name=e;let t=C(e);(this._basePriority===0||this.schedulePriority!==0)&&(this.schedulePriority=t),this._basePriority=t}get priority(){return this.name}set priority(e){this.setPriority(e)}get needsUpdate(){return this.readyToRun||!this.task.destroyed&&this.task.readyToRun}schedule(e,t,n){return this._queue.push(e,t,n)}reschedule(e,t,n){return this._queue.unshift(e,t,n)}scheduleGenerator(e,t,n){return this._queue.pushGenerator(e,t,n)}processQueue(e){return this._queue.runTask(e)}}class j{constructor(){this._begin=performance?.now()??0,this._budget=0,this._done=!1,this._progressed=!1,this._enabled=!0}run(e){return!this.done&&(e()===!0&&this.madeProgress(),!0)}get done(){return this._done}get budget(){return this._budget}madeProgress(){return this._progressed=!0,this._done=this._enabled&&this._budget!==1/0&&this.elapsed>=this._budget,this._done}get enabled(){return this._enabled}set enabled(e){this._enabled=e}reset(e){this._begin=this.now(),this._budget=e,this.resetProgress()}get remaining(){return Math.max(this._budget-this.elapsed,0)}now(){return performance.now()}get elapsed(){return this.now()-this._begin}resetProgress(){this._progressed=!1,this._done=!1}get hasProgressed(){return this._progressed}}const M=new j;M.enabled=!1;function N(e){let t=new j;return t.reset(e),t}class P{remove(){}[Symbol.dispose](){this.remove()}processQueue(){}schedule(e,t,n){try{if(s(t)){let e=c();return n?Promise.resolve(n(e)):Promise.reject(e)}return l(e(M))}catch(e){return Promise.reject(e)}}reschedule(e,t,n){return this.schedule(e,t,n)}async scheduleGenerator(e,t,n){if(s(t)){let e=c();if(n)return n(e);throw e}let r=e(M);for(;;){let e=r.next(M),i=u(e)?await e:e;if(s(t)){let e=c();if(n){let t=n(e),i=r.return(null);return u(i)&&await d(i),t}let t=r.throw(e);throw u(t)&&await d(t),e}if(i.done)return i.value}}}const F=new P;export{F as ImmediateTask,x as TaskPriority,C as getTaskPriority,N as makeBudget,b as newScheduler,M as noBudget,S as taskPriorities};
@@ -137,7 +137,7 @@ export interface DirectionsProperties extends WidgetProperties, Partial<Pick<Dir
137
137
  * @since 4.6
138
138
  * @see [DirectionsViewModel](https://developers.arcgis.com/javascript/latest/references/core/widgets/Directions/DirectionsViewModel/)
139
139
  * @see [RouteLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/RouteLayer/)
140
- * @see [Guide topic - Access secure resources](https://developers.arcgis.com/javascript/latest/secure-resources/)
140
+ * @see [Guide topic - Authentication and access tokens](https://developers.arcgis.com/javascript/latest/authentication/access-tokens/)
141
141
  * @see [Sample - Directions widget](https://developers.arcgis.com/javascript/latest/sample-code/widgets-directions/)
142
142
  * @example
143
143
  * // 1. Add empty RouteLayer to Directions widget
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import t from"../../../core/Accessor.js";import{throwIfAborted as n}from"../../../core/promiseUtils.js";import{property as r,subclass as i}from"../../../core/accessorSupport/decorators.js";import a from"../../../geometry/Point.js";import{polygonCentroidPoint as o}from"../../../geometry/support/centroid.js";import s from"../../../layers/orientedImagery/core/ExposurePoint.js";import{createFeatureCoverage as c}from"../featureCoverage.js";import{NoSequenceFoundError as l,NoImageInSequenceError as u,InvalidDirectionError as d}from"./errors.js";import{queryNextLocationFeatures as f,queryAfterSequenceField as p,querySequenceFeaturesAroundPoint as m,queryOffsetSequenceFeatures as h}from"./queries.js";import{shouldQueryAndNavigateSequentially as g,shouldQueryAndNavigate as _}from"./utils.js";let v=class extends t{constructor(e){super(e),this._navigating=!1,this.viewModel=null}get currentNode(){return this.viewModel.currentNode}get layer(){return this.viewModel.layer}get navigating(){return this._navigating}get navigationNodes(){return this.viewModel.navigationNodes}async _queryAndHandleFeatureResponse(e,t,r,i,a){let{error:o,nextLocation:s,response:c}=await f(e,t,r,i,a);if(n(a),o)throw o;this.viewModel.selectedPoint=s,await this.viewModel.processFeatureResponse(c,s,{signal:a?.signal,loadBestImage:!1})}async afterNavigate(e,t,n){return await this.viewModel.selectBestFeature(t.id,n),t}async navigate(e,t){this._navigating=!0;try{let n;if(`direction`in t?n=await this.navigateInDirection(e,t):(`step`in t||`goTo`in t)&&(n=await this.navigateInSequence(e,t)),this._navigating=!1,!n)throw Error(`No next node found`);return await this.afterNavigate(e,n,t)}catch(e){throw this._navigating=!1,e}}async navigateBySkippingSteps(e,t){let{step:n}=t,{layer:r}=this,{layerFloorFilterClause:i,layerTimeExtent:d,preloadMediaSize:f}=this.viewModel;if(!r)throw Error(`Layer is not defined`);let h=e.attributes.sequenceOrder;if(!h)throw new l;let _=n>0?e.next:e.previous;if(!g(_))return _;let{response:v,error:y}=await p(r,h,n>0?`next`:`previous`,f,i??void 0,d,{signal:t.signal});if(y)throw Error(`Error querying sequence features`);let b=v?.features[0];if(!b)throw new u(n>0?`end`:`start`);let x=s.fromJSON({...b.toJSON(),layer:r}),{polygon:S}=c(x),C=a.fromJSON(o(S)),{response:w,error:T,nextLocation:E}=await m(r,C,i??void 0,d,{signal:t.signal});if(T)throw Error(`Error querying sequence features`);let D=new Set(w.features.map(e=>e.attributes.objectId));w.features=[...v.features.filter(e=>!D.has(e.attributes.objectId)),...w.features],this.viewModel.selectedPoint=E;let O=b.attributes.objectId;await this.viewModel.processFeatureResponse(w,E,{signal:t.signal,loadBestImage:!1});let k=this.viewModel.navigationNodes.toArray();k.sort((e,t)=>{let n=e.attributes.sequenceOrder,r=t.attributes.sequenceOrder;if(!n||!r)return 0;let i=n.length;for(let e=0;e<i;e++){let{value:t,sortOrder:i}=n[e],{value:a}=r[e];if(i===`desc`){if(t<a)return 1;if(t>a)return-1}else{if(t<a)return-1;if(t>a)return 1}}return 0});let A=k.length;for(let e=0;e<A;e++){let t=k[e];t.previous=e>0?k[e-1]:null,t.next=e<A-1?k[e+1]:null}return this.viewModel.selectedPoint=E,this.viewModel.navigationNodes.find(e=>e.id===O)}async navigateInDirection(e,t){let{viewModel:n}=this,{layer:r,layerFloorFilterClause:i,layerTimeExtent:a}=n,{direction:o,signal:s}=t,c=e?.[o];if(!c)throw new d(o);return _(c,o)&&await this._queryAndHandleFeatureResponse(r,c,i??void 0,a,{signal:s}),c}async navigateInSequence(e,t){return`step`in t?this.navigateBySkippingSteps(e,t):this.navigateTo(t)}async navigateTo(e){let{goTo:t}=e,{layer:n}=this,{layerFloorFilterClause:r,layerTimeExtent:i}=this.viewModel;if(!n)throw Error(`Layer is not defined`);let l=typeof t==`number`?t:1,u=this.viewModel.navigationNodes.find(e=>e.id===l);if(u)return u;let{response:d,error:f}=await h(n,l,1,t===`end`?`DESC`:`ASC`,r??void 0,i,{signal:e.signal});if(f)throw Error(`Error querying sequence features`);let p=d?.features[0];if(!p)throw Error(`No next node found`);let g=s.fromJSON({...p.toJSON(),layer:n}),{polygon:_}=c(g),v=a.fromJSON(o(_)),{response:y,error:b,nextLocation:x}=await m(n,v,r??void 0,i,{signal:e.signal});if(b)throw Error(`Error querying sequence features`);let S=[...y.features];S.push(p),y.features=S,this.viewModel.selectedPoint=x;let C=p.attributes.objectId;return await this.viewModel.processFeatureResponse(y,x,{signal:e.signal,loadBestImage:!1}),this.viewModel.selectedPoint=x,this.viewModel.navigationNodes.find(e=>e.id===C)}};e([r()],v.prototype,`_navigating`,void 0),e([r()],v.prototype,`currentNode`,null),e([r()],v.prototype,`layer`,null),e([r()],v.prototype,`navigating`,null),e([r()],v.prototype,`navigationNodes`,null),e([r({constructOnly:!0})],v.prototype,`viewModel`,void 0),v=e([i(`esri.widgets.OrientedImageryViewer.navigation.NavigationManager`)],v);export{v as default};
2
+ import{__decorate as e}from"tslib";import t from"../../../core/Accessor.js";import{throwIfAborted as n}from"../../../core/promiseUtils.js";import{property as r,subclass as i}from"../../../core/accessorSupport/decorators.js";import a from"../../../geometry/Point.js";import{polygonCentroidPoint as o}from"../../../geometry/support/centroid.js";import s from"../../../layers/orientedImagery/core/ExposurePoint.js";import{createFeatureCoverage as c}from"../featureCoverage.js";import{NoSequenceFoundError as l,NoImageInSequenceError as u,InvalidDirectionError as d}from"./errors.js";import{queryNextLocationFeatures as f,queryAfterSequenceField as p,querySequenceFeaturesAroundPoint as m,queryOffsetSequenceFeatures as h}from"./queries.js";import{shouldQueryAndNavigate as g}from"./utils.js";let _=class extends t{constructor(e){super(e),this._navigating=!1,this.viewModel=null}get currentNode(){return this.viewModel.currentNode}get layer(){return this.viewModel.layer}get navigating(){return this._navigating}get navigationNodes(){return this.viewModel.navigationNodes}async _queryAndHandleFeatureResponse(e,t,r,i,a){let{error:o,nextLocation:s,response:c}=await f(e,t,r,i,a);if(n(a),o)throw o;this.viewModel.selectedPoint=s,await this.viewModel.processFeatureResponse(c,s,{signal:a?.signal,loadBestImage:!1})}async afterNavigate(e,t,n){return await this.viewModel.selectBestFeature(t.id,n),t}async navigate(e,t){this._navigating=!0;try{let n;if(`direction`in t?n=await this.navigateInDirection(e,t):(`step`in t||`goTo`in t)&&(n=await this.navigateInSequence(e,t)),this._navigating=!1,!n)throw Error(`No next node found`);return await this.afterNavigate(e,n,t)}catch(e){throw this._navigating=!1,e}}async navigateBySkippingSteps(e,t){let{step:n}=t,{layer:r}=this,{layerFloorFilterClause:i,layerTimeExtent:d,preloadMediaSize:f}=this.viewModel;if(!r)throw Error(`Layer is not defined`);let h=e.attributes.sequenceOrder;if(!h)throw new l;let{response:g,error:_}=await p(r,h,n>0?`next`:`previous`,f,i??void 0,d,{signal:t.signal});if(_)throw Error(`Error querying sequence features`);let v=g?.features[0];if(!v)throw new u(n>0?`end`:`start`);let y=s.fromJSON({...v.toJSON(),layer:r}),{polygon:b}=c(y),x=a.fromJSON(o(b)),{response:S,error:C,nextLocation:w}=await m(r,x,i??void 0,d,{signal:t.signal});if(C)throw Error(`Error querying sequence features`);let T=new Set(S.features.map(e=>e.attributes.objectId));S.features=[...g.features.filter(e=>!T.has(e.attributes.objectId)),...S.features],this.viewModel.selectedPoint=w;let E=v.attributes.objectId;await this.viewModel.processFeatureResponse(S,w,{signal:t.signal,loadBestImage:!1});let D=this.viewModel.navigationNodes.toArray();D.sort((e,t)=>{let n=e.attributes.sequenceOrder,r=t.attributes.sequenceOrder;if(!n||!r)return 0;let i=n.length;for(let e=0;e<i;e++){let{value:t,sortOrder:i}=n[e],{value:a}=r[e];if(i===`desc`){if(t<a)return 1;if(t>a)return-1}else{if(t<a)return-1;if(t>a)return 1}}return 0});let O=D.length;for(let e=0;e<O;e++){let t=D[e];t.previous=e>0?D[e-1]:null,t.next=e<O-1?D[e+1]:null}return this.viewModel.selectedPoint=w,this.viewModel.navigationNodes.find(e=>e.id===E)}async navigateInDirection(e,t){let{viewModel:n}=this,{layer:r,layerFloorFilterClause:i,layerTimeExtent:a}=n,{direction:o,signal:s}=t,c=e?.[o];if(!c)throw new d(o);return g(c,o)&&await this._queryAndHandleFeatureResponse(r,c,i??void 0,a,{signal:s}),c}async navigateInSequence(e,t){return`step`in t?this.navigateBySkippingSteps(e,t):this.navigateTo(t)}async navigateTo(e){let{goTo:t}=e,{layer:n}=this,{layerFloorFilterClause:r,layerTimeExtent:i}=this.viewModel;if(!n)throw Error(`Layer is not defined`);let l=typeof t==`number`?t:1,u=this.viewModel.navigationNodes.find(e=>e.id===l);if(u)return u;let{response:d,error:f}=await h(n,l,1,t===`end`?`DESC`:`ASC`,r??void 0,i,{signal:e.signal});if(f)throw Error(`Error querying sequence features`);let p=d?.features[0];if(!p)throw Error(`No next node found`);let g=s.fromJSON({...p.toJSON(),layer:n}),{polygon:_}=c(g),v=a.fromJSON(o(_)),{response:y,error:b,nextLocation:x}=await m(n,v,r??void 0,i,{signal:e.signal});if(b)throw Error(`Error querying sequence features`);let S=[...y.features];S.push(p),y.features=S,this.viewModel.selectedPoint=x;let C=p.attributes.objectId;return await this.viewModel.processFeatureResponse(y,x,{signal:e.signal,loadBestImage:!1}),this.viewModel.selectedPoint=x,this.viewModel.navigationNodes.find(e=>e.id===C)}};e([r()],_.prototype,`_navigating`,void 0),e([r()],_.prototype,`currentNode`,null),e([r()],_.prototype,`layer`,null),e([r()],_.prototype,`navigating`,null),e([r()],_.prototype,`navigationNodes`,null),e([r({constructOnly:!0})],_.prototype,`viewModel`,void 0),_=e([i(`esri.widgets.OrientedImageryViewer.navigation.NavigationManager`)],_);export{_ as default};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{sqlAnd as e}from"../../../core/sql.js";import t from"../../../geometry/Point.js";import n from"../../../geometry/SpatialReference.js";import{polygonCentroidPoint as r}from"../../../geometry/support/centroid.js";import{searchImages as i}from"../../../layers/orientedImagery/queries.js";import{createFeatureCoverage as a}from"../featureCoverage.js";import{constructWhereClauseForSequenceFields as o}from"./utils.js";function s(e){return e.effectiveSequenceOrderField?.[0]?.fieldName??null}function c(e){let t=s(e);return t?`${t} IS NOT NULL`:null}async function l(e,n,o,s,c){let{polygon:l}=a(n.attributes),u=t.fromJSON(r(l));u.z=void 0;let d=_(e.definitionExpression,o),f,p;try{f=await i({layerInstanceOrURL:e,point:u,queryParams:{where:d,timeExtent:s}},c)}catch(e){p=e}return new h(u,f,p)}async function u(e,t,n,r,a){let o=e.effectiveSequenceOrderField?.map(({fieldName:e,sortOrder:t})=>`${e} ${t===`desc`?`DESC`:`ASC`}`),s=_(e.definitionExpression,n),c,l;try{c=await i({layerInstanceOrURL:e,point:t,queryParams:{where:s,orderByFields:o,returnGeometry:!0,outFields:[`*`],timeExtent:r}},a)}catch(e){l=e}return new h(t,c,l)}async function d(t,r,i,a=`ASC`,o,l,u){let d=s(t),f=_(t.definitionExpression,o,c(t)),p=typeof r==`number`?r-1:void 0;r===`string`&&d&&(f=e(f,`${d} = ${r}`));let h=t.createQuery();h.where=f,h.start=p,h.num=i,h.timeExtent=l,h.orderByFields=d?[`${d} ${a}`]:void 0,t.spatialReference.isGeographic&&(h.outSpatialReference=n.WebMercator);try{let e=await t.queryFeatures(h,u);return await g(e,t),new m(e)}catch(e){return new m(void 0,e)}}async function f(e,t,r,i=1,a,s,c){let l=e.effectiveSequenceOrderField?.map(({fieldName:e,sortOrder:t})=>`${e} ${t===`desc`?`DESC`:`ASC`}`),u=_(e.definitionExpression,a,o(t,r,e.fields)),d=e.createQuery();d.where=u,d.num=i,d.orderByFields=l,d.timeExtent=s,e.spatialReference.isGeographic&&(d.outSpatialReference=n.WebMercator);try{let t=await e.queryFeatures(d,c);return await g(t,e),new m(t)}catch(e){return new m(void 0,e)}}async function p(e,t,r,i,a){let o=Array.isArray(t)?t:[t],s=_(e.definitionExpression,r,`${e.objectIdField} IN (${o.join(`,`)})`),c=e.createQuery();c.where=s,c.returnZ=e.hasZ,e.spatialReference.isGeographic&&(c.outSpatialReference=n.WebMercator),i&&(c.timeExtent=i);try{let t=await e.queryFeatures(c,a);return await g(t,e),new m(t)}catch(e){return new m(void 0,e)}}class m{constructor(e,t){this.response=e,this.error=t}}class h{constructor(e,t,n){this.nextLocation=e,this.response=t,this.error=n}}async function g(e,t){let n=await import(`../../../layers/orientedImagery/core/ExposurePoint.js`).then(e=>e.default);e.features.forEach(e=>{let r=n.fromJSON({...e.toJSON(),layer:t});r&&(e.attributes=r)})}function _(...t){let n=`1=1`;return t.forEach(t=>{n=e(n,t)}),n}export{h as QueryNextLocationFeaturesResponse,m as QueryOrientedImageryFeaturesResponse,_ as mergeSQLstatements,f as queryAfterSequenceField,p as queryFeatureByObjectIds,l as queryNextLocationFeatures,d as queryOffsetSequenceFeatures,u as querySequenceFeaturesAroundPoint};
2
+ import{sqlAnd as e}from"../../../core/sql.js";import t from"../../../geometry/Point.js";import n from"../../../geometry/SpatialReference.js";import{polygonCentroidPoint as r}from"../../../geometry/support/centroid.js";import{searchImages as i}from"../../../layers/orientedImagery/queries.js";import{createFeatureCoverage as a}from"../featureCoverage.js";import{constructWhereClauseForSequenceFields as o}from"./utils.js";function s(e){return e.effectiveSequenceOrderField?.[0]?.fieldName??null}function c(e){let t=s(e);return t?`${t} IS NOT NULL`:null}async function l(e,n,o,s,c){let{polygon:l}=a(n.attributes),u=t.fromJSON(r(l));u.z=void 0;let d=_(e.definitionExpression,o),f,p;try{f=await i({layerInstanceOrURL:e,point:u,queryParams:{where:d,timeExtent:s}},c)}catch(e){p=e}return new h(u,f,p)}async function u(e,t,n,r,a){let o=e.effectiveSequenceOrderField?.map(({fieldName:e,sortOrder:t})=>`${e} ${t===`desc`?`DESC`:`ASC`}`),s=_(e.definitionExpression,n),c,l;try{c=await i({layerInstanceOrURL:e,point:t,queryParams:{where:s,orderByFields:o,returnGeometry:!0,outFields:[`*`],timeExtent:r}},a)}catch(e){l=e}return new h(t,c,l)}async function d(t,r,i,a=`ASC`,o,l,u){let d=s(t),f=_(t.definitionExpression,o,c(t)),p=typeof r==`number`?r-1:void 0;r===`string`&&d&&(f=e(f,`${d} = ${r}`));let h=t.createQuery();h.where=f,h.start=p,h.num=i,h.timeExtent=l,h.orderByFields=d?[`${d} ${a}`]:void 0,t.spatialReference.isGeographic&&(h.outSpatialReference=n.WebMercator);try{let e=await t.queryFeatures(h,u);return await g(e,t),new m(e)}catch(e){return new m(void 0,e)}}async function f(e,t,r,i=1,a,s,c){let l=e.effectiveSequenceOrderField?.map(({fieldName:e,sortOrder:t})=>{let n=t===`desc`;return`${e} ${(r===`previous`?!n:n)?`DESC`:`ASC`}`}),u=_(e.definitionExpression,a,o(t,r,e.fields)),d=e.createQuery();d.where=u,d.num=i,d.orderByFields=l,d.timeExtent=s,e.spatialReference.isGeographic&&(d.outSpatialReference=n.WebMercator);try{let t=await e.queryFeatures(d,c);return await g(t,e),new m(t)}catch(e){return new m(void 0,e)}}async function p(e,t,r,i,a){let o=Array.isArray(t)?t:[t],s=_(e.definitionExpression,r,`${e.objectIdField} IN (${o.join(`,`)})`),c=e.createQuery();c.where=s,c.returnZ=e.hasZ,e.spatialReference.isGeographic&&(c.outSpatialReference=n.WebMercator),i&&(c.timeExtent=i);try{let t=await e.queryFeatures(c,a);return await g(t,e),new m(t)}catch(e){return new m(void 0,e)}}class m{constructor(e,t){this.response=e,this.error=t}}class h{constructor(e,t,n){this.nextLocation=e,this.response=t,this.error=n}}async function g(e,t){let n=await import(`../../../layers/orientedImagery/core/ExposurePoint.js`).then(e=>e.default);e.features.forEach(e=>{let r=n.fromJSON({...e.toJSON(),layer:t});r&&(e.attributes=r)})}function _(...t){let n=`1=1`;return t.forEach(t=>{n=e(n,t)}),n}export{h as QueryNextLocationFeaturesResponse,m as QueryOrientedImageryFeaturesResponse,_ as mergeSQLstatements,f as queryAfterSequenceField,p as queryFeatureByObjectIds,l as queryNextLocationFeatures,d as queryOffsetSequenceFeatures,u as querySequenceFeaturesAroundPoint};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{sqlLiteral as e}from"../../../core/sql.js";import{getMetersPerUnitForSR as t}from"../../../core/units.js";import n from"../../../geometry/Extent.js";import{getWebMercatorScalingFactor as r}from"../../../layers/orientedImagery/transformations/utils.js";import{clockwiseDirections as i}from"../constants.js";function a(e,i){let{x:a,y:o,spatialReference:s}=e,c=r(o,s),l=t(s),u=i*c/l,d=a-u,f=a+u,p=o-u,m=o+u;return new n({xmin:d,xmax:f,ymin:p,ymax:m,spatialReference:e.spatialReference})}function o(e){return!e||e.previous===null||e.next===null}function s(e,t,n=1){if(e[t]==null)return!0;let r=e=>e?i.reduce((t,n)=>e[n]?t+1:t,0):0,a=new Set,o=[{node:e,depth:0}];for(;o.length;){let{node:e,depth:t}=o.shift();if(e&&!a.has(e)){if(a.add(e),r(e)<2)return!0;if(t<n)for(let n of i){let r=e[n];r&&!a.has(r)&&o.push({node:r,depth:t+1})}}}return!1}function c(e,t,n){if(!e)return`1=1`;switch(t){case`next`:return d(e,`next`,n);case`previous`:return d(e,`previous`,n);default:return`1=1`}}function l(e){return e!=null}function u(t,n,r){let i=r?.find(e=>e.name===t)?.type;return i===`date`||i===`string`?e(n,null,{type:i}):n}function d(e,t,n){return e.map((r,i)=>{let a=e.slice(0,i).map(e=>l(e?.value)?`(${e.fieldName} = ${u(e.fieldName,e.value,n)})`:null).filter(Boolean).join(` AND `),o=r.sortOrder===`asc`?t===`next`?`>`:`<`:t===`next`?`<`:`>`,s=[a,l(r?.value)?`(${r.fieldName} ${o} ${u(r.fieldName,r.value,n)})`:null].filter(Boolean);return s.length>1?`(${s.join(` AND `)})`:s.join(` AND `)}).filter(Boolean).join(` OR `)}export{c as constructWhereClauseForSequenceFields,a as createExtentAroundPoint,s as shouldQueryAndNavigate,o as shouldQueryAndNavigateSequentially};
2
+ import{sqlLiteral as e}from"../../../core/sql.js";import{getMetersPerUnitForSR as t}from"../../../core/units.js";import n from"../../../geometry/Extent.js";import{getWebMercatorScalingFactor as r}from"../../../layers/orientedImagery/transformations/utils.js";import{clockwiseDirections as i}from"../constants.js";function a(e,i){let{x:a,y:o,spatialReference:s}=e,c=r(o,s),l=t(s),u=i*c/l,d=a-u,f=a+u,p=o-u,m=o+u;return new n({xmin:d,xmax:f,ymin:p,ymax:m,spatialReference:e.spatialReference})}function o(e,t,n=1){if(e[t]==null)return!0;let r=e=>e?i.reduce((t,n)=>e[n]?t+1:t,0):0,a=new Set,o=[{node:e,depth:0}];for(;o.length;){let{node:e,depth:t}=o.shift();if(e&&!a.has(e)){if(a.add(e),r(e)<2)return!0;if(t<n)for(let n of i){let r=e[n];r&&!a.has(r)&&o.push({node:r,depth:t+1})}}}return!1}function s(e,t,n){if(!e)return`1=1`;switch(t){case`next`:return u(e,`next`,n);case`previous`:return u(e,`previous`,n);default:return`1=1`}}function c(e){return e!=null}function l(t,n,r){let i=r?.find(e=>e.name===t)?.type;return i===`date`||i===`string`?e(n,null,{type:i}):n}function u(e,t,n){return e.map((r,i)=>{let a=e.slice(0,i).map(e=>c(e?.value)?`(${e.fieldName} = ${l(e.fieldName,e.value,n)})`:null).filter(Boolean).join(` AND `),o=r.sortOrder===`asc`?t===`next`?`>`:`<`:t===`next`?`<`:`>`,s=[a,c(r?.value)?`(${r.fieldName} ${o} ${l(r.fieldName,r.value,n)})`:null].filter(Boolean);return s.length>1?`(${s.join(` AND `)})`:s.join(` AND `)}).filter(Boolean).join(` OR `)}export{s as constructWhereClauseForSequenceFields,a as createExtentAroundPoint,o as shouldQueryAndNavigate};