@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
TypeScript
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>;
}