Add model filter to exporter model.

This commit is contained in:
kovacsv 2021-12-26 00:59:57 +01:00
parent fe8012e657
commit 5eca9dade5
2 changed files with 66 additions and 12 deletions

View File

@ -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)

View File

@ -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 ();