import type { ClonableMixin } from "../../core/Clonable.js";
import type { JSONSupport } from "../../core/JSONSupport.js";

export interface MeshLocalVertexSpaceProperties extends Partial<Pick<MeshLocalVertexSpace, "origin">> {}

/**
 * Represents a [vertex space](https://developers.arcgis.com/javascript/latest/references/core/geometry/Mesh/#vertexSpace) that interprets
 * [Mesh vertex positions](https://developers.arcgis.com/javascript/latest/references/core/geometry/support/MeshVertexAttributes/#position) as x, y, z values measured in meters
 * from the source model's own [0,0,0].
 *
 * A vertex space is the [Mesh.vertexSpace](https://developers.arcgis.com/javascript/latest/references/core/geometry/Mesh/#vertexSpace) object that tells the SDK how to read the
 * x, y, z positions stored in [Mesh.vertexAttributes.position](https://developers.arcgis.com/javascript/latest/references/core/geometry/support/MeshVertexAttributes/#position).
 * Use MeshLocalVertexSpace when those positions describe the shape of a source model relative to the model's own
 * [0,0,0], and you want to place that model in a global [SceneView](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/).
 *
 * The [vertex space's origin](https://developers.arcgis.com/javascript/latest/references/core/geometry/support/MeshLocalVertexSpace/#origin) is the [x, y, z] coordinate where the
 * source model's [0,0,0] lands. The origin values use the coordinate system identified by
 * [Mesh.spatialReference](https://developers.arcgis.com/javascript/latest/references/core/geometry/Mesh/#spatialReference). For example, with WGS84 the origin contains longitude,
 * latitude, and elevation values; with Web Mercator it contains Web Mercator x, y, and z values.
 *
 * In a global scene with WGS84, CGCS2000, or Web Mercator, the SDK places the model on a
 * [local tangent plane](https://en.wikipedia.org/wiki/Local_tangent_plane_coordinates) at the origin. The x-axis points
 * east, the y-axis points north, and the z-axis points up.
 *
 * The word local refers to local coordinates from the source model. It does not mean this vertex space is used for
 * a [local](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/#viewingMode) SceneView. For local scenes, use
 * [MeshGeoreferencedVertexSpace](https://developers.arcgis.com/javascript/latest/references/core/geometry/support/MeshGeoreferencedVertexSpace/) and a
 * [Mesh.spatialReference](https://developers.arcgis.com/javascript/latest/references/core/geometry/Mesh/#spatialReference) that matches
 * [SceneView.spatialReference](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/#spatialReference).
 *
 * @since 4.27
 * @see [Mesh.vertexSpace](https://developers.arcgis.com/javascript/latest/references/core/geometry/Mesh/#vertexSpace)
 * @see [MeshGeoreferencedVertexSpace](https://developers.arcgis.com/javascript/latest/references/core/geometry/support/MeshGeoreferencedVertexSpace/)
 */
export default class MeshLocalVertexSpace extends MeshLocalVertexSpaceSuperclass {
  constructor(properties?: MeshLocalVertexSpaceProperties);
  /**
   * Coordinates of the place where the source model's local [0,0,0] is anchored.
   *
   * The array is [x, y, z] in the coordinate system identified by the
   * [Mesh.spatialReference](https://developers.arcgis.com/javascript/latest/references/core/geometry/Mesh/#spatialReference) property of the Mesh geometry that uses this vertex
   * space. The vertex position [0,0,0] coincides with the vertex space's origin before any
   * [Mesh.transform](https://developers.arcgis.com/javascript/latest/references/core/geometry/Mesh/#transform) is applied.
   */
  accessor origin: readonly [
      number,
      number,
      number
  ];
  /** Type of the vertex space. */
  readonly type: "local";
}
declare const MeshLocalVertexSpaceSuperclass: typeof JSONSupport & typeof ClonableMixin