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

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 (142) hide show
  1. package/README.md +2 -2
  2. package/applications/Urban/meshUtils.d.ts +1 -0
  3. package/applications/Urban/meshUtils.js +1 -1
  4. package/assets/esri/core/workers/RemoteClient.js +1 -1
  5. package/assets/esri/core/workers/chunks/{f3dc0bc0e00635855a7a.js → 03daf6f235c6edef6268.js} +1 -1
  6. package/assets/esri/core/workers/chunks/04a1d08c3b5b1dc7628f.js +1 -0
  7. package/assets/esri/core/workers/chunks/{1eaf8bfdd3765a90ccc2.js → 0523f893870a1546d7d9.js} +1 -1
  8. package/assets/esri/core/workers/chunks/{72d20d3957d612f86431.js → 0a508e25ec05363e1f04.js} +1 -1
  9. package/assets/esri/core/workers/chunks/{84038dd85005fea413eb.js → 139e753d95cfc9470e74.js} +1 -1
  10. package/assets/esri/core/workers/chunks/15950c2fb173b62ee0ec.js +1 -0
  11. package/assets/esri/core/workers/chunks/{418addce122dbb8897b4.js → 1a614bac5db42c6263f8.js} +1 -1
  12. package/assets/esri/core/workers/chunks/{58c3ae6030def2ed5f31.js → 1b17f5f720f6cf3f6d73.js} +1 -1
  13. package/assets/esri/core/workers/chunks/{f9dc38761b314d33890f.js → 1f51567f47c2e2fc8a23.js} +1 -1
  14. package/assets/esri/core/workers/chunks/2211ff0a1f1ae8100231.js +1 -0
  15. package/assets/esri/core/workers/chunks/24ada9511b074dc5ae27.js +1 -0
  16. package/assets/esri/core/workers/chunks/29c610ce1c81ebb84a6b.js +1 -0
  17. package/assets/esri/core/workers/chunks/2b4dd42920d37b1ff0a9.js +2 -0
  18. package/assets/esri/core/workers/chunks/2c8ca43563c4f3e94535.js +1 -0
  19. package/assets/esri/core/workers/chunks/{55a9eaeb152a3abada67.js → 311e4969f19df63451dd.js} +1 -1
  20. package/assets/esri/core/workers/chunks/{8da2a10318f49d0dc73a.js → 31ef7b7074b3e3829763.js} +1 -1
  21. package/assets/esri/core/workers/chunks/{360c944c610efa2051fc.js → 379db67f78161ebd5468.js} +2 -2
  22. package/assets/esri/core/workers/chunks/{b8fd7c3b36981261378b.js → 38df7b1d58c4bcf693d0.js} +1 -1
  23. package/assets/esri/core/workers/chunks/{be55771758e4bcef0976.js → 3e406043a374ee17475b.js} +1 -1
  24. package/assets/esri/core/workers/chunks/46c290108a90518ef695.js +1 -0
  25. package/assets/esri/core/workers/chunks/{a596779eaeec7310671d.js → 478a89317a12e9b4d146.js} +1 -1
  26. package/assets/esri/core/workers/chunks/{fcc3902d6d9eda6f09f5.js → 48b8b57f559a53c6c513.js} +1 -1
  27. package/assets/esri/core/workers/chunks/4f3e0d583cfa9d1d6727.js +2 -0
  28. package/assets/esri/core/workers/chunks/507ecc3692e6d0700958.js +1 -0
  29. package/assets/esri/core/workers/chunks/{bd46a04a9ee4ea9e6ef1.js → 5864bce1498a13ee5b7e.js} +2 -2
  30. package/assets/esri/core/workers/chunks/{f4d91d470ca5fea0bd26.js → 5bd1414220e42cb8ebcf.js} +1 -1
  31. package/assets/esri/core/workers/chunks/5c3aa8386705c5e40358.js +1 -0
  32. package/assets/esri/core/workers/chunks/{176d75e76318bfc25a53.js → 60c8eedd06080edab3e3.js} +1 -1
  33. package/assets/esri/core/workers/chunks/661847f1b7044f21600f.js +1 -0
  34. package/assets/esri/core/workers/chunks/{1a8d8274df292d65f82e.js → 676c8c0329d68f9f3ac4.js} +1 -1
  35. package/assets/esri/core/workers/chunks/{29cc6b1705418b1be5d7.js → 687deb918eb48a963c8f.js} +1 -1
  36. package/assets/esri/core/workers/chunks/{0694c7bcfe71692e2ccf.js → 723df53cfa0189837d01.js} +1 -1
  37. package/assets/esri/core/workers/chunks/7582654a0fc70910731c.js +1 -0
  38. package/assets/esri/core/workers/chunks/{1ee4df0fd61440cb5f02.js → 7810586c35dfe1437516.js} +1 -1
  39. package/assets/esri/core/workers/chunks/8517d96fc8ba7b21d845.js +2 -0
  40. package/assets/esri/core/workers/chunks/90360c0bd053d3e3fd77.js +1 -0
  41. package/assets/esri/core/workers/chunks/9c3de54513bf8619271c.js +1 -0
  42. package/assets/esri/core/workers/chunks/{0e445ec3523de9f2dfa2.js → a107f16cd004626b5018.js} +1 -1
  43. package/assets/esri/core/workers/chunks/{e3b212f8af448ec29eef.js → a1e8209d00809c9520a0.js} +1 -1
  44. package/assets/esri/core/workers/chunks/{46453ebfee17b5421d9d.js → bf62be00f3040f91aaee.js} +1 -1
  45. package/assets/esri/core/workers/chunks/{89dc49e784f7ba3b93ea.js → c034c30e577d620b8e28.js} +1 -1
  46. package/assets/esri/core/workers/chunks/c5bf19da62a3d31009fe.js +2 -0
  47. package/assets/esri/core/workers/chunks/{2226c20c38e20713bcb5.js.LICENSE.txt → c5bf19da62a3d31009fe.js.LICENSE.txt} +1 -1
  48. package/assets/esri/core/workers/chunks/{6bb191b19ce43a27f205.js → caad4f475d6eb01c2850.js} +1 -1
  49. package/assets/esri/core/workers/chunks/cd55cad81accf51d2989.js +1 -0
  50. package/assets/esri/core/workers/chunks/db1f7b2562de495b3401.js +2 -0
  51. package/assets/esri/core/workers/chunks/e0a37d3bcb9a944e53dd.js +1 -0
  52. package/assets/esri/core/workers/chunks/{fe6dcb21570395e46ce8.js → e0a7a75709121a26f255.js} +1 -1
  53. package/assets/esri/core/workers/chunks/{096b2bf1c0d69d27f20c.js → e8e54faf947a582b4cf7.js} +1 -1
  54. package/assets/esri/core/workers/chunks/{636e9c4ac1f9ae98f9d1.js → ea81f9d71b0842a4be26.js} +1 -1
  55. package/assets/esri/core/workers/chunks/{164c8eeefa8232b2b191.js → eaa0e906b46ae4c84d72.js} +2 -2
  56. package/assets/esri/core/workers/chunks/{a504a5e06cb89a620799.js → ec8b7476eac4718eb0ac.js} +1 -1
  57. package/chunks/GlobalIllumination.glsl.js +55 -46
  58. package/chunks/GlobalIlluminationBlur.glsl.js +13 -9
  59. package/chunks/RibbonLine.glsl.js +90 -88
  60. package/config.js +1 -1
  61. package/core/has.js +1 -1
  62. package/core/workers.d.ts +1 -0
  63. package/geometry/support/MeshLocalVertexSpace.d.ts +3 -3
  64. package/geometry/support/aaBoundingRect.js +1 -1
  65. package/geometry/support/meshUtils/convertMeshVertexSpace.js +1 -1
  66. package/geometry/support/meshUtils/vertexSpaceConversion.js +1 -1
  67. package/identity/IdentityManagerBase.js +1 -1
  68. package/kernel.d.ts +3 -3
  69. package/kernel.js +1 -1
  70. package/layers/VoxelWasmPerSceneView.js +1 -1
  71. package/layers/WFSLayer.d.ts +8 -4
  72. package/layers/graphics/sources/WFSSource.js +1 -1
  73. package/layers/graphics/sources/geojson/geojson.js +1 -1
  74. package/layers/mixins/ArcGISMapService.d.ts +17 -0
  75. package/layers/mixins/ArcGISMapService.js +1 -1
  76. package/layers/ogc/wfsUtils.d.ts +7 -2
  77. package/layers/ogc/wfsUtils.js +1 -1
  78. package/layers/ogc/xmlUtils.js +1 -1
  79. package/package.json +4 -4
  80. package/rest/route.d.ts +1 -1
  81. package/rest/support/AreasAndLengthsParameters.d.ts +1 -1
  82. package/rest/support/LengthsParameters.d.ts +1 -1
  83. package/symbols/TextSymbol.d.ts +0 -1
  84. package/views/2d/layers/imagery/BaseImageryTileSubView2D.js +1 -1
  85. package/views/3d/FocusAreasView.js +1 -1
  86. package/views/3d/analysis/AreaMeasurement/support/AreaMeasurementVisualization.js +1 -1
  87. package/views/3d/analysis/DirectLineMeasurement/DirectLineMeasurementVisualization.js +1 -1
  88. package/views/3d/analysis/ElevationProfile/ElevationProfileLineSceneComputation.js +1 -1
  89. package/views/3d/analysis/LineOfSight/LineOfSightController.js +1 -1
  90. package/views/3d/layers/graphics/ElevationAligners.js +1 -1
  91. package/views/3d/layers/graphics/Graphics3DCore.js +1 -1
  92. package/views/3d/layers/graphics/Graphics3DMeshFillSymbolLayer.js +1 -1
  93. package/views/3d/layers/graphics/Graphics3DMeshObject3DGraphicLayer.js +1 -1
  94. package/views/3d/layers/graphics/Graphics3DSymbol.js +1 -1
  95. package/views/3d/layers/graphics/Graphics3DWaterSymbolLayer.js +1 -1
  96. package/views/3d/layers/graphics/Graphics3DWebStyleSymbol.js +1 -1
  97. package/views/3d/layers/graphics/MeshFastUpdateProcessor.js +1 -1
  98. package/views/3d/layers/graphics/polygonUtils.js +1 -1
  99. package/views/3d/state/ScreenSizePerspective.js +1 -1
  100. package/views/3d/state/ViewStateManager.js +1 -1
  101. package/views/3d/state/helpers/SceneIntersectionHelper.js +1 -1
  102. package/views/3d/support/RenderCoordsHelper.js +1 -1
  103. package/views/3d/terrain/TerrainRenderer.js +1 -1
  104. package/views/3d/terrain/TerrainSurface.js +1 -1
  105. package/views/3d/terrain/TileRenderer.js +1 -1
  106. package/views/3d/webgl-engine/lib/ManagedTexture.js +1 -1
  107. package/views/3d/webgl-engine/lib/NavigationDepthCache.js +1 -1
  108. package/views/3d/webgl-engine/lib/Renderer.js +1 -1
  109. package/views/3d/webgl-engine/lib/RibbonLineVertexInfo.js +1 -1
  110. package/views/3d/webgl-engine/materials/RibbonLineMaterial.js +1 -1
  111. package/views/3d/webgl-engine/materials/WaterMaterial.js +1 -1
  112. package/views/SceneView.js +1 -1
  113. package/views/webgl/BufferObject.js +1 -1
  114. package/views/webgl/FramebufferObject.js +1 -1
  115. package/widgets/ElevationProfile/ElevationProfileLineView.js +1 -1
  116. package/widgets/HistogramRangeSlider.d.ts +1 -1
  117. package/assets/esri/core/workers/chunks/0cc7fba402a93e6d2455.js +0 -2
  118. package/assets/esri/core/workers/chunks/131185d26343a997495e.js +0 -1
  119. package/assets/esri/core/workers/chunks/1a3f71c4d97c36050030.js +0 -1
  120. package/assets/esri/core/workers/chunks/2226c20c38e20713bcb5.js +0 -2
  121. package/assets/esri/core/workers/chunks/2981e904ab62f3ed80d0.js +0 -2
  122. package/assets/esri/core/workers/chunks/32cc59e126df8c96a0cf.js +0 -2
  123. package/assets/esri/core/workers/chunks/5bb6c255bdc8aa9ba23e.js +0 -1
  124. package/assets/esri/core/workers/chunks/654f5441227579d2b6b4.js +0 -1
  125. package/assets/esri/core/workers/chunks/7084dd6e10c6c1393e92.js +0 -1
  126. package/assets/esri/core/workers/chunks/7566321c6a2913f2852b.js +0 -1
  127. package/assets/esri/core/workers/chunks/7b5cd150a4d0139850be.js +0 -1
  128. package/assets/esri/core/workers/chunks/7cc9d7a88b64e25fce14.js +0 -1
  129. package/assets/esri/core/workers/chunks/844eedda8f749972f707.js +0 -2
  130. package/assets/esri/core/workers/chunks/87177e0f82e8a6ae3189.js +0 -1
  131. package/assets/esri/core/workers/chunks/9976eaa81085c0d17e14.js +0 -1
  132. package/assets/esri/core/workers/chunks/a2196a49f89d57a0a1c7.js +0 -1
  133. package/assets/esri/core/workers/chunks/aba259a70bee68d2edb7.js +0 -1
  134. package/assets/esri/core/workers/chunks/b9cb92858a576eb6aa06.js +0 -1
  135. package/assets/esri/core/workers/chunks/c33a9635c294c8774977.js +0 -1
  136. package/assets/esri/core/workers/chunks/f39c700f3db7db52b522.js +0 -1
  137. /package/assets/esri/core/workers/chunks/{844eedda8f749972f707.js.LICENSE.txt → 2b4dd42920d37b1ff0a9.js.LICENSE.txt} +0 -0
  138. /package/assets/esri/core/workers/chunks/{32cc59e126df8c96a0cf.js.LICENSE.txt → 4f3e0d583cfa9d1d6727.js.LICENSE.txt} +0 -0
  139. /package/assets/esri/core/workers/chunks/{bd46a04a9ee4ea9e6ef1.js.LICENSE.txt → 5864bce1498a13ee5b7e.js.LICENSE.txt} +0 -0
  140. /package/assets/esri/core/workers/chunks/{0cc7fba402a93e6d2455.js.LICENSE.txt → 8517d96fc8ba7b21d845.js.LICENSE.txt} +0 -0
  141. /package/assets/esri/core/workers/chunks/{2981e904ab62f3ed80d0.js.LICENSE.txt → db1f7b2562de495b3401.js.LICENSE.txt} +0 -0
  142. /package/assets/esri/core/workers/chunks/{164c8eeefa8232b2b191.js.LICENSE.txt → eaa0e906b46ae4c84d72.js.LICENSE.txt} +0 -0
@@ -36,7 +36,7 @@ export default class LengthsParameters extends JSONSupport {
36
36
  accessor geodesic: boolean | null | undefined;
37
37
  /**
38
38
  * The length unit in which perimeters of polygons will be calculated.
39
- * For a list of valid units, see [linear unit codes](https://developers.arcgis.com/android/api-reference/reference/com/esri/arcgisruntime/geometry/LinearUnitId.html).
39
+ * For a list of valid units, see [linear unit codes](https://developers.arcgis.com/java/v200/api-reference/reference/com.esri.arcgisruntime/com/esri/arcgisruntime/geometry/LinearUnitId.html).
40
40
  */
41
41
  accessor lengthUnit: number | string;
42
42
  /**
@@ -218,7 +218,6 @@ export interface TextSymbolProperties extends SymbolProperties, Partial<Pick<Tex
218
218
  * @since 4.0
219
219
  * @see [Symbol Builder](https://developers.arcgis.com/javascript/latest/symbol-builder/)
220
220
  * @see [Sample: Add labels to a FeatureLayer](https://developers.arcgis.com/javascript/latest/sample-code/labels-basic/)
221
- * @see [Using icon fonts with map graphics](https://developers.arcgis.com/javascript/latest/sample-code/styling-icon-fonts/)
222
221
  * @see [TextSymbol3DLayer](https://developers.arcgis.com/javascript/latest/references/core/symbols/TextSymbol3DLayer/)
223
222
  * @see [Labeling Guide](https://developers.arcgis.com/javascript/latest/labeling/)
224
223
  * @example
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import t from"../../../../core/Accessor.js";import n from"../../../../core/Logger.js";import{assertIsSome as r}from"../../../../core/maybe.js";import{debounce as i,isAbortError as a}from"../../../../core/promiseUtils.js";import{property as o,subclass as s}from"../../../../core/accessorSupport/decorators.js";import{UpdatingHandles as c}from"../../../../core/support/UpdatingHandles.js";import l from"../../../../geometry/Extent.js";import u from"../../../../geometry/Point.js";import{isFunctionRaster as d}from"../../../../layers/raster/datasets/datasetUtils.js";import{update as f,unregister as p,getRasterId as m,register as h}from"../../../../layers/raster/datasets/RawBlockCache.js";import{getWorldWidth as g,computeProjectedScales as _}from"../../../../layers/raster/functions/rasterProjectionHelper.js";import{getStretchCutoff as v}from"../../../../layers/raster/functions/stretchUtils.js";import y from"../../../../layers/support/PixelBlock.js";import b from"../../../../layers/support/TileInfo.js";import x from"../../tiling/TileInfoView.js";import"../../tiling/TileKey.js";import S from"../../tiling/TileQueue.js";import C from"../../tiling/TileStrategy.js";import{tileSize as w}from"../../engine/webgl/definitions.js";import{readFromTiledRasterData as T}from"../../../support/rasterHitTestUtils.js";import{TaskPriority as E}from"../../../support/Scheduler.js";import{getWebGLCapabilities as D}from"../../../webgl/capabilities.js";const O=[0,0];function k(e){return e.type!==`geospatial-pdf`}let A=class extends t{constructor(){super(...arguments),this._updatingHandles=new c,this._emptyTilePixelBlock=null,this._tileStrategy=null,this._tileInfoView=null,this._fetchQueue=null,this._blockCacheRegistryUrl=null,this._blockCacheRegistryId=null,this._srcResolutions=[],this.previousLOD=null,this._needBlockCacheUpdate=!1,this._globalSymbolizerParams=null,this._symbolizerParams=null,this._abortController=null,this._isCustomTilingScheme=!1,this._maxIndexedColormapSize=0,this._rasterFunctionState=`na`,this._globalUpdateRequested=!1,this.attached=!1,this.timeExtent=null,this.refreshDRAFunctionOnce=i(async()=>{let{fullExtent:e,view:t}=this.layerView;if(e?.intersects(t.extent))try{await this._updateDRAStatistics(this._abortController?.signal)&&await this.doRefresh()}catch{}}),this.redrawOrRefetch=i(async(e={})=>{if(!(`rasterFunction`in this.layer))return this._updatingHandles.addPromise(e.refetch?this.doRefresh():this._redrawImage(e.signal));let t=this._rasterFunctionState,n=e.reprocess||t===`gpu`&&!this.canUseWebGLForProcessing||t===`cpu`&&this.canUseWebGLForProcessing;if(n&&(await this._updatingHandles.addPromise(this.layer.updateRasterFunction()),this.updateRasterFunctionParameters()),!this.previousLOD||this.layerView.suspended)return;let r=this._rasterFunctionState,{type:i}=this;return e.refetch||i!==`raster`&&n||r===`cpu`||t===`cpu`?this._updatingHandles.addPromise(this.doRefresh()):this._updatingHandles.addPromise(this._redrawImage(e.signal))})}destroy(){this._updatingHandles.destroy()}get canUseWebGLForProcessing(){return!1}get canUseLocalSymbolizerParams(){return(this.canUseWebGLForProcessing||this.type===`rasterVF`)&&!this.layerView.hasTilingEffects}get hasDRAInRasterFunction(){if(!(`rasterFunction`in this.layer))return!1;let{rasterFunction:e}=this.layer;return e?JSON.stringify(e,null,0).includes(`"dra":true`):!1}get isCPUBasedDRA(){if(!(`renderer`in this.layer))return!1;let{renderer:e}=this.layer;return e?.type===`raster-stretch`&&e.dynamicRangeAdjustment&&(!this.canUseWebGLForProcessing||e.stretchType!==`min-max`&&e.stretchType!==`standard-deviation`)}get useWebGLForProcessing(){return this._get(`useWebGLForProcessing`)??!0}set useWebGLForProcessing(e){this._set(`useWebGLForProcessing`,e)}get useProgressiveUpdate(){return this._get(`useProgressiveUpdate`)??!0}set useProgressiveUpdate(e){if(this._tileStrategy&&this.useProgressiveUpdate!==e){this._tileStrategy.destroy(),this.container.removeAllChildren();let t=this._getCacheSize(e);this._tileStrategy=new C({cachePolicy:`purge`,acquireTile:e=>this.acquireTile(e),releaseTile:e=>this.releaseTile(e),cacheSize:t,tileInfoView:this._tileInfoView}),this._set(`useProgressiveUpdate`,e),this.layerView.requestUpdate()}}update(e){this._fetchQueue.pause(),this._fetchQueue.state=e.state,this._tileStrategy.update(e),this._fetchQueue.resume();let{extent:t,resolution:n,scale:r}=e.state,i=this._tileInfoView.getClosestInfoForScale(r);if(this.layer.raster){if(!this.useProgressiveUpdate||this._needBlockCacheUpdate){let e=this._srcResolutions[i.level],r=`toJSON`in t?t:l.fromJSON(t);f(this._blockCacheRegistryUrl,this._blockCacheRegistryId,r,n,e,this.layer.raster.ioConfig.sampling)}this._needBlockCacheUpdate=!1,this.previousLOD?.level!==i.level&&(this.previousLOD=i,this._symbolizerParams!=null&&this.canUseLocalSymbolizerParams&&this._updateSymbolizerParams(),this._tileStrategy.updateCacheSize(0))}}moveEnd(){(this.isCPUBasedDRA||this.hasDRAInRasterFunction||!this.useProgressiveUpdate)&&(this._abortController&&this._abortController.abort(),this._abortController=new AbortController,this._fetchQueue.length===0&&(this.hasDRAInRasterFunction?(this._globalUpdateRequested=!1,this.refreshDRAFunctionOnce()):this.isCPUBasedDRA&&this._redrawImage(this._abortController.signal).then(()=>{this._globalUpdateRequested=!1,this.layerView.requestUpdate()})));let e=this._getCacheSize(this.useProgressiveUpdate);this._tileStrategy.updateCacheSize(e),this.layerView.requestUpdate()}get updating(){return this._globalUpdateRequested||this._updatingHandles?.updating}attach(){let e=D();this._maxIndexedColormapSize=(e.maxTextureSize||4096)*4,this._initializeTileInfo(),this._tileInfoView=new x(this.layerView.tileInfo,this.layerView.fullExtent);let t=this._computeFetchConcurrency();this._fetchQueue=new S({tileInfoView:this._tileInfoView,concurrency:t,process:(e,t)=>this._fetchTile(e,t),priority:E.MAPVIEW_FETCH_QUEUE,scheduler:this.scheduler});let n=this._getCacheSize(this.useProgressiveUpdate);this._tileStrategy=new C({cachePolicy:`purge`,acquireTile:e=>this.acquireTile(e),releaseTile:e=>this.releaseTile(e),cacheSize:n,tileInfoView:this._tileInfoView}),this._updateBlockCacheRegistry()}detach(){this._tileStrategy.destroy(),this._fetchQueue.clear(),this.container.removeAllChildren(),this._fetchQueue=this._tileStrategy=this._tileInfoView=null,p(this._blockCacheRegistryUrl,this._blockCacheRegistryId),this._blockCacheRegistryUrl=this._blockCacheRegistryId=null}async hitTest(e){if(!k(this.layer))return null;let t=this._locateSourceData(e);if(!t)return null;let{layer:n}=this,r=n.renderer?.type===`vector-field`,i=this.canUseWebGLForProcessing&&d(this.layer.raster);return T({mapPoint:e,layer:n,sourceData:t,processRasterFunction:i,sourceIsUV:r})}acquireTile(e){let t=this.container.createTile(e);return this._updatingHandles.consumePromise(this._enqueueTileFetch(t)),this.layerView.requestUpdate(),this._needBlockCacheUpdate=!0,this._globalUpdateRequested=this.isCPUBasedDRA||this.hasDRAInRasterFunction||!this.useProgressiveUpdate,t}releaseTile(e){this._fetchQueue.abort(e.key.id),this.container.removeChild(e),e.once(`detach`,()=>{e.destroy(),this.layerView.requestUpdate()}),this.layerView.requestUpdate()}createEmptyTilePixelBlock(e=null){let t=e==null||e.join(`,`)===this._tileInfoView.size.join(`,`);if(t&&this._emptyTilePixelBlock!=null)return this._emptyTilePixelBlock;e||=this._tileInfoView.size;let[n,r]=e,i=new y({width:n,height:r,pixels:[new Uint8Array(n*r)],mask:new Uint8Array(n*r),pixelType:`u8`});return t&&(this._emptyTilePixelBlock=i),i}_getBandIds(){if(!(`bandIds`in this.layer))return this.layer.getRawDisplayBandIds();if(this.container&&!(`rasterFunctionChain`in this.container&&this.container.rasterFunctionChain))return this.layer.bandIds;let{bandIds:e,raster:t}=this.layer,n=`rasterFunction`in t?t.rasterFunction.rawInputBandIds:null;return!e?.length||!n?.length||t.rasterInfo.bandCount===1?`rasterFunction`in t?n:e:e.map(e=>n[Math.min(e,n.length-1)])}updateRasterFunctionParameters(){}_fetchTile(e,t){let n=this._getFetchOptions(e.level,t.signal);return this.fetchTile(e,n)}_getFetchOptions(e,t){let{canUseWebGLForProcessing:n}=this,{layerView:r}=this,{tileInfo:i}=r,a=!i.isWrappable&&g(r.view.spatialReference)!=null,o=n&&this.layer.raster.hasUniqueSourceStorageInfo,{layer:s}=this.layerView,c=s.serviceRasterInfo?.storageInfo.isBsqTile?s.getRawDisplayBandIds():void 0;return{allowPartialFill:!0,datumTransformation:r.datumTransformation,interpolation:n?`nearest`:`interpolation`in this.layer?this.layer.interpolation:`bilinear`,registryId:this._blockCacheRegistryId,requestRawData:o,skipRasterFunction:this.type===`raster`&&this.container.rasterFunctionChain!=null,signal:t,srcResolution:this._srcResolutions[e],timeExtent:r.timeExtent,tileInfo:i,bandIds:c,disableWrapAround:a}}_getCacheSize(e){return e?40:0}_initializeTileInfo(){let{layerView:e}=this,t=e.view.spatialReference;if(this._canUseLayerLODs()){let{origin:n,lods:r}=this.layer.tileInfo,i=r.map(({scale:e})=>e),a=b.create({spatialReference:t,size:w,scales:i,origin:n});e.set(`tileInfo`,a),this._srcResolutions=r.map(({resolution:e})=>({x:e,y:e}));return}let{scales:n,srcResolutions:i,isCustomTilingScheme:a}=_(this.layer.serviceRasterInfo,t,{tileSize:w,alignGlobalDatasetWithAGOL:!0,limitToSrcResolution:!1}),o=b.create({spatialReference:t,size:w,scales:n}),s=o.origin.x===0;r(e.fullExtent);let{xmin:c,ymax:l}=e.fullExtent;(s||a&&o.origin.x>c)&&(o.origin=new u({x:c,y:l,spatialReference:t})),this._isCustomTilingScheme=a,e.set(`tileInfo`,o),this._srcResolutions=i??[]}_canUseLayerLODs(){let{layer:e,layerView:t}=this;if(e.raster.tileType!==`Map`)return!1;let{lods:n}=e.tileInfo,r=t.view.constraints?.effectiveLODs;return r?.length===n.length&&r.every(({scale:e},t)=>Math.abs(e-n[t].scale)<.001)}_computeFetchConcurrency(){let{blockBoundary:e}=this.layer.serviceRasterInfo.storageInfo,t=e[e.length-1];return(t.maxCol-t.minCol+1)*(t.maxRow-t.minRow+1)>64?2:10}async _enqueueTileFetch(e,t){if(!this._fetchQueue.has(e.key.id)){try{let t=e.once(`detach`,()=>t=void 0),r=await this._fetchQueue.push(e.key),i=this._getBandIds(),o=this.hasDRAInRasterFunction&&d(this.layer.raster)&&!this.layer.raster.processParameters?.stretchCutoff,s=!this.useProgressiveUpdate||o||this.isCPUBasedDRA&&!this._globalSymbolizerParams,c=this._globalUpdateRequested&&!this.layerView.moving&&this._fetchQueue.length===0;if(c){if(s=!1,!this.hasDRAInRasterFunction)try{await this._redrawImage(this._abortController?.signal)}catch(e){a(e)&&n.getLogger(this).error(e)}this._globalUpdateRequested=!1}if(!t)return;this.canUseLocalSymbolizerParams&&this._symbolizerParams==null&&this._updateSymbolizerParams();let l=this._tileInfoView.getTileCoords(O,e.key),u=this._tileInfoView.getTileResolution(e.key);await this.updateTileSource(e,{source:r,symbolizerParams:this._symbolizerParams,globalSymbolizerParams:this._globalSymbolizerParams,suspended:s,bandIds:i,coords:l,resolution:u}),t&&(e.once(`attach`,()=>this.layerView.requestUpdate()),this.container.addChild(e),t.remove()),c&&this.hasDRAInRasterFunction&&d(this.layer.raster)&&!this.layer.raster.processParameters?.extent?.equals(this.layerView.view.extent)&&this.refreshDRAFunctionOnce()}catch(e){a(e)||n.getLogger(this).error(e)}this.layerView.requestUpdate()}}async _updateDRAStatistics(e){if(!k(this.layer)||!d(this.layer.raster))return!1;let t=await this.layer.getDynamicRangeInputRaster();if(!t)return!1;let{raster:n,functionArguments:r}=t,i=this._getFetchOptions(this.previousLOD.level,e),{extent:a,width:o,height:s}=this.layerView.view,{pixelBlock:c}=await n.fetchPixels(a,o,s,{...i,interpolation:`nearest`,requestRawData:!1,skipRasterFunction:!1}),l=v(r,{rasterInfo:n.rasterInfo,pixelBlock:c});return this.layer.raster.processParameters={stretchCutoff:l,extent:a},!0}_locateSourceData(e){if(!this.layer.loaded||!this.attached)return null;let t=new Map,n=this.container.children.find(n=>{if(!n.visible||!(`bitmap`in n?n.bitmap?.rawPixelData:n.tileData?.rawPixelData)?.pixelBlock)return!1;let{key:r}=n,{level:i}=r;if(!t.has(i)){let n=this._tileInfoView.getLODInfoAt(i);if(!n)return!1;let r=Math.floor(n.getColumnForX(e.x)),a=Math.floor(n.getRowForY(e.y));t.set(i,[a,r])}let[a,o]=t.get(i);return a===r.row&&o===r.col});if(n==null)return null;if(`tileData`in n){let{rawPixelData:e}=n.tileData;return e?.pixelBlock?{rawPixelData:e,tileSize:{width:n.width,height:n.height}}:null}let{rawPixelData:r,transformGrid:i,width:a,height:o}=n.bitmap;return r?.pixelBlock?{rawPixelData:r,transformGrid:i,tileSize:{width:a,height:o}}:null}async _redrawImage(e){if(!this.attached||this.container.children.length===0||(`updateRenderer`in this.layer&&await this.layer.updateRenderer(),this.isCPUBasedDRA?await this._updateGlobalSymbolizerParams(e):(this.canUseLocalSymbolizerParams&&this._updateSymbolizerParams(),this._globalSymbolizerParams=null),!this.attached||e?.aborted))return;let t=this.container.children.map(async t=>this.updateTileSymbolizerParameters(t,{local:this._symbolizerParams,global:this._globalSymbolizerParams},e));await Promise.allSettled(t),this.attached&&!e?.aborted&&this.container.requestRender()}async _updateGlobalSymbolizerParams(e){let{fullExtent:t,view:n}=this.layerView;if(!t?.intersects(n.extent)||!(`symbolizer`in this.layer))return;let r=this._getFetchOptions(this.previousLOD.level,e),i=await this.layer.fetchPixels(n.extent,n.width,n.height,{...r,interpolation:`nearest`,requestRawData:!1,skipRasterFunction:!1});if(!i?.pixelBlock)return;let{resolution:a}=this.previousLOD,{isBsqTile:o}=this.layer.raster.rasterInfo.storageInfo,s=o?null:this._getBandIds(),c=this.layer.symbolizer.generateWebGLParameters({pixelBlock:i.pixelBlock.extractBands(s),isGCS:n.spatialReference.isGeographic,resolution:{x:a,y:a},bandIds:s});!this.canUseWebGLForProcessing&&c&&c.type===`stretch`&&this.layer.renderer?.type===`raster-stretch`&&(c.factor=c.factor.map(e=>e*255),c.minOutput=Math.round(c.minOutput*255),c.maxOutput=Math.round(c.maxOutput*255)),this._globalSymbolizerParams=c}_updateSymbolizerParams(){if(!(`symbolizer`in this.layer))return;let{resolution:e}=this.previousLOD,t=this._getBandIds();this._symbolizerParams=this.layer.symbolizer.generateWebGLParameters({pixelBlock:null,isGCS:this.layerView.view.spatialReference.isGeographic,resolution:{x:e,y:e},bandIds:t})}_updateBlockCacheRegistry(e=!1){let{layer:t,layerView:n}=this,{raster:r}=t,i=null,a=null,o=r;if(`multidimensionalDefinition`in t){let{multidimensionalDefinition:e}=t.normalizeRasterFetchOptions({multidimensionalDefinition:t.multidimensionalDefinition,timeExtent:n.timeExtent});i=r.rasterInfo.multidimensionalInfo?r.getSliceIndex(e)??null:null,a=r.rasterInfo.storageInfo.isBsqTile?t.getRawDisplayBandIds():null,o=d(r)?r.primaryRasters.rasters[0]??r:r}let s=m(o.rasterId,i,a);if(s!==this._blockCacheRegistryUrl){this._blockCacheRegistryUrl!=null&&p(this._blockCacheRegistryUrl,this._blockCacheRegistryId);let t=o.rawBlockRegistryIds.indexOf(this._blockCacheRegistryId);if(t>-1&&o.rawBlockRegistryIds.splice(t,1),this._blockCacheRegistryId=h(s,o.rasterInfo),o.rawBlockRegistryIds.push(this._blockCacheRegistryId),e){let{view:e}=n,t=this._tileInfoView.getClosestInfoForScale(e.scale),i=this._srcResolutions[t.level];f(s,this._blockCacheRegistryId,e.extent,e.resolution,i,r.ioConfig.sampling)}this._blockCacheRegistryUrl=s}}async doRefresh(){if(!this.attached||!this.previousLOD||this.layerView.suspended)return;`updateRenderer`in this.layer&&await this._updatingHandles.addPromise(this.layer.updateRenderer()),this.canUseLocalSymbolizerParams&&this._updateSymbolizerParams(),this._updateBlockCacheRegistry(!0),this._fetchQueue.reset();let e=[];this._globalUpdateRequested=this.isCPUBasedDRA||this.hasDRAInRasterFunction||!this.useProgressiveUpdate,this._tileStrategy.refresh(t=>e.push(this._enqueueTileFetch(t))),await this._updatingHandles.addPromise(Promise.allSettled(e))}};e([o()],A.prototype,`_globalUpdateRequested`,void 0),e([o()],A.prototype,`attached`,void 0),e([o()],A.prototype,`canUseWebGLForProcessing`,null),e([o()],A.prototype,`canUseLocalSymbolizerParams`,null),e([o()],A.prototype,`hasDRAInRasterFunction`,null),e([o()],A.prototype,`isCPUBasedDRA`,null),e([o()],A.prototype,`container`,void 0),e([o()],A.prototype,`layer`,void 0),e([o()],A.prototype,`layerView`,void 0),e([o()],A.prototype,`scheduler`,void 0),e([o()],A.prototype,`type`,void 0),e([o()],A.prototype,`useWebGLForProcessing`,null),e([o()],A.prototype,`useProgressiveUpdate`,null),e([o()],A.prototype,`timeExtent`,void 0),e([o()],A.prototype,`updating`,null),A=e([s(`esri.views.2d.layers.imagery.BaseImageryTileSubView2D`)],A);export{A as BaseImageryTileSubView2D};
2
+ import{__decorate as e}from"tslib";import t from"../../../../core/Accessor.js";import n from"../../../../core/Logger.js";import{assertIsSome as r}from"../../../../core/maybe.js";import{debounce as i,isAbortError as a}from"../../../../core/promiseUtils.js";import{property as o,subclass as s}from"../../../../core/accessorSupport/decorators.js";import{UpdatingHandles as c}from"../../../../core/support/UpdatingHandles.js";import l from"../../../../geometry/Extent.js";import u from"../../../../geometry/Point.js";import{isFunctionRaster as d}from"../../../../layers/raster/datasets/datasetUtils.js";import{update as f,unregister as p,getRasterId as m,register as h}from"../../../../layers/raster/datasets/RawBlockCache.js";import{getWorldWidth as g,computeProjectedScales as _}from"../../../../layers/raster/functions/rasterProjectionHelper.js";import{getStretchCutoff as v}from"../../../../layers/raster/functions/stretchUtils.js";import y from"../../../../layers/support/PixelBlock.js";import b from"../../../../layers/support/TileInfo.js";import x from"../../tiling/TileInfoView.js";import"../../tiling/TileKey.js";import S from"../../tiling/TileQueue.js";import C from"../../tiling/TileStrategy.js";import{tileSize as w}from"../../engine/webgl/definitions.js";import{readFromTiledRasterData as T}from"../../../support/rasterHitTestUtils.js";import{TaskPriority as E}from"../../../support/Scheduler.js";import{getWebGLCapabilities as D}from"../../../webgl/capabilities.js";const O=[0,0];function k(e){return e.type!==`geospatial-pdf`}let A=class extends t{constructor(){super(...arguments),this._updatingHandles=new c,this._emptyTilePixelBlock=null,this._tileStrategy=null,this._tileInfoView=null,this._fetchQueue=null,this._pendingTileUpdates=0,this._blockCacheRegistryUrl=null,this._blockCacheRegistryId=null,this._srcResolutions=[],this.previousLOD=null,this._needBlockCacheUpdate=!1,this._globalSymbolizerParams=null,this._symbolizerParams=null,this._abortController=null,this._isCustomTilingScheme=!1,this._maxIndexedColormapSize=0,this._rasterFunctionState=`na`,this._globalUpdateRequested=!1,this.attached=!1,this.timeExtent=null,this.refreshDRAFunctionOnce=i(async()=>{let{fullExtent:e,view:t}=this.layerView;if(e?.intersects(t.extent))try{await this._updateDRAStatistics(this._abortController?.signal)&&await this.doRefresh()}catch{}}),this.redrawOrRefetch=i(async(e={})=>{if(!(`rasterFunction`in this.layer))return this._updatingHandles.addPromise(e.refetch?this.doRefresh():this._redrawImage(e.signal));let t=this._rasterFunctionState,n=e.reprocess||t===`gpu`&&!this.canUseWebGLForProcessing||t===`cpu`&&this.canUseWebGLForProcessing;if(n&&(await this._updatingHandles.addPromise(this.layer.updateRasterFunction()),this.updateRasterFunctionParameters()),!this.previousLOD||this.layerView.suspended)return;let r=this._rasterFunctionState,{type:i}=this;return e.refetch||i!==`raster`&&n||r===`cpu`||t===`cpu`?this._updatingHandles.addPromise(this.doRefresh()):this._updatingHandles.addPromise(this._redrawImage(e.signal))})}destroy(){this._updatingHandles.destroy()}get canUseWebGLForProcessing(){return!1}get canUseLocalSymbolizerParams(){return(this.canUseWebGLForProcessing||this.type===`rasterVF`)&&!this.layerView.hasTilingEffects}get hasDRAInRasterFunction(){if(!(`rasterFunction`in this.layer))return!1;let{rasterFunction:e}=this.layer;return e?JSON.stringify(e,null,0).includes(`"dra":true`):!1}get isCPUBasedDRA(){if(!(`renderer`in this.layer))return!1;let{renderer:e}=this.layer;return e?.type===`raster-stretch`&&e.dynamicRangeAdjustment&&(!this.canUseWebGLForProcessing||e.stretchType!==`min-max`&&e.stretchType!==`standard-deviation`)}get useWebGLForProcessing(){return this._get(`useWebGLForProcessing`)??!0}set useWebGLForProcessing(e){this._set(`useWebGLForProcessing`,e)}get useProgressiveUpdate(){return this._get(`useProgressiveUpdate`)??!0}set useProgressiveUpdate(e){if(this._tileStrategy&&this.useProgressiveUpdate!==e){this._tileStrategy.destroy(),this.container.removeAllChildren();let t=this._getCacheSize(e);this._tileStrategy=new C({cachePolicy:`purge`,acquireTile:e=>this.acquireTile(e),releaseTile:e=>this.releaseTile(e),cacheSize:t,tileInfoView:this._tileInfoView}),this._set(`useProgressiveUpdate`,e),this.layerView.requestUpdate()}}update(e){this._fetchQueue.pause(),this._fetchQueue.state=e.state,this._tileStrategy.update(e),this._fetchQueue.resume();let{extent:t,resolution:n,scale:r}=e.state,i=this._tileInfoView.getClosestInfoForScale(r);if(this.layer.raster){if(!this.useProgressiveUpdate||this._needBlockCacheUpdate){let e=this._srcResolutions[i.level],r=`toJSON`in t?t:l.fromJSON(t);f(this._blockCacheRegistryUrl,this._blockCacheRegistryId,r,n,e,this.layer.raster.ioConfig.sampling)}this._needBlockCacheUpdate=!1,this.previousLOD?.level!==i.level&&(this.previousLOD=i,this._symbolizerParams!=null&&this.canUseLocalSymbolizerParams&&this._updateSymbolizerParams(),this._tileStrategy.updateCacheSize(0))}}moveEnd(){(this.isCPUBasedDRA||this.hasDRAInRasterFunction||!this.useProgressiveUpdate)&&(this._abortController&&this._abortController.abort(),this._abortController=new AbortController,(this.isCPUBasedDRA||this.hasDRAInRasterFunction||!this.useProgressiveUpdate)&&this._canCompleteGlobalUpdate()&&this._updatingHandles.consumePromise(this._completeGlobalUpdate()));let e=this._getCacheSize(this.useProgressiveUpdate);this._tileStrategy.updateCacheSize(e),this.layerView.requestUpdate()}get updating(){return this._globalUpdateRequested||this._updatingHandles?.updating}attach(){let e=D();this._maxIndexedColormapSize=(e.maxTextureSize||4096)*4,this._initializeTileInfo(),this._tileInfoView=new x(this.layerView.tileInfo,this.layerView.fullExtent);let t=this._computeFetchConcurrency();this._fetchQueue=new S({tileInfoView:this._tileInfoView,concurrency:t,process:(e,t)=>this._fetchTile(e,t),priority:E.MAPVIEW_FETCH_QUEUE,scheduler:this.scheduler});let n=this._getCacheSize(this.useProgressiveUpdate);this._tileStrategy=new C({cachePolicy:`purge`,acquireTile:e=>this.acquireTile(e),releaseTile:e=>this.releaseTile(e),cacheSize:n,tileInfoView:this._tileInfoView}),this._updateBlockCacheRegistry()}detach(){this._tileStrategy.destroy(),this._fetchQueue.clear(),this.container.removeAllChildren(),this._fetchQueue=this._tileStrategy=this._tileInfoView=null,p(this._blockCacheRegistryUrl,this._blockCacheRegistryId),this._blockCacheRegistryUrl=this._blockCacheRegistryId=null}async hitTest(e){if(!k(this.layer))return null;let t=this._locateSourceData(e);if(!t)return null;let{layer:n}=this,r=n.renderer?.type===`vector-field`,i=this.canUseWebGLForProcessing&&d(this.layer.raster);return T({mapPoint:e,layer:n,sourceData:t,processRasterFunction:i,sourceIsUV:r})}acquireTile(e){let t=this.container.createTile(e);return this._updatingHandles.consumePromise(this._enqueueTileFetch(t)),this.layerView.requestUpdate(),this._needBlockCacheUpdate=!0,this._globalUpdateRequested=this.isCPUBasedDRA||this.hasDRAInRasterFunction||!this.useProgressiveUpdate,t}releaseTile(e){this._fetchQueue.abort(e.key.id),this.container.removeChild(e),e.once(`detach`,()=>{e.destroy(),this.layerView.requestUpdate()}),this.layerView.requestUpdate()}createEmptyTilePixelBlock(e=null){let t=e==null||e.join(`,`)===this._tileInfoView.size.join(`,`);if(t&&this._emptyTilePixelBlock!=null)return this._emptyTilePixelBlock;e||=this._tileInfoView.size;let[n,r]=e,i=new y({width:n,height:r,pixels:[new Uint8Array(n*r)],mask:new Uint8Array(n*r),pixelType:`u8`});return t&&(this._emptyTilePixelBlock=i),i}_getBandIds(){if(!(`bandIds`in this.layer))return this.layer.getRawDisplayBandIds();if(this.container&&!(`rasterFunctionChain`in this.container&&this.container.rasterFunctionChain))return this.layer.bandIds;let{bandIds:e,raster:t}=this.layer,n=`rasterFunction`in t?t.rasterFunction.rawInputBandIds:null;return!e?.length||!n?.length||t.rasterInfo.bandCount===1?`rasterFunction`in t?n:e:e.map(e=>n[Math.min(e,n.length-1)])}updateRasterFunctionParameters(){}_fetchTile(e,t){let n=this._getFetchOptions(e.level,t.signal);return this.fetchTile(e,n)}_getFetchOptions(e,t){let{canUseWebGLForProcessing:n}=this,{layerView:r}=this,{tileInfo:i}=r,a=!i.isWrappable&&g(r.view.spatialReference)!=null,o=n&&this.layer.raster.hasUniqueSourceStorageInfo,{layer:s}=this.layerView,c=s.serviceRasterInfo?.storageInfo.isBsqTile?s.getRawDisplayBandIds():void 0;return{allowPartialFill:!0,datumTransformation:r.datumTransformation,interpolation:n?`nearest`:`interpolation`in this.layer?this.layer.interpolation:`bilinear`,registryId:this._blockCacheRegistryId,requestRawData:o,skipRasterFunction:this.type===`raster`&&this.container.rasterFunctionChain!=null,signal:t,srcResolution:this._srcResolutions[e],timeExtent:r.timeExtent,tileInfo:i,bandIds:c,disableWrapAround:a}}_getCacheSize(e){return e?40:0}_initializeTileInfo(){let{layerView:e}=this,t=e.view.spatialReference;if(this._canUseLayerLODs()){let{origin:n,lods:r}=this.layer.tileInfo,i=r.map(({scale:e})=>e),a=b.create({spatialReference:t,size:w,scales:i,origin:n});e.set(`tileInfo`,a),this._srcResolutions=r.map(({resolution:e})=>({x:e,y:e}));return}let{scales:n,srcResolutions:i,isCustomTilingScheme:a}=_(this.layer.serviceRasterInfo,t,{tileSize:w,alignGlobalDatasetWithAGOL:!0,limitToSrcResolution:!1}),o=b.create({spatialReference:t,size:w,scales:n}),s=o.origin.x===0;r(e.fullExtent);let{xmin:c,ymax:l}=e.fullExtent;(s||a&&o.origin.x>c)&&(o.origin=new u({x:c,y:l,spatialReference:t})),this._isCustomTilingScheme=a,e.set(`tileInfo`,o),this._srcResolutions=i??[]}_canUseLayerLODs(){let{layer:e,layerView:t}=this;if(e.raster.tileType!==`Map`)return!1;let{lods:n}=e.tileInfo,r=t.view.constraints?.effectiveLODs;return r?.length===n.length&&r.every(({scale:e},t)=>Math.abs(e-n[t].scale)<.001)}_computeFetchConcurrency(){let{blockBoundary:e}=this.layer.serviceRasterInfo.storageInfo,t=e[e.length-1];return(t.maxCol-t.minCol+1)*(t.maxRow-t.minRow+1)>64?2:10}async _enqueueTileFetch(e,t){if(!this._fetchQueue.has(e.key.id)){this._pendingTileUpdates++;try{let t=e.once(`detach`,()=>t=void 0),n=await this._fetchQueue.push(e.key),r=this._getBandIds(),i=this.hasDRAInRasterFunction&&d(this.layer.raster)&&!this.layer.raster.processParameters?.stretchCutoff,a=!this.useProgressiveUpdate||i||this.isCPUBasedDRA&&!this._globalSymbolizerParams;if(!t)return;this.canUseLocalSymbolizerParams&&this._symbolizerParams==null&&this._updateSymbolizerParams();let o=this._tileInfoView.getTileCoords(O,e.key),s=this._tileInfoView.getTileResolution(e.key);await this.updateTileSource(e,{source:n,symbolizerParams:this._symbolizerParams,globalSymbolizerParams:this._globalSymbolizerParams,suspended:a,bandIds:r,coords:o,resolution:s}),t&&(e.once(`attach`,()=>this.layerView.requestUpdate()),this.container.addChild(e),t.remove())}catch(e){a(e)||n.getLogger(this).error(e)}finally{this._pendingTileUpdates--,this._globalUpdateRequested&&this._canCompleteGlobalUpdate()&&await this._completeGlobalUpdate()}this.layerView.requestUpdate()}}_canCompleteGlobalUpdate(){return this.attached&&!this.layerView.moving&&this._fetchQueue.length===0&&this._pendingTileUpdates===0}async _completeGlobalUpdate(){try{let{layer:e,layerView:t}=this;this._globalUpdateRequested=!1,this.hasDRAInRasterFunction&&d(e.raster)&&!e.raster.processParameters?.extent?.equals(t.view.extent)?this._updatingHandles.consumePromise(this.refreshDRAFunctionOnce()):this.isCPUBasedDRA?await this._updatingHandles.addPromise(this._redrawImage(this._abortController?.signal)):this._completeNonProgressiveUpdate()}catch(e){a(e)||n.getLogger(this).error(e)}finally{this.layerView.requestUpdate()}}_completeNonProgressiveUpdate(){if(!this.useProgressiveUpdate){for(let e of this.container.children)`bitmap`in e&&(e.bitmap.suspended=!1);this.container.requestRender()}}async _updateDRAStatistics(e){if(!k(this.layer)||!d(this.layer.raster))return!1;let t=await this.layer.getDynamicRangeInputRaster();if(!t)return!1;let{raster:n,functionArguments:r}=t,i=this._getFetchOptions(this.previousLOD.level,e),{extent:a,width:o,height:s}=this.layerView.view,{pixelBlock:c}=await n.fetchPixels(a,o,s,{...i,interpolation:`nearest`,requestRawData:!1,skipRasterFunction:!1}),l=v(r,{rasterInfo:n.rasterInfo,pixelBlock:c});return this.layer.raster.processParameters={stretchCutoff:l,extent:a},!0}_locateSourceData(e){if(!this.layer.loaded||!this.attached)return null;let t=new Map,n=this.container.children.find(n=>{if(!n.visible||!(`bitmap`in n?n.bitmap?.rawPixelData:n.tileData?.rawPixelData)?.pixelBlock)return!1;let{key:r}=n,{level:i}=r;if(!t.has(i)){let n=this._tileInfoView.getLODInfoAt(i);if(!n)return!1;let r=Math.floor(n.getColumnForX(e.x)),a=Math.floor(n.getRowForY(e.y));t.set(i,[a,r])}let[a,o]=t.get(i);return a===r.row&&o===r.col});if(n==null)return null;if(`tileData`in n){let{rawPixelData:e}=n.tileData;return e?.pixelBlock?{rawPixelData:e,tileSize:{width:n.width,height:n.height}}:null}let{rawPixelData:r,transformGrid:i,width:a,height:o}=n.bitmap;return r?.pixelBlock?{rawPixelData:r,transformGrid:i,tileSize:{width:a,height:o}}:null}async _redrawImage(e){if(!this.attached||this.container.children.length===0||(`updateRenderer`in this.layer&&await this.layer.updateRenderer(),this.isCPUBasedDRA?await this._updateGlobalSymbolizerParams(e):(this.canUseLocalSymbolizerParams&&this._updateSymbolizerParams(),this._globalSymbolizerParams=null),!this.attached||e?.aborted))return;let t=this.container.children.map(async t=>this.updateTileSymbolizerParameters(t,{local:this._symbolizerParams,global:this._globalSymbolizerParams},e));await Promise.allSettled(t),this.attached&&!e?.aborted&&this.container.requestRender()}async _updateGlobalSymbolizerParams(e){let{fullExtent:t,view:n}=this.layerView;if(!t?.intersects(n.extent)||!(`symbolizer`in this.layer))return;let r=this._getFetchOptions(this.previousLOD.level,e),i=await this.layer.fetchPixels(n.extent,n.width,n.height,{...r,interpolation:`nearest`,requestRawData:!1,skipRasterFunction:!1});if(!i?.pixelBlock)return;let{resolution:a}=this.previousLOD,{isBsqTile:o}=this.layer.raster.rasterInfo.storageInfo,s=o?null:this._getBandIds(),c=this.layer.symbolizer.generateWebGLParameters({pixelBlock:i.pixelBlock.extractBands(s),isGCS:n.spatialReference.isGeographic,resolution:{x:a,y:a},bandIds:s});!this.canUseWebGLForProcessing&&c&&c.type===`stretch`&&this.layer.renderer?.type===`raster-stretch`&&(c.factor=c.factor.map(e=>e*255),c.minOutput=Math.round(c.minOutput*255),c.maxOutput=Math.round(c.maxOutput*255)),this._globalSymbolizerParams=c}_updateSymbolizerParams(){if(!(`symbolizer`in this.layer))return;let{resolution:e}=this.previousLOD,t=this._getBandIds();this._symbolizerParams=this.layer.symbolizer.generateWebGLParameters({pixelBlock:null,isGCS:this.layerView.view.spatialReference.isGeographic,resolution:{x:e,y:e},bandIds:t})}_updateBlockCacheRegistry(e=!1){let{layer:t,layerView:n}=this,{raster:r}=t,i=null,a=null,o=r;if(`multidimensionalDefinition`in t){let{multidimensionalDefinition:e}=t.normalizeRasterFetchOptions({multidimensionalDefinition:t.multidimensionalDefinition,timeExtent:n.timeExtent});i=r.rasterInfo.multidimensionalInfo?r.getSliceIndex(e)??null:null,a=r.rasterInfo.storageInfo.isBsqTile?t.getRawDisplayBandIds():null,o=d(r)?r.primaryRasters.rasters[0]??r:r}let s=m(o.rasterId,i,a);if(s!==this._blockCacheRegistryUrl){this._blockCacheRegistryUrl!=null&&p(this._blockCacheRegistryUrl,this._blockCacheRegistryId);let t=o.rawBlockRegistryIds.indexOf(this._blockCacheRegistryId);if(t>-1&&o.rawBlockRegistryIds.splice(t,1),this._blockCacheRegistryId=h(s,o.rasterInfo),o.rawBlockRegistryIds.push(this._blockCacheRegistryId),e){let{view:e}=n,t=this._tileInfoView.getClosestInfoForScale(e.scale),i=this._srcResolutions[t.level];f(s,this._blockCacheRegistryId,e.extent,e.resolution,i,r.ioConfig.sampling)}this._blockCacheRegistryUrl=s}}async doRefresh(){if(!this.attached||!this.previousLOD||this.layerView.suspended)return;`updateRenderer`in this.layer&&await this._updatingHandles.addPromise(this.layer.updateRenderer()),this.canUseLocalSymbolizerParams&&this._updateSymbolizerParams(),this._updateBlockCacheRegistry(!0),this._fetchQueue.reset();let e=[];this._tileStrategy.refresh(t=>e.push(this._enqueueTileFetch(t))),this._globalUpdateRequested=e.length>0&&(this.isCPUBasedDRA||this.hasDRAInRasterFunction||!this.useProgressiveUpdate),await this._updatingHandles.addPromise(Promise.allSettled(e))}};e([o()],A.prototype,`_globalUpdateRequested`,void 0),e([o()],A.prototype,`attached`,void 0),e([o()],A.prototype,`canUseWebGLForProcessing`,null),e([o()],A.prototype,`canUseLocalSymbolizerParams`,null),e([o()],A.prototype,`hasDRAInRasterFunction`,null),e([o()],A.prototype,`isCPUBasedDRA`,null),e([o()],A.prototype,`container`,void 0),e([o()],A.prototype,`layer`,void 0),e([o()],A.prototype,`layerView`,void 0),e([o()],A.prototype,`scheduler`,void 0),e([o()],A.prototype,`type`,void 0),e([o()],A.prototype,`useWebGLForProcessing`,null),e([o()],A.prototype,`useProgressiveUpdate`,null),e([o()],A.prototype,`timeExtent`,void 0),e([o()],A.prototype,`updating`,null),A=e([s(`esri.views.2d.layers.imagery.BaseImageryTileSubView2D`)],A);export{A as BaseImageryTileSubView2D};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import t from"../../core/Accessor.js";import{equals as n}from"../../core/arrayUtils.js";import r from"../../core/Collection.js";import i from"../../core/Error.js";import a from"../../core/Logger.js";import{mapCollection as o}from"../../core/mapCollectionUtils.js";import{isPromiseLike as s}from"../../core/promiseUtils.js";import{watch as c,initial as l}from"../../core/reactiveUtils.js";import{property as u,subclass as d}from"../../core/accessorSupport/decorators.js";import{UpdatingHandles as f}from"../../core/support/UpdatingHandles.js";import p from"../../geometry/Point.js";import{polygonToVolume as m}from"./focusAreaUtils.js";import{ElevationContext as h}from"./layers/graphics/ElevationContext.js";import{FocusArea as g}from"./webgl-engine/effects/focusArea/FocusArea.js";import{FocusAreaMask as _}from"./webgl-engine/effects/focusArea/FocusAreaMask.js";import{FocusAreaOutlineItem as v}from"./webgl-engine/effects/focusArea/FocusAreaOutlineItem.js";let y=class extends t{get updating(){return this._updatingHandles.updating||!!this._outlineMap?.some(e=>e.updating)}constructor(e){super(e),this._updatingHandles=new f,this._elevationContext=new h,this._previousVolumes=new Map,this._outlineMap=new r}initialize(){this.addHandles([c(()=>({volumes:this.volumes,ready:this.view.groundView?.ready}),({volumes:e,ready:t})=>{this._previousVolumes=e,t&&(e.size!==0&&this._mask?.updateGeometries(),this._ensureRenderNodes())},l)]),this._outlineMap=o(()=>this.areas?.areas,e=>new v({area:e,view:this.view}),{recycleItems:!0})}destroy(){this.removeAllHandles(),this._outlineMap.destroy(),this._updatingHandles.destroy()}get areas(){return this.view.map?.focusAreas}get enabledAreas(){return this.areas?.areas.toArray().filter(({enabled:e})=>e)??[]}get style(){return this.areas?.style??`bright`}get polygons(){return this.enabledAreas.reduce((e,t)=>e.concat(t.geometries.toArray()),[])}containsGeometry(e){if(this.polygons.length===0)return!0;let t=new p(e);return this.polygons.some(e=>e.contains(t))}get volumes(){let e=this.polygons,t=this._previousVolumes;if(!this.view.renderCoordsHelper||n(Array.from(t?.keys()??[]),e))return t??new Map;let r=new Map;for(let n of e){let e=t?.get(n);if(e)r.set(n,e);else try{let e=m(n,this.view,this._elevationContext);if(e==null)continue;if(s(e)){this._updatingHandles.consumePromise(e);continue}r.set(n,e)}catch(e){a.getLogger(this).error(new i(`focusareasview:projection-failed`,`Failed to project focus area geometry to view spatial reference`,{geometry:n,error:e}))}}return r}_ensureRenderNodes(){if(this.view.stage){if(this.volumes.size===0){let{_mask:e,_visualization:t}=this;this._mask=this._visualization=null,t?.fadeOut(()=>{e?.destroy(),t?.destroy()})}else this._mask??=new _({focusAreasView:this}),this._visualization??=new g({focusAreasView:this}),this.view.stage.renderView.requestRender()}}};e([u()],y.prototype,`updating`,null),e([u({readOnly:!0})],y.prototype,`volumes`,null),e([u({constructOnly:!0})],y.prototype,`view`,void 0),y=e([d(`esri.views.3d.FocusAreasView`)],y);export{y as FocusAreasView};
2
+ import{__decorate as e}from"tslib";import t from"../../core/Accessor.js";import{equals as n}from"../../core/arrayUtils.js";import r from"../../core/Collection.js";import i from"../../core/Error.js";import a from"../../core/Logger.js";import{mapCollection as o}from"../../core/mapCollectionUtils.js";import{isPromiseLike as s}from"../../core/promiseUtils.js";import{watch as c,initial as l}from"../../core/reactiveUtils.js";import{property as u,subclass as d}from"../../core/accessorSupport/decorators.js";import{UpdatingHandles as f}from"../../core/support/UpdatingHandles.js";import p from"../../geometry/Point.js";import{polygonToVolume as m}from"./focusAreaUtils.js";import{ElevationContext as h}from"./layers/graphics/ElevationContext.js";import{FocusArea as g}from"./webgl-engine/effects/focusArea/FocusArea.js";import{FocusAreaMask as _}from"./webgl-engine/effects/focusArea/FocusAreaMask.js";import{FocusAreaOutlineItem as v}from"./webgl-engine/effects/focusArea/FocusAreaOutlineItem.js";let y=class extends t{get updating(){return this._updatingHandles.updating||!!this._outlineMap?.some(e=>e.updating)}constructor(e){super(e),this._updatingHandles=new f,this._elevationContext=new h,this._previousVolumes=new Map,this._outlineMap=new r}initialize(){this.addHandles([c(()=>({volumes:this.volumes,ready:this.view.groundView?.ready}),({volumes:e,ready:t})=>{this._previousVolumes=e,t&&(e.size!==0&&this._mask?.updateGeometries(),this._ensureRenderNodes())},l)]),this._outlineMap=o(()=>this.areas?.areas,e=>new v({area:e,view:this.view}),{recycleItems:!0})}destroy(){this.removeAllHandles(),this._outlineMap.destroy(),this._updatingHandles.destroy()}get areas(){return this.view.map?.focusAreas}get enabledAreas(){return this.areas?.areas.toArray().filter(({enabled:e})=>e)??[]}get style(){return this.areas?.style??`bright`}get polygons(){return this.enabledAreas.reduce((e,t)=>e.concat(t.geometries.toArray()),[])}containsGeometry(e){if(this.polygons.length===0)return!0;let t=new p(e);return this.polygons.some(e=>e.contains(t))}get volumes(){let e=this.polygons,t=this._previousVolumes;if(n(Array.from(t?.keys()??[]),e))return t??new Map;let r=new Map;for(let n of e){let e=t?.get(n);if(e)r.set(n,e);else try{let e=m(n,this.view,this._elevationContext);if(e==null)continue;if(s(e)){this._updatingHandles.consumePromise(e);continue}r.set(n,e)}catch(e){a.getLogger(this).error(new i(`focusareasview:projection-failed`,`Failed to project focus area geometry to view spatial reference`,{geometry:n,error:e}))}}return r}_ensureRenderNodes(){if(this.view.stage){if(this.volumes.size===0){let{_mask:e,_visualization:t}=this;this._mask=this._visualization=null,t?.fadeOut(()=>{e?.destroy(),t?.destroy()})}else this._mask??=new _({focusAreasView:this}),this._visualization??=new g({focusAreasView:this}),this.view.stage.renderView.requestRender()}}};e([u()],y.prototype,`updating`,null),e([u({readOnly:!0})],y.prototype,`volumes`,null),e([u({constructOnly:!0})],y.prototype,`view`,void 0),y=e([d(`esri.views.3d.FocusAreasView`)],y);export{y as FocusAreasView};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import{onLocaleChange as t,fetchMessageBundle as n}from"../../../../../intl.js";import r from"../../../../../core/Accessor.js";import{multiplyOpacityToUnitRGBA as i,getContrast as a,multiplyOpacity as o}from"../../../../../core/colorUtils.js";import"../../../../../core/has.js";import{nextHighestPowerOfTen as s,floatEqualUlp as c}from"../../../../../core/mathUtils.js";import{destroyMaybe as l}from"../../../../../core/maybe.js";import{toAdaptiveAreaUnit as u,adaptiveLengthUnitForArea as d}from"../../../../../core/quantity.js";import{formatDecimal as f}from"../../../../../core/quantityFormatUtils.js";import{watch as p,syncAndInitial as m,initial as h}from"../../../../../core/reactiveUtils.js";import{lengthUnitFromSpatialReference as g,convertUnit as _,adaptiveAreaUnit as v}from"../../../../../core/units.js";import{property as y,subclass as b}from"../../../../../core/accessorSupport/decorators.js";import{fromTranslation as x}from"../../../../../core/libs/gl-matrix-2/math/mat4.js";import{create as S}from"../../../../../core/libs/gl-matrix-2/factories/mat4f64.js";import{subtract as C,squaredDistance as w}from"../../../../../core/libs/gl-matrix-2/math/vec3.js";import{create as T}from"../../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{LabelVisualElement as E}from"../../../interactive/visualElements/LabelVisualElement.js";import{LineVisualElement as D}from"../../../interactive/visualElements/LineVisualElement.js";import{MeasurementAreaVisualElement as O}from"../../../interactive/visualElements/MeasurementAreaVisualElement.js";import{GeodesicSegment as k,EuclideanSegment as A}from"../../../interactive/visualElements/support/Segment.js";import{midpoint3d as j}from"../../../support/mathUtils.js";import{createStipplePatternSimple as M}from"../../../webgl-engine/materials/lineStippleUtils.js";let N=class extends r{get _parameters(){let{accentColor:e,textColor:t}=this.view.effectiveTheme,n=e.toUnitRGBA(),r=i(e,.5),s=i(a(e),.5),c=a(t,160);return{accentColor:n,transparentAccentColor:r,transparentContrastColor:s,textColor:t,textBackgroundColor:o(c,.6),textCalloutColor:o(c,.5),pathLineWidth:3,perimeterLineWidth:2,projectionLineWidth:2,projectionLineStippleSize:5,labelDistance:25}}get viewData(){return this._viewData}get visible(){return this.analysisViewData.visible}get _renderUnits(){let e=this.view.renderCoordsHelper.spatialReference;return g(e)??`meters`}get testData(){}constructor(e){super(e),this._path=null,this._perimeter=null,this._projectionLines=null,this._measurementArea=null,this._areaLabel=null,this._perimeterLabel=null,this._pathSegments=[],this._perimeterSegments=[],this._origin=T(),this._originTransform=S(),this.messages=null,this._viewData=new I,this.areaLabel=null,this.perimeterLabel=null,this.loadingMessages=!0}initialize(){let{analysisViewData:e,_parameters:n,view:r}=this;this._path=new D({view:r,attached:!0,width:n.pathLineWidth,polygonOffset:3,renderOccluded:4,transparentRenderOrder:1,isDecoration:!0}),this._perimeter=new D({view:r,attached:!0,width:n.perimeterLineWidth,polygonOffset:3,renderOccluded:4,transparentRenderOrder:2,isDecoration:!0}),this._projectionLines=new D({view:r,attached:!0,width:n.projectionLineWidth,stipplePattern:M(n.projectionLineStippleSize),polygonOffset:3,renderOccluded:4,transparentRenderOrder:3,isDecoration:!0}),this._measurementArea=new O({view:r,attached:!0,isDecoration:!0,renderOccluded:4,testsTransparentRenderOrder:5});let i={attached:!0,view:r,isDecoration:!0};this._areaLabel=new E({...i,fontSize:16,distance:0}),this._perimeterLabel=new E({...i,fontSize:12}),this.addHandles([p(()=>[e.mode,this.visible,e.unit,e.measurementData?.updateId,e.measurementData?.measurements!=null,L(e.measurementData?.measurements?.mode)],()=>this._update(),m),p(()=>e.measurementData?.measurements,e=>this._updateMeasurements(e)),p(()=>r.state?.camera,()=>this._updateLabels(),m),t(()=>this._updateMessageBundle()),p(()=>this._parameters,({accentColor:e,transparentAccentColor:t,transparentContrastColor:n,textColor:r,textBackgroundColor:i,textCalloutColor:a})=>{let{_path:o,_perimeter:s,_projectionLines:c,_measurementArea:l,_areaLabel:u,_perimeterLabel:d}=this;o.color=e,s.color=e,c.color=e,l.color1=t,l.color2=n,u.textColor=r,u.backgroundColor=i,u.calloutColor=a,d.textColor=r,d.backgroundColor=i,d.calloutColor=a},h)]),this._updateMessageBundle()}destroy(){this._measurementArea=l(this._measurementArea),this._path=l(this._path),this._perimeter=l(this._perimeter),this._areaLabel=l(this._areaLabel),this._perimeterLabel=l(this._perimeterLabel),this._projectionLines=l(this._projectionLines),this.set(`view`,null)}_update(){if(this.destroyed||!this.view.ready||!this.view.renderCoordsHelper)return;let{analysisViewData:{measurementData:e},analysisViewData:t}=this;e!=null&&(this._updateViewData(e,t.path),this._updateOrigin(),this._updatePathSegments(),this._updatePerimeterSegments(),this._updateArea(),this._updateProjectionLines(),this._updateLabels())}_calculateCheckerSize(e){let t=R(e?.mode)?e?.geodesicArea:e?.area;if(t==null)return 1;let n=u(t,this.analysisViewData.unit),r=Math.sqrt(_(1,n.unit,`square-meters`));return _(s(Math.sqrt(n.value)/Math.sqrt(300))*r,`meters`,this._renderUnits)}_updateMeasurements(e){Object.assign(this.viewData,this._getMeasurementsViewData(e)),this._updateCheckerSize(),this._updateLabels()}_updateCheckerSize(){this._measurementArea.size=[this.viewData.checkerSize,this.viewData.checkerSize]}_updateViewData(e,t){let n=e.measurements,r=new I({validMeasurement:!!n,numVertices:e.numVertices,hasStagedVertex:e.hasStagedVertex,path:t,mode:n?.mode,vertexData:e.vertexData,perimeterLabelSegmentIndex:0,...this._getMeasurementsViewData(n)});this._viewData=r}_getMeasurementsViewData(e){let t=R(e?.mode),n=this._calculateCheckerSize(e);return{areaCentroid:t?e?.geodesicAreaCentroidRenderCoords:e?.areaCentroidRenderCoords,area:t?e?.geodesicArea:e?.area,perimeter:t?e?.geodesicPerimeter:e?.perimeter,checkerSize:n}}_updateOrigin(){let e=this.viewData;j(e.vertexData.positionsRender,this._origin),x(this._originTransform,this._origin),this._measurementArea.transform=this._originTransform,this._projectionLines.transform=this._originTransform}_createSegments(e,t){let n=this.viewData,r=this.view.renderCoordsHelper.spatialReference,i=L(n.mode),a=[],o=n.numVertices,s=n.validMeasurement?o:o-1;for(let l=0;l<s;++l){let s=n.vertexData[e][l],u=n.vertexData[e][(l+1)%o],d=!0;if(t){let e=n.vertexData.positionsRender[l],t=n.vertexData.positionsRender[(l+1)%o],r=!0;for(let n=0;n<3;++n)r&&=c(e[n],s[n])&&c(t[n],u[n]);r&&(d=!1)}let f=null;switch(i){case`geodesic`:f=new k(s,u,r,d);break;case`euclidean`:f=new A(s,u,d)}a.push(f)}return a}_updatePathSegments(){let{visible:e}=this,t=this._createSegments(`positionsRender`);this._path.setGeometryFromSegments(t,this._origin),this._path.visible=e,this._pathSegments=t}_updatePerimeterSegments(){let e=this.visible&&this.viewData.mode===`euclidean`&&!!this.viewData.path&&this.viewData.path.numVertices>2,t=this._createSegments(`positionsFittedRender`,!0);this._perimeter.setGeometryFromSegments(t,this._origin),this._perimeter.visible=e,this._perimeterSegments=t}_updateArea(){let e=this.viewData;switch(L(e.mode)){case`euclidean`:this._updateAreaEuclidean(e);break;case`geodesic`:this._updateAreaGeodesic()}}_updateAreaEuclidean(e){let t=this.visible;e.validMeasurement&&e.vertexData.triangleIndices?(this._measurementArea.geometry={uv:e.vertexData.triangleUvs,position:e.vertexData.trianglePositions,triangleIndices:e.vertexData.triangleIndices},this._updateCheckerSize(),this._measurementArea.visible=t):this._measurementArea.visible=!1}_updateAreaGeodesic(){this._measurementArea.visible=!1}_updateProjectionLines(){let e=this.viewData,t=this.visible,n=e.mode,r=e.numVertices;if(r>0&&e.validMeasurement&&n===`euclidean`){let n=[];for(let t=0;t<r;++t){let r=T();C(r,e.vertexData.positionsRender[t],this._origin);let i=T();C(i,e.vertexData.positionsFittedRender[t],this._origin),c(w(r,i),0)||n.push([r,i])}this._projectionLines.geometry=n,this._projectionLines.visible=t}else this._projectionLines.geometry=null,this._projectionLines.visible=!1}_updateLabels(){if(this.destroyed)return;let{viewData:e}=this,{area:t,path:n}=e;if(!n)return;let r=this.visible,i=this._areaLabel,a=this._perimeterLabel,o=e.validMeasurement;i.visible=!0,a.visible=!0;let s=!1,c=P(this.messages,t,this.analysisViewData.unit);if(c!=null&&e.areaCentroid&&r&&(i.geometry={type:`point`,point:e.areaCentroid},i.text=c,s=e.validMeasurement),this._set(`areaLabel`,c),r&&o){let t=R(e.mode),n=e.perimeter,r=F(this.messages,n,this.analysisViewData.unit);this._set(`perimeterLabel`,r),a.distance=this._parameters.labelDistance,a.anchor=`top`,a.text=r;let i=!0;for(let n=0;n<e.numVertices;++n){let r=(e.perimeterLabelSegmentIndex+n)%e.numVertices,o=t?this._pathSegments[r]:this._perimeterSegments[r];if(i=!0,a.geometry={type:`segment`,segment:o,sampleLocation:`center`},a.overlaps(this._areaLabel))i=!1;else break}a.visible=i}else a.visible=!1;i.visible=s}_updateMessageBundle(){this.loadingMessages=!0,n(`esri/core/t9n/Units`).then(e=>{this.messages=e,this.view&&this._update()}).finally(()=>{this.loadingMessages=!1})}};e([y()],N.prototype,`_parameters`,null),e([y()],N.prototype,`view`,void 0),e([y()],N.prototype,`messages`,void 0),e([y()],N.prototype,`analysis`,void 0),e([y()],N.prototype,`_viewData`,void 0),e([y()],N.prototype,`analysisViewData`,void 0),e([y({readOnly:!0})],N.prototype,`areaLabel`,void 0),e([y({readOnly:!0})],N.prototype,`perimeterLabel`,void 0),e([y()],N.prototype,`loadingMessages`,void 0),e([y()],N.prototype,`visible`,null),e([y()],N.prototype,`_renderUnits`,null),N=e([b(`esri.views.3d.analysis.AreaMeasurement.support.AreaMeasurementVisualization`)],N);function P(e,t,n){return e&&t&&f(e,t,v(t.value,t.unit,n))}function F(e,t,n){return e&&t&&f(e,t,d(t,n))}class I{constructor(e){this.validMeasurement=e?.validMeasurement??!1,this.numVertices=e?.numVertices??0,this.hasStagedVertex=e?.hasStagedVertex??!1,this.path=e?.path,this.vertexData=e?.vertexData??{positionsRender:[],positionsFittedWorldPlaneProjected:[],positionsFittedRender:[],triangleIndices:null,trianglePositions:[],triangleUvs:[]},this.mode=e?.mode,this.areaCentroid=e?.areaCentroid,this.perimeterLabelSegmentIndex=e?.perimeterLabelSegmentIndex??0,this.checkerSize=e?.checkerSize??1,this.area=e?.area,this.perimeter=e?.perimeter}}function L(e){switch(e){case`euclidean`:case void 0:case null:return`euclidean`;case`geodesic`:return`geodesic`}}function R(e){return L(e)===`geodesic`}export{N as AreaMeasurementVisualization,I as ViewData};
2
+ import{__decorate as e}from"tslib";import{onLocaleChange as t,fetchMessageBundle as n}from"../../../../../intl.js";import r from"../../../../../core/Accessor.js";import{multiplyOpacityToUnitRGBA as i,getContrast as a,multiplyOpacity as o}from"../../../../../core/colorUtils.js";import"../../../../../core/has.js";import{nextHighestPowerOfTen as s,floatEqualUlp as c}from"../../../../../core/mathUtils.js";import{destroyMaybe as l}from"../../../../../core/maybe.js";import{toAdaptiveAreaUnit as u,adaptiveLengthUnitForArea as d}from"../../../../../core/quantity.js";import{formatDecimal as f}from"../../../../../core/quantityFormatUtils.js";import{watch as p,syncAndInitial as m,initial as h}from"../../../../../core/reactiveUtils.js";import{lengthUnitFromSpatialReference as g,convertUnit as _,adaptiveAreaUnit as v}from"../../../../../core/units.js";import{property as y,subclass as b}from"../../../../../core/accessorSupport/decorators.js";import{fromTranslation as x}from"../../../../../core/libs/gl-matrix-2/math/mat4.js";import{create as S}from"../../../../../core/libs/gl-matrix-2/factories/mat4f64.js";import{subtract as C,squaredDistance as w}from"../../../../../core/libs/gl-matrix-2/math/vec3.js";import{create as T}from"../../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{LabelVisualElement as E}from"../../../interactive/visualElements/LabelVisualElement.js";import{LineVisualElement as D}from"../../../interactive/visualElements/LineVisualElement.js";import{MeasurementAreaVisualElement as O}from"../../../interactive/visualElements/MeasurementAreaVisualElement.js";import{GeodesicSegment as k,EuclideanSegment as A}from"../../../interactive/visualElements/support/Segment.js";import{midpoint3d as j}from"../../../support/mathUtils.js";import{createStipplePatternSimple as M}from"../../../webgl-engine/materials/lineStippleUtils.js";let N=class extends r{get _parameters(){let{accentColor:e,textColor:t}=this.view.effectiveTheme,n=e.toUnitRGBA(),r=i(e,.5),s=i(a(e),.5),c=a(t,160);return{accentColor:n,transparentAccentColor:r,transparentContrastColor:s,textColor:t,textBackgroundColor:o(c,.6),textCalloutColor:o(c,.5),pathLineWidth:3,perimeterLineWidth:2,projectionLineWidth:2,projectionLineStippleSize:5,labelDistance:25}}get viewData(){return this._viewData}get visible(){return this.analysisViewData.visible}get _renderUnits(){let e=this.view.renderCoordsHelper.spatialReference;return g(e)??`meters`}get testData(){}constructor(e){super(e),this._path=null,this._perimeter=null,this._projectionLines=null,this._measurementArea=null,this._areaLabel=null,this._perimeterLabel=null,this._pathSegments=[],this._perimeterSegments=[],this._origin=T(),this._originTransform=S(),this.messages=null,this._viewData=new I,this.areaLabel=null,this.perimeterLabel=null,this.loadingMessages=!0}initialize(){let{analysisViewData:e,_parameters:n,view:r}=this;this._path=new D({view:r,attached:!0,width:n.pathLineWidth,polygonOffset:3,renderOccluded:4,transparentRenderOrder:1,isDecoration:!0}),this._perimeter=new D({view:r,attached:!0,width:n.perimeterLineWidth,polygonOffset:3,renderOccluded:4,transparentRenderOrder:2,isDecoration:!0}),this._projectionLines=new D({view:r,attached:!0,width:n.projectionLineWidth,stipplePattern:M(n.projectionLineStippleSize),polygonOffset:3,renderOccluded:4,transparentRenderOrder:3,isDecoration:!0}),this._measurementArea=new O({view:r,attached:!0,isDecoration:!0,renderOccluded:4,testsTransparentRenderOrder:5});let i={attached:!0,view:r,isDecoration:!0};this._areaLabel=new E({...i,fontSize:16,distance:0}),this._perimeterLabel=new E({...i,fontSize:12}),this.addHandles([p(()=>[e.mode,this.visible,e.unit,e.measurementData?.updateId,e.measurementData?.measurements!=null,L(e.measurementData?.measurements?.mode)],()=>this._update(),m),p(()=>e.measurementData?.measurements,e=>this._updateMeasurements(e)),p(()=>r.state?.camera,()=>this._updateLabels(),m),t(()=>this._updateMessageBundle()),p(()=>this._parameters,({accentColor:e,transparentAccentColor:t,transparentContrastColor:n,textColor:r,textBackgroundColor:i,textCalloutColor:a})=>{let{_path:o,_perimeter:s,_projectionLines:c,_measurementArea:l,_areaLabel:u,_perimeterLabel:d}=this;o.color=e,s.color=e,c.color=e,l.color1=t,l.color2=n,u.textColor=r,u.backgroundColor=i,u.calloutColor=a,d.textColor=r,d.backgroundColor=i,d.calloutColor=a},h)]),this._updateMessageBundle()}destroy(){this._measurementArea=l(this._measurementArea),this._path=l(this._path),this._perimeter=l(this._perimeter),this._areaLabel=l(this._areaLabel),this._perimeterLabel=l(this._perimeterLabel),this._projectionLines=l(this._projectionLines),this.set(`view`,null)}_update(){if(this.destroyed||!this.view.ready)return;let{analysisViewData:{measurementData:e},analysisViewData:t}=this;e!=null&&(this._updateViewData(e,t.path),this._updateOrigin(),this._updatePathSegments(),this._updatePerimeterSegments(),this._updateArea(),this._updateProjectionLines(),this._updateLabels())}_calculateCheckerSize(e){let t=R(e?.mode)?e?.geodesicArea:e?.area;if(t==null)return 1;let n=u(t,this.analysisViewData.unit),r=Math.sqrt(_(1,n.unit,`square-meters`));return _(s(Math.sqrt(n.value)/Math.sqrt(300))*r,`meters`,this._renderUnits)}_updateMeasurements(e){Object.assign(this.viewData,this._getMeasurementsViewData(e)),this._updateCheckerSize(),this._updateLabels()}_updateCheckerSize(){this._measurementArea.size=[this.viewData.checkerSize,this.viewData.checkerSize]}_updateViewData(e,t){let n=e.measurements,r=new I({validMeasurement:!!n,numVertices:e.numVertices,hasStagedVertex:e.hasStagedVertex,path:t,mode:n?.mode,vertexData:e.vertexData,perimeterLabelSegmentIndex:0,...this._getMeasurementsViewData(n)});this._viewData=r}_getMeasurementsViewData(e){let t=R(e?.mode),n=this._calculateCheckerSize(e);return{areaCentroid:t?e?.geodesicAreaCentroidRenderCoords:e?.areaCentroidRenderCoords,area:t?e?.geodesicArea:e?.area,perimeter:t?e?.geodesicPerimeter:e?.perimeter,checkerSize:n}}_updateOrigin(){let e=this.viewData;j(e.vertexData.positionsRender,this._origin),x(this._originTransform,this._origin),this._measurementArea.transform=this._originTransform,this._projectionLines.transform=this._originTransform}_createSegments(e,t){let n=this.viewData,r=this.view.renderCoordsHelper.spatialReference,i=L(n.mode),a=[],o=n.numVertices,s=n.validMeasurement?o:o-1;for(let l=0;l<s;++l){let s=n.vertexData[e][l],u=n.vertexData[e][(l+1)%o],d=!0;if(t){let e=n.vertexData.positionsRender[l],t=n.vertexData.positionsRender[(l+1)%o],r=!0;for(let n=0;n<3;++n)r&&=c(e[n],s[n])&&c(t[n],u[n]);r&&(d=!1)}let f=null;switch(i){case`geodesic`:f=new k(s,u,r,d);break;case`euclidean`:f=new A(s,u,d)}a.push(f)}return a}_updatePathSegments(){let{visible:e}=this,t=this._createSegments(`positionsRender`);this._path.setGeometryFromSegments(t,this._origin),this._path.visible=e,this._pathSegments=t}_updatePerimeterSegments(){let e=this.visible&&this.viewData.mode===`euclidean`&&!!this.viewData.path&&this.viewData.path.numVertices>2,t=this._createSegments(`positionsFittedRender`,!0);this._perimeter.setGeometryFromSegments(t,this._origin),this._perimeter.visible=e,this._perimeterSegments=t}_updateArea(){let e=this.viewData;switch(L(e.mode)){case`euclidean`:this._updateAreaEuclidean(e);break;case`geodesic`:this._updateAreaGeodesic()}}_updateAreaEuclidean(e){let t=this.visible;e.validMeasurement&&e.vertexData.triangleIndices?(this._measurementArea.geometry={uv:e.vertexData.triangleUvs,position:e.vertexData.trianglePositions,triangleIndices:e.vertexData.triangleIndices},this._updateCheckerSize(),this._measurementArea.visible=t):this._measurementArea.visible=!1}_updateAreaGeodesic(){this._measurementArea.visible=!1}_updateProjectionLines(){let e=this.viewData,t=this.visible,n=e.mode,r=e.numVertices;if(r>0&&e.validMeasurement&&n===`euclidean`){let n=[];for(let t=0;t<r;++t){let r=T();C(r,e.vertexData.positionsRender[t],this._origin);let i=T();C(i,e.vertexData.positionsFittedRender[t],this._origin),c(w(r,i),0)||n.push([r,i])}this._projectionLines.geometry=n,this._projectionLines.visible=t}else this._projectionLines.geometry=null,this._projectionLines.visible=!1}_updateLabels(){if(this.destroyed)return;let{viewData:e}=this,{area:t,path:n}=e;if(!n)return;let r=this.visible,i=this._areaLabel,a=this._perimeterLabel,o=e.validMeasurement;i.visible=!0,a.visible=!0;let s=!1,c=P(this.messages,t,this.analysisViewData.unit);if(c!=null&&e.areaCentroid&&r&&(i.geometry={type:`point`,point:e.areaCentroid},i.text=c,s=e.validMeasurement),this._set(`areaLabel`,c),r&&o){let t=R(e.mode),n=e.perimeter,r=F(this.messages,n,this.analysisViewData.unit);this._set(`perimeterLabel`,r),a.distance=this._parameters.labelDistance,a.anchor=`top`,a.text=r;let i=!0;for(let n=0;n<e.numVertices;++n){let r=(e.perimeterLabelSegmentIndex+n)%e.numVertices,o=t?this._pathSegments[r]:this._perimeterSegments[r];if(i=!0,a.geometry={type:`segment`,segment:o,sampleLocation:`center`},a.overlaps(this._areaLabel))i=!1;else break}a.visible=i}else a.visible=!1;i.visible=s}_updateMessageBundle(){this.loadingMessages=!0,n(`esri/core/t9n/Units`).then(e=>{this.messages=e,this.view&&this._update()}).finally(()=>{this.loadingMessages=!1})}};e([y()],N.prototype,`_parameters`,null),e([y()],N.prototype,`view`,void 0),e([y()],N.prototype,`messages`,void 0),e([y()],N.prototype,`analysis`,void 0),e([y()],N.prototype,`_viewData`,void 0),e([y()],N.prototype,`analysisViewData`,void 0),e([y({readOnly:!0})],N.prototype,`areaLabel`,void 0),e([y({readOnly:!0})],N.prototype,`perimeterLabel`,void 0),e([y()],N.prototype,`loadingMessages`,void 0),e([y()],N.prototype,`visible`,null),e([y()],N.prototype,`_renderUnits`,null),N=e([b(`esri.views.3d.analysis.AreaMeasurement.support.AreaMeasurementVisualization`)],N);function P(e,t,n){return e&&t&&f(e,t,v(t.value,t.unit,n))}function F(e,t,n){return e&&t&&f(e,t,d(t,n))}class I{constructor(e){this.validMeasurement=e?.validMeasurement??!1,this.numVertices=e?.numVertices??0,this.hasStagedVertex=e?.hasStagedVertex??!1,this.path=e?.path,this.vertexData=e?.vertexData??{positionsRender:[],positionsFittedWorldPlaneProjected:[],positionsFittedRender:[],triangleIndices:null,trianglePositions:[],triangleUvs:[]},this.mode=e?.mode,this.areaCentroid=e?.areaCentroid,this.perimeterLabelSegmentIndex=e?.perimeterLabelSegmentIndex??0,this.checkerSize=e?.checkerSize??1,this.area=e?.area,this.perimeter=e?.perimeter}}function L(e){switch(e){case`euclidean`:case void 0:case null:return`euclidean`;case`geodesic`:return`geodesic`}}function R(e){return L(e)===`geodesic`}export{N as AreaMeasurementVisualization,I as ViewData};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import{onLocaleChange as t,fetchMessageBundle as n}from"../../../../intl.js";import r from"../../../../core/Accessor.js";import{multiplyOpacityToUnitRGBA as i,getContrast as a,multiplyOpacity as o}from"../../../../core/colorUtils.js";import"../../../../core/has.js";import{nextHighestPowerOfTen as s,deg2rad as c}from"../../../../core/mathUtils.js";import{destroyMaybe as l}from"../../../../core/maybe.js";import{toUnit as u}from"../../../../core/quantity.js";import{formatDecimal as d,formatImperialVerticalLength as f,formatImperialLength as p,formatMetricVerticalLength as m,formatMetricLength as h}from"../../../../core/quantityFormatUtils.js";import{watch as g,syncAndInitial as _,initial as v}from"../../../../core/reactiveUtils.js";import{createRenderScreenPointArray as y,createRenderScreenPointArray3 as b}from"../../../../core/screenUtils.js";import{adaptiveImperialLengthUnit as x,convertUnit as S}from"../../../../core/units.js";import{property as C,subclass as w}from"../../../../core/accessorSupport/decorators.js";import{dot as T}from"../../../../core/libs/gl-matrix-2/math/vec2.js";import{scale as E,add as D}from"../../../../core/libs/gl-matrix-2/math/vec3.js";import{create as O}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{renderScreenSpaceTangent as k}from"../../interactive/support/viewUtils.js";import{LabelVisualElement as A,mirrorPosition as j}from"../../interactive/visualElements/LabelVisualElement.js";import{LineVisualElement as M}from"../../interactive/visualElements/LineVisualElement.js";import{MeasurementArrowVisualElement as N}from"../../interactive/visualElements/MeasurementArrowVisualElement.js";import{RightAngleQuadVisualElement as P}from"../../interactive/visualElements/RightAngleQuadVisualElement.js";import{GeodesicSegment as F,EuclideanSegment as I}from"../../interactive/visualElements/support/Segment.js";import{createStipplePatternSimple as L}from"../../webgl-engine/materials/lineStippleUtils.js";import{geodeticDistanceThresholdMeters as R}from"../../../support/measurementWorkerUtils.js";let z=class extends r{get _parameters(){let{accentColor:e,textColor:t}=this.view.effectiveTheme,n=e.toUnitRGBA(),r=i(e,.75),s=a(e).toUnitRGBA(),c=a(t,160);return{accentColor:n,contrastColor:s,translucentAccentColor:r,triangleLineWidth:3,geodesicProjectionLineWidth:2,guideLineWidth:2,guideStippleLengthPixels:3,directLabelFontSize:16,horizontalLabelFontSize:12,verticalLabelFontSize:12,textColor:t,textBackgroundColor:o(c,.6),textCalloutColor:o(c,.5)}}get visible(){return this.analysisView.visible}get viewMode(){let{elevationAlignedStartPoint:e,elevationAlignedEndPoint:t}=this.analysisView;if(e==null||t==null||e.equals(t))return 0;let n=this.analysisView.result;if(n==null)return 1;if(this.actualVisualizedMeasurement===`geodesic`)return this._requiresGeodesicGuideAt(this._startPosition)||this._requiresGeodesicGuideAt(this._endPosition)?3:1;let{verticalDistance:r,horizontalDistance:i}=n,a=u(r,`meters`).value,o=u(i,`meters`).value;return Math.min(a/o,o/a)<this.triangleCollapseRatioThreshold?1:2}get actualVisualizedMeasurement(){let{measurementMode:e,result:t}=this.analysisView;switch(e){case 0:return t!=null&&u(t.horizontalDistance,`meters`).value>R?`geodesic`:`euclidean`;case 1:return`euclidean`;case 2:return`geodesic`}}get allowVisualElementsOrientationChange(){return this._triangleOrientationOverride==null}set allowVisualElementsOrientationChange(e){this._triangleOrientationOverride==null!==e&&(this._triangleOrientationOverride=this._triangleOrientationOverride==null?this._actualVisualElementsOrientation:null)}get labels(){return this.actualVisualizedMeasurement===`geodesic`?{direct:null,horizontal:this._segmentLabel,vertical:this._verticalLabel}:{direct:this._segmentLabel,horizontal:this._horizontalLabel,vertical:this._verticalLabel}}constructor(e){super(e),this._segmentVisualElement=null,this._triangleVisualElement=null,this._rightAngleQuad=null,this._projectedGeodesicLine=null,this._geodesicStartHint=null,this._geodesicEndHint=null,this._segmentLabel=null,this._verticalLabel=null,this._horizontalLabel=null,this._startPosition=O(),this._endPosition=O(),this._cornerPosition=O(),this._startPositionAtSeaLevel=O(),this._endPositionAtSeaLevel=O(),this._triangleOrientationOverride=null,this.messages=null,this.loadingMessages=!0,this.visualElementOrientation=0,this.triangleCollapseRatioThreshold=.03}initialize(){let e={attached:!0,view:this.view,isDecoration:!0},{guideLineWidth:n,guideStippleLengthPixels:r,triangleLineWidth:i,geodesicProjectionLineWidth:a,directLabelFontSize:o,verticalLabelFontSize:s,horizontalLabelFontSize:c}=this._parameters;this._segmentVisualElement=new N({...e,geometry:null,renderOccluded:4,transparentRenderOrder:2}),this._triangleVisualElement=new M({...e,width:i,renderOccluded:4,transparentRenderOrder:3}),this._rightAngleQuad=new P({...e,renderOccluded:4,transparentRenderOrder:4});let l={...e,polygonOffset:3,renderOccluded:4,transparentRenderOrder:1};this._projectedGeodesicLine=new M({...l,width:a,stipplePattern:L(r)}),this._geodesicStartHint=new M({...l,width:n,stipplePattern:L(r)}),this._geodesicEndHint=new M({...l,width:n,stipplePattern:L(r)}),this._segmentLabel=new A({...e,fontSize:o}),this._verticalLabel=new A({...e,fontSize:s}),this._horizontalLabel=new A({...e,fontSize:c}),this.addHandles([g(()=>{let{elevationAlignedStartPoint:e,elevationAlignedEndPoint:t}=this.analysisView,n=this.view;return{view:n,camera:n.state.camera,viewMode:this.viewMode,elevationAlignedStartPoint:e,elevationAlignedEndPoint:t,orientation:this._actualVisualElementsOrientation,visualizedMeasurement:this.actualVisualizedMeasurement,stripeLength:this._measurementArrowStripeLength}},e=>this._updateGeometryAndViewMode(e),_),g(()=>({visible:this.visible,viewMode:this.viewMode}),e=>this._updateVisualElementVisibility(e),_),g(()=>({text:this._labelsText,visualizedMeasurement:this.actualVisualizedMeasurement}),e=>this._updateLabelText(e),_),g(()=>({visible:this.visible,viewMode:this.viewMode}),e=>this._updateLabelVisibility(e),_),g(()=>this._measurementArrowStripeLength,e=>this._updateSegmentStripeLength(e),_),t(()=>this._updateMessageBundle()),g(()=>this._parameters,({textBackgroundColor:e,textCalloutColor:t,textColor:n,translucentAccentColor:r,accentColor:i,contrastColor:a})=>{let{_segmentLabel:o,_verticalLabel:s,_horizontalLabel:c,_triangleVisualElement:l,_rightAngleQuad:u,_projectedGeodesicLine:d,_geodesicStartHint:f,_geodesicEndHint:p,_segmentVisualElement:m}=this;o.backgroundColor=e,o.calloutColor=t,o.textColor=n,s.backgroundColor=e,s.calloutColor=t,s.textColor=n,c.backgroundColor=e,c.calloutColor=t,c.textColor=n,l.color=r,u.color=r,d.color=r,f.color=r,p.color=r,m.color=i,m.contrastColor=a},v)]),this._updateMessageBundle()}destroy(){this._segmentVisualElement=l(this._segmentVisualElement),this._triangleVisualElement=l(this._triangleVisualElement),this._rightAngleQuad=l(this._rightAngleQuad),this._projectedGeodesicLine=l(this._projectedGeodesicLine),this._geodesicStartHint=l(this._geodesicStartHint),this._geodesicEndHint=l(this._geodesicEndHint),this._segmentLabel=l(this._segmentLabel),this._verticalLabel=l(this._verticalLabel),this._horizontalLabel=l(this._horizontalLabel),this.set(`view`,null)}_updateVisualElementVisibility({visible:e,viewMode:t}){if(this._segmentVisualElement.visible=!1,this._triangleVisualElement.visible=!1,this._rightAngleQuad.visible=!1,this._projectedGeodesicLine.visible=!1,this._geodesicStartHint.visible=!1,this._geodesicEndHint.visible=!1,e)switch(t){case 0:break;case 1:this._segmentVisualElement.visible=!0;break;case 2:this._segmentVisualElement.visible=!0,this._triangleVisualElement.visible=!0,this._rightAngleQuad.visible=!0;break;case 3:this._segmentVisualElement.visible=!0,this._projectedGeodesicLine.visible=!0,this._geodesicStartHint.visible=!0,this._geodesicEndHint.visible=!0}}_updateGeometryAndViewMode({view:e,camera:t,viewMode:n,elevationAlignedStartPoint:r,elevationAlignedEndPoint:i,orientation:a,visualizedMeasurement:o,stripeLength:s}){let c=e.renderCoordsHelper;if(c==null||r==null||i==null||r.equals(i))return;let l=this._startPosition,u=this._endPosition;c.toRenderCoords(r,l),c.toRenderCoords(i,u);let d=a===1?1:-1,f=d*(c.getAltitude(u)-c.getAltitude(l));f<0&&(l=this._endPosition,u=this._startPosition);let p=o===`geodesic`?new F(this._startPosition,this._endPosition,c.spatialReference):new I(this._startPosition,this._endPosition);switch(this._segmentVisualElement.geometry=p,this._updateSegmentStripeLength(s),n){case 1:this._updateSegment(p,a);break;case 2:this._updateSegmentAndTriangle({view:e,camera:t,segment:p,orientation:a,startPosition:l,endPosition:u,deltaSign:d,altitudeDelta:f});break;case 3:this._updateSegmentAndProjection({view:e,orientation:a,startPosition:l,endPosition:u})}}_updateSegment(e,t){this._segmentLabel.anchor=t===1?`top`:`bottom`,this._segmentLabel.geometry={type:`segment`,segment:e,sampleLocation:`center`}}_updateSegmentAndTriangle({view:{renderCoordsHelper:e},camera:t,segment:n,orientation:r,startPosition:i,endPosition:a,deltaSign:o,altitudeDelta:s}){let c=this._cornerPosition;e.worldUpAtPosition(i,c),E(c,c,o*Math.abs(s)),D(c,c,i),this._triangleVisualElement.geometry=[[[i[0],i[1],i[2]],[c[0],c[1],c[2]],[a[0],a[1],a[2]]]],this._rightAngleQuad.geometry={previous:i,center:c,next:a};let l=new I(i,c),u=new I(c,a),d=B(i,a,c,r,t);d&&(this._segmentLabel.anchor=d.segment,this._segmentLabel.geometry={type:`segment`,segment:n,sampleLocation:`center`},this._verticalLabel.geometry={type:`segment`,segment:l,sampleLocation:`center`},this._verticalLabel.anchor=d.vertical,this._horizontalLabel.geometry={type:`segment`,segment:u,sampleLocation:`center`},this._horizontalLabel.anchor=d.horizontal)}_updateSegmentAndProjection({view:{renderCoordsHelper:e},orientation:t,startPosition:n,endPosition:r}){e.setAltitude(this._startPositionAtSeaLevel,0,n),e.setAltitude(this._endPositionAtSeaLevel,0,r);let i=new F(this._startPositionAtSeaLevel,this._endPositionAtSeaLevel,e.spatialReference);this._projectedGeodesicLine.setGeometryFromSegment(i),this._geodesicStartHint.setGeometryFromSegment(new I(this._startPositionAtSeaLevel,n)),this._geodesicEndHint.setGeometryFromSegment(new I(this._endPositionAtSeaLevel,r)),this._segmentLabel.geometry={type:`segment`,segment:i,sampleLocation:`center`},this._segmentLabel.anchor=t===1?`top`:`bottom`}_updateLabelText({text:e,visualizedMeasurement:t}){e==null?(this._segmentLabel.text=null,this._horizontalLabel.text=null,this._verticalLabel.text=null):(this._segmentLabel.text=t===`euclidean`?e.directDistance:e.horizontalDistance,this._horizontalLabel.text=e.horizontalDistance,this._verticalLabel.text=e.verticalDistance),this.notifyChange(`labels`)}_updateLabelVisibility({visible:e,viewMode:t}){let n=this._segmentLabel,r=this._horizontalLabel,i=this._verticalLabel;if(n.visible=!1,r.visible=!1,i.visible=!1,e)switch(t){case 1:n.visible=!0;break;case 2:n.visible=!0,r.visible=!0,i.visible=!0;break;case 3:n.visible=!0}}get _labelsText(){if(this.destroyed)return null;let e=this.messages,t=this.analysisView.result;if(t==null||e==null)return null;let{directDistance:n,horizontalDistance:r,verticalDistance:i}=t,a=this.analysisView.unit,o=e=>({directDistance:``,horizontalDistance:``,verticalDistance:``,...e});switch(a){case`metric`:return o({directDistance:n&&h(e,n),horizontalDistance:r&&h(e,r),verticalDistance:i&&m(e,i)});case`imperial`:return o({directDistance:n&&p(e,n),horizontalDistance:r&&p(e,r),verticalDistance:i&&f(e,i)});default:return o({directDistance:n&&d(e,n,a),horizontalDistance:r&&d(e,r,a),verticalDistance:i&&d(e,i,a)})}}_updateSegmentStripeLength(e){let t=this._segmentVisualElement;e==null?t.stripesEnabled=!1:(t.stripeLength=e,t.stripesEnabled=!0)}get _actualVisualElementsOrientation(){if(this._triangleOrientationOverride!=null)return this._triangleOrientationOverride;let e=this.visualElementOrientation;return e===0?this.view.state.camera.aboveGround?1:2:e}_requiresGeodesicGuideAt(e){let t=this.view;if(!t?.state)return!1;let n=t.state.camera,r=t.renderCoordsHelper;if(!r)return!1;let i=n.computeScreenPixelSizeAt(e);return r.getAltitude(e)/i>=10}get _measurementArrowStripeLength(){let{result:e,unit:t}=this.analysisView;if(e==null)return null;let n=null,r=e.directDistance;switch(t){case`metric`:n=r&&u(r,`meters`);break;case`imperial`:n=r&&u(r,x(r.value,r.unit));break;default:n=r&&u(r,t)}return n==null?null:s(n.value/30)*S(1,n.unit,`meters`)}_updateMessageBundle(){this.loadingMessages=!0,n(`esri/core/t9n/Units`).then(e=>{this.messages=e}).finally(()=>{this.loadingMessages=!1})}get testData(){}};e([C()],z.prototype,`_parameters`,null),e([C()],z.prototype,`_triangleOrientationOverride`,void 0),e([C()],z.prototype,`messages`,void 0),e([C()],z.prototype,`view`,void 0),e([C()],z.prototype,`analysis`,void 0),e([C()],z.prototype,`analysisView`,void 0),e([C()],z.prototype,`loadingMessages`,void 0),e([C()],z.prototype,`visible`,null),e([C()],z.prototype,`viewMode`,null),e([C()],z.prototype,`actualVisualizedMeasurement`,null),e([C()],z.prototype,`visualElementOrientation`,void 0),e([C()],z.prototype,`triangleCollapseRatioThreshold`,void 0),e([C()],z.prototype,`allowVisualElementsOrientationChange`,null),e([C()],z.prototype,`labels`,null),e([C()],z.prototype,`_labelsText`,null),e([C()],z.prototype,`_actualVisualElementsOrientation`,null),e([C()],z.prototype,`_measurementArrowStripeLength`,null),z=e([w(`esri.views.3d.analysis.DirectLineMeasurement.DirectLineMeasurementVisualization`)],z);function B(e,t,n,r,i){let a=k(e,n,i,W),o=k(e,t,i,G);if(a==null||o==null)return null;let s=i.projectToRenderScreen(n,H),c=i.projectToRenderScreen(t,U),l={segment:`bottom`,horizontal:`top`,vertical:s==null||c==null||s[0]<c[0]?`left`:`right`};if(T(a,o)>=V)l.segment=Math.sign(a[1])===Math.sign(o[1])?j(l.vertical):l.vertical;else{let e=K;k(n,t,i,e),T(e,o)>=V&&(l.segment=Math.sign(e[0])===Math.sign(o[0])?j(l.horizontal):l.horizontal)}if(r===2){let e=e=>e===`top`?`bottom`:`top`;l.segment=e(l.segment),l.horizontal=e(l.horizontal),l.vertical=e(l.vertical)}return l}const V=Math.cos(c(12)),H=b(),U=b(),W=y(),G=y(),K=y();export{z as DirectLineMeasurementVisualization};
2
+ import{__decorate as e}from"tslib";import{onLocaleChange as t,fetchMessageBundle as n}from"../../../../intl.js";import r from"../../../../core/Accessor.js";import{multiplyOpacityToUnitRGBA as i,getContrast as a,multiplyOpacity as o}from"../../../../core/colorUtils.js";import"../../../../core/has.js";import{nextHighestPowerOfTen as s,deg2rad as c}from"../../../../core/mathUtils.js";import{destroyMaybe as l}from"../../../../core/maybe.js";import{toUnit as u}from"../../../../core/quantity.js";import{formatDecimal as d,formatImperialVerticalLength as f,formatImperialLength as p,formatMetricVerticalLength as m,formatMetricLength as h}from"../../../../core/quantityFormatUtils.js";import{watch as g,syncAndInitial as _,initial as v}from"../../../../core/reactiveUtils.js";import{createRenderScreenPointArray as y,createRenderScreenPointArray3 as b}from"../../../../core/screenUtils.js";import{adaptiveImperialLengthUnit as x,convertUnit as S}from"../../../../core/units.js";import{property as C,subclass as w}from"../../../../core/accessorSupport/decorators.js";import{dot as T}from"../../../../core/libs/gl-matrix-2/math/vec2.js";import{scale as E,add as D}from"../../../../core/libs/gl-matrix-2/math/vec3.js";import{create as O}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{renderScreenSpaceTangent as k}from"../../interactive/support/viewUtils.js";import{LabelVisualElement as A,mirrorPosition as j}from"../../interactive/visualElements/LabelVisualElement.js";import{LineVisualElement as M}from"../../interactive/visualElements/LineVisualElement.js";import{MeasurementArrowVisualElement as N}from"../../interactive/visualElements/MeasurementArrowVisualElement.js";import{RightAngleQuadVisualElement as P}from"../../interactive/visualElements/RightAngleQuadVisualElement.js";import{GeodesicSegment as F,EuclideanSegment as I}from"../../interactive/visualElements/support/Segment.js";import{createStipplePatternSimple as L}from"../../webgl-engine/materials/lineStippleUtils.js";import{geodeticDistanceThresholdMeters as R}from"../../../support/measurementWorkerUtils.js";let z=class extends r{get _parameters(){let{accentColor:e,textColor:t}=this.view.effectiveTheme,n=e.toUnitRGBA(),r=i(e,.75),s=a(e).toUnitRGBA(),c=a(t,160);return{accentColor:n,contrastColor:s,translucentAccentColor:r,triangleLineWidth:3,geodesicProjectionLineWidth:2,guideLineWidth:2,guideStippleLengthPixels:3,directLabelFontSize:16,horizontalLabelFontSize:12,verticalLabelFontSize:12,textColor:t,textBackgroundColor:o(c,.6),textCalloutColor:o(c,.5)}}get visible(){return this.analysisView.visible}get viewMode(){let{elevationAlignedStartPoint:e,elevationAlignedEndPoint:t}=this.analysisView;if(e==null||t==null||e.equals(t))return 0;let n=this.analysisView.result;if(n==null)return 1;if(this.actualVisualizedMeasurement===`geodesic`)return this._requiresGeodesicGuideAt(this._startPosition)||this._requiresGeodesicGuideAt(this._endPosition)?3:1;let{verticalDistance:r,horizontalDistance:i}=n,a=u(r,`meters`).value,o=u(i,`meters`).value;return Math.min(a/o,o/a)<this.triangleCollapseRatioThreshold?1:2}get actualVisualizedMeasurement(){let{measurementMode:e,result:t}=this.analysisView;switch(e){case 0:return t!=null&&u(t.horizontalDistance,`meters`).value>R?`geodesic`:`euclidean`;case 1:return`euclidean`;case 2:return`geodesic`}}get allowVisualElementsOrientationChange(){return this._triangleOrientationOverride==null}set allowVisualElementsOrientationChange(e){this._triangleOrientationOverride==null!==e&&(this._triangleOrientationOverride=this._triangleOrientationOverride==null?this._actualVisualElementsOrientation:null)}get labels(){return this.actualVisualizedMeasurement===`geodesic`?{direct:null,horizontal:this._segmentLabel,vertical:this._verticalLabel}:{direct:this._segmentLabel,horizontal:this._horizontalLabel,vertical:this._verticalLabel}}constructor(e){super(e),this._segmentVisualElement=null,this._triangleVisualElement=null,this._rightAngleQuad=null,this._projectedGeodesicLine=null,this._geodesicStartHint=null,this._geodesicEndHint=null,this._segmentLabel=null,this._verticalLabel=null,this._horizontalLabel=null,this._startPosition=O(),this._endPosition=O(),this._cornerPosition=O(),this._startPositionAtSeaLevel=O(),this._endPositionAtSeaLevel=O(),this._triangleOrientationOverride=null,this.messages=null,this.loadingMessages=!0,this.visualElementOrientation=0,this.triangleCollapseRatioThreshold=.03}initialize(){let e={attached:!0,view:this.view,isDecoration:!0},{guideLineWidth:n,guideStippleLengthPixels:r,triangleLineWidth:i,geodesicProjectionLineWidth:a,directLabelFontSize:o,verticalLabelFontSize:s,horizontalLabelFontSize:c}=this._parameters;this._segmentVisualElement=new N({...e,geometry:null,renderOccluded:4,transparentRenderOrder:2}),this._triangleVisualElement=new M({...e,width:i,renderOccluded:4,transparentRenderOrder:3}),this._rightAngleQuad=new P({...e,renderOccluded:4,transparentRenderOrder:4});let l={...e,polygonOffset:3,renderOccluded:4,transparentRenderOrder:1};this._projectedGeodesicLine=new M({...l,width:a,stipplePattern:L(r)}),this._geodesicStartHint=new M({...l,width:n,stipplePattern:L(r)}),this._geodesicEndHint=new M({...l,width:n,stipplePattern:L(r)}),this._segmentLabel=new A({...e,fontSize:o}),this._verticalLabel=new A({...e,fontSize:s}),this._horizontalLabel=new A({...e,fontSize:c}),this.addHandles([g(()=>{let{elevationAlignedStartPoint:e,elevationAlignedEndPoint:t}=this.analysisView,n=this.view;return{view:n,camera:n.state.camera,viewMode:this.viewMode,elevationAlignedStartPoint:e,elevationAlignedEndPoint:t,orientation:this._actualVisualElementsOrientation,visualizedMeasurement:this.actualVisualizedMeasurement,stripeLength:this._measurementArrowStripeLength}},e=>this._updateGeometryAndViewMode(e),_),g(()=>({visible:this.visible,viewMode:this.viewMode}),e=>this._updateVisualElementVisibility(e),_),g(()=>({text:this._labelsText,visualizedMeasurement:this.actualVisualizedMeasurement}),e=>this._updateLabelText(e),_),g(()=>({visible:this.visible,viewMode:this.viewMode}),e=>this._updateLabelVisibility(e),_),g(()=>this._measurementArrowStripeLength,e=>this._updateSegmentStripeLength(e),_),t(()=>this._updateMessageBundle()),g(()=>this._parameters,({textBackgroundColor:e,textCalloutColor:t,textColor:n,translucentAccentColor:r,accentColor:i,contrastColor:a})=>{let{_segmentLabel:o,_verticalLabel:s,_horizontalLabel:c,_triangleVisualElement:l,_rightAngleQuad:u,_projectedGeodesicLine:d,_geodesicStartHint:f,_geodesicEndHint:p,_segmentVisualElement:m}=this;o.backgroundColor=e,o.calloutColor=t,o.textColor=n,s.backgroundColor=e,s.calloutColor=t,s.textColor=n,c.backgroundColor=e,c.calloutColor=t,c.textColor=n,l.color=r,u.color=r,d.color=r,f.color=r,p.color=r,m.color=i,m.contrastColor=a},v)]),this._updateMessageBundle()}destroy(){this._segmentVisualElement=l(this._segmentVisualElement),this._triangleVisualElement=l(this._triangleVisualElement),this._rightAngleQuad=l(this._rightAngleQuad),this._projectedGeodesicLine=l(this._projectedGeodesicLine),this._geodesicStartHint=l(this._geodesicStartHint),this._geodesicEndHint=l(this._geodesicEndHint),this._segmentLabel=l(this._segmentLabel),this._verticalLabel=l(this._verticalLabel),this._horizontalLabel=l(this._horizontalLabel),this.set(`view`,null)}_updateVisualElementVisibility({visible:e,viewMode:t}){if(this._segmentVisualElement.visible=!1,this._triangleVisualElement.visible=!1,this._rightAngleQuad.visible=!1,this._projectedGeodesicLine.visible=!1,this._geodesicStartHint.visible=!1,this._geodesicEndHint.visible=!1,e)switch(t){case 0:break;case 1:this._segmentVisualElement.visible=!0;break;case 2:this._segmentVisualElement.visible=!0,this._triangleVisualElement.visible=!0,this._rightAngleQuad.visible=!0;break;case 3:this._segmentVisualElement.visible=!0,this._projectedGeodesicLine.visible=!0,this._geodesicStartHint.visible=!0,this._geodesicEndHint.visible=!0}}_updateGeometryAndViewMode({view:e,camera:t,viewMode:n,elevationAlignedStartPoint:r,elevationAlignedEndPoint:i,orientation:a,visualizedMeasurement:o,stripeLength:s}){let c=e.renderCoordsHelper;if(r==null||i==null||r.equals(i))return;let l=this._startPosition,u=this._endPosition;c.toRenderCoords(r,l),c.toRenderCoords(i,u);let d=a===1?1:-1,f=d*(c.getAltitude(u)-c.getAltitude(l));f<0&&(l=this._endPosition,u=this._startPosition);let p=o===`geodesic`?new F(this._startPosition,this._endPosition,c.spatialReference):new I(this._startPosition,this._endPosition);switch(this._segmentVisualElement.geometry=p,this._updateSegmentStripeLength(s),n){case 1:this._updateSegment(p,a);break;case 2:this._updateSegmentAndTriangle({view:e,camera:t,segment:p,orientation:a,startPosition:l,endPosition:u,deltaSign:d,altitudeDelta:f});break;case 3:this._updateSegmentAndProjection({view:e,orientation:a,startPosition:l,endPosition:u})}}_updateSegment(e,t){this._segmentLabel.anchor=t===1?`top`:`bottom`,this._segmentLabel.geometry={type:`segment`,segment:e,sampleLocation:`center`}}_updateSegmentAndTriangle({view:{renderCoordsHelper:e},camera:t,segment:n,orientation:r,startPosition:i,endPosition:a,deltaSign:o,altitudeDelta:s}){let c=this._cornerPosition;e.worldUpAtPosition(i,c),E(c,c,o*Math.abs(s)),D(c,c,i),this._triangleVisualElement.geometry=[[[i[0],i[1],i[2]],[c[0],c[1],c[2]],[a[0],a[1],a[2]]]],this._rightAngleQuad.geometry={previous:i,center:c,next:a};let l=new I(i,c),u=new I(c,a),d=B(i,a,c,r,t);d&&(this._segmentLabel.anchor=d.segment,this._segmentLabel.geometry={type:`segment`,segment:n,sampleLocation:`center`},this._verticalLabel.geometry={type:`segment`,segment:l,sampleLocation:`center`},this._verticalLabel.anchor=d.vertical,this._horizontalLabel.geometry={type:`segment`,segment:u,sampleLocation:`center`},this._horizontalLabel.anchor=d.horizontal)}_updateSegmentAndProjection({view:{renderCoordsHelper:e},orientation:t,startPosition:n,endPosition:r}){e.setAltitude(this._startPositionAtSeaLevel,0,n),e.setAltitude(this._endPositionAtSeaLevel,0,r);let i=new F(this._startPositionAtSeaLevel,this._endPositionAtSeaLevel,e.spatialReference);this._projectedGeodesicLine.setGeometryFromSegment(i),this._geodesicStartHint.setGeometryFromSegment(new I(this._startPositionAtSeaLevel,n)),this._geodesicEndHint.setGeometryFromSegment(new I(this._endPositionAtSeaLevel,r)),this._segmentLabel.geometry={type:`segment`,segment:i,sampleLocation:`center`},this._segmentLabel.anchor=t===1?`top`:`bottom`}_updateLabelText({text:e,visualizedMeasurement:t}){e==null?(this._segmentLabel.text=null,this._horizontalLabel.text=null,this._verticalLabel.text=null):(this._segmentLabel.text=t===`euclidean`?e.directDistance:e.horizontalDistance,this._horizontalLabel.text=e.horizontalDistance,this._verticalLabel.text=e.verticalDistance),this.notifyChange(`labels`)}_updateLabelVisibility({visible:e,viewMode:t}){let n=this._segmentLabel,r=this._horizontalLabel,i=this._verticalLabel;if(n.visible=!1,r.visible=!1,i.visible=!1,e)switch(t){case 1:n.visible=!0;break;case 2:n.visible=!0,r.visible=!0,i.visible=!0;break;case 3:n.visible=!0}}get _labelsText(){if(this.destroyed)return null;let e=this.messages,t=this.analysisView.result;if(t==null||e==null)return null;let{directDistance:n,horizontalDistance:r,verticalDistance:i}=t,a=this.analysisView.unit,o=e=>({directDistance:``,horizontalDistance:``,verticalDistance:``,...e});switch(a){case`metric`:return o({directDistance:n&&h(e,n),horizontalDistance:r&&h(e,r),verticalDistance:i&&m(e,i)});case`imperial`:return o({directDistance:n&&p(e,n),horizontalDistance:r&&p(e,r),verticalDistance:i&&f(e,i)});default:return o({directDistance:n&&d(e,n,a),horizontalDistance:r&&d(e,r,a),verticalDistance:i&&d(e,i,a)})}}_updateSegmentStripeLength(e){let t=this._segmentVisualElement;e==null?t.stripesEnabled=!1:(t.stripeLength=e,t.stripesEnabled=!0)}get _actualVisualElementsOrientation(){if(this._triangleOrientationOverride!=null)return this._triangleOrientationOverride;let e=this.visualElementOrientation;return e===0?this.view.state.camera.aboveGround?1:2:e}_requiresGeodesicGuideAt(e){let t=this.view;if(!t?.state)return!1;let n=t.state.camera,r=t.renderCoordsHelper,i=n.computeScreenPixelSizeAt(e);return r.getAltitude(e)/i>=10}get _measurementArrowStripeLength(){let{result:e,unit:t}=this.analysisView;if(e==null)return null;let n=null,r=e.directDistance;switch(t){case`metric`:n=r&&u(r,`meters`);break;case`imperial`:n=r&&u(r,x(r.value,r.unit));break;default:n=r&&u(r,t)}return n==null?null:s(n.value/30)*S(1,n.unit,`meters`)}_updateMessageBundle(){this.loadingMessages=!0,n(`esri/core/t9n/Units`).then(e=>{this.messages=e}).finally(()=>{this.loadingMessages=!1})}get testData(){}};e([C()],z.prototype,`_parameters`,null),e([C()],z.prototype,`_triangleOrientationOverride`,void 0),e([C()],z.prototype,`messages`,void 0),e([C()],z.prototype,`view`,void 0),e([C()],z.prototype,`analysis`,void 0),e([C()],z.prototype,`analysisView`,void 0),e([C()],z.prototype,`loadingMessages`,void 0),e([C()],z.prototype,`visible`,null),e([C()],z.prototype,`viewMode`,null),e([C()],z.prototype,`actualVisualizedMeasurement`,null),e([C()],z.prototype,`visualElementOrientation`,void 0),e([C()],z.prototype,`triangleCollapseRatioThreshold`,void 0),e([C()],z.prototype,`allowVisualElementsOrientationChange`,null),e([C()],z.prototype,`labels`,null),e([C()],z.prototype,`_labelsText`,null),e([C()],z.prototype,`_actualVisualElementsOrientation`,null),e([C()],z.prototype,`_measurementArrowStripeLength`,null),z=e([w(`esri.views.3d.analysis.DirectLineMeasurement.DirectLineMeasurementVisualization`)],z);function B(e,t,n,r,i){let a=k(e,n,i,W),o=k(e,t,i,G);if(a==null||o==null)return null;let s=i.projectToRenderScreen(n,H),c=i.projectToRenderScreen(t,U),l={segment:`bottom`,horizontal:`top`,vertical:s==null||c==null||s[0]<c[0]?`left`:`right`};if(T(a,o)>=V)l.segment=Math.sign(a[1])===Math.sign(o[1])?j(l.vertical):l.vertical;else{let e=K;k(n,t,i,e),T(e,o)>=V&&(l.segment=Math.sign(e[0])===Math.sign(o[0])?j(l.horizontal):l.horizontal)}if(r===2){let e=e=>e===`top`?`bottom`:`top`;l.segment=e(l.segment),l.horizontal=e(l.horizontal),l.vertical=e(l.vertical)}return l}const V=Math.cos(c(12)),H=b(),U=b(),W=y(),G=y(),K=y();export{z as DirectLineMeasurementVisualization};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import{dedupeResult as t}from"../../../../core/dedupeResult.js";import{isIterable as n}from"../../../../core/iteratorUtils.js";import{equalsShallow as r}from"../../../../core/lang.js";import{equalsMaybe as i}from"../../../../core/maybe.js";import{notDeepEqual as a}from"../../../../core/object.js";import{watch as o,sync as s}from"../../../../core/reactiveUtils.js";import{getMetersPerVerticalUnitForSR as c}from"../../../../core/units.js";import{property as l,subclass as u}from"../../../../core/accessorSupport/decorators.js";import{set as d}from"../../../../core/libs/gl-matrix-2/math/vec3.js";import{create as f}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{getReferenceEllipsoid as p}from"../../../../geometry/ellipsoidUtils.js";import{create as m,fromPoints as h}from"../../../../geometry/support/ray.js";import{GeometryDescriptor as g}from"../../../../layers/support/GeometryDescriptor.js";import{externalToInternalIntersectOptions as _,testGraphicUidFilter as v}from"../../support/hitTest.js";import{Intersector as y}from"../../webgl-engine/lib/Intersector.js";import{toGraphic as b}from"../../webgl-engine/lib/intersectorUtilsConversions.js";import{getVisibleLayerIds as x}from"../../../analysis/ElevationProfile/elevationProfileLayerUtils.js";import{ElevationProfileLineComputation as S}from"../../../analysis/ElevationProfile/ElevationProfileLineComputation.js";let C=class extends S{constructor(){super(...arguments),this.type=`scene`,this.numSamplesForPreview=50,this.numSamplesPerChunk=25,this._getStableElevationDependencies=t(()=>{let e=this._view;return e?.ready?{view:e,stationary:e.stationary,geometry:this.controller?.analysis.geometry,visibleLayerIds:this._getStableLayerIds(),maxIntersectionDistance:this._maxIntersectionDistance,intersectOptions:this._getStableIntersectOptions(),spatialReference:this._getStableSpatialReference()}:null},r),this._getStableSpatialReference=t(()=>this._view?.spatialReference,i),this._getStableLayerIds=t(()=>x(this._view),r),this._getStableIntersectOptions=t(()=>{let e=this._view;if(!e?.ready)return{};let{include:t,exclude:r}=this.profile;return _(e,{include:t,exclude:[...this._pointCloudLayers,...n(r)?r:r?[r]:[]]})},(e,t)=>!a(e,t)),this._getStablePointCloudLayers=t(()=>{let e=this._view;return e?.ready?e.allLayerViews.toArray().filter(e=>e.layer?.type===`point-cloud`).map(e=>e.layer):[]},r),this._vecA=f(),this._vecB=f(),this._ray=m()}get minDemResolution(){let e=this._view;if(!e?.ready)return null;let t=e.pointsOfInterest?.focus?.worldUnitsPerContentPixel;return t==null?null:t*c(e.spatialReference)}initialize(){let e=()=>this.onInvalidate(this);return this.addHandles([o(()=>this._queryElevationDependencies,e,s),this.controller.onElevationChange(e)])}async queryElevation(e,{noDataValue:t,signal:n}){let r=this._queryElevationDependencies;if(r==null)throw Error(`${this.declaredClass}: no dependencies`);let i=this._intersector;if(i==null)throw Error(`${this.declaredClass}: no view`);let{intersectOptions:a,view:o,spatialReference:s}=r,c=o.renderCoordsHelper,l=o.sceneIntersectionHelper,u=this._vecA,f=this._vecA,p=this._vecB,m=this._ray;if(!s)return{geometry:e,noDataValue:t};let _=await g.fromGeometry(e).project(s,n);if(!_)return{geometry:e,noDataValue:t};let v=_.coordinates,y=v.length;for(let e=0;e<y;++e){let n=v[e];d(p,n.x,n.y,n.z??0),c.toRenderCoords(p,s,p),c.setAltitude(u,2e5,p);let o=h(u,p,m);l.computeIntersection(o,i,!0,a);let g=w(r,i.results.all);g?(g.getIntersectionPoint(f),c.fromRenderCoords(f,f,s),n.z=f[2]):n.z=t}return{geometry:_.export(),noDataValue:t}}get _queryElevationDependencies(){return this._getStableElevationDependencies()}get _pointCloudLayers(){return this._getStablePointCloudLayers()}get _view(){let e=this.controller.view;return e.type===`3d`?e:null}get _maxIntersectionDistance(){let e=this._view;return!e?.ready||!e.renderCoordsHelper?1/0:p(e.spatialReference).radius/e.renderCoordsHelper.unitInMeters}get _intersector(){let e=this._view;if(!e?.ready)return null;let t=new y(e.state.viewingMode),n=t.options;return n.hud=!1,n.invisibleTerrain=!1,n.backfacesTerrain=!1,n.selectionMode=!1,n.store=2,t}};e([l({readOnly:!0})],C.prototype,`minDemResolution`,null),e([l()],C.prototype,`_queryElevationDependencies`,null),e([l()],C.prototype,`_pointCloudLayers`,null),e([l()],C.prototype,`_view`,null),e([l()],C.prototype,`_maxIntersectionDistance`,null),e([l()],C.prototype,`_intersector`,null),C=e([u(`esri.views.3d.analysis.ElevationProfile.ElevationProfileLineSceneComputation`)],C);function w({intersectOptions:e,maxIntersectionDistance:t,view:n},r){let i=e.graphics,a=!!(i?.include||i?.exclude);for(let e of r)if(e.withinDistance(t)){if(a){let t=b(e,n);if(t!=null&&!v(i,t))continue}return e}return null}export{C as ElevationProfileLineSceneComputation};
2
+ import{__decorate as e}from"tslib";import{dedupeResult as t}from"../../../../core/dedupeResult.js";import{isIterable as n}from"../../../../core/iteratorUtils.js";import{equalsShallow as r}from"../../../../core/lang.js";import{equalsMaybe as i}from"../../../../core/maybe.js";import{notDeepEqual as a}from"../../../../core/object.js";import{watch as o,sync as s}from"../../../../core/reactiveUtils.js";import{getMetersPerVerticalUnitForSR as c}from"../../../../core/units.js";import{property as l,subclass as u}from"../../../../core/accessorSupport/decorators.js";import{set as d}from"../../../../core/libs/gl-matrix-2/math/vec3.js";import{create as f}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{getReferenceEllipsoid as p}from"../../../../geometry/ellipsoidUtils.js";import{create as m,fromPoints as h}from"../../../../geometry/support/ray.js";import{GeometryDescriptor as g}from"../../../../layers/support/GeometryDescriptor.js";import{externalToInternalIntersectOptions as _,testGraphicUidFilter as v}from"../../support/hitTest.js";import{Intersector as y}from"../../webgl-engine/lib/Intersector.js";import{toGraphic as b}from"../../webgl-engine/lib/intersectorUtilsConversions.js";import{getVisibleLayerIds as x}from"../../../analysis/ElevationProfile/elevationProfileLayerUtils.js";import{ElevationProfileLineComputation as S}from"../../../analysis/ElevationProfile/ElevationProfileLineComputation.js";let C=class extends S{constructor(){super(...arguments),this.type=`scene`,this.numSamplesForPreview=50,this.numSamplesPerChunk=25,this._getStableElevationDependencies=t(()=>{let e=this._view;return e?.ready?{view:e,stationary:e.stationary,geometry:this.controller?.analysis.geometry,visibleLayerIds:this._getStableLayerIds(),maxIntersectionDistance:this._maxIntersectionDistance,intersectOptions:this._getStableIntersectOptions(),spatialReference:this._getStableSpatialReference()}:null},r),this._getStableSpatialReference=t(()=>this._view?.spatialReference,i),this._getStableLayerIds=t(()=>x(this._view),r),this._getStableIntersectOptions=t(()=>{let e=this._view;if(!e?.ready)return{};let{include:t,exclude:r}=this.profile;return _(e,{include:t,exclude:[...this._pointCloudLayers,...n(r)?r:r?[r]:[]]})},(e,t)=>!a(e,t)),this._getStablePointCloudLayers=t(()=>{let e=this._view;return e?.ready?e.allLayerViews.toArray().filter(e=>e.layer?.type===`point-cloud`).map(e=>e.layer):[]},r),this._vecA=f(),this._vecB=f(),this._ray=m()}get minDemResolution(){let e=this._view;if(!e?.ready)return null;let t=e.pointsOfInterest?.focus?.worldUnitsPerContentPixel;return t==null?null:t*c(e.spatialReference)}initialize(){let e=()=>this.onInvalidate(this);return this.addHandles([o(()=>this._queryElevationDependencies,e,s),this.controller.onElevationChange(e)])}async queryElevation(e,{noDataValue:t,signal:n}){let r=this._queryElevationDependencies;if(r==null)throw Error(`${this.declaredClass}: no dependencies`);let i=this._intersector;if(i==null)throw Error(`${this.declaredClass}: no view`);let{intersectOptions:a,view:o,spatialReference:s}=r,c=o.renderCoordsHelper,l=o.sceneIntersectionHelper,u=this._vecA,f=this._vecA,p=this._vecB,m=this._ray;if(!s)return{geometry:e,noDataValue:t};let _=await g.fromGeometry(e).project(s,n);if(!_)return{geometry:e,noDataValue:t};let v=_.coordinates,y=v.length;for(let e=0;e<y;++e){let n=v[e];d(p,n.x,n.y,n.z??0),c.toRenderCoords(p,s,p),c.setAltitude(u,2e5,p);let o=h(u,p,m);l.computeIntersection(o,i,!0,a);let g=w(r,i.results.all);g?(g.getIntersectionPoint(f),c.fromRenderCoords(f,f,s),n.z=f[2]):n.z=t}return{geometry:_.export(),noDataValue:t}}get _queryElevationDependencies(){return this._getStableElevationDependencies()}get _pointCloudLayers(){return this._getStablePointCloudLayers()}get _view(){let e=this.controller.view;return e.type===`3d`?e:null}get _maxIntersectionDistance(){let e=this._view;return e?.ready?p(e.spatialReference).radius/e.renderCoordsHelper.unitInMeters:1/0}get _intersector(){let e=this._view;if(!e?.ready)return null;let t=new y(e.state.viewingMode),n=t.options;return n.hud=!1,n.invisibleTerrain=!1,n.backfacesTerrain=!1,n.selectionMode=!1,n.store=2,t}};e([l({readOnly:!0})],C.prototype,`minDemResolution`,null),e([l()],C.prototype,`_queryElevationDependencies`,null),e([l()],C.prototype,`_pointCloudLayers`,null),e([l()],C.prototype,`_view`,null),e([l()],C.prototype,`_maxIntersectionDistance`,null),e([l()],C.prototype,`_intersector`,null),C=e([u(`esri.views.3d.analysis.ElevationProfile.ElevationProfileLineSceneComputation`)],C);function w({intersectOptions:e,maxIntersectionDistance:t,view:n},r){let i=e.graphics,a=!!(i?.include||i?.exclude);for(let e of r)if(e.withinDistance(t)){if(a){let t=b(e,n);if(t!=null&&!v(i,t))continue}return e}return null}export{C as ElevationProfileLineSceneComputation};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import{updatePointsFromFeatureReference as t,getFeatureId as n}from"../../../../analysis/featureReferenceUtils.js";import{createTask as r}from"../../../../core/asyncUtils.js";import{EventedAccessor as i}from"../../../../core/Evented.js";import a from"../../../../core/Handles.js";import{handlesGroup as o,makeHandle as s}from"../../../../core/handleUtils.js";import c from"../../../../core/Logger.js";import{abortMaybe as l}from"../../../../core/maybe.js";import{ignoreAbortErrors as u}from"../../../../core/promiseUtils.js";import{initial as d,on as f}from"../../../../core/reactiveUtils.js";import{property as p,subclass as m}from"../../../../core/accessorSupport/decorators.js";import{copy as h,subtract as g,normalize as _,scale as v,add as y,dist as b,sub as x}from"../../../../core/libs/gl-matrix-2/math/vec3.js";import{create as S}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{UpdatingHandles as C}from"../../../../core/support/UpdatingHandles.js";import w from"../../../../geometry/Point.js";import{projectOrLoad as T}from"../../../../geometry/projectionUtils.js";import{intersectsSegment as E}from"../../../../geometry/support/aaBoundingBox.js";import{empty as D,intersectsSegment as O}from"../../../../geometry/support/aaBoundingRect.js";import{create as k,fromPoints as A}from"../../../../geometry/support/ray.js";import{zValueInAbsoluteHeightMode as j}from"../../../../support/elevationInfoUtils.js";import M from"../LineOfSightAnalysisResult.js";import{LineOfSightComputation as N}from"./LineOfSightComputation.js";import{LineOfSightRayIntersector as P}from"./LineOfSightRayIntersector.js";import{logFailedGeometryProjectionError as F}from"../support/projectionUtils.js";import{projectElevationUpdateExtent as I,containsElevationUpdatePoint as L}from"../../support/elevationUpdateExtentUtils.js";import{toGraphic as R}from"../../webgl-engine/lib/intersectorUtilsConversions.js";import{ImmediateTask as z,TaskPriority as B}from"../../../support/Scheduler.js";let V=class extends i{constructor(e){super(e),this.updateOnCameraChange=!0,this._observerGroundOffsetRenderSpace=0,this._effectiveObserverElevationMode=`absolute-height`,this._observerFeatureId=null,this._updatingHandles=new C,this._frameTask=z,this._computationHandles=new a,this._externalObserverUpdate=!0}initialize(){let e=this.view.resourceController?.scheduler;this._frameTask=e?e.registerTask(B.LINE_OF_SIGHT_TOOL):z,this._intersector=new P({view:this.view}),this.addHandles([this._connectObserver(),this._connectComputations(),this._connectTargets()])}destroy(){this._computationHandles.destroy(),this._computations.removeAll(),this._updatingHandles.destroy()}get updating(){return this._frameTask.updating||this._updatingHandles.updating}get priority(){return this._frameTask.priority}set priority(e){this._frameTask.priority=e}get _computations(){return this.analysisViewData.computations}get _elevationAlignedObserverPositionRenderSpace(){return this.analysisViewData.observerEngineLocation}set _elevationAlignedObserverPositionRenderSpace(e){this.analysisViewData.observerEngineLocation=e}get _screenPixelSize(){return this.view.state.camera.computeScreenPixelSizeAt(this._elevationAlignedObserverPositionRenderSpace)}_computeResult(e){let t=e.computation,{inputPoints:n,computationResult:r}=t,{observerAdjusted:i,targetAdjusted:a}=n,{start:o,end:s}=r;h(o,i),h(s,a),this._canCompute(t)?this._computeIntersection(e):W(e),t.notifyResultChanged(),this.emit(`result-changed`,{target:e.computation.target,result:t.result})}_adjustStartEndPositions(e){let{view:n}=this,{inputPoints:r}=e,{observer:i,target:a,observerAdjusted:o,targetAdjusted:s}=r;h(o,i),h(s,a),t(n,this._intersector.intersector,r);let{observerSurfaceNormal:c,targetSurfaceNormal:l}=r,u=this._screenPixelSize,d=K;c==null?g(d,s,o):h(d,c);let f=u;_(d,d),v(d,d,Math.min(f,1)),y(o,o,d),l==null?g(d,o,s):h(d,l);let p=n.state.camera.computeScreenPixelSizeAt(s);_(d,d),v(d,d,Math.min(p,1)),y(s,s,d)}_computeIntersection({computation:e,interpolationInfo:t}){let{view:n}=this,{sceneIntersectionHelper:r,renderCoordsHelper:i}=n;if(r==null)return;let a=this._intersector.intersector,{computationResult:o,inputPoints:s}=e,{observer:c,target:l}=s,{start:u,end:d}=o,f=A(u,d,q);a.options.store=0,r.intersectToolIntersectorRay(f,a);let p=a.results.min,m=o.intersection,g=K,_=p!=null&&p.getIntersectionPoint(m),v=!0;if(_){h(t.originalIntersection,m),h(t.originalObserver,u),h(t.originalTarget,d),i.fromRenderCoords(m,g,n.spatialReference);let e=1-b(d,l)/b(u,l);v=b(c,m)>=e*b(c,l)}let y=new w(g,n.spatialReference);{let{result:t,target:r}=e;t==null?e.result=new M({target:r,elevationAlignedTargetLocation:e.elevationAlignedTargetLocation,intersectedGraphic:v?null:R(p,n),intersectedLocation:v?null:y,visible:v}):(t.target=r,t.intersectedGraphic=v?null:R(p,n),t.intersectedLocation=v?null:y,t.visible=v)}o.isValid=s.isValid=!0,o.isTargetVisible=v}_canCompute(e){let t=this.analysisViewData.elevationAlignedObserver,{frustum:n}=this.view;if(t==null||e.elevationAlignedTargetLocation==null||n==null)return!1;let{observerAdjusted:r,targetAdjusted:i}=e.inputPoints,a=n.intersectsPoint(r),o=n.intersectsPoint(i);return a&&o}_onObserverPositionChange(e,t,r,i,a){if(this._externalObserverUpdate=a,e==null){this.analysisViewData.elevationAlignedObserver=null,this._observerFeatureId=null;return}if(t==null){F(this.analysis,e.spatialReference,c.getLogger(this)),this.analysisViewData.elevationAlignedObserver=null;return}let o=H(t,r),{absoluteZ:s,elevation:l}=j(t.x,t.y,t.z,this.view.spatialReference,this.view,o),u=t.clone();u.z=s,this._effectiveObserverElevationMode=o.mode,this.analysisViewData.elevationAlignedObserver=u;let d=S();this.view.renderCoordsHelper.toRenderCoords(u,d),this._elevationAlignedObserverPositionRenderSpace=d,this._observerGroundOffsetRenderSpace=s-l,this._observerFeatureId=n(i),this.priority=B.LINE_OF_SIGHT_TOOL_INTERACTIVE}_onObserverRenderSpacePositionChangeForComputation(e,t,n,r,i){let{inputPoints:a}=e;switch(h(a.observer,t),a.observerFeatureId=i,a.observerSurfaceNormal=null,r){case`on-the-ground`:case`relative-to-ground`:{let e=this._intersector.updateFromGroundIntersection(a.observer,n,a.observer);a.observerFeatureId??(a.observerSurfaceNormal=e)}}this._adjustStartEndPositions(e),e.notifyInputPointsChanged(),this.priority=B.LINE_OF_SIGHT_TOOL_INTERACTIVE}_onTargetPositionChange(e,t,r,i,a,o=!0){let s=e.inputPoints;if(o&&(s.isValid=!1),r==null){t!=null&&F(this.analysis,t.spatialReference,c.getLogger(this)),e.elevationAlignedTargetLocation=null,e.notifyInputPointsChanged();return}let l=H(r,i),{absoluteZ:u,elevation:d}=j(r.x,r.y,r.z,this.view.spatialReference,this.view,l),f=r.clone();switch(f.z=u,e.elevationAlignedTargetLocation=f,this.view.renderCoordsHelper.toRenderCoords(e.elevationAlignedTargetLocation,s.target),s.targetFeatureId=n(a),s.targetSurfaceNormal=null,l.mode){case`on-the-ground`:case`relative-to-ground`:{let e=this._intersector.updateFromGroundIntersection(s.target,u-d,s.target);s.targetFeatureId??(s.targetSurfaceNormal=e)}}this._adjustStartEndPositions(e),e.notifyInputPointsChanged(),this.priority=B.LINE_OF_SIGHT_TOOL_INTERACTIVE}_connectComputationToTarget(e){return o([this._updatingHandles.add(()=>({computation:e,targetPosition:e.target.position,targetElevationInfoDependency:U(e.target.elevationInfo),targetFeatureInfo:e.target.feature,projectedTargetPosition:T(e.target.position,this.view.spatialReference)}),({computation:e,targetPosition:t,targetFeatureInfo:n,projectedTargetPosition:r})=>{r.pending==null?this._onTargetPositionChange(e,t,r.geometry,e.target.elevationInfo,n):this._updatingHandles.consumePromise(r.pending)},d)])}_connectComputationToObserver(e){return this._updatingHandles.add(()=>({computation:e,observer:this.analysisViewData.elevationAlignedObserver}),({computation:e})=>{this._externalObserverUpdate&&(e.inputPoints.isValid=!1,e.notifyInputPointsChanged())},d)}_connectComputationToRenderSpaceObserver(e){return this._updatingHandles.add(()=>({computation:e,observer:this._elevationAlignedObserverPositionRenderSpace,observerGroundOffset:this._observerGroundOffsetRenderSpace,observerElevationMode:this._effectiveObserverElevationMode,observerFeatureId:this._observerFeatureId}),({computation:e,observer:t,observerGroundOffset:n,observerElevationMode:r,observerFeatureId:i})=>{this._onObserverRenderSpacePositionChangeForComputation(e,t,n,r,i)},d)}_connectComputationToCamera(e){return this._updatingHandles.add(()=>({camera:this.view.state.camera,isDirty:this._isCameraDirty}),({isDirty:t})=>{!this.updateOnCameraChange||e.inputPoints.isValid&&!t||e.notifyInputPointsChanged()})}_connectComputationToSlicePlane(e){return this._updatingHandles.add(()=>this.view.slice.plane,()=>{e.inputPoints.isValid=!1,e.notifyInputPointsChanged()})}_connectComputationToElevation(e){let t=(n,r)=>{let i=this.analysis.observer,a=e.target,o=null,s=null,c=null,l=null,u=null,d=null;if(i?.position!=null){let e=T(i.position,this.view.spatialReference);if(e.pending!=null){this._updatingHandles.consumePromise(e.pending),e.pending.finally(()=>t(n,r));return}o=e.geometry,s=i.elevationInfo,c=i.feature}if(a.position!=null){let e=T(a.position,this.view.spatialReference);if(e.pending!=null){this._updatingHandles.consumePromise(e.pending),e.pending.finally(()=>t(n,r));return}l=e.geometry,u=a.elevationInfo,d=a.feature}(o!=null||l!=null)&&(I(n,r,J,this.view.spatialReference),o!=null&&L(J,o.x,o.y,this.view.spatialReference)&&this._onObserverPositionChange(i==null?null:i.position,o,s,c,!1),l!=null&&L(J,l.x,l.y,this.view.spatialReference)&&this._onTargetPositionChange(e,a.position,l,u,d,!1),o!=null&&l!=null&&O(J,o,l)&&e.notifyInputPointsChanged())};return this.view.elevationProvider.on(`elevation-change`,({extent:e,spatialReference:n})=>t(e,n))}_connectComputationToTask(e){let t=null,n={computation:e,interpolationInfo:{originalIntersection:S(),originalObserver:S(),originalTarget:S()}};return o([this._updatingHandles.add(()=>e.inputPoints,()=>{t=l(t),t=r(async e=>{await u(this._frameTask.schedule(()=>this._computeResult(n),e))})},{initial:!0,equals:()=>!1}),s(()=>t=l(t))])}_connectComputationToContent(e){return f(()=>this.view.pointsOfInterest?.contentGeometryUpdates.events,`request-update`,t=>{let n=t?.renderBounds,{observerAdjusted:r,targetAdjusted:i}=e.inputPoints;(n==null||E(n,r,i))&&(e.inputPoints.isValid=!1,e.notifyInputPointsChanged())})}_connectComputation(e){let t=this._computationHandles;t.has(e)||t.add([this._connectComputationToTarget(e),this._connectComputationToObserver(e),this._connectComputationToRenderSpaceObserver(e),this._connectComputationToCamera(e),this._connectComputationToSlicePlane(e),this._connectComputationToElevation(e),this._connectComputationToTask(e),this._connectComputationToContent(e)],e)}_disconnectComputation(e){this._computationHandles.remove(e)}_onComputationCollectionChange({added:e,removed:t}){for(let e of t)this._disconnectComputation(e);for(let t of e)this._connectComputation(t)}_onTargetCollectionChange({added:e,removed:t}){for(let e of t)this._removeTarget(e);for(let t of e)this._addTarget(t)}_onCursorTargetChange(e,t){t!=null&&this._removeTarget(t),e!=null&&this._addTarget(e)}_addTarget(e){this._computations.some(t=>t.target===e)||this._computations.add(new N({target:e}))}_removeTarget(e){let t=this._computations.findIndex(t=>t.target===e);this._computations.removeAt(t)}_connectObserver(){return o([this._updatingHandles.add(()=>({observerPosition:this.analysis.observer==null?null:this.analysis.observer.position,projectedObserverPosition:T(this.analysis.observer==null?null:this.analysis.observer.position,this.view.spatialReference),observerElevationInfoDependency:U(this.analysis.observer?.elevationInfo),observerFeatureInfo:this.analysis.observer==null?null:this.analysis.observer.feature}),({observerPosition:e,projectedObserverPosition:t,observerFeatureInfo:n})=>{t.pending==null?this._onObserverPositionChange(e,t.geometry,this.analysis.observer?.elevationInfo,n,!0):this._updatingHandles.consumePromise(t.pending)},d)])}_connectComputations(){return this._updatingHandles.addOnCollectionChange(()=>this._computations,e=>this._onComputationCollectionChange(e),{initial:!0,final:!0})}_connectTargets(){return o([this._updatingHandles.addOnCollectionChange(()=>this.analysis.targets,e=>this._onTargetCollectionChange(e),{initial:!0,final:!0}),this._updatingHandles.add(()=>this.analysisViewData.cursorTarget,(e,t)=>{this._onCursorTargetChange(e,t)})])}get _isCameraDirty(){let e=this.analysisViewData.elevationAlignedObserver,{view:t}=this,{renderCoordsHelper:n}=t;if(e==null||n==null)return!1;let r=K;n.toRenderCoords(e,r);let i=t.state.camera.computeScreenPixelSizeAt(r);return Math.abs((i-this._screenPixelSize)/this._screenPixelSize)>G}};e([p({constructOnly:!0})],V.prototype,`analysis`,void 0),e([p({constructOnly:!0})],V.prototype,`analysisViewData`,void 0),e([p({constructOnly:!0})],V.prototype,`view`,void 0),e([p()],V.prototype,`updating`,null),e([p()],V.prototype,`priority`,null),e([p()],V.prototype,`updateOnCameraChange`,void 0),e([p()],V.prototype,`_computations`,null),e([p()],V.prototype,`_elevationAlignedObserverPositionRenderSpace`,null),e([p()],V.prototype,`_observerGroundOffsetRenderSpace`,void 0),e([p()],V.prototype,`_effectiveObserverElevationMode`,void 0),e([p()],V.prototype,`_observerFeatureId`,void 0),e([p()],V.prototype,`_screenPixelSize`,null),e([p({readOnly:!0})],V.prototype,`_updatingHandles`,void 0),e([p()],V.prototype,`_frameTask`,void 0),e([p()],V.prototype,`_isCameraDirty`,null),V=e([m(`esri.views.3d.analysis.LineOfSight.LineOfSightController`)],V);function H(e,t){return e.hasZ?t??{mode:`absolute-height`,offset:0}:{mode:`on-the-ground`,offset:0}}function U(e){return{mode:e?.mode,offset:e?.offset,unit:e?.unit}}function W({computation:e,interpolationInfo:t}){let{computationResult:n,inputPoints:r}=e,{start:i,end:a,intersection:o}=n,{originalIntersection:s,originalObserver:c,originalTarget:l}=t;if(h(o,s),r.isValid){let e=K,t=b(c,s)/b(c,l);x(e,i,c),v(e,e,1-t),y(o,o,e),x(e,a,l),v(e,e,t),y(o,o,e),n.isValid=!0}else e.result=null,n.isValid=!1,n.isTargetVisible=!1}const G=.1,K=S(),q=k(),J=D();export{V as LineOfSightController};
2
+ import{__decorate as e}from"tslib";import{updatePointsFromFeatureReference as t,getFeatureId as n}from"../../../../analysis/featureReferenceUtils.js";import{createTask as r}from"../../../../core/asyncUtils.js";import{EventedAccessor as i}from"../../../../core/Evented.js";import a from"../../../../core/Handles.js";import{handlesGroup as o,makeHandle as s}from"../../../../core/handleUtils.js";import c from"../../../../core/Logger.js";import{abortMaybe as l}from"../../../../core/maybe.js";import{ignoreAbortErrors as u}from"../../../../core/promiseUtils.js";import{initial as d,on as f}from"../../../../core/reactiveUtils.js";import{property as p,subclass as m}from"../../../../core/accessorSupport/decorators.js";import{copy as h,subtract as g,normalize as _,scale as v,add as y,dist as b,sub as x}from"../../../../core/libs/gl-matrix-2/math/vec3.js";import{create as S}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{UpdatingHandles as C}from"../../../../core/support/UpdatingHandles.js";import w from"../../../../geometry/Point.js";import{projectOrLoad as T}from"../../../../geometry/projectionUtils.js";import{intersectsSegment as E}from"../../../../geometry/support/aaBoundingBox.js";import{empty as D,intersectsSegment as O}from"../../../../geometry/support/aaBoundingRect.js";import{create as k,fromPoints as A}from"../../../../geometry/support/ray.js";import{zValueInAbsoluteHeightMode as j}from"../../../../support/elevationInfoUtils.js";import M from"../LineOfSightAnalysisResult.js";import{LineOfSightComputation as N}from"./LineOfSightComputation.js";import{LineOfSightRayIntersector as P}from"./LineOfSightRayIntersector.js";import{logFailedGeometryProjectionError as F}from"../support/projectionUtils.js";import{projectElevationUpdateExtent as I,containsElevationUpdatePoint as L}from"../../support/elevationUpdateExtentUtils.js";import{toGraphic as R}from"../../webgl-engine/lib/intersectorUtilsConversions.js";import{ImmediateTask as z,TaskPriority as B}from"../../../support/Scheduler.js";let V=class extends i{constructor(e){super(e),this.updateOnCameraChange=!0,this._observerGroundOffsetRenderSpace=0,this._effectiveObserverElevationMode=`absolute-height`,this._observerFeatureId=null,this._updatingHandles=new C,this._frameTask=z,this._computationHandles=new a,this._externalObserverUpdate=!0}initialize(){let e=this.view.resourceController?.scheduler;this._frameTask=e?e.registerTask(B.LINE_OF_SIGHT_TOOL):z,this._intersector=new P({view:this.view}),this.addHandles([this._connectObserver(),this._connectComputations(),this._connectTargets()])}destroy(){this._computationHandles.destroy(),this._computations.removeAll(),this._updatingHandles.destroy()}get updating(){return this._frameTask.updating||this._updatingHandles.updating}get priority(){return this._frameTask.priority}set priority(e){this._frameTask.priority=e}get _computations(){return this.analysisViewData.computations}get _elevationAlignedObserverPositionRenderSpace(){return this.analysisViewData.observerEngineLocation}set _elevationAlignedObserverPositionRenderSpace(e){this.analysisViewData.observerEngineLocation=e}get _screenPixelSize(){return this.view.state.camera.computeScreenPixelSizeAt(this._elevationAlignedObserverPositionRenderSpace)}_computeResult(e){let t=e.computation,{inputPoints:n,computationResult:r}=t,{observerAdjusted:i,targetAdjusted:a}=n,{start:o,end:s}=r;h(o,i),h(s,a),this._canCompute(t)?this._computeIntersection(e):W(e),t.notifyResultChanged(),this.emit(`result-changed`,{target:e.computation.target,result:t.result})}_adjustStartEndPositions(e){let{view:n}=this,{inputPoints:r}=e,{observer:i,target:a,observerAdjusted:o,targetAdjusted:s}=r;h(o,i),h(s,a),t(n,this._intersector.intersector,r);let{observerSurfaceNormal:c,targetSurfaceNormal:l}=r,u=this._screenPixelSize,d=K;c==null?g(d,s,o):h(d,c);let f=u;_(d,d),v(d,d,Math.min(f,1)),y(o,o,d),l==null?g(d,o,s):h(d,l);let p=n.state.camera.computeScreenPixelSizeAt(s);_(d,d),v(d,d,Math.min(p,1)),y(s,s,d)}_computeIntersection({computation:e,interpolationInfo:t}){let{view:n}=this,{sceneIntersectionHelper:r,renderCoordsHelper:i}=n;if(r==null)return;let a=this._intersector.intersector,{computationResult:o,inputPoints:s}=e,{observer:c,target:l}=s,{start:u,end:d}=o,f=A(u,d,q);a.options.store=0,r.intersectToolIntersectorRay(f,a);let p=a.results.min,m=o.intersection,g=K,_=p!=null&&p.getIntersectionPoint(m),v=!0;if(_){h(t.originalIntersection,m),h(t.originalObserver,u),h(t.originalTarget,d),i.fromRenderCoords(m,g,n.spatialReference);let e=1-b(d,l)/b(u,l);v=b(c,m)>=e*b(c,l)}let y=new w(g,n.spatialReference);{let{result:t,target:r}=e;t==null?e.result=new M({target:r,elevationAlignedTargetLocation:e.elevationAlignedTargetLocation,intersectedGraphic:v?null:R(p,n),intersectedLocation:v?null:y,visible:v}):(t.target=r,t.intersectedGraphic=v?null:R(p,n),t.intersectedLocation=v?null:y,t.visible=v)}o.isValid=s.isValid=!0,o.isTargetVisible=v}_canCompute(e){let t=this.analysisViewData.elevationAlignedObserver,{frustum:n}=this.view;if(t==null||e.elevationAlignedTargetLocation==null||n==null)return!1;let{observerAdjusted:r,targetAdjusted:i}=e.inputPoints,a=n.intersectsPoint(r),o=n.intersectsPoint(i);return a&&o}_onObserverPositionChange(e,t,r,i,a){if(this._externalObserverUpdate=a,e==null){this.analysisViewData.elevationAlignedObserver=null,this._observerFeatureId=null;return}if(t==null){F(this.analysis,e.spatialReference,c.getLogger(this)),this.analysisViewData.elevationAlignedObserver=null;return}let o=H(t,r),{absoluteZ:s,elevation:l}=j(t.x,t.y,t.z,this.view.spatialReference,this.view,o),u=t.clone();u.z=s,this._effectiveObserverElevationMode=o.mode,this.analysisViewData.elevationAlignedObserver=u;let d=S();this.view.renderCoordsHelper.toRenderCoords(u,d),this._elevationAlignedObserverPositionRenderSpace=d,this._observerGroundOffsetRenderSpace=s-l,this._observerFeatureId=n(i),this.priority=B.LINE_OF_SIGHT_TOOL_INTERACTIVE}_onObserverRenderSpacePositionChangeForComputation(e,t,n,r,i){let{inputPoints:a}=e;switch(h(a.observer,t),a.observerFeatureId=i,a.observerSurfaceNormal=null,r){case`on-the-ground`:case`relative-to-ground`:{let e=this._intersector.updateFromGroundIntersection(a.observer,n,a.observer);a.observerFeatureId??(a.observerSurfaceNormal=e)}}this._adjustStartEndPositions(e),e.notifyInputPointsChanged(),this.priority=B.LINE_OF_SIGHT_TOOL_INTERACTIVE}_onTargetPositionChange(e,t,r,i,a,o=!0){let s=e.inputPoints;if(o&&(s.isValid=!1),r==null){t!=null&&F(this.analysis,t.spatialReference,c.getLogger(this)),e.elevationAlignedTargetLocation=null,e.notifyInputPointsChanged();return}let l=H(r,i),{absoluteZ:u,elevation:d}=j(r.x,r.y,r.z,this.view.spatialReference,this.view,l),f=r.clone();switch(f.z=u,e.elevationAlignedTargetLocation=f,this.view.renderCoordsHelper.toRenderCoords(e.elevationAlignedTargetLocation,s.target),s.targetFeatureId=n(a),s.targetSurfaceNormal=null,l.mode){case`on-the-ground`:case`relative-to-ground`:{let e=this._intersector.updateFromGroundIntersection(s.target,u-d,s.target);s.targetFeatureId??(s.targetSurfaceNormal=e)}}this._adjustStartEndPositions(e),e.notifyInputPointsChanged(),this.priority=B.LINE_OF_SIGHT_TOOL_INTERACTIVE}_connectComputationToTarget(e){return o([this._updatingHandles.add(()=>({computation:e,targetPosition:e.target.position,targetElevationInfoDependency:U(e.target.elevationInfo),targetFeatureInfo:e.target.feature,projectedTargetPosition:T(e.target.position,this.view.spatialReference)}),({computation:e,targetPosition:t,targetFeatureInfo:n,projectedTargetPosition:r})=>{r.pending==null?this._onTargetPositionChange(e,t,r.geometry,e.target.elevationInfo,n):this._updatingHandles.consumePromise(r.pending)},d)])}_connectComputationToObserver(e){return this._updatingHandles.add(()=>({computation:e,observer:this.analysisViewData.elevationAlignedObserver}),({computation:e})=>{this._externalObserverUpdate&&(e.inputPoints.isValid=!1,e.notifyInputPointsChanged())},d)}_connectComputationToRenderSpaceObserver(e){return this._updatingHandles.add(()=>({computation:e,observer:this._elevationAlignedObserverPositionRenderSpace,observerGroundOffset:this._observerGroundOffsetRenderSpace,observerElevationMode:this._effectiveObserverElevationMode,observerFeatureId:this._observerFeatureId}),({computation:e,observer:t,observerGroundOffset:n,observerElevationMode:r,observerFeatureId:i})=>{this._onObserverRenderSpacePositionChangeForComputation(e,t,n,r,i)},d)}_connectComputationToCamera(e){return this._updatingHandles.add(()=>({camera:this.view.state.camera,isDirty:this._isCameraDirty}),({isDirty:t})=>{!this.updateOnCameraChange||e.inputPoints.isValid&&!t||e.notifyInputPointsChanged()})}_connectComputationToSlicePlane(e){return this._updatingHandles.add(()=>this.view.slice.plane,()=>{e.inputPoints.isValid=!1,e.notifyInputPointsChanged()})}_connectComputationToElevation(e){let t=(n,r)=>{let i=this.analysis.observer,a=e.target,o=null,s=null,c=null,l=null,u=null,d=null;if(i?.position!=null){let e=T(i.position,this.view.spatialReference);if(e.pending!=null){this._updatingHandles.consumePromise(e.pending),e.pending.finally(()=>t(n,r));return}o=e.geometry,s=i.elevationInfo,c=i.feature}if(a.position!=null){let e=T(a.position,this.view.spatialReference);if(e.pending!=null){this._updatingHandles.consumePromise(e.pending),e.pending.finally(()=>t(n,r));return}l=e.geometry,u=a.elevationInfo,d=a.feature}(o!=null||l!=null)&&(I(n,r,J,this.view.spatialReference),o!=null&&L(J,o.x,o.y,this.view.spatialReference)&&this._onObserverPositionChange(i==null?null:i.position,o,s,c,!1),l!=null&&L(J,l.x,l.y,this.view.spatialReference)&&this._onTargetPositionChange(e,a.position,l,u,d,!1),o!=null&&l!=null&&O(J,o,l)&&e.notifyInputPointsChanged())};return this.view.elevationProvider.on(`elevation-change`,({extent:e,spatialReference:n})=>t(e,n))}_connectComputationToTask(e){let t=null,n={computation:e,interpolationInfo:{originalIntersection:S(),originalObserver:S(),originalTarget:S()}};return o([this._updatingHandles.add(()=>e.inputPoints,()=>{t=l(t),t=r(async e=>{await u(this._frameTask.schedule(()=>this._computeResult(n),e))})},{initial:!0,equals:()=>!1}),s(()=>t=l(t))])}_connectComputationToContent(e){return f(()=>this.view.pointsOfInterest?.contentGeometryUpdates.events,`request-update`,t=>{let n=t?.renderBounds,{observerAdjusted:r,targetAdjusted:i}=e.inputPoints;(n==null||E(n,r,i))&&(e.inputPoints.isValid=!1,e.notifyInputPointsChanged())})}_connectComputation(e){let t=this._computationHandles;t.has(e)||t.add([this._connectComputationToTarget(e),this._connectComputationToObserver(e),this._connectComputationToRenderSpaceObserver(e),this._connectComputationToCamera(e),this._connectComputationToSlicePlane(e),this._connectComputationToElevation(e),this._connectComputationToTask(e),this._connectComputationToContent(e)],e)}_disconnectComputation(e){this._computationHandles.remove(e)}_onComputationCollectionChange({added:e,removed:t}){for(let e of t)this._disconnectComputation(e);for(let t of e)this._connectComputation(t)}_onTargetCollectionChange({added:e,removed:t}){for(let e of t)this._removeTarget(e);for(let t of e)this._addTarget(t)}_onCursorTargetChange(e,t){t!=null&&this._removeTarget(t),e!=null&&this._addTarget(e)}_addTarget(e){this._computations.some(t=>t.target===e)||this._computations.add(new N({target:e}))}_removeTarget(e){let t=this._computations.findIndex(t=>t.target===e);this._computations.removeAt(t)}_connectObserver(){return o([this._updatingHandles.add(()=>({observerPosition:this.analysis.observer==null?null:this.analysis.observer.position,projectedObserverPosition:T(this.analysis.observer==null?null:this.analysis.observer.position,this.view.spatialReference),observerElevationInfoDependency:U(this.analysis.observer?.elevationInfo),observerFeatureInfo:this.analysis.observer==null?null:this.analysis.observer.feature}),({observerPosition:e,projectedObserverPosition:t,observerFeatureInfo:n})=>{t.pending==null?this._onObserverPositionChange(e,t.geometry,this.analysis.observer?.elevationInfo,n,!0):this._updatingHandles.consumePromise(t.pending)},d)])}_connectComputations(){return this._updatingHandles.addOnCollectionChange(()=>this._computations,e=>this._onComputationCollectionChange(e),{initial:!0,final:!0})}_connectTargets(){return o([this._updatingHandles.addOnCollectionChange(()=>this.analysis.targets,e=>this._onTargetCollectionChange(e),{initial:!0,final:!0}),this._updatingHandles.add(()=>this.analysisViewData.cursorTarget,(e,t)=>{this._onCursorTargetChange(e,t)})])}get _isCameraDirty(){let e=this.analysisViewData.elevationAlignedObserver,{view:t}=this,{renderCoordsHelper:n}=t;if(e==null)return!1;let r=K;n.toRenderCoords(e,r);let i=t.state.camera.computeScreenPixelSizeAt(r);return Math.abs((i-this._screenPixelSize)/this._screenPixelSize)>G}};e([p({constructOnly:!0})],V.prototype,`analysis`,void 0),e([p({constructOnly:!0})],V.prototype,`analysisViewData`,void 0),e([p({constructOnly:!0})],V.prototype,`view`,void 0),e([p()],V.prototype,`updating`,null),e([p()],V.prototype,`priority`,null),e([p()],V.prototype,`updateOnCameraChange`,void 0),e([p()],V.prototype,`_computations`,null),e([p()],V.prototype,`_elevationAlignedObserverPositionRenderSpace`,null),e([p()],V.prototype,`_observerGroundOffsetRenderSpace`,void 0),e([p()],V.prototype,`_effectiveObserverElevationMode`,void 0),e([p()],V.prototype,`_observerFeatureId`,void 0),e([p()],V.prototype,`_screenPixelSize`,null),e([p({readOnly:!0})],V.prototype,`_updatingHandles`,void 0),e([p()],V.prototype,`_frameTask`,void 0),e([p()],V.prototype,`_isCameraDirty`,null),V=e([m(`esri.views.3d.analysis.LineOfSight.LineOfSightController`)],V);function H(e,t){return e.hasZ?t??{mode:`absolute-height`,offset:0}:{mode:`on-the-ground`,offset:0}}function U(e){return{mode:e?.mode,offset:e?.offset,unit:e?.unit}}function W({computation:e,interpolationInfo:t}){let{computationResult:n,inputPoints:r}=e,{start:i,end:a,intersection:o}=n,{originalIntersection:s,originalObserver:c,originalTarget:l}=t;if(h(o,s),r.isValid){let e=K,t=b(c,s)/b(c,l);x(e,i,c),v(e,e,1-t),y(o,o,e),x(e,a,l),v(e,e,t),y(o,o,e),n.isValid=!0}else e.result=null,n.isValid=!1,n.isTargetVisible=!1}const G=.1,K=S(),q=k(),J=D();export{V as LineOfSightController};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{copy as e}from"../../../../core/libs/gl-matrix-2/math/mat4.js";import{create as t}from"../../../../core/libs/gl-matrix-2/factories/mat4f64.js";import{set as n,add as r,subtract as i}from"../../../../core/libs/gl-matrix-2/math/vec3.js";import{create as a,ZEROS as o}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{computeTranslationToOriginAndRotation as s}from"../../../../geometry/projection/computeTranslationToOriginAndRotation.js";import{projectBuffer as c}from"../../../../geometry/projection/projectBuffer.js";import{BufferViewVec3f as l}from"../../../../geometry/support/buffer/BufferView.js";import{SampleElevationInfo as u,updateBufferPointGroundDistance as d,computePointTransformation as f,applyBufferPointTransformation as p}from"./elevationAlignmentUtils.js";import{debugFlags as m}from"../../support/debugFlags.js";import{SamplePosition as h}from"../../support/ElevationProvider.js";import{updateObjectVertexField as g,updateVertexFieldVec3f as _}from"../../webgl-engine/lib/bufferGeometryUtils.js";import{isGeometryWithMapPositions as v}from"../../webgl-engine/lib/GeometryWithMapPositions.js";function y(e,t,n,r,i){let a=e.stageObject,o=a.geometries,s=0;for(let e of o){if(!v(e))continue;let{update:o,averageGeometrySampledElevation:c}=N(e,t,n,r,i);s+=c,o&&a.geometryVertexAttributeUpdated(e,`position`)}return s/o.length}function b(t,r,i,a,o,c){let l=t.stageObject,u=r.centerInElevationSR;a(u,M);let d=r.requiresSampledElevationInfo?M.sampledElevation:0,f=e(C,c??l.transformation),p=n(j,f[12],f[13],f[14]);m.ENABLE_OPTIMIZATIONS?o.setAltitudeOfTransformation(M.z,f):(D[0]=u[0],D[1]=u[1],D[2]=M.z,s(i,D,f,o.spatialReference)&&(c?e(c,f):l.transformation=f));let h=E/o.unitInMeters;return(Math.abs(f[12]-p[0])>=h||Math.abs(f[13]-p[1])>=h||Math.abs(f[14]-p[2])>=h)&&(c?e(c,f):l.transformation=f),d}function x(e,t,n,r,i){return S(e,t,n,r,i,o)}function S(e,t,a,o,s,c){let u=t.centerInElevationSR;if(o(u,M),d(e,M.verticalDistanceToGround),m.ENABLE_OPTIMIZATIONS){let t=E/s.unitInMeters;for(let n of e.geometries){let a=n.buffers.vertex.getField(`position`,l),o=n.localOrigin.vec3;a.getVec(0,k),r(D,k,o),i(D,D,c),s.setAltitude(D,M.z),r(D,D,c),i(D,D,o),(Math.abs(D[0]-k[0])>=t||Math.abs(D[1]-k[1])>=t||Math.abs(D[2]-k[2])>=t)&&g(e,_,n,`position`,0,D)}}else n(D,u[0],u[1],M.z),f(D,a,s,C)&&(C[12]+=c[0],C[13]+=c[1],C[14]+=c[2],p(e,C));return M.sampledElevation}const C=t();function w(e,t,r,i,a){let o=e.graphics3DSymbolLayer.lodRenderer;if(o==null)return 0;let c=t.centerInElevationSR;i(c,M);let l=t.mode===`absolute-height`?0:M.sampledElevation,u=o.instanceData,d=e.instanceIndex,f=A;u.getGlobalTransform(d,f);let p=n(j,f[12],f[13],f[14]);m.ENABLE_OPTIMIZATIONS?a.setAltitudeOfTransformation(M.z,f):(D[0]=c[0],D[1]=c[1],D[2]=M.z,s(r,D,f,a.spatialReference)&&u.setGlobalTransform(d,f));let h=E/a.unitInMeters;return(!m.ENABLE_OPTIMIZATIONS||Math.abs(f[12]-p[0])>=h||Math.abs(f[13]-p[1])>=h||Math.abs(f[14]-p[2])>=h)&&u.setGlobalTransform(d,f),l}function T(e,t,n,r,i){let a=e.stageObject,o=a.geometries;if(o.length===0)return 0;let s=0,c=null,l=0,u=!1;for(let e of o){if(!v(e))continue;let o=e.attributes.get(`position`);if(o!==c){let{update:a,averageGeometrySampledElevation:s}=N(e,t,n,r,i);l=s,c=o,u=a}u&&a.geometryVertexAttributeUpdated(e,`position`),s+=l}return s/o.length}const E=.01,D=a(),O=a(),k=a(),A=t(),j=a(),M=new u;function N(e,t,n,r,i){let a=!1,o=e.transformation,s=t.requiresSampledElevationInfo;O[0]=o[12],O[1]=o[13],O[2]=o[14],e.invalidateBoundingInfo();let l=e.getMutableAttribute(`position`),u=l.data,d=l.size,f=u.length/d,p=new h(e.mapPositions,n),g=0,_=0;for(let e=0;e<f;e++){if(k[0]=u[g],k[1]=u[g+1],k[2]=u[g+2],r(p,M),s&&(_+=M.sampledElevation),m.ENABLE_OPTIMIZATIONS){D[0]=u[g]+O[0],D[1]=u[g+1]+O[1],D[2]=u[g+2]+O[2],i.setAltitude(D,M.z),u[g]=D[0]-O[0],u[g+1]=D[1]-O[1],u[g+2]=D[2]-O[2];let e=E/i.unitInMeters;(Math.abs(k[0]-u[g])>=e||Math.abs(k[1]-u[g+1])>=e||Math.abs(k[2]-u[g+2])>=e)&&(a=!0)}else u[g]=p.array[p.offset],u[g+1]=p.array[p.offset+1],u[g+2]=M.z,c(u,n,g,u,i.spatialReference,g,1),u[g]-=O[0],u[g+1]-=O[1],u[g+2]-=O[2],a=!0;g+=d,p.offset+=3}return _/=f,{update:a,averageGeometrySampledElevation:_}}export{x as perBufferPointElevationAligner,w as perLodInstanceElevationAligner,b as perObjectElevationAligner,S as perTranslatedBufferPointElevationAligner,y as perVertexElevationAligner,T as sharedGeometryElevationAligner};
2
+ import{copy as e}from"../../../../core/libs/gl-matrix-2/math/mat4.js";import{create as t}from"../../../../core/libs/gl-matrix-2/factories/mat4f64.js";import{set as n,add as r,subtract as i}from"../../../../core/libs/gl-matrix-2/math/vec3.js";import{create as a,ZEROS as o}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{computeTranslationToOriginAndRotation as s}from"../../../../geometry/projection/computeTranslationToOriginAndRotation.js";import{projectBuffer as c}from"../../../../geometry/projection/projectBuffer.js";import{BufferViewVec3f as l}from"../../../../geometry/support/buffer/BufferView.js";import{SampleElevationInfo as u,updateBufferPointGroundDistance as d,computePointTransformation as f,applyBufferPointTransformation as p}from"./elevationAlignmentUtils.js";import{debugFlags as m}from"../../support/debugFlags.js";import{SamplePosition as h}from"../../support/ElevationProvider.js";import{updateVertexFieldVec3f as g,updateObjectVertexField as _}from"../../webgl-engine/lib/bufferGeometryUtils.js";import{isGeometryWithMapPositions as v}from"../../webgl-engine/lib/GeometryWithMapPositions.js";function y(e,t,n,r,i){let a=e.stageObject,o=a.geometries,s=0;for(let e of o){if(!v(e))continue;let{update:o,averageGeometrySampledElevation:c}=P(e,t,n,r,i);s+=c,o&&a.geometryVertexAttributeUpdated(e,`position`)}return s/o.length}function b(e,t,a,o,s){let u=t.requiresSampledElevationInfo,{geometries:d}=e,f=D/s.unitInMeters,p=0;if(d.length===0)return 0;for(let t of d){let d=t.buffers.vertex.getField(`position`,l);if(t.mapPositions==null||d.count===0)continue;let _=t.localOrigin.vec3,v=new h(t.mapPositions,a),y=0,b=!1;for(let e=0;e<d.count;e++,v.offset+=3)o(v,N),u&&(y+=N.sampledElevation),d.getVec(e,A),m.ENABLE_OPTIMIZATIONS?(r(O,A,_),s.setAltitude(O,N.z)):(n(O,v.array[v.offset],v.array[v.offset+1],N.z),c(O,a,0,O,s.spatialReference,0,1)),i(O,O,_),(!m.ENABLE_OPTIMIZATIONS||F(A,O[0],O[1],O[2],f))&&(b=g(t,`position`,e,O)||b);b&&e.geometryVertexAttributeUpdated(t,`position`),p+=y/d.count}return p/d.length}function x(t,r,i,a,o,c){let l=t.stageObject,u=r.centerInElevationSR;a(u,N);let d=r.requiresSampledElevationInfo?N.sampledElevation:0,f=e(w,c??l.transformation),p=n(M,f[12],f[13],f[14]);m.ENABLE_OPTIMIZATIONS?o.setAltitudeOfTransformation(N.z,f):(O[0]=u[0],O[1]=u[1],O[2]=N.z,s(i,O,f,o.spatialReference)&&(c?e(c,f):l.transformation=f));let h=D/o.unitInMeters;return F(p,f[12],f[13],f[14],h)&&(c?e(c,f):l.transformation=f),d}function S(e,t,n,r,i){return C(e,t,n,r,i,o)}function C(e,t,a,o,s,c){let u=t.centerInElevationSR;if(o(u,N),d(e,N.verticalDistanceToGround),m.ENABLE_OPTIMIZATIONS){let t=D/s.unitInMeters;for(let n of e.geometries){let a=n.buffers.vertex.getField(`position`,l),o=n.localOrigin.vec3;a.getVec(0,A),r(O,A,o),i(O,O,c),s.setAltitude(O,N.z),r(O,O,c),i(O,O,o),F(A,O[0],O[1],O[2],t)&&_(e,g,n,`position`,0,O)}}else n(O,u[0],u[1],N.z),f(O,a,s,w)&&(w[12]+=c[0],w[13]+=c[1],w[14]+=c[2],p(e,w));return N.sampledElevation}const w=t();function T(e,t,r,i,a){let o=e.graphics3DSymbolLayer.lodRenderer;if(o==null)return 0;let c=t.centerInElevationSR;i(c,N);let l=t.mode===`absolute-height`?0:N.sampledElevation,u=o.instanceData,d=e.instanceIndex,f=j;u.getGlobalTransform(d,f);let p=n(M,f[12],f[13],f[14]);m.ENABLE_OPTIMIZATIONS?a.setAltitudeOfTransformation(N.z,f):(O[0]=c[0],O[1]=c[1],O[2]=N.z,s(r,O,f,a.spatialReference)&&u.setGlobalTransform(d,f));let h=D/a.unitInMeters;return(!m.ENABLE_OPTIMIZATIONS||F(p,f[12],f[13],f[14],h))&&u.setGlobalTransform(d,f),l}function E(e,t,n,r,i){let a=e.stageObject,o=a.geometries;if(o.length===0)return 0;let s=0,c=null,l=0,u=!1;for(let e of o){if(!v(e))continue;let o=e.attributes.get(`position`);if(o!==c){let{update:a,averageGeometrySampledElevation:s}=P(e,t,n,r,i);l=s,c=o,u=a}u&&a.geometryVertexAttributeUpdated(e,`position`),s+=l}return s/o.length}const D=.01,O=a(),k=a(),A=a(),j=t(),M=a(),N=new u;function P(e,t,n,r,i){let a=!1,o=e.transformation,s=t.requiresSampledElevationInfo;k[0]=o[12],k[1]=o[13],k[2]=o[14],e.invalidateBoundingInfo();let l=e.getMutableAttribute(`position`),u=l.data,d=l.size,f=u.length/d,p=new h(e.mapPositions,n),g=0,_=0;for(let e=0;e<f;e++){if(A[0]=u[g],A[1]=u[g+1],A[2]=u[g+2],r(p,N),s&&(_+=N.sampledElevation),m.ENABLE_OPTIMIZATIONS){O[0]=u[g]+k[0],O[1]=u[g+1]+k[1],O[2]=u[g+2]+k[2],i.setAltitude(O,N.z),u[g]=O[0]-k[0],u[g+1]=O[1]-k[1],u[g+2]=O[2]-k[2];let e=D/i.unitInMeters;F(A,u[g],u[g+1],u[g+2],e)&&(a=!0)}else u[g]=p.array[p.offset],u[g+1]=p.array[p.offset+1],u[g+2]=N.z,c(u,n,g,u,i.spatialReference,g,1),u[g]-=k[0],u[g+1]-=k[1],u[g+2]-=k[2],a=!0;g+=d,p.offset+=3}return _/=f,{update:a,averageGeometrySampledElevation:_}}function F(e,t,n,r,i){return Math.abs(e[0]-t)>=i||Math.abs(e[1]-n)>=i||Math.abs(e[2]-r)>=i}export{S as perBufferPointElevationAligner,b as perBufferVertexElevationAligner,T as perLodInstanceElevationAligner,x as perObjectElevationAligner,C as perTranslatedBufferPointElevationAligner,y as perVertexElevationAligner,E as sharedGeometryElevationAligner};