@arcgis/core 4.25.0-next.20220718 → 4.25.0-next.20220721
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/Camera.js +1 -1
- package/analysis/DimensioningAnalysis.js +1 -1
- package/analysis/LineOfSightAnalysis.js +1 -1
- package/analysis/SliceAnalysis.js +1 -1
- package/arcade/featureset/support/RecentlyUsedCache.js +1 -1
- package/arcade/functions/featuresetgeom.js +1 -1
- package/assets/esri/core/workers/RemoteClient.js +1 -1
- package/assets/esri/core/workers/chunks/1751de504354d98ac3fd.js +1 -0
- package/assets/esri/core/workers/chunks/1f4f1896880bfa6801c5.js +1 -0
- package/assets/esri/core/workers/chunks/290cd411d0d18b1d0efd.js +1 -0
- package/assets/esri/core/workers/chunks/{ab3bd5fecdb97f2d690e.js → 3b5be512567d9c1c6fe6.js} +1 -1
- package/assets/esri/core/workers/chunks/{c3236a7058e64ea3b939.js → 3c9da9b88777700879aa.js} +1 -1
- package/assets/esri/core/workers/chunks/{f96e8724ae3458f5e262.js → 4a7aa1b9de61eb013647.js} +1 -1
- package/assets/esri/core/workers/chunks/4cb64ccb5fba126f9a66.js +1 -0
- package/assets/esri/core/workers/chunks/{68f19e58aae01791944e.js → 579ba109718bc2554008.js} +1 -1
- package/assets/esri/core/workers/chunks/59845b02b07a8ed7ce81.js +1 -0
- package/assets/esri/core/workers/chunks/{c705f907ce60a646d9aa.js → 652d36523efbe5c9ebb2.js} +1 -1
- package/assets/esri/core/workers/chunks/888d8e4471c9a2cd5009.js +1 -0
- package/assets/esri/core/workers/chunks/9493a8e5d6001b6bf275.js +1 -0
- package/assets/esri/core/workers/chunks/9d824cdfbcdf3cb3246f.js +1 -0
- package/assets/esri/core/workers/chunks/bf348f6f52701fa6016e.js +987 -0
- package/assets/esri/core/workers/chunks/d02881954c0cc0d39dfb.js +1 -0
- package/assets/esri/core/workers/chunks/{1ecbf642debc2207b762.js → da54483123f377e9b3e1.js} +1 -1
- package/assets/esri/core/workers/chunks/{61b71b8e028eda10ccab.js → e4ad2cf5d6bded02e392.js} +1 -1
- package/assets/esri/core/workers/chunks/{3bfab05ae07ac18a75fe.js → f298a70f3b6f27675d53.js} +1 -1
- package/assets/esri/core/workers/chunks/{d499cce61c1c5c367380.js → f40290cfad3fe6fb4ef9.js} +1 -1
- package/assets/esri/layers/support/rasterFormats/lerc-wasm.wasm +0 -0
- package/assets/esri/themes/base/widgets/_Tooltip.scss +1 -1
- package/assets/esri/themes/dark/main.css +1 -1
- package/assets/esri/themes/light/main.css +1 -1
- package/assets/esri/themes/light/view.css +1 -1
- package/chunks/ComponentShader.glsl.js +39 -33
- package/chunks/Laserlines.glsl.js +4 -4
- package/chunks/Precipitation.glsl.js +2 -2
- package/chunks/RibbonLine.glsl.js +46 -44
- package/chunks/Stars.glsl.js +2 -2
- package/chunks/Terrain.glsl.js +25 -17
- package/chunks/boundedPlane.js +1 -1
- package/chunks/lerc-wasm.js +1 -1
- package/chunks/mat2d.js +1 -1
- package/chunks/quatf32.js +1 -1
- package/core/BidiEngine.js +1 -1
- package/core/accessorSupport/watch.js +1 -1
- package/core/libs/gl-matrix-2/factories/quatf32.js +1 -1
- package/core/libs/gl-matrix-2/math/mat2d.js +1 -1
- package/core/perspectiveUtils.js +1 -1
- package/core/promiseUtils.js +1 -1
- package/core/reactiveUtils.js +1 -1
- package/core/unitUtils.js +1 -1
- package/geometry/projection.js +1 -1
- package/geometry/projectionEllipsoid.js +1 -1
- package/geometry/support/MeshTexture.js +1 -1
- package/geometry/support/axisAngleDegrees.js +1 -1
- package/geometry/support/coordinateSystem.js +1 -1
- package/geometry/support/geodesicUtils.js +1 -1
- package/geometry/support/meshUtils/exporters/gltf/index.js +1 -1
- package/geometry/support/meshUtils/loadExternal.js +1 -1
- package/geometry/support/meshUtils/loadGLTFMesh.js +1 -1
- package/geometry/support/scaleUtils.js +1 -1
- package/geometry/support/spatialReferenceUtils.js +1 -1
- package/identity/IdentityManagerBase.js +1 -1
- package/identity/IdentityModal.js +1 -1
- package/interfaces.d.ts +3 -33
- package/layers/FeatureLayer.js +1 -1
- package/layers/effects/parser.js +1 -1
- package/layers/graphics/hydratedFeatures.js +1 -1
- package/layers/graphics/sources/support/sourceUtils.js +1 -1
- package/layers/mixins/ArcGISImageService.js +1 -1
- package/layers/ogc/wfsUtils.js +1 -1
- package/layers/support/ContingentValue.js +1 -1
- package/layers/support/ElevationQuery.js +1 -1
- package/layers/support/PixelBlock.js +1 -1
- package/layers/support/kmlUtils.js +1 -1
- package/layers/support/rasterDatasets/CloudRaster.js +1 -1
- package/layers/support/rasterDatasets/EphemeralBlockCache.js +1 -1
- package/layers/support/rasterDatasets/ImageServerRaster.js +1 -1
- package/layers/support/rasterDatasets/multipartParser.js +1 -1
- package/layers/support/rasterFormats/ImageCanvasDecoder.js +1 -1
- package/layers/support/rasterFormats/JpgPlus.js +1 -1
- package/layers/support/rasterFormats/Lerc.js +1 -1
- package/layers/support/rasterFormats/RasterCodec.js +1 -1
- package/layers/support/rasterFormats/Raw.js +1 -1
- package/layers/support/rasterFormats/TiffTags.js +1 -1
- package/layers/support/rasterFunctions/vectorFieldUtils.js +1 -1
- package/layers/support/vectorTileLayerLoader.js +1 -1
- package/layers/support/wmtsUtils.js +1 -1
- package/package.json +1 -1
- package/renderers/RasterShadedReliefRenderer.js +1 -1
- package/renderers/RasterStretchRenderer.js +1 -1
- package/renderers/UniqueValueRenderer.js +1 -1
- package/renderers/support/AuthoringInfo.js +1 -1
- package/renderers/support/RasterSymbolizer.js +1 -1
- package/rest/query/operations/query.js +1 -1
- package/rest/query/operations/queryTopFeatures.js +1 -1
- package/rest/support/DirectionsFeatureSet.js +1 -1
- package/rest/support/ImageHistogramParameters.js +1 -1
- package/rest/support/ImageSampleParameters.js +1 -1
- package/smartMapping/labels/clusters.js +1 -1
- package/smartMapping/renderers/relationship.js +1 -1
- package/smartMapping/support/adapters/support/utils.js +1 -1
- package/support/basemapUtils.js +1 -1
- package/support/revision.js +1 -1
- package/symbols/LabelSymbol3D.js +1 -1
- package/symbols/PointSymbol3D.js +1 -1
- package/symbols/cim/CIMCursor.js +1 -1
- package/symbols/cim/CIMSymbolDrawHelper.js +1 -1
- package/symbols/cim/CIMSymbolRasterizer.js +1 -1
- package/symbols/support/previewSymbol3D.js +1 -1
- package/symbols/support/webStyleSymbolUtils.js +1 -1
- package/views/2d/ViewState.js +1 -1
- package/views/2d/engine/vectorTiles/Feature.js +1 -1
- package/views/2d/engine/vectorTiles/style/StyleRepository.js +1 -1
- package/views/2d/engine/webgl/SDFConverter.js +1 -1
- package/views/2d/engine/webgl/TurboLine.js +1 -1
- package/views/2d/engine/webgl/brushes/BrushClip.js +1 -1
- package/views/2d/engine/webgl/brushes/BrushOverlay.js +1 -1
- package/views/2d/engine/webgl/brushes/WGLGeometryBrushLabel.js +1 -1
- package/views/2d/engine/webgl/brushes/WGLGeometryBrushLine.js +1 -1
- package/views/2d/engine/webgl/brushes/WGLGeometryBrushText.js +1 -1
- package/views/2d/engine/webgl/collisions/MetricReader.js +1 -1
- package/views/2d/engine/webgl/cpuMapped/DisplayRecordReader.js +1 -1
- package/views/2d/engine/webgl/cpuMapped/FreeList.js +1 -1
- package/views/2d/engine/webgl/mesh/heuristics.js +1 -1
- package/views/2d/engine/webgl/mesh/templates/WGLDynamicFillTemplate.js +1 -1
- package/views/2d/engine/webgl/mesh/templates/WGLDynamicLineTemplate.js +1 -1
- package/views/2d/engine/webgl/mesh/templates/WGLDynamicMarkerTemplate.js +1 -1
- package/views/2d/engine/webgl/mesh/templates/WGLDynamicTextTemplate.js +1 -1
- package/views/2d/engine/webgl/mesh/templates/WGLFillTemplate.js +1 -1
- package/views/2d/engine/webgl/mesh/templates/WGLLineTemplate.js +1 -1
- package/views/2d/engine/webgl/mesh/templates/WGLMarkerTemplate.js +1 -1
- package/views/2d/engine/webgl/mesh/templates/shapingUtils.js +1 -1
- package/views/2d/engine/webgl/shaders/sources/shaderRepository.js +1 -1
- package/views/2d/input/MapViewInputManager.js +1 -1
- package/views/2d/layers/features/createSymbolSchema.js +1 -1
- package/views/2d/viewpointUtils.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/LineOfSight/LineOfSightTool.js +1 -1
- package/views/3d/analysis/LineOfSight/LineOfSightVisualization.js +1 -1
- package/views/3d/analysis/LineOfSightAnalysisView3D.js +1 -1
- package/views/3d/analysis/Slice/SliceTool.js +1 -1
- package/views/3d/analysis/Slice/sliceToolUtils.js +1 -1
- package/views/3d/camera/constraintUtils/distance.js +1 -1
- package/views/3d/environment/ChapmanAtmosphereTechniqueConfiguration.js +1 -1
- package/views/3d/environment/CloudsComposition.js +1 -1
- package/views/3d/environment/FogTechnique.js +1 -1
- package/views/3d/glTF/internal/Resource.js +1 -1
- package/views/3d/input/SceneInputManager.js +1 -1
- package/views/3d/interactive/editingTools/dragEventPipeline3D.js +1 -1
- package/views/3d/interactive/editingTools/draw/DrawGraphicTool3D.js +1 -1
- package/views/3d/interactive/editingTools/reshapeGraphic/edgeOffsetUtils.js +1 -1
- package/views/3d/interactive/editingTools/transformGraphic/GraphicScaleRotateTransform.js +1 -1
- package/views/3d/interactive/editingTools/transformGraphic/GraphicTransformTool.js +1 -1
- package/views/3d/interactive/editingTools/transformGraphic/ScaleRotateObjectSymbol3DAdapter.js +1 -1
- package/views/3d/interactive/measurementTools/directLineMeasurement3D/DirectLineMeasurement3DTool.js +1 -1
- package/views/3d/layers/FeatureLayerViewBase3D.js +1 -1
- package/views/3d/layers/GraphicsLayerView3D.js +1 -1
- package/views/3d/layers/graphics/Graphics3DCore.js +1 -1
- package/views/3d/layers/graphics/Graphics3DExtrudeSymbolLayer.js +1 -1
- package/views/3d/layers/graphics/Graphics3DLineCalloutSymbolLayer.js +1 -1
- package/views/3d/layers/graphics/Graphics3DLineSymbolLayer.js +1 -1
- package/views/3d/layers/graphics/Graphics3DMeshFillSymbolLayer.js +1 -1
- package/views/3d/layers/graphics/Graphics3DObjectSymbolLayer.js +1 -1
- package/views/3d/layers/graphics/Graphics3DPathSymbolLayer.js +1 -1
- package/views/3d/layers/graphics/Graphics3DPolygonFillSymbolLayer.js +1 -1
- package/views/3d/layers/graphics/lineUtils.js +1 -1
- package/views/3d/layers/i3s/I3SGeometryUtil.js +1 -1
- package/views/3d/layers/i3s/I3SIndex.js +1 -1
- package/views/3d/layers/i3s/IDBCache.js +1 -1
- package/views/3d/layers/i3s/IDBMockCache.js +1 -1
- package/views/3d/layers/i3s/PointRenderer.js +1 -1
- package/views/3d/layers/support/featureTileQuery3D.js +1 -1
- package/views/3d/state/ViewState.js +1 -1
- package/views/3d/support/cameraUtils.js +1 -1
- package/views/3d/support/orientedBoundingBox.js +1 -1
- package/views/3d/support/viewpointUtils.js +1 -1
- package/views/3d/terrain/Overlay.js +1 -1
- package/views/3d/terrain/OverlayRenderTarget.js +1 -1
- package/views/3d/terrain/OverlayRenderer.js +1 -1
- package/views/3d/terrain/TerrainRenderer.js +1 -1
- package/views/3d/terrain/TerrainSurface.js +1 -1
- package/views/3d/terrain/TilingSchemeLogic.js +1 -1
- package/views/3d/terrain/interfaces.js +1 -1
- package/views/3d/webgl-engine/collections/Component/ComponentObject.js +1 -1
- package/views/3d/webgl-engine/collections/Component/DepthRange.js +1 -1
- package/views/3d/webgl-engine/collections/Component/Material/ComponentMaterial.js +1 -1
- package/views/3d/webgl-engine/collections/Component/Material/ComponentTechniqueConfiguration.js +1 -1
- package/views/3d/webgl-engine/collections/Component/Material/shader/ComponentShader.glsl.js +1 -1
- package/views/3d/webgl-engine/collections/Component/RenderGeometry.js +1 -1
- package/views/3d/webgl-engine/core/renderPasses/AllRenderPasses.js +1 -1
- package/views/3d/webgl-engine/core/renderPasses/RenderPassManager.js +1 -1
- package/views/3d/webgl-engine/core/shaderLibrary/ShaderOutput.js +1 -1
- package/views/3d/webgl-engine/core/shaderLibrary/Slice.glsl.js +2 -2
- package/views/3d/webgl-engine/core/shaderLibrary/attributes/InstancedDoublePrecision.glsl.js +2 -2
- package/views/3d/webgl-engine/core/shaderLibrary/attributes/ObjectAndLayerIdColor.glsl.js +9 -0
- package/views/3d/webgl-engine/core/shaderLibrary/default/DefaultMaterialAuxiliaryPasses.glsl.js +18 -17
- package/views/3d/webgl-engine/lib/DefaultVertexAttributeLocations.js +1 -1
- package/views/3d/webgl-engine/lib/Geometry.js +1 -1
- package/views/3d/webgl-engine/lib/Intersector.js +1 -1
- package/views/3d/webgl-engine/lib/ObjectAndLayerIdRenderHelper.js +5 -0
- package/views/3d/webgl-engine/lib/Octree.js +1 -1
- package/views/3d/webgl-engine/lib/OffscreenRendering.js +1 -1
- package/views/3d/webgl-engine/lib/PathGeometry.js +1 -1
- package/views/3d/webgl-engine/lib/Renderer.js +1 -1
- package/views/3d/webgl-engine/lib/TextureTechniqueConfiguration.js +1 -1
- package/views/3d/webgl-engine/lib/VertexAttribute.js +1 -1
- package/views/3d/webgl-engine/lib/geometryDataUtils.js +1 -1
- package/views/3d/webgl-engine/lib/lodRendering/InstanceData.js +1 -1
- package/views/3d/webgl-engine/lib/lodRendering/LodRenderer.js +1 -1
- package/views/3d/webgl-engine/lib/lodRendering/RenderInstanceData.js +1 -1
- package/views/3d/webgl-engine/materials/DefaultMaterial.js +1 -1
- package/views/3d/webgl-engine/materials/NativeLineMaterial.js +1 -1
- package/views/3d/webgl-engine/materials/PathMaterial.js +1 -1
- package/views/3d/webgl-engine/materials/RibbonLineMaterial.js +1 -1
- package/views/3d/webgl-engine/materials/ShadedColorMaterial.js +1 -1
- package/views/3d/webgl-engine/materials/internal/bufferWriterUtils.js +1 -1
- package/views/3d/webgl-engine/parts/RenderView.js +1 -1
- package/views/3d/webgl-engine/parts/ScreenshotManager.js +1 -1
- package/views/3d/webgl-engine/shaders/DefaultMaterialTechnique.js +1 -1
- package/views/3d/webgl-engine/shaders/DefaultMaterialTechniqueConfiguration.js +1 -1
- package/views/3d/webgl-engine/shaders/LaserlinePathTechniqueConfiguration.js +1 -1
- package/views/3d/webgl-engine/shaders/RibbonLine.glsl.js +1 -1
- package/views/3d/webgl-engine/shaders/RibbonLineTechnique.js +1 -1
- package/views/3d/webgl-engine/shaders/RibbonLineTechniqueConfiguration.js +1 -1
- package/views/DOMContainer.js +1 -1
- package/views/MapView.js +1 -1
- package/views/SceneView.js +1 -1
- package/views/View.js +1 -1
- package/views/analysis/analysisViewUtils.js +1 -1
- package/views/animation/pointToPoint/apex/planning.js +1 -1
- package/views/draw/PolygonDrawAction.js +1 -1
- package/views/draw/PolylineDrawAction.js +1 -1
- package/views/draw/support/createUtils.js +1 -1
- package/views/draw/support/surfaceCoordinateSystems.js +1 -1
- package/views/input/InputManager.js +1 -1
- package/views/input/handlers/LatestPointer.js +1 -1
- package/views/input/handlers/MultiTouch.js +5 -0
- package/views/interactive/editGeometry/operations/OffsetEdgeVertex.js +1 -1
- package/views/interactive/snapping/featureSources/GraphicsSnappingSource.js +1 -1
- package/views/interactive/snapping/featureSources/featureServiceSource/FeatureServiceTileCache.js +1 -1
- package/views/interactive/tooltip/Tooltip.js +1 -1
- package/views/interactive/tooltip/support/measurements.js +1 -1
- package/views/layers/GroupLayerView.js +1 -1
- package/views/navigation/FilteredFiniteDifference.js +1 -1
- package/views/navigation/MomentumEstimator.js +1 -1
- package/views/navigation/PanPlanarMomentumEstimator.js +1 -1
- package/views/navigation/PanSphericalMomentumEstimator.js +1 -1
- package/views/navigation/RotationMomentumEstimator.js +1 -1
- package/views/support/GroundViewElevationSampler.js +1 -1
- package/views/support/euclideanAreaMeasurementUtils.js +1 -1
- package/views/support/euclideanLengthMeasurementUtils.js +1 -1
- package/views/support/screenshotUtils.js +1 -1
- package/views/webgl/BufferObject.js +1 -1
- package/views/webgl/FramebufferObject.js +1 -1
- package/views/webgl/Texture.js +1 -1
- package/views/webgl/capabilities/Capabilities.js +1 -1
- package/views/webgl/capabilities.js +1 -1
- package/views/webgl/renderState.js +1 -1
- package/webscene/spec-certification/api.js +1 -1
- package/widgets/CoordinateConversion/support/formatUtils.js +1 -1
- package/widgets/ElevationProfile/ElevationProfileController.js +1 -1
- package/widgets/ElevationProfile/ElevationProfileLineInput.js +1 -1
- package/widgets/ElevationProfile/ElevationProfileLineView.js +1 -1
- package/widgets/ElevationProfile/support/chartUtils.js +1 -1
- package/widgets/ElevationProfile/support/geometryUtils.js +1 -1
- package/widgets/Expand.js +1 -1
- package/widgets/Legend/support/sizeRampUtils.js +1 -1
- package/widgets/LineOfSight/LineOfSightViewModel.js +1 -1
- package/widgets/Popup/PopupViewModel.js +1 -1
- package/widgets/Popup/actionUtils.js +1 -1
- package/widgets/ScaleRangeSlider.js +1 -1
- package/widgets/Slider/SliderViewModel.js +1 -1
- package/widgets/Widget.js +1 -1
- package/assets/esri/core/workers/chunks/04ea469cb081e181ca82.js +0 -1
- package/assets/esri/core/workers/chunks/16c2626ca47132700519.js +0 -1
- package/assets/esri/core/workers/chunks/1e4e5d147263e98536bc.js +0 -1
- package/assets/esri/core/workers/chunks/35083def3c658d1ae9ff.js +0 -1
- package/assets/esri/core/workers/chunks/40032d2bf404a46b8f80.js +0 -1
- package/assets/esri/core/workers/chunks/613e82a3e13442685ac4.js +0 -1
- package/assets/esri/core/workers/chunks/64b4f1dbf61439cde801.js +0 -1
- package/assets/esri/core/workers/chunks/abd68b7ba3be4696611c.js +0 -1
- package/assets/esri/core/workers/chunks/b8a062c0c9c626acf61e.js +0 -982
- package/assets/esri/core/workers/chunks/e08686088be0aaca1a99.js +0 -1
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.25/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import t from"../../Viewpoint.js";import e from"../../core/Collection.js";import{isSome as n,get as r,isNone as o}from"../../core/maybe.js";import{getMetersPerUnitForSR as a}from"../../core/unitUtils.js";import{t as i}from"../../chunks/common.js";import{f as c,r as s,t as u,a as f,s as l,b as m,c as y}from"../../chunks/mat2d.js";import{c as p}from"../../chunks/mat2df64.js";import{b as g,s as x,
|
|
5
|
+
import t from"../../Viewpoint.js";import e from"../../core/Collection.js";import{isSome as n,get as r,isNone as o}from"../../core/maybe.js";import{getMetersPerUnitForSR as a}from"../../core/unitUtils.js";import{t as i}from"../../chunks/common.js";import{f as c,r as s,t as u,a as f,s as l,b as m,c as y}from"../../chunks/mat2d.js";import{c as p}from"../../chunks/mat2df64.js";import{b as g,s as x,e as h,n as b,a as w,f as d,g as j,h as G,i as R,j as A,t as k,c as S}from"../../chunks/vec2.js";import{f as v,a as M}from"../../chunks/vec2f64.js";import F from"../../geometry/Extent.js";import N from"../../geometry/Geometry.js";import z from"../../geometry/Point.js";import{isLoaded as I,canProjectWithoutEngine as V,load as q,project as L}from"../../geometry/projection.js";import P from"../../geometry/SpatialReference.js";import{equals as C,isValid as E,getInfo as O}from"../../geometry/support/spatialReferenceUtils.js";const Q=96,U=39.37,B=180/Math.PI;function D(t){return t.wkid?t:t.spatialReference||P.WGS84}function T(t,e){return e.type?x(t,e.x,e.y):S(t,e)}function W(t){return a(t)}function H(t,e){const n=Math.max(1,e[0]),r=Math.max(1,e[1]);return Math.max(t.width/n,t.height/r)*ct(t.spatialReference)}async function J(t,a,i,c){let s,u;if(!t)return null;if(Array.isArray(t)&&!t.length)return null;if(e.isCollection(t)&&(t=t.toArray()),Array.isArray(t)&&t.length&&"object"==typeof t[0]){const e=t.every((t=>"attributes"in t)),r=t.some((t=>!t.geometry));let o=t;if(e&&r&&a&&a.allLayerViews){const e=new Map;for(const n of t){const t=n.layer,r=e.get(t)||[],o=n.attributes[t.objectIdField];null!=o&&r.push(o),e.set(t,r)}const r=[];e.forEach(((t,e)=>{const n=a.allLayerViews.find((t=>t.layer.id===e.id));if("queryFeatures"in n){const o=e.createQuery();o.objectIds=t,o.returnGeometry=!0,r.push(n.queryFeatures(o))}}));const i=await Promise.all(r),c=[];for(const t of i)if(t&&t.features&&t.features.length)for(const e of t.features)n(e.geometry)&&c.push(e.geometry);o=c}for(const t of o)c=await J(t,a,i,c);return c}if(Array.isArray(t)&&2===t.length&&"number"==typeof t[0]&&"number"==typeof t[1])s=new z(t);else if(t instanceof N)s=t;else if("geometry"in t)if(t.geometry)s=t.geometry;else if(t.layer){const e=t.layer,n=a.allLayerViews.find((t=>t.layer.id===e.id));if("queryFeatures"in n){const o=e.createQuery();o.objectIds=[t.attributes[e.objectIdField]],o.returnGeometry=!0;const a=await n.queryFeatures(o);s=r(a,"features",0,"geometry")}}if(o(s))return null;if(u="point"===s.type?new F({xmin:s.x,ymin:s.y,xmax:s.x,ymax:s.y,spatialReference:s.spatialReference}):s.extent,!u)return null;I()||V(u.spatialReference,i)||await q();const f=L(u,i);return f?c=c?c.union(f):f:null}function K(t){if(t&&(!Array.isArray(t)||"number"!=typeof t[0])&&("object"==typeof t||Array.isArray(t)&&"object"==typeof t[0])){if("layer"in t&&t.layer&&t.layer.minScale&&t.layer.maxScale){const e=t.layer;return{min:e.minScale,max:e.maxScale}}if(Array.isArray(t)&&t.length&&t.every((t=>"layer"in t))){let e=0,n=0;for(const r of t){const t=r.layer;t&&t.minScale&&t.maxScale&&(e=t.minScale<e?t.minScale:e,n=t.maxScale>n?t.maxScale:n)}return e&&n?{min:e,max:n}:null}}}function X(t,e){return C(D(t),e)?t:L(t,e)}async function Y(e,r){if(!e||!r)return new t({targetGeometry:new z,scale:0,rotation:0});let o=r.spatialReference;const{constraints:a,padding:i,viewpoint:c,size:s}=r,u=[i?s[0]-i.left-i.right:s[0],i?s[1]-i.top-i.bottom:s[1]];let f=null;e instanceof t?f=e:e.viewpoint?f=e.viewpoint:e.target&&"esri.Viewpoint"===e.target.declaredClass&&(f=e.target);let l=null;f&&f.targetGeometry?l=f.targetGeometry:e instanceof F?l=e:(e||e&&("center"in e||"extent"in e||"target"in e))&&(l=await J(e.center,r,o)||await J(e.extent,r,o)||await J(e.target,r,o)||await J(e,r,o)),!l&&c&&c.targetGeometry?l=c.targetGeometry:!l&&r.extent&&(l=r.extent),o||(o=D(r.spatialReference||r.extent||l)),I()||C(l.spatialReference,o)||V(l,o)||await q();const m=X(l.center?l.center:l,o);let y=null;if(f&&n(f.targetGeometry)&&"point"===f.targetGeometry.type)y=f.scale;else if("scale"in e&&e.scale)y=e.scale;else if("zoom"in e&&-1!==e.zoom&&a&&a.effectiveLODs)y=a.zoomToScale(e.zoom);else if(Array.isArray(l)||"point"===l.type||"extent"===l.type&&0===l.width&&0===l.height){const t=X(r.extent,o);y=n(t)?H(t,u):r.extent?H(r.extent,u):c.scale}else y=H(X(l.extent,o),u);const p=K(e);p&&(p.min&&p.min>y?y=p.min:p.max&&p.max<y&&(y=p.max));let g=0;f?g=f.rotation:e.hasOwnProperty("rotation")?g=e.rotation:c&&(g=c.rotation);let x=new t({targetGeometry:m,scale:y,rotation:g});return a&&(x=a.fit(x),a.constrainByGeometry(x),a.rotationEnabled||(x.rotation=g)),x}function Z(t,e){const n=t.targetGeometry,r=e.targetGeometry;return n.x=r.x,n.y=r.y,n.spatialReference=r.spatialReference,t.scale=e.scale,t.rotation=e.rotation,t}function $(t,e,n){return n?x(t,.5*(e[0]-n.right+n.left),.5*(e[1]-n.bottom+n.top)):g(t,e,.5)}const _=function(){const t=M();return function(e,n,r){const o=n.targetGeometry;T(t,o);const a=.5*ot(n);return e.xmin=t[0]-a*r[0],e.ymin=t[1]-a*r[1],e.xmax=t[0]+a*r[0],e.ymax=t[1]+a*r[1],e.spatialReference=o.spatialReference,e}}();function tt(t,e,n,r,o){return xt(t,e,n.center),t.scale=H(n,r),o&&o.constraints&&o.constraints.constrain(t),t}function et(t,e,n,r){return ft(t,e,n,r),y(t,t)}const nt=function(){const t=M();return function(e,n,r){return h(e,st(e,n),$(t,n,r))}}(),rt=function(){const t=p(),e=M();return function(n,r,o,a){const i=ot(r),f=it(r);return x(e,i,i),c(t,e),s(t,t,f),u(t,t,nt(e,o,a)),u(t,t,[0,a.top-a.bottom]),x(n,t[4],t[5])}}();function ot(t){return t.scale*at(t.targetGeometry)}function at(t){return n(t)&&E(t.spatialReference)?1/(W(t.spatialReference)*U*Q):1}function it(t){return i(t.rotation)||0}function ct(t){return E(t)?W(t)*U*Q:1}function st(t,e){return g(t,e,.5)}const ut=function(){const t=M(),e=M(),n=M();return function(r,o,a,i,c,m){return b(t,o),g(e,a,.5*m),x(n,1/i*m,-1/i*m),f(r,e),c&&s(r,r,c),l(r,r,n),u(r,r,t),r}}(),ft=function(){const t=M();return function(e,n,r,o){const a=ot(n),i=it(n);return T(t,n.targetGeometry),ut(e,t,r,a,i,o)}}(),lt=function(){const t=M();return function(e,n,r,o){const a=ot(n);return T(t,n.targetGeometry),ut(e,t,r,a,0,o)}}();function mt(t){const e=O(t);return e?e.valid[1]-e.valid[0]:0}function yt(t,e){return Math.round(mt(t)/e)}const pt=function(){const t=M(),e=M(),n=[0,0,0];return function(r,o,a){w(t,r,o),d(t,t),w(e,r,a),d(e,e),j(n,t,e);let i=Math.acos(G(t,e)/(R(t)*R(e)))*B;return n[2]<0&&(i=-i),isNaN(i)&&(i=0),i}}(),gt=function(){const t=M();return function(e,n,r,o){const a=e.targetGeometry;return Z(e,n),rt(t,n,r,o),a.x+=t[0],a.y+=t[1],e}}(),xt=function(t,e,n){Z(t,e);const r=t.targetGeometry;return r.x=n.x,r.y=n.y,r.spatialReference=n.spatialReference,t},ht=function(){const t=M();return function(e,n,r,o,a){a||(a="center"),h(t,r,o),g(t,t,.5);const i=t[0],c=t[1];switch(a){case"center":x(t,0,0);break;case"left":x(t,-i,0);break;case"top":x(t,0,c);break;case"right":x(t,i,0);break;case"bottom":x(t,0,-c);break;case"top-left":x(t,-i,c);break;case"bottom-left":x(t,-i,-c);break;case"top-right":x(t,i,c);break;case"bottom-right":x(t,i,-c)}return St(e,n,t),e}}();function bt(t,e,n){return Z(t,e),t.rotation+=n,t}function wt(t,e,n){return Z(t,e),t.rotation=n,t}const dt=function(){const t=M();return function(e,n,r,o,a){return Z(e,n),isNaN(r)||0===r||(At(t,o,n,a),e.scale=n.scale*r,kt(t,t,e,a),St(e,e,x(t,t[0]-o[0],o[1]-t[1]))),e}}();function jt(t,e,n){return Z(t,e),t.scale=n,t}const Gt=function(){const t=M();return function(e,n,r,o,a,i){return Z(e,n),isNaN(r)||0===r||(At(t,a,n,i),e.scale=n.scale*r,e.rotation+=o,kt(t,t,e,i),St(e,e,x(t,t[0]-a[0],a[1]-t[1]))),e}}(),Rt=function(){const t=M(),e=M();return function(n,r,o,a,i,c,s){return nt(e,c,s),A(t,i,e),a?Gt(n,r,o,a,t,c):dt(n,r,o,t,c)}}(),At=function(){const t=p();return function(e,n,r,o){return k(e,n,et(t,r,o,1))}}(),kt=function(){const t=p();return function(e,n,r,o){return k(e,n,ft(t,r,o,1))}}(),St=function(){const t=M(),e=p();return function(n,r,o){Z(n,r);const a=ot(r),i=n.targetGeometry;return m(e,it(r)),l(e,e,v(a,a)),k(t,o,e),i.x+=t[0],i.y+=t[1],n}}();export{gt as addPadding,pt as angleBetween,xt as centerAt,Z as copy,Y as create,H as extentToScale,$ as getAnchor,_ as getExtent,ut as getMatrix,rt as getPaddingMapTranslation,nt as getPaddingScreenTranslation,ot as getResolution,ct as getResolutionToScaleFactor,ft as getTransform,lt as getTransformNoRotation,yt as getWorldScreenWidth,mt as getWorldWidth,Rt as padAndScaleAndRotateBy,ht as resize,bt as rotateBy,wt as rotateTo,Gt as scaleAndRotateBy,jt as scaleTo,tt as setExtent,At as toMap,kt as toScreen,St as translateBy};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.25/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{_ as e}from"../../../../chunks/tslib.es6.js";import"../../../../geometry.js";import{getFeatureId as t}from"../../../../analysis/featureReferenceUtils.js";import o from"../../../../core/Accessor.js";import{createTask as i}from"../../../../core/asyncUtils.js";import n from"../../../../core/Evented.js";import r from"../../../../core/Handles.js";import{handlesGroup as s,makeHandle as a}from"../../../../core/handleUtils.js";import{equals as c}from"../../../../core/lang.js";import l from"../../../../core/Logger.js";import{isNone as u,isSome as p,abortMaybe as d,unwrapOr as h,none as g}from"../../../../core/maybe.js";import{ignoreAbortErrors as m}from"../../../../core/promiseUtils.js";import{watch as v,on as f,syncAndInitial as _,sync as b}from"../../../../core/reactiveUtils.js";import{property as y}from"../../../../core/accessorSupport/decorators/property.js";import"../../../../core/accessorSupport/ensureType.js";import{subclass as C}from"../../../../core/accessorSupport/decorators/subclass.js";import{c as I,i as T,b as P,n as O,g as S,a as j,j as w,w as R}from"../../../../chunks/vec3.js";import{c as A}from"../../../../chunks/vec3f64.js";import{WatchUpdatingTracking as E}from"../../../../core/support/WatchUpdatingTracking.js";import{projectOrLoad as F,projectBoundingRect as L}from"../../../../geometry/projection.js";import{empty as V,containsPointObject as H,intersectsSegment as D}from"../../../../geometry/support/aaBoundingRect.js";import{fromPoints as x,create as N}from"../../../../geometry/support/ray.js";import{zValueInAbsoluteHeightMode as k}from"../../../../support/elevationInfoUtils.js";import{LineOfSightAnalysisResult as z}from"../LineOfSightAnalysisResult.js";import{LineOfSightComputation as G}from"./LineOfSightComputation.js";import{LineOfSightRayIntersector as M}from"./LineOfSightRayIntersector.js";import{logFailedGeometryProjectionError as U}from"../support/projectionUtils.js";import{StoreResults as Z}from"../../webgl-engine/lib/IntersectorInterfaces.js";import{toGraphic as q,hasLod as B,getIntersectedFeatureBSRadius as W}from"../../webgl-engine/lib/intersectorUtilsConversions.js";import{ImmediateTask as J,TaskPriority as K}from"../../../support/Scheduler.js";import Q from"../../../../geometry/Point.js";const X="esri.views.3d.analysis.LineOfSight.LineOfSightController",Y=l.getLogger(X);let $=class extends(n.EventedMixin(o)){constructor(e){super(e),this.updateOnCameraChange=!0,this._effectiveObserverElevationMode="absolute-height",this._observerFeatureId=null,this._updatingHandles=new E,this._frameTask=J,this._handles=new r,this._computationHandles=new r,this._externalObserverUpdate=!0}initialize(){const e=this.view.resourceController?.scheduler;this._frameTask=e?e.registerTask(K.LINE_OF_SIGHT_TOOL):J,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:o,computationResult:i}=t,{observerAdjusted:n,targetAdjusted:r}=o,{start:s,end:a}=i;I(s,n),I(a,r);this._canCompute(t)?this._computeIntersection(e):this._interpolateIntersection(e),t.notifyResultChanged(),this.emit("result-changed",{target:e.computation.target,result:t.result})}_updateAdjustedPointsFromFeatures(e){const o=this.view,{sceneIntersectionHelper:i}=o,{inputPoints:n}=e,{observerAdjusted:r,observerFeatureId:s,targetFeatureId:a,targetAdjusted:c}=n;if(u(s)&&u(a))return;const l=T(r,c),d=this._intersector.intersector,h=x(n.observer,n.target,oe);d.options.store=Z.ALL,i.intersectToolIntersectorRay(h,d);let g=null,m=null,v=null,f=null;for(const _ of d.results.all){const e=q(_,this.view);if(u(e)||u(_.distanceInRenderSpace))continue;const i=t(e);u(i)||(p(s)&&i===s&&(u(g)&&(g=this._getFeatureDistanceThreshold(_,o,l)),_.distanceInRenderSpace<g&&(v=_)),p(a)&&i===a&&(u(m)&&(m=this._getFeatureDistanceThreshold(_,o,l)),u(f)&&_.distanceInRenderSpace<l&&l-_.distanceInRenderSpace<m&&(f=_)))}p(v)&&v.getIntersectionPoint(r)&&(n.observerSurfaceNormal=v.getTransformedNormal(A())),p(f)&&f.getIntersectionPoint(c)&&(n.targetSurfaceNormal=f.getTransformedNormal(A()))}_getFeatureDistanceThreshold(e,t,o){if(B(e)){const i=W(e,t);if(p(i))return Math.min(i*ne,o)}return 1e-5*o}_adjustStartEndPositions(e){const t=this._screenPixelSize,o=this.view,{inputPoints:i}=e,{observer:n,observerSurfaceNormal:r,target:s,targetSurfaceNormal:a,observerAdjusted:c,targetAdjusted:l}=i,u=te;I(c,n),I(l,s),this._updateAdjustedPointsFromFeatures(e),p(r)?I(u,r):P(u,l,c);const d=t;O(u,u),S(u,u,Math.min(d,1)),j(c,c,u),p(a)?I(u,a):P(u,c,l);const h=o.state.camera.computeScreenPixelSizeAt(l);O(u,u),S(u,u,Math.min(h,1)),j(l,l,u)}_computeIntersection({computation:e,interpolationInfo:t}){const{view:o}=this,{sceneIntersectionHelper:i,renderCoordsHelper:n}=o;if(u(i))return;const r=this._intersector.intersector,{computationResult:s,inputPoints:a}=e,{observer:c,target:l}=a,{start:d,end:h}=s,g=x(d,h,oe);r.options.store=Z.MIN,i.intersectToolIntersectorRay(g,r);const m=r.results.min,v=s.intersection,f=te;let _=!0;if(p(m)&&m.getIntersectionPoint(v)){I(t.originalIntersection,v),I(t.originalObserver,d),I(t.originalTarget,h),n.fromRenderCoords(v,f,o.spatialReference);const e=1-w(h,l)/w(d,l);_=w(c,v)>=e*w(c,l)}const b=new Q(f,o.spatialReference);{const{result:t,target:i}=e;p(t)?(t.target=i,t.intersectedGraphic=_?null:q(m,o),t.intersectedLocation=_?null:b,t.visible=_):e.result=new z({target:i,elevationAlignedTargetLocation:e.elevationAlignedTargetLocation,intersectedGraphic:_?null:q(m,o),intersectedLocation:_?null:b,visible:_})}s.isValid=a.isValid=!0,s.isTargetVisible=_}_interpolateIntersection({computation:e,interpolationInfo:t}){const{computationResult:o,inputPoints:i}=e,{start:n,end:r,intersection:s}=o,{originalIntersection:a,originalObserver:c,originalTarget:l}=t;if(I(s,a),i.isValid){const e=te,t=w(c,a)/w(c,l);R(e,n,c),S(e,e,1-t),j(s,s,e),R(e,r,l),S(e,e,t),j(s,s,e),o.isValid=!0}else e.result=null,o.isValid=!1,o.isTargetVisible=!1}_canCompute(e){const t=this.analysisViewData.elevationAlignedObserver,o=this.view.frustum;if(u(t)||u(e.elevationAlignedTargetLocation)||u(o))return!1;const{observerAdjusted:i,targetAdjusted:n}=e.inputPoints,r=o.intersectsPoint(i),s=o.intersectsPoint(n);return r&&s}_onObserverPositionChange(e,o,i,n,r){if(this._externalObserverUpdate=r,u(e))return this.analysisViewData.elevationAlignedObserver=null,void(this._observerFeatureId=null);if(u(o))return U(this.analysis,e.spatialReference,Y),void(this.analysisViewData.elevationAlignedObserver=null);const s=this._getEffectiveElevationInfo(o,i),{absoluteZ:a,elevation:c}=k(o.x,o.y,o.z,this.view.spatialReference,this.view,s),l=o.clone();l.z=a,this._effectiveObserverElevationMode=s.mode,this.analysisViewData.elevationAlignedObserver=l;const p=A();this.view.renderCoordsHelper.toRenderCoords(l,p),this._elevationAlignedObserverPositionRenderSpace=p,this._observerGroundOffsetRenderSpace=a-c,this._observerFeatureId=t(n),this.priority=K.LINE_OF_SIGHT_TOOL_INTERACTIVE}_onObserverRenderSpacePositionChangeForComputation(e,t,o,i,n){const{inputPoints:r}=e;switch(I(r.observer,t),r.observerFeatureId=n,r.observerSurfaceNormal=null,i){case"on-the-ground":case"relative-to-ground":{const e=this._intersector.updateFromGroundIntersection(r.observer,o,r.observer);u(r.observerFeatureId)&&(r.observerSurfaceNormal=e)}}this._adjustStartEndPositions(e),e.notifyInputPointsChanged(),this.priority=K.LINE_OF_SIGHT_TOOL_INTERACTIVE}_onTargetPositionChange(e,o,i,n,r,s=!0){const a=e.inputPoints;if(s&&(a.isValid=!1),u(i))return p(o)&&U(this.analysis,o.spatialReference,Y),e.elevationAlignedTargetLocation=null,void e.notifyInputPointsChanged();const c=this._getEffectiveElevationInfo(i,n),{absoluteZ:l,elevation:d}=k(i.x,i.y,i.z,this.view.spatialReference,this.view,c),h=i.clone();switch(h.z=l,e.elevationAlignedTargetLocation=h,this.view.renderCoordsHelper.toRenderCoords(e.elevationAlignedTargetLocation,a.target),a.targetFeatureId=t(r),a.targetSurfaceNormal=null,c.mode){case"on-the-ground":case"relative-to-ground":{const e=this._intersector.updateFromGroundIntersection(a.target,l-d,a.target);u(a.targetFeatureId)&&(a.targetSurfaceNormal=e)}}this._adjustStartEndPositions(e),e.notifyInputPointsChanged(),this.priority=K.LINE_OF_SIGHT_TOOL_INTERACTIVE}_connectComputationToTarget(e){return s([v((()=>({computation:e,targetPosition:e.target.position,targetElevationInfo:e.target.elevationInfo,targetFeatureInfo:e.target.feature,projectedTargetPosition:F(e.target.position,this.view.spatialReference)})),(({computation:e,targetPosition:t,targetElevationInfo:o,targetFeatureInfo:i,projectedTargetPosition:n})=>{p(n.pending)?this._updatingHandles.addPromise(n.pending):this._onTargetPositionChange(e,t,n.geometry,o,i)}),_)])}_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,observerGroundOffset:this._observerGroundOffsetRenderSpace,observerElevationMode:this._effectiveObserverElevationMode,observerFeatureId:this._observerFeatureId})),(({computation:e,observer:t,observerGroundOffset:o,observerElevationMode:i,observerFeatureId:n})=>{this._onObserverRenderSpacePositionChangeForComputation(e,t,o,i,n)}),_)}_connectComputationToCamera(e){return v((()=>({camera:this.view.state.camera,isDirty:this._isCameraDirty})),(({isDirty:t})=>{!this.updateOnCameraChange||e.inputPoints.isValid&&!t||e.notifyInputPointsChanged()}),b)}_connectComputationToSlicePlane(e){return v((()=>this.view.slicePlane),(()=>{e.inputPoints.isValid=!1,e.notifyInputPointsChanged()}))}_connectComputationToElevation(e){const t=(o,i)=>{const n=this.analysis.observer,r=e.target;let s=null,a=null,c=null,l=null,d=null,h=null;if(p(n)&&p(n.position)){const e=F(n.position,this.view.spatialReference);if(p(e.pending))return this._updatingHandles.addPromise(e.pending),void e.pending.finally((()=>t(o,i)));s=e.geometry,a=n.elevationInfo,c=n.feature}if(p(r.position)){const e=F(r.position,this.view.spatialReference);if(p(e.pending))return this._updatingHandles.addPromise(e.pending),void e.pending.finally((()=>t(o,i)));l=e.geometry,d=r.elevationInfo,h=r.feature}u(s)&&u(l)||(L(o,i,ie,this.view.spatialReference),p(s)&&H(ie,s)&&this._onObserverPositionChange(p(n)?n.position:null,s,a,c,!1),p(l)&&H(ie,l)&&this._onTargetPositionChange(e,r.position,l,d,h,!1),p(s)&&p(l)&&D(ie,s,l)&&e.notifyInputPointsChanged())};return this.view.elevationProvider.on("elevation-change",(e=>t(e.extent,e.spatialReference)))}_connectComputationToTask(e){let t=g;const o={computation:e,interpolationInfo:{originalIntersection:A(),originalObserver:A(),originalTarget:A()}};return s([v((()=>this.getLineOfSightComputationDependencies(e)),(()=>{t=d(t),t=i((async e=>{await m(this._frameTask.schedule((()=>this._computeResult(o)),e))}))}),{sync:!0,initial:!0,equals:c}),a((()=>t=d(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)}_disconnectComputation(e){this._computationHandles.remove(e)}_onComputationCollectionChange({added:e,removed:t}){for(const o of t)this._disconnectComputation(o);for(const o of e)this._connectComputation(o)}_onTargetCollectionChange({added:e,removed:t}){for(const o of t)this._removeTarget(o);for(const o of e)this._addTarget(o)}_onCursorTargetChange(e,t){p(t)&&this._removeTarget(t),p(e)&&this._addTarget(e)}_addTarget(e){this._computations.some((t=>t.target===e))||this._computations.add(new G({target:e}))}_removeTarget(e){const t=this._computations.findIndex((t=>t.target===e));this._computations.removeAt(t)}_connectObserver(){return s([v((()=>({observerPosition:p(this.analysis.observer)?this.analysis.observer.position:null,projectedObserverPosition:F(p(this.analysis.observer)?this.analysis.observer.position:null,this.view.spatialReference),observerElevationInfo:p(this.analysis.observer)?this.analysis.observer.elevationInfo:null,observerFeatureInfo:p(this.analysis.observer)?this.analysis.observer.feature:null})),(({observerPosition:e,projectedObserverPosition:t,observerElevationInfo:o,observerFeatureInfo:i})=>{p(t.pending)?this._updatingHandles.addPromise(t.pending):this._onObserverPositionChange(e,t.geometry,o,i,!0)}),_)])}_connectComputations(){return f((()=>this._computations),"change",(e=>this._onComputationCollectionChange(e)),{onListenerAdd:e=>{for(const t of e)this._connectComputation(t)},onListenerRemove:e=>{for(const t of e)this._disconnectComputation(t)},sync:!0})}_connectTargets(){return s([this._updatingHandles.addOnCollectionChange((()=>this.analysis.targets),(e=>this._onTargetCollectionChange(e)),{initial:!0,final:!0}),v((()=>this.analysisViewData.cursorTarget),((e,t)=>{this._onCursorTargetChange(e,t)}))])}get _isCameraDirty(){const e=this.analysisViewData.elevationAlignedObserver,{view:t}=this,{renderCoordsHelper:o}=t;if(u(e)||u(o))return!1;const i=te;o.toRenderCoords(e,i);const n=t.state.camera.computeScreenPixelSizeAt(i);return Math.abs((n-this._screenPixelSize)/this._screenPixelSize)>ee}_getEffectiveElevationInfo(e,t){return e.hasZ?h(t,{mode:"absolute-height",offset:0}):{mode:"on-the-ground",offset:0}}};e([y({constructOnly:!0})],$.prototype,"analysis",void 0),e([y({constructOnly:!0})],$.prototype,"analysisViewData",void 0),e([y({constructOnly:!0})],$.prototype,"view",void 0),e([y()],$.prototype,"updating",null),e([y()],$.prototype,"priority",null),e([y()],$.prototype,"updateOnCameraChange",void 0),e([y()],$.prototype,"_computations",null),e([y()],$.prototype,"_elevationAlignedObserverPositionRenderSpace",null),e([y()],$.prototype,"_observerGroundOffsetRenderSpace",void 0),e([y()],$.prototype,"_effectiveObserverElevationMode",void 0),e([y()],$.prototype,"_observerFeatureId",void 0),e([y()],$.prototype,"_screenPixelSize",null),e([y({readOnly:!0})],$.prototype,"_updatingHandles",void 0),e([y()],$.prototype,"_frameTask",void 0),e([y()],$.prototype,"_isCameraDirty",null),$=e([C(X)],$);const ee=.1,te=A(),oe=N(),ie=V(),ne=.05;export{$ as LineOfSightController};
|
|
5
|
+
import{_ as e}from"../../../../chunks/tslib.es6.js";import"../../../../geometry.js";import{getFeatureId as t}from"../../../../analysis/featureReferenceUtils.js";import o from"../../../../core/Accessor.js";import{createTask as i}from"../../../../core/asyncUtils.js";import n from"../../../../core/Evented.js";import r from"../../../../core/Handles.js";import{handlesGroup as s,makeHandle as a}from"../../../../core/handleUtils.js";import l from"../../../../core/Logger.js";import{isNone as c,isSome as d,abortMaybe as u,unwrapOr as p,none as h}from"../../../../core/maybe.js";import{ignoreAbortErrors as g}from"../../../../core/promiseUtils.js";import{initial as v}from"../../../../core/reactiveUtils.js";import{property as m}from"../../../../core/accessorSupport/decorators/property.js";import"../../../../core/arrayUtils.js";import"../../../../core/has.js";import"../../../../core/accessorSupport/ensureType.js";import{subclass as f}from"../../../../core/accessorSupport/decorators/subclass.js";import{c as _,i as b,b as y,n as C,g as I,a as T,j as P,w as O}from"../../../../chunks/vec3.js";import{c as S}from"../../../../chunks/vec3f64.js";import{WatchUpdatingTracking as j}from"../../../../core/support/WatchUpdatingTracking.js";import{projectOrLoad as w,projectBoundingRect as R}from"../../../../geometry/projection.js";import{empty as A,containsPointObject as E,intersectsSegment as H}from"../../../../geometry/support/aaBoundingRect.js";import{fromPoints as F,create as L}from"../../../../geometry/support/ray.js";import{zValueInAbsoluteHeightMode as V}from"../../../../support/elevationInfoUtils.js";import{LineOfSightAnalysisResult as D}from"../LineOfSightAnalysisResult.js";import{LineOfSightComputation as x}from"./LineOfSightComputation.js";import{LineOfSightRayIntersector as N}from"./LineOfSightRayIntersector.js";import{logFailedGeometryProjectionError as k}from"../support/projectionUtils.js";import{StoreResults as z}from"../../webgl-engine/lib/IntersectorInterfaces.js";import{toGraphic as G,hasLod as U,getIntersectedFeatureBSRadius as M}from"../../webgl-engine/lib/intersectorUtilsConversions.js";import{ImmediateTask as Z,TaskPriority as q}from"../../../support/Scheduler.js";import B from"../../../../geometry/Point.js";const W="esri.views.3d.analysis.LineOfSight.LineOfSightController",J=l.getLogger(W);let K=class extends(n.EventedMixin(o)){constructor(e){super(e),this.updateOnCameraChange=!0,this._effectiveObserverElevationMode="absolute-height",this._observerFeatureId=null,this._updatingHandles=new j,this._frameTask=Z,this._handles=new r,this._computationHandles=new r,this._externalObserverUpdate=!0}initialize(){const e=this.view.resourceController?.scheduler;this._frameTask=e?e.registerTask(q.LINE_OF_SIGHT_TOOL):Z,this._intersector=new N({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)}_computeResult(e){const t=e.computation,{inputPoints:o,computationResult:i}=t,{observerAdjusted:n,targetAdjusted:r}=o,{start:s,end:a}=i;_(s,n),_(a,r);this._canCompute(t)?this._computeIntersection(e):this._interpolateIntersection(e),t.notifyResultChanged(),this.emit("result-changed",{target:e.computation.target,result:t.result})}_updateAdjustedPointsFromFeatures(e){const o=this.view,{sceneIntersectionHelper:i}=o,{inputPoints:n}=e,{observerAdjusted:r,observerFeatureId:s,targetFeatureId:a,targetAdjusted:l}=n;if(c(s)&&c(a))return;const u=b(r,l),p=this._intersector.intersector,h=F(n.observer,n.target,Y);p.options.store=z.ALL,i.intersectToolIntersectorRay(h,p);let g=null,v=null,m=null,f=null;for(const _ of p.results.all){const e=G(_,this.view);if(c(e)||c(_.distanceInRenderSpace))continue;const i=t(e);c(i)||(d(s)&&i===s&&(c(g)&&(g=this._getFeatureDistanceThreshold(_,o,u)),_.distanceInRenderSpace<g&&(m=_)),d(a)&&i===a&&(c(v)&&(v=this._getFeatureDistanceThreshold(_,o,u)),c(f)&&_.distanceInRenderSpace<u&&u-_.distanceInRenderSpace<v&&(f=_)))}d(m)&&m.getIntersectionPoint(r)&&(n.observerSurfaceNormal=m.getTransformedNormal(S())),d(f)&&f.getIntersectionPoint(l)&&(n.targetSurfaceNormal=f.getTransformedNormal(S()))}_getFeatureDistanceThreshold(e,t,o){if(U(e)){const i=M(e,t);if(d(i))return Math.min(i*ee,o)}return 1e-5*o}_adjustStartEndPositions(e){const t=this._screenPixelSize,o=this.view,{inputPoints:i}=e,{observer:n,observerSurfaceNormal:r,target:s,targetSurfaceNormal:a,observerAdjusted:l,targetAdjusted:c}=i,u=X;_(l,n),_(c,s),this._updateAdjustedPointsFromFeatures(e),d(r)?_(u,r):y(u,c,l);const p=t;C(u,u),I(u,u,Math.min(p,1)),T(l,l,u),d(a)?_(u,a):y(u,l,c);const h=o.state.camera.computeScreenPixelSizeAt(c);C(u,u),I(u,u,Math.min(h,1)),T(c,c,u)}_computeIntersection({computation:e,interpolationInfo:t}){const{view:o}=this,{sceneIntersectionHelper:i,renderCoordsHelper:n}=o;if(c(i))return;const r=this._intersector.intersector,{computationResult:s,inputPoints:a}=e,{observer:l,target:u}=a,{start:p,end:h}=s,g=F(p,h,Y);r.options.store=z.MIN,i.intersectToolIntersectorRay(g,r);const v=r.results.min,m=s.intersection,f=X;let b=!0;if(d(v)&&v.getIntersectionPoint(m)){_(t.originalIntersection,m),_(t.originalObserver,p),_(t.originalTarget,h),n.fromRenderCoords(m,f,o.spatialReference);const e=1-P(h,u)/P(p,u);b=P(l,m)>=e*P(l,u)}const y=new B(f,o.spatialReference);{const{result:t,target:i}=e;d(t)?(t.target=i,t.intersectedGraphic=b?null:G(v,o),t.intersectedLocation=b?null:y,t.visible=b):e.result=new D({target:i,elevationAlignedTargetLocation:e.elevationAlignedTargetLocation,intersectedGraphic:b?null:G(v,o),intersectedLocation:b?null:y,visible:b})}s.isValid=a.isValid=!0,s.isTargetVisible=b}_interpolateIntersection({computation:e,interpolationInfo:t}){const{computationResult:o,inputPoints:i}=e,{start:n,end:r,intersection:s}=o,{originalIntersection:a,originalObserver:l,originalTarget:c}=t;if(_(s,a),i.isValid){const e=X,t=P(l,a)/P(l,c);O(e,n,l),I(e,e,1-t),T(s,s,e),O(e,r,c),I(e,e,t),T(s,s,e),o.isValid=!0}else e.result=null,o.isValid=!1,o.isTargetVisible=!1}_canCompute(e){const t=this.analysisViewData.elevationAlignedObserver,o=this.view.frustum;if(c(t)||c(e.elevationAlignedTargetLocation)||c(o))return!1;const{observerAdjusted:i,targetAdjusted:n}=e.inputPoints,r=o.intersectsPoint(i),s=o.intersectsPoint(n);return r&&s}_onObserverPositionChange(e,o,i,n,r){if(this._externalObserverUpdate=r,c(e))return this.analysisViewData.elevationAlignedObserver=null,void(this._observerFeatureId=null);if(c(o))return k(this.analysis,e.spatialReference,J),void(this.analysisViewData.elevationAlignedObserver=null);const s=this._getEffectiveElevationInfo(o,i),{absoluteZ:a,elevation:l}=V(o.x,o.y,o.z,this.view.spatialReference,this.view,s),d=o.clone();d.z=a,this._effectiveObserverElevationMode=s.mode,this.analysisViewData.elevationAlignedObserver=d;const u=S();this.view.renderCoordsHelper.toRenderCoords(d,u),this._elevationAlignedObserverPositionRenderSpace=u,this._observerGroundOffsetRenderSpace=a-l,this._observerFeatureId=t(n),this.priority=q.LINE_OF_SIGHT_TOOL_INTERACTIVE}_onObserverRenderSpacePositionChangeForComputation(e,t,o,i,n){const{inputPoints:r}=e;switch(_(r.observer,t),r.observerFeatureId=n,r.observerSurfaceNormal=null,i){case"on-the-ground":case"relative-to-ground":{const e=this._intersector.updateFromGroundIntersection(r.observer,o,r.observer);c(r.observerFeatureId)&&(r.observerSurfaceNormal=e)}}this._adjustStartEndPositions(e),e.notifyInputPointsChanged(),this.priority=q.LINE_OF_SIGHT_TOOL_INTERACTIVE}_onTargetPositionChange(e,o,i,n,r,s=!0){const a=e.inputPoints;if(s&&(a.isValid=!1),c(i))return d(o)&&k(this.analysis,o.spatialReference,J),e.elevationAlignedTargetLocation=null,void e.notifyInputPointsChanged();const l=this._getEffectiveElevationInfo(i,n),{absoluteZ:u,elevation:p}=V(i.x,i.y,i.z,this.view.spatialReference,this.view,l),h=i.clone();switch(h.z=u,e.elevationAlignedTargetLocation=h,this.view.renderCoordsHelper.toRenderCoords(e.elevationAlignedTargetLocation,a.target),a.targetFeatureId=t(r),a.targetSurfaceNormal=null,l.mode){case"on-the-ground":case"relative-to-ground":{const e=this._intersector.updateFromGroundIntersection(a.target,u-p,a.target);c(a.targetFeatureId)&&(a.targetSurfaceNormal=e)}}this._adjustStartEndPositions(e),e.notifyInputPointsChanged(),this.priority=q.LINE_OF_SIGHT_TOOL_INTERACTIVE}_connectComputationToTarget(e){return s([this._updatingHandles.add((()=>({computation:e,targetPosition:e.target.position,targetElevationInfo:e.target.elevationInfo,targetFeatureInfo:e.target.feature,projectedTargetPosition:w(e.target.position,this.view.spatialReference)})),(({computation:e,targetPosition:t,targetElevationInfo:o,targetFeatureInfo:i,projectedTargetPosition:n})=>{d(n.pending)?this._updatingHandles.addPromise(n.pending):this._onTargetPositionChange(e,t,n.geometry,o,i)}),v)])}_connectComputationToObserver(e){return this._updatingHandles.add((()=>({computation:e,observer:this.analysisViewData.elevationAlignedObserver})),(({computation:e})=>{this._externalObserverUpdate&&(e.inputPoints.isValid=!1,e.notifyInputPointsChanged())}),v)}_connectComputationToRenderSpaceObserver(e){return this._updatingHandles.add((()=>({computation:e,observer:this._elevationAlignedObserverPositionRenderSpace,observerGroundOffset:this._observerGroundOffsetRenderSpace,observerElevationMode:this._effectiveObserverElevationMode,observerFeatureId:this._observerFeatureId})),(({computation:e,observer:t,observerGroundOffset:o,observerElevationMode:i,observerFeatureId:n})=>{this._onObserverRenderSpacePositionChangeForComputation(e,t,o,i,n)}),v)}_connectComputationToCamera(e){return this._updatingHandles.add((()=>({camera:this.view.state.camera,isDirty:this._isCameraDirty})),(({isDirty:t})=>{!this.updateOnCameraChange||e.inputPoints.isValid&&!t||e.notifyInputPointsChanged()}))}_connectComputationToSlicePlane(e){return this._updatingHandles.add((()=>this.view.slicePlane),(()=>{e.inputPoints.isValid=!1,e.notifyInputPointsChanged()}))}_connectComputationToElevation(e){const t=(o,i)=>{const n=this.analysis.observer,r=e.target;let s=null,a=null,l=null,u=null,p=null,h=null;if(d(n)&&d(n.position)){const e=w(n.position,this.view.spatialReference);if(d(e.pending))return this._updatingHandles.addPromise(e.pending),void e.pending.finally((()=>t(o,i)));s=e.geometry,a=n.elevationInfo,l=n.feature}if(d(r.position)){const e=w(r.position,this.view.spatialReference);if(d(e.pending))return this._updatingHandles.addPromise(e.pending),void e.pending.finally((()=>t(o,i)));u=e.geometry,p=r.elevationInfo,h=r.feature}c(s)&&c(u)||(R(o,i,$,this.view.spatialReference),d(s)&&E($,s)&&this._onObserverPositionChange(d(n)?n.position:null,s,a,l,!1),d(u)&&E($,u)&&this._onTargetPositionChange(e,r.position,u,p,h,!1),d(s)&&d(u)&&H($,s,u)&&e.notifyInputPointsChanged())};return this.view.elevationProvider.on("elevation-change",(e=>t(e.extent,e.spatialReference)))}_connectComputationToTask(e){let t=h;const o={computation:e,interpolationInfo:{originalIntersection:S(),originalObserver:S(),originalTarget:S()}};return s([this._updatingHandles.add((()=>e.inputPoints),(()=>{t=u(t),t=i((async e=>{await g(this._frameTask.schedule((()=>this._computeResult(o)),e))}))}),{initial:!0,equals:()=>!1}),a((()=>t=u(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)}_disconnectComputation(e){this._computationHandles.remove(e)}_onComputationCollectionChange({added:e,removed:t}){for(const o of t)this._disconnectComputation(o);for(const o of e)this._connectComputation(o)}_onTargetCollectionChange({added:e,removed:t}){for(const o of t)this._removeTarget(o);for(const o of e)this._addTarget(o)}_onCursorTargetChange(e,t){d(t)&&this._removeTarget(t),d(e)&&this._addTarget(e)}_addTarget(e){this._computations.some((t=>t.target===e))||this._computations.add(new x({target:e}))}_removeTarget(e){const t=this._computations.findIndex((t=>t.target===e));this._computations.removeAt(t)}_connectObserver(){return s([this._updatingHandles.add((()=>({observerPosition:d(this.analysis.observer)?this.analysis.observer.position:null,projectedObserverPosition:w(d(this.analysis.observer)?this.analysis.observer.position:null,this.view.spatialReference),observerElevationInfo:d(this.analysis.observer)?this.analysis.observer.elevationInfo:null,observerFeatureInfo:d(this.analysis.observer)?this.analysis.observer.feature:null})),(({observerPosition:e,projectedObserverPosition:t,observerElevationInfo:o,observerFeatureInfo:i})=>{d(t.pending)?this._updatingHandles.addPromise(t.pending):this._onObserverPositionChange(e,t.geometry,o,i,!0)}),v)])}_connectComputations(){return this._updatingHandles.addOnCollectionChange((()=>this._computations),(e=>this._onComputationCollectionChange(e)),{initial:!0,final:!0})}_connectTargets(){return s([this._updatingHandles.addOnCollectionChange((()=>this.analysis.targets),(e=>this._onTargetCollectionChange(e)),{initial:!0,final:!0}),this._updatingHandles.add((()=>this.analysisViewData.cursorTarget),((e,t)=>{this._onCursorTargetChange(e,t)}))])}get _isCameraDirty(){const e=this.analysisViewData.elevationAlignedObserver,{view:t}=this,{renderCoordsHelper:o}=t;if(c(e)||c(o))return!1;const i=X;o.toRenderCoords(e,i);const n=t.state.camera.computeScreenPixelSizeAt(i);return Math.abs((n-this._screenPixelSize)/this._screenPixelSize)>Q}_getEffectiveElevationInfo(e,t){return e.hasZ?p(t,{mode:"absolute-height",offset:0}):{mode:"on-the-ground",offset:0}}};e([m({constructOnly:!0})],K.prototype,"analysis",void 0),e([m({constructOnly:!0})],K.prototype,"analysisViewData",void 0),e([m({constructOnly:!0})],K.prototype,"view",void 0),e([m()],K.prototype,"updating",null),e([m()],K.prototype,"priority",null),e([m()],K.prototype,"updateOnCameraChange",void 0),e([m()],K.prototype,"_computations",null),e([m()],K.prototype,"_elevationAlignedObserverPositionRenderSpace",null),e([m()],K.prototype,"_observerGroundOffsetRenderSpace",void 0),e([m()],K.prototype,"_effectiveObserverElevationMode",void 0),e([m()],K.prototype,"_observerFeatureId",void 0),e([m()],K.prototype,"_screenPixelSize",null),e([m({readOnly:!0})],K.prototype,"_updatingHandles",void 0),e([m()],K.prototype,"_frameTask",void 0),e([m()],K.prototype,"_isCameraDirty",null),K=e([f(W)],K);const Q=.1,X=S(),Y=L(),$=A(),ee=.05;export{K 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.25/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 e}from"../../../../core/maybe.js";import{property as i}from"../../../../core/accessorSupport/decorators/property.js";import"../../../../core/accessorSupport/ensureType.js";import{subclass as p}from"../../../../core/accessorSupport/decorators/subclass.js";import{z as n}from"../../../../chunks/vec3.js";import{a as c}from"../../../../chunks/vec3f64.js";import{equals as a}from"../../../../geometry/support/ray.js";var m;let y=m=class extends o{constructor(r){super(r)}clone(){return new m({type:this.type,id:s(this.id),mapPoint:s(this.mapPoint),renderPoint:c(this.renderPoint),normal:s(this.normal),ray:s(this.ray),graphic:this.graphic})}equals(r){return this.type===r.type&&this.id===r.id&&e(this.mapPoint,r.mapPoint)&&n(this.renderPoint,r.renderPoint)&&t(this.normal,r.normal)&&a(this.ray,r.ray)&&this.graphic===r.graphic}};r([i()],y.prototype,"type",void 0),r([i({constructOnly:!0})],y.prototype,"id",void 0),r([i({constructOnly:!0})],y.prototype,"mapPoint",void 0),r([i({constructOnly:!0})],y.prototype,"renderPoint",void 0),r([i({constructOnly:!0})],y.prototype,"normal",void 0),r([i({constructOnly:!0})],y.prototype,"graphic",void 0),r([i({constructOnly:!0})],y.prototype,"ray",void 0),y=m=r([p("esri.views.3d.analysis.LineOfSight.LineOfSightIntersectionResult")],y);export{y 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.25/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{_ as e}from"../../../../chunks/tslib.es6.js";import r from"../../../../core/Accessor.js";import{isNone as t,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{c,n as a,g as p,a as
|
|
5
|
+
import{_ as e}from"../../../../chunks/tslib.es6.js";import r from"../../../../core/Accessor.js";import{isNone as t,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{c,n as a,g as p,a as m}from"../../../../chunks/vec3.js";import{a as l,c as d}from"../../../../chunks/vec3f64.js";import{create as u,copy as h,fromPoints as f}from"../../../../geometry/support/ray.js";import{sv2d as y}from"../../../../geometry/support/vectorStacks.js";import{getObjectId as g}from"../../../../layers/graphics/dehydratedFeatures.js";import{LineOfSightIntersectionResult as I}from"./LineOfSightIntersectionResult.js";import{isI3sIntersectorResult as j}from"../../layers/i3s/Intersector.js";import{fromScreen as w}from"../../support/geometryUtils/ray.js";import{isTerrainIntersectorResult as v}from"../../terrain/Intersector.js";import{newIntersector as b}from"../../webgl-engine/lib/Intersector.js";import{StoreResults as P,IntersectorType as R}from"../../webgl-engine/lib/IntersectorInterfaces.js";import{toGraphic as S}from"../../webgl-engine/lib/intersectorUtilsConversions.js";let U=class extends r{constructor(e){super(e),this._terrainIntersectionOptionsLayerUids=new Set(["terrain"])}initialize(){this.intersector=b(this.view.state.viewingMode),this.intersector.options.hud=!1,this.intersector.options.store=P.MIN}getScreenPointIntersection(e){const r=o(e,y.get()),t=w(this.view.state.camera,r,_);return this._getRayIntersection(t)}_getRayIntersection(e,r){if(t(e)||t(this.view.sceneIntersectionHelper))return null;this.intersector.options.store=P.MIN,this.view.sceneIntersectionHelper.intersectToolIntersectorRay(e,this.intersector,r);const o=this.intersector.results.min,i=d();if(!o.getIntersectionPoint(i))return null;const n=this.view.renderCoordsHelper.fromRenderCoords(i,this.view.spatialReference),c=l(o.normal);if(j(o))return new I({type:R.OBJECT,id:`${o.target.layerUid}/${o.target.nodeIndex}/${o.target.componentIndex}`,mapPoint:n,renderPoint:i,normal:c,ray:h(e),graphic:null});if(v(o))return new I({type:R.TERRAIN,id:o.target.lij.slice(),mapPoint:n,renderPoint:i,normal:c,ray:h(e),graphic:null});const a=S(o,this.view);if(s(a)){const r=a.layer,t=a.sourceLayer;let s;if(t)if("scene"===t.type)s=g(a,t.objectIdField);else s=a.uid;else s=a.uid;return new I({type:R.OBJECT,id:`${r.uid}/${s}`,mapPoint:n,renderPoint:i,normal:c,ray:h(e),graphic:a})}return null}updateFromGroundIntersection(e,r,t){const o=O,i=C,n=L,d=T;c(i,e),this.view.renderCoordsHelper.worldUpAtPosition(i,n),a(n,n);const u=this.view.basemapTerrain.elevationBounds,h=u?Math.abs(u.max-u.min):100,y=r>=0?1:-1;p(d,n,y*(h+Math.abs(r))),m(o,i,d),f(o,i,_);const g=this._getRayIntersection(_,{include:this._terrainIntersectionOptionsLayerUids});return s(g)?(p(d,n,y*r),m(t,g.renderPoint,d),l(g.normal)):(c(t,e),null)}};e([i()],U.prototype,"view",void 0),e([i()],U.prototype,"intersector",void 0),U=e([n("esri.views.3d.analysis.LineOfSight.LineOfSightRayIntersector")],U);const O=d(),C=d(),L=d(),T=d(),_=u();export{U 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.25/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 n from"../../../../core/Logger.js";import{destroyMaybe as o,isSome as l,isNone as c,applySome as u}from"../../../../core/maybe.js";import{watch as h,syncAndInitial as p,sync as d,on as g}from"../../../../core/reactiveUtils.js";import{property as m}from"../../../../core/accessorSupport/decorators/property.js";import"../../../../core/arrayUtils.js";import"../../../../core/has.js";import"../../../../core/accessorSupport/ensureType.js";import{subclass as _}from"../../../../core/accessorSupport/decorators/subclass.js";import{create as v,fromPoints as b}from"../../../../geometry/support/lineSegment.js";import{getGraphicEffectiveElevationInfo as y,getConvertedElevation as f}from"../../../../support/elevationInfoUtils.js";import T from"../../../../symbols/support/ElevationInfo.js";import{LineOfSightRayIntersector as C}from"./LineOfSightRayIntersector.js";import{LineOfSightToolConfiguration as w}from"./LineOfSightToolConfiguration.js";import{createSphereManipulator as M,createSphereManipulatorRenderObjects as L}from"./lineOfSightToolUtils.js";import{LaserlineVisualElement as k}from"../../interactive/visualElements/LaserlineVisualElement.js";import{IntersectorType as V}from"../../webgl-engine/lib/IntersectorInterfaces.js";import"../../../input/ViewEvents.js";import{AnalysisToolBase as S}from"../../../interactive/AnalysisToolBase.js";import{createManipulatorDragEventPipeline as O}from"../../../interactive/dragEventPipeline.js";import{ManipulatorStateCustomFlags as D}from"../../../interactive/interfaces.js";import{createScreenPointFromEvent as E}from"../../../support/screenUtils.js";import{MouseButton as I}from"../../../input/IViewEvents.js";var R;!function(e){e.Ready="ready",e.Creating="creating",e.Created="created"}(R||(R={}));const j=a.ofType(r);let P=class extends S{constructor(e){super(e),this.removeIncompleteOnCancel=!1,this.configuration=new w,this.analysisViewData=null,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(h((()=>this.state),(e=>{e===R.Created&&this.finishToolCreation()}),p)),this._observerManipulator=this._createObserverManipulator(),this._handles.add([h((()=>({...this.configuration.observer})),(()=>this._updateObserverManipulatorStyle()),d),h((()=>this.analysisViewData.elevationAlignedObserver),(e=>this._onObserverLocationChange(e)),p),h((()=>({...this.configuration.laserLine})),(()=>this._createVisualElements()),p),h((()=>this._laserLineRendererDependencies()),(e=>this._updateLaserLineRenderer(e))),this._connectComputations()])}destroy(){this._handles=o(this._handles),this._manipulatorHandles=o(this._manipulatorHandles),this._analysisHandles=o(this._analysisHandles),this._observerManipulator=null,this._clearCursorTracker(),this._removeVisualElements(),this._intersector=null,this._set("analysis",null)}get state(){return this.active?l(this._grabbedManipulator)?R.Created:R.Creating:l(this.analysis.observer)&&l(this.analysis.observer.position)?R.Created:R.Ready}get cursor(){return this.active&&this._showTracker?"crosshair":null}get updating(){return!!l(this.analysisViewData)&&this.analysisViewData.updating}get _showTracker(){return this.active&&"mouse"===this._latestPointerMovePointerType}get _shouldRenderTracker(){return this._showTracker&&l(this.analysis.observer)&&l(this.analysis.observer.position)&&!this.hasFocusedManipulators}continue(){this.view.activeTool=this}stop(){this.view.activeTool=null}onEditableChange(){this.analysisViewData.editable=this.internallyEditable}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(){}onHide(){}onDeactivate(){this._clearCursorTracker()}_connectComputations(){return g((()=>this.analysisViewData.computations),"change",(e=>this._onComputationsCollectionChange(e)),{onListenerAdd:e=>{for(const t of e)this._connectComputation(t)},onListenerRemove:e=>{for(const t of e)this._disconnectComputation(t)},sync:!0})}_onComputationsCollectionChange({added:e,removed:t}){for(const i of t)this._disconnectComputation(i);for(const i of e)this._connectComputation(i)}_connectComputation(e){if(this.destroyed)return void n.getLogger(this.declaredClass).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);c(this._targetTrackerManipulator)&&i.metadata.target===this.analysisViewData.cursorTarget&&(this._targetTrackerManipulator=i,this._targetTrackerManipulator.available=!1,this._targetTrackerManipulator.interactive=!1,this._updateLaserLineRenderer()),t.add([h((()=>this._getLineOfSightManipulatorStateDependencies(e)),(()=>this._updateManipulatorState(i,e)),p),h((()=>e.elevationAlignedTargetLocation),(e=>this._onTargetLocationChange(e,i)),p)],e)}_disconnectComputation(e){if(this.destroyed)return void n.getLogger(this.declaredClass).warn("Attempting to disconnect an analysis from a destroyed LineOfSight tool. Ignoring.");this._analysisHandles.remove(e);const t=this._getTargetManipulator(e.target);l(t)&&(this.manipulators.remove(t),this._manipulatorHandles.remove(t),l(this._targetTrackerManipulator)&&this._targetTrackerManipulator===t&&(this._targetTrackerManipulator=null))}_clearCursorTracker(){this.analysisViewData.cursorTarget=o(this.analysisViewData.cursorTarget)}_createManipulator(e,t,i){const r=M(this.view,e);return r.metadata=i,this._manipulatorHandles.add([t(r),r.events.on("grab-changed",(e=>this._manipulatorGrabChanged(r,e))),r.events.on("immediate-click",(e=>this._manipulatorClick(r,e)))],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 l(e.position)?a.elevationAlignedLocation=e.position:a.available=!1,a}_getTargetManipulator(e){let t=null;return this.manipulators.forEach((i=>{const r=i.manipulator;c(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=L(i)}_screenToIntersection(){return e=>{const t=this._intersector.getScreenPointIntersection(e.screenEnd);return c(t)?null:{...e,intersection:t}}}_createTargetManipulatorDragPipeline(e){return O(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 O(e,((e,t,i)=>{t.next(this._screenToIntersection()).next(this._updateObserverDragStep()).next((()=>this._updateLaserLineRenderer())),i.next(this._cancelObserverDragStep()).next((()=>this._updateLaserLineRenderer()))}))}_updateObserverDragStep(){return e=>(l(e.intersection.point)?(c(this.analysis.observer)&&(this.analysis.observer=new i),this._updateFromIntersection(this.analysis.observer,e.intersection)):this.analysis.observer=null,e)}_cancelObserverDragStep(){const e=l(this.analysis.observer)&&l(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 l(i)&&(e.elevationAlignedLocation=i),t}}_cancelTargetDragStep(e){const t=u(e.position,(e=>e.clone()));return i=>(e.position=t,i)}_manipulatorGrabChanged(e,t){switch(t.action){case"start":this._grabbedManipulator=e;break;case"end":this._grabbedManipulator===e&&(this._grabbedManipulator=null)}}_updateManipulatorState(e,t){const{isValid:i,isTargetVisible:r}=t.computationResult;e.state=i?r?D.Custom1:D.Custom2:D.Custom3}_getLineOfSightManipulatorStateDependencies(e){const{isValid:t,isTargetVisible:i}=e.computationResult;return{isValid:t,isTargetVisible:i}}_laserLineRendererDependencies(){return{laserlineVisualElement:this._laserlineVisualElement,grabbedManipulator:this._grabbedManipulator,shouldRenderTracker:this._shouldRenderTracker,observerPosition:l(this.analysis.observer)?this.analysis.observer.position:null,visible:this.visible}}_updateLaserLineRenderer(e=this._laserLineRendererDependencies()){const{laserlineVisualElement:t,grabbedManipulator:i,shouldRenderTracker:r,observerPosition:a,visible:s}=e;if(c(t))return;const n=l(i)?i:r&&l(a)?this._targetTrackerManipulator:null;this.configuration.laserLine.enabled&&l(n)&&s?(t.visible=!0,t.heightManifoldTarget=n.renderLocation,n!==this._observerManipulator?t.lineVerticalPlaneSegment=b(this._observerManipulator.renderLocation,n.renderLocation,H):t.lineVerticalPlaneSegment=null):(t.visible=!1,t.heightManifoldTarget=null,t.lineVerticalPlaneSegment=null)}_createVisualElements(){const e=this.configuration.laserLine;this._removeVisualElements(),this._laserlineVisualElement=new k({view:this.view,attached:!0,visible:this.visible,style:{glowColor:t.toUnitRGB(e.glowColor),glowWidth:e.glowWidth,innerColor:t.toUnitRGB(e.innerColor),innerWidth:e.innerWidth,globalAlpha:e.globalAlpha}})}_removeVisualElements(){l(this._laserlineVisualElement)&&(this._laserlineVisualElement.destroy(),this._laserlineVisualElement=null)}_onObserverLocationChange(e){c(e)?this._observerManipulator.available=!1:(this._observerManipulator.metadata.intersection=null,this._observerManipulator.available=!0,this._observerManipulator.elevationAlignedLocation=e)}_onTargetLocationChange(e,t){l(e)?(t.elevationAlignedLocation=e,t!==this._targetTrackerManipulator&&(t.available=!0)):t.available=!1}_addPointFromClickEvent(e){const t=this._intersector.getScreenPointIntersection(e);if(!c(t)&&!c(t.point))if(l(this.analysis.observer)&&l(this.analysis.observer.position)){this._clearCursorTracker();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&&e.button!==I.Right&&(this._addPointFromClickEvent(E(e)),e.stopPropagation())}_doubleClickHandler(e){this.active&&e.button!==I.Right&&(this.stop(),e.stopPropagation())}_keyDownHandler(e){this.active&&"Escape"===e.key&&(this.stop(),e.stopPropagation())}_pointerMoveHandler(e){if(this.hasFocusedManipulators)return;if(this._latestPointerMovePointerType=e.pointerType,this._updateLaserLineRenderer(),!this._showTracker||c(this.analysis.observer)||c(this.analysis.observer.position))return;const t=E(e),i=this._intersector.getScreenPointIntersection(t);l(i)&&l(i.point)&&(c(this.analysisViewData.cursorTarget)&&(this.analysisViewData.cursorTarget=new r),this._updateFromIntersection(this.analysisViewData.cursorTarget,i),this._updateLaserLineRenderer())}_updateFromIntersection(e,t){if(c(t.point))return e.position=null,e.elevationInfo=null,void(e.feature=null);switch(t.type){case V.OBJECT:if(l(t.graphic)){const i=t.graphic,r=y(i);"on-the-ground"===r.mode&&(r.mode="relative-to-ground",r.offset=0),e.elevationInfo=new T(r),e.feature=i}else e.elevationInfo=null,e.feature=null;break;case V.TERRAIN:case V.I3S:e.elevationInfo=new T({mode:"on-the-ground"}),e.feature=null;break;default:e.elevationInfo=null,e.feature=null}const i=t.point.clone();i.z=f(this.view,i,{mode:"absolute-height",offset:0},e.elevationInfo),e.position=i}_manipulatorClick(e,t){if("observer"===e.metadata.type||e.grabbing||e.dragging||t.button!==I.Right||this.analysis.targets.length<=1)return;const{target:i}=e.metadata;this.analysis.targets.remove(i),t.stopPropagation()}get testInfo(){return{laserLineVisualElement:this._laserlineVisualElement}}};e([m({constructOnly:!0})],P.prototype,"view",void 0),e([m({constructOnly:!0})],P.prototype,"analysis",void 0),e([m({readOnly:!0})],P.prototype,"state",null),e([m({readOnly:!0})],P.prototype,"cursor",null),e([m()],P.prototype,"removeIncompleteOnCancel",void 0),e([m({readOnly:!0})],P.prototype,"updating",null),e([m({type:w})],P.prototype,"configuration",void 0),e([m({constructOnly:!0})],P.prototype,"analysisViewData",void 0),e([m({readOnly:!0})],P.prototype,"_showTracker",null),e([m()],P.prototype,"_latestPointerMovePointerType",void 0),e([m()],P.prototype,"_shouldRenderTracker",null),e([m()],P.prototype,"_laserlineVisualElement",void 0),e([m()],P.prototype,"_grabbedManipulator",void 0),P=e([_("esri.views.3d.interactive.analysisTools.lineOfSight.LineOfSightTool")],P);const H=v();export{j 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 a from"../../../../analysis/LineOfSightAnalysisTarget.js";import r from"../../../../core/Collection.js";import s from"../../../../core/Handles.js";import n from"../../../../core/Logger.js";import{destroyMaybe as o,isSome as l,isNone as c,applySome as u}from"../../../../core/maybe.js";import{watch as h,syncAndInitial as p,initial as d}from"../../../../core/reactiveUtils.js";import{property as g}from"../../../../core/accessorSupport/decorators/property.js";import"../../../../core/arrayUtils.js";import"../../../../core/has.js";import"../../../../core/accessorSupport/ensureType.js";import{subclass as _}from"../../../../core/accessorSupport/decorators/subclass.js";import{WatchUpdatingTracking as m}from"../../../../core/support/WatchUpdatingTracking.js";import{create as v,fromPoints as b}from"../../../../geometry/support/lineSegment.js";import{getGraphicEffectiveElevationInfo as y,getConvertedElevation as f}from"../../../../support/elevationInfoUtils.js";import T from"../../../../symbols/support/ElevationInfo.js";import{LineOfSightRayIntersector as C}from"./LineOfSightRayIntersector.js";import{LineOfSightToolConfiguration as w}from"./LineOfSightToolConfiguration.js";import{createSphereManipulator as M,createSphereManipulatorRenderObjects as L}from"./lineOfSightToolUtils.js";import{LaserlineVisualElement as k}from"../../interactive/visualElements/LaserlineVisualElement.js";import{IntersectorType as V}from"../../webgl-engine/lib/IntersectorInterfaces.js";import"../../../input/ViewEvents.js";import{AnalysisToolBase as O}from"../../../interactive/AnalysisToolBase.js";import{createManipulatorDragEventPipeline as S}from"../../../interactive/dragEventPipeline.js";import{ManipulatorStateCustomFlags as D}from"../../../interactive/interfaces.js";import{createScreenPointFromEvent as E}from"../../../support/screenUtils.js";import{MouseButton as I}from"../../../input/IViewEvents.js";var H;!function(e){e.Ready="ready",e.Creating="creating",e.Created="created"}(H||(H={}));const P=r.ofType(a);let j=class extends O{constructor(e){super(e),this.removeIncompleteOnCancel=!1,this.configuration=new w,this.analysisViewData=null,this._laserlineVisualElement=null,this._grabbedManipulator=null,this._analysisHandles=new s,this._handles=new s,this._updatingHandles=new m,this._manipulatorHandles=new s,this._targetTrackerManipulator=null}initialize(){this._intersector=new C({view:this.view}),this._handles.add(h((()=>this.state),(e=>{e===H.Created&&this.finishToolCreation()}),p)),this._observerManipulator=this._createObserverManipulator(),this._handles.add([this._updatingHandles.add((()=>({...this.configuration.observer})),(()=>this._updateObserverManipulatorStyle())),this._updatingHandles.add((()=>this.analysisViewData.elevationAlignedObserver),(e=>this._onObserverLocationChange(e)),d),this._updatingHandles.add((()=>({...this.configuration.laserLine})),(()=>this._createVisualElements()),d),this._updatingHandles.add((()=>this._laserLineRendererDependencies()),(e=>this._updateLaserLineRenderer(e))),this._connectComputations(),this._updatingHandles.addWhen((()=>!this._shouldRenderTracker),(()=>this._clearCursorTracker()),d)])}destroy(){this._updatingHandles=o(this._updatingHandles),this._handles=o(this._handles),this._manipulatorHandles=o(this._manipulatorHandles),this._analysisHandles=o(this._analysisHandles),this._observerManipulator=null,this._clearCursorTracker(),this._removeVisualElements(),this._intersector=null,this._set("analysis",null)}get state(){return this.active?l(this._grabbedManipulator)?H.Created:H.Creating:l(this.analysis.observer)&&l(this.analysis.observer.position)?H.Created:H.Ready}get cursor(){return this.active&&this._showTracker?"crosshair":null}get updating(){return l(this.analysisViewData)&&this.analysisViewData.updating||this._updatingHandles.updating}get _showTracker(){return this.active&&"mouse"===this._latestPointerMovePointerType}get _shouldRenderTracker(){return this._showTracker&&l(this.analysis.observer)&&l(this.analysis.observer.position)&&!this.hasFocusedManipulators}continue(){this.view.activeTool=this}stop(){this.view.activeTool=null}onEditableChange(){this.analysisViewData.editable=this.internallyEditable}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(){}onHide(){}onDeactivate(){this._clearCursorTracker()}_connectComputations(){return this._updatingHandles.addOnCollectionChange((()=>this.analysisViewData.computations),(e=>this._onComputationsCollectionChange(e)),{initial:!0,final:!0})}_onComputationsCollectionChange({added:e,removed:t}){for(const i of t)this._disconnectComputation(i);for(const i of e)this._connectComputation(i)}_connectComputation(e){if(this.destroyed)return void n.getLogger(this.declaredClass).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);c(this._targetTrackerManipulator)&&i.metadata.target===this.analysisViewData.cursorTarget&&(this._targetTrackerManipulator=i,this._targetTrackerManipulator.available=!1,this._targetTrackerManipulator.interactive=!1,this._updateLaserLineRenderer()),t.add([this._updatingHandles.add((()=>this._getLineOfSightManipulatorStateDependencies(e)),(()=>this._updateManipulatorState(i,e)),d),this._updatingHandles.add((()=>e.elevationAlignedTargetLocation),(e=>this._onTargetLocationChange(e,i)),d)],e)}_disconnectComputation(e){if(this.destroyed)return void n.getLogger(this.declaredClass).warn("Attempting to disconnect an analysis from a destroyed LineOfSight tool. Ignoring.");this._analysisHandles.remove(e);const t=this._getTargetManipulator(e.target);l(t)&&(this.manipulators.remove(t),this._manipulatorHandles.remove(t),l(this._targetTrackerManipulator)&&this._targetTrackerManipulator===t&&(this._targetTrackerManipulator=null))}_clearCursorTracker(){this.analysisViewData.cursorTarget=o(this.analysisViewData.cursorTarget)}_createManipulator(e,t,i){const a=M(this.view,e);return a.metadata=i,this._manipulatorHandles.add([t(a),a.events.on("grab-changed",(e=>this._manipulatorGrabChanged(a,e))),a.events.on("immediate-click",(e=>this._manipulatorClick(a,e)))],a),this.manipulators.add(a),a}_createTargetManipulator(e){const t=this.configuration,i={size:t.target.size,customColor1:t.target.visibleColor,customColor2:t.target.occludedColor,customColor3:t.target.undefinedColor,visible:!0},a={target:e,type:"target"},r=this._createManipulator(i,(e=>this._createTargetManipulatorDragPipeline(e)),a);return l(e.position)?r.elevationAlignedLocation=e.position:r.available=!1,r}_getTargetManipulator(e){let t=null;return this.manipulators.forEach((i=>{const a=i.manipulator;c(t)&&"target"===a.metadata.type&&a.metadata.target===e&&(t=a)})),t}_createObserverManipulator(){const e=this.configuration,t={size:e.observer.size,color:e.observer.color,visible:!0};return this._createManipulator(t,(e=>this._createObserverManipulatorDragPipeline(e)),{type:"observer",intersection:null})}_updateObserverManipulatorStyle(){const e=this._observerManipulator,t=this.configuration.observer,i={size:t.size,color:t.color,visible:e.available};e.renderObjects=L(i)}_screenToIntersection(){return e=>{const t=this._intersector.getScreenPointIntersection(e.screenEnd);return c(t)?null:{...e,intersection:t}}}_createTargetManipulatorDragPipeline(e){return S(e,((t,i,a)=>{i.next(this._screenToIntersection()).next(this._updateTargetDragStep(e)).next((()=>this._updateLaserLineRenderer())),a.next(this._cancelTargetDragStep(e.metadata.target)).next((()=>this._updateLaserLineRenderer()))}))}_createObserverManipulatorDragPipeline(e){return S(e,((e,t,i)=>{t.next(this._screenToIntersection()).next(this._updateObserverDragStep()).next((()=>this._updateLaserLineRenderer())),i.next(this._cancelObserverDragStep()).next((()=>this._updateLaserLineRenderer()))}))}_updateObserverDragStep(){return e=>(l(e.intersection.mapPoint)?(c(this.analysis.observer)&&(this.analysis.observer=new i),this._updateFromIntersection(this.analysis.observer,e.intersection)):this.analysis.observer=null,e)}_cancelObserverDragStep(){const e=l(this.analysis.observer)&&l(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.mapPoint;return l(i)&&(e.elevationAlignedLocation=i),t}}_cancelTargetDragStep(e){const t=u(e.position,(e=>e.clone()));return i=>(e.position=t,i)}_manipulatorGrabChanged(e,t){switch(t.action){case"start":this._grabbedManipulator=e;break;case"end":this._grabbedManipulator===e&&(this._grabbedManipulator=null)}}_updateManipulatorState(e,t){const{isValid:i,isTargetVisible:a}=t.computationResult;e.state=i?a?D.Custom1:D.Custom2:D.Custom3}_getLineOfSightManipulatorStateDependencies(e){const{isValid:t,isTargetVisible:i}=e.computationResult;return{isValid:t,isTargetVisible:i}}_laserLineRendererDependencies(){return{laserlineVisualElement:this._laserlineVisualElement,grabbedManipulator:this._grabbedManipulator,shouldRenderTracker:this._shouldRenderTracker,observerPosition:l(this.analysis.observer)?this.analysis.observer.position:null,visible:this.visible}}_updateLaserLineRenderer(e=this._laserLineRendererDependencies()){const{laserlineVisualElement:t,grabbedManipulator:i,shouldRenderTracker:a,observerPosition:r,visible:s}=e;if(c(t))return;const n=l(i)?i:a&&l(r)?this._targetTrackerManipulator:null;this.configuration.laserLine.enabled&&l(n)&&s?(t.visible=!0,t.heightManifoldTarget=n.renderLocation,n!==this._observerManipulator?t.lineVerticalPlaneSegment=b(this._observerManipulator.renderLocation,n.renderLocation,R):t.lineVerticalPlaneSegment=null):(t.visible=!1,t.heightManifoldTarget=null,t.lineVerticalPlaneSegment=null)}_createVisualElements(){const e=this.configuration.laserLine;this._removeVisualElements(),this._laserlineVisualElement=new k({view:this.view,attached:!0,visible:this.visible,style:{glowColor:t.toUnitRGB(e.glowColor),glowWidth:e.glowWidth,innerColor:t.toUnitRGB(e.innerColor),innerWidth:e.innerWidth,globalAlpha:e.globalAlpha}})}_removeVisualElements(){l(this._laserlineVisualElement)&&(this._laserlineVisualElement.destroy(),this._laserlineVisualElement=null)}_onObserverLocationChange(e){c(e)?this._observerManipulator.available=!1:(this._observerManipulator.metadata.intersection=null,this._observerManipulator.available=!0,this._observerManipulator.elevationAlignedLocation=e)}_onTargetLocationChange(e,t){l(e)?(t.elevationAlignedLocation=e,t!==this._targetTrackerManipulator&&(t.available=!0)):t.available=!1}_addPointFromClickEvent(e){const t=this._intersector.getScreenPointIntersection(e);if(!c(t)&&!c(t.mapPoint))if(l(this.analysis.observer)&&l(this.analysis.observer.position)){this._clearCursorTracker();const e=new a;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&&e.button!==I.Right&&(this._addPointFromClickEvent(E(e)),e.stopPropagation())}_doubleClickHandler(e){this.active&&e.button!==I.Right&&(this.stop(),e.stopPropagation())}_keyDownHandler(e){this.active&&"Escape"===e.key&&(this.stop(),e.stopPropagation())}_pointerMoveHandler(e){if(this.hasFocusedManipulators)return;if(this._latestPointerMovePointerType=e.pointerType,this._updateLaserLineRenderer(),!this._showTracker||c(this.analysis.observer)||c(this.analysis.observer.position))return;const t=E(e),i=this._intersector.getScreenPointIntersection(t);l(i)&&l(i.mapPoint)&&(c(this.analysisViewData.cursorTarget)&&(this.analysisViewData.cursorTarget=new a),this._updateFromIntersection(this.analysisViewData.cursorTarget,i),this._updateLaserLineRenderer())}_updateFromIntersection(e,t){if(c(t.mapPoint))return e.position=null,e.elevationInfo=null,void(e.feature=null);switch(t.type){case V.OBJECT:if(l(t.graphic)){const i=t.graphic,a=y(i);"on-the-ground"===a.mode&&(a.mode="relative-to-ground",a.offset=0),e.elevationInfo=new T(a),e.feature=i}else e.elevationInfo=null,e.feature=null;break;case V.TERRAIN:case V.I3S:e.elevationInfo=new T({mode:"on-the-ground"}),e.feature=null;break;default:e.elevationInfo=null,e.feature=null}const i=t.mapPoint.clone();i.z=f(this.view,i,{mode:"absolute-height",offset:0},e.elevationInfo),e.position=i}_manipulatorClick(e,t){if("observer"===e.metadata.type||e.grabbing||e.dragging||t.button!==I.Right||this.analysis.targets.length<=1)return;const{target:i}=e.metadata;this.analysis.targets.remove(i),t.stopPropagation()}get testInfo(){return{laserLineVisualElement:this._laserlineVisualElement}}};e([g({constructOnly:!0})],j.prototype,"view",void 0),e([g({constructOnly:!0})],j.prototype,"analysis",void 0),e([g({readOnly:!0})],j.prototype,"state",null),e([g({readOnly:!0})],j.prototype,"cursor",null),e([g()],j.prototype,"removeIncompleteOnCancel",void 0),e([g({readOnly:!0})],j.prototype,"updating",null),e([g({type:w})],j.prototype,"configuration",void 0),e([g({constructOnly:!0})],j.prototype,"analysisViewData",void 0),e([g({readOnly:!0})],j.prototype,"_showTracker",null),e([g()],j.prototype,"_latestPointerMovePointerType",void 0),e([g()],j.prototype,"_shouldRenderTracker",null),e([g()],j.prototype,"_laserlineVisualElement",void 0),e([g()],j.prototype,"_grabbedManipulator",void 0),j=e([_("esri.views.3d.interactive.analysisTools.lineOfSight.LineOfSightTool")],j);const R=v();export{P as LineOfSightTargetCollection,j as LineOfSightTool};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.25/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{_ as i}from"../../../../chunks/tslib.es6.js";import e from"../../../../Color.js";import t from"../../../../core/Accessor.js";import
|
|
5
|
+
import{_ as i}from"../../../../chunks/tslib.es6.js";import e from"../../../../Color.js";import t from"../../../../core/Accessor.js";import n from"../../../../core/Handles.js";import{makeHandle as o}from"../../../../core/handleUtils.js";import{destroyMaybe as s,isNone as a}from"../../../../core/maybe.js";import{initial as r}from"../../../../core/reactiveUtils.js";import{property as l}from"../../../../core/accessorSupport/decorators/property.js";import"../../../../core/arrayUtils.js";import"../../../../core/has.js";import"../../../../core/accessorSupport/ensureType.js";import{subclass as u}from"../../../../core/accessorSupport/decorators/subclass.js";import{c}from"../../../../chunks/mat4f64.js";import{b as d}from"../../../../chunks/vec3.js";import{d as m,c as h}from"../../../../chunks/vec3f64.js";import{WatchUpdatingTracking as p}from"../../../../core/support/WatchUpdatingTracking.js";import{LineVisualElement as v}from"../../interactive/visualElements/LineVisualElement.js";import{PointVisualElement as g}from"../../interactive/visualElements/PointVisualElement.js";let f=class extends t{constructor(i){super(i),this._lineOfSightVisualizations=[],this._computationHandles=new n,this._updatingHandles=new p}initialize(){this.addHandles(this._connectComputations()),this._createObserverVisualization()}destroy(){this._updatingHandles=s(this._updatingHandles),this._computationHandles=s(this._computationHandles),this._observerVisualElement=s(this._observerVisualElement)}get visible(){return this.analysisViewData.visible}get updating(){return this._updatingHandles.updating}get interactiveAndEditable(){return this.analysisViewData.interactive&&this.analysisViewData.editable}get testInfo(){return{visualizations:this._lineOfSightVisualizations}}get _configuration(){return this.analysisViewData.configuration}_createLineOfSightVisualization(){const i=this._configuration,t=this.view,n={view:t,attached:!0,width:i.outerWidth,innerWidth:i.innerWidth},o=e.toUnitRGBA(i.visibleOuterColor),s=e.toUnitRGBA(i.visibleInnerColor),a=e.toUnitRGBA(i.occludedOuterColor),r=e.toUnitRGBA(i.occludedInnerColor),l=e.toUnitRGBA(i.undefinedOuterColor),u=e.toUnitRGBA(i.undefinedInnerColor),c={visibleLineVisualElement:new v({...n,color:o,innerColor:s}),occludedLineVisualElement:new v({...n,color:a,innerColor:r}),undefinedLineVisualElement:new v({...n,color:l,innerColor:u}),targetVisualElement:new g({view:t,attached:!0,...b,size:8})};return this._lineOfSightVisualizations.push(c),c}_destroyLineOfSightVisualization(i){i.visibleLineVisualElement=s(i.visibleLineVisualElement),i.occludedLineVisualElement=s(i.occludedLineVisualElement),i.undefinedLineVisualElement=s(i.undefinedLineVisualElement),i.targetVisualElement=s(i.targetVisualElement),this._lineOfSightVisualizations.splice(this._lineOfSightVisualizations.indexOf(i),1)}_updateLineOfSightVisualization(i,t,n){const o=this._configuration,{computationResult:s,inputPoints:r}=i,{start:l,end:u,intersection:c,isValid:h,isTargetVisible:p}=s,{observer:v}=r,g=C;g[12]=v[0],g[13]=v[1],g[14]=v[2];const f=d(V,l,v),b=d(_,u,v),O=d(y,c,v),{visibleLineVisualElement:E,occludedLineVisualElement:A,undefinedLineVisualElement:L,targetVisualElement:w}=t,z=a(this.analysisViewData.elevationAlignedObserver)||a(i.elevationAlignedTargetLocation),S=this.visible&&!z;E.visible=S,A.visible=S,L.visible=S,w.visible=S,w.attached=!n.interactiveAndEditable,S&&(E.geometry=null,A.geometry=null,L.geometry=null,w.geometry=i.elevationAlignedTargetLocation,h?p?(E.geometry=[[m(f),m(b)]],E.transform=g,E.color=e.toUnitRGBA(o.visibleOuterColor),w.color=e.toUnitRGBA(o.visibleInnerColor)):(E.geometry=[[m(f),m(O)]],E.transform=g,E.color=e.toUnitRGBA(o.occludedOuterColor),A.geometry=[[m(O),m(b)]],A.transform=g,w.color=e.toUnitRGBA(o.occludedInnerColor)):(L.geometry=[[m(f),m(b)]],L.transform=g,w.color=e.toUnitRGBA(o.undefinedInnerColor)))}_getLineOfSightVisualizationDependencies(i){const{computationResult:e}=i,{occludedOuterColor:t,visibleOuterColor:n}=this._configuration;return{computationResult:e,occludedOuterColor:t,visibleOuterColor:n,visible:this.visible,interactiveAndEditable:this.interactiveAndEditable}}_connectComputation(i){const e=this._computationHandles;if(e.has(i))return;const t=this._createLineOfSightVisualization();e.add([this._updatingHandles.add((()=>this._getLineOfSightVisualizationDependencies(i)),(e=>this._updateLineOfSightVisualization(i,t,e)),{initial:!0,equals:()=>!1}),o((()=>this._destroyLineOfSightVisualization(t)))],i)}_disconnectComputation(i){this._computationHandles.remove(i)}_connectComputations(){return this._updatingHandles.addOnCollectionChange((()=>this.analysisViewData.computations),(i=>this._onComputationsCollectionChange(i)),{initial:!0,final:!0})}_onComputationsCollectionChange({added:i,removed:e}){for(const t of e)this._disconnectComputation(t);for(const t of i)this._connectComputation(t)}_createObserverVisualization(){const i=e.toUnitRGBA(this._configuration.visibleInnerColor),t=new g({view:this.view,attached:!1,color:i,...b});this._observerVisualElement=t,this.addHandles(this._updatingHandles.add((()=>({observer:this.analysisViewData.elevationAlignedObserver,interactiveAndEditable:this.interactiveAndEditable,visible:this.visible})),(({observer:i,interactiveAndEditable:e,visible:n})=>{a(i)||e||!n?t.attached=!1:(t.geometry=i,this._observerVisualElement.attached=!0)}),r))}};i([l({constructOnly:!0})],f.prototype,"analysis",void 0),i([l({constructOnly:!0})],f.prototype,"analysisViewData",void 0),i([l({constructOnly:!0})],f.prototype,"view",void 0),i([l({readOnly:!0})],f.prototype,"visible",null),i([l()],f.prototype,"updating",null),i([l()],f.prototype,"interactiveAndEditable",null),i([l()],f.prototype,"testInfo",null),i([l()],f.prototype,"_configuration",null),f=i([u("esri.views.3d.analysis.LineOfSight.LineOfSightVisualization")],f);const b={size:6,pixelSnappingEnabled:!1,primitive:"circle",elevationInfo:{mode:"absolute-height",offset:0},outlineSize:0},V=h(),_=h(),y=h(),C=c();export{f as LineOfSightVisualization};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.25/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{_ as t}from"../../../chunks/tslib.es6.js";import i from"../../../core/Accessor.js";import
|
|
5
|
+
import{_ as t}from"../../../chunks/tslib.es6.js";import i from"../../../core/Accessor.js";import s from"../../../core/Collection.js";import o from"../../../core/Evented.js";import{destroyMaybe as r,isSome as e,applySome as a}from"../../../core/maybe.js";import{property as n}from"../../../core/accessorSupport/decorators/property.js";import"../../../core/arrayUtils.js";import"../../../core/has.js";import"../../../core/accessorSupport/ensureType.js";import{subclass as l}from"../../../core/accessorSupport/decorators/subclass.js";import{c as p}from"../../../chunks/vec3f64.js";import{AnalysisView3D as y}from"./AnalysisView3D.js";import{LineOfSightConfiguration as u}from"./LineOfSight/LineOfSightConfiguration.js";import{LineOfSightController as h}from"./LineOfSight/LineOfSightController.js";import{LineOfSightTool as c}from"./LineOfSight/LineOfSightTool.js";import{LineOfSightVisualization as m}from"./LineOfSight/LineOfSightVisualization.js";import{connectAnalysisViewToTool as d,removeAnalysisViewTool as g}from"../../analysis/analysisViewUtils.js";let f=class extends(y(o.EventedMixin(i))){constructor(t){super(t),this.type="line-of-sight-view-3d",this.analysis=null,this.tool=null,this.computations=new s,this.elevationAlignedObserver=null,this.configuration=new u,this.observerEngineLocation=p(),this.cursorTarget=null,this.editable=!0}initialize(){const t=this.view,i=this.analysis;this._analysisController=new h({analysis:i,analysisViewData:this,view:t}),this._analysisVisualization=new m({analysis:i,analysisViewData:this,view:t}),this.addHandles([this._analysisController.on("result-changed",(t=>{t.target!==this.cursorTarget&&this.emit("result-changed",t)})),d(this,c)])}destroy(){g(this),this._analysisController=r(this._analysisController),this._analysisVisualization=r(this._analysisVisualization)}get results(){return this.computations.map((t=>t.result))}get priority(){return this._analysisController.priority}set priority(t){this._analysisController.priority=t}get updating(){return e(this._analysisController)&&this._analysisController.updating||e(this._analysisVisualization)&&this._analysisVisualization.updating}getResultForTarget(t){const i=this.computations.find((i=>i.target===t));return a(i,(t=>t.result))}get testInfo(){return{visualization:this._analysisVisualization,controller:this._analysisController}}};t([n({readOnly:!0})],f.prototype,"type",void 0),t([n({constructOnly:!0,nonNullable:!0})],f.prototype,"analysis",void 0),t([n()],f.prototype,"tool",void 0),t([n({readOnly:!0})],f.prototype,"results",null),t([n()],f.prototype,"priority",null),t([n()],f.prototype,"computations",void 0),t([n()],f.prototype,"elevationAlignedObserver",void 0),t([n()],f.prototype,"configuration",void 0),t([n()],f.prototype,"observerEngineLocation",void 0),t([n()],f.prototype,"cursorTarget",void 0),t([n()],f.prototype,"updating",null),t([n()],f.prototype,"editable",void 0),t([n()],f.prototype,"_analysisController",void 0),t([n()],f.prototype,"_analysisVisualization",void 0),f=t([l("esri.views.3d.analysis.LineOfSightAnalysisView3D")],f);const v=f;export{v 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.25/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{_ as t}from"../../../../chunks/tslib.es6.js";import e from"../../../../analysis/SlicePlane.js";import{clock as i}from"../../../../core/clock.js";import a from"../../../../core/Handles.js";import{releaseMaybe as s,destroyMaybe as n,isSome as r,isNone as l,removeMaybe as o}from"../../../../core/maybe.js";import{watch as h,sync as p,syncAndInitial as u}from"../../../../core/reactiveUtils.js";import{addFrameTask as c}from"../../../../core/scheduling.js";import{createScreenPoint as d,screenPointObjectToArray as _,createScreenPointArray as v}from"../../../../core/screenUtils.js";import{property as P}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{d as m,g,m as w}from"../../../../chunks/mat4.js";import{e as f,l as M,c as D,g as T,a as V,m as b,n as k,s as E}from"../../../../chunks/vec3.js";import{a as S,c as H}from"../../../../chunks/vec3f64.js";import{a as x,c as I,n as R,f as j}from"../../../../chunks/boundedPlane.js";import{signedDistance as O,create as C,intersectRay as z,normal as G}from"../../../../geometry/support/plane.js";import{create as U}from"../../../../geometry/support/ray.js";import{sv3d as L,sm4d as K,sv2d as A}from"../../../../geometry/support/vectorStacks.js";import{POINTER_MOVE_TIMER_MS as B,PLANE_PREVIEW_OUTLINE_WIDTH as F,forceVerticalModifier as N,forceHorizontalModifier as q,PREVIEW_FADE_DURATION_SECONDS as Z,PLANE_OUTLINE_COLOR as J,PLANE_BACKGROUND_COLOR as Q,PREVIEW_FADE_DOT_THRESHOLD as W,INITIAL_DEPTH_OFFSET_FRAC as X}from"./sliceToolConfig.js";import{createShiftManipulator as Y,createRotateManipulator as $,createResizeManipulator as tt,createGridVisualElement as et,createOutlineVisualElement as it,planeToShape as at,createRotatePlane as st,RotationAxis as nt,resizePlane as rt,calculatePlaneHalfSize as lt,SliceOrientation as ot,createPlane as ht,DidPointerMoveRecentlyFlag as pt,calculateBoundedPlaneTranslateRotate as ut,updateShiftRestartHandle as ct,updateRotateHeadingHandle as dt,updateRotateTiltHandle as _t,updateResizeHandle as vt,createShiftPlane as Pt}from"./sliceToolUtils.js";import{getRotateHeadingTexture as yt,getTiltRotateTexture as mt}from"./images/Factory.js";import{calculateInputRotationTransform as gt}from"../../interactive/manipulatorUtils.js";import{screenToRenderPlane as wt}from"../../interactive/editingTools/dragEventPipeline3D.js";import{fromScreen as ft}from"../../support/geometryUtils/ray.js";import{newIntersector as Mt}from"../../webgl-engine/lib/Intersector.js";import{StoreResults as Dt}from"../../webgl-engine/lib/IntersectorInterfaces.js";import{AnalysisToolBase as Tt}from"../../../interactive/AnalysisToolBase.js";import{createManipulatorDragEventPipeline as Vt}from"../../../interactive/dragEventPipeline.js";import{createScreenPointFromEvent as bt}from"../../../support/screenUtils.js";var kt;let Et=kt=class extends Tt{constructor(t){super(t),this._clock=i,this._previewPlaneOpacity=1,this.removeIncompleteOnCancel=!1,this.layersMode="none",this.shiftManipulator=null,this.rotateHeadingManipulator=null,this.rotateTiltManipulator=null,this.resizeManipulators=null,this._handles=new a,this._viewHandles=new a,this._frameTask=null,this._pointerMoveTimerMs=B,this._prevPointerMoveTimeout=null,this._previewPlaneGridVisualElement=null,this._previewPlaneOutlineVisualElement=null,this._startPlane=x(),this._previewPlane=null,this._activeKeyModifiers={},this._lastCursorPosition=d(),this._resizeHandles=[{direction:[1,0]},{direction:[1,1]},{direction:[0,1]},{direction:[-1,1]},{direction:[-1,0]},{direction:[-1,-1]},{direction:[0,-1]},{direction:[1,-1]}],this._intersector=Mt(t.view.state.viewingMode),this._intersector.options.store=Dt.MIN}initialize(){if(null==this.analysis)throw new Error("SliceTool requires valid analysis, but null was provided.");this._rotateHeadingImage=yt(this.view.toolViewManager.textures),this._rotateTiltImage=mt(this.view.toolViewManager.textures);const t=t=>{this._updateManipulatorsInteractive(t),t.grabbing||(r(this.analysisViewData.plane)&&I(this.analysisViewData.plane,this._startPlane),this.inputState=null)};this.shiftManipulator=Y(this.view),this.manipulators.add(this.shiftManipulator),this.shiftManipulator.events.on("grab-changed",(e=>{this._onShiftGrab(e),t(this.shiftManipulator)})),this._handles.add(this._createShiftDragPipeline(this.shiftManipulator)),this.rotateHeadingManipulator=$(this.view,this._rotateHeadingImage.texture),this.manipulators.add(this.rotateHeadingManipulator),this.rotateHeadingManipulator.events.on("grab-changed",(e=>{this._onRotateHeadingGrab(e),t(this.rotateHeadingManipulator)})),this._handles.add(this._createRotateHeadingDragPipeline(this.rotateHeadingManipulator)),this.rotateTiltManipulator=$(this.view,this._rotateTiltImage.texture),this.manipulators.add(this.rotateTiltManipulator),this.rotateTiltManipulator.events.on("grab-changed",(e=>{this._onRotateTiltGrab(e),t(this.rotateTiltManipulator)})),this._handles.add(this._createRotateTiltDragPipeline(this.rotateTiltManipulator)),this.resizeManipulators=this._resizeHandles.map(((e,i)=>{const a=tt(this.view,e);return a.events.on("grab-changed",(e=>{this._onResizeGrab(e,i),t(a)})),this._handles.add(this._createResizeDragPipeline(a)),a})),this.manipulators.addMany(this.resizeManipulators),this._previewPlaneGridVisualElement=et(this.view),this._previewPlaneOutlineVisualElement=it(this.view),this._previewPlaneOutlineVisualElement.width=F,this._handles.add(h((()=>this.analysisViewData.plane),(()=>this._updateManipulators()),p));const e=h((()=>this.state),(t=>{"sliced"===t&&this.finishToolCreation()}),u);this._handles.add([e,h((()=>this.view.state.camera),(()=>this._onCameraChange()))])}destroy(){this._rotateHeadingImage=s(this._rotateHeadingImage),this._rotateTiltImage=s(this._rotateTiltImage),this._handles=n(this._handles),this._viewHandles=n(this._viewHandles),this._removeFrameTask(),this._clearPointerMoveTimeout(),this._previewPlaneOutlineVisualElement=n(this._previewPlaneOutlineVisualElement),this._previewPlaneGridVisualElement=n(this._previewPlaneGridVisualElement)}get state(){const t=!!this.analysisViewData.plane,e=!!this.inputState;return t?t&&e?"slicing":t&&!e?"sliced":"ready":"ready"}get cursor(){return this._isPlacingSlicePlane||"exclude"===this.layersMode?"crosshair":r(this._creatingPointerId)?"grabbing":null}set analysis(t){if(null==t)throw new Error("SliceTool requires valid analysis, but null was provided.");this._handles.remove("analysis"),this._set("analysis",t)}get inputState(){return this._get("inputState")}set inputState(t){this._set("inputState",t),this.analysisViewData.showGrid=r(t)&&"resize"===t.type,this._updateMaterials()}get _isPlacingSlicePlane(){return!this.inputState&&!this.analysisViewData.plane&&this.active}get _creatingPointerId(){return r(this.inputState)&&"shift"===this.inputState.type?this.inputState.creatingPointerId:null}enterExcludeLayerMode(){l(this.analysisViewData.plane)||(this._set("layersMode","exclude"),this.active||(this.view.activeTool=this))}exitExcludeLayerMode(){l(this.analysisViewData.plane)||(this._set("layersMode","none"),this.active&&(this.view.activeTool=null))}onDeactivate(){this._set("layersMode","none"),this._updatePreviewPlane(null)}onShow(){this._updateVisibility(!0)}onHide(){this._updateVisibility(!1)}_updateVisibility(t){this._updateManipulators(),t||this._clearPointerMoveTimeout()}onInputEvent(t){switch(t.type){case"pointer-drag":if(!Ht(t))return;this._isPlacingSlicePlane?this._onClickPlacePlane(t)&&t.stopPropagation():this._onPointerDrag(t)&&t.stopPropagation();break;case"pointer-move":this._onPointerMove(t);break;case"pointer-up":this._onPointerUp(t)&&t.stopPropagation();break;case"immediate-click":if(!Ht(t))return;this._onClickPlacePlane(t)&&t.stopPropagation();break;case"click":if(!Ht(t))return;this._onClickExcludeLayer(t)&&t.stopPropagation();break;case"drag":this.inputState&&t.stopPropagation();break;case"key-down":this._onKeyDown(t)&&t.stopPropagation();break;case"key-up":this._onKeyUp(t)&&t.stopPropagation()}}onEditableChange(){this.analysisViewData.editable=this.editable}_onPointerDrag(t){const e=this.inputState;if(t.pointerId===this._creatingPointerId&&r(e)&&"shift"===e.type){const i=bt(t);return this.shiftManipulator.events.emit("drag",{action:e.hasBeenDragged?"update":"start",pointerType:t.pointerType,start:i,screenPoint:i}),e.hasBeenDragged=!0,!0}return!1}_onPointerMove(t){this._lastCursorPosition.x=t.x,this._lastCursorPosition.y=t.y,this._resetPointerMoveTimeout(),"touch"!==t.pointerType&&this._updatePreviewPlane(bt(t),this._activeKeyModifiers)}_onCameraChange(){this._updatePreviewPlane(this._lastCursorPosition,this._activeKeyModifiers),this._updateManipulators()}_onPointerUp(t){if(t.pointerId===this._creatingPointerId&&r(this.analysisViewData.plane)){const e=bt(t);return this.shiftManipulator.events.emit("drag",{action:"end",start:e,screenPoint:e}),I(this.analysisViewData.plane,this._startPlane),this.inputState=null,!0}return!1}_onClickPlacePlane(t){if("exclude"===this.layersMode)return!1;if(this._isPlacingSlicePlane){const i=bt(t),a=x();if(this._pickPlane(i,!1,this._activeKeyModifiers,a)){if(I(a,this._startPlane),this.analysis.shape=at(a,this.view,this.view.spatialReference,new e),"pointer-drag"===t.type){const e=this._calculatePickRay(i);this.inputState=St(e,t.pointerId,a.origin,a)}return!0}}return!1}_onClickExcludeLayer(t){return!("exclude"!==this.layersMode||!this.created)&&(this.view.hitTest(bt(t)).then((t=>{if(t.results.length){const e=t.results[0],i="graphic"===e?.type&&e.graphic;if(i){const t=i.sourceLayer||i.layer;t&&this.analysis.excludedLayers.push(t)}}else t.ground.layer?this.analysis.excludedLayers.push(t.ground.layer):this.analysis.excludeGroundSurface=!0})),this._set("layersMode","none"),this.active&&(this.view.activeTool=null),!0)}_onKeyDown(t){return(t.key===N||t.key===q)&&(this._activeKeyModifiers[t.key]=!0,r(this._previewPlane)&&this._updatePreviewPlane(this._lastCursorPosition,this._activeKeyModifiers),!0)}_onKeyUp(t){return!(t.key!==N&&t.key!==q||!this._activeKeyModifiers[t.key])&&(delete this._activeKeyModifiers[t.key],r(this._previewPlane)&&this._updatePreviewPlane(this._lastCursorPosition,this._activeKeyModifiers),!0)}_onShiftGrab(t){if("start"!==t.action||l(this.analysisViewData.plane))return;const e=this._calculatePickRay(t.screenPoint);I(this.analysisViewData.plane,this._startPlane),this.inputState=St(e,null,this.shiftManipulator.renderLocation,this.analysisViewData.plane)}_createShiftDragPipeline(t){return Vt(t,((t,e,i)=>{const a=this.inputState;if(l(a)||"shift"!==a.type)return;const s=r(this.analysisViewData.plane)?I(this.analysisViewData.plane,x()):null;e.next(wt(this.view,a.shiftPlane)).next(this._shiftDragAdjustSensitivity(a)).next(this._shiftDragUpdatePlane(a)),i.next((()=>{r(s)&&this._updateBoundedPlane(s)}))}))}_shiftDragAdjustSensitivity(t){return e=>{if(l(this.analysisViewData.plane))return null;const i=.001,a=Math.min((1-Math.abs(f(R(this.analysisViewData.plane),e.ray.direction)/M(e.ray.direction)))/i,1),s=-O(this._startPlane.plane,e.renderEnd),n=-O(this._startPlane.plane,t.startPoint);return t.depth=t.depth*(1-a)+s*a-n,e}}_shiftDragUpdatePlane(t){return()=>{if(l(this.analysisViewData.plane))return;const e=D(L.get(),this._startPlane.origin),i=D(L.get(),R(this._startPlane));T(i,i,-t.depth),V(i,i,e);const a=j(i,this.analysisViewData.plane.basis1,this.analysisViewData.plane.basis2,x());this._updateBoundedPlane(a)}}_onRotateHeadingGrab(t){if("start"!==t.action||l(this.analysisViewData.plane))return;const e=st(this.analysisViewData.plane,this.view.renderCoordsHelper,nt.HEADING,C()),i=this._calculatePickRay(t.screenPoint),a=H();z(e,i,a)&&(I(this.analysisViewData.plane,this._startPlane),this.inputState={type:"rotate",rotatePlane:e,startPoint:a})}_createRotateHeadingDragPipeline(t){return Vt(t,((t,e,i)=>{const a=this.inputState;if(l(a)||"rotate"!==a.type)return;const s=r(this.analysisViewData.plane)?I(this.analysisViewData.plane,x()):null;e.next(wt(this.view,a.rotatePlane)).next(this._rotateDragRenderPlaneToRotate(a)).next(this._rotateDragUpdatePlaneFromRotate()),i.next((()=>{r(s)&&this._updateBoundedPlane(s)}))}))}_onRotateTiltGrab(t){if("start"!==t.action||l(this.analysisViewData.plane))return;const e=st(this.analysisViewData.plane,this.view.renderCoordsHelper,nt.TILT,C()),i=this._calculatePickRay(t.screenPoint),a=H();z(e,i,a)&&(I(this.analysisViewData.plane,this._startPlane),this.inputState={type:"rotate",rotatePlane:e,startPoint:a})}_createRotateTiltDragPipeline(t){return Vt(t,((t,e,i)=>{const a=this.inputState;if(l(a)||"rotate"!==a.type)return;const s=r(this.analysisViewData.plane)?I(this.analysisViewData.plane,x()):null;e.next(wt(this.view,a.rotatePlane)).next(this._rotateDragRenderPlaneToRotate(a)).next(this._rotateDragUpdatePlaneFromRotate()),i.next((()=>{r(s)&&this._updateBoundedPlane(s)}))}))}_rotateDragRenderPlaneToRotate(t){return e=>{if(l(this.analysisViewData.plane))return null;const i=G(t.rotatePlane),a=gt(t.startPoint,e.renderEnd,this.analysisViewData.plane.origin,i);return{...e,rotateAxis:i,rotateAngle:a}}}_rotateDragUpdatePlaneFromRotate(){return t=>{if(l(this.analysisViewData.plane))return;const e=m(K.get(),t.rotateAngle,t.rotateAxis);if(l(e))return;const i=b(L.get(),this._startPlane.basis1,e),a=b(L.get(),this._startPlane.basis2,e),s=j(this.analysisViewData.plane.origin,i,a,x());this._updateBoundedPlane(s)}}_onResizeGrab(t,e){if("start"!==t.action||l(this.analysisViewData.plane))return;const i=this._calculatePickRay(t.screenPoint),a=L.get();z(this.analysisViewData.plane.plane,i,a)&&(I(this.analysisViewData.plane,this._startPlane),this.inputState={type:"resize",activeHandleIdx:e,startPoint:S(a)})}_createResizeDragPipeline(t){return Vt(t,((t,e,i)=>{const a=this.inputState;if(l(a)||"resize"!==a.type||l(this.analysisViewData.plane))return;const s=I(this.analysisViewData.plane,x());e.next(wt(this.view,this.analysisViewData.plane.plane)).next(this._resizeDragUpdatePlane(a)),i.next((()=>{this._updateBoundedPlane(s)}))}))}_resizeDragUpdatePlane(t){return e=>{if(l(this.analysisViewData.plane))return;const i=this._resizeHandles[t.activeHandleIdx],a=rt(i,t.startPoint,e.renderEnd,this.view.state.camera,this._startPlane,I(this.analysisViewData.plane));this._updateBoundedPlane(a)}}_updateBoundedPlane(t){const e=this.analysisViewData;if(!r(e))throw new Error("valid internal object expected");e.plane=t}_updatePreviewPlane(t,e={}){let i=this._previewPlane;if(this._previewPlane=null,l(t))return this._removeFrameTask(),void this._updateManipulators();if(!this.analysisViewData.plane&&this.active){const a=r(i)?i:x();if(i=r(i)?I(i,xt):null,this._pickPlane(t,!0,e,a)){const t=W;let e=!1;r(i)&&(e=f(i.plane,a.plane)<t||f(k(L.get(),i.basis1),k(L.get(),a.basis1))<t),e&&(this._previewPlaneOpacity=0),this._previewPlane=a}}r(this._previewPlane)&&l(this._frameTask)&&0===this._previewPlaneOpacity?this._frameTask=c({update:({deltaTime:t})=>{this._previewPlaneOpacity=Math.min(this._previewPlaneOpacity+t/(1e3*Z),1),this._updateManipulators(),1===this._previewPlaneOpacity&&this._removeFrameTask()}}):l(this._previewPlane)&&r(this._frameTask)?this._removeFrameTask():r(this._previewPlane)&&this._updateManipulators()}_removeFrameTask(){this._frameTask=o(this._frameTask)}_calculatePickRay(t){const e=U(),i=_(t,It);return ft(this.view.state.camera,i,e),k(e.direction,e.direction),e}_pickMinResult(t){const e=_(t,A.get());return this.view.sceneIntersectionHelper.intersectToolIntersectorScreen(e,this._intersector),this._intersector.results.min}_pickPlane(t,e,i,a){const s=this._pickMinResult(t),n=L.get();if(!s.getIntersectionPoint(n))return!1;const r=s.getTransformedNormal(L.get()),l=this.view.state.camera;f(r,l.viewForward)>0&&T(r,r,-1);const o=lt(n,l),h=(e?1:-1)*o*X,p=T(L.get(),r,h);V(p,p,n);const u=this.analysis.tiltEnabled?ot.TILTED:ot.HORIZONTAL_OR_VERTICAL,c=i[N]?ot.VERTICAL:i[q]?ot.HORIZONTAL:u;return ht(p,r,o,o,l,c,this.view.renderCoordsHelper,a),!0}_clearPointerMoveTimeout(){this._prevPointerMoveTimeout=o(this._prevPointerMoveTimeout)}_resetPointerMoveTimeout(){this._clearPointerMoveTimeout(),this.shiftManipulator.state|=pt,this.rotateHeadingManipulator.state|=pt,this.rotateTiltManipulator.state|=pt,this._prevPointerMoveTimeout=this._clock.setTimeout((()=>{this.shiftManipulator.state&=~pt,this.rotateHeadingManipulator.state&=~pt,this.rotateTiltManipulator.state&=~pt}),this._pointerMoveTimerMs)}_updateManipulators(){if(kt.disableEngineLayers)return;let t=null,e=!1;if(r(this.analysisViewData.plane))t=this.analysisViewData.plane,e=!1;else{if(!r(this._previewPlane))return this.shiftManipulator.available=!1,this.rotateHeadingManipulator.available=!1,this.rotateTiltManipulator.available=!1,this.resizeManipulators.forEach((t=>t.available=!1)),this._previewPlaneOutlineVisualElement.visible=!1,void(this._previewPlaneGridVisualElement.visible=!1);t=this._previewPlane,e=!0}const i=ut(t,K.get());e?(this.shiftManipulator.available=!1,this.rotateHeadingManipulator.available=!1,this.rotateTiltManipulator.available=!1,this.resizeManipulators.forEach((t=>t.available=!1)),this._previewPlaneOutlineVisualElement.visible=!0,this._previewPlaneGridVisualElement.visible=!0):(this.shiftManipulator.available=!0,this.rotateHeadingManipulator.available=!0,this.rotateTiltManipulator.available=this.analysis.tiltEnabled,this.resizeManipulators.forEach((t=>t.available=!0)),ct(this.shiftManipulator,i,t,this.view.state.camera),dt(this.rotateHeadingManipulator,i,t,this.view.renderCoordsHelper),_t(this.rotateTiltManipulator,i,t),this.resizeManipulators.forEach(((e,a)=>vt(e,this._resizeHandles[a],i,t))),this._previewPlaneOutlineVisualElement.visible=!1,this._previewPlaneGridVisualElement.visible=!1);const a=E(L.get(),M(t.basis1),M(t.basis2),1),s=g(K.get(),a),n=w(s,i,s);this._previewPlaneOutlineVisualElement.transform=n,this._previewPlaneGridVisualElement.transform=n,this._updateMaterials()}_updateMaterials(){const t=[J[0],J[1],J[2],J[3]*this._previewPlaneOpacity];this._previewPlaneOutlineVisualElement.color=t;const e=[Q[0],Q[1],Q[2],Q[3]*this._previewPlaneOpacity],i=[0,0,0,0];this._previewPlaneGridVisualElement.backgroundColor=e,this._previewPlaneGridVisualElement.gridColor=i}_updateManipulatorsInteractive(t){if(!t.grabbing)return this.shiftManipulator.interactive=!0,this.rotateHeadingManipulator.interactive=!0,this.rotateTiltManipulator.interactive=!0,void this.resizeManipulators.forEach((t=>{t.interactive=!0}));this.shiftManipulator.interactive=this.shiftManipulator===t,this.rotateHeadingManipulator.interactive=this.rotateHeadingManipulator===t,this.rotateTiltManipulator.interactive=this.rotateTiltManipulator===t,this.resizeManipulators.forEach((e=>{e.interactive=e===t}))}testData(){return{plane:this.analysisViewData.plane,setPointerMoveTimerMs:t=>{this._pointerMoveTimerMs=t}}}};function St(t,e,i,a){const s=Pt(i,R(a),t.direction,C()),n=H();return z(s,t,n)?{type:"shift",creatingPointerId:e,hasBeenDragged:!1,shiftPlane:s,depth:0,startPoint:n}:null}function Ht(t){return"mouse"!==t.pointerType||0===t.button}Et.disableEngineLayers=!1,t([P()],Et.prototype,"_clock",void 0),t([P({constructOnly:!0})],Et.prototype,"view",void 0),t([P()],Et.prototype,"analysisViewData",void 0),t([P({readOnly:!0})],Et.prototype,"state",null),t([P({readOnly:!0})],Et.prototype,"cursor",null),t([P()],Et.prototype,"analysis",null),t([P()],Et.prototype,"removeIncompleteOnCancel",void 0),t([P({readOnly:!0})],Et.prototype,"layersMode",void 0),t([P({value:null})],Et.prototype,"inputState",null),t([P()],Et.prototype,"_isPlacingSlicePlane",null),t([P()],Et.prototype,"_creatingPointerId",null),Et=kt=t([y("esri.views.3d.analysis.Slice.SliceTool")],Et);const xt=x(),It=v(),Rt=Et;export{Rt as default};
|
|
5
|
+
import{_ as t}from"../../../../chunks/tslib.es6.js";import e from"../../../../analysis/SlicePlane.js";import{clock as i}from"../../../../core/clock.js";import a from"../../../../core/Handles.js";import{releaseMaybe as s,destroyMaybe as n,isSome as r,isNone as l,removeMaybe as o}from"../../../../core/maybe.js";import{watch as h,sync as p,syncAndInitial as u}from"../../../../core/reactiveUtils.js";import{addFrameTask as c}from"../../../../core/scheduling.js";import{createScreenPoint as d,screenPointObjectToArray as _,createScreenPointArray as v}from"../../../../core/screenUtils.js";import{property as P}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{d as m,g,m as w}from"../../../../chunks/mat4.js";import{e as f,l as M,c as D,g as T,a as V,m as b,n as k,s as E}from"../../../../chunks/vec3.js";import{a as S,c as H}from"../../../../chunks/vec3f64.js";import{a as x,c as I,n as R,f as j}from"../../../../chunks/boundedPlane.js";import{signedDistance as O,create as C,intersectRay as z,normal as G}from"../../../../geometry/support/plane.js";import{create as U}from"../../../../geometry/support/ray.js";import{sv3d as L,sm4d as K,sv2d as A}from"../../../../geometry/support/vectorStacks.js";import{POINTER_MOVE_TIMER_MS as B,PLANE_PREVIEW_OUTLINE_WIDTH as F,forceVerticalModifier as N,forceHorizontalModifier as q,PLANE_OUTLINE_COLOR as Z,PLANE_BACKGROUND_COLOR as J,PREVIEW_FADE_DOT_THRESHOLD as Q,PREVIEW_FADE_DURATION_SECONDS as W,INITIAL_DEPTH_OFFSET_FRAC as X}from"./sliceToolConfig.js";import{createShiftManipulator as Y,createRotateManipulator as $,createResizeManipulator as tt,createGridVisualElement as et,createOutlineVisualElement as it,planeToShape as at,createRotatePlane as st,RotationAxis as nt,resizePlane as rt,calculatePlaneHalfSize as lt,SliceOrientation as ot,createPlane as ht,DidPointerMoveRecentlyFlag as pt,calculateBoundedPlaneTranslateRotate as ut,updateShiftRestartHandle as ct,updateRotateHeadingHandle as dt,updateRotateTiltHandle as _t,updateResizeHandle as vt,createShiftPlane as Pt}from"./sliceToolUtils.js";import{getRotateHeadingTexture as yt,getTiltRotateTexture as mt}from"./images/Factory.js";import{calculateInputRotationTransform as gt}from"../../interactive/manipulatorUtils.js";import{screenToRenderPlane as wt}from"../../interactive/editingTools/dragEventPipeline3D.js";import{fromScreen as ft}from"../../support/geometryUtils/ray.js";import{newIntersector as Mt}from"../../webgl-engine/lib/Intersector.js";import{StoreResults as Dt}from"../../webgl-engine/lib/IntersectorInterfaces.js";import{AnalysisToolBase as Tt}from"../../../interactive/AnalysisToolBase.js";import{createManipulatorDragEventPipeline as Vt}from"../../../interactive/dragEventPipeline.js";import{createScreenPointFromEvent as bt}from"../../../support/screenUtils.js";var kt;let Et=kt=class extends Tt{constructor(t){super(t),this._clock=i,this._previewPlaneOpacity=1,this.removeIncompleteOnCancel=!1,this.layersMode="none",this.shiftManipulator=null,this.rotateHeadingManipulator=null,this.rotateTiltManipulator=null,this.resizeManipulators=null,this._handles=new a,this._viewHandles=new a,this._frameTask=null,this._pointerMoveTimerMs=B,this._prevPointerMoveTimeout=null,this._previewPlaneGridVisualElement=null,this._previewPlaneOutlineVisualElement=null,this._startPlane=x(),this._previewPlane=null,this._activeKeyModifiers={},this._lastCursorPosition=d(),this._resizeHandles=[{direction:[1,0]},{direction:[1,1]},{direction:[0,1]},{direction:[-1,1]},{direction:[-1,0]},{direction:[-1,-1]},{direction:[0,-1]},{direction:[1,-1]}],this._intersector=Mt(t.view.state.viewingMode),this._intersector.options.store=Dt.MIN}initialize(){if(null==this.analysis)throw new Error("SliceTool requires valid analysis, but null was provided.");this._rotateHeadingImage=yt(this.view.toolViewManager.textures),this._rotateTiltImage=mt(this.view.toolViewManager.textures);const t=t=>{this._updateManipulatorsInteractive(t),t.grabbing||(r(this.analysisViewData.plane)&&I(this.analysisViewData.plane,this._startPlane),this.inputState=null)};this.shiftManipulator=Y(this.view),this.manipulators.add(this.shiftManipulator),this.shiftManipulator.events.on("grab-changed",(e=>{this._onShiftGrab(e),t(this.shiftManipulator)})),this._handles.add(this._createShiftDragPipeline(this.shiftManipulator)),this.rotateHeadingManipulator=$(this.view,this._rotateHeadingImage.texture),this.manipulators.add(this.rotateHeadingManipulator),this.rotateHeadingManipulator.events.on("grab-changed",(e=>{this._onRotateHeadingGrab(e),t(this.rotateHeadingManipulator)})),this._handles.add(this._createRotateHeadingDragPipeline(this.rotateHeadingManipulator)),this.rotateTiltManipulator=$(this.view,this._rotateTiltImage.texture),this.manipulators.add(this.rotateTiltManipulator),this.rotateTiltManipulator.events.on("grab-changed",(e=>{this._onRotateTiltGrab(e),t(this.rotateTiltManipulator)})),this._handles.add(this._createRotateTiltDragPipeline(this.rotateTiltManipulator)),this.resizeManipulators=this._resizeHandles.map(((e,i)=>{const a=tt(this.view,e);return a.events.on("grab-changed",(e=>{this._onResizeGrab(e,i),t(a)})),this._handles.add(this._createResizeDragPipeline(a)),a})),this.manipulators.addMany(this.resizeManipulators),this._previewPlaneGridVisualElement=et(this.view),this._previewPlaneOutlineVisualElement=it(this.view),this._previewPlaneOutlineVisualElement.width=F,this._handles.add(h((()=>this.analysisViewData.plane),(()=>this._updateManipulators()),p));const e=h((()=>this.state),(t=>{"sliced"===t&&this.finishToolCreation()}),u);this._handles.add([e,h((()=>this.view.state.camera),(()=>this._onCameraChange()))])}destroy(){this._rotateHeadingImage=s(this._rotateHeadingImage),this._rotateTiltImage=s(this._rotateTiltImage),this._handles=n(this._handles),this._viewHandles=n(this._viewHandles),this._removeFrameTask(),this._clearPointerMoveTimeout(),this._previewPlaneOutlineVisualElement=n(this._previewPlaneOutlineVisualElement),this._previewPlaneGridVisualElement=n(this._previewPlaneGridVisualElement)}get state(){const t=!!this.analysisViewData.plane,e=!!this.inputState;return t?t&&e?"slicing":t&&!e?"sliced":"ready":"ready"}get cursor(){return this._isPlacingSlicePlane||"exclude"===this.layersMode?"crosshair":r(this._creatingPointerId)?"grabbing":null}set analysis(t){if(null==t)throw new Error("SliceTool requires valid analysis, but null was provided.");this._handles.remove("analysis"),this._set("analysis",t)}get inputState(){return this._get("inputState")}set inputState(t){this._set("inputState",t),this.analysisViewData.showGrid=r(t)&&"resize"===t.type,this._updateMaterials()}get _isPlacingSlicePlane(){return!this.inputState&&!this.analysisViewData.plane&&this.active}get _creatingPointerId(){return r(this.inputState)&&"shift"===this.inputState.type?this.inputState.creatingPointerId:null}enterExcludeLayerMode(){l(this.analysisViewData.plane)||(this._set("layersMode","exclude"),this.active||(this.view.activeTool=this))}exitExcludeLayerMode(){l(this.analysisViewData.plane)||(this._set("layersMode","none"),this.active&&(this.view.activeTool=null))}onDeactivate(){this._set("layersMode","none"),this._updatePreviewPlane(null)}onShow(){this._updateVisibility(!0)}onHide(){this._updateVisibility(!1)}_updateVisibility(t){this._updateManipulators(),t||this._clearPointerMoveTimeout()}onInputEvent(t){switch(t.type){case"pointer-drag":if(!Ht(t))return;this._isPlacingSlicePlane?this._onClickPlacePlane(t)&&t.stopPropagation():this._onPointerDrag(t)&&t.stopPropagation();break;case"pointer-move":this._onPointerMove(t);break;case"pointer-up":this._onPointerUp(t)&&t.stopPropagation();break;case"immediate-click":if(!Ht(t))return;this._onClickPlacePlane(t)&&t.stopPropagation();break;case"click":if(!Ht(t))return;this._onClickExcludeLayer(t)&&t.stopPropagation();break;case"drag":this.inputState&&t.stopPropagation();break;case"key-down":this._onKeyDown(t)&&t.stopPropagation();break;case"key-up":this._onKeyUp(t)&&t.stopPropagation()}}onEditableChange(){this.analysisViewData.editable=this.editable}_onPointerDrag(t){const e=this.inputState;if(t.pointerId===this._creatingPointerId&&r(e)&&"shift"===e.type){const i=bt(t);return this.shiftManipulator.events.emit("drag",{action:e.hasBeenDragged?"update":"start",pointerType:t.pointerType,start:i,screenPoint:i}),e.hasBeenDragged=!0,!0}return!1}_onPointerMove(t){this._lastCursorPosition.x=t.x,this._lastCursorPosition.y=t.y,this._resetPointerMoveTimeout(),"touch"!==t.pointerType&&this._updatePreviewPlane(bt(t),this._activeKeyModifiers)}_onCameraChange(){this._updatePreviewPlane(this._lastCursorPosition,this._activeKeyModifiers),this._updateManipulators()}_onPointerUp(t){if(t.pointerId===this._creatingPointerId&&r(this.analysisViewData.plane)){const e=bt(t);return this.shiftManipulator.events.emit("drag",{action:"end",start:e,screenPoint:e}),I(this.analysisViewData.plane,this._startPlane),this.inputState=null,!0}return!1}_onClickPlacePlane(t){if("exclude"===this.layersMode)return!1;if(this._isPlacingSlicePlane){const i=bt(t),a=x();if(this._pickPlane(i,!1,this._activeKeyModifiers,a)){if(I(a,this._startPlane),this.analysis.shape=at(a,this.view,this.view.spatialReference,new e),"pointer-drag"===t.type){const e=this._calculatePickRay(i);this.inputState=St(e,t.pointerId,a.origin,a)}return!0}}return!1}_onClickExcludeLayer(t){return!("exclude"!==this.layersMode||!this.created)&&(this.view.hitTest(bt(t)).then((t=>{if(t.results.length){const e=t.results[0],i="graphic"===e?.type&&e.graphic;if(i){const t=i.sourceLayer||i.layer;t&&this.analysis.excludedLayers.push(t)}}else t.ground.layer?this.analysis.excludedLayers.push(t.ground.layer):this.analysis.excludeGroundSurface=!0})),this._set("layersMode","none"),this.active&&(this.view.activeTool=null),!0)}_onKeyDown(t){return(t.key===N||t.key===q)&&(this._activeKeyModifiers[t.key]=!0,r(this._previewPlane)&&this._updatePreviewPlane(this._lastCursorPosition,this._activeKeyModifiers),!0)}_onKeyUp(t){return!(t.key!==N&&t.key!==q||!this._activeKeyModifiers[t.key])&&(delete this._activeKeyModifiers[t.key],r(this._previewPlane)&&this._updatePreviewPlane(this._lastCursorPosition,this._activeKeyModifiers),!0)}_onShiftGrab(t){if("start"!==t.action||l(this.analysisViewData.plane))return;const e=this._calculatePickRay(t.screenPoint);I(this.analysisViewData.plane,this._startPlane),this.inputState=St(e,null,this.shiftManipulator.renderLocation,this.analysisViewData.plane)}_createShiftDragPipeline(t){return Vt(t,((t,e,i)=>{const a=this.inputState;if(l(a)||"shift"!==a.type)return;const s=r(this.analysisViewData.plane)?I(this.analysisViewData.plane,x()):null;e.next(wt(this.view,a.shiftPlane)).next(this._shiftDragAdjustSensitivity(a)).next(this._shiftDragUpdatePlane(a)),i.next((()=>{r(s)&&this._updateBoundedPlane(s)}))}))}_shiftDragAdjustSensitivity(t){return e=>{if(l(this.analysisViewData.plane))return null;const i=.001,a=Math.min((1-Math.abs(f(R(this.analysisViewData.plane),e.ray.direction)/M(e.ray.direction)))/i,1),s=-O(this._startPlane.plane,e.renderEnd),n=-O(this._startPlane.plane,t.startPoint);return t.depth=t.depth*(1-a)+s*a-n,e}}_shiftDragUpdatePlane(t){return()=>{if(l(this.analysisViewData.plane))return;const e=D(L.get(),this._startPlane.origin),i=D(L.get(),R(this._startPlane));T(i,i,-t.depth),V(i,i,e);const a=j(i,this.analysisViewData.plane.basis1,this.analysisViewData.plane.basis2,x());this._updateBoundedPlane(a)}}_onRotateHeadingGrab(t){if("start"!==t.action||l(this.analysisViewData.plane))return;const e=st(this.analysisViewData.plane,this.view.renderCoordsHelper,nt.HEADING,C()),i=this._calculatePickRay(t.screenPoint),a=H();z(e,i,a)&&(I(this.analysisViewData.plane,this._startPlane),this.inputState={type:"rotate",rotatePlane:e,startPoint:a})}_createRotateHeadingDragPipeline(t){return Vt(t,((t,e,i)=>{const a=this.inputState;if(l(a)||"rotate"!==a.type)return;const s=r(this.analysisViewData.plane)?I(this.analysisViewData.plane,x()):null;e.next(wt(this.view,a.rotatePlane)).next(this._rotateDragRenderPlaneToRotate(a)).next(this._rotateDragUpdatePlaneFromRotate()),i.next((()=>{r(s)&&this._updateBoundedPlane(s)}))}))}_onRotateTiltGrab(t){if("start"!==t.action||l(this.analysisViewData.plane))return;const e=st(this.analysisViewData.plane,this.view.renderCoordsHelper,nt.TILT,C()),i=this._calculatePickRay(t.screenPoint),a=H();z(e,i,a)&&(I(this.analysisViewData.plane,this._startPlane),this.inputState={type:"rotate",rotatePlane:e,startPoint:a})}_createRotateTiltDragPipeline(t){return Vt(t,((t,e,i)=>{const a=this.inputState;if(l(a)||"rotate"!==a.type)return;const s=r(this.analysisViewData.plane)?I(this.analysisViewData.plane,x()):null;e.next(wt(this.view,a.rotatePlane)).next(this._rotateDragRenderPlaneToRotate(a)).next(this._rotateDragUpdatePlaneFromRotate()),i.next((()=>{r(s)&&this._updateBoundedPlane(s)}))}))}_rotateDragRenderPlaneToRotate(t){return e=>{if(l(this.analysisViewData.plane))return null;const i=G(t.rotatePlane),a=gt(t.startPoint,e.renderEnd,this.analysisViewData.plane.origin,i);return{...e,rotateAxis:i,rotateAngle:a}}}_rotateDragUpdatePlaneFromRotate(){return t=>{if(l(this.analysisViewData.plane))return;const e=m(K.get(),t.rotateAngle,t.rotateAxis);if(l(e))return;const i=b(L.get(),this._startPlane.basis1,e),a=b(L.get(),this._startPlane.basis2,e),s=j(this.analysisViewData.plane.origin,i,a,x());this._updateBoundedPlane(s)}}_onResizeGrab(t,e){if("start"!==t.action||l(this.analysisViewData.plane))return;const i=this._calculatePickRay(t.screenPoint),a=L.get();z(this.analysisViewData.plane.plane,i,a)&&(I(this.analysisViewData.plane,this._startPlane),this.inputState={type:"resize",activeHandleIdx:e,startPoint:S(a)})}_createResizeDragPipeline(t){return Vt(t,((t,e,i)=>{const a=this.inputState;if(l(a)||"resize"!==a.type||l(this.analysisViewData.plane))return;const s=I(this.analysisViewData.plane,x());e.next(wt(this.view,this.analysisViewData.plane.plane)).next(this._resizeDragUpdatePlane(a)),i.next((()=>{this._updateBoundedPlane(s)}))}))}_resizeDragUpdatePlane(t){return e=>{if(l(this.analysisViewData.plane))return;const i=this._resizeHandles[t.activeHandleIdx],a=rt(i,t.startPoint,e.renderEnd,this.view.state.camera,this._startPlane,I(this.analysisViewData.plane));this._updateBoundedPlane(a)}}_updateBoundedPlane(t){const e=this.analysisViewData;if(!r(e))throw new Error("valid internal object expected");e.plane=t}_updatePreviewPlane(t,e={}){let i=this._previewPlane;if(this._previewPlane=null,l(t))return this._removeFrameTask(),void this._updateManipulators();if(!this.analysisViewData.plane&&this.active){const a=r(i)?i:x();if(i=r(i)?I(i,xt):null,this._pickPlane(t,!0,e,a)){const t=Q;let e=!1;r(i)&&(e=f(i.plane,a.plane)<t||f(k(L.get(),i.basis1),k(L.get(),a.basis1))<t),e&&(this._previewPlaneOpacity=0),this._previewPlane=a}}r(this._previewPlane)&&l(this._frameTask)&&0===this._previewPlaneOpacity?this._frameTask=c({update:({deltaTime:t})=>{this._previewPlaneOpacity=Math.min(this._previewPlaneOpacity+t/(1e3*W),1),this._updateManipulators(),1===this._previewPlaneOpacity&&this._removeFrameTask()}}):l(this._previewPlane)&&r(this._frameTask)?this._removeFrameTask():r(this._previewPlane)&&this._updateManipulators()}_removeFrameTask(){this._frameTask=o(this._frameTask)}_calculatePickRay(t){const e=U(),i=_(t,It);return ft(this.view.state.camera,i,e),k(e.direction,e.direction),e}_pickMinResult(t){const e=_(t,A.get());return this.view.sceneIntersectionHelper.intersectToolIntersectorScreen(e,this._intersector),this._intersector.results.min}_pickPlane(t,e,i,a){const s=this._pickMinResult(t),n=L.get();if(!s.getIntersectionPoint(n))return!1;const r=s.getTransformedNormal(L.get()),l=this.view.state.camera;f(r,l.viewForward)>0&&T(r,r,-1);const o=lt(n,l),h=(e?1:-1)*o*X,p=T(L.get(),r,h);V(p,p,n);const u=this.analysis.tiltEnabled?ot.TILTED:ot.HORIZONTAL_OR_VERTICAL,c=i[N]?ot.VERTICAL:i[q]?ot.HORIZONTAL:u;return ht(p,r,o,o,l,c,this.view.renderCoordsHelper,a),!0}_clearPointerMoveTimeout(){this._prevPointerMoveTimeout=o(this._prevPointerMoveTimeout)}_resetPointerMoveTimeout(){this._clearPointerMoveTimeout(),this.shiftManipulator.state|=pt,this.rotateHeadingManipulator.state|=pt,this.rotateTiltManipulator.state|=pt,this._prevPointerMoveTimeout=this._clock.setTimeout((()=>{this.shiftManipulator.state&=~pt,this.rotateHeadingManipulator.state&=~pt,this.rotateTiltManipulator.state&=~pt}),this._pointerMoveTimerMs)}_updateManipulators(){if(kt.disableEngineLayers)return;let t=null,e=!1;if(r(this.analysisViewData.plane))t=this.analysisViewData.plane,e=!1;else{if(!r(this._previewPlane))return this.shiftManipulator.available=!1,this.rotateHeadingManipulator.available=!1,this.rotateTiltManipulator.available=!1,this.resizeManipulators.forEach((t=>t.available=!1)),this._previewPlaneOutlineVisualElement.visible=!1,void(this._previewPlaneGridVisualElement.visible=!1);t=this._previewPlane,e=!0}const i=ut(t,K.get());e?(this.shiftManipulator.available=!1,this.rotateHeadingManipulator.available=!1,this.rotateTiltManipulator.available=!1,this.resizeManipulators.forEach((t=>t.available=!1)),this._previewPlaneOutlineVisualElement.visible=!0,this._previewPlaneGridVisualElement.visible=!0):(this.shiftManipulator.available=!0,this.rotateHeadingManipulator.available=!0,this.rotateTiltManipulator.available=this.analysis.tiltEnabled,this.resizeManipulators.forEach((t=>t.available=!0)),ct(this.shiftManipulator,i,t,this.view.state.camera),dt(this.rotateHeadingManipulator,i,t,this.view.renderCoordsHelper),_t(this.rotateTiltManipulator,i,t),this.resizeManipulators.forEach(((e,a)=>vt(e,this._resizeHandles[a],i,t))),this._previewPlaneOutlineVisualElement.visible=!1,this._previewPlaneGridVisualElement.visible=!1);const a=E(L.get(),M(t.basis1),M(t.basis2),1),s=g(K.get(),a),n=w(s,i,s);this._previewPlaneOutlineVisualElement.transform=n,this._previewPlaneGridVisualElement.transform=n,this._updateMaterials()}_updateMaterials(){const t=[Z[0],Z[1],Z[2],Z[3]*this._previewPlaneOpacity];this._previewPlaneOutlineVisualElement.color=t;const e=[J[0],J[1],J[2],J[3]*this._previewPlaneOpacity],i=[0,0,0,0];this._previewPlaneGridVisualElement.backgroundColor=e,this._previewPlaneGridVisualElement.gridColor=i}_updateManipulatorsInteractive(t){if(!t.grabbing)return this.shiftManipulator.interactive=!0,this.rotateHeadingManipulator.interactive=!0,this.rotateTiltManipulator.interactive=!0,void this.resizeManipulators.forEach((t=>{t.interactive=!0}));this.shiftManipulator.interactive=this.shiftManipulator===t,this.rotateHeadingManipulator.interactive=this.rotateHeadingManipulator===t,this.rotateTiltManipulator.interactive=this.rotateTiltManipulator===t,this.resizeManipulators.forEach((e=>{e.interactive=e===t}))}testData(){return{plane:this.analysisViewData.plane,setPointerMoveTimerMs:t=>{this._pointerMoveTimerMs=t}}}};function St(t,e,i,a){const s=Pt(i,R(a),t.direction,C()),n=H();return z(s,t,n)?{type:"shift",creatingPointerId:e,hasBeenDragged:!1,shiftPlane:s,depth:0,startPoint:n}:null}function Ht(t){return"mouse"!==t.pointerType||0===t.button}Et.disableEngineLayers=!1,t([P()],Et.prototype,"_clock",void 0),t([P({constructOnly:!0})],Et.prototype,"view",void 0),t([P()],Et.prototype,"analysisViewData",void 0),t([P({readOnly:!0})],Et.prototype,"state",null),t([P({readOnly:!0})],Et.prototype,"cursor",null),t([P()],Et.prototype,"analysis",null),t([P()],Et.prototype,"removeIncompleteOnCancel",void 0),t([P({readOnly:!0})],Et.prototype,"layersMode",void 0),t([P({value:null})],Et.prototype,"inputState",null),t([P()],Et.prototype,"_isPlacingSlicePlane",null),t([P()],Et.prototype,"_creatingPointerId",null),Et=kt=t([y("esri.views.3d.analysis.Slice.SliceTool")],Et);const xt=x(),It=v(),Rt=Et;export{Rt 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.25/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import"../../../../geometry.js";import e from"../../../../analysis/SlicePlane.js";import"../../../../core/has.js";import t from"../../../../core/Logger.js";import{rad2deg as r,deg2rad as i}from"../../../../core/mathUtils.js";import{isNone as n,isSome as o}from"../../../../core/maybe.js";import{castRenderScreenPointArray3 as s}from"../../../../core/screenUtils.js";import{p as a,b as c,l,m as u,r as d,i as m,h as p,C as g}from"../../../../chunks/mat4.js";import{c as f}from"../../../../chunks/mat4f64.js";import{r as b}from"../../../../chunks/quat.js";import{g as h,c as T,e as O,f as y,n as w,a as I,l as E,b as R,p as j,s as A,w as M}from"../../../../chunks/vec3.js";import{a as L,c as P,f as C}from"../../../../chunks/vec3f64.js";import{tryProjectWithZConversion as k}from"../../../../geometry/projection.js";import{Axis as _}from"../../../../geometry/support/Axis.js";import{r as N,f as v,i as U,a as V,n as S,u as G}from"../../../../chunks/boundedPlane.js";import{fromPositionAndNormal as x,fromVectorsAndPoint as F}from"../../../../geometry/support/plane.js";import{create as H}from"../../../../geometry/support/ray.js";import{angleAroundAxis as D}from"../../../../geometry/support/vector.js";import{sv3d as z,sm4d as X,sq4d as Y}from"../../../../geometry/support/vectorStacks.js";import{SHIFT_RESTART_TIP_RADIUS as Z,RESIZE_HANDLE_EDGE_PADDING_FRAC as B,VERTICAL_DOT_THRESHOLD as W,SMALL_ANGLE_DOT_THRESHOLD as q,PLANE_MIN_BASIS_SCREEN_LEN2 as $,INITIAL_PLANE_HALF_SIZE_VIEW_PROPORTION as J,SHIFT_RESTART_OFFSET_DISTANCE as K,SHIFT_RESTART_ARROW_TIP_COLOR as Q,SHIFT_RESTART_ARROW_CAP_COLOR as ee,SHIFT_RESTART_TUBE_COLOR as te,SHIFT_RESTART_OUTLINE_COLOR as re,SHIFT_RESTART_CALLOUT_COLOR as ie,ROTATE_HEADING_OFFSET_DISTANCE as ne,ROTATE_HEADING_DISC_RADIUS as oe,ROTATE_HEADING_CALLOUT_COLOR as se,PLANE_OUTLINE_COLOR as ae,PLANE_OUTLINE_WIDTH as ce,PLANE_BACKGROUND_COLOR as le,GRID_COLOR as ue,RESIZE_HANDLE_CORNER_INPUT_RADIUS as de,RESIZE_HANDLE_EDGE_INPUT_RADIUS as me,ROTATE_HEADING_TIP_LENGTH as pe,ROTATE_HEADING_DISC_RADIUS_FOCUS_MULTIPLIER as ge,RESIZE_HANDLE_COLOR as fe,DISPLAY_FOCUS_MULTIPLIER as be,RESIZE_HANDLE_EDGE_WIDTH as he,SHIFT_RESTART_ARROW_LENGTH as Te,SHIFT_RESTART_TUBE_RADIUS as Oe,SHIFT_RESTART_TIP_LENGTH as ye,SHIFT_RESTART_TUBE_FOCUS_MULTIPLIER as we,SHIFT_RESTART_TIP_FOCUS_MULTIPLIER as Ie,SHIFT_RESTART_ARROW_OUTLINE_WIDTH as Ee,RESIZE_HANDLE_CORNER_WIDTH as Re}from"./sliceToolConfig.js";import{applyProjectionAndElevationAlignment as je}from"../support/projectionUtils.js";import{Manipulator3D as Ae}from"../../interactive/Manipulator3D.js";import{calculateTranslateRotateFromBases as Me}from"../../interactive/manipulatorUtils.js";import{LineVisualElement as Le}from"../../interactive/visualElements/LineVisualElement.js";import{SlicePlaneVisualElement as Pe}from"../../interactive/visualElements/SlicePlaneVisualElement.js";import{RenderCoordsHelper as Ce}from"../../support/RenderCoordsHelper.js";import{fromRender as ke}from"../../support/geometryUtils/ray.js";import{CullFaceOptions as _e}from"../../webgl-engine/lib/basicInterfaces.js";import{Geometry as Ne}from"../../webgl-engine/lib/Geometry.js";import ve from"../../webgl-engine/lib/GeometryUtil.js";import{RenderOccludedFlag as Ue}from"../../webgl-engine/lib/Material.js";import{VertexAttribute as Ve}from"../../webgl-engine/lib/VertexAttribute.js";import{ColorMaterial as Se}from"../../webgl-engine/materials/ColorMaterial.js";import{ImageMaterial as Ge}from"../../webgl-engine/materials/ImageMaterial.js";import{NativeLineMaterial as xe}from"../../webgl-engine/materials/NativeLineMaterial.js";import{RibbonLineMaterial as Fe}from"../../webgl-engine/materials/RibbonLineMaterial.js";import{ManipulatorStateCustomFlags as He,ManipulatorStateFlags as De}from"../../../interactive/interfaces.js";import ze from"../../../../geometry/Extent.js";function Xe(e,t,r,i,n,o,s,a){return Ye(t,s.worldUpAtPosition(e,z.get()),n,o,a.basis1,a.basis2),h(a.basis1,a.basis1,r),h(a.basis2,a.basis2,i),T(a.origin,e),F(a.basis2,a.basis1,a.origin,a.plane),a}function Ye(e,t,r,i,n,o){const s=O(e,t),a=z.get(),c=z.get();switch(i===Lt.HORIZONTAL_OR_VERTICAL?Math.abs(s)>W?Lt.HORIZONTAL:Lt.VERTICAL:i){case Lt.VERTICAL:{const i=Math.abs(s)<=q?e:r.viewUp;y(a,i,t),T(c,t);break}case Lt.HORIZONTAL:y(a,r.viewUp,t),y(c,t,a);break;case Lt.TILTED:{const i=Math.abs(s)<=q?t:r.viewUp;y(a,i,e),y(c,e,a);break}}const l=y(z.get(),a,c);O(l,r.viewForward)>0&&h(c,c,-1),w(n,a),w(o,c)}function Ze(e,t,r){const i=t.worldUpAtPosition(e.origin,z.get()),n=e.basis1,o=yt(e,i),s=Math.round(o/kt)*kt;return N(e,s-o,n,r)}function Be(e,t,r,i,n,o){const s=T(z.get(),n.origin);I(s,s,h(z.get(),n.basis1,e.direction[0]<0?1:-1)),I(s,s,h(z.get(),n.basis2,e.direction[1]<0?1:-1));const a=E(n.basis1),c=E(n.basis2),l=R(z.get(),r,s),u=R(z.get(),t,s);let d=0,m=0;if(ct(e)){const t=at(n),r=at(o);d=a-.5*e.direction[0]*O(n.basis1,u)/a,m=c-.5*e.direction[1]*O(n.basis2,u)/c;const i=r/t;d*=i,m*=i}const p=d+.5*e.direction[0]*O(n.basis1,l)/a,g=m+.5*e.direction[1]*O(n.basis2,l)/c,f=h(z.get(),n.basis1,p/a),b=h(z.get(),n.basis2,g/c);(p<=0||ot(o.origin,f,i)<=$)&&T(f,o.basis1),(g<=0||ot(o.origin,b,i)<=$)&&T(b,o.basis2);const y=T(z.get(),s);return I(y,y,h(z.get(),f,e.direction[0]<0?-1:1)),I(y,y,h(z.get(),b,e.direction[1]<0?-1:1)),v(y,f,b,o)}function We(e,t){return J*Math.min(t.width,t.height)*t.computeRenderPixelSizeAt(e)}function qe(e,t,r,i){const n=y(z.get(),t,r);return y(n,n,t),x(e,n,i)}function $e(e,t){return Me(e.basis1,e.basis2,e.origin,t)}function Je(e,t,r,i){const n=t.worldUpAtPosition(e.origin,z.get()),o=z.get();switch(r){case Mt.HEADING:T(o,n);break;case Mt.TILT:T(o,e.basis1)}return x(e.origin,o,i)}function Ke(e,t,r,i){const n=nt(r,it.NEGATIVE_X),o=X.get();a(o,t,n.edge*Math.PI/2);const c=w(z.get(),n.basis);let l=h(z.get(),c,n.direction*i.computeScreenPixelSizeAt(n.position)*K);I(l,l,n.position);const u=i.projectToRenderScreen(l,s(z.get())),d=Qe(i,u);ke(i,u,Ct),w(Ct.direction,Ct.direction);const m=z.get();!d&&U(r,Ct,m)&&(l=m),o[12]=0,o[13]=0,o[14]=0,e.modelTransform=o,e.renderLocation=L(l),d?e.state|=Pt:e.state&=~Pt}function Qe(e,t){const[r,i,n,o]=e.viewport,s=Math.min(n,o)/16;let a=!0;return t[0]<r+s?(t[0]=r+s,a=!1):t[0]>r+n-s&&(t[0]=r+n-s,a=!1),t[1]<i+s?(t[1]=i+s,a=!1):t[1]>i+o-s&&(t[1]=i+o-s,a=!1),a}function et(e,t,r,i){const n=E(i.basis1),o=E(i.basis2),s=st(i),a=at(i),d=A(z.get(),0,0,0);I(d,h(z.get(),i.basis1,t.direction[0]),h(z.get(),i.basis2,t.direction[1])),I(d,i.origin,d);let m=0,p=1;if(ct(t))1===t.direction[0]&&-1===t.direction[1]?m=kt:1===t.direction[0]&&1===t.direction[1]?m=Math.PI:-1===t.direction[0]&&1===t.direction[1]&&(m=3*Math.PI/2),p=a;else{const e=0!==t.direction[0]?1:2;m=1===e?kt:0,p=(1===e?o:n)-s}const g=c(X.get(),m);l(g,g,A(z.get(),p,p,p)),u(g,r,g),g[12]=0,g[13]=0,g[14]=0,e.modelTransform=g,e.renderLocation=d}function tt(e,t,r,i){const n=i.worldUpAtPosition(r.origin,z.get()),o=nt(r,it.POSITIVE_X),s=c(X.get(),o.edge*Math.PI/2);d(s,s,-yt(r,n)),u(s,t,s),s[12]=0,s[13]=0,s[14]=0,e.modelTransform=s,e.renderLocation=o.position}function rt(e,t,r){const i=nt(r,it.POSITIVE_Y),n=c(X.get(),i.edge*Math.PI/2);d(n,n,kt),u(n,t,n),n[12]=0,n[13]=0,n[14]=0,e.modelTransform=n,e.renderLocation=i.position}var it;function nt(e,t){switch(t){case it.POSITIVE_X:return{basis:e.basis1,direction:1,position:I(z.get(),e.origin,e.basis1),edge:t};case it.POSITIVE_Y:return{basis:e.basis2,direction:1,position:I(z.get(),e.origin,e.basis2),edge:t};case it.NEGATIVE_X:return{basis:e.basis1,direction:-1,position:R(z.get(),e.origin,e.basis1),edge:t};case it.NEGATIVE_Y:return{basis:e.basis2,direction:-1,position:R(z.get(),e.origin,e.basis2),edge:t}}}function ot(e,t,r){const i=r.projectToRenderScreen(I(z.get(),e,t),s(z.get())),n=r.projectToRenderScreen(R(z.get(),e,t),s(z.get()));return j(R(i,i,n))}function st(e){const t=E(e.basis1),r=E(e.basis2);return B*Math.min(t,r)}function at(e){return st(e)}function ct(e){return 0!==e.direction[0]&&0!==e.direction[1]}function lt(e,t=vt.CENTER_ON_ARROW){const r=t===vt.CENTER_ON_CALLOUT?K:0,i=[C(r,0,-Te/2),C(r,0,Te/2)],n=bt(i,!0),o=(e,t)=>gt(i,i,{tubeRadius:Oe,tipRadius:Z,tipLength:ye,tubeFocusMultiplier:we,tipFocusMultiplier:Ie,padding:e,bothEnds:!0,flat:null,focusTipLength:!0,addCap:t}),s=o(0,!1),a=o(Ee,!0),c=new Se({color:Q,cullFace:_e.Back,renderOccluded:Ue.Opaque}),l=new Se({color:ee,cullFace:_e.Back,renderOccluded:Ue.Opaque}),u=new Se({color:te,cullFace:_e.Back,renderOccluded:Ue.Opaque}),d=new Se({color:re,transparent:!0,writeDepth:!1,cullFace:_e.Front,renderOccluded:Ue.Transparent}),m=ve.createPolylineGeometry([[r,0,0],[r-K,0,0]]),p=ve.createPolylineGeometry([[r,0,0],[r-K,0,0]]),g=new xe({color:ie,renderOccluded:Ue.OccludeAndTransparent});return new Ae({view:e,renderObjects:[...s.normal.map((({part:e,geometry:t,transform:r})=>({geometry:t,material:"tip"===e?c:"cap"===e?l:u,transform:r,stateMask:De.Unfocused|At}))),...a.normal.map((({geometry:e,transform:t})=>({geometry:e,material:d,transform:t,stateMask:De.Unfocused|At}))),{geometry:m,material:g,stateMask:De.Unfocused|At|Pt},...s.focused.map((({part:e,geometry:t,transform:r})=>({geometry:t,material:"tip"===e?c:"cap"===e?l:u,transform:r,stateMask:De.Focused|At}))),...a.focused.map((({geometry:e,transform:t})=>({geometry:e,material:d,transform:t,stateMask:De.Focused|At}))),{geometry:p,material:g,stateMask:De.Focused|At|Pt}],autoScaleRenderObjects:!1,collisionType:{type:"line",paths:[n]},collisionPriority:1,radius:Z,state:At})}function ut(e,t){const r=new Ge({transparent:!0,writeDepth:!1,textureId:t.id,renderOccluded:Ue.Opaque}),i=ne,n=oe,o=n*ge,s=e=>{const t=new Uint32Array([0,1,2,2,3,0]);return new Ne([[Ve.POSITION,{size:3,data:[i-e,-e,0,i+e,-e,0,i+e,e,0,i-e,e,0],exclusive:!0}],[Ve.UV0,{size:2,data:[0,0,1,0,1,1,0,1]}]],[[Ve.POSITION,t],[Ve.UV0,t]])},a=ve.createPolylineGeometry([[0,0,0],[i-n,0,0]]),c=ve.createPolylineGeometry([[0,0,0],[i-o,0,0]]),l=new xe({color:se,renderOccluded:Ue.OccludeAndTransparent}),u=[{geometry:s(n),material:r,stateMask:De.Unfocused|At},{geometry:a,material:l,stateMask:De.Unfocused|At},{geometry:s(o),material:r,stateMask:De.Focused|At},{geometry:c,material:l,stateMask:De.Focused|At}];return new Ae({view:e,renderObjects:u,autoScaleRenderObjects:!1,collisionType:{type:"disc",direction:[0,0,1],offset:[i,0,0]},collisionPriority:1,radius:n/2,state:At})}function dt(e){const t=[[-1,-1,0],[1,-1,0],[1,1,0],[-1,1,0],[-1,-1,0]];return new Le({view:e,attached:!0,color:ae,width:ce,writeDepthEnabled:!1,renderOccluded:Ue.OccludeAndTransparent,geometry:[t]})}function mt(e){return new Pe({view:e,attached:!0,backgroundColor:[...le],gridColor:ue,gridWidth:4,renderOccluded:Ue.OccludeAndTransparent})}function pt(e,t){const r=ct(t),i=r?[C(1,0,0),C(0,0,0),C(0,1,0)]:[C(1,0,0),C(-1,0,0)],n=ve.createPolylineGeometry(i),o=fe,s=e=>new Fe({color:o,width:e,renderOccluded:Ue.OccludeAndTransparent}),a=()=>new xe({color:o,renderOccluded:Ue.OccludeAndTransparent}),c=r?Re:he,l=c*be,u=he,d=e=>e>1?s(e):a(),m=[{geometry:n,material:d(c),stateMask:De.Unfocused|_t},{geometry:n,material:d(l),stateMask:De.Focused|_t},{geometry:n,material:d(u),stateMask:Nt}],p=new Ae({view:e,renderObjects:m,collisionType:{type:"line",paths:[i]},autoScaleRenderObjects:!1,worldSized:!0,radius:r?de:me});return p.state=_t,p}function gt(e,t,r){const i=i=>{const n=(i?t:e).slice(0),s=R(z.get(),n[0],n[1]);w(s,s);const a=R(z.get(),n[n.length-1],n[n.length-2]);if(w(a,a),r.padding>0){const e=h(P(),a,-r.padding);if(n[n.length-1]=I(e,e,n[n.length-1]),r.bothEnds){const e=h(P(),s,-r.padding);n[0]=I(e,e,n[0])}}const c=i?r.tipFocusMultiplier:1,d=r.tipLength*(r.focusTipLength?c:1),T=r.tipRadius*c,O=m(X.get());if(r.padding>0){const e=d/4,t=A(z.get(),0,e,0),i=1+r.padding/e;p(O,O,t),l(O,O,A(z.get(),i,i,i)),p(O,O,h(t,t,-1/i))}const y=m(f()),E=C(0,1,0),j=g(f(),b(Y.get(),E,a));j[12]=n[n.length-1][0],j[13]=n[n.length-1][1],j[14]=n[n.length-1][2],u(j,j,O);const M=[{part:"tube",geometry:ft(r.tubeRadius*(i?r.tubeFocusMultiplier:1)+r.padding,r.flat,n),transform:y}];let L,k;if(o(r.flat)?L=ve.createExtrudedTriangle(d,T,T,r.flat.thickness):(L=ve.createConeGeometry(d,T,24,!1,!1,!0),k=ve.createConeGeometry(d,T,24,!1,!0,!1)),M.push({part:"tip",geometry:L,transform:j}),k&&M.push({part:"cap",geometry:k,transform:j}),r.bothEnds){const e=g(f(),b(Y.get(),E,s));e[12]=n[0][0],e[13]=n[0][1],e[14]=n[0][2],u(e,e,O),M.push({part:"tip",geometry:L,transform:e}),k&&M.push({part:"cap",geometry:k,transform:e})}return M};return{normal:i(!1),focused:i(!0)}}function ft(e,t,r){const i=[];if(o(t))i.push([e,t.thickness/2],[-e,t.thickness/2],[-e,-t.thickness/2],[e,-t.thickness/2]);else{const t=12;for(let r=0;r<t;r++){const n=r/t*2*Math.PI;i.push([Math.cos(n)*e,Math.sin(n)*e])}}return ve.createPathExtrusionGeometry(i,r,[],[],!1)}function bt(e,t){const r=R(P(),e[e.length-1],e[e.length-2]);if(w(r,r),h(r,r,pe),I(r,r,e[e.length-1]),t){const t=R(P(),e[0],e[1]);return w(t,t),h(t,t,pe),I(t,t,e[0]),[t,...e,r]}return[...e,r]}function ht(t,i,o,s=new e){if(n(t))return null;const{renderCoordsHelper:a}=i,c=a.fromRenderCoords(t.origin,i.spatialReference);if(n(c))return null;const l=k(c,o);if(n(l))return null;s.position=l;const u=a.worldUpAtPosition(t.origin,z.get()),d=a.worldBasisAtPosition(t.origin,_.Y,z.get()),m=2*E(t.basis1),p=2*E(t.basis2),g=Ce.renderUnitScaleFactor(i.spatialReference,o);return s.width=m*g,s.height=p*g,s.tilt=r(yt(t,u)),s.heading=r(wt(t,u,d)),s}function Tt(e,t,r){if(n(e)||n(e.position))return null;const{spatialReference:i}=e.position,s=Ot(Rt(e,{renderCoordsHelper:t,spatialReference:i},r),t,i);return!e.position.hasZ&&o(s)&&(s.zmin=null,s.zmax=null),s}function Ot(e,t,r){if(n(e))return null;const i=e.origin,o=z.get(),s=z.get(),a=z.get(),c=z.get();let l,u,d,m,p,g;I(o,i,e.basis1),I(o,o,e.basis2),I(s,i,e.basis1),M(s,s,e.basis2),M(a,i,e.basis1),M(a,a,e.basis2),M(c,i,e.basis1),I(c,c,e.basis2);for(const f of[o,s,a,c]){const e=t.fromRenderCoords(f,f,r);if(n(e))return null;l=null==l?e[0]:Math.min(l,e[0]),u=null==u?e[0]:Math.max(u,e[0]),d=null==d?e[1]:Math.min(d,e[1]),m=null==m?e[1]:Math.max(m,e[1]),p=null==p?e[2]:Math.min(p,e[2]),g=null==g?e[2]:Math.max(g,e[2])}return new ze({xmin:l,xmax:u,ymin:d,ymax:m,zmin:p,zmax:g,spatialReference:r})}function yt(e,t){return D(t,e.basis2,e.basis1)+kt}function wt(e,t,r){return D(e.basis1,r,t)-kt}function It(e,r,n,o,s,a,c=V()){return a.toRenderCoords(e,c.origin)?(a.worldBasisAtPosition(c.origin,_.X,c.basis1),a.worldBasisAtPosition(c.origin,_.Y,c.basis2),F(c.basis2,c.basis1,c.origin,c.plane),N(c,-i(r),S(c),c),N(c,i(n),c.basis1,c),h(c.basis1,c.basis1,o/2),h(c.basis2,c.basis2,s/2),G(c),c):(t.getLogger("esri.views.3d.analysis.Slice.sliceToolUtils").error(`Failed to project slice plane position, projection from ${e.spatialReference.wkid} is not supported`),null)}function Et(e,t){if(n(e)||n(e.position))return null;const r=je(e.position,t.spatialReference,t.elevationProvider);if(n(r))return null;const i=Ce.renderUnitScaleFactor(e.position.spatialReference,t.spatialReference),o=e.width*i,s=e.height*i;return{position:r,heading:e.heading,tilt:e.tilt,renderWidth:o,renderHeight:s}}function Rt(e,t,r,i=V()){const o=Et(e,t);return n(o)?null:jt(o,t,r,i)}function jt(e,t,r,i=V()){if(n(e))return null;const s=It(e.position,e.heading,e.tilt,e.renderWidth,e.renderHeight,t.renderCoordsHelper,i);return!r.tiltEnabled&&o(s)&&Ze(s,t.renderCoordsHelper,s),s}!function(e){e[e.POSITIVE_X=0]="POSITIVE_X",e[e.POSITIVE_Y=1]="POSITIVE_Y",e[e.NEGATIVE_X=2]="NEGATIVE_X",e[e.NEGATIVE_Y=3]="NEGATIVE_Y"}(it||(it={}));const At=He.Custom1;var Mt,Lt;!function(e){e[e.HEADING=1]="HEADING",e[e.TILT=2]="TILT"}(Mt||(Mt={})),function(e){e[e.HORIZONTAL_OR_VERTICAL=0]="HORIZONTAL_OR_VERTICAL",e[e.HORIZONTAL=1]="HORIZONTAL",e[e.VERTICAL=2]="VERTICAL",e[e.TILTED=3]="TILTED"}(Lt||(Lt={}));const Pt=He.Custom2,Ct=H(),kt=Math.PI/2,_t=He.Custom1,Nt=He.Custom2;var vt;function Ut(e){const t="building-scene-3d"===e.type?e:null;return o(t)}!function(e){e[e.CENTER_ON_CALLOUT=0]="CENTER_ON_CALLOUT",e[e.CENTER_ON_ARROW=1]="CENTER_ON_ARROW"}(vt||(vt={}));export{At as DidPointerMoveRecentlyFlag,Pt as IsShiftEdgeOnScreenFlag,vt as OffsetMode,Mt as RotationAxis,Lt as SliceOrientation,bt as addArrowTips,$e as calculateBoundedPlaneTranslateRotate,at as calculateDiagonalResizeHandleScale,We as calculatePlaneHalfSize,st as calculateResizeHandlePadding,ot as calculateScreenSpaceBasisLength2,gt as createArrowGeometry,mt as createGridVisualElement,dt as createOutlineVisualElement,Xe as createPlane,pt as createResizeManipulator,ut as createRotateManipulator,Je as createRotatePlane,lt as createShiftManipulator,qe as createShiftPlane,Ze as forceHorizontalOrVertical,ct as isDiagonalResizeHandle,Ut as isIBuildingSceneLayerView3D,Ye as normalToBases,Ot as planeToExtent,ht as planeToShape,Et as projectAndElevationAlignShape,jt as projectedShapeToPlane,_t as resizeNormal,Nt as resizeOutlineOnly,Be as resizePlane,Tt as shapeToExtent,Rt as shapeToPlane,et as updateResizeHandle,tt as updateRotateHeadingHandle,rt as updateRotateTiltHandle,Ke as updateShiftRestartHandle};
|
|
5
|
+
import"../../../../geometry.js";import e from"../../../../analysis/SlicePlane.js";import"../../../../core/has.js";import t from"../../../../core/Logger.js";import{rad2deg as r,deg2rad as i}from"../../../../core/mathUtils.js";import{isNone as n,isSome as o}from"../../../../core/maybe.js";import{castRenderScreenPointArray3 as s}from"../../../../core/screenUtils.js";import{p as a,b as c,l,m as u,r as d,i as m,h as p,C as g}from"../../../../chunks/mat4.js";import{c as f}from"../../../../chunks/mat4f64.js";import{r as b}from"../../../../chunks/quat.js";import{g as h,c as T,e as O,f as y,n as w,a as I,l as E,b as R,s as j,p as A,w as M}from"../../../../chunks/vec3.js";import{a as L,c as P,f as C}from"../../../../chunks/vec3f64.js";import{tryProjectWithZConversion as k}from"../../../../geometry/projection.js";import{Axis as _}from"../../../../geometry/support/Axis.js";import{r as N,f as v,i as U,a as V,n as S,u as G}from"../../../../chunks/boundedPlane.js";import{fromVectorsAndPoint as x,fromPositionAndNormal as F}from"../../../../geometry/support/plane.js";import{create as H}from"../../../../geometry/support/ray.js";import{angleAroundAxis as D}from"../../../../geometry/support/vector.js";import{sv3d as z,sm4d as X,sq4d as Y}from"../../../../geometry/support/vectorStacks.js";import{VERTICAL_DOT_THRESHOLD as Z,SMALL_ANGLE_DOT_THRESHOLD as B,PLANE_MIN_BASIS_SCREEN_LEN2 as W,INITIAL_PLANE_HALF_SIZE_VIEW_PROPORTION as q,SHIFT_RESTART_OFFSET_DISTANCE as $,RESIZE_HANDLE_EDGE_PADDING_FRAC as J,SHIFT_RESTART_ARROW_TIP_COLOR as K,SHIFT_RESTART_ARROW_CAP_COLOR as Q,SHIFT_RESTART_TUBE_COLOR as ee,SHIFT_RESTART_OUTLINE_COLOR as te,SHIFT_RESTART_CALLOUT_COLOR as re,SHIFT_RESTART_TIP_RADIUS as ie,ROTATE_HEADING_CALLOUT_COLOR as ne,PLANE_OUTLINE_COLOR as oe,PLANE_OUTLINE_WIDTH as se,PLANE_BACKGROUND_COLOR as ae,GRID_COLOR as ce,RESIZE_HANDLE_CORNER_INPUT_RADIUS as le,RESIZE_HANDLE_EDGE_INPUT_RADIUS as ue,ROTATE_HEADING_TIP_LENGTH as de,ROTATE_HEADING_OFFSET_DISTANCE as me,ROTATE_HEADING_DISC_RADIUS as pe,ROTATE_HEADING_DISC_RADIUS_FOCUS_MULTIPLIER as ge,SHIFT_RESTART_ARROW_LENGTH as fe,SHIFT_RESTART_TUBE_RADIUS as be,SHIFT_RESTART_TIP_LENGTH as he,SHIFT_RESTART_TUBE_FOCUS_MULTIPLIER as Te,SHIFT_RESTART_TIP_FOCUS_MULTIPLIER as Oe,SHIFT_RESTART_ARROW_OUTLINE_WIDTH as ye,RESIZE_HANDLE_CORNER_WIDTH as we,RESIZE_HANDLE_EDGE_WIDTH as Ie,DISPLAY_FOCUS_MULTIPLIER as Ee,RESIZE_HANDLE_COLOR as Re}from"./sliceToolConfig.js";import{applyProjectionAndElevationAlignment as je}from"../support/projectionUtils.js";import{Manipulator3D as Ae}from"../../interactive/Manipulator3D.js";import{calculateTranslateRotateFromBases as Me}from"../../interactive/manipulatorUtils.js";import{LineVisualElement as Le}from"../../interactive/visualElements/LineVisualElement.js";import{SlicePlaneVisualElement as Pe}from"../../interactive/visualElements/SlicePlaneVisualElement.js";import{RenderCoordsHelper as Ce}from"../../support/RenderCoordsHelper.js";import{fromRender as ke}from"../../support/geometryUtils/ray.js";import{CullFaceOptions as _e}from"../../webgl-engine/lib/basicInterfaces.js";import{Geometry as Ne}from"../../webgl-engine/lib/Geometry.js";import ve from"../../webgl-engine/lib/GeometryUtil.js";import{RenderOccludedFlag as Ue}from"../../webgl-engine/lib/Material.js";import{VertexAttribute as Ve}from"../../webgl-engine/lib/VertexAttribute.js";import{ColorMaterial as Se}from"../../webgl-engine/materials/ColorMaterial.js";import{ImageMaterial as Ge}from"../../webgl-engine/materials/ImageMaterial.js";import{NativeLineMaterial as xe}from"../../webgl-engine/materials/NativeLineMaterial.js";import{RibbonLineMaterial as Fe}from"../../webgl-engine/materials/RibbonLineMaterial.js";import{ManipulatorStateCustomFlags as He,ManipulatorStateFlags as De}from"../../../interactive/interfaces.js";import ze from"../../../../geometry/Extent.js";function Xe(e,t,r,i,n,o,s,a){return Ye(t,s.worldUpAtPosition(e,z.get()),n,o,a.basis1,a.basis2),h(a.basis1,a.basis1,r),h(a.basis2,a.basis2,i),T(a.origin,e),x(a.basis2,a.basis1,a.origin,a.plane),a}function Ye(e,t,r,i,n,o){const s=O(e,t),a=z.get(),c=z.get();switch(i===Lt.HORIZONTAL_OR_VERTICAL?Math.abs(s)>Z?Lt.HORIZONTAL:Lt.VERTICAL:i){case Lt.VERTICAL:{const i=Math.abs(s)<=B?e:r.viewUp;y(a,i,t),T(c,t);break}case Lt.HORIZONTAL:y(a,r.viewUp,t),y(c,t,a);break;case Lt.TILTED:{const i=Math.abs(s)<=B?t:r.viewUp;y(a,i,e),y(c,e,a);break}}const l=y(z.get(),a,c);O(l,r.viewForward)>0&&h(c,c,-1),w(n,a),w(o,c)}function Ze(e,t,r){const i=t.worldUpAtPosition(e.origin,z.get()),n=e.basis1,o=yt(e,i),s=Math.round(o/kt)*kt;return N(e,s-o,n,r)}function Be(e,t,r,i,n,o){const s=T(z.get(),n.origin);I(s,s,h(z.get(),n.basis1,e.direction[0]<0?1:-1)),I(s,s,h(z.get(),n.basis2,e.direction[1]<0?1:-1));const a=E(n.basis1),c=E(n.basis2),l=R(z.get(),r,s),u=R(z.get(),t,s);let d=0,m=0;if(ct(e)){const t=at(n),r=at(o);d=a-.5*e.direction[0]*O(n.basis1,u)/a,m=c-.5*e.direction[1]*O(n.basis2,u)/c;const i=r/t;d*=i,m*=i}const p=d+.5*e.direction[0]*O(n.basis1,l)/a,g=m+.5*e.direction[1]*O(n.basis2,l)/c,f=h(z.get(),n.basis1,p/a),b=h(z.get(),n.basis2,g/c);(p<=0||ot(o.origin,f,i)<=W)&&T(f,o.basis1),(g<=0||ot(o.origin,b,i)<=W)&&T(b,o.basis2);const y=T(z.get(),s);return I(y,y,h(z.get(),f,e.direction[0]<0?-1:1)),I(y,y,h(z.get(),b,e.direction[1]<0?-1:1)),v(y,f,b,o)}function We(e,t){return q*Math.min(t.width,t.height)*t.computeRenderPixelSizeAt(e)}function qe(e,t,r,i){const n=y(z.get(),t,r);return y(n,n,t),F(e,n,i)}function $e(e,t){return Me(e.basis1,e.basis2,e.origin,t)}function Je(e,t,r,i){const n=t.worldUpAtPosition(e.origin,z.get()),o=z.get();switch(r){case Mt.HEADING:T(o,n);break;case Mt.TILT:T(o,e.basis1)}return F(e.origin,o,i)}function Ke(e,t,r,i){const n=nt(r,it.NEGATIVE_X),o=X.get();a(o,t,n.edge*Math.PI/2);const c=w(z.get(),n.basis);let l=h(z.get(),c,n.direction*i.computeScreenPixelSizeAt(n.position)*$);I(l,l,n.position);const u=i.projectToRenderScreen(l,s(z.get())),d=Qe(i,u);ke(i,u,Ct),w(Ct.direction,Ct.direction);const m=z.get();!d&&U(r,Ct,m)&&(l=m),o[12]=0,o[13]=0,o[14]=0,e.modelTransform=o,e.renderLocation=L(l),d?e.state|=Pt:e.state&=~Pt}function Qe(e,t){const[r,i,n,o]=e.viewport,s=Math.min(n,o)/16;let a=!0;return t[0]<r+s?(t[0]=r+s,a=!1):t[0]>r+n-s&&(t[0]=r+n-s,a=!1),t[1]<i+s?(t[1]=i+s,a=!1):t[1]>i+o-s&&(t[1]=i+o-s,a=!1),a}function et(e,t,r,i){const n=E(i.basis1),o=E(i.basis2),s=st(i),a=at(i),d=j(z.get(),0,0,0);I(d,h(z.get(),i.basis1,t.direction[0]),h(z.get(),i.basis2,t.direction[1])),I(d,i.origin,d);let m=0,p=1;if(ct(t))1===t.direction[0]&&-1===t.direction[1]?m=kt:1===t.direction[0]&&1===t.direction[1]?m=Math.PI:-1===t.direction[0]&&1===t.direction[1]&&(m=3*Math.PI/2),p=a;else{const e=0!==t.direction[0]?1:2;m=1===e?kt:0,p=(1===e?o:n)-s}const g=c(X.get(),m);l(g,g,j(z.get(),p,p,p)),u(g,r,g),g[12]=0,g[13]=0,g[14]=0,e.modelTransform=g,e.renderLocation=d}function tt(e,t,r,i){const n=i.worldUpAtPosition(r.origin,z.get()),o=nt(r,it.POSITIVE_X),s=c(X.get(),o.edge*Math.PI/2);d(s,s,-yt(r,n)),u(s,t,s),s[12]=0,s[13]=0,s[14]=0,e.modelTransform=s,e.renderLocation=o.position}function rt(e,t,r){const i=nt(r,it.POSITIVE_Y),n=c(X.get(),i.edge*Math.PI/2);d(n,n,kt),u(n,t,n),n[12]=0,n[13]=0,n[14]=0,e.modelTransform=n,e.renderLocation=i.position}var it;function nt(e,t){switch(t){case it.POSITIVE_X:return{basis:e.basis1,direction:1,position:I(z.get(),e.origin,e.basis1),edge:t};case it.POSITIVE_Y:return{basis:e.basis2,direction:1,position:I(z.get(),e.origin,e.basis2),edge:t};case it.NEGATIVE_X:return{basis:e.basis1,direction:-1,position:R(z.get(),e.origin,e.basis1),edge:t};case it.NEGATIVE_Y:return{basis:e.basis2,direction:-1,position:R(z.get(),e.origin,e.basis2),edge:t}}}function ot(e,t,r){const i=r.projectToRenderScreen(I(z.get(),e,t),s(z.get())),n=r.projectToRenderScreen(R(z.get(),e,t),s(z.get()));return A(R(i,i,n))}function st(e){const t=E(e.basis1),r=E(e.basis2);return J*Math.min(t,r)}function at(e){return st(e)}function ct(e){return 0!==e.direction[0]&&0!==e.direction[1]}function lt(e,t=vt.CENTER_ON_ARROW){const r=t===vt.CENTER_ON_CALLOUT?$:0,i=[C(r,0,-fe/2),C(r,0,fe/2)],n=bt(i,!0),o=(e,t)=>gt(i,i,{tubeRadius:be,tipRadius:ie,tipLength:he,tubeFocusMultiplier:Te,tipFocusMultiplier:Oe,padding:e,bothEnds:!0,flat:null,focusTipLength:!0,addCap:t}),s=o(0,!1),a=o(ye,!0),c=new Se({color:K,cullFace:_e.Back,renderOccluded:Ue.Opaque}),l=new Se({color:Q,cullFace:_e.Back,renderOccluded:Ue.Opaque}),u=new Se({color:ee,cullFace:_e.Back,renderOccluded:Ue.Opaque}),d=new Se({color:te,transparent:!0,writeDepth:!1,cullFace:_e.Front,renderOccluded:Ue.Transparent}),m=ve.createPolylineGeometry([[r,0,0],[r-$,0,0]]),p=ve.createPolylineGeometry([[r,0,0],[r-$,0,0]]),g=new xe({color:re,renderOccluded:Ue.OccludeAndTransparent});return new Ae({view:e,renderObjects:[...s.normal.map((({part:e,geometry:t,transform:r})=>({geometry:t,material:"tip"===e?c:"cap"===e?l:u,transform:r,stateMask:De.Unfocused|At}))),...a.normal.map((({geometry:e,transform:t})=>({geometry:e,material:d,transform:t,stateMask:De.Unfocused|At}))),{geometry:m,material:g,stateMask:De.Unfocused|At|Pt},...s.focused.map((({part:e,geometry:t,transform:r})=>({geometry:t,material:"tip"===e?c:"cap"===e?l:u,transform:r,stateMask:De.Focused|At}))),...a.focused.map((({geometry:e,transform:t})=>({geometry:e,material:d,transform:t,stateMask:De.Focused|At}))),{geometry:p,material:g,stateMask:De.Focused|At|Pt}],autoScaleRenderObjects:!1,collisionType:{type:"line",paths:[n]},collisionPriority:1,radius:ie,state:At})}function ut(e,t){const r=new Ge({transparent:!0,writeDepth:!1,textureId:t.id,renderOccluded:Ue.Opaque}),i=me,n=pe,o=n*ge,s=e=>{const t=new Uint32Array([0,1,2,2,3,0]);return new Ne([[Ve.POSITION,{size:3,data:[i-e,-e,0,i+e,-e,0,i+e,e,0,i-e,e,0],exclusive:!0}],[Ve.UV0,{size:2,data:[0,0,1,0,1,1,0,1]}]],[[Ve.POSITION,t],[Ve.UV0,t]])},a=ve.createPolylineGeometry([[0,0,0],[i-n,0,0]]),c=ve.createPolylineGeometry([[0,0,0],[i-o,0,0]]),l=new xe({color:ne,renderOccluded:Ue.OccludeAndTransparent}),u=[{geometry:s(n),material:r,stateMask:De.Unfocused|At},{geometry:a,material:l,stateMask:De.Unfocused|At},{geometry:s(o),material:r,stateMask:De.Focused|At},{geometry:c,material:l,stateMask:De.Focused|At}];return new Ae({view:e,renderObjects:u,autoScaleRenderObjects:!1,collisionType:{type:"disc",direction:[0,0,1],offset:[i,0,0]},collisionPriority:1,radius:n/2,state:At})}function dt(e){const t=[[-1,-1,0],[1,-1,0],[1,1,0],[-1,1,0],[-1,-1,0]];return new Le({view:e,attached:!0,color:oe,width:se,writeDepthEnabled:!1,renderOccluded:Ue.OccludeAndTransparent,geometry:[t]})}function mt(e){return new Pe({view:e,attached:!0,backgroundColor:[...ae],gridColor:ce,gridWidth:4,renderOccluded:Ue.OccludeAndTransparent})}function pt(e,t){const r=ct(t),i=r?[C(1,0,0),C(0,0,0),C(0,1,0)]:[C(1,0,0),C(-1,0,0)],n=ve.createPolylineGeometry(i),o=Re,s=e=>new Fe({color:o,width:e,renderOccluded:Ue.OccludeAndTransparent}),a=()=>new xe({color:o,renderOccluded:Ue.OccludeAndTransparent}),c=r?we:Ie,l=c*Ee,u=Ie,d=e=>e>1?s(e):a(),m=[{geometry:n,material:d(c),stateMask:De.Unfocused|_t},{geometry:n,material:d(l),stateMask:De.Focused|_t},{geometry:n,material:d(u),stateMask:Nt}],p=new Ae({view:e,renderObjects:m,collisionType:{type:"line",paths:[i]},autoScaleRenderObjects:!1,worldSized:!0,radius:r?le:ue});return p.state=_t,p}function gt(e,t,r){const i=i=>{const n=(i?t:e).slice(0),s=R(z.get(),n[0],n[1]);w(s,s);const a=R(z.get(),n[n.length-1],n[n.length-2]);if(w(a,a),r.padding>0){const e=h(P(),a,-r.padding);if(n[n.length-1]=I(e,e,n[n.length-1]),r.bothEnds){const e=h(P(),s,-r.padding);n[0]=I(e,e,n[0])}}const c=i?r.tipFocusMultiplier:1,d=r.tipLength*(r.focusTipLength?c:1),T=r.tipRadius*c,O=m(X.get());if(r.padding>0){const e=d/4,t=j(z.get(),0,e,0),i=1+r.padding/e;p(O,O,t),l(O,O,j(z.get(),i,i,i)),p(O,O,h(t,t,-1/i))}const y=m(f()),E=C(0,1,0),A=g(f(),b(Y.get(),E,a));A[12]=n[n.length-1][0],A[13]=n[n.length-1][1],A[14]=n[n.length-1][2],u(A,A,O);const M=[{part:"tube",geometry:ft(r.tubeRadius*(i?r.tubeFocusMultiplier:1)+r.padding,r.flat,n),transform:y}];let L,k;if(o(r.flat)?L=ve.createExtrudedTriangle(d,T,T,r.flat.thickness):(L=ve.createConeGeometry(d,T,24,!1,!1,!0),k=ve.createConeGeometry(d,T,24,!1,!0,!1)),M.push({part:"tip",geometry:L,transform:A}),k&&M.push({part:"cap",geometry:k,transform:A}),r.bothEnds){const e=g(f(),b(Y.get(),E,s));e[12]=n[0][0],e[13]=n[0][1],e[14]=n[0][2],u(e,e,O),M.push({part:"tip",geometry:L,transform:e}),k&&M.push({part:"cap",geometry:k,transform:e})}return M};return{normal:i(!1),focused:i(!0)}}function ft(e,t,r){const i=[];if(o(t))i.push([e,t.thickness/2],[-e,t.thickness/2],[-e,-t.thickness/2],[e,-t.thickness/2]);else{const t=12;for(let r=0;r<t;r++){const n=r/t*2*Math.PI;i.push([Math.cos(n)*e,Math.sin(n)*e])}}return ve.createPathExtrusionGeometry(i,r,[],[],!1)}function bt(e,t){const r=R(P(),e[e.length-1],e[e.length-2]);if(w(r,r),h(r,r,de),I(r,r,e[e.length-1]),t){const t=R(P(),e[0],e[1]);return w(t,t),h(t,t,de),I(t,t,e[0]),[t,...e,r]}return[...e,r]}function ht(t,i,o,s=new e){if(n(t))return null;const{renderCoordsHelper:a}=i,c=a.fromRenderCoords(t.origin,i.spatialReference);if(n(c))return null;const l=k(c,o);if(n(l))return null;s.position=l;const u=a.worldUpAtPosition(t.origin,z.get()),d=a.worldBasisAtPosition(t.origin,_.Y,z.get()),m=2*E(t.basis1),p=2*E(t.basis2),g=Ce.renderUnitScaleFactor(i.spatialReference,o);return s.width=m*g,s.height=p*g,s.tilt=r(yt(t,u)),s.heading=r(wt(t,u,d)),s}function Tt(e,t,r){if(n(e)||n(e.position))return null;const{spatialReference:i}=e.position,s=Ot(Rt(e,{renderCoordsHelper:t,spatialReference:i},r),t,i);return!e.position.hasZ&&o(s)&&(s.zmin=null,s.zmax=null),s}function Ot(e,t,r){if(n(e))return null;const i=e.origin,o=z.get(),s=z.get(),a=z.get(),c=z.get();let l,u,d,m,p,g;I(o,i,e.basis1),I(o,o,e.basis2),I(s,i,e.basis1),M(s,s,e.basis2),M(a,i,e.basis1),M(a,a,e.basis2),M(c,i,e.basis1),I(c,c,e.basis2);for(const f of[o,s,a,c]){const e=t.fromRenderCoords(f,f,r);if(n(e))return null;l=null==l?e[0]:Math.min(l,e[0]),u=null==u?e[0]:Math.max(u,e[0]),d=null==d?e[1]:Math.min(d,e[1]),m=null==m?e[1]:Math.max(m,e[1]),p=null==p?e[2]:Math.min(p,e[2]),g=null==g?e[2]:Math.max(g,e[2])}return new ze({xmin:l,xmax:u,ymin:d,ymax:m,zmin:p,zmax:g,spatialReference:r})}function yt(e,t){return D(t,e.basis2,e.basis1)+kt}function wt(e,t,r){return D(e.basis1,r,t)-kt}function It(e,r,n,o,s,a,c=V()){return a.toRenderCoords(e,c.origin)?(a.worldBasisAtPosition(c.origin,_.X,c.basis1),a.worldBasisAtPosition(c.origin,_.Y,c.basis2),x(c.basis2,c.basis1,c.origin,c.plane),N(c,-i(r),S(c),c),N(c,i(n),c.basis1,c),h(c.basis1,c.basis1,o/2),h(c.basis2,c.basis2,s/2),G(c),c):(t.getLogger("esri.views.3d.analysis.Slice.sliceToolUtils").error(`Failed to project slice plane position, projection from ${e.spatialReference.wkid} is not supported`),null)}function Et(e,t){if(n(e)||n(e.position))return null;const r=je(e.position,t.spatialReference,t.elevationProvider);if(n(r))return null;const i=Ce.renderUnitScaleFactor(e.position.spatialReference,t.spatialReference),o=e.width*i,s=e.height*i;return{position:r,heading:e.heading,tilt:e.tilt,renderWidth:o,renderHeight:s}}function Rt(e,t,r,i=V()){const o=Et(e,t);return n(o)?null:jt(o,t,r,i)}function jt(e,t,r,i=V()){if(n(e))return null;const s=It(e.position,e.heading,e.tilt,e.renderWidth,e.renderHeight,t.renderCoordsHelper,i);return!r.tiltEnabled&&o(s)&&Ze(s,t.renderCoordsHelper,s),s}!function(e){e[e.POSITIVE_X=0]="POSITIVE_X",e[e.POSITIVE_Y=1]="POSITIVE_Y",e[e.NEGATIVE_X=2]="NEGATIVE_X",e[e.NEGATIVE_Y=3]="NEGATIVE_Y"}(it||(it={}));const At=He.Custom1;var Mt,Lt;!function(e){e[e.HEADING=1]="HEADING",e[e.TILT=2]="TILT"}(Mt||(Mt={})),function(e){e[e.HORIZONTAL_OR_VERTICAL=0]="HORIZONTAL_OR_VERTICAL",e[e.HORIZONTAL=1]="HORIZONTAL",e[e.VERTICAL=2]="VERTICAL",e[e.TILTED=3]="TILTED"}(Lt||(Lt={}));const Pt=He.Custom2,Ct=H(),kt=Math.PI/2,_t=He.Custom1,Nt=He.Custom2;var vt;function Ut(e){const t="building-scene-3d"===e.type?e:null;return o(t)}!function(e){e[e.CENTER_ON_CALLOUT=0]="CENTER_ON_CALLOUT",e[e.CENTER_ON_ARROW=1]="CENTER_ON_ARROW"}(vt||(vt={}));export{At as DidPointerMoveRecentlyFlag,Pt as IsShiftEdgeOnScreenFlag,vt as OffsetMode,Mt as RotationAxis,Lt as SliceOrientation,bt as addArrowTips,$e as calculateBoundedPlaneTranslateRotate,at as calculateDiagonalResizeHandleScale,We as calculatePlaneHalfSize,st as calculateResizeHandlePadding,ot as calculateScreenSpaceBasisLength2,gt as createArrowGeometry,mt as createGridVisualElement,dt as createOutlineVisualElement,Xe as createPlane,pt as createResizeManipulator,ut as createRotateManipulator,Je as createRotatePlane,lt as createShiftManipulator,qe as createShiftPlane,Ze as forceHorizontalOrVertical,ct as isDiagonalResizeHandle,Ut as isIBuildingSceneLayerView3D,Ye as normalToBases,Ot as planeToExtent,ht as planeToShape,Et as projectAndElevationAlignShape,jt as projectedShapeToPlane,_t as resizeNormal,Nt as resizeOutlineOnly,Be as resizePlane,Tt as shapeToExtent,Rt as shapeToPlane,et as updateResizeHandle,tt as updateRotateHeadingHandle,rt as updateRotateTiltHandle,Ke as updateShiftRestartHandle};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.25/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{isSome as e}from"../../../../core/maybe.js";import{
|
|
5
|
+
import{isSome as e}from"../../../../core/maybe.js";import{c as n,b as r,a as t,i as o,r as i}from"../../../../chunks/vec3.js";import{c as s}from"../../../../chunks/vec3f64.js";import{wrap as c}from"../../../../geometry/support/ray.js";import{i as a,k as f}from"../../../../chunks/sphere.js";import{defaultApplyOptions as m,interactionDirectionTowardsConstraintMinimization as u,InteractionType as p,adjustRangeForInteraction as d}from"./common.js";function y(e,n,r=m){if(!e.state.isLocal)return 0;const t=e.state.constraints.distance;if(!e.pointsOfInterest.surfaceOrigin.renderLocation||t===1/0)return 0;l.min=0,l.max=t,g(e,r,l);const o=j(e,n),i=l.max-o;return i>=-1e-6?0:i}function O(o,i,s=m){const p=y(o,i,s);if(0===p)return!1;const d=o.pointsOfInterest.surfaceOrigin,O=j(o,i)+p,g=n(I,i.eye),l=u(i,s.interactionDirection,x(o,i,k),h);if(!a(f(d.renderLocation,O),c(i.eye,l),C))return!1;i.eye=C;const N=r(L,i.eye,g);i.center=t(C,i.center,N);const b=o.renderCoordsHelper.getAltitude(i.center),v=o.renderCoordsHelper.intersectInfiniteManifold(i.ray,b,C);return e(v)&&(i.center=v),!0}function g(e,n,r){const t=n.interactionType;if(t===p.NONE)return;const{min:o,max:i}=r,{interactionStartCamera:s,interactionFactor:c}=n,a=t===p.ZOOM||t===p.PAN,f=y(e,s),m=0===f?0:j(e,s);r.min=o,r.max=i;d(f,m,a,c,.05*m,r)}function j(e,n){const r=e.pointsOfInterest.surfaceOrigin;return o(n.eye,r.renderLocation)}function x(e,n,r){const t=e.pointsOfInterest.surfaceOrigin;return i(r,n.eye,t.renderLocation)}const l={min:0,max:0},I=s(),L=s(),h=s(),k=s(),C=s();export{O as applyDistanceConstraint,y as getDistanceConstraintError};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.25/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{_ as e}from"../../../chunks/tslib.es6.js";import{
|
|
5
|
+
import{_ as e}from"../../../chunks/tslib.es6.js";import{ShaderTechniqueConfiguration as o,parameter as r}from"../webgl-engine/core/shaderTechnique/ShaderTechniqueConfiguration.js";class s extends o{constructor(){super(...arguments),this.haze=!1}}e([r()],s.prototype,"haze",void 0);export{s as ChapmanAtmosphereTechniqueConfiguration};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.25/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{_ as t}from"../../../chunks/tslib.es6.js";import a from"../../../core/Accessor.js";import{clamp as e}from"../../../core/mathUtils.js";import{releaseMaybe as s,disposeMaybe as o,isNone as r}from"../../../core/maybe.js";import{property as n}from"../../../core/accessorSupport/decorators/property.js";import"../../../core/arrayUtils.js";import"../../../core/has.js";import"../../../core/accessorSupport/ensureType.js";import{subclass as i}from"../../../core/accessorSupport/decorators/subclass.js";import{e as c}from"../../../chunks/mat4.js";import{c as d}from"../../../chunks/mat4f64.js";import{c as f,l as m,z as l,n as u,g as h,b as I}from"../../../chunks/vec3.js";import{f as p,c as g}from"../../../chunks/vec3f64.js";import{create as F,fromPoints as H,axis as _}from"../../../geometry/support/axisAngle.js";import{
|
|
5
|
+
import{_ as t}from"../../../chunks/tslib.es6.js";import a from"../../../core/Accessor.js";import{clamp as e}from"../../../core/mathUtils.js";import{releaseMaybe as s,disposeMaybe as o,isNone as r}from"../../../core/maybe.js";import{property as n}from"../../../core/accessorSupport/decorators/property.js";import"../../../core/arrayUtils.js";import"../../../core/has.js";import"../../../core/accessorSupport/ensureType.js";import{subclass as i}from"../../../core/accessorSupport/decorators/subclass.js";import{e as c}from"../../../chunks/mat4.js";import{c as d}from"../../../chunks/mat4f64.js";import{c as f,l as m,z as l,n as u,g as h,b as I}from"../../../chunks/vec3.js";import{f as p,c as g}from"../../../chunks/vec3f64.js";import{create as F,fromPoints as H,axis as _}from"../../../geometry/support/axisAngle.js";import{FadeInStages as C,FadeInOutStages as O,FadeHeightStages as E}from"./CloudsCompositionParameters.js";import{CloudsCompositionTechnique as P}from"./CloudsCompositionTechnique.js";import{ensureClouds as N}from"./CloudsData.js";import{weatherHeightLimit as b}from"./weather.js";import{NoParameters as D}from"../webgl-engine/core/shaderModules/interfaces.js";import{createQuadVAO as T}from"../webgl-engine/lib/glUtil3D.js";import{PrimitiveType as S}from"../../webgl/enums.js";let j=class extends a{constructor(t){super(t),this._technique=new P(t),this._vao=T(t.rctx)}destroy(){this._technique=s(this._technique),this._vao=o(this._vao)}render(t,a){const e=t.bindParameters.clouds;if(r(this._vao)||r(e.data))return;if(!this._technique.compiled)return void this.requestRender();this._setParallaxParameters(e,t.bindParameters.camera.eye,a);const s=t.rctx.bindTechnique(this._technique,G,t.bindParameters);t.rctx.bindVAO(this._vao),s.assertCompatibleVertexAttributeLocations(this._vao),t.rctx.drawArrays(S.TRIANGLE_STRIP,0,4),k(e)&&this.requestRender()}_setFadeInStage(t){const a=performance.now(),e=t.parallax.anchorPointClouds;t.fadeIn.stage===C.FINISHED&&(t.fadeIn.factor=1,f(e,v),t.fadeIn.stage=C.CHANGE_ANCHOR,t.crossFade.enabled=!1,t.fadeInOut.stage=O.FINISHED),t.fadeIn.stage===C.CHANGE_ANCHOR&&t.isCameraPositionFinal&&N(t.data)&&(f(e,v),t.fadeIn.stage=C.FADE_IN,t.startTime=a),t.fadeIn.factor>0&&t.fadeIn.stage===C.FADE_IN&&(t.fadeIn.factor=1-(a-t.startTime)/y),t.fadeIn.factor<=0&&t.fadeIn.stage===C.FADE_IN&&(t.fadeIn.stage=C.FINISHED,t.fadeIn.factor=0)}_setCrossFadingStage(t){const a=performance.now(),{crossFade:e}=t,s=t.parallax.anchorPointClouds;t.crossFade.enabled||(f(t.parallaxNew.anchorPointClouds,v),t.startTime=a,e.factor=0,t.crossFade.enabled=!0),e.factor<1&&t.crossFade.enabled&&(e.factor=(a-t.startTime)/q),e.factor>=1&&t.crossFade.enabled&&(t.crossFade.enabled=!1,e.factor=1,f(s,t.parallaxNew.anchorPointClouds))}_setFadeInOutStage(t){const a=performance.now(),{fadeInOut:e,crossFade:s}=t;e.stage===O.FINISHED&&(t.startTime=a,e.factor=0,e.stage=O.FADE_OUT),e.factor<1&&e.stage===O.FADE_OUT&&(e.factor=(a-t.startTime)/R),e.factor>=1&&e.stage===O.FADE_OUT&&(e.factor=1,f(t.parallax.anchorPointClouds,v)),e.factor>=1&&e.stage===O.FADE_OUT&&t.isCameraPositionFinal&&(e.factor=1,e.stage=O.SWITCH,t.crossFade.enabled=!1,s.factor=1),N(t.data)&&e.stage===O.SWITCH&&(t.startTime=a,e.factor=1,e.stage=O.FADE_IN,f(t.parallax.anchorPointClouds,v),t.crossFade.enabled=!1,s.factor=1),e.factor>0&&e.stage===O.FADE_IN&&(e.factor=1-(a-t.startTime)/y),e.factor<=0&&e.stage===O.FADE_IN&&(e.stage=O.FINISHED,e.factor=0)}_setFadeInOutHeight(t,a){const s=performance.now(),o=t.fadeInOutHeight,r=(s-(o.stage===E.FINISHED?s:t.startTimeHeightFade))/U;o.factor+=a?-r:r,t.startTimeHeightFade=s,o.factor=e(o.factor,0,1),o.stage=E.HEIGHT_FADE}_setParallaxParameters(t,a,e){const{parallax:s}=t;t.fadeInOutHeight.factor<0&&(t.fadeInOutHeight.factor=m(a)-this.planetRadius>b?1:0),t.isCameraPositionFinal=l(t.cameraPositionLastFrame,a),u(v,a),h(v,v,this.planetRadius),0===s.anchorPointClouds[0]&&0===s.anchorPointClouds[1]&&0===s.anchorPointClouds[2]&&f(s.anchorPointClouds,v);const o=m(I(w,s.anchorPointClouds,v));let r=!0;o>t.fadeIn.distanceThresholdFactor*s.cloudsHeight||t.fadeIn.stage!==C.FINISHED?this._setFadeInStage(t):o>t.fadeInOut.distanceThresholdFactor*s.cloudsHeight||t.fadeInOut.stage!==O.FINISHED?this._setFadeInOutStage(t):o>t.crossFade.distanceThresholdFactor*s.cloudsHeight&&!e||t.crossFade.enabled?this._setCrossFadingStage(t):r=!1;const n=m(a),i=n-this.planetRadius;if((i>1.7*b||i<-b)&&t.fadeInOutHeight.factor<1?t.fadeInOutHeight.factor=1:(i>b||i<-.35*b)&&t.fadeInOutHeight.factor<1?this._setFadeInOutHeight(t,!1):i<b&&i>-.35*b&&t.fadeInOutHeight.factor>0?this._setFadeInOutHeight(t,!0):t.fadeInOutHeight.stage=E.FINISHED,s.radiusCurvatureCorrectionFactor=.84*Math.sqrt(Math.max(n*n-this.planetRadius*this.planetRadius,0))/n,H(A,s.anchorPointClouds,x),s.transform=d(),c(s.transform,s.transform,x[3],_(x)),r){const{parallaxNew:a}=t;H(A,a.anchorPointClouds,x),a.transform=d(),c(a.transform,a.transform,x[3],_(x))}f(t.cameraPositionLastFrame,a)}};t([n({constructOnly:!0})],j.prototype,"rctx",void 0),t([n({constructOnly:!0})],j.prototype,"viewingMode",void 0),t([n({constructOnly:!0})],j.prototype,"planetRadius",void 0),t([n({constructOnly:!0})],j.prototype,"requestRender",void 0),j=t([i("esri.views.3d.environment.CloudsComposition")],j);const A=p(0,0,1),x=F(),v=g(),w=g(),y=500,R=250,q=500,U=500;function k(t){return t.crossFade.enabled||t.fadeInOut.stage!==O.FINISHED||t.fadeIn.stage!==C.FINISHED||t.fadeInOutHeight.stage!==E.FINISHED}const G=new D;export{j as CloudsComposition};
|