Store instance id in mesh instances.

This commit is contained in:
kovacsv 2021-12-25 10:49:59 +01:00
parent 1df376745f
commit 233cc2c2d7
5 changed files with 24 additions and 5 deletions

View File

@ -19,13 +19,19 @@ OV.MeshInstanceId = class
OV.MeshInstance = class extends OV.ModelObject3D
{
constructor (node, mesh)
constructor (id, node, mesh)
{
super ();
this.id = id;
this.node = node;
this.mesh = mesh;
}
GetId ()
{
return this.id;
}
VertexCount ()
{
return this.mesh.VertexCount ();

View File

@ -128,7 +128,8 @@ OV.Model = class extends OV.ModelObject3D
return null;
}
let foundMesh = this.GetMesh (instanceId.meshIndex);
return new OV.MeshInstance (foundNode, foundMesh);
let id = new OV.MeshInstanceId (foundNode.GetId (), instanceId.meshIndex);
return new OV.MeshInstance (id, foundNode, foundMesh);
}
EnumerateMeshes (onMesh)
@ -142,8 +143,9 @@ OV.Model = class extends OV.ModelObject3D
{
this.root.Enumerate ((node) => {
for (let meshIndex of node.GetMeshIndices ()) {
let id = new OV.MeshInstanceId (node.GetId (), meshIndex);
let mesh = this.GetMesh (meshIndex);
let meshInstance = new OV.MeshInstance (node, mesh);
let meshInstance = new OV.MeshInstance (id, node, mesh);
onMeshInstance (meshInstance);
}
});

View File

@ -403,4 +403,15 @@ describe ('Node Hierarchy', function () {
assert.strictEqual (model.TextureUVCount (), 0);
assert.strictEqual (model.TriangleCount (), 12 * 3);
});
it ('Instance enumeration', function () {
let model = testUtils.GetTranslatedRotatedCubesModel ();
let meshInstances = [];
model.EnumerateMeshInstances ((meshInstance) => {
meshInstances.push (meshInstance);
});
assert (meshInstances[0].GetId ().IsEqual (new OV.MeshInstanceId (0, 0)));
assert (meshInstances[1].GetId ().IsEqual (new OV.MeshInstanceId (1, 0)));
assert (meshInstances[2].GetId ().IsEqual (new OV.MeshInstanceId (3, 0)));
});
});

View File

@ -14,7 +14,7 @@ describe ('Model Utils', function () {
let transformation = new OV.Transformation (new OV.Matrix ().CreateTranslation (2.0, 0.0, 0.0));
let node = new OV.Node ();
node.SetTransformation (transformation);
let cubeInstance = new OV.MeshInstance (node, cube);
let cubeInstance = new OV.MeshInstance (null, node, cube);
let cubeInstanceBounds = OV.GetBoundingBox (cubeInstance);
assert (OV.CoordIsEqual3D (cubeInstanceBounds.min, new OV.Coord3D (2.0, 0.0, 0.0)));
assert (OV.CoordIsEqual3D (cubeInstanceBounds.max, new OV.Coord3D (3.0, 1.0, 1.0)));

View File

@ -105,7 +105,7 @@ describe ('Quantities', function () {
const transformation = new OV.Transformation (new OV.Matrix ().CreateScale (2.0, 2.0, 2.0));
let node = new OV.Node ();
node.SetTransformation (transformation);
const meshInstance = new OV.MeshInstance (node, mesh);
const meshInstance = new OV.MeshInstance (null, node, mesh);
assert (OV.IsSolid (meshInstance));
assert (OV.IsEqual (OV.CalculateVolume (meshInstance), 8.0));
assert (OV.IsEqual (OV.CalculateSurfaceArea (meshInstance), 24.0));