From 5eca9dade5b9bb1d115d377582a4f532bdb619a2 Mon Sep 17 00:00:00 2001 From: kovacsv Date: Sun, 26 Dec 2021 00:59:57 +0100 Subject: [PATCH] Add model filter to exporter model. --- source/export/exportermodel.js | 46 +++++++++++++++++++++++++--------- test/tests/exporter_test.js | 32 +++++++++++++++++++++++ 2 files changed, 66 insertions(+), 12 deletions(-) diff --git a/source/export/exportermodel.js b/source/export/exportermodel.js index 3bab81c..df12641 100644 --- a/source/export/exportermodel.js +++ b/source/export/exportermodel.js @@ -1,8 +1,18 @@ OV.ExporterModel = class { - constructor (model) + constructor (model, parameters) { this.model = model; + this.parameters = { + isMeshVisible : (meshInstanceId) => { + return true; + } + }; + if (OV.IsDefined (parameters)) { + if (OV.IsDefined (parameters.isMeshVisible)) { + this.parameters.isMeshVisible = parameters.isMeshVisible; + } + } } MaterialCount () @@ -10,24 +20,36 @@ OV.ExporterModel = class return this.model.MaterialCount (); } - VertexCount () - { - return this.model.VertexCount (); - } - - TriangleCount () - { - return this.model.TriangleCount (); - } - GetMaterial (index) { return this.model.GetMaterial (index); } + VertexCount () + { + let vertexCount = 0; + this.EnumerateMeshInstances ((meshInstance) => { + vertexCount += meshInstance.VertexCount (); + }); + return vertexCount; + } + + TriangleCount () + { + let triangleCount = 0; + this.EnumerateMeshInstances ((meshInstance) => { + triangleCount += meshInstance.TriangleCount (); + }); + return triangleCount; + } + EnumerateMeshInstances (onMeshInstance) { - this.model.EnumerateMeshInstances (onMeshInstance); + this.model.EnumerateMeshInstances ((meshInstance) => { + if (this.parameters.isMeshVisible (meshInstance.GetId ())) { + onMeshInstance (meshInstance); + } + }); } EnumerateTransformedMeshes (onMesh) diff --git a/test/tests/exporter_test.js b/test/tests/exporter_test.js index 692bedb..08071db 100644 --- a/test/tests/exporter_test.js +++ b/test/tests/exporter_test.js @@ -72,6 +72,38 @@ function Export (model, format, extension, onReady) }); } +describe ('Exporter Model', function () { + it ('No filter test', function (done) { + let model = CreateTestModel (); + let exporterModel = new OV.ExporterModel (model); + let meshInstances = []; + exporterModel.EnumerateMeshInstances ((meshInstance) => { + meshInstances.push (meshInstance); + }); + assert.strictEqual (meshInstances.length, 2); + assert.strictEqual (exporterModel.VertexCount (), 8); + assert.strictEqual (exporterModel.TriangleCount (), 4); + done (); + }); + + it ('Model filter test', function (done) { + let model = CreateTestModel (); + let exporterModel = new OV.ExporterModel (model, { + isMeshVisible : (meshInstanceId) => { + return meshInstanceId.IsEqual (new OV.MeshInstanceId (0, 1)); + } + }); + let meshInstances = []; + exporterModel.EnumerateMeshInstances ((meshInstance) => { + meshInstances.push (meshInstance); + }); + assert.strictEqual (meshInstances.length, 1); + assert.strictEqual (exporterModel.VertexCount (), 5); + assert.strictEqual (exporterModel.TriangleCount (), 3); + done (); + }); +}); + describe ('Exporter', function () { it ('Exporter Error', function (done) { let model = CreateTestModel ();