Skip to content
import PolygonDrawAction from "@arcgis/core/views/draw/PolygonDrawAction.js";
Inheritance:
PolygonDrawActionDrawActionAccessor
Since
ArcGIS Maps SDK for JavaScript 4.5

This class uses different events to generate a set of vertices to create a new Polygon geometry using Draw. When draw.create("polygon") is called, a reference to PolygonDrawAction is returned. You can listen to events on the PolylineDrawAction instance, which allows users to create polylines that meet criteria specified by the developer.

See also
Example
function enableCreatePolygon(draw, view) {
let action = draw.create("polygon");
// PolygonDrawAction.vertex-add
// Fires when user clicks, or presses the "F" key.
// Can also be triggered when the "R" key is pressed to redo.
action.on("vertex-add", function (evt) {
createPolygonGraphic(evt.vertices);
});
// PolygonDrawAction.vertex-remove
// Fires when the "Z" key is pressed to undo the last added vertex
action.on("vertex-remove", function (evt) {
createPolygonGraphic(evt.vertices);
});
// Fires when the pointer moves over the view
action.on("cursor-update", function (evt) {
createPolygonGraphic(evt.vertices);
});
// Add a graphic representing the completed polygon
// when user double-clicks on the view or presses the "Enter" key
action.on("draw-complete", function (evt) {
createPolygonGraphic(evt.vertices);
});
}
function createPolygonGraphic(vertices){
view.graphics.removeAll();
let polygon = {
type: "polygon", // autocasts as Polygon
rings: vertices,
spatialReference: view.spatialReference
};
let graphic = new Graphic({
geometry: polygon,
symbol: {
type: "simple-fill", // autocasts as SimpleFillSymbol
color: "purple",
style: "solid",
outline: { // autocasts as SimpleLineSymbol
color: "white",
width: 1
}
}
});
view.graphics.add(graphic);
}

Constructors

Constructor

Constructor
Parameters
ParameterTypeDescriptionRequired
properties
See the properties table for a list of all the properties that may be passed into the constructor.

Properties

Any properties can be set, retrieved or listened to. See the Watch for changes topic.
PropertyTypeClass
declaredClass
readonly inherited
hasZ
inherited
vertices
readonly inherited
number[][]
view
inherited

declaredClass

readonlyinherited Property
Type
string
Inherited from: Accessor
Since
ArcGIS Maps SDK for JavaScript 4.7

The name of the class. The declared class name is formatted as esri.folder.className.

hasZ

inherited Property
Type
boolean
Inherited from: DrawAction

Controls whether the created geometry will have z coordinates or not.

Default value
true

mode

Property
Type
DrawingMode
Since
ArcGIS Maps SDK for JavaScript 4.7

The drawing mode. It is only relevant when the action is first created. Its value cannot be changed during the action lifecycle.

Possible Values

ValueDescription
hybridVertices are added while the pointer is clicked or dragged.
freehandVertices are added while the pointer is dragged.
clickVertices are added when the pointer is clicked.
Default value
"hybrid"
Example
draw.create("polygon", {mode: "freehand"});

vertices

readonlyinherited Property
Type
number[][]
Inherited from: DrawAction

Two-dimensional array of numbers representing the coordinates of each vertex comprising the geometry being drawn.

view

inherited Property
Type
MapViewOrSceneView
Inherited from: DrawAction

A reference to the MapView.

Methods

MethodSignatureClass
canRedo
inherited
canRedo(): boolean
canUndo
inherited
canUndo(): boolean
complete(): void
emit
inherited
emit<Type extends EventNames<this>>(type: Type, event?: this["@eventTypes"][Type]): boolean
getCoordsAndPointFromScreenPoint(screenPoint: ScreenPoint): FromScreenPointResult | null | undefined
getCoordsFromScreenPoint(screenPoint: ScreenPoint | null | undefined): number[] | null | undefined
hasEventListener
inherited
hasEventListener<Type extends EventNames<this>>(type: Type): boolean
isFulfilled
inherited
isFulfilled(): boolean
isRejected
inherited
isRejected(): boolean
isResolved
inherited
isResolved(): boolean
on
inherited
on<Type extends EventNames<this>>(type: Type, listener: EventedCallback<this["@eventTypes"][Type]>): ResourceHandle
redo
inherited
redo(): void
screenToMap
inherited
screenToMap(screenPoint: ScreenPoint): Point | null | undefined
undo
inherited
undo(): void
when
inherited
when<TResult1 = this, TResult2 = never>(onFulfilled?: OnFulfilledCallback<this, TResult1> | null | undefined, onRejected?: OnRejectedCallback<TResult2> | null | undefined): Promise<TResult1 | TResult2>

canRedo

inherited Method
Signature
canRedo (): boolean
Inherited from: DrawAction

Indicates if the redo() method can be called on the action instance.

Returns
boolean

Returns true if the redo() method can be called.

canUndo

inherited Method
Signature
canUndo (): boolean
Inherited from: DrawAction

Indicates if the undo() method can be called on the action instance.

Returns
boolean

Returns true if the undo() method can be called.

complete

Method
Signature
complete (): void

Completes drawing the polygon geometry and fires the @draw-complete event. Call this method if the drawing logic needs to be completed other than by double-clicking or pressing the "Enter" key.

Returns
void

emit

inherited Method
Signature
emit <Type extends EventNames<this>>(type: Type, event?: this["@eventTypes"][Type]): boolean
Type parameters
<Type extends EventNames<this>>
Inherited from: EventedMixin

Emits an event on the instance. This method should only be used when creating subclasses of this class.

Parameters
ParameterTypeDescriptionRequired
type
Type

The name of the event.

event
this["@eventTypes"][Type]

The event payload.

Returns
boolean

true if a listener was notified

getCoordsAndPointFromScreenPoint

inherited Method
Signature
getCoordsAndPointFromScreenPoint (screenPoint: ScreenPoint): FromScreenPointResult | null | undefined
Inherited from: DrawAction

Maps the given screen point to a map point.

Parameters
ParameterTypeDescriptionRequired
screenPoint

The location on the screen.

Returns
FromScreenPointResult | null | undefined

The result object containing, or null if the screen point could not be mapped.

getCoordsFromScreenPoint

inherited Method
Signature
getCoordsFromScreenPoint (screenPoint: ScreenPoint | null | undefined): number[] | null | undefined
Inherited from: DrawAction

Maps the given screen point to a map point.

Parameters
ParameterTypeDescriptionRequired
screenPoint

The location on the screen.

Returns
number[] | null | undefined

Array of x,y and z component (if hasZ is enabled) of the point associated with the given screen point or null if screen point could not be mapped.

hasEventListener

inherited Method
Signature
hasEventListener <Type extends EventNames<this>>(type: Type): boolean
Type parameters
<Type extends EventNames<this>>
Inherited from: EventedMixin

Indicates whether there is an event listener on the instance that matches the provided event name.

Parameters
ParameterTypeDescriptionRequired
type
Type

The name of the event.

Returns
boolean

Returns true if the class supports the input event.

isFulfilled

inherited Method
Signature
isFulfilled (): boolean
Inherited from: EsriPromiseMixin

isFulfilled() may be used to verify if creating an instance of the class is fulfilled (either resolved or rejected). If it is fulfilled, true will be returned.

Returns
boolean

Indicates whether creating an instance of the class has been fulfilled (either resolved or rejected).

isRejected

inherited Method
Signature
isRejected (): boolean
Inherited from: EsriPromiseMixin

isRejected() may be used to verify if creating an instance of the class is rejected. If it is rejected, true will be returned.

Returns
boolean

Indicates whether creating an instance of the class has been rejected.

isResolved

inherited Method
Signature
isResolved (): boolean
Inherited from: EsriPromiseMixin

isResolved() may be used to verify if creating an instance of the class is resolved. If it is resolved, true will be returned.

Returns
boolean

Indicates whether creating an instance of the class has been resolved.

on

inherited Method
Signature
on <Type extends EventNames<this>>(type: Type, listener: EventedCallback<this["@eventTypes"][Type]>): ResourceHandle
Type parameters
<Type extends EventNames<this>>
Inherited from: EventedMixin

Registers an event handler on the instance. Call this method to hook an event with a listener.

Parameters
ParameterTypeDescriptionRequired
type
Type

An event or an array of events to listen for.

listener
EventedCallback<this["@eventTypes"][Type]>

The function to call when the event fires.

Returns
ResourceHandle

Returns an event handler with a remove() method that should be called to stop listening for the event(s).

PropertyTypeDescription
removeFunctionWhen called, removes the listener from the event.
Example
view.on("click", function(event){
// event is the event handle returned after the event fires.
console.log(event.mapPoint);
});

redo

inherited Method
Signature
redo (): void
Inherited from: DrawAction

Incrementally redo actions recorded in the stack. Call canRedo() prior to calling this method to check if this method can be called on the action instance. Calling this method will fire the vertex-add or vertex-remove events depending on the last action.

Returns
void
Example
if (action.canRedo()) {
action.redo();
}

screenToMap

inherited Method
Signature
screenToMap (screenPoint: ScreenPoint): Point | null | undefined
Inherited from: DrawAction

Maps the given screen point to a map point.

Parameters
ParameterTypeDescriptionRequired
screenPoint

The location on the screen.

Returns
Point | null | undefined

MapPoint associated with the given screen point or null if screen point could not be mapped.

undo

inherited Method
Signature
undo (): void
Inherited from: DrawAction

Incrementally undo actions recorded in the stack. Call canUndo() prior to calling this method to check if this method can be called on the action instance. Calling this method will fire the vertex-add or vertex-remove events depending on the last action.

Returns
void
Example
if (action.canUndo()) {
action.undo();
}

when

inherited Method
Signature
when <TResult1 = this, TResult2 = never>(onFulfilled?: OnFulfilledCallback<this, TResult1> | null | undefined, onRejected?: OnRejectedCallback<TResult2> | null | undefined): Promise<TResult1 | TResult2>
Type parameters
<TResult1 = this, TResult2 = never>
Inherited from: EsriPromiseMixin
Since
ArcGIS Maps SDK for JavaScript 4.6

when() may be leveraged once an instance of the class is created. This method takes two input parameters: an onFulfilled function and an onRejected function. The onFulfilled executes when the instance of the class loads. The onRejected executes if the instance of the class fails to load.

Parameters
ParameterTypeDescriptionRequired
onFulfilled

The function to call when the promise resolves.

onRejected

The function to execute when the promise fails.

Returns
Promise<TResult1 | TResult2>

Returns a new promise for the result of onFulfilled that may be used to chain additional functions.

Example
// Although this example uses MapView, any class instance that is a promise may use when() in the same way
let view = new MapView();
view.when(function(){
// This function will execute once the promise is resolved
}, function(error){
// This function will execute if the promise is rejected due to an error
});

Events

cursor-update

Event
cursor-update: CustomEvent<CursorUpdateEvent>

Fires after the pointer moves on the view.

bubbles composed cancelable
Example
// listen to PolygonDrawAction.cursor-update
// give a visual feedback to the user on the view
// as user moving the pointer.
action.on("cursor-update", function (evt) {
view.graphics.removeAll();
let polygon = new Polygon({
rings: evt.vertices,
spatialReference: view.spatialReference
});
graphic = createGraphic(polygon);
view.graphics.add(graphic);
});

draw-complete

Event
draw-complete: CustomEvent<DrawCompleteEvent>

Fires after the user has completed drawing a polygon.

bubbles composed cancelable
Example
// listen to PolygonDrawAction.draw-complete
// add the graphic representing the completed
// polygon to the view
action.on("draw-complete", function (evt) {
view.graphics.removeAll();
let polygon = new Polygon({
rings: evt.vertices,
spatialReference: view.spatialReference
});
graphic = createGraphic(polygon);
view.graphics.add(graphic);
});

redo

Event
Since
ArcGIS Maps SDK for JavaScript 4.7

Fires in response to redo action or when redo() is called.

bubbles composed cancelable
Example
// Update the graphic on the view as the last action was redone
action.on("redo", function (evt) {
view.graphics.removeAll();
let polygon = new Polygon({
rings: evt.vertices,
spatialReference: view.spatialReference
});
graphic = createGraphic(polygon);
view.graphics.add(graphic);
});

undo

Event
Since
ArcGIS Maps SDK for JavaScript 4.7

Fires in response to undo action or when undo() is called.

bubbles composed cancelable
Example
// Update the graphic on the view as the last action was undone
action.on("undo", function (evt) {
view.graphics.removeAll();
let polygon = new Polygon({
rings: evt.vertices,
spatialReference: view.spatialReference
});
graphic = createGraphic(polygon);
view.graphics.add(graphic);
});

vertex-add

Event

Fires when a vertex is added.

bubbles composed cancelable
Example
// listen to PolygonDrawAction.vertex-add
// give a visual feedback to the user on the view
// as user moving the pointer.
action.on("vertex-add", function (evt) {
view.graphics.removeAll();
let polygon = new Polygon({
rings: evt.vertices,
spatialReference: view.spatialReference
});
graphic = createGraphic(polygon);
view.graphics.add(graphic);
});

vertex-remove

Event
vertex-remove: CustomEvent<VertexRemoveEvent>

Fires when a vertex is removed.

bubbles composed cancelable
Example
// listen to PolygonDrawAction.vertex-remove
// give a visual feedback to the user on the view
// as user moving the pointer.
action.on("vertex-remove", function (evt) {
view.graphics.removeAll();
let polygon = new Polygon({
rings: evt.vertices,
spatialReference: view.spatialReference
});
graphic = createGraphic(polygon);
view.graphics.add(graphic);
});

Type definitions