/** * R3.D3.API.Geometry * @param apiComponent * * @property boundingBox * @property boundingSphere * @property indexed * @property vertices * @property faces * * @constructor */ R3.D3.API.Geometry = function( apiComponent ) { __API_COMPONENT__; if (R3.Utils.UndefinedOrNull(apiComponent.boundingBox)) { apiComponent.boundingBox = new R3.API.Box3( { parent : this } ); } this.boundingBox = apiComponent.boundingBox; if (R3.Utils.UndefinedOrNull(apiComponent.boundingSphere)) { apiComponent.boundingSphere = new R3.API.Sphere( { parent : this } ); } this.boundingSphere = apiComponent.boundingSphere; if (R3.Utils.UndefinedOrNull(apiComponent.indexed)) { apiComponent.indexed = false; } this.indexed = apiComponent.indexed; /** * We need to initialize the vertices before we initialize the faces, so we can pass vertex information to the * face and calculate the face normal if required */ if (R3.Utils.UndefinedOrNull(apiComponent.vertices)) { apiComponent.vertices = [ new R3.API.Vertex( { parent : this, register : true } ), new R3.API.Vertex( { parent : this, register : true } ), new R3.API.Vertex( { parent : this, register : true } ) ]; } this.vertices = apiComponent.vertices; if (R3.Utils.UndefinedOrNull(apiComponent.faces)) { apiComponent.faces = [ new R3.D3.API.Face.Graphics( { parent : this, register : true, vertexIndices : [ 0, 1, 2 ], vertices : [ this.vertices[0], this.vertices[1], this.vertices[2] ] } ) ]; } this.faces = apiComponent.faces; this.faces = R3.Utils.SortFacesByMaterialIndex(this.faces); }; R3.D3.API.Geometry.prototype = Object.create(R3.API.Component.prototype); R3.D3.API.Geometry.prototype.constructor = R3.D3.API.Geometry; R3.D3.API.Geometry.prototype.updateNormals = function() { throw new Error('Override R3.D3.API.Geometry.prototype.updateNormals in child class'); }; R3.D3.API.Geometry.prototype.updatePositions = function() { throw new Error('Override R3.D3.API.Geometry.prototype.updateNormals in child class'); };