@arcgis/core 4.24.0-next.20220329 → 4.24.0-next.20220401
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/PopupTemplate.js +1 -1
- package/WebMap.js +1 -1
- package/WebScene.js +1 -1
- package/analysis/LineOfSightAnalysisObserver.js +1 -1
- package/analysis/LineOfSightAnalysisTarget.js +1 -1
- package/arcade/featureset/actions/Adapted.js +1 -1
- package/arcade/featureset/sources/FeatureLayerDynamic.js +1 -1
- package/arcade/featureset/sources/FeatureLayerMemory.js +1 -1
- package/arcade/featureset/sources/FeatureLayerRelated.js +1 -1
- package/arcade/featureset/support/FeatureSet.js +1 -1
- package/arcade/featureset/support/RecentlyUsedCache.js +1 -1
- package/arcade/featureset/support/shared.js +1 -1
- package/arcade/functions/convertdirection.js +1 -1
- package/arcade/lib/character.js +1 -1
- package/arcade/lib/scanner.js +1 -1
- package/arcade/lib/tokenizer.js +1 -1
- package/arcade/request.js +1 -1
- package/arcade/treeAnalysis.js +1 -1
- package/assets/esri/core/workers/RemoteClient.js +1 -1
- package/assets/esri/core/workers/chunks/0bfedb1dbdff8205e468.js +1 -0
- package/assets/esri/core/workers/chunks/{5e472c89a38d6a42b84d.js → 0e29250c24a3a7b1ce13.js} +1 -1
- package/assets/esri/core/workers/chunks/0eb9c9477d36cd212f8b.js +1 -0
- package/assets/esri/core/workers/chunks/10779a256841c37f2429.js +1 -0
- package/assets/esri/core/workers/chunks/10a119889d1ab13402a3.js +1 -0
- package/assets/esri/core/workers/chunks/125b14c2ccd96d7c20c2.js +1 -0
- package/assets/esri/core/workers/chunks/23ec33a30db201e8b2c3.js +1 -0
- package/assets/esri/core/workers/chunks/2530e8ccf6e12787ce76.js +1 -0
- package/assets/esri/core/workers/chunks/2d9e97ba5b50aec4dd01.js +1 -0
- package/assets/esri/core/workers/chunks/365dc146398420f13f82.js +1 -0
- package/assets/esri/core/workers/chunks/3ae2827e8d55d6713d20.js +1 -0
- package/assets/esri/core/workers/chunks/3e3eebaa0844742db2f2.js +1 -0
- package/assets/esri/core/workers/chunks/3fd5b2d6eccd9098d492.js +1 -0
- package/assets/esri/core/workers/chunks/404f1d7bce014c7e6965.js +1 -0
- package/assets/esri/core/workers/chunks/411b7777bb5e943c156f.js +1 -0
- package/assets/esri/core/workers/chunks/{12ca192a5233bb2875d0.js → 4312902ab6e42fbe119b.js} +1 -1
- package/assets/esri/core/workers/chunks/{4ef07f50da39f8607c1c.js → 44e95e87bd9e820aeb53.js} +1 -1
- package/assets/esri/core/workers/chunks/{4d4c5e535d8b9ceb865a.js → 4810edf605838d07e5c5.js} +1 -1
- package/assets/esri/core/workers/chunks/4bce446391176a9d4588.js +1 -0
- package/assets/esri/core/workers/chunks/52a0e387073ea264e194.js +1 -0
- package/assets/esri/core/workers/chunks/560234694f3e53802aff.js +1 -0
- package/assets/esri/core/workers/chunks/5633710daeb3bbb79bcf.js +1 -0
- package/assets/esri/core/workers/chunks/5682039666f874836451.js +1 -0
- package/assets/esri/core/workers/chunks/6f01905936396fe87865.js +1 -0
- package/assets/esri/core/workers/chunks/6f7917da7166e8c6854b.js +1 -0
- package/assets/esri/core/workers/chunks/7388824eac8da01ea03d.js +1 -0
- package/assets/esri/core/workers/chunks/7745efef7d5119d0b087.js +1 -0
- package/assets/esri/core/workers/chunks/794b47764ebb0257ed41.js +1 -0
- package/assets/esri/core/workers/chunks/{da64dedf9270b64f42b2.js → 79bdb26244ec7b4472fe.js} +1 -1
- package/assets/esri/core/workers/chunks/79ec28b3e3c57fe026aa.js +1 -0
- package/assets/esri/core/workers/chunks/81e9d860a044acec74ce.js +1 -0
- package/assets/esri/core/workers/chunks/831dc0187f71e658550c.js +1 -0
- package/assets/esri/core/workers/chunks/86ad6b020c01850d9095.js +1 -0
- package/assets/esri/core/workers/chunks/{fb7397da8d4ec2ae4587.js → 87458fbf395338511662.js} +1 -1
- package/assets/esri/core/workers/chunks/{1a859be598ad96bb4719.js → 8771296b537f366596c4.js} +18 -18
- package/assets/esri/core/workers/chunks/8958cd555f4887526e8b.js +1 -0
- package/assets/esri/core/workers/chunks/{e57b71ba70f088a3a052.js → 90dcd86cdef90099abfa.js} +1 -1
- package/assets/esri/core/workers/chunks/93067e27eea5844edc6c.js +1 -0
- package/assets/esri/core/workers/chunks/{9fbee2d9bf50c4c148c6.js → 9a146c9e9b4bf7fba88f.js} +1 -1
- package/assets/esri/core/workers/chunks/9b9821772b6cbe189fe0.js +1 -0
- package/assets/esri/core/workers/chunks/{6c4ce530b493c6f7c430.js → 9df2f9f7c28b31866be8.js} +1 -1
- package/assets/esri/core/workers/chunks/{d0620ce99b620621d8bc.js → a0552044e123a3c51ddf.js} +1 -1
- package/assets/esri/core/workers/chunks/acc1a4acd57f5657e782.js +1 -0
- package/assets/esri/core/workers/chunks/b055ae7c54796751b64c.js +1 -0
- package/assets/esri/core/workers/chunks/{acc2cfb116fee7f82ae9.js → b26bd8fde2fc65bb67fb.js} +1 -1
- package/assets/esri/core/workers/chunks/{9b45b94c4dbdc8d2c5fd.js → b34ba22c7a5adce8a7a2.js} +1 -1
- package/assets/esri/core/workers/chunks/b75665d0bf417c6ef24a.js +1 -0
- package/assets/esri/core/workers/chunks/bd50ec30688463b821d1.js +1 -0
- package/assets/esri/core/workers/chunks/c28f7ae4756ad1ba94bd.js +1 -0
- package/assets/esri/core/workers/chunks/c4f713959d4115b87c6c.js +1 -0
- package/assets/esri/core/workers/chunks/c58aa209492bd94b7aad.js +1 -0
- package/assets/esri/core/workers/chunks/{9b117097b7be0efd21d4.js → c59b0b58e24e6a60cf3e.js} +1 -1
- package/assets/esri/core/workers/chunks/c7bd5a4d318299388645.js +1 -0
- package/assets/esri/core/workers/chunks/c7cee13a962396b23a5e.js +1 -0
- package/assets/esri/core/workers/chunks/{3bbff5ea1ea0e955c592.js → cd3679fa86129ebabfdf.js} +1 -1
- package/assets/esri/core/workers/chunks/{1a36dc0daffd536ea44d.js → cee7ce362860717713bf.js} +1 -1
- package/assets/esri/core/workers/chunks/cf463d6309f14df2f2fa.js +1 -0
- package/assets/esri/core/workers/chunks/{224c0e64160bdc170051.js → d076627bb7dadea89e89.js} +1 -1
- package/assets/esri/core/workers/chunks/{fff4200bc61b82dd6193.js → d1d1c45243af614f2e74.js} +1 -1
- package/assets/esri/core/workers/chunks/{1e0498dc9836658d9aba.js → d5fd12ea541c1a6b7fce.js} +1 -1
- package/assets/esri/core/workers/chunks/{10322d990cda5aedf2f0.js → d6e32ca237ad9309c76a.js} +1 -1
- package/assets/esri/core/workers/chunks/e06ad3a3d71154fed654.js +1 -0
- package/assets/esri/core/workers/chunks/{7a77d4cd27c30f1a5cae.js → ee3387a43dfbb3df23e1.js} +1 -1
- package/assets/esri/core/workers/chunks/{5d5fa2b1fc48a17eb9ab.js → f4fc165420d449e442b8.js} +1 -1
- package/assets/esri/core/workers/chunks/{3d6d9906a534ddd8fa37.js → f5ee03f3fca7a75192de.js} +1 -1
- package/assets/esri/themes/base/widgets/_Daylight.scss +1 -1
- package/assets/esri/themes/base/widgets/_ElevationProfile.scss +1 -1
- package/assets/esri/themes/base/widgets/_Weather.scss +1 -1
- package/assets/esri/themes/base/widgets/_Widget.scss +12 -0
- package/assets/esri/themes/dark/main.css +1 -1
- package/assets/esri/themes/dark-blue/main.css +1 -1
- package/assets/esri/themes/dark-green/main.css +1 -1
- package/assets/esri/themes/dark-purple/main.css +1 -1
- package/assets/esri/themes/dark-red/main.css +1 -1
- package/assets/esri/themes/light/main.css +1 -1
- package/assets/esri/themes/light/view.css +1 -1
- package/assets/esri/themes/light-blue/main.css +1 -1
- package/assets/esri/themes/light-green/main.css +1 -1
- package/assets/esri/themes/light-purple/main.css +1 -1
- package/assets/esri/themes/light-red/main.css +1 -1
- package/chunks/ComponentShader.glsl.js +25 -25
- package/chunks/HighlightApply.glsl.js +36 -0
- package/chunks/HighlightBlur.glsl.js +26 -0
- package/chunks/HighlightDownsample.glsl.js +12 -0
- package/chunks/ImageMaterial.glsl.js +8 -8
- package/chunks/LineCallout.glsl.js +1 -1
- package/chunks/Pattern.glsl.js +2 -2
- package/chunks/SimpleAtmosphere.glsl.js +7 -7
- package/chunks/Stars.glsl.js +1 -1
- package/chunks/arcade.js +1 -1
- package/chunks/color.js +1 -1
- package/chunks/languageUtils.js +1 -1
- package/chunks/mat3.js +1 -1
- package/copyright.txt +2 -2
- package/core/AsyncUpdate.js +1 -1
- package/core/Evented.js +1 -1
- package/core/PooledArray.js +1 -1
- package/core/accessorSupport/diffUtils.js +1 -1
- package/core/accessorSupport/get.js +1 -1
- package/core/accessorSupport/read.js +1 -1
- package/core/accessorSupport/set.js +1 -1
- package/core/accessorSupport/tracking.js +1 -1
- package/core/accessorSupport/utils.js +1 -1
- package/core/arrayUtils.js +1 -1
- package/core/libs/gl-matrix-2/mat3.js +1 -1
- package/core/libs/gl-matrix-2/math/mat3.js +1 -1
- package/core/number.js +1 -1
- package/core/object.js +1 -1
- package/core/string.js +1 -1
- package/core/unitUtils.js +1 -1
- package/core/watchUtils.js +1 -1
- package/core/workers/RemoteClient.js +1 -1
- package/exports/csv.js +1 -1
- package/geometry/support/heightModelInfoUtils.js +1 -1
- package/geometry/support/meshUtils/exporters/gltf/geometry.js +1 -1
- package/geometry/support/normalizeUtils.js +1 -1
- package/identity/IdentityManagerBase.js +1 -1
- package/interfaces.d.ts +155 -20
- package/layers/ImageryLayer.js +1 -1
- package/layers/MapImageLayer.js +1 -1
- package/layers/RouteLayer.js +1 -1
- package/layers/SceneLayer.js +1 -1
- package/layers/SubtypeGroupLayer.js +1 -1
- package/layers/TileLayer.js +1 -1
- package/layers/VectorTileLayer.js +1 -1
- package/layers/WMSLayer.js +1 -1
- package/layers/WMTSLayer.js +1 -1
- package/layers/WebTileLayer.js +1 -1
- package/layers/graphics/data/AttributesBuilder.js +1 -1
- package/layers/graphics/data/QueryEngine.js +1 -1
- package/layers/graphics/editingSupport.js +1 -1
- package/layers/graphics/sources/connections/GeoEventConnection.js +1 -1
- package/layers/graphics/sources/support/MemorySourceWorker.js +1 -1
- package/layers/graphics/sources/support/inferenceUtils.js +1 -1
- package/layers/mixins/ArcGISCachedService.js +1 -1
- package/layers/mixins/ArcGISImageService.js +1 -1
- package/layers/ogc/ogcFeatureUtils.js +1 -1
- package/layers/support/ExportImageServiceParameters.js +1 -1
- package/layers/support/PixelBlock.js +1 -1
- package/layers/support/RasterJobHandler.js +1 -1
- package/layers/support/SpriteSource.js +1 -1
- package/layers/support/Sublayer.js +1 -1
- package/layers/support/TilemapCache.js +1 -1
- package/layers/support/WMTSSublayer.js +1 -1
- package/layers/support/arcgisLayerUrl.js +1 -1
- package/layers/support/fieldUtils.js +1 -1
- package/layers/support/kmlUtils.js +1 -1
- package/layers/support/layerUtils.js +1 -1
- package/layers/support/rasterDatasets/ImageAuxRaster.js +1 -1
- package/layers/support/rasterDatasets/ImageServerRaster.js +1 -1
- package/layers/support/rasterDatasets/RasterFactory.js +1 -1
- package/layers/support/rasterDatasets/WCSRaster.js +1 -1
- package/layers/support/rasterDatasets/multipartParser.js +1 -1
- package/layers/support/rasterDatasets/wcsCoverageParser.js +1 -1
- package/layers/support/rasterDatasets/xmlUtilities.js +1 -1
- package/layers/support/rasterFormats/RasterCodec.js +1 -1
- package/layers/support/rasterFormats/TiffDecoder.js +1 -1
- package/layers/support/rasterFunctions/pixelUtils.js +1 -1
- package/layers/support/vectorTileLayerLoader.js +1 -1
- package/layers/support/wmsUtils.js +1 -1
- package/layers/support/wmtsUtils.js +1 -1
- package/libs/i3s/I3SModule.js +1 -1
- package/libs/vxl/VxlModule.js +1 -1
- package/package.json +1 -1
- package/portal/Portal.js +1 -1
- package/portal/PortalItem.js +1 -1
- package/portal/schemas/definitions.js +1 -1
- package/portal/support/layersLoader.js +1 -1
- package/portal/support/portalItemUtils.js +1 -1
- package/portal/support/portalLayers.js +1 -1
- package/renderers/support/AuthoringInfoVisualVariable.js +1 -1
- package/renderers/support/DictionaryLoader.js +1 -1
- package/renderers/support/RasterSymbolizer.js +1 -1
- package/renderers/support/numberUtils.js +1 -1
- package/renderers/support/rasterRendererHelper.js +1 -1
- package/renderers/support/utils.js +1 -1
- package/request.js +1 -1
- package/rest/imageService.js +1 -1
- package/rest/operations/find.js +1 -1
- package/rest/query/operations/query.js +1 -1
- package/rest/query/operations/queryRelatedRecords.js +1 -1
- package/rest/query/operations/queryTopFeatures.js +1 -1
- package/rest/support/DirectionLine.js +1 -1
- package/rest/support/DirectionPoint.js +1 -1
- package/rest/support/PointBarrier.js +1 -1
- package/rest/support/PolygonBarrier.js +1 -1
- package/rest/support/PolylineBarrier.js +1 -1
- package/rest/support/RouteInfo.js +1 -1
- package/rest/support/Stop.js +1 -1
- package/smartMapping/labels/clusters.js +1 -1
- package/smartMapping/popup/dotDensity.js +1 -1
- package/smartMapping/popup/support/clusterUtils.js +1 -1
- package/smartMapping/popup/support/utils.js +1 -1
- package/smartMapping/raster/support/utils.js +1 -1
- package/smartMapping/renderers/color.js +1 -1
- package/smartMapping/renderers/location.js +1 -1
- package/smartMapping/renderers/predominance.js +1 -1
- package/smartMapping/renderers/relationship.js +1 -1
- package/smartMapping/renderers/size.js +1 -1
- package/smartMapping/renderers/support/utils.js +1 -1
- package/smartMapping/renderers/type.js +1 -1
- package/smartMapping/renderers/univariateColorSize.js +1 -1
- package/smartMapping/statistics/summaryStatisticsForAge.js +1 -1
- package/smartMapping/statistics/support/ageUtils.js +1 -1
- package/smartMapping/statistics/support/utils.js +1 -1
- package/smartMapping/support/adapters/SceneLayerAdapter.js +1 -1
- package/smartMapping/support/adapters/support/utils.js +1 -1
- package/smartMapping/support/utils.js +1 -1
- package/smartMapping/symbology/support/Theme.js +1 -1
- package/smartMapping/symbology/support/colorRamps.js +1 -1
- package/smartMapping/symbology/support/symbologyUtils.js +1 -1
- package/smartMapping/symbology/support/utils.js +1 -1
- package/statistics/utils.js +1 -1
- package/support/basemapDefinitions.js +1 -1
- package/support/basemapUtils.js +1 -1
- package/support/elevationInfoUtils.js +1 -1
- package/support/popupUtils.js +1 -1
- package/support/revision.js +1 -1
- package/symbols/cim/CIMSymbolRasterizer.js +1 -1
- package/symbols/cim/cimAnalyzer.js +1 -1
- package/symbols/cim/utils.js +1 -1
- package/symbols/support/previewSymbol3D.js +1 -1
- package/symbols/support/renderUtils.js +1 -1
- package/symbols/support/symbolLayerUtils.js +1 -1
- package/views/2d/engine/Bitmap.js +1 -1
- package/views/2d/engine/flow/FlowDisplayObject.js +1 -1
- package/views/2d/engine/imagery/RasterBitmap.js +1 -1
- package/views/2d/engine/imagery/RasterVFDisplayObject.js +1 -1
- package/views/2d/engine/vectorTiles/TextShaping.js +1 -1
- package/views/2d/engine/vectorTiles/TileParser.js +1 -1
- package/views/2d/engine/vectorTiles/buckets/SymbolBucket.js +1 -1
- package/views/2d/engine/vectorTiles/expression/expression.js +1 -1
- package/views/2d/engine/vectorTiles/shaders/VTLMaterial.js +1 -1
- package/views/2d/engine/webgl/Profiler.js +1 -1
- package/views/2d/engine/webgl/Utils.js +1 -1
- package/views/2d/engine/webgl/brushes/WGLGeometryBrush.js +1 -1
- package/views/2d/engine/webgl/definitions.js +1 -1
- package/views/2d/engine/webgl/effects/HittestEffect.js +1 -1
- package/views/2d/engine/webgl/effects/HittestEffectVTL.js +1 -1
- package/views/2d/engine/webgl/mesh/templates/WGLTemplateStore.js +1 -1
- package/views/2d/engine/webgl/shaders/sources/shaderRepository.js +1 -1
- package/views/2d/engine/webgl/util/Lock.js +1 -1
- package/views/2d/layers/RouteLayerView2D.js +1 -1
- package/views/2d/layers/features/schemaUtils.js +1 -1
- package/views/2d/layers/features/sources/SnapshotFeatureSource.js +1 -1
- package/views/2d/layers/features/support/AttributeStore.js +1 -1
- package/views/2d/layers/features/support/FeatureSetReaderPBF.js +1 -1
- package/views/2d/layers/features/tileRenderers/SymbolTileRenderer.js +1 -1
- package/views/2d/layers/support/webStyleUtils.js +1 -1
- package/views/2d/support/Timeline.js +1 -1
- package/views/3d/analysis/LineOfSight/LineOfSightController.js +1 -1
- package/views/3d/analysis/LineOfSight/LineOfSightIntersectionResult.js +1 -1
- package/views/3d/analysis/LineOfSight/LineOfSightRayIntersector.js +1 -1
- package/views/3d/analysis/Slice/SliceController.js +1 -1
- package/views/3d/environment/PanoramicAtmosphere.js +1 -1
- package/views/3d/environment/SceneViewAtmosphere.js +1 -1
- package/views/3d/environment/StarsTechnique.js +1 -1
- package/views/3d/externalRenderers/ExternalRendererStore.js +1 -1
- package/views/3d/glTF/loader.js +1 -1
- package/views/3d/interactive/analysisTools/lineOfSight/LineOfSightTool.js +1 -1
- package/views/3d/interactive/analysisTools/slice/SliceTool.js +1 -1
- package/views/3d/layers/BuildingComponentSublayerView3D.js +1 -1
- package/views/3d/layers/FeatureLikeLayerView3D.js +1 -1
- package/views/3d/layers/I3SMeshView3D.js +1 -1
- package/views/3d/layers/ImageryLayerView3D.js +1 -1
- package/views/3d/layers/LayerView3D.js +1 -1
- package/views/3d/layers/PointCloudLayerView3D.js +1 -1
- package/views/3d/layers/RouteLayerView3D.js +1 -1
- package/views/3d/layers/SceneLayerGraphicsView3D.js +1 -1
- package/views/3d/layers/VectorTileLayerView3D.js +1 -1
- package/views/3d/layers/graphics/objectResourceUtils.js +1 -1
- package/views/3d/layers/i3s/I3SIndex.js +1 -1
- package/views/3d/layers/i3s/I3SMeshViewFilter.js +1 -1
- package/views/3d/layers/i3s/I3SNodeLoader.js +1 -1
- package/views/3d/layers/i3s/I3SUtil.js +1 -1
- package/views/3d/layers/i3s/IDBMockCache.js +5 -0
- package/views/3d/layers/i3s/PointCloudWorkerUtil.js +1 -1
- package/views/3d/layers/support/PopupSceneLayerView.js +1 -1
- package/views/3d/state/ViewStateManager.js +1 -1
- package/views/3d/state/controllers/RotateController.js +1 -1
- package/views/3d/state/controllers/global/PinchAndPanController.js +1 -1
- package/views/3d/state/controllers/global/ZoomController.js +1 -1
- package/views/3d/state/controllers/global/ZoomStepController.js +1 -1
- package/views/3d/state/controllers/local/PinchAndPanController.js +1 -1
- package/views/3d/state/controllers/local/ZoomController.js +1 -1
- package/views/3d/support/HighlightOptions.js +1 -1
- package/views/3d/support/buffer/InterleavedLayout.js +1 -1
- package/views/3d/support/debugFlags.js +1 -1
- package/views/3d/support/orientedBoundingBox.js +1 -1
- package/views/3d/terrain/TerrainSurface.js +1 -1
- package/views/3d/webgl-engine/Stage.js +1 -1
- package/views/3d/webgl-engine/collections/Component/ComponentObjectCollection.js +1 -1
- package/views/3d/webgl-engine/collections/Component/DepthRange.js +1 -1
- package/views/3d/webgl-engine/core/shaderLibrary/ForwardLinearDepth.glsl.js +3 -3
- package/views/3d/webgl-engine/core/shaderLibrary/attributes/VertexPosition.glsl.js +5 -5
- package/views/3d/webgl-engine/core/shaderModules/ShaderBuilder.js +1 -1
- package/views/3d/webgl-engine/lib/HighlightHelper.js +1 -1
- package/views/3d/webgl-engine/lib/Object3D.js +1 -1
- package/views/3d/webgl-engine/lib/Renderer.js +1 -1
- package/views/3d/webgl-engine/lib/edgeRendering/EdgeRenderer.js +1 -1
- package/views/3d/webgl-engine/lib/edgeRendering/EdgeShaderParameters.js +1 -1
- package/views/3d/webgl-engine/lib/edgeRendering/EdgeView.js +1 -1
- package/views/3d/webgl-engine/lib/lodRendering/InstanceData.js +1 -1
- package/views/3d/webgl-engine/materials/DefaultMaterial.js +1 -1
- package/views/3d/webgl-engine/materials/PathTechnique.js +1 -1
- package/views/3d/webgl-engine/materials/WaterTechnique.js +1 -1
- package/views/3d/webgl-engine/parts/ScreenshotManager.js +1 -1
- package/views/3d/webgl-engine/shaders/HighlightApply.glsl.js +5 -0
- package/views/3d/webgl-engine/shaders/HighlightApplyTechnique.js +5 -0
- package/views/3d/webgl-engine/shaders/HighlightBlur.glsl.js +5 -0
- package/views/3d/webgl-engine/shaders/HighlightBlurTechnique.js +5 -0
- package/views/3d/webgl-engine/shaders/HighlightDownsample.glsl.js +5 -0
- package/views/3d/webgl-engine/shaders/HighlightDownsampleTechnique.js +5 -0
- package/views/3d/webgl-engine/shaders/HighlightOptions.js +4 -0
- package/views/3d/webgl-engine/shaders/HighlightPassParameters.js +5 -0
- package/views/3d/webgl-engine/shaders/ImageMaterial.glsl.js +1 -1
- package/views/3d/webgl-engine/shaders/ImageMaterialTechnique.js +1 -1
- package/views/3d/webgl-engine/shaders/NativeLineTechnique.js +1 -1
- package/views/3d/webgl-engine/shaders/PatternTechnique.js +1 -1
- package/views/3d/webgl-engine/shaders/sources/edgeRenderer/AdjustProjectedPosition.glsl.js +5 -7
- package/views/3d/webgl-engine/shaders/sources/edgeRenderer/EdgeUtil.glsl.js +14 -14
- package/views/SceneView.js +1 -1
- package/views/draw/support/GraphicMover.js +1 -1
- package/views/input/InputHandler.js +1 -1
- package/views/input/InputManager.js +1 -1
- package/views/layers/ImageryTileLayerView.js +1 -1
- package/views/layers/MapImageLayerView.js +1 -1
- package/views/layers/TileLayerView.js +1 -1
- package/views/layers/support/popupUtils.js +1 -1
- package/views/support/DefaultsFromMap.js +1 -1
- package/views/support/Scheduler.js +1 -1
- package/views/support/screenshotUtils.js +1 -1
- package/views/ui/DefaultUI.js +1 -1
- package/views/webgl/ShaderTranspiler.js +1 -1
- package/webscene/Slide.js +1 -1
- package/webscene/spec-certification/spec.js +1 -1
- package/widgets/AreaMeasurement3D/AreaMeasurement3DViewModel.js +1 -1
- package/widgets/Attachments/support/attachmentUtils.js +1 -1
- package/widgets/Attachments.js +1 -1
- package/widgets/Attribution.js +1 -1
- package/widgets/BasemapLayerList.js +1 -1
- package/widgets/Bookmarks/BookmarksViewModel.js +1 -1
- package/widgets/Bookmarks.js +1 -1
- package/widgets/BuildingExplorer/support/filterUtils.js +1 -1
- package/widgets/CoordinateConversion/CoordinateConversionViewModel.js +1 -1
- package/widgets/CoordinateConversion/support/coordinateConversionUtils.js +1 -1
- package/widgets/CoordinateConversion/support/formatUtils.js +1 -1
- package/widgets/DirectLineMeasurement3D/DirectLineMeasurement3DViewModel.js +1 -1
- package/widgets/Directions/DirectionsViewModel.js +1 -1
- package/widgets/Directions.js +1 -1
- package/widgets/Editor/EditorViewModel.js +1 -1
- package/widgets/Editor/workflowUtils.js +1 -1
- package/widgets/Editor.js +1 -1
- package/widgets/ElevationProfile/ElevationProfileViewModel.js +1 -1
- package/widgets/Feature/FeatureMedia.js +1 -1
- package/widgets/Feature/support/featureUtils.js +1 -1
- package/widgets/FeatureForm/FeatureFormViewModel.js +1 -1
- package/widgets/FeatureForm/InputField.js +1 -1
- package/widgets/FeatureForm.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/FeatureTemplates.js +1 -1
- package/widgets/FloorFilter/FloorFilterViewModel.js +1 -1
- package/widgets/LayerList/ListItemPanel.js +1 -1
- package/widgets/LayerList.js +1 -1
- package/widgets/Legend/LegendViewModel.js +1 -1
- package/widgets/Legend/styles/Card.js +1 -1
- package/widgets/Legend/styles/Classic.js +1 -1
- package/widgets/Legend/support/ActiveLayerInfo.js +1 -1
- package/widgets/Legend/support/colorRampUtils.js +1 -1
- package/widgets/Legend/support/relationshipRampUtils.js +1 -1
- package/widgets/Legend/support/sizeRampUtils.js +1 -1
- package/widgets/Popup/PopupViewModel.js +1 -1
- package/widgets/Popup/actionUtils.js +1 -1
- package/widgets/Print/PrintViewModel.js +1 -1
- package/widgets/Print.js +1 -1
- package/widgets/ScaleBar/ScaleBarViewModel.js +1 -1
- package/widgets/Search/SearchViewModel.js +1 -1
- package/widgets/Search/support/layerSearchUtils.js +1 -1
- package/widgets/Slider.js +1 -1
- package/widgets/Swipe.js +1 -1
- package/widgets/TableList.js +1 -1
- package/widgets/TimeSlider/TimeSliderViewModel.js +1 -1
- package/widgets/TimeSlider.js +1 -1
- package/widgets/UtilityNetworkTrace/UtilityNetworkTraceViewModel.js +1 -1
- package/widgets/support/DatePicker.js +1 -1
- package/widgets/support/Popover.js +1 -1
- package/widgets/support/SnappingControls.js +1 -1
- package/widgets/support/TimePicker.js +1 -1
- package/widgets/support/timeWidgetUtils.js +1 -1
- package/assets/esri/core/workers/chunks/083a5d10f8e243641cb9.js +0 -1
- package/assets/esri/core/workers/chunks/0872812ce4d0ec8faf8f.js +0 -1
- package/assets/esri/core/workers/chunks/0bc26899780c33637746.js +0 -1
- package/assets/esri/core/workers/chunks/113362697da1b69deaed.js +0 -1
- package/assets/esri/core/workers/chunks/11a2f9708938eac98815.js +0 -1
- package/assets/esri/core/workers/chunks/11a45709b703be84caaf.js +0 -1
- package/assets/esri/core/workers/chunks/1c1294ff1ebbd8f774f7.js +0 -1
- package/assets/esri/core/workers/chunks/1c915cc9a9d5729b6f17.js +0 -1
- package/assets/esri/core/workers/chunks/31786756b3d44540f8c0.js +0 -1
- package/assets/esri/core/workers/chunks/36a6f34fe40785beff5d.js +0 -1
- package/assets/esri/core/workers/chunks/373c16f8b8093d001064.js +0 -1
- package/assets/esri/core/workers/chunks/382a331a592abb61267f.js +0 -1
- package/assets/esri/core/workers/chunks/3bf106fe34e3992032c4.js +0 -1
- package/assets/esri/core/workers/chunks/3dcec610f1c1497d87bc.js +0 -1
- package/assets/esri/core/workers/chunks/46495e726d8739260d44.js +0 -1
- package/assets/esri/core/workers/chunks/4a82a6a473b3d540d0be.js +0 -1
- package/assets/esri/core/workers/chunks/4b6719377a95ac10fa43.js +0 -1
- package/assets/esri/core/workers/chunks/4d2ef57ff3a5cfc1313f.js +0 -1
- package/assets/esri/core/workers/chunks/4fd2b8153d62592210a2.js +0 -1
- package/assets/esri/core/workers/chunks/56e6a1079269e2964b02.js +0 -1
- package/assets/esri/core/workers/chunks/5b4d9786c010d265346c.js +0 -1
- package/assets/esri/core/workers/chunks/604637e1c3937b376a0d.js +0 -1
- package/assets/esri/core/workers/chunks/60f83257e361f87fa6fd.js +0 -1
- package/assets/esri/core/workers/chunks/6d3f80be6fceb2c18b5d.js +0 -1
- package/assets/esri/core/workers/chunks/6f827a32646bab0a8777.js +0 -1
- package/assets/esri/core/workers/chunks/70bd2ab42e3801ef5974.js +0 -1
- package/assets/esri/core/workers/chunks/746222184b361b50d6ba.js +0 -1
- package/assets/esri/core/workers/chunks/7fb72b2d11e8d840f982.js +0 -1
- package/assets/esri/core/workers/chunks/85bb6a1a7704fcdcbec2.js +0 -1
- package/assets/esri/core/workers/chunks/8b4c76cebb100e6c06f8.js +0 -1
- package/assets/esri/core/workers/chunks/9586a6b320edb1922926.js +0 -1
- package/assets/esri/core/workers/chunks/99638697ffda9022ce92.js +0 -1
- package/assets/esri/core/workers/chunks/a9da1cb118ca62a9581d.js +0 -1
- package/assets/esri/core/workers/chunks/aaa41a5013eef713c032.js +0 -1
- package/assets/esri/core/workers/chunks/ac321f939dd488ff6ce4.js +0 -1
- package/assets/esri/core/workers/chunks/add6027a96398ecf69de.js +0 -1
- package/assets/esri/core/workers/chunks/b75206b46ba81606087c.js +0 -1
- package/assets/esri/core/workers/chunks/bf8456828e38a768eba3.js +0 -1
- package/assets/esri/core/workers/chunks/c0720d0d8adcba6738d4.js +0 -1
- package/assets/esri/core/workers/chunks/c5bb712d5cf8c05a4e13.js +0 -1
- package/assets/esri/core/workers/chunks/d343f05a3366f95e0494.js +0 -1
- package/assets/esri/core/workers/chunks/d8b1f00075983d769985.js +0 -1
- package/chunks/Highlight.glsl.js +0 -88
- package/views/3d/webgl-engine/shaders/Highlight.glsl.js +0 -5
- package/views/3d/webgl-engine/shaders/HighlightTechnique.js +0 -5
- package/views/3d/webgl-engine/shaders/HighlightTechniqueConfiguration.js +0 -5
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import t from"../../../../../core/Error.js";import e from"../../../../../core/has.js";import i from"../../../../../core/Logger.js";import{clamp as s}from"../../../../../core/mathUtils.js";import{isNone as r,isSome as a,mapMany as o,forEachSome as n,applySome as l,unwrap as h}from"../../../../../core/maybe.js";import{createResolver as c,isAbortError as u}from"../../../../../core/promiseUtils.js";import{diff as d}from"../../../../../core/accessorSupport/diffUtils.js";import p from"../../../../../layers/support/FieldsIndex.js";import{MAX_FILTERS as _,HIGHLIGHT_FLAG as g,ATTRIBUTE_DATA_VV as f,NAN_MAGIC_NUMBER as m,ATTRIBUTE_DATA_ANIMATION as y,ATTRIBUTE_DATA_GPGPU as x}from"../../../engine/webgl/definitions.js";import{DISPLAY_ID_TYPE_AGGREGATE as b,DISPLAY_ID_TYPE_FEATURE as T,getDisplayIdTexel as z,getDisplayIdType as S,getDisplayIdFilterMask as E}from"../../../engine/webgl/DisplayId.js";import{getPixelArrayCtor as w}from"../../../engine/webgl/Utils.js";import{createDebugLogger as A,DEBUG_ATTR_UPDATES as D}from"../../../engine/webgl/util/debug.js";import{getVisualVariableSizeValueRepresentationRatio as k}from"../tileRenderers/support/visualVariablesUtils.js";import{PixelType as U}from"../../../../webgl/enums.js";const F=i.getLogger("esri.views.layers.2d.features.support.AttributeStore"),B=A(D,F),C={sharedArrayBuffer:e("esri-shared-array-buffer"),atomics:e("esri-atomics")};function R(t,e){return i=>e(t(i))}class I{constructor(t,e,i,s){this.size=0,this.texelSize=4;const{pixelType:r,layout:a,textureOnly:o}=s;this.textureOnly=o||!1,this.pixelType=r,this._ctype=e,this.layout=a,this._resetRange(),this._shared=t,this.size=i,o||(this.data=this._initData(r,i,t,e))}get buffer(){return l(this.data,(t=>t.buffer))}unsetComponentAllTexels(t,e){const i=h(this.data);for(let s=0;s<this.size*this.size;s++)i[s*this.texelSize+t]&=~e;this.dirtyStart=0,this.dirtyEnd=this.size*this.size-1}setComponentAllTexels(t,e){const i=h(this.data);for(let s=0;s<this.size*this.size;s++)i[s*this.texelSize+t]|=255&e;this.dirtyStart=0,this.dirtyEnd=this.size*this.size-1}setComponent(t,e,i){const s=h(this.data);for(const r of i)s[r*this.texelSize+t]|=e,this.dirtyStart=Math.min(this.dirtyStart,r),this.dirtyEnd=Math.max(this.dirtyEnd,r)}setComponentTexel(t,e,i){h(this.data)[i*this.texelSize+t]|=e,this.dirtyStart=Math.min(this.dirtyStart,i),this.dirtyEnd=Math.max(this.dirtyEnd,i)}unsetComponentTexel(t,e,i){h(this.data)[i*this.texelSize+t]&=~e,this.dirtyStart=Math.min(this.dirtyStart,i),this.dirtyEnd=Math.max(this.dirtyEnd,i)}getData(t,e){const i=z(t);return h(this.data)[i*this.texelSize+e]}setData(t,e,i){const s=z(t),r=1<<e;0!=(this.layout&r)?(this.data[s*this.texelSize+e]=i,this.dirtyStart=Math.min(this.dirtyStart,s),this.dirtyEnd=Math.max(this.dirtyEnd,s)):F.error("mapview-attributes-store","Tried to set a value for a texel's readonly component")}lock(){this.pixelType===U.UNSIGNED_BYTE&&this._shared&&C.atomics&&"local"!==this._ctype&&Atomics.store(this.data,0,1)}unlock(){this.pixelType===U.UNSIGNED_BYTE&&this._shared&&C.atomics&&"local"!==this._ctype&&Atomics.store(this.data,0,0)}expand(t){if(this.size=t,!this.textureOnly){const e=this._initData(this.pixelType,t,this._shared,this._ctype),i=h(this.data);e.set(i),this.data=e}}toMessage(){const t=this.dirtyStart,e=this.dirtyEnd,i=this.texelSize;if(t>e)return null;this._resetRange();const s=!(this._shared||"local"===this._ctype),r=this.pixelType,a=this.layout,o=h(this.data);return{start:t,end:e,data:s&&o.slice(t*i,(e+1)*i)||null,pixelType:r,layout:a}}_initData(t,e,i,s){const r=i&&"local"!==s?SharedArrayBuffer:ArrayBuffer,a=w(t),o=new a(new r(e*e*4*a.BYTES_PER_ELEMENT));for(let n=0;n<o.length;n+=4)o[n+1]=255;return o}_resetRange(){this.dirtyStart=2147483647,this.dirtyEnd=0}}class M{constructor(t,e){this._client=t,this.config=e,this._attributeComputeMap=new Map,this._blocks=new Array,this._filters=new Array(_),this._targetType=0,this._abortController=new AbortController,this._hasScaleExpr=!1,this._size=32,this._idsToHighlight=new Set;const i=e.supportsTextureFloat?U.FLOAT:U.UNSIGNED_BYTE;B(`Creating AttributeStore ${C.sharedArrayBuffer?"with":"without"} shared memory`),this._blockDescriptors=[{pixelType:U.UNSIGNED_BYTE,layout:1},{pixelType:U.UNSIGNED_BYTE,layout:15,textureOnly:!0},{pixelType:U.UNSIGNED_BYTE,layout:15,textureOnly:!0},{pixelType:i,layout:15},{pixelType:i,layout:15}],this._blocks=this._blockDescriptors.map((()=>null))}destroy(){this._abortController.abort()}get hasScaleExpr(){return this._hasScaleExpr}get _signal(){return this._abortController.signal}get hasHighlight(){return this._idsToHighlight.size>0}update(t,i){this.config=i;const s=i.schema.processors[0].storage,o=d(this._schema,s);if((t.targets.feature||t.targets.aggregate)&&(t.storage.data=!0),o&&(e("esri-2d-update-debug")&&console.debug("Applying Update - AttributeStore:",o),t.storage.data=!0,this._schema=s,this._attributeComputeMap.clear(),!r(s))){switch(s.target){case"feature":this._targetType=T;break;case"aggregate":this._targetType=b}if("subtype"===s.type)for(const t in s.mapping){const e=s.mapping[t];if(a(e))for(const t of e.mapping)this._bindAttribute(t)}else for(const t of s.mapping)this._bindAttribute(t)}}onTileData(t,e){if(r(e.addOrUpdate))return;const i=e.addOrUpdate.getCursor();for(;i.next();){const t=i.getDisplayId();this.setAttributeData(t,i)}}invalidateResources(){this._createResourcesPromise=null,this._abortController.abort(),this._abortController=new AbortController}async setHighlight(t,e){const i=1,s=this._getBlock(0),r=e.map((t=>z(t)));s.lock(),s.unsetComponentAllTexels(0,i),s.setComponent(0,i,r),s.unlock(),this._idsToHighlight.clear();for(const a of t)this._idsToHighlight.add(a);await this.sendUpdates()}async updateFilters(t,i){const{config:s,service:r,spatialReference:a}=i,{filters:o}=s,n=o.map(((t,e)=>this._updateFilter(t,e,r,a)));(await Promise.all(n)).some((t=>t))&&(t.storage.filters=!0,e("esri-2d-update-debug")&&console.debug("Applying Update - AttributeStore:","Filters changed"))}setData(t,e,i,s){const r=z(t);this._ensureSizeForTexel(r),this._getBlock(e).setData(t,i,s)}getData(t,e,i){return this._getBlock(e).getData(t,i)}getHighlightFlag(t){return this._idsToHighlight.has(t)?g:0}unsetAttributeData(t){const e=z(t);this._getBlock(0).setData(e,0,0)}setAttributeData(t,e){const i=z(t);if(this._ensureSizeForTexel(i),this._getBlock(0).setData(i,0,this.getFilterFlags(e)),this._targetType!==S(t))return;const r=this._attributeComputeMap,a=this.config.supportsTextureFloat?1:2,o=4;r.size&&r.forEach(((t,r)=>{const n=r*a%o,l=Math.floor(r*a/o),h=this._getBlock(l+f),c=t(e);if(this.config.supportsTextureFloat)h.setData(i,n,c);else if(c===m)h.setData(i,n,255),h.setData(i,n+1,255);else{const t=s(Math.round(c),-32767,32766)+32768,e=255&t,r=(65280&t)>>8;h.setData(i,n,e),h.setData(i,n+1,r)}}))}sendUpdates(){if(this._nextUpdate)return this._nextUpdate.promise;if(this._currUpdate)return this._nextUpdate=c(),this._nextUpdate.promise;const e={blocks:this._blocks.map((t=>a(t)?t.toMessage():null))};return this._currUpdate=this._createResources().then((()=>{const t=()=>{if(this._currUpdate=null,this._nextUpdate){const t=this._nextUpdate;this._nextUpdate=null,this.sendUpdates().then((()=>t.resolve()))}},i=this._client.update(e,this._signal).then(t).catch(t);return this._client.render(this._signal),i})).catch((e=>u(e)?(this._createResourcesPromise=null,this._createResources()):(F.error(new t("mapview-attribute-store","Encountered an error during client update",e)),Promise.resolve()))),this._currUpdate}_ensureSizeForTexel(t){for(;t>=this._size*this._size;)if(this._expand())return}_bindAttribute(t){function e(){return t.normalizationField?e=>{const i=e.readAttribute(t.normalizationField);if(!i)return null;return e.readAttribute(t.field)/i}:e=>e.readAttribute(t.field)}function i(){return t.normalizationField&&F.warn("mapview-arcade","Ignoring normalizationField specified with an arcade expression which is not supported."),e=>e.getComputedNumericAtIndex(t.fieldIndex)}let s;if(null!=t.fieldIndex)s=i();else{if(!t.field)return;s=e()}if(t.valueRepresentation){s=R(s,(e=>k(e,t.valueRepresentation)))}const r=t=>null===t||isNaN(t)||t===1/0?m:t;this._attributeComputeMap.set(t.binding,R(s,r))}_createResources(){if(a(this._createResourcesPromise))return this._createResourcesPromise;this._getBlock(y),this._getBlock(x),B("Initializing AttributeStore");const e={shared:C.sharedArrayBuffer&&!("local"===this._client.type),size:this._size,blocks:o(this._blocks,(t=>({textureOnly:t.textureOnly,buffer:t.buffer,pixelType:t.pixelType})))},i=this._client.initialize(e,this._signal).catch((e=>{u(e)?this._createResourcesPromise=null:F.error(new t("mapview-attribute-store","Encountered an error during client initialization",e))}));return this._createResourcesPromise=i,i.then((()=>r(this._createResourcesPromise)?this._createResources():void 0)),i}_getBlock(t){const e=this._blocks[t];if(a(e))return e;B(`Initializing AttributeBlock at index ${t}`);const i=C.sharedArrayBuffer,s=this._client.type,r=new I(i,s,this._size,this._blockDescriptors[t]);return this._blocks[t]=r,this._createResourcesPromise=null,r}_expand(){if(this._size<this.config.maxTextureSize){const t=this._size<<=1;return B("Expanding block size to",t,this._blocks),n(this._blocks,(e=>e.expand(t))),this._createResourcesPromise=null,this._size=t,0}return F.error(new t("mapview-limitations","Maximum number of onscreen features exceeded.")),-1}async _updateFilter(t,e,i,s){const o=this._filters[e],n=a(o)&&o.hash;if(!o&&!t)return!1;if(n===JSON.stringify(t))return!1;if(r(t)){if(!o)return!1;const t=1<<e+1,i=this._getBlock(0);return this._filters[e]=null,i.setComponentAllTexels(0,t),this.sendUpdates(),!0}const l=await this._getFilter(e,i);return await l.update(t,s),!0}async _getFilter(t,e){const i=this._filters[t];if(a(i))return i;const{default:s}=await import("./FeatureFilter.js"),r=new s({geometryType:e.geometryType,hasM:!1,hasZ:!1,timeInfo:e.timeInfo,fieldsIndex:new p(e.fields)});return this._filters[t]=r,r}isVisible(t){return!!(2&this._getBlock(0).getData(t,0))}getFilterFlags(t){let e=0;const i=E(t.getDisplayId());for(let a=0;a<this._filters.length;a++){const s=!!(i&1<<a),o=this._filters[a];e|=(!s||r(o)||o.check(t)?1:0)<<a}let s=0;if(this._idsToHighlight.size){const e=t.getObjectId();s=this.getHighlightFlag(e)}return e<<1|s}}export{M as default};
|
|
5
|
+
import t from"../../../../../core/Error.js";import e from"../../../../../core/has.js";import i from"../../../../../core/Logger.js";import{clamp as s}from"../../../../../core/mathUtils.js";import{isNone as r,isSome as a,mapMany as o,forEachSome as n,applySome as l,unwrap as h}from"../../../../../core/maybe.js";import{createResolver as c,isAbortError as u}from"../../../../../core/promiseUtils.js";import{diff as d}from"../../../../../core/accessorSupport/diffUtils.js";import p from"../../../../../layers/support/FieldsIndex.js";import{MAX_FILTERS as _,HIGHLIGHT_FLAG as g,ATTRIBUTE_DATA_VV as f,NAN_MAGIC_NUMBER as m,ATTRIBUTE_DATA_ANIMATION as y,ATTRIBUTE_DATA_GPGPU as x}from"../../../engine/webgl/definitions.js";import{DISPLAY_ID_TYPE_AGGREGATE as b,DISPLAY_ID_TYPE_FEATURE as T,getDisplayIdTexel as z,getDisplayIdType as S,getDisplayIdFilterMask as E}from"../../../engine/webgl/DisplayId.js";import{getPixelArrayCtor as w}from"../../../engine/webgl/Utils.js";import{createDebugLogger as A,DEBUG_ATTR_UPDATES as D}from"../../../engine/webgl/util/debug.js";import{getVisualVariableSizeValueRepresentationRatio as k}from"../tileRenderers/support/visualVariablesUtils.js";import{PixelType as U}from"../../../../webgl/enums.js";const F=i.getLogger("esri.views.layers.2d.features.support.AttributeStore"),B=A(D,F),C={sharedArrayBuffer:e("esri-shared-array-buffer"),atomics:e("esri-atomics")};function R(t,e){return i=>e(t(i))}class I{constructor(t,e,i,s){this.size=0,this.texelSize=4;const{pixelType:r,layout:a,textureOnly:o}=s;this.textureOnly=o||!1,this.pixelType=r,this._ctype=e,this.layout=a,this._resetRange(),this._shared=t,this.size=i,o||(this.data=this._initData(r,i,t,e))}get buffer(){return l(this.data,(t=>t.buffer))}unsetComponentAllTexels(t,e){const i=h(this.data);for(let s=0;s<this.size*this.size;s++)i[s*this.texelSize+t]&=~e;this.dirtyStart=0,this.dirtyEnd=this.size*this.size-1}setComponentAllTexels(t,e){const i=h(this.data);for(let s=0;s<this.size*this.size;s++)i[s*this.texelSize+t]|=255&e;this.dirtyStart=0,this.dirtyEnd=this.size*this.size-1}setComponent(t,e,i){const s=h(this.data);for(const r of i)s[r*this.texelSize+t]|=e,this.dirtyStart=Math.min(this.dirtyStart,r),this.dirtyEnd=Math.max(this.dirtyEnd,r)}setComponentTexel(t,e,i){h(this.data)[i*this.texelSize+t]|=e,this.dirtyStart=Math.min(this.dirtyStart,i),this.dirtyEnd=Math.max(this.dirtyEnd,i)}unsetComponentTexel(t,e,i){h(this.data)[i*this.texelSize+t]&=~e,this.dirtyStart=Math.min(this.dirtyStart,i),this.dirtyEnd=Math.max(this.dirtyEnd,i)}getData(t,e){const i=z(t);return h(this.data)[i*this.texelSize+e]}setData(t,e,i){const s=z(t),r=1<<e;0!=(this.layout&r)?(this.data[s*this.texelSize+e]=i,this.dirtyStart=Math.min(this.dirtyStart,s),this.dirtyEnd=Math.max(this.dirtyEnd,s)):F.error("mapview-attributes-store","Tried to set a value for a texel's readonly component")}lock(){this.pixelType===U.UNSIGNED_BYTE&&this._shared&&C.atomics&&"local"!==this._ctype&&Atomics.store(this.data,0,1)}unlock(){this.pixelType===U.UNSIGNED_BYTE&&this._shared&&C.atomics&&"local"!==this._ctype&&Atomics.store(this.data,0,0)}expand(t){if(this.size=t,!this.textureOnly){const e=this._initData(this.pixelType,t,this._shared,this._ctype),i=h(this.data);e.set(i),this.data=e}}toMessage(){const t=this.dirtyStart,e=this.dirtyEnd,i=this.texelSize;if(t>e)return null;this._resetRange();const s=!(this._shared||"local"===this._ctype),r=this.pixelType,a=this.layout,o=h(this.data);return{start:t,end:e,data:s&&o.slice(t*i,(e+1)*i)||null,pixelType:r,layout:a}}_initData(t,e,i,s){const r=i&&"local"!==s?SharedArrayBuffer:ArrayBuffer,a=w(t),o=new a(new r(e*e*4*a.BYTES_PER_ELEMENT));for(let n=0;n<o.length;n+=4)o[n+1]=255;return o}_resetRange(){this.dirtyStart=2147483647,this.dirtyEnd=0}}class M{constructor(t,e){this._client=t,this.config=e,this._attributeComputeMap=new Map,this._blocks=new Array,this._filters=new Array(_),this._targetType=0,this._abortController=new AbortController,this._hasScaleExpr=!1,this._size=32,this._idsToHighlight=new Set;const i=e.supportsTextureFloat?U.FLOAT:U.UNSIGNED_BYTE;B(`Creating AttributeStore ${C.sharedArrayBuffer?"with":"without"} shared memory`),this._blockDescriptors=[{pixelType:U.UNSIGNED_BYTE,layout:1},{pixelType:U.UNSIGNED_BYTE,layout:15,textureOnly:!0},{pixelType:U.UNSIGNED_BYTE,layout:15,textureOnly:!0},{pixelType:i,layout:15},{pixelType:i,layout:15}],this._blocks=this._blockDescriptors.map((()=>null))}destroy(){this._abortController.abort()}get hasScaleExpr(){return this._hasScaleExpr}get _signal(){return this._abortController.signal}get hasHighlight(){return this._idsToHighlight.size>0}update(t,i){this.config=i;const s=i.schema.processors[0].storage,o=d(this._schema,s);if((t.targets.feature||t.targets.aggregate)&&(t.storage.data=!0),o&&(e("esri-2d-update-debug")&&console.debug("Applying Update - AttributeStore:",o),t.storage.data=!0,this._schema=s,this._attributeComputeMap.clear(),!r(s))){switch(s.target){case"feature":this._targetType=T;break;case"aggregate":this._targetType=b}if("subtype"===s.type)for(const t in s.mapping){const e=s.mapping[t];if(a(e))for(const t of e.mapping)this._bindAttribute(t)}else for(const t of s.mapping)this._bindAttribute(t)}}onTileData(t,e){if(r(e.addOrUpdate))return;const i=e.addOrUpdate.getCursor();for(;i.next();){const t=i.getDisplayId();this.setAttributeData(t,i)}}invalidateResources(){this._createResourcesPromise=null,this._abortController.abort(),this._abortController=new AbortController}async setHighlight(t,e){const i=1,s=this._getBlock(0),r=e.map((t=>z(t)));s.lock(),s.unsetComponentAllTexels(0,i),s.setComponent(0,i,r),s.unlock(),this._idsToHighlight.clear();for(const a of t)this._idsToHighlight.add(a);await this.sendUpdates()}async updateFilters(t,i){const{config:s,service:r,spatialReference:a}=i,{filters:o}=s,n=o.map(((t,e)=>this._updateFilter(t,e,r,a)));(await Promise.all(n)).some((t=>t))&&(t.storage.filters=!0,e("esri-2d-update-debug")&&console.debug("Applying Update - AttributeStore:","Filters changed"))}setData(t,e,i,s){const r=z(t);this._ensureSizeForTexel(r),this._getBlock(e).setData(t,i,s)}getData(t,e,i){return this._getBlock(e).getData(t,i)}getHighlightFlag(t){return this._idsToHighlight.has(t)?g:0}unsetAttributeData(t){const e=z(t);this._getBlock(0).setData(e,0,0)}setAttributeData(t,e){const i=z(t);if(this._ensureSizeForTexel(i),this._getBlock(0).setData(i,0,this.getFilterFlags(e)),this._targetType!==S(t))return;const r=this._attributeComputeMap,a=this.config.supportsTextureFloat?1:2,o=4;r.size&&r.forEach(((t,r)=>{const n=r*a%o,l=Math.floor(r*a/o),h=this._getBlock(l+f),c=t(e);if(this.config.supportsTextureFloat)h.setData(i,n,c);else if(c===m)h.setData(i,n,255),h.setData(i,n+1,255);else{const t=s(Math.round(c),-32767,32766)+32768,e=255&t,r=(65280&t)>>8;h.setData(i,n,e),h.setData(i,n+1,r)}}))}sendUpdates(){if(this._nextUpdate)return this._nextUpdate.promise;if(this._currUpdate)return this._nextUpdate=c(),this._nextUpdate.promise;const e={blocks:this._blocks.map((t=>a(t)?t.toMessage():null))};return this._currUpdate=this._createResources().then((()=>{const t=()=>{if(this._currUpdate=null,this._nextUpdate){const t=this._nextUpdate;this._nextUpdate=null,this.sendUpdates().then((()=>t.resolve()))}},i=this._client.update(e,this._signal).then(t).catch(t);return this._client.render(this._signal),i})).catch((e=>{if(u(e))return this._createResourcesPromise=null,this._createResources();F.error(new t("mapview-attribute-store","Encountered an error during client update",e))})),this._currUpdate}_ensureSizeForTexel(t){for(;t>=this._size*this._size;)if(this._expand())return}_bindAttribute(t){function e(){return t.normalizationField?e=>{const i=e.readAttribute(t.normalizationField);if(!i)return null;return e.readAttribute(t.field)/i}:e=>e.readAttribute(t.field)}function i(){return t.normalizationField&&F.warn("mapview-arcade","Ignoring normalizationField specified with an arcade expression which is not supported."),e=>e.getComputedNumericAtIndex(t.fieldIndex)}let s;if(null!=t.fieldIndex)s=i();else{if(!t.field)return;s=e()}if(t.valueRepresentation){s=R(s,(e=>k(e,t.valueRepresentation)))}const r=t=>null===t||isNaN(t)||t===1/0?m:t;this._attributeComputeMap.set(t.binding,R(s,r))}_createResources(){if(a(this._createResourcesPromise))return this._createResourcesPromise;this._getBlock(y),this._getBlock(x),B("Initializing AttributeStore");const e={shared:C.sharedArrayBuffer&&!("local"===this._client.type),size:this._size,blocks:o(this._blocks,(t=>({textureOnly:t.textureOnly,buffer:t.buffer,pixelType:t.pixelType})))},i=this._client.initialize(e,this._signal).catch((e=>{u(e)?this._createResourcesPromise=null:F.error(new t("mapview-attribute-store","Encountered an error during client initialization",e))}));return this._createResourcesPromise=i,i.then((()=>r(this._createResourcesPromise)?this._createResources():void 0)),i}_getBlock(t){const e=this._blocks[t];if(a(e))return e;B(`Initializing AttributeBlock at index ${t}`);const i=C.sharedArrayBuffer,s=this._client.type,r=new I(i,s,this._size,this._blockDescriptors[t]);return this._blocks[t]=r,this._createResourcesPromise=null,r}_expand(){if(this._size<this.config.maxTextureSize){const t=this._size<<=1;return B("Expanding block size to",t,this._blocks),n(this._blocks,(e=>e.expand(t))),this._createResourcesPromise=null,this._size=t,0}return F.error(new t("mapview-limitations","Maximum number of onscreen features exceeded.")),-1}async _updateFilter(t,e,i,s){const o=this._filters[e],n=a(o)&&o.hash;if(!o&&!t)return!1;if(n===JSON.stringify(t))return!1;if(r(t)){if(!o)return!1;const t=1<<e+1,i=this._getBlock(0);return this._filters[e]=null,i.setComponentAllTexels(0,t),this.sendUpdates(),!0}const l=await this._getFilter(e,i);return await l.update(t,s),!0}async _getFilter(t,e){const i=this._filters[t];if(a(i))return i;const{default:s}=await import("./FeatureFilter.js"),r=new s({geometryType:e.geometryType,hasM:!1,hasZ:!1,timeInfo:e.timeInfo,fieldsIndex:new p(e.fields)});return this._filters[t]=r,r}isVisible(t){return!!(2&this._getBlock(0).getData(t,0))}getFilterFlags(t){let e=0;const i=E(t.getDisplayId());for(let a=0;a<this._filters.length;a++){const s=!!(i&1<<a),o=this._filters[a];e|=(!s||r(o)||o.check(t)?1:0)<<a}let s=0;if(this._idsToHighlight.size){const e=t.getObjectId();s=this.getHighlightFlag(e)}return e<<1|s}}export{M 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.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import e from"../../../../../core/Error.js";import t from"../../../../../core/Logger.js";import{isNone as r,isSome as s}from"../../../../../core/maybe.js";import i from"../../../../../core/pbf.js";import{convertToGeometry as n,unquantizeOptimizedGeometry as a}from"../../../../../layers/graphics/featureConversionUtils.js";import{OptimizedFeature as h}from"../../../../../layers/graphics/OptimizedFeature.js";import o from"../../../../../layers/graphics/OptimizedGeometry.js";import{FeatureSetReader as d}from"./FeatureSetReader.js";import{parseHeader as u}from"./FeatureSetReaderPBFHeader.js";const c=t.getLogger("esri.view.2d.layers.features.support.FeatureSetReaderPBF"),g=!0,l=268435455,_=128,f=128e3,y={small:{delta:new Int32Array(_),decoded:new Int32Array(_)},large:{delta:new Int32Array(f),decoded:new Int32Array(f)}};function I(e){return e<=y.small.delta.length?y.small:(e<=y.large.delta.length||(y.large.delta=new Int32Array(Math.round(1.25*e)),y.large.decoded=new Int32Array(Math.round(1.25*e))),y.large)}function p(e){return e.toLowerCase().trim()}function m(t){try{const e=2,r=new i(new Uint8Array(t),new DataView(t));for(;r.next();){if(r.tag()===e)return x(r.getMessage());r.skip()}}catch(r){const t=new e("query:parsing-pbf","Error while parsing FeatureSet PBF payload",{error:r});c.error(t)}return null}function x(e){const t=1;for(;e.next();){if(e.tag()===t)return e.getMessage();e.skip()}return null}function S(e){const t=1,r=2,s=3,i=4,n=5,a=6,h=7,o=8,d=9,u=e.getLength(),c=e.pos()+u;for(;e.pos()<c&&e.next();)switch(e.tag()){case t:return e.getString();case r:return e.getFloat();case s:return e.getDouble();case i:return e.getSInt32();case n:return e.getUInt32();case a:return e.getInt64();case h:return e.getUInt64();case o:return e.getSInt64();case d:return e.getBool();default:return e.skip(),null}return null}function F(e,t,r,s,i,n){return.5*Math.abs(e*s+r*n+i*t-e*n-r*t-i*s)}function G(e,t,r,s){return 0===e*s-r*t&&e*r+t*s>0}class v extends d{constructor(e,t,r,s){super(e,s),this._hasNext=!1,this._isPoints=!1,this._featureIndex=-1,this._featureOffset=0,this._cache={area:0,unquantGeometry:void 0,geometry:void 0,centroid:void 0,legacyFeature:void 0,optFeature:void 0},this._geometryType=s.geometryType,this._reader=t,this._header=r,this._hasNext=r.hasFeatures,this._isPoints="esriGeometryPoint"===s.geometryType}static fromBuffer(e,t,r=!1){const s=t.geometryType,i=m(e),n=u(i,"esriGeometryPoint"===s,r),a=d.createInstance();return new v(a,i,n,t)}get geometryType(){return this._geometryType}get size(){return this._header.featureCount}get hasZ(){return!1}get hasM(){return!1}get stride(){return 2+(this.hasZ?1:0)+(this.hasM?1:0)}get hasFeatures(){return this._header.hasFeatures}get hasNext(){return this._hasNext}get exceededTransferLimit(){return this._header.exceededTransferLimit}hasField(e){return this._header.hasField(e)}getFieldNames(){return this._header.fields.map((e=>e.fieldName))}getSize(){return this.size}getQuantizationTransform(){return this._header.transform}getCursor(){return this.copy()}getIndex(){return this._featureIndex}setIndex(e){this._cache.area=0,this._cache.unquantGeometry=void 0,this._cache.geometry=void 0,this._cache.centroid=void 0,this._cache.legacyFeature=void 0,this._cache.optFeature=void 0,this._featureIndex=e}getAttributeHash(){let e="";return this._header.fields.forEach((({index:t})=>{e+=this._readAttributeAtIndex(t)+"."})),e}getObjectId(){return this._readAttributeAtIndex(this._header.objectIdFieldIndex)}getDisplayId(){return this._header.displayIds[this._featureIndex]}setDisplayId(e){this._header.displayIds[this._featureIndex]=e}getGroupId(){return this._header.groupIds[this._featureIndex]}setGroupId(e){this._header.groupIds[this._featureIndex]=e}readLegacyFeature(){if(void 0===this._cache.legacyFeature){var e;const t=this.readCentroid(),r={attributes:this.readAttributes(),geometry:this._isPoints?this.readLegacyPointGeometry():this.readLegacyGeometry(),centroid:null!=(e=t&&{x:t.coords[0],y:t.coords[1]})?e:null};return this._cache.legacyFeature=r,r}return this._cache.legacyFeature}readOptimizedFeature(){if(void 0===this._cache.optFeature){const e=new h(this.readGeometry(),this.readAttributes(),this.readCentroid());return e.objectId=this.getObjectId(),e.displayId=this.getDisplayId(),this._cache.optFeature=e,e}return this._cache.optFeature}getXHydrated(){const e=this._header.centroid[2*this._featureIndex],t=this.getQuantizationTransform();return r(t)?e:e*t.scale[0]+t.translate[0]}getYHydrated(){const e=this._header.centroid[2*this._featureIndex+1],t=this.getQuantizationTransform();return r(t)?e:t.translate[1]-e*t.scale[1]}getX(){return this._header.centroid[2*this._featureIndex]*this._sx+this._tx}getY(){return this._header.centroid[2*this._featureIndex+1]*this._sy+this._ty}readLegacyPointGeometry(){return{x:this.getX(),y:this.getY()}}readLegacyGeometry(e){const t=this.readGeometry(e);return n(t,this.geometryType,!1,!1)}readLegacyCentroid(){const e=this.readCentroid();if(!e)return null;const[t,r]=e.coords;return{x:t,y:r}}readGeometryArea(){return this._cache.area||this.readGeometry(!0),this._cache.area}readUnquantizedGeometry(e=!1){if(void 0===this._cache.unquantGeometry){const t=this.readGeometry(e);if(!t)return this._cache.unquantGeometry=null,null;const r=I(t.coords.length).decoded,s=t.clone(r),i=s.coords;let n=0;for(const e of s.lengths){for(let t=1;t<e;t++){const e=2*(n+t),r=2*(n+t-1);i[e]+=i[r],i[e+1]+=i[r+1]}n+=e}return this._cache.unquantGeometry=s,s}return this._cache.unquantGeometry}readHydratedGeometry(){if(this._isPoints){if(this._header.centroid[2*this._featureIndex]===l)return null;const e=this.getXHydrated(),t=this.getYHydrated();return new o([],[e,t])}const e=this.readGeometry();if(!e)return null;const t=e.clone(),r=this.getQuantizationTransform();return s(r)&&a(t,t,this.hasZ,this.hasM,r),t}readGeometry(e=!1){if(void 0===this._cache.geometry){let r=null;if(this._isPoints){if(this._header.centroid[2*this._featureIndex]===l)return null;const e=this.getX(),t=this.getY();r=new o([],[e,t])}else{const s=this._header.offsets.geometry[this._featureIndex],i=this._reader;if(0===s)return null;i.move(s);try{r=e?this._parseGeometryForDisplay(i):this._parseGeometry(i)}catch(t){return console.error("Failed to parse geometry!",t),null}}return this._cache.geometry=r,r}return this._cache.geometry}readCentroid(){if(void 0===this._cache.centroid){let e=null;const t=this._header.centroid[2*this._featureIndex]+this._tx,r=this._header.centroid[2*this._featureIndex+1]+this._ty;return t===l?(e=this._computeCentroid(),e&&(this._header.centroid[2*this._featureIndex]=e.coords[0]-this._tx,this._header.centroid[2*this._featureIndex+1]=e.coords[1]-this._ty)):e=new o([],[t,r]),this._cache.centroid=e,e}return this._cache.centroid}copy(){const e=this._reader.clone(),t=new v(this.instance,e,this._header,this.fullSchema());return this.copyInto(t),t}next(){for(this._cache.area=0,this._cache.unquantGeometry=void 0,this._cache.geometry=void 0,this._cache.centroid=void 0,this._cache.legacyFeature=void 0,this._cache.optFeature=void 0;++this._featureIndex<this.size&&!this._getExists(););return this._featureIndex<this.size}_readAttribute(e,t){const r=this._header.hasField(e)?e:p(e),s=this._header.getFieldIndex(r);if(null==s)return;const i=this._readAttributeAtIndex(s);if(!t)return i;if(null==i)return i;return this._header.isDateField(r)?new Date(i):i}_readAttributes(){const e={};return this._header.fields.forEach((({fieldName:t,index:r})=>{e[t]=this._readAttributeAtIndex(r)})),e}copyInto(e){super.copyInto(e),e._featureIndex=this._featureIndex,e._featureOffset=this._featureOffset,e._hasNext=this._hasNext}_readAttributeAtIndex(e){const t=this._header.offsets.attributes[this._featureIndex*this._header.fieldCount+e],r=this._reader;return r.move(t),S(r)}_parseGeometry(e){const t=2,r=3,s=e.getLength(),i=e.pos()+s,n=[],a=[];for(;e.pos()<i&&e.next();)switch(e.tag()){case t:{const t=e.getUInt32(),r=e.pos()+t;for(;e.pos()<r;)a.push(e.getUInt32());break}case r:{const t=e.getUInt32(),r=e.pos()+t;for(n.push(e.getSInt32()+this._tx),n.push(e.getSInt32()+this._ty),this.hasZ&&e.getSInt32(),this.hasM&&e.getSInt32();e.pos()<r;)n.push(e.getSInt32()),n.push(e.getSInt32()),this.hasZ&&e.getSInt32(),this.hasM&&e.getSInt32();break}default:e.skip()}return new o(a,n)}_parseGeometryForDisplay(e){const t=2,r=3,s=e.getLength(),i=e.pos()+s,n=[],a=[];let h=0,d=0,u=null,c=0;const l="esriGeometryPolygon"===this.geometryType;for(;e.pos()<i&&e.next();)switch(e.tag()){case t:{const t=e.getUInt32(),r=e.pos()+t;for(;e.pos()<r;){const t=e.getUInt32();n.push(t),h+=t}u=I(2*h).delta;break}case r:{e.getUInt32();const t=2+(this.hasZ?1:0)+(this.hasM?1:0);for(const r of n)if(d+t*r>u.length)for(let t=0;t<r;t++)e.getSInt32(),e.getSInt32(),this.hasZ&&e.getSInt32(),this.hasM&&e.getSInt32();else if(l&&g){const t=this.getAreaSimplificationThreshold(r,this._header.vertexCount);let s=2,i=1;const n=!1;let h=e.getSInt32(),o=e.getSInt32();u[d++]=h,u[d++]=o,this.hasZ&&e.getSInt32(),this.hasM&&e.getSInt32();let g=e.getSInt32(),l=e.getSInt32();for(this.hasZ&&e.getSInt32(),this.hasM&&e.getSInt32();s<r;){let r=e.getSInt32(),n=e.getSInt32();this.hasZ&&e.getSInt32(),this.hasM&&e.getSInt32();const a=h+g,_=o+l;F(h,o,a,_,a+r,_+n)>=t?(c+=-.5*(a-h)*(_+o),i>1&&G(u[d-2],u[d-1],g,l)?(u[d-2]+=g,u[d-1]+=l):(u[d++]=g,u[d++]=l,i++),h=a,o=_):(r+=g,n+=l),g=r,l=n,s++}i<3||n?d-=2*i:(c+=-.5*(h+g-h)*(o+l+o),G(u[d-2],u[d-1],g,l)?(u[d-2]+=g,u[d-1]+=l,a.push(i)):(u[d++]=g,u[d++]=l,a.push(++i)))}else{let t=0,s=e.getSInt32(),i=e.getSInt32();this.hasZ&&e.getSInt32(),this.hasM&&e.getSInt32(),u[d++]=s,u[d++]=i,t+=1;for(let n=1;n<r;n++){const r=e.getSInt32(),a=e.getSInt32(),h=s+r,o=i+a;c+=-.5*(h-s)*(o+i),this.hasZ&&e.getSInt32(),this.hasM&&e.getSInt32(),n>2&&G(u[d-2],u[d-1],r,a)?(u[d-2]+=r,u[d-1]+=a):(u[d++]=r,u[d++]=a,t+=1),s=h,i=o}a.push(t)}break}default:e.skip()}if(this._cache.area=c,!a.length)return null;if(this._tx||this._ty){let e=0;for(const t of a)u[2*e]+=this._tx,u[2*e+1]+=this._ty,e+=t}return new o(a,u)}}export{v as FeatureSetReaderPBF};
|
|
5
|
+
import e from"../../../../../core/Error.js";import t from"../../../../../core/Logger.js";import{isNone as r,isSome as s}from"../../../../../core/maybe.js";import i from"../../../../../core/pbf.js";import{convertToGeometry as n,unquantizeOptimizedGeometry as a}from"../../../../../layers/graphics/featureConversionUtils.js";import{OptimizedFeature as h}from"../../../../../layers/graphics/OptimizedFeature.js";import o from"../../../../../layers/graphics/OptimizedGeometry.js";import{FeatureSetReader as d}from"./FeatureSetReader.js";import{parseHeader as u}from"./FeatureSetReaderPBFHeader.js";const c=t.getLogger("esri.view.2d.layers.features.support.FeatureSetReaderPBF"),g=!0,l=268435455,_=128,f=128e3,y={small:{delta:new Int32Array(_),decoded:new Int32Array(_)},large:{delta:new Int32Array(f),decoded:new Int32Array(f)}};function I(e){return e<=y.small.delta.length?y.small:(e<=y.large.delta.length||(y.large.delta=new Int32Array(Math.round(1.25*e)),y.large.decoded=new Int32Array(Math.round(1.25*e))),y.large)}function p(e){return e.toLowerCase().trim()}function m(t){try{const e=2,r=new i(new Uint8Array(t),new DataView(t));for(;r.next();){if(r.tag()===e)return x(r.getMessage());r.skip()}}catch(r){const t=new e("query:parsing-pbf","Error while parsing FeatureSet PBF payload",{error:r});c.error(t)}return null}function x(e){const t=1;for(;e.next();){if(e.tag()===t)return e.getMessage();e.skip()}return null}function S(e){const t=1,r=2,s=3,i=4,n=5,a=6,h=7,o=8,d=9,u=e.getLength(),c=e.pos()+u;for(;e.pos()<c&&e.next();)switch(e.tag()){case t:return e.getString();case r:return e.getFloat();case s:return e.getDouble();case i:return e.getSInt32();case n:return e.getUInt32();case a:return e.getInt64();case h:return e.getUInt64();case o:return e.getSInt64();case d:return e.getBool();default:return e.skip(),null}return null}function F(e,t,r,s,i,n){return.5*Math.abs(e*s+r*n+i*t-e*n-r*t-i*s)}function G(e,t,r,s){return 0===e*s-r*t&&e*r+t*s>0}class v extends d{constructor(e,t,r,s){super(e,s),this._hasNext=!1,this._isPoints=!1,this._featureIndex=-1,this._featureOffset=0,this._cache={area:0,unquantGeometry:void 0,geometry:void 0,centroid:void 0,legacyFeature:void 0,optFeature:void 0},this._geometryType=s.geometryType,this._reader=t,this._header=r,this._hasNext=r.hasFeatures,this._isPoints="esriGeometryPoint"===s.geometryType}static fromBuffer(e,t,r=!1){const s=t.geometryType,i=m(e),n=u(i,"esriGeometryPoint"===s,r),a=d.createInstance();return new v(a,i,n,t)}get geometryType(){return this._geometryType}get size(){return this._header.featureCount}get hasZ(){return!1}get hasM(){return!1}get stride(){return 2+(this.hasZ?1:0)+(this.hasM?1:0)}get hasFeatures(){return this._header.hasFeatures}get hasNext(){return this._hasNext}get exceededTransferLimit(){return this._header.exceededTransferLimit}hasField(e){return this._header.hasField(e)||this._header.hasField(p(e))}getFieldNames(){return this._header.fields.map((e=>e.fieldName))}getSize(){return this.size}getQuantizationTransform(){return this._header.transform}getCursor(){return this.copy()}getIndex(){return this._featureIndex}setIndex(e){this._cache.area=0,this._cache.unquantGeometry=void 0,this._cache.geometry=void 0,this._cache.centroid=void 0,this._cache.legacyFeature=void 0,this._cache.optFeature=void 0,this._featureIndex=e}getAttributeHash(){let e="";return this._header.fields.forEach((({index:t})=>{e+=this._readAttributeAtIndex(t)+"."})),e}getObjectId(){return this._readAttributeAtIndex(this._header.objectIdFieldIndex)}getDisplayId(){return this._header.displayIds[this._featureIndex]}setDisplayId(e){this._header.displayIds[this._featureIndex]=e}getGroupId(){return this._header.groupIds[this._featureIndex]}setGroupId(e){this._header.groupIds[this._featureIndex]=e}readLegacyFeature(){if(void 0===this._cache.legacyFeature){var e;const t=this.readCentroid(),r={attributes:this.readAttributes(),geometry:this._isPoints?this.readLegacyPointGeometry():this.readLegacyGeometry(),centroid:null!=(e=t&&{x:t.coords[0],y:t.coords[1]})?e:null};return this._cache.legacyFeature=r,r}return this._cache.legacyFeature}readOptimizedFeature(){if(void 0===this._cache.optFeature){const e=new h(this.readGeometry(),this.readAttributes(),this.readCentroid());return e.objectId=this.getObjectId(),e.displayId=this.getDisplayId(),this._cache.optFeature=e,e}return this._cache.optFeature}getXHydrated(){const e=this._header.centroid[2*this._featureIndex],t=this.getQuantizationTransform();return r(t)?e:e*t.scale[0]+t.translate[0]}getYHydrated(){const e=this._header.centroid[2*this._featureIndex+1],t=this.getQuantizationTransform();return r(t)?e:t.translate[1]-e*t.scale[1]}getX(){return this._header.centroid[2*this._featureIndex]*this._sx+this._tx}getY(){return this._header.centroid[2*this._featureIndex+1]*this._sy+this._ty}readLegacyPointGeometry(){return{x:this.getX(),y:this.getY()}}readLegacyGeometry(e){const t=this.readGeometry(e);return n(t,this.geometryType,!1,!1)}readLegacyCentroid(){const e=this.readCentroid();if(!e)return null;const[t,r]=e.coords;return{x:t,y:r}}readGeometryArea(){return this._cache.area||this.readGeometry(!0),this._cache.area}readUnquantizedGeometry(e=!1){if(void 0===this._cache.unquantGeometry){const t=this.readGeometry(e);if(!t)return this._cache.unquantGeometry=null,null;const r=I(t.coords.length).decoded,s=t.clone(r),i=s.coords;let n=0;for(const e of s.lengths){for(let t=1;t<e;t++){const e=2*(n+t),r=2*(n+t-1);i[e]+=i[r],i[e+1]+=i[r+1]}n+=e}return this._cache.unquantGeometry=s,s}return this._cache.unquantGeometry}readHydratedGeometry(){if(this._isPoints){if(this._header.centroid[2*this._featureIndex]===l)return null;const e=this.getXHydrated(),t=this.getYHydrated();return new o([],[e,t])}const e=this.readGeometry();if(!e)return null;const t=e.clone(),r=this.getQuantizationTransform();return s(r)&&a(t,t,this.hasZ,this.hasM,r),t}readGeometry(e=!1){if(void 0===this._cache.geometry){let r=null;if(this._isPoints){if(this._header.centroid[2*this._featureIndex]===l)return null;const e=this.getX(),t=this.getY();r=new o([],[e,t])}else{const s=this._header.offsets.geometry[this._featureIndex],i=this._reader;if(0===s)return null;i.move(s);try{r=e?this._parseGeometryForDisplay(i):this._parseGeometry(i)}catch(t){return console.error("Failed to parse geometry!",t),null}}return this._cache.geometry=r,r}return this._cache.geometry}readCentroid(){if(void 0===this._cache.centroid){let e=null;const t=this._header.centroid[2*this._featureIndex]+this._tx,r=this._header.centroid[2*this._featureIndex+1]+this._ty;return t===l?(e=this._computeCentroid(),e&&(this._header.centroid[2*this._featureIndex]=e.coords[0]-this._tx,this._header.centroid[2*this._featureIndex+1]=e.coords[1]-this._ty)):e=new o([],[t,r]),this._cache.centroid=e,e}return this._cache.centroid}copy(){const e=this._reader.clone(),t=new v(this.instance,e,this._header,this.fullSchema());return this.copyInto(t),t}next(){for(this._cache.area=0,this._cache.unquantGeometry=void 0,this._cache.geometry=void 0,this._cache.centroid=void 0,this._cache.legacyFeature=void 0,this._cache.optFeature=void 0;++this._featureIndex<this.size&&!this._getExists(););return this._featureIndex<this.size}_readAttribute(e,t){const r=this._header.hasField(e)?e:p(e),s=this._header.getFieldIndex(r);if(null==s)return;const i=this._readAttributeAtIndex(s);if(!t)return i;if(null==i)return i;return this._header.isDateField(r)?new Date(i):i}_readAttributes(){const e={};return this._header.fields.forEach((({fieldName:t,index:r})=>{e[t]=this._readAttributeAtIndex(r)})),e}copyInto(e){super.copyInto(e),e._featureIndex=this._featureIndex,e._featureOffset=this._featureOffset,e._hasNext=this._hasNext}_readAttributeAtIndex(e){const t=this._header.offsets.attributes[this._featureIndex*this._header.fieldCount+e],r=this._reader;return r.move(t),S(r)}_parseGeometry(e){const t=2,r=3,s=e.getLength(),i=e.pos()+s,n=[],a=[];for(;e.pos()<i&&e.next();)switch(e.tag()){case t:{const t=e.getUInt32(),r=e.pos()+t;for(;e.pos()<r;)a.push(e.getUInt32());break}case r:{const t=e.getUInt32(),r=e.pos()+t;for(n.push(e.getSInt32()+this._tx),n.push(e.getSInt32()+this._ty),this.hasZ&&e.getSInt32(),this.hasM&&e.getSInt32();e.pos()<r;)n.push(e.getSInt32()),n.push(e.getSInt32()),this.hasZ&&e.getSInt32(),this.hasM&&e.getSInt32();break}default:e.skip()}return new o(a,n)}_parseGeometryForDisplay(e){const t=2,r=3,s=e.getLength(),i=e.pos()+s,n=[],a=[];let h=0,d=0,u=null,c=0;const l="esriGeometryPolygon"===this.geometryType;for(;e.pos()<i&&e.next();)switch(e.tag()){case t:{const t=e.getUInt32(),r=e.pos()+t;for(;e.pos()<r;){const t=e.getUInt32();n.push(t),h+=t}u=I(2*h).delta;break}case r:{e.getUInt32();const t=2+(this.hasZ?1:0)+(this.hasM?1:0);for(const r of n)if(d+t*r>u.length)for(let t=0;t<r;t++)e.getSInt32(),e.getSInt32(),this.hasZ&&e.getSInt32(),this.hasM&&e.getSInt32();else if(l&&g){const t=this.getAreaSimplificationThreshold(r,this._header.vertexCount);let s=2,i=1;const n=!1;let h=e.getSInt32(),o=e.getSInt32();u[d++]=h,u[d++]=o,this.hasZ&&e.getSInt32(),this.hasM&&e.getSInt32();let g=e.getSInt32(),l=e.getSInt32();for(this.hasZ&&e.getSInt32(),this.hasM&&e.getSInt32();s<r;){let r=e.getSInt32(),n=e.getSInt32();this.hasZ&&e.getSInt32(),this.hasM&&e.getSInt32();const a=h+g,_=o+l;F(h,o,a,_,a+r,_+n)>=t?(c+=-.5*(a-h)*(_+o),i>1&&G(u[d-2],u[d-1],g,l)?(u[d-2]+=g,u[d-1]+=l):(u[d++]=g,u[d++]=l,i++),h=a,o=_):(r+=g,n+=l),g=r,l=n,s++}i<3||n?d-=2*i:(c+=-.5*(h+g-h)*(o+l+o),G(u[d-2],u[d-1],g,l)?(u[d-2]+=g,u[d-1]+=l,a.push(i)):(u[d++]=g,u[d++]=l,a.push(++i)))}else{let t=0,s=e.getSInt32(),i=e.getSInt32();this.hasZ&&e.getSInt32(),this.hasM&&e.getSInt32(),u[d++]=s,u[d++]=i,t+=1;for(let n=1;n<r;n++){const r=e.getSInt32(),a=e.getSInt32(),h=s+r,o=i+a;c+=-.5*(h-s)*(o+i),this.hasZ&&e.getSInt32(),this.hasM&&e.getSInt32(),n>2&&G(u[d-2],u[d-1],r,a)?(u[d-2]+=r,u[d-1]+=a):(u[d++]=r,u[d++]=a,t+=1),s=h,i=o}a.push(t)}break}default:e.skip()}if(this._cache.area=c,!a.length)return null;if(this._tx||this._ty){let e=0;for(const t of a)u[2*e]+=this._tx,u[2*e+1]+=this._ty,e+=t}return new o(a,u)}}export{v as FeatureSetReaderPBF};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{_ as e}from"../../../../../chunks/tslib.es6.js";import t from"../../../../../core/has.js";import{isAbortError as i}from"../../../../../core/promiseUtils.js";import"../../../../../core/Logger.js";import"../../../../../core/accessorSupport/ensureType.js";import"../../../../../core/arrayUtils.js";import"../../../../../core/accessorSupport/set.js";import{subclass as s}from"../../../../../core/accessorSupport/decorators/subclass.js";import{create as r}from"../../../../../geometry/support/aaBoundingRect.js";import{FeatureTile as a}from"../../../engine/webgl/FeatureTile.js";import{simplifyVVRenderer as o}from"../support/rendererUtils.js";import l from"./BaseTileRenderer.js";import{convertVisualVariables as n}from"./support/visualVariablesUtils.js";import{WGLFeatureView as u}from"./support/WGLFeatureView.js";let p=class extends l{install(e){const t=()=>this.notifyChange("updating"),i=new u(this.tileInfoView,this.layerView,this.layer,t);this.featuresView=i,e.addChild(i)}uninstall(e){e.removeChild(this.featuresView),this.featuresView.destroy(),this.featuresView=null}fetchResource(e,t){const{url:s}=e,r=this.featuresView.stage;try{return r.resourceManager.fetchResource(s,{signal:t.signal})}catch(a){return i(a)?Promise.resolve({width:0,height:0}):Promise.reject(a)}}isUpdating(){var e;const i=super.isUpdating(),s=!this.featuresView||this.featuresView.isUpdating(),r=null==(e=this.featuresView)?void 0:e.hasEmptyAttributeView(),a=i||s||i&&r;return t("esri-2d-log-updating")&&console.log(`Updating SymbolTileRenderer ${a}\n -> updatingTiles ${i}\n -> hasFeaturesView ${!!this.featuresView}\n -> updatingFeaturesView ${s}`),a}hitTest(e){return this.featuresView.hitTest(e)}supportsRenderer(e){return null!=e
|
|
5
|
+
import{_ as e}from"../../../../../chunks/tslib.es6.js";import t from"../../../../../core/has.js";import{isAbortError as i}from"../../../../../core/promiseUtils.js";import"../../../../../core/Logger.js";import"../../../../../core/accessorSupport/ensureType.js";import"../../../../../core/arrayUtils.js";import"../../../../../core/accessorSupport/set.js";import{subclass as s}from"../../../../../core/accessorSupport/decorators/subclass.js";import{create as r}from"../../../../../geometry/support/aaBoundingRect.js";import{FeatureTile as a}from"../../../engine/webgl/FeatureTile.js";import{simplifyVVRenderer as o}from"../support/rendererUtils.js";import l from"./BaseTileRenderer.js";import{convertVisualVariables as n}from"./support/visualVariablesUtils.js";import{WGLFeatureView as u}from"./support/WGLFeatureView.js";let p=class extends l{install(e){const t=()=>this.notifyChange("updating"),i=new u(this.tileInfoView,this.layerView,this.layer,t);this.featuresView=i,e.addChild(i)}uninstall(e){e.removeChild(this.featuresView),this.featuresView.destroy(),this.featuresView=null}fetchResource(e,t){const{url:s}=e,r=this.featuresView.stage;try{return r.resourceManager.fetchResource(s,{signal:t.signal})}catch(a){return i(a)?Promise.resolve({width:0,height:0}):Promise.reject(a)}}isUpdating(){var e;const i=super.isUpdating(),s=!this.featuresView||this.featuresView.isUpdating(),r=null==(e=this.featuresView)?void 0:e.hasEmptyAttributeView(),a=i||s||i&&r;return t("esri-2d-log-updating")&&console.log(`Updating SymbolTileRenderer ${a}\n -> updatingTiles ${i}\n -> hasFeaturesView ${!!this.featuresView}\n -> updatingFeaturesView ${s}`),a}hitTest(e){return this.featuresView.hitTest(e)}supportsRenderer(e){return null!=e&&["simple","class-breaks","unique-value","dot-density","dictionary"].includes(e.type)}onConfigUpdate(e){let t=null;if("visualVariables"in e){const i=(o(e).visualVariables||[]).map((e=>{const t=e.clone();return"normalizationField"in e&&(t.normalizationField=null),e.valueExpression&&"$view.scale"!==e.valueExpression&&(t.valueExpression=null,t.field="nop"),t}));t=n(i)}this.featuresView.setRendererInfo(e,t,this.layerView.featureEffect)}onTileData(e){const t=this.tiles.get(e.tileKey);t&&e.data&&this.featuresView.onTileData(t,e.data),this.layerView.view.labelManager.requestUpdate()}onTileError(e){const t=this.tiles.get(e.tileKey);t&&this.featuresView.onTileError(t)}forceAttributeTextureUpload(){this.featuresView.attributeView.forceTextureUpload()}lockGPUUploads(){this.featuresView.attributeView.lockTextureUpload(),this.tiles.forEach((e=>e.lock()))}unlockGPUUploads(){this.featuresView.attributeView.unlockTextureUpload(),this.tiles.forEach((e=>e.unlock()))}async getMaterialItems(e){return this.featuresView.getMaterialItems(e)}invalidateLabels(){this.featuresView.hasLabels&&this.layerView.view.labelManager.requestUpdate()}createTile(e){const t=this.tileInfoView.getTileBounds(r(),e),i=()=>this.layerView.view.labelManager.requestUpdate();return new a(e,t[0],t[3],this.featuresView.attributeView,i)}disposeTile(e){this.featuresView.removeChild(e),e.destroy(),this.layerView.view.labelManager.requestUpdate()}};p=e([s("esri.views.2d.layers.features.tileRenderers.SymbolTileRenderer")],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.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{isDevEnvironment as t,adjustStaticAGOUrl as r}from"../../../../core/devEnvironmentUtils.js";import e from"../../../../core/Error.js";import{throwIfAborted as o}from"../../../../core/promiseUtils.js";import{urlToObject as n}from"../../../../core/urlUtils.js";import s from"../../../../portal/Portal.js";import{f as l}from"../../../../chunks/persistableUrlUtils.js";import{fetchStyle as m,Style2DUrlTemplate as a,requestJSON as i,makeCIMSymbolRef as c,symbolUrlFromStyleItem as u}from"../../../../symbols/support/styleUtils.js";async function y(t,r,n){if(!t.name)
|
|
5
|
+
import{isDevEnvironment as t,adjustStaticAGOUrl as r}from"../../../../core/devEnvironmentUtils.js";import e from"../../../../core/Error.js";import{throwIfAborted as o}from"../../../../core/promiseUtils.js";import{urlToObject as n}from"../../../../core/urlUtils.js";import s from"../../../../portal/Portal.js";import{f as l}from"../../../../chunks/persistableUrlUtils.js";import{fetchStyle as m,Style2DUrlTemplate as a,requestJSON as i,makeCIMSymbolRef as c,symbolUrlFromStyleItem as u}from"../../../../symbols/support/styleUtils.js";async function y(t,r,n){if(!t.name)throw new e("style-symbol-reference-name-missing","Missing name in style symbol reference");if(t.styleName&&"Esri2DPointSymbolsStyle"===t.styleName)return f(t,n);try{return p(await m(t,r,n),t.name,r,n)}catch(s){return o(s),null}}async function f(t,r){const e=a.replace(/\{SymbolName\}/gi,t.name);try{const t=await i(e,r);return c(t.data)}catch(n){return o(n),null}}async function p(m,a,y,f){const p=m.data,b={portal:y&&y.portal||s.getDefault(),url:n(m.baseUrl),origin:"portal-item"},d=p.items.find((t=>t.name===a));if(!d){throw new e("symbolstyleutils:symbol-name-not-found",`The symbol name '${a}' could not be found`,{symbolName:a})}let h=l(u(d,"cimRef"),b);t()&&(h=r(h));try{const t=await i(h,f);return c(t.data)}catch(j){return o(j),null}}export{y as fetchCIMSymbolReference};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
const s=s
|
|
5
|
+
const s=s=>s.includes("Brush");class e{constructor(){this._names=new Map}begin(e){this._names.has(e)||(this._names.set(e,!1),s(e)&&this.record("Esri.FirstDraw"),performance.mark(`Esri.${e}.Start`))}end(s){this._names.has(s)&&!this._names.get(s)&&(this._names.set(s,!0),performance.mark(`Esri.${s}.End`))}record(s){this._names.has(s)||(this._names.set(s,!0),performance.mark(`Esri.${s}`))}}export{e as Timeline};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{_ as t}from"../../../../chunks/tslib.es6.js";import"../../../../geometry.js";import e from"../../../../core/Accessor.js";import i from"../../../../core/Evented.js";import o from"../../../../core/Handles.js";import{handlesGroup as n,makeHandle as s}from"../../../../core/handleUtils.js";import r from"../../../../core/Logger.js";import{isSome as a,isNone as c,abortMaybe as l,removeMaybe as p,none as u}from"../../../../core/maybe.js";import{createTask as h,ignoreAbortErrors as d}from"../../../../core/promiseUtils.js";import{watch as m,initial as g,syncAndInitial as v,sync as _}from"../../../../core/reactiveUtils.js";import{property as y}from"../../../../core/accessorSupport/decorators/property.js";import"../../../../core/arrayUtils.js";import"../../../../core/has.js";import"../../../../core/accessorSupport/ensureType.js";import{subclass as C}from"../../../../core/accessorSupport/decorators/subclass.js";import{c as f,b,n as T,g as O,a as P,j as I,v as j}from"../../../../chunks/vec3.js";import{a as w,c as S}from"../../../../chunks/vec3f64.js";import{WatchUpdatingTracking as A}from"../../../../core/support/WatchUpdatingTracking.js";import{projectPoint as E,projectBoundingRect as L}from"../../../../geometry/projection.js";import{containsPointObject as R,intersectsSegment as V,empty as H}from"../../../../geometry/support/aaBoundingRect.js";import{fromPoints as D,create as x}from"../../../../geometry/support/ray.js";import{LineOfSightAnalysisResult as k}from"../LineOfSightAnalysisResult.js";import{LineOfSightComputation as N}from"./LineOfSightComputation.js";import{LineOfSightRayIntersector as U}from"./LineOfSightRayIntersector.js";import{logFailedGeometryProjectionError as z,applyProjectionAndElevationAlignment as F}from"../support/projectionUtils.js";import{IntersectorType as G}from"../../webgl-engine/lib/IntersectorInterfaces.js";import{toGraphic as M}from"../../webgl-engine/lib/intersectorUtilsConversions.js";import{ImmediateTask as B,TaskPriority as q}from"../../../support/Scheduler.js";import J from"../../../../geometry/Point.js";const W=r.getLogger("esri.views.3d.analysis.LineOfSight.LineOfSightController");let K=class extends(i.EventedMixin(e)){constructor(t){super(t),this.updateOnCameraChange=!0,this._updatingHandles=new A,this._frameTask=B,this._handles=new o,this._computationHandles=new o,this._externalObserverUpdate=!0}initialize(){var t;const e=null==(t=this.view.resourceController)?void 0:t.scheduler;this._frameTask=e?e.registerTask(q.LINE_OF_SIGHT_TOOL):B,this._intersector=new U({view:this.view}),this._handles.add([this._connectObserver(),this._connectComputations(),this._connectTargets()])}destroy(){this._handles.destroy(),this._computationHandles.destroy(),this._computations.removeAll(),this._updatingHandles.destroy()}get updating(){return this._frameTask.updating||this._updatingHandles.updating}get priority(){return this._frameTask.priority}set priority(t){this._frameTask.priority=t}get _computations(){return this.analysisViewData.computations}get _observerEngineLocation(){return this.analysisViewData.observerEngineLocation}set _observerEngineLocation(t){this.analysisViewData.observerEngineLocation=t}get _screenPixelSize(){return this.view.state.camera.computeScreenPixelSizeAt(this._observerEngineLocation)}getLineOfSightComputationDependencies(t){const{inputPoints:e}=t;return{inputPoints:e}}_computeResult(t){const e=t.computation,{inputPoints:i,computationResult:o}=e,{observerAdjusted:n,targetAdjusted:s}=i,{start:r,end:a}=o;f(r,n),f(a,s);this._canCompute(e)?this._computeIntersection(t):this._interpolateIntersection(t),e.notifyResultChanged(),this.emit("result-changed",{target:t.computation.target,result:e.result})}_adjustStartEndPositions(t){const e=this._screenPixelSize,i=this.view,{inputPoints:o}=t,{observer:n,observerSurfaceNormal:s,target:r,targetSurfaceNormal:c,observerAdjusted:l,targetAdjusted:p}=o,u=Y;a(s)?f(u,s):b(u,r,n);const h=e;T(u,u),O(u,u,Math.min(h,1)),P(l,n,u),a(c)?f(u,c):b(u,n,r);const d=i.state.camera.computeScreenPixelSizeAt(r);T(u,u),O(u,u,Math.min(d,1)),P(p,r,u)}_computeIntersection({computation:t,interpolationInfo:e}){const{view:i}=this,{sceneIntersectionHelper:o,renderCoordsHelper:n}=i;if(c(o))return;const s=this._intersector.intersector,{computationResult:r,inputPoints:l}=t,{observer:p,target:u}=l,{start:h,end:d}=r,m=D(h,d,Z);o.intersectToolIntersectorRay(m,s);const g=r.intersection,v=Y;let _=!0;if(s.results.min.getIntersectionPoint(g)){f(e.originalIntersection,g),f(e.originalObserver,h),f(e.originalTarget,d),n.fromRenderCoords(g,v,i.spatialReference);const t=1-I(d,u)/I(h,u);_=I(p,g)>=t*I(p,u)}const y=new J(v,i.spatialReference);{const{result:e,target:o}=t;a(e)?(e.target=o,e.intersectedGraphic=_?null:M(s.results.min,i),e.intersectedLocation=_?null:y,e.visible=_):t.result=new k({target:o,elevationAlignedTargetLocation:t.elevationAlignedTargetLocation,intersectedGraphic:_?null:M(s.results.min,i),intersectedLocation:_?null:y,visible:_})}r.isValid=l.isValid=!0,r.isTargetVisible=_}_interpolateIntersection({computation:t,interpolationInfo:e}){const{computationResult:i,inputPoints:o}=t,{start:n,end:s,intersection:r}=i,{originalIntersection:a,originalObserver:c,originalTarget:l}=e;if(f(r,a),o.isValid){const t=Y,e=I(c,a)/I(c,l);j(t,n,c),O(t,t,1-e),P(r,r,t),j(t,s,l),O(t,t,e),P(r,r,t),i.isValid=!0}else t.result=null,i.isValid=!1,i.isTargetVisible=!1}_canCompute(t){const e=this.analysisViewData.elevationAlignedObserver,i=this.view.frustum;if(c(e)||c(t.elevationAlignedTargetLocation)||c(i))return!1;const{observerAdjusted:o,targetAdjusted:n}=t.inputPoints,s=i.intersectsPoint(o),r=i.intersectsPoint(n);return s&&r}_onObserverPositionChange(t,e,i){if(this._externalObserverUpdate=i,c(t))return void(this.analysisViewData.elevationAlignedObserver=null);const o=this._applyProjectionAndElevationAlignment(t,e);if(c(o))return z(this.analysis,t.spatialReference,W),void(this.analysisViewData.elevationAlignedObserver=null);const n=S();this.analysisViewData.elevationAlignedObserver=o,this.view.renderCoordsHelper.toRenderCoords(this.analysisViewData.elevationAlignedObserver,n),this._observerEngineLocation=n,this.priority=q.LINE_OF_SIGHT_TOOL_INTERACTIVE}_applyProjectionAndElevationAlignment(t,e){const i=a(e)&&e.type!==G.OBJECT;return F(t,this.view.spatialReference,this.view.elevationProvider,i)}_onObserverRenderSpacePositionChangeForComputation(t,e,i){const{inputPoints:o}=t;if(f(o.observer,e),a(i)){const t=this._intersector.updateFromIntersectionResult(i);a(t)&&this.view.renderCoordsHelper.toRenderCoords(t,o.observer),o.observerSurfaceNormal=w(i.normal)}else o.observerSurfaceNormal=null;this._adjustStartEndPositions(t),t.notifyInputPointsChanged(),this.priority=q.LINE_OF_SIGHT_TOOL_INTERACTIVE}_onTargetPositionChange(t,e,i,o=!0){const n=t.inputPoints;if(o&&(n.isValid=!1),t.elevationAlignedTargetLocation=this._applyProjectionAndElevationAlignment(e,i),c(t.elevationAlignedTargetLocation))z(this.analysis,e.spatialReference,W);else{if(this.view.renderCoordsHelper.toRenderCoords(t.elevationAlignedTargetLocation,n.target),a(i)){const t=this._intersector.updateFromIntersectionResult(i);a(t)&&this.view.renderCoordsHelper.toRenderCoords(t,n.target),n.targetSurfaceNormal=w(i.normal)}else n.targetSurfaceNormal=null;this._adjustStartEndPositions(t)}t.notifyInputPointsChanged(),this.priority=q.LINE_OF_SIGHT_TOOL_INTERACTIVE}_connectComputationToTarget(t){return n([m((()=>t.target.position),(e=>{Q(e,t.target.intersection)||(t.target.intersection=null)}),g),m((()=>({computation:t,targetPosition:t.target.position,targetIntersection:t.target.intersection})),(({computation:t,targetPosition:e,targetIntersection:i})=>{a(e)&&this._onTargetPositionChange(t,e,i)}),v)])}_connectComputationToObserver(t){return m((()=>({computation:t,observer:this.analysisViewData.elevationAlignedObserver})),(({computation:t})=>{this._externalObserverUpdate&&(t.inputPoints.isValid=!1,t.notifyInputPointsChanged())}),v)}_connectComputationToRenderSpaceObserver(t){return m((()=>({computation:t,observer:this._observerEngineLocation,observerIntersection:a(this.analysis.observer)?this.analysis.observer.intersection:null})),(({computation:t,observer:e,observerIntersection:i})=>{this._onObserverRenderSpacePositionChangeForComputation(t,e,i)}),v)}_connectComputationToCamera(t){return m((()=>({camera:this.view.state.camera,isDirty:this._isCameraDirty})),(({isDirty:e})=>{!this.updateOnCameraChange||t.inputPoints.isValid&&!e||t.notifyInputPointsChanged()}),_)}_connectComputationToSlicePlane(t){return m((()=>this.view.slicePlane),(()=>t.notifyInputPointsChanged()))}_connectComputationToElevation(t){return this.view.elevationProvider.on("elevation-change",(e=>{const i=this.analysis.observer,o=t.target;let n=null,s=null,r=null,l=null;const p=a(i)&&a(i.position)?i.position.spatialReference:a(o.position)?o.position.spatialReference:e.spatialReference;a(i)&&a(i.position)&&(n=tt,s=i.intersection,E(i.position,n,p)),a(o.position)&&(r=et,l=o.intersection,E(o.position,r,p)),c(n)&&c(r)||(L(e.extent,e.spatialReference,$,p),a(n)&&R($,n)&&this._onObserverPositionChange(n,s,!1),a(r)&&R($,r)&&this._onTargetPositionChange(t,r,l,!1),a(n)&&a(r)&&V($,n,r)&&t.notifyInputPointsChanged())}))}_connectComputationToTask(t){let e=u;const i={computation:t,interpolationInfo:{originalIntersection:S(),originalObserver:S(),originalTarget:S()}};return n([m((()=>this.getLineOfSightComputationDependencies(t)),(()=>{e=l(e),e=h((async t=>{await d(this._frameTask.schedule((()=>this._computeResult(i)),t))}))}),v),s((()=>e=l(e)))])}_connectComputation(t){const e=this._computationHandles;e.has(t)||e.add([this._connectComputationToTarget(t),this._connectComputationToObserver(t),this._connectComputationToRenderSpaceObserver(t),this._connectComputationToCamera(t),this._connectComputationToSlicePlane(t),this._connectComputationToElevation(t),this._connectComputationToTask(t)],t)}_disconnectAnalysis(t){this._computationHandles.remove(t)}_onComputationCollectionChange(t){t.added.forEach((t=>this._connectComputation(t))),t.removed.forEach((t=>this._disconnectAnalysis(t)))}_onTargetsChange(){return this._computations.removeAll(),this.analysis.targets.forEach((t=>this._addTarget(t))),this._updatingHandles.addOnCollectionChange((()=>this.analysis.targets),(t=>this._onTargetCollectionChange(t)))}_onTargetCollectionChange(t){t.added.forEach((t=>this._addTarget(t))),t.removed.forEach((t=>this._removeTarget(t)))}_onCursorTargetChange(t,e){a(e)&&this._removeTarget(e),a(t)&&this._addTarget(t)}_addTarget(t){this._computations.some((e=>e.target===t))||this._computations.add(new N({target:t}))}_removeTarget(t){const e=this._computations.find((e=>e.target===t));this._computations.remove(e)}_connectObserver(){return n([m((()=>({observer:this.analysis.observer,observerPosition:a(this.analysis.observer)?this.analysis.observer.position:null,observerIntersection:a(this.analysis.observer)?this.analysis.observer.intersection:null})),(({observer:t,observerPosition:e,observerIntersection:i})=>{a(t)&&!Q(e,i)&&(t.intersection=null)}),g),m((()=>({observerPosition:a(this.analysis.observer)?this.analysis.observer.position:null,observerIntersection:a(this.analysis.observer)?this.analysis.observer.intersection:null})),(({observerPosition:t,observerIntersection:e})=>this._onObserverPositionChange(t,e,!0)),v)])}_connectComputations(){let t=null;return n([m((()=>this._computations),(()=>{p(t),t=this._updatingHandles.addOnCollectionChange((()=>this._computations),(t=>this._onComputationCollectionChange(t))),this._computations.forEach((t=>this._connectComputation(t)))}),v),s((()=>t=p(t)))])}_connectTargets(){let t=null;return n([m((()=>this.analysis.targets),(()=>{t=p(t),t=this._onTargetsChange()}),v),m((()=>this.analysisViewData.cursorTarget),((t,e)=>{this._onCursorTargetChange(t,e)})),s((()=>{t=p(t)}))])}get _isCameraDirty(){const t=this.analysisViewData.elevationAlignedObserver,{view:e}=this,{renderCoordsHelper:i}=e;if(c(t)||c(i))return!1;const o=Y;i.toRenderCoords(t,o);const n=e.state.camera.computeScreenPixelSizeAt(o);return Math.abs((n-this._screenPixelSize)/this._screenPixelSize)>X}};function Q(t,e){return c(e)||a(t)&&t.equals(e.point)}t([y({constructOnly:!0})],K.prototype,"analysis",void 0),t([y({constructOnly:!0})],K.prototype,"analysisViewData",void 0),t([y({constructOnly:!0})],K.prototype,"view",void 0),t([y()],K.prototype,"updating",null),t([y()],K.prototype,"priority",null),t([y()],K.prototype,"updateOnCameraChange",void 0),t([y()],K.prototype,"_computations",null),t([y()],K.prototype,"_observerEngineLocation",null),t([y()],K.prototype,"_screenPixelSize",null),t([y({readOnly:!0})],K.prototype,"_updatingHandles",void 0),t([y()],K.prototype,"_frameTask",void 0),t([y()],K.prototype,"_isCameraDirty",null),K=t([C("esri.views.3d.analysis.LineOfSight.LineOfSightController")],K);const X=.1,Y=S(),Z=x(),$=H(),tt=new J,et=new J;export{K as LineOfSightController};
|
|
5
|
+
import{_ as e}from"../../../../chunks/tslib.es6.js";import"../../../../geometry.js";import t from"../../../../core/Accessor.js";import i from"../../../../core/Evented.js";import o from"../../../../core/Handles.js";import{handlesGroup as n,makeHandle as s}from"../../../../core/handleUtils.js";import r from"../../../../core/Logger.js";import{isSome as a,isNone as l,abortMaybe as c,removeMaybe as p,unwrapOr as u,none as h}from"../../../../core/maybe.js";import{createTask as d,ignoreAbortErrors as g}from"../../../../core/promiseUtils.js";import{watch as v,initial as m,syncAndInitial as _,sync as f}from"../../../../core/reactiveUtils.js";import{property as b}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{c as C,b as T,n as O,g as I,a as P,j as S,v as w}from"../../../../chunks/vec3.js";import{c as j}from"../../../../chunks/vec3f64.js";import{WatchUpdatingTracking as E}from"../../../../core/support/WatchUpdatingTracking.js";import{tryProjectWithZConversion as R,projectPoint as A,projectBoundingRect as L}from"../../../../geometry/projection.js";import{containsPointObject as V,intersectsSegment as H,empty as D}from"../../../../geometry/support/aaBoundingRect.js";import{fromPoints as x,create as k}from"../../../../geometry/support/ray.js";import{zValueInAbsoluteHeightMode as z}from"../../../../support/elevationInfoUtils.js";import{LineOfSightAnalysisResult as N}from"../LineOfSightAnalysisResult.js";import{LineOfSightComputation as U}from"./LineOfSightComputation.js";import{LineOfSightRayIntersector as M}from"./LineOfSightRayIntersector.js";import{logFailedGeometryProjectionError as F}from"../support/projectionUtils.js";import{toGraphic as G}from"../../webgl-engine/lib/intersectorUtilsConversions.js";import{ImmediateTask as q,TaskPriority as B}from"../../../support/Scheduler.js";import W from"../../../../geometry/Point.js";const Z=r.getLogger("esri.views.3d.analysis.LineOfSight.LineOfSightController");let J=class extends(i.EventedMixin(t)){constructor(e){super(e),this.updateOnCameraChange=!0,this._effectiveObserverElevationMode="absolute-height",this._updatingHandles=new E,this._frameTask=q,this._handles=new o,this._computationHandles=new o,this._externalObserverUpdate=!0}initialize(){var e;const t=null==(e=this.view.resourceController)?void 0:e.scheduler;this._frameTask=t?t.registerTask(B.LINE_OF_SIGHT_TOOL):q,this._intersector=new M({view:this.view}),this._handles.add([this._connectObserver(),this._connectComputations(),this._connectTargets()])}destroy(){this._handles.destroy(),this._computationHandles.destroy(),this._computations.removeAll(),this._updatingHandles.destroy()}get updating(){return this._frameTask.updating||this._updatingHandles.updating}get priority(){return this._frameTask.priority}set priority(e){this._frameTask.priority=e}get _computations(){return this.analysisViewData.computations}get _elevationAlignedObserverPositionRenderSpace(){return this.analysisViewData.observerEngineLocation}set _elevationAlignedObserverPositionRenderSpace(e){this.analysisViewData.observerEngineLocation=e}get _screenPixelSize(){return this.view.state.camera.computeScreenPixelSizeAt(this._elevationAlignedObserverPositionRenderSpace)}getLineOfSightComputationDependencies(e){const{inputPoints:t}=e;return{inputPoints:t}}_computeResult(e){const t=e.computation,{inputPoints:i,computationResult:o}=t,{observerAdjusted:n,targetAdjusted:s}=i,{start:r,end:a}=o;C(r,n),C(a,s);this._canCompute(t)?this._computeIntersection(e):this._interpolateIntersection(e),t.notifyResultChanged(),this.emit("result-changed",{target:e.computation.target,result:t.result})}_adjustStartEndPositions(e){const t=this._screenPixelSize,i=this.view,{inputPoints:o}=e,{observer:n,observerSurfaceNormal:s,target:r,targetSurfaceNormal:l,observerAdjusted:c,targetAdjusted:p}=o,u=X;a(s)?C(u,s):T(u,r,n);const h=t;O(u,u),I(u,u,Math.min(h,1)),P(c,n,u),a(l)?C(u,l):T(u,n,r);const d=i.state.camera.computeScreenPixelSizeAt(r);O(u,u),I(u,u,Math.min(d,1)),P(p,r,u)}_computeIntersection({computation:e,interpolationInfo:t}){const{view:i}=this,{sceneIntersectionHelper:o,renderCoordsHelper:n}=i;if(l(o))return;const s=this._intersector.intersector,{computationResult:r,inputPoints:c}=e,{observer:p,target:u}=c,{start:h,end:d}=r,g=x(h,d,Y);o.intersectToolIntersectorRay(g,s);const v=r.intersection,m=X;let _=!0;if(s.results.min.getIntersectionPoint(v)){C(t.originalIntersection,v),C(t.originalObserver,h),C(t.originalTarget,d),n.fromRenderCoords(v,m,i.spatialReference);const e=1-S(d,u)/S(h,u);_=S(p,v)>=e*S(p,u)}const f=new W(m,i.spatialReference);{const{result:t,target:o}=e;a(t)?(t.target=o,t.intersectedGraphic=_?null:G(s.results.min,i),t.intersectedLocation=_?null:f,t.visible=_):e.result=new N({target:o,elevationAlignedTargetLocation:e.elevationAlignedTargetLocation,intersectedGraphic:_?null:G(s.results.min,i),intersectedLocation:_?null:f,visible:_})}r.isValid=c.isValid=!0,r.isTargetVisible=_}_interpolateIntersection({computation:e,interpolationInfo:t}){const{computationResult:i,inputPoints:o}=e,{start:n,end:s,intersection:r}=i,{originalIntersection:a,originalObserver:l,originalTarget:c}=t;if(C(r,a),o.isValid){const e=X,t=S(l,a)/S(l,c);w(e,n,l),I(e,e,1-t),P(r,r,e),w(e,s,c),I(e,e,t),P(r,r,e),i.isValid=!0}else e.result=null,i.isValid=!1,i.isTargetVisible=!1}_canCompute(e){const t=this.analysisViewData.elevationAlignedObserver,i=this.view.frustum;if(l(t)||l(e.elevationAlignedTargetLocation)||l(i))return!1;const{observerAdjusted:o,targetAdjusted:n}=e.inputPoints,s=i.intersectsPoint(o),r=i.intersectsPoint(n);return s&&r}_onObserverPositionChange(e,t,i,o){if(this._externalObserverUpdate=o,l(e))return void(this.analysisViewData.elevationAlignedObserver=null);const n=R(e,this.view.spatialReference);if(l(n))return F(this.analysis,e.spatialReference,Z),void(this.analysisViewData.elevationAlignedObserver=null);const s=this._getEffectiveElevationInfo(n,t);n.z=z(n.x,n.y,n.z,this.view.spatialReference,this.view,s),this._effectiveObserverElevationMode=s.mode,this.analysisViewData.elevationAlignedObserver=n;const r=j();this.view.renderCoordsHelper.toRenderCoords(n,r),this._elevationAlignedObserverPositionRenderSpace=r,this.priority=B.LINE_OF_SIGHT_TOOL_INTERACTIVE}_onObserverRenderSpacePositionChangeForComputation(e,t,i,o){const{inputPoints:n}=e;switch(C(n.observer,t),i){case"on-the-ground":case"relative-to-ground":n.observerSurfaceNormal=this._intersector.adjustFromGroundIntersection(t,n.observer);break;case"relative-to-scene":case"absolute-height":n.observerSurfaceNormal=null}this._adjustStartEndPositions(e),e.notifyInputPointsChanged(),this.priority=B.LINE_OF_SIGHT_TOOL_INTERACTIVE}_onTargetPositionChange(e,t,i,o,n=!0){const s=e.inputPoints;n&&(s.isValid=!1);const r=R(t,this.view.spatialReference);if(l(r))return F(this.analysis,t.spatialReference,Z),e.elevationAlignedTargetLocation=null,void e.notifyInputPointsChanged();const a=this._getEffectiveElevationInfo(r,i);switch(r.z=z(r.x,r.y,r.z,this.view.spatialReference,this.view,a),e.elevationAlignedTargetLocation=r,this.view.renderCoordsHelper.toRenderCoords(e.elevationAlignedTargetLocation,s.target),a.mode){case"on-the-ground":case"relative-to-ground":s.targetSurfaceNormal=this._intersector.adjustFromGroundIntersection(s.target,s.targetAdjusted);break;case"relative-to-scene":case"absolute-height":s.targetSurfaceNormal=null}this._adjustStartEndPositions(e),e.notifyInputPointsChanged(),this.priority=B.LINE_OF_SIGHT_TOOL_INTERACTIVE}_connectComputationToTarget(e){return n([v((()=>e.target.position),(t=>{K(t,e.target.intersection)||(e.target.intersection=null)}),m),v((()=>({computation:e,targetPosition:e.target.position,targetElevationInfo:e.target.elevationInfo,targetIntersection:e.target.intersection})),(({computation:e,targetPosition:t,targetElevationInfo:i,targetIntersection:o})=>{a(t)&&this._onTargetPositionChange(e,t,i,o)}),_)])}_connectComputationToObserver(e){return v((()=>({computation:e,observer:this.analysisViewData.elevationAlignedObserver})),(({computation:e})=>{this._externalObserverUpdate&&(e.inputPoints.isValid=!1,e.notifyInputPointsChanged())}),_)}_connectComputationToRenderSpaceObserver(e){return v((()=>({computation:e,observer:this._elevationAlignedObserverPositionRenderSpace,observerElevationMode:this._effectiveObserverElevationMode,observerIntersection:a(this.analysis.observer)?this.analysis.observer.intersection:null})),(({computation:e,observer:t,observerElevationMode:i,observerIntersection:o})=>{this._onObserverRenderSpacePositionChangeForComputation(e,t,i,o)}),_)}_connectComputationToCamera(e){return v((()=>({camera:this.view.state.camera,isDirty:this._isCameraDirty})),(({isDirty:t})=>{!this.updateOnCameraChange||e.inputPoints.isValid&&!t||e.notifyInputPointsChanged()}),f)}_connectComputationToSlicePlane(e){return v((()=>this.view.slicePlane),(()=>e.notifyInputPointsChanged()))}_connectComputationToElevation(e){return this.view.elevationProvider.on("elevation-change",(t=>{const i=this.analysis.observer,o=e.target;let n=null,s=null,r=null,c=null,p=null,u=null;const h=a(i)&&a(i.position)?i.position.spatialReference:a(o.position)?o.position.spatialReference:t.spatialReference;a(i)&&a(i.position)&&(n=ee,s=i.elevationInfo,r=i.intersection,A(i.position,n,h)),a(o.position)&&(c=te,p=o.elevationInfo,u=o.intersection,A(o.position,c,h)),l(n)&&l(c)||(L(t.extent,t.spatialReference,$,h),a(n)&&V($,n)&&this._onObserverPositionChange(n,s,r,!1),a(c)&&V($,c)&&this._onTargetPositionChange(e,c,p,u,!1),a(n)&&a(c)&&H($,n,c)&&e.notifyInputPointsChanged())}))}_connectComputationToTask(e){let t=h;const i={computation:e,interpolationInfo:{originalIntersection:j(),originalObserver:j(),originalTarget:j()}};return n([v((()=>this.getLineOfSightComputationDependencies(e)),(()=>{t=c(t),t=d((async e=>{await g(this._frameTask.schedule((()=>this._computeResult(i)),e))}))}),_),s((()=>t=c(t)))])}_connectComputation(e){const t=this._computationHandles;t.has(e)||t.add([this._connectComputationToTarget(e),this._connectComputationToObserver(e),this._connectComputationToRenderSpaceObserver(e),this._connectComputationToCamera(e),this._connectComputationToSlicePlane(e),this._connectComputationToElevation(e),this._connectComputationToTask(e)],e)}_disconnectAnalysis(e){this._computationHandles.remove(e)}_onComputationCollectionChange(e){e.added.forEach((e=>this._connectComputation(e))),e.removed.forEach((e=>this._disconnectAnalysis(e)))}_onTargetsChange(){return this._computations.removeAll(),this.analysis.targets.forEach((e=>this._addTarget(e))),this._updatingHandles.addOnCollectionChange((()=>this.analysis.targets),(e=>this._onTargetCollectionChange(e)))}_onTargetCollectionChange(e){e.added.forEach((e=>this._addTarget(e))),e.removed.forEach((e=>this._removeTarget(e)))}_onCursorTargetChange(e,t){a(t)&&this._removeTarget(t),a(e)&&this._addTarget(e)}_addTarget(e){this._computations.some((t=>t.target===e))||this._computations.add(new U({target:e}))}_removeTarget(e){const t=this._computations.find((t=>t.target===e));this._computations.remove(t)}_connectObserver(){return n([v((()=>({observer:this.analysis.observer,observerPosition:a(this.analysis.observer)?this.analysis.observer.position:null,observerIntersection:a(this.analysis.observer)?this.analysis.observer.intersection:null})),(({observer:e,observerPosition:t,observerIntersection:i})=>{a(e)&&!K(t,i)&&(e.intersection=null)}),m),v((()=>({observerPosition:a(this.analysis.observer)?this.analysis.observer.position:null,observerElevationInfo:a(this.analysis.observer)?this.analysis.observer.elevationInfo:null,observerIntersection:a(this.analysis.observer)?this.analysis.observer.intersection:null})),(({observerPosition:e,observerElevationInfo:t,observerIntersection:i})=>this._onObserverPositionChange(e,t,i,!0)),_)])}_connectComputations(){let e=null;return n([v((()=>this._computations),(()=>{p(e),e=this._updatingHandles.addOnCollectionChange((()=>this._computations),(e=>this._onComputationCollectionChange(e))),this._computations.forEach((e=>this._connectComputation(e)))}),_),s((()=>e=p(e)))])}_connectTargets(){let e=null;return n([v((()=>this.analysis.targets),(()=>{e=p(e),e=this._onTargetsChange()}),_),v((()=>this.analysisViewData.cursorTarget),((e,t)=>{this._onCursorTargetChange(e,t)})),s((()=>{e=p(e)}))])}get _isCameraDirty(){const e=this.analysisViewData.elevationAlignedObserver,{view:t}=this,{renderCoordsHelper:i}=t;if(l(e)||l(i))return!1;const o=X;i.toRenderCoords(e,o);const n=t.state.camera.computeScreenPixelSizeAt(o);return Math.abs((n-this._screenPixelSize)/this._screenPixelSize)>Q}_getEffectiveElevationInfo(e,t){return e.hasZ?u(t,{mode:"absolute-height",offset:0}):{mode:"on-the-ground",offset:0}}};function K(e,t){return l(t)||a(e)&&e.equals(t.point)}e([b({constructOnly:!0})],J.prototype,"analysis",void 0),e([b({constructOnly:!0})],J.prototype,"analysisViewData",void 0),e([b({constructOnly:!0})],J.prototype,"view",void 0),e([b()],J.prototype,"updating",null),e([b()],J.prototype,"priority",null),e([b()],J.prototype,"updateOnCameraChange",void 0),e([b()],J.prototype,"_computations",null),e([b()],J.prototype,"_elevationAlignedObserverPositionRenderSpace",null),e([b()],J.prototype,"_effectiveObserverElevationMode",void 0),e([b()],J.prototype,"_screenPixelSize",null),e([b({readOnly:!0})],J.prototype,"_updatingHandles",void 0),e([b()],J.prototype,"_frameTask",void 0),e([b()],J.prototype,"_isCameraDirty",null),J=e([y("esri.views.3d.analysis.LineOfSight.LineOfSightController")],J);const Q=.1,X=j(),Y=k(),$=D(),ee=new W,te=new W;export{J as LineOfSightController};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{_ as r}from"../../../../chunks/tslib.es6.js";import o from"../../../../core/Accessor.js";import{equals as t}from"../../../../core/arrayUtils.js";import{clone as s}from"../../../../core/lang.js";import{equalsMaybe as
|
|
5
|
+
import{_ as r}from"../../../../chunks/tslib.es6.js";import o from"../../../../core/Accessor.js";import{equals as t}from"../../../../core/arrayUtils.js";import{clone as s}from"../../../../core/lang.js";import{equalsMaybe as i}from"../../../../core/maybe.js";import{property as e}from"../../../../core/accessorSupport/decorators/property.js";import"../../../../core/accessorSupport/ensureType.js";import{subclass as p}from"../../../../core/accessorSupport/decorators/subclass.js";import{equals as c}from"../../../../geometry/support/ray.js";var a;let n=a=class extends o{constructor(r){super(r)}clone(){return new a({type:this.type,id:s(this.id),point:s(this.point),normal:s(this.normal),ray:s(this.ray),graphic:this.graphic})}equals(r){return this.type===r.type&&this.id===r.id&&i(this.point,r.point)&&t(this.normal,r.normal)&&c(this.ray,r.ray)&&this.graphic===r.graphic}};r([e()],n.prototype,"type",void 0),r([e({constructOnly:!0})],n.prototype,"id",void 0),r([e({constructOnly:!0})],n.prototype,"point",void 0),r([e({constructOnly:!0})],n.prototype,"normal",void 0),r([e({constructOnly:!0})],n.prototype,"graphic",void 0),r([e({constructOnly:!0})],n.prototype,"ray",void 0),n=a=r([p("esri.views.3d.analysis.LineOfSight.LineOfSightIntersectionResult")],n);export{n as LineOfSightIntersectionResult};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{_ as e}from"../../../../chunks/tslib.es6.js";import t from"../../../../core/Accessor.js";import{isNone as r,isSome as s}from"../../../../core/maybe.js";import{screenPointObjectToArray as o}from"../../../../core/screenUtils.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 n}from"../../../../core/accessorSupport/decorators/subclass.js";import{e as c,g as a,n as p,a as m}from"../../../../chunks/vec3.js";import{d as
|
|
5
|
+
import{_ as e}from"../../../../chunks/tslib.es6.js";import t from"../../../../core/Accessor.js";import{isNone as r,isSome as s}from"../../../../core/maybe.js";import{screenPointObjectToArray as o}from"../../../../core/screenUtils.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 n}from"../../../../core/accessorSupport/decorators/subclass.js";import{e as c,g as a,n as p,a as l,c as m}from"../../../../chunks/vec3.js";import{d,a as u,c as h}from"../../../../chunks/vec3f64.js";import{create as y,copy as f,fromPoints as g}from"../../../../geometry/support/ray.js";import{sv2d as I}from"../../../../geometry/support/vectorStacks.js";import{getObjectId as w}from"../../../../layers/graphics/dehydratedFeatures.js";import{LineOfSightIntersectionResult as v}from"./LineOfSightIntersectionResult.js";import{isI3sIntersectorResult as j}from"../../layers/i3s/Intersector.js";import{fromScreen as R}from"../../support/geometryUtils/ray.js";import{isTerrainIntersectorResult as b}from"../../terrain/Intersector.js";import{tilesAreRelated as C}from"../../terrain/tileUtils.js";import{newIntersector as T}from"../../webgl-engine/lib/Intersector.js";import{StoreResults as U,IntersectorType as H}from"../../webgl-engine/lib/IntersectorInterfaces.js";import{toGraphic as S}from"../../webgl-engine/lib/intersectorUtilsConversions.js";let A=class extends t{constructor(e){super(e)}initialize(){this.intersector=T(this.view.state.viewingMode),this.intersector.options.hud=!1,this.intersector.options.store=U.MIN}getScreenPointIntersection(e){const t=o(e,I.get()),r=R(this.view.state.camera,t,F);return this._getRayIntersection(r)}_getRayIntersection(e){if(r(e)||r(this.view.sceneIntersectionHelper))return null;this.view.sceneIntersectionHelper.intersectToolIntersectorRay(e,this.intersector);const t=this.intersector.results.min;if(!t.getIntersectionPoint(_))return null;const o=this.view.renderCoordsHelper.fromRenderCoords(_,this.view.spatialReference),i=d(t.normal),n=c(i,e.direction)>0?-1:1;if(a(i,i,n),j(t))return new v({type:H.OBJECT,id:`${t.target.layerUid}/${t.target.nodeIndex}/${t.target.componentIndex}`,point:o,normal:i,ray:f(e),graphic:null});if(b(t))return new v({type:H.TERRAIN,id:t.target.lij.slice(),point:o,normal:i,ray:f(e),graphic:null});const p=S(t,this.view);if(s(p)){const t=p.layer,r=p.sourceLayer;let s;if(r)if("scene"===r.type)s=w(p,r.objectIdField);else s=p.uid;else s=p.uid;return new v({type:H.OBJECT,id:`${t.uid}/${s}`,point:o,normal:i,ray:f(e),graphic:p})}return null}_canUpdateFromIntersectionResult(e,t){if(r(e)||!t||e.type!==t.type)return!1;switch(e.type){case H.TERRAIN:{const r=e.id,s=t.id;return r[0]===s[0]&&r[1]===s[1]&&r[2]===s[2]||C(r,s)}case H.OBJECT:case H.I3S:return e.id===t.id}}updateFromIntersectionResult(e){let t;if(e.type===H.TERRAIN&&s(e.point)){const r=_,s=x,o=E;this.view.renderCoordsHelper.toRenderCoords(e.point,s),this.view.renderCoordsHelper.worldUpAtPosition(s,o);const i=this.view.basemapTerrain.elevationBounds,n=this.view.renderCoordsHelper.getAltitude(s),c=i?Math.abs(i.max-i.min)/Math.abs(n):100,m=n>0?1:-1;p(o,o),a(o,o,m*c),l(r,s,o),g(r,s,F),t=this._getRayIntersection(F)}else t=this._getRayIntersection(e.ray);return this._canUpdateFromIntersectionResult(t,e)?t.point:null}adjustFromGroundIntersection(e,t){const r=_,o=x,i=E;m(o,e),this.view.renderCoordsHelper.worldUpAtPosition(o,i);const n=this.view.basemapTerrain.elevationBounds,c=this.view.renderCoordsHelper.getAltitude(o),d=n?Math.abs(n.max-n.min):100,h=c>0?1:-1;p(i,i),a(i,i,h*d),l(r,o,i),g(r,o,F);const y=this._getRayIntersection(F);return s(y)&&s(y.point)?(this.view.renderCoordsHelper.toRenderCoords(y.point,t),u(y.normal)):(m(t,e),null)}};e([i()],A.prototype,"view",void 0),e([i()],A.prototype,"intersector",void 0),A=e([n("esri.views.3d.analysis.LineOfSight.LineOfSightRayIntersector")],A);const _=h(),x=h(),E=h(),F=y();export{A as LineOfSightRayIntersector};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{_ as e}from"../../../../chunks/tslib.es6.js";import i from"../../../../analysis/SlicePlane.js";import t from"../../../../core/Accessor.js";import a from"../../../../core/Handles.js";import s from"../../../../core/Logger.js";import{isNone as l,isSome as n}from"../../../../core/maybe.js";import{watch as r,whenOnce as o}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 h}from"../../../../core/accessorSupport/decorators/subclass.js";import{c as d}from"../../../../chunks/boundedPlane.js";import
|
|
5
|
+
import{_ as e}from"../../../../chunks/tslib.es6.js";import i from"../../../../analysis/SlicePlane.js";import t from"../../../../core/Accessor.js";import a from"../../../../core/Handles.js";import s from"../../../../core/Logger.js";import{isNone as l,isSome as n}from"../../../../core/maybe.js";import{watch as r,whenOnce as o}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 h}from"../../../../core/accessorSupport/decorators/subclass.js";import{c as d}from"../../../../chunks/boundedPlane.js";import u from"../../../../layers/Layer.js";import y from"../../../../layers/buildingSublayers/BuildingComponentSublayer.js";import{logFailedGeometryProjectionError as p}from"../support/projectionUtils.js";import{isAlwaysDrapedLayer as w,isIBuildingSceneLayerView3D as v,projectAndElevationAlignShape as f,projectedShapeToPlane as m,planeToShape as _}from"../../interactive/analysisTools/slice/sliceToolUtils.js";const V=s.getLogger("esri.views.3d.analysis.Slice.SliceController");let g=class extends t{constructor(e){super(e),this._handles=new a,this._internalChange=!1,this._currentSlicePlane=null,this.state="ready"}get ready(){return"ready"===this.state}initialize(){this._handles.add(this.analysis.excludedLayers.on("before-add",(e=>{const i=e.item;null!=i&&(i instanceof u||i instanceof y)?i instanceof u&&w(i)?(V.error("excludedLayers",`Layer '${i.title}, id:${i.id}' of type '${i.type}' can not be individually excluded from slicing. Use 'excludeGroundSurface' instead.`),e.preventDefault()):this.analysis.excludedLayers.includes(i)&&e.preventDefault():(V.error("excludedLayers","Invalid layer type, layer must derive from Layer or BuildingComponentSublayer"),e.preventDefault())}))),C(this.view,this),this._handles.add([r((()=>this.analysisViewData.plane),(()=>{this._internalChange||this._updateSlicePlaneFromBoundedPlane(),this._updateLayerViews()}),{sync:!0}),r((()=>this.analysis.excludeGroundSurface),(()=>this._updateLayerViews()),{sync:!0}),this.analysis.excludedLayers.on("change",(()=>this._updateLayerViews())),r((()=>[this.analysisViewData.active,this.analysisViewData.visible]),(()=>{this._updateActiveController(),this._updateViewSlicePlane()}),{sync:!0}),r((()=>this._allLayerAndSubLayerViews),(()=>this._updateLayerViews()))]),this._handles.add([r((()=>this.analysis.shape),(()=>{this._internalChange||(this._updateBoundedPlaneFromSlicePlane(),this._updateViewSlicePlane())}),{sync:!0})],"analysis"),this._set("state","ready"),this._updateActiveController(),this._updateBoundedPlaneFromSlicePlane(),this._updateViewSlicePlane()}destroy(){"destroyed"!==this.state&&(this.analysisViewData.active&&(this.analysisViewData.active=!1,this.view.slicePlane=null),D(this.view,this),this._handles.destroy(),this.set("view",null),this._set("state","destroyed"))}async whenReady(){return await o((()=>this.ready)),this}get _allLayerAndSubLayerViews(){const e=this.view.allLayerViews.items;return e.concat(e.filter(v).flatMap((({sublayerViews:e})=>e.items)))}_updateBoundedPlaneFromSlicePlane(){const e=this.analysis.shape,i=this._currentSlicePlane;if(l(i)&&l(e)||n(i)&&n(e)&&e.equals(i))return;let t=null,a=null;if(n(e)&&n(e.position)){const i=e.position.spatialReference,s=f(e,this.view);l(s)&&p(this.analysis,i,V),t=m(s,this.view,{tiltEnabled:this.analysis.tiltEnabled},d()),n(t)&&(a={heading:e.heading,tilt:e.tilt,position:e.position,width:e.width,height:e.height})}this._currentSlicePlane=a,this._internalChange=!0,this.analysisViewData.plane=t,this._internalChange=!1}_updateSlicePlaneFromBoundedPlane(){const e=this.analysisViewData.plane,t=_(e,this.view,this.view.spatialReference,new i);let a=null;n(t)&&(a={heading:t.heading,tilt:t.tilt,position:t.position,width:t.width,height:t.height}),this._currentSlicePlane=a,this._internalChange=!0,this.analysis.shape=t,this._internalChange=!1,this._updateViewSlicePlane()}_updateActiveController(){if(b)return;const e=L(this.view);if(this.analysisViewData.active)n(e.activeController)&&e.activeController!==this?(b=!0,e.activeController.analysisViewData.active=!1,b=!1):n(e.activeController)&&e.activeController,this._updateLayerViews(),e.activeController=this;else{if(n(e.activeController)&&e.activeController!==this)return;n(e.activeController)&&e.activeController===this&&(e.activeController=null,this._updateLayerViews())}}_updateViewSlicePlane(){"ready"===this.state&&P(this.view)}_updateLayerViews(){const e=n(this.analysisViewData.plane)&&this.analysisViewData.visible&&this.analysisViewData.active,i=[],t=e=>{"layers"in e?e.layers.forEach(t):i.push(e)};this.analysis.excludedLayers.forEach(t),this.view.allLayerViews.forEach((t=>{t.destroyed||("slicePlaneEnabled"in t&&(t.slicePlaneEnabled=e&&!i.includes(t.layer)),"sublayerViews"in t&&t.sublayerViews.forEach((t=>{t.slicePlaneEnabled=e&&!i.includes(t.sublayer)})))})),null!=this.view.basemapTerrain&&(this.view.basemapTerrain.slicePlaneEnabled=e&&!this.analysis.excludeGroundSurface)}};e([c({readOnly:!0})],g.prototype,"state",void 0),e([c()],g.prototype,"view",void 0),e([c()],g.prototype,"analysis",void 0),e([c()],g.prototype,"analysisViewData",void 0),e([c()],g.prototype,"ready",null),e([c()],g.prototype,"_allLayerAndSubLayerViews",null),g=e([h("esri.views.3d.analysis.Slice.SliceController")],g);const S=new Map;let b=!1;function P(e){const i=L(e).activeController;n(i)&&n(i.analysisViewData.plane)&&i.analysisViewData.visible?e.slicePlane=i.analysisViewData.plane:e.slicePlane=null}function C(e,i){S.has(e)||S.set(e,{all:[],activeController:null}),S.get(e).all.push(i)}function L(e){return S.get(e)}function D(e,i){if(!S.has(e))throw new Error("view expected in global slice register");const t=S.get(e),a=t.all.lastIndexOf(i);if(-1===a)throw new Error("controller expected in global slice register");t.all.splice(a,1),0===t.all.length&&S.delete(e)}export{g as SliceController};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import e from"../../../core/Logger.js";import{disposeMaybe as t,abortMaybe as r}from"../../../core/maybe.js";import{createResolver as o,isAbortError as i}from"../../../core/promiseUtils.js";import{c as s}from"../../../chunks/mat4.js";import{c as n}from"../../../chunks/mat4f64.js";import{requestImage as a}from"../../../support/requestImageUtils.js";import{SimpleAtmosphereTechnique as m}from"./SimpleAtmosphereTechnique.js";import{SimpleAtmosphereTechniqueConfiguration as l,SimpleAtmosphereGeometry as h}from"./SimpleAtmosphereTechniqueConfiguration.js";import c from"./resources/SimpleAtmosphereTexture.js";import{glLayout as u}from"../support/buffer/glUtil.js";import{newLayout as p}from"../support/buffer/InterleavedLayout.js";import{
|
|
5
|
+
import e from"../../../core/Logger.js";import{disposeMaybe as t,abortMaybe as r}from"../../../core/maybe.js";import{createResolver as o,isAbortError as i}from"../../../core/promiseUtils.js";import{c as s}from"../../../chunks/mat4.js";import{c as n}from"../../../chunks/mat4f64.js";import{requestImage as a}from"../../../support/requestImageUtils.js";import{SimpleAtmosphereTechnique as m}from"./SimpleAtmosphereTechnique.js";import{SimpleAtmosphereTechniqueConfiguration as l,SimpleAtmosphereGeometry as h}from"./SimpleAtmosphereTechniqueConfiguration.js";import c from"./resources/SimpleAtmosphereTexture.js";import{glLayout as u}from"../support/buffer/glUtil.js";import{newLayout as p}from"../support/buffer/InterleavedLayout.js";import{NoParameters as f}from"../webgl-engine/core/shaderModules/interfaces.js";import{Default3D as g}from"../webgl-engine/lib/DefaultVertexAttributeLocations.js";import d from"../webgl-engine/lib/GeometryUtil.js";import{VertexAttribute as _}from"../webgl-engine/lib/VertexAttribute.js";import{BufferObject as b}from"../../webgl/BufferObject.js";import{PixelFormat as y,PixelType as j,TextureWrapMode as x,TextureSamplingMode as v,PrimitiveType as w,Usage as A}from"../../webgl/enums.js";import{Texture as C}from"../../webgl/Texture.js";import{vertexCount as T}from"../../webgl/Util.js";import{VertexArrayObject as q}from"../../webgl/VertexArrayObject.js";const R=e.getLogger("esri.views.3d.environment.PanoramicAtmosphere");class I{constructor(){this.type="panoramic",this._techniqueConfig=new l,this._readyResolver=o(),this._readyController=new AbortController}destroy(){this._readyResolver.reject(),this._texture=t(this._texture),this._vao=t(this._vao),this._readyController=r(this._readyController)}when(){return this._readyResolver.promise}initializeRenderContext(e){this._techniqueConfig.geometry=h.Cylinder,this._technique=e.shaderTechniqueRepository.acquire(m,this._techniqueConfig);const t=e.renderContext.rctx;this._vao=this._createVertexArrayObject(t),this._vaoCount=T(this._vao,"geometry"),a(c,{signal:this._readyController.signal}).then((r=>{this._texture=new C(t,{pixelFormat:y.RGBA,dataType:j.UNSIGNED_BYTE,wrapMode:x.CLAMP_TO_EDGE,samplingMode:v.LINEAR,flipped:!0},r),e.requestRender(),this._readyController=null,this._readyResolver.resolve()})).catch((e=>{i(e)||R.error("Unable to initialize atmosphere: image request failed",e),this._readyResolver.reject()}))}get canRender(){return null!=this._texture}render(e){const t=e.rctx,r=t.bindTechnique(this._technique,P,e.bindParameters);r.bindTexture("tex",this._texture),O(S,e.bindParameters.camera.viewMatrix),r.setUniformMatrix4fv("view",S),e.bindParameters.lighting.setLightDirectionUniform(r),t.bindVAO(this._vao),r.assertCompatibleVertexAttributeLocations(this._vao),t.drawArrays(w.TRIANGLES,0,this._vaoCount)}renderHaze(){return!1}_createVertexArrayObject(e){const t=d.createPolySphereGeometry(1,2,!1),r=t.indices.get(_.POSITION);for(let n=0;n<r.length;n+=3){const e=r[n];r[n]=r[n+2],r[n+2]=e}const o=t.vertexAttributes.get(_.POSITION).data,i=L.createBuffer(r.length),s=i.position;for(let n=0;n<r.length;++n){const e=3*r[n];s.set(n,0,o[e]),s.set(n,1,o[e+1]),s.set(n,2,o[e+2])}return new q(e,g,{geometry:u(L)},{geometry:b.createVertex(e,A.STATIC_DRAW,i.buffer)})}}function O(e,t){s(e,t),e[12]=0,e[13]=0,e[14]=0,e[15]=1}const S=n(),L=p().vec3f(_.POSITION),P=new f;export{I as PanoramicAtmosphere};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{_ as r}from"../../../chunks/tslib.es6.js";import e from"../../../core/Accessor.js";import{property as o}from"../../../core/accessorSupport/decorators/property.js";import"../../../core/arrayUtils.js";import"../../../core/has.js";import"../../../core/accessorSupport/ensureType.js";import{subclass as s}from"../../../core/accessorSupport/decorators/subclass.js";var t;let i=t=class extends e{set quality(r){
|
|
5
|
+
import{_ as r}from"../../../chunks/tslib.es6.js";import e from"../../../core/Accessor.js";import{property as o}from"../../../core/accessorSupport/decorators/property.js";import"../../../core/arrayUtils.js";import"../../../core/has.js";import"../../../core/accessorSupport/ensureType.js";import{subclass as s}from"../../../core/accessorSupport/decorators/subclass.js";var t;let i=t=class extends e{set quality(r){["low","high"].includes(r)&&this._set("quality",r)}clone(){return new t({quality:this.quality})}};r([o({type:["low","high"],value:"low"})],i.prototype,"quality",null),i=t=r([s("esri.views.3d.environment.SceneViewAtmosphere")],i);export{i as SceneViewAtmosphere};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{m as e,c as r}from"../../../chunks/mat4.js";import{c as t}from"../../../chunks/mat4f64.js";import{S as i}from"../../../chunks/Stars.glsl.js";import{ReloadableShaderModule as
|
|
5
|
+
import{m as e,c as r}from"../../../chunks/mat4.js";import{c as t}from"../../../chunks/mat4f64.js";import{S as i}from"../../../chunks/Stars.glsl.js";import{ReloadableShaderModule as s}from"../webgl-engine/core/shaderTechnique/ReloadableShaderModule.js";import{ShaderTechnique as o}from"../webgl-engine/core/shaderTechnique/ShaderTechnique.js";import{Default3D as n}from"../webgl-engine/lib/DefaultVertexAttributeLocations.js";import{Program as a}from"../webgl-engine/lib/Program.js";import{BlendFactor as m,CompareFunction as c}from"../../webgl/enums.js";import{makePipelineState as l,separateBlendingParams as u,defaultColorWriteParams as d}from"../../webgl/renderState.js";class g{constructor(){this.modelMatrix=t()}}class h extends o{constructor(e){super(e,null,(()=>this.destroy()))}initializeProgram(e){const r=h.shader.get().build();return new a(e.rctx,r,n)}initializePipeline(){return l({blending:u(m.SRC_ALPHA,m.ONE,m.ONE_MINUS_SRC_ALPHA,m.ONE_MINUS_SRC_ALPHA),depthTest:{func:c.LEQUAL},colorWrite:d})}bindPass(r,t){this.program.bindPass(r,t);const i=this._makeInfiniteProjectionMatrix(t.camera.projectionMatrix,t.camera.near,f);e(i,i,t.camera.viewMatrix),e(i,i,r.modelMatrix),this.program.setUniformMatrix4fv("transform",i)}_makeInfiniteProjectionMatrix(e,t,i){const s=24e-8;return r(i,e),i[10]=s-1,i[11]=-1,i[14]=(s-2)*t,i}}h.shader=new s(i,(()=>import("./Stars.glsl.js")));const f=t();export{g as StarPassParameters,h as StarsTechnique};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import e from"../../../core/Collection.js";import t from"../../../core/Logger.js";import{watch as r,initial as n}from"../../../core/reactiveUtils.js";import{c as s}from"../../../chunks/vec3.js";import i from"./RenderContext.js";import{RenderPass as d}from"../webgl-engine/lib/RenderPass.js";import{RenderSlot as o}from"../webgl-engine/lib/RenderSlot.js";const a=t.getLogger("esri.views.3d.externalRenderers.ExternalRendererStore");class h{constructor(){this._renderers=new e}add(e,t){this._findOrCreateStageRenderer(e).add(t)}remove(e,t){const r=this._findStageRenderer(e);r&&r.remove(t),0===r.renderers.length&&(r.destroy(),this._renderers.remove(r))}_findStageRenderer(e){return this._renderers.find((t=>t.view===e))}_findOrCreateStageRenderer(e){let t=this._findStageRenderer(e);return t||(t=new c(e),this._renderers.add(t)),t}}class c{constructor(t){this.view=t,this.canRender=!0,this.renderers=new e,this._readyWatchHandle=r((()=>t.ready),(e=>{e?(this.context=new i(this.view),this.view._stage.addRenderPlugin([o.OPAQUE_MATERIAL,o.TRANSPARENT_MATERIAL],this)):(this.renderers.forEach((e=>l(e,"dispose",this.context))),this.context=null)}),n)}destroy(){this.renderers.drain((e=>{this.context&&l(e,"dispose",this.context)})),this.view._stage&&this.view._stage.removeRenderPlugin(this),this._readyWatchHandle&&(this._readyWatchHandle.remove(),this._readyWatchHandle=null),this.context=null}add(e){
|
|
5
|
+
import e from"../../../core/Collection.js";import t from"../../../core/Logger.js";import{watch as r,initial as n}from"../../../core/reactiveUtils.js";import{c as s}from"../../../chunks/vec3.js";import i from"./RenderContext.js";import{RenderPass as d}from"../webgl-engine/lib/RenderPass.js";import{RenderSlot as o}from"../webgl-engine/lib/RenderSlot.js";const a=t.getLogger("esri.views.3d.externalRenderers.ExternalRendererStore");class h{constructor(){this._renderers=new e}add(e,t){this._findOrCreateStageRenderer(e).add(t)}remove(e,t){const r=this._findStageRenderer(e);r&&r.remove(t),0===r.renderers.length&&(r.destroy(),this._renderers.remove(r))}_findStageRenderer(e){return this._renderers.find((t=>t.view===e))}_findOrCreateStageRenderer(e){let t=this._findStageRenderer(e);return t||(t=new c(e),this._renderers.add(t)),t}}class c{constructor(t){this.view=t,this.canRender=!0,this.renderers=new e,this._readyWatchHandle=r((()=>t.ready),(e=>{e?(this.context=new i(this.view),this.view._stage.addRenderPlugin([o.OPAQUE_MATERIAL,o.TRANSPARENT_MATERIAL],this)):(this.renderers.forEach((e=>l(e,"dispose",this.context))),this.context=null)}),n)}destroy(){this.renderers.drain((e=>{this.context&&l(e,"dispose",this.context)})),this.view._stage&&this.view._stage.removeRenderPlugin(this),this._readyWatchHandle&&(this._readyWatchHandle.remove(),this._readyWatchHandle=null),this.context=null}add(e){this.renderers.includes(e)?a.warn("add(): Cannot add external renderer: renderer has already been added"):(this.renderers.add(e),this.context&&(this._webglStateReset(),l(e,"setup",this.context),this.view._stage.renderView.requestRender()))}remove(e){const t=this.renderers.indexOf(e);-1!==t&&(this.renderers.removeAt(t),this.context&&(l(e,"dispose",this.context),this.view._stage.renderView.requestRender()))}initializeRenderContext(e){this.context.rctx=e.renderContext.rctx,this.renderers.length>0&&this._webglStateReset(),this.renderers.forEach((e=>l(e,"setup",this.context)))}uninitializeRenderContext(){}render(e){0===this.renderers.length||e.pass!==d.MATERIAL||e.bindParameters.slot!==o.OPAQUE_MATERIAL&&e.bindParameters.slot!==o.TRANSPARENT_MATERIAL||(this._updateContext(e),this._webglStateReset(),this.renderers.forEach((t=>{switch(e.bindParameters.slot){case o.OPAQUE_MATERIAL:l(t,"render",this.context);break;case o.TRANSPARENT_MATERIAL:l(t,"renderTransparent",this.context)}})))}_updateContext(e){this.context.camera.copyFrom(e.bindParameters.camera),s(this.context.sunLight.direction,e.bindParameters.lighting.old.direction),s(this.context.sunLight.diffuse.color,e.bindParameters.lighting.old.diffuse.color),s(this.context.sunLight.ambient.color,e.bindParameters.lighting.old.ambient.color),this.context._renderTargetHelper=e.offscreenRenderingHelper}_webglStateReset(){var e;this.context.rctx.resetState(),null==(e=this.context._renderTargetHelper)||e.bindFramebuffer()}get needsTransparentPass(){return this.renderers.some((e=>"function"==typeof e.renderTransparent))}}function l(e,t,r){"function"==typeof e[t]&&e[t](r)}export{h as default};
|
package/views/3d/glTF/loader.js
CHANGED
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{isSome as e,isNone as t}from"../../../core/maybe.js";import{b as o}from"../../../chunks/mat4f64.js";import{DefaultErrorContext as s}from"./DefaultErrorContext.js";import{makeMaterialParameters as r,makeTextureSource as a}from"./LoaderResult.js";import{Resource as n}from"./internal/Resource.js";import{TextureSamplingMode as i,PrimitiveType as l}from"../../webgl/enums.js";let u=0;async function c(s,r,a={},i=!0){const c=await n.load(s,x,r,a),p="gltf_"+u++,h={lods:[],materials:new Map,textures:new Map,meta:m(c)},I=!(!c.json.asset.extras||"symbolResource"!==c.json.asset.extras.ESRI_type),R=new Map;await d(c,(async(s,r,n,u)=>{var m;const d=null!=(m=R.get(n))?m:0;R.set(n,d+1);const I=void 0!==s.mode?s.mode:l.TRIANGLES,E=I===l.TRIANGLES||I===l.TRIANGLE_STRIP||I===l.TRIANGLE_FAN?I:null;if(t(E))return void x.warnUnsupported("Unsupported primitive mode ("+T[I]+"). Skipping primitive.");if(!c.hasPositions(s))return void x.warn("Skipping primitive without POSITION vertex attribute.");const S=c.getPositionData(s,a),_=c.getMaterial(s,a,i),g=c.hasNormals(s)?c.getNormalData(s,a):null,w=c.hasTangents(s)?c.getTangentData(s,a):null,v=c.hasTextureCoordinates(s)?c.getTextureCoordinates(s,a):null,N=c.hasVertexColors(s)?c.getVertexColors(s,a):null,M=c.getIndexData(s,a),A={transform:o(r),attributes:{position:await S,normal:g?await g:null,texCoord0:v?await v:null,color:N?await N:null,tangent:w?await w:null},indices:await M,primitiveType:E,material:f(h,await _,p)};let F=null;e(h.meta)&&e(h.meta.ESRI_lod)&&"screenSpaceRadius"===h.meta.ESRI_lod.metric&&(F=h.meta.ESRI_lod.thresholds[n]),h.lods[n]=h.lods[n]||{parts:[],name:u,lodThreshold:F},h.lods[n].parts[d]=A}));for(const e of h.lods)e.parts=e.parts.filter((e=>!!e));return{model:h,meta:{isEsriSymbolResource:I,uri:c.uri},customMeta:{}}}function m(t){const o=t.json;let s=null;return o.nodes.forEach((t=>{const o=t.extras;e(o)&&(o.ESRI_proxyEllipsoid||o.ESRI_lod)&&(s=o)})),s}async function d(e,t){const o=e.json,s=o.scenes[o.scene||0].nodes,r=s.length>1,a=[];for(const i of s){const e=o.nodes[i];if(a.push(n(i,0)),p(e)&&!r){e.extensions.MSFT_lod.ids.forEach(((e,t)=>n(e,t+1)))}}async function n(s,r){const i=o.nodes[s],l=e.getNodeTransform(s);if(x.warnUnsupportedIf(null!=i.weights,"Morph targets are not supported."),null!=i.mesh){const e=o.meshes[i.mesh];for(const o of e.primitives)a.push(t(o,l,r,e.name))}for(const e of i.children||[])a.push(n(e,r))}await Promise.all(a)}function p(e){return e.extensions&&e.extensions.MSFT_lod&&Array.isArray(e.extensions.MSFT_lod.ids)}function f(e,t,o){const s=t=>{const s=`${o}_tex_${t&&t.id}${t&&t.name?"_"+t.name:""}`;if(t&&!e.textures.has(s)){const o=a(t.data,{wrap:{s:t.wrapS,t:t.wrapT},mipmap:h.
|
|
5
|
+
import{isSome as e,isNone as t}from"../../../core/maybe.js";import{b as o}from"../../../chunks/mat4f64.js";import{DefaultErrorContext as s}from"./DefaultErrorContext.js";import{makeMaterialParameters as r,makeTextureSource as a}from"./LoaderResult.js";import{Resource as n}from"./internal/Resource.js";import{TextureSamplingMode as i,PrimitiveType as l}from"../../webgl/enums.js";let u=0;async function c(s,r,a={},i=!0){const c=await n.load(s,x,r,a),p="gltf_"+u++,h={lods:[],materials:new Map,textures:new Map,meta:m(c)},I=!(!c.json.asset.extras||"symbolResource"!==c.json.asset.extras.ESRI_type),R=new Map;await d(c,(async(s,r,n,u)=>{var m;const d=null!=(m=R.get(n))?m:0;R.set(n,d+1);const I=void 0!==s.mode?s.mode:l.TRIANGLES,E=I===l.TRIANGLES||I===l.TRIANGLE_STRIP||I===l.TRIANGLE_FAN?I:null;if(t(E))return void x.warnUnsupported("Unsupported primitive mode ("+T[I]+"). Skipping primitive.");if(!c.hasPositions(s))return void x.warn("Skipping primitive without POSITION vertex attribute.");const S=c.getPositionData(s,a),_=c.getMaterial(s,a,i),g=c.hasNormals(s)?c.getNormalData(s,a):null,w=c.hasTangents(s)?c.getTangentData(s,a):null,v=c.hasTextureCoordinates(s)?c.getTextureCoordinates(s,a):null,N=c.hasVertexColors(s)?c.getVertexColors(s,a):null,M=c.getIndexData(s,a),A={transform:o(r),attributes:{position:await S,normal:g?await g:null,texCoord0:v?await v:null,color:N?await N:null,tangent:w?await w:null},indices:await M,primitiveType:E,material:f(h,await _,p)};let F=null;e(h.meta)&&e(h.meta.ESRI_lod)&&"screenSpaceRadius"===h.meta.ESRI_lod.metric&&(F=h.meta.ESRI_lod.thresholds[n]),h.lods[n]=h.lods[n]||{parts:[],name:u,lodThreshold:F},h.lods[n].parts[d]=A}));for(const e of h.lods)e.parts=e.parts.filter((e=>!!e));return{model:h,meta:{isEsriSymbolResource:I,uri:c.uri},customMeta:{}}}function m(t){const o=t.json;let s=null;return o.nodes.forEach((t=>{const o=t.extras;e(o)&&(o.ESRI_proxyEllipsoid||o.ESRI_lod)&&(s=o)})),s}async function d(e,t){const o=e.json,s=o.scenes[o.scene||0].nodes,r=s.length>1,a=[];for(const i of s){const e=o.nodes[i];if(a.push(n(i,0)),p(e)&&!r){e.extensions.MSFT_lod.ids.forEach(((e,t)=>n(e,t+1)))}}async function n(s,r){const i=o.nodes[s],l=e.getNodeTransform(s);if(x.warnUnsupportedIf(null!=i.weights,"Morph targets are not supported."),null!=i.mesh){const e=o.meshes[i.mesh];for(const o of e.primitives)a.push(t(o,l,r,e.name))}for(const e of i.children||[])a.push(n(e,r))}await Promise.all(a)}function p(e){return e.extensions&&e.extensions.MSFT_lod&&Array.isArray(e.extensions.MSFT_lod.ids)}function f(e,t,o){const s=t=>{const s=`${o}_tex_${t&&t.id}${t&&t.name?"_"+t.name:""}`;if(t&&!e.textures.has(s)){const o=a(t.data,{wrap:{s:t.wrapS,t:t.wrapT},mipmap:h.includes(t.minFilter),noUnpackFlip:!0});e.textures.set(s,o)}return s},n=`${o}_mat_${t.id}_${t.name}`;if(!e.materials.has(n)){const o=r({color:[t.color[0],t.color[1],t.color[2]],opacity:t.color[3],alphaMode:t.alphaMode,alphaCutoff:t.alphaCutoff,doubleSided:t.doubleSided,colorMixMode:t.ESRI_externalColorMixMode,textureColor:t.colorTexture?s(t.colorTexture):void 0,textureNormal:t.normalTexture?s(t.normalTexture):void 0,textureOcclusion:t.occlusionTexture?s(t.occlusionTexture):void 0,textureEmissive:t.emissiveTexture?s(t.emissiveTexture):void 0,textureMetallicRoughness:t.metallicRoughnessTexture?s(t.metallicRoughnessTexture):void 0,emissiveFactor:[t.emissiveFactor[0],t.emissiveFactor[1],t.emissiveFactor[2]],metallicFactor:t.metallicFactor,roughnessFactor:t.roughnessFactor});e.materials.set(n,o)}return n}const x=new s,h=[i.LINEAR_MIPMAP_LINEAR,i.LINEAR_MIPMAP_NEAREST],T=["POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN"];export{c as load};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.24/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/LineOfSightAnalysisObserver.js";import r from"../../../../../analysis/LineOfSightAnalysisTarget.js";import a from"../../../../../core/Collection.js";import s from"../../../../../core/Handles.js";import{handlesGroup as n,makeHandle as o}from"../../../../../core/handleUtils.js";import l from"../../../../../core/Logger.js";import{destroyMaybe as c,isSome as h,removeMaybe as p,isNone as u,applySome as d}from"../../../../../core/maybe.js";import{watch as g,syncAndInitial as _,sync as m}from"../../../../../core/reactiveUtils.js";import{property as v}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 b,fromPoints as T}from"../../../../../geometry/support/lineSegment.js";import{LineOfSightRayIntersector as f}from"../../../analysis/LineOfSight/LineOfSightRayIntersector.js";import{LineOfSightToolConfiguration as M}from"./LineOfSightToolConfiguration.js";import{createSphereManipulator as w,createSphereManipulatorRenderObjects as C}from"./lineOfSightToolUtils.js";import{LaserlineVisualElement as L}from"../../visualElements/LaserlineVisualElement.js";import{createManipulatorDragEventPipeline as k}from"../../../../interactive/dragEventPipeline.js";import{InteractiveToolBase as S}from"../../../../interactive/InteractiveToolBase.js";import{ManipulatorStateCustomFlags as V}from"../../../../interactive/interfaces.js";var O;!function(e){e.Ready="ready",e.Creating="creating",e.Created="created"}(O||(O={}));const E=a.ofType(r),j=l.getLogger("esri.views.3d.interactive.analysisTools.lineOfSight.LineOfSightTool");let P=class extends S{constructor(e){super(e),this.configuration=new M,this.analysisView=null,this._someManipulatorsFocused=!1,this._laserlineVisualElement=null,this._grabbedManipulator=null,this._analysisHandles=new s,this._handles=new s,this._manipulatorHandles=new s,this._targetTrackerManipulator=null}initialize(){this._intersector=new f({view:this.view}),this._handles.add(g((()=>this.state),(e=>{e===O.Created&&this.finishToolCreation()}),_)),this._observerManipulator=this._createObserverManipulator(),this._handles.add([g((()=>({...this.configuration.observer})),(()=>this._updateObserverManipulatorStyle()),m),g((()=>this.analysisView.elevationAlignedObserver),(e=>this._onObserverLocationChange(e)),_),g((()=>({...this.configuration.laserLine})),(()=>this._createVisualElements()),_),this._connectComputations()])}destroy(){this._handles=c(this._handles),this._manipulatorHandles=c(this._manipulatorHandles),this._analysisHandles=c(this._analysisHandles),this._observerManipulator=null,this._clearTargetTracker(),this._removeVisualElements(),this._intersector=null,this._set("analysis",null)}get state(){return this.active?h(this._grabbedManipulator)?O.Created:O.Creating:h(this.analysis.observer)&&h(this.analysis.observer.position)?O.Created:O.Ready}get cursor(){return!this._someManipulatorsFocused&&this.active&&this._showTracker?"crosshair":null}get updating(){return!!h(this.analysisView)&&this.analysisView.updating}get _showTracker(){return this.active&&"mouse"===this._latestPointerMovePointerType}get _shouldRenderTracker(){return this._showTracker&&h(this.analysis.observer)&&h(this.analysis.observer.position)&&!this._someManipulatorsFocused}continue(){this.view.activeTool=this}stop(){this.view.activeTool=null}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}onActivate(){this._manipulatorFocusChanged()}onDeactivate(){this._clearTargetTracker(),this._manipulatorFocusChanged()}_connectComputations(){let e=null;return n([g((()=>this.analysisView.computations),(t=>{e=p(e),e=t.on("change",(e=>this._onComputationsCollectionChange(e))),t.forEach((e=>this._connectComputation(e)))}),_),o((()=>e=p(e)))])}_onComputationsCollectionChange(e){e.added.forEach((e=>this._connectComputation(e))),e.removed.forEach((e=>this._disconnectComputation(e)))}_connectComputation(e){if(this.destroyed)return void j.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([g((()=>this._getLineOfSightManipulatorStateDependencies(e)),(()=>this._updateManipulatorState(i,e)),_),g((()=>e.elevationAlignedTargetLocation),(e=>this._onTargetLocationChange(e,i)),_)],e)}_disconnectComputation(e){if(this.destroyed)return void j.warn("Attempting to disconnect an analysis from a destroyed LineOfSight tool. Ignoring.");this._analysisHandles.remove(e);const t=this._getTargetManipulator(e.target);h(t)&&(this.manipulators.remove(t),this._manipulatorHandles.remove(t),h(this._targetTrackerManipulator)&&this._targetTrackerManipulator===t&&(this._targetTrackerManipulator=null))}_createTargetTracker(e){this.analysisView.cursorTarget=new r({position:e.point,intersection:e})}_clearTargetTracker(){h(this.analysisView.cursorTarget)&&(this.analysisView.cursorTarget=c(this.analysisView.cursorTarget))}_createManipulator(e,t,i){const r=w(this.view,e);return r.metadata=i,this._manipulatorHandles.add([t(r),r.events.on("focus-changed",(()=>this._manipulatorFocusChanged())),r.events.on("grab-changed",(e=>this._manipulatorGrabChanged(r,e))),r.events.on("immediate-click",(e=>e.stopPropagation()))],r),this.manipulators.add(r),r}_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},r={target:e,type:"target"},a=this._createManipulator(i,(e=>this._createTargetManipulatorDragPipeline(e)),r);return h(e.position)?a.elevationAlignedLocation=e.position:a.available=!1,a}_getTargetManipulator(e){let t=null;return this.manipulators.forEach((i=>{const r=i.manipulator;u(t)&&"target"===r.metadata.type&&r.metadata.target===e&&(t=r)})),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=C(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,r)=>{i.next(this._screenToIntersection()).next(this._updateTargetDragStep(e)).next((()=>this._updateLaserLineRenderer())),r.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=>(h(this.analysis.observer)?(this.analysis.observer.position=e.intersection.point,this.analysis.observer.intersection=e.intersection):this.analysis.observer=new i({position:e.intersection.point,intersection:e.intersection}),e)}_cancelObserverDragStep(){const e=h(this.analysis.observer)&&h(this.analysis.observer.position)?this.analysis.observer.clone():null;return t=>(this.analysis.observer=e,t)}_updateTargetDragStep(e){return t=>{const i=t.intersection.point;return e.metadata.target.position=i,e.metadata.target.intersection=t.intersection,h(i)&&(e.elevationAlignedLocation=i),t}}_cancelTargetDragStep(e){const t=d(e.position,(e=>e.clone())),i=e.intersection;return r=>(e.position=t,e.intersection=i,r)}_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:r}=t.computationResult;e.state=i?r?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=h(this._grabbedManipulator)?this._grabbedManipulator:this._shouldRenderTracker&&h(this.analysis.observer)&&h(this.analysis.observer.position)?this._targetTrackerManipulator:null;this.configuration.laserLine.enabled&&h(t)?(e.visible=!0,e.heightManifoldTarget=t.renderLocation,t!==this._observerManipulator?e.lineVerticalPlaneSegment=T(this._observerManipulator.renderLocation,t.renderLocation,H):e.lineVerticalPlaneSegment=null):(e.visible=!1,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(){h(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){h(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)||(h(this.analysis.observer)&&h(this.analysis.observer.position)?(this._clearTargetTracker(),this.analysis.targets.add(new r({position:t.point,intersection:t}))):this.analysis.observer=new i({position:t.point,intersection:t}))}_clickHandler(e){this.active&&(this._addPointFromClickEvent({x:e.x,y:e.y}),e.stopPropagation())}_doubleClickHandler(e){this.active&&(this.stop(),e.stopPropagation())}_keyDownHandler(e){this.active&&"Escape"===e.key&&(this.stop(),e.stopPropagation())}_pointerMoveHandler(e){if(this._latestPointerMovePointerType=e.pointerType,this._updateLaserLineRenderer(),!this._showTracker||u(this.analysis.observer)||u(this.analysis.observer.position))return;const t={x:e.x,y:e.y},i=this._intersector.getScreenPointIntersection(t);h(i)&&h(i.point)&&(h(this.analysisView.cursorTarget)?(this.analysisView.cursorTarget.position=i.point,this.analysisView.cursorTarget.intersection=i):this._createTargetTracker(i),this._updateLaserLineRenderer())}get testInfo(){return{laserLineVisualElement:this._laserlineVisualElement}}};e([v({constructOnly:!0})],P.prototype,"view",void 0),e([v({constructOnly:!0})],P.prototype,"analysis",void 0),e([v({readOnly:!0})],P.prototype,"state",null),e([v({readOnly:!0})],P.prototype,"cursor",null),e([v({readOnly:!0})],P.prototype,"updating",null),e([v({type:M})],P.prototype,"configuration",void 0),e([v({constructOnly:!0})],P.prototype,"analysisView",void 0),e([v({readOnly:!0})],P.prototype,"_showTracker",null),e([v()],P.prototype,"_latestPointerMovePointerType",void 0),e([v()],P.prototype,"_shouldRenderTracker",null),e([v()],P.prototype,"_someManipulatorsFocused",void 0),e([v()],P.prototype,"_laserlineVisualElement",void 0),e([v()],P.prototype,"_grabbedManipulator",void 0),P=e([y("esri.views.3d.interactive.analysisTools.lineOfSight.LineOfSightTool")],P);const H=b();export{E as LineOfSightTargetCollection,P as LineOfSightTool};
|
|
5
|
+
import{_ as e}from"../../../../../chunks/tslib.es6.js";import t from"../../../../../Color.js";import i from"../../../../../analysis/LineOfSightAnalysisObserver.js";import r from"../../../../../analysis/LineOfSightAnalysisTarget.js";import a from"../../../../../core/Collection.js";import s from"../../../../../core/Handles.js";import{handlesGroup as n,makeHandle as o}from"../../../../../core/handleUtils.js";import l from"../../../../../core/Logger.js";import{destroyMaybe as c,isSome as h,removeMaybe as u,isNone as p,applySome as d}from"../../../../../core/maybe.js";import{watch as g,syncAndInitial as _,sync as m}from"../../../../../core/reactiveUtils.js";import{property as v}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 b,fromPoints as f}from"../../../../../geometry/support/lineSegment.js";import{getGraphicEffectiveElevationInfo as T,getConvertedElevation as M}from"../../../../../support/elevationInfoUtils.js";import w from"../../../../../symbols/support/ElevationInfo.js";import{LineOfSightRayIntersector as C}from"../../../analysis/LineOfSight/LineOfSightRayIntersector.js";import{LineOfSightToolConfiguration as L}from"./LineOfSightToolConfiguration.js";import{createSphereManipulator as k,createSphereManipulatorRenderObjects as S}from"./lineOfSightToolUtils.js";import{LaserlineVisualElement as V}from"../../visualElements/LaserlineVisualElement.js";import{IntersectorType as O}from"../../../webgl-engine/lib/IntersectorInterfaces.js";import{createManipulatorDragEventPipeline as E}from"../../../../interactive/dragEventPipeline.js";import{InteractiveToolBase as I}from"../../../../interactive/InteractiveToolBase.js";import{ManipulatorStateCustomFlags as j}from"../../../../interactive/interfaces.js";var P;!function(e){e.Ready="ready",e.Creating="creating",e.Created="created"}(P||(P={}));const R=a.ofType(r),H=l.getLogger("esri.views.3d.interactive.analysisTools.lineOfSight.LineOfSightTool");let F=class extends I{constructor(e){super(e),this.configuration=new L,this.analysisView=null,this._someManipulatorsFocused=!1,this._laserlineVisualElement=null,this._grabbedManipulator=null,this._analysisHandles=new s,this._handles=new s,this._manipulatorHandles=new s,this._targetTrackerManipulator=null}initialize(){this._intersector=new C({view:this.view}),this._handles.add(g((()=>this.state),(e=>{e===P.Created&&this.finishToolCreation()}),_)),this._observerManipulator=this._createObserverManipulator(),this._handles.add([g((()=>({...this.configuration.observer})),(()=>this._updateObserverManipulatorStyle()),m),g((()=>this.analysisView.elevationAlignedObserver),(e=>this._onObserverLocationChange(e)),_),g((()=>({...this.configuration.laserLine})),(()=>this._createVisualElements()),_),this._connectComputations()])}destroy(){this._handles=c(this._handles),this._manipulatorHandles=c(this._manipulatorHandles),this._analysisHandles=c(this._analysisHandles),this._observerManipulator=null,this._clearTargetTracker(),this._removeVisualElements(),this._intersector=null,this._set("analysis",null)}get state(){return this.active?h(this._grabbedManipulator)?P.Created:P.Creating:h(this.analysis.observer)&&h(this.analysis.observer.position)?P.Created:P.Ready}get cursor(){return!this._someManipulatorsFocused&&this.active&&this._showTracker?"crosshair":null}get updating(){return!!h(this.analysisView)&&this.analysisView.updating}get _showTracker(){return this.active&&"mouse"===this._latestPointerMovePointerType}get _shouldRenderTracker(){return this._showTracker&&h(this.analysis.observer)&&h(this.analysis.observer.position)&&!this._someManipulatorsFocused}continue(){this.view.activeTool=this}stop(){this.view.activeTool=null}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}onActivate(){this._manipulatorFocusChanged()}onDeactivate(){this._clearTargetTracker(),this._manipulatorFocusChanged()}_connectComputations(){let e=null;return n([g((()=>this.analysisView.computations),(t=>{e=u(e),e=t.on("change",(e=>this._onComputationsCollectionChange(e))),t.forEach((e=>this._connectComputation(e)))}),_),o((()=>e=u(e)))])}_onComputationsCollectionChange(e){e.added.forEach((e=>this._connectComputation(e))),e.removed.forEach((e=>this._disconnectComputation(e)))}_connectComputation(e){if(this.destroyed)return void H.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);p(this._targetTrackerManipulator)&&i.metadata.target===this.analysisView.cursorTarget&&(this._targetTrackerManipulator=i,this._targetTrackerManipulator.available=!1,this._targetTrackerManipulator.interactive=!1,this._updateLaserLineRenderer()),t.add([g((()=>this._getLineOfSightManipulatorStateDependencies(e)),(()=>this._updateManipulatorState(i,e)),_),g((()=>e.elevationAlignedTargetLocation),(e=>this._onTargetLocationChange(e,i)),_)],e)}_disconnectComputation(e){if(this.destroyed)return void H.warn("Attempting to disconnect an analysis from a destroyed LineOfSight tool. Ignoring.");this._analysisHandles.remove(e);const t=this._getTargetManipulator(e.target);h(t)&&(this.manipulators.remove(t),this._manipulatorHandles.remove(t),h(this._targetTrackerManipulator)&&this._targetTrackerManipulator===t&&(this._targetTrackerManipulator=null))}_clearTargetTracker(){h(this.analysisView.cursorTarget)&&(this.analysisView.cursorTarget=c(this.analysisView.cursorTarget))}_createManipulator(e,t,i){const r=k(this.view,e);return r.metadata=i,this._manipulatorHandles.add([t(r),r.events.on("focus-changed",(()=>this._manipulatorFocusChanged())),r.events.on("grab-changed",(e=>this._manipulatorGrabChanged(r,e))),r.events.on("immediate-click",(e=>e.stopPropagation()))],r),this.manipulators.add(r),r}_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},r={target:e,type:"target"},a=this._createManipulator(i,(e=>this._createTargetManipulatorDragPipeline(e)),r);return h(e.position)?a.elevationAlignedLocation=e.position:a.available=!1,a}_getTargetManipulator(e){let t=null;return this.manipulators.forEach((i=>{const r=i.manipulator;p(t)&&"target"===r.metadata.type&&r.metadata.target===e&&(t=r)})),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=S(i)}_manipulatorFocusChanged(){this._someManipulatorsFocused=this.manipulators.some((e=>e.manipulator.focused)),this._updateLaserLineRenderer()}_screenToIntersection(){return e=>{const t=this._intersector.getScreenPointIntersection(e.screenEnd);return p(t)?null:{...e,intersection:t}}}_createTargetManipulatorDragPipeline(e){return E(e,((t,i,r)=>{i.next(this._screenToIntersection()).next(this._updateTargetDragStep(e)).next((()=>this._updateLaserLineRenderer())),r.next(this._cancelTargetDragStep(e.metadata.target)).next((()=>this._updateLaserLineRenderer()))}))}_createObserverManipulatorDragPipeline(e){return E(e,((e,t,i)=>{t.next(this._screenToIntersection()).next(this._updateObserverDragStep()).next((()=>this._updateLaserLineRenderer())),i.next(this._cancelObserverDragStep()).next((()=>this._updateLaserLineRenderer()))}))}_updateObserverDragStep(){return e=>(h(e.intersection.point)?(p(this.analysis.observer)&&(this.analysis.observer=new i),this._updateFromIntersection(this.analysis.observer,e.intersection)):this.analysis.observer=null,e)}_cancelObserverDragStep(){const e=h(this.analysis.observer)&&h(this.analysis.observer.position)?this.analysis.observer.clone():null;return t=>(this.analysis.observer=e,t)}_updateTargetDragStep(e){return t=>{this._updateFromIntersection(e.metadata.target,t.intersection);const i=t.intersection.point;return h(i)&&(e.elevationAlignedLocation=i),t}}_cancelTargetDragStep(e){const t=d(e.position,(e=>e.clone())),i=e.intersection;return r=>(e.position=t,e.intersection=i,r)}_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:r}=t.computationResult;e.state=i?r?j.Custom1:j.Custom2:j.Custom3}_getLineOfSightManipulatorStateDependencies(e){const{isValid:t,isTargetVisible:i}=e.computationResult;return{isValid:t,isTargetVisible:i}}_updateLaserLineRenderer(){if(p(this._laserlineVisualElement))return;const e=this._laserlineVisualElement,t=h(this._grabbedManipulator)?this._grabbedManipulator:this._shouldRenderTracker&&h(this.analysis.observer)&&h(this.analysis.observer.position)?this._targetTrackerManipulator:null;this.configuration.laserLine.enabled&&h(t)?(e.visible=!0,e.heightManifoldTarget=t.renderLocation,t!==this._observerManipulator?e.lineVerticalPlaneSegment=f(this._observerManipulator.renderLocation,t.renderLocation,D):e.lineVerticalPlaneSegment=null):(e.visible=!1,e.heightManifoldTarget=null,e.lineVerticalPlaneSegment=null)}_createVisualElements(){const e=this.configuration.laserLine;this._removeVisualElements(),this._laserlineVisualElement=new V({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(){h(this._laserlineVisualElement)&&(this._laserlineVisualElement.destroy(),this._laserlineVisualElement=null)}_onObserverLocationChange(e){p(e)?this._observerManipulator.available=!1:(this._observerManipulator.metadata.intersection=null,this._observerManipulator.available=!0,this._observerManipulator.elevationAlignedLocation=e)}_onTargetLocationChange(e,t){h(e)?(t.elevationAlignedLocation=e,t!==this._targetTrackerManipulator&&(t.available=!0)):t.available=!1}_addPointFromClickEvent(e){const t=this._intersector.getScreenPointIntersection(e);if(!p(t)&&!p(t.point))if(h(this.analysis.observer)&&h(this.analysis.observer.position)){this._clearTargetTracker();const e=new r;this._updateFromIntersection(e,t),this.analysis.targets.add(e)}else{const e=new i;this._updateFromIntersection(e,t),this.analysis.observer=e}}_clickHandler(e){this.active&&(this._addPointFromClickEvent({x:e.x,y:e.y}),e.stopPropagation())}_doubleClickHandler(e){this.active&&(this.stop(),e.stopPropagation())}_keyDownHandler(e){this.active&&"Escape"===e.key&&(this.stop(),e.stopPropagation())}_pointerMoveHandler(e){if(this._latestPointerMovePointerType=e.pointerType,this._updateLaserLineRenderer(),!this._showTracker||p(this.analysis.observer)||p(this.analysis.observer.position))return;const t={x:e.x,y:e.y},i=this._intersector.getScreenPointIntersection(t);h(i)&&h(i.point)&&(p(this.analysisView.cursorTarget)&&(this.analysisView.cursorTarget=new r),this._updateFromIntersection(this.analysisView.cursorTarget,i),this._updateLaserLineRenderer())}_updateFromIntersection(e,t){if(p(t.point))return e.elevationInfo=null,e.position=null,void(e.intersection=null);switch(t.type){case O.OBJECT:if(h(t.graphic)){const i=T(t.graphic);"on-the-ground"===i.mode&&(i.mode="relative-to-ground",i.offset=0),e.elevationInfo=new w(i)}else e.elevationInfo=null;break;case O.TERRAIN:case O.I3S:e.elevationInfo=new w({mode:"on-the-ground"});break;default:e.elevationInfo=null}const i=t.point.clone();i.z=M(this.view,i,{mode:"absolute-height",offset:0},e.elevationInfo),e.position=i,e.intersection=t}get testInfo(){return{laserLineVisualElement:this._laserlineVisualElement}}};e([v({constructOnly:!0})],F.prototype,"view",void 0),e([v({constructOnly:!0})],F.prototype,"analysis",void 0),e([v({readOnly:!0})],F.prototype,"state",null),e([v({readOnly:!0})],F.prototype,"cursor",null),e([v({readOnly:!0})],F.prototype,"updating",null),e([v({type:L})],F.prototype,"configuration",void 0),e([v({constructOnly:!0})],F.prototype,"analysisView",void 0),e([v({readOnly:!0})],F.prototype,"_showTracker",null),e([v()],F.prototype,"_latestPointerMovePointerType",void 0),e([v()],F.prototype,"_shouldRenderTracker",null),e([v()],F.prototype,"_someManipulatorsFocused",void 0),e([v()],F.prototype,"_laserlineVisualElement",void 0),e([v()],F.prototype,"_grabbedManipulator",void 0),F=e([y("esri.views.3d.interactive.analysisTools.lineOfSight.LineOfSightTool")],F);const D=b();export{R as LineOfSightTargetCollection,F as LineOfSightTool};
|