diff --git a/source/core/taskrunner.js b/source/core/taskrunner.js index 1d8fd7c..39242bc 100644 --- a/source/core/taskrunner.js +++ b/source/core/taskrunner.js @@ -68,7 +68,7 @@ OV.RunTasks = function (count, callbacks) taskRunner.Run (count, callbacks); }; -OV.RunTaskBatch = function (count, batchCount, callbacks) +OV.RunTasksBatch = function (count, batchCount, callbacks) { let taskRunner = new OV.TaskRunner (); taskRunner.RunBatch (count, batchCount, callbacks); diff --git a/source/model/node.js b/source/model/node.js index ad029a8..a9d6a7c 100644 --- a/source/model/node.js +++ b/source/model/node.js @@ -9,6 +9,11 @@ OV.Node = class this.meshIndices = []; } + IsEmpty () + { + return this.childNodes.length === 0 && this.meshIndices.length === 0; + } + GetName () { return this.name; @@ -57,6 +62,16 @@ OV.Node = class return this.meshIndices.length - 1; } + MeshIndexCount () + { + return this.meshIndices.length; + } + + GetMeshIndex (index) + { + return this.meshIndices[index]; + } + GetMeshIndices () { return this.meshIndices; diff --git a/source/threejs/threeconverter.js b/source/threejs/threeconverter.js index 1a23928..6575c04 100644 --- a/source/threejs/threeconverter.js +++ b/source/threejs/threeconverter.js @@ -247,6 +247,25 @@ OV.ConvertModelToThreeObject = function (model, params, output, callbacks) return threeMesh; } + function ConvertMeshList (threeObject, model, modelThreeMaterials, stateHandler) + { + OV.RunTasksBatch (model.MeshCount (), 100, { + runTask : (firstIndex, lastIndex, ready) => { + for (let meshIndex = firstIndex; meshIndex <= lastIndex; meshIndex++) { + let mesh = model.GetMesh (meshIndex); + if (mesh.TriangleCount () > 0) { + let threeMesh = CreateThreeMesh (model, meshIndex, modelThreeMaterials); + threeObject.add (threeMesh); + } + } + ready (); + }, + onReady : () => { + stateHandler.OnModelLoaded (threeObject); + } + }); + } + let stateHandler = new OV.ThreeConversionStateHandler (callbacks); let modelThreeMaterials = []; @@ -256,19 +275,5 @@ OV.ConvertModelToThreeObject = function (model, params, output, callbacks) } let threeObject = new THREE.Object3D (); - OV.RunTaskBatch (model.MeshCount (), 100, { - runTask : (firstIndex, lastIndex, ready) => { - for (let meshIndex = firstIndex; meshIndex <= lastIndex; meshIndex++) { - let mesh = model.GetMesh (meshIndex); - if (mesh.TriangleCount () > 0) { - let threeMesh = CreateThreeMesh (model, meshIndex, modelThreeMaterials); - threeObject.add (threeMesh); - } - } - ready (); - }, - onReady : () => { - stateHandler.OnModelLoaded (threeObject); - } - }); + ConvertMeshList (threeObject, model, modelThreeMaterials, stateHandler); }; diff --git a/test/tests/node_test.js b/test/tests/node_test.js index 2bb02a0..accefed 100644 --- a/test/tests/node_test.js +++ b/test/tests/node_test.js @@ -8,6 +8,18 @@ describe ('Node', function() { assert.deepStrictEqual (node.GetMeshIndices (), []); }); + it ('Is Empty', function () { + let node = new OV.Node (); + assert (node.IsEmpty ()); + node.AddMeshIndex (0); + assert (!node.IsEmpty ()); + + let node2 = new OV.Node (); + assert (node2.IsEmpty ()); + node2.AddChildNode (new OV.Node ()); + assert (!node2.IsEmpty ()); + }); + it ('Set Name', function () { let node = new OV.Node (); node.SetName ('New Name'); diff --git a/test/tests/taskrunner_test.js b/test/tests/taskrunner_test.js index 60c30ec..81e1b03 100644 --- a/test/tests/taskrunner_test.js +++ b/test/tests/taskrunner_test.js @@ -31,7 +31,7 @@ describe ('Task Runner', function () { it ('Run task batched', function (done) { var indices = []; - OV.RunTaskBatch (10, 3, { + OV.RunTasksBatch (10, 3, { runTask : function (firstIndex, lastIndex, ready) { indices.push ([firstIndex, lastIndex]); ready (); @@ -45,7 +45,7 @@ describe ('Task Runner', function () { it ('Run task batched zero times', function (done) { var indices = []; - OV.RunTaskBatch (0, 3, { + OV.RunTasksBatch (0, 3, { runTask : function (firstIndex, lastIndex, ready) { indices.push ([firstIndex, lastIndex]); ready ();