diff --git a/source/model/node.js b/source/model/node.js index 606dce2..200af5f 100644 --- a/source/model/node.js +++ b/source/model/node.js @@ -53,4 +53,14 @@ OV.Node = class childNode.EnumerateChildren (processor); } } + + EnumerateMeshIndices (processor) + { + for (const meshIndex of this.meshIndices) { + processor (meshIndex); + } + for (const childNode of this.childNodes) { + childNode.EnumerateMeshIndices (processor); + } + } }; diff --git a/test/tests/node_test.js b/test/tests/node_test.js index 32b9078..7b5a2e6 100644 --- a/test/tests/node_test.js +++ b/test/tests/node_test.js @@ -57,4 +57,32 @@ describe ('Node', function() { assert.deepStrictEqual (enumerated, [child1, child11, child12, child2]); }); + + it ('Recursive Mesh Index Enumeration', function () { + let node = new OV.Node (); + let child1 = new OV.Node (); + let child2 = new OV.Node (); + let child11 = new OV.Node (); + let child12 = new OV.Node (); + + node.AddChildNode (child1); + node.AddChildNode (child2); + node.AddMeshIndex (1); + node.AddMeshIndex (2); + + child1.AddChildNode (child11); + child1.AddChildNode (child12); + child1.AddMeshIndex (3); + child2.AddMeshIndex (4); + + child11.AddMeshIndex (5); + child12.AddMeshIndex (6); + + let enumerated = []; + node.EnumerateMeshIndices ((meshIndex) => { + enumerated.push (meshIndex); + }); + + assert.deepStrictEqual (enumerated, [1, 2, 3, 5, 6, 4]); + }); });