From cb37a129d1adb403019c96e798e86e2da9667f15 Mon Sep 17 00:00:00 2001 From: Normand Briere <nbriere@noware.ca> Date: Sun, 17 Nov 2019 17:56:04 -0500 Subject: [PATCH] Maze --- GroupEditor.java | 134 ++++++++++++++++++++++++++++++++++++++------ 1 files changed, 115 insertions(+), 19 deletions(-) diff --git a/GroupEditor.java b/GroupEditor.java index d6b309a..f47872a 100644 --- a/GroupEditor.java +++ b/GroupEditor.java @@ -2052,6 +2052,8 @@ } menu.add("-"); + mazeItem = menu.add(new MenuItem("Maze")); + mazeItem.addActionListener(this); parseverticesItem = menu.add(new MenuItem("Multiplicity")); parseverticesItem.addActionListener(this); textureFieldItem = menu.add(new MenuItem("Texture Field")); @@ -2247,6 +2249,111 @@ elem.openEditWindow(this, newWindow); //, false); System.out.println("edit : " + elem); elem.editWindow.refreshContents(true); // ? new + } + + private void GenerateMaze() + { + if (group.selection.size() == 4) + { + final double scaleX = SelectionSizeX(); + final double scaleZ = SelectionSizeZ(); + + final cGroup mazeGroup = new cGroup("Maze"); + + final int dim = 15; + + Maze maze = new Maze(dim, dim); + + maze.display(); // console + + maze.Display(new Maze.Parse() + { + public void Tile(int i, int j, boolean north, boolean east, boolean south, boolean west) + { + if ((i == 0 || i == dim-1) && j == dim/2) + { + return; + } + + int v = 0; + if (north) + { + cGroup n = new cGroup("" + i + "," + j); + n.Translate(-j * scaleX, 0, i * scaleZ); + n.add(group.selection.get(0)); + mazeGroup.add(n); + } + if (east) + { + cGroup n = new cGroup("" + i + "," + j); + n.Translate(-j * scaleX, 0, i * scaleZ); + n.add(group.selection.get(1)); + mazeGroup.add(n); + } + if (south) + { + cGroup n = new cGroup("" + i + "," + j); + n.Translate(-j * scaleX, 0, i * scaleZ); + n.add(group.selection.get(2)); + mazeGroup.add(n); + } + if (west) + { + cGroup n = new cGroup("" + i + "," + j); + n.Translate(-j * scaleX, 0, i * scaleZ); + n.add(group.selection.get(3)); + mazeGroup.add(n); + } + } + } + ); + + makeSomething(mazeGroup); + } + } + + private double SelectionSize() + { + cVector bbmin = new cVector(); + cVector bbmax = new cVector(); + + group.selection.getBounds(bbmin, bbmax, true); + + double dx = bbmax.x - bbmin.x; + //double dy = bbmax.y - bbmin.y; + double dz = bbmax.z - bbmin.z; + + return Math.sqrt(dx*dx /*+ dy*dy*/ + dz*dz); + } + + private double SelectionSizeX() + { + cVector bbmin = new cVector(); + cVector bbmax = new cVector(); + + group.selection.getBounds(bbmin, bbmax, true); + + return bbmax.x - bbmin.x; + } + + private double SelectionSizeY() + { + cVector bbmin = new cVector(); + cVector bbmax = new cVector(); + + group.selection.getBounds(bbmin, bbmax, true); + + return bbmax.y - bbmin.y; + } + + private double SelectionSizeZ() + { + cVector bbmin = new cVector(); + cVector bbmax = new cVector(); + + group.selection.getBounds(bbmin, bbmax, true); + + return bbmax.z - bbmin.z; } /** @@ -3590,6 +3697,10 @@ { ReverseNormals(); } else + if (source == mazeItem) + { + GenerateMaze(); + } else if (source == parseverticesItem) { ParseVertices(); @@ -4874,29 +4985,13 @@ if (group.selection.size() == 0) return; - cVector bbmin = new cVector(); - cVector bbmax = new cVector(); - - group.selection.get(0).getBounds(bbmin, bbmax, true); - - double dx = bbmax.x - bbmin.x; - double dy = bbmax.y - bbmin.y; - double dz = bbmax.z - bbmin.z; - - double scale = Math.sqrt(dx*dx + dy*dy + dz*dz); + double scale = SelectionSize(); for (int i=0; i<group.selection.size(); i++) { Object3D obj = group.selection.get(i); - if (obj.toParent == null) - { - obj.toParent = LA.newMatrix(); - obj.fromParent = LA.newMatrix(); - } - - LA.matTranslate(obj.toParent, i * scale, 0, 0); - LA.matTranslateInv(obj.fromParent, -i * scale, 0, 0); + obj.Translate(i * scale, 0, 0); } Globals.lighttouched = true; @@ -6429,8 +6524,9 @@ private MenuItem unstripifyItem; private MenuItem trimItem; private MenuItem untrimItem; - private MenuItem clearColorsItem; + + private MenuItem mazeItem; private MenuItem parseverticesItem; private MenuItem alignItem; private MenuItem mirrorItem; -- Gitblit v1.6.2