SceneModifications

AMD: require(["esri/layers/support/SceneModifications"], (SceneModifications) => { /* code goes here */ });
ESM: import SceneModifications from "@arcgis/core/layers/support/SceneModifications";
Class: esri/layers/support/SceneModifications
Inheritance: SceneModifications Collection Accessor
Since: ArcGIS API for JavaScript 4.16

A collection of SceneModification with polygons and types to apply client-side modifications. The SceneModifications could be applied to the IntegratedMeshLayer.modifications property.

The modifications for IntegratedMeshLayer need to be in the same spatial reference as the IntegratedMeshLayer. Reprojection between WGS84 and WebMercator will be done automatically. Reprojection of the geometry to other spatial references can be done with the client-side projection engine.

See also:

Constructors

new SceneModifications(properties)
Parameter:
properties Object
optional

See the properties for a list of all the properties that may be passed into the constructor.

Property Overview

Any properties can be set, retrieved or listened to. See the Working with Properties topic.
Show inherited properties Hide inherited properties
Name Type Summary Class
Stringmore details

The name of the class.

more detailsAccessor
Numbermore details

The number of items in the Collection.

more detailsCollection

Property Details

declaredClass Stringreadonly inherited

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

length Number inherited

The number of items in the Collection.

Method Overview

Show inherited methods Hide inherited methods
Name Return Type Summary Class
more details

Adds a single item to the collection.

more detailsCollection
more details

Adds multiple items to the collection.

more detailsCollection
SceneModificationsmore details

Creates a clone of this object.

more detailsSceneModifications
Collectionmore details

Creates a new Collection containing the items in the original Collection joined with the items in the input array or Collection.

more detailsCollection
Booleanmore details

Emits an event on the instance.

more detailsCollection
Booleanmore details

Determines whether all items in the Collection pass a test defined by callback.

more detailsCollection
Collectionmore details

Filters the Collection's items based on a test defined by the callback function.

more detailsCollection
*more details

Returns an item in the Collection if that item passes a test as defined in the callback function.

more detailsCollection
Numbermore details

Returns the index of an item in the Collection if that item passes a test as defined in the callback function.

more detailsCollection
Collectionmore details

Flattens a hierarchical Collection containing at least one child collection.

more detailsCollection
more details

Executes the input function for each item in the Collection.

more detailsCollection
*more details

Creates a new instance of this class and initializes it with values from a JSON object generated from an ArcGIS product.

more detailsSceneModifications
*more details

Returns the item at the specified index.

more detailsCollection
Booleanmore details

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

more detailsCollection
Booleanmore details

Tests if an item is present in the new Collection.

more detailsCollection
Numbermore details

Returns the index of an element in the collection.

more detailsCollection
Stringmore details

Creates a string representation of the items in the Collection.

more detailsCollection
Numbermore details

Returns the last index of an element in the collection.

more detailsCollection
Collectionmore details

Passes each Collection item into the callback function and returns a new array of the returned values.

more detailsCollection
Objectmore details

Registers an event handler on the instance.

more detailsCollection
*more details

Removes the last item from the collection and returns it.

more detailsCollection
Numbermore details

Adds an item(s) to the end of the collection.

more detailsCollection
*more details

Reduces all items in the collection (from left to right) into a single variable using callback.

more detailsCollection
*more details

Reduces all items in the collection (from right to left) into a single variable using callback.

more detailsCollection
more details

Removes an item from the collection.

more detailsCollection
more details

Removes all items from the collection.

more detailsCollection
*more details

Removes an item from the collection at a specified index.

more detailsCollection
*more details

Removes each item in the input array.

more detailsCollection
*more details

Moves an item in the Collection to a specified index.

more detailsCollection
Collectionmore details

Reverses the collection in place.

more detailsCollection
*more details

Removes the first item from the collection (at index 0), and returns it.

more detailsCollection
Collectionmore details

Creates a new Collection comprised of a portion of the original Collection.

more detailsCollection
Booleanmore details

Determines whether an item in the Collection passes a test defined by callback.

more detailsCollection
more details

Sorts the Collection in place.

more detailsCollection
Arraymore details

Removes existing items and/or adds new items to the collection.

more detailsCollection
Arraymore details

Returns a new array object containing the Collection's items.

more detailsCollection
Objectmore details

Converts an instance of this class to its ArcGIS portal JSON representation.

more detailsSceneModifications
Numbermore details

Adds one or more items to the beginning of the collection.

more detailsCollection

Method Details

add(item, index)inherited

Adds a single item to the collection. The change event is fired after an item is added to the Collection.

Parameters:
item *

The item to add.

index Number
optional

Zero-based index of where in the collection to add the item. If not specified, the items will be added at the end.

Example:
let gpc = new Graphic();  // Creates a new graphic
let layer = new GraphicsLayer(); // Creates a new graphics layer
layer.graphics.add(gpc);  // Adds graphic to layer's graphics collection
addMany(items, index)inherited

Adds multiple items to the collection. The change event is fired after items are added to the Collection.

Parameters:

An array or collection of items to add.

index Number
optional

Zero-based index of where in the collection to add the items. If not specified, the items will be added at the end.

Example:
// Creates two new graphics
let gpc1 = new Graphic();
let gpc2 = new Graphic();

let layer = new GraphicsLayer(); // Creates a new graphics layer

// Adds both graphics to layer's graphics collection
layer.graphics.addMany([gpc1, gpc2]);

Creates a clone of this object.

Returns:
Type Description
SceneModifications A clone of the SceneModifications instance that invoked this method.
concat(value){Collection}inherited

Creates a new Collection containing the items in the original Collection joined with the items in the input array or Collection.

Parameter:

The array or Collection to append to the existing Collection.

Returns:
Type Description
Collection A new Collection comprised of the items in the Collection that invoked this method combined with the input items.
See also:
Example:
// creating a collection of all the basemap's layers.
let basemap = map.basemap;
let basemapLayers = basemap.baseLayers.concat(basemap.referenceLayers);
emit(type, event){Boolean}inherited

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

Parameters:
type String

The name of the event.

event Object
optional

The event payload.

Returns:
Type Description
Boolean true if a listener was notified
every(callback){Boolean}inherited

Determines whether all items in the Collection pass a test defined by callback. Each item in the Collection is passed into the callback until one returns a value of false.

Parameter:
callback ItemTestCallback

The function to call for each item in the Collection.

Returns:
Type Description
Boolean Returns true if every call to the callback function returned true. Returns false if at least one call to the callback returned false.
See also:
Example:
let meetsStandardSize = graphicsLayer.graphics.every(function(item, i){
  // Tests each geometry's area to see if it is greater than 1,000 acres
  return calculateArea(item.geometry) > 1000;
});
filter(callback){Collection}inherited

Filters the Collection's items based on a test defined by the callback function. Each item is passed into the callback function, which returns true if the item passes the test and false if it does not.

Parameter:
callback ItemTestCallback

The function that defines a test for determining whether to return the item in a new Collection.

Returns:
Type Description
Collection Returns a new Collection containing the items that passed the filter test.
See also:
Example:
// filteredLayers is a Collection of all the non-visible layers in the map
let filteredLayers = map.layers.filter(function(layer){
  return !layer.visible;
});
find(callback){*}inherited

Returns an item in the Collection if that item passes a test as defined in the callback function. Each item is passed into the callback function, which returns true if the item passes the test and false if it does not.

Parameter:
callback ItemTestCallback

The testing function that will assess each item in the Collection. Returns true if an item passes the test and false if it fails.

Returns:
Type Description
* The first item in the Collection that satisfies the test function.
See also:
Example:
// If the id of a map layer is already known, get the layer that matches the id
let myLayer = map.layers.find(function(layer){
  return layer.id === "speciesLyr01";
});
// myLayer references the layer in map with ID "speciesLyr01"
findIndex(callback){Number}inherited

Returns the index of an item in the Collection if that item passes a test as defined in the callback function. Each item is passed into the callback function, which returns true if the item passes the test and false if it does not.

Parameter:
callback ItemTestCallback

The testing function that will assess each item in the Collection. Returns true if an item passes the test and false if it fails.

Returns:
Type Description
Number Returns the index of the Collection item that satsifies the test function. If an item fails the test, -1 is returned.
See also:
Example:
// gpcIndex is assigned the index of the first graphic whose name
// property is 'Redlands'. This result can be used in getItemAt()
let gpcIndex = graphicsLyr.graphics.findIndex(function(item){
  return item.attributes.name === "Redlands";
});
flatten(callback){Collection}inherited

Flattens a hierarchical Collection containing at least one child collection. Each item in the collection is passed into the callback function, which should check for child collections specified by the developer. A flat collection of all items (parent and children) is returned.

This is useful for scenarios where the user would like to search all the layers in a map, including a GroupLayer's layers and a MapImageLayer's sublayers. The callback should return the sub-collection of the item. If multiple levels of collections exist in the hierarchy, then this method recursively executes for all sub-collections.

Parameter:
callback ItemCallback

A function that will assess each item in the Collection.

Returns:
Type Description
Collection Returns a flat collection of all items in the original collection and their children.
Example:
// create a MapImageLayer with several sublayers and add to a map
// containing another GraphicsLayer
let layer = new MapImageLayer({ sublayers: [ ... ] });
let map = new Map({
  layers: [ layer, new GraphicsLayer() ]
});

// A flat collection of all layers and sublayers
// (if layer is a MapImageLayer) in the map.
// This collection may be searched or used for other purposes
let allLayersAndSublayers = map.layers.flatten(function(item){
  return item.layers || item.sublayers;
});
forEach(callback)inherited

Executes the input function for each item in the Collection.

Parameter:
callback ItemCallback

The function to call for each item in the Collection.

See also:
Example:
graphicsLayer.graphics.forEach(function(item, i){
  // Do something here to each graphic like calculate area of its geometry
  calculateArea(item.geometry);
});
fromJSON(json){*}static

Creates a new instance of this class and initializes it with values from a JSON object generated from an ArcGIS product. The object passed into the input json parameter often comes from a response to a query operation in the REST API or a toJSON() method from another ArcGIS product. See the Using fromJSON() topic in the Guide for details and examples of when and how to use this function.

Parameter:
json Object

A JSON representation of the instance in the ArcGIS format. See the ArcGIS REST API documentation for examples of the structure of various input JSON objects.

Returns:
Type Description
* Returns a new instance of this class.
getItemAt(index){*}inherited

Returns the item at the specified index.

Parameter:
index Number

Zero-based index of the item in the Collection to retrieve.

Returns:
Type Description
* The item in the Collection stored at the specified index.
Example:
// Assigns the base layer at index 0 to baseLayer
let baseLayer = map.basemap.baseLayers.getItemAt(0);
hasEventListener(type){Boolean}inherited

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

Parameter:
type String

The name of the event.

Returns:
Type Description
Boolean Returns true if the class supports the input event.
includes(searchElement){Boolean}inherited

Tests if an item is present in the new Collection.

Parameter:
searchElement *

The item to search for in the collection.

Returns:
Type Description
Boolean true if the item is in the collection.
See also:
Example:
// check if a layer is in the map's operational layers.
if (view.map.layers.includes(myLayer)) {
  // ...
}
indexOf(searchElement, fromIndex){Number}inherited

Returns the index of an element in the collection.

Parameters:
searchElement *

Item to search for in the collection.

fromIndex Number
optional

Use if you don't want to search the whole collection or you don't want to search from the start.

Returns:
Type Description
Number The location of the first match found in the collection, or -1 if there is no match.
See also:
Example:
// index is the index of the first graphic in the
// graphics layer that matches the input graphic
let index = graphicsLayer.graphics.indexOf(graphic);
join(separator){String}inherited

Creates a string representation of the items in the Collection.

Parameter:
separator String
optional
Default Value: ,

The separator used between each item in the final string.

Returns:
Type Description
String The string representation of the items.
See also:
Example:
let stringCollection = new Collection(["how", "are", "you", "doing?"]);
let phrase = stringCollection.join(" ");

// Prints "how are you doing?"
console.log(phrase);
lastIndexOf(searchElement, fromIndex){Number}inherited

Returns the last index of an element in the collection.

Parameters:
searchElement *

Item to search for in the collection.

fromIndex Number
optional

Use if you don't want to search the whole collection, or you don't want to search from the end.

Returns:
Type Description
Number The location of the last match found in the collection, or -1 if there is no match.
See also:
Example:
// index is the index of the first graphic in the
// graphics layer that matches the input graphic
let index = graphicsLayer.graphics.lastIndexOf(graphic);
map(callback){Collection}inherited

Passes each Collection item into the callback function and returns a new array of the returned values. For example, if you have a Collection of numbers and would like to add each number by 10, you can use map() to create a new Collection with the same numbers incremented by 10.

Parameter:
callback ItemMapCallback

The function that processes each item in the Collection and returns a new value at the same index of the original item.

Returns:
Type Description
Collection Returns a new collection containing the new items generated from the callback.
See also:
Example:
// Gets the geometries of the graphics and assigns them to a new Collection
let geoms = graphicsLayer.graphics.map(function(item, i){
  return item.geometry;
});
on(type, listener){Object}inherited

Registers an event handler on the instance. Call this method to hook an event with a listener. See the Events summary table for a list of supported events.

Parameters:

An event or an array of events to listen for.

listener Function

The function to call when the event fires.

Returns:
Type Description
Object Returns an event handler with a remove() method that should be called to stop listening for the event(s).
Property Type Description
remove Function When 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);
});
pop(){*}inherited

Removes the last item from the collection and returns it.

Returns:
Type Description
* The last item in the collection.
See also:
Example:
// Removes the last layer in the map and stores it in lastLayer
let lastLayer = map.layers.pop();
push(item){Number}inherited

Adds an item(s) to the end of the collection.

Parameter:
item *

An item or comma-separated list of items to add to the end of the collection.

Returns:
Type Description
Number The new length of the collection.
See also:
Examples:
// Adds a new graphic to the end of the graphics collection on a GraphicsLayer
graphicsLyr.graphics.push(newGraphic);
// Adds three new graphics to the end of the GraphicsLayer's graphics collection
graphicsLyr.graphics.push(g1, g2, g3);
reduce(callback){*}inherited

Reduces all items in the collection (from left to right) into a single variable using callback.

Parameter:

The function that processes each item in the Collection and appends it to the previous item.

Returns:
Type Description
* Returns the value representing the reduction of the Collection's items.
See also:
reduceRight(callback, initialValue){*}inherited

Reduces all items in the collection (from right to left) into a single variable using callback.

Parameters:

The function that processes each item in the Collection and appends it to the previous item.

initialValue *
optional

Item to use as the first element to process in callback.

Returns:
Type Description
* Returns the value representing the reduction of the Collection's items.
See also:
remove(item)inherited

Removes an item from the collection. The change event is fired after an item is removed from the Collection.

Parameter:
item *

The item to remove.

Example:
let layer = map.layers.getItemAt(4);
// Removes the fifth layer from the map
map.layers.remove(layer);
removeAll()inherited

Removes all items from the collection.

Example:
// Removes all layers from the map
map.layers.removeAll();
removeAt(index){*}inherited

Removes an item from the collection at a specified index. The change event is fired after an item is removed from the Collection.

Parameter:
index Number

The index of the item to remove..

Returns:
Type Description
* The removed item if present in the collection, undefined otherwise.
Example:
// Removes the layer at index 4 of the map
map.layers.removeAt(4);
removeMany(items){*}inherited

Removes each item in the input array. If an item is present multiple times in the collection, only the first occurrence is removed. The change event is fired after an item is removed from the Collection.

Parameter:

The items to remove.

Returns:
Type Description
* The removed items present in the collection.
Example:
let refLayers = [refLyr1, refLyr2, refLyr3];
// Removes three reference layers in the refLayers
// collection from the basemap's referenceLayers
map.basemap.referenceLayers.removeMany(refLayers);
reorder(item, index){*}inherited

Moves an item in the Collection to a specified index. The change event is fired after an item is moved in the Collection.

Parameters:
item *

The item to move.

index Number

The index to move the item to.

Returns:
Type Description
* The item that was moved. undefined if item is not in the collection
Example:
// Get the first two layers in a map
let layer1 = map.layers.getItemAt(0);
let layer2 = map.layers.getItemAt(1);

// Moves the second layer to the first position in the map.layers Collection
// effectively swapping the positions of layer1 and layer2
map.layers.reorder(layer2, 0);
reverse(){Collection}inherited

Reverses the collection in place.

Returns:
Type Description
Collection The reversed collection.
See also:
Example:
// Reverse layers from the map
map.layers.reverse();
shift(){*}inherited

Removes the first item from the collection (at index 0), and returns it. The remaining items of the collection are then shifted down one index from their previous location.

Returns:
Type Description
* The first item in the collection.
See also:
Example:
// Removes the first layer in the map and stores it in firstLyr
let firstLyr = map.layers.shift();
slice(begin, end){Collection}inherited

Creates a new Collection comprised of a portion of the original Collection.

Parameters:
begin Number
optional

The index of the first item to extract.

end Number
optional

The index of the last item to extract.

Returns:
Type Description
Collection Returns a new Collection containing the items in the specified range.
See also:
Example:
// get the graphics from index 50 to 100;
let selection = graphicsLayer.graphics.slice(50, 100);
some(callback){Boolean}inherited

Determines whether an item in the Collection passes a test defined by callback. Each item in the Collection is passed into the callback until one returns a value of true.

Parameter:
callback ItemCallback

The function that defines the test for each Collection item.

Returns:
Type Description
Boolean Returns true if any of the items in the Collection pass the test defined in callback. Returns false if all items fail the test.
See also:
Example:
// If at least one of the point graphics has a geometry whose
// elevation is above 1000m, then passes will have a value of true.
// Otherwise, it will be false.
let passes = graphicsLayer.graphics.some(function(item, i){
  return item.geometry.z > 1000;
});
sort(compareFunction)inherited

Sorts the Collection in place.

Parameter:
compareFunction ItemCompareCallback
optional

The function that defines a comparison of two items in the collection.

See also:
Example:
// Sort graphics based on their elevation or z-value
let sortedGraphics = graphicsLayer.graphics.sort(function(a, b){
  if(a.geometry.z > b.geometry.z){
    return 1;
  }
  else if (a.geometry.z < b.geometry.z){
    return -1;
  }
  else {
    return 0;
  }
});
splice(start, deleteCount, items){Array}inherited

Removes existing items and/or adds new items to the collection.

Parameters:
start Number

Index at which to start changing the collection.

deleteCount Number

Indicates the number of collection items to remove. If 0 is used then no elements are removed and at least one new item should be added in the items parameter.

items *

The item or comma-separated list of items to add to the collection.

Returns:
Type Description
Array An array of the deleted items formerly part of the collection.
See also:
Examples:
// map.layers is a collection of 6 layers
// Adds a seventh layer to the map at index 3
map.layers.splice(3, 0, layer7);
// Removes two layers starting from index 2 and adds the
// specified layers in the positions of the former layers
let oldLayers = map.layers.splice(2, 2, layer8, layer9, layer10);

// oldLayers = [layer2, layer3]
toArray(){Array}inherited

Returns a new array object containing the Collection's items.

Returns:
Type Description
Array An array containing the Collection's items.
Example:
// Creates an array populated with the map's layers
let mapLayersArray = map.layers.toArray();
toJSON(){Object}

Converts an instance of this class to its ArcGIS portal JSON representation. See the Using fromJSON() guide topic for more information.

Returns:
Type Description
Object The ArcGIS portal JSON representation of an instance of this class.
unshift(items){Number}inherited

Adds one or more items to the beginning of the collection.

Parameter:
items *

The item(s) to add to the beginning of the collection.

Returns:
Type Description
Number The new length of the collection.
See also:
Example:
// If a map's basemap has 3 baseLayers: baseLyr0, baseLyr1, baseLyr2
map.basemap.baseLayers.unshift(baseLyr3);

// Now the baseLayers collection is: baseLyr3, baseLyr0, baseLyr1, baseLyr2

Event Overview

Show inherited events Hide inherited events
Name Type Summary Class
{item: *}
more details

Fires after an item has been added to the collection.

more details Collection
more details

Fires after an item has been added, reordered or removed from the collection.

more details Collection
{item: *}
more details

Fires after an item has been removed from the collection.

more details Collection
{cancellable: Boolean,defaultPrevented: Boolean,item: *,preventDefault: Function}
more details

Fires before an item is added to the collection.

more details Collection
{cancellable: Boolean,defaultPrevented: Boolean,item: *,preventDefault: Function}
more details

Fires before any modifications are performed on the collection.

more details Collection
{cancellable: Boolean,defaultPrevented: Boolean,item: *,preventDefault: Function}
more details

Fires before an item has been removed from the collection.

more details Collection
{added: Array,moved: Array,removed: Array}
more details

Fires after an item has been added, reordered, or removed from the Collection.

more details Collection

Event Details

after-addinherited

Fires after an item has been added to the collection.

Property:
item *

The item added to the collection.

Example:
// indicates a layer has been added to the map
map.layers.on("after-add", function(event){
  console.log(event.item, " has been added to the map.");
});
after-changesinherited

Fires after an item has been added, reordered or removed from the collection.

Example:
map.layers.on("after-changes", function(event){
  console.log(event, " layer was added/removed from the map.");
});
after-removeinherited

Fires after an item has been removed from the collection.

Property:
item *

The item to remove from the collection.

Example:
// indicates a layer has been removed from the map
map.layers.on("after-remove", function(event){
  console.log(event.item, " has been removed from the map.");
});
before-addinherited

Fires before an item is added to the collection. This event can be used to prevent an item from being added to the collection by cancelling it with the event.preventDefault() method.

Properties:
cancellable Boolean

Indicates if the change event can be cancelled.

defaultPrevented Boolean

Indicates if this event has previously been cancelled by another event handler.

item *

The item to add to the collection.

preventDefault Function

A method that prevents the item from being added to the collection.

Example:
// prevents a layer from being added to the map more than once.
map.layers.on("before-add", function(event){
   if(map.layers.includes(event.item)){
     event.preventDefault();
     console.log("layer already exists in map.");
   }
});
before-changesinherited

Fires before any modifications are performed on the collection. This event can be used to prevent an item from being added or removed from the collection by cancelling it with the event.preventDefault() method.

Properties:
cancellable Boolean

Indicates if the change event can be cancelled.

defaultPrevented Boolean

Indicates if this event has previously been cancelled by another event handler.

item *

The item to add or remove from the collection.

preventDefault Function

A method that prevents the item from being added or removed from the collection.

Example:
map.layers.on("before-changes", function(event){
  // prevents layers from being added/removed from the map
  event.preventDefault();
});
before-removeinherited

Fires before an item has been removed from the collection. This event can be used to prevent an item from being removed from the collection by cancelling it with the event.preventDefault() method.

Properties:
cancellable Boolean

Indicates if the change event can be cancelled.

defaultPrevented Boolean

Indicates if this event has previously been cancelled by another event handler.

item *

The item to remove from the collection.

preventDefault Function

A method that prevents the item from being removed from the collection.

Example:
// prevents a layer from being removed from the basemap
map.basemap.baseLayers.on("before-remove", function(event){
   if(map.basemap.baseLayers.includes(event.item)){
     event.preventDefault();
     console.log("layer cannot be removed from basemap.");
   }
});
changeinherited

Fires after an item has been added, reordered, or removed from the Collection. Using methods of other classes that affect properties of type Collection will also cause this event to fire, such as Map.add(), Map.remove(), Map.reorder().

For example, map.layers.add(newLyr) and map.add(newLyr) which uses Map.add() to add a new layer to the map.layers collection will cause this event to fire.

Properties of type Collection cannot be watched. The change event should be used to notify the developer/user of changes to the collection.

Properties:
added Array

An array of items added to the collection using either add() or addMany().

moved Array

An array of items that moved in the collection using reorder().

removed Array

An array of items removed from the collection using either remove(), removeMany(), removeAt(), or removeAll().

Example:
// This function will fire each time a layer is either added,
// moved, or removed from the map.layers Collection
map.layers.on("change", function(event){
  let newLayers = event.added; // An array of layers added to the map.layers Collection
  let reorderedLayers = event.moved;  // An array of layers moved in the Collection
  let removedLayers = event.removed;  // An array of layers removed from map
});

Your browser is no longer supported. Please upgrade your browser for the best experience. See our browser deprecation post for more details.