UNPKG

@arcgis/core

Version:

ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API

122 lines (121 loc) 7.21 kB
import type LineOfSightAnalysis from "../../../analysis/LineOfSightAnalysis.js"; import type Collection from "../../../core/Collection.js"; import type AnalysisView3D from "./AnalysisView3D.js"; import type LineOfSightAnalysisResult from "./LineOfSightAnalysisResult.js"; import type { AbortOptions } from "../../../core/promiseUtils.js"; import type { LineOfSightPlacementResult } from "./LineOfSight/types.js"; /** * Represents the analysis view of a [LineOfSightAnalysis](https://developers.arcgis.com/javascript/latest/references/core/analysis/LineOfSightAnalysis/) * after it has been added to [SceneView.analyses](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/#analyses). * * The LineOfSightAnalysisView3D is responsible for rendering a [LineOfSightAnalysis](https://developers.arcgis.com/javascript/latest/references/core/analysis/LineOfSightAnalysis/) * using custom visualizations. * * It allows to create an observer and/or targets interactively using the [place()](https://developers.arcgis.com/javascript/latest/references/core/views/3d/analysis/LineOfSightAnalysisView3D/#place) method, query analysis [results](https://developers.arcgis.com/javascript/latest/references/core/views/3d/analysis/LineOfSightAnalysisView3D/#results), * or make an existing analysis editable by enabling the [interactive](https://developers.arcgis.com/javascript/latest/references/core/views/3d/analysis/LineOfSightAnalysisView3D/#interactive) property. * * The view for an analysis can be retrieved using [SceneView.whenAnalysisView()](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/#whenAnalysisView) * similar to how layer views are retrieved for layers using [SceneView.whenLayerView()](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/#whenLayerView). * * ```js * // retrieve analysis view for analysis * const analysis = new LineOfSightAnalysis(); * view.analyses.add(analysis); // add to the view * const analysisView = await view.whenAnalysisView(analysis); * ``` * * @see [LineOfSightAnalysis](https://developers.arcgis.com/javascript/latest/references/core/analysis/LineOfSightAnalysis/) * @see [LineOfSightLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/LineOfSightLayer/) * @see [LineOfSightLayerView](https://developers.arcgis.com/javascript/latest/references/core/views/layers/LineOfSightLayerView/) * @see [LineOfSightAnalysisTarget](https://developers.arcgis.com/javascript/latest/references/core/analysis/LineOfSightAnalysisTarget/) * @see [LineOfSightAnalysisObserver](https://developers.arcgis.com/javascript/latest/references/core/analysis/LineOfSightAnalysisObserver/) * @see [Line Of Sight component](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-line-of-sight/) * @see [Sample - Analysis objects](https://developers.arcgis.com/javascript/latest/sample-code/analysis-objects/) * @see [Sample - Line of sight component](https://developers.arcgis.com/javascript/latest/sample-code/line-of-sight/) */ export default abstract class LineOfSightAnalysisView3D extends AnalysisView3D { /** * The line of sight analysis object associated with the analysis view. * * @since 4.24 */ get analysis(): LineOfSightAnalysis; /** * Enables interactivity for the associated [analysis](https://developers.arcgis.com/javascript/latest/references/core/views/3d/analysis/LineOfSightAnalysisView3D/#analysis). When set to `true`, manipulators will be displayed, * allowing users to click and drag to edit the analysis if it has a valid * [LineOfSightAnalysis.observer](https://developers.arcgis.com/javascript/latest/references/core/analysis/LineOfSightAnalysis/#observer) and * [LineOfSightAnalysis.targets](https://developers.arcgis.com/javascript/latest/references/core/analysis/LineOfSightAnalysis/#targets). Right-clicking a target will remove it. * * This property is automatically set to `true` when the analysis is assigned to a * [Line Of Sight component](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-line-of-sight/). * * @default false * @since 4.24 */ accessor interactive: boolean; /** * Analysis results for each target. * * The order of results matches the order of targets, so if the index of the target is known the collection can be * indexed directly: * * ```js * const analysisView = await view.whenAnalysisView(lineOfSightAnalysis); * const result = analysisView.results.at(targetIdx); * ``` * * Given a [target](https://developers.arcgis.com/javascript/latest/references/core/analysis/LineOfSightAnalysisTarget/) object, the results collection can also be * searched: * * ```js * const result = analysisView.results.find((result) => result.target === targetObject); * ``` */ get results(): Collection<LineOfSightAnalysisResult | null | undefined>; /** * The analysis view type. * * @since 4.24 */ get type(): "line-of-sight-view-3d"; /** * When `true`, the [analysis](https://developers.arcgis.com/javascript/latest/references/core/views/3d/analysis/LineOfSightAnalysisView3D/#analysis) is visualized in the view. * * @since 4.24 */ get visible(): boolean; set visible(value: boolean | null | undefined); /** * Starts the interactive placement of an observer and/or targets on the [analysis](https://developers.arcgis.com/javascript/latest/references/core/views/3d/analysis/LineOfSightAnalysisView3D/#analysis). * * If the analysis does not have a valid observer yet, this method will allow placing an observer, which can be followed * by zero or more targets. Otherwise, if it already has a valid observer, it will allow placing targets. * * The placement operation will finish when the user presses the escape key. * To stop the placing programmatically, pass an abort signal as an argument when calling the method. * The promise resolves when the operation is productive, i.e. an oberver or any targets were added. * Otherwise, if nothing was added or signal was aborted, the promise is rejected. * * Calling this method sets [interactive](https://developers.arcgis.com/javascript/latest/references/core/views/3d/analysis/LineOfSightAnalysisView3D/#interactive) to `true`. * * @param options - An object specifying additional options. * @returns A promise * which resolves when the operation is completed successfully - i.e. the user places an observer and/or target(s), * leaving the analysis in a valid state. Otherwise, the promise is rejected. * @since 4.33 * @example * const abortController = new AbortController(); * * try { * await analysisView.place({ signal: abortController.signal }); * } catch (error) { * if (error.name === "AbortError") { * console.log("Placement operation was cancelled."); * } * } * * // cancel the placement operation at some later point * abortController.abort(); */ place(options?: AbortOptions | null | undefined): Promise<LineOfSightPlacementResult>; }