diff --git a/test/tests/exportermodel_test.js b/test/tests/exportermodel_test.js index 3e938af..092755f 100644 --- a/test/tests/exportermodel_test.js +++ b/test/tests/exportermodel_test.js @@ -29,6 +29,53 @@ function CreateTestModel () return model; } +function CreateHierarchicalTestModel () +{ + let model = new OV.Model (); + + let material1 = new OV.PhongMaterial (); + material1.name = 'Material 1'; + model.AddMaterial (material1); + + let material2 = new OV.PhongMaterial (); + material2.name = 'Material 1'; + model.AddMaterial (material2); + + let cubeParams1 = new OV.GeneratorParams ().SetMaterial (0); + let cube1 = OV.GenerateCuboid (cubeParams1, 1.0, 1.0, 1.0); + let cube1Mesh = model.AddMesh (cube1); + + let cubeParams2 = new OV.GeneratorParams ().SetMaterial (1); + let cube2 = OV.GenerateCuboid (cubeParams2, 1.0, 1.0, 1.0); + let cube2Mesh = model.AddMesh (cube2); + + let root = model.GetRootNode (); + let node1 = new OV.Node (); + node1.SetName ('Node 1'); + + let node11 = new OV.Node (); + node11.SetName ('Node 1.1'); + node11.AddMeshIndex (cube1Mesh); + node1.AddChildNode (node11); + + let node12 = new OV.Node (); + node12.SetName ('Node 1.2'); + node12.AddMeshIndex (cube2Mesh); + node12.SetTransformation (new OV.Transformation (new OV.Matrix ().CreateTranslation (2.0, 0.0, 0.0))); + node1.AddChildNode (node12); + + let node13 = new OV.Node (); + node13.SetName ('Node 1.2'); + node13.AddMeshIndex (cube2Mesh); + node13.SetTransformation (new OV.Transformation (new OV.Matrix ().CreateTranslation (4.0, 0.0, 0.0))); + node1.AddChildNode (node13); + + root.AddChildNode (node1); + + OV.FinalizeModel (model); + return model; +} + function GetExporterModelBoundingBox (exporterModel) { let calculator = new OV.BoundingBoxCalculator3D (); @@ -95,6 +142,48 @@ describe ('Exporter Model', function () { assert.ok (OV.CoordIsEqual3D (boundingBox.min, new OV.Coord3D (-1.0, 0.0, 0.0))); assert.ok (OV.CoordIsEqual3D (boundingBox.max, new OV.Coord3D (0.0, 1.0, 2.0))); }); + + it ('Hierarchical model test no filter', function () { + let model = CreateHierarchicalTestModel (); + let settings = new OV.ExporterSettings ({ + isMeshVisible : (meshInstanceId) => { + return true; + } + }); + let exporterModel = new OV.ExporterModel (model, settings); + assert.strictEqual (exporterModel.MeshInstanceCount (), 3); + let boundingBox = GetExporterModelBoundingBox (exporterModel); + assert.ok (OV.CoordIsEqual3D (boundingBox.min, new OV.Coord3D (0.0, 0.0, 0.0))); + assert.ok (OV.CoordIsEqual3D (boundingBox.max, new OV.Coord3D (5.0, 1.0, 1.0))); + }); + + it ('Hierarchical model test filter', function () { + let model = CreateHierarchicalTestModel (); + let settings = new OV.ExporterSettings ({ + isMeshVisible : (meshInstanceId) => { + return !meshInstanceId.IsEqual (new OV.MeshInstanceId (3, 1)); + } + }); + let exporterModel = new OV.ExporterModel (model, settings); + assert.strictEqual (exporterModel.MeshInstanceCount (), 2); + let boundingBox = GetExporterModelBoundingBox (exporterModel); + assert.ok (OV.CoordIsEqual3D (boundingBox.min, new OV.Coord3D (0.0, 0.0, 0.0))); + assert.ok (OV.CoordIsEqual3D (boundingBox.max, new OV.Coord3D (3.0, 1.0, 1.0))); + }); + + it ('Hierarchical model test filter 2', function () { + let model = CreateHierarchicalTestModel (); + let settings = new OV.ExporterSettings ({ + isMeshVisible : (meshInstanceId) => { + return !meshInstanceId.IsEqual (new OV.MeshInstanceId (3, 1)) && !meshInstanceId.IsEqual (new OV.MeshInstanceId (2, 1)); + } + }); + let exporterModel = new OV.ExporterModel (model, settings); + assert.strictEqual (exporterModel.MeshInstanceCount (), 1); + let boundingBox = GetExporterModelBoundingBox (exporterModel); + assert.ok (OV.CoordIsEqual3D (boundingBox.min, new OV.Coord3D (0.0, 0.0, 0.0))); + assert.ok (OV.CoordIsEqual3D (boundingBox.max, new OV.Coord3D (1.0, 1.0, 1.0))); + }); }); }