@arcgis/core 5.2.0-next.126 → 5.2.0-next.128

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 (234) hide show
  1. package/WebScene.js +1 -1
  2. package/applications/Components/basemapToggleUtils.d.ts +53 -0
  3. package/applications/Components/basemapToggleUtils.js +2 -0
  4. package/applications/SceneViewer/sceneViewerUtils.d.ts +14 -1
  5. package/applications/SceneViewer/sceneViewerUtils.js +1 -1
  6. package/applications/WebEditor/sketchUtils.js +1 -1
  7. package/arcgisGlobal.d.ts +1 -0
  8. package/assets/esri/core/libs/libtess/libtess-f32.wasm +0 -0
  9. package/assets/esri/core/libs/libtess/libtess-f64.wasm +0 -0
  10. package/assets/esri/core/workers/RemoteClient.js +1 -1
  11. package/assets/esri/core/workers/chunks/{e35eb93c0fb1f6de8db0.js → 00d9e41deecf5828975c.js} +1 -1
  12. package/assets/esri/core/workers/chunks/038d2b80d96237c25b6f.js +1 -0
  13. package/assets/esri/core/workers/chunks/{ab8a1140bf31f46f8ebf.js → 1262918b2161d79851c0.js} +1 -1
  14. package/assets/esri/core/workers/chunks/{d3ef23923424ad8c5048.js → 1c2723f9630e7d597843.js} +1 -1
  15. package/assets/esri/core/workers/chunks/{9ca98fffd43e63d5ade3.js → 1c33aa349beea9a3792f.js} +1 -1
  16. package/assets/esri/core/workers/chunks/{54eeb4cac4fa092359ab.js → 2226c20c38e20713bcb5.js} +2 -2
  17. package/assets/esri/core/workers/chunks/{54eeb4cac4fa092359ab.js.LICENSE.txt → 2226c20c38e20713bcb5.js.LICENSE.txt} +2 -2
  18. package/assets/esri/core/workers/chunks/{4d18451e0ea6ca54101a.js → 2ebad7e588b26e74cefe.js} +1 -1
  19. package/assets/esri/core/workers/chunks/{a8258636096416c837a2.js → 3b7dff15a0058ea29886.js} +1 -1
  20. package/assets/esri/core/workers/chunks/{4716693eca44e8f89f5c.js → 3bf56c33876ba56c4b21.js} +1 -1
  21. package/assets/esri/core/workers/chunks/3c6ee445e49da0076ac1.js +1 -0
  22. package/assets/esri/core/workers/chunks/3f045f09ac95e7f22a97.js +1 -0
  23. package/assets/esri/core/workers/chunks/500f6d6f0ffa235cae85.js +1 -0
  24. package/assets/esri/core/workers/chunks/{56acda1eed3a013430e2.js → 58fb92775d668cfd295c.js} +1 -1
  25. package/assets/esri/core/workers/chunks/{e6637f9176566382ed3e.js → 606cca69eaea84bfcdc6.js} +1 -1
  26. package/assets/esri/core/workers/chunks/{fdbda3d2afea25142b86.js → 6267a1fe1603daa399b4.js} +1 -1
  27. package/assets/esri/core/workers/chunks/{b013b70e40dfb6ce013e.js → 668ec0bdfb2095e90c9e.js} +1 -1
  28. package/assets/esri/core/workers/chunks/{806f96ad09e882be41af.js → 67fd2cdb2e6834bfa710.js} +1 -1
  29. package/assets/esri/core/workers/chunks/{5fe5ef5ccf480634d159.js → 75294f515c7f8393181c.js} +1 -1
  30. package/assets/esri/core/workers/chunks/75879ae88fd87b089a87.js +1 -0
  31. package/assets/esri/core/workers/chunks/761ea719ec1b4d562db2.js +1 -0
  32. package/assets/esri/core/workers/chunks/{24673aac70d6c949b6fa.js → 86d7a3ae672a51b75fcc.js} +1 -1
  33. package/assets/esri/core/workers/chunks/{30604a29df320d7a4c6b.js → 88e11b645a1361f1bdbe.js} +1 -1
  34. package/assets/esri/core/workers/chunks/89dad6c1bfd81e4d7f8e.js +1 -0
  35. package/assets/esri/core/workers/chunks/{8daed13400d9e63e65ae.js → 8a842cde240aef12e417.js} +1 -1
  36. package/assets/esri/core/workers/chunks/{c692e583e87af58f6d91.js → 8b0d6205ceeec1ab446f.js} +1 -1
  37. package/assets/esri/core/workers/chunks/{57ab87e70ef85b9405f9.js → 8cb216404a6254bc695c.js} +1 -0
  38. package/assets/esri/core/workers/chunks/92509dd25996c6390a31.js +1 -0
  39. package/assets/esri/core/workers/chunks/9ccc2c8f7416943cc373.js +29 -0
  40. package/assets/esri/core/workers/chunks/a0a9c41400ae98df1912.js +1 -0
  41. package/assets/esri/core/workers/chunks/{b96358d475dc98034aa4.js → a15ed056e7493ddf3b4c.js} +1 -1
  42. package/assets/esri/core/workers/chunks/{25e212fe9a2ea37c9e81.js → a3a33ffa34f4d645ddfe.js} +1 -1
  43. package/assets/esri/core/workers/chunks/af0704494398f33aa315.js +1 -0
  44. package/assets/esri/core/workers/chunks/{ce1ccf9ec90b786591e5.js → b396c4b4bb144200acc7.js} +1 -1
  45. package/assets/esri/core/workers/chunks/{97602019a1ccad22a03a.js → bbfb80a6983574007ce5.js} +1 -1
  46. package/assets/esri/core/workers/chunks/{d5f72670634e73c0b53a.js → bcf2e5cf6b9c6d0442bb.js} +1 -1
  47. package/assets/esri/core/workers/chunks/{17218d714cb07b607c2f.js → c35e9dee87937f483a3d.js} +1 -1
  48. package/assets/esri/core/workers/chunks/{85739ed6af0f0a3cb302.js → c94bdfed831c775e04c0.js} +1 -1
  49. package/assets/esri/core/workers/chunks/{2e3fd81653dc0d86456c.js → cfeba0ffb7fdc2a9af05.js} +1 -1
  50. package/assets/esri/core/workers/chunks/d1187ad6cc4959683819.js +1 -0
  51. package/assets/esri/core/workers/chunks/d94a2b3b2ef49af9c2e3.js +1 -0
  52. package/assets/esri/core/workers/chunks/{cb7cb7d57c4e7f76600f.js → dc92710a8fdfb9135e55.js} +1 -1
  53. package/assets/esri/core/workers/chunks/ec187933b42fe65594b7.js +1 -0
  54. package/assets/esri/core/workers/chunks/eec5a93dbc258a90b6de.js +1 -0
  55. package/assets/esri/core/workers/chunks/{e1ae83ff3e0225708d4d.js → f479b4a4cee4bb2e046c.js} +1 -1
  56. package/assets/esri/core/workers/chunks/{78abd6c42f39e6f6ffbb.js → f983296b6f4a62a911eb.js} +1 -1
  57. package/assets/esri/images/portal/gaussiansplatlayer16.png +0 -0
  58. package/assets/esri/images/portal/knowledgegraphlayer16.png +0 -0
  59. package/assets/esri/images/portal/propresentation16.png +0 -0
  60. package/assets/esri/images/portal/urbanproject16.png +0 -0
  61. package/assets/esri/images/support/loading-throb.gif +0 -0
  62. package/assets/esri/layers/raster/formats/lerc-wasm.wasm +0 -0
  63. package/assets/esri/themes/base/icons/style.scss +0 -0
  64. package/assets/esri/themes/base/icons/variables.scss +0 -0
  65. package/assets/esri/themes/base/images/files/archive-32.svg +0 -0
  66. package/assets/esri/themes/base/images/files/cad-32.svg +0 -0
  67. package/assets/esri/themes/base/images/files/code-32.svg +0 -0
  68. package/assets/esri/themes/base/images/files/csv-32.svg +0 -0
  69. package/assets/esri/themes/base/images/files/excel-32.svg +0 -0
  70. package/assets/esri/themes/base/images/files/generic-32.svg +0 -0
  71. package/assets/esri/themes/base/images/files/gpx-32.svg +0 -0
  72. package/assets/esri/themes/base/images/files/image-32.svg +0 -0
  73. package/assets/esri/themes/base/images/files/pdf-32.svg +0 -0
  74. package/assets/esri/themes/base/images/files/report-32.svg +0 -0
  75. package/assets/esri/themes/base/images/files/sound-32.svg +0 -0
  76. package/assets/esri/themes/base/images/files/text-32.svg +0 -0
  77. package/assets/esri/themes/base/images/files/video-32.svg +0 -0
  78. package/assets/esri/themes/base/images/files/word-32.svg +0 -0
  79. package/assets/esri/themes/base/images/files/zip-32.svg +0 -0
  80. package/assets/esri/themes/base/images/loading-throb.gif +0 -0
  81. package/assets/esri/themes/base/widgets/_Bookmarks.scss +0 -0
  82. package/assets/esri/themes/base/widgets/_Tooltip.scss +42 -3
  83. package/assets/esri/themes/dark/main.css +1 -1
  84. package/assets/esri/themes/light/main.css +1 -1
  85. package/assets/esri/themes/light/view.css +1 -1
  86. package/assets/esri/views/interactive/tooltip/t9n/messages.en.json +1 -1
  87. package/assets/esri/widgets/BatchAttributeForm/t9n/messages.en.json +1 -1
  88. package/chunks/GlobalIllumination.glsl.js +1 -0
  89. package/config.js +1 -1
  90. package/core/Accessor.d.ts +1 -1
  91. package/core/lang.js +1 -1
  92. package/core/units.js +1 -1
  93. package/geometry/HeightModelInfo.js +1 -1
  94. package/geometry/ellipsoidUtils.js +1 -1
  95. package/geometry/support/heightModelInfoUtils.js +1 -1
  96. package/interfaces.d.ts +1 -0
  97. package/kernel.js +1 -1
  98. package/layers/ElevationLayer.js +1 -1
  99. package/layers/OrientedImageryLayer.js +1 -1
  100. package/layers/ParquetLayer.d.ts +21 -13
  101. package/layers/graphics/controllers/FeatureTileController3D.js +1 -1
  102. package/layers/graphics/dehydratedFeatures.js +1 -1
  103. package/layers/graphics/transferFeatures.js +2 -0
  104. package/layers/mixins/FeatureLayerBase.js +1 -1
  105. package/layers/mixins/HeightModelInfoMixin.js +2 -0
  106. package/layers/mixins/SceneService.js +1 -1
  107. package/layers/orientedImagery/core/ExposurePoint.js +1 -1
  108. package/layers/raster/datasets/RasterFactory.js +1 -1
  109. package/package.json +3 -3
  110. package/popup/FeatureContentCollection.d.ts +15 -25
  111. package/popup/FeatureContentCollection.js +1 -1
  112. package/rest/query/operations/pbfDehydratedFeatureSet.js +1 -1
  113. package/rest/query/operations/pbfFeatureServiceParser.js +1 -1
  114. package/support/revision.js +1 -1
  115. package/symbols/cim/callouts/calloutAnalysisUtils.js +2 -0
  116. package/symbols/cim/callouts/effects/BackgroundCallout.js +1 -1
  117. package/symbols/cim/callouts/effects/BalloonCallout.js +1 -1
  118. package/symbols/cim/callouts/effects/PointSymbolCallout.js +1 -1
  119. package/symbols/cim/callouts/effects/SimpleLineCallout.js +1 -1
  120. package/symbols/cim/callouts/effects/calloutUtils.js +1 -1
  121. package/symbols/cim/cimAnalyzer.js +1 -1
  122. package/views/2d/engine/webgl/ClipMesh.js +1 -1
  123. package/views/2d/engine/webgl/mesh/factories/CalloutMeshWriterCoordinator.js +1 -1
  124. package/views/2d/engine/webgl/mesh/factories/MeshWriterGroupCoordinator.js +1 -1
  125. package/views/2d/engine/webgl/mesh/templates/templateUtils.js +1 -1
  126. package/views/2d/engine/webgl/shaderGraph/techniques/animated/AnimatedMarkerMeshWriter.js +1 -1
  127. package/views/2d/engine/webgl/shaderGraph/techniques/animated/AnimatedPolyMeshWriters.js +1 -1
  128. package/views/2d/engine/webgl/shaderGraph/techniques/fill/AFillMeshWriter.js +1 -1
  129. package/views/2d/engine/webgl/shaderGraph/techniques/fill/ComplexOutlineFillMeshWriter.js +1 -1
  130. package/views/2d/engine/webgl/shaderGraph/techniques/fill/GradientFillMeshWriter.js +1 -1
  131. package/views/2d/engine/webgl/shaderGraph/techniques/fill/OutlineFillMeshWriter.js +1 -1
  132. package/views/2d/engine/webgl/shaderGraph/techniques/fill/PatternFillMeshWriter.js +1 -1
  133. package/views/2d/engine/webgl/shaderGraph/techniques/fill/PatternOutlineFillMeshWriter.js +1 -1
  134. package/views/2d/engine/webgl/shaderGraph/techniques/labels/LabelMeshWriter.js +1 -1
  135. package/views/2d/engine/webgl/shaderGraph/techniques/line/GradientStrokeMeshWriter.js +1 -1
  136. package/views/2d/engine/webgl/shaderGraph/techniques/line/LineMeshWriter.js +1 -1
  137. package/views/2d/engine/webgl/shaderGraph/techniques/line/TexturedLineMeshWriter.js +1 -1
  138. package/views/2d/engine/webgl/shaderGraph/techniques/markers/ComputedMarkerParams.js +1 -1
  139. package/views/2d/engine/webgl/shaderGraph/techniques/markers/MarkerMeshWriter.js +1 -1
  140. package/views/2d/engine/webgl/shaderGraph/techniques/mesh/CalloutMeshWriterPolicy.js +1 -1
  141. package/views/2d/engine/webgl/shaderGraph/techniques/mesh/MeshWriter.js +1 -1
  142. package/views/2d/engine/webgl/shaderGraph/techniques/mesh/MeshWriterReferences.js +1 -1
  143. package/views/2d/engine/webgl/shaderGraph/techniques/text/TextMeshWriter.js +1 -1
  144. package/views/2d/engine/webgl/util/AnnotationMatcher.js +1 -1
  145. package/views/2d/engine/webgl/util/Matcher.js +1 -1
  146. package/views/2d/layers/LayerView2D.js +1 -1
  147. package/views/2d/layers/support/annodime/MatcherGeometryOverride.js +1 -1
  148. package/views/2d/layers/support/annodime/PrivateMatcherGeometryOverrideEffect.js +1 -1
  149. package/views/3d/analysis/LineOfSight/LineOfSightAuthoringUtils.js +1 -1
  150. package/views/3d/analysis/LineOfSight/LineOfSightItemManipulatedObject3D.js +1 -1
  151. package/views/3d/analysis/LineOfSight/LineOfSightItemTool.js +1 -1
  152. package/views/3d/analysis/LineOfSight/LineOfSightPlacementController.js +1 -1
  153. package/views/3d/analysis/LineOfSight/LineOfSightRootPlugin.js +1 -1
  154. package/views/3d/analysis/LineOfSight/LineOfSightTargetPlugin.js +1 -1
  155. package/views/3d/analysis/LineOfSight/lineOfSightPlacementUtils.js +1 -1
  156. package/views/3d/analysis/LineOfSightAnalysisView3D.d.ts +5 -3
  157. package/views/3d/analysis/Viewshed/ViewshedPlacementController.js +1 -1
  158. package/views/3d/analysis/Viewshed/ViewshedPlacementRootPlugin.js +1 -1
  159. package/views/3d/camera/constraintUtils/surfaceCollision.js +1 -1
  160. package/views/3d/camera/intersectionUtils.js +1 -1
  161. package/views/3d/interactive/editingTools/manipulatedObjectUtils.js +1 -1
  162. package/views/3d/interactive/editingTools/move/MoveTool3D.js +1 -1
  163. package/views/3d/interactive/editingTools/tooltipUtils3D.js +1 -1
  164. package/views/3d/layers/I3SMeshView3D.js +1 -1
  165. package/views/3d/layers/graphics/FeatureGraphics3DGraphicsPipeline.js +1 -1
  166. package/views/3d/layers/graphics/Graphics3DCore.js +1 -1
  167. package/views/3d/layers/graphics/Graphics3DFeatureProcessor.js +1 -1
  168. package/views/3d/layers/graphics/Graphics3DGraphic.js +1 -1
  169. package/views/3d/layers/graphics/Graphics3DGraphicsPipeline.js +1 -1
  170. package/views/3d/layers/i3s/I3SClientMaterialUtil.js +1 -1
  171. package/views/3d/layers/support/FeatureMemory.js +2 -0
  172. package/views/3d/layers/support/FeatureTile.js +1 -1
  173. package/views/3d/layers/support/FeatureTileFetcher3D.js +1 -1
  174. package/views/3d/layers/support/featureReference.js +1 -1
  175. package/views/3d/navigation/modes/GroundNavigationMode3D.js +1 -1
  176. package/views/3d/state/Constraints.js +1 -1
  177. package/views/3d/state/helpers/SceneIntersectionHelper.js +1 -1
  178. package/views/3d/state/utils/OffsetCorrectionController.js +1 -1
  179. package/views/3d/state/utils/groundNavigationUtils.js +1 -1
  180. package/views/3d/support/PBFDecoder.js +1 -1
  181. package/views/3d/support/PBFDecoderWorker.js +1 -1
  182. package/views/3d/support/QualityProfile.js +1 -1
  183. package/views/3d/support/popupHitTest.js +1 -1
  184. package/views/3d/terrain/TerrainRenderer.js +1 -1
  185. package/views/3d/terrain/TerrainSurface.js +1 -1
  186. package/views/3d/webgl-engine/lib/TriangleIntersectionData.js +1 -1
  187. package/views/3d/webgl-engine/materials/stippleTextureRepository.js +1 -1
  188. package/views/DOMContainer.d.ts +2 -2
  189. package/views/DOMContainer.js +1 -1
  190. package/views/PopupView.d.ts +1 -1
  191. package/views/SceneView.js +1 -1
  192. package/views/ToolViewManager.js +1 -1
  193. package/views/interactive/options/TooltipVisibleElements.d.ts +11 -1
  194. package/views/interactive/options/TooltipVisibleElements.js +1 -1
  195. package/views/interactive/tooltip/components/ElevationModeSelect.js +2 -0
  196. package/views/interactive/tooltip/components/TooltipEditableField.js +1 -1
  197. package/views/interactive/tooltip/content/TooltipContent.js +1 -1
  198. package/views/interactive/tooltip/infos/DynamicTooltipInfo.js +1 -1
  199. package/views/interactive/tooltip/infos/SketchTooltipInfo.js +1 -1
  200. package/views/support/hitTestSelectUtils.js +1 -1
  201. package/widgets/BasemapToggle/BasemapToggleViewModel.d.ts +1 -0
  202. package/widgets/BasemapToggle/BasemapToggleViewModel.js +1 -1
  203. package/widgets/BasemapToggle.js +1 -1
  204. package/widgets/BatchAttributeForm/inputs/AttachmentElementInput.d.ts +9 -1
  205. package/widgets/BatchAttributeForm/inputs/support/DynamicChoiceController.js +1 -1
  206. package/widgets/BatchAttributeForm.js +1 -1
  207. package/widgets/DirectionalPad/DirectionalPadViewModel.d.ts +1 -0
  208. package/widgets/DirectionalPad/DirectionalPadViewModel.js +1 -1
  209. package/widgets/DirectionalPad.js +1 -1
  210. package/widgets/Editor/UpdateFeatureWorkflow.js +1 -1
  211. package/widgets/Editor/legacy/UpdateFeatureWorkflow.js +1 -1
  212. package/widgets/Editor/workflowUtils.js +1 -1
  213. package/widgets/OrientedImageryViewer/OrientedImageryViewerViewModel.js +1 -1
  214. package/widgets/OrientedImageryViewer/utils.js +1 -1
  215. package/widgets/Popup/types.d.ts +0 -7
  216. package/widgets/Popup.d.ts +7 -7
  217. package/widgets/TimeSlider/TimeSliderViewModel.d.ts +2 -0
  218. package/widgets/TimeSlider/TimeSliderViewModel.js +1 -1
  219. package/widgets/TimeSlider.js +1 -1
  220. package/assets/esri/core/workers/chunks/0a2b7c691a577cb3d189.js +0 -1
  221. package/assets/esri/core/workers/chunks/2146c25c01c9fc11b16c.js +0 -1
  222. package/assets/esri/core/workers/chunks/4678a8170d8a3ccd1a7b.js +0 -1
  223. package/assets/esri/core/workers/chunks/56e97b98dcb8a3f2bcb7.js +0 -1
  224. package/assets/esri/core/workers/chunks/6c3535aa7250c08b9e5b.js +0 -1
  225. package/assets/esri/core/workers/chunks/6e75f09fb9452bd5f9fb.js +0 -1
  226. package/assets/esri/core/workers/chunks/7441d121f00ce747c08e.js +0 -1
  227. package/assets/esri/core/workers/chunks/76548469fe1b9c3b2051.js +0 -1
  228. package/assets/esri/core/workers/chunks/82ce034b5ba54de9b970.js +0 -29
  229. package/assets/esri/core/workers/chunks/ba435cc73956d9c64a11.js +0 -1
  230. package/assets/esri/core/workers/chunks/c77496c350004ee66eb2.js +0 -1
  231. package/assets/esri/core/workers/chunks/d371d9279b30548efa02.js +0 -1
  232. package/assets/esri/core/workers/chunks/dc52e036547612949d32.js +0 -1
  233. package/assets/esri/core/workers/chunks/e5ee64e2fb5bfcb716d8.js +0 -1
  234. package/views/2d/engine/webgl/mesh/bufcut.js +0 -2
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import t from"../../../../core/Accessor.js";import{filterInPlace as s}from"../../../../core/arrayUtils.js";import"../../../../core/has.js";import i from"../../../../core/Logger.js";import{getOrCreateMapValue as r}from"../../../../core/MapUtils.js";import{isAbortError as a,throwIfAborted as n}from"../../../../core/promiseUtils.js";import o from"../../../../core/ReactiveMap.js";import{on as l,watch as u}from"../../../../core/reactiveUtils.js";import{schedule as h}from"../../../../core/scheduling.js";import{signal as d}from"../../../../core/signal.js";import{sqlAnd as c}from"../../../../core/sql.js";import{property as p,subclass as f}from"../../../../core/accessorSupport/decorators.js";import{getEpsilon as _}from"../../../../core/libs/gl-matrix-2/math/common.js";import{create as m,equals as g,clone as y,expand as F,toExtent as T,width as x,height as v}from"../../../../geometry/support/aaBoundingRect.js";import{getObjectId as R,hasVertices as E,computeAABR as b}from"../../../../layers/graphics/dehydratedFeatures.js";import C from"../../../../rest/support/QuantizationParameters.js";import D from"../../../../rest/support/Query.js";import{MultiFeatureReference as w,SingleFeatureReference as M}from"./featureReference.js";import{failedFeatureCount as U,FeatureTile as j}from"./FeatureTile.js";import{virtualDisplayFilterHighlightTileId as A,virtualSnapshotTileId as I}from"./FeatureTileDescriptor.js";import{tilesAreRelated as O}from"../../terrain/tileUtils.js";import{ImmediateTask as P,TaskPriority as z}from"../../../support/Scheduler.js";let q=class extends t{set maximumNumberOfFeatures(e){e=e||1/0;const t=this._get("maximumNumberOfFeatures");e===t||e<1||(this._set("maximumNumberOfFeatures",e),this._maximumFeaturesUpdated(t,e))}set memoryFactor(e){this.memoryFactor!==e&&(this._set("memoryFactor",e),this._setDirty())}set lodFactor(e){this.lodFactor!==e&&(this._set("lodFactor",e),this._supportsResolution&&this.refetch())}get useTileCount(){return this._useTileCount&&null!=this.context.query.queryFeatureCount}set useTileCount(e){this._useTileCount=e,this.notifyChange("useTileCount")}get updating(){return this._dirty||!!this._pendingEdits||this._isFetching||(this.tileDescriptors?.updating??!1)}get readyToRun(){return this._dirty}get memoryForUnusedFeatures(){let e=0;return this._featureTiles.forEach(t=>e+=t.estimatedUnusedSize),e}get totalVertices(){let e=0;return this._featureTiles.forEach(t=>e+=t.numVertices),e}get totalFeatures(){let e=0;return this._featureTiles.forEach(t=>e+=t.numFeatures),e}get showsAllFeatures(){if(this._paused||this.dataUpdating)return!1;for(const e of this._featureTiles.values())if(!this.hasFullGeometries&&0!==e.emptyFeatureRatio||!e.showsAllFeatures)return!1;return!0}get hasFullGeometries(){if(!this._supportsResolution)return!0;const e=this.tileDescriptors?.some(Q);return e||!this.context.capabilities.supportsQuantization&&"polyline"!==this.context.geometryType}set filterExtent(e){if(null!=e&&this.context.tilingScheme&&!e.spatialReference.equals(this.context.tilingScheme.spatialReference))return void i.getLogger(this).error("#filterExtent=","extent needs to be in the same spatial reference as the tiling scheme");const t=this._get("filterExtent");if(t===e||null!=t&&e&&t.equals(e))return;const s=null!=e?e.clone():null;this._set("filterExtent",s),this._reclip(s,t)}_updateTileZQuantization(e){if(1===this.context.viewingMode){const t=e.computeZQuantizationFactor();this._zQuantizationFactor.value<t&&(this._zQuantizationFactor.value=t)}}get _tileZQuantization(){return this.context.isDraped?1:this._zQuantizationFactor.value}constructor(e){super(e),this._useTileCount=!1,this.dataUpdating=!1,this.updatingTotal=0,this.updatingRemaining=0,this.expectedFeatureDiff=0,this.maximumNumberOfFeaturesExceeded=!1,this._fullRatio=1,this._farRatio=1,this._zQuantizationFactor=d(1),this._changes={updates:{adds:new Array,removes:new Array},adds:new Array,removes:new Array},this._featureTiles=new o,this._displayingFeatureReferences=new Map,this._numDisplayingFeatureReferences=0,this._dirty=!1,this._suspended=!0,this._pendingEdits=null,this._applyEditsTilesUpdated=!1,this.snappingComplexityExceeded=!0,this._isFetching=!1;const t=e.context;this._frameTask=t.scheduler?.registerTask(z.FEATURE_TILE_FETCHER,this)??P,this.FeatureReferenceClass=t.capabilities.supportsMultipleResolutions?w:M,this._objectIdField=t.objectIdField}initialize(){this.addHandles([l(()=>this.tileDescriptors,"change",()=>this._setDirty(),{onListenerAdd:()=>this._setDirty(),onListenerRemove:()=>this._setDirty()}),u(()=>this._tileZQuantization,()=>this.refetch())]),this._setDirty()}destroy(){this._frameTask.remove(),this._featureTiles.forEach(e=>{this._cancelFetchTile(e),this._removeTile(e)}),this._featureTiles.clear(),this._displayingFeatureReferences.clear(),this._pendingEdits?.controller.abort(),this._pendingEdits=null}get _paused(){return this._suspended||!!this._pendingEdits}restart(){this._featureTiles.forEach(e=>{this._cancelFetchTile(e),this._clearTile(e),this._resetFetchTile(e)}),null!=this.context.memoryCache&&this.context.memoryCache.clear(),this._setDirty()}refetch(){this._featureTiles.forEach(e=>{this._cancelFetchTile(e),this._resetFetchTile(e)}),null!=this.context.memoryCache&&this.context.memoryCache.clear(),this._setDirty()}refetchDisplayFilterHighlightTile(){const e=this._featureTiles.get(A);e&&(this._cancelFetchTile(e),this._resetFetchTile(e),this._setDirty())}suspend(){this._suspended||(this._suspended=!0,this._pause(),this._setDirty())}resume(){this._suspended&&(this._suspended=!1,this._unpause())}getMissingAttributesForFeature(e){for(const t of this._featureTiles.values()){const s=t.missingAttributes?.get(e);if(null!=s)return s}}_pause(){this._paused&&(this._featureTiles.forEach(e=>this._cancelFetchTile(e)),this._updated())}_unpause(){this._paused||this._setDirty()}get availableFields(){let e=null;return this._featureTiles.forEach(t=>{null!=t.displayingFeatures&&0!==t.displayingFeatures.length&&(null==e?e=new Set(t.availableFields):e.forEach(s=>{t.availableFields?.has(s)||e.delete(s)}))}),null!=e?e:new Set}applyEdits(e){this._pendingEdits||(this._pendingEdits={edits:Promise.resolve(),count:0,controller:new AbortController},this._pause());const t=this._pendingEdits;t.count++;const s=t.edits.then(()=>e.result.catch(e=>{if(a(e))throw e;return null}).then(e=>e?(this._applyEditsDeleteFeatures(e.deletedFeatures),this._applyEditsAddUpdateFeatures(e.addedFeatures,e.updatedFeatures,t.controller.signal).then(()=>e)):e).then(e=>(0===--t.count&&(this._pendingEdits===t&&(this._pendingEdits=null),null!=this.context.memoryCache&&this.context.memoryCache.clear(),this._applyEditsTilesUpdated=!1,this._unpause()),e)));return t.edits=s,this._updated(),s}_applyEditsDeleteFeatures(e){if(0===e.length)return;const t=this.context.globalIdField,s=t&&this.availableFields.has(t),r=new Set,a=this._objectIdField;e.forEach(({objectId:e,globalId:n})=>{(!e||e<0)&&t&&n&&(s||i.getLogger(this).errorOncePerTick(`Editing the specified service requires the layer's globalIdField, ${t} to be included the layer's outFields for updates to be reflected in the view`),e=this._objectIdFromGlobalId(n,a,t)),null!=e&&e>=0&&r.add(e)}),this._featureTiles.forEach(e=>{if(!e.features)return;const t=e.features.filter(e=>!r.has(R(e,this._objectIdField)));t.length!==e.features.length&&(this._applyEditsTileUpdated(),e.setFeatures(t,0,e.availableFields,e.missingAttributes),this._updateTileZQuantization(e),this._invalidateCounts())})}_objectIdFromGlobalId(e,t,s){if(null==e)return null;const i=this.features.find(t=>t.attributes?.[s]===e);return i?R(i,t):null}async _applyEditsAddUpdateFeatures(e,t,s){const{objectIdField:r,globalIdField:a}=this.context,n=a&&this.availableFields.has(a),o=new Set,l=new Set;for(const i of e){const e=i.objectId;null!=e&&o.add(e)}for(const{objectId:h,globalId:d}of t){let e=h;(null==e||e<0)&&a&&(n||i.getLogger(this).errorOncePerTick(`Editing the specified service requires the layer's globalIdField, ${a} to be included the layer's outFields for updates to be reflected in the view`),e=this._objectIdFromGlobalId(d,r,a)),null!=e&&e>=0&&(o.add(e),l.add(e))}if(0===o.size)return;const u=[];this._featureTiles.forEach(e=>{const t=this._applyEditsAddUpdateTile(e,o,l,s);u.push(t)}),this._updated(),await Promise.allSettled(u)}async _applyEditsAddUpdateTile(e,t,s,i){if(!e.features)return;e.fetchingResolution=e.descriptor.resolution;const r=this._createQuery(e);r.resultType=void 0,r.cacheHint=!1,r.objectIds=Array.from(t);const a=await this._queryFeatures(r,i);let n=null;if(s.size>0){const t=e.features.filter(e=>!s.has(R(e,this._objectIdField)));t.length!==e.features.length&&(n=t)}if(a.features.length>0){n||(n=e.features.slice());for(const e of a.features)n.push(e)}n&&(e.hasPreciseFeatureCount&&(e.numFeatures=Math.max(e.numFeatures,n.length)),this._applyEditsTileUpdated(),e.setFeatures(n,0,Z(e.availableFields,a.fields),V(e.missingAttributes,a.missingAttributes)),this._updateTileZQuantization(e),this._invalidateCounts())}_applyEditsTileUpdated(){this._applyEditsTilesUpdated||(this._applyEditsTilesUpdated=!0,this._updated())}_queryFeatures(e,t){return this.context.query.queryFeaturesDehydrated(e,{signal:t,timeout:J})}_setDirty(){this._dirty=!0,this._updated()}runTask(e){const t=this._frameTask.processQueue(e);if(!this._dirty||!this.initialized)return t;this._dirty=!1;const s=this._featureTilesArray;if(this._markTilesNotAlive(s),!e.run(()=>this._addTiles(s,e))||!e.run(()=>this._filterExtentTiles(s,e))||!e.run(()=>this._removeTiles(s,e))||e.done)return void this._setDirty();const i=this._sortTiles(s);e.run(()=>this._showTiles(i,e))&&e.run(()=>this._fetchTiles(i,e))&&e.run(()=>this._updateMemoryEstimates(i,e))||this._setDirty(),this._updated(),this.updating||(this._updateMaximumNumberOfFeaturesExceeded(),this._updateSnappingComplexityExceeded(i))}_updateSnappingComplexityExceeded(e){let t=Y;for(const s of e){if(Q(s)||t<=0)break;if(!S(s)&&(t--,s.sampledDensityEstimate>W))return void(this.snappingComplexityExceeded=!0)}this.snappingComplexityExceeded=0===this._featureTiles.size}_markTilesNotAlive(e){for(const t of e)t.alive=!1}_addTiles(e,t){return!(this._suspended||!this.tileDescriptors)&&(this.tileDescriptors.forEach(s=>{const i=this._featureTiles.get(s.id);i?i.alive=!0:t.done||(e.push(this._addTile(s)),t.madeProgress())}),t.hasProgressed)}_filterExtentTiles(e,t){for(const s of e){if(t.done)break;s.alive&&(s.filtered=!s.intersects(this.filterExtent),s.filtered&&(this._clearTile(s),t.madeProgress()))}return t.hasProgressed}_removeTiles(e,t){for(let s=e.length-1;s>=0&&!t.done;s--){const i=e[s];i.alive||(this._removeTile(i),s!==e.length-1&&(e[s]=e[e.length-1]),e.pop(),t.madeProgress())}return t.hasProgressed}_sortTiles(e){return e.sort((e,t)=>e.descriptor.loadPriority-t.descriptor.loadPriority),e}_showTiles(e,t){const s=this._updateRatio(e),i=e=>{const t=this._fullRatio<1?s(e)*this._farRatio:1;e.reduceFeatures(t,this.memoryFactor,this._objectIdField,this._reduceMode)&&this._setDirty();const{numFeatures:i,fetchingResolution:r,descriptor:a,isFetched:n}=e;return this._supportsResolution&&i>0&&r!==a.resolution&&n&&(e.requestRefetch(),this._setDirty()),this._showTile(e)};for(const r of e)if(!t.run(()=>i(r))){this._setDirty();break}return t.hasProgressed}_fetchTiles(e,t){if(this._paused)return!1;let s=!1;for(const i of e){if(!i.needsFetch)continue;const e=null!=this.context.memoryCache?this.context.memoryCache.pop(i.id):null;if(e?.resolution!==i.displayingResolution){if(this._needsNumFeatures(i)){const e=new AbortController,r=this._fetchTileCount(i,e.signal);this._handleRequest(i,r,e,()=>i.resetFetching(),()=>i.numFeatures=U),s=!0,t.madeProgress()}if(t.done)return!0}else i.cache=e,i.numFeatures&&this._notifyDataUpdating(),this._setDirty(),this._scheduleUpdated(),t.madeProgress()}if(s)return t.hasProgressed;for(const r of e){if(!r.needsFetch)continue;const e=new AbortController,s=this._fetchTile(r,e.signal);if(this._handleRequest(r,s,e,e=>r.fetchDone(e),e=>{r.fetchFailed=!0,this.context.logFetchError(i.getLogger(this),e)}),t.madeProgress(),t.done)return!0}return t.hasProgressed}_updateMemoryEstimates(e,t){return e.some(e=>!t.run(()=>e.updateEstimates())&&(this._setDirty(),!0)),t.hasProgressed}_reclip(e,t){if(!this.initialized)return;const s=new Array;this._featureTiles.forEach(i=>{null!=i.displayingFeatures&&0!==i.displayingFeatures.length&&(i.intersectionIncludingBorrowed(t,B),i.intersectionIncludingBorrowed(e,G),g(B,G)||s.push(i))}),this._refreshDisplayingFeatures(s),this._updated()}_refreshDisplayingFeatures(e){const t=new Set,s=this._changes.updates;for(const i of e)if(null!=i.displayingFeatures)for(const e of i.displayingFeatures){const i=R(e,this._objectIdField);if(t.has(i))continue;t.add(i);const r=this._displayingFeatureReferences.get(i).feature;s.removes.push(r),s.adds.push(r)}this._applyChanges()}_updated(){let e=0;if(this._paused||this._featureTiles.forEach(t=>t.isFetching?++e:0),this._isFetching=e>0,e>0||this._applyEditsTilesUpdated?this._notifyDataUpdating():this._dirty||this._set("dataUpdating",!1),this.updating){let t=0,s=0,i=0,r=0,a=0;const n=this._displayingFeatureReferences.size/this._numDisplayingFeatureReferences;this._featureTiles.forEach(e=>{if(++s,e.isFetching&&e.hasPreciseFeatureCount){const t=this._maximumFeaturesForTile(e)*(1-e.emptyFeatureRatio),s=null!=e.displayingFeatures?e.displayingFeatures.length*n:0;a+=t-s}e.needsFetch?++r:e.numFeatures>0&&(++i,t+=e.numFeatures)}),r+=e;let o=0,l=0;t?(l=t,o=Math.min(r*t/i,t)):(l=s,o=r),a=Math.min(this.maximumNumberOfFeatures-this.features.length,a),this._set("updatingTotal",l),this._set("updatingRemaining",o),this._set("expectedFeatureDiff",a)}else this._set("updatingTotal",0),this._set("updatingRemaining",0),this._set("expectedFeatureDiff",0);this.debugger?.update()}_updateMaximumNumberOfFeaturesExceeded(){for(const{perTileMaximumNumberOfFeaturesExceeded:e}of this._featureTiles.values())if(e)return void this._set("maximumNumberOfFeaturesExceeded",!0);this._set("maximumNumberOfFeaturesExceeded",!1)}_updateRatio(e){const t=L(e),s=e=>1/(1<<Math.max(0,t-e.descriptor.lij[0]));let i=0,r=0;for(const a of e){const e=a.numFeatures;i+=e,r+=e*s(a)}return this._fullRatio=Math.min(1,this.maximumNumberOfFeatures/i),this._farRatio=this.maximumNumberOfFeatures/r,this._scheduleUpdated(),s}_maximumFeaturesUpdated(e,t){e!==t&&(t>e&&this._featureTiles.forEach(e=>{if(!e.featuresMissing)return;const t=this._maximumFeaturesForTile(e);e.isFullyFetched(t)||(this._cancelFetchTile(e),this._resetFetchTile(e))}),this._setDirty())}_addTile(e){const t=new j(e);return this._featureTiles.set(t.id,t),this._resetFetchTile(t),this._referenceDisplayingFeaturesFromRelatedTiles(t),t}_referenceDisplayingFeaturesFromRelatedTiles(e){const t=e.displayingResolution;this._featureTiles.forEach(s=>{if(null!=s.displayingFeatures&&e!==s&&O(e.descriptor.lij,s.descriptor.lij)){null==e.displayingFeatures&&(e.displayingFeatures=[]),e.descriptor.extent&&s.descriptor.extent&&(e.extentIncludingBorrowedFeatures??=y(e.descriptor.extent),F(e.extentIncludingBorrowedFeatures,s.descriptor.extent,e.extentIncludingBorrowedFeatures));for(const i of s.displayingFeatures){e.displayingFeatures.push(i);const s=this._displayingFeatureReferences.get(R(i,this._objectIdField));s.ref(s.feature,t),this._numDisplayingFeatureReferences++}}})}_removeTile(e){this._clearTile(e),this._featureTiles.delete(e.id)}_resetFetchTile(e){e.filtered=!e.intersects(this.filterExtent),e.filtered?e.needsFetch&&e.fetchDone(4):e.requestFetch()}_cancelFetchTile(e){const t=e.requestController;null!=t&&(e.requestController=null,e.resetFetching(),t.abort())}async _fetchTileCount(e,t){e.numFeatures=await this.context.query.queryFeatureCount(this._createFeatureCountQuery(e),{signal:t}),this._updateRatio(this._featureTilesArray)}async _fetchTile(e,t){e.fetchFailed=!1;const s=this._maximumFeaturesForTile(e);if(s<=0)return e.hasPreciseFeatureCount&&0===e.numFeatures||(e.fetchFailed=!0),k(e),e.fetchInformation.value="Empty tile",4;const i=this._getMaxRecordCount(e),r=Math.ceil(s/i);if(e.fetchingResolution=e.descriptor.resolution,N(e)||!this.context.capabilities.supportsMaxRecordCountFactor||e.numFeatures<=s&&r>D.MAX_MAX_RECORD_COUNT_FACTOR)return this._fetchPagedTile(e,t);const a=this._createQuery(e);if(a.maxRecordCountFactor=r,e.isRefetching&&e.features&&e.features.length>0){const t=Math.ceil(e.features.length/(1-e.emptyFeatureRatio)/i);a.maxRecordCountFactor=Math.max(t+1,a.maxRecordCountFactor)}e.fetchInformation.value=`Single fetch\n${s} features`;const{features:o,exceededTransferLimit:l,fields:u,missingAttributes:h}=await this._queryFeatures(a,t),d=l||a.maxRecordCountFactor>=D.MAX_MAX_RECORD_COUNT_FACTOR||s===this._totalFeaturesForTile(e)?5:4,c=await this._frameTask.schedule(()=>{e.exceededTransferLimit.value=!!l;const t=this._removeEmptyFeatures(o,this._getEffectiveTileResolution(e));return e.fetchInformation.value=`Single fetch\n${o.length}/${s} features`,e.setFeatures(o,t,H(u),V(void 0,h)),this._updateTileZQuantization(e),this._maximumFeaturesForTile(e)>s?1:d},t);return n(t),this._invalidateCounts(),c}async _fetchPagedTile(e,t){let s,i=0,r=0,a=0,o=this._maximumFeaturesForTile(e)-a;const l=this._getMaxRecordCount(e);let u,h=null;for(;;){const d=this._createQuery(e),c=this._setPagingParameters(d,i,o,l);e.fetchInformation.value=`Paged fetch\n${e.features?.length}/${o} features`;const{features:p,exceededTransferLimit:f,fields:_,missingAttributes:m}=await this._queryFeatures(d,t);if(await this._frameTask.schedule(()=>{c&&(i+=d.num),a+=p.length,r+=this._removeEmptyFeatures(p,this._getEffectiveTileResolution(e)),e.exceededTransferLimit.value=!!f,s=s?.concat(p)??p,h=Z(h,_),u=V(u,m),e.setFeatures(s,r,h,u),this._updateTileZQuantization(e),this._invalidateCounts(),this._setDirty()},t),n(t),o=this._maximumFeaturesForTile(e)-(s?.length??0),!c||!f||o<=0)return f?4:5}}_createFeatureCountQuery(e){const t=this._createQuery(e);return this.context.capabilities.supportsCacheHint&&(t.resultType=void 0,t.cacheHint=!0),t}_createQuery(e){const t=this.context.createQuery();if(t.resultType=this._resultType(e),!N(e)&&e.descriptor.extent&&this.context.tilingScheme&&(t.geometry=T(e.descriptor.extent,this.context.tilingScheme.spatialReference)),this._setResolutionParams(t,e),"tile"!==t.resultType&&this.context.capabilities.supportsCacheHint&&(t.cacheHint=!0),S(e)){const{highlightIds:e}=this.context;e&&e.length>$&&i.getLogger(this).warn("highlight-too-many-features",`highlight is limited to ${$} features on large layers configured with a display filter to avoid performance issues`),t.objectIds=e?.slice(0,$)}else!Q(e)&&this.context.effectiveDisplayFilter&&(t.where=c(t.where,this.context.effectiveDisplayFilter.where));return t}_setPagingParameters(e,t,s,i){return!!this.context.capabilities.supportsPagination&&(e.start=t,s>0&&this.context.capabilities.supportsMaxRecordCountFactor?(e.maxRecordCountFactor=Math.ceil(s/i),e.num=Math.min(e.maxRecordCountFactor*i,s)):e.num=Math.min(i),!0)}_getEffectiveTileResolution(e){if(N(e)||!this._supportsResolution)return null;const t=1===this.context.viewingMode&&this.context.tilingScheme?this.context.tilingScheme.resolutionAtLevel(3):1/0;return Math.min(e.fetchingResolution,t)/this.lodFactor/this._tileZQuantization}get _supportsResolution(){return this.context.capabilities.supportsMultipleResolutions&&"point"!==this.context.geometryType}_setResolutionParams(e,t){const s=this._getEffectiveTileResolution(t);null!=s&&(this.context.capabilities.supportsQuantization?e.quantizationParameters=new C({mode:"view",originPosition:"upper-left",tolerance:s,extent:this.context.fullExtent}):"polyline"===this.context.geometryType&&(e.maxAllowableOffset=s))}_removeEmptyFeatures(e,t){const i=e.length;if(t&&this._supportsResolution){const i=t*(1+_());s(e,({geometry:e})=>!(!e||!E(e))&&(b(e,X),x(X)>i||v(X)>i))}else s(e,({geometry:e})=>E(e));return i-e.length}_needsNumFeatures(e){return this.useTileCount&&e.needsFeatureCount&&!Q(e)}_getMaxRecordCount(e){switch(this._resultType(e)){case"tile":if(this.context.tileMaxRecordCount)return this.context.tileMaxRecordCount;break;case"standard":if(this.context.standardMaxRecordCount)return this.context.standardMaxRecordCount}return this.context.maxRecordCount||$}_resultType(e){if(this.context.capabilities.supportsResultType)return Q(e)?"standard":"tile"}get _reduceMode(){const e=this.context.geometryType;return"polygon"===e||"polyline"===e?0:1}_handleRequest(e,t,s,i,r){e.startFetch(),e.requestController=s;let n=!1;t.then(t=>{e.requestController=null,i(t)}).catch(t=>{e.requestController===s&&(e.requestController=null,e.fetchDone(4)),a(t)?n=!0:r(t)}).then(()=>{n||this._setDirty(),this._scheduleUpdated()})}_scheduleUpdated(){this.hasHandles("scheduleUpdated")||this.addHandles(h(()=>{this.removeHandles("scheduleUpdated"),this._updated()}),"scheduleUpdated")}_showTile(e){if(e.displayingFeatures&&!e.needsDisplayUpdate)return!1;const t=e.features;if(0===e.featureLimit||!t){const t=null!=e.displayingFeatures&&e.displayingFeatures.length>0;return this._hideTileFeatures(e),e.displayingFeatures=[],t}const s=e.fetchingResolution,{adds:i,updates:r}=this._changes,a=Math.min(e.featureLimit,t.length);for(let n=0;n<a;++n){const e=t[n],a=R(e,this._objectIdField),o=this._displayingFeatureReferences.get(a);if(o){const{oldVersion:t,newVersion:i}=o.ref(e,s);t!==i&&(t&&r.removes.push(t),i&&r.adds.push(i))}else this._displayingFeatureReferences.set(a,new this.FeatureReferenceClass(e,s)),i.push(e);this._numDisplayingFeatureReferences++}return this._hideTileFeatures(e),e.displayingResolution=e.fetchingResolution,this._applyChanges(),e.displayingFeatures=t.slice(0,a),!0}_hideTile(e){this._cancelFetchTile(e),this._hideTileFeatures(e)}_hideTileFeatures(e){if(null==e.displayingFeatures)return;const{updates:t,removes:s}=this._changes;for(const i of e.displayingFeatures){const r=R(i,this._objectIdField),a=this._displayingFeatureReferences.get(r);if(!a)continue;const{oldVersion:n,newVersion:o}=a.unref(e.displayingResolution);this._numDisplayingFeatureReferences--,n!==o&&(null==o?(this._displayingFeatureReferences.delete(r),n&&s.push(n)):(t.adds.push(o),n&&t.removes.push(n)))}this._applyChanges(),e.displayingFeatures=null}_notifyDataUpdating(){this._get("dataUpdating")||this._set("dataUpdating",!0)}_applyChanges(){const e=this._changes.updates;e.removes.length>0&&(this._notifyDataUpdating(),this.features.removeMany(e.removes),e.removes.length=0),e.adds.length>0&&(this._notifyDataUpdating(),this.features.addMany(e.adds),e.adds.length=0);const t=this._changes.adds,s=this._changes.removes,i=Math.min(t.length,s.length);let r=0;for(;r<i;){const e=Math.min(r+K,i);this._notifyDataUpdating(),this.features.addMany(t.slice(r,e)),this.features.removeMany(s.slice(r,e)),r=e}t.length>i&&(this._notifyDataUpdating(),this.features.addMany(0===r?t:t.slice(r))),s.length>i&&(this._notifyDataUpdating(),this.features.removeMany(0===r?s:s.slice(r))),t.length=0,s.length=0}_clearTile(e){this._hideTile(e),e.features&&null!=this.context.memoryCache&&this.context.memoryCache.put(e.id,e.cache),e.setFeatures(null,0,null,void 0),this._invalidateCounts()}_invalidateCounts(){this.notifyChange("totalVertices"),this.notifyChange("totalFeatures"),this.notifyChange("memoryForUnusedFeatures")}get _featureTilesArray(){return Array.from(this._featureTiles.values())}get featureTiles(){return this._featureTiles}get storedFeatures(){return this._featureTilesArray.reduce((e,t)=>e+(t.features?t.features.length:0),0)}get missingTiles(){return this._featureTiles.values().reduce((e,t)=>e+(t.needsFetch||t.isFetching?1:0),0)}_totalFeaturesForTile(e){return e.hasPreciseFeatureCount?e.numFeatures:this.maximumNumberOfFeatures}_maximumFeaturesForTile(e){const t=this._totalFeaturesForTile(e),s=this._fullRatio<1?this._farRatio:1;return Math.min(Math.ceil(t*s/(1-e.emptyFeatureRatio)),t)}get test(){}};function Q(e){return e.id===I}function S(e){return e.id===A}function N(e){return Q(e)||S(e)}function L(e){let t=0;for(const s of e)s.features&&s.features.length>0&&s.alive&&(t=Math.max(t,s.descriptor.lij[0]));return t}function k(e){e.setFeatures([],0,null,void 0)}function H(e){return null==e?new Set:new Set(e.map(e=>e.name))}function Z(e,t){if(null==e||null==t)return H(t);const s=new Set;for(const{name:i}of t)e.has(i)&&s.add(i);return s}function V(e,t){if(!t?.length)return e;e??=new Map;const s=()=>new Set;for(const{objectId:i,attribute:a}of t)r(e,i,s).add(a);return e}e([p({constructOnly:!0})],q.prototype,"features",void 0),e([p({constructOnly:!0})],q.prototype,"context",void 0),e([p()],q.prototype,"tileDescriptors",void 0),e([p({value:1/0})],q.prototype,"maximumNumberOfFeatures",null),e([p({value:1})],q.prototype,"memoryFactor",null),e([p({value:1})],q.prototype,"lodFactor",null),e([p()],q.prototype,"useTileCount",null),e([p({readOnly:!0})],q.prototype,"updating",null),e([p({readOnly:!0})],q.prototype,"dataUpdating",void 0),e([p({readOnly:!0})],q.prototype,"updatingTotal",void 0),e([p({readOnly:!0})],q.prototype,"updatingRemaining",void 0),e([p({readOnly:!0})],q.prototype,"expectedFeatureDiff",void 0),e([p({readOnly:!0})],q.prototype,"memoryForUnusedFeatures",null),e([p({readOnly:!0})],q.prototype,"maximumNumberOfFeaturesExceeded",void 0),e([p({readOnly:!0})],q.prototype,"totalVertices",null),e([p({readOnly:!0})],q.prototype,"totalFeatures",null),e([p({readOnly:!0})],q.prototype,"showsAllFeatures",null),e([p({readOnly:!0})],q.prototype,"hasFullGeometries",null),e([p()],q.prototype,"filterExtent",null),e([p()],q.prototype,"_dirty",void 0),e([p()],q.prototype,"_suspended",void 0),e([p()],q.prototype,"_pendingEdits",void 0),e([p()],q.prototype,"_applyEditsTilesUpdated",void 0),e([p()],q.prototype,"_paused",null),e([p()],q.prototype,"snappingComplexityExceeded",void 0),e([p()],q.prototype,"_isFetching",void 0),q=e([f("esri.views.3d.layers.support.FeatureTileFetcher3D")],q);const $=2e3,B=m(),G=m(),X=m(),J=6e5,K=200,W=.95,Y=10;export{q as FeatureTileFetcher3D};
2
+ import{__decorate as e}from"tslib";import t from"../../../../core/Accessor.js";import{filterInPlace as s}from"../../../../core/arrayUtils.js";import"../../../../core/has.js";import i from"../../../../core/Logger.js";import{getOrCreateMapValue as r}from"../../../../core/MapUtils.js";import{isAbortError as a,throwIfAborted as n}from"../../../../core/promiseUtils.js";import o from"../../../../core/ReactiveMap.js";import{on as l,watch as u}from"../../../../core/reactiveUtils.js";import{schedule as h}from"../../../../core/scheduling.js";import{signal as d}from"../../../../core/signal.js";import{sqlAnd as c}from"../../../../core/sql.js";import{property as p,subclass as f}from"../../../../core/accessorSupport/decorators.js";import{getEpsilon as m}from"../../../../core/libs/gl-matrix-2/math/common.js";import{create as _,equals as g,clone as y,expand as F,toExtent as T,width as x,height as v}from"../../../../geometry/support/aaBoundingRect.js";import{getObjectId as R,hasVertices as E,computeAABR as b}from"../../../../layers/graphics/dehydratedFeatures.js";import C from"../../../../rest/support/QuantizationParameters.js";import D from"../../../../rest/support/Query.js";import{FeatureMemory as M}from"./FeatureMemory.js";import{MultiFeatureReference as w,SingleFeatureReference as j}from"./featureReference.js";import{failedFeatureCount as U,FeatureTile as A}from"./FeatureTile.js";import{virtualDisplayFilterHighlightTileId as I,virtualSnapshotTileId as P}from"./FeatureTileDescriptor.js";import{tilesAreRelated as O}from"../../terrain/tileUtils.js";import{ImmediateTask as z,TaskPriority as q}from"../../../support/Scheduler.js";let Q=class extends t{set maximumNumberOfFeatures(e){e=e||1/0;const t=this._get("maximumNumberOfFeatures");e===t||e<1||(this._set("maximumNumberOfFeatures",e),this._maximumFeaturesUpdated(t,e))}set memoryFactor(e){this.memoryFactor!==e&&(this._set("memoryFactor",e),this._setDirty())}set lodFactor(e){this.lodFactor!==e&&(this._set("lodFactor",e),this._supportsResolution&&this.refetch())}get useTileCount(){return this._useTileCount&&null!=this.context.query.queryFeatureCount}set useTileCount(e){this._useTileCount=e,this.notifyChange("useTileCount")}get updating(){return this._dirty||!!this._pendingEdits||this._isFetching||(this.tileDescriptors?.updating??!1)}get readyToRun(){return this._dirty}get usedMemory(){return this._memory.usedMemory}get usedMemoryPerFeature(){return this._memory.usedMemoryPerFeature}get totalVertices(){let e=0;return this._featureTiles.forEach(t=>e+=t.numVertices),e}get totalFeatures(){let e=0;return this._featureTiles.forEach(t=>e+=t.numFeatures),e}get showsAllFeatures(){if(this._paused||this.dataUpdating)return!1;for(const e of this._featureTiles.values())if(!this.hasFullGeometries&&0!==e.emptyFeatureRatio||!e.showsAllFeatures)return!1;return!0}get hasFullGeometries(){if(!this._supportsResolution)return!0;const e=this.tileDescriptors?.some(S);return e||!this.context.capabilities.supportsQuantization&&"polyline"!==this.context.geometryType}set filterExtent(e){if(null!=e&&this.context.tilingScheme&&!e.spatialReference.equals(this.context.tilingScheme.spatialReference))return void i.getLogger(this).error("#filterExtent=","extent needs to be in the same spatial reference as the tiling scheme");const t=this._get("filterExtent");if(t===e||null!=t&&e&&t.equals(e))return;const s=null!=e?e.clone():null;this._set("filterExtent",s),this._reclip(s,t)}_updateTileZQuantization(e){if(1===this.context.viewingMode){const t=e.computeZQuantizationFactor();this._zQuantizationFactor.value<t&&(this._zQuantizationFactor.value=t)}}get _tileZQuantization(){return this.context.isDraped?1:this._zQuantizationFactor.value}constructor(e){super(e),this._useTileCount=!1,this.dataUpdating=!1,this.updatingTotal=0,this.updatingRemaining=0,this.expectedFeatureDiff=0,this.maximumNumberOfFeaturesExceeded=!1,this._fullRatio=1,this._farRatio=1,this._zQuantizationFactor=d(1),this._changes={updates:{adds:new Array,removes:new Array},adds:new Array,removes:new Array},this._featureTiles=new o,this._displayingFeatureReferences=new Map,this._numDisplayingFeatureReferences=0,this._memory=new M,this._dirty=!1,this._suspended=!0,this._pendingEdits=null,this._applyEditsTilesUpdated=!1,this.snappingComplexityExceeded=!0,this._isFetching=!1;const t=e.context;this._frameTask=t.scheduler?.registerTask(q.FEATURE_TILE_FETCHER,this)??z,this.FeatureReferenceClass=t.capabilities.supportsMultipleResolutions?w:j,this._objectIdField=t.objectIdField}initialize(){this.addHandles([l(()=>this.tileDescriptors,"change",()=>this._setDirty(),{onListenerAdd:()=>this._setDirty(),onListenerRemove:()=>this._setDirty()}),u(()=>this._tileZQuantization,()=>this.refetch())]),this._setDirty()}destroy(){this._frameTask.remove(),this._featureTiles.forEach(e=>{this._cancelFetchTile(e),this._removeTile(e)}),this._featureTiles.clear(),this._displayingFeatureReferences.clear(),this._pendingEdits?.controller.abort(),this._pendingEdits=null}get _paused(){return this._suspended||!!this._pendingEdits}restart(){this._featureTiles.forEach(e=>{this._cancelFetchTile(e),this._clearTile(e),this._resetFetchTile(e)}),null!=this.context.memoryCache&&this.context.memoryCache.clear(),this._setDirty()}refetch(){this._featureTiles.forEach(e=>{this._cancelFetchTile(e),this._resetFetchTile(e)}),null!=this.context.memoryCache&&this.context.memoryCache.clear(),this._setDirty()}refetchDisplayFilterHighlightTile(){const e=this._featureTiles.get(I);e&&(this._cancelFetchTile(e),this._resetFetchTile(e),this._setDirty())}suspend(){this._suspended||(this._suspended=!0,this._pause(),this._setDirty())}resume(){this._suspended&&(this._suspended=!1,this._unpause())}getMissingAttributesForFeature(e){for(const t of this._featureTiles.values()){const s=t.missingAttributes?.get(e);if(null!=s)return s}}_pause(){this._paused&&(this._featureTiles.forEach(e=>this._cancelFetchTile(e)),this._updated())}_unpause(){this._paused||this._setDirty()}get availableFields(){let e=null;return this._featureTiles.forEach(t=>{null!=t.displayingFeatures&&0!==t.displayingFeatures.length&&(null==e?e=new Set(t.availableFields):e.forEach(s=>{t.availableFields?.has(s)||e.delete(s)}))}),null!=e?e:new Set}applyEdits(e){this._pendingEdits||(this._pendingEdits={edits:Promise.resolve(),count:0,controller:new AbortController},this._pause());const t=this._pendingEdits;t.count++;const s=t.edits.then(()=>e.result.catch(e=>{if(a(e))throw e;return null}).then(e=>e?(this._applyEditsDeleteFeatures(e.deletedFeatures),this._applyEditsAddUpdateFeatures(e.addedFeatures,e.updatedFeatures,t.controller.signal).then(()=>e)):e).then(e=>(0===--t.count&&(this._pendingEdits===t&&(this._pendingEdits=null),null!=this.context.memoryCache&&this.context.memoryCache.clear(),this._applyEditsTilesUpdated=!1,this._unpause()),e)));return t.edits=s,this._updated(),s}_applyEditsDeleteFeatures(e){if(0===e.length)return;const t=this.context.globalIdField,s=t&&this.availableFields.has(t),r=new Set,a=this._objectIdField;e.forEach(({objectId:e,globalId:n})=>{(!e||e<0)&&t&&n&&(s||i.getLogger(this).errorOncePerTick(`Editing the specified service requires the layer's globalIdField, ${t} to be included the layer's outFields for updates to be reflected in the view`),e=this._objectIdFromGlobalId(n,a,t)),null!=e&&e>=0&&r.add(e)}),this._featureTiles.forEach(e=>{if(!e.features)return;const t=e.features.filter(e=>!r.has(R(e,this._objectIdField)));t.length!==e.features.length&&(this._applyEditsTileUpdated(),e.setFeatures(t,0,e.availableFields,e.missingAttributes),this._updateTileZQuantization(e),this._invalidateCounts())})}_objectIdFromGlobalId(e,t,s){if(null==e)return null;const i=this.features.find(t=>t.attributes?.[s]===e);return i?R(i,t):null}async _applyEditsAddUpdateFeatures(e,t,s){const{objectIdField:r,globalIdField:a}=this.context,n=a&&this.availableFields.has(a),o=new Set,l=new Set;for(const i of e){const e=i.objectId;null!=e&&o.add(e)}for(const{objectId:h,globalId:d}of t){let e=h;(null==e||e<0)&&a&&(n||i.getLogger(this).errorOncePerTick(`Editing the specified service requires the layer's globalIdField, ${a} to be included the layer's outFields for updates to be reflected in the view`),e=this._objectIdFromGlobalId(d,r,a)),null!=e&&e>=0&&(o.add(e),l.add(e))}if(0===o.size)return;const u=[];this._featureTiles.forEach(e=>{const t=this._applyEditsAddUpdateTile(e,o,l,s);u.push(t)}),this._updated(),await Promise.allSettled(u)}async _applyEditsAddUpdateTile(e,t,s,i){if(!e.features)return;e.fetchingResolution=e.descriptor.resolution;const r=this._createQuery(e);r.resultType=void 0,r.cacheHint=!1,r.objectIds=Array.from(t);const a=await this._queryFeatures(r,i);let n=null;if(s.size>0){const t=e.features.filter(e=>!s.has(R(e,this._objectIdField)));t.length!==e.features.length&&(n=t)}if(a.features.length>0){n||(n=e.features.slice());for(const e of a.features)n.push(e)}n&&(e.hasPreciseFeatureCount&&(e.numFeatures=Math.max(e.numFeatures,n.length)),this._applyEditsTileUpdated(),e.setFeatures(n,0,V(e.availableFields,a.fields),$(e.missingAttributes,a.missingAttributes)),this._updateTileZQuantization(e),this._invalidateCounts())}_applyEditsTileUpdated(){this._applyEditsTilesUpdated||(this._applyEditsTilesUpdated=!0,this._updated())}_queryFeatures(e,t){return this.context.query.queryFeaturesDehydrated(e,{signal:t,timeout:K})}_setDirty(){this._dirty=!0,this._updated()}runTask(e){const t=this._frameTask.processQueue(e);if(!this._dirty||!this.initialized)return t;this._dirty=!1;const s=this._featureTilesArray;if(this._markTilesNotAlive(s),!e.run(()=>this._addTiles(s,e))||!e.run(()=>this._filterExtentTiles(s,e))||!e.run(()=>this._removeTiles(s,e))||e.done)return void this._setDirty();const i=this._sortTiles(s);e.run(()=>this._showTiles(i,e))&&e.run(()=>this._fetchTiles(i,e))&&e.run(()=>this._updateMemoryEstimates(i,e))||this._setDirty(),this._updated(),this.updating||(this._updateMaximumNumberOfFeaturesExceeded(),this._updateSnappingComplexityExceeded(i))}_updateSnappingComplexityExceeded(e){let t=ee;for(const s of e){if(S(s)||t<=0)break;if(!N(s)&&(t--,s.sampledDensityEstimate>Y))return void(this.snappingComplexityExceeded=!0)}this.snappingComplexityExceeded=0===this._featureTiles.size}_markTilesNotAlive(e){for(const t of e)t.alive=!1}_addTiles(e,t){return!(this._suspended||!this.tileDescriptors)&&(this.tileDescriptors.forEach(s=>{const i=this._featureTiles.get(s.id);i?i.alive=!0:t.done||(e.push(this._addTile(s)),t.madeProgress())}),t.hasProgressed)}_filterExtentTiles(e,t){for(const s of e){if(t.done)break;s.alive&&(s.filtered=!s.intersects(this.filterExtent),s.filtered&&(this._clearTile(s),t.madeProgress()))}return t.hasProgressed}_removeTiles(e,t){for(let s=e.length-1;s>=0&&!t.done;s--){const i=e[s];i.alive||(this._removeTile(i),s!==e.length-1&&(e[s]=e[e.length-1]),e.pop(),t.madeProgress())}return t.hasProgressed}_sortTiles(e){return e.sort((e,t)=>e.descriptor.loadPriority-t.descriptor.loadPriority),e}_showTiles(e,t){const s=this._updateRatio(e),i=e=>{const t=this._fullRatio<1?s(e)*this._farRatio:1;e.reduceFeatures(t,this.memoryFactor,this._objectIdField,this._reduceMode)&&this._setDirty();const{numFeatures:i,fetchingResolution:r,descriptor:a,isFetched:n}=e;return this._supportsResolution&&i>0&&r!==a.resolution&&n&&(e.requestRefetch(),this._setDirty()),this._showTile(e)};for(const r of e)if(!t.run(()=>i(r))){this._setDirty();break}return t.hasProgressed}_fetchTiles(e,t){if(this._paused)return!1;let s=!1;for(const i of e){if(!i.needsFetch)continue;const e=null!=this.context.memoryCache?this.context.memoryCache.pop(i.id):null;if(e?.resolution!==i.displayingResolution){if(this._needsNumFeatures(i)){const e=new AbortController,r=this._fetchTileCount(i,e.signal);this._handleRequest(i,r,e,()=>i.resetFetching(),()=>i.numFeatures=U),s=!0,t.madeProgress()}if(t.done)return!0}else i.cache=e,i.numFeatures&&this._notifyDataUpdating(),this._setDirty(),this._scheduleUpdated(),t.madeProgress()}if(s)return t.hasProgressed;for(const r of e){if(!r.needsFetch)continue;const e=new AbortController,s=this._fetchTile(r,e.signal);if(this._handleRequest(r,s,e,e=>r.fetchDone(e),e=>{r.fetchFailed=!0,this.context.logFetchError(i.getLogger(this),e)}),t.madeProgress(),t.done)return!0}return t.hasProgressed}_updateMemoryEstimates(e,t){return e.some(e=>!t.run(()=>e.updateEstimates())&&(this._setDirty(),!0)),t.hasProgressed}_reclip(e,t){if(!this.initialized)return;const s=new Array;this._featureTiles.forEach(i=>{null!=i.displayingFeatures&&0!==i.displayingFeatures.length&&(i.intersectionIncludingBorrowed(t,G),i.intersectionIncludingBorrowed(e,X),g(G,X)||s.push(i))}),this._refreshDisplayingFeatures(s),this._updated()}_refreshDisplayingFeatures(e){const t=new Set,s=this._changes.updates;for(const i of e)if(null!=i.displayingFeatures)for(const e of i.displayingFeatures){const i=R(e,this._objectIdField);if(t.has(i))continue;t.add(i);const r=this._displayingFeatureReferences.get(i).feature;s.removes.push(r),s.adds.push(r)}this._applyChanges()}_updated(){let e=0;if(this._paused||this._featureTiles.forEach(t=>t.isFetching?++e:0),this._isFetching=e>0,e>0||this._applyEditsTilesUpdated?this._notifyDataUpdating():this._dirty||this._set("dataUpdating",!1),this.updating){let t=0,s=0,i=0,r=0,a=0;const n=this._displayingFeatureReferences.size/this._numDisplayingFeatureReferences;this._featureTiles.forEach(e=>{if(++s,e.isFetching&&e.hasPreciseFeatureCount){const t=this._maximumFeaturesForTile(e)*(1-e.emptyFeatureRatio),s=null!=e.displayingFeatures?e.displayingFeatures.length*n:0;a+=t-s}e.needsFetch?++r:e.numFeatures>0&&(++i,t+=e.numFeatures)}),r+=e;let o=0,l=0;t?(l=t,o=Math.min(r*t/i,t)):(l=s,o=r),a=Math.min(this.maximumNumberOfFeatures-this.features.length,a),this._set("updatingTotal",l),this._set("updatingRemaining",o),this._set("expectedFeatureDiff",a)}else this._set("updatingTotal",0),this._set("updatingRemaining",0),this._set("expectedFeatureDiff",0);this.debugger?.update()}_updateMaximumNumberOfFeaturesExceeded(){for(const{perTileMaximumNumberOfFeaturesExceeded:e}of this._featureTiles.values())if(e)return void this._set("maximumNumberOfFeaturesExceeded",!0);this._set("maximumNumberOfFeaturesExceeded",!1)}_updateRatio(e){const t=k(e),s=e=>1/(1<<Math.max(0,t-e.descriptor.lij[0]));let i=0,r=0;for(const a of e){const e=a.numFeatures;i+=e,r+=e*s(a)}return this._fullRatio=Math.min(1,this.maximumNumberOfFeatures/i),this._farRatio=this.maximumNumberOfFeatures/r,this._scheduleUpdated(),s}_maximumFeaturesUpdated(e,t){e!==t&&(t>e&&this._featureTiles.forEach(e=>{if(!e.featuresMissing)return;const t=this._maximumFeaturesForTile(e);e.isFullyFetched(t)||(this._cancelFetchTile(e),this._resetFetchTile(e))}),this._setDirty())}_addTile(e){const t=new A(e,this._memory);return this._featureTiles.set(t.id,t),this._resetFetchTile(t),this._referenceDisplayingFeaturesFromRelatedTiles(t),t}_referenceDisplayingFeaturesFromRelatedTiles(e){const t=e.displayingResolution;this._featureTiles.forEach(s=>{if(null!=s.displayingFeatures&&e!==s&&O(e.descriptor.lij,s.descriptor.lij)){null==e.displayingFeatures&&(e.displayingFeatures=[]),e.descriptor.extent&&s.descriptor.extent&&(e.extentIncludingBorrowedFeatures??=y(e.descriptor.extent),F(e.extentIncludingBorrowedFeatures,s.descriptor.extent,e.extentIncludingBorrowedFeatures));for(const i of s.displayingFeatures){e.displayingFeatures.push(i),this._memory.ref(i);const s=this._displayingFeatureReferences.get(R(i,this._objectIdField));s.ref(this._memory,s.feature,t),this._numDisplayingFeatureReferences++}}})}_removeTile(e){this._clearTile(e),this._featureTiles.delete(e.id)}_resetFetchTile(e){e.filtered=!e.intersects(this.filterExtent),e.filtered?e.needsFetch&&e.fetchDone(4):e.requestFetch()}_cancelFetchTile(e){const t=e.requestController;null!=t&&(e.requestController=null,e.resetFetching(),t.abort())}async _fetchTileCount(e,t){e.numFeatures=await this.context.query.queryFeatureCount(this._createFeatureCountQuery(e),{signal:t}),this._updateRatio(this._featureTilesArray)}async _fetchTile(e,t){e.fetchFailed=!1;const s=this._maximumFeaturesForTile(e);if(s<=0)return e.hasPreciseFeatureCount&&0===e.numFeatures||(e.fetchFailed=!0),H(e),e.fetchInformation.value="Empty tile",4;const i=this._getMaxRecordCount(e),r=Math.ceil(s/i);if(e.fetchingResolution=e.descriptor.resolution,L(e)||!this.context.capabilities.supportsMaxRecordCountFactor||e.numFeatures<=s&&r>D.MAX_MAX_RECORD_COUNT_FACTOR)return this._fetchPagedTile(e,t);const a=this._createQuery(e);if(a.maxRecordCountFactor=r,e.isRefetching&&e.features&&e.features.length>0){const t=Math.ceil(e.features.length/(1-e.emptyFeatureRatio)/i);a.maxRecordCountFactor=Math.max(t+1,a.maxRecordCountFactor)}e.fetchInformation.value=`Single fetch\n${s} features`;const{features:o,exceededTransferLimit:l,fields:u,missingAttributes:h}=await this._queryFeatures(a,t),d=l||a.maxRecordCountFactor>=D.MAX_MAX_RECORD_COUNT_FACTOR||s===this._totalFeaturesForTile(e)?5:4,c=await this._frameTask.schedule(()=>{e.exceededTransferLimit.value=!!l;const t=this._removeEmptyFeatures(o,this._getEffectiveTileResolution(e));return e.fetchInformation.value=`Single fetch\n${o.length}/${s} features`,e.setFeatures(o,t,Z(u),$(void 0,h)),this._updateTileZQuantization(e),this._maximumFeaturesForTile(e)>s?1:d},t);return n(t),this._invalidateCounts(),c}async _fetchPagedTile(e,t){let s,i=0,r=0,a=0,o=this._maximumFeaturesForTile(e)-a;const l=this._getMaxRecordCount(e);let u,h=null;for(;;){const d=this._createQuery(e),c=this._setPagingParameters(d,i,o,l);e.fetchInformation.value=`Paged fetch\n${e.features?.length}/${o} features`;const{features:p,exceededTransferLimit:f,fields:m,missingAttributes:_}=await this._queryFeatures(d,t);if(await this._frameTask.schedule(()=>{c&&(i+=d.num),a+=p.length,r+=this._removeEmptyFeatures(p,this._getEffectiveTileResolution(e)),e.exceededTransferLimit.value=!!f,s=s?.concat(p)??p,h=V(h,m),u=$(u,_),e.setFeatures(s,r,h,u),this._updateTileZQuantization(e),this._invalidateCounts(),this._setDirty()},t),n(t),o=this._maximumFeaturesForTile(e)-(s?.length??0),!c||!f||o<=0)return f?4:5}}_createFeatureCountQuery(e){const t=this._createQuery(e);return this.context.capabilities.supportsCacheHint&&(t.resultType=void 0,t.cacheHint=!0),t}_createQuery(e){const t=this.context.createQuery();if(t.resultType=this._resultType(e),!L(e)&&e.descriptor.extent&&this.context.tilingScheme&&(t.geometry=T(e.descriptor.extent,this.context.tilingScheme.spatialReference)),this._setResolutionParams(t,e),"tile"!==t.resultType&&this.context.capabilities.supportsCacheHint&&(t.cacheHint=!0),N(e)){const{highlightIds:e}=this.context;e&&e.length>B&&i.getLogger(this).warn("highlight-too-many-features",`highlight is limited to ${B} features on large layers configured with a display filter to avoid performance issues`),t.objectIds=e?.slice(0,B)}else!S(e)&&this.context.effectiveDisplayFilter&&(t.where=c(t.where,this.context.effectiveDisplayFilter.where));return t}_setPagingParameters(e,t,s,i){return!!this.context.capabilities.supportsPagination&&(e.start=t,s>0&&this.context.capabilities.supportsMaxRecordCountFactor?(e.maxRecordCountFactor=Math.ceil(s/i),e.num=Math.min(e.maxRecordCountFactor*i,s)):e.num=Math.min(i),!0)}_getEffectiveTileResolution(e){if(L(e)||!this._supportsResolution)return null;const t=1===this.context.viewingMode&&this.context.tilingScheme?this.context.tilingScheme.resolutionAtLevel(3):1/0;return Math.min(e.fetchingResolution,t)/this.lodFactor/this._tileZQuantization}get _supportsResolution(){return this.context.capabilities.supportsMultipleResolutions&&"point"!==this.context.geometryType}_setResolutionParams(e,t){const s=this._getEffectiveTileResolution(t);null!=s&&(this.context.capabilities.supportsQuantization?e.quantizationParameters=new C({mode:"view",originPosition:"upper-left",tolerance:s,extent:this.context.fullExtent}):"polyline"===this.context.geometryType&&(e.maxAllowableOffset=s))}_removeEmptyFeatures(e,t){const i=e.length;if(t&&this._supportsResolution){const i=t*(1+m());s(e,({geometry:e})=>!(!e||!E(e))&&(b(e,J),x(J)>i||v(J)>i))}else s(e,({geometry:e})=>E(e));return i-e.length}_needsNumFeatures(e){return this.useTileCount&&e.needsFeatureCount&&!S(e)}_getMaxRecordCount(e){switch(this._resultType(e)){case"tile":if(this.context.tileMaxRecordCount)return this.context.tileMaxRecordCount;break;case"standard":if(this.context.standardMaxRecordCount)return this.context.standardMaxRecordCount}return this.context.maxRecordCount||B}_resultType(e){if(this.context.capabilities.supportsResultType)return S(e)?"standard":"tile"}get _reduceMode(){const e=this.context.geometryType;return"polygon"===e||"polyline"===e?0:1}_handleRequest(e,t,s,i,r){e.startFetch(),e.requestController=s;let n=!1;t.then(t=>{e.requestController=null,i(t)}).catch(t=>{e.requestController===s&&(e.requestController=null,e.fetchDone(4)),a(t)?n=!0:r(t)}).then(()=>{n||this._setDirty(),this._scheduleUpdated()})}_scheduleUpdated(){this.hasHandles("scheduleUpdated")||this.addHandles(h(()=>{this.removeHandles("scheduleUpdated"),this._updated()}),"scheduleUpdated")}_showTile(e){if(e.displayingFeatures&&!e.needsDisplayUpdate)return!1;const t=e.features;if(0===e.featureLimit||!t){const t=null!=e.displayingFeatures&&e.displayingFeatures.length>0;return this._hideTileFeatures(e),e.displayingFeatures=[],t}const s=e.fetchingResolution,{adds:i,updates:r}=this._changes,a=Math.min(e.featureLimit,t.length);for(let n=0;n<a;++n){const e=t[n],a=R(e,this._objectIdField),o=this._displayingFeatureReferences.get(a);if(this._memory.ref(e),o){const{oldVersion:t,newVersion:i}=o.ref(this._memory,e,s);t!==i&&(t&&r.removes.push(t),i&&r.adds.push(i))}else this._displayingFeatureReferences.set(a,new this.FeatureReferenceClass(e,s,this._memory)),i.push(e);this._numDisplayingFeatureReferences++}return this._hideTileFeatures(e),e.displayingResolution=e.fetchingResolution,this._applyChanges(),e.displayingFeatures=t.slice(0,a),!0}_hideTile(e){this._cancelFetchTile(e),this._hideTileFeatures(e)}_hideTileFeatures(e){if(null==e.displayingFeatures)return;const{updates:t,removes:s}=this._changes;for(const i of e.displayingFeatures){this._memory.unref(i);const r=R(i,this._objectIdField),a=this._displayingFeatureReferences.get(r);if(!a)continue;const{oldVersion:n,newVersion:o}=a.unref(this._memory,e.displayingResolution);this._numDisplayingFeatureReferences--,n!==o&&(null==o?(this._displayingFeatureReferences.delete(r),n&&s.push(n)):(t.adds.push(o),n&&t.removes.push(n)))}this._applyChanges(),e.displayingFeatures=null}_notifyDataUpdating(){this._get("dataUpdating")||this._set("dataUpdating",!0)}_applyChanges(){const e=this._changes.updates;e.removes.length>0&&(this._notifyDataUpdating(),this.features.removeMany(e.removes),e.removes.length=0),e.adds.length>0&&(this._notifyDataUpdating(),this.features.addMany(e.adds),e.adds.length=0);const t=this._changes.adds,s=this._changes.removes,i=Math.min(t.length,s.length);let r=0;for(;r<i;){const e=Math.min(r+W,i);this._notifyDataUpdating(),this.features.addMany(t.slice(r,e)),this.features.removeMany(s.slice(r,e)),r=e}t.length>i&&(this._notifyDataUpdating(),this.features.addMany(0===r?t:t.slice(r))),s.length>i&&(this._notifyDataUpdating(),this.features.removeMany(0===r?s:s.slice(r))),t.length=0,s.length=0}_clearTile(e){this._hideTile(e),e.features&&null!=this.context.memoryCache&&this.context.memoryCache.put(e.id,e.cache),e.setFeatures(null,0,null,void 0),this._invalidateCounts()}_invalidateCounts(){this.notifyChange("totalVertices"),this.notifyChange("totalFeatures")}get _featureTilesArray(){return Array.from(this._featureTiles.values())}get featureTiles(){return this._featureTiles}get storedFeatures(){return this._featureTilesArray.reduce((e,t)=>e+(t.features?t.features.length:0),0)}get missingTiles(){return this._featureTiles.values().reduce((e,t)=>e+(t.needsFetch||t.isFetching?1:0),0)}_totalFeaturesForTile(e){return e.hasPreciseFeatureCount?e.numFeatures:this.maximumNumberOfFeatures}_maximumFeaturesForTile(e){const t=this._totalFeaturesForTile(e),s=this._fullRatio<1?this._farRatio:1;return Math.min(Math.ceil(t*s/(1-e.emptyFeatureRatio)),t)}get test(){}};function S(e){return e.id===P}function N(e){return e.id===I}function L(e){return S(e)||N(e)}function k(e){let t=0;for(const s of e)s.features&&s.features.length>0&&s.alive&&(t=Math.max(t,s.descriptor.lij[0]));return t}function H(e){e.setFeatures([],0,null,void 0)}function Z(e){return null==e?new Set:new Set(e.map(e=>e.name))}function V(e,t){if(null==e||null==t)return Z(t);const s=new Set;for(const{name:i}of t)e.has(i)&&s.add(i);return s}function $(e,t){if(!t?.length)return e;e??=new Map;const s=()=>new Set;for(const{objectId:i,attribute:a}of t)r(e,i,s).add(a);return e}e([p({constructOnly:!0})],Q.prototype,"features",void 0),e([p({constructOnly:!0})],Q.prototype,"context",void 0),e([p()],Q.prototype,"tileDescriptors",void 0),e([p({value:1/0})],Q.prototype,"maximumNumberOfFeatures",null),e([p({value:1})],Q.prototype,"memoryFactor",null),e([p({value:1})],Q.prototype,"lodFactor",null),e([p()],Q.prototype,"useTileCount",null),e([p({readOnly:!0})],Q.prototype,"updating",null),e([p({readOnly:!0})],Q.prototype,"dataUpdating",void 0),e([p({readOnly:!0})],Q.prototype,"updatingTotal",void 0),e([p({readOnly:!0})],Q.prototype,"updatingRemaining",void 0),e([p({readOnly:!0})],Q.prototype,"expectedFeatureDiff",void 0),e([p()],Q.prototype,"usedMemory",null),e([p()],Q.prototype,"usedMemoryPerFeature",null),e([p({readOnly:!0})],Q.prototype,"maximumNumberOfFeaturesExceeded",void 0),e([p({readOnly:!0})],Q.prototype,"totalVertices",null),e([p({readOnly:!0})],Q.prototype,"totalFeatures",null),e([p({readOnly:!0})],Q.prototype,"showsAllFeatures",null),e([p({readOnly:!0})],Q.prototype,"hasFullGeometries",null),e([p()],Q.prototype,"filterExtent",null),e([p()],Q.prototype,"_dirty",void 0),e([p()],Q.prototype,"_suspended",void 0),e([p()],Q.prototype,"_pendingEdits",void 0),e([p()],Q.prototype,"_applyEditsTilesUpdated",void 0),e([p()],Q.prototype,"_paused",null),e([p()],Q.prototype,"snappingComplexityExceeded",void 0),e([p()],Q.prototype,"_isFetching",void 0),Q=e([f("esri.views.3d.layers.support.FeatureTileFetcher3D")],Q);const B=2e3,G=_(),X=_(),J=_(),K=6e5,W=200,Y=.95,ee=10;export{Q as FeatureTileFetcher3D};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import e from"../../../../core/Error.js";import"../../../../geometry/SpatialReference.js";import"../../../../geometry/support/aaBoundingBox.js";import"../../../../core/mathUtils.js";import"../../../../geometry/Extent.js";import"../../../../geometry/support/typeUtils.js";import"../../../../layers/support/Field.js";import"../../../../core/has.js";import{equals as t}from"../../../../layers/graphics/dehydratedFeatureComparison.js";class r{constructor(e,t){this.feature=e,this.resolution=t,this.refCount=1}}class s{get isReferenced(){return 0!==this.versions.length}get isSingle(){return 1===this.versions.length&&1===this.versions[0].refCount}constructor(e,t){this._highestResolutionVersion=null,this.versions=[],this.ref(e,t)}ref(e,s){const o=this.feature;n.oldVersion=o,o&&Object.defineProperty(e,"uid",{value:o.uid,configurable:!0});const i=this._highestResolutionVersion;for(const r of this.versions)if(r.resolution===s){r.refCount++;const s=i===r&&!t(e,r.feature);return(s||i!==r)&&(r.feature=e),n.newVersion=s?e:o,n}const u=new r(e,s);return this.versions.push(u),!i||s<i.resolution?(n.newVersion=e,this._highestResolutionVersion=u):n.newVersion=o,n}unref(t){const{versions:r}=this;for(let e=0;e<r.length;e++){const s=r[e];if(s.resolution===t)return s.refCount--,i.oldVersion=this.feature,0===s.refCount&&(r[e]=r[r.length-1],--r.length,this._highestResolutionVersion===s&&(this._recalculateHighestResolutionVersion(),i.oldVersion=s.feature)),i.newVersion=this.feature,i}const s=`Unref feature with no references: ${this.feature?.uid}`;throw new e(s,s,(new Error).stack?.slice(6))}get feature(){return this._highestResolutionVersion?.feature??null}_recalculateHighestResolutionVersion(){if(0===this.versions.length)return void(this._highestResolutionVersion=null);let e=this.versions[0];for(let t=1;t<this.versions.length;t++){const r=this.versions[t];r.resolution<e.resolution&&(e=r)}this._highestResolutionVersion=e}}class o{get isReferenced(){return 0!==this._refCount}get isSingle(){return 1===this._refCount}constructor(e){this._feature=e,this._refCount=1}ref(e){++this._refCount;const r=this._feature;return n.oldVersion=r,r&&Object.defineProperty(e,"uid",{value:r.uid,configurable:!0}),t(r,e)||(this._feature=e),n.newVersion=this._feature,n}unref(){i.oldVersion=this._feature;const t=this._refCount;if(!(t>0)){const t=`Unref feature with no references: ${this.feature?.uid}`;throw new e(t,t,(new Error).stack?.slice(6))}return this._refCount=t-1,1===t?(i.newVersion=null,i):(i.newVersion=this._feature,i)}get feature(){return this._feature}}const i={oldVersion:null,newVersion:null},n={oldVersion:null,newVersion:null};export{r as FeatureVersion,s as MultiFeatureReference,o as SingleFeatureReference};
2
+ import e from"../../../../core/Error.js";import"../../../../geometry/SpatialReference.js";import"../../../../geometry/support/aaBoundingBox.js";import"../../../../core/mathUtils.js";import"../../../../geometry/Extent.js";import"../../../../geometry/support/typeUtils.js";import"../../../../core/has.js";import{equals as t}from"../../../../layers/graphics/dehydratedFeatureComparison.js";class r{constructor(e,t){this.feature=e,this.resolution=t,this.refCount=1}}class s{get isReferenced(){return 0!==this.versions.length}get isSingle(){return 1===this.versions.length&&1===this.versions[0].refCount}constructor(e,t,r){this._highestResolutionVersion=null,this.versions=[],this.ref(r,e,t)}ref(e,s,n){const o=this.feature;i.oldVersion=o,o&&Object.defineProperty(s,"uid",{value:o.uid,configurable:!0});const u=this._highestResolutionVersion;for(const r of this.versions)if(r.resolution===n){r.refCount++;const n=u===r&&!t(s,r.feature);return(n||u!==r)&&(e.ref(s),e.unref(r.feature),r.feature=s),i.newVersion=n?s:o,i}const h=new r(s,n);return this.versions.push(h),e.ref(s),!u||n<u.resolution?(i.newVersion=s,this._highestResolutionVersion=h):i.newVersion=o,i}unref(t,r){const{versions:s}=this;for(let e=0;e<s.length;e++){const n=s[e];if(n.resolution===r)return n.refCount--,o.oldVersion=this.feature,0===n.refCount&&(t.unref(n.feature),s[e]=s[s.length-1],--s.length,this._highestResolutionVersion===n&&(this._recalculateHighestResolutionVersion(),o.oldVersion=n.feature)),o.newVersion=this.feature,o}const n=`Unref feature with no references: ${this.feature?.uid}`;throw new e(n,n,(new Error).stack?.slice(6))}get feature(){return this._highestResolutionVersion?.feature??null}_recalculateHighestResolutionVersion(){if(0===this.versions.length)return void(this._highestResolutionVersion=null);let e=this.versions[0];for(let t=1;t<this.versions.length;t++){const r=this.versions[t];r.resolution<e.resolution&&(e=r)}this._highestResolutionVersion=e}}class n{get isReferenced(){return 0!==this._refCount}get isSingle(){return 1===this._refCount}constructor(e,t,r){this._feature=e,this._refCount=1,r.ref(e)}ref(e,r,s){++this._refCount;const n=this._feature;return i.oldVersion=n,n&&Object.defineProperty(r,"uid",{value:n.uid,configurable:!0}),t(n,r)||(e.ref(r),e.unref(this._feature),this._feature=r),i.newVersion=this._feature,i}unref(t,r){o.oldVersion=this._feature;const s=this._refCount;if(!(s>0)){const t=`Unref feature with no references: ${this.feature?.uid}`;throw new e(t,t,(new Error).stack?.slice(6))}return this._refCount=s-1,1===s?(t.unref(this._feature),o.newVersion=null,o):(o.newVersion=this._feature,o)}get feature(){return this._feature}}const o={oldVersion:null,newVersion:null},i={oldVersion:null,newVersion:null};export{r as FeatureVersion,s as MultiFeatureReference,n as SingleFeatureReference};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import{__decorate as t}from"tslib";import e from"../../../../core/Logger.js";import{property as o,subclass as s}from"../../../../core/accessorSupport/decorators.js";import{NavigationMode3D as i}from"./NavigationMode3D.js";let n=class extends i{constructor(t){super(t),this.type="ground",this.nearOverride=.5,this.farOverride=1e4,this.include=null,this.exclude=null}attach(t){super.attach(t),this._warnIfOffsetIsBelowConstraints()}detach(){super.detach()}get offset(){const t=this._get("offset");return void 0!==t?t:1.8}set offset(t){this._set("offset",t),this._warnIfOffsetIsBelowConstraints()}_warnIfOffsetIsBelowConstraints(){if(null==this.view||null==this.offset)return;const t=this.view.state.constraints.altitude,o=this.view.state.constraints.collision;t&&this.offset<t.min&&e.getLogger(this).warn("offset-smaller-than-altitude-constraint",`The ground navigation offset of ${this.offset} is smaller than the view's min altitude constraint with a value of ${t.min}. Unexpected behaviour close to ground might occur. Adjust or remove constraints from view.constraints.altitude to address this.`),o?.enabled&&this.offset<o.elevationMargin&&e.getLogger(this).warn("offset-smaller-than-navigation-constraint",`The ground navigation offset of ${this.offset} is smaller than the value of ${o.elevationMargin} that is enforced by the view's navigation constraint. Unexpected behaviour close to ground might occur. Adjust or remove constraints from view.map.ground.navigationConstraint to address this.`)}};t([o()],n.prototype,"include",void 0),t([o()],n.prototype,"exclude",void 0),t([o()],n.prototype,"offset",null),n=t([s("esri.views.3d.navigation.modes.GroundNavigationMode3D")],n);export{n as GroundNavigationMode3D};
2
+ import{__decorate as t}from"tslib";import e from"../../../../core/Logger.js";import{property as s,subclass as o}from"../../../../core/accessorSupport/decorators.js";import{NavigationMode3D as i}from"./NavigationMode3D.js";let r=class extends i{constructor(t){super(t),this.type="ground",this.nearOverride=.5,this.farOverride=1e4}attach(t){super.attach(t),this._warnIfOffsetIsBelowConstraints()}detach(){super.detach()}get offset(){const t=this._get("offset");return void 0!==t?t:1.8}set offset(t){this._set("offset",t),this._warnIfOffsetIsBelowConstraints()}_warnIfOffsetIsBelowConstraints(){if(null==this.view||null==this.offset)return;const t=this.view.state.constraints.altitude,s=this.view.state.constraints.collision;t&&this.offset<t.min&&e.getLogger(this).warn("offset-smaller-than-altitude-constraint",`The ground navigation offset of ${this.offset} is smaller than the view's min altitude constraint with a value of ${t.min}. Unexpected behaviour close to ground might occur. Adjust or remove constraints from view.constraints.altitude to address this.`);const o=this.view.state.constraints.elevationMargin;s?.enabled&&this.offset<o&&e.getLogger(this).warn("offset-smaller-than-navigation-constraint",`The ground navigation offset of ${this.offset} is smaller than the value of ${o} that is enforced by the view's navigation constraint. Unexpected behaviour close to ground might occur. Adjust or remove constraints from view.map.ground.navigationConstraint to address this.`)}};t([s()],r.prototype,"include",void 0),t([s()],r.prototype,"exclude",void 0),t([s()],r.prototype,"offset",null),r=t([o("esri.views.3d.navigation.modes.GroundNavigationMode3D")],r);export{r as GroundNavigationMode3D};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import{__decorate as t}from"tslib";import e from"../../../core/Accessor.js";import i from"../../../core/Logger.js";import{clamp as o,deg2rad as s}from"../../../core/mathUtils.js";import{property as r,subclass as n}from"../../../core/accessorSupport/decorators.js";import{earth as a}from"../../../geometry/support/Ellipsoid.js";import{makePiecewiseLinearFunction as l}from"../support/mathUtils.js";let m=class extends e{constructor(t){super(t),this.collision=new h,this.distance=1/0,this.minimumPoiDistance=4,this.tilt=null}get altitude(){return 2===this.mode?null:this._get("altitude")||null}set altitude(t){2!==this.mode?this._set("altitude",t):i.getLogger(this).warn("Altitude constraint is ignored in local scenes")}get mode(){return this.state.viewingMode}clampAltitude(t){return this.altitude?o(t,this.altitude.min,this.altitude.max):t}clampTilt(t,e){if(!this.tilt)return e;const i=this.tilt(t);return o(e,i.min,i.max)}clampDistance(t){return Math.min(t,this.distance)}createDefaultTilt(){return 2===this.mode?this._createDefaultTiltLocal():this._createDefaultTiltGlobal()}createConstantMaxTilt(t){return(e,i=p)=>(i.min=d.min,i.max=t,i)}_createDefaultTiltLocal(){const t=this.collision.enabled?l([[4e3,d.max],[1e4,s(88)],[6e6,s(88)]]):()=>d.max;return(e,i=p)=>(i.min=d.min,i.max=t(e),i)}_createDefaultTiltGlobal(){const t=this.collision.enabled?l([[4e3,d.max],[5e4,s(88)],[6e6,s(88)],[2e7,d.min]]):l([[3e5,d.max],[3e6,s(88)],[6e6,s(88)],[2e7,d.min]]);return(e,i=p)=>(i.min=d.min,i.max=t(e),i)}};function c(t){return{min:-2e5,max:4*t.radius}}t([r()],m.prototype,"altitude",null),t([r({readOnly:!0})],m.prototype,"collision",void 0),t([r()],m.prototype,"distance",void 0),t([r({readOnly:!0})],m.prototype,"minimumPoiDistance",void 0),t([r()],m.prototype,"tilt",void 0),t([r({constructOnly:!0})],m.prototype,"state",void 0),m=t([n("esri.views.3d.state.Constraints")],m);const u=c(a),d={min:s(.5),max:s(179.5)},p={min:0,max:0};let h=class extends e{constructor(){super(...arguments),this.enabled=!0,this.elevationMargin=1}};t([r({type:Boolean})],h.prototype,"enabled",void 0),t([r({type:Number})],h.prototype,"elevationMargin",void 0),h=t([n("esri.views.3d.state.Constraints.CollisionConstraint")],h);export{m as Constraints,d as TiltRange,u as earthAltitudeConstraint};
2
+ import{__decorate as t}from"tslib";import e from"../../../core/Accessor.js";import i from"../../../core/Logger.js";import{clamp as o,deg2rad as r}from"../../../core/mathUtils.js";import{property as s,subclass as n}from"../../../core/accessorSupport/decorators.js";import{earth as a}from"../../../geometry/support/Ellipsoid.js";import{makePiecewiseLinearFunction as l}from"../support/mathUtils.js";let m=class extends e{constructor(t){super(t),this.collision=new x,this.distance=1/0,this.minimumPoiDistance=4,this.tilt=null}get altitude(){return 2===this.mode?null:this._get("altitude")||null}set altitude(t){2!==this.mode?this._set("altitude",t):i.getLogger(this).warn("Altitude constraint is ignored in local scenes")}get elevationMargin(){return"ground"===this.state.view.navigation.mode.type?g:h}get mode(){return this.state.viewingMode}clampAltitude(t){return this.altitude?o(t,this.altitude.min,this.altitude.max):t}clampTilt(t,e){if(!this.tilt)return e;const i=this.tilt(t);return o(e,i.min,i.max)}clampDistance(t){return Math.min(t,this.distance)}createDefaultTilt(){return 2===this.mode?this._createDefaultTiltLocal():this._createDefaultTiltGlobal()}createConstantMaxTilt(t){return(e,i=p)=>(i.min=d.min,i.max=t,i)}_createDefaultTiltLocal(){const t=this.collision.enabled?l([[4e3,d.max],[1e4,r(88)],[6e6,r(88)]]):()=>d.max;return(e,i=p)=>(i.min=d.min,i.max=t(e),i)}_createDefaultTiltGlobal(){const t=this.collision.enabled?l([[4e3,d.max],[5e4,r(88)],[6e6,r(88)],[2e7,d.min]]):l([[3e5,d.max],[3e6,r(88)],[6e6,r(88)],[2e7,d.min]]);return(e,i=p)=>(i.min=d.min,i.max=t(e),i)}};function c(t){return{min:-2e5,max:4*t.radius}}t([s()],m.prototype,"altitude",null),t([s({readOnly:!0})],m.prototype,"collision",void 0),t([s()],m.prototype,"elevationMargin",null),t([s()],m.prototype,"distance",void 0),t([s({readOnly:!0})],m.prototype,"minimumPoiDistance",void 0),t([s()],m.prototype,"tilt",void 0),t([s({constructOnly:!0})],m.prototype,"state",void 0),m=t([n("esri.views.3d.state.Constraints")],m);const u=c(a),d={min:r(.5),max:r(179.5)},p={min:0,max:0},h=5,g=1;let x=class extends e{constructor(){super(...arguments),this.enabled=!0}};t([s({type:Boolean})],x.prototype,"enabled",void 0),x=t([n("esri.views.3d.state.Constraints.CollisionConstraint")],x);export{m as Constraints,d as TiltRange,u as earthAltitudeConstraint};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import{lerp as e}from"../../../../core/mathUtils.js";import t from"../../../../core/PooledArray.js";import{castRenderScreenPointArray3 as r,createRenderScreenPointArray3 as n,createScreenPointArray as i}from"../../../../core/screenUtils.js";import{getMetersPerVerticalUnitForSR as s}from"../../../../core/units.js";import{set as o}from"../../../../core/libs/gl-matrix-2/math/vec2.js";import{fromValues as l}from"../../../../core/libs/gl-matrix-2/factories/vec2f64.js";import{add as c,normalize as a,dot as u,distance as d}from"../../../../core/libs/gl-matrix-2/math/vec3.js";import{create as y,clone as h}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{create as p,copy as g,negativeInfinity as m,expandWithNestedArray as f}from"../../../../geometry/support/aaBoundingRect.js";import{createSpatialReferenceCyclical as _}from"../../../../geometry/support/normalizeUtils.js";import{create as P}from"../../../../geometry/support/ray.js";import{sv3d as w}from"../../../../geometry/support/vectorStacks.js";import{getElevationOffsetInMeters as R}from"../../../../support/elevationInfoUtils.js";import{g as I}from"../../../../chunks/cameraUtilsSpherical.js";import{computeMapPointFromVec3d as v}from"../../support/hitTest.js";import{fromRenderAtEye as b,fromScreen as S}from"../../support/geometryUtils/ray.js";import{defaultTolerance as U,Intersector as j,defaultScreenPolygonPrimitiveProcessor as H}from"../../webgl-engine/lib/Intersector.js";import{RayIntersectionQuery as L,DrapedScreenPolygonIntersectionQuery as F}from"../../webgl-engine/lib/IntersectorInterfaces.js";import{isValidIntersectorResult as V}from"../../webgl-engine/lib/IntersectorResult.js";import{SliceScreenPolygonPrimitiveProcessor as x,createSliceExtrusionHalfspacePlanes as M,clipPolygonAgainstSlicedAwayHalfspaces as T,sliceFilterPredicate as k}from"../../webgl-engine/lib/intersectorUtils.js";import{prepareScreenPolygonIntersectionQuery as D}from"../../webgl-engine/lib/screenPolygonIntersectionUtils.js";import{TaskPriority as E}from"../../../support/Scheduler.js";class C{constructor(e,r,n){this.viewingMode=e,this._forEachLayer=r,this._view=n,this._externalIntersectionHandlers=new t,this._tolerance=U,this._tmpRay=P(),this._tmpRegion=p(),this._validateHUDIntersector=new j(this.viewingMode),this._validateHUDIntersector.options.hud=!1,this._screenPolygonIntersectionTask=this._view.resourceController.scheduler.registerTask(E.SCREEN_POLYGON_INTERSECTION)}destroy(){this._screenPolygonIntersectionTask.remove(),this._externalIntersectionHandlers.prune()}get screenPolygonIntersectionTask(){return this._screenPolygonIntersectionTask}intersectScreen(e,t,r){return this.intersectRay(this._getPickRay(e,this._tmpRay),N(this.viewingMode),t,r)}intersectScreenFreePointFallback(e,t,r){return this.intersectRayFreePointFallback(this._getPickRay(e,this._tmpRay),t,r)}intersectRayFreePointFallback(e,t,r){return this.intersectRay(e,N(this.viewingMode),t,r)||this._intersectRayFreePointLocal(e,t)}intersectRay(e,t,r,n){return t.options.selectionMode=!1,t.options.store=0,this.computeIntersection(e,t,!1,n),!!t.results.min&&t.results.min.getIntersectionPoint(r)}getCenterRayWithSubpixelOffset(e,t,r=.5,n=.5){return e.getRenderCenter(X,r,n),X[0]+=.0466,X[1]-=.0123,b(e,X,t)}intersectIntersectorScreen(e,t,r){this.computeIntersection(this._getPickRay(e,this._tmpRay),t,!1,r)}async intersectIntersectorScreenPolygon(e,t,r){t.polygonResults.init();const n=this._view.state.camera,i=await D(n,e);null!=i&&await this._screenPolygonIntersectionTask.scheduleGenerator(e=>this._intersectIntersectorScreenPolygon(n,t,i,r,e))}*_intersectIntersectorScreenPolygon(e,t,r,n,i){const s=new Q(n,this._forEachLayer);t.options.selectOpaqueTerrainOnly=!n||!("include"in n||"exclude"in n),t.camera=e,t.point=null,t.screenPolygonPrimitiveProcessor=H,yield*t.intersectScreenPolygon(s.layers,r);const o=this._view.slice.plane,l=o?new x(o):null;t.screenPolygonPrimitiveProcessor=l??H,yield*t.intersectScreenPolygon(s.sliceableLayers,r),t.screenPolygonPrimitiveProcessor=H,yield*this._intersectPolygonHandlersGenerator(t,s,r,null,l,void 0,!0,i),yield*this._intersectDrapedScreenPolygon(t,s,r,n),yield*t.intersectHUDScreenPolygon(s.layers,r),t.screenPolygonPrimitiveProcessor=l??H,yield*t.intersectHUDScreenPolygon(s.sliceableLayers,r),t.polygonResults.sortResults()}intersectToolIntersectorScreen(e,t,r){const n=this._getPickRay(e,this._tmpRay);this.intersectToolIntersectorRay(n,t,r)}intersectToolIntersectorRay(e,t,r){t.options.selectionMode=!0,this.computeIntersection(e,t,!1,r);const n=t.results.min;this._view.groundView.opaque||V(n)&&7!==n.intersector||(t.options.selectionMode=!1,this.computeIntersection(e,t,!1,r))}setTolerance(e=U){this._tolerance=e}addIntersectionHandler(e){this._externalIntersectionHandlers.push(e),this._externalIntersectionHandlers.sort((e,t)=>7===e.type?1:7===t.type?-1:0)}removeIntersectionHandler(e){null!=this._externalIntersectionHandlers.removeUnordered(e)&&this._externalIntersectionHandlers.sort((e,t)=>7===e.type?1:7===t.type?-1:0)}_getPickRay(e,t){const r=this._view.state.camera;return S(r,e,t)}_intersectRayFreePointLocal(e,t){return 2!==this.viewingMode||null==e||c(t,e.origin,a(w.get(),e.direction)),!1}intersectElevationFromScreen(e,t,r=0,n=null){return this._intersectElevation(this._getPickRay(e,this._tmpRay),t,r,n)}_intersectElevation(e,t,n=0,i=null){if(null==e)return null;const o=this._view,{renderCoordsHelper:l}=o,c=s(o.spatialReference),d=null!=t?t.mode:"absolute-height",y=R(t)/c,h=("on-the-ground"===d?0:y+n)*c/l.unitInMeters,{camera:p}=o.state;if("absolute-height"===d){const t=l?.getAltitude(p.eye),r=u(a(B,e.direction),l.worldUpAtPosition(p.eye,Y));if(t<h&&r<0||t>=h&&r>0)return null;if(l.intersectInfiniteManifold(e,h,B)){const e=v(o,B);return e.z??=0,e.z-=y,e}return null}const g=p.projectToRenderScreen(e.origin,r(w.get())),m=new Q(null,this._forEachLayer),f=o.slice.plane,_=f?k(f):null,P=new j(this.viewingMode);P.options.store=0,P.options.verticalOffset=h,P.options.normalRequired=!1;const I=this._createRayIntersectionQuery(e,g,!1);P.reset(I.beginPoint,I.endPoint,p),P.point=g;let b=null;if(i&&"type"in i&&"graphics"===i.type){const e=o.allLayerViews.find(e=>e.layer===i)?.uid;b=e?t=>t.layerViewUid===e:null}else i&&(b=e=>e.graphicUid!==i.uid);switch(d){case"relative-to-scene":{const e=e=>(!b||b(e))&&!!e.lastValidElevationBB;P.intersect(m.layers,I.screenPoint,this._tolerance,null,e),this._intersectRayHandlers(P,m,I,_,!1,e=>2===e.type||7===e.type||8===e.type,!1);break}case"on-the-ground":case"relative-to-ground":this._intersectRayHandlers(P,m,I,_,!1,e=>e.isGround,!1)}if(P.results.min.getIntersectionPoint(B)){const e=v(o,B);return e.z=n,e}return null}computeIntersection(e,t,n,i){if(null==e)return;const s=this._view.state.camera,o=s.projectToRenderScreen(e.origin,r(w.get())),l=new Q(i,this._forEachLayer);t.options.selectOpaqueTerrainOnly=!i||!("include"in i||"exclude"in i);const c=this._createRayIntersectionQuery(e,o,n);t.reset(c.beginPoint,c.endPoint,s),t.intersect(l.layers,c.screenPoint,this._tolerance);const a=this._view.slice.plane,u=a?k(a):null;t.intersect(l.sliceableLayers,c.screenPoint,this._tolerance,u);const d=i&&(i.requiresGroundFeedback||i.enableDraped);this._intersectRayHandlers(t,l,c,u,!!d);const y=w.get(),h=this._view,p=h.groundView.spatialReference;if(i&&i.enableDraped&&null!=p&&t.results.ground.getIntersectionPoint(y)){const e=h.overlayManager.renderer,r=h.renderCoordsHelper.spatialReference,n=w.get();h.renderCoordsHelper.fromRenderCoords(y,n,p),n[2]=h.elevationProvider?.getElevation(y[0],y[1],y[2],r,"ground")??0,e.intersectRay(t,n,t.results.ground,e=>l.filterRenderGeometry(e))}t.sortResults(),this._processHUDResults(t)}_processHUDResults(e){const t=e.results.hud;g(this._tmpRegion,m);const r=new Array,n=this._tmpRegion,i=e=>{r.push(new O(e))};e.sortResults(t.all),null!=t.min.distance&&i(t.min);for(const c of t.all)t.min.target.object!==c.target.object&&t.max.target.object!==c.target.object&&i(c);if(null!=t.max.distance&&t.max.target.object!==t.min.target.object&&i(t.max),!r.length)return;n[0]===n[2]&&(n[2]+=1),n[1]===n[3]&&(n[3]+=1);let s=!0;const o=null==e.results.max.distance;let l=0;for(const c of r)s&&(e.results.min.copy(c.result),s=!1),o&&e.results.max.copy(c.result),2===e.options.store&&e.results.all.splice(l++,0,c.result)}_createRayIntersectionQuery(e,t,r){return new L(e.origin,c(y(),e.origin,e.direction),t,r)}_intersectRayHandlers(e,t,r,n,i,s=()=>!0,o=!0){const{options:l}=e,c=l.isFiltered,a=l.filteredLayerViewUids;for(const{handler:u,filterPredicate:d,isFiltered:y,filteredLayerViewUids:h}of this._getFilteredIntersectionHandlers(t,n,null,s,o))(!y||u.isGround&&i)&&(l.isFiltered=y,l.filteredLayerViewUids=h,u.intersectRay(e,d,e.rayBegin,e.rayEnd,r.screenPoint,r.isVerticalRay));l.isFiltered=c,l.filteredLayerViewUids=a}*_intersectPolygonHandlersGenerator(e,t,r,n,i,s=()=>!0,o=!0,l){const{options:c}=e,a=c.isFiltered,u=c.filteredLayerViewUids,d=e.screenPolygonPrimitiveProcessor;for(const{handler:y,screenPolygonPrimitiveProcessor:h,isFiltered:p,filteredLayerViewUids:g}of this._getFilteredIntersectionHandlers(t,n,i,s,o))p||null==y.intersectScreenPolygon||(c.isFiltered=p,c.filteredLayerViewUids=g,e.screenPolygonPrimitiveProcessor=h??H,yield*y.intersectScreenPolygon(e,r,l));c.isFiltered=a,c.filteredLayerViewUids=u,e.screenPolygonPrimitiveProcessor=d}*_intersectDrapedScreenPolygon(e,t,r,n){const{basemapTerrain:i,overlayManager:s}=this._view,o=null!=this._view.groundView.spatialReference&&!s.renderer.isEmpty;if(!e.options.selectionMode||!n?.enableDraped||!o)return;const l=yield*this._createDrapedPolygonIntersectionQueries(r,i.slicePlaneEnabled?this._view.slice.plane:null);null!=l&&(yield*this._view.overlayManager.renderer.intersectScreenPolygon(e,l,e=>t.filterRenderGeometry(e)))}*_createDrapedPolygonIntersectionQueries(t,r){const{state:{camera:{eye:n}},pointsOfInterest:i}=this._view,s=this._view.groundView.spatialReference,c=new Array,a=r?new Array:null,u=I(this._view,i.focus.renderLocation),y=_(s);let p=Number.POSITIVE_INFINITY,g=null;const m=B,f=Y,P=e=>{if(!this._intersectDrapedScreenPolygonPoint(m,f,e))return!1;const t=null!=g&&y?g+y.shortestSignedDiff(g,m[0]):m[0];return g=t,c.push(l(t,m[1])),a&&a.push(h(f)),p=Math.min(p,d(n,f)),!0},{points:w}=t,{length:R}=w;for(let l=0;l<R;l++){const t=w[l],r=w[(l+1)%R];for(let n=0;n<u;n++){const i=n/u;if(!P(0===n?t:o(J,e(t[0],r[0],i),e(t[1],r[1],i))))return null;yield}}if(!Number.isFinite(p))return null;if(null==r||!a)return[z(c,p)];const v=this._clipDrapedScreenPolygonIntersectionQueries(a,r,y,n);return v.length>0?v:null}_clipDrapedScreenPolygonIntersectionQueries(e,t,r,n){const i=new Array,s=M(t);for(const o of T(s,e)){const e=this._createDrapedQueryFromRenderPolygon(o,r,n);null!=e&&i.push(e)}return i.sort((e,t)=>e.distance-t.distance),i}_createDrapedQueryFromRenderPolygon(e,t,r){const{renderCoordsHelper:n}=this._view,i=this._view.groundView.spatialReference,s=new Array;let o=Number.POSITIVE_INFINITY,c=null;for(const a of e){if(!n.fromRenderCoords(a,K,i))return null;const e=null!=c&&t?c+t.shortestSignedDiff(c,K[0]):K[0];c=e,s.push(l(e,K[1])),o=Math.min(o,d(r,a))}return s.length>=3&&Number.isFinite(o)?z(s,o):null}_intersectDrapedScreenPolygonPoint(e,t,r){const n=this._getPickRay(r,this._tmpRay);if(null==n)return!1;const{renderCoordsHelper:i}=this._view;this._intersectGroundPoint(t,n,r)||i.intersectManifoldClosestSilhouette(n,0,t);const s=this._view.groundView.spatialReference;return!!i.fromRenderCoords(t,e,s)}_intersectGroundPoint(e,t,r){const n=this._view.state.camera,i=new Q(null,this._forEachLayer),s=new j(this.viewingMode);W[0]=r[0],W[1]=r[1],W[2]=0;const o=this._createRayIntersectionQuery(t,W,!1);return s.options.selectionMode=!0,s.options.store=0,s.options.normalRequired=!1,s.options.selectOpaqueTerrainOnly=!1,s.reset(o.beginPoint,o.endPoint,n),this._intersectRayHandlers(s,i,o,null,!0,e=>e.isGround,!1),s.results.ground.getIntersectionPoint(e)}*_getFilteredIntersectionHandlers(e,t,r,n=()=>!0,i=!0){for(const s of this._externalIntersectionHandlers){if(!n(s))continue;let o=!1;const l=[];if(i){const t=s.layerViewUid,r=s.sublayerId,n=Array.isArray(t),i=n?t:[t];let c=!1;for(const s of i)e.filterLayerViewUid(s,r)?c=!0:n&&l.push(s);o=!c}yield new G(s,s.slicePlaneEnabled?t:null,s.slicePlaneEnabled?r:null,o,l)}}}class O{constructor(e){this.result=e,this.screenPoint=n()}}class G{constructor(e,t,r,n,i){this.handler=e,this.filterPredicate=t,this.screenPolygonPrimitiveProcessor=r,this.isFiltered=n,this.filteredLayerViewUids=i}}let A;function N(e){return A&&A.viewingMode===e||(A=new j(e)),A}class Q{constructor(e,t){this.layers=new Array,this.sliceableLayers=new Array,this.include=e?.include,this.exclude=e?.exclude,t(e=>{e.pickable&&this.filterLayerViewUid(e.apiLayerViewUid)&&(e.sliceable?this.sliceableLayers:this.layers).push(e)})}filterLayerViewUid(e,t){const{include:r,exclude:n}=this;if(null==e)return null==r&&null==n;const i=r instanceof Map?r.get(e)??!1:r?.has(e),s=n instanceof Map?n.get(e)??!1:n?.has(e);return(null==i||("boolean"==typeof i?i:null!=t&&i.has(t)))&&(null==s||!("boolean"==typeof s?s:null!=t&&s.has(t)))}filterRenderGeometry(e){return this.filterLayerViewUid(e.layerViewUid)}}function q(e){return"object"==typeof e&&null!=e&&"intersectRay"in e}function z(e,t){return new F(e,f(p(m),e),t)}const B=y(),Y=y(),W=n(),J=i(),K=y(),X=n();export{C as SceneIntersectionHelper,q as isIntersectionHandler};
2
+ import{lerp as e}from"../../../../core/mathUtils.js";import t from"../../../../core/PooledArray.js";import{castRenderScreenPointArray3 as r,createRenderScreenPointArray3 as n,createScreenPointArray as i}from"../../../../core/screenUtils.js";import{getMetersPerVerticalUnitForSR as s}from"../../../../core/units.js";import{set as o}from"../../../../core/libs/gl-matrix-2/math/vec2.js";import{fromValues as l}from"../../../../core/libs/gl-matrix-2/factories/vec2f64.js";import{add as c,normalize as a,dot as u,distance as d}from"../../../../core/libs/gl-matrix-2/math/vec3.js";import{create as y,clone as h}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{create as p,copy as g,negativeInfinity as m,expandWithNestedArray as f}from"../../../../geometry/support/aaBoundingRect.js";import{createSpatialReferenceCyclical as _}from"../../../../geometry/support/normalizeUtils.js";import{create as P}from"../../../../geometry/support/ray.js";import{sv3d as w}from"../../../../geometry/support/vectorStacks.js";import{getElevationOffsetInMeters as R}from"../../../../support/elevationInfoUtils.js";import{g as I}from"../../../../chunks/cameraUtilsSpherical.js";import{computeMapPointFromVec3d as v}from"../../support/hitTest.js";import{fromRenderAtEye as b,fromScreen as j}from"../../support/geometryUtils/ray.js";import{defaultTolerance as S,Intersector as U,defaultScreenPolygonPrimitiveProcessor as F}from"../../webgl-engine/lib/Intersector.js";import{RayIntersectionQuery as H,DrapedScreenPolygonIntersectionQuery as L}from"../../webgl-engine/lib/IntersectorInterfaces.js";import{isValidIntersectorResult as V}from"../../webgl-engine/lib/IntersectorResult.js";import{SliceScreenPolygonPrimitiveProcessor as T,createSliceExtrusionHalfspacePlanes as x,clipPolygonAgainstSlicedAwayHalfspaces as M,sliceFilterPredicate as k}from"../../webgl-engine/lib/intersectorUtils.js";import{prepareScreenPolygonIntersectionQuery as D}from"../../webgl-engine/lib/screenPolygonIntersectionUtils.js";import{TaskPriority as E}from"../../../support/Scheduler.js";class C{constructor(e,r,n){this.viewingMode=e,this._forEachLayer=r,this._view=n,this._externalIntersectionHandlers=new t,this._tolerance=S,this._tmpRay=P(),this._tmpRegion=p(),this._validateHUDIntersector=new U(this.viewingMode),this._validateHUDIntersector.options.hud=!1,this._screenPolygonIntersectionTask=this._view.resourceController.scheduler.registerTask(E.SCREEN_POLYGON_INTERSECTION)}destroy(){this._screenPolygonIntersectionTask.remove(),this._externalIntersectionHandlers.prune()}get screenPolygonIntersectionTask(){return this._screenPolygonIntersectionTask}intersectScreen(e,t,r){return this.intersectRay(this._getPickRay(e,this._tmpRay),N(this.viewingMode),t,r)}intersectScreenFreePointFallback(e,t,r){return this.intersectRayFreePointFallback(this._getPickRay(e,this._tmpRay),t,r)}intersectRayFreePointFallback(e,t,r){return this.intersectRay(e,N(this.viewingMode),t,r)||this._intersectRayFreePointLocal(e,t)}intersectRay(e,t,r,n){return t.options.selectionMode=!1,t.options.store=0,this.computeIntersection(e,t,!1,n),!!t.results.min&&t.results.min.getIntersectionPoint(r)}getCenterRayWithSubpixelOffset(e,t,r=.5,n=.5){return e.getRenderCenter(X,r,n),X[0]+=.0466,X[1]-=.0123,b(e,X,t)}intersectIntersectorScreen(e,t,r){this.computeIntersection(this._getPickRay(e,this._tmpRay),t,!1,r)}async intersectIntersectorScreenPolygon(e,t,r){t.polygonResults.init();const n=this._view.state.camera,i=await D(n,e);null!=i&&await this._screenPolygonIntersectionTask.scheduleGenerator(e=>this._intersectIntersectorScreenPolygon(n,t,i,r,e))}*_intersectIntersectorScreenPolygon(e,t,r,n,i){const s=new Q(n,this._forEachLayer);t.options.selectOpaqueTerrainOnly=!n||!("include"in n||"exclude"in n),t.camera=e,t.point=null,t.screenPolygonPrimitiveProcessor=F,yield*t.intersectScreenPolygon(s.layers,r);const o=this._view.slice.plane,l=o?new T(o):null;t.screenPolygonPrimitiveProcessor=l??F,yield*t.intersectScreenPolygon(s.sliceableLayers,r),t.screenPolygonPrimitiveProcessor=F,yield*this._intersectPolygonHandlersGenerator(t,s,r,null,l,void 0,!0,i),yield*this._intersectDrapedScreenPolygon(t,s,r,n),yield*t.intersectHUDScreenPolygon(s.layers,r),t.screenPolygonPrimitiveProcessor=l??F,yield*t.intersectHUDScreenPolygon(s.sliceableLayers,r),t.polygonResults.sortResults()}intersectToolIntersectorScreen(e,t,r){const n=this._getPickRay(e,this._tmpRay);this.intersectToolIntersectorRay(n,t,r)}intersectToolIntersectorRay(e,t,r){t.options.selectionMode=!0,this.computeIntersection(e,t,!1,r);const n=t.results.min;this._view.groundView.opaque||V(n)&&7!==n.intersector||(t.options.selectionMode=!1,this.computeIntersection(e,t,!1,r))}setTolerance(e=S){this._tolerance=e}addIntersectionHandler(e){this._externalIntersectionHandlers.push(e),this._externalIntersectionHandlers.sort((e,t)=>7===e.type?1:7===t.type?-1:0)}removeIntersectionHandler(e){null!=this._externalIntersectionHandlers.removeUnordered(e)&&this._externalIntersectionHandlers.sort((e,t)=>7===e.type?1:7===t.type?-1:0)}_getPickRay(e,t){const r=this._view.state.camera;return j(r,e,t)}_intersectRayFreePointLocal(e,t){return 2!==this.viewingMode||null==e||c(t,e.origin,a(w.get(),e.direction)),!1}intersectElevationFromScreen(e,t,r=0,n=null){return this._intersectElevation(this._getPickRay(e,this._tmpRay),t,r,n)}_intersectElevation(e,t,n=0,i=null){if(null==e)return null;const o=this._view,{renderCoordsHelper:l}=o,c=s(o.spatialReference),d=null!=t?t.mode:"absolute-height",y=R(t)/c,h=("on-the-ground"===d?0:y+n)*c/l.unitInMeters,{camera:p}=o.state;if("absolute-height"===d){const t=l?.getAltitude(p.eye),r=u(a(B,e.direction),l.worldUpAtPosition(p.eye,Y));if(t<h&&r<0||t>=h&&r>0)return null;if(l.intersectInfiniteManifold(e,h,B)){const e=v(o,B);return e.z??=0,e.z-=y,e}return null}const g=p.projectToRenderScreen(e.origin,r(w.get())),m=new Q(null,this._forEachLayer),f=o.slice.plane,_=f?k(f):null,P=new U(this.viewingMode);P.options.store=0,P.options.verticalOffset=h,P.options.normalRequired=!1;const I=this._createRayIntersectionQuery(e,g,!1);P.reset(I.beginPoint,I.endPoint,p),P.point=g;let b=null;if(i&&"type"in i&&"graphics"===i.type){const e=o.allLayerViews.find(e=>e.layer===i)?.uid;b=e?t=>t.layerViewUid===e:null}else i&&(b=e=>e.graphicUid!==i.uid);switch(d){case"relative-to-scene":{const e=e=>(!b||b(e))&&!!e.lastValidElevationBB;P.intersect(m.layers,I.screenPoint,this._tolerance,null,e),this._intersectRayHandlers(P,m,I,_,!1,e=>2===e.type||7===e.type||8===e.type,!1);break}case"on-the-ground":case"relative-to-ground":this._intersectRayHandlers(P,m,I,_,!1,e=>e.isGround,!1)}if(P.results.min.getIntersectionPoint(B)){const e=v(o,B);return e.z=n,e}return null}computeIntersection(e,t,n,i){if(null==e)return;const s=this._view.state.camera,o=s.projectToRenderScreen(e.origin,r(w.get())),l=new Q(i,this._forEachLayer);t.options.selectOpaqueTerrainOnly=!i||!("include"in i||"exclude"in i);const c=this._createRayIntersectionQuery(e,o,n);t.reset(c.beginPoint,c.endPoint,s),t.intersect(l.layers,c.screenPoint,this._tolerance,null,l.objectFilter);const a=this._view.slice.plane,u=a?k(a):null;t.intersect(l.sliceableLayers,c.screenPoint,this._tolerance,u,l.objectFilter);const d=i&&(i.requiresGroundFeedback||i.enableDraped);this._intersectRayHandlers(t,l,c,u,!!d,e=>null==l.allowedIntersectorTypes||l.allowedIntersectorTypes.has(e.type));const y=w.get(),h=this._view,p=h.groundView.spatialReference;if(i&&i.enableDraped&&null!=p&&t.results.ground.getIntersectionPoint(y)){const e=h.overlayManager.renderer,r=h.renderCoordsHelper.spatialReference,n=w.get();h.renderCoordsHelper.fromRenderCoords(y,n,p),n[2]=h.elevationProvider?.getElevation(y[0],y[1],y[2],r,"ground")??0,e.intersectRay(t,n,t.results.ground,e=>l.filterRenderGeometry(e))}t.sortResults(),this._processHUDResults(t)}_processHUDResults(e){const t=e.results.hud;g(this._tmpRegion,m);const r=new Array,n=this._tmpRegion,i=e=>{r.push(new O(e))};e.sortResults(t.all),null!=t.min.distance&&i(t.min);for(const c of t.all)t.min.target.object!==c.target.object&&t.max.target.object!==c.target.object&&i(c);if(null!=t.max.distance&&t.max.target.object!==t.min.target.object&&i(t.max),!r.length)return;n[0]===n[2]&&(n[2]+=1),n[1]===n[3]&&(n[3]+=1);let s=!0;const o=null==e.results.max.distance;let l=0;for(const c of r)s&&(e.results.min.copy(c.result),s=!1),o&&e.results.max.copy(c.result),2===e.options.store&&e.results.all.splice(l++,0,c.result)}_createRayIntersectionQuery(e,t,r){return new H(e.origin,c(y(),e.origin,e.direction),t,r)}_intersectRayHandlers(e,t,r,n,i,s=()=>!0,o=!0){const{options:l}=e,c=l.isFiltered,a=l.filteredLayerViewUids;for(const{handler:u,filterPredicate:d,isFiltered:y,filteredLayerViewUids:h}of this._getFilteredIntersectionHandlers(t,n,null,s,o))(!y||u.isGround&&i)&&(l.isFiltered=y,l.filteredLayerViewUids=h,u.intersectRay(e,d,e.rayBegin,e.rayEnd,r.screenPoint,r.isVerticalRay));l.isFiltered=c,l.filteredLayerViewUids=a}*_intersectPolygonHandlersGenerator(e,t,r,n,i,s=()=>!0,o=!0,l){const{options:c}=e,a=c.isFiltered,u=c.filteredLayerViewUids,d=e.screenPolygonPrimitiveProcessor;for(const{handler:y,screenPolygonPrimitiveProcessor:h,isFiltered:p,filteredLayerViewUids:g}of this._getFilteredIntersectionHandlers(t,n,i,s,o))p||null==y.intersectScreenPolygon||(c.isFiltered=p,c.filteredLayerViewUids=g,e.screenPolygonPrimitiveProcessor=h??F,yield*y.intersectScreenPolygon(e,r,l));c.isFiltered=a,c.filteredLayerViewUids=u,e.screenPolygonPrimitiveProcessor=d}*_intersectDrapedScreenPolygon(e,t,r,n){const{basemapTerrain:i,overlayManager:s}=this._view,o=null!=this._view.groundView.spatialReference&&!s.renderer.isEmpty;if(!e.options.selectionMode||!n?.enableDraped||!o)return;const l=yield*this._createDrapedPolygonIntersectionQueries(r,i.slicePlaneEnabled?this._view.slice.plane:null);null!=l&&(yield*this._view.overlayManager.renderer.intersectScreenPolygon(e,l,e=>t.filterRenderGeometry(e)))}*_createDrapedPolygonIntersectionQueries(t,r){const{state:{camera:{eye:n}},pointsOfInterest:i}=this._view,s=this._view.groundView.spatialReference,c=new Array,a=r?new Array:null,u=I(this._view,i.focus.renderLocation),y=_(s);let p=Number.POSITIVE_INFINITY,g=null;const m=B,f=Y,P=e=>{if(!this._intersectDrapedScreenPolygonPoint(m,f,e))return!1;const t=null!=g&&y?g+y.shortestSignedDiff(g,m[0]):m[0];return g=t,c.push(l(t,m[1])),a&&a.push(h(f)),p=Math.min(p,d(n,f)),!0},{points:w}=t,{length:R}=w;for(let l=0;l<R;l++){const t=w[l],r=w[(l+1)%R];for(let n=0;n<u;n++){const i=n/u;if(!P(0===n?t:o(J,e(t[0],r[0],i),e(t[1],r[1],i))))return null;yield}}if(!Number.isFinite(p))return null;if(null==r||!a)return[z(c,p)];const v=this._clipDrapedScreenPolygonIntersectionQueries(a,r,y,n);return v.length>0?v:null}_clipDrapedScreenPolygonIntersectionQueries(e,t,r,n){const i=new Array,s=x(t);for(const o of M(s,e)){const e=this._createDrapedQueryFromRenderPolygon(o,r,n);null!=e&&i.push(e)}return i.sort((e,t)=>e.distance-t.distance),i}_createDrapedQueryFromRenderPolygon(e,t,r){const{renderCoordsHelper:n}=this._view,i=this._view.groundView.spatialReference,s=new Array;let o=Number.POSITIVE_INFINITY,c=null;for(const a of e){if(!n.fromRenderCoords(a,K,i))return null;const e=null!=c&&t?c+t.shortestSignedDiff(c,K[0]):K[0];c=e,s.push(l(e,K[1])),o=Math.min(o,d(r,a))}return s.length>=3&&Number.isFinite(o)?z(s,o):null}_intersectDrapedScreenPolygonPoint(e,t,r){const n=this._getPickRay(r,this._tmpRay);if(null==n)return!1;const{renderCoordsHelper:i}=this._view;this._intersectGroundPoint(t,n,r)||i.intersectManifoldClosestSilhouette(n,0,t);const s=this._view.groundView.spatialReference;return!!i.fromRenderCoords(t,e,s)}_intersectGroundPoint(e,t,r){const n=this._view.state.camera,i=new Q(null,this._forEachLayer),s=new U(this.viewingMode);W[0]=r[0],W[1]=r[1],W[2]=0;const o=this._createRayIntersectionQuery(t,W,!1);return s.options.selectionMode=!0,s.options.store=0,s.options.normalRequired=!1,s.options.selectOpaqueTerrainOnly=!1,s.reset(o.beginPoint,o.endPoint,n),this._intersectRayHandlers(s,i,o,null,!0,e=>e.isGround,!1),s.results.ground.getIntersectionPoint(e)}*_getFilteredIntersectionHandlers(e,t,r,n=()=>!0,i=!0){for(const s of this._externalIntersectionHandlers){if(!n(s))continue;let o=!1;const l=[];if(i){const t=s.layerViewUid,r=s.sublayerId,n=Array.isArray(t),i=n?t:[t];let c=!1;for(const s of i)e.filterLayerViewUid(s,r)?c=!0:n&&l.push(s);o=!c}yield new G(s,s.slicePlaneEnabled?t:null,s.slicePlaneEnabled?r:null,o,l)}}}class O{constructor(e){this.result=e,this.screenPoint=n()}}class G{constructor(e,t,r,n,i){this.handler=e,this.filterPredicate=t,this.screenPolygonPrimitiveProcessor=r,this.isFiltered=n,this.filteredLayerViewUids=i}}let A;function N(e){return A&&A.viewingMode===e||(A=new U(e)),A}class Q{constructor(e,t){this.layers=new Array,this.sliceableLayers=new Array,this.include=e?.include,this.exclude=e?.exclude,this.objectFilter=e?.objectFilter,this.allowedIntersectorTypes=e?.allowedIntersectorTypes,t(e=>{e.pickable&&this.filterLayerViewUid(e.apiLayerViewUid)&&(e.sliceable?this.sliceableLayers:this.layers).push(e)})}filterLayerViewUid(e,t){const{include:r,exclude:n}=this;if(null==e)return null==r&&null==n;const i=r instanceof Map?r.get(e)??!1:r?.has(e),s=n instanceof Map?n.get(e)??!1:n?.has(e);return(null==i||("boolean"==typeof i?i:null!=t&&i.has(t)))&&(null==s||!("boolean"==typeof s?s:null!=t&&s.has(t)))}filterRenderGeometry(e){return this.filterLayerViewUid(e.layerViewUid)}}function q(e){return"object"==typeof e&&null!=e&&"intersectRay"in e}function z(e,t){return new L(e,f(p(m),e),t)}const B=y(),Y=y(),W=n(),J=i(),K=y(),X=n();export{C as SceneIntersectionHelper,q as isIntersectionHandler};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import{clamp as t}from"../../../../core/mathUtils.js";import{dot as e,distance as i,subtract as r,scale as s,add as n,copy as o,normalize as a,cross as m,scaleAndAdd as c}from"../../../../core/libs/gl-matrix-2/math/vec3.js";import{create as p,clone as h}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{create as _}from"../../../../geometry/support/ray.js";import{applyConstraintsAndUpdateCenterRenderCamera as d}from"../../camera/constraintUtils.js";import{Intersector as u}from"../../webgl-engine/lib/Intersector.js";const l=.5,y=1e-5,f=5;class v{constructor(t){this._view=t,this._tmpRay=_(),this._tmpWorldUp=p(),this._tmpScaledUp=p(),this._tmpCorrectionOffset=p(),this._tmpUpdatedCameraPos=p(),this._tmpCenterDiff=p(),this._tmpMovementDelta=p(),this._tmpPerpendicularMovementDelta=p(),this._tmpGroundIntersections=[p(),p(),p()],this._tmpGroundIntersectionHits=[!1,!1,!1],this._tmpRayOrigins=[p(),p(),p()],this._tmpRayDirection=p(),this._previousCameraPosition=null,this._intersector=new u(this._view.state.viewingMode)}smoothlyCorrectGroundElevation(t,i,r,s){const n=this._prepareMode(s);if(!n)return 0;const o=this._view.renderCoordsHelper.worldUpAtPosition(t.eye,this._tmpWorldUp),a=this._prepareCameraAndPreviousIterationPosition(t,o,this._previousCameraPosition),m=this._prepareRays(t,o,a),c=this._intersectRays(n,o,m);if(!c.hasIntersection){const e=this._adjustCameraElevation(t,o,0,r);return this._previousCameraPosition=h(e),0}const p=this._filterRayResults(o,a,c),_=this._getSmoothedElevationCorrection(n,p,t,o,a,i),d=this._adjustCameraElevation(t,o,_,r);return this._previousCameraPosition=h(d),Math.abs(p-e(d,o))}immediatelyCorrectGroundElevation(t,s=Number.POSITIVE_INFINITY,n,o){const a=this._prepareMode(o);if(!a)return;const m=this._view.renderCoordsHelper.worldUpAtPosition(t.eye,this._tmpWorldUp),c=this._prepareRays(t,m),p=this._intersectRays(a,m,c),h=p.intersections[0];!p.hasIntersection||i(t.eye,h)>s?this._adjustCameraElevation(t,m,0,n):this._adjustCameraElevation(t,m,e(m,r(this._tmpCorrectionOffset,h,t.eye)),n)}_prepareMode(t){const e=t??this._view.navigation.mode;return"ground"===e.type&&e.offset?e:null}_prepareCameraAndPreviousIterationPosition(t,i,r){if(r){const o=e(i,t.eye),a=e(i,r);return s(this._tmpCorrectionOffset,i,a-o),t.eye=n(this._tmpUpdatedCameraPos,t.eye,this._tmpCorrectionOffset),t.center=n(this._tmpUpdatedCameraPos,t.center,this._tmpCorrectionOffset),r}return t.eye}_prepareRays(t,e,i){const r=s(this._tmpRayDirection,e,-1e5);if(o(this._tmpRayOrigins[0],t.eye),!i)return{origins:this._tmpRayOrigins,direction:r,count:1};const{forwardMovementDirection:n,rightMovementDirection:a}=this._getMovementDirections(t.eye,i,e);return this._getLeftRayOrigin(t.eye,n,a,this._tmpRayOrigins[1]),this._getRightRayOrigin(t.eye,n,a,this._tmpRayOrigins[2]),{origins:this._tmpRayOrigins,direction:r,count:this._tmpRayOrigins.length}}_getMovementDirections(t,i,n){const o=r(this._tmpMovementDelta,t,i);r(o,o,s(this._tmpScaledUp,n,e(n,o))),a(o,o);return{forwardMovementDirection:o,rightMovementDirection:m(this._tmpPerpendicularMovementDelta,o,n)}}_getLeftRayOrigin(t,e,i,r){return c(r,t,e,l),c(r,r,i,-l),r}_getRightRayOrigin(t,e,i,r){return c(r,t,e,l),c(r,r,i,l),r}_intersectRays(t,e,i){const r=t.offset,s=this._view.sceneIntersectionHelper,n=g(t);o(this._tmpRay.direction,i.direction);for(let m=0;m<i.count;m++)o(this._tmpRay.origin,i.origins[m]),this._tmpGroundIntersectionHits[m]=s.intersectRay(this._tmpRay,this._intersector,this._tmpGroundIntersections[m],n),this._tmpGroundIntersectionHits[m]&&c(this._tmpGroundIntersections[m],this._tmpGroundIntersections[m],e,r);const a=this._tmpGroundIntersectionHits.some((t,e)=>e<i.count&&t);return{intersections:this._tmpGroundIntersections,hits:this._tmpGroundIntersectionHits,count:i.count,hasIntersection:a}}_filterRayResults(t,i,r){const s=e(i,t);let n=null;for(let o=0;o<r.count;o++){if(!r.hits[o])continue;const i=r.intersections[o],a=e(i,t);(null==n||Math.abs(a-s)<Math.abs(n-s))&&(n=a)}return n}_getSmoothedElevationCorrection(i,r,s,n,o,a){const m=y**a,c=e(o,n)*m+r*(1-m),p=e(s.eye,n),h=f*a*(i.offset??0);return t(c-p,-h,h)}_adjustCameraElevation(t,e,i,s){return 0!==i&&(c(this._tmpUpdatedCameraPos,t.eye,e,i),r(this._tmpCenterDiff,t.center,t.eye),t.eye=this._tmpUpdatedCameraPos,t.center=n(this._tmpUpdatedCameraPos,this._tmpUpdatedCameraPos,this._tmpCenterDiff)),d(this._view,t,s),t.eye}}function g(t){const e=C(t.include)?t.include:void 0,i=C(t.exclude)?t.exclude:void 0;return e||i?{include:e,exclude:i}:void 0}function C(t){return null!=t&&t.size>0}export{v as OffsetCorrectionController};
2
+ import{clamp as t}from"../../../../core/mathUtils.js";import{dot as e,distance as i,subtract as r,scale as s,add as n,copy as o,normalize as a,cross as c,scaleAndAdd as m}from"../../../../core/libs/gl-matrix-2/math/vec3.js";import{create as p,clone as h}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{create as _}from"../../../../geometry/support/ray.js";import{applyConstraintsAndUpdateCenterRenderCamera as u}from"../../camera/constraintUtils.js";import{Intersector as d}from"../../webgl-engine/lib/Intersector.js";const l=.5,y=1e-5,f=5,v=new Set([0,2,7,8]);class g{constructor(t){this._view=t,this._tmpRay=_(),this._tmpWorldUp=p(),this._tmpScaledUp=p(),this._tmpCorrectionOffset=p(),this._tmpUpdatedCameraPos=p(),this._tmpCenterDiff=p(),this._tmpMovementDelta=p(),this._tmpPerpendicularMovementDelta=p(),this._tmpGroundIntersections=[p(),p(),p()],this._tmpGroundIntersectionHits=[!1,!1,!1],this._tmpRayOrigins=[p(),p(),p()],this._tmpRayDirection=p(),this._previousCameraPosition=null,this._intersector=new d(this._view.state.viewingMode)}smoothlyCorrectGroundElevation(t,i,r,s){const n=this._prepareMode(s);if(!n)return 0;const o=this._view.renderCoordsHelper.worldUpAtPosition(t.eye,this._tmpWorldUp),a=this._prepareCameraAndPreviousIterationPosition(t,o,this._previousCameraPosition),c=this._prepareRays(t,o,a),m=this._intersectRays(n,o,c);if(!m.hasIntersection){const e=this._adjustCameraElevation(t,o,0,r);return this._previousCameraPosition=h(e),0}const p=this._filterRayResults(o,a,m),_=this._getSmoothedElevationCorrection(n,p,t,o,a,i),u=this._adjustCameraElevation(t,o,_,r);return this._previousCameraPosition=h(u),Math.abs(p-e(u,o))}immediatelyCorrectGroundElevation(t,s=Number.POSITIVE_INFINITY,n,o){const a=this._prepareMode(o);if(!a)return;const c=this._view.renderCoordsHelper.worldUpAtPosition(t.eye,this._tmpWorldUp),m=this._prepareRays(t,c),p=this._intersectRays(a,c,m),h=p.intersections[0];!p.hasIntersection||i(t.eye,h)>s?this._adjustCameraElevation(t,c,0,n):this._adjustCameraElevation(t,c,e(c,r(this._tmpCorrectionOffset,h,t.eye)),n)}_prepareMode(t){const e=t??this._view.navigation.mode;return"ground"===e.type&&e.offset?e:null}_prepareCameraAndPreviousIterationPosition(t,i,r){if(r){const o=e(i,t.eye),a=e(i,r);return s(this._tmpCorrectionOffset,i,a-o),t.eye=n(this._tmpUpdatedCameraPos,t.eye,this._tmpCorrectionOffset),t.center=n(this._tmpUpdatedCameraPos,t.center,this._tmpCorrectionOffset),r}return t.eye}_prepareRays(t,e,i){const r=s(this._tmpRayDirection,e,-1e5);if(o(this._tmpRayOrigins[0],t.eye),!i)return{origins:this._tmpRayOrigins,direction:r,count:1};const{forwardMovementDirection:n,rightMovementDirection:a}=this._getMovementDirections(t.eye,i,e);return this._getLeftRayOrigin(t.eye,n,a,this._tmpRayOrigins[1]),this._getRightRayOrigin(t.eye,n,a,this._tmpRayOrigins[2]),{origins:this._tmpRayOrigins,direction:r,count:this._tmpRayOrigins.length}}_getMovementDirections(t,i,n){const o=r(this._tmpMovementDelta,t,i);r(o,o,s(this._tmpScaledUp,n,e(n,o))),a(o,o);return{forwardMovementDirection:o,rightMovementDirection:c(this._tmpPerpendicularMovementDelta,o,n)}}_getLeftRayOrigin(t,e,i,r){return m(r,t,e,l),m(r,r,i,-l),r}_getRightRayOrigin(t,e,i,r){return m(r,t,e,l),m(r,r,i,l),r}_intersectRays(t,e,i){const r=t.offset,s=this._view.sceneIntersectionHelper,n=C(t);o(this._tmpRay.direction,i.direction);for(let c=0;c<i.count;c++)o(this._tmpRay.origin,i.origins[c]),this._tmpGroundIntersectionHits[c]=s.intersectRay(this._tmpRay,this._intersector,this._tmpGroundIntersections[c],n),this._tmpGroundIntersectionHits[c]&&m(this._tmpGroundIntersections[c],this._tmpGroundIntersections[c],e,r);const a=this._tmpGroundIntersectionHits.some((t,e)=>e<i.count&&t);return{intersections:this._tmpGroundIntersections,hits:this._tmpGroundIntersectionHits,count:i.count,hasIntersection:a}}_filterRayResults(t,i,r){const s=e(i,t);let n=null;for(let o=0;o<r.count;o++){if(!r.hits[o])continue;const i=r.intersections[o],a=e(i,t);(null==n||Math.abs(a-s)<Math.abs(n-s))&&(n=a)}return n}_getSmoothedElevationCorrection(i,r,s,n,o,a){const c=y**a,m=e(o,n)*c+r*(1-c),p=e(s.eye,n),h=f*a*(i.offset??0);return t(m-p,-h,h)}_adjustCameraElevation(t,e,i,s){return 0!==i&&(m(this._tmpUpdatedCameraPos,t.eye,e,i),r(this._tmpCenterDiff,t.center,t.eye),t.eye=this._tmpUpdatedCameraPos,t.center=n(this._tmpUpdatedCameraPos,this._tmpUpdatedCameraPos,this._tmpCenterDiff)),u(this._view,t,s),t.eye}}function C(t){return R(t.include)?{include:t.include,exclude:t.exclude}:{exclude:t.exclude,objectFilter:t=>!!t.lastValidElevationBB,allowedIntersectorTypes:v}}function R(t){return null!=t&&t.size>0}export{g as OffsetCorrectionController};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import e from"../../../../core/Logger.js";import{createScreenPointArray as t}from"../../../../core/screenUtils.js";import{distance as n,normalize as r,cross as o,add as i,crossAndNormalize as a,subtract as s,dot as c,scaleAndAdd as l,scale as u,copy as m,length as d}from"../../../../core/libs/gl-matrix-2/math/vec3.js";import{create as p}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{getReferenceEllipsoid as f}from"../../../../geometry/ellipsoidUtils.js";import{create as g,fromPositionAndNormal as h,distance as w,projectPoint as y,projectVector as P}from"../../../../geometry/support/plane.js";import{create as j}from"../../../../geometry/support/ray.js";import{Sphere as S}from"../../../../geometry/support/sphere.js";import{fromRenderCamera as v}from"../../webgl.js";import{getVoxelWasm as I}from"../../layers/VoxelWasm.js";import{pickPointAndInitSphere as b,searchAreaSize as M,sphereOrPlanePointFromScreenPoint as z,intersectPlaneFromScreenPoint as x}from"./navigationUtils.js";import{OffsetCorrectionController as H}from"./OffsetCorrectionController.js";import{fromScreenAtEye as T}from"../../support/geometryUtils/ray.js";import k from"../../webgl/RenderCamera.js";import{Intersector as C}from"../../webgl-engine/lib/Intersector.js";const A=1.5,F={xSpeedMultiplier:A,ySpeedMultiplier:A,maxElevation:1e4,relativeHorizonPadding:.1,minimumHorizonPadding:12},O=2,G=.25,N=p(),R=p(),q=t(),U=p(),Y=g(),D=p(),E=p(),L=p(),V=p(),_=p(),W=p(),B=p(),J=p(),K=p(),Q=p(),X=t(),Z=j(),$=new S,ee=p(),te=g(),ne=p(),re=p();function oe(e,t){return P(t,e.viewForward,N),i(R,e.eye,N),e.projectToScreen(R,q),q[1]}function ie(e,t,m){const d=e.eye;if(n(t.center,d)<t.radius)return r(_,d),o(W,_,e.viewRight),i(R,d,W),e.projectToScreen(R,X),X[1];const p=e.up;T(e,m,Z);const f=t.radius;if(a(U,p,Z.direction),h(d,U,Y),w(Y,t.center)>f)return null;y(Y,t.center,D);const g=n(t.center,D),P=Math.sqrt(f**2-g**2);s(E,d,D),r(L,E),a(V,U,L);const j=c(E,L),S=c(E,V),v=Math.sqrt(j**2+S**2),I=P**2/v**2,b=P/v**2*Math.sqrt(v**2-P**2),M=I*j,z=b*-S,x=I*S,H=b*j,k=M-z,C=x+H,A=x-H;i(B,D,l(B,u(B,L,M+z),V,C)),i(J,D,l(J,u(J,L,k),V,A)),s(K,B,d),r(K,K),s(Q,J,d),r(Q,Q);return c(e.viewForward,K)>=c(e.viewForward,Q)?e.projectToScreen(B,X):e.projectToScreen(J,X),X[1]}function ae(e,t,n=!0){return n?e<t:e<=t}function se(e,t,n=!0){return n?e>t:e>=t}function ce(e,t,n){return t?e>n:e<n}function le(e,t){const n=e.fullHeight/e.pixelRatio,r=Math.max(t,n-t);return Math.max(F.minimumHorizonPadding,F.relativeHorizonPadding*r)}function ue(e,t){return[me(e,t),de(e,t)]}function me(e,t){const n=e.fullHeight/e.pixelRatio;return Math.min(n,t+le(e,t))}function de(e,t){return Math.max(0,t-le(e,t))}function pe(e,t,n){const r={translation:e,location:t};return n&&(r.normal=n),r}function fe(e){const{view:t}=e;return"global"===t.viewingMode?ge(e):he(e)}function ge(e){const{view:t,originalScreenPoint:o,horizonY:i,horizonPadding:a,outTranslation:s,outGrabLocation:c,outGrabNormal:l,intersectionOptions:u,depthSearchSize:d}=e,p=t.state.camera,g=pe(s,c,l);$.radius=f(t.spatialReference).radius;const h=b(t,p,o,$.radius,1,u);if(null==h.scenePickPoint)return!1;const w=h.hasGeometryIntersection;m(ee,h.scenePickPoint),m(g.location,ee);const y=h.sphere;g.normal&&h.normal&&m(g.normal,h.normal);const P=ye(o,i,a,w),j=w?n(ee,p.eye):Number.POSITIVE_INFINITY;if(P.wasAdjusted){je({view:t,screenAdjustment:P,intersector:Pe(t),fallbackCheck:(e,t,n)=>{const o=z(y,p,e,t);return o&&n&&r(n,t),o},output:g,intersectionOptions:u})}return ve({view:t,screenPoint:P.adjustedScreenPoint,camera:p,initialDistance:j,depthSearchSize:d??M,output:g}),!0}function he(e){const{view:t,originalScreenPoint:o,horizonY:i,horizonPadding:a,outTranslation:s,outGrabLocation:c,outGrabNormal:u,intersectionOptions:d,depthSearchSize:p}=e,f=t.sceneIntersectionHelper,g=t.state.camera,w=Pe(t),y=pe(s,c,u);f.intersectIntersectorScreen(o,w,d);const P=w.results.min.getIntersectionPoint(ee),j=P?n(ee,g.eye):Number.POSITIVE_INFINITY;P&&(m(y.location,ee),y.normal&&m(y.normal,w.results.min.normal)),t.renderCoordsHelper.worldUpAtPosition(g.eye,_),l(ne,g.eye,_,-g.relativeElevation),h(ne,_,te);const S=ye(o,i,a,P);if(S.wasAdjusted){je({view:t,screenAdjustment:S,intersector:w,fallbackCheck:(e,t,n)=>{const o=x(te,g,e,t);return o&&n&&r(n,_),o},output:y,intersectionOptions:d})}return ve({view:t,screenPoint:S.adjustedScreenPoint,camera:g,initialDistance:j,depthSearchSize:p??M,output:y}),!0}function we(e,t,n,r){return!r&&ae(e,t)||r&&ce(e,!1,n[0])?n[0]:!r&&se(e,t,!1)?n[1]:null}function ye(e,n,r,o){const i=we(e[1],n,r,o);return{originalScreenPoint:e,adjustedScreenPoint:t(e[0],i??e[1]),horizonY:n,horizonPadding:r,wasAdjusted:null!==i}}function Pe(e){const t=new C(e.state.viewingMode);return t.options.selectionMode=!0,t.options.store=0,t.options.hud=!1,t.options.normalRequired=!0,t}function je(e){const{view:t,screenAdjustment:n,fallbackCheck:r,intersector:o,output:i,intersectionOptions:a}=e,s=t.sceneIntersectionHelper;s.intersectIntersectorScreen(n.adjustedScreenPoint,o,{...a,requiresGroundFeedback:!0});let c=o.results.min.getIntersectionPoint(i.location);if(c)return void(i.normal&&m(i.normal,o.results.min.normal));const l=Se(n);s.intersectIntersectorScreen(l,o,{...a,requiresGroundFeedback:!0}),c=o.results.min.getIntersectionPoint(i.location),c?i.normal&&m(i.normal,o.results.min.normal):(c=r(n.adjustedScreenPoint,i.location,i.normal),c||r(l,i.location,i.normal))}function Se(e){const{originalScreenPoint:n,adjustedScreenPoint:r,horizonY:o,horizonPadding:i}=e,a=se(r[1],o)?Math.min(i[1],n[1]):Math.max(i[0],n[1]);return t(r[0],a)}function ve(e){const{view:t,screenPoint:n,camera:o,initialDistance:a,depthSearchSize:c,output:l}=e,m=c>0?t.stage.renderView.getMinimalDepthForArea(I(t),n[0],n[1],o,c):null;s(l.translation,l.location,o.eye);let p=Math.min(d(l.translation),a);m&&m<=p&&(p=m),r(l.translation,l.translation),u(l.translation,l.translation,p),i(l.location,l.translation,o.eye)}async function Ie(t,r){if("ground"!==t.navigation.mode.type)return void e.getLogger("esri").warn("Can only advance while in ground navigation mode!");const{camera:o}=t.state;t.renderCoordsHelper.worldUpAtPosition(o.eye,_);const c=t.sceneIntersectionHelper,l=Pe(t),p=a(N,_,o.viewRight);m(Z.origin,o.eye),u(Z.direction,p,r);const f=c.intersectRay(Z,l,ee),g=(new k).copyFrom(o),h=s(re,o.center,o.eye);if(!f||n(ee,o.eye)>r)g.eye=i(N,Z.origin,Z.direction);else{s(N,ee,o.eye);d(N)>O&&(be(N,N,G,O),g.eye=i(N,o.eye,N))}g.center=i(N,g.eye,h);return new H(t).immediatelyCorrectGroundElevation(g,100),t.goTo(v(t,g),{duration:500,liftOffDisabled:!0})}function be(e,t,n,r){const o=d(e),i=Math.min(n,Math.max(o-r,0)/o);u(t,e,i)}export{le as computeHorizonPadding,ue as computeHorizonPaddingLimits,fe as findGroundNavigationGrabLocation,oe as findPlaneHorizonY,ie as findSphereHorizonY,Ie as groundNavigationAdvance,F as groundNavigationConstants,ae as isAboveHorizon,se as isBelowHorizon,be as shortenTranslation,ce as shouldClampScreenY};
2
+ import e from"../../../../core/Logger.js";import{createScreenPointArray as t}from"../../../../core/screenUtils.js";import{distance as n,normalize as o,cross as r,add as i,crossAndNormalize as a,subtract as s,dot as c,scaleAndAdd as l,scale as u,copy as m,length as d}from"../../../../core/libs/gl-matrix-2/math/vec3.js";import{create as p}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{getReferenceEllipsoid as f}from"../../../../geometry/ellipsoidUtils.js";import{create as g,fromPositionAndNormal as h,distance as y,projectPoint as w,projectVector as P,intersectLine as v}from"../../../../geometry/support/plane.js";import{create as j}from"../../../../geometry/support/ray.js";import{Sphere as S}from"../../../../geometry/support/sphere.js";import{fromRenderCamera as I}from"../../webgl.js";import{getVoxelWasm as b}from"../../layers/VoxelWasm.js";import{pickPointAndInitSphere as M,sphereOrPlanePointFromScreenPoint as z,intersectPlaneFromScreenPoint as x,searchAreaSize as H}from"./navigationUtils.js";import{OffsetCorrectionController as C}from"./OffsetCorrectionController.js";import{fromScreenAtEye as T}from"../../support/geometryUtils/ray.js";import k from"../../webgl/RenderCamera.js";import{Intersector as A}from"../../webgl-engine/lib/Intersector.js";const F=1.5,O={xSpeedMultiplier:F,ySpeedMultiplier:F,maxElevation:1e4,relativeHorizonPadding:.1,minimumHorizonPadding:12},G=2,N=.25,R=p(),U=p(),q=t(),Y=p(),D=g(),E=p(),L=p(),V=p(),_=p(),W=p(),B=p(),J=p(),K=p(),Q=p(),X=p(),Z=t(),$=j(),ee=new S,te=p(),ne=g(),oe=p(),re=p();function ie(e,t){return P(t,e.viewForward,R),i(U,e.eye,R),e.projectToScreen(U,q),q[1]}function ae(e,t,m){const d=e.eye;if(n(t.center,d)<t.radius)return o(W,d),r(B,W,e.viewRight),i(U,d,B),e.projectToScreen(U,Z),Z[1];const p=e.up;T(e,m,$);const f=t.radius;if(a(Y,p,$.direction),h(d,Y,D),y(D,t.center)>f)return null;w(D,t.center,E);const g=n(t.center,E),P=Math.sqrt(f**2-g**2);s(L,d,E),o(V,L),a(_,Y,V);const v=c(L,V),j=c(L,_),S=Math.sqrt(v**2+j**2),I=P**2/S**2,b=P/S**2*Math.sqrt(S**2-P**2),M=I*v,z=b*-j,x=I*j,H=b*v,C=M-z,k=x+H,A=x-H;i(J,E,l(J,u(J,V,M+z),_,k)),i(K,E,l(K,u(K,V,C),_,A)),s(Q,J,d),o(Q,Q),s(X,K,d),o(X,X);return c(e.viewForward,Q)>=c(e.viewForward,X)?e.projectToScreen(J,Z):e.projectToScreen(K,Z),Z[1]}function se(e,t,n=!0){return n?e<t:e<=t}function ce(e,t,n=!0){return n?e>t:e>=t}function le(e,t,n){return t?e>n:e<n}function ue(e,t){const n=e.fullHeight/e.pixelRatio,o=Math.max(t,n-t);return Math.max(O.minimumHorizonPadding,O.relativeHorizonPadding*o)}function me(e,t){return[de(e,t),pe(e,t)]}function de(e,t){const n=e.fullHeight/e.pixelRatio;return Math.min(n,t+ue(e,t))}function pe(e,t){return Math.max(0,t-ue(e,t))}function fe(e,t,n){const o={translation:e,location:t};return n&&(o.normal=n),o}function ge(e){const{view:t}=e;return"global"===t.viewingMode?he(e):ye(e)}function he(e){const{view:t,originalScreenPoint:r,horizonY:i,horizonPadding:a,outTranslation:s,outGrabLocation:c,outGrabNormal:l,intersectionOptions:u,depthSearchSize:d}=e,p=t.state.camera,g=fe(s,c,l);ee.radius=f(t.spatialReference).radius;const h=M(t,p,r,ee.radius,1,u);if(null==h.scenePickPoint)return!1;const y=h.hasGeometryIntersection;m(te,h.scenePickPoint),m(g.location,te);const w=h.sphere;g.normal&&h.normal&&m(g.normal,h.normal);const P=Pe(r,i,a,y),v=y?n(te,p.eye):Number.POSITIVE_INFINITY;if(P.wasAdjusted){je({view:t,screenAdjustment:P,intersector:ve(t),fallbackCheck:(e,t,n)=>{const r=z(w,p,e,t);return r&&n&&o(n,t),r},output:g,intersectionOptions:u})}return Ie({view:t,screenPoint:P.adjustedScreenPoint,camera:p,initialDistance:v,depthSearchSize:d??H,output:g}),!0}function ye(e){const{view:t,originalScreenPoint:r,horizonY:i,horizonPadding:a,outTranslation:s,outGrabLocation:c,outGrabNormal:u,intersectionOptions:d,depthSearchSize:p}=e,f=t.sceneIntersectionHelper,g=t.state.camera,y=ve(t),w=fe(s,c,u);f.intersectIntersectorScreen(r,y,d);const P=y.results.min.getIntersectionPoint(te),v=P?n(te,g.eye):Number.POSITIVE_INFINITY;P&&(m(w.location,te),w.normal&&m(w.normal,y.results.min.normal)),t.renderCoordsHelper.worldUpAtPosition(g.eye,W),l(oe,g.eye,W,-g.relativeElevation),h(oe,W,ne);const j=Pe(r,i,a,P);if(j.wasAdjusted){je({view:t,screenAdjustment:j,intersector:y,fallbackCheck:(e,t,n)=>{const r=x(ne,g,e,t);return r&&n&&o(n,W),r},output:w,intersectionOptions:d})}return Ie({view:t,screenPoint:j.adjustedScreenPoint,camera:g,initialDistance:v,depthSearchSize:p??H,output:w}),!0}function we(e,t,n,o){return!o&&se(e,t)||o&&le(e,!1,n[0])?n[0]:!o&&ce(e,t,!1)?n[1]:null}function Pe(e,n,o,r){const i=we(e[1],n,o,r);return{originalScreenPoint:e,adjustedScreenPoint:t(e[0],i??e[1]),horizonY:n,horizonPadding:o,wasAdjusted:null!==i}}function ve(e){const t=new A(e.state.viewingMode);return t.options.selectionMode=!0,t.options.store=0,t.options.hud=!1,t.options.normalRequired=!0,t}function je(e){const{view:t,screenAdjustment:n,fallbackCheck:o,intersector:r,output:i,intersectionOptions:a}=e,s=t.sceneIntersectionHelper;s.intersectIntersectorScreen(n.adjustedScreenPoint,r,{...a,requiresGroundFeedback:!0});let c=r.results.min.getIntersectionPoint(i.location);if(c)return void(i.normal&&m(i.normal,r.results.min.normal));const l=Se(n);s.intersectIntersectorScreen(l,r,{...a,requiresGroundFeedback:!0}),c=r.results.min.getIntersectionPoint(i.location),c?i.normal&&m(i.normal,r.results.min.normal):(c=o(n.adjustedScreenPoint,i.location,i.normal),c||o(l,i.location,i.normal))}function Se(e){const{originalScreenPoint:n,adjustedScreenPoint:o,horizonY:r,horizonPadding:i}=e,a=ce(o[1],r)?Math.min(i[1],n[1]):Math.max(i[0],n[1]);return t(o[0],a)}function Ie(e){be(e),Me(e)}function be(e){const{view:t,camera:n,output:o}=e,{offset:r}=t.navigation.mode;if(!r)return;const{translation:i,location:a}=o;t.renderCoordsHelper.worldUpAtPosition(n.eye,W),l(oe,n.eye,W,-r),h(oe,W,D);v(D,n.eye,a,oe)&&(m(a,oe),s(i,a,n.eye))}function Me(e){const{view:t,screenPoint:n,camera:r,initialDistance:a,depthSearchSize:c,output:l}=e,m=c>0?t.stage.renderView.getMinimalDepthForArea(b(t),n[0],n[1],r,c):null;s(l.translation,l.location,r.eye);let p=Math.min(d(l.translation),a);m&&m<=p&&(p=m),o(l.translation,l.translation),u(l.translation,l.translation,p),i(l.location,l.translation,r.eye)}async function ze(t,o){if("ground"!==t.navigation.mode.type)return void e.getLogger("esri").warn("Can only advance while in ground navigation mode!");const{camera:r}=t.state;t.renderCoordsHelper.worldUpAtPosition(r.eye,W);const c=t.sceneIntersectionHelper,l=ve(t),p=a(R,W,r.viewRight);m($.origin,r.eye),u($.direction,p,o);const f=c.intersectRay($,l,te),g=(new k).copyFrom(r),h=s(re,r.center,r.eye);if(!f||n(te,r.eye)>o)g.eye=i(R,$.origin,$.direction);else{s(R,te,r.eye);d(R)>G&&(xe(R,R,N,G),g.eye=i(R,r.eye,R))}g.center=i(R,g.eye,h);return new C(t).immediatelyCorrectGroundElevation(g,100),t.goTo(I(t,g),{duration:500,liftOffDisabled:!0})}function xe(e,t,n,o){const r=d(e),i=Math.min(n,Math.max(r-o,0)/r);u(t,e,i)}export{ue as computeHorizonPadding,me as computeHorizonPaddingLimits,ge as findGroundNavigationGrabLocation,ie as findPlaneHorizonY,ae as findSphereHorizonY,ze as groundNavigationAdvance,O as groundNavigationConstants,se as isAboveHorizon,ce as isBelowHorizon,xe as shortenTranslation,le as shouldClampScreenY};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import{generateUID as e}from"../../../core/uid.js";import{WorkerHandle as r}from"../../../core/workers/WorkerHandle.js";import s from"../../../geometry/SpatialReference.js";import t from"../../../layers/support/Field.js";class a{constructor(e){this._controller=e,this._handle=new n(r=>e.schedule(r))}destroy(){this._handle.destroy()}async invoke(r,a){if(!r.buffer||0===r.buffer.byteLength)return null;r.options.sourceSpatialReference&&r.options.sourceSpatialReference instanceof s&&(r.options={...r.options,sourceSpatialReference:r.options.sourceSpatialReference.toJSON()});const n=await this._handle.invoke(r,a);return await this._controller.scheduleGenerator(function*(r){const a=s.fromJSON(n.spatialReference);n.spatialReference=a;const i=n.fields;if(i)for(let e=0;e<i.length;++e)i[e]=t.fromJSON(i[e]),r.madeProgress()&&(r=yield);const p=n.features;for(let s=0;s<p.length;++s){const t=p[s];t.uid=e();const n=t.geometry;null!=n&&(n.spatialReference=a,o(n),r.madeProgress()&&(r=yield))}return n})}}function o(e){switch(e.type){case"polyline":e.paths=e.hasZ&&e.hasM?e.paths.map(e=>e.map(e=>[e[0],e[1],e[2],e[3]])):e.hasZ||e.hasM?e.paths.map(e=>e.map(e=>[e[0],e[1],e[2]])):e.paths.map(e=>e.map(e=>[e[0],e[1]]));break;case"polygon":e.rings=e.hasZ&&e.hasM?e.rings.map(e=>e.map(e=>[e[0],e[1],e[2],e[3]])):e.hasZ||e.hasM?e.rings.map(e=>e.map(e=>[e[0],e[1],e[2]])):e.rings.map(e=>e.map(e=>[e[0],e[1]]))}}class n extends r{constructor(e){super("PBFDecoderWorker","_parseFeatureQuery",{_parseFeatureQuery:e=>[e.buffer]},e)}}export{a as PBFDecoder};
2
+ import{throwIfAborted as e}from"../../../core/promiseUtils.js";import{generateUID as r}from"../../../core/uid.js";import{WorkerHandle as o}from"../../../core/workers/WorkerHandle.js";import t from"../../../geometry/SpatialReference.js";import{toDehydratedGeometry as s}from"../../../layers/graphics/transferFeatures.js";import n from"../../../layers/support/Field.js";class a{constructor(e){this._controller=e,this._abortController=new AbortController,this._handle=new i((r,o)=>e.schedule(r,o))}destroy(){this._abortController.abort(),this._handle.destroy()}async invoke(o,a){if(a=AbortSignal.any([a,this._abortController.signal]),e(a),!o.buffer||0===o.buffer.byteLength)return null;o.options.sourceSpatialReference&&o.options.sourceSpatialReference instanceof t&&(o.options={...o.options,sourceSpatialReference:o.options.sourceSpatialReference.toJSON()});const{featureSet:i,coordinates:l,queryGeometry:c,queryCoordinates:f}=await this._handle.invoke(o,a);return await this._controller.scheduleGenerator(function*(e){const o=t.fromJSON(i.spatialReference),a=[];for(let r=0;r<i.fields.length;++r)a.push(n.fromJSON(i.fields[r])),e.madeProgress()&&(e=yield);const u=i.features;for(let t=0;t<u.length;++t){const n=u[t];n.geometry=s(n.geometry,l[t],o),n.uid=r(),n.centroid&&(n.centroid.spatialReference=o),l[t]=null,e.madeProgress()&&(e=yield)}return Object.assign(i,{spatialReference:o,fields:a,queryGeometry:s(c,f,o)})},a)}}class i extends o{constructor(e){super("PBFDecoderWorker","parseFeatureQuery",{parseFeatureQuery:e=>[e.buffer]},e)}}export{a as PBFDecoder};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import{DehydratedFeatureSetParserContext as e}from"../../../rest/query/operations/pbfDehydratedFeatureSet.js";import{parsePBFFeatureQuery as r}from"../../../rest/query/operations/pbfQueryUtils.js";class t{_parseFeatureQuery(t){const s=new e(t.options),i=r(t.buffer,s),o={...i,spatialReference:i.spatialReference?.toJSON(),fields:i.fields?i.fields.map(e=>e.toJSON()):void 0,missingAttributes:s.missingAttributes};return Promise.resolve(o)}}function s(){return new t}export{s as default};
2
+ import{DehydratedFeatureSetParserContext as e}from"../../../rest/query/operations/pbfDehydratedFeatureSet.js";import{parsePBFFeatureQuery as r}from"../../../rest/query/operations/pbfQueryUtils.js";class t{parseFeatureQuery(t){const s=new e(t.options),o=r(t.buffer,s);o.missingAttributes=s.missingAttributes;const n={featureSet:o,coordinates:s.coordinates,queryGeometry:s.queryGeometry()??null,queryCoordinates:s.queryCoordinates()??null};return Promise.resolve({result:n,transferList:s.transferList})}}function s(){return new t}export{s as default};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import has from"../../../core/has.js";import{Milliseconds as e}from"../../../core/time.js";function a(e){return l[e]}function i(){return has("esri-iPhone")?"low":"medium"}const o={reset(){const e=m();for(const a of Object.keys(e))l[a]=e[a]}},t={IPhone12Pro:120,GalaxyS20:200,FullHD:240,SurfacePro7:300,FullHDRetina:430},l=m();function m(){const a=!!has("esri-mobile"),i=!!has("ios"),o=e(400);return{low:{graphics3D:{maxTotalNumberOfFeatures:5e4,maxNumberOfDrawCalls:8e3,maxTotalNumberOfVertices:255e4,polygonLodFactor:.5,polylineLodFactor:1,snapshotAvailable:!1,skipHighSymbolLods:!0},heatmap:{pixelRatio:.125},sceneService:{objectLoDFactor:.2,pointLoDFactor:1,meshLoDFactor:.6,pointCloudLoDFactor:.5},gaussianSplat:{minimumPixelRadius:2,minimumOpacity:0,maximumNumberOfGaussians:1e6},flow:{maxTotalNumberOfStreamlines:5e3,maxTracingResolution:1024,transitionEnabled:!1},tiledSurface:{lodBias:-1,angledSplitBias:.5,vtlContentZoom:.75,elevationLevelDelta:3,reduceTileLevelDifferences:!0},fadeDuration:e(0),physicallyBasedRenderingEnabled:!1,maxTexturePixels:a?1048576:4194304,memoryLimit:200+t.IPhone12Pro,additionalCacheMemory:0,frameRate:0,maximumPixelRatio:1},medium:{graphics3D:{maxTotalNumberOfFeatures:15e4,maxNumberOfDrawCalls:17e3,maxTotalNumberOfVertices:625e4,polygonLodFactor:a?.8:1,polylineLodFactor:a?1.2:1.5,snapshotAvailable:!i,skipHighSymbolLods:!1},heatmap:{pixelRatio:.25},sceneService:{objectLoDFactor:1,pointLoDFactor:1,meshLoDFactor:1,pointCloudLoDFactor:1},gaussianSplat:{minimumPixelRadius:1,minimumOpacity:1,maximumNumberOfGaussians:3e6},flow:{maxTotalNumberOfStreamlines:2e4,maxTracingResolution:2048,transitionEnabled:!0},tiledSurface:{lodBias:0,angledSplitBias:1,vtlContentZoom:1.5,elevationLevelDelta:3,reduceTileLevelDifferences:!0},fadeDuration:o,physicallyBasedRenderingEnabled:!0,maxTexturePixels:a?4194304:4096**2,memoryLimit:a?600+t.GalaxyS20:750+t.FullHD,additionalCacheMemory:a?-100:150,frameRate:0,maximumPixelRatio:1},high:{graphics3D:{maxTotalNumberOfFeatures:3e5,maxNumberOfDrawCalls:17e3,maxTotalNumberOfVertices:125e5,polygonLodFactor:a?1.2:2,polylineLodFactor:a?1.2:2,snapshotAvailable:!i,skipHighSymbolLods:!1},heatmap:{pixelRatio:.5},sceneService:{objectLoDFactor:1,pointLoDFactor:1,meshLoDFactor:1,pointCloudLoDFactor:1},gaussianSplat:{minimumPixelRadius:.5,minimumOpacity:2,maximumNumberOfGaussians:6e6},flow:{maxTotalNumberOfStreamlines:2e4,maxTracingResolution:2048,transitionEnabled:!0},tiledSurface:{lodBias:0,angledSplitBias:1,vtlContentZoom:1.5,elevationLevelDelta:2,reduceTileLevelDifferences:!0},fadeDuration:o,physicallyBasedRenderingEnabled:!0,maxTexturePixels:a?4096**2:1/0,memoryLimit:a?900+t.SurfacePro7:1500+t.FullHDRetina,additionalCacheMemory:a?-150:0,frameRate:0,maximumPixelRatio:a?1:1/0}}}export{o as QualityProfileTest,i as getDefaultQualityProfileName,a as getQualityProfileSettings};
2
+ import has from"../../../core/has.js";import{Milliseconds as e}from"../../../core/time.js";function a(e){return l[e]}function i(){return has("esri-iPhone")?"low":"medium"}const o={reset(){const e=m();for(const a of Object.keys(e))l[a]=e[a]}},t={IPhone12Pro:120,GalaxyS20:200,FullHD:240,SurfacePro7:300,FullHDRetina:430},l=m();function m(){const a=!!has("esri-mobile"),i=!!has("ios"),o=e(400);return{low:{graphics3D:{maxTotalNumberOfFeatures:5e4,maxNumberOfDrawCalls:8e3,maxTotalNumberOfVertices:255e4,polygonLodFactor:.5,polylineLodFactor:1,snapshotAvailable:!1,skipHighSymbolLods:!0},heatmap:{pixelRatio:.125},sceneService:{objectLoDFactor:.2,pointLoDFactor:1,meshLoDFactor:.6,pointCloudLoDFactor:.5},gaussianSplat:{minimumPixelRadius:2,minimumOpacity:0,maximumNumberOfGaussians:1e6},flow:{maxTotalNumberOfStreamlines:5e3,maxTracingResolution:1024,transitionEnabled:!1},tiledSurface:{lodBias:-1,angledSplitBias:.5,vtlContentZoom:.75,elevationLevelDelta:3,reduceTileLevelDifferences:!0},fadeDuration:e(0),physicallyBasedRenderingEnabled:!1,maxTexturePixels:a?1048576:4194304,memoryLimit:200+t.IPhone12Pro,additionalCacheMemory:0,frameRate:0,maximumPixelRatio:1},medium:{graphics3D:{maxTotalNumberOfFeatures:15e4,maxNumberOfDrawCalls:17e3,maxTotalNumberOfVertices:625e4,polygonLodFactor:a?.8:1,polylineLodFactor:a?1.2:1.5,snapshotAvailable:!i,skipHighSymbolLods:!1},heatmap:{pixelRatio:.25},sceneService:{objectLoDFactor:1,pointLoDFactor:1,meshLoDFactor:1,pointCloudLoDFactor:1},gaussianSplat:{minimumPixelRadius:1,minimumOpacity:1,maximumNumberOfGaussians:a?1e6:3e6},flow:{maxTotalNumberOfStreamlines:2e4,maxTracingResolution:2048,transitionEnabled:!0},tiledSurface:{lodBias:0,angledSplitBias:1,vtlContentZoom:1.5,elevationLevelDelta:3,reduceTileLevelDifferences:!0},fadeDuration:o,physicallyBasedRenderingEnabled:!0,maxTexturePixels:a?4194304:4096**2,memoryLimit:a?600+t.GalaxyS20:750+t.FullHD,additionalCacheMemory:a?-100:150,frameRate:0,maximumPixelRatio:1},high:{graphics3D:{maxTotalNumberOfFeatures:3e5,maxNumberOfDrawCalls:17e3,maxTotalNumberOfVertices:125e5,polygonLodFactor:a?1.2:2,polylineLodFactor:a?1.2:2,snapshotAvailable:!i,skipHighSymbolLods:!1},heatmap:{pixelRatio:.5},sceneService:{objectLoDFactor:1,pointLoDFactor:1,meshLoDFactor:1,pointCloudLoDFactor:1},gaussianSplat:{minimumPixelRadius:.5,minimumOpacity:2,maximumNumberOfGaussians:6e6},flow:{maxTotalNumberOfStreamlines:2e4,maxTracingResolution:2048,transitionEnabled:!0},tiledSurface:{lodBias:0,angledSplitBias:1,vtlContentZoom:1.5,elevationLevelDelta:2,reduceTileLevelDifferences:!0},fadeDuration:o,physicallyBasedRenderingEnabled:!0,maxTexturePixels:a?4096**2:1/0,memoryLimit:a?900+t.SurfacePro7:1500+t.FullHDRetina,additionalCacheMemory:a?-150:0,frameRate:0,maximumPixelRatio:a?1:1/0}}}export{o as QualityProfileTest,i as getDefaultQualityProfileName,a as getQualityProfileSettings};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import{isScreenRect as e,createScreenPoint as r}from"../../../core/screenUtils.js";import{isIntegratedMeshLayer as t,isTiledLayer as a,isLayerWithFlowRenderer as s}from"../../../layers/support/layerUtils.js";import{hitTestSelectSimilarDistance as i}from"../../support/hitTestSelectUtils.js";import{isScaleRangeActive as n,scaleBoundsPredicate as l}from"../../support/layerViewUtils.js";async function o(o,f){const u=await i(o,f),{results:d}=u,m=u.ground,w=e(f)?o.toMap(r(f.x+f.width/2,f.y+f.height/2)):m.mapPoint,g=(!m.layer||!t(m.layer))&&w,h=[],V=p(o),S=g?c(o,V):y;let U=0,T=0;const b=()=>{const e=S.layerViews[T++];if(!g||!e||!("fetchPopupFeaturesAtTarget"in e))return;const r=w,t=e.layer;if(a(t)&&"effectiveScaleRange"in t){const{minScale:e,maxScale:a}=t.effectiveScaleRange;if(n(e,a)){if(s(t)&&!l(o.scale,e,a))return;const i=o.basemapTerrain.getScale(r);if(!l(i,e,a))return}}h.push({geometry:r,layerView:e})};let j=null;for(;U<d.length||T<S.layerViews.length;){const e=d[U];if(e&&"graphic"!==e.type)++U;else if("scene"!==e?.layer?.type||e?.layer?.parent!==o?.map?.basemap)if(e){const r=e.layer?.uid,t=S.layerUids.has(r)&&e.distance===m.distance,a=V.get(e.layer?.uid);if(j??=e.mapPoint,T<S.layerViews.length&&(t||(e.distance??0)>m.distance)&&S.layerViews[T]!==a){b();continue}h.push({graphic:e.graphic,layerView:a}),++U}else b();else++U}return j??=w,{hits:h,location:j}}function c(e,r){const t=new Set,a=new Set;for(let i=e.basemapTerrain.numLayers(1)-1;i>=0;i--){const r=e.basemapTerrain.layerViewByIndex(i,1);t.add(r.layer.uid),a.add(r)}const s=e.overlayManager.renderer.layers;for(const{uid:i}of s){const e=r.get(i);e&&(t.add(i),a.add(e))}return{layerUids:t,layerViews:Array.from(a).reverse()}}const y={layerUids:new Set,layerViews:[]};function p(e){const r=new Map;for(const t of e.allLayerViews){const e=t.layer.uid;r.set(e,t)}return r}export{o as popupHitTest};
2
+ import{isScreenRect as e,createScreenPoint as r}from"../../../core/screenUtils.js";import{isTiledLayer as t,isLayerWithFlowRenderer as a}from"../../../layers/support/layerUtils.js";import{hitTestSelectSimilarDistance as s}from"../../support/hitTestSelectUtils.js";import{isScaleRangeActive as i,scaleBoundsPredicate as n}from"../../support/layerViewUtils.js";async function l(l,f){const p=await s(l,f),{results:u}=p,d=p.ground,m=e(f)?l.toMap(r(f.x+f.width/2,f.y+f.height/2)):d.mapPoint,w=null!=m,g=[],h=y(l),V=null==d.layer,S=w?o(l,h,V):c;let U=0,j=0;const v=()=>{const e=S.layerViews[j++];if(!w||!e||!("fetchPopupFeaturesAtTarget"in e))return;const r=m,s=e.layer;if(t(s)&&"effectiveScaleRange"in s){const{minScale:e,maxScale:t}=s.effectiveScaleRange;if(i(e,t)){if(a(s)&&!n(l.scale,e,t))return;const i=l.basemapTerrain.getScale(r);if(!n(i,e,t))return}}g.push({geometry:r,layerView:e})};let x=null;for(;U<u.length||j<S.layerViews.length;){const e=u[U];if(e&&"graphic"!==e.type)++U;else if("scene"!==e?.layer?.type||e?.layer?.parent!==l?.map?.basemap)if(e){const r=e.layer?.uid,t=S.layerUids.has(r)&&e.distance===d.distance,a=h.get(e.layer?.uid);if(x??=e.mapPoint,j<S.layerViews.length&&(t||(e.distance??0)>d.distance)&&S.layerViews[j]!==a){v();continue}g.push({graphic:e.graphic,layerView:a}),++U}else v();else++U}return x??=m,{hits:g,location:x}}function o(e,r,t){const a=new Set,s=new Set,i=e=>{e&&(a.add(e.layer.uid),s.add(e))};if(t){const{basemapTerrain:r}=e;for(let e=r.numLayers(1)-1;e>=0;e--)i(r.layerViewByIndex(e,1))}const n=e.overlayManager.renderer.layers;for(const{uid:l}of n)i(r.get(l));return{layerUids:a,layerViews:Array.from(s).reverse()}}const c={layerUids:new Set,layerViews:[]};function y(e){const r=new Map;for(const t of e.allLayerViews){const e=t.layer.uid;r.set(e,t)}return r}export{l as popupHitTest};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import has from"../../../core/has.js";import{disposeMaybe as t}from"../../../core/maybe.js";import{MemCachePool as r}from"../../../core/MemCachePool.js";import i from"../../../core/ObjectPool.js";import{watch as s,sync as n}from"../../../core/reactiveUtils.js";import{property as a,subclass as l}from"../../../core/accessorSupport/decorators.js";import{subtract as o,set as c,dot as h}from"../../../core/libs/gl-matrix-2/math/vec3.js";import{ZEROS as d,fromValues as u,create as _}from"../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{fromValues as g,ZEROS as f}from"../../../core/libs/gl-matrix-2/factories/vec4f64.js";import{create as p,set as m}from"../../../geometry/support/aaBoundingBox.js";import{BufferViewVec3f as y}from"../../../geometry/support/buffer/BufferView.js";import{overlayRenderOccludedFlag as b}from"./OverlayRenderer.js";import{PatchRenderData as x}from"./PatchRenderData.js";import{TerrainAttributesCache as T}from"./TerrainAttributesCache.js";import{enableTerrainInternalChecks as R}from"./terrainUtils.js";import{TileRenderer as v}from"./TileRenderer.js";import{IteratorPreorder as P,fallsWithinLayerView as w,sortTiles as O,compareTiles as D}from"./tileUtils.js";import{getOverlayContentForOutputTerrain as S}from"../webgl-engine/core/shaderLibrary/terrain/Overlay.glsl.js";import{SyncRenderPlugin as B}from"../webgl-engine/effects/RenderPlugin.js";import{Vertices as E}from"../webgl-engine/lib/Attribute.js";import{IntersectorResultRay as F}from"../webgl-engine/lib/IntersectorResult.js";import{intersectAabbInvDirBefore as j,MeshIntersectionOptions as q,intersectTriangles as C}from"../webgl-engine/lib/RayIntersections.js";import{TriangleIntersectionData as A}from"../webgl-engine/lib/TriangleIntersectionData.js";import{terrainId as M,getVerticalOffsetTerrain as G}from"../webgl-engine/lib/verticalOffsetUtils.js";import{DrawParameters as I}from"../webgl-engine/materials/DrawParameters.js";import{hasShadowHighlights as U}from"../webgl-engine/shaders/ReceiveShadowsConfiguration.js";import{T as k}from"../../../chunks/Terrain.glsl.js";import{TerrainTechnique as N}from"../webgl-engine/shaders/TerrainTechnique.js";import{TerrainTechniqueConfiguration as L}from"../webgl-engine/shaders/TerrainTechniqueConfiguration.js";import{PrimitiveType as V}from"../../webgl/enums.js";const H=7,z=10,Q=200,W=p();let Z=class extends B{get visibleTiles(){return Array.from(this._visiblePatchesByOrigin.values()).flat()}get _isGlobal(){return 1===this._stage.viewingMode}get _techniques(){return this._context.techniques}get _rctx(){return this._context.renderContext.rctx}get renderOccludedFlags(){return this._overlayRenderer.renderOccludedFlags}constructor(e,t,s,n,a){super({}),this._overlayRenderer=e,this._stage=t,this._allTiles=s,this._compressionTracker=n,this.type=7,this.isGround=!0,this._passParameters=new k,this._drawParameters=new I,this._renderDataPool=new i(()=>new x),this._visiblePatchesByOrigin=new Map,this._allPatchesByOrigin=new Map,this._patchesByOriginDirty=!0,this._patchSortingDirty=!0,this._tileIterator=new P,this._castShadows=!1,this._inViewshed=!1,this._cutFillEnabled=!1,this._tileRenderer=null,this._stencilEnabledLayerExtents=new Array,this._numTilesRendered=0,this._numTilesCulled=0,this._numOriginsRendered=0,this.produces=new Map([[1,()=>1===this._desiredSlot],[7,()=>7===this._desiredSlot],[9,()=>this._produces()&&this.renderOccludedFlags===b]]),this._tileSize=256,this._configuration=new L(1===t.viewingMode),this._tileTextureCache=new r((e,t)=>a.newCache(e,t),"TileTexture"),this.tileGeometryCache=new T(a)}normalizeCtorArgs(){return{}}initialize(){this._stage.addRenderPlugin(this),this.addHandles(s(()=>this._overlayRenderer.renderOccludedFlags,()=>this.setNeedsRender(),n))}destroy(){this._stage.removeRenderPlugin(this),this._tileTextureCache.destroy(),this.tileGeometryCache.destroy(),this._allTiles.prune(),this._tileRenderer=null}_produces(){return this.visible&&!!this._rootTiles&&!this.renderingDisabled}set renderingDisabled(e){this._set("renderingDisabled",!!e),this.setDirty()}set visible(e){this._set("visible",!!e),this.setDirty()}updateHeading(e){this._tileRenderer?.updateHeading(e)}set transparency(e){this._configuration.transparencyMode!==e&&(this._configuration.transparencyMode=e,this.setNeedsRender())}get transparency(){return this._configuration.transparencyMode}get renderPatchBorders(){return this._configuration.tileBorders}set renderPatchBorders(e){this._configuration.tileBorders!==e&&(this._configuration.tileBorders=e,this.setNeedsRender(),this.notifyChange("renderPatchBorders"))}get layerViewUid(){return M}get slicePlaneEnabled(){return this._configuration.hasSlicePlane}set slicePlaneEnabled(e){this._configuration.hasSlicePlane!==e&&(this._configuration.hasSlicePlane=e,this.setNeedsRender())}set textureFadingEnabled(e){this._configuration.textureFadingEnabled!==e&&(this._configuration.textureFadingEnabled=e,this.setNeedsRender())}set pbrMode(e){this._configuration.pbrMode!==e&&(this._configuration.pbrMode=e,this.setNeedsRender())}setRootTiles(e){this._rootTiles=e,this.setDirty()}setStencilEnabledLayerExtents(e){this._stencilEnabledLayerExtents=e,this._setSortingDirty()}set tileSize(e){this._tileSize=e,null!=this._tileRenderer&&(this._tileRenderer.tileSize=e),this.setDirty()}get tileSize(){return this._tileSize}_ensureRenderData(e){e.renderData||(e.renderData=this._renderDataPool.acquire(),e.renderData.init(e,this._getLocalOriginOfTile(e)))}loadTile(e){this._ensureRenderData(e),this.updateTileGeometryState(e),this.reuseTextureFromParent(e)||this.updateTileTexture(e,32)}reuseTextureFromParent(e){const{parent:t}=e;if(!this._canReuseTextureFromParent(t,e))return!1;const r=g(1&e.lij[2]?.5:0,1&e.lij[1]?0:.5,.5,.5);return t.renderData?.reuseTexture(e.renderData,r)??!1}_canReuseTextureFromParent(e,t){if(!e)return!1;const{layerInfo:r,surface:i}=t;for(let s=0;s<r[1].length;s++){const r=i.layerViewByIndex(s,1);if(w(e,r)!==w(t,r))return!1}return!0}updateTileTexture(e,t){null!=this._tileRenderer&&(this._tileRenderer.updateTileTexture(e,32===t?0:2),this.setNeedsRender(),e.resetPendingUpdate(t))}updateTileGeometryState(e){for(const r of e.layerInfo[0])r.pendingUpdates&=-9;e.resetPendingUpdate(8);const t=e.renderData.updateGeometryState();return t&&this.setDirty(),t}updateGeometryIfNeeded(e){e.loaded&&e.renderData.updateGeometryIfNeeded(this._rctx)}unloadTile(e){const t=e.renderData;t&&(t.releaseGeometry(),this._renderDataPool.release(t),t.clear(),e.renderData=null,e.setMemoryDirty(),this.setDirty())}_getLocalOriginOfTile(e){const t=z-H,r=Math.max(0,Math.floor((e.level-t)/H)*H);if(this._isGlobal&&0===r)return d;for(;e.parent&&e.level>r;)e=e.parent;return e.centerAtSeaLevel}getStats(){return{numTilesRendered:this._numTilesRendered,numTilesCulled:this._numTilesCulled,numOriginsRendered:this._numOriginsRendered}}set wireframe(e){this._get("wireframe")!==e&&(this._set("wireframe",e),this.setNeedsRender())}setDirty(e=1){this._patchesByOriginDirty=!0,this._context.requestRender(e)}_setSortingDirty(e=1){this._patchSortingDirty=!0,this._context.requestRender(e)}setNeedsRender(e=1){this._context.requestRender(e)}initializeRenderContext(e){this._context=e,this._tileRenderer=new v(this._rctx,this._tileSize,this._techniques,this._tileTextureCache,this._compressionTracker),this.updateTileBackground()}uninitializeRenderContext(){this._tileRenderer=t(this._tileRenderer)}intersectRay(e,t,r,i){if(!this._rootTiles||e.options.selectOpaqueTerrainOnly&&e.options.selectionMode&&0!==this.transparency)return;const s=J,n=K;o(s,i,r),c(n,1/s[0],1/s[1],1/s[2]);const a=e.results.min,l=e.results.max,d=e.results.ground,u=0===e.options.store,_=!!e.results.ground.target,g=G(e.verticalOffset),f=e.tolerance;let p,b=u&&null!=a.distance?a.distance:1/0;const x=e.options,T=x.normalRequired||!x.backfacesTerrain,R=new q(f,!1,T),v=c=>{const _=c.renderData;if(!_?.vao)return;const v=_.geometry;m(W,v.boundingBox);const P=_.localOrigin;null!=g&&(g.localOrigin=P,g.applyToAabb(W));const w=W;if(X[0]=r[0]-P[0],X[1]=r[1]-P[1],X[2]=r[2]-P[2],!j(w,X,n,f,b))return;const O=(e,t,r,i)=>{e.set(this.type,c,t,r,i),b=u&&null!=a.renderDistance?a.renderDistance:1/0},D=(n,o,c)=>{if((!T||null!=c)&&o>=0&&(x.backfacesTerrain||h(c,s)<0)&&(x.invisibleTerrain||!x.selectionMode||null==t||t(r,i,o))){if((null==d.renderDistance||o<d.renderDistance)&&O(d,n,o,c),x.isFiltered)return;2===x.store&&(null==p?(p=new F(e.ray),O(p,n,o,c),e.results.all.push(p)):o<p.renderDistance&&O(p,n,o,c)),(null==a.renderDistance||o<a.renderDistance)&&O(a,n,o,c),0!==x.store&&(null==l.renderDistance||o>l.renderDistance)&&O(l,n,o,c)}},S=Y;o(S,i,P);const{indices:B,indexCount:q}=v,M=v.vertexAttributes,G=M.getField("position",y),I=new E(G.typedBuffer,3,M.stride/4),U=q/3;if(!g&&U>Q){const e=c.renderData;e.intersectionData??=new A(B,U,I),e.intersectionData.intersectRay(X,S,R,D)}else{C(X,S,0,U,(e,t)=>G.getVec(B[t],e),g,R,D)}},P=this._rootTiles;if(null!=P){(()=>{const t=this._tileIterator;t.reset(P);const i=e.options.invisibleTerrain;for(let e=t.next();e;e=t.next())!(e.visible||i&&e.intersectsClippingArea)||null==g&&!e.intersectsRay(r,s,f,b)||_&&this._useStencilForTile(e)?t.skipSubtree():v(e)})()}}processScaleRangeQueries(e,t){if(!t.done&&e)for(this._updatePatchGroups();e.updating&&!t.done;){e.prepare();for(const t of this._visiblePatchesByOrigin.values())for(const r of t)null!=r.renderData?.textureReference&&e.queriesForTile(r);e.process(),t.madeProgress()}}get _desiredSlot(){if(!this._produces())return null;switch(this.transparency){case 0:return 1;case 1:case 2:return 7;case 3:case 4:return null}}acquireTechniques(e){const{shadowMap:t,viewshedEnabled:r,cutFillComputationEnabled:i,slot:s,hasEmission:n,useFloatBlend:a}=e.bind,l=!!has("enable-feature:terrain-shadows")&&t.enabled;if(l!==this._castShadows&&(this._castShadows=l,this._patchesByOriginDirty=!0),this._inViewshed!==r&&(this._inViewshed=r,this._patchesByOriginDirty=!0),this._cutFillEnabled!==i&&(this._cutFillEnabled=i,this._patchesByOriginDirty=!0),3===this.transparency)return null;if(9===s){if(0===(e.renderOccludedMask&b))return null}else if(s!==this._desiredSlot)return null;const o=this._configuration;switch(o.screenSpaceReflections=o.cloudReflections=o.receiveShadows=o.hasShadowHighlights=o.receiveAmbientOcclusion=o.renderOccluded=o.hasHighlightMixTexture=!1,o.hasEmission=n,o.overlayMode=this._overlayRenderer.mode,o.useFloatBlend=a.value,e.output){case 0:case 1:case 2:{const r=e.bind;o.screenSpaceReflections=r.hasScreenSpaceReflections,o.cloudReflections=null!=r.clouds.data;const i=9===s;return o.receiveShadows=t.ready&&!i,o.hasShadowHighlights=U(o,e.bind),o.renderOccluded=i,o.receiveAmbientOcclusion=!i&&null!=r.ssao,o.receiveGlobalIllumination=!i&&r.globalIlluminationEnabled,this._acquireTechnique(e.output)}case 5:case 7:return this._castShadows?this._acquireTechnique(5):null;case 8:return this._inViewshed?this._acquireTechnique(8):null;case 9:return this._cutFillEnabled?this._acquireTechnique(9):null;case 3:case 4:return this._acquireTechnique(e.output);case 11:return this._acquireTechnique(11);case 10:return o.hasHighlightMixTexture=null!=e.bind.highlightMixTexture,this._overlayRenderer.hasHighlights?this._acquireTechnique(10):null}return null}render(e,t){switch(this._updatePatchGroups(),this._passParameters.useStencil=!1,this._passParameters.overlayContent=S(e.output,e.bind),e.output){case 0:case 1:case 2:return this._renderMaterialPass(e,t);case 3:case 4:case 11:return this._renderAuxiliaryPass(e,t,this._visiblePatchesByOrigin);case 10:{const r=e.bind.highlight?.name;r&&this._overlayRenderer.hasHighlights&&this._overlayRenderer.renders(2)&&this._overlayRenderer.hasHighlight(r)&&this._renderAuxiliaryPass(e,t,this._visiblePatchesByOrigin);break}case 5:case 7:case 8:case 9:return this._renderAuxiliaryPass(e,t,this._allPatchesByOrigin)}}updateTileBackground(e){if(null==this._tileRenderer)return;const t=this._tileRenderer;let r;if(null!=e){const t=e.toUnitRGBA();r=u(t[0]||0,t[1]||0,t[2]||0)}t.setBackground(r),this._allTiles.forAll(e=>t.updateTileTexture(e,0)),this._configuration.tileBlendInput=t.backgroundIsGrid?2:null!=t.backgroundColor?1:0,this.setNeedsRender()}_updatePatchGroups(){if(this._patchesByOriginDirty&&(this._rebuildPatchGroups(),this._patchesByOriginDirty=!1,this._patchSortingDirty=!0),this._patchSortingDirty){const e=Array.from(this._visiblePatchesByOrigin.values()),t=this._stencilEnabledLayerExtents;for(const r of e)O(r,t);e.sort((e,t)=>D(e[0],t[0])),this._visiblePatchesByOrigin=new Map(e.map(e=>[e[0].renderData.localOrigin,e])),this.notifyChange("visibleTiles"),this._patchSortingDirty=!1}}_rebuildPatchGroups(){const e=this._rootTiles;if(null!=e){e[0]?.surface.checkAllTilesWaterproofness("render-patch-groups"),this._visiblePatchesByOrigin.clear(),this._allPatchesByOrigin.clear();for(const t of e)this._rebuildPatchGroupsForRootTile(t)}}_rebuildPatchGroupsForRootTile(e){const t=this._tileIterator;for(t.resetOne(e);!t.done;){const e=t.next(),r=e.renderData;if(!r){this._numTilesCulled++;continue}const i=r.localOrigin;if(this._castShadows||this._inViewshed||this._cutFillEnabled){let t=this._allPatchesByOrigin.get(i);t||(t=[],this._allPatchesByOrigin.set(i,t)),t.push(e)}if(!e.visible){this._numTilesCulled++,t.skipSubtree();continue}let s=this._visiblePatchesByOrigin.get(i);s||(s=[],this._visiblePatchesByOrigin.set(i,s)),s.push(e),t.skipSubtree()}}_useStencilForTile(e){for(const t of this._stencilEnabledLayerExtents)if(e.intersectsExtent(t))return!0;return!1}_renderAuxiliaryPass(e,t,r){const{rctx:i,bind:s}=e;i.bindTechnique(t,s,this._passParameters);const n=this._stencilEnabledLayerExtents.length>0;r.forEach(r=>{this._drawParameters.origin=r[0].renderData.localOrigin,t.program.bindDraw(s,this._passParameters,this._drawParameters);for(let i=0;i<r.length;i++)this._renderPatch(e,t,r[i],V.TRIANGLES,n,null===this._passParameters.overlayContent)}),i.bindVAO(null)}_renderMaterialPass(e,t){const{rctx:r,bind:i}=e,s=r.bindTechnique(t,i,this._passParameters);this._numTilesRendered=0,this._numTilesCulled=0,this._numOriginsRendered=0;const n=9===i.slot;n&&(s.bindTexture("tex",r.emptyTexture),s.setUniform3fv("textureOpacities",d),s.setUniform4fv("texOffsetAndScale",f));const a=null!=this._tileRenderer?.backgroundColor?this._tileRenderer.backgroundColor:d;1===this._configuration.tileBlendInput&&s.setUniform3fv("backgroundColor",a);const l=this._stencilEnabledLayerExtents.length>0,o=this.wireframe?V.LINES:V.TRIANGLES;this._configuration.textureFadingEnabled&&s.bindTexture("texNext",r.emptyTexture);const c=this._visiblePatchesByOrigin;for(const h of c.values()){const r=h[0].renderData.localOrigin;this._drawParameters.origin=r,t.program.bindDraw(i,this._passParameters,this._drawParameters),this._numOriginsRendered++;for(const i of h){const r=i.renderData,a=r.textureReference;if(null!=a){if(!n){s.setUniform4fv("texOffsetAndScale",a.offsetAndScale),s.bindTexture("tex",a.texture.texture);const e=r.textureFadeFactor,t=e<1?r.nextTextureReference:null;this._configuration.textureFadingEnabled&&t&&e<1?(s.setUniform1f("fadeFactor",e),s.setUniform4fv("nextTexOffsetAndScale",t.offsetAndScale),s.setUniform3fv("nextTexOpacities",t.opacities),s.bindTexture("texNext",t.texture.texture)):s.setUniform1f("fadeFactor",1),r.textureIsFading&&this.setNeedsRender(2),s.setUniform3fv("textureOpacities",a.opacities)}this._renderPatch(e,t,i,o,l),i.renderOrder=this._numTilesRendered,this._numTilesRendered++}}}r.bindVAO(null)}_renderPatch(e,t,r,i,s,n=!1){const a=r.renderData,l=a.vao,o=l?.indexBuffer;if(!l||null==o)return void(R&&console.error("Rendered tile with no indices: ",r.lij," : ",a));const c=t.program;n||this._overlayRenderer.isEmpty||this._bindOverlayPatchData(c,a.overlay);const{rctx:h,bind:d}=e;s&&(this._passParameters.useStencil=this._useStencilForTile(r),h.setPipelineState(t.getPipeline(d,this._passParameters)));const u=a.geometry.indexCount;h.bindVAO(l),c.assertCompatibleVertexAttributeLocations(l),h.drawElements(i,u,o.indexType,0)}_bindOverlayPatchData(e,t){e.setUniform4fv("overlayTexOffset",t.offsets),e.setUniform4fv("overlayTexScale",t.scales)}_acquireTechnique(e){return this._configuration.output=e,this._techniques.get(N,this._configuration)}get test(){}hasHighlight(e){return this._overlayRenderer.hasHighlight(e)}};e([a({readOnly:!0})],Z.prototype,"visibleTiles",null),e([a({readOnly:!0})],Z.prototype,"_isGlobal",null),e([a()],Z.prototype,"renderOccludedFlags",null),e([a({value:!1})],Z.prototype,"renderingDisabled",null),e([a({value:!0})],Z.prototype,"visible",null),e([a()],Z.prototype,"renderPatchBorders",null),e([a()],Z.prototype,"wireframe",null),Z=e([l("esri.views.3d.terrain.TerrainRenderer")],Z);const J=_(),K=_(),X=_(),Y=_();export{Z as TerrainRenderer};
2
+ import{__decorate as e}from"tslib";import has from"../../../core/has.js";import{disposeMaybe as t}from"../../../core/maybe.js";import{MemCachePool as r}from"../../../core/MemCachePool.js";import i from"../../../core/ObjectPool.js";import{watch as s,sync as n}from"../../../core/reactiveUtils.js";import{property as a,subclass as l}from"../../../core/accessorSupport/decorators.js";import{subtract as o,set as c,dot as d}from"../../../core/libs/gl-matrix-2/math/vec3.js";import{ZEROS as h,fromValues as u,create as _}from"../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{fromValues as g,ZEROS as f}from"../../../core/libs/gl-matrix-2/factories/vec4f64.js";import{create as p,set as m}from"../../../geometry/support/aaBoundingBox.js";import{BufferViewVec3f as y}from"../../../geometry/support/buffer/BufferView.js";import{overlayRenderOccludedFlag as b}from"./OverlayRenderer.js";import{PatchRenderData as x}from"./PatchRenderData.js";import{TerrainAttributesCache as T}from"./TerrainAttributesCache.js";import{enableTerrainInternalChecks as R}from"./terrainUtils.js";import{TileRenderer as v}from"./TileRenderer.js";import{IteratorPreorder as P,fallsWithinLayerView as w,sortTiles as O,compareTiles as D}from"./tileUtils.js";import{getOverlayContentForOutputTerrain as S}from"../webgl-engine/core/shaderLibrary/terrain/Overlay.glsl.js";import{SyncRenderPlugin as B}from"../webgl-engine/effects/RenderPlugin.js";import{Vertices as E}from"../webgl-engine/lib/Attribute.js";import{IntersectorResultRay as F}from"../webgl-engine/lib/IntersectorResult.js";import{intersectAabbInvDirBefore as j,MeshIntersectionOptions as C,intersectTriangles as q}from"../webgl-engine/lib/RayIntersections.js";import{TriangleIntersectionData as A}from"../webgl-engine/lib/TriangleIntersectionData.js";import{terrainId as M,getVerticalOffsetTerrain as G}from"../webgl-engine/lib/verticalOffsetUtils.js";import{DrawParameters as I}from"../webgl-engine/materials/DrawParameters.js";import{hasShadowHighlights as U}from"../webgl-engine/shaders/ReceiveShadowsConfiguration.js";import{T as k}from"../../../chunks/Terrain.glsl.js";import{TerrainTechnique as N}from"../webgl-engine/shaders/TerrainTechnique.js";import{TerrainTechniqueConfiguration as L}from"../webgl-engine/shaders/TerrainTechniqueConfiguration.js";import{PrimitiveType as V}from"../../webgl/enums.js";const H=7,z=10,Q=200,W=p();let Z=class extends B{get visibleTiles(){return Array.from(this._visiblePatchesByOrigin.values()).flat()}get _isGlobal(){return 1===this._stage.viewingMode}get _techniques(){return this._context.techniques}get _rctx(){return this._context.renderContext.rctx}get renderOccludedFlags(){return this._overlayRenderer.renderOccludedFlags}constructor(e,t,s,n,a){super({}),this._overlayRenderer=e,this._stage=t,this._allTiles=s,this._compressionTracker=n,this.type=7,this.isGround=!0,this._passParameters=new k,this._drawParameters=new I,this._renderDataPool=new i(()=>new x),this._visiblePatchesByOrigin=new Map,this._allPatchesByOrigin=new Map,this._patchesByOriginDirty=!0,this._patchSortingDirty=!0,this._tileIterator=new P,this._castShadows=!1,this._inViewshed=!1,this._cutFillEnabled=!1,this._tileRenderer=null,this._stencilEnabledLayerExtents=new Array,this._numTilesRendered=0,this._numTilesCulled=0,this._numOriginsRendered=0,this.produces=new Map([[1,()=>1===this._desiredSlot],[7,()=>7===this._desiredSlot],[9,()=>this._produces()&&this.renderOccludedFlags===b]]),this._tileSize=256,this._configuration=new L(1===t.viewingMode),this._tileTextureCache=new r((e,t)=>a.newCache(e,t),"TileTexture"),this.tileGeometryCache=new T(a)}normalizeCtorArgs(){return{}}initialize(){this._stage.addRenderPlugin(this),this.addHandles(s(()=>this._overlayRenderer.renderOccludedFlags,()=>this.setNeedsRender(),n))}destroy(){this._stage.removeRenderPlugin(this),this._tileTextureCache.destroy(),this.tileGeometryCache.destroy(),this._allTiles.prune(),this._tileRenderer=null}_produces(){return this.visible&&!!this._rootTiles&&!this.renderingDisabled}set renderingDisabled(e){this._set("renderingDisabled",!!e),this.setDirty()}set visible(e){this._set("visible",!!e),this.setDirty()}updateHeading(e){this._tileRenderer?.updateHeading(e)}set transparency(e){this._configuration.transparencyMode!==e&&(this._configuration.transparencyMode=e,this.setNeedsRender())}get transparency(){return this._configuration.transparencyMode}get renderPatchBorders(){return this._configuration.tileBorders}set renderPatchBorders(e){this._configuration.tileBorders!==e&&(this._configuration.tileBorders=e,this.setNeedsRender(),this.notifyChange("renderPatchBorders"))}get layerViewUid(){return M}get slicePlaneEnabled(){return this._configuration.hasSlicePlane}set slicePlaneEnabled(e){this._configuration.hasSlicePlane!==e&&(this._configuration.hasSlicePlane=e,this.setNeedsRender())}set textureFadingEnabled(e){this._configuration.textureFadingEnabled!==e&&(this._configuration.textureFadingEnabled=e,this.setNeedsRender())}set pbrMode(e){this._configuration.pbrMode!==e&&(this._configuration.pbrMode=e,this.setNeedsRender())}setRootTiles(e){this._rootTiles=e,this.setDirty()}setStencilEnabledLayerExtents(e){this._stencilEnabledLayerExtents=e,this._setSortingDirty()}set tileSize(e){this._tileSize=e,null!=this._tileRenderer&&(this._tileRenderer.tileSize=e),this.setDirty()}get tileSize(){return this._tileSize}_ensureRenderData(e){e.renderData||(e.renderData=this._renderDataPool.acquire(),e.renderData.init(e,this._getLocalOriginOfTile(e)))}loadTile(e){this._ensureRenderData(e),this.updateTileGeometryState(e),this.reuseTextureFromParent(e)||this.updateTileTexture(e,32)}reuseTextureFromParent(e){const{parent:t}=e;if(!this._canReuseTextureFromParent(t,e))return!1;const r=g(1&e.lij[2]?.5:0,1&e.lij[1]?0:.5,.5,.5);return t.renderData?.reuseTexture(e.renderData,r)??!1}_canReuseTextureFromParent(e,t){if(!e)return!1;const{layerInfo:r,surface:i}=t;for(let s=0;s<r[1].length;s++){const r=i.layerViewByIndex(s,1);if(w(e,r)!==w(t,r))return!1}return!0}updateTileTexture(e,t){null!=this._tileRenderer&&(this._tileRenderer.updateTileTexture(e,32===t?0:2),this.setNeedsRender(),e.resetPendingUpdate(t))}updateTileGeometryState(e){for(const r of e.layerInfo[0])r.pendingUpdates&=-9;e.resetPendingUpdate(8);const t=e.renderData.updateGeometryState();return t&&this.setDirty(),t}updateGeometryIfNeeded(e){e.loaded&&e.renderData.updateGeometryIfNeeded(this._rctx)}unloadTile(e){const t=e.renderData;t&&(t.releaseGeometry(),this._renderDataPool.release(t),t.clear(),e.renderData=null,e.setMemoryDirty(),this.setDirty())}_getLocalOriginOfTile(e){const t=z-H,r=Math.max(0,Math.floor((e.level-t)/H)*H);if(this._isGlobal&&0===r)return h;for(;e.parent&&e.level>r;)e=e.parent;return e.centerAtSeaLevel}getStats(){return{numTilesRendered:this._numTilesRendered,numTilesCulled:this._numTilesCulled,numOriginsRendered:this._numOriginsRendered}}set wireframe(e){this._get("wireframe")!==e&&(this._set("wireframe",e),this.setNeedsRender())}setDirty(e=1){this._patchesByOriginDirty=!0,this._context.requestRender(e)}_setSortingDirty(e=1){this._patchSortingDirty=!0,this._context.requestRender(e)}setNeedsRender(e=1){this._context.requestRender(e)}initializeRenderContext(e){this._context=e,this._tileRenderer=new v(this._rctx,this._tileSize,this._techniques,this._tileTextureCache,this._compressionTracker),this.updateTileBackground()}uninitializeRenderContext(){this._tileRenderer=t(this._tileRenderer)}intersectRay(e,t,r,i){const s=this._rootTiles;if(!s||e.options.selectOpaqueTerrainOnly&&e.options.selectionMode&&0!==this.transparency)return;const n=J,a=K;o(n,i,r),c(a,1/n[0],1/n[1],1/n[2]);const l=e.results.min,h=e.results.max,u=e.results.ground,_=0===e.options.store,g=!!e.results.ground.target,f=G(e.verticalOffset),p=e.tolerance;let b,x=_&&null!=l.distance?l.distance:1/0;const T=e.options,R=T.normalRequired||!T.backfacesTerrain,v=new C(p,!1,R),P=s=>{const c=s.renderData;if(!c?.vao)return;const g=c.geometry;m(W,g.boundingBox);const P=c.localOrigin;if(null!=f&&(f.localOrigin=P,f.applyToAabb(W)),X[0]=r[0]-P[0],X[1]=r[1]-P[1],X[2]=r[2]-P[2],!j(W,X,a,p,x))return;const w=(e,t,r,i)=>{e.set(this.type,s,t,r,i),x=_&&null!=l.renderDistance?l.renderDistance:1/0},O=(s,a,o)=>{(!R||null!=o)&&a>=0&&(T.backfacesTerrain||d(o,n)<0)&&(T.invisibleTerrain||!T.selectionMode||null==t||t(r,i,a))&&((null==u.renderDistance||a<u.renderDistance)&&w(u,s,a,o),T.isFiltered||(2===T.store&&(null==b?(b=new F(e.ray),w(b,s,a,o),e.results.all.push(b)):a<b.renderDistance&&w(b,s,a,o)),(null==l.renderDistance||a<l.renderDistance)&&w(l,s,a,o),0!==T.store&&(null==h.renderDistance||a>h.renderDistance)&&w(h,s,a,o)))},D=Y;o(D,i,P);const{indices:S,indexCount:B}=g,C=g.vertexAttributes,M=C.getField("position",y),G=new E(M.typedBuffer,3,C.stride/4),I=B/3;if(!f&&I>Q)c.intersectionData??=new A(S,I,G),c.intersectionData.intersectRay(X,D,v,O);else{q(X,D,0,I,(e,t)=>M.getVec(S[t],e),f,v,O)}},w=this._tileIterator;w.reset(s);const O=e.options.invisibleTerrain;for(let o=w.next();o;o=w.next())!(o.visible||O&&o.intersectsClippingArea)||null==f&&!o.intersectsRay(r,n,p,x)||g&&this._useStencilForTile(o)?w.skipSubtree():P(o)}processScaleRangeQueries(e,t){if(!t.done&&e)for(this._updatePatchGroups();e.updating&&!t.done;){e.prepare();for(const t of this._visiblePatchesByOrigin.values())for(const r of t)null!=r.renderData?.textureReference&&e.queriesForTile(r);e.process(),t.madeProgress()}}get _desiredSlot(){if(!this._produces())return null;switch(this.transparency){case 0:return 1;case 1:case 2:return 7;case 3:case 4:return null}}acquireTechniques(e){const{shadowMap:t,viewshedEnabled:r,cutFillComputationEnabled:i,slot:s,hasEmission:n,useFloatBlend:a}=e.bind,l=!!has("enable-feature:terrain-shadows")&&t.enabled;if(l!==this._castShadows&&(this._castShadows=l,this._patchesByOriginDirty=!0),this._inViewshed!==r&&(this._inViewshed=r,this._patchesByOriginDirty=!0),this._cutFillEnabled!==i&&(this._cutFillEnabled=i,this._patchesByOriginDirty=!0),3===this.transparency)return null;if(9===s){if(0===(e.renderOccludedMask&b))return null}else if(s!==this._desiredSlot)return null;const o=this._configuration;switch(o.screenSpaceReflections=o.cloudReflections=o.receiveShadows=o.hasShadowHighlights=o.receiveAmbientOcclusion=o.renderOccluded=o.hasHighlightMixTexture=!1,o.hasEmission=n,o.overlayMode=this._overlayRenderer.mode,o.useFloatBlend=a.value,e.output){case 0:case 1:case 2:{const r=e.bind;o.screenSpaceReflections=r.hasScreenSpaceReflections,o.cloudReflections=null!=r.clouds.data;const i=9===s;return o.receiveShadows=t.ready&&!i,o.hasShadowHighlights=U(o,e.bind),o.renderOccluded=i,o.receiveAmbientOcclusion=!i&&null!=r.ssao,o.receiveGlobalIllumination=!i&&r.globalIlluminationEnabled,this._acquireTechnique(e.output)}case 5:case 7:return this._castShadows?this._acquireTechnique(5):null;case 8:return this._inViewshed?this._acquireTechnique(8):null;case 9:return this._cutFillEnabled?this._acquireTechnique(9):null;case 3:case 4:case 11:return this._acquireTechnique(e.output);case 10:return o.hasHighlightMixTexture=null!=e.bind.highlightMixTexture,this._overlayRenderer.hasHighlights?this._acquireTechnique(10):null}return null}render(e,t){switch(this._updatePatchGroups(),this._passParameters.useStencil=!1,this._passParameters.overlayContent=S(e.output,e.bind),e.output){case 0:case 1:case 2:return this._renderMaterialPass(e,t);case 3:case 4:case 11:return this._renderAuxiliaryPass(e,t,this._visiblePatchesByOrigin);case 10:{const r=e.bind.highlight?.name;r&&this._overlayRenderer.hasHighlights&&this._overlayRenderer.renders(2)&&this._overlayRenderer.hasHighlight(r)&&this._renderAuxiliaryPass(e,t,this._visiblePatchesByOrigin);break}case 5:case 7:case 8:case 9:return this._renderAuxiliaryPass(e,t,this._allPatchesByOrigin)}}updateTileBackground(e){if(null==this._tileRenderer)return;const t=this._tileRenderer;let r;if(null!=e){const t=e.toUnitRGBA();r=u(t[0]||0,t[1]||0,t[2]||0)}t.setBackground(r),this._allTiles.forAll(e=>t.updateTileTexture(e,0)),this._configuration.tileBlendInput=t.backgroundIsGrid?2:null!=t.backgroundColor?1:0,this.setNeedsRender()}_updatePatchGroups(){if(this._patchesByOriginDirty&&(this._rebuildPatchGroups(),this._patchesByOriginDirty=!1,this._patchSortingDirty=!0),this._patchSortingDirty){const e=Array.from(this._visiblePatchesByOrigin.values()),t=this._stencilEnabledLayerExtents;for(const r of e)O(r,t);e.sort((e,t)=>D(e[0],t[0])),this._visiblePatchesByOrigin=new Map(e.map(e=>[e[0].renderData.localOrigin,e])),this.notifyChange("visibleTiles"),this._patchSortingDirty=!1}}_rebuildPatchGroups(){const e=this._rootTiles;if(null!=e){e[0]?.surface.checkAllTilesWaterproofness("render-patch-groups"),this._visiblePatchesByOrigin.clear(),this._allPatchesByOrigin.clear();for(const t of e)this._rebuildPatchGroupsForRootTile(t)}}_rebuildPatchGroupsForRootTile(e){const t=this._tileIterator;for(t.resetOne(e);!t.done;){const e=t.next(),r=e.renderData;if(!r){this._numTilesCulled++;continue}const i=r.localOrigin;if(this._castShadows||this._inViewshed||this._cutFillEnabled){let t=this._allPatchesByOrigin.get(i);t||(t=[],this._allPatchesByOrigin.set(i,t)),t.push(e)}if(!e.visible){this._numTilesCulled++,t.skipSubtree();continue}let s=this._visiblePatchesByOrigin.get(i);s||(s=[],this._visiblePatchesByOrigin.set(i,s)),s.push(e),t.skipSubtree()}}_useStencilForTile(e){for(const t of this._stencilEnabledLayerExtents)if(e.intersectsExtent(t))return!0;return!1}_renderAuxiliaryPass(e,t,r){const{rctx:i,bind:s}=e;i.bindTechnique(t,s,this._passParameters);const n=this._stencilEnabledLayerExtents.length>0;r.forEach(r=>{this._drawParameters.origin=r[0].renderData.localOrigin,t.program.bindDraw(s,this._passParameters,this._drawParameters);for(let i=0;i<r.length;i++)this._renderPatch(e,t,r[i],V.TRIANGLES,n,null===this._passParameters.overlayContent)}),i.bindVAO(null)}_renderMaterialPass(e,t){const{rctx:r,bind:i}=e,s=r.bindTechnique(t,i,this._passParameters);this._numTilesRendered=0,this._numTilesCulled=0,this._numOriginsRendered=0;const n=9===i.slot;n&&(s.bindTexture("tex",r.emptyTexture),s.setUniform3fv("textureOpacities",h),s.setUniform4fv("texOffsetAndScale",f));const a=null!=this._tileRenderer?.backgroundColor?this._tileRenderer.backgroundColor:h;1===this._configuration.tileBlendInput&&s.setUniform3fv("backgroundColor",a);const l=this._stencilEnabledLayerExtents.length>0,o=this.wireframe?V.LINES:V.TRIANGLES;this._configuration.textureFadingEnabled&&s.bindTexture("texNext",r.emptyTexture);for(const c of this._visiblePatchesByOrigin.values()){this._drawParameters.origin=c[0].renderData.localOrigin,t.program.bindDraw(i,this._passParameters,this._drawParameters),this._numOriginsRendered++;for(const r of c){const i=r.renderData,a=i.textureReference;if(null!=a){if(!n){s.setUniform4fv("texOffsetAndScale",a.offsetAndScale),s.bindTexture("tex",a.texture.texture);const e=i.textureFadeFactor,t=e<1?i.nextTextureReference:null;this._configuration.textureFadingEnabled&&t&&e<1?(s.setUniform1f("fadeFactor",e),s.setUniform4fv("nextTexOffsetAndScale",t.offsetAndScale),s.setUniform3fv("nextTexOpacities",t.opacities),s.bindTexture("texNext",t.texture.texture)):s.setUniform1f("fadeFactor",1),i.textureIsFading&&this.setNeedsRender(2),s.setUniform3fv("textureOpacities",a.opacities)}this._renderPatch(e,t,r,o,l),r.renderOrder=this._numTilesRendered,this._numTilesRendered++}}}r.bindVAO(null)}_renderPatch(e,t,r,i,s,n=!1){const a=r.renderData,l=a.vao,o=l?.indexBuffer;if(!l||null==o)return void(R&&console.error("Rendered tile with no indices: ",r.lij," : ",a));const c=t.program;n||this._overlayRenderer.isEmpty||this._bindOverlayPatchData(c,a.overlay);const{rctx:d,bind:h}=e;s&&(this._passParameters.useStencil=this._useStencilForTile(r),d.setPipelineState(t.getPipeline(h,this._passParameters)));const u=a.geometry.indexCount;d.bindVAO(l),c.assertCompatibleVertexAttributeLocations(l),d.drawElements(i,u,o.indexType,0)}_bindOverlayPatchData(e,t){e.setUniform4fv("overlayTexOffset",t.offsets),e.setUniform4fv("overlayTexScale",t.scales)}_acquireTechnique(e){return this._configuration.output=e,this._techniques.get(N,this._configuration)}get test(){}hasHighlight(e){return this._overlayRenderer.hasHighlight(e)}};e([a({readOnly:!0})],Z.prototype,"visibleTiles",null),e([a({readOnly:!0})],Z.prototype,"_isGlobal",null),e([a()],Z.prototype,"renderOccludedFlags",null),e([a({value:!1})],Z.prototype,"renderingDisabled",null),e([a({value:!0})],Z.prototype,"visible",null),e([a()],Z.prototype,"renderPatchBorders",null),e([a()],Z.prototype,"wireframe",null),Z=e([l("esri.views.3d.terrain.TerrainRenderer")],Z);const J=_(),K=_(),X=_(),Y=_();export{Z as TerrainRenderer};