@arcgis/core 6.0.0-next.33 → 6.0.0-next.35

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 (317) hide show
  1. package/Basemap.d.ts +2 -2
  2. package/README.md +2 -2
  3. package/analysis/ShadowCastAnalysis.d.ts +11 -5
  4. package/applications/Urban/meshUtils.d.ts +1 -0
  5. package/applications/Urban/meshUtils.js +1 -1
  6. package/arcgisGlobal.d.ts +1 -0
  7. package/assets/esri/core/libs/libtess/libtess-f32.wasm +0 -0
  8. package/assets/esri/core/libs/libtess/libtess-f64.wasm +0 -0
  9. package/assets/esri/core/workers/RemoteClient.js +1 -1
  10. package/assets/esri/core/workers/chunks/01f55004d64309f8538b.js +1 -0
  11. package/assets/esri/core/workers/chunks/0202eb8c2b2865f99981.js +1 -0
  12. package/assets/esri/core/workers/chunks/{67e533748435253aaba6.js → 0284f608d25c654fcc11.js} +1 -1
  13. package/assets/esri/core/workers/chunks/{f3dc0bc0e00635855a7a.js → 03daf6f235c6edef6268.js} +1 -1
  14. package/assets/esri/core/workers/chunks/04a1d08c3b5b1dc7628f.js +1 -0
  15. package/assets/esri/core/workers/chunks/{1eaf8bfdd3765a90ccc2.js → 0523f893870a1546d7d9.js} +1 -1
  16. package/assets/esri/core/workers/chunks/{1ee4df0fd61440cb5f02.js → 06102715e9a8f218e07c.js} +1 -1
  17. package/assets/esri/core/workers/chunks/{6029773458ab98600f67.js → 07e5482e1fc69be5de09.js} +1 -1
  18. package/assets/esri/core/workers/chunks/08140725277de5d2e41a.js +1 -0
  19. package/assets/esri/core/workers/chunks/{72d20d3957d612f86431.js → 0a508e25ec05363e1f04.js} +1 -1
  20. package/assets/esri/core/workers/chunks/{2d9a1f23ec6ce90723ac.js → 0d99bfb75dcb9fa29080.js} +1 -1
  21. package/assets/esri/core/workers/chunks/10ad7b35b6800d40444e.js +1 -0
  22. package/assets/esri/core/workers/chunks/1132e28aaa5825b10b6e.js +1 -0
  23. package/assets/esri/core/workers/chunks/{84038dd85005fea413eb.js → 139e753d95cfc9470e74.js} +1 -1
  24. package/assets/esri/core/workers/chunks/{dd30b02c5978c1c5f511.js → 155861fbd0e5fc2db80c.js} +1 -1
  25. package/assets/esri/core/workers/chunks/15950c2fb173b62ee0ec.js +1 -0
  26. package/assets/esri/core/workers/chunks/165ca7a97b611c8f26c4.js +1 -0
  27. package/assets/esri/core/workers/chunks/{418addce122dbb8897b4.js → 1a614bac5db42c6263f8.js} +1 -1
  28. package/assets/esri/core/workers/chunks/{0cc7fba402a93e6d2455.js → 1ae0c9345626e70affd3.js} +2 -2
  29. package/assets/esri/core/workers/chunks/{58c3ae6030def2ed5f31.js → 1b17f5f720f6cf3f6d73.js} +1 -1
  30. package/assets/esri/core/workers/chunks/{cd355baab983033c3ef0.js → 1ec772eaa63eb6937231.js} +1 -1
  31. package/assets/esri/core/workers/chunks/{f9dc38761b314d33890f.js → 1f51567f47c2e2fc8a23.js} +1 -1
  32. package/assets/esri/core/workers/chunks/{5c04835b0b52461183cd.js → 1fd82fcba2758741996a.js} +1 -1
  33. package/assets/esri/core/workers/chunks/21e1d423ee33f916547e.js +1 -0
  34. package/assets/esri/core/workers/chunks/2211ff0a1f1ae8100231.js +1 -0
  35. package/assets/esri/core/workers/chunks/{096b2bf1c0d69d27f20c.js → 247617c0dbae2386ab3b.js} +1 -1
  36. package/assets/esri/core/workers/chunks/{97ec46605f16333144b7.js → 26ea39dfdf887f357fce.js} +1 -1
  37. package/assets/esri/core/workers/chunks/{85de980c5b296ec69323.js → 279089a6a3f08022c678.js} +1 -1
  38. package/assets/esri/core/workers/chunks/29c610ce1c81ebb84a6b.js +1 -0
  39. package/assets/esri/core/workers/chunks/2b4dd42920d37b1ff0a9.js +2 -0
  40. package/assets/esri/core/workers/chunks/{8da2a10318f49d0dc73a.js → 31ef7b7074b3e3829763.js} +1 -1
  41. package/assets/esri/core/workers/chunks/{b657363113f4a37e634b.js → 3223f9fbc76ba9ef8d13.js} +1 -1
  42. package/assets/esri/core/workers/chunks/322b22a5d54e404bebd5.js +1 -0
  43. package/assets/esri/core/workers/chunks/{122e75b21699a4e83b15.js → 338d800d4efcc91cead1.js} +1 -1
  44. package/assets/esri/core/workers/chunks/3537fe95b83a13b156cc.js +1 -0
  45. package/assets/esri/core/workers/chunks/{360c944c610efa2051fc.js → 379db67f78161ebd5468.js} +2 -2
  46. package/assets/esri/core/workers/chunks/{f09bc86cd52224febfcb.js → 3b380e64566a6cce59e2.js} +1 -1
  47. package/assets/esri/core/workers/chunks/{be55771758e4bcef0976.js → 3e406043a374ee17475b.js} +1 -1
  48. package/assets/esri/core/workers/chunks/{e3b212f8af448ec29eef.js → 3fe4c89acd325d36618d.js} +1 -1
  49. package/assets/esri/core/workers/chunks/449a2dee17b54946f245.js +1 -0
  50. package/assets/esri/core/workers/chunks/46c290108a90518ef695.js +1 -0
  51. package/assets/esri/core/workers/chunks/{a596779eaeec7310671d.js → 478a89317a12e9b4d146.js} +1 -1
  52. package/assets/esri/core/workers/chunks/{fcc3902d6d9eda6f09f5.js → 48b8b57f559a53c6c513.js} +1 -1
  53. package/assets/esri/core/workers/chunks/{55a9eaeb152a3abada67.js → 4e5405134d079bdf9b7a.js} +1 -1
  54. package/assets/esri/core/workers/chunks/4f3e0d583cfa9d1d6727.js +2 -0
  55. package/assets/esri/core/workers/chunks/{d070fcb73ce274ab80e4.js → 5504ec9bd9ee4d10af07.js} +1 -1
  56. package/assets/esri/core/workers/chunks/552c36b40e5a5ec117fb.js +1 -0
  57. package/assets/esri/core/workers/chunks/5622f3faa59434772857.js +1 -0
  58. package/assets/esri/core/workers/chunks/{bd46a04a9ee4ea9e6ef1.js → 5864bce1498a13ee5b7e.js} +2 -2
  59. package/assets/esri/core/workers/chunks/59a1b637d2c107504a04.js +1 -0
  60. package/assets/esri/core/workers/chunks/59a88dd53f8806bbec06.js +1 -0
  61. package/assets/esri/core/workers/chunks/{f4d91d470ca5fea0bd26.js → 5bd1414220e42cb8ebcf.js} +1 -1
  62. package/assets/esri/core/workers/chunks/5c2fe67527c9d7b4dba3.js +1 -0
  63. package/assets/esri/core/workers/chunks/5c3aa8386705c5e40358.js +1 -0
  64. package/assets/esri/core/workers/chunks/5d781c2c6204cffffd0d.js +1 -0
  65. package/assets/esri/core/workers/chunks/{176d75e76318bfc25a53.js → 60c8eedd06080edab3e3.js} +1 -1
  66. package/assets/esri/core/workers/chunks/61d36730564c5ac5edab.js +1 -0
  67. package/assets/esri/core/workers/chunks/6604272ef6fe85279032.js +1 -0
  68. package/assets/esri/core/workers/chunks/{29cc6b1705418b1be5d7.js → 687deb918eb48a963c8f.js} +1 -1
  69. package/assets/esri/core/workers/chunks/{0694c7bcfe71692e2ccf.js → 723df53cfa0189837d01.js} +1 -1
  70. package/assets/esri/core/workers/chunks/{90c1d10eae7ae71889b0.js → 7400b8c454b47ee4fb3c.js} +1 -1
  71. package/assets/esri/core/workers/chunks/796c6195b6bf59dcc9bd.js +1 -0
  72. package/assets/esri/core/workers/chunks/7b45ac83e279fe9516a5.js +1 -0
  73. package/assets/esri/core/workers/chunks/{2de077c7b971f2c215a6.js → 7ddbde8fdd1cf3c53f50.js} +1 -1
  74. package/assets/esri/core/workers/chunks/804606b194dc9e71d088.js +1 -0
  75. package/assets/esri/core/workers/chunks/8102f0bf5707c3be3310.js +1 -0
  76. package/assets/esri/core/workers/chunks/{1a8d8274df292d65f82e.js → 81bcc495e6eaf2cf7474.js} +1 -1
  77. package/assets/esri/core/workers/chunks/90360c0bd053d3e3fd77.js +1 -0
  78. package/assets/esri/core/workers/chunks/{d1d6154b4af1c9cc497b.js → 934e1f2153e6fad6ed23.js} +1 -1
  79. package/assets/esri/core/workers/chunks/{e096c1d9d53af74d3207.js → 990e96139b5a1dccb061.js} +1 -1
  80. package/assets/esri/core/workers/chunks/9c3de54513bf8619271c.js +1 -0
  81. package/assets/esri/core/workers/chunks/{f28b63c1179366dac8a2.js → 9e2c30b67bab5795306e.js} +1 -1
  82. package/assets/esri/core/workers/chunks/{9184c947cdefe06bf551.js → a18c3cbe505a19d29569.js} +1 -1
  83. package/assets/esri/core/workers/chunks/aa6ee2aa4ff6e6d41efb.js +1 -0
  84. package/assets/esri/core/workers/chunks/{3fd5c3cd8457ddc68798.js → aa779896fd9e5c341349.js} +1 -1
  85. package/assets/esri/core/workers/chunks/ac10c7d2c4829a150037.js +1 -0
  86. package/assets/esri/core/workers/chunks/{fe6dcb21570395e46ce8.js → afc8a9847f31bb66b13b.js} +1 -1
  87. package/assets/esri/core/workers/chunks/c5bf19da62a3d31009fe.js +2 -0
  88. package/assets/esri/core/workers/chunks/{2226c20c38e20713bcb5.js.LICENSE.txt → c5bf19da62a3d31009fe.js.LICENSE.txt} +1 -1
  89. package/assets/esri/core/workers/chunks/c7adb7b77721c75891f4.js +1 -0
  90. package/assets/esri/core/workers/chunks/cd55cad81accf51d2989.js +1 -0
  91. package/assets/esri/core/workers/chunks/{bead830a677690eeb6fb.js → ce8ef2eec290e1df6b2a.js} +1 -1
  92. package/assets/esri/core/workers/chunks/d3369ffed19f4c264dcd.js +1 -0
  93. package/assets/esri/core/workers/chunks/d3412518a7b518860fbb.js +1 -0
  94. package/assets/esri/core/workers/chunks/{3048e74e6246324ce6fc.js → d5916500514a41a4758f.js} +1 -1
  95. package/assets/esri/core/workers/chunks/{89dc49e784f7ba3b93ea.js → dac69c0047488fdf986d.js} +1 -1
  96. package/assets/esri/core/workers/chunks/db1f7b2562de495b3401.js +2 -0
  97. package/assets/esri/core/workers/chunks/dcc782e4bf9e8a8202f9.js +1 -0
  98. package/assets/esri/core/workers/chunks/dcdf837a452dc0cac582.js +1 -0
  99. package/assets/esri/core/workers/chunks/e0a37d3bcb9a944e53dd.js +1 -0
  100. package/assets/esri/core/workers/chunks/{19a4fa965b70fc6f78f6.js → e209cb1f3f14bf576ebe.js} +1 -1
  101. package/assets/esri/core/workers/chunks/e67ea2f1714e5abeae44.js +1 -0
  102. package/assets/esri/core/workers/chunks/e8fb2ba7b7a4f0916325.js +1 -0
  103. package/assets/esri/core/workers/chunks/{636e9c4ac1f9ae98f9d1.js → ea81f9d71b0842a4be26.js} +1 -1
  104. package/assets/esri/core/workers/chunks/{164c8eeefa8232b2b191.js → eaa0e906b46ae4c84d72.js} +2 -2
  105. package/assets/esri/core/workers/chunks/efcd38aad9aa667001b2.js +1 -0
  106. package/assets/esri/core/workers/chunks/{3aafdb905c697bc9b1ad.js → f372f4eb5527238c46f5.js} +1 -1
  107. package/assets/esri/core/workers/chunks/f497968055af459c5da4.js +1 -0
  108. package/assets/esri/core/workers/chunks/f7123ba1286f64e13e91.js +1 -0
  109. package/assets/esri/core/workers/chunks/fcb4707c2e95099b9f30.js +1 -0
  110. package/assets/esri/libs/lyr3d/lyr3DMain.wasm +0 -0
  111. package/assets/esri/libs/lyr3d/lyr3DWorker.wasm +0 -0
  112. package/chunks/BlurEmission.glsl.js +9 -4
  113. package/chunks/GlobalIllumination.glsl.js +55 -46
  114. package/chunks/GlobalIlluminationBlur.glsl.js +13 -9
  115. package/chunks/RibbonLine.glsl.js +90 -88
  116. package/chunks/Terrain.glsl.js +9 -9
  117. package/chunks/libtess-f32.js +1 -1
  118. package/chunks/libtess-f64.js +1 -1
  119. package/chunks/lyr3DMain.js +1 -1
  120. package/chunks/lyr3DWorker.js +2 -2
  121. package/config.d.ts +3 -3
  122. package/config.js +1 -1
  123. package/core/has.js +1 -1
  124. package/core/mathUtils.js +1 -1
  125. package/core/workers.d.ts +1 -0
  126. package/form/FormTemplate.d.ts +1 -1
  127. package/geometry/libtess.js +1 -1
  128. package/geometry/projection/projectors.js +1 -1
  129. package/geometry/support/MeshLocalVertexSpace.d.ts +3 -3
  130. package/geometry/support/aaBoundingRect.js +1 -1
  131. package/geometry/support/meshUtils/convertMeshVertexSpace.js +1 -1
  132. package/geometry/support/meshUtils/vertexSpaceConversion.js +1 -1
  133. package/identity/Credential.d.ts +1 -1
  134. package/identity/IdentityManager.d.ts +1 -1
  135. package/identity/IdentityManagerBase.js +1 -1
  136. package/identity/OAuthInfo.d.ts +1 -1
  137. package/identity/ServerInfo.d.ts +1 -1
  138. package/kernel.d.ts +3 -3
  139. package/kernel.js +1 -1
  140. package/layers/CSVLayer.js +1 -1
  141. package/layers/GaussianSplatLayer.js +1 -1
  142. package/layers/IntegratedMesh3DTilesLayer.js +1 -1
  143. package/layers/Lyr3DWasmPerSceneView.js +1 -1
  144. package/layers/VectorTileLayer.d.ts +2 -2
  145. package/layers/VideoLayer.js +1 -1
  146. package/layers/VoxelWasmPerSceneView.js +1 -1
  147. package/layers/WFSLayer.d.ts +8 -4
  148. package/layers/graphics/controllers/I3SOnDemandController.js +1 -1
  149. package/layers/graphics/sources/CSVSource.js +1 -1
  150. package/layers/graphics/sources/GeoJSONSource.js +1 -1
  151. package/layers/graphics/sources/MemorySource.js +2 -2
  152. package/layers/graphics/sources/WFSSource.js +1 -1
  153. package/layers/graphics/sources/geojson/geojson.js +1 -1
  154. package/layers/graphics/sources/support/ParquetSourceWorker.js +1 -1
  155. package/layers/graphics/sources/support/QueryTask.js +1 -1
  156. package/layers/graphics/sources/support/timeQueryUtils.js +2 -0
  157. package/layers/mixins/APIKeyMixin.d.ts +1 -1
  158. package/layers/mixins/ArcGISMapService.d.ts +17 -0
  159. package/layers/mixins/ArcGISMapService.js +1 -1
  160. package/layers/ogc/types.d.ts +1 -1
  161. package/layers/ogc/wfsUtils.d.ts +7 -2
  162. package/layers/ogc/wfsUtils.js +1 -1
  163. package/layers/ogc/xmlUtils.js +1 -1
  164. package/layers/support/TelemetryData.d.ts +28 -4
  165. package/layers/support/TimeInformation.js +1 -1
  166. package/layers/support/tiles3DUtils.js +1 -1
  167. package/layers/support/timeInfoUtils.js +2 -0
  168. package/layers/video/videoUtils.js +1 -1
  169. package/package.json +4 -4
  170. package/rest/query/executeAttributeBinsQuery.js +1 -1
  171. package/rest/query/executeForExtent.js +1 -1
  172. package/rest/query/executeForTopCount.js +1 -1
  173. package/rest/query/executeForTopExtents.js +1 -1
  174. package/rest/query/executeForTopIds.js +1 -1
  175. package/rest/query/executeTopFeaturesQuery.js +1 -1
  176. package/rest/query/operations/query.js +1 -1
  177. package/rest/query/operations/queryAttributeBins.js +1 -1
  178. package/rest/query/operations/queryTopFeatures.js +1 -1
  179. package/rest/route.d.ts +1 -1
  180. package/rest/support/AreasAndLengthsParameters.d.ts +1 -1
  181. package/rest/support/LengthsParameters.d.ts +1 -1
  182. package/rest/support/timeUtils.js +1 -1
  183. package/symbols/TextSymbol.d.ts +0 -1
  184. package/views/2d/engine/webgl/FeatureDisplayList.js +1 -1
  185. package/views/2d/engine/webgl/GlyphMosaic.js +1 -1
  186. package/views/2d/engine/webgl/GlyphWorker.js +1 -1
  187. package/views/2d/engine/webgl/TextureManager.js +1 -1
  188. package/views/2d/engine/webgl/materialKeyUtils.js +2 -0
  189. package/views/2d/engine/webgl/mesh/MeshData.js +1 -1
  190. package/views/2d/engine/webgl/mesh/templates/shapingUtils.js +1 -1
  191. package/views/2d/engine/webgl/shaderGraph/techniques/animated/AnimatedMarkerMeshWriter.js +1 -1
  192. package/views/2d/engine/webgl/shaderGraph/techniques/animated/AnimatedPolyMeshWriters.js +1 -1
  193. package/views/2d/engine/webgl/shaderGraph/techniques/fill/ComplexOutlineFillMeshWriter.js +1 -1
  194. package/views/2d/engine/webgl/shaderGraph/techniques/fill/GradientFillMeshWriter.js +1 -1
  195. package/views/2d/engine/webgl/shaderGraph/techniques/fill/PatternFillMeshWriter.js +1 -1
  196. package/views/2d/engine/webgl/shaderGraph/techniques/fill/PatternOutlineFillMeshWriter.js +1 -1
  197. package/views/2d/engine/webgl/shaderGraph/techniques/labels/LabelMeshWriter.js +1 -1
  198. package/views/2d/engine/webgl/shaderGraph/techniques/line/GradientStrokeMeshWriter.js +1 -1
  199. package/views/2d/engine/webgl/shaderGraph/techniques/line/TexturedLineMeshWriter.js +1 -1
  200. package/views/2d/engine/webgl/shaderGraph/techniques/markers/MarkerMeshWriter.js +1 -1
  201. package/views/2d/engine/webgl/shaderGraph/techniques/text/TextMeshWriter.js +1 -1
  202. package/views/2d/layers/VideoLayerView2D.js +1 -1
  203. package/views/2d/layers/imagery/BaseImageryTileSubView2D.js +1 -1
  204. package/views/3d/FocusAreasView.js +1 -1
  205. package/views/3d/analysis/AreaMeasurement/support/AreaMeasurementVisualization.js +1 -1
  206. package/views/3d/analysis/DirectLineMeasurement/DirectLineMeasurementVisualization.js +1 -1
  207. package/views/3d/analysis/ElevationProfile/ElevationProfileLineSceneComputation.js +1 -1
  208. package/views/3d/analysis/LineOfSight/LineOfSightController.js +1 -1
  209. package/views/3d/analysis/ShadowCast/ShadowCastError.d.ts +40 -0
  210. package/views/3d/analysis/ShadowCast/ShadowCastError.js +2 -0
  211. package/views/3d/analysis/ShadowCast/sunlightUtils.js +2 -0
  212. package/views/3d/analysis/ShadowCastAnalysisView3D.d.ts +16 -1
  213. package/views/3d/analysis/ShadowCastAnalysisView3D.js +1 -1
  214. package/views/3d/camera/constraintUtils/surfaceCollision.js +1 -1
  215. package/views/3d/camera/intersectionUtils.js +1 -1
  216. package/views/3d/layers/GaussianSplatLayerView3D.js +1 -1
  217. package/views/3d/layers/IntegratedMesh3DTilesLayerView3D.js +1 -1
  218. package/views/3d/layers/Lyr3DWorker.js +1 -1
  219. package/views/3d/layers/graphics/ElevationAligners.js +1 -1
  220. package/views/3d/layers/graphics/Graphics3DCore.js +1 -1
  221. package/views/3d/layers/graphics/Graphics3DMeshFillSymbolLayer.js +1 -1
  222. package/views/3d/layers/graphics/Graphics3DMeshObject3DGraphicLayer.js +1 -1
  223. package/views/3d/layers/graphics/Graphics3DSymbol.js +1 -1
  224. package/views/3d/layers/graphics/Graphics3DWaterSymbolLayer.js +1 -1
  225. package/views/3d/layers/graphics/Graphics3DWebStyleSymbol.js +1 -1
  226. package/views/3d/layers/graphics/MeshFastUpdateProcessor.js +1 -1
  227. package/views/3d/layers/graphics/polygonUtils.js +1 -1
  228. package/views/3d/layers/i3s/I3SIndex.js +1 -1
  229. package/views/3d/layers/i3s/I3SViewportQueries.js +1 -1
  230. package/views/3d/layers/support/FeatureMemory.js +1 -1
  231. package/views/3d/layers/support/FeatureTile.js +1 -1
  232. package/views/3d/navigation/modes/GroundNavigationMode3D.js +1 -1
  233. package/views/3d/state/Constraints.js +1 -1
  234. package/views/3d/state/NearFarHeuristic.js +1 -1
  235. package/views/3d/state/ScreenSizePerspective.js +1 -1
  236. package/views/3d/state/ViewStateManager.js +1 -1
  237. package/views/3d/state/helpers/SceneIntersectionHelper.js +1 -1
  238. package/views/3d/state/utils/groundNavigationUtils.js +1 -1
  239. package/views/3d/support/RenderCoordsHelper.js +1 -1
  240. package/views/3d/support/orientedBoundingBox.js +1 -1
  241. package/views/3d/support/sphereExtentUtils.js +1 -1
  242. package/views/3d/terrain/TerrainRenderer.js +1 -1
  243. package/views/3d/terrain/TerrainSurface.js +1 -1
  244. package/views/3d/terrain/TileRenderer.js +1 -1
  245. package/views/3d/terrain/tileUtils.js +1 -1
  246. package/views/3d/webgl-engine/lib/ManagedTexture.js +1 -1
  247. package/views/3d/webgl-engine/lib/NavigationDepthCache.js +1 -1
  248. package/views/3d/webgl-engine/lib/Renderer.js +1 -1
  249. package/views/3d/webgl-engine/lib/RibbonLineVertexInfo.js +1 -1
  250. package/views/3d/webgl-engine/lib/TextTextureAtlas.js +1 -1
  251. package/views/3d/webgl-engine/lib/lodRendering/LodRenderer.js +1 -1
  252. package/views/3d/webgl-engine/materials/RibbonLineMaterial.js +1 -1
  253. package/views/3d/webgl-engine/materials/WaterMaterial.js +1 -1
  254. package/views/3d/webgl.d.ts +1 -1
  255. package/views/SceneView.js +1 -1
  256. package/views/support/Scheduler.js +1 -1
  257. package/views/webgl/BufferObject.js +1 -1
  258. package/views/webgl/FramebufferObject.js +1 -1
  259. package/widgets/Directions.d.ts +1 -1
  260. package/widgets/ElevationProfile/ElevationProfileLineView.js +1 -1
  261. package/widgets/HistogramRangeSlider.d.ts +1 -1
  262. package/assets/esri/core/workers/chunks/0e445ec3523de9f2dfa2.js +0 -1
  263. package/assets/esri/core/workers/chunks/0f6c0d42100c21367e5c.js +0 -1
  264. package/assets/esri/core/workers/chunks/131185d26343a997495e.js +0 -1
  265. package/assets/esri/core/workers/chunks/176d0a06ebff5a29dedf.js +0 -1
  266. package/assets/esri/core/workers/chunks/18776a130d96879a68b1.js +0 -1
  267. package/assets/esri/core/workers/chunks/1a3f71c4d97c36050030.js +0 -1
  268. package/assets/esri/core/workers/chunks/20a698709c3c11ff2c16.js +0 -1
  269. package/assets/esri/core/workers/chunks/2226c20c38e20713bcb5.js +0 -2
  270. package/assets/esri/core/workers/chunks/277263466837e1673f56.js +0 -1
  271. package/assets/esri/core/workers/chunks/2981e904ab62f3ed80d0.js +0 -2
  272. package/assets/esri/core/workers/chunks/32cc59e126df8c96a0cf.js +0 -2
  273. package/assets/esri/core/workers/chunks/379ef56f6b32494832a6.js +0 -1
  274. package/assets/esri/core/workers/chunks/38d852676677e5697864.js +0 -1
  275. package/assets/esri/core/workers/chunks/46453ebfee17b5421d9d.js +0 -1
  276. package/assets/esri/core/workers/chunks/5a9b7eb26f936f03d02e.js +0 -1
  277. package/assets/esri/core/workers/chunks/5bb6c255bdc8aa9ba23e.js +0 -1
  278. package/assets/esri/core/workers/chunks/5f07f52bb8b7721f08d3.js +0 -1
  279. package/assets/esri/core/workers/chunks/654f5441227579d2b6b4.js +0 -1
  280. package/assets/esri/core/workers/chunks/6b5c073dddd89d06ed80.js +0 -1
  281. package/assets/esri/core/workers/chunks/6bb191b19ce43a27f205.js +0 -1
  282. package/assets/esri/core/workers/chunks/6ddc29a144640acb1192.js +0 -1
  283. package/assets/esri/core/workers/chunks/6ebe73f69ae822053b70.js +0 -1
  284. package/assets/esri/core/workers/chunks/6f6d1873753a9c6994aa.js +0 -1
  285. package/assets/esri/core/workers/chunks/7084dd6e10c6c1393e92.js +0 -1
  286. package/assets/esri/core/workers/chunks/7566321c6a2913f2852b.js +0 -1
  287. package/assets/esri/core/workers/chunks/7b5cd150a4d0139850be.js +0 -1
  288. package/assets/esri/core/workers/chunks/7cc9d7a88b64e25fce14.js +0 -1
  289. package/assets/esri/core/workers/chunks/7e211d8a8ad6c6a7cf3e.js +0 -1
  290. package/assets/esri/core/workers/chunks/844eedda8f749972f707.js +0 -2
  291. package/assets/esri/core/workers/chunks/849f446c718e892f39ce.js +0 -1
  292. package/assets/esri/core/workers/chunks/87177e0f82e8a6ae3189.js +0 -1
  293. package/assets/esri/core/workers/chunks/9976eaa81085c0d17e14.js +0 -1
  294. package/assets/esri/core/workers/chunks/a2196a49f89d57a0a1c7.js +0 -1
  295. package/assets/esri/core/workers/chunks/a504a5e06cb89a620799.js +0 -1
  296. package/assets/esri/core/workers/chunks/a65951f1d5702cfd996e.js +0 -1
  297. package/assets/esri/core/workers/chunks/aba259a70bee68d2edb7.js +0 -1
  298. package/assets/esri/core/workers/chunks/b8fd7c3b36981261378b.js +0 -1
  299. package/assets/esri/core/workers/chunks/b9cb92858a576eb6aa06.js +0 -1
  300. package/assets/esri/core/workers/chunks/c33a9635c294c8774977.js +0 -1
  301. package/assets/esri/core/workers/chunks/c570b90995c65bbb2e14.js +0 -1
  302. package/assets/esri/core/workers/chunks/c576bef77e34920af188.js +0 -1
  303. package/assets/esri/core/workers/chunks/cf1ec61eb2ad147bb931.js +0 -1
  304. package/assets/esri/core/workers/chunks/daae21cf77864f3293ef.js +0 -1
  305. package/assets/esri/core/workers/chunks/dc2f93453dfa40f623ab.js +0 -1
  306. package/assets/esri/core/workers/chunks/e81173724e8de8c1e65b.js +0 -1
  307. package/assets/esri/core/workers/chunks/e83f9abee611c5b80009.js +0 -1
  308. package/assets/esri/core/workers/chunks/f39c700f3db7db52b522.js +0 -1
  309. package/assets/esri/core/workers/chunks/f45064066e1ab041a0b2.js +0 -1
  310. package/assets/esri/core/workers/chunks/ffe49d9e7df081bef4a5.js +0 -1
  311. package/views/2d/engine/webgl/hashMosaic.js +0 -2
  312. /package/assets/esri/core/workers/chunks/{0cc7fba402a93e6d2455.js.LICENSE.txt → 1ae0c9345626e70affd3.js.LICENSE.txt} +0 -0
  313. /package/assets/esri/core/workers/chunks/{844eedda8f749972f707.js.LICENSE.txt → 2b4dd42920d37b1ff0a9.js.LICENSE.txt} +0 -0
  314. /package/assets/esri/core/workers/chunks/{32cc59e126df8c96a0cf.js.LICENSE.txt → 4f3e0d583cfa9d1d6727.js.LICENSE.txt} +0 -0
  315. /package/assets/esri/core/workers/chunks/{bd46a04a9ee4ea9e6ef1.js.LICENSE.txt → 5864bce1498a13ee5b7e.js.LICENSE.txt} +0 -0
  316. /package/assets/esri/core/workers/chunks/{2981e904ab62f3ed80d0.js.LICENSE.txt → db1f7b2562de495b3401.js.LICENSE.txt} +0 -0
  317. /package/assets/esri/core/workers/chunks/{164c8eeefa8232b2b191.js.LICENSE.txt → eaa0e906b46ae4c84d72.js.LICENSE.txt} +0 -0
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{clamp as e}from"../../../../../../../core/mathUtils.js";import{pt2px as t,onePointInPixels as n}from"../../../../../../../core/screenUtils.js";import{GeometryCursor as r}from"../../../../../../../geometry/GeometryCursor.js";import{asCIMGeometryCursor as i}from"../../../../../../../symbols/cim/utils.js";import{CIMMarkerPlacementHelper as a}from"../../../../../../../symbols/cim/placements/CIMMarkerPlacementHelper.js";import{getXDirection as o,getYDirection as s}from"../../../alignmentUtils.js";import{labelU16ZoomPrecisionFactor as c,maxLineHeightRatio as l,minLineHeightRatio as u,labelPlacementOffsetPadding as d,maxTextLineWidth as f,minTextLineWidth as p,magicLabelLineHeight as m,packDegreesU8 as h}from"../../../definitions.js";import{shapeTextResource as g,shapeTextResourceForMultipoint as _}from"../../../mesh/templates/shapingUtils.js";import{processColorInput as v,getMinMaxZoom as y,packBitset as b}from"../fill/meshWriterUtils.js";import{MeshWriter as x}from"../mesh/MeshWriter.js";import{bitsetTextIsBackground as S,bitsetTextIsMapAligned as C}from"../shaders/constants.js";import{TextMeshTransformProps as w}from"./TextParams.js";import{DataType as T}from"../../../../../../webgl/enums.js";const E=28,D=[4,4],O=[16,4],k={topLeft:O,topRight:O,bottomLeft:O,bottomRight:O};function A(n){return n==null?f:e(t(n),p,f)}function j(t,n){return t/24*m*e(n,u,l)}const M=[4,2],N=[4,6],P={topLeft:M,topRight:M,bottomLeft:N,bottomRight:N},F={topLeft:M,topRight:N,bottomLeft:M,bottomRight:N},I={topLeft:N,topRight:N,bottomLeft:D,bottomRight:D},L={topLeft:D,topRight:D,bottomLeft:N,bottomRight:N},R={topLeft:N,topRight:D,bottomLeft:N,bottomRight:D},z={topLeft:D,topRight:N,bottomLeft:D,bottomRight:N};function B(e){return e.useBackgroundCallout?{backgroundColor:null,borderLineColor:null,borderLineSize:0}:{backgroundColor:e.boxBackgroundColor??e.backgroundColor??null,borderLineColor:e.boxBorderLineColor??e.borderLineColor??null,borderLineSize:e.boxBorderLineSize>0?e.boxBorderLineSize:e.borderLineWidth??0}}const V={createComputedParams:e=>e,optionalAttributes:{zoomRange:{type:T.UNSIGNED_SHORT,count:2,packPrecisionFactor:c,packTessellation:({minZoom:e,maxZoom:t})=>[e||0,t||28]},clipAngle:{type:T.UNSIGNED_BYTE,count:1,packTessellation:({clipAngle:e})=>U(e||0)},referenceSymbol:{type:T.BYTE,count:4,packTessellation:(e,n)=>{let r=e.isLineLabel||!e.referenceBounds,i=o(r?`center`:n.horizontalAlignment),a=s(r?`middle`:n.verticalAlignment),{offsetX:c,offsetY:l,size:u}=r?{offsetX:0,offsetY:0,size:0}:e.referenceBounds;return[t(c),-t(l),Math.round(t(u)),i+1<<2|a+1]}}},attributes:{pos:{type:T.SHORT,count:2,pack:`position`,packPrecisionFactor:10},id:{type:T.UNSIGNED_BYTE,count:3,pack:`id`},bitset:{type:T.UNSIGNED_BYTE,count:1,packTessellation:({isBackground:e,mapAligned:t})=>b([[S,e],[C,!!t]])},offset:{type:T.SHORT,count:2,packPrecisionFactor:8,packAlternating:{count:4,packTessellation:({offsets:e})=>{let{bottomLeft:t,bottomRight:n,topLeft:r,topRight:i}=e;return[r,i,t,n]}}},textureUV:{type:T.UNSIGNED_SHORT,count:2,packAlternating:{count:4,packTessellation:({texcoords:e})=>{let{bottomLeft:t,bottomRight:n,topLeft:r,topRight:i}=e;return[r,i,t,n]}}},color:{type:T.UNSIGNED_BYTE,count:4,normalized:!0,packTessellation:({color:e})=>e},fontAndReferenceSize:{type:T.UNSIGNED_SHORT,count:4,packPrecisionFactor:4,packTessellation:({fontSize:e,sdfSize:n,sdfRadius:r},{referenceSize:i})=>[Math.round(t(e)),Math.round(t(i||e)),n,r]},outlineColor:{type:T.UNSIGNED_BYTE,count:4,normalized:!0,pack:({outlineColor:e})=>v(e)},haloColor:{type:T.UNSIGNED_BYTE,count:4,normalized:!0,pack:({haloColor:e})=>v(e)},outlineAndHaloSize:{type:T.UNSIGNED_SHORT,count:2,packPrecisionFactor:4,packTessellation:({outlineSize:e,haloSize:n})=>[Math.round(t(e)),Math.round(t(n))]}}};class H extends x{constructor(){super(...arguments),this.calloutRecordsUseLabelPhase=!1,this.vertexSpec=V,this._textMeshParamsPropsInitialized=!1,this._calloutEffectGeometry=null}getCalloutEffectGeometry({target:e}){if(e.geometryType!==`esriGeometryPoint`&&e.geometryType!==`esriGeometryMultipoint`)return this._calloutEffectGeometry;let t=e.readGeometryForDisplay();return t&&e.geometryType?r.fromOptimizedCIM(t.clone(),e.geometryType):null}getCalloutRotation(){return this._textMeshParamsPropsInitialized?this._textMeshTransformProps.postAngle:null}ensurePacked(e,t,n){this._calloutEffectGeometry=null,super.ensurePacked(e,t,n),(!this._textMeshParamsPropsInitialized||this._evaluator.hasDynamicProperties)&&(this._textMeshTransformProps=new w(this.evaluatedMeshParams),this._textMeshParamsPropsInitialized=!0)}getLocalCalloutReferenceInfo(){return this._createLocalCalloutReferenceInfo(this._getShaping(),void 0,!0,!0)}_createLocalCalloutReferenceInfo(e,n,r=!1,i=!1){if(!e)return;let a=e.boundsT,o=i?e.bounds:a,[s,c]=n?this._getReferenceSymbolOffset(n):[0,0],l=i?t(this._textMeshTransformProps.offsetX):0,u=i?t(this._textMeshTransformProps.offsetY):0,d={xmin:a.xmin,ymin:-a.ymax,xmax:a.xmax,ymax:-a.ymin};return{anchor:{x:0,y:0},bodyBounds:{xmin:o.xmin+s+l,ymin:-o.ymax-c+u,xmax:o.xmax+s+l,ymax:-o.ymin-c+u},collisionBodyBounds:d,...r?{bodyBoundsUseReferenceScale:!0}:null}}_getReferenceSymbolOffset(e){let n=t(e.size)/2+d;return[t(e.offsetX)+o(this.evaluatedMeshParams.horizontalAlignment)*n,-t(e.offsetY)+s(this.evaluatedMeshParams.verticalAlignment)*n]}_write(e,{target:t,effect:n}){this._calloutEffectGeometry=null;let r=n?.geometry,a=this._getShaping();if(!a)return;let o=this.evaluatedMeshParams.alignment===1,s=t.getDisplayId(),{placement:c}=this.evaluatedMeshParams;if(c!=null){if(c.type!==`PrivatePlacementMultipoint`)this._writePlacedTextMarkers(e,t,a,i(r));else{let n=this._getMultipointShaping();n&&this._writeMultipointText(e,t,n,i(r))}return}if(r?.nextPath())return r.nextPoint(),this._setCalloutEffectGeometry(r.x,r.y),this._writeGlyphs(e,s,r.x,r.y,a,0,void 0,{mapAligned:o});if(t.geometryType===`esriGeometryPolygon`){let n=t.readCentroidForDisplay();if(!n)return;let[r,i]=n.coords;return this._setCalloutEffectGeometry(r,i),this._writeGlyphs(e,s,r,i,a,0,void 0,{mapAligned:o})}if(t.geometryType===`esriGeometryMultipoint`){t.readGeometryForDisplay()?.forEachVertex((t,n)=>{this._setCalloutEffectGeometry(t,n),this._writeGlyphs(e,s,t,n,a,0,void 0,{mapAligned:o})});return}let l=t.readXForDisplay(),u=t.readYForDisplay();return this._setCalloutEffectGeometry(l,u),this._writeGlyphs(e,s,l,u,a,0,void 0,{mapAligned:o})}_writePlacedTextMarkers(e,t,i,o){let s=o??r.fromFeatureSetReaderCIM(t);if(!s)return;let c=a.getPlacement(s,-1,this.evaluatedMeshParams.placement,n,e.id);if(!c)return;let l=t.getDisplayId(),u=c.next();for(;u!=null;){let t=-u.getAngle(),n=u.tx,r=-u.ty;this._setCalloutEffectGeometry(n,r),this._writeGlyphs(e,l,n,r,i,t,void 0,{mapAligned:this.evaluatedMeshParams.alignment===1}),u=c.next()}}_writeMultipointText(e,t,i,o){let s=o??r.fromFeatureSetReaderCIM(t);if(!s)return;let c=a.getPlacement(s,-1,this.evaluatedMeshParams.placement,n,e.id);if(!c)return;let l=t.getDisplayId(),u=c.next(),d=0;for(;u!=null;){let t=u.tx,n=-u.ty,r=-u.getAngle();if(this._setCalloutEffectGeometry(t,n),d>=i.glyphs.length)break;this._writeGlyph(e,l,t,n,i,d,r,void 0,{mapAligned:this.evaluatedMeshParams.alignment===1}),u=c.next(),d++}}_setCalloutEffectGeometry(e,t){this._calloutEffectGeometry??=r.fromJSON({x:e,y:t})}_getShaping(n){let r=this._textMeshTransformProps,i=this.evaluatedMeshParams;if(!this._hasGlyphs(i.glyphs))return null;let a=t(r.fontSize),o=t(r.offsetX),s=t(r.offsetY),{sdfSize:c}=this._getDefaultGlyphMetrics(i.glyphs),d=A(i.lineWidth),f=j(c,i.lineHeightRatio),{backgroundColor:p,borderLineSize:m}=B(i);return g(i.glyphs,{scale:a/c,angle:r.postAngle,xOffset:o,yOffset:s,horizontalAlignment:i.horizontalAlignment,verticalAlignment:n||i.verticalAlignment,maxLineWidth:d,lineHeight:f,lineHeightRatio:e(i.lineHeightRatio,u,l),decoration:i.decoration,borderLineSizePx:t(m),hasBackground:!!p,useCIMAngleBehavior:i.useCIMAngleBehavior})}_getMultipointShaping(){let n=this._textMeshTransformProps,r=this.evaluatedMeshParams;if(!this._hasGlyphs(r.glyphs))return null;let i=t(n.fontSize),a=t(n.offsetX),o=t(n.offsetY),{sdfSize:s}=this._getDefaultGlyphMetrics(r.glyphs),c=A(r.lineWidth),d=j(s,r.lineHeightRatio),{backgroundColor:f,borderLineSize:p}=B(r);return _(r.glyphs,{scale:i/s,angle:n.postAngle,xOffset:a,yOffset:o,horizontalAlignment:r.horizontalAlignment,verticalAlignment:r.verticalAlignment,maxLineWidth:c,lineHeight:d,lineHeightRatio:e(r.lineHeightRatio,u,l),decoration:r.decoration,borderLineSizePx:t(p),hasBackground:!!f,useCIMAngleBehavior:r.useCIMAngleBehavior})}_hasGlyphs(e){return e?e.type===`glyphs`?e.glyphs.length>0:e.runs.some(e=>e.glyphs.glyphs.length>0):!1}_getDefaultGlyphMetrics(e){if(e.type===`glyphs`)return{sdfSize:e.sdfSize,sdfRadius:e.sdfRadius,sdfPadding:e.sdfPadding};let[t]=e.runs;return{sdfSize:t?.glyphs.sdfSize??24,sdfRadius:t?.glyphs.sdfRadius??8,sdfPadding:t?.glyphs.sdfPadding??3}}_writeGlyphs(e,n,r,i,a,o,s,c,l=!0){let u=this.evaluatedMeshParams,d=this._textMeshTransformProps,f=t(d.fontSize),p=d.haloSize,m=d.outlineSize,h=t(d.offsetX),g=t(d.offsetY),_=this._getDefaultGlyphMetrics(u.glyphs),b=v(u.color),[x,S]=y(u.scaleInfo,this.getTileInfo());o!==0&&a.setRotation(o);let C=a.bounds,w=r+C.x+h,T=i+C.y-g,E=(u.minPixelBuffer?u.minPixelBuffer/f:1)*2,D=Math.max(C.width,C.height)*E;a.textBox&&(e.recordStart(this.instanceId,this.attributeLayout,a.glyphs[0].textureBinding),l&&e.recordBounds(w,T,D,D),this._writeTextBox(e,n,r,i,a.textBox,s,c),e.recordEnd());for(let t of a.glyphs){e.recordStart(this.instanceId,this.attributeLayout,t.textureBinding),l&&e.recordBounds(w,T,D,D);let{texcoords:a,offsets:o}=t,u=t.fontSize??f;this._writeQuad(e,n,r,i,{texcoords:a,offsets:o,fontSize:u,haloSize:p,outlineSize:m,sdfSize:_.sdfSize,sdfRadius:_.sdfRadius,color:t.color?v(t.color):b,isBackground:!1,referenceBounds:s,minZoom:x,maxZoom:S,...c}),e.recordEnd()}o!==0&&a.setRotation(-o)}_writeGlyph(e,n,r,i,a,o,s,c,l,u=!0){let d=this.evaluatedMeshParams,f=this._textMeshTransformProps,p=t(f.fontSize),m=f.haloSize,h=f.outlineSize,g=t(f.offsetX),_=t(f.offsetY),y=this._getDefaultGlyphMetrics(d.glyphs),b=v(d.color);s!==0&&a.setRotation(s);let x=a.bounds,S=r+x.x+g,C=i+x.y-_,w=(d.minPixelBuffer?d.minPixelBuffer/p:1)*2,T=Math.max(x.width,x.height)*w,E=a.glyphs[o];e.recordStart(this.instanceId,this.attributeLayout,E.textureBinding),u&&e.recordBounds(S,C,T,T);let{texcoords:D,offsets:O}=E,k=E.fontSize??p;this._writeQuad(e,n,r,i,{texcoords:D,offsets:O,fontSize:k,haloSize:m,outlineSize:h,sdfSize:y.sdfSize,sdfRadius:y.sdfRadius,color:E.color?v(E.color):b,isBackground:!1,referenceBounds:c,minZoom:0,maxZoom:30,...l}),e.recordEnd(),s!==0&&a.setRotation(-s)}_writeTextBox(e,t,n,r,i,a,o){let s=this.evaluatedMeshParams,{fontSize:c,haloSize:l,outlineSize:u}=this._textMeshTransformProps,{backgroundColor:d,borderLineColor:f,borderLineSize:p}=B(s),{sdfSize:m,sdfRadius:h}=this._getDefaultGlyphMetrics(s.glyphs),g=!!f&&p>0,_={isBackground:!0,fontSize:c,haloSize:l,outlineSize:u,referenceBounds:a,sdfSize:m,sdfRadius:h,...o};d&&(this._writeQuad(e,t,n,r,{texcoords:k,offsets:i.main,color:v(d),..._}),g||(this._writeQuad(e,t,n,r,{texcoords:I,offsets:i.top,color:v(d),..._}),this._writeQuad(e,t,n,r,{texcoords:L,offsets:i.bot,color:v(d),..._}),this._writeQuad(e,t,n,r,{texcoords:R,offsets:i.left,color:v(d),..._}),this._writeQuad(e,t,n,r,{texcoords:z,offsets:i.right,color:v(d),..._}))),g&&(this._writeQuad(e,t,n,r,{texcoords:P,offsets:i.top,color:v(f),..._}),this._writeQuad(e,t,n,r,{texcoords:P,offsets:i.bot,color:v(f),..._}),this._writeQuad(e,t,n,r,{texcoords:F,offsets:i.left,color:v(f),..._}),this._writeQuad(e,t,n,r,{texcoords:F,offsets:i.right,color:v(f),..._}))}_writeQuad(e,t,n,r,i){let a=e.vertexCount();this._writeVertex(e,t,n,r,i),e.indexWrite(a+0),e.indexWrite(a+1),e.indexWrite(a+2),e.indexWrite(a+1),e.indexWrite(a+3),e.indexWrite(a+2)}}const U=e=>Math.round(e*h);export{H as TextMeshWriter,V as TextVertexSpec,B as getTextBoxStyle,E as maxLabelZoom};
2
+ import{clamp as e}from"../../../../../../../core/mathUtils.js";import{pt2px as t,onePointInPixels as n}from"../../../../../../../core/screenUtils.js";import{GeometryCursor as r}from"../../../../../../../geometry/GeometryCursor.js";import{asCIMGeometryCursor as i}from"../../../../../../../symbols/cim/utils.js";import{CIMMarkerPlacementHelper as a}from"../../../../../../../symbols/cim/placements/CIMMarkerPlacementHelper.js";import{getXDirection as o,getYDirection as s}from"../../../alignmentUtils.js";import{labelU16ZoomPrecisionFactor as c,maxLineHeightRatio as l,minLineHeightRatio as u,labelPlacementOffsetPadding as d,maxTextLineWidth as f,minTextLineWidth as p,magicLabelLineHeight as m,packDegreesU8 as h}from"../../../definitions.js";import{shapeTextResource as g,shapeTextResourceForMultipoint as _}from"../../../mesh/templates/shapingUtils.js";import{processColorInput as v,getMinMaxZoom as y,packBitset as b}from"../fill/meshWriterUtils.js";import{MeshWriter as x}from"../mesh/MeshWriter.js";import{bitsetTextIsBackground as S,bitsetTextIsMapAligned as C}from"../shaders/constants.js";import{TextMeshTransformProps as w}from"./TextParams.js";import{DataType as T}from"../../../../../../webgl/enums.js";const E=28,D=[4,4],O=[16,4],k={topLeft:O,topRight:O,bottomLeft:O,bottomRight:O};function A(n){return n==null?f:e(t(n),p,f)}function j(t,n){return t/24*m*e(n,u,l)}const M=[4,2],N=[4,6],P={topLeft:M,topRight:M,bottomLeft:N,bottomRight:N},F={topLeft:M,topRight:N,bottomLeft:M,bottomRight:N},I={topLeft:N,topRight:N,bottomLeft:D,bottomRight:D},L={topLeft:D,topRight:D,bottomLeft:N,bottomRight:N},R={topLeft:N,topRight:D,bottomLeft:N,bottomRight:D},z={topLeft:D,topRight:N,bottomLeft:D,bottomRight:N};function B(e){return e.useBackgroundCallout?{backgroundColor:null,borderLineColor:null,borderLineSize:0}:{backgroundColor:e.boxBackgroundColor??e.backgroundColor??null,borderLineColor:e.boxBorderLineColor??e.borderLineColor??null,borderLineSize:e.boxBorderLineSize>0?e.boxBorderLineSize:e.borderLineWidth??0}}const V={createComputedParams:e=>e,optionalAttributes:{zoomRange:{type:T.UNSIGNED_SHORT,count:2,packPrecisionFactor:c,packTessellation:({minZoom:e,maxZoom:t})=>[e||0,t||28]},clipAngle:{type:T.UNSIGNED_BYTE,count:1,packTessellation:({clipAngle:e})=>U(e||0)},referenceSymbol:{type:T.BYTE,count:4,packTessellation:(e,n)=>{let r=e.isLineLabel||!e.referenceBounds,i=o(r?`center`:n.horizontalAlignment),a=s(r?`middle`:n.verticalAlignment),{offsetX:c,offsetY:l,size:u}=r?{offsetX:0,offsetY:0,size:0}:e.referenceBounds;return[t(c),-t(l),Math.round(t(u)),i+1<<2|a+1]}}},attributes:{pos:{type:T.SHORT,count:2,pack:`position`,packPrecisionFactor:10},id:{type:T.UNSIGNED_BYTE,count:3,pack:`id`},bitset:{type:T.UNSIGNED_BYTE,count:1,packTessellation:({isBackground:e,mapAligned:t})=>b([[S,e],[C,!!t]])},offset:{type:T.SHORT,count:2,packPrecisionFactor:8,packAlternating:{count:4,packTessellation:({offsets:e})=>{let{bottomLeft:t,bottomRight:n,topLeft:r,topRight:i}=e;return[r,i,t,n]}}},textureUV:{type:T.UNSIGNED_SHORT,count:2,packAlternating:{count:4,packTessellation:({texcoords:e})=>{let{bottomLeft:t,bottomRight:n,topLeft:r,topRight:i}=e;return[r,i,t,n]}}},color:{type:T.UNSIGNED_BYTE,count:4,normalized:!0,packTessellation:({color:e})=>e},fontAndReferenceSize:{type:T.UNSIGNED_SHORT,count:4,packPrecisionFactor:4,packTessellation:({fontSize:e,sdfSize:n,sdfRadius:r},{referenceSize:i})=>[Math.round(t(e)),Math.round(t(i||e)),n,r]},outlineColor:{type:T.UNSIGNED_BYTE,count:4,normalized:!0,pack:({outlineColor:e})=>v(e)},haloColor:{type:T.UNSIGNED_BYTE,count:4,normalized:!0,pack:({haloColor:e})=>v(e)},outlineAndHaloSize:{type:T.UNSIGNED_SHORT,count:2,packPrecisionFactor:4,packTessellation:({outlineSize:e,haloSize:n})=>[Math.round(t(e)),Math.round(t(n))]}}};class H extends x{constructor(){super(...arguments),this.calloutRecordsUseLabelPhase=!1,this.vertexSpec=V,this._textMeshParamsPropsInitialized=!1,this._calloutEffectGeometry=null}getCalloutEffectGeometry({target:e}){if(e.geometryType!==`esriGeometryPoint`&&e.geometryType!==`esriGeometryMultipoint`)return this._calloutEffectGeometry;let t=e.readGeometryForDisplay();return t&&e.geometryType?r.fromOptimizedCIM(t.clone(),e.geometryType):null}getCalloutRotation(){return this._textMeshParamsPropsInitialized?this._textMeshTransformProps.postAngle:null}ensurePacked(e,t,n){this._calloutEffectGeometry=null,super.ensurePacked(e,t,n),(!this._textMeshParamsPropsInitialized||this._evaluator.hasDynamicProperties)&&(this._textMeshTransformProps=new w(this.evaluatedMeshParams),this._textMeshParamsPropsInitialized=!0)}getLocalCalloutReferenceInfo(){return this._createLocalCalloutReferenceInfo(this._getShaping(),void 0,!0,!0)}_createLocalCalloutReferenceInfo(e,n,r=!1,i=!1){if(!e)return;let a=e.boundsT,o=i?e.bounds:a,[s,c]=n?this._getReferenceSymbolOffset(n):[0,0],l=i?t(this._textMeshTransformProps.offsetX):0,u=i?t(this._textMeshTransformProps.offsetY):0,d={xmin:a.xmin,ymin:-a.ymax,xmax:a.xmax,ymax:-a.ymin};return{anchor:{x:0,y:0},bodyBounds:{xmin:o.xmin+s+l,ymin:-o.ymax-c+u,xmax:o.xmax+s+l,ymax:-o.ymin-c+u},collisionBodyBounds:d,...r?{bodyBoundsUseReferenceScale:!0}:null}}_getReferenceSymbolOffset(e){let n=t(e.size)/2+d;return[t(e.offsetX)+o(this.evaluatedMeshParams.horizontalAlignment)*n,-t(e.offsetY)+s(this.evaluatedMeshParams.verticalAlignment)*n]}_write(e,{target:t,effect:n}){this._calloutEffectGeometry=null;let r=n?.geometry,a=this._getShaping();if(!a)return;let o=this.evaluatedMeshParams.alignment===1,s=t.getDisplayId(),{placement:c}=this.evaluatedMeshParams;if(c!=null){if(c.type!==`PrivatePlacementMultipoint`)this._writePlacedTextMarkers(e,t,a,i(r));else{let n=this._getMultipointShaping();n&&this._writeMultipointText(e,t,n,i(r))}return}if(r?.nextPath())return r.nextPoint(),this._setCalloutEffectGeometry(r.x,r.y),this._writeGlyphs(e,s,r.x,r.y,a,0,void 0,{mapAligned:o});if(t.geometryType===`esriGeometryPolygon`){let n=t.readCentroidForDisplay();if(!n)return;let[r,i]=n.coords;return this._setCalloutEffectGeometry(r,i),this._writeGlyphs(e,s,r,i,a,0,void 0,{mapAligned:o})}if(t.geometryType===`esriGeometryMultipoint`){t.readGeometryForDisplay()?.forEachVertex((t,n)=>{this._setCalloutEffectGeometry(t,n),this._writeGlyphs(e,s,t,n,a,0,void 0,{mapAligned:o})});return}let l=t.readXForDisplay(),u=t.readYForDisplay();return this._setCalloutEffectGeometry(l,u),this._writeGlyphs(e,s,l,u,a,0,void 0,{mapAligned:o})}_writePlacedTextMarkers(e,t,i,o){let s=o??r.fromFeatureSetReaderCIM(t);if(!s)return;let c=a.getPlacement(s,-1,this.evaluatedMeshParams.placement,n,e.id);if(!c)return;let l=t.getDisplayId(),u=c.next();for(;u!=null;){let t=-u.getAngle(),n=u.tx,r=-u.ty;this._setCalloutEffectGeometry(n,r),this._writeGlyphs(e,l,n,r,i,t,void 0,{mapAligned:this.evaluatedMeshParams.alignment===1}),u=c.next()}}_writeMultipointText(e,t,i,o){let s=o??r.fromFeatureSetReaderCIM(t);if(!s)return;let c=a.getPlacement(s,-1,this.evaluatedMeshParams.placement,n,e.id);if(!c)return;let l=t.getDisplayId(),u=c.next(),d=0;for(;u!=null;){let t=u.tx,n=-u.ty,r=-u.getAngle();if(this._setCalloutEffectGeometry(t,n),d>=i.glyphs.length)break;this._writeGlyph(e,l,t,n,i,d,r,void 0,{mapAligned:this.evaluatedMeshParams.alignment===1}),u=c.next(),d++}}_setCalloutEffectGeometry(e,t){this._calloutEffectGeometry??=r.fromJSON({x:e,y:t})}_getShaping(n){let r=this._textMeshTransformProps,i=this.evaluatedMeshParams;if(!this._hasGlyphs(i.glyphs))return null;let a=t(r.fontSize),o=t(r.offsetX),s=t(r.offsetY),{sdfSize:c}=this._getDefaultGlyphMetrics(i.glyphs),d=A(i.lineWidth),f=j(c,i.lineHeightRatio),{backgroundColor:p,borderLineSize:m}=B(i);return g(i.glyphs,{scale:a/c,angle:r.postAngle,xOffset:o,yOffset:s,horizontalAlignment:i.horizontalAlignment,verticalAlignment:n||i.verticalAlignment,maxLineWidth:d,lineHeight:f,lineHeightRatio:e(i.lineHeightRatio,u,l),decoration:i.decoration,borderLineSizePx:t(m),hasBackground:!!p,useCIMAngleBehavior:i.useCIMAngleBehavior})}_getMultipointShaping(){let n=this._textMeshTransformProps,r=this.evaluatedMeshParams;if(!this._hasGlyphs(r.glyphs))return null;let i=t(n.fontSize),a=t(n.offsetX),o=t(n.offsetY),{sdfSize:s}=this._getDefaultGlyphMetrics(r.glyphs),c=A(r.lineWidth),d=j(s,r.lineHeightRatio),{backgroundColor:f,borderLineSize:p}=B(r);return _(r.glyphs,{scale:i/s,angle:n.postAngle,xOffset:a,yOffset:o,horizontalAlignment:r.horizontalAlignment,verticalAlignment:r.verticalAlignment,maxLineWidth:c,lineHeight:d,lineHeightRatio:e(r.lineHeightRatio,u,l),decoration:r.decoration,borderLineSizePx:t(p),hasBackground:!!f,useCIMAngleBehavior:r.useCIMAngleBehavior})}_hasGlyphs(e){return e?e.type===`glyphs`?e.glyphs.length>0:e.runs.some(e=>e.glyphs.glyphs.length>0):!1}_getDefaultGlyphMetrics(e){if(e.type===`glyphs`)return{sdfSize:e.sdfSize,sdfRadius:e.sdfRadius,sdfPadding:e.sdfPadding};let[t]=e.runs;return{sdfSize:t?.glyphs.sdfSize??24,sdfRadius:t?.glyphs.sdfRadius??8,sdfPadding:t?.glyphs.sdfPadding??3}}_writeGlyphs(e,n,r,i,a,o,s,c,l=!0){let u=this.evaluatedMeshParams,d=this._textMeshTransformProps,f=t(d.fontSize),p=d.haloSize,m=d.outlineSize,h=t(d.offsetX),g=t(d.offsetY),_=this._getDefaultGlyphMetrics(u.glyphs),b=v(u.color),[x,S]=y(u.scaleInfo,this.getTileInfo());o!==0&&a.setRotation(o);let C=a.bounds,w=r+C.x+h,T=i+C.y-g,E=(u.minPixelBuffer?u.minPixelBuffer/f:1)*2,D=Math.max(C.width,C.height)*E;a.textBox&&(e.recordStart(this.instanceId,this.attributeLayout,a.glyphs[0].textureKey),l&&e.recordBounds(w,T,D,D),this._writeTextBox(e,n,r,i,a.textBox,s,c),e.recordEnd());for(let t of a.glyphs){e.recordStart(this.instanceId,this.attributeLayout,t.textureKey),l&&e.recordBounds(w,T,D,D);let{texcoords:a,offsets:o}=t,u=t.fontSize??f;this._writeQuad(e,n,r,i,{texcoords:a,offsets:o,fontSize:u,haloSize:p,outlineSize:m,sdfSize:_.sdfSize,sdfRadius:_.sdfRadius,color:t.color?v(t.color):b,isBackground:!1,referenceBounds:s,minZoom:x,maxZoom:S,...c}),e.recordEnd()}o!==0&&a.setRotation(-o)}_writeGlyph(e,n,r,i,a,o,s,c,l,u=!0){let d=this.evaluatedMeshParams,f=this._textMeshTransformProps,p=t(f.fontSize),m=f.haloSize,h=f.outlineSize,g=t(f.offsetX),_=t(f.offsetY),y=this._getDefaultGlyphMetrics(d.glyphs),b=v(d.color);s!==0&&a.setRotation(s);let x=a.bounds,S=r+x.x+g,C=i+x.y-_,w=(d.minPixelBuffer?d.minPixelBuffer/p:1)*2,T=Math.max(x.width,x.height)*w,E=a.glyphs[o];e.recordStart(this.instanceId,this.attributeLayout,E.textureKey),u&&e.recordBounds(S,C,T,T);let{texcoords:D,offsets:O}=E,k=E.fontSize??p;this._writeQuad(e,n,r,i,{texcoords:D,offsets:O,fontSize:k,haloSize:m,outlineSize:h,sdfSize:y.sdfSize,sdfRadius:y.sdfRadius,color:E.color?v(E.color):b,isBackground:!1,referenceBounds:c,minZoom:0,maxZoom:30,...l}),e.recordEnd(),s!==0&&a.setRotation(-s)}_writeTextBox(e,t,n,r,i,a,o){let s=this.evaluatedMeshParams,{fontSize:c,haloSize:l,outlineSize:u}=this._textMeshTransformProps,{backgroundColor:d,borderLineColor:f,borderLineSize:p}=B(s),{sdfSize:m,sdfRadius:h}=this._getDefaultGlyphMetrics(s.glyphs),g=!!f&&p>0,_={isBackground:!0,fontSize:c,haloSize:l,outlineSize:u,referenceBounds:a,sdfSize:m,sdfRadius:h,...o};d&&(this._writeQuad(e,t,n,r,{texcoords:k,offsets:i.main,color:v(d),..._}),g||(this._writeQuad(e,t,n,r,{texcoords:I,offsets:i.top,color:v(d),..._}),this._writeQuad(e,t,n,r,{texcoords:L,offsets:i.bot,color:v(d),..._}),this._writeQuad(e,t,n,r,{texcoords:R,offsets:i.left,color:v(d),..._}),this._writeQuad(e,t,n,r,{texcoords:z,offsets:i.right,color:v(d),..._}))),g&&(this._writeQuad(e,t,n,r,{texcoords:P,offsets:i.top,color:v(f),..._}),this._writeQuad(e,t,n,r,{texcoords:P,offsets:i.bot,color:v(f),..._}),this._writeQuad(e,t,n,r,{texcoords:F,offsets:i.left,color:v(f),..._}),this._writeQuad(e,t,n,r,{texcoords:F,offsets:i.right,color:v(f),..._}))}_writeQuad(e,t,n,r,i){let a=e.vertexCount();this._writeVertex(e,t,n,r,i),e.indexWrite(a+0),e.indexWrite(a+1),e.indexWrite(a+2),e.indexWrite(a+1),e.indexWrite(a+3),e.indexWrite(a+2)}}const U=e=>Math.round(e*h);export{H as TextMeshWriter,V as TextVertexSpec,B as getTextBoxStyle,E as maxLabelZoom};
@@ -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"../../../Color.js";import n from"../../../Graphic.js";import{destroyMaybe as r}from"../../../core/maybe.js";import{watch as i,initial as a}from"../../../core/reactiveUtils.js";import{property as o,subclass as s}from"../../../core/accessorSupport/decorators.js";import c from"../../../layers/GraphicsLayer.js";import l from"../../../layers/support/TelemetryDisplay.js";import{getSymbolDisplayAngle as u}from"../../../layers/video/videoUtils.js";import d from"../../../symbols/SimpleFillSymbol.js";import f from"../../../symbols/SimpleLineSymbol.js";import p from"../../../symbols/SimpleMarkerSymbol.js";import{applyCIMSymbolRotation as m}from"../../../symbols/support/cimSymbolUtils.js";import{symbolTypes as h}from"../../../symbols/support/typeUtils.js";import g from"../engine/webgl/OverlayContainer.js";import _ from"../engine/webgl/OverlayMultipoint.js";import{LayerView2D as v}from"./LayerView2D.js";import y from"./graphics/GraphicContainer.js";import b from"./graphics/GraphicsView2D.js";import x from"../../layers/LayerView.js";const S=new t([255,127,0]);let C=class extends v(x){constructor(){super(...arguments),this._graphicsLayer=new c,this._frameOutlineGraphic=new n({symbol:new d({outline:{type:`simple-line`,color:S}})}),this._frameCenterGraphic=new n({symbol:new p({color:S,style:`cross`})}),this._sensorPathGraphic=new n({symbol:new f({color:S})}),this._sensorTrailGraphic=new n({symbol:new f({color:S})}),this._sensorSightlineGraphic=new n({symbol:new f({color:S})}),this._sensorLocationGraphic=new n({symbol:new p({color:S})}),this._overlayContainer=null,this._sensorLocationSymbolType=null,this.layer=null,this.sensorLocationSymbol=null,this.symbolAngle=0,this.visibleTelemetryElements=null}destroy(){this._graphicsLayer=r(this._graphicsLayer)}initialize(){this._sensorLocationSymbolType=this.layer?.sensorSymbol.type,this._graphicsLayer.graphics.addMany([this._frameCenterGraphic,this._sensorSightlineGraphic,this._sensorPathGraphic,this._sensorTrailGraphic,this._frameOutlineGraphic,this._sensorLocationGraphic]),this.visibleTelemetryElements=new l({frame:this.layer.telemetryDisplay?.frame??!1,frameCenter:this.layer.telemetryDisplay?.frameCenter??!0,frameOutline:this.layer.telemetryDisplay?.frameOutline??!0,lineOfSight:this.layer.telemetryDisplay?.lineOfSight??!0,sensorLocation:this.layer.telemetryDisplay?.sensorLocation??!0,sensorPath:this.layer.telemetryDisplay?.sensorPath??!0,sensorTrail:this.layer.telemetryDisplay?.sensorTrail??!0})}attach(){this._overlayContainer=new g,this.container.addChild(this._overlayContainer),this._addOverlayMultipoint(),this.graphicsView=new b({requestUpdateCallback:()=>this.requestUpdate(),view:this.view,graphics:this._graphicsLayer.graphics,container:new y(this.view.featuresTilingScheme)}),this.container.addChild(this.graphicsView.container),this.addAttachHandles(this._graphicsLayer.on(`graphic-update`,this.graphicsView.graphicUpdateHandler)),this.addAttachHandles([i(()=>[this.layer.telemetryDisplay?.frame,this.layer.telemetryDisplay?.frameCenter,this.layer.telemetryDisplay?.frameOutline,this.layer.telemetryDisplay?.sensorLocation,this.layer.telemetryDisplay?.sensorPath,this.layer.telemetryDisplay?.sensorTrail,this.layer.telemetryDisplay?.lineOfSight],()=>this._updateVisibleTelemetryElements(),a),i(()=>[this.layer.telemetry,this.visibleTelemetryElements?.frameCenter,this.visibleTelemetryElements?.frameOutline,this.visibleTelemetryElements?.sensorLocation,this.visibleTelemetryElements?.sensorPath,this.visibleTelemetryElements?.sensorTrail,this.visibleTelemetryElements?.lineOfSight],()=>this._updateGraphicGeometries(),a),i(()=>this.layer.metadata,()=>this._updateSensorLocationSymbolAngle(),a),i(()=>this.layer?.frameCenterSymbol,()=>this._updateFrameCenterSymbol(),a),i(()=>this.layer?.frameOutlineSymbol,()=>this._updateFrameOutlineSymbol(),a),i(()=>this.layer?.sensorPathSymbol,()=>this._updateSensorPathSymbol(),a),i(()=>this.layer?.sensorSightLineSymbol,()=>this._updateSensorSightlineSymbol(),a),i(()=>this.layer?.sensorSymbol,()=>this._updateSensorLocationSymbol(),a),i(()=>this.layer?.sensorTrailSymbol,()=>this._updateSensorTrailSymbol(),a),i(()=>this.symbolAngle,()=>this._updateSensorLocationSymbol(),a)])}detach(){this._overlayContainer.removeAllChildren(),this.container.removeAllChildren(),this.graphicsView=r(this.graphicsView)}supportsSpatialReference(e){return!0}moveEnd(){}viewChange(){this.graphicsView.viewChange()}update(e){this.graphicsView.processUpdate(e)}isUpdating(){return!this.graphicsView||this.graphicsView.updating}_updateVisibleTelemetryElements(){this.view.animationsEnabled&&this.visibleTelemetryElements&&this.layer.telemetryDisplay&&(this.visibleTelemetryElements.frame=this.layer.telemetryDisplay.frame,this.visibleTelemetryElements.frameCenter=this.layer.telemetryDisplay.frameCenter,this.visibleTelemetryElements.frameOutline=this.layer.telemetryDisplay.frameOutline,this.visibleTelemetryElements.lineOfSight=this.layer.telemetryDisplay.lineOfSight,this.visibleTelemetryElements.sensorLocation=this.layer.telemetryDisplay.sensorLocation,this.visibleTelemetryElements.sensorTrail=this.layer.telemetryDisplay.sensorTrail,this.visibleTelemetryElements.sensorPath=this.layer.telemetryDisplay.sensorPath)}_updateGraphicGeometries(){if(!this.view.animationsEnabled)return;let{telemetry:e}=this.layer,{visibleTelemetryElements:t}=this;e&&t&&(t.frameOutline&&e.frameOutline?this._frameOutlineGraphic.geometry=this.layer.telemetry.frameOutline:this._frameOutlineGraphic.geometry=null,t.sensorTrail&&e.sensorTrail?this._sensorTrailGraphic.geometry=this.layer.telemetry.sensorTrail:this._sensorTrailGraphic.geometry=null,t.sensorPath&&e.sensorPath?this._sensorPathGraphic.geometry=this.layer.telemetry.sensorPath:this._sensorPathGraphic.geometry=null,t.lineOfSight&&e.lineOfSight?this._sensorSightlineGraphic.geometry=this.layer.telemetry.lineOfSight:this._sensorSightlineGraphic.geometry=null,t.sensorLocation&&e.sensorLocation?this._sensorLocationGraphic.geometry=this.layer.telemetry.sensorLocation:this._sensorLocationGraphic.geometry=null,t.frameCenter&&e.frameCenter?this._frameCenterGraphic.geometry=this.layer.telemetry.frameCenter:this._frameCenterGraphic.geometry=null)}_updateSensorLocationSymbolAngle(){if(!this.view.animationsEnabled||!this.layer?.metadata?.size)return;let{source:e,symbolOffset:t=0}=this.layer.sensorSymbolOrientation||{};if(!e&&!t)return;let n=this.layer?.metadata?.get(10005)?.value??0,r=this.layer?.metadata?.get(10018)?.value??0,i=u({cameraAzimuth:r,platformHeading:n,source:this.layer.sensorSymbolOrientation?.source,symbolOffset:this.layer.sensorSymbolOrientation?.symbolOffset??0});this.symbolAngle=Math.round(Math.abs(i))}_updateSensorLocationSymbol(){switch(this._sensorLocationSymbolType){case`simple-marker`:this.sensorLocationSymbol=this.layer.sensorSymbol.clone(),this.sensorLocationSymbol.angle=this.symbolAngle,this._sensorLocationGraphic.symbol=this.sensorLocationSymbol.clone();break;case`picture-marker`:this.sensorLocationSymbol=this.layer.sensorSymbol,this.sensorLocationSymbol.angle=this.symbolAngle,this._sensorLocationGraphic.symbol=this.sensorLocationSymbol;break;case`cim`:this.sensorLocationSymbol=this.layer.sensorSymbol,m(this.sensorLocationSymbol,this.symbolAngle,!0),this._sensorLocationGraphic.symbol=this.sensorLocationSymbol}}_updateFrameCenterSymbol(){this.layer?.frameCenterSymbol&&(this._frameCenterGraphic.symbol=this.layer.frameCenterSymbol.clone())}_updateFrameOutlineSymbol(){this.layer?.frameOutlineSymbol&&(this._frameOutlineGraphic.symbol=this.layer.frameOutlineSymbol.clone())}_updateSensorPathSymbol(){this.layer?.sensorPathSymbol&&(this._sensorPathGraphic.symbol=this.layer.sensorPathSymbol.clone())}_updateSensorSightlineSymbol(){this.layer?.sensorSightLineSymbol&&(this._sensorSightlineGraphic.symbol=this.layer.sensorSightLineSymbol.clone())}_updateSensorTrailSymbol(){this.layer?.sensorTrailSymbol&&(this._sensorTrailGraphic.symbol=this.layer.sensorTrailSymbol.clone())}async _addOverlayMultipoint(){if(!this.layer.videoElement)return;let e=new _(this.layer.videoElement);this.addAttachHandles([i(()=>[this.layer.frameHorizonPoints,this.layer.groundControlPoints,this.layer.frameOpacity,this.layer.telemetryDisplay?.frame],()=>{if(!this.view.animationsEnabled)return;let{visibleTelemetryElements:t}=this;e.frameHorizonPoints=this.layer.frameHorizonPoints,e.groundControlPoints=this.layer.groundControlPoints,e.opacity=this.layer.frameOpacity,e.visible=t?.frame??!1},a)]),this._overlayContainer.addChild(e),this.view.stage.requestRender()}};e([o()],C.prototype,`graphicsView`,void 0),e([o()],C.prototype,`layer`,void 0),e([o({types:h})],C.prototype,`sensorLocationSymbol`,void 0),e([o()],C.prototype,`symbolAngle`,void 0),e([o({type:l})],C.prototype,`visibleTelemetryElements`,void 0),C=e([s(`esri.views.2d.layers.VideoLayerView2D`)],C);const w=C;export{w as default};
2
+ import{__decorate as e}from"tslib";import t from"../../../Color.js";import n from"../../../Graphic.js";import{destroyMaybe as r}from"../../../core/maybe.js";import{watch as i,initial as a}from"../../../core/reactiveUtils.js";import{property as o,subclass as s}from"../../../core/accessorSupport/decorators.js";import c from"../../../layers/GraphicsLayer.js";import l from"../../../layers/support/TelemetryDisplay.js";import{getSymbolDisplayAngle as u}from"../../../layers/video/videoUtils.js";import d from"../../../symbols/SimpleFillSymbol.js";import f from"../../../symbols/SimpleLineSymbol.js";import p from"../../../symbols/SimpleMarkerSymbol.js";import{applyCIMSymbolRotation as m}from"../../../symbols/support/cimSymbolUtils.js";import{symbolTypes as h}from"../../../symbols/support/typeUtils.js";import g from"../engine/webgl/OverlayContainer.js";import _ from"../engine/webgl/OverlayMultipoint.js";import{LayerView2D as v}from"./LayerView2D.js";import y from"./graphics/GraphicContainer.js";import b from"./graphics/GraphicsView2D.js";import x from"../../layers/LayerView.js";const S=new t([255,127,0]);let C=class extends v(x){constructor(){super(...arguments),this._graphicsLayer=new c,this._frameOutlineGraphic=new n({symbol:new d({outline:{type:`simple-line`,color:S}})}),this._frameCenterGraphic=new n({symbol:new p({color:S,style:`cross`})}),this._sensorPathGraphic=new n({symbol:new f({color:S})}),this._sensorTrailGraphic=new n({symbol:new f({color:S})}),this._sensorSightlineGraphic=new n({symbol:new f({color:S})}),this._sensorLocationGraphic=new n({symbol:new p({color:S})}),this._overlayContainer=null,this._sensorLocationSymbolType=null,this.layer=null,this.sensorLocationSymbol=null,this.symbolAngle=0,this.visibleTelemetryElements=null}destroy(){this._graphicsLayer=r(this._graphicsLayer)}initialize(){this._sensorLocationSymbolType=this.layer?.sensorSymbol.type,this._graphicsLayer.graphics.addMany([this._frameCenterGraphic,this._sensorSightlineGraphic,this._sensorPathGraphic,this._sensorTrailGraphic,this._frameOutlineGraphic,this._sensorLocationGraphic]),this.visibleTelemetryElements=new l({frame:this.layer.telemetryDisplay?.frame??!1,frameCenter:this.layer.telemetryDisplay?.frameCenter??!0,frameOutline:this.layer.telemetryDisplay?.frameOutline??!0,lineOfSight:this.layer.telemetryDisplay?.lineOfSight??!0,sensorLocation:this.layer.telemetryDisplay?.sensorLocation??!0,sensorPath:this.layer.telemetryDisplay?.sensorPath??!0,sensorTrail:this.layer.telemetryDisplay?.sensorTrail??!0})}attach(){this._overlayContainer=new g,this.container.addChild(this._overlayContainer),this._addOverlayMultipoint(),this.graphicsView=new b({requestUpdateCallback:()=>this.requestUpdate(),view:this.view,graphics:this._graphicsLayer.graphics,container:new y(this.view.featuresTilingScheme)}),this.container.addChild(this.graphicsView.container),this.addAttachHandles(this._graphicsLayer.on(`graphic-update`,this.graphicsView.graphicUpdateHandler)),this.addAttachHandles([i(()=>[this.layer.telemetryDisplay?.frame,this.layer.telemetryDisplay?.frameCenter,this.layer.telemetryDisplay?.frameOutline,this.layer.telemetryDisplay?.sensorLocation,this.layer.telemetryDisplay?.sensorPath,this.layer.telemetryDisplay?.sensorTrail,this.layer.telemetryDisplay?.lineOfSight],()=>this._updateVisibleTelemetryElements(),a),i(()=>[this.layer.telemetry,this.layer.telemetry.sensorPath,this.layer.telemetry.sensorTrail,this.visibleTelemetryElements?.frameCenter,this.visibleTelemetryElements?.frameOutline,this.visibleTelemetryElements?.sensorLocation,this.visibleTelemetryElements?.sensorPath,this.visibleTelemetryElements?.sensorTrail,this.visibleTelemetryElements?.lineOfSight],()=>this._updateGraphicGeometries(),a),i(()=>this.layer.metadata,()=>this._updateSensorLocationSymbolAngle(),a),i(()=>this.layer?.frameCenterSymbol,()=>this._updateFrameCenterSymbol(),a),i(()=>this.layer?.frameOutlineSymbol,()=>this._updateFrameOutlineSymbol(),a),i(()=>this.layer?.sensorPathSymbol,()=>this._updateSensorPathSymbol(),a),i(()=>this.layer?.sensorSightLineSymbol,()=>this._updateSensorSightlineSymbol(),a),i(()=>this.layer?.sensorSymbol,()=>this._updateSensorLocationSymbol(),a),i(()=>this.layer?.sensorTrailSymbol,()=>this._updateSensorTrailSymbol(),a),i(()=>this.symbolAngle,()=>this._updateSensorLocationSymbol(),a)])}detach(){this._overlayContainer.removeAllChildren(),this.container.removeAllChildren(),this.graphicsView=r(this.graphicsView)}supportsSpatialReference(e){return!0}moveEnd(){}viewChange(){this.graphicsView.viewChange()}update(e){this.graphicsView.processUpdate(e)}isUpdating(){return!this.graphicsView||this.graphicsView.updating}_updateVisibleTelemetryElements(){this.view.animationsEnabled&&this.visibleTelemetryElements&&this.layer.telemetryDisplay&&(this.visibleTelemetryElements.frame=this.layer.telemetryDisplay.frame,this.visibleTelemetryElements.frameCenter=this.layer.telemetryDisplay.frameCenter,this.visibleTelemetryElements.frameOutline=this.layer.telemetryDisplay.frameOutline,this.visibleTelemetryElements.lineOfSight=this.layer.telemetryDisplay.lineOfSight,this.visibleTelemetryElements.sensorLocation=this.layer.telemetryDisplay.sensorLocation,this.visibleTelemetryElements.sensorTrail=this.layer.telemetryDisplay.sensorTrail,this.visibleTelemetryElements.sensorPath=this.layer.telemetryDisplay.sensorPath)}_updateGraphicGeometries(){if(!this.view.animationsEnabled)return;let{telemetry:e}=this.layer,{visibleTelemetryElements:t}=this;e&&t&&(t.frameOutline&&e.frameOutline?this._frameOutlineGraphic.geometry=this.layer.telemetry.frameOutline:this._frameOutlineGraphic.geometry=null,t.sensorTrail&&e.sensorTrail?this._sensorTrailGraphic.geometry=this.layer.telemetry.sensorTrail:this._sensorTrailGraphic.geometry=null,t.sensorPath&&e.sensorPath?this._sensorPathGraphic.geometry=this.layer.telemetry.sensorPath:this._sensorPathGraphic.geometry=null,t.lineOfSight&&e.lineOfSight?this._sensorSightlineGraphic.geometry=this.layer.telemetry.lineOfSight:this._sensorSightlineGraphic.geometry=null,t.sensorLocation&&e.sensorLocation?this._sensorLocationGraphic.geometry=this.layer.telemetry.sensorLocation:this._sensorLocationGraphic.geometry=null,t.frameCenter&&e.frameCenter?this._frameCenterGraphic.geometry=this.layer.telemetry.frameCenter:this._frameCenterGraphic.geometry=null)}_updateSensorLocationSymbolAngle(){if(!this.view.animationsEnabled||!this.layer?.metadata?.size)return;let{source:e,symbolOffset:t=0}=this.layer.sensorSymbolOrientation||{};if(!e&&!t)return;let n=this.layer?.metadata?.get(10005)?.value??0,r=this.layer?.metadata?.get(10018)?.value??0,i=u({cameraAzimuth:r,platformHeading:n,source:this.layer.sensorSymbolOrientation?.source,symbolOffset:this.layer.sensorSymbolOrientation?.symbolOffset??0});this.symbolAngle=Math.round(Math.abs(i))}_updateSensorLocationSymbol(){switch(this._sensorLocationSymbolType){case`simple-marker`:this.sensorLocationSymbol=this.layer.sensorSymbol.clone(),this.sensorLocationSymbol.angle=this.symbolAngle,this._sensorLocationGraphic.symbol=this.sensorLocationSymbol.clone();break;case`picture-marker`:this.sensorLocationSymbol=this.layer.sensorSymbol,this.sensorLocationSymbol.angle=this.symbolAngle,this._sensorLocationGraphic.symbol=this.sensorLocationSymbol;break;case`cim`:this.sensorLocationSymbol=this.layer.sensorSymbol,m(this.sensorLocationSymbol,this.symbolAngle,!0),this._sensorLocationGraphic.symbol=this.sensorLocationSymbol}}_updateFrameCenterSymbol(){this.layer?.frameCenterSymbol&&(this._frameCenterGraphic.symbol=this.layer.frameCenterSymbol.clone())}_updateFrameOutlineSymbol(){this.layer?.frameOutlineSymbol&&(this._frameOutlineGraphic.symbol=this.layer.frameOutlineSymbol.clone())}_updateSensorPathSymbol(){this.layer?.sensorPathSymbol&&(this._sensorPathGraphic.symbol=this.layer.sensorPathSymbol.clone())}_updateSensorSightlineSymbol(){this.layer?.sensorSightLineSymbol&&(this._sensorSightlineGraphic.symbol=this.layer.sensorSightLineSymbol.clone())}_updateSensorTrailSymbol(){this.layer?.sensorTrailSymbol&&(this._sensorTrailGraphic.symbol=this.layer.sensorTrailSymbol.clone())}async _addOverlayMultipoint(){if(!this.layer.videoElement)return;let e=new _(this.layer.videoElement);this.addAttachHandles([i(()=>[this.layer.frameHorizonPoints,this.layer.groundControlPoints,this.layer.frameOpacity,this.layer.telemetryDisplay?.frame],()=>{if(!this.view.animationsEnabled)return;let{visibleTelemetryElements:t}=this;e.frameHorizonPoints=this.layer.frameHorizonPoints,e.groundControlPoints=this.layer.groundControlPoints,e.opacity=this.layer.frameOpacity,e.visible=t?.frame??!1},a)]),this._overlayContainer.addChild(e),this.view.stage.requestRender()}};e([o()],C.prototype,`graphicsView`,void 0),e([o()],C.prototype,`layer`,void 0),e([o({types:h})],C.prototype,`sensorLocationSymbol`,void 0),e([o()],C.prototype,`symbolAngle`,void 0),e([o({type:l})],C.prototype,`visibleTelemetryElements`,void 0),C=e([s(`esri.views.2d.layers.VideoLayerView2D`)],C);const w=C;export{w as default};
@@ -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 n from"../../../../core/Logger.js";import{assertIsSome as r}from"../../../../core/maybe.js";import{debounce as i,isAbortError as a}from"../../../../core/promiseUtils.js";import{property as o,subclass as s}from"../../../../core/accessorSupport/decorators.js";import{UpdatingHandles as c}from"../../../../core/support/UpdatingHandles.js";import l from"../../../../geometry/Extent.js";import u from"../../../../geometry/Point.js";import{isFunctionRaster as d}from"../../../../layers/raster/datasets/datasetUtils.js";import{update as f,unregister as p,getRasterId as m,register as h}from"../../../../layers/raster/datasets/RawBlockCache.js";import{getWorldWidth as g,computeProjectedScales as _}from"../../../../layers/raster/functions/rasterProjectionHelper.js";import{getStretchCutoff as v}from"../../../../layers/raster/functions/stretchUtils.js";import y from"../../../../layers/support/PixelBlock.js";import b from"../../../../layers/support/TileInfo.js";import x from"../../tiling/TileInfoView.js";import"../../tiling/TileKey.js";import S from"../../tiling/TileQueue.js";import C from"../../tiling/TileStrategy.js";import{tileSize as w}from"../../engine/webgl/definitions.js";import{readFromTiledRasterData as T}from"../../../support/rasterHitTestUtils.js";import{TaskPriority as E}from"../../../support/Scheduler.js";import{getWebGLCapabilities as D}from"../../../webgl/capabilities.js";const O=[0,0];function k(e){return e.type!==`geospatial-pdf`}let A=class extends t{constructor(){super(...arguments),this._updatingHandles=new c,this._emptyTilePixelBlock=null,this._tileStrategy=null,this._tileInfoView=null,this._fetchQueue=null,this._blockCacheRegistryUrl=null,this._blockCacheRegistryId=null,this._srcResolutions=[],this.previousLOD=null,this._needBlockCacheUpdate=!1,this._globalSymbolizerParams=null,this._symbolizerParams=null,this._abortController=null,this._isCustomTilingScheme=!1,this._maxIndexedColormapSize=0,this._rasterFunctionState=`na`,this._globalUpdateRequested=!1,this.attached=!1,this.timeExtent=null,this.refreshDRAFunctionOnce=i(async()=>{let{fullExtent:e,view:t}=this.layerView;if(e?.intersects(t.extent))try{await this._updateDRAStatistics(this._abortController?.signal)&&await this.doRefresh()}catch{}}),this.redrawOrRefetch=i(async(e={})=>{if(!(`rasterFunction`in this.layer))return this._updatingHandles.addPromise(e.refetch?this.doRefresh():this._redrawImage(e.signal));let t=this._rasterFunctionState,n=e.reprocess||t===`gpu`&&!this.canUseWebGLForProcessing||t===`cpu`&&this.canUseWebGLForProcessing;if(n&&(await this._updatingHandles.addPromise(this.layer.updateRasterFunction()),this.updateRasterFunctionParameters()),!this.previousLOD||this.layerView.suspended)return;let r=this._rasterFunctionState,{type:i}=this;return e.refetch||i!==`raster`&&n||r===`cpu`||t===`cpu`?this._updatingHandles.addPromise(this.doRefresh()):this._updatingHandles.addPromise(this._redrawImage(e.signal))})}destroy(){this._updatingHandles.destroy()}get canUseWebGLForProcessing(){return!1}get canUseLocalSymbolizerParams(){return(this.canUseWebGLForProcessing||this.type===`rasterVF`)&&!this.layerView.hasTilingEffects}get hasDRAInRasterFunction(){if(!(`rasterFunction`in this.layer))return!1;let{rasterFunction:e}=this.layer;return e?JSON.stringify(e,null,0).includes(`"dra":true`):!1}get isCPUBasedDRA(){if(!(`renderer`in this.layer))return!1;let{renderer:e}=this.layer;return e?.type===`raster-stretch`&&e.dynamicRangeAdjustment&&(!this.canUseWebGLForProcessing||e.stretchType!==`min-max`&&e.stretchType!==`standard-deviation`)}get useWebGLForProcessing(){return this._get(`useWebGLForProcessing`)??!0}set useWebGLForProcessing(e){this._set(`useWebGLForProcessing`,e)}get useProgressiveUpdate(){return this._get(`useProgressiveUpdate`)??!0}set useProgressiveUpdate(e){if(this._tileStrategy&&this.useProgressiveUpdate!==e){this._tileStrategy.destroy(),this.container.removeAllChildren();let t=this._getCacheSize(e);this._tileStrategy=new C({cachePolicy:`purge`,acquireTile:e=>this.acquireTile(e),releaseTile:e=>this.releaseTile(e),cacheSize:t,tileInfoView:this._tileInfoView}),this._set(`useProgressiveUpdate`,e),this.layerView.requestUpdate()}}update(e){this._fetchQueue.pause(),this._fetchQueue.state=e.state,this._tileStrategy.update(e),this._fetchQueue.resume();let{extent:t,resolution:n,scale:r}=e.state,i=this._tileInfoView.getClosestInfoForScale(r);if(this.layer.raster){if(!this.useProgressiveUpdate||this._needBlockCacheUpdate){let e=this._srcResolutions[i.level],r=`toJSON`in t?t:l.fromJSON(t);f(this._blockCacheRegistryUrl,this._blockCacheRegistryId,r,n,e,this.layer.raster.ioConfig.sampling)}this._needBlockCacheUpdate=!1,this.previousLOD?.level!==i.level&&(this.previousLOD=i,this._symbolizerParams!=null&&this.canUseLocalSymbolizerParams&&this._updateSymbolizerParams(),this._tileStrategy.updateCacheSize(0))}}moveEnd(){(this.isCPUBasedDRA||this.hasDRAInRasterFunction||!this.useProgressiveUpdate)&&(this._abortController&&this._abortController.abort(),this._abortController=new AbortController,this._fetchQueue.length===0&&(this.hasDRAInRasterFunction?(this._globalUpdateRequested=!1,this.refreshDRAFunctionOnce()):this.isCPUBasedDRA&&this._redrawImage(this._abortController.signal).then(()=>{this._globalUpdateRequested=!1,this.layerView.requestUpdate()})));let e=this._getCacheSize(this.useProgressiveUpdate);this._tileStrategy.updateCacheSize(e),this.layerView.requestUpdate()}get updating(){return this._globalUpdateRequested||this._updatingHandles?.updating}attach(){let e=D();this._maxIndexedColormapSize=(e.maxTextureSize||4096)*4,this._initializeTileInfo(),this._tileInfoView=new x(this.layerView.tileInfo,this.layerView.fullExtent);let t=this._computeFetchConcurrency();this._fetchQueue=new S({tileInfoView:this._tileInfoView,concurrency:t,process:(e,t)=>this._fetchTile(e,t),priority:E.MAPVIEW_FETCH_QUEUE,scheduler:this.scheduler});let n=this._getCacheSize(this.useProgressiveUpdate);this._tileStrategy=new C({cachePolicy:`purge`,acquireTile:e=>this.acquireTile(e),releaseTile:e=>this.releaseTile(e),cacheSize:n,tileInfoView:this._tileInfoView}),this._updateBlockCacheRegistry()}detach(){this._tileStrategy.destroy(),this._fetchQueue.clear(),this.container.removeAllChildren(),this._fetchQueue=this._tileStrategy=this._tileInfoView=null,p(this._blockCacheRegistryUrl,this._blockCacheRegistryId),this._blockCacheRegistryUrl=this._blockCacheRegistryId=null}async hitTest(e){if(!k(this.layer))return null;let t=this._locateSourceData(e);if(!t)return null;let{layer:n}=this,r=n.renderer?.type===`vector-field`,i=this.canUseWebGLForProcessing&&d(this.layer.raster);return T({mapPoint:e,layer:n,sourceData:t,processRasterFunction:i,sourceIsUV:r})}acquireTile(e){let t=this.container.createTile(e);return this._updatingHandles.consumePromise(this._enqueueTileFetch(t)),this.layerView.requestUpdate(),this._needBlockCacheUpdate=!0,this._globalUpdateRequested=this.isCPUBasedDRA||this.hasDRAInRasterFunction||!this.useProgressiveUpdate,t}releaseTile(e){this._fetchQueue.abort(e.key.id),this.container.removeChild(e),e.once(`detach`,()=>{e.destroy(),this.layerView.requestUpdate()}),this.layerView.requestUpdate()}createEmptyTilePixelBlock(e=null){let t=e==null||e.join(`,`)===this._tileInfoView.size.join(`,`);if(t&&this._emptyTilePixelBlock!=null)return this._emptyTilePixelBlock;e||=this._tileInfoView.size;let[n,r]=e,i=new y({width:n,height:r,pixels:[new Uint8Array(n*r)],mask:new Uint8Array(n*r),pixelType:`u8`});return t&&(this._emptyTilePixelBlock=i),i}_getBandIds(){if(!(`bandIds`in this.layer))return this.layer.getRawDisplayBandIds();if(this.container&&!(`rasterFunctionChain`in this.container&&this.container.rasterFunctionChain))return this.layer.bandIds;let{bandIds:e,raster:t}=this.layer,n=`rasterFunction`in t?t.rasterFunction.rawInputBandIds:null;return!e?.length||!n?.length||t.rasterInfo.bandCount===1?`rasterFunction`in t?n:e:e.map(e=>n[Math.min(e,n.length-1)])}updateRasterFunctionParameters(){}_fetchTile(e,t){let n=this._getFetchOptions(e.level,t.signal);return this.fetchTile(e,n)}_getFetchOptions(e,t){let{canUseWebGLForProcessing:n}=this,{layerView:r}=this,{tileInfo:i}=r,a=!i.isWrappable&&g(r.view.spatialReference)!=null,o=n&&this.layer.raster.hasUniqueSourceStorageInfo,{layer:s}=this.layerView,c=s.serviceRasterInfo?.storageInfo.isBsqTile?s.getRawDisplayBandIds():void 0;return{allowPartialFill:!0,datumTransformation:r.datumTransformation,interpolation:n?`nearest`:`interpolation`in this.layer?this.layer.interpolation:`bilinear`,registryId:this._blockCacheRegistryId,requestRawData:o,skipRasterFunction:this.type===`raster`&&this.container.rasterFunctionChain!=null,signal:t,srcResolution:this._srcResolutions[e],timeExtent:r.timeExtent,tileInfo:i,bandIds:c,disableWrapAround:a}}_getCacheSize(e){return e?40:0}_initializeTileInfo(){let{layerView:e}=this,t=e.view.spatialReference;if(this._canUseLayerLODs()){let{origin:n,lods:r}=this.layer.tileInfo,i=r.map(({scale:e})=>e),a=b.create({spatialReference:t,size:w,scales:i,origin:n});e.set(`tileInfo`,a),this._srcResolutions=r.map(({resolution:e})=>({x:e,y:e}));return}let{scales:n,srcResolutions:i,isCustomTilingScheme:a}=_(this.layer.serviceRasterInfo,t,{tileSize:w,alignGlobalDatasetWithAGOL:!0,limitToSrcResolution:!1}),o=b.create({spatialReference:t,size:w,scales:n}),s=o.origin.x===0;r(e.fullExtent);let{xmin:c,ymax:l}=e.fullExtent;(s||a&&o.origin.x>c)&&(o.origin=new u({x:c,y:l,spatialReference:t})),this._isCustomTilingScheme=a,e.set(`tileInfo`,o),this._srcResolutions=i??[]}_canUseLayerLODs(){let{layer:e,layerView:t}=this;if(e.raster.tileType!==`Map`)return!1;let{lods:n}=e.tileInfo,r=t.view.constraints?.effectiveLODs;return r?.length===n.length&&r.every(({scale:e},t)=>Math.abs(e-n[t].scale)<.001)}_computeFetchConcurrency(){let{blockBoundary:e}=this.layer.serviceRasterInfo.storageInfo,t=e[e.length-1];return(t.maxCol-t.minCol+1)*(t.maxRow-t.minRow+1)>64?2:10}async _enqueueTileFetch(e,t){if(!this._fetchQueue.has(e.key.id)){try{let t=e.once(`detach`,()=>t=void 0),r=await this._fetchQueue.push(e.key),i=this._getBandIds(),o=this.hasDRAInRasterFunction&&d(this.layer.raster)&&!this.layer.raster.processParameters?.stretchCutoff,s=!this.useProgressiveUpdate||o||this.isCPUBasedDRA&&!this._globalSymbolizerParams,c=this._globalUpdateRequested&&!this.layerView.moving&&this._fetchQueue.length===0;if(c){if(s=!1,!this.hasDRAInRasterFunction)try{await this._redrawImage(this._abortController?.signal)}catch(e){a(e)&&n.getLogger(this).error(e)}this._globalUpdateRequested=!1}if(!t)return;this.canUseLocalSymbolizerParams&&this._symbolizerParams==null&&this._updateSymbolizerParams();let l=this._tileInfoView.getTileCoords(O,e.key),u=this._tileInfoView.getTileResolution(e.key);await this.updateTileSource(e,{source:r,symbolizerParams:this._symbolizerParams,globalSymbolizerParams:this._globalSymbolizerParams,suspended:s,bandIds:i,coords:l,resolution:u}),t&&(e.once(`attach`,()=>this.layerView.requestUpdate()),this.container.addChild(e),t.remove()),c&&this.hasDRAInRasterFunction&&d(this.layer.raster)&&!this.layer.raster.processParameters?.extent?.equals(this.layerView.view.extent)&&this.refreshDRAFunctionOnce()}catch(e){a(e)||n.getLogger(this).error(e)}this.layerView.requestUpdate()}}async _updateDRAStatistics(e){if(!k(this.layer)||!d(this.layer.raster))return!1;let t=await this.layer.getDynamicRangeInputRaster();if(!t)return!1;let{raster:n,functionArguments:r}=t,i=this._getFetchOptions(this.previousLOD.level,e),{extent:a,width:o,height:s}=this.layerView.view,{pixelBlock:c}=await n.fetchPixels(a,o,s,{...i,interpolation:`nearest`,requestRawData:!1,skipRasterFunction:!1}),l=v(r,{rasterInfo:n.rasterInfo,pixelBlock:c});return this.layer.raster.processParameters={stretchCutoff:l,extent:a},!0}_locateSourceData(e){if(!this.layer.loaded||!this.attached)return null;let t=new Map,n=this.container.children.find(n=>{if(!n.visible||!(`bitmap`in n?n.bitmap?.rawPixelData:n.tileData?.rawPixelData)?.pixelBlock)return!1;let{key:r}=n,{level:i}=r;if(!t.has(i)){let n=this._tileInfoView.getLODInfoAt(i);if(!n)return!1;let r=Math.floor(n.getColumnForX(e.x)),a=Math.floor(n.getRowForY(e.y));t.set(i,[a,r])}let[a,o]=t.get(i);return a===r.row&&o===r.col});if(n==null)return null;if(`tileData`in n){let{rawPixelData:e}=n.tileData;return e?.pixelBlock?{rawPixelData:e,tileSize:{width:n.width,height:n.height}}:null}let{rawPixelData:r,transformGrid:i,width:a,height:o}=n.bitmap;return r?.pixelBlock?{rawPixelData:r,transformGrid:i,tileSize:{width:a,height:o}}:null}async _redrawImage(e){if(!this.attached||this.container.children.length===0||(`updateRenderer`in this.layer&&await this.layer.updateRenderer(),this.isCPUBasedDRA?await this._updateGlobalSymbolizerParams(e):(this.canUseLocalSymbolizerParams&&this._updateSymbolizerParams(),this._globalSymbolizerParams=null),!this.attached||e?.aborted))return;let t=this.container.children.map(async t=>this.updateTileSymbolizerParameters(t,{local:this._symbolizerParams,global:this._globalSymbolizerParams},e));await Promise.allSettled(t),this.attached&&!e?.aborted&&this.container.requestRender()}async _updateGlobalSymbolizerParams(e){let{fullExtent:t,view:n}=this.layerView;if(!t?.intersects(n.extent)||!(`symbolizer`in this.layer))return;let r=this._getFetchOptions(this.previousLOD.level,e),i=await this.layer.fetchPixels(n.extent,n.width,n.height,{...r,interpolation:`nearest`,requestRawData:!1,skipRasterFunction:!1});if(!i?.pixelBlock)return;let{resolution:a}=this.previousLOD,{isBsqTile:o}=this.layer.raster.rasterInfo.storageInfo,s=o?null:this._getBandIds(),c=this.layer.symbolizer.generateWebGLParameters({pixelBlock:i.pixelBlock.extractBands(s),isGCS:n.spatialReference.isGeographic,resolution:{x:a,y:a},bandIds:s});!this.canUseWebGLForProcessing&&c&&c.type===`stretch`&&this.layer.renderer?.type===`raster-stretch`&&(c.factor=c.factor.map(e=>e*255),c.minOutput=Math.round(c.minOutput*255),c.maxOutput=Math.round(c.maxOutput*255)),this._globalSymbolizerParams=c}_updateSymbolizerParams(){if(!(`symbolizer`in this.layer))return;let{resolution:e}=this.previousLOD,t=this._getBandIds();this._symbolizerParams=this.layer.symbolizer.generateWebGLParameters({pixelBlock:null,isGCS:this.layerView.view.spatialReference.isGeographic,resolution:{x:e,y:e},bandIds:t})}_updateBlockCacheRegistry(e=!1){let{layer:t,layerView:n}=this,{raster:r}=t,i=null,a=null,o=r;if(`multidimensionalDefinition`in t){let{multidimensionalDefinition:e}=t.normalizeRasterFetchOptions({multidimensionalDefinition:t.multidimensionalDefinition,timeExtent:n.timeExtent});i=r.rasterInfo.multidimensionalInfo?r.getSliceIndex(e)??null:null,a=r.rasterInfo.storageInfo.isBsqTile?t.getRawDisplayBandIds():null,o=d(r)?r.primaryRasters.rasters[0]??r:r}let s=m(o.rasterId,i,a);if(s!==this._blockCacheRegistryUrl){this._blockCacheRegistryUrl!=null&&p(this._blockCacheRegistryUrl,this._blockCacheRegistryId);let t=o.rawBlockRegistryIds.indexOf(this._blockCacheRegistryId);if(t>-1&&o.rawBlockRegistryIds.splice(t,1),this._blockCacheRegistryId=h(s,o.rasterInfo),o.rawBlockRegistryIds.push(this._blockCacheRegistryId),e){let{view:e}=n,t=this._tileInfoView.getClosestInfoForScale(e.scale),i=this._srcResolutions[t.level];f(s,this._blockCacheRegistryId,e.extent,e.resolution,i,r.ioConfig.sampling)}this._blockCacheRegistryUrl=s}}async doRefresh(){if(!this.attached||!this.previousLOD||this.layerView.suspended)return;`updateRenderer`in this.layer&&await this._updatingHandles.addPromise(this.layer.updateRenderer()),this.canUseLocalSymbolizerParams&&this._updateSymbolizerParams(),this._updateBlockCacheRegistry(!0),this._fetchQueue.reset();let e=[];this._globalUpdateRequested=this.isCPUBasedDRA||this.hasDRAInRasterFunction||!this.useProgressiveUpdate,this._tileStrategy.refresh(t=>e.push(this._enqueueTileFetch(t))),await this._updatingHandles.addPromise(Promise.allSettled(e))}};e([o()],A.prototype,`_globalUpdateRequested`,void 0),e([o()],A.prototype,`attached`,void 0),e([o()],A.prototype,`canUseWebGLForProcessing`,null),e([o()],A.prototype,`canUseLocalSymbolizerParams`,null),e([o()],A.prototype,`hasDRAInRasterFunction`,null),e([o()],A.prototype,`isCPUBasedDRA`,null),e([o()],A.prototype,`container`,void 0),e([o()],A.prototype,`layer`,void 0),e([o()],A.prototype,`layerView`,void 0),e([o()],A.prototype,`scheduler`,void 0),e([o()],A.prototype,`type`,void 0),e([o()],A.prototype,`useWebGLForProcessing`,null),e([o()],A.prototype,`useProgressiveUpdate`,null),e([o()],A.prototype,`timeExtent`,void 0),e([o()],A.prototype,`updating`,null),A=e([s(`esri.views.2d.layers.imagery.BaseImageryTileSubView2D`)],A);export{A as BaseImageryTileSubView2D};
2
+ import{__decorate as e}from"tslib";import t from"../../../../core/Accessor.js";import n from"../../../../core/Logger.js";import{assertIsSome as r}from"../../../../core/maybe.js";import{debounce as i,isAbortError as a}from"../../../../core/promiseUtils.js";import{property as o,subclass as s}from"../../../../core/accessorSupport/decorators.js";import{UpdatingHandles as c}from"../../../../core/support/UpdatingHandles.js";import l from"../../../../geometry/Extent.js";import u from"../../../../geometry/Point.js";import{isFunctionRaster as d}from"../../../../layers/raster/datasets/datasetUtils.js";import{update as f,unregister as p,getRasterId as m,register as h}from"../../../../layers/raster/datasets/RawBlockCache.js";import{getWorldWidth as g,computeProjectedScales as _}from"../../../../layers/raster/functions/rasterProjectionHelper.js";import{getStretchCutoff as v}from"../../../../layers/raster/functions/stretchUtils.js";import y from"../../../../layers/support/PixelBlock.js";import b from"../../../../layers/support/TileInfo.js";import x from"../../tiling/TileInfoView.js";import"../../tiling/TileKey.js";import S from"../../tiling/TileQueue.js";import C from"../../tiling/TileStrategy.js";import{tileSize as w}from"../../engine/webgl/definitions.js";import{readFromTiledRasterData as T}from"../../../support/rasterHitTestUtils.js";import{TaskPriority as E}from"../../../support/Scheduler.js";import{getWebGLCapabilities as D}from"../../../webgl/capabilities.js";const O=[0,0];function k(e){return e.type!==`geospatial-pdf`}let A=class extends t{constructor(){super(...arguments),this._updatingHandles=new c,this._emptyTilePixelBlock=null,this._tileStrategy=null,this._tileInfoView=null,this._fetchQueue=null,this._pendingTileUpdates=0,this._blockCacheRegistryUrl=null,this._blockCacheRegistryId=null,this._srcResolutions=[],this.previousLOD=null,this._needBlockCacheUpdate=!1,this._globalSymbolizerParams=null,this._symbolizerParams=null,this._abortController=null,this._isCustomTilingScheme=!1,this._maxIndexedColormapSize=0,this._rasterFunctionState=`na`,this._globalUpdateRequested=!1,this.attached=!1,this.timeExtent=null,this.refreshDRAFunctionOnce=i(async()=>{let{fullExtent:e,view:t}=this.layerView;if(e?.intersects(t.extent))try{await this._updateDRAStatistics(this._abortController?.signal)&&await this.doRefresh()}catch{}}),this.redrawOrRefetch=i(async(e={})=>{if(!(`rasterFunction`in this.layer))return this._updatingHandles.addPromise(e.refetch?this.doRefresh():this._redrawImage(e.signal));let t=this._rasterFunctionState,n=e.reprocess||t===`gpu`&&!this.canUseWebGLForProcessing||t===`cpu`&&this.canUseWebGLForProcessing;if(n&&(await this._updatingHandles.addPromise(this.layer.updateRasterFunction()),this.updateRasterFunctionParameters()),!this.previousLOD||this.layerView.suspended)return;let r=this._rasterFunctionState,{type:i}=this;return e.refetch||i!==`raster`&&n||r===`cpu`||t===`cpu`?this._updatingHandles.addPromise(this.doRefresh()):this._updatingHandles.addPromise(this._redrawImage(e.signal))})}destroy(){this._updatingHandles.destroy()}get canUseWebGLForProcessing(){return!1}get canUseLocalSymbolizerParams(){return(this.canUseWebGLForProcessing||this.type===`rasterVF`)&&!this.layerView.hasTilingEffects}get hasDRAInRasterFunction(){if(!(`rasterFunction`in this.layer))return!1;let{rasterFunction:e}=this.layer;return e?JSON.stringify(e,null,0).includes(`"dra":true`):!1}get isCPUBasedDRA(){if(!(`renderer`in this.layer))return!1;let{renderer:e}=this.layer;return e?.type===`raster-stretch`&&e.dynamicRangeAdjustment&&(!this.canUseWebGLForProcessing||e.stretchType!==`min-max`&&e.stretchType!==`standard-deviation`)}get useWebGLForProcessing(){return this._get(`useWebGLForProcessing`)??!0}set useWebGLForProcessing(e){this._set(`useWebGLForProcessing`,e)}get useProgressiveUpdate(){return this._get(`useProgressiveUpdate`)??!0}set useProgressiveUpdate(e){if(this._tileStrategy&&this.useProgressiveUpdate!==e){this._tileStrategy.destroy(),this.container.removeAllChildren();let t=this._getCacheSize(e);this._tileStrategy=new C({cachePolicy:`purge`,acquireTile:e=>this.acquireTile(e),releaseTile:e=>this.releaseTile(e),cacheSize:t,tileInfoView:this._tileInfoView}),this._set(`useProgressiveUpdate`,e),this.layerView.requestUpdate()}}update(e){this._fetchQueue.pause(),this._fetchQueue.state=e.state,this._tileStrategy.update(e),this._fetchQueue.resume();let{extent:t,resolution:n,scale:r}=e.state,i=this._tileInfoView.getClosestInfoForScale(r);if(this.layer.raster){if(!this.useProgressiveUpdate||this._needBlockCacheUpdate){let e=this._srcResolutions[i.level],r=`toJSON`in t?t:l.fromJSON(t);f(this._blockCacheRegistryUrl,this._blockCacheRegistryId,r,n,e,this.layer.raster.ioConfig.sampling)}this._needBlockCacheUpdate=!1,this.previousLOD?.level!==i.level&&(this.previousLOD=i,this._symbolizerParams!=null&&this.canUseLocalSymbolizerParams&&this._updateSymbolizerParams(),this._tileStrategy.updateCacheSize(0))}}moveEnd(){(this.isCPUBasedDRA||this.hasDRAInRasterFunction||!this.useProgressiveUpdate)&&(this._abortController&&this._abortController.abort(),this._abortController=new AbortController,(this.isCPUBasedDRA||this.hasDRAInRasterFunction||!this.useProgressiveUpdate)&&this._canCompleteGlobalUpdate()&&this._updatingHandles.consumePromise(this._completeGlobalUpdate()));let e=this._getCacheSize(this.useProgressiveUpdate);this._tileStrategy.updateCacheSize(e),this.layerView.requestUpdate()}get updating(){return this._globalUpdateRequested||this._updatingHandles?.updating}attach(){let e=D();this._maxIndexedColormapSize=(e.maxTextureSize||4096)*4,this._initializeTileInfo(),this._tileInfoView=new x(this.layerView.tileInfo,this.layerView.fullExtent);let t=this._computeFetchConcurrency();this._fetchQueue=new S({tileInfoView:this._tileInfoView,concurrency:t,process:(e,t)=>this._fetchTile(e,t),priority:E.MAPVIEW_FETCH_QUEUE,scheduler:this.scheduler});let n=this._getCacheSize(this.useProgressiveUpdate);this._tileStrategy=new C({cachePolicy:`purge`,acquireTile:e=>this.acquireTile(e),releaseTile:e=>this.releaseTile(e),cacheSize:n,tileInfoView:this._tileInfoView}),this._updateBlockCacheRegistry()}detach(){this._tileStrategy.destroy(),this._fetchQueue.clear(),this.container.removeAllChildren(),this._fetchQueue=this._tileStrategy=this._tileInfoView=null,p(this._blockCacheRegistryUrl,this._blockCacheRegistryId),this._blockCacheRegistryUrl=this._blockCacheRegistryId=null}async hitTest(e){if(!k(this.layer))return null;let t=this._locateSourceData(e);if(!t)return null;let{layer:n}=this,r=n.renderer?.type===`vector-field`,i=this.canUseWebGLForProcessing&&d(this.layer.raster);return T({mapPoint:e,layer:n,sourceData:t,processRasterFunction:i,sourceIsUV:r})}acquireTile(e){let t=this.container.createTile(e);return this._updatingHandles.consumePromise(this._enqueueTileFetch(t)),this.layerView.requestUpdate(),this._needBlockCacheUpdate=!0,this._globalUpdateRequested=this.isCPUBasedDRA||this.hasDRAInRasterFunction||!this.useProgressiveUpdate,t}releaseTile(e){this._fetchQueue.abort(e.key.id),this.container.removeChild(e),e.once(`detach`,()=>{e.destroy(),this.layerView.requestUpdate()}),this.layerView.requestUpdate()}createEmptyTilePixelBlock(e=null){let t=e==null||e.join(`,`)===this._tileInfoView.size.join(`,`);if(t&&this._emptyTilePixelBlock!=null)return this._emptyTilePixelBlock;e||=this._tileInfoView.size;let[n,r]=e,i=new y({width:n,height:r,pixels:[new Uint8Array(n*r)],mask:new Uint8Array(n*r),pixelType:`u8`});return t&&(this._emptyTilePixelBlock=i),i}_getBandIds(){if(!(`bandIds`in this.layer))return this.layer.getRawDisplayBandIds();if(this.container&&!(`rasterFunctionChain`in this.container&&this.container.rasterFunctionChain))return this.layer.bandIds;let{bandIds:e,raster:t}=this.layer,n=`rasterFunction`in t?t.rasterFunction.rawInputBandIds:null;return!e?.length||!n?.length||t.rasterInfo.bandCount===1?`rasterFunction`in t?n:e:e.map(e=>n[Math.min(e,n.length-1)])}updateRasterFunctionParameters(){}_fetchTile(e,t){let n=this._getFetchOptions(e.level,t.signal);return this.fetchTile(e,n)}_getFetchOptions(e,t){let{canUseWebGLForProcessing:n}=this,{layerView:r}=this,{tileInfo:i}=r,a=!i.isWrappable&&g(r.view.spatialReference)!=null,o=n&&this.layer.raster.hasUniqueSourceStorageInfo,{layer:s}=this.layerView,c=s.serviceRasterInfo?.storageInfo.isBsqTile?s.getRawDisplayBandIds():void 0;return{allowPartialFill:!0,datumTransformation:r.datumTransformation,interpolation:n?`nearest`:`interpolation`in this.layer?this.layer.interpolation:`bilinear`,registryId:this._blockCacheRegistryId,requestRawData:o,skipRasterFunction:this.type===`raster`&&this.container.rasterFunctionChain!=null,signal:t,srcResolution:this._srcResolutions[e],timeExtent:r.timeExtent,tileInfo:i,bandIds:c,disableWrapAround:a}}_getCacheSize(e){return e?40:0}_initializeTileInfo(){let{layerView:e}=this,t=e.view.spatialReference;if(this._canUseLayerLODs()){let{origin:n,lods:r}=this.layer.tileInfo,i=r.map(({scale:e})=>e),a=b.create({spatialReference:t,size:w,scales:i,origin:n});e.set(`tileInfo`,a),this._srcResolutions=r.map(({resolution:e})=>({x:e,y:e}));return}let{scales:n,srcResolutions:i,isCustomTilingScheme:a}=_(this.layer.serviceRasterInfo,t,{tileSize:w,alignGlobalDatasetWithAGOL:!0,limitToSrcResolution:!1}),o=b.create({spatialReference:t,size:w,scales:n}),s=o.origin.x===0;r(e.fullExtent);let{xmin:c,ymax:l}=e.fullExtent;(s||a&&o.origin.x>c)&&(o.origin=new u({x:c,y:l,spatialReference:t})),this._isCustomTilingScheme=a,e.set(`tileInfo`,o),this._srcResolutions=i??[]}_canUseLayerLODs(){let{layer:e,layerView:t}=this;if(e.raster.tileType!==`Map`)return!1;let{lods:n}=e.tileInfo,r=t.view.constraints?.effectiveLODs;return r?.length===n.length&&r.every(({scale:e},t)=>Math.abs(e-n[t].scale)<.001)}_computeFetchConcurrency(){let{blockBoundary:e}=this.layer.serviceRasterInfo.storageInfo,t=e[e.length-1];return(t.maxCol-t.minCol+1)*(t.maxRow-t.minRow+1)>64?2:10}async _enqueueTileFetch(e,t){if(!this._fetchQueue.has(e.key.id)){this._pendingTileUpdates++;try{let t=e.once(`detach`,()=>t=void 0),n=await this._fetchQueue.push(e.key),r=this._getBandIds(),i=this.hasDRAInRasterFunction&&d(this.layer.raster)&&!this.layer.raster.processParameters?.stretchCutoff,a=!this.useProgressiveUpdate||i||this.isCPUBasedDRA&&!this._globalSymbolizerParams;if(!t)return;this.canUseLocalSymbolizerParams&&this._symbolizerParams==null&&this._updateSymbolizerParams();let o=this._tileInfoView.getTileCoords(O,e.key),s=this._tileInfoView.getTileResolution(e.key);await this.updateTileSource(e,{source:n,symbolizerParams:this._symbolizerParams,globalSymbolizerParams:this._globalSymbolizerParams,suspended:a,bandIds:r,coords:o,resolution:s}),t&&(e.once(`attach`,()=>this.layerView.requestUpdate()),this.container.addChild(e),t.remove())}catch(e){a(e)||n.getLogger(this).error(e)}finally{this._pendingTileUpdates--,this._globalUpdateRequested&&this._canCompleteGlobalUpdate()&&await this._completeGlobalUpdate()}this.layerView.requestUpdate()}}_canCompleteGlobalUpdate(){return this.attached&&!this.layerView.moving&&this._fetchQueue.length===0&&this._pendingTileUpdates===0}async _completeGlobalUpdate(){try{let{layer:e,layerView:t}=this;this._globalUpdateRequested=!1,this.hasDRAInRasterFunction&&d(e.raster)&&!e.raster.processParameters?.extent?.equals(t.view.extent)?this._updatingHandles.consumePromise(this.refreshDRAFunctionOnce()):this.isCPUBasedDRA?await this._updatingHandles.addPromise(this._redrawImage(this._abortController?.signal)):this._completeNonProgressiveUpdate()}catch(e){a(e)||n.getLogger(this).error(e)}finally{this.layerView.requestUpdate()}}_completeNonProgressiveUpdate(){if(!this.useProgressiveUpdate){for(let e of this.container.children)`bitmap`in e&&(e.bitmap.suspended=!1);this.container.requestRender()}}async _updateDRAStatistics(e){if(!k(this.layer)||!d(this.layer.raster))return!1;let t=await this.layer.getDynamicRangeInputRaster();if(!t)return!1;let{raster:n,functionArguments:r}=t,i=this._getFetchOptions(this.previousLOD.level,e),{extent:a,width:o,height:s}=this.layerView.view,{pixelBlock:c}=await n.fetchPixels(a,o,s,{...i,interpolation:`nearest`,requestRawData:!1,skipRasterFunction:!1}),l=v(r,{rasterInfo:n.rasterInfo,pixelBlock:c});return this.layer.raster.processParameters={stretchCutoff:l,extent:a},!0}_locateSourceData(e){if(!this.layer.loaded||!this.attached)return null;let t=new Map,n=this.container.children.find(n=>{if(!n.visible||!(`bitmap`in n?n.bitmap?.rawPixelData:n.tileData?.rawPixelData)?.pixelBlock)return!1;let{key:r}=n,{level:i}=r;if(!t.has(i)){let n=this._tileInfoView.getLODInfoAt(i);if(!n)return!1;let r=Math.floor(n.getColumnForX(e.x)),a=Math.floor(n.getRowForY(e.y));t.set(i,[a,r])}let[a,o]=t.get(i);return a===r.row&&o===r.col});if(n==null)return null;if(`tileData`in n){let{rawPixelData:e}=n.tileData;return e?.pixelBlock?{rawPixelData:e,tileSize:{width:n.width,height:n.height}}:null}let{rawPixelData:r,transformGrid:i,width:a,height:o}=n.bitmap;return r?.pixelBlock?{rawPixelData:r,transformGrid:i,tileSize:{width:a,height:o}}:null}async _redrawImage(e){if(!this.attached||this.container.children.length===0||(`updateRenderer`in this.layer&&await this.layer.updateRenderer(),this.isCPUBasedDRA?await this._updateGlobalSymbolizerParams(e):(this.canUseLocalSymbolizerParams&&this._updateSymbolizerParams(),this._globalSymbolizerParams=null),!this.attached||e?.aborted))return;let t=this.container.children.map(async t=>this.updateTileSymbolizerParameters(t,{local:this._symbolizerParams,global:this._globalSymbolizerParams},e));await Promise.allSettled(t),this.attached&&!e?.aborted&&this.container.requestRender()}async _updateGlobalSymbolizerParams(e){let{fullExtent:t,view:n}=this.layerView;if(!t?.intersects(n.extent)||!(`symbolizer`in this.layer))return;let r=this._getFetchOptions(this.previousLOD.level,e),i=await this.layer.fetchPixels(n.extent,n.width,n.height,{...r,interpolation:`nearest`,requestRawData:!1,skipRasterFunction:!1});if(!i?.pixelBlock)return;let{resolution:a}=this.previousLOD,{isBsqTile:o}=this.layer.raster.rasterInfo.storageInfo,s=o?null:this._getBandIds(),c=this.layer.symbolizer.generateWebGLParameters({pixelBlock:i.pixelBlock.extractBands(s),isGCS:n.spatialReference.isGeographic,resolution:{x:a,y:a},bandIds:s});!this.canUseWebGLForProcessing&&c&&c.type===`stretch`&&this.layer.renderer?.type===`raster-stretch`&&(c.factor=c.factor.map(e=>e*255),c.minOutput=Math.round(c.minOutput*255),c.maxOutput=Math.round(c.maxOutput*255)),this._globalSymbolizerParams=c}_updateSymbolizerParams(){if(!(`symbolizer`in this.layer))return;let{resolution:e}=this.previousLOD,t=this._getBandIds();this._symbolizerParams=this.layer.symbolizer.generateWebGLParameters({pixelBlock:null,isGCS:this.layerView.view.spatialReference.isGeographic,resolution:{x:e,y:e},bandIds:t})}_updateBlockCacheRegistry(e=!1){let{layer:t,layerView:n}=this,{raster:r}=t,i=null,a=null,o=r;if(`multidimensionalDefinition`in t){let{multidimensionalDefinition:e}=t.normalizeRasterFetchOptions({multidimensionalDefinition:t.multidimensionalDefinition,timeExtent:n.timeExtent});i=r.rasterInfo.multidimensionalInfo?r.getSliceIndex(e)??null:null,a=r.rasterInfo.storageInfo.isBsqTile?t.getRawDisplayBandIds():null,o=d(r)?r.primaryRasters.rasters[0]??r:r}let s=m(o.rasterId,i,a);if(s!==this._blockCacheRegistryUrl){this._blockCacheRegistryUrl!=null&&p(this._blockCacheRegistryUrl,this._blockCacheRegistryId);let t=o.rawBlockRegistryIds.indexOf(this._blockCacheRegistryId);if(t>-1&&o.rawBlockRegistryIds.splice(t,1),this._blockCacheRegistryId=h(s,o.rasterInfo),o.rawBlockRegistryIds.push(this._blockCacheRegistryId),e){let{view:e}=n,t=this._tileInfoView.getClosestInfoForScale(e.scale),i=this._srcResolutions[t.level];f(s,this._blockCacheRegistryId,e.extent,e.resolution,i,r.ioConfig.sampling)}this._blockCacheRegistryUrl=s}}async doRefresh(){if(!this.attached||!this.previousLOD||this.layerView.suspended)return;`updateRenderer`in this.layer&&await this._updatingHandles.addPromise(this.layer.updateRenderer()),this.canUseLocalSymbolizerParams&&this._updateSymbolizerParams(),this._updateBlockCacheRegistry(!0),this._fetchQueue.reset();let e=[];this._tileStrategy.refresh(t=>e.push(this._enqueueTileFetch(t))),this._globalUpdateRequested=e.length>0&&(this.isCPUBasedDRA||this.hasDRAInRasterFunction||!this.useProgressiveUpdate),await this._updatingHandles.addPromise(Promise.allSettled(e))}};e([o()],A.prototype,`_globalUpdateRequested`,void 0),e([o()],A.prototype,`attached`,void 0),e([o()],A.prototype,`canUseWebGLForProcessing`,null),e([o()],A.prototype,`canUseLocalSymbolizerParams`,null),e([o()],A.prototype,`hasDRAInRasterFunction`,null),e([o()],A.prototype,`isCPUBasedDRA`,null),e([o()],A.prototype,`container`,void 0),e([o()],A.prototype,`layer`,void 0),e([o()],A.prototype,`layerView`,void 0),e([o()],A.prototype,`scheduler`,void 0),e([o()],A.prototype,`type`,void 0),e([o()],A.prototype,`useWebGLForProcessing`,null),e([o()],A.prototype,`useProgressiveUpdate`,null),e([o()],A.prototype,`timeExtent`,void 0),e([o()],A.prototype,`updating`,null),A=e([s(`esri.views.2d.layers.imagery.BaseImageryTileSubView2D`)],A);export{A as BaseImageryTileSubView2D};
@@ -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{equals as n}from"../../core/arrayUtils.js";import r from"../../core/Collection.js";import i from"../../core/Error.js";import a from"../../core/Logger.js";import{mapCollection as o}from"../../core/mapCollectionUtils.js";import{isPromiseLike as s}from"../../core/promiseUtils.js";import{watch as c,initial as l}from"../../core/reactiveUtils.js";import{property as u,subclass as d}from"../../core/accessorSupport/decorators.js";import{UpdatingHandles as f}from"../../core/support/UpdatingHandles.js";import p from"../../geometry/Point.js";import{polygonToVolume as m}from"./focusAreaUtils.js";import{ElevationContext as h}from"./layers/graphics/ElevationContext.js";import{FocusArea as g}from"./webgl-engine/effects/focusArea/FocusArea.js";import{FocusAreaMask as _}from"./webgl-engine/effects/focusArea/FocusAreaMask.js";import{FocusAreaOutlineItem as v}from"./webgl-engine/effects/focusArea/FocusAreaOutlineItem.js";let y=class extends t{get updating(){return this._updatingHandles.updating||!!this._outlineMap?.some(e=>e.updating)}constructor(e){super(e),this._updatingHandles=new f,this._elevationContext=new h,this._previousVolumes=new Map,this._outlineMap=new r}initialize(){this.addHandles([c(()=>({volumes:this.volumes,ready:this.view.groundView?.ready}),({volumes:e,ready:t})=>{this._previousVolumes=e,t&&(e.size!==0&&this._mask?.updateGeometries(),this._ensureRenderNodes())},l)]),this._outlineMap=o(()=>this.areas?.areas,e=>new v({area:e,view:this.view}),{recycleItems:!0})}destroy(){this.removeAllHandles(),this._outlineMap.destroy(),this._updatingHandles.destroy()}get areas(){return this.view.map?.focusAreas}get enabledAreas(){return this.areas?.areas.toArray().filter(({enabled:e})=>e)??[]}get style(){return this.areas?.style??`bright`}get polygons(){return this.enabledAreas.reduce((e,t)=>e.concat(t.geometries.toArray()),[])}containsGeometry(e){if(this.polygons.length===0)return!0;let t=new p(e);return this.polygons.some(e=>e.contains(t))}get volumes(){let e=this.polygons,t=this._previousVolumes;if(!this.view.renderCoordsHelper||n(Array.from(t?.keys()??[]),e))return t??new Map;let r=new Map;for(let n of e){let e=t?.get(n);if(e)r.set(n,e);else try{let e=m(n,this.view,this._elevationContext);if(e==null)continue;if(s(e)){this._updatingHandles.consumePromise(e);continue}r.set(n,e)}catch(e){a.getLogger(this).error(new i(`focusareasview:projection-failed`,`Failed to project focus area geometry to view spatial reference`,{geometry:n,error:e}))}}return r}_ensureRenderNodes(){if(this.view.stage){if(this.volumes.size===0){let{_mask:e,_visualization:t}=this;this._mask=this._visualization=null,t?.fadeOut(()=>{e?.destroy(),t?.destroy()})}else this._mask??=new _({focusAreasView:this}),this._visualization??=new g({focusAreasView:this}),this.view.stage.renderView.requestRender()}}};e([u()],y.prototype,`updating`,null),e([u({readOnly:!0})],y.prototype,`volumes`,null),e([u({constructOnly:!0})],y.prototype,`view`,void 0),y=e([d(`esri.views.3d.FocusAreasView`)],y);export{y as FocusAreasView};
2
+ import{__decorate as e}from"tslib";import t from"../../core/Accessor.js";import{equals as n}from"../../core/arrayUtils.js";import r from"../../core/Collection.js";import i from"../../core/Error.js";import a from"../../core/Logger.js";import{mapCollection as o}from"../../core/mapCollectionUtils.js";import{isPromiseLike as s}from"../../core/promiseUtils.js";import{watch as c,initial as l}from"../../core/reactiveUtils.js";import{property as u,subclass as d}from"../../core/accessorSupport/decorators.js";import{UpdatingHandles as f}from"../../core/support/UpdatingHandles.js";import p from"../../geometry/Point.js";import{polygonToVolume as m}from"./focusAreaUtils.js";import{ElevationContext as h}from"./layers/graphics/ElevationContext.js";import{FocusArea as g}from"./webgl-engine/effects/focusArea/FocusArea.js";import{FocusAreaMask as _}from"./webgl-engine/effects/focusArea/FocusAreaMask.js";import{FocusAreaOutlineItem as v}from"./webgl-engine/effects/focusArea/FocusAreaOutlineItem.js";let y=class extends t{get updating(){return this._updatingHandles.updating||!!this._outlineMap?.some(e=>e.updating)}constructor(e){super(e),this._updatingHandles=new f,this._elevationContext=new h,this._previousVolumes=new Map,this._outlineMap=new r}initialize(){this.addHandles([c(()=>({volumes:this.volumes,ready:this.view.groundView?.ready}),({volumes:e,ready:t})=>{this._previousVolumes=e,t&&(e.size!==0&&this._mask?.updateGeometries(),this._ensureRenderNodes())},l)]),this._outlineMap=o(()=>this.areas?.areas,e=>new v({area:e,view:this.view}),{recycleItems:!0})}destroy(){this.removeAllHandles(),this._outlineMap.destroy(),this._updatingHandles.destroy()}get areas(){return this.view.map?.focusAreas}get enabledAreas(){return this.areas?.areas.toArray().filter(({enabled:e})=>e)??[]}get style(){return this.areas?.style??`bright`}get polygons(){return this.enabledAreas.reduce((e,t)=>e.concat(t.geometries.toArray()),[])}containsGeometry(e){if(this.polygons.length===0)return!0;let t=new p(e);return this.polygons.some(e=>e.contains(t))}get volumes(){let e=this.polygons,t=this._previousVolumes;if(n(Array.from(t?.keys()??[]),e))return t??new Map;let r=new Map;for(let n of e){let e=t?.get(n);if(e)r.set(n,e);else try{let e=m(n,this.view,this._elevationContext);if(e==null)continue;if(s(e)){this._updatingHandles.consumePromise(e);continue}r.set(n,e)}catch(e){a.getLogger(this).error(new i(`focusareasview:projection-failed`,`Failed to project focus area geometry to view spatial reference`,{geometry:n,error:e}))}}return r}_ensureRenderNodes(){if(this.view.stage){if(this.volumes.size===0){let{_mask:e,_visualization:t}=this;this._mask=this._visualization=null,t?.fadeOut(()=>{e?.destroy(),t?.destroy()})}else this._mask??=new _({focusAreasView:this}),this._visualization??=new g({focusAreasView:this}),this.view.stage.renderView.requestRender()}}};e([u()],y.prototype,`updating`,null),e([u({readOnly:!0})],y.prototype,`volumes`,null),e([u({constructOnly:!0})],y.prototype,`view`,void 0),y=e([d(`esri.views.3d.FocusAreasView`)],y);export{y as FocusAreasView};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import{onLocaleChange as t,fetchMessageBundle as n}from"../../../../../intl.js";import r from"../../../../../core/Accessor.js";import{multiplyOpacityToUnitRGBA as i,getContrast as a,multiplyOpacity as o}from"../../../../../core/colorUtils.js";import"../../../../../core/has.js";import{nextHighestPowerOfTen as s,floatEqualUlp as c}from"../../../../../core/mathUtils.js";import{destroyMaybe as l}from"../../../../../core/maybe.js";import{toAdaptiveAreaUnit as u,adaptiveLengthUnitForArea as d}from"../../../../../core/quantity.js";import{formatDecimal as f}from"../../../../../core/quantityFormatUtils.js";import{watch as p,syncAndInitial as m,initial as h}from"../../../../../core/reactiveUtils.js";import{lengthUnitFromSpatialReference as g,convertUnit as _,adaptiveAreaUnit as v}from"../../../../../core/units.js";import{property as y,subclass as b}from"../../../../../core/accessorSupport/decorators.js";import{fromTranslation as x}from"../../../../../core/libs/gl-matrix-2/math/mat4.js";import{create as S}from"../../../../../core/libs/gl-matrix-2/factories/mat4f64.js";import{subtract as C,squaredDistance as w}from"../../../../../core/libs/gl-matrix-2/math/vec3.js";import{create as T}from"../../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{LabelVisualElement as E}from"../../../interactive/visualElements/LabelVisualElement.js";import{LineVisualElement as D}from"../../../interactive/visualElements/LineVisualElement.js";import{MeasurementAreaVisualElement as O}from"../../../interactive/visualElements/MeasurementAreaVisualElement.js";import{GeodesicSegment as k,EuclideanSegment as A}from"../../../interactive/visualElements/support/Segment.js";import{midpoint3d as j}from"../../../support/mathUtils.js";import{createStipplePatternSimple as M}from"../../../webgl-engine/materials/lineStippleUtils.js";let N=class extends r{get _parameters(){let{accentColor:e,textColor:t}=this.view.effectiveTheme,n=e.toUnitRGBA(),r=i(e,.5),s=i(a(e),.5),c=a(t,160);return{accentColor:n,transparentAccentColor:r,transparentContrastColor:s,textColor:t,textBackgroundColor:o(c,.6),textCalloutColor:o(c,.5),pathLineWidth:3,perimeterLineWidth:2,projectionLineWidth:2,projectionLineStippleSize:5,labelDistance:25}}get viewData(){return this._viewData}get visible(){return this.analysisViewData.visible}get _renderUnits(){let e=this.view.renderCoordsHelper.spatialReference;return g(e)??`meters`}get testData(){}constructor(e){super(e),this._path=null,this._perimeter=null,this._projectionLines=null,this._measurementArea=null,this._areaLabel=null,this._perimeterLabel=null,this._pathSegments=[],this._perimeterSegments=[],this._origin=T(),this._originTransform=S(),this.messages=null,this._viewData=new I,this.areaLabel=null,this.perimeterLabel=null,this.loadingMessages=!0}initialize(){let{analysisViewData:e,_parameters:n,view:r}=this;this._path=new D({view:r,attached:!0,width:n.pathLineWidth,polygonOffset:3,renderOccluded:4,transparentRenderOrder:1,isDecoration:!0}),this._perimeter=new D({view:r,attached:!0,width:n.perimeterLineWidth,polygonOffset:3,renderOccluded:4,transparentRenderOrder:2,isDecoration:!0}),this._projectionLines=new D({view:r,attached:!0,width:n.projectionLineWidth,stipplePattern:M(n.projectionLineStippleSize),polygonOffset:3,renderOccluded:4,transparentRenderOrder:3,isDecoration:!0}),this._measurementArea=new O({view:r,attached:!0,isDecoration:!0,renderOccluded:4,testsTransparentRenderOrder:5});let i={attached:!0,view:r,isDecoration:!0};this._areaLabel=new E({...i,fontSize:16,distance:0}),this._perimeterLabel=new E({...i,fontSize:12}),this.addHandles([p(()=>[e.mode,this.visible,e.unit,e.measurementData?.updateId,e.measurementData?.measurements!=null,L(e.measurementData?.measurements?.mode)],()=>this._update(),m),p(()=>e.measurementData?.measurements,e=>this._updateMeasurements(e)),p(()=>r.state?.camera,()=>this._updateLabels(),m),t(()=>this._updateMessageBundle()),p(()=>this._parameters,({accentColor:e,transparentAccentColor:t,transparentContrastColor:n,textColor:r,textBackgroundColor:i,textCalloutColor:a})=>{let{_path:o,_perimeter:s,_projectionLines:c,_measurementArea:l,_areaLabel:u,_perimeterLabel:d}=this;o.color=e,s.color=e,c.color=e,l.color1=t,l.color2=n,u.textColor=r,u.backgroundColor=i,u.calloutColor=a,d.textColor=r,d.backgroundColor=i,d.calloutColor=a},h)]),this._updateMessageBundle()}destroy(){this._measurementArea=l(this._measurementArea),this._path=l(this._path),this._perimeter=l(this._perimeter),this._areaLabel=l(this._areaLabel),this._perimeterLabel=l(this._perimeterLabel),this._projectionLines=l(this._projectionLines),this.set(`view`,null)}_update(){if(this.destroyed||!this.view.ready||!this.view.renderCoordsHelper)return;let{analysisViewData:{measurementData:e},analysisViewData:t}=this;e!=null&&(this._updateViewData(e,t.path),this._updateOrigin(),this._updatePathSegments(),this._updatePerimeterSegments(),this._updateArea(),this._updateProjectionLines(),this._updateLabels())}_calculateCheckerSize(e){let t=R(e?.mode)?e?.geodesicArea:e?.area;if(t==null)return 1;let n=u(t,this.analysisViewData.unit),r=Math.sqrt(_(1,n.unit,`square-meters`));return _(s(Math.sqrt(n.value)/Math.sqrt(300))*r,`meters`,this._renderUnits)}_updateMeasurements(e){Object.assign(this.viewData,this._getMeasurementsViewData(e)),this._updateCheckerSize(),this._updateLabels()}_updateCheckerSize(){this._measurementArea.size=[this.viewData.checkerSize,this.viewData.checkerSize]}_updateViewData(e,t){let n=e.measurements,r=new I({validMeasurement:!!n,numVertices:e.numVertices,hasStagedVertex:e.hasStagedVertex,path:t,mode:n?.mode,vertexData:e.vertexData,perimeterLabelSegmentIndex:0,...this._getMeasurementsViewData(n)});this._viewData=r}_getMeasurementsViewData(e){let t=R(e?.mode),n=this._calculateCheckerSize(e);return{areaCentroid:t?e?.geodesicAreaCentroidRenderCoords:e?.areaCentroidRenderCoords,area:t?e?.geodesicArea:e?.area,perimeter:t?e?.geodesicPerimeter:e?.perimeter,checkerSize:n}}_updateOrigin(){let e=this.viewData;j(e.vertexData.positionsRender,this._origin),x(this._originTransform,this._origin),this._measurementArea.transform=this._originTransform,this._projectionLines.transform=this._originTransform}_createSegments(e,t){let n=this.viewData,r=this.view.renderCoordsHelper.spatialReference,i=L(n.mode),a=[],o=n.numVertices,s=n.validMeasurement?o:o-1;for(let l=0;l<s;++l){let s=n.vertexData[e][l],u=n.vertexData[e][(l+1)%o],d=!0;if(t){let e=n.vertexData.positionsRender[l],t=n.vertexData.positionsRender[(l+1)%o],r=!0;for(let n=0;n<3;++n)r&&=c(e[n],s[n])&&c(t[n],u[n]);r&&(d=!1)}let f=null;switch(i){case`geodesic`:f=new k(s,u,r,d);break;case`euclidean`:f=new A(s,u,d)}a.push(f)}return a}_updatePathSegments(){let{visible:e}=this,t=this._createSegments(`positionsRender`);this._path.setGeometryFromSegments(t,this._origin),this._path.visible=e,this._pathSegments=t}_updatePerimeterSegments(){let e=this.visible&&this.viewData.mode===`euclidean`&&!!this.viewData.path&&this.viewData.path.numVertices>2,t=this._createSegments(`positionsFittedRender`,!0);this._perimeter.setGeometryFromSegments(t,this._origin),this._perimeter.visible=e,this._perimeterSegments=t}_updateArea(){let e=this.viewData;switch(L(e.mode)){case`euclidean`:this._updateAreaEuclidean(e);break;case`geodesic`:this._updateAreaGeodesic()}}_updateAreaEuclidean(e){let t=this.visible;e.validMeasurement&&e.vertexData.triangleIndices?(this._measurementArea.geometry={uv:e.vertexData.triangleUvs,position:e.vertexData.trianglePositions,triangleIndices:e.vertexData.triangleIndices},this._updateCheckerSize(),this._measurementArea.visible=t):this._measurementArea.visible=!1}_updateAreaGeodesic(){this._measurementArea.visible=!1}_updateProjectionLines(){let e=this.viewData,t=this.visible,n=e.mode,r=e.numVertices;if(r>0&&e.validMeasurement&&n===`euclidean`){let n=[];for(let t=0;t<r;++t){let r=T();C(r,e.vertexData.positionsRender[t],this._origin);let i=T();C(i,e.vertexData.positionsFittedRender[t],this._origin),c(w(r,i),0)||n.push([r,i])}this._projectionLines.geometry=n,this._projectionLines.visible=t}else this._projectionLines.geometry=null,this._projectionLines.visible=!1}_updateLabels(){if(this.destroyed)return;let{viewData:e}=this,{area:t,path:n}=e;if(!n)return;let r=this.visible,i=this._areaLabel,a=this._perimeterLabel,o=e.validMeasurement;i.visible=!0,a.visible=!0;let s=!1,c=P(this.messages,t,this.analysisViewData.unit);if(c!=null&&e.areaCentroid&&r&&(i.geometry={type:`point`,point:e.areaCentroid},i.text=c,s=e.validMeasurement),this._set(`areaLabel`,c),r&&o){let t=R(e.mode),n=e.perimeter,r=F(this.messages,n,this.analysisViewData.unit);this._set(`perimeterLabel`,r),a.distance=this._parameters.labelDistance,a.anchor=`top`,a.text=r;let i=!0;for(let n=0;n<e.numVertices;++n){let r=(e.perimeterLabelSegmentIndex+n)%e.numVertices,o=t?this._pathSegments[r]:this._perimeterSegments[r];if(i=!0,a.geometry={type:`segment`,segment:o,sampleLocation:`center`},a.overlaps(this._areaLabel))i=!1;else break}a.visible=i}else a.visible=!1;i.visible=s}_updateMessageBundle(){this.loadingMessages=!0,n(`esri/core/t9n/Units`).then(e=>{this.messages=e,this.view&&this._update()}).finally(()=>{this.loadingMessages=!1})}};e([y()],N.prototype,`_parameters`,null),e([y()],N.prototype,`view`,void 0),e([y()],N.prototype,`messages`,void 0),e([y()],N.prototype,`analysis`,void 0),e([y()],N.prototype,`_viewData`,void 0),e([y()],N.prototype,`analysisViewData`,void 0),e([y({readOnly:!0})],N.prototype,`areaLabel`,void 0),e([y({readOnly:!0})],N.prototype,`perimeterLabel`,void 0),e([y()],N.prototype,`loadingMessages`,void 0),e([y()],N.prototype,`visible`,null),e([y()],N.prototype,`_renderUnits`,null),N=e([b(`esri.views.3d.analysis.AreaMeasurement.support.AreaMeasurementVisualization`)],N);function P(e,t,n){return e&&t&&f(e,t,v(t.value,t.unit,n))}function F(e,t,n){return e&&t&&f(e,t,d(t,n))}class I{constructor(e){this.validMeasurement=e?.validMeasurement??!1,this.numVertices=e?.numVertices??0,this.hasStagedVertex=e?.hasStagedVertex??!1,this.path=e?.path,this.vertexData=e?.vertexData??{positionsRender:[],positionsFittedWorldPlaneProjected:[],positionsFittedRender:[],triangleIndices:null,trianglePositions:[],triangleUvs:[]},this.mode=e?.mode,this.areaCentroid=e?.areaCentroid,this.perimeterLabelSegmentIndex=e?.perimeterLabelSegmentIndex??0,this.checkerSize=e?.checkerSize??1,this.area=e?.area,this.perimeter=e?.perimeter}}function L(e){switch(e){case`euclidean`:case void 0:case null:return`euclidean`;case`geodesic`:return`geodesic`}}function R(e){return L(e)===`geodesic`}export{N as AreaMeasurementVisualization,I as ViewData};
2
+ import{__decorate as e}from"tslib";import{onLocaleChange as t,fetchMessageBundle as n}from"../../../../../intl.js";import r from"../../../../../core/Accessor.js";import{multiplyOpacityToUnitRGBA as i,getContrast as a,multiplyOpacity as o}from"../../../../../core/colorUtils.js";import"../../../../../core/has.js";import{nextHighestPowerOfTen as s,floatEqualUlp as c}from"../../../../../core/mathUtils.js";import{destroyMaybe as l}from"../../../../../core/maybe.js";import{toAdaptiveAreaUnit as u,adaptiveLengthUnitForArea as d}from"../../../../../core/quantity.js";import{formatDecimal as f}from"../../../../../core/quantityFormatUtils.js";import{watch as p,syncAndInitial as m,initial as h}from"../../../../../core/reactiveUtils.js";import{lengthUnitFromSpatialReference as g,convertUnit as _,adaptiveAreaUnit as v}from"../../../../../core/units.js";import{property as y,subclass as b}from"../../../../../core/accessorSupport/decorators.js";import{fromTranslation as x}from"../../../../../core/libs/gl-matrix-2/math/mat4.js";import{create as S}from"../../../../../core/libs/gl-matrix-2/factories/mat4f64.js";import{subtract as C,squaredDistance as w}from"../../../../../core/libs/gl-matrix-2/math/vec3.js";import{create as T}from"../../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{LabelVisualElement as E}from"../../../interactive/visualElements/LabelVisualElement.js";import{LineVisualElement as D}from"../../../interactive/visualElements/LineVisualElement.js";import{MeasurementAreaVisualElement as O}from"../../../interactive/visualElements/MeasurementAreaVisualElement.js";import{GeodesicSegment as k,EuclideanSegment as A}from"../../../interactive/visualElements/support/Segment.js";import{midpoint3d as j}from"../../../support/mathUtils.js";import{createStipplePatternSimple as M}from"../../../webgl-engine/materials/lineStippleUtils.js";let N=class extends r{get _parameters(){let{accentColor:e,textColor:t}=this.view.effectiveTheme,n=e.toUnitRGBA(),r=i(e,.5),s=i(a(e),.5),c=a(t,160);return{accentColor:n,transparentAccentColor:r,transparentContrastColor:s,textColor:t,textBackgroundColor:o(c,.6),textCalloutColor:o(c,.5),pathLineWidth:3,perimeterLineWidth:2,projectionLineWidth:2,projectionLineStippleSize:5,labelDistance:25}}get viewData(){return this._viewData}get visible(){return this.analysisViewData.visible}get _renderUnits(){let e=this.view.renderCoordsHelper.spatialReference;return g(e)??`meters`}get testData(){}constructor(e){super(e),this._path=null,this._perimeter=null,this._projectionLines=null,this._measurementArea=null,this._areaLabel=null,this._perimeterLabel=null,this._pathSegments=[],this._perimeterSegments=[],this._origin=T(),this._originTransform=S(),this.messages=null,this._viewData=new I,this.areaLabel=null,this.perimeterLabel=null,this.loadingMessages=!0}initialize(){let{analysisViewData:e,_parameters:n,view:r}=this;this._path=new D({view:r,attached:!0,width:n.pathLineWidth,polygonOffset:3,renderOccluded:4,transparentRenderOrder:1,isDecoration:!0}),this._perimeter=new D({view:r,attached:!0,width:n.perimeterLineWidth,polygonOffset:3,renderOccluded:4,transparentRenderOrder:2,isDecoration:!0}),this._projectionLines=new D({view:r,attached:!0,width:n.projectionLineWidth,stipplePattern:M(n.projectionLineStippleSize),polygonOffset:3,renderOccluded:4,transparentRenderOrder:3,isDecoration:!0}),this._measurementArea=new O({view:r,attached:!0,isDecoration:!0,renderOccluded:4,testsTransparentRenderOrder:5});let i={attached:!0,view:r,isDecoration:!0};this._areaLabel=new E({...i,fontSize:16,distance:0}),this._perimeterLabel=new E({...i,fontSize:12}),this.addHandles([p(()=>[e.mode,this.visible,e.unit,e.measurementData?.updateId,e.measurementData?.measurements!=null,L(e.measurementData?.measurements?.mode)],()=>this._update(),m),p(()=>e.measurementData?.measurements,e=>this._updateMeasurements(e)),p(()=>r.state?.camera,()=>this._updateLabels(),m),t(()=>this._updateMessageBundle()),p(()=>this._parameters,({accentColor:e,transparentAccentColor:t,transparentContrastColor:n,textColor:r,textBackgroundColor:i,textCalloutColor:a})=>{let{_path:o,_perimeter:s,_projectionLines:c,_measurementArea:l,_areaLabel:u,_perimeterLabel:d}=this;o.color=e,s.color=e,c.color=e,l.color1=t,l.color2=n,u.textColor=r,u.backgroundColor=i,u.calloutColor=a,d.textColor=r,d.backgroundColor=i,d.calloutColor=a},h)]),this._updateMessageBundle()}destroy(){this._measurementArea=l(this._measurementArea),this._path=l(this._path),this._perimeter=l(this._perimeter),this._areaLabel=l(this._areaLabel),this._perimeterLabel=l(this._perimeterLabel),this._projectionLines=l(this._projectionLines),this.set(`view`,null)}_update(){if(this.destroyed||!this.view.ready)return;let{analysisViewData:{measurementData:e},analysisViewData:t}=this;e!=null&&(this._updateViewData(e,t.path),this._updateOrigin(),this._updatePathSegments(),this._updatePerimeterSegments(),this._updateArea(),this._updateProjectionLines(),this._updateLabels())}_calculateCheckerSize(e){let t=R(e?.mode)?e?.geodesicArea:e?.area;if(t==null)return 1;let n=u(t,this.analysisViewData.unit),r=Math.sqrt(_(1,n.unit,`square-meters`));return _(s(Math.sqrt(n.value)/Math.sqrt(300))*r,`meters`,this._renderUnits)}_updateMeasurements(e){Object.assign(this.viewData,this._getMeasurementsViewData(e)),this._updateCheckerSize(),this._updateLabels()}_updateCheckerSize(){this._measurementArea.size=[this.viewData.checkerSize,this.viewData.checkerSize]}_updateViewData(e,t){let n=e.measurements,r=new I({validMeasurement:!!n,numVertices:e.numVertices,hasStagedVertex:e.hasStagedVertex,path:t,mode:n?.mode,vertexData:e.vertexData,perimeterLabelSegmentIndex:0,...this._getMeasurementsViewData(n)});this._viewData=r}_getMeasurementsViewData(e){let t=R(e?.mode),n=this._calculateCheckerSize(e);return{areaCentroid:t?e?.geodesicAreaCentroidRenderCoords:e?.areaCentroidRenderCoords,area:t?e?.geodesicArea:e?.area,perimeter:t?e?.geodesicPerimeter:e?.perimeter,checkerSize:n}}_updateOrigin(){let e=this.viewData;j(e.vertexData.positionsRender,this._origin),x(this._originTransform,this._origin),this._measurementArea.transform=this._originTransform,this._projectionLines.transform=this._originTransform}_createSegments(e,t){let n=this.viewData,r=this.view.renderCoordsHelper.spatialReference,i=L(n.mode),a=[],o=n.numVertices,s=n.validMeasurement?o:o-1;for(let l=0;l<s;++l){let s=n.vertexData[e][l],u=n.vertexData[e][(l+1)%o],d=!0;if(t){let e=n.vertexData.positionsRender[l],t=n.vertexData.positionsRender[(l+1)%o],r=!0;for(let n=0;n<3;++n)r&&=c(e[n],s[n])&&c(t[n],u[n]);r&&(d=!1)}let f=null;switch(i){case`geodesic`:f=new k(s,u,r,d);break;case`euclidean`:f=new A(s,u,d)}a.push(f)}return a}_updatePathSegments(){let{visible:e}=this,t=this._createSegments(`positionsRender`);this._path.setGeometryFromSegments(t,this._origin),this._path.visible=e,this._pathSegments=t}_updatePerimeterSegments(){let e=this.visible&&this.viewData.mode===`euclidean`&&!!this.viewData.path&&this.viewData.path.numVertices>2,t=this._createSegments(`positionsFittedRender`,!0);this._perimeter.setGeometryFromSegments(t,this._origin),this._perimeter.visible=e,this._perimeterSegments=t}_updateArea(){let e=this.viewData;switch(L(e.mode)){case`euclidean`:this._updateAreaEuclidean(e);break;case`geodesic`:this._updateAreaGeodesic()}}_updateAreaEuclidean(e){let t=this.visible;e.validMeasurement&&e.vertexData.triangleIndices?(this._measurementArea.geometry={uv:e.vertexData.triangleUvs,position:e.vertexData.trianglePositions,triangleIndices:e.vertexData.triangleIndices},this._updateCheckerSize(),this._measurementArea.visible=t):this._measurementArea.visible=!1}_updateAreaGeodesic(){this._measurementArea.visible=!1}_updateProjectionLines(){let e=this.viewData,t=this.visible,n=e.mode,r=e.numVertices;if(r>0&&e.validMeasurement&&n===`euclidean`){let n=[];for(let t=0;t<r;++t){let r=T();C(r,e.vertexData.positionsRender[t],this._origin);let i=T();C(i,e.vertexData.positionsFittedRender[t],this._origin),c(w(r,i),0)||n.push([r,i])}this._projectionLines.geometry=n,this._projectionLines.visible=t}else this._projectionLines.geometry=null,this._projectionLines.visible=!1}_updateLabels(){if(this.destroyed)return;let{viewData:e}=this,{area:t,path:n}=e;if(!n)return;let r=this.visible,i=this._areaLabel,a=this._perimeterLabel,o=e.validMeasurement;i.visible=!0,a.visible=!0;let s=!1,c=P(this.messages,t,this.analysisViewData.unit);if(c!=null&&e.areaCentroid&&r&&(i.geometry={type:`point`,point:e.areaCentroid},i.text=c,s=e.validMeasurement),this._set(`areaLabel`,c),r&&o){let t=R(e.mode),n=e.perimeter,r=F(this.messages,n,this.analysisViewData.unit);this._set(`perimeterLabel`,r),a.distance=this._parameters.labelDistance,a.anchor=`top`,a.text=r;let i=!0;for(let n=0;n<e.numVertices;++n){let r=(e.perimeterLabelSegmentIndex+n)%e.numVertices,o=t?this._pathSegments[r]:this._perimeterSegments[r];if(i=!0,a.geometry={type:`segment`,segment:o,sampleLocation:`center`},a.overlaps(this._areaLabel))i=!1;else break}a.visible=i}else a.visible=!1;i.visible=s}_updateMessageBundle(){this.loadingMessages=!0,n(`esri/core/t9n/Units`).then(e=>{this.messages=e,this.view&&this._update()}).finally(()=>{this.loadingMessages=!1})}};e([y()],N.prototype,`_parameters`,null),e([y()],N.prototype,`view`,void 0),e([y()],N.prototype,`messages`,void 0),e([y()],N.prototype,`analysis`,void 0),e([y()],N.prototype,`_viewData`,void 0),e([y()],N.prototype,`analysisViewData`,void 0),e([y({readOnly:!0})],N.prototype,`areaLabel`,void 0),e([y({readOnly:!0})],N.prototype,`perimeterLabel`,void 0),e([y()],N.prototype,`loadingMessages`,void 0),e([y()],N.prototype,`visible`,null),e([y()],N.prototype,`_renderUnits`,null),N=e([b(`esri.views.3d.analysis.AreaMeasurement.support.AreaMeasurementVisualization`)],N);function P(e,t,n){return e&&t&&f(e,t,v(t.value,t.unit,n))}function F(e,t,n){return e&&t&&f(e,t,d(t,n))}class I{constructor(e){this.validMeasurement=e?.validMeasurement??!1,this.numVertices=e?.numVertices??0,this.hasStagedVertex=e?.hasStagedVertex??!1,this.path=e?.path,this.vertexData=e?.vertexData??{positionsRender:[],positionsFittedWorldPlaneProjected:[],positionsFittedRender:[],triangleIndices:null,trianglePositions:[],triangleUvs:[]},this.mode=e?.mode,this.areaCentroid=e?.areaCentroid,this.perimeterLabelSegmentIndex=e?.perimeterLabelSegmentIndex??0,this.checkerSize=e?.checkerSize??1,this.area=e?.area,this.perimeter=e?.perimeter}}function L(e){switch(e){case`euclidean`:case void 0:case null:return`euclidean`;case`geodesic`:return`geodesic`}}function R(e){return L(e)===`geodesic`}export{N as AreaMeasurementVisualization,I as ViewData};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import{onLocaleChange as t,fetchMessageBundle as n}from"../../../../intl.js";import r from"../../../../core/Accessor.js";import{multiplyOpacityToUnitRGBA as i,getContrast as a,multiplyOpacity as o}from"../../../../core/colorUtils.js";import"../../../../core/has.js";import{nextHighestPowerOfTen as s,deg2rad as c}from"../../../../core/mathUtils.js";import{destroyMaybe as l}from"../../../../core/maybe.js";import{toUnit as u}from"../../../../core/quantity.js";import{formatDecimal as d,formatImperialVerticalLength as f,formatImperialLength as p,formatMetricVerticalLength as m,formatMetricLength as h}from"../../../../core/quantityFormatUtils.js";import{watch as g,syncAndInitial as _,initial as v}from"../../../../core/reactiveUtils.js";import{createRenderScreenPointArray as y,createRenderScreenPointArray3 as b}from"../../../../core/screenUtils.js";import{adaptiveImperialLengthUnit as x,convertUnit as S}from"../../../../core/units.js";import{property as C,subclass as w}from"../../../../core/accessorSupport/decorators.js";import{dot as T}from"../../../../core/libs/gl-matrix-2/math/vec2.js";import{scale as E,add as D}from"../../../../core/libs/gl-matrix-2/math/vec3.js";import{create as O}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{renderScreenSpaceTangent as k}from"../../interactive/support/viewUtils.js";import{LabelVisualElement as A,mirrorPosition as j}from"../../interactive/visualElements/LabelVisualElement.js";import{LineVisualElement as M}from"../../interactive/visualElements/LineVisualElement.js";import{MeasurementArrowVisualElement as N}from"../../interactive/visualElements/MeasurementArrowVisualElement.js";import{RightAngleQuadVisualElement as P}from"../../interactive/visualElements/RightAngleQuadVisualElement.js";import{GeodesicSegment as F,EuclideanSegment as I}from"../../interactive/visualElements/support/Segment.js";import{createStipplePatternSimple as L}from"../../webgl-engine/materials/lineStippleUtils.js";import{geodeticDistanceThresholdMeters as R}from"../../../support/measurementWorkerUtils.js";let z=class extends r{get _parameters(){let{accentColor:e,textColor:t}=this.view.effectiveTheme,n=e.toUnitRGBA(),r=i(e,.75),s=a(e).toUnitRGBA(),c=a(t,160);return{accentColor:n,contrastColor:s,translucentAccentColor:r,triangleLineWidth:3,geodesicProjectionLineWidth:2,guideLineWidth:2,guideStippleLengthPixels:3,directLabelFontSize:16,horizontalLabelFontSize:12,verticalLabelFontSize:12,textColor:t,textBackgroundColor:o(c,.6),textCalloutColor:o(c,.5)}}get visible(){return this.analysisView.visible}get viewMode(){let{elevationAlignedStartPoint:e,elevationAlignedEndPoint:t}=this.analysisView;if(e==null||t==null||e.equals(t))return 0;let n=this.analysisView.result;if(n==null)return 1;if(this.actualVisualizedMeasurement===`geodesic`)return this._requiresGeodesicGuideAt(this._startPosition)||this._requiresGeodesicGuideAt(this._endPosition)?3:1;let{verticalDistance:r,horizontalDistance:i}=n,a=u(r,`meters`).value,o=u(i,`meters`).value;return Math.min(a/o,o/a)<this.triangleCollapseRatioThreshold?1:2}get actualVisualizedMeasurement(){let{measurementMode:e,result:t}=this.analysisView;switch(e){case 0:return t!=null&&u(t.horizontalDistance,`meters`).value>R?`geodesic`:`euclidean`;case 1:return`euclidean`;case 2:return`geodesic`}}get allowVisualElementsOrientationChange(){return this._triangleOrientationOverride==null}set allowVisualElementsOrientationChange(e){this._triangleOrientationOverride==null!==e&&(this._triangleOrientationOverride=this._triangleOrientationOverride==null?this._actualVisualElementsOrientation:null)}get labels(){return this.actualVisualizedMeasurement===`geodesic`?{direct:null,horizontal:this._segmentLabel,vertical:this._verticalLabel}:{direct:this._segmentLabel,horizontal:this._horizontalLabel,vertical:this._verticalLabel}}constructor(e){super(e),this._segmentVisualElement=null,this._triangleVisualElement=null,this._rightAngleQuad=null,this._projectedGeodesicLine=null,this._geodesicStartHint=null,this._geodesicEndHint=null,this._segmentLabel=null,this._verticalLabel=null,this._horizontalLabel=null,this._startPosition=O(),this._endPosition=O(),this._cornerPosition=O(),this._startPositionAtSeaLevel=O(),this._endPositionAtSeaLevel=O(),this._triangleOrientationOverride=null,this.messages=null,this.loadingMessages=!0,this.visualElementOrientation=0,this.triangleCollapseRatioThreshold=.03}initialize(){let e={attached:!0,view:this.view,isDecoration:!0},{guideLineWidth:n,guideStippleLengthPixels:r,triangleLineWidth:i,geodesicProjectionLineWidth:a,directLabelFontSize:o,verticalLabelFontSize:s,horizontalLabelFontSize:c}=this._parameters;this._segmentVisualElement=new N({...e,geometry:null,renderOccluded:4,transparentRenderOrder:2}),this._triangleVisualElement=new M({...e,width:i,renderOccluded:4,transparentRenderOrder:3}),this._rightAngleQuad=new P({...e,renderOccluded:4,transparentRenderOrder:4});let l={...e,polygonOffset:3,renderOccluded:4,transparentRenderOrder:1};this._projectedGeodesicLine=new M({...l,width:a,stipplePattern:L(r)}),this._geodesicStartHint=new M({...l,width:n,stipplePattern:L(r)}),this._geodesicEndHint=new M({...l,width:n,stipplePattern:L(r)}),this._segmentLabel=new A({...e,fontSize:o}),this._verticalLabel=new A({...e,fontSize:s}),this._horizontalLabel=new A({...e,fontSize:c}),this.addHandles([g(()=>{let{elevationAlignedStartPoint:e,elevationAlignedEndPoint:t}=this.analysisView,n=this.view;return{view:n,camera:n.state.camera,viewMode:this.viewMode,elevationAlignedStartPoint:e,elevationAlignedEndPoint:t,orientation:this._actualVisualElementsOrientation,visualizedMeasurement:this.actualVisualizedMeasurement,stripeLength:this._measurementArrowStripeLength}},e=>this._updateGeometryAndViewMode(e),_),g(()=>({visible:this.visible,viewMode:this.viewMode}),e=>this._updateVisualElementVisibility(e),_),g(()=>({text:this._labelsText,visualizedMeasurement:this.actualVisualizedMeasurement}),e=>this._updateLabelText(e),_),g(()=>({visible:this.visible,viewMode:this.viewMode}),e=>this._updateLabelVisibility(e),_),g(()=>this._measurementArrowStripeLength,e=>this._updateSegmentStripeLength(e),_),t(()=>this._updateMessageBundle()),g(()=>this._parameters,({textBackgroundColor:e,textCalloutColor:t,textColor:n,translucentAccentColor:r,accentColor:i,contrastColor:a})=>{let{_segmentLabel:o,_verticalLabel:s,_horizontalLabel:c,_triangleVisualElement:l,_rightAngleQuad:u,_projectedGeodesicLine:d,_geodesicStartHint:f,_geodesicEndHint:p,_segmentVisualElement:m}=this;o.backgroundColor=e,o.calloutColor=t,o.textColor=n,s.backgroundColor=e,s.calloutColor=t,s.textColor=n,c.backgroundColor=e,c.calloutColor=t,c.textColor=n,l.color=r,u.color=r,d.color=r,f.color=r,p.color=r,m.color=i,m.contrastColor=a},v)]),this._updateMessageBundle()}destroy(){this._segmentVisualElement=l(this._segmentVisualElement),this._triangleVisualElement=l(this._triangleVisualElement),this._rightAngleQuad=l(this._rightAngleQuad),this._projectedGeodesicLine=l(this._projectedGeodesicLine),this._geodesicStartHint=l(this._geodesicStartHint),this._geodesicEndHint=l(this._geodesicEndHint),this._segmentLabel=l(this._segmentLabel),this._verticalLabel=l(this._verticalLabel),this._horizontalLabel=l(this._horizontalLabel),this.set(`view`,null)}_updateVisualElementVisibility({visible:e,viewMode:t}){if(this._segmentVisualElement.visible=!1,this._triangleVisualElement.visible=!1,this._rightAngleQuad.visible=!1,this._projectedGeodesicLine.visible=!1,this._geodesicStartHint.visible=!1,this._geodesicEndHint.visible=!1,e)switch(t){case 0:break;case 1:this._segmentVisualElement.visible=!0;break;case 2:this._segmentVisualElement.visible=!0,this._triangleVisualElement.visible=!0,this._rightAngleQuad.visible=!0;break;case 3:this._segmentVisualElement.visible=!0,this._projectedGeodesicLine.visible=!0,this._geodesicStartHint.visible=!0,this._geodesicEndHint.visible=!0}}_updateGeometryAndViewMode({view:e,camera:t,viewMode:n,elevationAlignedStartPoint:r,elevationAlignedEndPoint:i,orientation:a,visualizedMeasurement:o,stripeLength:s}){let c=e.renderCoordsHelper;if(c==null||r==null||i==null||r.equals(i))return;let l=this._startPosition,u=this._endPosition;c.toRenderCoords(r,l),c.toRenderCoords(i,u);let d=a===1?1:-1,f=d*(c.getAltitude(u)-c.getAltitude(l));f<0&&(l=this._endPosition,u=this._startPosition);let p=o===`geodesic`?new F(this._startPosition,this._endPosition,c.spatialReference):new I(this._startPosition,this._endPosition);switch(this._segmentVisualElement.geometry=p,this._updateSegmentStripeLength(s),n){case 1:this._updateSegment(p,a);break;case 2:this._updateSegmentAndTriangle({view:e,camera:t,segment:p,orientation:a,startPosition:l,endPosition:u,deltaSign:d,altitudeDelta:f});break;case 3:this._updateSegmentAndProjection({view:e,orientation:a,startPosition:l,endPosition:u})}}_updateSegment(e,t){this._segmentLabel.anchor=t===1?`top`:`bottom`,this._segmentLabel.geometry={type:`segment`,segment:e,sampleLocation:`center`}}_updateSegmentAndTriangle({view:{renderCoordsHelper:e},camera:t,segment:n,orientation:r,startPosition:i,endPosition:a,deltaSign:o,altitudeDelta:s}){let c=this._cornerPosition;e.worldUpAtPosition(i,c),E(c,c,o*Math.abs(s)),D(c,c,i),this._triangleVisualElement.geometry=[[[i[0],i[1],i[2]],[c[0],c[1],c[2]],[a[0],a[1],a[2]]]],this._rightAngleQuad.geometry={previous:i,center:c,next:a};let l=new I(i,c),u=new I(c,a),d=B(i,a,c,r,t);d&&(this._segmentLabel.anchor=d.segment,this._segmentLabel.geometry={type:`segment`,segment:n,sampleLocation:`center`},this._verticalLabel.geometry={type:`segment`,segment:l,sampleLocation:`center`},this._verticalLabel.anchor=d.vertical,this._horizontalLabel.geometry={type:`segment`,segment:u,sampleLocation:`center`},this._horizontalLabel.anchor=d.horizontal)}_updateSegmentAndProjection({view:{renderCoordsHelper:e},orientation:t,startPosition:n,endPosition:r}){e.setAltitude(this._startPositionAtSeaLevel,0,n),e.setAltitude(this._endPositionAtSeaLevel,0,r);let i=new F(this._startPositionAtSeaLevel,this._endPositionAtSeaLevel,e.spatialReference);this._projectedGeodesicLine.setGeometryFromSegment(i),this._geodesicStartHint.setGeometryFromSegment(new I(this._startPositionAtSeaLevel,n)),this._geodesicEndHint.setGeometryFromSegment(new I(this._endPositionAtSeaLevel,r)),this._segmentLabel.geometry={type:`segment`,segment:i,sampleLocation:`center`},this._segmentLabel.anchor=t===1?`top`:`bottom`}_updateLabelText({text:e,visualizedMeasurement:t}){e==null?(this._segmentLabel.text=null,this._horizontalLabel.text=null,this._verticalLabel.text=null):(this._segmentLabel.text=t===`euclidean`?e.directDistance:e.horizontalDistance,this._horizontalLabel.text=e.horizontalDistance,this._verticalLabel.text=e.verticalDistance),this.notifyChange(`labels`)}_updateLabelVisibility({visible:e,viewMode:t}){let n=this._segmentLabel,r=this._horizontalLabel,i=this._verticalLabel;if(n.visible=!1,r.visible=!1,i.visible=!1,e)switch(t){case 1:n.visible=!0;break;case 2:n.visible=!0,r.visible=!0,i.visible=!0;break;case 3:n.visible=!0}}get _labelsText(){if(this.destroyed)return null;let e=this.messages,t=this.analysisView.result;if(t==null||e==null)return null;let{directDistance:n,horizontalDistance:r,verticalDistance:i}=t,a=this.analysisView.unit,o=e=>({directDistance:``,horizontalDistance:``,verticalDistance:``,...e});switch(a){case`metric`:return o({directDistance:n&&h(e,n),horizontalDistance:r&&h(e,r),verticalDistance:i&&m(e,i)});case`imperial`:return o({directDistance:n&&p(e,n),horizontalDistance:r&&p(e,r),verticalDistance:i&&f(e,i)});default:return o({directDistance:n&&d(e,n,a),horizontalDistance:r&&d(e,r,a),verticalDistance:i&&d(e,i,a)})}}_updateSegmentStripeLength(e){let t=this._segmentVisualElement;e==null?t.stripesEnabled=!1:(t.stripeLength=e,t.stripesEnabled=!0)}get _actualVisualElementsOrientation(){if(this._triangleOrientationOverride!=null)return this._triangleOrientationOverride;let e=this.visualElementOrientation;return e===0?this.view.state.camera.aboveGround?1:2:e}_requiresGeodesicGuideAt(e){let t=this.view;if(!t?.state)return!1;let n=t.state.camera,r=t.renderCoordsHelper;if(!r)return!1;let i=n.computeScreenPixelSizeAt(e);return r.getAltitude(e)/i>=10}get _measurementArrowStripeLength(){let{result:e,unit:t}=this.analysisView;if(e==null)return null;let n=null,r=e.directDistance;switch(t){case`metric`:n=r&&u(r,`meters`);break;case`imperial`:n=r&&u(r,x(r.value,r.unit));break;default:n=r&&u(r,t)}return n==null?null:s(n.value/30)*S(1,n.unit,`meters`)}_updateMessageBundle(){this.loadingMessages=!0,n(`esri/core/t9n/Units`).then(e=>{this.messages=e}).finally(()=>{this.loadingMessages=!1})}get testData(){}};e([C()],z.prototype,`_parameters`,null),e([C()],z.prototype,`_triangleOrientationOverride`,void 0),e([C()],z.prototype,`messages`,void 0),e([C()],z.prototype,`view`,void 0),e([C()],z.prototype,`analysis`,void 0),e([C()],z.prototype,`analysisView`,void 0),e([C()],z.prototype,`loadingMessages`,void 0),e([C()],z.prototype,`visible`,null),e([C()],z.prototype,`viewMode`,null),e([C()],z.prototype,`actualVisualizedMeasurement`,null),e([C()],z.prototype,`visualElementOrientation`,void 0),e([C()],z.prototype,`triangleCollapseRatioThreshold`,void 0),e([C()],z.prototype,`allowVisualElementsOrientationChange`,null),e([C()],z.prototype,`labels`,null),e([C()],z.prototype,`_labelsText`,null),e([C()],z.prototype,`_actualVisualElementsOrientation`,null),e([C()],z.prototype,`_measurementArrowStripeLength`,null),z=e([w(`esri.views.3d.analysis.DirectLineMeasurement.DirectLineMeasurementVisualization`)],z);function B(e,t,n,r,i){let a=k(e,n,i,W),o=k(e,t,i,G);if(a==null||o==null)return null;let s=i.projectToRenderScreen(n,H),c=i.projectToRenderScreen(t,U),l={segment:`bottom`,horizontal:`top`,vertical:s==null||c==null||s[0]<c[0]?`left`:`right`};if(T(a,o)>=V)l.segment=Math.sign(a[1])===Math.sign(o[1])?j(l.vertical):l.vertical;else{let e=K;k(n,t,i,e),T(e,o)>=V&&(l.segment=Math.sign(e[0])===Math.sign(o[0])?j(l.horizontal):l.horizontal)}if(r===2){let e=e=>e===`top`?`bottom`:`top`;l.segment=e(l.segment),l.horizontal=e(l.horizontal),l.vertical=e(l.vertical)}return l}const V=Math.cos(c(12)),H=b(),U=b(),W=y(),G=y(),K=y();export{z as DirectLineMeasurementVisualization};
2
+ import{__decorate as e}from"tslib";import{onLocaleChange as t,fetchMessageBundle as n}from"../../../../intl.js";import r from"../../../../core/Accessor.js";import{multiplyOpacityToUnitRGBA as i,getContrast as a,multiplyOpacity as o}from"../../../../core/colorUtils.js";import"../../../../core/has.js";import{nextHighestPowerOfTen as s,deg2rad as c}from"../../../../core/mathUtils.js";import{destroyMaybe as l}from"../../../../core/maybe.js";import{toUnit as u}from"../../../../core/quantity.js";import{formatDecimal as d,formatImperialVerticalLength as f,formatImperialLength as p,formatMetricVerticalLength as m,formatMetricLength as h}from"../../../../core/quantityFormatUtils.js";import{watch as g,syncAndInitial as _,initial as v}from"../../../../core/reactiveUtils.js";import{createRenderScreenPointArray as y,createRenderScreenPointArray3 as b}from"../../../../core/screenUtils.js";import{adaptiveImperialLengthUnit as x,convertUnit as S}from"../../../../core/units.js";import{property as C,subclass as w}from"../../../../core/accessorSupport/decorators.js";import{dot as T}from"../../../../core/libs/gl-matrix-2/math/vec2.js";import{scale as E,add as D}from"../../../../core/libs/gl-matrix-2/math/vec3.js";import{create as O}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{renderScreenSpaceTangent as k}from"../../interactive/support/viewUtils.js";import{LabelVisualElement as A,mirrorPosition as j}from"../../interactive/visualElements/LabelVisualElement.js";import{LineVisualElement as M}from"../../interactive/visualElements/LineVisualElement.js";import{MeasurementArrowVisualElement as N}from"../../interactive/visualElements/MeasurementArrowVisualElement.js";import{RightAngleQuadVisualElement as P}from"../../interactive/visualElements/RightAngleQuadVisualElement.js";import{GeodesicSegment as F,EuclideanSegment as I}from"../../interactive/visualElements/support/Segment.js";import{createStipplePatternSimple as L}from"../../webgl-engine/materials/lineStippleUtils.js";import{geodeticDistanceThresholdMeters as R}from"../../../support/measurementWorkerUtils.js";let z=class extends r{get _parameters(){let{accentColor:e,textColor:t}=this.view.effectiveTheme,n=e.toUnitRGBA(),r=i(e,.75),s=a(e).toUnitRGBA(),c=a(t,160);return{accentColor:n,contrastColor:s,translucentAccentColor:r,triangleLineWidth:3,geodesicProjectionLineWidth:2,guideLineWidth:2,guideStippleLengthPixels:3,directLabelFontSize:16,horizontalLabelFontSize:12,verticalLabelFontSize:12,textColor:t,textBackgroundColor:o(c,.6),textCalloutColor:o(c,.5)}}get visible(){return this.analysisView.visible}get viewMode(){let{elevationAlignedStartPoint:e,elevationAlignedEndPoint:t}=this.analysisView;if(e==null||t==null||e.equals(t))return 0;let n=this.analysisView.result;if(n==null)return 1;if(this.actualVisualizedMeasurement===`geodesic`)return this._requiresGeodesicGuideAt(this._startPosition)||this._requiresGeodesicGuideAt(this._endPosition)?3:1;let{verticalDistance:r,horizontalDistance:i}=n,a=u(r,`meters`).value,o=u(i,`meters`).value;return Math.min(a/o,o/a)<this.triangleCollapseRatioThreshold?1:2}get actualVisualizedMeasurement(){let{measurementMode:e,result:t}=this.analysisView;switch(e){case 0:return t!=null&&u(t.horizontalDistance,`meters`).value>R?`geodesic`:`euclidean`;case 1:return`euclidean`;case 2:return`geodesic`}}get allowVisualElementsOrientationChange(){return this._triangleOrientationOverride==null}set allowVisualElementsOrientationChange(e){this._triangleOrientationOverride==null!==e&&(this._triangleOrientationOverride=this._triangleOrientationOverride==null?this._actualVisualElementsOrientation:null)}get labels(){return this.actualVisualizedMeasurement===`geodesic`?{direct:null,horizontal:this._segmentLabel,vertical:this._verticalLabel}:{direct:this._segmentLabel,horizontal:this._horizontalLabel,vertical:this._verticalLabel}}constructor(e){super(e),this._segmentVisualElement=null,this._triangleVisualElement=null,this._rightAngleQuad=null,this._projectedGeodesicLine=null,this._geodesicStartHint=null,this._geodesicEndHint=null,this._segmentLabel=null,this._verticalLabel=null,this._horizontalLabel=null,this._startPosition=O(),this._endPosition=O(),this._cornerPosition=O(),this._startPositionAtSeaLevel=O(),this._endPositionAtSeaLevel=O(),this._triangleOrientationOverride=null,this.messages=null,this.loadingMessages=!0,this.visualElementOrientation=0,this.triangleCollapseRatioThreshold=.03}initialize(){let e={attached:!0,view:this.view,isDecoration:!0},{guideLineWidth:n,guideStippleLengthPixels:r,triangleLineWidth:i,geodesicProjectionLineWidth:a,directLabelFontSize:o,verticalLabelFontSize:s,horizontalLabelFontSize:c}=this._parameters;this._segmentVisualElement=new N({...e,geometry:null,renderOccluded:4,transparentRenderOrder:2}),this._triangleVisualElement=new M({...e,width:i,renderOccluded:4,transparentRenderOrder:3}),this._rightAngleQuad=new P({...e,renderOccluded:4,transparentRenderOrder:4});let l={...e,polygonOffset:3,renderOccluded:4,transparentRenderOrder:1};this._projectedGeodesicLine=new M({...l,width:a,stipplePattern:L(r)}),this._geodesicStartHint=new M({...l,width:n,stipplePattern:L(r)}),this._geodesicEndHint=new M({...l,width:n,stipplePattern:L(r)}),this._segmentLabel=new A({...e,fontSize:o}),this._verticalLabel=new A({...e,fontSize:s}),this._horizontalLabel=new A({...e,fontSize:c}),this.addHandles([g(()=>{let{elevationAlignedStartPoint:e,elevationAlignedEndPoint:t}=this.analysisView,n=this.view;return{view:n,camera:n.state.camera,viewMode:this.viewMode,elevationAlignedStartPoint:e,elevationAlignedEndPoint:t,orientation:this._actualVisualElementsOrientation,visualizedMeasurement:this.actualVisualizedMeasurement,stripeLength:this._measurementArrowStripeLength}},e=>this._updateGeometryAndViewMode(e),_),g(()=>({visible:this.visible,viewMode:this.viewMode}),e=>this._updateVisualElementVisibility(e),_),g(()=>({text:this._labelsText,visualizedMeasurement:this.actualVisualizedMeasurement}),e=>this._updateLabelText(e),_),g(()=>({visible:this.visible,viewMode:this.viewMode}),e=>this._updateLabelVisibility(e),_),g(()=>this._measurementArrowStripeLength,e=>this._updateSegmentStripeLength(e),_),t(()=>this._updateMessageBundle()),g(()=>this._parameters,({textBackgroundColor:e,textCalloutColor:t,textColor:n,translucentAccentColor:r,accentColor:i,contrastColor:a})=>{let{_segmentLabel:o,_verticalLabel:s,_horizontalLabel:c,_triangleVisualElement:l,_rightAngleQuad:u,_projectedGeodesicLine:d,_geodesicStartHint:f,_geodesicEndHint:p,_segmentVisualElement:m}=this;o.backgroundColor=e,o.calloutColor=t,o.textColor=n,s.backgroundColor=e,s.calloutColor=t,s.textColor=n,c.backgroundColor=e,c.calloutColor=t,c.textColor=n,l.color=r,u.color=r,d.color=r,f.color=r,p.color=r,m.color=i,m.contrastColor=a},v)]),this._updateMessageBundle()}destroy(){this._segmentVisualElement=l(this._segmentVisualElement),this._triangleVisualElement=l(this._triangleVisualElement),this._rightAngleQuad=l(this._rightAngleQuad),this._projectedGeodesicLine=l(this._projectedGeodesicLine),this._geodesicStartHint=l(this._geodesicStartHint),this._geodesicEndHint=l(this._geodesicEndHint),this._segmentLabel=l(this._segmentLabel),this._verticalLabel=l(this._verticalLabel),this._horizontalLabel=l(this._horizontalLabel),this.set(`view`,null)}_updateVisualElementVisibility({visible:e,viewMode:t}){if(this._segmentVisualElement.visible=!1,this._triangleVisualElement.visible=!1,this._rightAngleQuad.visible=!1,this._projectedGeodesicLine.visible=!1,this._geodesicStartHint.visible=!1,this._geodesicEndHint.visible=!1,e)switch(t){case 0:break;case 1:this._segmentVisualElement.visible=!0;break;case 2:this._segmentVisualElement.visible=!0,this._triangleVisualElement.visible=!0,this._rightAngleQuad.visible=!0;break;case 3:this._segmentVisualElement.visible=!0,this._projectedGeodesicLine.visible=!0,this._geodesicStartHint.visible=!0,this._geodesicEndHint.visible=!0}}_updateGeometryAndViewMode({view:e,camera:t,viewMode:n,elevationAlignedStartPoint:r,elevationAlignedEndPoint:i,orientation:a,visualizedMeasurement:o,stripeLength:s}){let c=e.renderCoordsHelper;if(r==null||i==null||r.equals(i))return;let l=this._startPosition,u=this._endPosition;c.toRenderCoords(r,l),c.toRenderCoords(i,u);let d=a===1?1:-1,f=d*(c.getAltitude(u)-c.getAltitude(l));f<0&&(l=this._endPosition,u=this._startPosition);let p=o===`geodesic`?new F(this._startPosition,this._endPosition,c.spatialReference):new I(this._startPosition,this._endPosition);switch(this._segmentVisualElement.geometry=p,this._updateSegmentStripeLength(s),n){case 1:this._updateSegment(p,a);break;case 2:this._updateSegmentAndTriangle({view:e,camera:t,segment:p,orientation:a,startPosition:l,endPosition:u,deltaSign:d,altitudeDelta:f});break;case 3:this._updateSegmentAndProjection({view:e,orientation:a,startPosition:l,endPosition:u})}}_updateSegment(e,t){this._segmentLabel.anchor=t===1?`top`:`bottom`,this._segmentLabel.geometry={type:`segment`,segment:e,sampleLocation:`center`}}_updateSegmentAndTriangle({view:{renderCoordsHelper:e},camera:t,segment:n,orientation:r,startPosition:i,endPosition:a,deltaSign:o,altitudeDelta:s}){let c=this._cornerPosition;e.worldUpAtPosition(i,c),E(c,c,o*Math.abs(s)),D(c,c,i),this._triangleVisualElement.geometry=[[[i[0],i[1],i[2]],[c[0],c[1],c[2]],[a[0],a[1],a[2]]]],this._rightAngleQuad.geometry={previous:i,center:c,next:a};let l=new I(i,c),u=new I(c,a),d=B(i,a,c,r,t);d&&(this._segmentLabel.anchor=d.segment,this._segmentLabel.geometry={type:`segment`,segment:n,sampleLocation:`center`},this._verticalLabel.geometry={type:`segment`,segment:l,sampleLocation:`center`},this._verticalLabel.anchor=d.vertical,this._horizontalLabel.geometry={type:`segment`,segment:u,sampleLocation:`center`},this._horizontalLabel.anchor=d.horizontal)}_updateSegmentAndProjection({view:{renderCoordsHelper:e},orientation:t,startPosition:n,endPosition:r}){e.setAltitude(this._startPositionAtSeaLevel,0,n),e.setAltitude(this._endPositionAtSeaLevel,0,r);let i=new F(this._startPositionAtSeaLevel,this._endPositionAtSeaLevel,e.spatialReference);this._projectedGeodesicLine.setGeometryFromSegment(i),this._geodesicStartHint.setGeometryFromSegment(new I(this._startPositionAtSeaLevel,n)),this._geodesicEndHint.setGeometryFromSegment(new I(this._endPositionAtSeaLevel,r)),this._segmentLabel.geometry={type:`segment`,segment:i,sampleLocation:`center`},this._segmentLabel.anchor=t===1?`top`:`bottom`}_updateLabelText({text:e,visualizedMeasurement:t}){e==null?(this._segmentLabel.text=null,this._horizontalLabel.text=null,this._verticalLabel.text=null):(this._segmentLabel.text=t===`euclidean`?e.directDistance:e.horizontalDistance,this._horizontalLabel.text=e.horizontalDistance,this._verticalLabel.text=e.verticalDistance),this.notifyChange(`labels`)}_updateLabelVisibility({visible:e,viewMode:t}){let n=this._segmentLabel,r=this._horizontalLabel,i=this._verticalLabel;if(n.visible=!1,r.visible=!1,i.visible=!1,e)switch(t){case 1:n.visible=!0;break;case 2:n.visible=!0,r.visible=!0,i.visible=!0;break;case 3:n.visible=!0}}get _labelsText(){if(this.destroyed)return null;let e=this.messages,t=this.analysisView.result;if(t==null||e==null)return null;let{directDistance:n,horizontalDistance:r,verticalDistance:i}=t,a=this.analysisView.unit,o=e=>({directDistance:``,horizontalDistance:``,verticalDistance:``,...e});switch(a){case`metric`:return o({directDistance:n&&h(e,n),horizontalDistance:r&&h(e,r),verticalDistance:i&&m(e,i)});case`imperial`:return o({directDistance:n&&p(e,n),horizontalDistance:r&&p(e,r),verticalDistance:i&&f(e,i)});default:return o({directDistance:n&&d(e,n,a),horizontalDistance:r&&d(e,r,a),verticalDistance:i&&d(e,i,a)})}}_updateSegmentStripeLength(e){let t=this._segmentVisualElement;e==null?t.stripesEnabled=!1:(t.stripeLength=e,t.stripesEnabled=!0)}get _actualVisualElementsOrientation(){if(this._triangleOrientationOverride!=null)return this._triangleOrientationOverride;let e=this.visualElementOrientation;return e===0?this.view.state.camera.aboveGround?1:2:e}_requiresGeodesicGuideAt(e){let t=this.view;if(!t?.state)return!1;let n=t.state.camera,r=t.renderCoordsHelper,i=n.computeScreenPixelSizeAt(e);return r.getAltitude(e)/i>=10}get _measurementArrowStripeLength(){let{result:e,unit:t}=this.analysisView;if(e==null)return null;let n=null,r=e.directDistance;switch(t){case`metric`:n=r&&u(r,`meters`);break;case`imperial`:n=r&&u(r,x(r.value,r.unit));break;default:n=r&&u(r,t)}return n==null?null:s(n.value/30)*S(1,n.unit,`meters`)}_updateMessageBundle(){this.loadingMessages=!0,n(`esri/core/t9n/Units`).then(e=>{this.messages=e}).finally(()=>{this.loadingMessages=!1})}get testData(){}};e([C()],z.prototype,`_parameters`,null),e([C()],z.prototype,`_triangleOrientationOverride`,void 0),e([C()],z.prototype,`messages`,void 0),e([C()],z.prototype,`view`,void 0),e([C()],z.prototype,`analysis`,void 0),e([C()],z.prototype,`analysisView`,void 0),e([C()],z.prototype,`loadingMessages`,void 0),e([C()],z.prototype,`visible`,null),e([C()],z.prototype,`viewMode`,null),e([C()],z.prototype,`actualVisualizedMeasurement`,null),e([C()],z.prototype,`visualElementOrientation`,void 0),e([C()],z.prototype,`triangleCollapseRatioThreshold`,void 0),e([C()],z.prototype,`allowVisualElementsOrientationChange`,null),e([C()],z.prototype,`labels`,null),e([C()],z.prototype,`_labelsText`,null),e([C()],z.prototype,`_actualVisualElementsOrientation`,null),e([C()],z.prototype,`_measurementArrowStripeLength`,null),z=e([w(`esri.views.3d.analysis.DirectLineMeasurement.DirectLineMeasurementVisualization`)],z);function B(e,t,n,r,i){let a=k(e,n,i,W),o=k(e,t,i,G);if(a==null||o==null)return null;let s=i.projectToRenderScreen(n,H),c=i.projectToRenderScreen(t,U),l={segment:`bottom`,horizontal:`top`,vertical:s==null||c==null||s[0]<c[0]?`left`:`right`};if(T(a,o)>=V)l.segment=Math.sign(a[1])===Math.sign(o[1])?j(l.vertical):l.vertical;else{let e=K;k(n,t,i,e),T(e,o)>=V&&(l.segment=Math.sign(e[0])===Math.sign(o[0])?j(l.horizontal):l.horizontal)}if(r===2){let e=e=>e===`top`?`bottom`:`top`;l.segment=e(l.segment),l.horizontal=e(l.horizontal),l.vertical=e(l.vertical)}return l}const V=Math.cos(c(12)),H=b(),U=b(),W=y(),G=y(),K=y();export{z as DirectLineMeasurementVisualization};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import{dedupeResult as t}from"../../../../core/dedupeResult.js";import{isIterable as n}from"../../../../core/iteratorUtils.js";import{equalsShallow as r}from"../../../../core/lang.js";import{equalsMaybe as i}from"../../../../core/maybe.js";import{notDeepEqual as a}from"../../../../core/object.js";import{watch as o,sync as s}from"../../../../core/reactiveUtils.js";import{getMetersPerVerticalUnitForSR as c}from"../../../../core/units.js";import{property as l,subclass as u}from"../../../../core/accessorSupport/decorators.js";import{set as d}from"../../../../core/libs/gl-matrix-2/math/vec3.js";import{create as f}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{getReferenceEllipsoid as p}from"../../../../geometry/ellipsoidUtils.js";import{create as m,fromPoints as h}from"../../../../geometry/support/ray.js";import{GeometryDescriptor as g}from"../../../../layers/support/GeometryDescriptor.js";import{externalToInternalIntersectOptions as _,testGraphicUidFilter as v}from"../../support/hitTest.js";import{Intersector as y}from"../../webgl-engine/lib/Intersector.js";import{toGraphic as b}from"../../webgl-engine/lib/intersectorUtilsConversions.js";import{getVisibleLayerIds as x}from"../../../analysis/ElevationProfile/elevationProfileLayerUtils.js";import{ElevationProfileLineComputation as S}from"../../../analysis/ElevationProfile/ElevationProfileLineComputation.js";let C=class extends S{constructor(){super(...arguments),this.type=`scene`,this.numSamplesForPreview=50,this.numSamplesPerChunk=25,this._getStableElevationDependencies=t(()=>{let e=this._view;return e?.ready?{view:e,stationary:e.stationary,geometry:this.controller?.analysis.geometry,visibleLayerIds:this._getStableLayerIds(),maxIntersectionDistance:this._maxIntersectionDistance,intersectOptions:this._getStableIntersectOptions(),spatialReference:this._getStableSpatialReference()}:null},r),this._getStableSpatialReference=t(()=>this._view?.spatialReference,i),this._getStableLayerIds=t(()=>x(this._view),r),this._getStableIntersectOptions=t(()=>{let e=this._view;if(!e?.ready)return{};let{include:t,exclude:r}=this.profile;return _(e,{include:t,exclude:[...this._pointCloudLayers,...n(r)?r:r?[r]:[]]})},(e,t)=>!a(e,t)),this._getStablePointCloudLayers=t(()=>{let e=this._view;return e?.ready?e.allLayerViews.toArray().filter(e=>e.layer?.type===`point-cloud`).map(e=>e.layer):[]},r),this._vecA=f(),this._vecB=f(),this._ray=m()}get minDemResolution(){let e=this._view;if(!e?.ready)return null;let t=e.pointsOfInterest?.focus?.worldUnitsPerContentPixel;return t==null?null:t*c(e.spatialReference)}initialize(){let e=()=>this.onInvalidate(this);return this.addHandles([o(()=>this._queryElevationDependencies,e,s),this.controller.onElevationChange(e)])}async queryElevation(e,{noDataValue:t,signal:n}){let r=this._queryElevationDependencies;if(r==null)throw Error(`${this.declaredClass}: no dependencies`);let i=this._intersector;if(i==null)throw Error(`${this.declaredClass}: no view`);let{intersectOptions:a,view:o,spatialReference:s}=r,c=o.renderCoordsHelper,l=o.sceneIntersectionHelper,u=this._vecA,f=this._vecA,p=this._vecB,m=this._ray;if(!s)return{geometry:e,noDataValue:t};let _=await g.fromGeometry(e).project(s,n);if(!_)return{geometry:e,noDataValue:t};let v=_.coordinates,y=v.length;for(let e=0;e<y;++e){let n=v[e];d(p,n.x,n.y,n.z??0),c.toRenderCoords(p,s,p),c.setAltitude(u,2e5,p);let o=h(u,p,m);l.computeIntersection(o,i,!0,a);let g=w(r,i.results.all);g?(g.getIntersectionPoint(f),c.fromRenderCoords(f,f,s),n.z=f[2]):n.z=t}return{geometry:_.export(),noDataValue:t}}get _queryElevationDependencies(){return this._getStableElevationDependencies()}get _pointCloudLayers(){return this._getStablePointCloudLayers()}get _view(){let e=this.controller.view;return e.type===`3d`?e:null}get _maxIntersectionDistance(){let e=this._view;return!e?.ready||!e.renderCoordsHelper?1/0:p(e.spatialReference).radius/e.renderCoordsHelper.unitInMeters}get _intersector(){let e=this._view;if(!e?.ready)return null;let t=new y(e.state.viewingMode),n=t.options;return n.hud=!1,n.invisibleTerrain=!1,n.backfacesTerrain=!1,n.selectionMode=!1,n.store=2,t}};e([l({readOnly:!0})],C.prototype,`minDemResolution`,null),e([l()],C.prototype,`_queryElevationDependencies`,null),e([l()],C.prototype,`_pointCloudLayers`,null),e([l()],C.prototype,`_view`,null),e([l()],C.prototype,`_maxIntersectionDistance`,null),e([l()],C.prototype,`_intersector`,null),C=e([u(`esri.views.3d.analysis.ElevationProfile.ElevationProfileLineSceneComputation`)],C);function w({intersectOptions:e,maxIntersectionDistance:t,view:n},r){let i=e.graphics,a=!!(i?.include||i?.exclude);for(let e of r)if(e.withinDistance(t)){if(a){let t=b(e,n);if(t!=null&&!v(i,t))continue}return e}return null}export{C as ElevationProfileLineSceneComputation};
2
+ import{__decorate as e}from"tslib";import{dedupeResult as t}from"../../../../core/dedupeResult.js";import{isIterable as n}from"../../../../core/iteratorUtils.js";import{equalsShallow as r}from"../../../../core/lang.js";import{equalsMaybe as i}from"../../../../core/maybe.js";import{notDeepEqual as a}from"../../../../core/object.js";import{watch as o,sync as s}from"../../../../core/reactiveUtils.js";import{getMetersPerVerticalUnitForSR as c}from"../../../../core/units.js";import{property as l,subclass as u}from"../../../../core/accessorSupport/decorators.js";import{set as d}from"../../../../core/libs/gl-matrix-2/math/vec3.js";import{create as f}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{getReferenceEllipsoid as p}from"../../../../geometry/ellipsoidUtils.js";import{create as m,fromPoints as h}from"../../../../geometry/support/ray.js";import{GeometryDescriptor as g}from"../../../../layers/support/GeometryDescriptor.js";import{externalToInternalIntersectOptions as _,testGraphicUidFilter as v}from"../../support/hitTest.js";import{Intersector as y}from"../../webgl-engine/lib/Intersector.js";import{toGraphic as b}from"../../webgl-engine/lib/intersectorUtilsConversions.js";import{getVisibleLayerIds as x}from"../../../analysis/ElevationProfile/elevationProfileLayerUtils.js";import{ElevationProfileLineComputation as S}from"../../../analysis/ElevationProfile/ElevationProfileLineComputation.js";let C=class extends S{constructor(){super(...arguments),this.type=`scene`,this.numSamplesForPreview=50,this.numSamplesPerChunk=25,this._getStableElevationDependencies=t(()=>{let e=this._view;return e?.ready?{view:e,stationary:e.stationary,geometry:this.controller?.analysis.geometry,visibleLayerIds:this._getStableLayerIds(),maxIntersectionDistance:this._maxIntersectionDistance,intersectOptions:this._getStableIntersectOptions(),spatialReference:this._getStableSpatialReference()}:null},r),this._getStableSpatialReference=t(()=>this._view?.spatialReference,i),this._getStableLayerIds=t(()=>x(this._view),r),this._getStableIntersectOptions=t(()=>{let e=this._view;if(!e?.ready)return{};let{include:t,exclude:r}=this.profile;return _(e,{include:t,exclude:[...this._pointCloudLayers,...n(r)?r:r?[r]:[]]})},(e,t)=>!a(e,t)),this._getStablePointCloudLayers=t(()=>{let e=this._view;return e?.ready?e.allLayerViews.toArray().filter(e=>e.layer?.type===`point-cloud`).map(e=>e.layer):[]},r),this._vecA=f(),this._vecB=f(),this._ray=m()}get minDemResolution(){let e=this._view;if(!e?.ready)return null;let t=e.pointsOfInterest?.focus?.worldUnitsPerContentPixel;return t==null?null:t*c(e.spatialReference)}initialize(){let e=()=>this.onInvalidate(this);return this.addHandles([o(()=>this._queryElevationDependencies,e,s),this.controller.onElevationChange(e)])}async queryElevation(e,{noDataValue:t,signal:n}){let r=this._queryElevationDependencies;if(r==null)throw Error(`${this.declaredClass}: no dependencies`);let i=this._intersector;if(i==null)throw Error(`${this.declaredClass}: no view`);let{intersectOptions:a,view:o,spatialReference:s}=r,c=o.renderCoordsHelper,l=o.sceneIntersectionHelper,u=this._vecA,f=this._vecA,p=this._vecB,m=this._ray;if(!s)return{geometry:e,noDataValue:t};let _=await g.fromGeometry(e).project(s,n);if(!_)return{geometry:e,noDataValue:t};let v=_.coordinates,y=v.length;for(let e=0;e<y;++e){let n=v[e];d(p,n.x,n.y,n.z??0),c.toRenderCoords(p,s,p),c.setAltitude(u,2e5,p);let o=h(u,p,m);l.computeIntersection(o,i,!0,a);let g=w(r,i.results.all);g?(g.getIntersectionPoint(f),c.fromRenderCoords(f,f,s),n.z=f[2]):n.z=t}return{geometry:_.export(),noDataValue:t}}get _queryElevationDependencies(){return this._getStableElevationDependencies()}get _pointCloudLayers(){return this._getStablePointCloudLayers()}get _view(){let e=this.controller.view;return e.type===`3d`?e:null}get _maxIntersectionDistance(){let e=this._view;return e?.ready?p(e.spatialReference).radius/e.renderCoordsHelper.unitInMeters:1/0}get _intersector(){let e=this._view;if(!e?.ready)return null;let t=new y(e.state.viewingMode),n=t.options;return n.hud=!1,n.invisibleTerrain=!1,n.backfacesTerrain=!1,n.selectionMode=!1,n.store=2,t}};e([l({readOnly:!0})],C.prototype,`minDemResolution`,null),e([l()],C.prototype,`_queryElevationDependencies`,null),e([l()],C.prototype,`_pointCloudLayers`,null),e([l()],C.prototype,`_view`,null),e([l()],C.prototype,`_maxIntersectionDistance`,null),e([l()],C.prototype,`_intersector`,null),C=e([u(`esri.views.3d.analysis.ElevationProfile.ElevationProfileLineSceneComputation`)],C);function w({intersectOptions:e,maxIntersectionDistance:t,view:n},r){let i=e.graphics,a=!!(i?.include||i?.exclude);for(let e of r)if(e.withinDistance(t)){if(a){let t=b(e,n);if(t!=null&&!v(i,t))continue}return e}return null}export{C as ElevationProfileLineSceneComputation};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import{updatePointsFromFeatureReference as t,getFeatureId as n}from"../../../../analysis/featureReferenceUtils.js";import{createTask as r}from"../../../../core/asyncUtils.js";import{EventedAccessor as i}from"../../../../core/Evented.js";import a from"../../../../core/Handles.js";import{handlesGroup as o,makeHandle as s}from"../../../../core/handleUtils.js";import c from"../../../../core/Logger.js";import{abortMaybe as l}from"../../../../core/maybe.js";import{ignoreAbortErrors as u}from"../../../../core/promiseUtils.js";import{initial as d,on as f}from"../../../../core/reactiveUtils.js";import{property as p,subclass as m}from"../../../../core/accessorSupport/decorators.js";import{copy as h,subtract as g,normalize as _,scale as v,add as y,dist as b,sub as x}from"../../../../core/libs/gl-matrix-2/math/vec3.js";import{create as S}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{UpdatingHandles as C}from"../../../../core/support/UpdatingHandles.js";import w from"../../../../geometry/Point.js";import{projectOrLoad as T}from"../../../../geometry/projectionUtils.js";import{intersectsSegment as E}from"../../../../geometry/support/aaBoundingBox.js";import{empty as D,intersectsSegment as O}from"../../../../geometry/support/aaBoundingRect.js";import{create as k,fromPoints as A}from"../../../../geometry/support/ray.js";import{zValueInAbsoluteHeightMode as j}from"../../../../support/elevationInfoUtils.js";import M from"../LineOfSightAnalysisResult.js";import{LineOfSightComputation as N}from"./LineOfSightComputation.js";import{LineOfSightRayIntersector as P}from"./LineOfSightRayIntersector.js";import{logFailedGeometryProjectionError as F}from"../support/projectionUtils.js";import{projectElevationUpdateExtent as I,containsElevationUpdatePoint as L}from"../../support/elevationUpdateExtentUtils.js";import{toGraphic as R}from"../../webgl-engine/lib/intersectorUtilsConversions.js";import{ImmediateTask as z,TaskPriority as B}from"../../../support/Scheduler.js";let V=class extends i{constructor(e){super(e),this.updateOnCameraChange=!0,this._observerGroundOffsetRenderSpace=0,this._effectiveObserverElevationMode=`absolute-height`,this._observerFeatureId=null,this._updatingHandles=new C,this._frameTask=z,this._computationHandles=new a,this._externalObserverUpdate=!0}initialize(){let e=this.view.resourceController?.scheduler;this._frameTask=e?e.registerTask(B.LINE_OF_SIGHT_TOOL):z,this._intersector=new P({view:this.view}),this.addHandles([this._connectObserver(),this._connectComputations(),this._connectTargets()])}destroy(){this._computationHandles.destroy(),this._computations.removeAll(),this._updatingHandles.destroy()}get updating(){return this._frameTask.updating||this._updatingHandles.updating}get priority(){return this._frameTask.priority}set priority(e){this._frameTask.priority=e}get _computations(){return this.analysisViewData.computations}get _elevationAlignedObserverPositionRenderSpace(){return this.analysisViewData.observerEngineLocation}set _elevationAlignedObserverPositionRenderSpace(e){this.analysisViewData.observerEngineLocation=e}get _screenPixelSize(){return this.view.state.camera.computeScreenPixelSizeAt(this._elevationAlignedObserverPositionRenderSpace)}_computeResult(e){let t=e.computation,{inputPoints:n,computationResult:r}=t,{observerAdjusted:i,targetAdjusted:a}=n,{start:o,end:s}=r;h(o,i),h(s,a),this._canCompute(t)?this._computeIntersection(e):W(e),t.notifyResultChanged(),this.emit(`result-changed`,{target:e.computation.target,result:t.result})}_adjustStartEndPositions(e){let{view:n}=this,{inputPoints:r}=e,{observer:i,target:a,observerAdjusted:o,targetAdjusted:s}=r;h(o,i),h(s,a),t(n,this._intersector.intersector,r);let{observerSurfaceNormal:c,targetSurfaceNormal:l}=r,u=this._screenPixelSize,d=K;c==null?g(d,s,o):h(d,c);let f=u;_(d,d),v(d,d,Math.min(f,1)),y(o,o,d),l==null?g(d,o,s):h(d,l);let p=n.state.camera.computeScreenPixelSizeAt(s);_(d,d),v(d,d,Math.min(p,1)),y(s,s,d)}_computeIntersection({computation:e,interpolationInfo:t}){let{view:n}=this,{sceneIntersectionHelper:r,renderCoordsHelper:i}=n;if(r==null)return;let a=this._intersector.intersector,{computationResult:o,inputPoints:s}=e,{observer:c,target:l}=s,{start:u,end:d}=o,f=A(u,d,q);a.options.store=0,r.intersectToolIntersectorRay(f,a);let p=a.results.min,m=o.intersection,g=K,_=p!=null&&p.getIntersectionPoint(m),v=!0;if(_){h(t.originalIntersection,m),h(t.originalObserver,u),h(t.originalTarget,d),i.fromRenderCoords(m,g,n.spatialReference);let e=1-b(d,l)/b(u,l);v=b(c,m)>=e*b(c,l)}let y=new w(g,n.spatialReference);{let{result:t,target:r}=e;t==null?e.result=new M({target:r,elevationAlignedTargetLocation:e.elevationAlignedTargetLocation,intersectedGraphic:v?null:R(p,n),intersectedLocation:v?null:y,visible:v}):(t.target=r,t.intersectedGraphic=v?null:R(p,n),t.intersectedLocation=v?null:y,t.visible=v)}o.isValid=s.isValid=!0,o.isTargetVisible=v}_canCompute(e){let t=this.analysisViewData.elevationAlignedObserver,{frustum:n}=this.view;if(t==null||e.elevationAlignedTargetLocation==null||n==null)return!1;let{observerAdjusted:r,targetAdjusted:i}=e.inputPoints,a=n.intersectsPoint(r),o=n.intersectsPoint(i);return a&&o}_onObserverPositionChange(e,t,r,i,a){if(this._externalObserverUpdate=a,e==null){this.analysisViewData.elevationAlignedObserver=null,this._observerFeatureId=null;return}if(t==null){F(this.analysis,e.spatialReference,c.getLogger(this)),this.analysisViewData.elevationAlignedObserver=null;return}let o=H(t,r),{absoluteZ:s,elevation:l}=j(t.x,t.y,t.z,this.view.spatialReference,this.view,o),u=t.clone();u.z=s,this._effectiveObserverElevationMode=o.mode,this.analysisViewData.elevationAlignedObserver=u;let d=S();this.view.renderCoordsHelper.toRenderCoords(u,d),this._elevationAlignedObserverPositionRenderSpace=d,this._observerGroundOffsetRenderSpace=s-l,this._observerFeatureId=n(i),this.priority=B.LINE_OF_SIGHT_TOOL_INTERACTIVE}_onObserverRenderSpacePositionChangeForComputation(e,t,n,r,i){let{inputPoints:a}=e;switch(h(a.observer,t),a.observerFeatureId=i,a.observerSurfaceNormal=null,r){case`on-the-ground`:case`relative-to-ground`:{let e=this._intersector.updateFromGroundIntersection(a.observer,n,a.observer);a.observerFeatureId??(a.observerSurfaceNormal=e)}}this._adjustStartEndPositions(e),e.notifyInputPointsChanged(),this.priority=B.LINE_OF_SIGHT_TOOL_INTERACTIVE}_onTargetPositionChange(e,t,r,i,a,o=!0){let s=e.inputPoints;if(o&&(s.isValid=!1),r==null){t!=null&&F(this.analysis,t.spatialReference,c.getLogger(this)),e.elevationAlignedTargetLocation=null,e.notifyInputPointsChanged();return}let l=H(r,i),{absoluteZ:u,elevation:d}=j(r.x,r.y,r.z,this.view.spatialReference,this.view,l),f=r.clone();switch(f.z=u,e.elevationAlignedTargetLocation=f,this.view.renderCoordsHelper.toRenderCoords(e.elevationAlignedTargetLocation,s.target),s.targetFeatureId=n(a),s.targetSurfaceNormal=null,l.mode){case`on-the-ground`:case`relative-to-ground`:{let e=this._intersector.updateFromGroundIntersection(s.target,u-d,s.target);s.targetFeatureId??(s.targetSurfaceNormal=e)}}this._adjustStartEndPositions(e),e.notifyInputPointsChanged(),this.priority=B.LINE_OF_SIGHT_TOOL_INTERACTIVE}_connectComputationToTarget(e){return o([this._updatingHandles.add(()=>({computation:e,targetPosition:e.target.position,targetElevationInfoDependency:U(e.target.elevationInfo),targetFeatureInfo:e.target.feature,projectedTargetPosition:T(e.target.position,this.view.spatialReference)}),({computation:e,targetPosition:t,targetFeatureInfo:n,projectedTargetPosition:r})=>{r.pending==null?this._onTargetPositionChange(e,t,r.geometry,e.target.elevationInfo,n):this._updatingHandles.consumePromise(r.pending)},d)])}_connectComputationToObserver(e){return this._updatingHandles.add(()=>({computation:e,observer:this.analysisViewData.elevationAlignedObserver}),({computation:e})=>{this._externalObserverUpdate&&(e.inputPoints.isValid=!1,e.notifyInputPointsChanged())},d)}_connectComputationToRenderSpaceObserver(e){return this._updatingHandles.add(()=>({computation:e,observer:this._elevationAlignedObserverPositionRenderSpace,observerGroundOffset:this._observerGroundOffsetRenderSpace,observerElevationMode:this._effectiveObserverElevationMode,observerFeatureId:this._observerFeatureId}),({computation:e,observer:t,observerGroundOffset:n,observerElevationMode:r,observerFeatureId:i})=>{this._onObserverRenderSpacePositionChangeForComputation(e,t,n,r,i)},d)}_connectComputationToCamera(e){return this._updatingHandles.add(()=>({camera:this.view.state.camera,isDirty:this._isCameraDirty}),({isDirty:t})=>{!this.updateOnCameraChange||e.inputPoints.isValid&&!t||e.notifyInputPointsChanged()})}_connectComputationToSlicePlane(e){return this._updatingHandles.add(()=>this.view.slice.plane,()=>{e.inputPoints.isValid=!1,e.notifyInputPointsChanged()})}_connectComputationToElevation(e){let t=(n,r)=>{let i=this.analysis.observer,a=e.target,o=null,s=null,c=null,l=null,u=null,d=null;if(i?.position!=null){let e=T(i.position,this.view.spatialReference);if(e.pending!=null){this._updatingHandles.consumePromise(e.pending),e.pending.finally(()=>t(n,r));return}o=e.geometry,s=i.elevationInfo,c=i.feature}if(a.position!=null){let e=T(a.position,this.view.spatialReference);if(e.pending!=null){this._updatingHandles.consumePromise(e.pending),e.pending.finally(()=>t(n,r));return}l=e.geometry,u=a.elevationInfo,d=a.feature}(o!=null||l!=null)&&(I(n,r,J,this.view.spatialReference),o!=null&&L(J,o.x,o.y,this.view.spatialReference)&&this._onObserverPositionChange(i==null?null:i.position,o,s,c,!1),l!=null&&L(J,l.x,l.y,this.view.spatialReference)&&this._onTargetPositionChange(e,a.position,l,u,d,!1),o!=null&&l!=null&&O(J,o,l)&&e.notifyInputPointsChanged())};return this.view.elevationProvider.on(`elevation-change`,({extent:e,spatialReference:n})=>t(e,n))}_connectComputationToTask(e){let t=null,n={computation:e,interpolationInfo:{originalIntersection:S(),originalObserver:S(),originalTarget:S()}};return o([this._updatingHandles.add(()=>e.inputPoints,()=>{t=l(t),t=r(async e=>{await u(this._frameTask.schedule(()=>this._computeResult(n),e))})},{initial:!0,equals:()=>!1}),s(()=>t=l(t))])}_connectComputationToContent(e){return f(()=>this.view.pointsOfInterest?.contentGeometryUpdates.events,`request-update`,t=>{let n=t?.renderBounds,{observerAdjusted:r,targetAdjusted:i}=e.inputPoints;(n==null||E(n,r,i))&&(e.inputPoints.isValid=!1,e.notifyInputPointsChanged())})}_connectComputation(e){let t=this._computationHandles;t.has(e)||t.add([this._connectComputationToTarget(e),this._connectComputationToObserver(e),this._connectComputationToRenderSpaceObserver(e),this._connectComputationToCamera(e),this._connectComputationToSlicePlane(e),this._connectComputationToElevation(e),this._connectComputationToTask(e),this._connectComputationToContent(e)],e)}_disconnectComputation(e){this._computationHandles.remove(e)}_onComputationCollectionChange({added:e,removed:t}){for(let e of t)this._disconnectComputation(e);for(let t of e)this._connectComputation(t)}_onTargetCollectionChange({added:e,removed:t}){for(let e of t)this._removeTarget(e);for(let t of e)this._addTarget(t)}_onCursorTargetChange(e,t){t!=null&&this._removeTarget(t),e!=null&&this._addTarget(e)}_addTarget(e){this._computations.some(t=>t.target===e)||this._computations.add(new N({target:e}))}_removeTarget(e){let t=this._computations.findIndex(t=>t.target===e);this._computations.removeAt(t)}_connectObserver(){return o([this._updatingHandles.add(()=>({observerPosition:this.analysis.observer==null?null:this.analysis.observer.position,projectedObserverPosition:T(this.analysis.observer==null?null:this.analysis.observer.position,this.view.spatialReference),observerElevationInfoDependency:U(this.analysis.observer?.elevationInfo),observerFeatureInfo:this.analysis.observer==null?null:this.analysis.observer.feature}),({observerPosition:e,projectedObserverPosition:t,observerFeatureInfo:n})=>{t.pending==null?this._onObserverPositionChange(e,t.geometry,this.analysis.observer?.elevationInfo,n,!0):this._updatingHandles.consumePromise(t.pending)},d)])}_connectComputations(){return this._updatingHandles.addOnCollectionChange(()=>this._computations,e=>this._onComputationCollectionChange(e),{initial:!0,final:!0})}_connectTargets(){return o([this._updatingHandles.addOnCollectionChange(()=>this.analysis.targets,e=>this._onTargetCollectionChange(e),{initial:!0,final:!0}),this._updatingHandles.add(()=>this.analysisViewData.cursorTarget,(e,t)=>{this._onCursorTargetChange(e,t)})])}get _isCameraDirty(){let e=this.analysisViewData.elevationAlignedObserver,{view:t}=this,{renderCoordsHelper:n}=t;if(e==null||n==null)return!1;let r=K;n.toRenderCoords(e,r);let i=t.state.camera.computeScreenPixelSizeAt(r);return Math.abs((i-this._screenPixelSize)/this._screenPixelSize)>G}};e([p({constructOnly:!0})],V.prototype,`analysis`,void 0),e([p({constructOnly:!0})],V.prototype,`analysisViewData`,void 0),e([p({constructOnly:!0})],V.prototype,`view`,void 0),e([p()],V.prototype,`updating`,null),e([p()],V.prototype,`priority`,null),e([p()],V.prototype,`updateOnCameraChange`,void 0),e([p()],V.prototype,`_computations`,null),e([p()],V.prototype,`_elevationAlignedObserverPositionRenderSpace`,null),e([p()],V.prototype,`_observerGroundOffsetRenderSpace`,void 0),e([p()],V.prototype,`_effectiveObserverElevationMode`,void 0),e([p()],V.prototype,`_observerFeatureId`,void 0),e([p()],V.prototype,`_screenPixelSize`,null),e([p({readOnly:!0})],V.prototype,`_updatingHandles`,void 0),e([p()],V.prototype,`_frameTask`,void 0),e([p()],V.prototype,`_isCameraDirty`,null),V=e([m(`esri.views.3d.analysis.LineOfSight.LineOfSightController`)],V);function H(e,t){return e.hasZ?t??{mode:`absolute-height`,offset:0}:{mode:`on-the-ground`,offset:0}}function U(e){return{mode:e?.mode,offset:e?.offset,unit:e?.unit}}function W({computation:e,interpolationInfo:t}){let{computationResult:n,inputPoints:r}=e,{start:i,end:a,intersection:o}=n,{originalIntersection:s,originalObserver:c,originalTarget:l}=t;if(h(o,s),r.isValid){let e=K,t=b(c,s)/b(c,l);x(e,i,c),v(e,e,1-t),y(o,o,e),x(e,a,l),v(e,e,t),y(o,o,e),n.isValid=!0}else e.result=null,n.isValid=!1,n.isTargetVisible=!1}const G=.1,K=S(),q=k(),J=D();export{V as LineOfSightController};
2
+ import{__decorate as e}from"tslib";import{updatePointsFromFeatureReference as t,getFeatureId as n}from"../../../../analysis/featureReferenceUtils.js";import{createTask as r}from"../../../../core/asyncUtils.js";import{EventedAccessor as i}from"../../../../core/Evented.js";import a from"../../../../core/Handles.js";import{handlesGroup as o,makeHandle as s}from"../../../../core/handleUtils.js";import c from"../../../../core/Logger.js";import{abortMaybe as l}from"../../../../core/maybe.js";import{ignoreAbortErrors as u}from"../../../../core/promiseUtils.js";import{initial as d,on as f}from"../../../../core/reactiveUtils.js";import{property as p,subclass as m}from"../../../../core/accessorSupport/decorators.js";import{copy as h,subtract as g,normalize as _,scale as v,add as y,dist as b,sub as x}from"../../../../core/libs/gl-matrix-2/math/vec3.js";import{create as S}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{UpdatingHandles as C}from"../../../../core/support/UpdatingHandles.js";import w from"../../../../geometry/Point.js";import{projectOrLoad as T}from"../../../../geometry/projectionUtils.js";import{intersectsSegment as E}from"../../../../geometry/support/aaBoundingBox.js";import{empty as D,intersectsSegment as O}from"../../../../geometry/support/aaBoundingRect.js";import{create as k,fromPoints as A}from"../../../../geometry/support/ray.js";import{zValueInAbsoluteHeightMode as j}from"../../../../support/elevationInfoUtils.js";import M from"../LineOfSightAnalysisResult.js";import{LineOfSightComputation as N}from"./LineOfSightComputation.js";import{LineOfSightRayIntersector as P}from"./LineOfSightRayIntersector.js";import{logFailedGeometryProjectionError as F}from"../support/projectionUtils.js";import{projectElevationUpdateExtent as I,containsElevationUpdatePoint as L}from"../../support/elevationUpdateExtentUtils.js";import{toGraphic as R}from"../../webgl-engine/lib/intersectorUtilsConversions.js";import{ImmediateTask as z,TaskPriority as B}from"../../../support/Scheduler.js";let V=class extends i{constructor(e){super(e),this.updateOnCameraChange=!0,this._observerGroundOffsetRenderSpace=0,this._effectiveObserverElevationMode=`absolute-height`,this._observerFeatureId=null,this._updatingHandles=new C,this._frameTask=z,this._computationHandles=new a,this._externalObserverUpdate=!0}initialize(){let e=this.view.resourceController?.scheduler;this._frameTask=e?e.registerTask(B.LINE_OF_SIGHT_TOOL):z,this._intersector=new P({view:this.view}),this.addHandles([this._connectObserver(),this._connectComputations(),this._connectTargets()])}destroy(){this._computationHandles.destroy(),this._computations.removeAll(),this._updatingHandles.destroy()}get updating(){return this._frameTask.updating||this._updatingHandles.updating}get priority(){return this._frameTask.priority}set priority(e){this._frameTask.priority=e}get _computations(){return this.analysisViewData.computations}get _elevationAlignedObserverPositionRenderSpace(){return this.analysisViewData.observerEngineLocation}set _elevationAlignedObserverPositionRenderSpace(e){this.analysisViewData.observerEngineLocation=e}get _screenPixelSize(){return this.view.state.camera.computeScreenPixelSizeAt(this._elevationAlignedObserverPositionRenderSpace)}_computeResult(e){let t=e.computation,{inputPoints:n,computationResult:r}=t,{observerAdjusted:i,targetAdjusted:a}=n,{start:o,end:s}=r;h(o,i),h(s,a),this._canCompute(t)?this._computeIntersection(e):W(e),t.notifyResultChanged(),this.emit(`result-changed`,{target:e.computation.target,result:t.result})}_adjustStartEndPositions(e){let{view:n}=this,{inputPoints:r}=e,{observer:i,target:a,observerAdjusted:o,targetAdjusted:s}=r;h(o,i),h(s,a),t(n,this._intersector.intersector,r);let{observerSurfaceNormal:c,targetSurfaceNormal:l}=r,u=this._screenPixelSize,d=K;c==null?g(d,s,o):h(d,c);let f=u;_(d,d),v(d,d,Math.min(f,1)),y(o,o,d),l==null?g(d,o,s):h(d,l);let p=n.state.camera.computeScreenPixelSizeAt(s);_(d,d),v(d,d,Math.min(p,1)),y(s,s,d)}_computeIntersection({computation:e,interpolationInfo:t}){let{view:n}=this,{sceneIntersectionHelper:r,renderCoordsHelper:i}=n;if(r==null)return;let a=this._intersector.intersector,{computationResult:o,inputPoints:s}=e,{observer:c,target:l}=s,{start:u,end:d}=o,f=A(u,d,q);a.options.store=0,r.intersectToolIntersectorRay(f,a);let p=a.results.min,m=o.intersection,g=K,_=p!=null&&p.getIntersectionPoint(m),v=!0;if(_){h(t.originalIntersection,m),h(t.originalObserver,u),h(t.originalTarget,d),i.fromRenderCoords(m,g,n.spatialReference);let e=1-b(d,l)/b(u,l);v=b(c,m)>=e*b(c,l)}let y=new w(g,n.spatialReference);{let{result:t,target:r}=e;t==null?e.result=new M({target:r,elevationAlignedTargetLocation:e.elevationAlignedTargetLocation,intersectedGraphic:v?null:R(p,n),intersectedLocation:v?null:y,visible:v}):(t.target=r,t.intersectedGraphic=v?null:R(p,n),t.intersectedLocation=v?null:y,t.visible=v)}o.isValid=s.isValid=!0,o.isTargetVisible=v}_canCompute(e){let t=this.analysisViewData.elevationAlignedObserver,{frustum:n}=this.view;if(t==null||e.elevationAlignedTargetLocation==null||n==null)return!1;let{observerAdjusted:r,targetAdjusted:i}=e.inputPoints,a=n.intersectsPoint(r),o=n.intersectsPoint(i);return a&&o}_onObserverPositionChange(e,t,r,i,a){if(this._externalObserverUpdate=a,e==null){this.analysisViewData.elevationAlignedObserver=null,this._observerFeatureId=null;return}if(t==null){F(this.analysis,e.spatialReference,c.getLogger(this)),this.analysisViewData.elevationAlignedObserver=null;return}let o=H(t,r),{absoluteZ:s,elevation:l}=j(t.x,t.y,t.z,this.view.spatialReference,this.view,o),u=t.clone();u.z=s,this._effectiveObserverElevationMode=o.mode,this.analysisViewData.elevationAlignedObserver=u;let d=S();this.view.renderCoordsHelper.toRenderCoords(u,d),this._elevationAlignedObserverPositionRenderSpace=d,this._observerGroundOffsetRenderSpace=s-l,this._observerFeatureId=n(i),this.priority=B.LINE_OF_SIGHT_TOOL_INTERACTIVE}_onObserverRenderSpacePositionChangeForComputation(e,t,n,r,i){let{inputPoints:a}=e;switch(h(a.observer,t),a.observerFeatureId=i,a.observerSurfaceNormal=null,r){case`on-the-ground`:case`relative-to-ground`:{let e=this._intersector.updateFromGroundIntersection(a.observer,n,a.observer);a.observerFeatureId??(a.observerSurfaceNormal=e)}}this._adjustStartEndPositions(e),e.notifyInputPointsChanged(),this.priority=B.LINE_OF_SIGHT_TOOL_INTERACTIVE}_onTargetPositionChange(e,t,r,i,a,o=!0){let s=e.inputPoints;if(o&&(s.isValid=!1),r==null){t!=null&&F(this.analysis,t.spatialReference,c.getLogger(this)),e.elevationAlignedTargetLocation=null,e.notifyInputPointsChanged();return}let l=H(r,i),{absoluteZ:u,elevation:d}=j(r.x,r.y,r.z,this.view.spatialReference,this.view,l),f=r.clone();switch(f.z=u,e.elevationAlignedTargetLocation=f,this.view.renderCoordsHelper.toRenderCoords(e.elevationAlignedTargetLocation,s.target),s.targetFeatureId=n(a),s.targetSurfaceNormal=null,l.mode){case`on-the-ground`:case`relative-to-ground`:{let e=this._intersector.updateFromGroundIntersection(s.target,u-d,s.target);s.targetFeatureId??(s.targetSurfaceNormal=e)}}this._adjustStartEndPositions(e),e.notifyInputPointsChanged(),this.priority=B.LINE_OF_SIGHT_TOOL_INTERACTIVE}_connectComputationToTarget(e){return o([this._updatingHandles.add(()=>({computation:e,targetPosition:e.target.position,targetElevationInfoDependency:U(e.target.elevationInfo),targetFeatureInfo:e.target.feature,projectedTargetPosition:T(e.target.position,this.view.spatialReference)}),({computation:e,targetPosition:t,targetFeatureInfo:n,projectedTargetPosition:r})=>{r.pending==null?this._onTargetPositionChange(e,t,r.geometry,e.target.elevationInfo,n):this._updatingHandles.consumePromise(r.pending)},d)])}_connectComputationToObserver(e){return this._updatingHandles.add(()=>({computation:e,observer:this.analysisViewData.elevationAlignedObserver}),({computation:e})=>{this._externalObserverUpdate&&(e.inputPoints.isValid=!1,e.notifyInputPointsChanged())},d)}_connectComputationToRenderSpaceObserver(e){return this._updatingHandles.add(()=>({computation:e,observer:this._elevationAlignedObserverPositionRenderSpace,observerGroundOffset:this._observerGroundOffsetRenderSpace,observerElevationMode:this._effectiveObserverElevationMode,observerFeatureId:this._observerFeatureId}),({computation:e,observer:t,observerGroundOffset:n,observerElevationMode:r,observerFeatureId:i})=>{this._onObserverRenderSpacePositionChangeForComputation(e,t,n,r,i)},d)}_connectComputationToCamera(e){return this._updatingHandles.add(()=>({camera:this.view.state.camera,isDirty:this._isCameraDirty}),({isDirty:t})=>{!this.updateOnCameraChange||e.inputPoints.isValid&&!t||e.notifyInputPointsChanged()})}_connectComputationToSlicePlane(e){return this._updatingHandles.add(()=>this.view.slice.plane,()=>{e.inputPoints.isValid=!1,e.notifyInputPointsChanged()})}_connectComputationToElevation(e){let t=(n,r)=>{let i=this.analysis.observer,a=e.target,o=null,s=null,c=null,l=null,u=null,d=null;if(i?.position!=null){let e=T(i.position,this.view.spatialReference);if(e.pending!=null){this._updatingHandles.consumePromise(e.pending),e.pending.finally(()=>t(n,r));return}o=e.geometry,s=i.elevationInfo,c=i.feature}if(a.position!=null){let e=T(a.position,this.view.spatialReference);if(e.pending!=null){this._updatingHandles.consumePromise(e.pending),e.pending.finally(()=>t(n,r));return}l=e.geometry,u=a.elevationInfo,d=a.feature}(o!=null||l!=null)&&(I(n,r,J,this.view.spatialReference),o!=null&&L(J,o.x,o.y,this.view.spatialReference)&&this._onObserverPositionChange(i==null?null:i.position,o,s,c,!1),l!=null&&L(J,l.x,l.y,this.view.spatialReference)&&this._onTargetPositionChange(e,a.position,l,u,d,!1),o!=null&&l!=null&&O(J,o,l)&&e.notifyInputPointsChanged())};return this.view.elevationProvider.on(`elevation-change`,({extent:e,spatialReference:n})=>t(e,n))}_connectComputationToTask(e){let t=null,n={computation:e,interpolationInfo:{originalIntersection:S(),originalObserver:S(),originalTarget:S()}};return o([this._updatingHandles.add(()=>e.inputPoints,()=>{t=l(t),t=r(async e=>{await u(this._frameTask.schedule(()=>this._computeResult(n),e))})},{initial:!0,equals:()=>!1}),s(()=>t=l(t))])}_connectComputationToContent(e){return f(()=>this.view.pointsOfInterest?.contentGeometryUpdates.events,`request-update`,t=>{let n=t?.renderBounds,{observerAdjusted:r,targetAdjusted:i}=e.inputPoints;(n==null||E(n,r,i))&&(e.inputPoints.isValid=!1,e.notifyInputPointsChanged())})}_connectComputation(e){let t=this._computationHandles;t.has(e)||t.add([this._connectComputationToTarget(e),this._connectComputationToObserver(e),this._connectComputationToRenderSpaceObserver(e),this._connectComputationToCamera(e),this._connectComputationToSlicePlane(e),this._connectComputationToElevation(e),this._connectComputationToTask(e),this._connectComputationToContent(e)],e)}_disconnectComputation(e){this._computationHandles.remove(e)}_onComputationCollectionChange({added:e,removed:t}){for(let e of t)this._disconnectComputation(e);for(let t of e)this._connectComputation(t)}_onTargetCollectionChange({added:e,removed:t}){for(let e of t)this._removeTarget(e);for(let t of e)this._addTarget(t)}_onCursorTargetChange(e,t){t!=null&&this._removeTarget(t),e!=null&&this._addTarget(e)}_addTarget(e){this._computations.some(t=>t.target===e)||this._computations.add(new N({target:e}))}_removeTarget(e){let t=this._computations.findIndex(t=>t.target===e);this._computations.removeAt(t)}_connectObserver(){return o([this._updatingHandles.add(()=>({observerPosition:this.analysis.observer==null?null:this.analysis.observer.position,projectedObserverPosition:T(this.analysis.observer==null?null:this.analysis.observer.position,this.view.spatialReference),observerElevationInfoDependency:U(this.analysis.observer?.elevationInfo),observerFeatureInfo:this.analysis.observer==null?null:this.analysis.observer.feature}),({observerPosition:e,projectedObserverPosition:t,observerFeatureInfo:n})=>{t.pending==null?this._onObserverPositionChange(e,t.geometry,this.analysis.observer?.elevationInfo,n,!0):this._updatingHandles.consumePromise(t.pending)},d)])}_connectComputations(){return this._updatingHandles.addOnCollectionChange(()=>this._computations,e=>this._onComputationCollectionChange(e),{initial:!0,final:!0})}_connectTargets(){return o([this._updatingHandles.addOnCollectionChange(()=>this.analysis.targets,e=>this._onTargetCollectionChange(e),{initial:!0,final:!0}),this._updatingHandles.add(()=>this.analysisViewData.cursorTarget,(e,t)=>{this._onCursorTargetChange(e,t)})])}get _isCameraDirty(){let e=this.analysisViewData.elevationAlignedObserver,{view:t}=this,{renderCoordsHelper:n}=t;if(e==null)return!1;let r=K;n.toRenderCoords(e,r);let i=t.state.camera.computeScreenPixelSizeAt(r);return Math.abs((i-this._screenPixelSize)/this._screenPixelSize)>G}};e([p({constructOnly:!0})],V.prototype,`analysis`,void 0),e([p({constructOnly:!0})],V.prototype,`analysisViewData`,void 0),e([p({constructOnly:!0})],V.prototype,`view`,void 0),e([p()],V.prototype,`updating`,null),e([p()],V.prototype,`priority`,null),e([p()],V.prototype,`updateOnCameraChange`,void 0),e([p()],V.prototype,`_computations`,null),e([p()],V.prototype,`_elevationAlignedObserverPositionRenderSpace`,null),e([p()],V.prototype,`_observerGroundOffsetRenderSpace`,void 0),e([p()],V.prototype,`_effectiveObserverElevationMode`,void 0),e([p()],V.prototype,`_observerFeatureId`,void 0),e([p()],V.prototype,`_screenPixelSize`,null),e([p({readOnly:!0})],V.prototype,`_updatingHandles`,void 0),e([p()],V.prototype,`_frameTask`,void 0),e([p()],V.prototype,`_isCameraDirty`,null),V=e([m(`esri.views.3d.analysis.LineOfSight.LineOfSightController`)],V);function H(e,t){return e.hasZ?t??{mode:`absolute-height`,offset:0}:{mode:`on-the-ground`,offset:0}}function U(e){return{mode:e?.mode,offset:e?.offset,unit:e?.unit}}function W({computation:e,interpolationInfo:t}){let{computationResult:n,inputPoints:r}=e,{start:i,end:a,intersection:o}=n,{originalIntersection:s,originalObserver:c,originalTarget:l}=t;if(h(o,s),r.isValid){let e=K,t=b(c,s)/b(c,l);x(e,i,c),v(e,e,1-t),y(o,o,e),x(e,a,l),v(e,e,t),y(o,o,e),n.isValid=!0}else e.result=null,n.isValid=!1,n.isTargetVisible=!1}const G=.1,K=S(),q=k(),J=D();export{V as LineOfSightController};
@@ -0,0 +1,40 @@
1
+ import type Error from "../../../../core/Error.js";
2
+
3
+ /**
4
+ * The shadow cast error name.
5
+ *
6
+ * @since 6.0
7
+ */
8
+ export type ShadowCastErrorName = "outside-daylight" | "split-daylight" | "no-daylight" | "unavailable" | "invalid";
9
+
10
+ /**
11
+ * Describes why a [ShadowCastAnalysisView3D](https://developers.arcgis.com/javascript/latest/references/core/views/3d/analysis/ShadowCastAnalysisView3D/) cannot display the selected time range
12
+ * at the current camera location.
13
+ *
14
+ * The error names are:
15
+ *
16
+ * - "outside-daylight": Daylight is expected, but the selected range includes nighttime.
17
+ * - "split-daylight": Daylight crosses midnight in the selected time zone, and the selected range includes nighttime.
18
+ * - "no-daylight": No daylight is expected at the camera location on the selected date.
19
+ * - "unavailable": The camera's geographic reference position is not available yet.
20
+ * - "invalid": The inputs or daylight calculation could not be resolved.
21
+ *
22
+ * @since 6.0
23
+ * @see [ShadowCastAnalysisView3D.error](https://developers.arcgis.com/javascript/latest/references/core/views/3d/analysis/ShadowCastAnalysisView3D/#error)
24
+ */
25
+ export default class ShadowCastError extends Error {
26
+ /** @since 6.0 */
27
+ constructor(name: ShadowCastErrorName, message: string);
28
+ /**
29
+ * The name of the shadow cast error.
30
+ *
31
+ * @default "invalid"
32
+ * @since 6.0
33
+ * @example
34
+ * someAsyncFunction.then(callback)
35
+ * .catch(function(error){
36
+ * console.log("Error name: ", error.name);
37
+ * });
38
+ */
39
+ readonly name: ShadowCastErrorName;
40
+ }
@@ -0,0 +1,2 @@
1
+ /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
+ import e from"../../../../core/Error.js";class t extends e{constructor(e,t){super(e,t),this.name=`invalid`,this.name=e}}export{t as default};
@@ -0,0 +1,2 @@
1
+ /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
+ import{convertTime as e,offsetDateUTC as t,createZonedDate as n}from"../../../../core/timeUtils.js";import{S as r}from"../../../../chunks/SunCalc.js";function i({date:e,timeZone:t,utcOffset:n,position:i}){if(!i)return{state:`unavailable`};let s=new Date(e);s.setDate(s.getDate()+1);let c=a(e,0,t,n)?.getTime()??NaN,l=a(s,0,t,n)?.getTime()??NaN,[u,d]=i;if(![c,l,u,d].every(Number.isFinite)||l<=c||Math.abs(d)>90)return{state:`invalid`};let f=[-2,-1,0,1,2].map(e=>r.getTimes(new Date((c+l)/2+e*o),d,u)),p=[];for(let e=0;e<f.length-1;e++){let t=f[e];if(t.polarException===r.PolarException.POLAR_NIGHT)continue;let n=t.polarException===r.PolarException.MIDNIGHT_SUN,i=n?t.nadir.getTime():t.sunrise.getTime(),a=n?f[e+1].nadir.getTime():t.sunset.getTime();if(![i,a].every(Number.isFinite)||a<i)return{state:`invalid`};let o=Math.max(c,i),s=Math.min(l,a);if(s<o)continue;let u=p.at(-1);u&&o<=u.end+1?u.end=Math.max(u.end,s):p.push({start:o,end:s})}return{state:`ready`,intervals:p}}function a(r,i,a,o){if(a==null){let n=t(r,-r.getTimezoneOffset(),`minutes`);return t(n,i-e(o,`hours`,`milliseconds`))}return n({year:r.getFullYear(),month:r.getMonth()+1,day:r.getDate()},e(i,`milliseconds`,`minutes`),a)}const o=e(1,`days`,`milliseconds`);export{a as getDateTimeUTC,i as getSunlightIntervals};
@@ -1,5 +1,6 @@
1
1
  import type ShadowCastAnalysis from "../../../analysis/ShadowCastAnalysis.js";
2
2
  import type AnalysisView3D from "./AnalysisView3D.js";
3
+ import type ShadowCastError from "./ShadowCast/ShadowCastError.js";
3
4
  import type { ScreenPoint } from "../../../core/types.js";
4
5
 
5
6
  /**
@@ -41,6 +42,18 @@ export default abstract class ShadowCastAnalysisView3D extends AnalysisView3D {
41
42
  * @since 5.0
42
43
  */
43
44
  get analysis(): ShadowCastAnalysis;
45
+ /**
46
+ * The reason the selected time range cannot be displayed at the current camera location.
47
+ * Applications can use the error's [ShadowCastError.name](https://developers.arcgis.com/javascript/latest/references/core/views/3d/analysis/ShadowCast/ShadowCastError/#name) to give feedback
48
+ * to the user. See [ShadowCastError](https://developers.arcgis.com/javascript/latest/references/core/views/3d/analysis/ShadowCast/ShadowCastError/) for the possible error names.
49
+ *
50
+ * When an error is present, the visualization is hidden.
51
+ * The error clears automatically when its cause is resolved.
52
+ * A `null` error does not override explicit or inherited [visibility](https://developers.arcgis.com/javascript/latest/references/core/views/3d/analysis/ShadowCastAnalysisView3D/#visible).
53
+ *
54
+ * @since 6.0
55
+ */
56
+ get error(): ShadowCastError | null | undefined;
44
57
  /**
45
58
  * Displays the shadow or sunlight tooltip attached to the cursor. Set to `false` to disable it.
46
59
  *
@@ -66,10 +79,12 @@ export default abstract class ShadowCastAnalysisView3D extends AnalysisView3D {
66
79
  * Only one [ShadowCastAnalysis](https://developers.arcgis.com/javascript/latest/references/core/analysis/ShadowCastAnalysis/) at a time can be visible in a [SceneView](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/).
67
80
  * When a shadow cast analysis is made visible by setting this property to `true`, all other shadow cast analysis
68
81
  * views are automatically hidden.
82
+ * Invalid time ranges hide the analysis.
69
83
  *
70
84
  * @since 5.0
71
85
  */
72
- accessor visible: boolean;
86
+ get visible(): boolean;
87
+ set visible(value: boolean | null | undefined);
73
88
  /**
74
89
  * Returns the duration (in milliseconds) for a certain point on the screen based on the current analysis settings.
75
90
  * By default, this method returns the time spent in shadow. When