Remove empty nodes during model finalization.
This commit is contained in:
parent
ad132b2eed
commit
e6eff40543
@ -125,6 +125,18 @@ OV.FinalizeModel = function (model, getDefaultMaterial)
|
||||
}
|
||||
FinalizeMesh (mesh, getDefaultMaterialIndex);
|
||||
}
|
||||
|
||||
let rootNode = model.GetRootNode ();
|
||||
let emptyNodes = [];
|
||||
rootNode.EnumerateChildren ((node) => {
|
||||
if (node.IsEmpty ()) {
|
||||
emptyNodes.push (node);
|
||||
}
|
||||
});
|
||||
for (let node of emptyNodes) {
|
||||
let parentNode = node.GetParent ();
|
||||
parentNode.RemoveChildNode (node);
|
||||
}
|
||||
};
|
||||
|
||||
OV.CheckModel = function (model)
|
||||
|
||||
@ -90,6 +90,12 @@ OV.Node = class
|
||||
return this.childNodes.length - 1;
|
||||
}
|
||||
|
||||
RemoveChildNode (node)
|
||||
{
|
||||
let index = this.childNodes.indexOf (node);
|
||||
this.childNodes.splice (index, 1);
|
||||
}
|
||||
|
||||
GetChildNodes ()
|
||||
{
|
||||
return this.childNodes;
|
||||
|
||||
@ -182,6 +182,50 @@ describe ('Model Finalization', function () {
|
||||
assert.strictEqual (normal.y, -0.7071067811865475);
|
||||
assert.strictEqual (normal.z, 0.7071067811865475);
|
||||
});
|
||||
|
||||
it ('Remove Empty Meshes and Nodes', function () {
|
||||
let mesh = new OV.Mesh ();
|
||||
let emptyMesh = new OV.Mesh ();
|
||||
|
||||
let v0 = mesh.AddVertex (new OV.Coord3D (0.0, 0.0, 0.0));
|
||||
let v1 = mesh.AddVertex (new OV.Coord3D (1.0, 0.0, 0.0));
|
||||
let v2 = mesh.AddVertex (new OV.Coord3D (1.0, 1.0, 0.0));
|
||||
mesh.AddTriangle (new OV.Triangle (v0, v1, v2));
|
||||
|
||||
let model = new OV.Model ()
|
||||
let meshIndex = model.AddMesh (mesh);
|
||||
let emptyMeshIndex = model.AddMesh (emptyMesh);
|
||||
|
||||
let rootNode = model.GetRootNode ();
|
||||
|
||||
let node1 = new OV.Node ();
|
||||
rootNode.AddChildNode (node1);
|
||||
node1.AddMeshIndex (meshIndex);
|
||||
node1.AddMeshIndex (emptyMeshIndex);
|
||||
|
||||
let node2 = new OV.Node ();
|
||||
rootNode.AddChildNode (node2);
|
||||
|
||||
let node3 = new OV.Node ();
|
||||
rootNode.AddChildNode (node3);
|
||||
node3.AddMeshIndex (meshIndex);
|
||||
node3.AddMeshIndex (emptyMeshIndex);
|
||||
|
||||
OV.FinalizeModel (model, function () { return new OV.Material (OV.MaterialType.Phong) });
|
||||
assert.strictEqual (model.MeshCount (), 1);
|
||||
|
||||
let meshInstances = [];
|
||||
model.EnumerateMeshInstances ((meshInstance) => {
|
||||
meshInstances.push (meshInstance);
|
||||
});
|
||||
assert.strictEqual (meshInstances.length, 2);
|
||||
|
||||
let nodeCount = 0;
|
||||
rootNode.Enumerate ((node) => {
|
||||
nodeCount += 1;
|
||||
});
|
||||
assert.strictEqual (nodeCount, 3);
|
||||
});
|
||||
});
|
||||
|
||||
describe ('Color Conversion', function () {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user