diff --git a/source/model/generator.js b/source/model/generator.js index a92279d..3d2a330 100644 --- a/source/model/generator.js +++ b/source/model/generator.js @@ -5,6 +5,24 @@ OV.GeneratorParams = class this.material = null; this.transformation = null; } + + SetMaterial (material) + { + this.material = material; + return this; + } + + SetTransformation (translation, rotation, scale) + { + const matrix = new OV.Matrix ().ComposeTRS (translation, rotation, scale); + return this.SetTransformationMatrix (matrix); + } + + SetTransformationMatrix (matrix) + { + this.transformation = new OV.Transformation (matrix); + return this; + } }; OV.Generator = class diff --git a/test/tests/generator_test.js b/test/tests/generator_test.js index b454572..3e11da9 100644 --- a/test/tests/generator_test.js +++ b/test/tests/generator_test.js @@ -1,9 +1,31 @@ var assert = require ('assert'); describe ('Generator', function () { - it ('Cuboid', function () { + it ('Cuboid with Default Parameters', function () { const cuboid = OV.GenerateCuboid (null, 1.0, 1.0, 1.0); assert (OV.IsSolid (cuboid)); assert (OV.IsEqual (OV.CalculateVolume (cuboid), 1.0)); }); + + it ('Cuboid with Material', function () { + const params = new OV.GeneratorParams ().SetMaterial (1); + const cuboid = OV.GenerateCuboid (params, 1.0, 1.0, 1.0); + for (let i = 0; i < cuboid.TriangleCount (); i++) { + const triangle = cuboid.GetTriangle (i); + assert.strictEqual (triangle.mat, 1); + } + }); + + it ('Cuboid with Transformation', function () { + const params = new OV.GeneratorParams ().SetTransformation ( + new OV.Coord3D (1.0, 0.0, 0.0), + new OV.Quaternion (0.0, 0.0, 0.0, 1.0), + new OV.Coord3D (1.0, 1.0, 1.0) + ); + const cuboid = OV.GenerateCuboid (params, 1.0, 1.0, 1.0); + const bounds = OV.GetBoundingBox (cuboid); + assert (OV.CoordIsEqual3D (bounds.min, new OV.Coord3D (1.0, 0.0, 0.0))); + assert (OV.CoordIsEqual3D (bounds.max, new OV.Coord3D (2.0, 1.0, 1.0))); + + }); }); diff --git a/test/tests/modelutils_test.js b/test/tests/modelutils_test.js index f911d9d..536d7ea 100644 --- a/test/tests/modelutils_test.js +++ b/test/tests/modelutils_test.js @@ -80,7 +80,7 @@ describe ('Model Utils', function () { }); it ('Mesh Bounding Box', function () { - var cube = testUtils.GetCubeMesh (); + var cube = OV.GenerateCuboid (null, 1.0, 1.0, 1.0); let cubeBounds = OV.GetBoundingBox (cube); assert (OV.CoordIsEqual3D (cubeBounds.min, new OV.Coord3D (0.0, 0.0, 0.0))); assert (OV.CoordIsEqual3D (cubeBounds.max, new OV.Coord3D (1.0, 1.0, 1.0))); @@ -132,7 +132,7 @@ describe ('Model Utils', function () { }); it ('Cube Topology Calculation', function () { - let cube = testUtils.GetModelWithOneMesh (testUtils.GetCubeMesh ()); + let cube = testUtils.GetModelWithOneMesh (OV.GenerateCuboid (null, 1.0, 1.0, 1.0)); assert (OV.IsSolid (cube)); let topology = OV.GetTopology (cube); diff --git a/test/tests/quantities_test.js b/test/tests/quantities_test.js index 07e5028..ebfa03c 100644 --- a/test/tests/quantities_test.js +++ b/test/tests/quantities_test.js @@ -3,7 +3,7 @@ var testUtils = require ('../utils/testutils.js'); describe ('Quantities', function () { it ('Cube Volume Calculation', function () { - const mesh = testUtils.GetCubeMesh (); + const mesh = OV.GenerateCuboid (null, 1.0, 1.0, 1.0); const model = testUtils.GetModelWithOneMesh (mesh); assert (OV.IsEqual (OV.CalculateVolume (mesh), 1.0)); assert (OV.IsEqual (OV.CalculateVolume (model), 1.0)); @@ -58,7 +58,7 @@ describe ('Quantities', function () { }); it ('Cube Surface Area Calculation', function () { - const mesh = testUtils.GetCubeMesh (); + const mesh = OV.GenerateCuboid (null, 1.0, 1.0, 1.0); const model = testUtils.GetModelWithOneMesh (mesh); assert (OV.IsEqual (OV.CalculateSurfaceArea (mesh), 6.0)); assert (OV.IsEqual (OV.CalculateSurfaceArea (model), 6.0)); diff --git a/test/utils/testutils.js b/test/utils/testutils.js index 606ba6f..7eac6f6 100644 --- a/test/utils/testutils.js +++ b/test/utils/testutils.js @@ -137,43 +137,15 @@ module.exports = return obj; }, - GetCubeMesh () - { - var cube = new OV.Mesh (); - cube.AddVertex (new OV.Coord3D (0.0, 0.0, 0.0)); - cube.AddVertex (new OV.Coord3D (1.0, 0.0, 0.0)); - cube.AddVertex (new OV.Coord3D (1.0, 1.0, 0.0)); - cube.AddVertex (new OV.Coord3D (0.0, 1.0, 0.0)); - cube.AddVertex (new OV.Coord3D (0.0, 0.0, 1.0)); - cube.AddVertex (new OV.Coord3D (1.0, 0.0, 1.0)); - cube.AddVertex (new OV.Coord3D (1.0, 1.0, 1.0)); - cube.AddVertex (new OV.Coord3D (0.0, 1.0, 1.0)); - cube.AddTriangle (new OV.Triangle (0, 1, 5)); - cube.AddTriangle (new OV.Triangle (0, 5, 4)); - cube.AddTriangle (new OV.Triangle (1, 2, 6)); - cube.AddTriangle (new OV.Triangle (1, 6, 5)); - cube.AddTriangle (new OV.Triangle (2, 3, 7)); - cube.AddTriangle (new OV.Triangle (2, 7, 6)); - cube.AddTriangle (new OV.Triangle (3, 0, 4)); - cube.AddTriangle (new OV.Triangle (3, 4, 7)); - cube.AddTriangle (new OV.Triangle (0, 3, 2)); - cube.AddTriangle (new OV.Triangle (0, 2, 1)); - cube.AddTriangle (new OV.Triangle (4, 5, 6)); - cube.AddTriangle (new OV.Triangle (4, 6, 7)); - return cube; - }, - GetTwoCubesConnectingInOneVertexModel () { let model = new OV.Model (); - let cube1 = this.GetCubeMesh (); + let cube1 = OV.GenerateCuboid (null, 1.0, 1.0, 1.0); model.AddMesh (cube1); - let cube2 = this.GetCubeMesh (); let matrix = new OV.Matrix ().CreateTranslation (1.0, 1.0, 1.0); - let transformation = new OV.Transformation (matrix); - OV.TransformMesh (cube2, transformation); + let cube2 = OV.GenerateCuboid (new OV.GeneratorParams ().SetTransformationMatrix (matrix), 1.0, 1.0, 1.0); model.AddMesh (cube2); OV.FinalizeModel (model, function () { new OV.Material () }); @@ -184,13 +156,11 @@ module.exports = { let model = new OV.Model (); - let cube1 = this.GetCubeMesh (); + let cube1 = OV.GenerateCuboid (null, 1.0, 1.0, 1.0); model.AddMesh (cube1); - let cube2 = this.GetCubeMesh (); let matrix = new OV.Matrix ().CreateTranslation (1.0, 0.0, 1.0); - let transformation = new OV.Transformation (matrix); - OV.TransformMesh (cube2, transformation); + let cube2 = OV.GenerateCuboid (new OV.GeneratorParams ().SetTransformationMatrix (matrix), 1.0, 1.0, 1.0); model.AddMesh (cube2); OV.FinalizeModel (model, function () { new OV.Material () }); @@ -202,13 +172,11 @@ module.exports = { let model = new OV.Model (); - let cube1 = this.GetCubeMesh (); + let cube1 = OV.GenerateCuboid (null, 1.0, 1.0, 1.0); model.AddMesh (cube1); - let cube2 = this.GetCubeMesh (); let matrix = new OV.Matrix ().CreateTranslation (1.0, 0.0, 0.0); - let transformation = new OV.Transformation (matrix); - OV.TransformMesh (cube2, transformation); + let cube2 = OV.GenerateCuboid (new OV.GeneratorParams ().SetTransformationMatrix (matrix), 1.0, 1.0, 1.0); model.AddMesh (cube2); OV.FinalizeModel (model, function () { new OV.Material () });