From abf16084a70795ed0f07f0e500f200a2f289a0ce Mon Sep 17 00:00:00 2001 From: struct78 Date: Wed, 18 Jul 2018 08:35:14 +1000 Subject: [PATCH 1/4] Added examples --- .../test-render.json => box/airlock.json} | 57 ++++++++---- examples/cone/lantern.json | 92 +++++++++++++++++++ 2 files changed, 130 insertions(+), 19 deletions(-) rename examples/{cone/test-render.json => box/airlock.json} (56%) create mode 100644 examples/cone/lantern.json diff --git a/examples/cone/test-render.json b/examples/box/airlock.json similarity index 56% rename from examples/cone/test-render.json rename to examples/box/airlock.json index 51f3671..4cc53c7 100644 --- a/examples/cone/test-render.json +++ b/examples/box/airlock.json @@ -1,12 +1,12 @@ { "directionalLights": { - "dirLightFrontOn": true, - "dirLightBehindOn": true, - "dirLightRadius": 30, - "dirLightTopOn": true, - "dirLightBottomOn": true, - "dirLightRightOn": true, - "dirLightLeftOn": true + "dirLightFrontOn": false, + "dirLightBehindOn": false, + "dirLightRadius": 5000, + "dirLightTopOn": false, + "dirLightBottomOn": false, + "dirLightRightOn": false, + "dirLightLeftOn": false }, "shader": { "name": "Phong", @@ -21,13 +21,12 @@ "alpha": 100, "hue": 60 }, - "name": "Cone", + "name": "Box", "isCustom": false, "parameters": [ - 75, - 150, - 25, - 1 + 200, + 200, + 200 ] }, "lightColour": { @@ -37,7 +36,7 @@ "lightsColorB": 230 }, "rendering": { - "preview": true, + "preview": false, "continuous": false, "gui": false, "sunflow": true, @@ -47,14 +46,34 @@ "theme": "Classic", "camera": { "changeSpeedX": 1.5, - "rotationX": 90, + "rotationX": -45.43796920776367, "changeSpeedY": 1.5, - "rotationY": 0, - "rotationZ": 0, + "rotationY": 90.0409164428711, + "rotationZ": 45.04085159301758, "zoom": 1, "autoRotate": false }, - "modifiers": [], + "modifiers": [ + { + "name": "Chamfer Corners", + "index": 0, + "parameters": [36.63999938964844] + }, + { + "name": "Basic Extrude", + "index": 1, + "parameters": [83.33499908447266] + }, + { + "name": "Lattice", + "index": 2, + "parameters": [ + 23.07699966430664, + 26.57349967956543, + 0 + ] + } + ], "sphereLights": { "sphereLightLeftOn": false, "sphereLightRightOn": false, @@ -62,11 +81,11 @@ "sphereLightBehindOn": false, "sphereLightTopOn": false, "sphereLightBottomOn": false, - "sphereLightRadius": 10 + "sphereLightRadius": 5000 }, "scene": { "sunflowWhiteBackgroundOn": false, "sunflowBlackBackgroundOn": false, "sunflowSkyLightOn": true } -} +} \ No newline at end of file diff --git a/examples/cone/lantern.json b/examples/cone/lantern.json new file mode 100644 index 0000000..66e19db --- /dev/null +++ b/examples/cone/lantern.json @@ -0,0 +1,92 @@ +{ + "directionalLights": { + "dirLightFrontOn": true, + "dirLightBehindOn": true, + "dirLightRadius": 6039.4990234375, + "dirLightTopOn": true, + "dirLightBottomOn": true, + "dirLightRightOn": true, + "dirLightLeftOn": true + }, + "shader": { + "name": "Phong", + "parameters": [134] + }, + "shape": { + "edgesOn": false, + "facesOn": true, + "colour": { + "saturation": 100, + "brightness": 100, + "alpha": 100, + "hue": 13.176469802856445 + }, + "name": "Cone", + "isCustom": false, + "parameters": [ + 105.78999328613281, + 150, + 465.07000732421875, + 4.105000019073486 + ] + }, + "lightColour": { + "lightsColorG": 230, + "lightsColorA": 255, + "lightsColorR": 230, + "lightsColorB": 230 + }, + "rendering": { + "preview": false, + "continuous": false, + "gui": false, + "sunflow": false, + "opengl": true, + "mask": false + }, + "theme": "Cote d'Azur", + "camera": { + "changeSpeedX": 1.5, + "rotationX": 469.9064636230469, + "changeSpeedY": 1.5, + "rotationY": -13.728243827819824, + "rotationZ": -1.0958313941955566E-4, + "zoom": 0.9812499284744263, + "autoRotate": false + }, + "modifiers": [ + { + "name": "Sliced (Open)", + "index": 0, + "parameters": [ + 40.599998474121094, + 50, + 0 + ] + }, + { + "name": "Basic Extrude", + "index": 1, + "parameters": [148.20498657226562] + }, + { + "name": "Bend", + "index": 2, + "parameters": [45.875] + } + ], + "sphereLights": { + "sphereLightLeftOn": false, + "sphereLightRightOn": false, + "sphereLightFrontOn": false, + "sphereLightBehindOn": false, + "sphereLightTopOn": false, + "sphereLightBottomOn": false, + "sphereLightRadius": 5000 + }, + "scene": { + "sunflowWhiteBackgroundOn": false, + "sunflowBlackBackgroundOn": true, + "sunflowSkyLightOn": false + } +} \ No newline at end of file From ea6380eba7d6a94ed82c1737d157b548536a4e8d Mon Sep 17 00:00:00 2001 From: struct78 Date: Tue, 31 Jul 2018 08:22:14 +1000 Subject: [PATCH 2/4] Fixed bug with default values --- BaseModel.pde | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/BaseModel.pde b/BaseModel.pde index 7d2599b..79f0936 100644 --- a/BaseModel.pde +++ b/BaseModel.pde @@ -9,12 +9,19 @@ class BaseModel { BaseModel (String name, int parameters) { this.name = name; - this.minValues = new float[] { Config.Hemesh.Values.Min, Config.Hemesh.Values.Min, Config.Hemesh.Values.Min, Config.Hemesh.Values.Min }; - this.maxValues = new float[] { Config.Hemesh.Values.Max, Config.Hemesh.Values.Max, Config.Hemesh.Values.Max, Config.Hemesh.Values.Max }; - this.defaultValues = new float[] { Config.Hemesh.Values.Default, 5, 5, 5 }; - this.values = this.defaultValues; - this.labels = new String[] { null, null, null, null }; this.parameters = parameters; + this.minValues = new float[parameters]; + this.maxValues = new float[parameters]; + this.defaultValues = new float[parameters]; + this.labels = new String[parameters]; + + for ( int x = 0 ; x < parameters; x++ ) { + this.minValues[x] = Config.Hemesh.Values.Min; + this.maxValues[x] = Config.Hemesh.Values.Max; + this.defaultValues[x] = Config.Hemesh.Values.Default; + } + + this.values = this.defaultValues; } float[] getMaxValues() { From 7fee4a5599c0aa73e60815aa5bb4325d34a5805c Mon Sep 17 00:00:00 2001 From: struct78 Date: Tue, 31 Jul 2018 08:22:43 +1000 Subject: [PATCH 3/4] Added examples --- examples/dodecahedron/cookie-cutter.json | 96 ++++++++++++++++++++++++ examples/sweep-tube/spiky-tube.json | 93 +++++++++++++++++++++++ 2 files changed, 189 insertions(+) create mode 100644 examples/dodecahedron/cookie-cutter.json create mode 100644 examples/sweep-tube/spiky-tube.json diff --git a/examples/dodecahedron/cookie-cutter.json b/examples/dodecahedron/cookie-cutter.json new file mode 100644 index 0000000..13974bb --- /dev/null +++ b/examples/dodecahedron/cookie-cutter.json @@ -0,0 +1,96 @@ +{ + "directionalLights": { + "dirLightFrontOn": false, + "dirLightBehindOn": false, + "dirLightRadius": 5000, + "dirLightTopOn": false, + "dirLightBottomOn": false, + "dirLightRightOn": false, + "dirLightLeftOn": false + }, + "shader": { + "name": "Phong", + "parameters": [10] + }, + "shape": { + "edgesOn": false, + "facesOn": true, + "colour": { + "saturation": 60.126583099365234, + "brightness": 61.960784912109375, + "alpha": 100, + "hue": 109.89473724365234 + }, + "name": "Dodecahedron", + "isCustom": false, + "parameters": [ + 100, + 5, + 5, + 5 + ] + }, + "lightColour": { + "lightsColorG": 230, + "lightsColorA": 255, + "lightsColorR": 230, + "lightsColorB": 230 + }, + "rendering": { + "preview": false, + "continuous": false, + "gui": false, + "sunflow": true, + "opengl": false, + "mask": false + }, + "theme": "Summer Fruit", + "camera": { + "changeSpeedX": 1.5, + "rotationX": -0.8745409846305847, + "changeSpeedY": 1.5, + "rotationY": 181.71392822265625, + "rotationZ": 30.639541625976562, + "zoom": 1, + "autoRotate": false + }, + "modifiers": [ + { + "name": "Basic Extrude", + "index": 0, + "parameters": [98.30499267578125] + }, + { + "name": "Sliced (Capped)", + "index": 1, + "parameters": [ + 1, + 1, + 0 + ] + }, + { + "name": "Lattice", + "index": 2, + "parameters": [ + 45.55449676513672, + 7.5, + 0 + ] + } + ], + "sphereLights": { + "sphereLightLeftOn": false, + "sphereLightRightOn": false, + "sphereLightFrontOn": false, + "sphereLightBehindOn": false, + "sphereLightTopOn": false, + "sphereLightBottomOn": false, + "sphereLightRadius": 5000 + }, + "scene": { + "sunflowWhiteBackgroundOn": false, + "sunflowBlackBackgroundOn": false, + "sunflowSkyLightOn": true + } +} \ No newline at end of file diff --git a/examples/sweep-tube/spiky-tube.json b/examples/sweep-tube/spiky-tube.json new file mode 100644 index 0000000..1887149 --- /dev/null +++ b/examples/sweep-tube/spiky-tube.json @@ -0,0 +1,93 @@ +{ + "directionalLights": { + "dirLightFrontOn": false, + "dirLightBehindOn": false, + "dirLightRadius": 5000, + "dirLightTopOn": false, + "dirLightBottomOn": false, + "dirLightRightOn": false, + "dirLightLeftOn": false + }, + "shader": { + "name": "Phong", + "parameters": [10] + }, + "shape": { + "edgesOn": false, + "facesOn": true, + "colour": { + "saturation": 80, + "brightness": 80, + "alpha": 100, + "hue": 165 + }, + "name": "Sweep Tube", + "isCustom": false, + "parameters": [ + 60, + 2000, + 80, + 3, + 45 + ] + }, + "lightColour": { + "lightsColorG": 230, + "lightsColorA": 255, + "lightsColorR": 230, + "lightsColorB": 230 + }, + "rendering": { + "preview": false, + "continuous": false, + "gui": false, + "sunflow": false, + "opengl": true, + "mask": false + }, + "theme": "Duotone", + "camera": { + "changeSpeedX": 1.5, + "rotationX": 1.7, + "changeSpeedY": 1.5, + "rotationY": -0.05, + "rotationZ": -90, + "zoom": 1.75, + "autoRotate": false + }, + "modifiers": [ + { + "name": "Planar", + "index": 0, + "parameters": [2] + }, + { + "name": "Hard Edge Extrude", + "index": 1, + "parameters": [ + 1.005, + 1, + 100 + ] + }, + { + "name": "Twist (Z)", + "index": 2, + "parameters": [0.25] + } + ], + "sphereLights": { + "sphereLightLeftOn": false, + "sphereLightRightOn": false, + "sphereLightFrontOn": false, + "sphereLightBehindOn": false, + "sphereLightTopOn": false, + "sphereLightBottomOn": false, + "sphereLightRadius": 5000 + }, + "scene": { + "sunflowWhiteBackgroundOn": false, + "sunflowBlackBackgroundOn": false, + "sunflowSkyLightOn": true + } +} From 92612a8317a5bd2f5ac1dbea6cb1e0e6426ae535 Mon Sep 17 00:00:00 2001 From: struct78 Date: Tue, 31 Jul 2018 08:23:02 +1000 Subject: [PATCH 4/4] Added twist option to Torus, fixed slice modifier --- Hemesh.pde | 68 ++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 46 insertions(+), 22 deletions(-) diff --git a/Hemesh.pde b/Hemesh.pde index 27dae07..0863b96 100644 --- a/Hemesh.pde +++ b/Hemesh.pde @@ -157,9 +157,10 @@ void createShapes() { ); shapes.add( - new Shape("Torus", 4) - .setDefaultValues(new float[] { 50, 100, 20, 20 }) - .setLabels(new String[] { "Ex. Radius", "Int. Radius", "Tube Facets", "Torus Facets" }) + new Shape("Torus", 5) + .setDefaultValues(new float[] { 50, 100, 20, 20, 0 }) + .setMaxValues(new float[] { 500, 300, 200, 200, 200 }) + .setLabels(new String[] { "Ex. Radius", "Int. Radius", "Tube Facets", "Torus Facets", "Twist" }) .setCreator(new ShapeCreator() { public synchronized void create(float[] values, File file) {} public synchronized void create(float[] values) { @@ -168,6 +169,7 @@ void createShapes() { .setRadius(values[0], values[1]) .setTubeFacets(int(values[2])) .setTorusFacets(int(values[3])) + .setTwist(int(values[4])) ); } }) @@ -648,31 +650,42 @@ void createModifiers() { ); modifiers.add( - new Modifier("Sliced (Capped)", 3) - .setDefaultValues(new float[] { 50, 50, 0 }) - .setMaxValues(new float[] { 100, 100, 10 }) - .setMinValues(new float[] { 1, 1, -10 }) - .setLabels(new String[] { "-ve Z", "+ve Z", "Vec X" }) + new Modifier("Sliced (Capped)", 6) + .setDefaultValues(new float[] { 10, 10, 0, 0, 0, 0 }) + .setMaxValues(new float[] { 100, 100, 100, 100, 100, 100 }) + .setMinValues(new float[] { 0, 0, 0, 0, 0, 0 }) + .setLabels(new String[] { "-ve X", "+ve X", "-ve Y", "+ve Y", "-ve Z", "+ve Z" }) .setCreator(new ModifierCreator() { public synchronized void create(float[] values) { + PVector point = new PVector(-values[0], -values[2], -values[4]); + PVector vector = new PVector(-values[0], -values[2], -values[4]); + PVector centre = new PVector(0, 0, 0); + vector.sub(centre); + vector.normalize(); + meshBuffer.modify( new HEM_Slice() .setCap(true) .setPlane( new WB_Plane( - new WB_Point(0, 0, -values[0]), - new WB_Vector(values[2], 0, 1) + new WB_Point(point.x+100, point.y+100, point.z+100), + new WB_Vector(vector.x, vector.y, vector.z) ) ) ); + point = new PVector(values[1], values[3], values[5]); + vector = new PVector(values[1], values[3], values[5]); + vector.sub(centre); + vector.normalize(); + meshBuffer.modify( new HEM_Slice() .setCap(true) .setPlane( new WB_Plane( - new WB_Point(0, 0, values[1]), - new WB_Vector(values[2], 0, -1) + new WB_Point(point.x-100, point.y-100, point.z-100), + new WB_Vector(vector.x, vector.y, vector.z) ) ) ); @@ -681,31 +694,42 @@ void createModifiers() { ); modifiers.add( - new Modifier("Sliced (Open)", 3) - .setDefaultValues(new float[] { 50, 50, 0 }) - .setMaxValues(new float[] { 100, 100, 10 }) - .setMinValues(new float[] { 1, 1, -10 }) - .setLabels(new String[] { "-ve Z", "+ve Z", "Vec X" }) + new Modifier("Sliced (Open)", 6) + .setDefaultValues(new float[] { 10, 10, 0, 0, 0, 0 }) + .setMaxValues(new float[] { 100, 100, 100, 100, 100, 100 }) + .setMinValues(new float[] { 0, 0, 0, 0, 0, 0 }) + .setLabels(new String[] { "-ve X", "+ve X", "-ve Y", "+ve Y", "-ve Z", "+ve Z" }) .setCreator(new ModifierCreator() { public synchronized void create(float[] values) { + PVector point = new PVector(-values[0], -values[2], -values[4]); + PVector vector = new PVector(-values[0], -values[2], -values[4]); + PVector centre = new PVector(0, 0, 0); + vector.sub(centre); + vector.normalize(); + meshBuffer.modify( new HEM_Slice() .setCap(false) .setPlane( new WB_Plane( - new WB_Point(0, 0, -values[0]), - new WB_Vector(values[2], 0, 1) + new WB_Point(point.x+100, point.y+100, point.z+100), + new WB_Vector(vector.x, vector.y, vector.z) ) ) ); + point = new PVector(values[1], values[3], values[5]); + vector = new PVector(values[1], values[3], values[5]); + vector.sub(centre); + vector.normalize(); + meshBuffer.modify( new HEM_Slice() .setCap(false) .setPlane( new WB_Plane( - new WB_Point(0, 0, values[1]), - new WB_Vector(values[2], 0, -1) + new WB_Point(point.x-100, point.y-100, point.z-100), + new WB_Vector(vector.x, vector.y, vector.z) ) ) ); @@ -734,7 +758,7 @@ void createModifiers() { modifiers.add( new Modifier("Kaleidoscope", 1) .setDefaultValues(new float[] { 5, 0, 0 }) - .setMaxValues(new float[] { 10, 1, 1 }) + .setMaxValues(new float[] { 50, 1, 1 }) .setMinValues(new float[] { 1, 0, 0 }) .setLabels(new String[] { "Symmetry", "Angle", "Angle" }) .setCreator(new ModifierCreator() {