From 0a52bd4800459cd9935f360d7ca9555b6bea2146 Mon Sep 17 00:00:00 2001 From: Normand Briere <nbriere@noware.ca> Date: Fri, 19 Jul 2019 20:56:44 -0400 Subject: [PATCH] CSG + paint mode. --- ObjEditor.java | 13 +- cMesh.java | 2 CameraPane.java | 77 +++++++++--- GroupEditor.java | 16 +- CSGEditor.java | 175 +++++++++++++--------------- Object3D.java | 48 +++++++ 6 files changed, 204 insertions(+), 127 deletions(-) diff --git a/CSGEditor.java b/CSGEditor.java index fe9aa98..01423e2 100644 --- a/CSGEditor.java +++ b/CSGEditor.java @@ -10,6 +10,8 @@ import java.util.Vector; +import grafeme.ui.*; + class CSGEditor extends ObjEditor implements ChangeListener, ActionListener, ObjectUI { @@ -44,19 +46,18 @@ super.SetupUI2(oe); // Shows composite UI !! //super.SetupName(oe); - oe.aConstraints.weighty = 0; + oe.ctrlPanel.add(refreshButton = new JButton("Refresh")); //, oe.aConstraints, oe.ctrlPanel.getComponentCount()-2); + oe.ctrlPanel.Return(); - oe.aConstraints.fill = 0; - oe.aConstraints.gridwidth = 1; - oe.aConstraints.fill = GridBagConstraints.HORIZONTAL; - oe.ctrlPanel.add(refreshButton = new JButton("Refresh"), oe.aConstraints, oe.ctrlPanel.getComponentCount()-2); - oe.aConstraints.gridwidth = 1; - oe.aConstraints.gridx /* = 0; - oe.aConstraints.gridy */ += 1; - - oe.aConstraints.fill = 0; - oe.aConstraints.gridwidth = 1; - //this.csg = (CSG) copy; + menuPane = new cGridBag(); + oe.ctrlPanel.add(menuPane); + oe.ctrlPanel.Return(); + + menuPane2 = new cGridBag(); + oe.ctrlPanel.add(menuPane2); + oe.ctrlPanel.Return(); + + //this.csg = (CSG) copy; /* oe.ctrlPanel.add(typeLabel = new JLabel("Type"), oe.aConstraints); oe.aConstraints.fill = GridBagConstraints.HORIZONTAL; @@ -67,33 +68,26 @@ list.add("Merge"); list.add("Intersection"); list.add("Difference"); - oe.aConstraints.fill = GridBagConstraints.HORIZONTAL; - oe.ctrlPanel.add(typeMenu = new JComboBox(new ObjEditor.cListModel(list, csg.csgType - 1)), oe.aConstraints, oe.ctrlPanel.getComponentCount()-2); + menuPane.add(typeMenu = new JComboBox(new ObjEditor.cListModel(list, csg.csgType - 1))); //, oe.aConstraints, oe.ctrlPanel.getComponentCount()-2); //typeMenu.select(csg.csgType - 1); - oe.aConstraints.gridx += 1; - //oe.aConstraints.gridy += 1; - //oe.aConstraints.gridx = 0; - + oe.ctrlPanel.Return(); + list = new Vector(); list.add("Surface"); list.add("Volume"); list.add("Inner"); list.add("Outer"); list.add("Boundary"); + /* oe.aConstraints.fill = 0; oe.ctrlPanel.add(genLabel = new JLabel("Generation"), oe.aConstraints); oe.aConstraints.gridx += 1; */ - oe.aConstraints.fill = GridBagConstraints.HORIZONTAL; - oe.ctrlPanel.add(genMenu = new JComboBox(new ObjEditor.cListModel(list, 0)), oe.aConstraints, oe.ctrlPanel.getComponentCount()-2); + menuPane.add(genMenu = new JComboBox(new ObjEditor.cListModel(list, 0))); //, oe.aConstraints, oe.ctrlPanel.getComponentCount()-2); //typeMenu.select(csg.csgType - 1); - //oe.aConstraints.gridy += 1; - oe.aConstraints.gridx += 1; - oe.ctrlPanel.Return(); - list = new Vector(); list.add("Smooth"); list.add("Flat"); @@ -102,11 +96,8 @@ oe.ctrlPanel.add(normalsLabel = new JLabel("Shading"), oe.aConstraints); oe.aConstraints.gridx += 1; */ - oe.aConstraints.fill = GridBagConstraints.HORIZONTAL; - oe.ctrlPanel.add(normalsMenu = new JComboBox(new ObjEditor.cListModel(list, 0)), oe.aConstraints, oe.ctrlPanel.getComponentCount()-2); + menuPane2.add(normalsMenu = new JComboBox(new ObjEditor.cListModel(list, 0))); //, oe.aConstraints, oe.ctrlPanel.getComponentCount()-2); //typeMenu.select(csg.csgType - 1); - oe.aConstraints.gridx += 1; - oe.aConstraints.gridwidth = 1; list = new Vector(); list.add("Strip"); @@ -117,55 +108,39 @@ oe.ctrlPanel.add(normalsLabel = new JLabel("Shading"), oe.aConstraints); oe.aConstraints.gridx += 1; */ - oe.aConstraints.fill = GridBagConstraints.HORIZONTAL; - oe.ctrlPanel.add(stripifyMenu = new JComboBox(new ObjEditor.cListModel(list, 0)), oe.aConstraints, oe.ctrlPanel.getComponentCount()-2); + menuPane2.add(stripifyMenu = new JComboBox(new ObjEditor.cListModel(list, 0))); //, oe.aConstraints, oe.ctrlPanel.getComponentCount()-2); //typeMenu.select(csg.csgType - 1); - oe.aConstraints.gridy += 1; - oe.aConstraints.gridx = 0; - oe.aConstraints.gridwidth = 1; - //oe.aConstraints.fill = 0; - oe.ctrlPanel.add(sizeLabel = new JLabel("Depth"), oe.aConstraints, oe.ctrlPanel.getComponentCount()-2); - oe.aConstraints.gridx += 1; - oe.aConstraints.gridwidth = ObjEditor.GRIDWIDTH; - oe.aConstraints.fill = GridBagConstraints.HORIZONTAL; - oe.ctrlPanel.add(sizeField = new NumberSlider(0,10), oe.aConstraints, oe.ctrlPanel.getComponentCount()-2); - oe.aConstraints.gridy += 1; - oe.aConstraints.gridx = 0; +// oe.ctrlPanel.add(sizeLabel = new JLabel("Depth")); //, oe.aConstraints, oe.ctrlPanel.getComponentCount()-2); +// oe.ctrlPanel.add(sizeSlider = new NumberSlider(0,10)); //, oe.aConstraints, oe.ctrlPanel.getComponentCount()-2); + sizeSliderPane = AddSlider(oe.ctrlPanel, "Depth", 0, 10, 0); + sizeSlider = (cNumberSlider)sizeSliderPane.getComponent(1); + oe.ctrlPanel.Return(); - oe.aConstraints.fill = 0; - oe.aConstraints.gridwidth = 1; - oe.ctrlPanel.add(size2Label = new JLabel("Depth2"), oe.aConstraints, oe.ctrlPanel.getComponentCount()-2); - oe.aConstraints.gridx += 1; - oe.aConstraints.gridwidth = ObjEditor.GRIDWIDTH; - oe.aConstraints.fill = GridBagConstraints.HORIZONTAL; - oe.ctrlPanel.add(size2Field = new NumberSlider(0,10), oe.aConstraints, oe.ctrlPanel.getComponentCount()-2); - oe.aConstraints.gridy += 1; - oe.aConstraints.gridx = 0; +// oe.ctrlPanel.add(size2Label = new JLabel("Depth2")); //, oe.aConstraints, oe.ctrlPanel.getComponentCount()-2); +// oe.ctrlPanel.add(size2Slider = new NumberSlider(0,10)); //, oe.aConstraints, oe.ctrlPanel.getComponentCount()-2); + size2SliderPane = AddSlider(oe.ctrlPanel, "Depth2", 0, 10, 0); + size2Slider = (cNumberSlider)size2SliderPane.getComponent(1); + oe.ctrlPanel.Return(); - oe.aConstraints.gridwidth = 1; - oe.aConstraints.fill = 0; - oe.ctrlPanel.add(tolLabel = new JLabel("Tolerance"), oe.aConstraints, oe.ctrlPanel.getComponentCount()-2); - oe.aConstraints.gridx += 1; - oe.aConstraints.gridwidth = ObjEditor.GRIDWIDTH; - oe.aConstraints.fill = GridBagConstraints.HORIZONTAL; - oe.ctrlPanel.add(tolField = new NumberSlider(0,10,1), oe.aConstraints, oe.ctrlPanel.getComponentCount()-2); - oe.aConstraints.gridy += 1; - oe.aConstraints.gridx = 0; - oe.aConstraints.gridwidth = 1; +// oe.ctrlPanel.add(tolLabel = new JLabel("Tolerance")); //, oe.aConstraints, oe.ctrlPanel.getComponentCount()-2); +// oe.ctrlPanel.add(toleranceSlider = new NumberSlider(0,10,1)); //, oe.aConstraints, oe.ctrlPanel.getComponentCount()-2); + toleranceSliderPane = AddSlider(oe.ctrlPanel, "Tolerance", 0, 10, 1, 1); + toleranceSlider = (cNumberSlider)toleranceSliderPane.getComponent(1); + oe.ctrlPanel.Return(); - sizeField.setInteger(csg.cellSize); - size2Field.setInteger(csg.cellSize2); + sizeSlider.setInteger(csg.cellSize); + size2Slider.setInteger(csg.cellSize2); System.out.println("csg.tolerance = " + csg.tolerance); - tolField.setFloat(csg.tolerance); + toleranceSlider.setFloat(csg.tolerance); normalsMenu.setSelectedIndex(csg.normals?0:1); typeMenu.setSelectedIndex(csg.csgType - 1); genMenu.setSelectedIndex(csg.genType); stripifyMenu.setSelectedIndex(csg.userType); // ==0?0:1); - sizeField.addChangeListener(this); - size2Field.addChangeListener(this); - tolField.addChangeListener(this); + sizeSlider.addChangeListener(this); + size2Slider.addChangeListener(this); + toleranceSlider.addChangeListener(this); typeMenu.addActionListener(this); genMenu.addActionListener(this); @@ -199,24 +174,29 @@ normalsMenu.removeActionListener(this); refreshButton.removeActionListener(this); - sizeField.removeChangeListener(this); - size2Field.removeChangeListener(this); - tolField.removeChangeListener(this); - oe.ctrlPanel.remove(sizeField); - oe.ctrlPanel.remove(size2Field); - oe.ctrlPanel.remove(tolField); - oe.ctrlPanel.remove(sizeLabel); - oe.ctrlPanel.remove(size2Label); - oe.ctrlPanel.remove(tolLabel); - oe.ctrlPanel.remove(typeMenu); - //oe.ctrlPanel.remove(typeLabel); - oe.ctrlPanel.remove(genMenu); - //oe.ctrlPanel.remove(genLabel); - oe.ctrlPanel.remove(normalsMenu); - oe.ctrlPanel.remove(stripifyMenu); - //oe.ctrlPanel.remove(normalsLabel); - oe.ctrlPanel.remove(refreshButton); - //oe.ctrlPanel.repaint(); + sizeSlider.removeChangeListener(this); + size2Slider.removeChangeListener(this); + toleranceSlider.removeChangeListener(this); + + oe.ctrlPanel.remove(this.refreshButton); + oe.ctrlPanel.remove(menuPane); + oe.ctrlPanel.remove(menuPane2); + oe.ctrlPanel.remove(sizeSliderPane); + oe.ctrlPanel.remove(size2SliderPane); + oe.ctrlPanel.remove(toleranceSliderPane); + +// oe.ctrlPanel.remove(sizeLabel); +// oe.ctrlPanel.remove(size2Label); +// oe.ctrlPanel.remove(tolLabel); +// oe.ctrlPanel.remove(typeMenu); +// //oe.ctrlPanel.remove(typeLabel); +// oe.ctrlPanel.remove(genMenu); +// //oe.ctrlPanel.remove(genLabel); +// oe.ctrlPanel.remove(normalsMenu); +// oe.ctrlPanel.remove(stripifyMenu); +// //oe.ctrlPanel.remove(normalsLabel); +// oe.ctrlPanel.remove(refreshButton); +// //oe.ctrlPanel.repaint(); super.closeUI(); } @@ -226,7 +206,7 @@ { super.doLayout(); labelAndField(typeLabel, typeMenu); - labelAndField(sizeLabel, sizeField); + labelAndField(sizeLabel, sizeSlider); widgetPos += 5; } */ @@ -252,9 +232,9 @@ public void stateChanged(ChangeEvent e) { - if (e.getSource() == sizeField || - e.getSource() == size2Field || - e.getSource() == tolField) + if (e.getSource() == sizeSlider || + e.getSource() == size2Slider || + e.getSource() == toleranceSlider) { // Can't choose... //applySelf(); @@ -272,15 +252,16 @@ csg.genType = genMenu.getSelectedIndex(); csg.normals = normalsMenu.getSelectedIndex() == 0; csg.userType = stripifyMenu.getSelectedIndex(); - csg.cellSize = sizeField.getInteger(); - csg.cellSize2 = size2Field.getInteger(); - csg.tolerance = tolField.getFloat(); + csg.cellSize = sizeSlider.getInteger(); + csg.cellSize2 = size2Slider.getInteger(); + csg.tolerance = toleranceSlider.getFloat(); if (csg.link2master) csg.retile(); } CSG csg; + JLabel typeLabel; JLabel genLabel; JLabel normalsLabel; @@ -291,10 +272,16 @@ JComboBox genMenu; JComboBox normalsMenu; JComboBox stripifyMenu; - NumberSlider sizeField; - NumberSlider size2Field; - NumberSlider tolField; + cNumberSlider sizeSlider; + cNumberSlider size2Slider; + cNumberSlider toleranceSlider; + cGridBag menuPane; + cGridBag menuPane2; + cGridBag sizeSliderPane; + cGridBag size2SliderPane; + cGridBag toleranceSliderPane; + JButton refreshButton; //GroupEditor objEditor; diff --git a/CameraPane.java b/CameraPane.java index 6286dc1..52608e6 100644 --- a/CameraPane.java +++ b/CameraPane.java @@ -2298,10 +2298,17 @@ HANDLES ^= true; } + Object3D paintFolder; + void TogglePaint() { PAINTMODE ^= true; paintcount = 0; + + if (PAINTMODE) + { + paintFolder = GetFolder(); + } } void SwapCamera(int a, int b) @@ -8503,7 +8510,7 @@ return texture!=null?texture.texturedata:null; } - boolean BindTexture(String tex, boolean bump, int resolution) throws Exception + com.sun.opengl.util.texture.Texture BindTexture(String tex, boolean bump, int resolution) throws Exception { if (/*tex == null ||*/ ambientOcclusion ) // || !textureon) { @@ -8515,7 +8522,7 @@ com.sun.opengl.util.texture.Texture texture = GetTexture(tex, bump, resolution); if (texture == null) - return false; + return texture; /**/ if (textureon || tex.equals("DEFAULT_TEXTURE") || tex.equals("DEFAULT_TEXTURE_BUMP") || tex.equals("WHITE_NOISE")) // || tex.equals("IMMORTAL")) @@ -16553,6 +16560,14 @@ } } + private Object3D GetFolder() + { + Object3D folder = object.GetWindow().copy; + if (object.GetWindow().copy.selection.Size() > 0) + folder = object.GetWindow().copy.selection.elementAt(0); + return folder; + } + class SelectBuffer implements GLEventListener { @@ -16632,6 +16647,17 @@ //gl.glDisable(GL.GL_POLYGON_OFFSET_FILL); + if (PAINTMODE) + { + if (object.GetWindow().copy.selection.Size() > 0) + { + Object3D paintobj = object.GetWindow().copy.selection.elementAt(0); + + // Make what you paint not selectable. + paintobj.ResetSelectable(); + } + } + //int tmp = selection_view; //selection_view = -1; int temp = DrawMode(); @@ -16643,6 +16669,17 @@ // temp = DEFAULT; // patch for selection debug Globals.drawMode = temp; // WARNING + if (PAINTMODE) + { + if (object.GetWindow().copy.selection.Size() > 0) + { + Object3D paintobj = object.GetWindow().copy.selection.elementAt(0); + + // Revert. + paintobj.RestoreSelectable(); + } + } + //gl.glBindTexture(GL.GL_TEXTURE_2D, selection_view); // trying different ways of getting the depth info over @@ -16748,27 +16785,29 @@ if (!movingcamera && !PAINTMODE) object.GetWindow().ScreenFitPoint(); // fev 2014 - if (PAINTMODE && Grafreed.clipboard.size() == 1) // object.editWindow.copy.selection.Size() > 0) + if (PAINTMODE) // && Grafreed.clipboard.size() == 1) // object.editWindow.copy.selection.Size() > 0) { - Object3D paintobj = Grafreed.clipboard.get(0); // object.editWindow.copy.selection.elementAt(0); - - Object3D group = new Object3D("inst" + paintcount++); - - group.CreateMaterial(); // use a void leaf to select instances - - group.add(paintobj); // link - - object.GetWindow().SnapObject(group); - - Object3D folder = object.GetWindow().copy; + //Object3D paintobj; // = Grafreed.clipboard.get(0); // object.editWindow.copy.selection.elementAt(0); if (object.GetWindow().copy.selection.Size() > 0) - folder = object.GetWindow().copy.selection.elementAt(0); + { + Object3D paintobj = object.GetWindow().copy.selection.elementAt(0); - folder.add(group); - - object.GetWindow().ResetModel(); - object.GetWindow().refreshContents(); + Object3D inst = new Object3D("inst" + paintcount++); + + inst.CreateMaterial(); // use a void leaf to select instances + + inst.add(paintobj); // link + + object.GetWindow().SnapObject(inst); + + Object3D folder = paintFolder; // GetFolder(); + + folder.add(inst); + + object.GetWindow().ResetModel(); + object.GetWindow().refreshContents(); + } } else paintcount = 0; diff --git a/GroupEditor.java b/GroupEditor.java index 1e0e863..9edd20b 100644 --- a/GroupEditor.java +++ b/GroupEditor.java @@ -80,18 +80,20 @@ this.copy = this.group = copy; //selectees = this.group.selectees; - if (copy.versions == null) - { - copy.versions = new byte[100][]; - copy.versionindex = -1; - } - SetupMenu2(this); //objEditor); SetupUI2(objEditor); objEditor.SetupUI(true); SetupViews(objEditor); ((cRadio)radioPanel.getComponent(0)).SetCamera(cameraView.renderCamera, true); + + if (copy.versions == null) + { + copy.versions = new byte[100][]; + copy.versionindex = -1; + + Save(true); + } } void CloneSelection(boolean supports) @@ -4798,7 +4800,7 @@ void refreshContents(boolean cp) { - if (objectPanel.getSelectedIndex() == objectPanel.indexOfTab("Info")) + if (objectPanel.getSelectedIndex() == 2) // objectPanel.indexOfTab("Info")) if (!Globals.MOUSEDRAGGED && group.selection != null) // && !Globals.TIMERRUNNING) { objEditor.ClearInfo(); // .GetMaterial()); diff --git a/ObjEditor.java b/ObjEditor.java index 30d64e6..f3f020f 100644 --- a/ObjEditor.java +++ b/ObjEditor.java @@ -327,8 +327,8 @@ if (copy.versions == null) { - copy.versions = new byte[100][]; - copy.versionindex = -1; +// copy.versions = new byte[100][]; +// copy.versionindex = -1; } SetupMenu(); @@ -974,7 +974,7 @@ // NumberSlider vDivsField; // JCheckBox endcaps; JCheckBox liveCB; - JCheckBox selectCB; + JCheckBox selectableCB; JCheckBox hideCB; JCheckBox link2masterCB; JCheckBox markCB; @@ -1186,9 +1186,10 @@ liveCB = AddCheckBox(setupPanel, "Live", copy.live); liveCB.setToolTipText("Animate object"); - selectCB = AddCheckBox(setupPanel, "Select", !copy.dontselect); - selectCB.setToolTipText("Make object selectable"); + selectableCB = AddCheckBox(setupPanel, "Select", !copy.dontselect); + selectableCB.setToolTipText("Make object selectable"); // Return(); + hideCB = AddCheckBox(setupPanel, "Hide", copy.hide); hideCB.setToolTipText("Hide object"); markCB = AddCheckBox(setupPanel, "Mark", copy.marked); @@ -3250,7 +3251,7 @@ { copy.live ^= true; return; - } else if (event.getSource() == selectCB) + } else if (event.getSource() == selectableCB) { copy.dontselect ^= true; return; diff --git a/Object3D.java b/Object3D.java index 94907db..0fe5ff5 100644 --- a/Object3D.java +++ b/Object3D.java @@ -29,7 +29,7 @@ Object3D saveskeleton; // - byte[] versions[] = new byte[100][]; + byte[] versions[]; int versionindex = -1; ScriptNode scriptnode; @@ -426,6 +426,7 @@ } boolean live = false; + transient boolean keepdontselect; boolean dontselect = false; boolean hide = false; boolean link2master = false; // performs reset support/master at each frame @@ -5420,6 +5421,51 @@ blockloop = false; } + void ResetSelectable() + { + if (blockloop) + return; + + blockloop = true; + + keepdontselect = dontselect; + dontselect = true; + + Object3D child; + int nb = Size(); + for (int i = 0; i < nb; i++) + { + child = (Object3D) get(i); + if (child == null) + continue; + child.ResetSelectable(); + } + + blockloop = false; + } + + void RestoreSelectable() + { + if (blockloop) + return; + + blockloop = true; + + dontselect = keepdontselect; + + Object3D child; + int nb = Size(); + for (int i = 0; i < nb; i++) + { + child = (Object3D) get(i); + if (child == null) + continue; + child.RestoreSelectable(); + } + + blockloop = false; + } + boolean IsSelected() { if (parent == null) diff --git a/cMesh.java b/cMesh.java index 9bf2540..a31f4dd 100644 --- a/cMesh.java +++ b/cMesh.java @@ -560,6 +560,8 @@ maxima = new cVector(); } + CameraPane.CreateSelectedPoint(); + // ref.getBounds(minima, maxima, true); // Phys.reference.set((maxima.x+minima.x)/2,(maxima.y+minima.y)/2,(maxima.z+minima.z)/2); //ref. -- Gitblit v1.6.2