import { Vector3 } from './../math/Vector3'; import { Color } from './../math/Color'; import { Face3, Event } from './Face3'; import { Vector2 } from './../math/Vector2'; import { Vector4 } from './../math/Vector4'; import { Box3 } from './../math/Box3'; import { Sphere } from './../math/Sphere'; import { Matrix4 } from './../math/Matrix4'; import { BufferGeometry } from './BufferGeometry'; import { Matrix } from './../math/Matrix3'; import { Mesh } from './../objects/Mesh'; import { Bone } from './../objects/Bone'; import { AnimationClip } from './../animation/AnimationClip'; import { EventDispatcher } from './EventDispatcher'; /** * @deprecated Use {@link Face3} instead. */ export interface MorphTarget { name: string; vertices: Vector3[]; } export interface MorphColor { name: string; colors: Color[]; } export interface MorphNormals { name: string; normals: Vector3[]; } export let GeometryIdCount: number; /** * Base class for geometries * * # Example * var geometry = new THREE.Geometry(); * geometry.vertices.push( new THREE.Vector3( -10, 10, 0 ) ); * geometry.vertices.push( new THREE.Vector3( -10, -10, 0 ) ); * geometry.vertices.push( new THREE.Vector3( 10, -10, 0 ) ); * geometry.faces.push( new THREE.Face3( 0, 1, 2 ) ); * geometry.computeBoundingSphere(); * * @see https://github.com/mrdoob/three.js/blob/master/src/core/Geometry.js */ export class Geometry extends EventDispatcher { constructor(); /** * Unique number of this geometry instance */ id: number; uuid: string; /** * Name for this geometry. Default is an empty string. */ name: string; type: string; /** * The array of vertices hold every position of points of the model. * To signal an update in this array, Geometry.verticesNeedUpdate needs to be set to true. */ vertices: Vector3[]; /** * Array of vertex colors, matching number and order of vertices. * Used in ParticleSystem, Line and Ribbon. * Meshes use per-face-use-of-vertex colors embedded directly in faces. * To signal an update in this array, Geometry.colorsNeedUpdate needs to be set to true. */ colors: Color[]; /** * Array of triangles or/and quads. * The array of faces describe how each vertex in the model is connected with each other. * To signal an update in this array, Geometry.elementsNeedUpdate needs to be set to true. */ faces: Face3[]; /** * Array of face UV layers. * Each UV layer is an array of UV matching order and number of vertices in faces. * To signal an update in this array, Geometry.uvsNeedUpdate needs to be set to true. */ faceVertexUvs: Vector2[][][]; /** * Array of morph targets. Each morph target is a Javascript object: * * { name: "targetName", vertices: [ new THREE.Vector3(), ... ] } * * Morph vertices match number and order of primary vertices. */ morphTargets: MorphTarget[]; /** * Array of morph normals. Morph normals have similar structure as morph targets, each normal set is a Javascript object: * * morphNormal = { name: "NormalName", normals: [ new THREE.Vector3(), ... ] } */ morphNormals: MorphNormals[]; /** * Array of skinning weights, matching number and order of vertices. */ skinWeights: Vector4[]; /** * Array of skinning indices, matching number and order of vertices. */ skinIndices: Vector4[]; /** * */ lineDistances: number[]; /** * Bounding box. */ boundingBox: Box3; /** * Bounding sphere. */ boundingSphere: Sphere; /** * Set to true if the vertices array has been updated. */ verticesNeedUpdate: boolean; /** * Set to true if the faces array has been updated. */ elementsNeedUpdate: boolean; /** * Set to true if the uvs array has been updated. */ uvsNeedUpdate: boolean; /** * Set to true if the normals array has been updated. */ normalsNeedUpdate: boolean; /** * Set to true if the colors array has been updated. */ colorsNeedUpdate: boolean; /** * Set to true if the linedistances array has been updated. */ lineDistancesNeedUpdate: boolean; /** * */ groupsNeedUpdate: boolean; /** * Bakes matrix transform directly into vertex coordinates. */ applyMatrix(matrix: Matrix4): Geometry; rotateX(angle: number): Geometry; rotateY(angle: number): Geometry; rotateZ(angle: number): Geometry; translate(x: number, y: number, z: number): Geometry; scale(x: number, y: number, z: number): Geometry; lookAt(vector: Vector3): void; fromBufferGeometry(geometry: BufferGeometry): Geometry; center(): Geometry; normalize(): Geometry; /** * Computes face normals. */ computeFaceNormals(): void; /** * Computes vertex normals by averaging face normals. * Face normals must be existing / computed beforehand. */ computeVertexNormals(areaWeighted?: boolean): void; /** * Compute vertex normals, but duplicating face normals. */ computeFlatVertexNormals(): void; /** * Computes morph normals. */ computeMorphNormals(): void; /** * Computes bounding box of the geometry, updating {@link Geometry.boundingBox} attribute. */ computeBoundingBox(): void; /** * Computes bounding sphere of the geometry, updating Geometry.boundingSphere attribute. * Neither bounding boxes or bounding spheres are computed by default. They need to be explicitly computed, otherwise they are null. */ computeBoundingSphere(): void; merge( geometry: Geometry, matrix?: Matrix, materialIndexOffset?: number ): void; mergeMesh(mesh: Mesh): void; /** * Checks for duplicate vertices using hashmap. * Duplicated vertices are removed and faces' vertices are updated. */ mergeVertices(): number; setFromPoints(points: Array | Array): this; sortFacesByMaterialIndex(): void; toJSON(): any; /** * Creates a new clone of the Geometry. */ clone(): this; copy(source: Geometry): this; /** * Removes The object from memory. * Don't forget to call this method when you remove an geometry because it can cuase meomory leaks. */ dispose(): void; // These properties do not exist in a normal Geometry class, but if you use the instance that was passed by JSONLoader, it will be added. bones: Bone[]; animation: AnimationClip; animations: AnimationClip[]; // EventDispatcher mixins addEventListener(type: string, listener: (event: Event) => void): void; hasEventListener(type: string, listener: (event: Event) => void): boolean; removeEventListener(type: string, listener: (event: Event) => void): void; dispatchEvent(event: { type: string; [attachment: string]: any }): void; }