ModelHandle/source/model/model.js
2021-10-22 11:17:36 +02:00

140 lines
2.9 KiB
JavaScript

OV.Model = class extends OV.Element
{
constructor ()
{
super ();
this.root = new OV.Node ();
this.materials = [];
this.meshes = [];
}
GetRootNode ()
{
return this.root;
}
MaterialCount ()
{
return this.materials.length;
}
MeshCount ()
{
return this.meshes.length;
}
VertexCount ()
{
let count = 0;
for (let i = 0; i < this.meshes.length; i++) {
count += this.meshes[i].VertexCount ();
}
return count;
}
NormalCount ()
{
let count = 0;
for (let i = 0; i < this.meshes.length; i++) {
count += this.meshes[i].NormalCount ();
}
return count;
}
TextureUVCount ()
{
let count = 0;
for (let i = 0; i < this.meshes.length; i++) {
count += this.meshes[i].TextureUVCount ();
}
return count;
}
TriangleCount ()
{
let count = 0;
for (let i = 0; i < this.meshes.length; i++) {
count += this.meshes[i].TriangleCount ();
}
return count;
}
AddMaterial (material)
{
this.materials.push (material);
return this.materials.length - 1;
}
GetMaterial (index)
{
return this.materials[index];
}
AddMesh (mesh)
{
this.meshes.push (mesh);
return this.meshes.length - 1;
}
AddMeshToIndex (mesh, index)
{
this.meshes.splice (index, 0, mesh);
this.root.Enumerate ((node) => {
for (let i = 0; i < node.meshIndices.length; i++) {
if (node.meshIndices[i] >= index) {
node.meshIndices[i] += 1;
}
}
});
return index;
}
RemoveMesh (index)
{
this.meshes.splice (index, 1);
this.root.Enumerate ((node) => {
for (let i = 0; i < node.meshIndices.length; i++) {
if (node.meshIndices[i] === index) {
node.meshIndices.splice (i, 1);
i -= 1;
} else if (node.meshIndices[i] > index) {
node.meshIndices[i] -= 1;
}
}
});
}
GetMesh (index)
{
return this.meshes[index];
}
EnumerateMeshes (onMesh)
{
for (const mesh of this.meshes) {
onMesh (mesh);
}
}
EnumerateVertices (onVertex)
{
for (const mesh of this.meshes) {
mesh.EnumerateVertices (onVertex);
}
}
EnumerateTriangles (onTriangle)
{
for (const mesh of this.meshes) {
mesh.EnumerateTriangles (onTriangle);
}
}
EnumerateTriangleVertices (onTriangleVertices)
{
for (const mesh of this.meshes) {
mesh.EnumerateTriangleVertices (onTriangleVertices);
}
}
};