From 2815c27a328396f7800a5e7326dc7305e7a876f8 Mon Sep 17 00:00:00 2001 From: Viktor Kovacs Date: Sun, 23 May 2021 18:05:53 +0200 Subject: [PATCH] Add cuboid generator. --- sandbox/embed_selfhost_fullscreen.html | 1 + sandbox/embed_selfhost_multiple.html | 1 + sandbox/embed_selfhost_single.html | 1 + sandbox/embed_selfhost_single_scroll.html | 1 + source/model/generator.js | 74 +++++++++++++++++++++++ test/tests/generator_test.js | 9 +++ tools/config.json | 1 + website/embed.html | 1 + website/index.html | 1 + 9 files changed, 90 insertions(+) create mode 100644 source/model/generator.js create mode 100644 test/tests/generator_test.js diff --git a/sandbox/embed_selfhost_fullscreen.html b/sandbox/embed_selfhost_fullscreen.html index 79ce964..d320f04 100644 --- a/sandbox/embed_selfhost_fullscreen.html +++ b/sandbox/embed_selfhost_fullscreen.html @@ -34,6 +34,7 @@ + diff --git a/sandbox/embed_selfhost_multiple.html b/sandbox/embed_selfhost_multiple.html index 7bb646e..503bdcc 100644 --- a/sandbox/embed_selfhost_multiple.html +++ b/sandbox/embed_selfhost_multiple.html @@ -35,6 +35,7 @@ + diff --git a/sandbox/embed_selfhost_single.html b/sandbox/embed_selfhost_single.html index f6a0b73..516c86e 100644 --- a/sandbox/embed_selfhost_single.html +++ b/sandbox/embed_selfhost_single.html @@ -34,6 +34,7 @@ + diff --git a/sandbox/embed_selfhost_single_scroll.html b/sandbox/embed_selfhost_single_scroll.html index 3616919..98bdb2c 100644 --- a/sandbox/embed_selfhost_single_scroll.html +++ b/sandbox/embed_selfhost_single_scroll.html @@ -34,6 +34,7 @@ + diff --git a/source/model/generator.js b/source/model/generator.js new file mode 100644 index 0000000..a92279d --- /dev/null +++ b/source/model/generator.js @@ -0,0 +1,74 @@ +OV.GeneratorParams = class +{ + constructor () + { + this.material = null; + this.transformation = null; + } +}; + +OV.Generator = class +{ + constructor (params) + { + this.params = params || new OV.GeneratorParams (); + this.mesh = new OV.Mesh (); + } + + GetMesh () + { + return this.mesh; + } + + AddVertex (x, y, z) + { + let coord = new OV.Coord3D (x, y, z); + if (this.params.transformation !== null) { + coord = this.params.transformation.TransformCoord3D (coord); + } + return this.mesh.AddVertex (coord); + } + + AddTriangle (v0, v1, v2) + { + let triangle = new OV.Triangle (v0, v1, v2); + if (this.params.material !== null) { + triangle.SetMaterial (this.params.material); + } + return this.mesh.AddTriangle (triangle); + } + + AddConvexPolygon (vertices) + { + for (let vertexIndex = 0; vertexIndex < vertices.length - 2; vertexIndex++) { + this.AddTriangle ( + vertices[0], + vertices[vertexIndex + 1], + vertices[vertexIndex + 2] + ); + } + } +}; + +OV.GenerateCuboid = function (genParams, xSize, ySize, zSize) +{ + let generator = new OV.Generator (genParams); + + generator.AddVertex (0.0, 0.0, 0.0); + generator.AddVertex (xSize, 0.0, 0.0); + generator.AddVertex (xSize, ySize, 0.0); + generator.AddVertex (0.0, ySize, 0.0); + generator.AddVertex (0.0, 0.0, zSize); + generator.AddVertex (xSize, 0.0, zSize); + generator.AddVertex (xSize, ySize, zSize); + generator.AddVertex (0.0, ySize, zSize); + + generator.AddConvexPolygon ([0, 3, 2, 1]); + generator.AddConvexPolygon ([0, 1, 5, 4]); + generator.AddConvexPolygon ([1, 2, 6, 5]); + generator.AddConvexPolygon ([2, 3, 7, 6]); + generator.AddConvexPolygon ([3, 0, 4, 7]); + generator.AddConvexPolygon ([4, 5, 6, 7]); + + return generator.GetMesh (); +}; diff --git a/test/tests/generator_test.js b/test/tests/generator_test.js new file mode 100644 index 0000000..b454572 --- /dev/null +++ b/test/tests/generator_test.js @@ -0,0 +1,9 @@ +var assert = require ('assert'); + +describe ('Generator', function () { + it ('Cuboid', function () { + const cuboid = OV.GenerateCuboid (null, 1.0, 1.0, 1.0); + assert (OV.IsSolid (cuboid)); + assert (OV.IsEqual (OV.CalculateVolume (cuboid), 1.0)); + }); +}); diff --git a/tools/config.json b/tools/config.json index d8db6e1..ae2ed76 100644 --- a/tools/config.json +++ b/tools/config.json @@ -30,6 +30,7 @@ "source/model/modelutils.js", "source/model/modelfinalization.js", "source/model/quantities.js", + "source/model/generator.js", "source/import/importerutils.js", "source/import/importerbase.js", "source/import/importerobj.js", diff --git a/website/embed.html b/website/embed.html index f0f950a..f2277e2 100644 --- a/website/embed.html +++ b/website/embed.html @@ -43,6 +43,7 @@ + diff --git a/website/index.html b/website/index.html index 70b1935..29cc5dc 100644 --- a/website/index.html +++ b/website/index.html @@ -43,6 +43,7 @@ +