UNPKG

@arcgis/core

Version:

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

164 lines (161 loc) 10.9 kB
import type Color from "../../../Color.js"; import type MapView from "../../../views/MapView.js"; import type SnappingOptions from "../../../views/interactive/snapping/SnappingOptions.js"; import type { EventedAccessor } from "../../../core/Evented.js"; import type { LengthUnit } from "../../../core/units.js"; import type { GridPlacementState } from "./types.js"; import type { SnappingOptionsProperties } from "../../../views/interactive/snapping/SnappingOptions.js"; export interface GridControlsViewModelProperties extends Partial<Pick<GridControlsViewModel, "dynamicScaling" | "gridColor" | "interactivePlacementState" | "majorLineInterval" | "placementDisabled" | "rotateWithMap" | "rotation" | "snappingEnabled" | "spacing" | "view">> { /** This is the snapping options object that will be configured by the 'enable snapping' property. */ snappingOptions?: SnappingOptionsProperties | null; /** * Unit of measure (foot, meter, etc) used when defining the [spacing](https://developers.arcgis.com/javascript/latest/references/core/widgets/support/GridControls/GridControlsViewModel/#spacing) grid cell. * Note that units are defined relatively to the map's spatial reference length unit, * which will not correspond to geographic distance unless using a special-purpose basemap * within a supported target area. * * When using Web Mercator, the projection defines the length of a meter in projection system units; * this length is equal to a geographic meter only at the equator. On screen, the size of the grid cells is constant * from the equator to the poles, but the real-world size of the grid cell is much larger further from the equator. * * The length of the grid cells can usefully correspond to a geographic length when the Grid is used with an * appropriate spatial reference (for example a local system or a State Plane system) within the reference's area of interst. */ unit?: LengthUnit; } export interface GridControlsViewModelEvents {} /** * Provides the logic for the [GridControls](https://developers.arcgis.com/javascript/latest/references/core/widgets/support/GridControls/). * * [GridControls](https://developers.arcgis.com/javascript/latest/references/core/widgets/support/GridControls/) is integrated into the [Editor](https://developers.arcgis.com/javascript/latest/references/core/widgets/Editor/) and [Sketch](https://developers.arcgis.com/javascript/latest/references/core/widgets/Sketch/) widgets * via the [SnappingControls](https://developers.arcgis.com/javascript/latest/references/core/widgets/support/SnappingControls/) widget. Display of the GridControls widget in those contexts * can be controlled through each widget's respective [GridControls.visibleElements](https://developers.arcgis.com/javascript/latest/references/core/widgets/support/GridControls/#visibleElements) property. * * @since 4.31 * @see [GridControls](https://developers.arcgis.com/javascript/latest/references/core/widgets/support/GridControls/) - _Deprecated since 4.33. Use the [Grid Controls component](https://developers.arcgis.com/javascript/latest/references/map-components/components/arcgis-grid-controls/) instead._ * @see [SnappingOptions](https://developers.arcgis.com/javascript/latest/references/core/views/interactive/snapping/SnappingOptions/) * @see [SnappingControls](https://developers.arcgis.com/javascript/latest/references/core/widgets/support/SnappingControls/) * @see [Programming patterns: Widget viewModel pattern](https://developers.arcgis.com/javascript/latest/programming-patterns/#widget-viewmodel-pattern) */ export default class GridControlsViewModel extends EventedAccessor { constructor(properties?: GridControlsViewModelProperties); /** * Returns `true` if the grid is enabled for display. * Use [trySetDisplayEnabled()](https://developers.arcgis.com/javascript/latest/references/core/widgets/support/GridControls/GridControlsViewModel/#trySetDisplayEnabled) to enable or disable grid display. */ get displayEnabled(): boolean; /** * Returns `true` if the grid is set to scale dynamically. When dynamic scaling is enabled, * grid cells are added or removed to ensure that grid cells are a reasonable size on screen as the user zooms. * The way additional grid lines are shown is controlled by the [majorLineInterval](https://developers.arcgis.com/javascript/latest/references/core/widgets/support/GridControls/GridControlsViewModel/#majorLineInterval) property. */ accessor dynamicScaling: boolean; /** * Returns the effective spacing of grid lines after applying the [dynamicScaling](https://developers.arcgis.com/javascript/latest/references/core/widgets/support/GridControls/GridControlsViewModel/#dynamicScaling) * setting at the current view scale. */ get effectiveSpacingAfterDynamicScaling(): number | null; /** * Sets the color used for grid display. When major/minor lines are shown [majorLineInterval](https://developers.arcgis.com/javascript/latest/references/core/widgets/support/GridControls/GridControlsViewModel/#majorLineInterval) is between 2 and 15. * The minor line will be shown at the provided color with 50% opacity. */ accessor gridColor: Color | null | undefined; /** Returns `true` if the grid is in a valid state for manually setting grid properties or starting an interactive placement. */ get gridControlsEnabled(): boolean; /** * True if the grid is currently not displayed (and therefore also not a valid snap target), * because [dynamicScaling](https://developers.arcgis.com/javascript/latest/references/core/widgets/support/GridControls/GridControlsViewModel/#dynamicScaling) is off and the grid cells are too small * to render at the current scale. */ get gridOutOfScale(): boolean; /** * Sets the interactive placement state, either starting or ending a draw operation that implicitly adjusts the grid. * Interactive placement allows the user to define the center of the grid, then the scale and rotation of the grid by * drawing a second point. Setting this to "place" allows the user to move the grid center only. Setting this to "rotate" * keeps the scale and center of the grid constant while rotating the grid by defining a second point. */ accessor interactivePlacementState: GridPlacementState | null | undefined; /** * Controls the number of grid lines shown at 50% opacity between opaque grid lines when using [dynamicScaling](https://developers.arcgis.com/javascript/latest/references/core/widgets/support/GridControls/GridControlsViewModel/#dynamicScaling). * * @default 10 */ accessor majorLineInterval: number; /** * True if the spacing input should be shown for the current view. * * Common spatial references, like Web Mercator and WGS84, will show * a significant mismatch between the spacing defined for the grid and * the actual length of grid cells. This mismatch varies with position * on the map and with direction (the mismatch is different depending on line angle). * * Because the spacing input is inappropriate and misleading in common * web mapping use cases, it should be hidden from the user to avoid * conveying a false sense of precision. * * For specialized planar spatial references, it is more likely that the user * is an experience GIS professional with an understanding of projections * and the consequent distortions. To enable these users to complete their * work, users of maps with these spatial references can be given direct * access to specify grid length. */ get numericSpacingInputShouldBeVisible(): boolean; /** * If true, interactive placement tools should be disabled. * * @default false * @since 4.33 */ accessor placementDisabled: boolean; /** * Determines the behavior of the grid when the map's viewpoint is rotated. When true, rotating the map * also rotates the grid on screen. When false, rotating the viewpoint does not rotate the grid. * * Note that [rotation](https://developers.arcgis.com/javascript/latest/references/core/widgets/support/GridControls/GridControlsViewModel/#rotation) is applied independently and can be configured regardless of how this setting is configured. * * @default true */ accessor rotateWithMap: boolean; /** The grid's rotation in radians. */ accessor rotation: number; /** * Controls snapping behavior if [snappingOptions](https://developers.arcgis.com/javascript/latest/references/core/widgets/support/GridControls/GridControlsViewModel/#snappingOptions) has been defined. * If [snappingOptions](https://developers.arcgis.com/javascript/latest/references/core/widgets/support/GridControls/GridControlsViewModel/#snappingOptions) have been defined, disabling or enabling grid snapping will * also disable or enable grid display. * * @default false */ accessor snappingEnabled: boolean; /** This is the snapping options object that will be configured by the 'enable snapping' property. */ get snappingOptions(): SnappingOptions | null | undefined; set snappingOptions(value: SnappingOptionsProperties | null | undefined); /** * Length of a grid cell. Grid cells are always square. Defined in [unit](https://developers.arcgis.com/javascript/latest/references/core/widgets/support/GridControls/GridControlsViewModel/#unit). * * @default 1 */ accessor spacing: number; /** * Unit of measure (foot, meter, etc) used when defining the [spacing](https://developers.arcgis.com/javascript/latest/references/core/widgets/support/GridControls/GridControlsViewModel/#spacing) grid cell. * Note that units are defined relatively to the map's spatial reference length unit, * which will not correspond to geographic distance unless using a special-purpose basemap * within a supported target area. * * When using Web Mercator, the projection defines the length of a meter in projection system units; * this length is equal to a geographic meter only at the equator. On screen, the size of the grid cells is constant * from the equator to the poles, but the real-world size of the grid cell is much larger further from the equator. * * The length of the grid cells can usefully correspond to a geographic length when the Grid is used with an * appropriate spatial reference (for example a local system or a State Plane system) within the reference's area of interst. */ get unit(): LengthUnit | undefined; set unit(value: LengthUnit); /** The view from which the widget will operate. */ accessor view: MapView | null | undefined; /** * Try to enable or disable grid display. Will fail if the view is not yet ready to display a grid. * * @param visible - Controls whether to try to enable or disable grid display. */ trySetDisplayEnabled(visible: boolean): void; }