/// <reference types="@geoscene/core/interfaces.d.ts" />
/// <reference types="../../index.d.ts" />
import { PublicLitElement as LitElement, JsxNode, TargetedEvent } from '@arcgis/lumina';
import { Use } from '@arcgis/lumina/controllers';
import { GeosceneReferenceElement } from '../../utils/component-utils';
import { default as DirectLineMeasurement3DViewModel } from './DirectLineMeasurement3dViewModel';

declare const useViewModel: (component: LitElement & Pick<DirectLineMeasurement3DViewModel, never> & import('../../controllers/useViewModel').ViewModelControllerUses<DirectLineMeasurement3DViewModel>) => DirectLineMeasurement3DViewModel;
/**
 * The Direct Line Measurement 3D component can be added to a [Scene](https://doc.geoscene.cn/javascript/4.33/references/map-components/geoscene-scene/)
 * component to calculate and display vertical, horizontal, and direct distances between two points.
 *
 * [![measurement-line-3d](https://doc.geoscene.cn/javascript/4.33/assets/img/apiref/widgets/3D_DirectLineMeasurement_widget.png)](https://doc.geoscene.cn/javascript/4.33/sample-code/measurement-3d/)
 *
 * How distances are computed depends on the scene's spatial reference.
 *
 * In **geographic coordinate systems** (GCS) and in **Web Mercator**:
 * - Direct distance is computed in a Euclidean manner, in an [ECEF](https://en.wikipedia.org/wiki/ECEF) coordinate system (or equivalent on other planets);
 * - Horizontal distance is computed geodetically, taking into consideration the curvature of the planet;
 * - Vertical distance is computed as an elevation difference.
 *
 * In **projected coordinate systems** (PCS), apart from Web Mercator, all three distances (direct, horizontal, and vertical)
 *  are computed in a Euclidean manner (in their respective PCS).
 *
 * Direct Line Measurement 3D component visualizes and labels the direct, horizontal, and vertical distances and displays the same values
 * in the UI panel. When the distance between the points is greater than 100 kilometers,
 * the measurement visualization is simplified, and only the horizontal and vertical distances are calculated.
 * The direct distance option becomes unavailable.
 *
 * ![measurement-line-3d](https://doc.geoscene.cn/javascript/4.33/assets/img/apiref/widgets/direct-line-measurement-3d.png)
 *
 * When the component is active, a horizontal "laser" line is drawn which indicates the height at the current mouse position.
 * This line can help in analyzing the heights of objects relative to each other and the terrain.
 * A second laser line shows the intersection of the scene with the vertical plane that passes through the checkered line.
 *
 * **Things to consider**
 *
 * * Direct Line Measurement 3D is designed to work in the Scene component. For measurements in the [Map](https://doc.geoscene.cn/javascript/4.33/references/map-components/geoscene-map/)
 * component, use [Distance Measurement 2D](https://doc.geoscene.cn/javascript/4.33/references/map-components/geoscene-distance-measurement-2d/).
 * * Snapping is enabled by default. This can be temporarily disabled by holding the `CTRL` key.
 * * Layer types currently supported for snapping are:
 * [FeatureLayer](https://doc.geoscene.cn/javascript/4.33/api-reference/geoscene-layers-FeatureLayer.html),
 * [GraphicsLayer](https://doc.geoscene.cn/javascript/4.33/api-reference/geoscene-layers-GraphicsLayer.html) (except Mesh geometries),
 * [GeoJSONLayer](https://doc.geoscene.cn/javascript/4.33/api-reference/geoscene-layers-GeoJSONLayer.html),
 * [WFSLayer](https://doc.geoscene.cn/javascript/4.33/api-reference/geoscene-layers-WFSLayer.html),
 * [CSVLayer](https://doc.geoscene.cn/javascript/4.33/api-reference/geoscene-layers-CSVLayer.html),
 * [3D Object SceneLayer](https://doc.geoscene.cn/javascript/4.33/api-reference/geoscene-layers-SceneLayer.html),
 * and [BuildingSceneLayer](https://doc.geoscene.cn/javascript/4.33/api-reference/geoscene-layers-BuildingSceneLayer.html).
 *
 * **See also**
 *
 * - [DirectLineMeasurementAnalysis](https://doc.geoscene.cn/javascript/4.33/api-reference/geoscene-analysis-DirectLineMeasurementAnalysis.html)
 * - [Sample - Measurement in 3D](https://doc.geoscene.cn/javascript/4.33/sample-code/measurement-3d/)
 * - [Sample - Analysis objects](https://doc.geoscene.cn/javascript/4.33/sample-code/analysis-objects/)
 * - [Sample - Color theming for interactive tools](https://doc.geoscene.cn/javascript/4.33/sample-code/view-theme/)
 *
 * [Read more...](https://doc.geoscene.cn/javascript/4.33/references/map-components/geoscene-direct-line-measurement-3d/)
 */
export declare class GeosceneDirectLineMeasurement3d extends LitElement {
    /**
     * The [DirectLineMeasurementAnalysis](https://doc.geoscene.cn/javascript/4.33/api-reference/geoscene-analysis-DirectLineMeasurementAnalysis.html)
     * created or modified by the component.
     *
     * When connecting the Direct Line Measurement 3D component to the [Scene](https://doc.geoscene.cn/javascript/4.33/references/map-components/geoscene-scene/)
     * component, it automatically creates an empty analysis and adds it to the Scene's
     * [analyses](https://doc.geoscene.cn/javascript/4.33/references/map-components/geoscene-scene/#analyses) collection.
     * Whenever the component is destroyed, the analysis is automatically removed from the collection.
     *
     * Alternatively, a programmatically created analysis can be provided to the component.
     * Then, the application itself needs to add it to and later remove it from the Scene's analyses collection.
     *
     * ```js
     * // Create the analysis.
     * const directLineAnalysis = new DirectLineMeasurementAnalysis({
     *    startPoint: new Point({
     *      spatialReference: { latestWkid: 3857, wkid: 102100 },
     *      x: -13624995.61798748,
     *      y: 4550334.030096778,
     *      z: 63.378210234455764
     *    }),
     *    endPoint: new Point({
     *      spatialReference: { latestWkid: 3857, wkid: 102100 },
     *      x: -13624921.53589075,
     *      y: 4550407.42357004,
     *      z: 63.3783810287714
     *    }),
     * });
     * // Get the Scene and measurement component and wait until they are ready.
     * const viewElement = document.querySelector("geoscene-scene");
     * await viewElement.viewOnReady();
     * const directLineMeasurement3d = document.querySelector("geoscene-direct-line-measurement-3d");
     * await directLineMeasurement3d.componentOnReady();
     * // Add the analysis to the Scene component.
     * viewElement.analyses.add(directLineAnalysis);
     * // Connect the analysis to the measurement component:
     * directLineMeasurement3d.analysis = directLineAnalysis;
     * ```
     */
    analysis: __geoscene.DirectLineMeasurementAnalysis;
    /**
     * If true, the component will not be destroyed automatically when it is
     * disconnected from the document. This is useful when you want to move the
     * component to a different place on the page, or temporarily hide it. If this
     * is set, make sure to call the [destroy](https://doc.geoscene.cn/javascript/4.33/references/map-components/geoscene-direct-line-measurement-3d/#destroy) method when you are done to
     * prevent memory leaks.
     *
     * @default false
     */
    autoDestroyDisabled: boolean;
    /**
     * Icon which represents the component.
     * Typically used when the component is controlled by another component (e.g. by the Expand component).
     *
     * @see [Calcite Icons](https://doc.geoscene.cn/calcite-design-system/icons/)
     * @default "measure-line"
     */
    icon?: HTMLCalciteIconElement["icon"];
    /** The component's default label. */
    label?: string;
    /** @default "bottom-left" */
    position: __geoscene.UIPosition;
    /**
     * By assigning the `id` attribute of the Map or Scene component to this property, you can position a child component anywhere in the DOM while still maintaining a connection to the Map or Scene.
     *
     * @see [Associate components with a Map or Scene component](https://doc.geoscene.cn/javascript/4.33/programming-patterns/#associate-components-with-a-map-or-scene-component)
     */
    referenceElement?: GeosceneReferenceElement | string;
    /**
     * The component's state. The values mean the following:
     *
     * * `disabled` -  not ready yet
     * * `ready` - ready for measuring
     * * `measuring` - currently measuring
     * * `measured` - measuring has finished
     */
    readonly state: "ready" | "disabled" | "measuring" | "measured";
    /**
     * Unit system (imperial, metric) or specific unit used for displaying the distance values. Possible values are listed in
     * [unitOptions](#unitOptions).
     */
    unit: __geoscene.SystemOrLengthUnit;
    /**
     * List of available units and unit systems (imperial, metric) that are shown in the component's dropdown.
     * By default, the following units are included: `metric`, `imperial`, `inches`, `feet`, `us-feet`, `yards`, `miles`, `nautical-miles`, `meters`, `kilometers`.
     * Possible [unit](#unit) values can only be a subset of this list.
     */
    unitOptions: __geoscene.SystemOrLengthUnit[];
    /** Clears the current measurement. */
    clear(): Promise<void>;
    /** Permanently destroy the component. */
    destroy(): Promise<void>;
    /** Starts a new measurement. */
    start(): Promise<void>;
    /** Emitted when the value of a property is changed. Use this to listen to changes to properties. */
    readonly geoscenePropertyChange: TargetedEvent<this, {
        name: "state" | "analysis";
    }>;
    /** Emitted when the component associated with a map or scene view is is ready to be interacted with. */
    readonly geosceneReady: TargetedEvent<this, void>;
}
/**
 * The Directline Measurement 3D component calculates and displays the 3D distance between two points. It can be used in a [Scene](https://doc.geoscene.cn/javascript/4.33/references/map-components/geoscene-scene/) component to measure the vertical, horizontal, and direct distance between two points.
 *
 * [Read more...](https://doc.geoscene.cn/javascript/4.33/references/map-components/geoscene-directline-measurement-3d/)
 *
 * @internal
 * @deprecated
 */
export declare class DeprecatedGeosceneDirectLineMeasurement3d extends GeosceneDirectLineMeasurement3d {
}
export {};