require(["esri/geometry/support/meshUtils"], (meshUtils) => { /* code goes here */ });
import * as meshUtils from "@arcgis/core/geometry/support/meshUtils.js";
esri/geometry/support/meshUtils
Various utilities and convenience functions for working with Mesh objects.
Method Overview
Name | Return Type | Summary | Object |
---|---|---|---|
Converts a mesh to a new vertex space. | meshUtils | ||
Creates an elevation sampler from a mesh. | meshUtils | ||
Creates a mesh geometry by sampling elevation data from an elevation service on a regular grid. | meshUtils | ||
Georeferences vertices specified in a Cartesian coordinate system. | meshUtils | ||
Merges multiple meshes into a single mesh. | meshUtils | ||
Projects georeferenced vertices to a Cartesian coordinate system. | meshUtils |
Method Details
-
Since: ArcGIS Maps SDK for JavaScript 4.30meshUtils since 4.7, convertVertexSpace added at 4.30. -
Converts a mesh to a new vertex space. Any transform defined on the mesh will be applied to the vertex attributes as part of the conversion.
Parametersmesh Meshthe mesh geometry to convert.
targetVertexSpace MeshGeoreferencedVertexSpace|MeshLocalVertexSpacethe vertex space to convert to.
options ObjectoptionalAdditional options.
Specificationsignal AbortSignaloptionalAn AbortSignal to abort the animation. If canceled, the promise will be rejected with an error named
AbortError
. See also AbortController.ReturnsExamples// convert cartesian model data to a mesh with absolute coordinates in WebMercator const converted = convertVertexSpace( new Mesh({ vertexSpace: new MeshLocalVertexSpace({ origin: location }), vertexAttributes, spatialReference: SpatialReference.WebMercator }), new MeshGeoreferencedVertexSpace() );
// convert a georeferenced WebMercator mesh to a mesh with a local tangent coordinate frame // at the center of the mesh const center = mesh.extent.center; const origin = [center.x, center.y, center.z]; const converted = await convertVertexSpace(mesh, new MeshLocalVertexSpace({ origin }));
// convert an existing mesh to absolute coordinates and place a graphic on the highest vertex const converted = await convertVertexSpace(mesh, new MeshGeoreferencedVertexSpace()); const position = converted.vertexAttributes.position; const highestPoint = new Point({ x: 0, y: 0, z: 0, spatialReference: converted.spatialReference }); for (let i = 0; i < position.length; i += 3) { if (position[2] > highestPoint.z) { highestPoint.x = position[0]; highestPoint.y = position[1]; highestPoint.z = position[2]; } } view.graphics.add(new Graphic({ geometry: highestPoint }));
-
createElevationSampler
createElevationSampler(mesh, options){Promise<ElevationSampler>}
Since: ArcGIS Maps SDK for JavaScript 4.12meshUtils since 4.7, createElevationSampler added at 4.12. -
Creates an elevation sampler from a mesh. The sampler can be used to query elevation values on the surface of the mesh. The elevation sampler uses a snapshot of the Mesh geometry and will not update if the mesh changes after the sampler has been created.
ParametersReturnsType Description Promise<ElevationSampler> An elevation sampler.
-
Creates a mesh geometry by sampling elevation data from an elevation service on a regular grid.
Parameterssource ElevationLayer|Ground|ElevationSamplerThe source from which to query the elevation data.
extent ExtentThe extent from which to create the mesh.
options ObjectoptionalAdditional options.
params.material MeshMaterialoptionalThe material to be used for the mesh.
optional Default Value: autoControls the horizontal resolution (cell size) in meters from which elevation data is sampled (defaults to
auto
). See ElevationLayer.queryElevation for more details on the different settings.options.signal AbortSignaloptionalSignal object that can be used to abort the asynchronous task.
ReturnsExample// Create a mesh by sampling the ground meshUtils.createFromElevation(map.ground, extent) .then(function(mesh) { // Do something with the mesh }); // Create a mesh by sampling the ground surface currently in view meshUtils.createFromElevation(view.groundView.elevationSampler, view.extent) .then(function(mesh) { // Do something with the mesh });
-
georeference
georeference(vertexAttributes, location, options){VertexAttributes}
Deprecated since version 4.30. UseconvertVertexSpace
instead. -
Georeferences vertices specified in a Cartesian coordinate system. This is useful when converting general 3D model meshes not typically georeferenced. This method operates on mesh vertex attributes and will convert positions and normals (if specified) from a local (0, 0, 0) Cartesian system to the properly georeferenced coordinates at the specified
location
. The unit of the source data defaults to the unit of thelocation
's spatial reference. If the coordinate system is WGS84, metric units are used as the default. The unit of the source data may be specified in the additionaloptions
in which case a linear unit scale will automatically be applied to bring the source data in the unit of the spatial reference.ParametersSpecificationvertexAttributes VertexAttributesThe position and normal buffers to georeference.
location PointThe location at which to georeference the position and normal buffers.
options ObjectoptionalAdditional options.
Specificationgeographic BooleanoptionalIndicates whether to georeference relative to the globe or the projected coordinate system.
unit LengthUnitoptionalIndicates the unit of the source data. A linear scale will be applied to the position attributes to convert the source data to the unit of the spatial reference at which the mesh is being georeferenced. By default the unit of the source data is assumed to be the same as the target spatial reference.
ReturnsType Description VertexAttributes The georeferenced position and normal buffers. Exampleconst geoVertexAttributes = meshUtils.georeference(vertexAttributes, location); const mesh = new Mesh({ vertexAttributes: geoVertexAttributes, spatialReference: location.spatialReference });
-
ungeoreference
ungeoreference(vertexAttributes, location, options){VertexAttributes}
Deprecated since version 4.30. UseconvertVertexSpace
instead. -
Projects georeferenced vertices to a Cartesian coordinate system. This is useful for converting existing scene geometry so that it can be used as source material for generating new 3D meshes. This method operates on mesh vertex attributes and will convert positions and normals (if specified) from georeferenced coordinates at the specified
location
to a local (0, 0, 0) Cartesian system. The unit of the resulting data defaults to the unit of thelocation
's spatial reference. If the coordinate system is WGS84, metric units are used as the default. The unit of the resulting data may be specified in the additionaloptions
in which case a linear unit scale will automatically be applied.ParametersSpecificationvertexAttributes VertexAttributesThe georeferenced position and normal buffers.
location PointThe location to which the position and normal buffers are georeferenced.
options ObjectoptionalAdditional options.
Specificationgeographic BooleanoptionalIndicates whether the coordinates are georeferenced relative to the globe or the projected coordinate system.
unit LengthUnitoptionalIndicates the unit of the resulting data. A linear scale will be applied to the position attributes to convert the source data to the specified unit. By default the unit of the resulting data will be the same as the source spatial reference.
ReturnsType Description VertexAttributes The position and normal buffers in a local Cartesian coordinate system. Exampleconst vertexAttributes = meshUtils.ungeoreference(geoVertexAttributes, location);
Type Definitions
-
VertexAttributes
VertexAttributes Object
-
Represents the position and normal vertex attribute buffers of a mesh.
- Properties
-
position Float64Array
The position buffer.
normal Float32ArrayThe normal buffer.
tangent Float32ArrayThe tangent buffer.