@arcgis/core 4.23.0-next.20220131 → 4.23.0-next.20220202
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.
- package/Graphic.js +1 -1
- package/TimeExtent.js +1 -1
- package/assets/esri/core/workers/RemoteClient.js +1 -1
- package/assets/esri/core/workers/chunks/01a10fe5ad6941b0ee8c.js +1 -0
- package/assets/esri/core/workers/chunks/{7a5f5acfbd4ca1a5c1f3.js → 06116433eb6e669f146b.js} +1 -1
- package/assets/esri/core/workers/chunks/09a05d778b6fac710828.js +1 -0
- package/assets/esri/core/workers/chunks/{83d00afae4406ec78bc9.js → 0c6be307709523eb8a05.js} +1 -1
- package/assets/esri/core/workers/chunks/0e215fa28a0448169132.js +1 -0
- package/assets/esri/core/workers/chunks/{391e96192d1ec4e55ce2.js → 101b4f02f0572afb666f.js} +1 -1
- package/assets/esri/core/workers/chunks/11750e96065b4d7b926b.js +1 -0
- package/assets/esri/core/workers/chunks/{929c9b7cdab7c4ca3d87.js → 17c51f5a13f471e6656a.js} +1 -1
- package/assets/esri/core/workers/chunks/{ed0bcc66fb1e0ee75a4b.js → 1f34957ef42e5b5977d0.js} +1 -1
- package/assets/esri/core/workers/chunks/2f4e425be3a3bdfd8d29.js +1 -0
- package/assets/esri/core/workers/chunks/34bed896b68993cabaa1.js +1 -0
- package/assets/esri/core/workers/chunks/3e1679b01429fd73cffe.js +1 -0
- package/assets/esri/core/workers/chunks/{99619fcb772807c74f3b.js → 444829a840b8ded16fd7.js} +1 -1
- package/assets/esri/core/workers/chunks/467b5faa1c90d9821609.js +1 -0
- package/assets/esri/core/workers/chunks/49353182a16218a84251.js +1 -0
- package/assets/esri/core/workers/chunks/4bfc2eeb0738c393d8ec.js +1 -0
- package/assets/esri/core/workers/chunks/4de996ebc432f5e149bc.js +1 -0
- package/assets/esri/core/workers/chunks/{422537fc3df707bb62c9.js → 5038935db9b1ebe61d02.js} +1 -1
- package/assets/esri/core/workers/chunks/50976921acf7bd636123.js +1 -0
- package/assets/esri/core/workers/chunks/50ef2622fd0d9a241979.js +1 -0
- package/assets/esri/core/workers/chunks/{5790d171072b3c7d108f.js → 53aa2ab4e569c994a32d.js} +1 -1
- package/assets/esri/core/workers/chunks/{db3c729ce0c0b2690dc9.js → 574e33f28c106d607fe3.js} +1 -1
- package/assets/esri/core/workers/chunks/{952980635afc7ec81804.js → 5b02ba8ed152dba53155.js} +1 -1
- package/assets/esri/core/workers/chunks/60c06d1bb3f8a26cb5ac.js +1 -0
- package/assets/esri/core/workers/chunks/{c2253a9f29c1aabb2b75.js → 66c47983e93071de28b1.js} +1 -1
- package/assets/esri/core/workers/chunks/6be326edd9829781d926.js +1 -0
- package/assets/esri/core/workers/chunks/{5bcb3240b3c005e5fe72.js → 7215af7810d15e89aa5a.js} +1 -1
- package/assets/esri/core/workers/chunks/7509c1693ffedc0fa018.js +1 -0
- package/assets/esri/core/workers/chunks/76c1d663f6d3f935c87f.js +1 -0
- package/assets/esri/core/workers/chunks/7ccbb923f113b3e21545.js +1 -0
- package/assets/esri/core/workers/chunks/82194fec53054c37061f.js +1 -0
- package/assets/esri/core/workers/chunks/82c59a71b7f087148089.js +1 -0
- package/assets/esri/core/workers/chunks/84eee02122b56a22d49e.js +1 -0
- package/assets/esri/core/workers/chunks/{dd13772a5e2eccc6a2bc.js → 8598f762f15ca68d52b7.js} +1 -1
- package/assets/esri/core/workers/chunks/{fc046a15466c25d081ff.js → 88458dcaff8edc50620c.js} +1 -1
- package/assets/esri/core/workers/chunks/{5ec98f4ddac707d0fbd1.js → 88815d533808aabb1fa9.js} +1 -1
- package/assets/esri/core/workers/chunks/{0463ba46df855a92b9c0.js → 8941f09329d9d39fb2fe.js} +1 -1
- package/assets/esri/core/workers/chunks/{655b55ac0cd533d7e9d7.js → 8ad5dc818dc73f4b9a76.js} +1 -1
- package/assets/esri/core/workers/chunks/8e96cddb069b643d864a.js +1 -0
- package/assets/esri/core/workers/chunks/{f2124f4d0f2b8a91f0ea.js → 90c5edcd8a609224ce55.js} +1 -1
- package/assets/esri/core/workers/chunks/9230b20eba4304d421b4.js +1 -0
- package/assets/esri/core/workers/chunks/{bac9fc90e6756e211160.js → 94d9951509c0db09547a.js} +1 -1
- package/assets/esri/core/workers/chunks/996d6ae7f2e2273f9bce.js +1 -0
- package/assets/esri/core/workers/chunks/{37c03cfc19086ce631c6.js → 9bd603ec98d24cd918e9.js} +1 -1
- package/assets/esri/core/workers/chunks/{c1135cb02ec46c491459.js → 9ce961bc390202c87941.js} +1 -1
- package/assets/esri/core/workers/chunks/9d4a35d4a85db80c4071.js +1 -0
- package/assets/esri/core/workers/chunks/9f0ad28e66862ba971a3.js +1 -0
- package/assets/esri/core/workers/chunks/{b3f5e91116112b0b612a.js → 9fd47b8fe25657ac0237.js} +1 -1
- package/assets/esri/core/workers/chunks/{b9e9cb354822c6d995a4.js → a276e60209f3d877a8d0.js} +1 -1
- package/assets/esri/core/workers/chunks/{aeaa1667c2d9f1b3366b.js → a85ed251d3d3668e474f.js} +1 -1
- package/assets/esri/core/workers/chunks/{44f0c3663b293afbd172.js → acf10f747215e9ff54dc.js} +1 -1
- package/assets/esri/core/workers/chunks/{69fd99b7c76e9992ccf3.js → b32bf9808cb4be3a6bd0.js} +1 -1
- package/assets/esri/core/workers/chunks/b3dc80ddbfa81026e937.js +1 -0
- package/assets/esri/core/workers/chunks/b548e6b3add4154ac4e6.js +1 -0
- package/assets/esri/core/workers/chunks/b6c55bdd8c957b062bc1.js +1 -0
- package/assets/esri/core/workers/chunks/{1f8c6a179e39fd4c5e6f.js → bd152e8b43cc4a6844dd.js} +1 -1
- package/assets/esri/core/workers/chunks/{0d02c6ad1f4688bfa374.js → bf7c44644fe7b0aa60cf.js} +1 -1
- package/assets/esri/core/workers/chunks/c0dc5882362479794224.js +1 -0
- package/assets/esri/core/workers/chunks/c8b574a76807f4ea7a70.js +1 -0
- package/assets/esri/core/workers/chunks/d09a0b2dc3a6fc10fa41.js +1 -0
- package/assets/esri/core/workers/chunks/{ec10151a2a95e95a0bb5.js → d304fe0ac836afd46e3d.js} +1 -1
- package/assets/esri/core/workers/chunks/{37a7bd30352b1309b8f8.js → d3f05b8e4bd53eb1eb9d.js} +1 -1
- package/assets/esri/core/workers/chunks/{be588873c16770ceb9ef.js → d46b511bbb83e68f1ece.js} +1 -1
- package/assets/esri/core/workers/chunks/{17de7a324dfa7f57ad5d.js → d780e946149b1c3d1246.js} +1 -1
- package/assets/esri/core/workers/chunks/d80bcf5ed1f54e0c4f5a.js +1 -0
- package/assets/esri/core/workers/chunks/{8cbb04a9065aa3756638.js → dc04a8ba6c770bdc2bd4.js} +1 -1
- package/assets/esri/core/workers/chunks/{89820b200ee44e678af5.js → dd891a98105904f8a06b.js} +1 -1
- package/assets/esri/core/workers/chunks/e5ab037c2a90411c453b.js +1 -0
- package/assets/esri/core/workers/chunks/ef2df21e1af3aa7ced29.js +1 -0
- package/assets/esri/core/workers/chunks/f5a7281ae24e837efc61.js +1 -0
- package/assets/esri/core/workers/chunks/{2c607d30ff8ca1b61286.js → fe0c3b7c9b428d9c3f25.js} +1 -1
- package/chunks/Heatmap.glsl.js +10 -0
- package/chunks/HeatmapDensity.glsl.js +21 -0
- package/core/maybe.js +1 -1
- package/core/promiseUtils.js +1 -1
- package/interfaces.d.ts +6 -0
- package/layers/graphics/data/optimizedFeatureQueryEngineAdapter.js +1 -1
- package/layers/graphics/featureConversionUtils.js +1 -1
- package/layers/mixins/ArcGISImageService.js +1 -1
- package/layers/support/rasterFunctions/vectorFieldUtils.js +1 -1
- package/package.json +1 -1
- package/renderers/support/rendererConversion.js +1 -1
- package/rest/support/FeatureSet.js +1 -1
- package/support/featureFlags.js +1 -1
- package/support/revision.js +1 -1
- package/symbols/TextSymbol3DLayer.js +1 -1
- package/symbols/support/Symbol3DHalo.js +1 -1
- package/symbols/support/Symbol3DTextBackground.js +5 -0
- package/views/2d/engine/RasterVFContainer.js +5 -0
- package/views/2d/engine/RasterVFDisplayObject.js +1 -1
- package/views/2d/engine/flow/AnimatedFlowView2D.js +1 -1
- package/views/2d/engine/webgl/AttributeStoreView.js +1 -1
- package/views/2d/engine/webgl/brushes/raster/BrushVectorField.js +1 -1
- package/views/2d/engine/webgl/cpuMapped/Buffer.js +1 -1
- package/views/2d/engine/webgl/mesh/templates/WGLBaseTextTemplate.js +1 -1
- package/views/2d/layers/FeatureLayerView2D.js +1 -1
- package/views/2d/layers/ImageryLayerView2D.js +1 -1
- package/views/2d/layers/ImageryTileLayerView2D.js +1 -1
- package/views/2d/layers/features/processors/HeatmapProcessor.js +1 -1
- package/views/2d/layers/features/processors/SymbolProcessor.js +1 -1
- package/views/2d/layers/features/support/AttributeStore.js +1 -1
- package/views/2d/layers/features/support/ClusterStore.js +1 -1
- package/views/2d/layers/features/support/FeatureSetReaderJSON.js +1 -1
- package/views/2d/layers/imagery/BaseImageryTileSubView2D.js +1 -1
- package/views/2d/layers/imagery/ImageryTileView2D.js +1 -1
- package/views/2d/layers/imagery/ImageryVFStrategy.js +5 -0
- package/views/2d/layers/imagery/ImageryView2D.js +1 -1
- package/views/2d/layers/imagery/VectorFieldTileView2D.js +1 -1
- package/views/2d/layers/imagery/VectorFieldView2D.js +5 -0
- package/views/3d/environment/EnvironmentRenderer.js +1 -1
- package/views/3d/environment/SimpleAtmosphere.js +1 -1
- package/views/3d/interactive/analysisTools/lineOfSight/LineOfSightTool.js +1 -1
- package/views/3d/layers/FeatureLikeLayerView3D.js +1 -1
- package/views/3d/layers/VoxelLayerView3D.js +1 -1
- package/views/3d/layers/graphics/Graphics3DTextSymbolLayer.js +1 -1
- package/views/3d/layers/graphics/Graphics3DWebStyleSymbol.js +1 -1
- package/views/3d/layers/graphics/labelPlacement.js +1 -1
- package/views/3d/layers/support/HeatmapFeatureProcessor.js +1 -1
- package/views/3d/terrain/OverlayRenderer.js +1 -1
- package/views/3d/webgl-engine/lib/DrapedHeatmapRenderer.js +5 -0
- package/views/3d/webgl-engine/lib/TextRenderParameters.js +1 -1
- package/views/3d/webgl-engine/lib/TextRenderer.js +1 -1
- package/views/3d/webgl-engine/materials/HeatmapDensityMaterial.js +5 -0
- package/views/3d/webgl-engine/shaders/Heatmap.glsl.js +5 -0
- package/views/3d/webgl-engine/shaders/HeatmapDensity.glsl.js +5 -0
- package/views/3d/webgl-engine/shaders/HeatmapDensityTechnique.js +5 -0
- package/views/3d/webgl-engine/shaders/HeatmapTechnique.js +5 -0
- package/views/draw/support/Box.js +1 -1
- package/views/draw/support/GraphicMover.js +1 -1
- package/views/draw/support/HighlightHelper.js +5 -0
- package/views/draw/support/Reshape.js +1 -1
- package/views/draw/support/layerUtils.js +1 -1
- package/widgets/FeatureTable/FeatureTableViewModel.js +1 -1
- package/widgets/FeatureTable/Grid/Grid.js +1 -1
- package/widgets/FeatureTable/support/FeatureStore.js +1 -1
- package/widgets/FeatureTable.js +1 -1
- package/widgets/Sketch/SketchViewModel.js +1 -1
- package/widgets/Sketch.js +1 -1
- package/widgets/TimeSlider.js +1 -1
- package/widgets/Widget.js +1 -1
- package/widgets/support/vnodeCache.js +5 -0
- package/widgets/support/widgetUtils.js +1 -1
- package/assets/esri/core/workers/chunks/0453fad5cb819797b4f6.js +0 -1
- package/assets/esri/core/workers/chunks/0c15d77d8e817cf45a9a.js +0 -1
- package/assets/esri/core/workers/chunks/0cd0a6eef51fc5b9ea61.js +0 -1
- package/assets/esri/core/workers/chunks/0d684f16f37d5dc385dd.js +0 -1
- package/assets/esri/core/workers/chunks/16b6d0f8378582c051c3.js +0 -1
- package/assets/esri/core/workers/chunks/1877ab1b6a115dbba1c5.js +0 -1
- package/assets/esri/core/workers/chunks/1b2a961f776a0b57e57a.js +0 -1
- package/assets/esri/core/workers/chunks/1b3fd66577b19aa5f2b6.js +0 -1
- package/assets/esri/core/workers/chunks/1c733b7db092a2a88ef3.js +0 -1
- package/assets/esri/core/workers/chunks/27474b007988855bea9d.js +0 -1
- package/assets/esri/core/workers/chunks/2b25fc7945a187c2bb9d.js +0 -1
- package/assets/esri/core/workers/chunks/483d5d8593d96d0f0b15.js +0 -1
- package/assets/esri/core/workers/chunks/4ba6de8aa7e2960bad49.js +0 -1
- package/assets/esri/core/workers/chunks/4be35af7d6babbfe9d84.js +0 -1
- package/assets/esri/core/workers/chunks/5457962a70bd3c557a75.js +0 -1
- package/assets/esri/core/workers/chunks/57856b4a9b8784a69844.js +0 -1
- package/assets/esri/core/workers/chunks/57b349d1dbc0bed75b79.js +0 -1
- package/assets/esri/core/workers/chunks/5d11b97b667921d67ae7.js +0 -1
- package/assets/esri/core/workers/chunks/5dbe555a5a662ff3d9ce.js +0 -1
- package/assets/esri/core/workers/chunks/64b7e8d812ea8fcf269e.js +0 -1
- package/assets/esri/core/workers/chunks/75d812955a473d0e8960.js +0 -1
- package/assets/esri/core/workers/chunks/96f148a556a2418038de.js +0 -1
- package/assets/esri/core/workers/chunks/9876a1bae350795fab36.js +0 -1
- package/assets/esri/core/workers/chunks/a8692bffb76444c34760.js +0 -1
- package/assets/esri/core/workers/chunks/ba762bcfd74af0bb8218.js +0 -1
- package/assets/esri/core/workers/chunks/c984b3040e120e502b11.js +0 -1
- package/assets/esri/core/workers/chunks/cdbc005eebec1503b99d.js +0 -1
- package/assets/esri/core/workers/chunks/d1fe53b597351dc58305.js +0 -1
- package/assets/esri/core/workers/chunks/d98dab12b71912fa397b.js +0 -1
- package/assets/esri/core/workers/chunks/e218bde41ffbcc5194f5.js +0 -1
- package/assets/esri/core/workers/chunks/e287f49184d076af17e2.js +0 -1
- package/assets/esri/core/workers/chunks/e9e5196b44b6923be1a3.js +0 -1
- package/assets/esri/core/workers/chunks/ea595b0df5050eda2a13.js +0 -1
- package/assets/esri/core/workers/chunks/eb82ff10cef2bde6e57f.js +0 -1
- package/assets/esri/core/workers/chunks/ee6e0db58dc64410e687.js +0 -1
- package/assets/esri/core/workers/chunks/f0a9f161805fc7a30fc5.js +0 -1
- package/views/2d/layers/imagery/ImageryGraphicsView2D.js +0 -5
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/*
|
|
2
|
+
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
|
+
See https://js.arcgis.com/4.23/esri/copyright.txt for details.
|
|
4
|
+
*/
|
|
5
|
+
import{_ as e}from"../../../../chunks/tslib.es6.js";import t from"../../../../Graphic.js";import r from"../../../../request.js";import{HandleOwner as i}from"../../../../core/HandleOwner.js";import{isSome as s,isNone as a,unwrap as o}from"../../../../core/maybe.js";import{watch as n,syncAndInitial as l}from"../../../../core/reactiveUtils.js";import{property as c}from"../../../../core/accessorSupport/decorators/property.js";import"../../../../core/arrayUtils.js";import"../../../../core/has.js";import"../../../../core/accessorSupport/ensureType.js";import{subclass as m}from"../../../../core/accessorSupport/decorators/subclass.js";import p from"../../../../geometry/Extent.js";import{projectExtent as h}from"../../../../layers/support/rasterFunctions/rasterProjectionHelper.js";import{snapImageToSymbolTile as y,convertVectorFieldData as u}from"../../../../layers/support/rasterFunctions/vectorFieldUtils.js";import{RasterVFContainer as d}from"../../engine/RasterVFContainer.js";import x from"./ImageryVFStrategy.js";let f=class extends i{constructor(){super(...arguments),this.attached=!1,this.container=new d,this.type="ImageryVF",this._dataParameters={exportParametersVersion:0,bbox:"",symbolTileSize:0,time:""},this._fetchpixels=async(e,t,r,i)=>{const n=await this._projectFullExtentPromise,{symbolTileSize:l}=this.layer.renderer,{extent:c,width:m,height:p}=y(e,t,r,l,n);if(s(n)&&!n.intersects(e))return{extent:c,pixelBlock:null};const h={bbox:`${c.xmin}, ${c.ymin}, ${c.xmax}, ${c.ymax}`,exportParametersVersion:this.layer.exportImageServiceParameters.version,symbolTileSize:l,time:JSON.stringify(this.timeExtent||"")};if(this._canReuseVectorFieldData(h)){const e=this.getPixelData();if(s(e)){if(`${e.extent.xmin}, ${e.extent.ymin}, ${e.extent.xmax}, ${e.extent.ymax}`===h.bbox)return e}}const{pixelData:d}=await this.layer.fetchImage(c,m,p,{timeExtent:this.timeExtent,requestAsImageElement:!1,signal:i});if(this._dataParameters=h,a(d.pixelBlock))return{extent:c,pixelBlock:null};return{extent:c,pixelBlock:"vector-uv"===this.layer.rasterInfo.dataType?o(u(d.pixelBlock,"vector-uv")):d.pixelBlock}}}get updating(){return!this.attached||this._strategy.updating}attach(){this._projectFullExtentPromise=this._getProjectedFullExtent(this.view.spatialReference),this._strategy=new x({container:this.container,fetchPixels:this._fetchpixels}),this.handles.add(n((()=>this.layer.renderer),(e=>this._updateSymbolizerParams(e)),l),"vector-field-view-update")}detach(){this._strategy.destroy(),this.container.children.forEach((e=>e.destroy())),this.container.removeAllChildren(),this._strategy=this.container=this._projectFullExtentPromise=null}getPixelData(){if(this.updating||!this.container.children.length)return null;const{extent:e,pixelBlock:t}=this.container.children[0].rawPixelData;return{extent:e,pixelBlock:t}}hitTest(e){return new t({attributes:{},geometry:e.clone(),layer:this.layer})}update(e){this._strategy.update(e,this._symbolizerParams)}redraw(){this._updateSymbolizerParams(this.layer.renderer),this._strategy.redraw(this._symbolizerParams)}_canReuseVectorFieldData(e){const t=this._dataParameters.exportParametersVersion===e.exportParametersVersion,r=this._dataParameters.time===e.time,i=this._dataParameters.symbolTileSize===e.symbolTileSize,s=this._dataParameters.bbox===e.bbox;return t&&r&&i&&s}async _getProjectedFullExtent(e){try{return await h(this.layer.fullExtent,e)}catch(t){try{const t=(await r(this.layer.url,{query:{option:"footprints",outSR:e.wkid||JSON.stringify(e.toJSON()),f:"json"}})).data.featureCollection.layers[0].layerDefinition.extent;return t?p.fromJSON(t):null}catch{return null}}}_updateSymbolizerParams(e){"vector-field"===e.type&&(this._symbolizerParams=this.layer.symbolizer.generateWebGLParameters({pixelBlock:null}))}};e([c()],f.prototype,"attached",void 0),e([c()],f.prototype,"container",void 0),e([c()],f.prototype,"layer",void 0),e([c()],f.prototype,"timeExtent",void 0),e([c()],f.prototype,"type",void 0),e([c()],f.prototype,"view",void 0),e([c()],f.prototype,"updating",null),f=e([m("esri.views.2d.layers.imagery.VectorFieldView2D")],f);const g=f;export{g as default};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.23/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{_ as e}from"../../../chunks/tslib.es6.js";import t from"../../../core/Accessor.js";import"../../../core/has.js";import s from"../../../core/Handles.js";import{equalsShallow as i}from"../../../core/lang.js";import{lerp as r}from"../../../core/mathUtils.js";import{isSome as o,destroyMaybe as n,applySome as a,isNone as h}from"../../../core/maybe.js";import{watch as p,syncAndInitial as l}from"../../../core/reactiveUtils.js";import{when as
|
|
5
|
+
import{_ as e}from"../../../chunks/tslib.es6.js";import t from"../../../core/Accessor.js";import"../../../core/has.js";import s from"../../../core/Handles.js";import{equalsShallow as i}from"../../../core/lang.js";import{lerp as r}from"../../../core/mathUtils.js";import{isSome as o,destroyMaybe as n,applySome as a,isNone as h}from"../../../core/maybe.js";import{watch as p,syncAndInitial as l}from"../../../core/reactiveUtils.js";import{when as m}from"../../../core/watchUtils.js";import{property as d}from"../../../core/accessorSupport/decorators/property.js";import"../../../core/accessorSupport/ensureType.js";import{subclass as _}from"../../../core/accessorSupport/decorators/subclass.js";import{l as c}from"../../../chunks/vec3.js";import{getReferenceEllipsoid as u}from"../../../geometry/projectionEllipsoid.js";import{isMoon as g,isEarth as v}from"../../../geometry/support/spatialReferenceUtils.js";import{enablePrecipitation as w}from"../../../support/featureFlags.js";import{ChapmanAtmosphere as y}from"./ChapmanAtmosphere.js";import{CloudsComposition as f}from"./CloudsComposition.js";import{isReadyCloudsData as A}from"./CloudsData.js";import{CloudsGenerator as R}from"./CloudsGenerator.js";import{cloudPresets as C}from"./CloudsPresets.js";import{Fog as P}from"./Fog.js";import{PanoramicAtmosphere as E}from"./PanoramicAtmosphere.js";import{Precipitation as N}from"./Precipitation.js";import{P as b}from"../../../chunks/Precipitation.glsl.js";import j from"./SimpleAtmosphere.js";import{Stars as T}from"./Stars.js";import{weatherHeightLimit as x}from"./weather.js";import{RenderPass as O}from"../webgl-engine/lib/RenderPass.js";import{RenderSlot as S}from"../webgl-engine/lib/RenderSlot.js";var M;const D=[S.POSTPROCESSING_ENVIRONMENT_OPAQUE,S.POSTPROCESSING_ENVIRONMENT_TRANSPARENT];let I,U=M=class extends t{constructor(e){super(e),this._handles=new s,this._context=null,this._pendingAtmosphere=null,this._atmosphere=null,this._stars=null,this._precipitation=null,this._clouds=null,this._cloudComposition=null,this._fog=null}get atmosphereType(){return o(this._pendingAtmosphere)?this._pendingAtmosphere.type:o(this._atmosphere)?this._atmosphere.type:"none"}get canRender(){var e;return!(null==(e=this.view.basemapTerrain)||!e.renderer.canRender)||"global"!==this.view.viewingMode}get needsLinearDepth(){return"realistic"===this._selectAtmosphereType()}updateAnimation(e){return!!o(this._precipitation)&&this._precipitation.update(e)}get updating(){return o(this._pendingAtmosphere)||o(this._stars)&&this._stars.updating||o(this._clouds)&&this._clouds.running}get weatherVisible(){return c(this.view.state.camera.eye)-u(this.view.spatialReference).radius<=x}get weatherEnabled(){var e;return!(null==(e=this.view.environmentManager)||!e.weatherEnabled)}get precipitationEnabled(){return w()}initialize(){this.view._stage.addRenderPlugin(D,this)}destroy(){this._pendingAtmosphere=n(this._pendingAtmosphere),this.uninitializeRenderContext(),this._handles=n(this._handles),this.view&&null!=this.view._stage&&(this.view._stage.removeRenderPlugin(this),this._set("view",null))}initializeRenderContext(e=null){this._context=e,this._handles.add([m(this.view,"basemapTerrain",(()=>this._updateBasemapTerrain()),!0),p((()=>({viewingMode:this.view.viewingMode,atmosphereEnabled:this.view.environment.atmosphereEnabled,atmosphereQuality:this.view.environment.atmosphere.quality})),(()=>this._updateAtmosphere()),l),p((()=>this._starsCreationParameters),(e=>this._createOrDestroyStars(e)),{sync:!0,initial:!0,equals:i}),p((()=>this._environmentPostProcessCreationParameters),(e=>this._createOrDestroyPrecipitation(e)),{sync:!0,initial:!0,equals:i}),p((()=>this._cloudsCreationParameters),(e=>this._createOrDestroyClouds(e)),{sync:!0,initial:!0,equals:i}),p((()=>this._environmentPostProcessCreationParameters),(e=>this._createOrDestroyFog(e)),{sync:!0,initial:!0,equals:i}),p((()=>this._weatherUpdateParameters),(e=>{this._updateWeather(e),this._updateFog(e)}),l)])}uninitializeRenderContext(){this._stars=n(this._stars),this._precipitation=n(this._precipitation),this._atmosphere=n(this._atmosphere),this._clouds=n(this._clouds),this._cloudComposition=n(this._cloudComposition),this._fog=n(this._fog)}render(e){if(e.pass===O.MATERIAL)switch(e.slot){case S.POSTPROCESSING_ENVIRONMENT_OPAQUE:o(this._stars)&&this._stars.render(e),o(this._atmosphere)&&this._atmosphere.canRender&&(this._atmosphere.render(e),A(this._clouds)&&o(this._cloudComposition)&&(this._cloudComposition.render(e,this._clouds,o(this.view.animation)),this._cloudComposition.isFading&&this._setNeedsRender()));break;case S.POSTPROCESSING_ENVIRONMENT_TRANSPARENT:if(o(this._atmosphere)&&this._atmosphere.canRender){const t=this.weatherEnabled?this.view.environment.weather.type:"disabled";this._atmosphere.renderHaze(e,"rainy"===t),o(this._fog)&&("foggy"!==t&&"realistic"===this._selectAtmosphereType()||this._fog.render(e,"foggy"===t,"rainy"===t)),"rainy"!==this.view.environment.weather.type&&"snowy"!==this.view.environment.weather.type||o(this._precipitation)&&this._precipitation.render(e,this.view.environment.weather.precipitation,"rainy"===this.view.environment.weather.type?b.RAIN:b.SNOW)}}}get _cloudsCreationParameters(){return this.weatherEnabled?{view:this.view,viewingMode:this.view.state.viewingMode,rctx:o(this._context)?this._context.renderContext.rctx:null,radius:u(this.view.spatialReference).radius}:null}_createOrDestroyClouds(e){this._clouds=n(this._clouds),this._cloudComposition=n(this._cloudComposition),a(e,(({view:e,viewingMode:t,rctx:s,radius:i})=>{this._clouds=new R({rctx:s,view:e,requestRender:()=>this._setNeedsRender()}),this._cloudComposition=new f(s,t,i,c(e.state.camera.eye)-i)})),this._setNeedsRender()}get _weatherUpdateParameters(){const e=this.weatherEnabled?this.view.environment.weather:null;return h(e)?null:{type:e.type,weatherAdjustment:"foggy"===e.type?e.fogStrength:e.cloudCover}}_updateWeather(e){h(e)||h(this._clouds)||this._clouds.applyPreset(C[e.type],e.weatherAdjustment)}_setNeedsRender(){o(this._context)&&this._context.requestRender()}get _starsCreationParameters(){var e,t,s;return{view:this.view,starsEnabled:null!=(e=null==(t=this.view)||null==(s=t.environment)?void 0:s.starsEnabled)&&e}}_createOrDestroyStars({view:e,starsEnabled:t}){t&&h(this._stars)?(this._stars=new T({view:e,requestRender:()=>this._setNeedsRender()}),this._setNeedsRender()):!t&&o(this._stars)&&(this._stars.destroy(),this._stars=null,this._setNeedsRender())}_createOrDestroyPrecipitation(e){this.precipitationEnabled&&h(this._precipitation)?(a(e,(({context:e,view:t})=>{this._precipitation=new N(e,t)})),this._setNeedsRender()):!this.precipitationEnabled&&o(this._precipitation)&&(this._precipitation=n(this._precipitation),this._setNeedsRender())}_updateFog(e){h(this._fog)||h(e)||("foggy"===e.type?this._fog.strength=r(3e-5,.005,e.weatherAdjustment**3):this._fog.strength=4e-6)}get _environmentPostProcessCreationParameters(){return!this.weatherEnabled||h(this._context)?null:{view:this.view,context:this._context}}_createOrDestroyFog(e){this.weatherEnabled&&h(this._fog)?(a(e,(({view:e,context:t})=>{this._fog=new P(t,e)})),this._updateFog(this._weatherUpdateParameters),this._setNeedsRender()):o(this._fog)&&(this._fog.destroy(),this._fog=null,this._setNeedsRender())}_updateAtmosphere(){const e=this._selectAtmosphereType();if(this.atmosphereType===e)return;o(this._pendingAtmosphere)&&(this._pendingAtmosphere!==this._atmosphere&&this._pendingAtmosphere.destroy(),this._pendingAtmosphere=null);const t=this._getAtmosphereClass();if(!t)return o(this._atmosphere)&&(this._atmosphere.destroy(),this._atmosphere=null,this._setNeedsRender()),void this._updateBasemapTerrain();const s=new t(this.view);o(this._context)&&s.initializeRenderContext(this._context),h(this._atmosphere)&&(this._atmosphere=s,this._setNeedsRender()),this._pendingAtmosphere=s,s.when().then((()=>{o(this._atmosphere)&&this._pendingAtmosphere&&this._pendingAtmosphere!==this._atmosphere&&(this._atmosphere.destroy(),this._atmosphere=this._pendingAtmosphere),this._pendingAtmosphere=null,this._setNeedsRender(),this._updateBasemapTerrain()})).catch((()=>{this._pendingAtmosphere===s&&(this._pendingAtmosphere=null)}))}_getAtmosphereClass(){switch(this._selectAtmosphereType()){case"none":return null;case"realistic":return y;case"panoramic":return E;case"simple":return j;default:return}}_selectAtmosphereType(){const e=this.view.get("environment.atmosphereEnabled"),t=this.view.get("environment.atmosphere.quality"),s=this.view.viewingMode;return!e||null==t||g(this.view.spatialReference)?"none":"local"===s?"panoramic":"high"===t&&o(this._context)&&y.isSupported(this._context)&&v(this.view.spatialReference)?"realistic":"simple"}_updateBasemapTerrain(){this.view.basemapTerrain&&(this.view.basemapTerrain.velvetOverground=o(this._atmosphere)&&"simple"===this.atmosphereType)}get test(){return{atmosphere:this._atmosphere,clouds:this._clouds,selectAtmosphereType:()=>this._selectAtmosphereType(),stubGetAtmosphereClass:e=>{I=M.prototype._getAtmosphereClass,M.prototype._getAtmosphereClass=e},restoreGetAtmosphereClass:()=>{M.prototype._getAtmosphereClass=I}}}};e([d({constructOnly:!0})],U.prototype,"view",void 0),e([d({type:Boolean,readOnly:!0})],U.prototype,"updating",null),e([d()],U.prototype,"weatherVisible",null),e([d()],U.prototype,"_pendingAtmosphere",void 0),e([d()],U.prototype,"_stars",void 0),e([d()],U.prototype,"_precipitation",void 0),e([d()],U.prototype,"_clouds",void 0),e([d()],U.prototype,"_cloudComposition",void 0),e([d()],U.prototype,"_fog",void 0),e([d()],U.prototype,"weatherEnabled",null),e([d()],U.prototype,"precipitationEnabled",null),e([d()],U.prototype,"_cloudsCreationParameters",null),e([d()],U.prototype,"_weatherUpdateParameters",null),e([d()],U.prototype,"_starsCreationParameters",null),e([d()],U.prototype,"_environmentPostProcessCreationParameters",null),U=M=e([_("esri.views.3d.environment.EnvironmentRenderer")],U);export{U as EnvironmentRenderer};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.23/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import e from"../../../core/Logger.js";import{lerp as t,clamp as r}from"../../../core/mathUtils.js";import{removeMaybe as i,disposeMaybe as s,abortMaybe as o,isNone as a}from"../../../core/maybe.js";import{createResolver as n,isAbortError as
|
|
5
|
+
import e from"../../../core/Logger.js";import{lerp as t,clamp as r}from"../../../core/mathUtils.js";import{removeMaybe as i,disposeMaybe as s,abortMaybe as o,isNone as a}from"../../../core/maybe.js";import{createResolver as n,throwIfAborted as h,isAbortError as c}from"../../../core/promiseUtils.js";import{init as l}from"../../../core/watchUtils.js";import{n as m}from"../../../chunks/mat4.js";import{c as u}from"../../../chunks/mat4f64.js";import{s as d}from"../../../chunks/vec2.js";import{a as p}from"../../../chunks/vec2f64.js";import{l as f,a as _,b as g,i as R,c as x,p as V}from"../../../chunks/vec3.js";import{c as j}from"../../../chunks/vec3f64.js";import{getReferenceEllipsoid as y}from"../../../geometry/projectionEllipsoid.js";import{isMars as C}from"../../../geometry/support/spatialReferenceUtils.js";import{requestImage as v}from"../../../support/requestImageUtils.js";import{computeInnerAltitudeFade as b,innerAtmosphereDepth as A}from"./atmosphereUtils.js";import{S as T}from"../../../chunks/SimpleAtmosphere.glsl.js";import{SimpleAtmosphereTechniqueConfiguration as w,SimpleAtmosphereTechnique as D}from"./SimpleAtmosphereTechnique.js";import q from"./resources/MarsAtmosphereTexture.js";import U from"./resources/SimpleAtmosphereTexture.js";import{makePiecewiseLinearFunction as S}from"../support/mathUtils.js";import{glLayout as F}from"../support/buffer/glUtil.js";import{newLayout as M}from"../support/buffer/InterleavedLayout.js";import{Default3D as I}from"../webgl-engine/lib/DefaultVertexAttributeLocations.js";import{createQuadVAO as L}from"../webgl-engine/lib/glUtil3D.js";import{project as O}from"../webgl-engine/lib/Util.js";import{VertexAttribute as E}from"../webgl-engine/lib/VertexAttribute.js";import{BufferObject as W}from"../../webgl/BufferObject.js";import{PixelFormat as k,PixelType as N,TextureWrapMode as G,TextureSamplingMode as B,PrimitiveType as H,Usage as P}from"../../webgl/enums.js";import{Texture as z}from"../../webgl/Texture.js";import{vertexCount as Y}from"../../webgl/Util.js";import{VertexArrayObject as J}from"../../webgl/VertexArrayObject.js";const K=e.getLogger("esri.views.3d.environment.SimpleAtmosphere"),Q=128,X=-A,Z=0,$=50,ee=()=>1-511/512,te=S([[50,.1015625],[500,.21875],[5e3,1-250/512],[5e4,.4140625]]);class re{constructor(e){this.view=e,this.type="simple",this._renderData={texV:p(),silCircleCenter:j(),silCircleV1:j(),silCircleV2:j(),altitudeFade:0,innerScale:0,undergroundFadeAlpha:0},this._texture=null,this._fadeVaoCount=0,this._readyResolver=n(),this._readyController=new AbortController,this.texV1=1,this.canRender=!0,this.isOnMars=C(e.spatialReference);const t=y(e.spatialReference);this.planetRadius=t.radius,this.outerRimWidth=t.outerAtmosphereRimWidth,this.innerRimFactor=(this.planetRadius+X)/this.planetRadius,this.middleRimFactor=(this.planetRadius+Z)/this.planetRadius,this.outerRimFactor=(this.planetRadius+this.outerRimWidth)/this.planetRadius,this.texV0=Z/this.outerRimWidth,this.texVScale=this.texV1-this.texV0}destroy(){this._readyResolver.reject(),this._cameraChangeHandle=i(this._cameraChangeHandle),this._texture=s(this._texture),this._fadeVao=s(this._fadeVao),this._vao=s(this._vao),this._readyController=o(this._readyController)}when(){return this._readyResolver.promise}async initializeRenderContext(e){this._shaderTechniqueRepository=e.shaderTechniqueRep;const t=e.renderContext.rctx;this._cameraChangeHandle=l(this.view,"state.camera",(()=>e.requestRender()),!0),this._vao=this._createRibbon(t),this._vaoCount=Y(this._vao,"geometry"),this._fadeVao=L(t),this._fadeVaoCount=Y(this._fadeVao,"geometry");const r=this.isOnMars?q:U,i=this._readyController.signal;try{const s=await v(r,{signal:i});h(i),this._texture=new z(t,{pixelFormat:k.RGBA,dataType:N.UNSIGNED_BYTE,wrapMode:G.CLAMP_TO_EDGE,samplingMode:B.LINEAR,flipped:!0},s),e.requestRender(),this._readyController=null,this._readyResolver.resolve()}catch(s){c(s)||K.error("Unable to initialize simple atmosphere: image request failed",s),this._readyResolver.reject(s)}}get coneTechnique(){if(a(this._coneTechnique)){const e=new w;e.geometry=T.Cone,this._coneTechnique=this._shaderTechniqueRepository.acquire(D,e)}return this._coneTechnique}get undergroundTechnique(){if(a(this._undergroundTechnique)){const e=new w;e.geometry=T.Underground,this._undergroundTechnique=this._shaderTechniqueRepository.acquire(D,e)}return this._undergroundTechnique}render(e){this._update(e.camera);const t=e.rctx;if(this._renderData.undergroundFadeAlpha<1){const r=t.useTechnique(this.coneTechnique);r.setUniformMatrix4fv("proj",e.camera.projectionMatrix),r.setUniformMatrix4fv("view",e.camera.viewMatrix),r.setUniform3fv("silCircleCenter",this._renderData.silCircleCenter),r.setUniform3fv("silCircleV1",this._renderData.silCircleV1),r.setUniform3fv("silCircleV2",this._renderData.silCircleV2),r.setUniform2fv("texV",this._renderData.texV),r.bindTexture(this._texture,"tex"),e.scenelightingData.setLightDirectionUniform(r),r.setUniform1f("altitudeFade",this._renderData.altitudeFade),r.setUniform1f("innerScale",this._renderData.innerScale),t.bindVAO(this._vao),t.drawArrays(H.TRIANGLES,0,this._vaoCount)}if(this._renderData.undergroundFadeAlpha>0){const r=t.useTechnique(this.undergroundTechnique);r.setUniform1f("undergroundFadeAlpha",this._renderData.undergroundFadeAlpha),e.scenelightingData.setLightDirectionUniform(r),r.setUniform3fv("cameraPosition",e.camera.eye),t.bindVAO(this._fadeVao),t.drawArrays(H.TRIANGLE_STRIP,0,this._fadeVaoCount)}}renderHaze(){return!1}_update(e){const i=j(),s=this.planetRadius,o=f(e.eye),a=o-s;if(a<0){const e=Math.min(-a/5e3,1);this._renderData.undergroundFadeAlpha=e}else this._renderData.undergroundFadeAlpha=0;const n=Math.max($,a),h=s+X;this._renderData.innerScale=ne(s+n,s,h)-1,this._renderData.altitudeFade=b(a),_(i,e.eye,(s+$)/o),ie(i,e.center,e.up,s,this._renderData);const c=this._computeScreenRimWidth(e,i,e.up,this._renderData),l=ee(),m=te(a);let u=this.texV0+l*this.texVScale,p=this.texV0+c*m*this.texVScale;if(a>$){ie(e.eye,e.center,e.up,s,this._renderData);const i=this._computeScreenRimWidth(e,e.eye,e.up,this._renderData),o=r((i-1.5)/(c-1.5),0,1);u=this.texV0+o*l*this.texVScale,p=this.texV0+t(this.texV1,c*m,o)*this.texVScale}d(this._renderData.texV,u,p)}_createRibbon(e){const t=new Float32Array(3+3*Q*3),r=new Uint32Array(3*Q*5);t[0]=0,t[1]=0,t[2]=-1;for(let o=0;o<Q;o++){const e=9*o+3;t[e+0]=o,t[e+1]=this.innerRimFactor,t[e+2]=-1,t[e+3]=o,t[e+4]=this.middleRimFactor,t[e+5]=0,t[e+6]=o,t[e+7]=this.outerRimFactor,t[e+8]=1;const i=3*o+1,s=o===Q-1?1:i+3,a=15*o;r[a+0]=i,r[a+1]=i+1,r[a+2]=s+1,r[a+3]=s+1,r[a+4]=s,r[a+5]=i,r[a+6]=i+1,r[a+7]=i+2,r[a+8]=s+2,r[a+9]=s+2,r[a+10]=s+1,r[a+11]=i+1,r[a+12]=i,r[a+13]=s,r[a+14]=0}const i=he.createBuffer(r.length),s=i.position;for(let o=0;o<r.length;++o){const e=3*r[o];s.set(o,0,t[e]),s.set(o,1,t[e+1]),s.set(o,2,t[e+2])}return new J(e,I,{geometry:F(he)},{geometry:W.createVertex(e,P.STATIC_DRAW,i.buffer)})}_computeScreenRimWidth(e,t,r,i){return g(oe,i.silCircleCenter,i.silCircleV2),_(ae,oe,this.outerRimFactor),m(se,t,oe,r),O(oe,se,e.projectionMatrix,e.viewport),O(ae,se,e.projectionMatrix,e.viewport),R(oe,ae)/e.height}}function ie(e,t,r,i,s){const o=f(e),a=i*Math.sqrt(o*o-i*i)/o,n=Math.sqrt(i*i-a*a),h=s.silCircleV1,c=s.silCircleV2;return _(s.silCircleCenter,e,n/o),x(h,e,t),V(h)<1&&x(h,e,r),_(h,h,a/f(h)),x(c,h,e),_(c,c,a/f(c)),a}const se=u(),oe=j(),ae=j();function ne(e,t,r){return e*e/(Math.sqrt(e*e-t*t)*Math.sqrt(e*e-r*r)+t*r)}const he=M().vec3f(E.POSITION);export{re as default};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.23/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{_ as e}from"../../../../../chunks/tslib.es6.js";import t from"../../../../../Color.js";import i from"../../../../../analysis/LineOfSightTarget.js";import a from"../../../../../core/Collection.js";import r from"../../../../../core/Handles.js";import{handlesGroup as s,makeHandle as n}from"../../../../../core/handleUtils.js";import o from"../../../../../core/Logger.js";import{destroyMaybe as l,isSome as c,removeMaybe as h,isNone as u,mapOr as p}from"../../../../../core/maybe.js";import{watch as d,syncAndInitial as g,sync as _}from"../../../../../core/reactiveUtils.js";import{property as m}from"../../../../../core/accessorSupport/decorators/property.js";import"../../../../../core/arrayUtils.js";import"../../../../../core/has.js";import"../../../../../core/accessorSupport/ensureType.js";import{subclass as y}from"../../../../../core/accessorSupport/decorators/subclass.js";import{create as v,fromPoints as b}from"../../../../../geometry/support/lineSegment.js";import{LineOfSightRayIntersector as T}from"../../../analysis/LineOfSight/LineOfSightRayIntersector.js";import{LineOfSightToolConfiguration as f}from"./LineOfSightToolConfiguration.js";import{createSphereManipulator as w,createSphereManipulatorRenderObjects as M}from"./lineOfSightToolUtils.js";import{LaserlineVisualElement as L}from"../../visualElements/LaserlineVisualElement.js";import{createManipulatorDragEventPipeline as k}from"../../../../interactive/dragEventPipeline.js";import{InteractiveToolBase as C}from"../../../../interactive/InteractiveToolBase.js";import{ManipulatorStateCustomFlags as V}from"../../../../interactive/interfaces.js";var S;!function(e){e.Ready="ready",e.Creating="creating",e.Created="created"}(S||(S={}));const O=a.ofType(i),E=o.getLogger("esri.views.3d.interactive.analysisTools.lineOfSight.LineOfSightTool");let j=class extends C{constructor(e){super(e),this.configuration=new f,this.analysisView=null,this._creating=!1,this._showTracker=!0,this._someManipulatorsFocused=!1,this._laserlineVisualElement=null,this._grabbedManipulator=null,this._analysisHandles=new r,this._handles=new r,this._manipulatorHandles=new r,this._targetTrackerManipulator=null}initialize(){this._initialize()}async _initialize(){this.analysisView=await this.view.whenAnalysisView(this.analysis),this.destroyed||(this._intersector=new T({view:this.view}),this.startToolCreation(),this._handles.add(d((()=>this.state),(e=>{e===S.Created&&this.finishToolCreation()}),g)),this._observerManipulator=this._createObserverManipulator(),this._handles.add([d((()=>({...this.configuration.observer})),(()=>this._updateObserverManipulatorStyle()),_),d((()=>this.analysisView.elevationAlignedObserver),(e=>this._onObserverLocationChange(e)),g),d((()=>({...this.configuration.laserLine})),(()=>this._createVisualElements()),g),this._connectAnalyses()]),this.continue())}destroy(){this._handles=l(this._handles),this._manipulatorHandles=l(this._manipulatorHandles),this._analysisHandles=l(this._analysisHandles),this._observerManipulator=null,this._clearTargetTracker(),this._removeVisualElements(),this._intersector=null,this._set("analysis",null)}get state(){return this._creating?S.Creating:c(this.analysis.observer)?S.Created:S.Ready}get cursor(){return!this._someManipulatorsFocused&&this._creating&&this._showTracker?"crosshair":null}get updating(){return!!c(this.analysisView)&&this.analysisView.updating}get _shouldRenderTracker(){return this._showTracker&&c(this.analysis.observer)&&!this._someManipulatorsFocused}continue(){this.view.activeTool=this,this._creating=!0,this._showTracker=!0,this._manipulatorFocusChanged()}stop(){this._creating=!1,this._showTracker=!1,this._clearTargetTracker(),this._manipulatorFocusChanged()}onInputEvent(e){switch(e.type){case"immediate-double-click":this._doubleClickHandler(e);break;case"key-down":this._keyDownHandler(e);break;case"pointer-move":this._pointerMoveHandler(e)}}onInputEventAfter(e){if("immediate-click"===e.type)this._clickHandler(e)}onShow(){this.analysis.visible=!0}onHide(){this.analysis.visible=!1}_connectAnalyses(){let e=null;return s([d((()=>this.analysisView.analyses),(t=>{e=h(e),e=t.on("change",(e=>this._onAnalysesCollectionChange(e))),t.forEach((e=>this._connectAnalysis(e)))}),g),n((()=>e=h(e)))])}_onAnalysesCollectionChange(e){e.added.forEach((e=>this._connectAnalysis(e))),e.removed.forEach((e=>this._disconnectAnalysis(e)))}_connectAnalysis(e){if(this.destroyed)return void E.warn("Attempting to connect an analysis to a destroyed LineOfSight tool. Ignoring.");const t=this._analysisHandles;if(t.has(e))return;const i=this._createTargetManipulator(e.target);u(this._targetTrackerManipulator)&&i.metadata.target===this.analysisView.cursorTarget&&(this._targetTrackerManipulator=i,this._targetTrackerManipulator.available=!1,this._targetTrackerManipulator.interactive=!1,this._updateLaserLineRenderer()),t.add([d((()=>this._getLineOfSightManipulatorStateDependencies(e)),(()=>this._updateManipulatorState(i,e)),g),d((()=>e.elevationAlignedTargetLocation),(e=>this._onTargetLocationChange(e,i)),g)],e)}_disconnectAnalysis(e){if(this.destroyed)return void E.warn("Attempting to disconnect an analysis from a destroyed LineOfSight tool. Ignoring.");this._analysisHandles.remove(e);const t=this._getTargetManipulator(e.target);c(t)&&(this.manipulators.remove(t),this._manipulatorHandles.remove(t),c(this._targetTrackerManipulator)&&this._targetTrackerManipulator===t&&(this._targetTrackerManipulator=null))}_createTargetTracker(e){this.analysisView.cursorTarget=new i({location:e.point,intersection:e})}_clearTargetTracker(){c(this.analysisView.cursorTarget)&&(this.analysisView.cursorTarget=l(this.analysisView.cursorTarget))}_createManipulator(e,t,i){const a=w(this.view,e);return a.metadata=i,this._manipulatorHandles.add([t(a),a.events.on("focus-changed",(()=>this._manipulatorFocusChanged())),a.events.on("grab-changed",(e=>this._manipulatorGrabChanged(a,e))),a.events.on("immediate-click",(e=>e.stopPropagation()))],a),this.manipulators.add(a),a}_createTargetManipulator(e){const t=this.configuration,i={size:t.target.size,customColor1:t.target.visibleColor,customColor2:t.target.occludedColor,customColor3:t.target.undefinedColor,visible:!0},a={target:e,type:"target"},r=this._createManipulator(i,(e=>this._createTargetManipulatorDragPipeline(e)),a);return c(e.location)?r.elevationAlignedLocation=e.location:r.available=!1,r}_getTargetManipulator(e){let t=null;return this.manipulators.forEach((i=>{const a=i.manipulator;u(t)&&"target"===a.metadata.type&&a.metadata.target===e&&(t=a)})),t}_createObserverManipulator(){const e=this.configuration,t={size:e.observer.size,color:e.observer.color,visible:!0};return this._createManipulator(t,(e=>this._createObserverManipulatorDragPipeline(e)),{type:"observer",intersection:null})}_updateObserverManipulatorStyle(){const e=this._observerManipulator,t=this.configuration.observer,i={size:t.size,color:t.color,visible:e.available};e.renderObjects=M(i)}_manipulatorFocusChanged(){this._someManipulatorsFocused=this.manipulators.some((e=>e.manipulator.focused)),this._updateLaserLineRenderer()}_screenToIntersection(){return e=>{const t=this._intersector.getScreenPointIntersection(e.screenEnd);return u(t)?null:{...e,intersection:t}}}_createTargetManipulatorDragPipeline(e){return k(e,((t,i,a)=>{i.next(this._screenToIntersection()).next(this._updateTargetDragStep(e)).next((()=>this._updateLaserLineRenderer())),a.next(this._cancelTargetDragStep(e.metadata.target)).next((()=>this._updateLaserLineRenderer()))}))}_createObserverManipulatorDragPipeline(e){return k(e,((e,t,i)=>{t.next(this._screenToIntersection()).next(this._updateObserverDragStep()).next((()=>this._updateLaserLineRenderer())),i.next(this._cancelObserverDragStep()).next((()=>this._updateLaserLineRenderer()))}))}_updateObserverDragStep(){return e=>(this.analysis.observer=e.intersection.point,this.analysis.intersection=e.intersection,e)}_cancelObserverDragStep(){const e=c(this.analysis.observer)?this.analysis.observer.clone():null,t=this.analysis.intersection;return i=>(this.analysis.observer=e,this.analysis.intersection=t,i)}_updateTargetDragStep(e){return t=>{const i=t.intersection.point;return e.metadata.target.location=i,e.metadata.target.intersection=t.intersection,c(i)&&(e.elevationAlignedLocation=i),t}}_cancelTargetDragStep(e){const t=p(e.location,null,(e=>e.clone())),i=e.intersection;return a=>(e.location=t,e.intersection=i,a)}_manipulatorGrabChanged(e,t){switch(t.action){case"start":this._grabbedManipulator=e;break;case"end":this._grabbedManipulator===e&&(this._grabbedManipulator=null)}this._manipulatorFocusChanged()}_updateManipulatorState(e,t){const{isValid:i,isTargetVisible:a}=t.computationResult;e.state=i?a?V.Custom1:V.Custom2:V.Custom3}_getLineOfSightManipulatorStateDependencies(e){const{isValid:t,isTargetVisible:i}=e.computationResult;return{isValid:t,isTargetVisible:i}}_updateLaserLineRenderer(){if(u(this._laserlineVisualElement))return;const e=this._laserlineVisualElement,t=c(this._grabbedManipulator)?this._grabbedManipulator:this._shouldRenderTracker&&this.analysis.observer?this._targetTrackerManipulator:null;this.configuration.laserLine.enabled&&c(t)?(e.heightManifoldTarget=t.renderLocation,t!==this._observerManipulator?e.lineVerticalPlaneSegment=b(this._observerManipulator.renderLocation,t.renderLocation,A):e.lineVerticalPlaneSegment=null):(e.heightManifoldTarget=null,e.lineVerticalPlaneSegment=null)}_createVisualElements(){const e=this.configuration.laserLine;this._removeVisualElements(),this._laserlineVisualElement=new L({view:this.view,attached:!0,style:{glowColor:t.toUnitRGB(e.glowColor),glowWidth:e.glowWidth,innerColor:t.toUnitRGB(e.innerColor),innerWidth:e.innerWidth,globalAlpha:e.globalAlpha}})}_removeVisualElements(){c(this._laserlineVisualElement)&&(this._laserlineVisualElement.destroy(),this._laserlineVisualElement=null)}_onObserverLocationChange(e){u(e)?this._observerManipulator.available=!1:(this._observerManipulator.metadata.intersection=null,this._observerManipulator.available=!0,this._observerManipulator.elevationAlignedLocation=e)}_onTargetLocationChange(e,t){c(e)?(t.elevationAlignedLocation=e,t!==this._targetTrackerManipulator&&(t.available=!0)):t.available=!1}_addPointFromClickEvent(e){const t=this._intersector.getScreenPointIntersection(e);u(t)||u(t.point)||(this.analysis.observer?(this._clearTargetTracker(),this.analysis.targets.add(new i({location:t.point,intersection:t}))):(this.analysis.observer=t.point,this.analysis.intersection=t))}_clickHandler(e){this._creating&&(this._addPointFromClickEvent({x:e.x,y:e.y}),e.stopPropagation())}_doubleClickHandler(e){this._creating&&(this.stop(),e.stopPropagation())}_keyDownHandler(e){this._creating&&"Escape"===e.key&&(this.stop(),e.stopPropagation())}_pointerMoveHandler(e){if(this._showTracker="mouse"===e.pointerType&&this._creating,this._updateLaserLineRenderer(),!this._showTracker||u(this.analysis.observer))return;const t={x:e.x,y:e.y},i=this._intersector.getScreenPointIntersection(t);c(i)&&c(i.point)&&(c(this.analysisView.cursorTarget)?(this.analysisView.cursorTarget.location=i.point,this.analysisView.cursorTarget.intersection=i):this._createTargetTracker(i),this._updateLaserLineRenderer())}};e([m({constructOnly:!0})],j.prototype,"view",void 0),e([m({constructOnly:!0})],j.prototype,"analysis",void 0),e([m({readOnly:!0})],j.prototype,"state",null),e([m({readOnly:!0})],j.prototype,"cursor",null),e([m({readOnly:!0})],j.prototype,"updating",null),e([m({type:f})],j.prototype,"configuration",void 0),e([m()],j.prototype,"analysisView",void 0),e([m()],j.prototype,"_creating",void 0),e([m()],j.prototype,"_showTracker",void 0),e([m()],j.prototype,"_shouldRenderTracker",null),e([m()],j.prototype,"_someManipulatorsFocused",void 0),e([m()],j.prototype,"_laserlineVisualElement",void 0),e([m()],j.prototype,"_grabbedManipulator",void 0),j=e([y("esri.views.3d.interactive.analysisTools.lineOfSight.LineOfSightTool")],j);const A=v();export{O as LineOfSightTargetCollection,j as LineOfSightTool};
|
|
5
|
+
import{_ as e}from"../../../../../chunks/tslib.es6.js";import t from"../../../../../Color.js";import i from"../../../../../analysis/LineOfSightTarget.js";import a from"../../../../../core/Collection.js";import r from"../../../../../core/Handles.js";import{handlesGroup as s,makeHandle as n}from"../../../../../core/handleUtils.js";import o from"../../../../../core/Logger.js";import{destroyMaybe as l,isSome as c,removeMaybe as h,isNone as u,applySome as p}from"../../../../../core/maybe.js";import{watch as d,syncAndInitial as g,sync as _}from"../../../../../core/reactiveUtils.js";import{property as m}from"../../../../../core/accessorSupport/decorators/property.js";import"../../../../../core/arrayUtils.js";import"../../../../../core/has.js";import"../../../../../core/accessorSupport/ensureType.js";import{subclass as y}from"../../../../../core/accessorSupport/decorators/subclass.js";import{create as v,fromPoints as b}from"../../../../../geometry/support/lineSegment.js";import{LineOfSightRayIntersector as T}from"../../../analysis/LineOfSight/LineOfSightRayIntersector.js";import{LineOfSightToolConfiguration as f}from"./LineOfSightToolConfiguration.js";import{createSphereManipulator as w,createSphereManipulatorRenderObjects as M}from"./lineOfSightToolUtils.js";import{LaserlineVisualElement as L}from"../../visualElements/LaserlineVisualElement.js";import{createManipulatorDragEventPipeline as k}from"../../../../interactive/dragEventPipeline.js";import{InteractiveToolBase as C}from"../../../../interactive/InteractiveToolBase.js";import{ManipulatorStateCustomFlags as V}from"../../../../interactive/interfaces.js";var S;!function(e){e.Ready="ready",e.Creating="creating",e.Created="created"}(S||(S={}));const O=a.ofType(i),E=o.getLogger("esri.views.3d.interactive.analysisTools.lineOfSight.LineOfSightTool");let j=class extends C{constructor(e){super(e),this.configuration=new f,this.analysisView=null,this._creating=!1,this._showTracker=!0,this._someManipulatorsFocused=!1,this._laserlineVisualElement=null,this._grabbedManipulator=null,this._analysisHandles=new r,this._handles=new r,this._manipulatorHandles=new r,this._targetTrackerManipulator=null}initialize(){this._initialize()}async _initialize(){this.analysisView=await this.view.whenAnalysisView(this.analysis),this.destroyed||(this._intersector=new T({view:this.view}),this.startToolCreation(),this._handles.add(d((()=>this.state),(e=>{e===S.Created&&this.finishToolCreation()}),g)),this._observerManipulator=this._createObserverManipulator(),this._handles.add([d((()=>({...this.configuration.observer})),(()=>this._updateObserverManipulatorStyle()),_),d((()=>this.analysisView.elevationAlignedObserver),(e=>this._onObserverLocationChange(e)),g),d((()=>({...this.configuration.laserLine})),(()=>this._createVisualElements()),g),this._connectAnalyses()]),this.continue())}destroy(){this._handles=l(this._handles),this._manipulatorHandles=l(this._manipulatorHandles),this._analysisHandles=l(this._analysisHandles),this._observerManipulator=null,this._clearTargetTracker(),this._removeVisualElements(),this._intersector=null,this._set("analysis",null)}get state(){return this._creating?S.Creating:c(this.analysis.observer)?S.Created:S.Ready}get cursor(){return!this._someManipulatorsFocused&&this._creating&&this._showTracker?"crosshair":null}get updating(){return!!c(this.analysisView)&&this.analysisView.updating}get _shouldRenderTracker(){return this._showTracker&&c(this.analysis.observer)&&!this._someManipulatorsFocused}continue(){this.view.activeTool=this,this._creating=!0,this._showTracker=!0,this._manipulatorFocusChanged()}stop(){this._creating=!1,this._showTracker=!1,this._clearTargetTracker(),this._manipulatorFocusChanged()}onInputEvent(e){switch(e.type){case"immediate-double-click":this._doubleClickHandler(e);break;case"key-down":this._keyDownHandler(e);break;case"pointer-move":this._pointerMoveHandler(e)}}onInputEventAfter(e){if("immediate-click"===e.type)this._clickHandler(e)}onShow(){this.analysis.visible=!0}onHide(){this.analysis.visible=!1}_connectAnalyses(){let e=null;return s([d((()=>this.analysisView.analyses),(t=>{e=h(e),e=t.on("change",(e=>this._onAnalysesCollectionChange(e))),t.forEach((e=>this._connectAnalysis(e)))}),g),n((()=>e=h(e)))])}_onAnalysesCollectionChange(e){e.added.forEach((e=>this._connectAnalysis(e))),e.removed.forEach((e=>this._disconnectAnalysis(e)))}_connectAnalysis(e){if(this.destroyed)return void E.warn("Attempting to connect an analysis to a destroyed LineOfSight tool. Ignoring.");const t=this._analysisHandles;if(t.has(e))return;const i=this._createTargetManipulator(e.target);u(this._targetTrackerManipulator)&&i.metadata.target===this.analysisView.cursorTarget&&(this._targetTrackerManipulator=i,this._targetTrackerManipulator.available=!1,this._targetTrackerManipulator.interactive=!1,this._updateLaserLineRenderer()),t.add([d((()=>this._getLineOfSightManipulatorStateDependencies(e)),(()=>this._updateManipulatorState(i,e)),g),d((()=>e.elevationAlignedTargetLocation),(e=>this._onTargetLocationChange(e,i)),g)],e)}_disconnectAnalysis(e){if(this.destroyed)return void E.warn("Attempting to disconnect an analysis from a destroyed LineOfSight tool. Ignoring.");this._analysisHandles.remove(e);const t=this._getTargetManipulator(e.target);c(t)&&(this.manipulators.remove(t),this._manipulatorHandles.remove(t),c(this._targetTrackerManipulator)&&this._targetTrackerManipulator===t&&(this._targetTrackerManipulator=null))}_createTargetTracker(e){this.analysisView.cursorTarget=new i({location:e.point,intersection:e})}_clearTargetTracker(){c(this.analysisView.cursorTarget)&&(this.analysisView.cursorTarget=l(this.analysisView.cursorTarget))}_createManipulator(e,t,i){const a=w(this.view,e);return a.metadata=i,this._manipulatorHandles.add([t(a),a.events.on("focus-changed",(()=>this._manipulatorFocusChanged())),a.events.on("grab-changed",(e=>this._manipulatorGrabChanged(a,e))),a.events.on("immediate-click",(e=>e.stopPropagation()))],a),this.manipulators.add(a),a}_createTargetManipulator(e){const t=this.configuration,i={size:t.target.size,customColor1:t.target.visibleColor,customColor2:t.target.occludedColor,customColor3:t.target.undefinedColor,visible:!0},a={target:e,type:"target"},r=this._createManipulator(i,(e=>this._createTargetManipulatorDragPipeline(e)),a);return c(e.location)?r.elevationAlignedLocation=e.location:r.available=!1,r}_getTargetManipulator(e){let t=null;return this.manipulators.forEach((i=>{const a=i.manipulator;u(t)&&"target"===a.metadata.type&&a.metadata.target===e&&(t=a)})),t}_createObserverManipulator(){const e=this.configuration,t={size:e.observer.size,color:e.observer.color,visible:!0};return this._createManipulator(t,(e=>this._createObserverManipulatorDragPipeline(e)),{type:"observer",intersection:null})}_updateObserverManipulatorStyle(){const e=this._observerManipulator,t=this.configuration.observer,i={size:t.size,color:t.color,visible:e.available};e.renderObjects=M(i)}_manipulatorFocusChanged(){this._someManipulatorsFocused=this.manipulators.some((e=>e.manipulator.focused)),this._updateLaserLineRenderer()}_screenToIntersection(){return e=>{const t=this._intersector.getScreenPointIntersection(e.screenEnd);return u(t)?null:{...e,intersection:t}}}_createTargetManipulatorDragPipeline(e){return k(e,((t,i,a)=>{i.next(this._screenToIntersection()).next(this._updateTargetDragStep(e)).next((()=>this._updateLaserLineRenderer())),a.next(this._cancelTargetDragStep(e.metadata.target)).next((()=>this._updateLaserLineRenderer()))}))}_createObserverManipulatorDragPipeline(e){return k(e,((e,t,i)=>{t.next(this._screenToIntersection()).next(this._updateObserverDragStep()).next((()=>this._updateLaserLineRenderer())),i.next(this._cancelObserverDragStep()).next((()=>this._updateLaserLineRenderer()))}))}_updateObserverDragStep(){return e=>(this.analysis.observer=e.intersection.point,this.analysis.intersection=e.intersection,e)}_cancelObserverDragStep(){const e=c(this.analysis.observer)?this.analysis.observer.clone():null,t=this.analysis.intersection;return i=>(this.analysis.observer=e,this.analysis.intersection=t,i)}_updateTargetDragStep(e){return t=>{const i=t.intersection.point;return e.metadata.target.location=i,e.metadata.target.intersection=t.intersection,c(i)&&(e.elevationAlignedLocation=i),t}}_cancelTargetDragStep(e){const t=p(e.location,(e=>e.clone())),i=e.intersection;return a=>(e.location=t,e.intersection=i,a)}_manipulatorGrabChanged(e,t){switch(t.action){case"start":this._grabbedManipulator=e;break;case"end":this._grabbedManipulator===e&&(this._grabbedManipulator=null)}this._manipulatorFocusChanged()}_updateManipulatorState(e,t){const{isValid:i,isTargetVisible:a}=t.computationResult;e.state=i?a?V.Custom1:V.Custom2:V.Custom3}_getLineOfSightManipulatorStateDependencies(e){const{isValid:t,isTargetVisible:i}=e.computationResult;return{isValid:t,isTargetVisible:i}}_updateLaserLineRenderer(){if(u(this._laserlineVisualElement))return;const e=this._laserlineVisualElement,t=c(this._grabbedManipulator)?this._grabbedManipulator:this._shouldRenderTracker&&this.analysis.observer?this._targetTrackerManipulator:null;this.configuration.laserLine.enabled&&c(t)?(e.heightManifoldTarget=t.renderLocation,t!==this._observerManipulator?e.lineVerticalPlaneSegment=b(this._observerManipulator.renderLocation,t.renderLocation,A):e.lineVerticalPlaneSegment=null):(e.heightManifoldTarget=null,e.lineVerticalPlaneSegment=null)}_createVisualElements(){const e=this.configuration.laserLine;this._removeVisualElements(),this._laserlineVisualElement=new L({view:this.view,attached:!0,style:{glowColor:t.toUnitRGB(e.glowColor),glowWidth:e.glowWidth,innerColor:t.toUnitRGB(e.innerColor),innerWidth:e.innerWidth,globalAlpha:e.globalAlpha}})}_removeVisualElements(){c(this._laserlineVisualElement)&&(this._laserlineVisualElement.destroy(),this._laserlineVisualElement=null)}_onObserverLocationChange(e){u(e)?this._observerManipulator.available=!1:(this._observerManipulator.metadata.intersection=null,this._observerManipulator.available=!0,this._observerManipulator.elevationAlignedLocation=e)}_onTargetLocationChange(e,t){c(e)?(t.elevationAlignedLocation=e,t!==this._targetTrackerManipulator&&(t.available=!0)):t.available=!1}_addPointFromClickEvent(e){const t=this._intersector.getScreenPointIntersection(e);u(t)||u(t.point)||(this.analysis.observer?(this._clearTargetTracker(),this.analysis.targets.add(new i({location:t.point,intersection:t}))):(this.analysis.observer=t.point,this.analysis.intersection=t))}_clickHandler(e){this._creating&&(this._addPointFromClickEvent({x:e.x,y:e.y}),e.stopPropagation())}_doubleClickHandler(e){this._creating&&(this.stop(),e.stopPropagation())}_keyDownHandler(e){this._creating&&"Escape"===e.key&&(this.stop(),e.stopPropagation())}_pointerMoveHandler(e){if(this._showTracker="mouse"===e.pointerType&&this._creating,this._updateLaserLineRenderer(),!this._showTracker||u(this.analysis.observer))return;const t={x:e.x,y:e.y},i=this._intersector.getScreenPointIntersection(t);c(i)&&c(i.point)&&(c(this.analysisView.cursorTarget)?(this.analysisView.cursorTarget.location=i.point,this.analysisView.cursorTarget.intersection=i):this._createTargetTracker(i),this._updateLaserLineRenderer())}};e([m({constructOnly:!0})],j.prototype,"view",void 0),e([m({constructOnly:!0})],j.prototype,"analysis",void 0),e([m({readOnly:!0})],j.prototype,"state",null),e([m({readOnly:!0})],j.prototype,"cursor",null),e([m({readOnly:!0})],j.prototype,"updating",null),e([m({type:f})],j.prototype,"configuration",void 0),e([m()],j.prototype,"analysisView",void 0),e([m()],j.prototype,"_creating",void 0),e([m()],j.prototype,"_showTracker",void 0),e([m()],j.prototype,"_shouldRenderTracker",null),e([m()],j.prototype,"_someManipulatorsFocused",void 0),e([m()],j.prototype,"_laserlineVisualElement",void 0),e([m()],j.prototype,"_grabbedManipulator",void 0),j=e([y("esri.views.3d.interactive.analysisTools.lineOfSight.LineOfSightTool")],j);const A=v();export{O as LineOfSightTargetCollection,j as LineOfSightTool};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.23/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{_ as e}from"../../../chunks/tslib.es6.js";import r from"../../../core/Error.js";import{destroyMaybe as t,get as s,isNone as i}from"../../../core/maybe.js";import{whenOnce as
|
|
5
|
+
import{_ as e}from"../../../chunks/tslib.es6.js";import r from"../../../core/Error.js";import{destroyMaybe as t,get as s,isNone as i}from"../../../core/maybe.js";import{initial as o,whenOnce as n}from"../../../core/reactiveUtils.js";import{property as l}from"../../../core/accessorSupport/decorators/property.js";import"../../../core/arrayUtils.js";import"../../../core/has.js";import"../../../core/accessorSupport/ensureType.js";import{subclass as a}from"../../../core/accessorSupport/decorators/subclass.js";import{hydrateGraphic as p}from"../../../layers/graphics/hydratedFeatures.js";import{FeatureTileController3D as u}from"../../../layers/graphics/controllers/FeatureTileController3D.js";import c from"../../../rest/support/Query.js";import{DrapeSourceType as h}from"./interfaces.js";import d from"./graphics/Graphics3DFeatureProcessor.js";import y from"./graphics/QueryEngine.js";import{HeatmapFeatureProcessor as m}from"./support/HeatmapFeatureProcessor.js";import{toViewIfLocal as g}from"./support/projectExtentUtils.js";import{UpdatePolicy as f}from"../webgl-engine/lib/basicInterfaces.js";import{TaskPriority as v}from"../../support/Scheduler.js";const E=E=>{let b=class extends E{constructor(){super(...arguments),this.controller=null,this.updatePolicy=f.SYNC,this.suspendResumeExtentMode="computed",this.slicePlaneEnabled=!1,this.drapeSourceType=h.Features,this.fullExtentInLocalViewSpatialReference=null,this.suspendResumeExtent=null,this._controllerCreated=!1,this.clippingExtent=null,this.supportsHeightUnitConversion=!0,this.pendingController=null,this.queryEngine=null}initialize(){const e=this.layer;"isTable"in e&&e.isTable?this.addResolvingPromise(Promise.reject(new r("featurelayerview:table-not-supported","table feature layer can't be displayed",{layer:e}))):(this.addResolvingPromise(this._validateGeometryType()),this.updatingHandles.add((()=>this.layer.renderer),(e=>this._recreateProcessor(e)),o),this.addResolvingPromise((async()=>{const e=await g(this);this.fullExtentInLocalViewSpatialReference=e,await this._initializeController()})()),this.updatingHandles.add((()=>this.updatePolicy),(e=>this.processor.preferredUpdatePolicy=e)),this.queryEngine=new y({layerView:this,priority:v.FEATURE_QUERY_ENGINE}),this.notifyChange("updating"))}destroy(){this._destroyPendingController(),this.controller=t(this.controller),this._set("processor",t(this.processor)),this.queryEngine=t(this.queryEngine),this.loadedGraphics=null}_destroyPendingController(){this.pendingController=t(this.pendingController)}get legendEnabled(){var e;return this.canResume()&&(null==(e=this.processor)?void 0:e.legendEnabled)}get graphics3DProcessor(){var e;return"graphics-3d"===(null==(e=this.processor)?void 0:e.type)?this.processor:null}get heatmapProcessor(){var e;return"heatmap"===(null==(e=this.processor)?void 0:e.type)?this.processor:null}getGraphicFromGraphicUid(e){var r;let t=null;return null==(r=this.loadedGraphics)||r.forEach((r=>{r.uid===e&&(t=p(r,this.layer))})),t}whenGraphicBounds(e,r){var t;return null==(t=this.processor)?void 0:t.whenGraphicBounds(e,r)}computeAttachmentOrigin(e,r){var t;return null==(t=this.processor)?void 0:t.computeAttachmentOrigin(e,r)}queryFeatures(e,r){return this.queryEngine.executeQuery(this._ensureQuery(e),s(r,"signal"))}queryObjectIds(e,r){return this.queryEngine.executeQueryForIds(this._ensureQuery(e),s(r,"signal"))}queryFeatureCount(e,r){return this.queryEngine.executeQueryForCount(this._ensureQuery(e),s(r,"signal"))}queryExtent(e,r){return this.queryEngine.executeQueryForExtent(this._ensureQuery(e),s(r,"signal"))}_ensureQuery(e){return i(e)?this.createQuery():c.from(e)}highlight(e){return this.processor.highlight(e,this.layer.objectIdField)}maskOccludee(e){return this.processor.maskOccludee(e)}canResume(){var e;return super.canResume()&&!(null!=(e=this.processor)&&e.scaleVisibilitySuspended)}getSuspendInfo(){const e=super.getSuspendInfo();return this.processor?{...e,...this.processor.suspendInfo}:e}isUpdating(){var e,r,t;return!(!this.processor||this.processor.destroyed)&&!(this._controllerCreated&&(null==(e=this.controller)||!e.updating)&&null!=(r=this.view)&&null!=(t=r.basemapTerrain)&&t.ready&&!this.processor.updating)}async _initializeController(){const e=this.createController();this.pendingController=e,await e.when(),this._setControllerWhenInitialized(e)}async _setControllerWhenInitialized(e){try{await this.when()}catch(r){}this._controllerCreated=!0,this.notifyChange("updating"),this.isResolved()&&!this.destroyed?(await n((()=>{var e,r;return null==(e=this.view)||null==(r=e.basemapTerrain)?void 0:r.ready})),this.beforeSetController(e),this.pendingController=null,this.controller=e,this.loadedGraphics=e.graphics,this.notifyChange("updating")):this._destroyPendingController()}_updateClippingExtent(e){if(this.clippingExtent=e,!this.controller)return!1;switch(this.controller.type){case"stream":return!1;case"feature-tile-3d":return this.controller.extent=e,!0}}async _validateGeometryType(){switch(this.layer.geometryType){case"multipatch":case"multipoint":return Promise.reject(new r("featurelayerview3d:unsupported-geometry-type","Unsupported geometry type ${geometryType}",{geometryType:this.layer.geometryType}))}}_recreateProcessor(e){var r,t;const s="heatmap"===(null==e?void 0:e.type),i="heatmap"===(null==(r=this.processor)?void 0:r.type),o=this.processor;if(o&&s===i)return;const n=s?new m({owner:this}):new d({owner:this,frustumVisibilityEnabled:!0,scaleVisibilityEnabled:!0,filterVisibilityEnabled:!0,timeExtentVisibilityEnabled:!0,elevationAlignmentEnabled:!0,elevationFeatureExpressionEnabled:!0,preferredUpdatePolicy:this.updatePolicy,updateClippingExtent:e=>this._updateClippingExtent(e)});this._set("processor",n),null==o||o.destroy(),null==(t=this.queryEngine)||t.clear(),this.addResolvingPromise(n.setup())}_getResourceInfo(){var e,r;const t=this.controller instanceof u?this.controller:null;return{displayedNumberOfFeatures:this.loadedGraphics.length,maximumNumberOfFeatures:null!=(e=null==t?void 0:t.maximumNumberOfFeatures)?e:-1,totalNumberOfFeatures:null!=(r=null==t?void 0:t.serviceDataCount)?r:-1,nodes:0,...this.processor.performanceInfo}}get performanceInfo(){return this._getResourceInfo()}};return e([l()],b.prototype,"loadedGraphics",void 0),e([l()],b.prototype,"suspended",void 0),e([l({readOnly:!0})],b.prototype,"legendEnabled",null),e([l()],b.prototype,"updating",void 0),e([l()],b.prototype,"controller",void 0),e([l()],b.prototype,"processor",void 0),e([l({readOnly:!0})],b.prototype,"updatePolicy",void 0),e([l({readOnly:!0})],b.prototype,"suspendResumeExtentMode",void 0),e([l({type:Boolean})],b.prototype,"slicePlaneEnabled",void 0),e([l({readOnly:!0})],b.prototype,"suspendInfo",void 0),e([l()],b.prototype,"graphics3DProcessor",null),e([l()],b.prototype,"heatmapProcessor",null),b=e([a("esri.views.3d.layers.FeatureLikeLayerView3D")],b),b};export{E as FeatureLikeLayerView3D};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.23/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{_ as e}from"../../../chunks/tslib.es6.js";import r from"../../../core/Error.js";import{isSome as
|
|
5
|
+
import{_ as e}from"../../../chunks/tslib.es6.js";import r from"../../../core/Error.js";import{isSome as t}from"../../../core/maybe.js";import{init as s}from"../../../core/watchUtils.js";import{property as i}from"../../../core/accessorSupport/decorators/property.js";import"../../../core/arrayUtils.js";import"../../../core/has.js";import"../../../core/accessorSupport/ensureType.js";import{subclass as o}from"../../../core/accessorSupport/decorators/subclass.js";import{equals as a}from"../../../geometry/support/spatialReferenceUtils.js";import n from"../../../layers/VoxelWasmManager.js";import{LayerView3D as l}from"./LayerView3D.js";import d from"../../layers/LayerView.js";import{ContextType as m}from"../../webgl/context-util.js";let p=class extends(l(d)){constructor(){super(...arguments),this._usedMemory=0,this._futureMemory=0,this.type="voxel-3d",this._wasmLayerId=-1}initialize(){var e;if("local"!==this.view.viewingMode)throw new r("voxel:unsupported-viewingMode","Voxel layers support local viewingMode only.",{});if(this.view._stage.renderView.renderingContext.type!==m.WEBGL2)throw new r("voxel:unsupported-context","Voxel layers are supported in WebGL2 rendering contexts only.",{});if(!!(null==(e=this.view._stage.renderView.renderingContext.capabilities.colorBufferFloat)||!e.textureFloat))throw new r("voxel:missing-color-buffer-float","Voxel layers require the WebGL2 extension EXT_color_buffer_float",{});const i=this.layer.spatialReference;if(!a(i,this.view.spatialReference))throw new r("layerview:spatial-reference-incompatible","The spatial reference of this scene layer is incompatible with the spatial reference of the view",{});const o=this.layer.style.currentVariableId,l=this.layer.getVolume(o),d=this.layer.getVariable(o);if(t(l)&&t(d)){const e=l.dimensions[0],r=l.dimensions[1],t=l.getZDimension();if(t>1){const s=l.dimensions[t],i=e.size*r.size*s.size;let o=1;switch(d.renderingFormat.type){case"Int16":case"UInt16":o=2;break;case"Int32":case"UInt32":case"Float32":o=4}this._futureMemory=o*i}}const p=n.getInstance(),c=p.addLayer(this.view,this).then((e=>{this._wasmLayerId=e,this._suspendedHandle=s(this,"suspended",(e=>{n.getInstance().setLayerEnabled(this.view,this,!e)}))})).catch((e=>{if(p.removeLayer(this.view,this),this._wasmLayerId=-1,-1===e)throw new r("voxel:addLayer-failure","The voxel layer description was invalid.",{});if(-2===e)throw new r("voxel:addLayer-failure","The voxel layer web assembly module failed to download.",{})}));this.addResolvingPromise(c)}destroy(){n.getInstance().removeLayer(this.view,this),this._suspendedHandle&&(this._suspendedHandle.remove(),this._suspendedHandle=null)}isUpdating(){return!(this._wasmLayerId<0)&&n.getInstance().isUpdating(this.view,this._wasmLayerId)}updatingFlagChanged(){this.notifyChange("updating")}getUsedMemory(){return this._usedMemory}getUnloadedMemory(){return this._futureMemory}ignoresMemoryFactor(){return!0}get performanceInfo(){return{nodes:0,displayedNumberOfFeatures:0,maximumNumberOfFeatures:0,totalNumberOfFeatures:0,core:null}}setUsedMemory(e){this._usedMemory=e,this._futureMemory=0}};e([i()],p.prototype,"layer",void 0),e([i({readOnly:!0,aliasOf:"layer.parsedUrl.path"})],p.prototype,"baseUrl",void 0),p=e([o("esri.views.3d.layers.VoxelLayerView3D")],p);const c=p;export{c as default};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.23/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import e from"../../../../core/Error.js";import{isNone as t,get as r,isSome as n}from"../../../../core/maybe.js";import{pt2px as s}from"../../../../core/screenUtils.js";import{a as
|
|
5
|
+
import e from"../../../../core/Error.js";import{isNone as t,get as r,isSome as n}from"../../../../core/maybe.js";import{pt2px as s}from"../../../../core/screenUtils.js";import{a as i}from"../../../../chunks/vec2f64.js";import{isCalloutSupport as o}from"../../../../symbols/callouts/calloutUtils.js";import{perObjectElevationAligner as a}from"./ElevationAligners.js";import{SymbolUpdateType as l,needsElevationUpdates2D as c}from"./elevationAlignmentUtils.js";import{ElevationContext as d}from"./ElevationContext.js";import{Graphics3DObject3DGraphicLayer as h}from"./Graphics3DObject3DGraphicLayer.js";import{Graphics3DSymbolLayer as m}from"./Graphics3DSymbolLayer.js";import{validateSymbolLayerSize as f,namedAnchorToHUDMaterialAnchorPos as p}from"./graphicUtils.js";import{placePointOnGeometry as g,createStageObjectForHUD as u,extendPointGraphicElevationContext as y}from"./pointUtils.js";import b from"../../webgl-engine/lib/GeometryUtil.js";import{TextRenderParameters as x}from"../../webgl-engine/lib/TextRenderParameters.js";import v from"../../webgl-engine/lib/TextTexture.js";import{HUDMaterial as O}from"../../webgl-engine/materials/HUDMaterial.js";const P=[0,0,1];class w extends m{constructor(e,t,r,n){super(e,t,r,n),this._elevationOptions={supportsOffsetAdjustment:!0,supportsOnTheGround:!1},this.ensureDrapedStatus(!1)}async doLoad(){if(!this._drivenProperties.size){const t=f(this.symbolLayer.size);if(t)throw new e("graphics3dtextsymbollayer:invalid-size",t)}await this._createTextRenderParameters()}async _createTextRenderParameters(){const e=this._context.graphicsCoreOwner.view.pixelRatio;this._textRenderParameters=await x.fromSymbol(this.symbolLayer,e)}destroy(){super.destroy()}createGraphics3DGraphic(e){const r=e.graphic,n=g(r.geometry);if(t(n))return this.logger.warn(`unsupported geometry type for text symbol: ${r.geometry.type}`),null;const s=this.symbolLayer.text;if(t(s)||""===s)return null;const i=o(this.symbol)&&this.symbol.hasVisibleVerticalOffset()?this.symbol:null,a={..._,anchor:this._anchorFromAlignment(this.symbolLayer.horizontalAlignment,this.symbolLayer.verticalAlignment)};return this._createAs3DShape(r,n,s,i,a)}createLabel(e,r,n,s){const i=e.graphic,o=g(i.geometry);if(t(o))return this.logger.warn(`unsupported geometry type for label: ${i.geometry.type}`),null;const a=r.text;return!a||/^\s+$/.test(a)?null:this._createAs3DShape(i,o,a,r,r,n,s)}setGraphicElevationContext(e,t,r=0){const n=super.setGraphicElevationContext(e,t);return n.addOffsetRenderUnits(r),n}layerOpacityChanged(){return this.logger.warn("layer opacity change not yet implemented in Graphics3DTextSymbolLayer"),!1}layerElevationInfoChanged(e,t){return E(e,t,((e,t)=>{this.updateGraphicElevationContext(t,e)})),l.UPDATE}slicePlaneEnabledChanged(e,t){return E(e,t,(e=>{for(const t of e.stageObject.geometryRecords)t.material.setParameters({slicePlaneEnabled:this._context.slicePlaneEnabled})})),!0}physicalBasedRenderingChanged(){return!0}pixelRatioChanged(){return!1}updateGraphicElevationContext(e,t){this.setGraphicElevationContext(e,t.elevationContext,t.metadata.elevationOffset),t.needsElevationUpdates=c(t.elevationContext.mode)||"absolute-height"===t.elevationContext.mode}_defaultElevationInfoNoZ(){return S}_createAs3DShape(e,o,l,m,f=_,g,x){const w=this.setGraphicElevationContext(e,new d,f.elevationOffset),E="polyline"===r(e.geometry,"type"),S=e.uid,j=this._context.stage.renderView.renderingContext,L=f.anchor in p?f.anchor:"center",C=p[L],G=t(x)?new v(j,l,this._textRenderParameters):null,D={occlusionTest:!0,screenOffset:f.screenOffset,anchorPos:C,polygonOffset:!0,color:[1,1,1,1],centerOffsetUnits:f.centerOffsetUnits,debugDrawLabelBorder:f.debugDrawLabelBorder,drawInSecondSlot:!0};if(n(G)&&(D.textureId=G.id,D.texCoordScale=G.texcoordScale),n(x)&&(D.textureId=x.id),n(m)&&n(m.verticalOffset)){const{screenLength:e,minWorldLength:t,maxWorldLength:r}=m.verticalOffset;D.verticalOffset={screenLength:s(e),minWorldLength:t||0,maxWorldLength:null!=r?r:1/0}}if(this._context.screenSizePerspectiveEnabled){const{screenSizePerspectiveSettings:e,screenSizePerspectiveSettingsLabels:t}=this._context.sharedResources;D.screenSizePerspective=t.overridePadding(this._textRenderParameters.haloSize+this._textRenderParameters.definition.background.padding[0]),D.screenSizePerspectiveAlignment=e}let U;if(E&&(D.shaderPolygonOffset=1e-4),D.slicePlaneEnabled=this._context.slicePlaneEnabled,n(g)){const e=JSON.stringify(D);U=g.get(e),t(U)&&(U=new O(D),g.add(e,U))}else U=new O(D);const R=[U],A=f.translation,z=n(G)?[G.displayWidth,G.displayHeight]:[0,0],T=f.centerOffset,W=P,I=[0,0],B=[b.createPointGeometry(W,A,null,z,T,I,null)],H=this._context.layer.uid,V=u(this._context,o,B,R,w,H,S);if(null===V)return null;const $=new h(this,V.object,B,t(g)?R:null,n(G)?[G]:null,a,w);$.alignedSampledElevation=V.sampledElevation,$.needsElevationUpdates=c(w.mode)||"absolute-height"===w.mode;const{displayWidth:k,displayHeight:F}=n(G)?G:f;$.getScreenSize=(e=i())=>(e[0]=k,e[1]=F,e);const N={labelText:l,elevationOffset:f.elevationOffset};return $.metadata=N,y($,o,this._context.elevationProvider),$}_anchorFromAlignment(e,t){switch(t){case"bottom":return"left"===e?"bottom-left":"right"===e?"bottom-right":"bottom";case"baseline":case"middle":return"justify"===e?"center":e;case"top":return"left"===e?"top-left":"right"===e?"top-right":"top"}}}function E(e,t,r){e&&e.forEach((e=>{const s=t(e);n(s)&&r(s,e.graphic)}))}const S={mode:"relative-to-ground",offset:0},_={text:null,translation:[0,0,0],elevationOffset:0,centerOffset:[0,0,0,1],screenOffset:[0,0],anchor:"center",verticalOffset:null,centerOffsetUnits:null,debugDrawLabelBorder:!1,displayWidth:0,displayHeight:0};export{w as Graphics3DTextSymbolLayer,w as default};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.23/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{isSome as t}from"../../../../core/maybe.js";import{ApplyRendererDiffResult as
|
|
5
|
+
import{isSome as t}from"../../../../core/maybe.js";import{ApplyRendererDiffResult as s}from"./interfaces.js";import{Loadable as r}from"./Loadable.js";import{emptySymbolComplexity as i}from"./symbolComplexity.js";class e extends r{constructor(t,s,r){super(s),this.symbol=t,this.convert=r,this.graphics3DSymbol=null,this.referenced=0}getSymbolLayerSize(s){return t(this.graphics3DSymbol)?this.graphics3DSymbol.getSymbolLayerSize(s):null}get symbolLayers(){return t(this.graphics3DSymbol)?this.graphics3DSymbol.symbolLayers:[]}get extentPadding(){return t(this.graphics3DSymbol)?this.graphics3DSymbol.extentPadding:0}async doLoad(s){const r=await this.symbol.fetchSymbol({signal:s});r.id=this.symbol.id,this.graphics3DSymbol=this.convert(r),t(this.graphics3DSymbol)&&await this.graphics3DSymbol.load()}createGraphics3DGraphic(s){return t(this.graphics3DSymbol)?this.graphics3DSymbol.createGraphics3DGraphic(s,this):null}get complexity(){return t(this.graphics3DSymbol)?this.graphics3DSymbol.complexity:i}globalPropertyChanged(s,r){return!!t(this.graphics3DSymbol)&&this.graphics3DSymbol.globalPropertyChanged(s,r)}applyRendererDiff(r,i){return t(this.graphics3DSymbol)?this.graphics3DSymbol.applyRendererDiff(r,i):s.Recreate_Symbol}prepareSymbolPatch(s){t(this.graphics3DSymbol)&&this.graphics3DSymbol.prepareSymbolPatch(s)}updateGeometry(s,r){return!!t(this.graphics3DSymbol)&&this.graphics3DSymbol.updateGeometry(s,r)}onRemoveGraphic(){}getFastUpdateStatus(){return t(this.graphics3DSymbol)?this.graphics3DSymbol.getFastUpdateStatus():{loading:1,fast:0,slow:0}}destroy(){t(this.graphics3DSymbol)&&this.graphics3DSymbol.destroy(),this.graphics3DSymbol=void 0,super.destroy()}get destroyed(){return void 0===this.graphics3DSymbol}}export{e as default};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.23/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import"../../../../core/has.js";import e from"../../../../core/Logger.js";import{isNone as t,isSome as r}from"../../../../core/maybe.js";import{a
|
|
5
|
+
import"../../../../core/has.js";import e from"../../../../core/Logger.js";import{isNone as t,isSome as r,applySome as n}from"../../../../core/maybe.js";import{a}from"../../../../chunks/vec2f64.js";import{s as c,l}from"../../../../chunks/vec3.js";import{f as o,c as s}from"../../../../chunks/vec3f64.js";import{f as i}from"../../../../chunks/vec4f64.js";import{create as f,center as m,height as p}from"../../../../geometry/support/aaBoundingBox.js";import{getGraphics3DSymbol as h}from"./graphicSymbolUtils.js";import{HUDMaterial as b}from"../../webgl-engine/materials/HUDMaterial.js";const u=e.getLogger("esri.views.3d.layers.graphics.labelPlacement");function g(e){const r=C(e);if(t(r))return null;const n=O(e,r);if(t(n))return null;const c=n.anchor,l=!!r.hasLabelVerticalOffset;return w({anchor:c,verticalOffset:r.verticalOffset,screenOffset:a(),centerOffset:i(0,0,0,-1),centerOffsetUnits:"world",translation:s(),elevationOffset:0,hasLabelVerticalOffset:l},n,e)}function O(e,t){if(t.anchor)return t;const r=e.labelClass.labelPlacement,n=x[r],a=n||P(e);return r&&!n&&u.warnOncePerTick(`the requested label placement '${r}' is not currently supported in SceneView`),v(a,e)}function d(e){const t=e.graphics3DGraphic.graphics3DSymbol,n=h(t);return r(n)?n.symbol.symbolLayers.getItemAt(0):null}function v(e,n){const a=n.graphics3DGraphic.graphic.geometry;if(t(a))return null;if(r(n.disablePlacement)){return n.labelClass.labelPlacement?(u.warnOncePerTick(y(e.placement,n.disablePlacement.logEntityDescription)),P(n)):e}const c=a.type;switch(c){case"polyline":case"polygon":case"extent":case"multipoint":if(n.labelClass.labelPlacement)return u.warnOncePerTick(y(e.placement,`'${c}' geometries`)),P(n);break;case"point":case"mesh":return e}return e}function y(e,t){return`the requested label placement '${e}' is currently unsupported for ${t} in SceneView`}function P(e){const n=e.graphics3DGraphic.graphic.geometry;if(t(n))return null;switch(n.type){case"polyline":case"extent":case"multipoint":return{placement:"center-center",normalizedOffset:null,anchor:"center"};case"polygon":{const t=d(e);return r(t)&&"extrude"===t.type?x["above-center"]:{placement:"center-center",normalizedOffset:null,anchor:"center"}}case"point":case"mesh":return x["above-center"];default:return}}function w(e,r,n){const a=n.graphics3DGraphic.graphic.geometry;if(t(a))return null;switch(a.type){case"point":z(e,r,n);break;case"polygon":L(e,r,n);break;case"mesh":D(e,r,n.graphics3DGraphic.graphics[0])}return e}function L(e,n,a){const l=d(a);if(!t(l))switch(l.type){case"extrude":{const t=a.graphics3DGraphic.graphics[0];r(t)?(t.getBoundingBoxObjectSpace($),m($,e.translation),e.translation[2]=p($)/2):c(e.translation,0,0,0),D(e,n,t);break}}}function z(e,n,a){const l=d(a);if(t(l))return;const o=a.graphics3DGraphic.graphics[0];switch(r(o)?o.getCenterObjectSpace(e.translation):c(e.translation,0,0,0),l.type){case"icon":case"text":j(e,n,a,o);break;case"object":D(e,n,o)}}function j(e,t,n,a){const{graphics3DGraphic:c}=n,l=r(a)?a.getScreenSize():null;if(!c.isDraped&&r(l)){const r=S(n);B[0]=l[0]/2*(t.normalizedOffset[0]-r[0]),B[1]=l[1]/2*(t.normalizedOffset[1]-r[1]),e.screenOffset[0]=B[0],e.hasLabelVerticalOffset?(e.centerOffset[1]=B[1],e.centerOffsetUnits="screen"):e.screenOffset[1]=B[1]}else e.hasLabelVerticalOffset||"center"===e.anchor||(x[n.labelClass.labelPlacement]&&u.warnOncePerTick(`the requested placement '${t.placement}' is currently unsupported for draped graphics`),e.anchor="center")}function S(e,t=T){const{graphics3DGraphic:n}=e,a=n.graphics[0],c=r(a)?a.stageObject.geometryRecords[0].material:null;if(c&&c instanceof b){const e=c.parameters.anchorPos;t[0]=2*(e[0]-.5),t[1]=2*(e[1]-.5)}else t[0]=0,t[1]=0;return t}function D(e,t,n){const a=r(n)?n.getBoundingBoxObjectSpace($):$,c=o(a[3]-a[0],a[4]-a[1],a[5]-a[2]),s=Math.sqrt(c[0]*c[0]+c[1]*c[1]);e.centerOffset[0]=s/2*t.normalizedOffset[0];const i=e.translation[2],f=c[2]/2*t.normalizedOffset[1];e.translation[2]=0,e.elevationOffset=i+f;const m=l(c);e.centerOffset[2]=m/2*t.normalizedOffset[2]}function k(e){return"above-center"===e}function C(e){const a=e.labelClass.labelPlacement,{labelSymbol:c,graphics3DGraphic:l}=e,o=h(l.graphics3DSymbol),s=n(o,(e=>"point-3d"===e.symbol.type?e.symbol:null)),i=x[a]||P(e);return r(s)&&s.supportsCallout()&&s.hasVisibleVerticalOffset()&&!l.isDraped?{placement:null,hasLabelVerticalOffset:!1,verticalOffset:V(s.verticalOffset),anchor:null,normalizedOffset:null}:c&&c.hasVisibleVerticalOffset()&&(t(s)||!s.supportsCallout()||!s.verticalOffset||l.isDraped)?k(i.placement)?{placement:"above-center",verticalOffset:V(c.verticalOffset),anchor:"bottom",normalizedOffset:[0,i.normalizedOffset[1],0],hasLabelVerticalOffset:!0}:(u.errorOncePerTick("Callouts and vertical offset on labels are currently only supported with 'above-center' label placement (not with "+a+" placement)"),null):{placement:null,verticalOffset:null,anchor:null,normalizedOffset:null,hasLabelVerticalOffset:!1}}function V(e){const{screenLength:t,minWorldLength:r,maxWorldLength:n}=e;return{screenLength:t,minWorldLength:r,maxWorldLength:n}}const x={"above-center":{placement:"above-center",normalizedOffset:[0,1,0],anchor:"bottom"},"above-left":{placement:"above-left",normalizedOffset:[-1,1,0],anchor:"bottom-right"},"above-right":{placement:"above-right",normalizedOffset:[1,1,0],anchor:"bottom-left"},"below-center":{placement:"below-center",normalizedOffset:[0,-1,2],anchor:"top"},"below-left":{placement:"below-left",normalizedOffset:[-1,-1,0],anchor:"top-right"},"below-right":{placement:"below-right",normalizedOffset:[1,-1,0],anchor:"top-left"},"center-center":{placement:"center-center",normalizedOffset:[0,0,1],anchor:"center"},"center-left":{placement:"center-left",normalizedOffset:[-1,0,0],anchor:"right"},"center-right":{placement:"center-right",normalizedOffset:[1,0,0],anchor:"left"}},G={"above-center":["default","esriServerPointLabelPlacementAboveCenter"],"above-left":["esriServerPointLabelPlacementAboveLeft"],"above-right":["esriServerPointLabelPlacementAboveRight"],"below-center":["esriServerPointLabelPlacementBelowCenter"],"below-left":["esriServerPointLabelPlacementBelowLeft"],"below-right":["esriServerPointLabelPlacementBelowRight"],"center-center":["esriServerPointLabelPlacementCenterCenter"],"center-left":["esriServerPointLabelPlacementCenterLeft"],"center-right":["esriServerPointLabelPlacementCenterRight"]};for(const q in G){const e=G[q],t=x[q];e.forEach((e=>{x[e]=t}))}Object.freeze&&(Object.freeze(x),Object.keys(x).forEach((function(e){Object.freeze(x[e]),Object.freeze(x[e].normalizedOffset)})));const B=[0,0],T=[0,0],$=f();export{g as get};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.23/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{_ as e}from"../../../../chunks/tslib.es6.js";import{HandleOwner as
|
|
5
|
+
import{_ as e}from"../../../../chunks/tslib.es6.js";import{HandleOwner as r}from"../../../../core/HandleOwner.js";import{makeHandle as t}from"../../../../core/handleUtils.js";import{disposeMaybe as i,unwrap as o,applySome as s}from"../../../../core/maybe.js";import{property as a}from"../../../../core/accessorSupport/decorators/property.js";import"../../../../core/arrayUtils.js";import"../../../../core/has.js";import"../../../../core/accessorSupport/ensureType.js";import{subclass as n}from"../../../../core/accessorSupport/decorators/subclass.js";import{c as l}from"../../../../chunks/vec3f64.js";import{projectPointToVector as p}from"../../../../geometry/projection.js";import{convertFromPoint as m}from"../../../../layers/graphics/featureConversionUtils.js";import u from"../../../../layers/graphics/OptimizedFeature.js";import d from"../../../../layers/graphics/OptimizedGeometry.js";import y from"../../../../layers/graphics/data/FeatureStore.js";import{DRAPED_Z as h}from"../../terrain/OverlayRenderer.js";import{UpdatePolicy as c,PrimitiveType as g}from"../../webgl-engine/lib/basicInterfaces.js";import{Geometry as f}from"../../webgl-engine/lib/Geometry.js";import{ModelDirty as _}from"../../webgl-engine/lib/ModelDirtyTypes.js";import{RenderGeometry as v}from"../../webgl-engine/lib/RenderGeometry.js";import{VertexAttribute as b}from"../../webgl-engine/lib/VertexAttribute.js";import{HeatmapDensityMaterial as w}from"../../webgl-engine/materials/HeatmapDensityMaterial.js";let j=class extends r{constructor(e){super(e),this.type="heatmap",this.filterVisibility={filterChanged(){},dirty:!1},this.preferredUpdatePolicy=c.ASYNC,this.dataExtent=null,this._renderGeometries=new Map,this._material=new w({})}initialize(){this._featureStore=new y({geometryType:"esriGeometryPoint",hasZ:this.hasZ,hasM:this.hasM}),this.updatingHandles.addOnCollectionChange((()=>this._loadedPointGraphics),(e=>this._onLoadedFeaturesChange(e)))}destroy(){this._overlayRenderer.removeGeometries(Array.from(this._renderGeometries.values()),this.owner,_.Geometry.REMOVE),this._renderGeometries.clear(),this._material=i(this._material),this._featureStore.clear(),this._featureStore=null}get layer(){return this.owner.layer}get featureStore(){return this._featureStore}get updating(){return this.updatingHandles.updating}get updatingRemaining(){return 0}get suspendInfo(){return{}}get legendEnabled(){return!0}get displayFeatureLimit(){return{minimumTotalNumberOfFeatures:0,maximumTotalNumberOfFeatures:1e10,maximumTotalNumberOfPrimitives:1e10,maximumNumberOfFeatures:1e10}}get hasZ(){return"hasZ"in this.layer&&this.layer.hasZ}get hasM(){return"hasM"in this.layer&&this.layer.hasM}get scaleVisibilitySuspended(){return!1}get usedMemory(){return 0}get usedMemoryPerFeature(){return 0}get unprocessedMemoryEstimate(){return 0}get performanceInfo(){return{core:{visible:0,missing:0,pending:0},elevationUpdating:!1,visibilityFrustum:!0,visibilityScale:!0}}get _overlayRenderer(){return this.owner.view.basemapTerrain.overlayManager.renderer}get _overlaySpatialReference(){return o(this._overlayRenderer.spatialReference)}get _renderView(){return this.owner.view._stage.renderView}get _featuresArePoints(){return"point"===this.layer.geometryType}get _loadedPointGraphics(){return this.owner.loadedGraphics}async whenGraphicBounds(){return null}computeAttachmentOrigin(){return null}highlight(){return G}maskOccludee(){return G}setObjectIdVisibility(){}async setup(){}_onLoadedFeaturesChange(e){if(!this._featuresArePoints)return;this._featureStore.addMany(e.added.map((e=>new u(m(new d,e.geometry),e.attributes,s(e.centroid,(e=>m(new d,e))),e.objectId)))),this._featureStore.removeManyById(e.removed.map((({objectId:e})=>e)));const r=e.added,t=e.removed.map((({uid:e})=>{const r=this._renderGeometries.get(e);return this._renderGeometries.delete(e),r})),i=r.map((e=>{const r=this._pointGraphicToRenderGeometry(e);return this._renderGeometries.set(e.uid,r),r}));i.length>0&&this._overlayRenderer.addGeometries(i,this.owner,_.Geometry.ADD,!0),t.length>0&&this._overlayRenderer.removeGeometries(t,this.owner,_.Geometry.REMOVE),(i.length>0||t.length>0)&&this._renderView.requestRender()}_pointGraphicToRenderGeometry(e){const r=this._material,t=l();p(e.geometry,t,this._overlaySpatialReference,h);return new v(new f([[b.POSITION,{data:t,size:t.length}]],null,g.Point),r,{layerUid:this.layer.uid,graphicUid:e.uid})}};e([a()],j.prototype,"type",void 0),e([a({constructOnly:!0})],j.prototype,"owner",void 0),e([a()],j.prototype,"layer",null),e([a()],j.prototype,"featureStore",null),e([a()],j.prototype,"updating",null),e([a()],j.prototype,"updatingRemaining",null),e([a()],j.prototype,"suspendInfo",null),e([a()],j.prototype,"legendEnabled",null),e([a()],j.prototype,"filterVisibility",void 0),e([a()],j.prototype,"displayFeatureLimit",null),e([a()],j.prototype,"preferredUpdatePolicy",void 0),e([a()],j.prototype,"hasZ",null),e([a()],j.prototype,"hasM",null),e([a()],j.prototype,"dataExtent",void 0),e([a()],j.prototype,"_featureStore",void 0),e([a()],j.prototype,"_overlayRenderer",null),e([a()],j.prototype,"_overlaySpatialReference",null),e([a()],j.prototype,"_renderGeometries",void 0),e([a()],j.prototype,"_material",void 0),e([a()],j.prototype,"_renderView",null),e([a()],j.prototype,"_featuresArePoints",null),e([a()],j.prototype,"_loadedPointGraphics",null),j=e([n("esri.views.3d.layers.support.HeatmapFeatureProcessor")],j);const G=t();export{j as HeatmapFeatureProcessor};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.23/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{_ as e}from"../../../chunks/tslib.es6.js";import r from"../../../core/Accessor.js";import t from"../../../core/Evented.js";import s from"../../../core/Handles.js";import i from"../../../core/Logger.js";import{someMap as a}from"../../../core/MapUtils.js";import{releaseMaybe as o,disposeMaybe as n,isSome as h,unwrapOr as l,isNone as d,unwrap as c}from"../../../core/maybe.js";import u from"../../../core/PooledArray.js";import{someSet as p}from"../../../core/SetUtils.js";import{init as g}from"../../../core/watchUtils.js";import{property as m}from"../../../core/accessorSupport/decorators/property.js";import"../../../core/arrayUtils.js";import"../../../core/has.js";import"../../../core/accessorSupport/ensureType.js";import{subclass as y}from"../../../core/accessorSupport/decorators/subclass.js";import{q as _,f}from"../../../chunks/mat4.js";import{a as R}from"../../../chunks/vec2f64.js";import{f as T,c as b}from"../../../chunks/vec3f64.js";import{I as w}from"../../../chunks/mat4f64.js";import{ViewingMode as v}from"../../ViewingMode.js";import{DrapeTargetType as x,DrapeSourceType as O}from"../layers/interfaces.js";import E from"../support/debugFlags.js";import{OverlayIndex as L,RenderTargetType as j}from"./interfaces.js";import{Overlay as A}from"./Overlay.js";import{OverlayFramebufferObject as S}from"./OverlayFramebufferObject.js";import{OverlayRenderTarget as C}from"./OverlayRenderTarget.js";import{ShaderTechniqueRepository as P}from"../webgl-engine/core/shaderTechnique/ShaderTechniqueRepository.js";import{autoDispose as D,AutoDisposableMixin as G}from"../webgl-engine/lib/AutoDisposable.js";import{TransparencyPassType as I,UpdatePolicy as M}from"../webgl-engine/lib/basicInterfaces.js";import V from"../webgl-engine/lib/Camera.js";import{GLMaterialRepository as U}from"../webgl-engine/lib/GLMaterialRepository.js";import{createEmptyDepthTexture as F,createQuadVAO as q}from"../webgl-engine/lib/glUtil3D.js";import{GridLocalOriginFactory as H}from"../webgl-engine/lib/GridLocalOriginFactory.js";import{newIntersectorResult as W}from"../webgl-engine/lib/Intersector.js";import{StoreResults as N,IntersectorType as B}from"../webgl-engine/lib/IntersectorInterfaces.js";import{RenderOccludedFlag as k}from"../webgl-engine/lib/Material.js";import{ModelDirty as z}from"../webgl-engine/lib/ModelDirtyTypes.js";import{OverlayRenderContext as Y}from"../webgl-engine/lib/RenderContext.js";import{RenderPass as X}from"../webgl-engine/lib/RenderPass.js";import{RenderSlot as Q}from"../webgl-engine/lib/RenderSlot.js";import{SortedRenderGeometryRenderer as J}from"../webgl-engine/lib/SortedRenderGeometryRenderer.js";import{TextureTechniqueConfiguration as K,TextureTechnique as Z}from"../webgl-engine/lib/TextureTechnique.js";import{AmbientLight as $}from"../webgl-engine/lighting/Lightsources.js";import{SceneLighting as ee}from"../webgl-engine/lighting/SceneLighting.js";import{StippleTextureRepository as re}from"../webgl-engine/materials/StippleTextureRepository.js";import{C as te}from"../../../chunks/Compositing.glsl.js";import{AlphaMode as se}from"../webgl-engine/shaders/CompositingTechnique.js";import{ImmediateTask as ie,TaskPriority as ae,noBudget as oe}from"../../support/Scheduler.js";import{ClearBufferBit as ne,PrimitiveType as he,TextureType as le,PixelFormat as de,PixelType as ce,TextureSamplingMode as ue}from"../../webgl/enums.js";import{Texture as pe}from"../../webgl/Texture.js";import{vertexCount as ge}from"../../webgl/Util.js";const me=i.getLogger("esri.views.3d.webgl-engine.lib.OverlayRenderer");let ye=class extends(G(r)){constructor(e){super(e),this._overlays=null,this._overlayRenderTarget=null,this._hasHighlights=!1,this._rendersOccluded=!1,this._hasWater=!1,this._lighting=new ee,this._handles=new s,this._frameTask=ie,this._layerRenderers=new Map,this._sortedLayerRenderersDirty=!1,this._sortedLayerRenderers=new u,this._geometries=new Map,this.worldToPCSRatio=1,this.events=new t,this.longitudeCyclical=null}initialize(){const e=this.view._stage.renderView;this._rctx=e.renderingContext,this._renderContext=new Y(this._rctx);const r=e.waterTextureRepository;this._stippleTextureRepository=new re(e.renderingContext),this._shaderTechniqueRepository=new P({rctx:this._rctx,viewingMode:v.Local,stippleTextureRepository:this._stippleTextureRepository,waterTextureRepository:r}),this._handles.add([g(r,"loadingState",(()=>this.events.emit("content-changed"))),g(this,"spatialReference",(e=>this._localOrigins=new H(e)))]),this._materialRepository=new U(e.textureRepository,this._shaderTechniqueRepository,(e=>{(e.renderOccluded&Oe)>0!==this._rendersOccluded&&this._updateRendersOccluded(),this.events.emit("content-changed"),this.notifyChange("updating")}),(()=>this.events.emit("content-changed"))),this._lighting.groundLightingFactor=1,this._lighting.globalFactor=0,this._lighting.set([new $(T(1,1,1))]),this._bindParameters={slot:Q.DRAPED_MATERIAL,highlightDepthTexture:F(this._rctx),camera:be,inverseViewport:R(),origin:null,screenToWorldRatio:null,screenToPCSRatio:null,shadowMappingEnabled:!1,slicePlane:null,ssaoEnabled:!1,hasOccludees:!1,linearDepthTexture:null,lastFrameColorTexture:null,reprojectionMatrix:w,ssrEnabled:!1,lighting:this._lighting,transparencyPassType:I.NONE,terrainLinearDepthTexture:null,geometryLinearDepthTexture:null,multipassTerrainEnabled:!1,cullAboveGround:!1,multipassGeometryEnabled:!1,highlightColorTexture:null,cloudsCompositionParams:null},this._frameTask=this.view.resourceController.scheduler.registerTask(ae.STAGE,this),this._handles.add(this._frameTask)}dispose(){this._handles.destroy(),this._layerRenderers.forEach((e=>e.dispose())),this._layerRenderers.clear(),this._debugTextureTechnique=o(this._debugTextureTechnique),this._debugPatternTexture=n(this._debugPatternTexture),this._bindParameters.highlightDepthTexture=n(this._bindParameters.highlightDepthTexture),this._shaderTechniqueRepository=n(this._shaderTechniqueRepository),this._temporaryFBO=n(this._temporaryFBO),this._quadVAO=n(this._quadVAO),this.disposeOverlays()}get updating(){return this._sortedLayerRenderersDirty||this._frameTask.updating||a(this._layerRenderers,(e=>e.updating))}get hasOverlays(){return h(this._overlays)&&h(this._overlayRenderTarget)}get gpuMemoryUsage(){return h(this._overlayRenderTarget)?this._overlayRenderTarget.gpuMemoryUsage:0}collectUnusedRenderTargetMemory(e){let r=!1;if(h(this._overlayRenderTarget))for(const t of this._overlayRenderTarget.renderTargets){const s=this.overlays[0].validTargets[t.type]||!this.overlays[1].validTargets[t.type];r=this._overlayRenderTarget.validateUsageForTarget(s,t,e)||r}return r}get overlays(){return l(this._overlays,[])}ensureDrapeTargets(e){h(this._overlays)&&this._overlays.forEach((r=>{r.hasTargetWithoutRasterImage=p(e,(e=>e.drapeTargetType===x.WithoutRasterImage))}))}ensureDrapeSources(e){h(this._overlays)&&this._overlays.forEach((r=>{r.hasDrapedFeatureSource=a(e,((e,r)=>r.drapeSourceType===O.Features)),r.hasDrapedRasterSource=a(e,((e,r)=>r.drapeSourceType===O.RasterImage))}))}ensureOverlays(e,r){d(this._overlays)&&(this._overlayRenderTarget=new C(this._rctx),this._overlays=[new A(L.INNER,this._overlayRenderTarget),new A(L.OUTER,this._overlayRenderTarget)]),this.ensureDrapeTargets(e),this.ensureDrapeSources(r)}disposeOverlays(){this._overlays=null,this._overlayRenderTarget=n(this._overlayRenderTarget),this.events.emit("textures-disposed")}get running(){return this.updating}runTask(e,r=(()=>!0)){this._frameTask.processQueue(e),e.done||this._processLayers(e,r)}_processLayers(e,r){let t=!1;for(const[s,i]of this._layerRenderers){if(e.done)break;(s.destroyed||r(s))&&(i.commitChanges()&&(t=!0,e.madeProgress()),i.isEmpty&&(t=!0,this._sortedLayerRenderersDirty=!0,this._layerRenderers.delete(s),this._handles.remove(s)))}this._updateSortedLayerRenderers(),t&&(h(this._overlays)&&0===this._layerRenderers.size&&this.disposeOverlays(),this.notifyChange("updating"),this.events.emit("content-changed"),this._updateHasHighlights(),this._updateRendersOccluded(),this._updateHasWater())}processSyncLayers(){this._processLayers(oe,(e=>e.updatePolicy===M.SYNC))}addGeometries(e,r,t){for(const s of e)d(s.origin)&&(s.origin=this._localOrigins.getOrigin(s.boundingSphere)),this._geometries.set(s.id,s);this._ensureLayerRenderer(r).add(e),t===z.Geometry.UPDATE&&this._notifyGraphicGeometryChanged(e,r)}removeGeometries(e,r,t){for(const i of e)this._geometries.delete(c(i.id));const s=this._layerRenderers.get(r);s&&(s.remove(e),t===z.Geometry.UPDATE&&this._notifyGraphicGeometryChanged(e,r))}updateGeometries(e,r,t){const s=this._layerRenderers.get(r);if(s)switch(s.modify(e,t),t){case z.State.TRANSFORMATION:case z.State.VERTEXATTRS:return this._notifyGraphicGeometryChanged(e,r);case z.State.VISIBILITIES:return this._notifyGraphicVisibilityChanged(e,r)}else me.warn("Attempted to update geometry for nonexistent layer")}_notifyGraphicGeometryChanged(e,r){if(d(r.notifyGraphicGeometryChanged))return;let t;for(const s of e){const e=s.graphicUid;h(e)&&e!==t&&(r.notifyGraphicGeometryChanged(e),t=e)}}_notifyGraphicVisibilityChanged(e,r){if(d(r.notifyGraphicVisibilityChanged))return;let t;for(const s of e){const e=s.graphicUid;h(e)&&e!==t&&(r.notifyGraphicVisibilityChanged(e),t=e)}}updateHighlights(e,r){const t=this._layerRenderers.get(r);t?t.modify(e,z.State.HIGHLIGHTS):me.warn("Attempted to update highlights for nonexistent layer")}isEmpty(){return 0===this._geometries.size&&!E.OVERLAY_DRAW_DEBUG_TEXTURE}get hasHighlights(){return this._hasHighlights}get hasWater(){return this._hasWater}get rendersOccluded(){return this._rendersOccluded}updateAnimation(e){let r=!1;return this._layerRenderers.forEach((t=>r=t.updateAnimation(e)||r)),r}updateLayerOrder(){this._sortedLayerRenderersDirty=!0}drawTarget(e,r,t){const s=e.canvasGeometries;if(0===s.numViews)return!1;this._screenToWorldRatio=t*e.mapUnitsPerPixel;const i=r.renderPass;if(this.isEmpty()||i===X.MATERIAL_HIGHLIGHT&&!this.hasHighlights||i===X.MATERIAL_NORMAL&&!this.hasWater||!e.hasSomeSizedView())return!1;const a=r.fbo;if(!a.isValid())return!1;const o=2*e.resolution,n=e.resolution;a.resize(o,n);const l=this._rctx;be.pixelRatio=e.pixelRatio*t,this._renderContext.pass=i,this._bindParameters.screenToWorldRatio=this._screenToWorldRatio,this._bindParameters.screenToPCSRatio=this._screenToWorldRatio*this.worldToPCSRatio,this._bindParameters.slot=i===X.MATERIAL_NORMAL?Q.DRAPED_WATER:Q.DRAPED_MATERIAL,e.applyViewport(this._rctx),a.bind(l),e.index===L.INNER&&(l.setClearColor(0,0,0,0),l.clearSafe(ne.COLOR_BUFFER_BIT));const d=r.type===j.ColorNoRasterImage?_e.ExcludeRasterImage:r.type===j.Occluded?_e.OccludedOnly:_e.Normal;if(d===_e.OccludedOnly&&(this._renderContext.renderOccludedMask=Oe),E.OVERLAY_DRAW_DEBUG_TEXTURE&&d!==_e.OccludedOnly)for(let h=0;h<s.numViews;h++)this._setViewParameters(s.extents[h],e,be),this._drawDebugTexture(e.resolution,Re[e.index]);return this._layerRenderers.size>0&&this._sortedLayerRenderers.forAll((({overlayLayer:r,renderer:t})=>{if(d===_e.ExcludeRasterImage&&r.drapeSourceType===O.RasterImage)return;const{fullOpacity:c}=r,u=h(c)&&c<1&&i===X.MATERIAL;u&&(this.bindTemporaryFramebuffer(this._rctx,o,n),l.clearSafe(ne.COLOR_BUFFER_BIT));for(let i=0;i<s.numViews;i++)this._setViewParameters(s.extents[i],e,be),t.render(this._renderContext,this._bindParameters);u&&h(this._temporaryFBO)&&(a.bind(l),this.view._stage.renderView.compositingHelper.composite(this._temporaryFBO.getTexture(),se.PremultipliedAlpha,c,te.OverlayWithTransparency,e.index))})),l.bindFramebuffer(null),a.generateMipMap(),this._renderContext.resetRenderOccludedMask(),!0}bindTemporaryFramebuffer(e,r,t){d(this._temporaryFBO)&&(this._temporaryFBO=new S(e,!1)),this._temporaryFBO.resize(r,t),this._temporaryFBO.bind(e)}async reloadShaders(){await this._shaderTechniqueRepository.reloadAll()}intersect(e,r,t,s){let i=0;this._geometries.forEach((a=>{if(s&&!s(a))return;this._intersectRenderGeometry(a,t,r,0,e,i);const o=this.longitudeCyclical;o&&(a.boundingSphere[0]-a.boundingSphere[3]<o.min&&this._intersectRenderGeometry(a,t,r,o.range,e,i),a.boundingSphere[0]+a.boundingSphere[3]>o.max&&this._intersectRenderGeometry(a,t,r,-o.range,e,i)),i++}))}_intersectRenderGeometry(e,r,t,s,i,a){if(!e.instanceParameters.visible)return;let o=0;h(e.transformation)&&(s+=e.transformation[12],o=e.transformation[13]),we[0]=t[0]-s,we[1]=t[1]-o,we[2]=1,ve[0]=t[0]-s,ve[1]=t[1]-o,ve[2]=0,e.screenToWorldRatio=this._screenToWorldRatio,e.material.intersect(e,null,e.getShaderTransformation(),i,we,ve,((t,s,o)=>{Te(r,o,e.material.renderPriority,a,i,e.layerUid,e.graphicUid)}),e.calculateShaderTransformation,r)}_ensureLayerRenderer(e){let r=this._layerRenderers.get(e);return r||(r=new J({rctx:this._rctx,materialRepository:this._materialRepository}),this._layerRenderers.set(e,r),this._sortedLayerRenderersDirty=!0,"fullOpacity"in e&&this._handles.add(e.watch("fullOpacity",(()=>this.events.emit("content-changed"))),e),this._handles.add(g(r,"updating",(()=>this.notifyChange("updating"))),e)),r}_updateSortedLayerRenderers(){if(!this._sortedLayerRenderersDirty)return;if(this._sortedLayerRenderersDirty=!1,this._sortedLayerRenderers.clear(),0===this._layerRenderers.size)return;const e=this.view.map.allLayers;this._layerRenderers.forEach(((r,t)=>{const s=e.indexOf(t.layer);this._sortedLayerRenderers.push(new fe(t,r,s<0?1/0:s))})),this._sortedLayerRenderers.sort(((e,r)=>e.index-r.index))}_setViewParameters(e,r,t){t.viewport[0]=t.viewport[1]=0,t.viewport[2]=t.viewport[3]=r.resolution,_(t.projectionMatrix,0,e[2]-e[0],0,e[3]-e[1],t.near,t.far),f(t.viewMatrix,[-e[0],-e[1],0]),this._renderContext.camera=t,this._bindParameters.camera=t,this._bindParameters.inverseViewport[0]=1/t.fullViewport[2],this._bindParameters.inverseViewport[1]=1/t.fullViewport[3]}_updateHasWater(){const e=a(this._layerRenderers,(e=>e.hasWater));e!==this._hasWater&&(this._hasWater=e,this.events.emit("has-water",e))}_updateHasHighlights(){const e=a(this._layerRenderers,(e=>e.hasHighlights));e!==this._hasHighlights&&(this._hasHighlights=e,this.events.emit("has-highlights",e))}_updateRendersOccluded(){const e=a(this._layerRenderers,(e=>e.rendersOccluded));e!==this._rendersOccluded&&(this._rendersOccluded=e,this.events.emit("renders-occluded",e))}_drawDebugTexture(e,r){this._ensureDebugPatternResources(e,e);const t=this._rctx,s=t.useTechnique(this._debugTextureTechnique);s.setUniform4f("uColor",r[0],r[1],r[2],1),s.bindTexture(this._debugPatternTexture,"tex"),t.bindVAO(this._quadVAO),t.drawArrays(he.TRIANGLE_STRIP,0,ge(this._quadVAO,"geometry"))}_ensureDebugPatternResources(e,r){if(this._debugPatternTexture)return;const t=new Uint8Array(e*r*4);let s=0;for(let a=0;a<r;a++)for(let i=0;i<e;i++){const o=Math.floor(i/10),n=Math.floor(a/10);o<2||n<2||10*o>e-20||10*n>r-20?(t[s++]=255,t[s++]=255,t[s++]=255,t[s++]=255):(t[s++]=255,t[s++]=255,t[s++]=255,t[s++]=1&o&&1&n?1&i^1&a?0:255:1&o^1&n?0:128)}this._debugPatternTexture=new pe(this._rctx,{target:le.TEXTURE_2D,pixelFormat:de.RGBA,dataType:ce.UNSIGNED_BYTE,samplingMode:ue.NEAREST,width:e,height:r},t);const i=new K;i.hasAlpha=!0,this._debugTextureTechnique=this._shaderTechniqueRepository.acquire(Z,i),this._quadVAO=q(this._rctx)}get test(){return{layerRenderers:this._layerRenderers}}};var _e;e([m()],ye.prototype,"_frameTask",void 0),e([m()],ye.prototype,"_sortedLayerRenderersDirty",void 0),e([D()],ye.prototype,"_shaderTechniqueRepository",void 0),e([D()],ye.prototype,"_stippleTextureRepository",void 0),e([m({constructOnly:!0})],ye.prototype,"view",void 0),e([m()],ye.prototype,"worldToPCSRatio",void 0),e([m()],ye.prototype,"spatialReference",void 0),e([m({type:Boolean,readOnly:!0})],ye.prototype,"updating",null),ye=e([y("esri.views.3d.terrain.OverlayRenderer")],ye),function(e){e[e.Normal=0]="Normal",e[e.OccludedOnly=1]="OccludedOnly",e[e.ExcludeRasterImage=2]="ExcludeRasterImage"}(_e||(_e={}));class fe{constructor(e,r,t){this.overlayLayer=e,this.renderer=r,this.index=t}}const Re=[[1,.5,.5],[.5,.5,1]];function Te(e,r,t,s,i,a,o){const n={layerUid:a,graphicUid:o,triangleNr:r},h=r=>{r.set(B.OVERLAY,n,e.dist,e.normal,e.transformation,t,s)};if((null==i.results.min.drapedLayerOrder||t>=i.results.min.drapedLayerOrder)&&(null==i.results.min.dist||i.results.ground.dist<=i.results.min.dist)&&h(i.results.min),i.options.store!==N.MIN&&(null==i.results.max.drapedLayerOrder||t<i.results.max.drapedLayerOrder)&&(null==i.results.max.dist||i.results.ground.dist>i.results.max.dist)&&h(i.results.max),i.options.store===N.ALL){const e=W(i.ray);h(e),i.results.all.push(e)}}const be=new V;be.near=1,be.far=1e4,be.relativeElevation=null;const we=b(),ve=b(),xe=-2,Oe=k.OccludeAndTransparent;export{xe as DRAPED_Z,_e as DrawPassOption,ye as OverlayRenderer,Oe as overlayRenderOccludedFlag};
|
|
5
|
+
import{_ as e}from"../../../chunks/tslib.es6.js";import r from"../../../core/Accessor.js";import t from"../../../core/Evented.js";import s from"../../../core/Handles.js";import i from"../../../core/Logger.js";import{someMap as a}from"../../../core/MapUtils.js";import{releaseMaybe as o,disposeMaybe as n,isSome as h,unwrapOr as l,isNone as d,unwrap as c}from"../../../core/maybe.js";import p from"../../../core/PooledArray.js";import{someSet as u}from"../../../core/SetUtils.js";import{init as m}from"../../../core/watchUtils.js";import{property as g}from"../../../core/accessorSupport/decorators/property.js";import"../../../core/arrayUtils.js";import"../../../core/has.js";import"../../../core/accessorSupport/ensureType.js";import{subclass as y}from"../../../core/accessorSupport/decorators/subclass.js";import{q as _,f}from"../../../chunks/mat4.js";import{a as R}from"../../../chunks/vec2f64.js";import{f as T,c as b}from"../../../chunks/vec3f64.js";import{I as w}from"../../../chunks/mat4f64.js";import{ViewingMode as x}from"../../ViewingMode.js";import{DrapeTargetType as v,DrapeSourceType as O}from"../layers/interfaces.js";import E from"../support/debugFlags.js";import{OverlayIndex as L,RenderTargetType as j}from"./interfaces.js";import{Overlay as A}from"./Overlay.js";import{OverlayFramebufferObject as S}from"./OverlayFramebufferObject.js";import{OverlayRenderTarget as C}from"./OverlayRenderTarget.js";import{ShaderTechniqueRepository as P}from"../webgl-engine/core/shaderTechnique/ShaderTechniqueRepository.js";import{autoDispose as D,AutoDisposableMixin as G}from"../webgl-engine/lib/AutoDisposable.js";import{TransparencyPassType as I,UpdatePolicy as M}from"../webgl-engine/lib/basicInterfaces.js";import V from"../webgl-engine/lib/Camera.js";import{DrapedHeatmapRenderer as U}from"../webgl-engine/lib/DrapedHeatmapRenderer.js";import{GLMaterialRepository as F}from"../webgl-engine/lib/GLMaterialRepository.js";import{createEmptyDepthTexture as q,createQuadVAO as H}from"../webgl-engine/lib/glUtil3D.js";import{GridLocalOriginFactory as W}from"../webgl-engine/lib/GridLocalOriginFactory.js";import{newIntersectorResult as N}from"../webgl-engine/lib/Intersector.js";import{StoreResults as B,IntersectorType as k}from"../webgl-engine/lib/IntersectorInterfaces.js";import{RenderOccludedFlag as z}from"../webgl-engine/lib/Material.js";import{ModelDirty as Y}from"../webgl-engine/lib/ModelDirtyTypes.js";import{OverlayRenderContext as X}from"../webgl-engine/lib/RenderContext.js";import{RenderPass as Q}from"../webgl-engine/lib/RenderPass.js";import{RenderSlot as J}from"../webgl-engine/lib/RenderSlot.js";import{SortedRenderGeometryRenderer as K}from"../webgl-engine/lib/SortedRenderGeometryRenderer.js";import{TextureTechniqueConfiguration as Z,TextureTechnique as $}from"../webgl-engine/lib/TextureTechnique.js";import{AmbientLight as ee}from"../webgl-engine/lighting/Lightsources.js";import{SceneLighting as re}from"../webgl-engine/lighting/SceneLighting.js";import{StippleTextureRepository as te}from"../webgl-engine/materials/StippleTextureRepository.js";import{C as se}from"../../../chunks/Compositing.glsl.js";import{AlphaMode as ie}from"../webgl-engine/shaders/CompositingTechnique.js";import{ImmediateTask as ae,TaskPriority as oe,noBudget as ne}from"../../support/Scheduler.js";import{ClearBufferBit as he,PrimitiveType as le,TextureType as de,PixelFormat as ce,PixelType as pe,TextureSamplingMode as ue}from"../../webgl/enums.js";import{Texture as me}from"../../webgl/Texture.js";import{vertexCount as ge}from"../../webgl/Util.js";const ye=i.getLogger("esri.views.3d.webgl-engine.lib.OverlayRenderer");let _e=class extends(G(r)){constructor(e){super(e),this._overlays=null,this._overlayRenderTarget=null,this._hasHighlights=!1,this._rendersOccluded=!1,this._hasWater=!1,this._lighting=new re,this._handles=new s,this._frameTask=ae,this._layerRenderers=new Map,this._sortedLayerRenderersDirty=!1,this._sortedLayerRenderers=new p,this._geometries=new Map,this.worldToPCSRatio=1,this.events=new t,this.longitudeCyclical=null}initialize(){const e=this.view._stage.renderView;this._rctx=e.renderingContext,this._renderContext=new X(this._rctx);const r=e.waterTextureRepository;this._stippleTextureRepository=new te(e.renderingContext),this._shaderTechniqueRepository=new P({rctx:this._rctx,viewingMode:x.Local,stippleTextureRepository:this._stippleTextureRepository,waterTextureRepository:r}),this._handles.add([m(r,"loadingState",(()=>this.events.emit("content-changed"))),m(this,"spatialReference",(e=>this._localOrigins=new W(e)))]),this._materialRepository=new F(e.textureRepository,this._shaderTechniqueRepository,(e=>{(e.renderOccluded&Ee)>0!==this._rendersOccluded&&this._updateRendersOccluded(),this.events.emit("content-changed"),this.notifyChange("updating")}),(()=>this.events.emit("content-changed"))),this._lighting.groundLightingFactor=1,this._lighting.globalFactor=0,this._lighting.set([new ee(T(1,1,1))]),this._bindParameters={slot:J.DRAPED_MATERIAL,highlightDepthTexture:q(this._rctx),camera:we,inverseViewport:R(),origin:null,screenToWorldRatio:null,screenToPCSRatio:null,shadowMappingEnabled:!1,slicePlane:null,ssaoEnabled:!1,hasOccludees:!1,linearDepthTexture:null,lastFrameColorTexture:null,reprojectionMatrix:w,ssrEnabled:!1,lighting:this._lighting,transparencyPassType:I.NONE,terrainLinearDepthTexture:null,geometryLinearDepthTexture:null,multipassTerrainEnabled:!1,cullAboveGround:!1,multipassGeometryEnabled:!1,highlightColorTexture:null,cloudsCompositionParams:null},this._frameTask=this.view.resourceController.scheduler.registerTask(oe.STAGE,this),this._handles.add(this._frameTask)}dispose(){this._handles.destroy(),this._layerRenderers.forEach((e=>e.dispose())),this._layerRenderers.clear(),this._debugTextureTechnique=o(this._debugTextureTechnique),this._debugPatternTexture=n(this._debugPatternTexture),this._bindParameters.highlightDepthTexture=n(this._bindParameters.highlightDepthTexture),this._shaderTechniqueRepository=n(this._shaderTechniqueRepository),this._temporaryFBO=n(this._temporaryFBO),this._quadVAO=n(this._quadVAO),this.disposeOverlays()}get updating(){return this._sortedLayerRenderersDirty||this._frameTask.updating||a(this._layerRenderers,(e=>e.updating))}get hasOverlays(){return h(this._overlays)&&h(this._overlayRenderTarget)}get gpuMemoryUsage(){return h(this._overlayRenderTarget)?this._overlayRenderTarget.gpuMemoryUsage:0}collectUnusedRenderTargetMemory(e){let r=!1;if(h(this._overlayRenderTarget))for(const t of this._overlayRenderTarget.renderTargets){const s=this.overlays[0].validTargets[t.type]||!this.overlays[1].validTargets[t.type];r=this._overlayRenderTarget.validateUsageForTarget(s,t,e)||r}return r}get overlays(){return l(this._overlays,[])}ensureDrapeTargets(e){h(this._overlays)&&this._overlays.forEach((r=>{r.hasTargetWithoutRasterImage=u(e,(e=>e.drapeTargetType===v.WithoutRasterImage))}))}ensureDrapeSources(e){h(this._overlays)&&this._overlays.forEach((r=>{r.hasDrapedFeatureSource=a(e,((e,r)=>r.drapeSourceType===O.Features)),r.hasDrapedRasterSource=a(e,((e,r)=>r.drapeSourceType===O.RasterImage))}))}ensureOverlays(e,r){d(this._overlays)&&(this._overlayRenderTarget=new C(this._rctx),this._overlays=[new A(L.INNER,this._overlayRenderTarget),new A(L.OUTER,this._overlayRenderTarget)]),this.ensureDrapeTargets(e),this.ensureDrapeSources(r)}disposeOverlays(){this._overlays=null,this._overlayRenderTarget=n(this._overlayRenderTarget),this.events.emit("textures-disposed")}get running(){return this.updating}runTask(e,r=(()=>!0)){this._frameTask.processQueue(e),e.done||this._processLayers(e,r)}_processLayers(e,r){let t=!1;for(const[s,i]of this._layerRenderers){if(e.done)break;(s.destroyed||r(s))&&(i.commitChanges()&&(t=!0,e.madeProgress()),i.isEmpty&&(t=!0,this._sortedLayerRenderersDirty=!0,this._layerRenderers.delete(s),this._handles.remove(s)))}this._updateSortedLayerRenderers(),t&&(h(this._overlays)&&0===this._layerRenderers.size&&this.disposeOverlays(),this.notifyChange("updating"),this.events.emit("content-changed"),this._updateHasHighlights(),this._updateRendersOccluded(),this._updateHasWater())}processSyncLayers(){this._processLayers(ne,(e=>e.updatePolicy===M.SYNC))}addGeometries(e,r,t,s=!1){for(const i of e)d(i.origin)&&(i.origin=this._localOrigins.getOrigin(i.boundingSphere)),this._geometries.set(i.id,i);this._ensureLayerRenderer(r,s).add(e),t===Y.Geometry.UPDATE&&this._notifyGraphicGeometryChanged(e,r)}removeGeometries(e,r,t){for(const i of e)this._geometries.delete(c(i.id));const s=this._layerRenderers.get(r);s&&(s.remove(e),t===Y.Geometry.UPDATE&&this._notifyGraphicGeometryChanged(e,r))}updateGeometries(e,r,t){const s=this._layerRenderers.get(r);if(s)switch(s.modify(e,t),t){case Y.State.TRANSFORMATION:case Y.State.VERTEXATTRS:return this._notifyGraphicGeometryChanged(e,r);case Y.State.VISIBILITIES:return this._notifyGraphicVisibilityChanged(e,r)}else ye.warn("Attempted to update geometry for nonexistent layer")}_notifyGraphicGeometryChanged(e,r){if(d(r.notifyGraphicGeometryChanged))return;let t;for(const s of e){const e=s.graphicUid;h(e)&&e!==t&&(r.notifyGraphicGeometryChanged(e),t=e)}}_notifyGraphicVisibilityChanged(e,r){if(d(r.notifyGraphicVisibilityChanged))return;let t;for(const s of e){const e=s.graphicUid;h(e)&&e!==t&&(r.notifyGraphicVisibilityChanged(e),t=e)}}updateHighlights(e,r){const t=this._layerRenderers.get(r);t?t.modify(e,Y.State.HIGHLIGHTS):ye.warn("Attempted to update highlights for nonexistent layer")}isEmpty(){return 0===this._geometries.size&&!E.OVERLAY_DRAW_DEBUG_TEXTURE}get hasHighlights(){return this._hasHighlights}get hasWater(){return this._hasWater}get rendersOccluded(){return this._rendersOccluded}updateAnimation(e){let r=!1;return this._layerRenderers.forEach((t=>r=t.updateAnimation(e)||r)),r}updateLayerOrder(){this._sortedLayerRenderersDirty=!0}drawTarget(e,r,t){const s=e.canvasGeometries;if(0===s.numViews)return!1;this._screenToWorldRatio=t*e.mapUnitsPerPixel;const i=r.renderPass;if(this.isEmpty()||i===Q.MATERIAL_HIGHLIGHT&&!this.hasHighlights||i===Q.MATERIAL_NORMAL&&!this.hasWater||!e.hasSomeSizedView())return!1;const a=r.fbo;if(!a.isValid())return!1;const o=2*e.resolution,n=e.resolution;a.resize(o,n);const l=this._rctx;we.pixelRatio=e.pixelRatio*t,this._renderContext.pass=i,this._bindParameters.screenToWorldRatio=this._screenToWorldRatio,this._bindParameters.screenToPCSRatio=this._screenToWorldRatio*this.worldToPCSRatio,this._bindParameters.slot=i===Q.MATERIAL_NORMAL?J.DRAPED_WATER:J.DRAPED_MATERIAL,e.applyViewport(this._rctx),a.bind(l),e.index===L.INNER&&(l.setClearColor(0,0,0,0),l.clearSafe(he.COLOR_BUFFER_BIT));const d=r.type===j.ColorNoRasterImage?fe.ExcludeRasterImage:r.type===j.Occluded?fe.OccludedOnly:fe.Normal;if(d===fe.OccludedOnly&&(this._renderContext.renderOccludedMask=Ee),E.OVERLAY_DRAW_DEBUG_TEXTURE&&d!==fe.OccludedOnly)for(let h=0;h<s.numViews;h++)this._setViewParameters(s.extents[h],e,we),this._drawDebugTexture(e.resolution,Te[e.index]);return this._layerRenderers.size>0&&this._sortedLayerRenderers.forAll((({overlayLayer:r,renderer:t})=>{if(d===fe.ExcludeRasterImage&&r.drapeSourceType===O.RasterImage)return;const{fullOpacity:c}=r,p=h(c)&&c<1&&i===Q.MATERIAL;p&&(this.bindTemporaryFramebuffer(this._rctx,o,n),l.clearSafe(he.COLOR_BUFFER_BIT));for(let i=0;i<s.numViews;i++)this._setViewParameters(s.extents[i],e,we),t.render(this._renderContext,this._bindParameters);p&&h(this._temporaryFBO)&&(a.bind(l),this.view._stage.renderView.compositingHelper.composite(this._temporaryFBO.getTexture(),ie.PremultipliedAlpha,c,se.OverlayWithTransparency,e.index))})),l.bindFramebuffer(null),a.generateMipMap(),this._renderContext.resetRenderOccludedMask(),!0}bindTemporaryFramebuffer(e,r,t){d(this._temporaryFBO)&&(this._temporaryFBO=new S(e,!1)),this._temporaryFBO.resize(r,t),this._temporaryFBO.bind(e)}async reloadShaders(){await this._shaderTechniqueRepository.reloadAll()}intersect(e,r,t,s){let i=0;this._geometries.forEach((a=>{if(s&&!s(a))return;this._intersectRenderGeometry(a,t,r,0,e,i);const o=this.longitudeCyclical;o&&(a.boundingSphere[0]-a.boundingSphere[3]<o.min&&this._intersectRenderGeometry(a,t,r,o.range,e,i),a.boundingSphere[0]+a.boundingSphere[3]>o.max&&this._intersectRenderGeometry(a,t,r,-o.range,e,i)),i++}))}_intersectRenderGeometry(e,r,t,s,i,a){if(!e.instanceParameters.visible)return;let o=0;h(e.transformation)&&(s+=e.transformation[12],o=e.transformation[13]),xe[0]=t[0]-s,xe[1]=t[1]-o,xe[2]=1,ve[0]=t[0]-s,ve[1]=t[1]-o,ve[2]=0,e.screenToWorldRatio=this._screenToWorldRatio,e.material.intersect(e,null,e.getShaderTransformation(),i,xe,ve,((t,s,o)=>{be(r,o,e.material.renderPriority,a,i,e.layerUid,e.graphicUid)}),e.calculateShaderTransformation,r)}_ensureLayerRenderer(e,r){let t=this._layerRenderers.get(e);return t&&r===t instanceof U||(t=r?new U({rctx:this._rctx,materialRepository:this._materialRepository}):new K({rctx:this._rctx,materialRepository:this._materialRepository}),this._layerRenderers.set(e,t),this._sortedLayerRenderersDirty=!0,"fullOpacity"in e&&this._handles.add(e.watch("fullOpacity",(()=>this.events.emit("content-changed"))),e),this._handles.add(m(t,"updating",(()=>this.notifyChange("updating"))),e)),t}_updateSortedLayerRenderers(){if(!this._sortedLayerRenderersDirty)return;if(this._sortedLayerRenderersDirty=!1,this._sortedLayerRenderers.clear(),0===this._layerRenderers.size)return;const e=this.view.map.allLayers;this._layerRenderers.forEach(((r,t)=>{const s=e.indexOf(t.layer);this._sortedLayerRenderers.push(new Re(t,r,s<0?1/0:s))})),this._sortedLayerRenderers.sort(((e,r)=>e.index-r.index))}_setViewParameters(e,r,t){t.viewport[0]=t.viewport[1]=0,t.viewport[2]=t.viewport[3]=r.resolution,_(t.projectionMatrix,0,e[2]-e[0],0,e[3]-e[1],t.near,t.far),f(t.viewMatrix,[-e[0],-e[1],0]),this._renderContext.camera=t,this._bindParameters.camera=t,this._bindParameters.inverseViewport[0]=1/t.fullViewport[2],this._bindParameters.inverseViewport[1]=1/t.fullViewport[3]}_updateHasWater(){const e=a(this._layerRenderers,(e=>e.hasWater));e!==this._hasWater&&(this._hasWater=e,this.events.emit("has-water",e))}_updateHasHighlights(){const e=a(this._layerRenderers,(e=>e.hasHighlights));e!==this._hasHighlights&&(this._hasHighlights=e,this.events.emit("has-highlights",e))}_updateRendersOccluded(){const e=a(this._layerRenderers,(e=>e.rendersOccluded));e!==this._rendersOccluded&&(this._rendersOccluded=e,this.events.emit("renders-occluded",e))}_drawDebugTexture(e,r){this._ensureDebugPatternResources(e,e);const t=this._rctx,s=t.useTechnique(this._debugTextureTechnique);s.setUniform4f("uColor",r[0],r[1],r[2],1),s.bindTexture(this._debugPatternTexture,"tex"),t.bindVAO(this._quadVAO),t.drawArrays(le.TRIANGLE_STRIP,0,ge(this._quadVAO,"geometry"))}_ensureDebugPatternResources(e,r){if(this._debugPatternTexture)return;const t=new Uint8Array(e*r*4);let s=0;for(let a=0;a<r;a++)for(let i=0;i<e;i++){const o=Math.floor(i/10),n=Math.floor(a/10);o<2||n<2||10*o>e-20||10*n>r-20?(t[s++]=255,t[s++]=255,t[s++]=255,t[s++]=255):(t[s++]=255,t[s++]=255,t[s++]=255,t[s++]=1&o&&1&n?1&i^1&a?0:255:1&o^1&n?0:128)}this._debugPatternTexture=new me(this._rctx,{target:de.TEXTURE_2D,pixelFormat:ce.RGBA,dataType:pe.UNSIGNED_BYTE,samplingMode:ue.NEAREST,width:e,height:r},t);const i=new Z;i.hasAlpha=!0,this._debugTextureTechnique=this._shaderTechniqueRepository.acquire($,i),this._quadVAO=H(this._rctx)}get test(){return{layerRenderers:this._layerRenderers}}};var fe;e([g()],_e.prototype,"_frameTask",void 0),e([g()],_e.prototype,"_sortedLayerRenderersDirty",void 0),e([D()],_e.prototype,"_shaderTechniqueRepository",void 0),e([D()],_e.prototype,"_stippleTextureRepository",void 0),e([g({constructOnly:!0})],_e.prototype,"view",void 0),e([g()],_e.prototype,"worldToPCSRatio",void 0),e([g()],_e.prototype,"spatialReference",void 0),e([g({type:Boolean,readOnly:!0})],_e.prototype,"updating",null),_e=e([y("esri.views.3d.terrain.OverlayRenderer")],_e),function(e){e[e.Normal=0]="Normal",e[e.OccludedOnly=1]="OccludedOnly",e[e.ExcludeRasterImage=2]="ExcludeRasterImage"}(fe||(fe={}));class Re{constructor(e,r,t){this.overlayLayer=e,this.renderer=r,this.index=t}}const Te=[[1,.5,.5],[.5,.5,1]];function be(e,r,t,s,i,a,o){const n={layerUid:a,graphicUid:o,triangleNr:r},h=r=>{r.set(k.OVERLAY,n,e.dist,e.normal,e.transformation,t,s)};if((null==i.results.min.drapedLayerOrder||t>=i.results.min.drapedLayerOrder)&&(null==i.results.min.dist||i.results.ground.dist<=i.results.min.dist)&&h(i.results.min),i.options.store!==B.MIN&&(null==i.results.max.drapedLayerOrder||t<i.results.max.drapedLayerOrder)&&(null==i.results.max.dist||i.results.ground.dist>i.results.max.dist)&&h(i.results.max),i.options.store===B.ALL){const e=N(i.ray);h(e),i.results.all.push(e)}}const we=new V;we.near=1,we.far=1e4,we.relativeElevation=null;const xe=b(),ve=b(),Oe=-2,Ee=z.OccludeAndTransparent;export{Oe as DRAPED_Z,fe as DrawPassOption,_e as OverlayRenderer,Ee as overlayRenderOccludedFlag};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/*
|
|
2
|
+
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
|
+
See https://js.arcgis.com/4.23/esri/copyright.txt for details.
|
|
4
|
+
*/
|
|
5
|
+
import{_ as e}from"../../../../chunks/tslib.es6.js";import"../../../../core/Logger.js";import"../../../../core/accessorSupport/ensureType.js";import"../../../../core/arrayUtils.js";import"../../../../core/has.js";import"../../../../core/accessorSupport/set.js";import{subclass as t}from"../../../../core/accessorSupport/decorators/subclass.js";import{ViewingMode as r}from"../../../ViewingMode.js";import{createQuadVAO as i}from"./glUtil3D.js";import{SortedRenderGeometryRenderer as s}from"./SortedRenderGeometryRenderer.js";import{isHeatMapDensityMaterial as a}from"../materials/HeatmapDensityMaterial.js";import{HeatmapTechnique as o}from"../shaders/HeatmapTechnique.js";import{TargetType as n,DepthStencilTargetType as h,TextureType as p,PixelFormat as d,SizedPixelFormat as m,PixelType as c,TextureSamplingMode as l,TextureWrapMode as u,ClearBufferBit as g}from"../../../webgl/enums.js";import{FramebufferObject as R}from"../../../webgl/FramebufferObject.js";import{Texture as f}from"../../../webgl/Texture.js";import{vertexCount as w}from"../../../webgl/Util.js";let x=class extends s{constructor(){super(...arguments),this.type="draped-heatmap",this.pointCount=0}initialize(){super.initialize();const e={colorTarget:n.TEXTURE,depthStencilTarget:h.NONE,width:0,height:0},t={target:p.TEXTURE_2D,pixelFormat:d.RED,internalFormat:m.R32F,dataType:c.FLOAT,samplingMode:l.LINEAR,wrapMode:u.CLAMP_TO_EDGE,width:0,height:0};this.densityMap=new R(this.rctx,e,t),this.quad=i(this.rctx);const s={target:p.TEXTURE_2D,pixelFormat:d.RGBA,dataType:c.UNSIGNED_BYTE,samplingMode:l.LINEAR,wrapMode:u.CLAMP_TO_EDGE,width:8,height:1},a=new f(this.rctx,s,new Uint8ClampedArray([34,34,64,0,78,46,88,255,127,56,100,255,175,68,98,255,212,91,84,255,235,126,63,255,238,168,39,255,221,214,34,255]));this.colorRamp=a,this.technique=new o({rctx:this.rctx,viewingMode:r.Local},null),this.heatmapParameters={colorRamp:a,densityMap:this.densityMap.colorTexture,searchRadius:1,pointCount:this.pointCount}}dispose(){super.dispose(),this.technique.dispose(),this.densityMap.dispose(),this.quad.dispose(),this.colorRamp.dispose()}get hasHighlights(){return!1}get hasWater(){return!1}get rendersOccluded(){return!1}get _heatmapDensityMaterialRenderers(){return this._sortedMaterialRenderers.data.filter(T)}add(e){this.pointCount+=e.length,super.add(e)}remove(e){this.pointCount-=e.length,super.remove(e)}render(e,t){const r=this._heatmapDensityMaterialRenderers;if(r.length<1)return;const i=this.rctx.getBoundFramebufferObject(),s=this.rctx.getViewport();this.densityMap.resize(s.width,s.height),this.rctx.bindFramebuffer(this.densityMap),this.rctx.clear(g.COLOR_BUFFER_BIT);let a=!1;const o=r[0].material.parameters.searchRadius;this.heatmapParameters.pointCount=this.pointCount,this.heatmapParameters.searchRadius=o;for(let n=0;n<r.length;n++){const{material:i,materialRenderer:s}=r[n];i.shouldRender(e)&&(a=a||s.render(t.slot,e.pass,t))}this.rctx.bindFramebuffer(i),a&&(this.rctx.bindVAO(this.quad),this.rctx.useProgram(this.technique.program),this.technique.bindPipelineState(this.rctx),this.technique.bindPass(this.heatmapParameters,t),this.rctx.drawArrays(this.technique.primitiveType,0,w(this.quad,"geometry")))}};function T(e){return a(e.material)}x=e([t("esri.views.3d.webgl-engine.lib.DrapedHeatmapRenderer")],x);export{x as DrapedHeatmapRenderer};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.23/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import o from"../../../../Color.js";import
|
|
5
|
+
import o from"../../../../Color.js";import r from"../../../../core/Logger.js";import{get as t,mapOr as e,isSome as i}from"../../../../core/maybe.js";import{pt2px as n}from"../../../../core/screenUtils.js";import{Z as s}from"../../../../chunks/vec4f64.js";import{enableTextBackgrounds3D as l}from"../../../../support/featureFlags.js";const a=r.getLogger("esri.views.3d.webgl-engine.lib.TextRenderParameters");class c{constructor(o){this.definition=o,this.key=JSON.stringify(o),this.haloSize=Math.round(o.halo.size),this.textStyle=this._colorToRGBA(o.color),this.haloStyle=this._colorToRGB(o.halo.color),this.backgroundStyle=l()&&0!==o.background.color[3]?this._colorToRGBA(o.background.color):null}fontString(o){const r=this.definition.font;return`${r.style} ${r.weight} ${o}px ${r.family}, sans-serif`}_colorToRGB(o){return`rgb(${o.slice(0,3).map((o=>Math.floor(255*o))).toString()})`}_colorToRGBA(o){return`rgba(${o.slice(0,3).map((o=>Math.floor(255*o))).toString()},${o[3]})`}static async fromSymbol(r,f=1){const g=t(r,"material","color"),m=e(g,s,o.toUnitRGBA),d=e(r.size,12,n),h=r.lineHeight,u=l(),b=u&&i(r.background)?o.toUnitRGBA(r.background.color):s,y={family:e(r.font,"sans-serif",(o=>o.family)),decoration:e(r.font,"none",(o=>o.decoration)),weight:e(r.font,"normal",(o=>o.weight)),style:e(r.font,"normal",(o=>o.style))},p=r.halo,S=i(p)&&i(p.color)&&p.size>0?{size:n(p.size),color:o.toUnitRGBA(p.color)}:{size:0,color:s},R=new c({color:m,size:d,background:{color:b,padding:u&&i(r.background)?[.65*d,.5*d]:[0,0],borderRadius:u&&i(r.background)?d*(6/16):0},lineSpacingFactor:h,font:y,halo:S,pixelRatio:f}),k=R.fontString(d);try{await document.fonts.load(k)}catch(w){a.warnOnce(`Failed to preload font '${k}'. Some text symbology may be rendered using the default browser font.`)}return R}}export{c as TextRenderParameters};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.23/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{isNone as
|
|
5
|
+
import{clamp as t}from"../../../../core/mathUtils.js";import{isNone as e,isSome as i}from"../../../../core/maybe.js";import{enableTextBackgrounds3D as n}from"../../../../support/featureFlags.js";import s from"../../support/debugFlags.js";class r{constructor(t,e,i=2048){this.text=t,this._parameters=e,this.maxSize=i,this._textWidths=[],this._lineWidths=[],this._renderPixelRatio=null,this._displayWidth=null,this._heightMetrics=null,this._backgroundEnabled=null,this.key=`${this._parameters.key}--${t}`,this._lines=t.split(/\r?\n/)}get displayWidth(){return Math.ceil(this._ensureTextWidth()+2*this.backgroundHorizontalPadding)}get displayHeight(){const t=this.lineSpacing*(this._lines.length-1),e=this.lineHeight;return Math.ceil(t+e+2*this.haloSize+this.backgroundTopPadding+this.backgroundBottomPadding)}get renderedWidth(){return Math.ceil(this._toRenderUnit(this.displayWidth))}get renderedHeight(){return Math.ceil(this._toRenderUnit(this.displayHeight))}get heightMetrics(){return this._ensureHeightMetrics()}get lineSpacing(){return(this.lineHeight+this.linePadding)*this._parameters.definition.lineSpacingFactor}get lineHeight(){return this.heightMetrics.lineHeight}get linePadding(){return this.lineHeight*l}get baselinePosition(){return this.heightMetrics.baselinePosition}get renderedFontSize(){return this._toRenderUnit(this.fontSize)}get fontSize(){return this._parameters.definition.size}get renderedHaloSize(){return this._toRenderUnit(this.haloSize)}get haloSize(){return this._parameters.haloSize}get backgroundHorizontalPadding(){return this.backgroundEnabled?this._parameters.definition.background.padding[0]:0}get backgroundVerticalPadding(){return this.backgroundEnabled?this._parameters.definition.background.padding[1]:0}get backgroundTopPadding(){return Math.max(0,this.backgroundVerticalPadding-this.heightMetrics.paddingTop)}get backgroundBottomPadding(){return Math.max(0,this.backgroundVerticalPadding-this.heightMetrics.paddingBottom)}get backgroundEnabled(){return e(this._backgroundEnabled)&&(this._backgroundEnabled=n()),this._backgroundEnabled}get hasBackground(){return this.backgroundEnabled&&!!this._parameters.backgroundStyle}get renderPixelRatio(){if(e(this._renderPixelRatio)){const t=this._parameters.definition.pixelRatio;this.maxSize>0?this._renderPixelRatio=Math.min(t,Math.min(this.maxSize/this.displayWidth,this.maxSize/this.displayHeight)):this._renderPixelRatio=t}return this._renderPixelRatio}_getLineXOffset(t){return(this.displayWidth-2*this.backgroundHorizontalPadding-this._lineWidths[t])/2}render(t,e=0,i=0){t.save();const n=e/=this.renderPixelRatio,r=i/=this.renderPixelRatio,h=o(t.textAlign,this.displayWidth)+this.haloSize+this.backgroundHorizontalPadding,a=this.haloSize+this.backgroundTopPadding;i+=a+this.baselinePosition,e+=h;const d=this.haloSize>0;d&&this._renderHalo(t,n,r,h,a),this._setFontProperties(t,this.renderedFontSize);for(let s=0;s<this._lines.length;++s){const n=this._lines[s],r=this._getLineXOffset(s);d&&(t.globalCompositeOperation="destination-out",t.fillStyle="rgb(0, 0, 0)",this._fillText(t,n,e+r,i),this._renderLineDecoration(t,e+r,i,this._textWidths[s])),t.globalCompositeOperation="source-over",t.fillStyle=this._parameters.textStyle,this._fillText(t,n,e+this._getLineXOffset(s),i),this._renderLineDecoration(t,e+r,i,this._textWidths[s]),i+=this.lineSpacing}if(s.TEXT_SHOW_BASELINE){t.strokeStyle=c,t.setLineDash([2,2]),t.lineWidth=1;let e=r+a;for(let i=0;i<this._lines.length;++i){const i=e+this.baselinePosition;this._drawLine(t,[n,i],[n+this.displayWidth,i]),e+=this.lineSpacing}}if(s.TEXT_SHOW_BORDER&&(t.strokeStyle=c,t.setLineDash([]),t.lineWidth=1,this._drawBox(t,[n,r],[this.displayWidth,this.displayHeight])),this.hasBackground){const e=this._parameters.definition.background.borderRadius*this.renderPixelRatio;this._roundedRect(t,n,r,e),t.globalCompositeOperation="destination-over",t.fillStyle=this._parameters.backgroundStyle,t.fill()}t.restore()}_renderLineDecoration(t,e,i,n,s=!1){if("none"===this._parameters.definition.font.decoration||0===n)return;const r=1,o=Math.max(this._parameters.definition.size/16,r);switch(this._parameters.definition.font.decoration){case"underline":i+=2*o;break;case"line-through":i-=.33*this.baselinePosition}const h=s?this.haloSize:0;t.strokeStyle=s?this._parameters.haloStyle:this._parameters.textStyle,t.lineWidth=this._toRenderUnit(o+2*h),t.beginPath(),t.moveTo(this._toRenderUnit(e-h),this._toRenderUnit(i)),t.lineTo(this._toRenderUnit(e+n+h),this._toRenderUnit(i)),t.stroke()}_roundedRect(e,i,n,s){i=this._toRenderUnit(i),n=this._toRenderUnit(n);const r=this.renderedWidth,o=this.renderedHeight;0!==s?(s=t(s,0,Math.floor(o/2)),e.beginPath(),e.moveTo(i,n+s),e.arcTo(i,n,i+s,n,s),e.lineTo(i+r-s,n),e.arcTo(i+r,n,i+r,n+s,s),e.lineTo(i+r,n+o-s),e.arcTo(i+r,n+o,i+r-s,n+o,s),e.lineTo(i+s,n+o),e.arcTo(i,n+o,i,n+o-s,s),e.closePath()):e.rect(i,n,r,o)}_renderHalo(t,e,i,n,s){const r=this.renderedWidth,o=this.renderedHeight,h=a(d,Math.max(r,g),Math.max(o,g)),l=h.getContext("2d");l.clearRect(0,0,r,o),this._setFontProperties(l,this.renderedFontSize),l.fillStyle=this._parameters.haloStyle,l.strokeStyle=this._parameters.haloStyle;const c=this.renderedHaloSize<3;l.lineJoin=c?"miter":"round",c?this._renderHaloEmulated(l,n,s):this._renderHaloNative(l,n,s);let _=s+this.baselinePosition;for(let a=0;a<this._lines.length;++a){const t=this._getLineXOffset(a);this._renderLineDecoration(l,n+t,_,this._textWidths[a],!0),_+=this.lineSpacing}t.globalAlpha=this._parameters.definition.halo.color[3],t.drawImage(h,0,0,r,o,this._toRenderUnit(e),this._toRenderUnit(i),r,o),t.globalAlpha=1}_renderHaloEmulated(t,e,i){i+=this.baselinePosition;for(let n=0;n<this._lines.length;++n){const s=this._lines[n],r=this._getLineXOffset(n);for(const[n,o]of h)this._fillText(t,s,e+r+this.haloSize*n,i+this.haloSize*o);i+=this.lineSpacing}}_renderHaloNative(t,e,i){const n=2*this.haloSize;i+=this.baselinePosition;for(let s=0;s<this._lines.length;++s){const r=this._lines[s],o=this._getLineXOffset(s),h=5,a=.1;for(let s=0;s<h;s++){const d=1-(h-1)*a+s*a;t.lineWidth=this._toRenderUnit(d*n),this._strokeText(t,r,e+o,i)}i+=this.lineSpacing}}_setFontProperties(t,e){t.font=this._parameters.fontString(e),t.textAlign="left",t.textBaseline="alphabetic"}_ensureTextWidth(){if(i(this._displayWidth))return this._displayWidth;const t=a(d,g,g).getContext("2d");this._setFontProperties(t,this.fontSize);let e=2*this.haloSize;const n=this._parameters.definition.font;"italic"!==n.style&&"oblique"!==n.style&&"bold"!==n.weight&&"bolder"!==n.weight||(e+=.3*t.measureText("A").width),this._textWidths.length=0,this._lineWidths.length=0;let s=0;for(const i of this._lines){const n=t.measureText(i).width,r=n+e;this._textWidths.push(n),this._lineWidths.push(r),s=Math.max(s,r)}return this._displayWidth=s,this._displayWidth}_ensureHeightMetrics(){if(e(this._heightMetrics)){const t=a(d,g,g).getContext("2d");this._setFontProperties(t,this.fontSize);const e=t.measureText(this.text+_),i=this.hasBackground?t.measureText(this._lines[0]):e,n=1===this._lines.length?i:this.hasBackground?t.measureText(this._lines[this._lines.length-1]):e,s=e.actualBoundingBoxAscent+e.actualBoundingBoxDescent;this._heightMetrics={paddingTop:e.actualBoundingBoxAscent-i.actualBoundingBoxAscent,paddingBottom:e.actualBoundingBoxDescent-n.actualBoundingBoxDescent,lineHeight:s,baselinePosition:e.actualBoundingBoxAscent}}return this._heightMetrics}_toRenderUnit(t){return t*this.renderPixelRatio}_toRoundedRenderUnit(t){return Math.round(t*this.renderPixelRatio)}_fillText(t,e,i,n){t.fillText(e,this._toRenderUnit(i),this._toRenderUnit(n))}_strokeText(t,e,i,n){t.strokeText(e,this._toRenderUnit(i),this._toRenderUnit(n))}_drawLine(t,e,i){t.beginPath(),t.moveTo(this._toRoundedRenderUnit(e[0])+.5,this._toRoundedRenderUnit(e[1])+.5),t.lineTo(this._toRoundedRenderUnit(i[0])+.5,this._toRoundedRenderUnit(i[1])+.5),t.stroke()}_drawBox(t,e,i){const n=this._toRenderUnit(e[0]),s=this._toRenderUnit(e[1]),r=this._toRenderUnit(i[0]),o=this._toRenderUnit(i[1]),h=Math.floor(n)+.5,a=Math.ceil(n+r)-.5,d=Math.floor(s)+.5,l=Math.ceil(s+o)-.5;t.beginPath(),t.moveTo(h,d),t.lineTo(a,d),t.lineTo(a,l),t.lineTo(h,l),t.lineTo(h,d),t.stroke()}}function o(t,e){return"center"===t?.5*e:"right"===t?e:0}const h=[];{const t=16;for(let e=0;e<360;e+=360/t)h.push([Math.cos(Math.PI*e/180),Math.sin(Math.PI*e/180)])}function a(t,e,i){return t.canvas||(t.canvas=document.createElement("canvas")),t.canvas.width=e,t.canvas.height=i,t.canvas}const d={canvas:null},l=.2,g=512,c="rgb(255, 0, 255, 0.5)",_=(()=>{let t="";for(let e=32;e<127;e++)t+=String.fromCharCode(e);return t})();export{r as TextRenderer,r as default,a as getTextHelperCanvas};
|