r3-legacy/src/r3-d3-api-geometry-0.js

107 lines
2.8 KiB
JavaScript

/**
* 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');
};