From 480ad70047e54b2b92f974e6c2ac5a6c0bdc5a5c Mon Sep 17 00:00:00 2001 From: Normand Briere <nbriere@noware.ca> Date: Sun, 18 Aug 2019 13:56:09 -0400 Subject: [PATCH] Fix new + checkbox --- ObjEditor.java | 1306 ++++++++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 1,077 insertions(+), 229 deletions(-) diff --git a/ObjEditor.java b/ObjEditor.java index c67953d..098f83d 100644 --- a/ObjEditor.java +++ b/ObjEditor.java @@ -34,6 +34,7 @@ iSendInfo //KeyListener { + public cToggleButton pinButton; boolean timeline; boolean wasFullScreen; @@ -41,11 +42,72 @@ JFrame frame; static ObjEditor theFrame; + + public void AllocProjectedVertices(Object3D object) + { + assert (object.projectedVertices != null); + + if (object.projectedVertices.length <= 2) + { + // Side effect... + Object3D.cVector2[] keep = object.projectedVertices; + object.projectedVertices = new Object3D.cVector2[3]; + for (int i = 0; i < 3; i++) + { + if (i < keep.length) + { + object.projectedVertices[i] = keep[i]; + } else + { + object.projectedVertices[i] = new Object3D.cVector2(); + } + /* + if(keep.length == 0) + object.projectedVertices[0] = new Object3D.cVector2(); + else + object.projectedVertices[0] = keep[0]; + object.projectedVertices[1] = new Object3D.cVector2(); + */ + } + } + } + + public Composite CreateCameras() + { + Composite cams = new cTemplate(); + cams.name = "Cameras"; + copy.insertElementAt(cams, 0); + + cams.addChild(new Camera()); + cams.addChild(new Camera(1)); + cams.addChild(new Camera(2)); + cams.addChild(new Camera(3)); + cams.addChild(new Camera(4)); + + return cams; + } + + public cGridBag GetSeparator() + { + cGridBag separator = new cGridBag(); + separator.add(new JSeparator()); + separator.preferredHeight = 5; + return separator; + } cButton GetButton(String name, boolean border) { ImageIcon icon = GetIcon(name); - return new cButton(icon, border); + if (icon != null || name.contains("/")) + return new cButton(icon, border); + else + return new cButton(name, border); + } + + cLabel GetLabel(String name, boolean border) + { + //ImageIcon icon = GetIcon(name); + return new cLabel(GetImage(name), border); } cToggleButton GetToggleButton(String name, boolean border) @@ -60,26 +122,52 @@ return new cCheckBox(icon, border); } - private ImageIcon GetIcon(String name) + static java.util.Hashtable<String, javax.swing.ImageIcon> icons = new java.util.Hashtable<String, javax.swing.ImageIcon>(); + + static ImageIcon GetIcon(String name) + { + javax.swing.ImageIcon iconCache = icons.get(name); + if (iconCache != null) + { + return iconCache; + } + + try + { + BufferedImage image = javax.imageio.ImageIO.read(ObjEditor.class.getClassLoader().getResourceAsStream(name)); + +// if (image.getWidth() > 48 && image.getHeight() > 48) +// { +// BufferedImage resized = new BufferedImage(48, 48, image.getType()); +// Graphics2D g = resized.createGraphics(); +// g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); +// //g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); +// g.drawImage(image, 0, 0, 48, 48, 0, 0, image.getWidth(), image.getHeight(), null); +// g.dispose(); +// +// image = resized; +// } + + javax.swing.ImageIcon icon = new javax.swing.ImageIcon(image); + + icons.put(name, icon); + + return icon; + } + catch (Exception e) + { + //icons.put(name, null); + return null; + } + } + + BufferedImage GetImage(String name) { try { BufferedImage image = javax.imageio.ImageIO.read(getClass().getClassLoader().getResourceAsStream(name)); - if (image.getWidth() != 24 && image.getHeight() != 24) - { - BufferedImage resized = new BufferedImage(24, 24, image.getType()); - Graphics2D g = resized.createGraphics(); - g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); - //g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); - g.drawImage(image, 0, 0, 24, 24, 0, 0, image.getWidth(), image.getHeight(), null); - g.dispose(); - - image = resized; - } - - javax.swing.ImageIcon icon = new javax.swing.ImageIcon(image); - return icon; + return image; } catch (Exception e) { @@ -268,11 +356,13 @@ client = inClient; copy = client; - if (copy.versions == null) - { - copy.versions = new byte[100][]; - copy.versionindex = -1; - } +// if (copy.versionlist == null) +// { +// copy.versionlist = new Object3D[100]; +// copy.versionindex = -1; +// +// callee.Save(true); +// } // "this" is not called: SetupUI2(objEditor); } @@ -287,10 +377,12 @@ client = inClient; copy = client; - if (copy.versions == null) + if (copy.versionlist == null) { - copy.versions = new byte[100][]; + copy.versionlist = new Object3D[100]; copy.versionindex = -1; + +// Save(true); } SetupUI2(callee.GetEditor()); @@ -314,7 +406,8 @@ //parent = p; GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice(); - System.out.println("getFullScreenWindow? " + gd.getFullScreenWindow()); + if (Globals.DEBUG) + System.out.println("getFullScreenWindow? " + gd.getFullScreenWindow()); //gd.setFullScreenWindow(this); //setResizable(false); //if (!isDisplayable()) @@ -325,11 +418,13 @@ copy = localCopy; copy.editWindow = this; - if (copy.versions == null) - { -// copy.versions = new byte[100][]; +// if (copy.versionlist == null) +// { +// copy.versionlist = new Object3D[100]; // copy.versionindex = -1; - } +// +// Save(true); +// } SetupMenu(); @@ -349,6 +444,9 @@ static java.util.Vector<Object3D> listUI = new java.util.Vector<Object3D>(); + // This is to refresh the UI of the material panel. + boolean patchMaterial; + void SetupMenu() { frame.setMenuBar(menuBar = new MenuBar()); @@ -398,6 +496,8 @@ ChangeListener changeListener = new ChangeListener() { + //String name; + public void stateChanged(ChangeEvent changeEvent) { // if (objectPanel.getSelectedIndex() == objectPanel.indexOfTab("Material") && !materialFlushed) @@ -416,7 +516,37 @@ // EditSelection(false); // } - refreshContents(false); // To refresh Info tab +// if (objectPanel.getSelectedIndex() == 4) +// { +// name = copy.skyboxname; +// +// if (name == null) +// { +// name = ""; +// } +// +// copy.skyboxname = "cubemaps/default-skyboxes/rgb"; +// copy.skyboxext = "jpg"; +// } +// else +// { +// if (name != null) +// { +// if (name.equals("")) +// { +// copy.skyboxname = null; +// copy.skyboxext = null; +// } +// else +// { +// copy.skyboxname = name; +// } +// } +// } + cameraView.transformMode = objectPanel.getSelectedIndex() == 4; + +// refreshContents(false); // To refresh Info tab + cameraView.repaint(); } }; objectPanel.addChangeListener(changeListener); @@ -436,10 +566,12 @@ editPanel.add(editCommandsPanel); editPanel.add(ctrlPanel); - toolboxPanel = new cGridBag().setVertical(false); + toolboxPanel = new cGridBag().setVertical(true); //toolboxPanel.setName("Toolbox"); - materialPanel = new cGridBag().setVertical(true); + skyboxPanel = new cGridBag().setVertical(true); + + materialPanel = new cGridBag().setVertical(false); //materialPanel.setName("Material"); /*JTextPane*/ @@ -723,6 +855,7 @@ boolean maximized; cButton fullscreenLayout; + cButton expandedLayout; void Minimize() { @@ -762,10 +895,12 @@ cButton minButton; cButton maxButton; cButton fullButton; + cButton collapseButton; + cButton maximize3DButton; void ToggleFullScreen() { -GraphicsDevice device = frame.getGraphicsConfiguration().getDevice(); + GraphicsDevice device = frame.getGraphicsConfiguration().getDevice(); cameraView.ToggleFullScreen(); @@ -786,13 +921,13 @@ // X frame.getContentPane().remove(/*"Center",*/bigThree); // X framePanel.add(bigThree); // X frame.getContentPane().add(/*"Center",*/framePanel); - framePanel.setDividerLocation(46); +// framePanel.setDividerLocation(46); // icons are 24x24 //frame.setVisible(true); - radio.layout = keepButton; +// radio.layout = keepButton; //theFrame = null; keepButton = null; - radio.layout.doClick(); +// radio.layout.doClick(); } else { @@ -813,31 +948,53 @@ // X frame.getContentPane().remove(/*"Center",*/framePanel); // X framePanel.remove(bigThree); // X frame.getContentPane().add(/*"Center",*/bigThree); - framePanel.setDividerLocation(0); +// framePanel.setDividerLocation(0); - radio.layout = fullscreenLayout; - radio.layout.doClick(); +// radio.layout = fullscreenLayout; +// radio.layout.doClick(); //frame.setVisible(true); } frame.validate(); + + cameraView.requestFocusInWindow(); } - private byte[] CompressCopy() + void CollapseToolbar() + { + framePanel.setDividerLocation(0); + //frame.validate(); + + cameraView.requestFocusInWindow(); + } + + private Object3D Duplicate(Object3D object) { boolean temp = CameraPane.SWITCH; CameraPane.SWITCH = false; - copy.ExtractBigData(versiontable); + if (Grafreed.grafreed.universe.versiontable == null) + Grafreed.grafreed.universe.versiontable = new java.util.Hashtable<java.util.UUID, Object3D>(); + + object.ExtractBigData(Grafreed.grafreed.universe.versiontable); // if (copy == client) - byte[] versions[] = copy.versions; - copy.versions = null; + Object3D versions[] = object.versionlist; + java.util.Hashtable<java.util.UUID, Object3D> versiontable = object.versiontable; // if Grafreed.grafreed.universe + object.versionlist = null; + object.versiontable = null; - byte[] compress = Compress(copy); + Object3D parent = object.parent; + object.parent = null; - copy.versions = versions; + //byte[] compress = Compress(copy); + Object3D compress = (Object3D)Grafreed.clone(object); - copy.RestoreBigData(versiontable); + object.parent = parent; + + object.versionlist = versions; + object.versiontable = versiontable; // if Grafreed.grafreed.universe + + object.RestoreBigData(Grafreed.grafreed.universe.versiontable); CameraPane.SWITCH = temp; @@ -965,6 +1122,7 @@ { SetupMaterial(materialPanel); } + //SetupName(); //SetupViews(); } @@ -1173,6 +1331,18 @@ namePanel = new cGridBag(); + //if (copy.pinned) + { + pinButton = GetToggleButton("icons/pin.png", !Globals.NIMBUSLAF); + pinButton.setSelected(copy.pinned); + cGridBag t = new cGridBag(); + t.preferredWidth = 2; + t.add(pinButton); + namePanel.add(t); + + pinButton.addItemListener(this); + } + nameField = AddText(namePanel, copy.GetName()); namePanel.add(new JScrollPane(nameField, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER)); oe.ctrlPanel.add(namePanel); @@ -1186,14 +1356,16 @@ liveCB = AddCheckBox(setupPanel, "Live", copy.live); liveCB.setToolTipText("Animate object"); + markCB = AddCheckBox(setupPanel, "Anim", copy.marked); + markCB.setToolTipText("Set target transform"); 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); - markCB.setToolTipText("As animation target transform"); + + ToolTipManager.sharedInstance().setLightWeightPopupEnabled(false); setupPanel2 = new cGridBag().setVertical(false); @@ -1393,22 +1565,9 @@ if (cam == null || !(copy.get(0) instanceof cGroup)) { - System.out.println("CREATE CAMERAS"); - cams = new cTemplate(); - cams.name = "Cameras"; - copy.insertElementAt(cams, 0); - //cams.parent = copy; - - cam = new Camera(); // LA.newVector(3, 2, 1)); - cams.addChild(cam); - cam = new Camera(1); - cams.addChild(cam); - cam = new Camera(2); - cams.addChild(cam); - cam = new Camera(3); - cams.addChild(cam); - cam = new Camera(4); // Light - cams.addChild(cam); + if (Globals.DEBUG) + System.out.println("CREATE CAMERAS"); + cams = CreateCameras(); } else { cams = (cGroup) copy.get(0); @@ -1474,6 +1633,45 @@ //frontView.object = copy; //sideView.object = copy; + transformPanel = new cGridBag().setVertical(true); + + cGridBag resetTransformPanel = new cGridBag(); + + resetTransformPanel.preferredHeight = 2; + + cButton resetTransform = GetButton("Reset all", !Globals.NIMBUSLAF); + resetTransform.setToolTipText("Reset Translation, Rotation and Scale"); + resetTransform.addMouseListener(new MouseAdapter() + { + public void mouseClicked(MouseEvent e) + { + ResetTransform(); + } + }); + resetTransformPanel.add(resetTransform); + + resetTransform = GetButton("T only", !Globals.NIMBUSLAF); + resetTransform.setToolTipText("Reset Translation only"); + resetTransform.addMouseListener(new MouseAdapter() + { + public void mouseClicked(MouseEvent e) + { + ResetTransform(1); + } + }); + resetTransformPanel.add(resetTransform); + + resetTransform = GetButton("RS only", !Globals.NIMBUSLAF); + resetTransform.setToolTipText("Reset Rotation and Scale only"); + resetTransform.addMouseListener(new MouseAdapter() + { + public void mouseClicked(MouseEvent e) + { + ResetTransform(2); + } + }); + resetTransformPanel.add(resetTransform); + XYZPanel = new cGridBag().setVertical(true); //XYZPanel.setLayout(new GridLayout(3, 1, 5, 5)); @@ -1483,6 +1681,9 @@ XYZPanel.addComponent(/*BorderLayout.NORTH,*/topView); // Scroll); //XYZPanel.setName("XYZ"); + transformPanel.add(resetTransformPanel); + transformPanel.add(XYZPanel); + /* gridPanel = new JPanel(); //new BorderLayout()); gridPanel.setLayout(new GridLayout(1, 2)); @@ -1490,12 +1691,12 @@ gridPanel.add(cameraView); gridPanel.add(XYZPanel); */ - gridPanel = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, centralPanel, XYZPanel); //new BorderLayout()); - gridPanel.setContinuousLayout(true); - gridPanel.setOneTouchExpandable(true); - gridPanel.setDividerLocation(1.0); - gridPanel.setDividerSize(9); - gridPanel.setResizeWeight(0.85); +// gridPanel = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, centralPanel, XYZPanel); //new BorderLayout()); +// gridPanel.setContinuousLayout(true); +// gridPanel.setOneTouchExpandable(true); +// gridPanel.setDividerLocation(1.0); +// gridPanel.setDividerSize(9); +// gridPanel.setResizeWeight(0.85); // aConstraints.weighty = 0; //System.out.println("THIS = " + this); @@ -1518,25 +1719,34 @@ //JScrollPane tmp = new JScrollPane(ctrlPanel, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); //tmp.setName("Edit"); + objectPanel.add(skyboxPanel); + objectPanel.setIconAt(0, GetIcon("icons/skybox.jpg")); + objectPanel.setToolTipTextAt(0, "Backgrounds"); + + objectPanel.add(toolboxPanel); + objectPanel.setIconAt(1, GetIcon("icons/primitives.png")); + objectPanel.setToolTipTextAt(1, "Objects & textures"); + objectPanel.add(materialPanel); - objectPanel.setIconAt(0, GetIcon("icons/material.png")); + objectPanel.setIconAt(2, GetIcon("icons/material.png")); + objectPanel.setToolTipTextAt(2, "Material"); + // JPanel north = new JPanel(new BorderLayout()); // north.setName("Edit"); // north.add(ctrlPanel, BorderLayout.NORTH); // objectPanel.add(north); objectPanel.add(editPanel); - objectPanel.setIconAt(1, GetIcon("icons/write.png")); + objectPanel.setIconAt(3, GetIcon("icons/writewhite.png")); + objectPanel.setToolTipTextAt(3, "Edit controls"); - //if (Globals.ADVANCED) - objectPanel.add(infoPanel); - objectPanel.setIconAt(2, GetIcon("icons/info.png")); + objectPanel.add(transformPanel); + objectPanel.setIconAt(4, GetIcon("icons/XYZ.png")); + objectPanel.setToolTipTextAt(4, "TRS transform"); - objectPanel.add(XYZPanel); - objectPanel.setIconAt(3, GetIcon("icons/XYZ.png")); - - objectPanel.add(toolboxPanel); - objectPanel.setIconAt(4, GetIcon("icons/primitives.png")); - + patchMaterial = true; + cameraView.patchMaterial = this; + objectPanel.setSelectedIndex(2); + /* aConstraints.gridx = 0; aConstraints.gridwidth = 1; @@ -1556,7 +1766,7 @@ scrollpane.addMouseWheelListener(this); // Default not fast enough /*JTabbedPane*/ scenePanel = new cGridBag(); - scenePanel.preferredWidth = 5; + scenePanel.preferredWidth = 6; JTabbedPane tabbedPane = new JTabbedPane(); tabbedPane.add(scrollpane); @@ -1567,11 +1777,51 @@ AddOptions(optionsPanel); //, aConstraints); - tabbedPane.add(optionsPanel); - tabbedPane.add(FSPane = new cFileSystemPane(this)); + tabbedPane.add(optionsPanel); + scenePanel.add(tabbedPane); + + cGridBag creditsPanel = new cGridBag().setVertical(true); + creditsPanel.setName("Credits"); + + cLabel ogaLabel = new cLabel(" Most Skyboxes courtesy of OpenGameArt!", !Globals.NIMBUSLAF); + creditsPanel.add(ogaLabel); + + cButton opengameartButton; + creditsPanel.add(opengameartButton = GetButton("icons/sara-logo.png", !Globals.NIMBUSLAF)); + opengameartButton.setToolTipText("https://opengameart.org"); + + opengameartButton.addMouseListener(new MouseAdapter() + { + public void mouseClicked(MouseEvent e) + { + try + { + Desktop.getDesktop().browse(new java.net.URI("https://opengameart.org/")); + } catch (Exception e1) +// } catch (java.io.IOException | java.net.URISyntaxException e1) + { + e1.printStackTrace(); + } + } + }); + + for (int i=10; --i>=0;) + { + creditsPanel.add(new cGridBag()); + } + + tabbedPane.add(creditsPanel); + tabbedPane.setToolTipTextAt(3, "Credits"); + + if (Globals.ADVANCED) + { + tabbedPane.add(infoPanel); + tabbedPane.setIconAt(4, GetIcon("icons/info.png")); + tabbedPane.setToolTipTextAt(4, "Information"); + } /* cTree jTree = new cTree(null); @@ -1593,13 +1843,13 @@ jtp.add(tree); */ - bigPanel = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, scenePanel, gridPanel); - bigPanel.setContinuousLayout(true); - bigPanel.setOneTouchExpandable(true); - bigPanel.setDividerLocation(0.8); - bigPanel.setDividerSize(15); - bigPanel.setResizeWeight(0.15); - bigPanel.setName("Scene"); +// bigPanel = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, scenePanel, gridPanel); +// bigPanel.setContinuousLayout(true); +// bigPanel.setOneTouchExpandable(true); +// bigPanel.setDividerLocation(0.8); +// bigPanel.setDividerSize(15); +// bigPanel.setResizeWeight(0.15); +// bigPanel.setName("Scene"); //bigPanel.setLayout(new BorderLayout()); //bigPanel.setSize(new Dimension(10,10)); @@ -1643,6 +1893,23 @@ // aConstraints.gridheight = 1; framePanel = new JSplitPane(JSplitPane.VERTICAL_SPLIT, toolbarPanel, bigThree); + + framePanel.addPropertyChangeListener(JSplitPane.DIVIDER_LOCATION_PROPERTY, + new java.beans.PropertyChangeListener() + { + public void propertyChange(java.beans.PropertyChangeEvent pce) + { + if ((Integer)pce.getOldValue() == 1) + { + if (radio.layout != expandedLayout) + { + radio.layout = expandedLayout; + radio.layout.doClick(); + } + } + } + }); + framePanel.setContinuousLayout(false); framePanel.setOneTouchExpandable(false); //.setDividerLocation(0.8); @@ -1652,7 +1919,7 @@ frame.getContentPane().setLayout(new BorderLayout()); /**/ - JTabbedPane worldPane = new JTabbedPane(); + //JTabbedPane worldPane = new JTabbedPane(); //worldPane.add(bigPanel); //worldPane.add(worldPanel); /**/ @@ -1666,7 +1933,7 @@ cameraView.requestFocusInWindow(); - gridPanel.setDividerLocation(1.0); +// gridPanel.setDividerLocation(1.0); frame.validate(); @@ -1675,7 +1942,6 @@ frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); frame.addWindowListener(new WindowAdapter() { - public void windowClosing(WindowEvent e) { Close(); @@ -1698,28 +1964,442 @@ ctrlPanel.removeAll(); } - void SetupMaterial(cGridBag panel) + void SetupMaterial(cGridBag materialpanel) { - /* + cGridBag presetpanel = new cGridBag().setVertical(true); + + cLabel skin = GetLabel("icons/shadericons/shadericon00000.png", !Globals.NIMBUSLAF); + skin.setToolTipText("Skin"); + skin.addMouseListener(new MouseAdapter() + { + public void mouseClicked(MouseEvent e) + { + Object3D object = Grafreed.materials.versionlist[0].get(0); + cMaterial material = object.material; + + // Skin + colorField.setFloat(material.color); + float saturation = material.modulation; + + if (!cameraView.Skinshader) + { + saturation /= 1.5; + } + + saturationField.setFloat(saturation); + + subsurfaceField.setFloat(material.subsurface); + selfshadowField.setFloat(material.diffuseness); + diffusenessField.setFloat(material.factor); + shininessField.setFloat(material.shininess); + shadowbiasField.setFloat(material.shadowbias); + diffuseField.setFloat(material.diffuse); + specularField.setFloat(material.specular); + + bumpField.setFloat(object.projectedVertices[0].x / 1000.0); + noiseField.setFloat(object.projectedVertices[0].y / 1000.0); + powerField.setFloat(object.projectedVertices[2].x / 1000.0); + + materialtouched = true; + applySelf(); + } + }); + presetpanel.add(skin); + + cLabel lambert = GetLabel("icons/shadericons/shadericon00002.png", !Globals.NIMBUSLAF); + lambert.setToolTipText("Diffuse"); + lambert.addMouseListener(new MouseAdapter() + { + public void mouseClicked(MouseEvent e) + { + Object3D object = Grafreed.materials.versionlist[2].get(0); + cMaterial material = object.material; + + diffusenessField.setFloat(material.factor); + selfshadowField.setFloat(material.diffuseness); + + materialtouched = true; + applySelf(); + } + }); + presetpanel.add(lambert); + + cLabel diffuse2 = GetLabel("icons/shadericons/shadericon00003.png", !Globals.NIMBUSLAF); + diffuse2.setToolTipText("Diffuse2"); + diffuse2.addMouseListener(new MouseAdapter() + { + public void mouseClicked(MouseEvent e) + { + Object3D object = Grafreed.materials.versionlist[3].get(0); + cMaterial material = object.material; + + diffusenessField.setFloat(material.factor); + selfshadowField.setFloat(material.diffuseness); + + materialtouched = true; + applySelf(); + } + }); + presetpanel.add(diffuse2); + + cLabel diffusemoon = GetLabel("icons/shadericons/shadericon00004.png", !Globals.NIMBUSLAF); + diffusemoon.setToolTipText("Moon"); + diffusemoon.addMouseListener(new MouseAdapter() + { + public void mouseClicked(MouseEvent e) + { + Object3D object = Grafreed.materials.versionlist[4].get(0); + cMaterial material = object.material; + + diffusenessField.setFloat(material.factor); + selfshadowField.setFloat(material.diffuseness); + + materialtouched = true; + applySelf(); + } + }); + presetpanel.add(diffusemoon); + + cLabel diffusemoon2 = GetLabel("icons/shadericons/shadericon00005.png", !Globals.NIMBUSLAF); + diffusemoon2.setToolTipText("Moon2"); + diffusemoon2.addMouseListener(new MouseAdapter() + { + public void mouseClicked(MouseEvent e) + { + Object3D object = Grafreed.materials.versionlist[5].get(0); + cMaterial material = object.material; + + diffusenessField.setFloat(material.factor); + selfshadowField.setFloat(material.diffuseness); + + materialtouched = true; + applySelf(); + } + }); + presetpanel.add(diffusemoon2); + + cLabel diffusemoon3 = GetLabel("icons/shadericons/shadericon00006.png", !Globals.NIMBUSLAF); + diffusemoon3.setToolTipText("Moon3"); + diffusemoon3.addMouseListener(new MouseAdapter() + { + public void mouseClicked(MouseEvent e) + { + Object3D object = Grafreed.materials.versionlist[6].get(0); + cMaterial material = object.material; + + diffusenessField.setFloat(material.factor); + selfshadowField.setFloat(material.diffuseness); + + materialtouched = true; + applySelf(); + } + }); + presetpanel.add(diffusemoon3); + + cLabel diffusesheen = GetLabel("icons/shadericons/shadericon00007.png", !Globals.NIMBUSLAF); + diffusesheen.setToolTipText("Sheen"); + diffusesheen.addMouseListener(new MouseAdapter() + { + public void mouseClicked(MouseEvent e) + { + Object3D object = Grafreed.materials.versionlist[7].get(0); + cMaterial material = object.material; + + sheenField.setFloat(material.sheen); + + materialtouched = true; + applySelf(); + } + }); + presetpanel.add(diffusesheen); + + cLabel rough = GetLabel("icons/shadericons/shadericon00001.png", !Globals.NIMBUSLAF); + rough.setToolTipText("Rough metal"); + rough.addMouseListener(new MouseAdapter() + { + public void mouseClicked(MouseEvent e) + { + Object3D object = Grafreed.materials.versionlist[1].get(0); + cMaterial material = object.material; + + shininessField.setFloat(material.shininess); + velvetField.setFloat(material.velvet); + + materialtouched = true; + applySelf(); + } + }); + presetpanel.add(rough); + + cLabel rough2 = GetLabel("icons/shadericons/shadericon00013.png", !Globals.NIMBUSLAF); + rough2.setToolTipText("Medium metal"); + rough2.addMouseListener(new MouseAdapter() + { + public void mouseClicked(MouseEvent e) + { + Object3D object = Grafreed.materials.versionlist[13].get(0); + cMaterial material = object.material; + + shininessField.setFloat(material.shininess); + lightareaField.setFloat(material.lightarea); + + materialtouched = true; + applySelf(); + } + }); + presetpanel.add(rough2); + + cLabel shini0 = GetLabel("icons/shadericons/shadericon00014.png", !Globals.NIMBUSLAF); + shini0.setToolTipText("Shiny"); + shini0.addMouseListener(new MouseAdapter() + { + public void mouseClicked(MouseEvent e) + { + Object3D object = Grafreed.materials.versionlist[14].get(0); + cMaterial material = object.material; + + shininessField.setFloat(material.shininess); + lightareaField.setFloat(material.lightarea); + + materialtouched = true; + applySelf(); + } + }); + presetpanel.add(shini0); + + cLabel shini1 = GetLabel("icons/shadericons/shadericon00011.png", !Globals.NIMBUSLAF); + shini1.setToolTipText("Shiny2"); + shini1.addMouseListener(new MouseAdapter() + { + public void mouseClicked(MouseEvent e) + { + Object3D object = Grafreed.materials.versionlist[11].get(0); + cMaterial material = object.material; + + shininessField.setFloat(material.shininess); + lightareaField.setFloat(material.lightarea); + + materialtouched = true; + applySelf(); + } + }); + presetpanel.add(shini1); + + cLabel shini2 = GetLabel("icons/shadericons/shadericon00012.png", !Globals.NIMBUSLAF); + shini2.setToolTipText("Shiny3"); + shini2.addMouseListener(new MouseAdapter() + { + public void mouseClicked(MouseEvent e) + { + Object3D object = Grafreed.materials.versionlist[12].get(0); + cMaterial material = object.material; + + shininessField.setFloat(material.shininess); + lightareaField.setFloat(material.lightarea); + + materialtouched = true; + applySelf(); + } + }); + presetpanel.add(shini2); + + cLabel aniso = GetLabel("icons/shadericons/shadericon00008.png", !Globals.NIMBUSLAF); + aniso.setToolTipText("AnisoU"); + aniso.addMouseListener(new MouseAdapter() + { + public void mouseClicked(MouseEvent e) + { + Object3D object = Grafreed.materials.versionlist[8].get(0); + cMaterial material = object.material; + + anisoField.setFloat(material.aniso); + anisoVField.setFloat(material.anisoV); + + materialtouched = true; + applySelf(); + } + }); + presetpanel.add(aniso); + + cLabel aniso2 = GetLabel("icons/shadericons/shadericon00009.png", !Globals.NIMBUSLAF); + aniso2.setToolTipText("AnisoV"); + aniso2.addMouseListener(new MouseAdapter() + { + public void mouseClicked(MouseEvent e) + { + Object3D object = Grafreed.materials.versionlist[9].get(0); + cMaterial material = object.material; + + anisoField.setFloat(material.aniso); + anisoVField.setFloat(material.anisoV); + + materialtouched = true; + applySelf(); + } + }); + presetpanel.add(aniso2); + + cLabel aniso3 = GetLabel("icons/shadericons/shadericon00010.png", !Globals.NIMBUSLAF); + aniso3.setToolTipText("AnisoUV"); + aniso3.addMouseListener(new MouseAdapter() + { + public void mouseClicked(MouseEvent e) + { + Object3D object = Grafreed.materials.versionlist[10].get(0); + cMaterial material = object.material; + + anisoField.setFloat(material.aniso); + anisoVField.setFloat(material.anisoV); + + materialtouched = true; + applySelf(); + } + }); + presetpanel.add(aniso3); + + cLabel velvet0 = GetLabel("icons/shadericons/shadericon00015.png", !Globals.NIMBUSLAF); + velvet0.setToolTipText("Velvet"); + velvet0.addMouseListener(new MouseAdapter() + { + public void mouseClicked(MouseEvent e) + { + Object3D object = Grafreed.materials.versionlist[15].get(0); + cMaterial material = object.material; + + diffusenessField.setFloat(material.factor); + selfshadowField.setFloat(material.diffuseness); + sheenField.setFloat(material.sheen); + shininessField.setFloat(material.shininess); + velvetField.setFloat(material.velvet); + shiftField.setFloat(material.shift); + + materialtouched = true; + applySelf(); + } + }); + presetpanel.add(velvet0); + + cLabel bump0 = GetLabel("icons/shadericons/shadericon00016.png", !Globals.NIMBUSLAF); + bump0.setToolTipText("Bump texture"); + bump0.addMouseListener(new MouseAdapter() + { + public void mouseClicked(MouseEvent e) + { + Object3D object = Grafreed.materials.versionlist[16].get(0); + cMaterial material = object.material; + + bumpField.setFloat(object.projectedVertices[0].x / 1000.0); + noiseField.setFloat(object.projectedVertices[0].y / 1000.0); + powerField.setFloat(object.projectedVertices[2].x / 1000.0); + + materialtouched = true; + applySelf(); + } + }); + presetpanel.add(bump0); + + cLabel borderShader = GetLabel("icons/shadericons/borderfade.jpg", !Globals.NIMBUSLAF); + borderShader.setToolTipText("Border fade"); + borderShader.addMouseListener(new MouseAdapter() + { + public void mouseClicked(MouseEvent e) + { + borderfadeField.setFloat(0.5); + opacityField.setFloat(0.75); + + materialtouched = true; + applySelf(); + } + }); + presetpanel.add(borderShader); + + cLabel halo = GetLabel("icons/shadericons/shadericon00017.png", !Globals.NIMBUSLAF); + halo.setToolTipText("Halo"); + halo.addMouseListener(new MouseAdapter() + { + public void mouseClicked(MouseEvent e) + { + Object3D object = Grafreed.materials.versionlist[17].get(0); + cMaterial material = object.material; + + opacityPowerField.setFloat(object.projectedVertices[2].y / 1000.0); + + materialtouched = true; + applySelf(); + } + }); + presetpanel.add(halo); + + cLabel candle = GetLabel("icons/shadericons/shadericon00018.png", !Globals.NIMBUSLAF); + candle.setToolTipText("Candle"); + candle.addMouseListener(new MouseAdapter() + { + public void mouseClicked(MouseEvent e) + { + Object3D object = Grafreed.materials.versionlist[18].get(0); + cMaterial material = object.material; + + subsurfaceField.setFloat(material.subsurface); + shadowbiasField.setFloat(material.shadowbias); + ambientField.setFloat(material.ambient); + specularField.setFloat(material.specular); + lightareaField.setFloat(material.lightarea); + shininessField.setFloat(material.shininess); + + materialtouched = true; + applySelf(); + } + }); + presetpanel.add(candle); + + cLabel shadowShader = GetLabel("icons/shadericons/shadow.png", !Globals.NIMBUSLAF); + shadowShader.setToolTipText("Shadow"); + shadowShader.addMouseListener(new MouseAdapter() + { + public void mouseClicked(MouseEvent e) + { + diffuseField.setFloat(0.001); + ambientField.setFloat(0.001); + cameraField.setFloat(0.001); + specularField.setFloat(0.001); + fakedepthField.setFloat(0.001); + opacityField.setFloat(0.6); + + materialtouched = true; + applySelf(); + } + }); + presetpanel.add(shadowShader); + + cGridBag panel = new cGridBag().setVertical(true); + + presetpanel.preferredWidth = 1; + + materialpanel.add(presetpanel); + materialpanel.add(panel); + + panel.preferredWidth = 8; + + /* ctrlPanel.add(materialLabel = new JLabel("MATERIAL : "), aConstraints); materialLabel.setHorizontalAlignment(SwingConstants.TRAILING); - */ + */ cGridBag editBar = new cGridBag().setVertical(false); - editBar.add(createMaterialButton = new cButton("Create", !Grafreed.NIMBUSLAF)); // , aConstraints); + editBar.add(createMaterialButton = new cButton("Create", !Globals.NIMBUSLAF)); // , aConstraints); createMaterialButton.setToolTipText("Create material"); /* ctrlPanel.add(resetSlidersButton = new cButton("Reset All"), aConstraints); */ - editBar.add(clearMaterialButton = new cButton("Clear", !Grafreed.NIMBUSLAF)); // , aConstraints); + editBar.add(clearMaterialButton = new cButton("Clear", !Globals.NIMBUSLAF)); // , aConstraints); clearMaterialButton.setToolTipText("Clear material"); if (Globals.ADVANCED) { - editBar.add(resetSlidersButton = new cButton("Reset", !Grafreed.NIMBUSLAF)); // , aConstraints); + editBar.add(resetSlidersButton = new cButton("Reset", !Globals.NIMBUSLAF)); // , aConstraints); editBar.add(propagateToggle = new cCheckBox("Prop", propagate)); // , aConstraints); editBar.add(multiplyToggle = new cCheckBox("Mult", false)); // , aConstraints); } @@ -1737,27 +2417,61 @@ //ctrlPanel.add(new JLabel("----------------------------------")); // , aConstraints); cGridBag colorSection = new cGridBag().setVertical(true); + + cGridBag huepanel = new cGridBag(); + cGridBag huelabel = new cGridBag(); + cLabel hue = GetLabel("icons/hue.png", false); + hue.fit = true; + + hue.addMouseListener(new MouseAdapter() + { + public void mousePressed(MouseEvent e) + { + int x = e.getX(); + + colorField.setFloat((double)x / ((cLabel)e.getSource()).getWidth()); + } + }); + + huelabel.add(hue); + huelabel.preferredWidth = 20; + huepanel.add(new cGridBag()); // Label + huepanel.add(huelabel); // Field/slider + + huepanel.preferredHeight = 7; + + colorSection.add(huepanel); cGridBag color = new cGridBag(); - color.add(colorLabel = new JLabel("Color/hue")); // , aConstraints); - colorLabel.setHorizontalAlignment(SwingConstants.TRAILING); - color.add(colorField = new cNumberSlider(this, 0.001, 1, -0.5)); // , aConstraints); + + color.add(colorLabel = new JLabel("Color/hue")); // , aConstraints); + colorLabel.setHorizontalAlignment(SwingConstants.TRAILING); + color.add(colorField = new cNumberSlider(this, 0.001, 1)); // , aConstraints); + //colorField.preferredWidth = 200; colorSection.add(color); cGridBag modulation = new cGridBag(); modulation.add(modulationLabel = new JLabel("Saturation")); // , aConstraints); modulationLabel.setHorizontalAlignment(SwingConstants.TRAILING); - modulation.add(modulationField = new cNumberSlider(this, 0.001, 1, -0.5)); // , aConstraints); + modulation.add(saturationField = new cNumberSlider(this, 0.001, 1)); // , aConstraints); colorSection.add(modulation); + cGridBag opacity = new cGridBag(); + opacity.add(opacityLabel = new JLabel("Opacity")); // , aConstraints); + opacityLabel.setHorizontalAlignment(SwingConstants.TRAILING); + opacity.add(opacityField = new cNumberSlider(this, 0.001, 1)); // , aConstraints); + colorSection.add(opacity); + + colorSection.add(GetSeparator()); + cGridBag texture = new cGridBag(); texture.add(textureLabel = new JLabel("Texture")); // , aConstraints); textureLabel.setHorizontalAlignment(SwingConstants.TRAILING); texture.add(textureField = new cNumberSlider(this, 0.001, 1, -0.5)); // , aConstraints); colorSection.add(texture); - panel.add(new JSeparator()); + panel.add(GetSeparator()); panel.add(colorSection); @@ -1813,7 +2527,7 @@ shadowbias.add(shadowbiasField = new cNumberSlider(this, 0.001, 50, -1)); // , aConstraints); diffuseSection.add(shadowbias); - panel.add(new JSeparator()); + panel.add(GetSeparator()); panel.add(diffuseSection); @@ -1876,7 +2590,7 @@ specularSection.add(anisoV); - panel.add(new JSeparator()); + panel.add(GetSeparator()); panel.add(specularSection); @@ -1901,12 +2615,6 @@ backlitLabel.setHorizontalAlignment(SwingConstants.TRAILING); backlit.add(backlitField = new cNumberSlider(this, 0.001, 50, -1)); // , aConstraints); colorSection.add(backlit); - - cGridBag opacity = new cGridBag(); - opacity.add(opacityLabel = new JLabel("Opacity")); // , aConstraints); - opacityLabel.setHorizontalAlignment(SwingConstants.TRAILING); - opacity.add(opacityField = new cNumberSlider(this, 0.001, 1, -0.5)); // , aConstraints); - colorSection.add(opacity); //panel.add(new JSeparator()); @@ -1952,7 +2660,7 @@ opacityPower.add(opacityPowerField = new cNumberSlider(this, 0.0, 10 /*10 dec 2013*/)); // , aConstraints); textureSection.add(opacityPower); - panel.add(new JSeparator()); + panel.add(GetSeparator()); panel.add(textureSection); @@ -2939,7 +3647,7 @@ freezematerial = true; colorField.setFloat(mat.color); - modulationField.setFloat(mat.modulation); + saturationField.setFloat(mat.modulation); metalnessField.setFloat(mat.metalness); diffuseField.setFloat(mat.diffuse); specularField.setFloat(mat.specular); @@ -3001,32 +3709,8 @@ if (multiplyToggle != null) multiplyToggle.setSelected(mat.multiply); - - assert (object.projectedVertices != null); - - if (object.projectedVertices.length <= 2) - { - // Side effect... - Object3D.cVector2[] keep = object.projectedVertices; - object.projectedVertices = new Object3D.cVector2[3]; - for (int i = 0; i < 3; i++) - { - if (i < keep.length) - { - object.projectedVertices[i] = keep[i]; - } else - { - object.projectedVertices[i] = new Object3D.cVector2(); - } - /* - if(keep.length == 0) - object.projectedVertices[0] = new Object3D.cVector2(); - else - object.projectedVertices[0] = keep[0]; - object.projectedVertices[1] = new Object3D.cVector2(); - */ - } - } + + AllocProjectedVertices(object); SetMaterial(mat, object.projectedVertices); } @@ -3146,6 +3830,17 @@ public void itemStateChanged(ItemEvent event) { // System.out.println("Propagate = " + propagate); + if (event.getSource() == pinButton) + { + copy.pinned ^= true; + if (!copy.pinned && !copy.editWindow.copy.selection.contains(copy)) + { + ((GroupEditor)copy.editWindow).listUI.remove(copy); + copy.CloseUI(); + //copy.editWindow.refreshContents(); + } + } + else if (event.getSource() == propagateToggle) { propagate ^= true; @@ -3250,6 +3945,7 @@ } else if (event.getSource() == liveCB) { copy.live ^= true; + objEditor.refreshContents(true); // To show item colors return; } else if (event.getSource() == selectableCB) { @@ -3259,7 +3955,7 @@ { copy.hide ^= true; copy.Touch(); // display list issue - objEditor.refreshContents(); + objEditor.refreshContents(true); // To show item colors return; } else if (event.getSource() == link2masterCB) { @@ -3324,7 +4020,7 @@ //System.out.println("ObjEditor " + event); applySelf0(true); //parent.applySelf(); - objEditor.refreshContents(); + // conflicts with requestFocus objEditor.refreshContents(); } else if (source == resetButton) { CameraPane.fullreset = true; @@ -3504,17 +4200,25 @@ void New() { - while (copy.Size() > 1) + while (copy.Size() > 0) { - copy.remove(1); + copy.remove(0); } + copy.selection.clear(); + + if (copy == Grafreed.grafreed.universe) + { + CreateCameras(); + cameraView.SetCamera(GetCamera(copy, 0)); + } ResetModel(); objEditor.refreshContents(); } static public byte[] Compress(Object3D o) { + // Slower to actually compress. try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); @@ -3616,6 +4320,7 @@ { //Save(true); Replace(); + SetVersionStates(); } private boolean Equal(byte[] compress, byte[] name) @@ -3634,31 +4339,50 @@ return true; } - java.util.Hashtable<java.util.UUID, Object3D> versiontable = new java.util.Hashtable<java.util.UUID, Object3D>(); + void DeleteVersion() + { + for (int i = copy.versionindex; i < copy.versionlist.length-1; i++) + { + copy.versionlist[i] = copy.versionlist[i+1]; + } + + if (copy.versionlist[copy.versionindex] == null) + copy.versionindex -= 1; + + if (copy.versionindex != -1) + CopyChanged(); + + SetVersionStates(); + } public boolean Save(boolean user) { System.err.println("Save"); + Replace(); - cRadio tab = GetCurrentTab(); + //cRadio tab = GetCurrentTab(); - byte[] compress = CompressCopy(); + Object3D compress = Duplicate(copy); // Saved version. No need for "Replace"? boolean thesame = false; - // Quick heuristic using length. Works only when stream is compressed. - if (copy.versionindex > 0 && copy.versions[copy.versionindex-1] != null && Equal(compress, copy.versions[copy.versionindex-1])) - { - thesame = true; - } +// if (copy.versionindex > 0 && copy.versions[copy.versionindex-1] != null && Equal(compress, copy.versions[copy.versionindex-1])) +// { +// thesame = true; +// } //EditorFrame.m_MainFrame.requestFocusInWindow(); if (!thesame) { + for (int i = copy.versionlist.length; --i > copy.versionindex+1;) + { + copy.versionlist[i] = copy.versionlist[i-1]; + } + //tab.user[tab.versionindex] = user; //boolean increment = true; // tab.graphs[tab.versionindex] == null; - copy.versions[++copy.versionindex] = compress; + copy.versionlist[++copy.versionindex] = compress; // if (increment) // tab.versionindex++; @@ -3668,13 +4392,13 @@ //assert(hashtable.isEmpty()); - for (int i = copy.versionindex+1; i < copy.versions.length; i++) - { - //tab.user[i] = false; - copy.versions[i] = null; - } +// for (int i = copy.versionindex+1; i < copy.versionlist.length; i++) +// { +// //tab.user[i] = false; +// copy.versionlist[i] = null; +// } - SetUndoStates(); + SetVersionStates(); // test save if (false) @@ -3697,27 +4421,65 @@ return !thesame; } - - void CopyChanged(Object3D obj) + + boolean flashIt = true; + + void RefreshSelection() { - SetUndoStates(); + Object3D selection = new Object3D(); + + for (int i = 0; i < copy.selection.size(); i++) + { + Object3D elem = copy.selection.elementAt(i); + + Object3D obj = copy.GetObject(elem.GetUUID()); + + if (obj == null) + { + copy.selection.remove(i--); + } + else + { + selection.add(obj); + copy.selection.setElementAt(obj, i); + } + } + + flashIt = false; + GetTree().clearSelection(); + for (int i = 0; i < selection.size(); i++) + GetTree().addSelectionPath(selection.elementAt(i).GetTreePath().GetTreePath()); + flashIt = true; + + //refreshContents(false); + } + + void CopyChanged() + { + Object3D obj = (Object3D)Grafreed.clone(copy.versionlist[copy.versionindex]); + + SetVersionStates(); boolean temp = CameraPane.SWITCH; CameraPane.SWITCH = false; - copy.ExtractBigData(versiontable); + copy.ExtractBigData(Grafreed.grafreed.universe.versiontable); copy.clear(); + copy.skyboxname = obj.skyboxname; + copy.skyboxext = obj.skyboxext; + for (int i=0; i<obj.Size(); i++) { copy.add(obj.get(i)); } - copy.RestoreBigData(versiontable); + copy.RestoreBigData(Grafreed.grafreed.universe.versiontable); CameraPane.SWITCH = temp; + RefreshSelection(); //assert(hashtable.isEmpty()); copy.Touch(); @@ -3738,13 +4500,15 @@ } } - refreshContents(); + refreshContents(true); } - cButton undoButton; + cButton previousVersionButton; cButton restoreButton; cButton replaceButton; - cButton redoButton; + cButton nextVersionButton; + cButton saveVersionButton; + cButton deleteVersionButton; boolean muteSlider; @@ -3752,39 +4516,64 @@ { int count = 0; - for (int i = copy.versions.length; --i >= 0;) + for (int i = copy.versionlist.length; --i >= 0;) { - if (copy.versions[i] != null) + if (copy.versionlist[i] != null) count++; } return count; } - void SetUndoStates() + public cGridBag versionSliderPane; + + void SetVersionStates() { - cRadio tab = GetCurrentTab(); + //if (true) + // return; + + //cRadio tab = GetCurrentTab(); - restoreButton.setEnabled(copy.versionindex != -1); - replaceButton.setEnabled(copy.versionindex != -1); - - undoButton.setEnabled(copy.versionindex > 0); - redoButton.setEnabled(copy.versions[copy.versionindex + 1] != null); - - muteSlider = true; - versionSlider.setMaximum(VersionCount() - 1); - versionSlider.setInteger(copy.versionindex); - muteSlider = false; + if (copy.versionlist == null) + { + saveVersionButton.setEnabled(false); + restoreButton.setEnabled(false); + replaceButton.setEnabled(false); + previousVersionButton.setEnabled(false); + nextVersionButton.setEnabled(false); + deleteVersionButton.setEnabled(false); + versionSliderPane.setVisible(false); + } + else + { + restoreButton.setEnabled(copy.versionindex != -1); + replaceButton.setEnabled(copy.versionindex != -1); + + previousVersionButton.setEnabled(copy.versionindex > 0); + nextVersionButton.setEnabled(copy.versionlist[copy.versionindex + 1] != null); + + deleteVersionButton.setEnabled(copy.versionindex != -1); + //copy.versionlist[copy.versionindex + 1] != null); + + muteSlider = true; + versionSlider.setMinimum(0); + versionSlider.setMaximum(VersionCount() - 1); + versionSlider.setInteger(copy.versionindex); + versionSlider.setEnabled(copy.versionindex != -1); + muteSlider = false; + + versionSliderPane.setVisible(true); + } } - public boolean Undo() + public boolean PreviousVersion() { // Option? Replace(); System.err.println("Undo"); - cRadio tab = GetCurrentTab(); + //cRadio tab = GetCurrentTab(); if (copy.versionindex == 0) { @@ -3807,7 +4596,7 @@ copy.versionindex -= 1; - CopyChanged((Object3D)Uncompress(copy.versions[copy.versionindex])); + CopyChanged(); return true; } @@ -3816,44 +4605,45 @@ { System.err.println("Restore"); - cRadio tab = GetCurrentTab(); + //cRadio tab = GetCurrentTab(); - if (copy.versionindex == -1 || copy.versions[copy.versionindex] == null) + if (copy.versionindex == -1 || copy.versionlist[copy.versionindex] == null) { java.awt.Toolkit.getDefaultToolkit().beep(); return false; } - CopyChanged((Object3D)Uncompress(copy.versions[copy.versionindex])); + //CopyChanged((Object3D)Uncompress(copy.versions[copy.versionindex])); + CopyChanged(); return true; } public boolean Replace() { - System.err.println("Replace"); + //System.err.println("Replace"); - cRadio tab = GetCurrentTab(); + //cRadio tab = GetCurrentTab(); - if (copy.versionindex == -1 || copy.versions[copy.versionindex] == null) + if (copy.versionindex == -1 || copy.versionlist[copy.versionindex] == null) { // No version yet. OK. java.awt.Toolkit.getDefaultToolkit().beep(); return false; } - copy.versions[copy.versionindex] = CompressCopy(); + copy.versionlist[copy.versionindex] = Duplicate(copy); return true; } - public void Redo() + public void NextVersion() { // Option? Replace(); - cRadio tab = GetCurrentTab(); + //cRadio tab = GetCurrentTab(); - if (copy.versions[copy.versionindex + 1] == null) + if (copy.versionlist[copy.versionindex + 1] == null) { java.awt.Toolkit.getDefaultToolkit().beep(); return; @@ -3861,7 +4651,7 @@ copy.versionindex += 1; - CopyChanged((Object3D)Uncompress(copy.versions[copy.versionindex])); + CopyChanged(); //if (!tab.user[tab.versionindex]) // tab.graphs[tab.versionindex] = null; @@ -4058,6 +4848,12 @@ // else // applySelf(true); // } + + boolean Equal(double a, double b) + { + return Math.abs(a - b) < 0.001; + } + void applySelf0(boolean name) { if (name) @@ -4075,7 +4871,7 @@ //copy.material = new cMaterial(copy.GetMaterial()); current.color = (float) colorField.getFloat(); - current.modulation = (float) modulationField.getFloat(); + current.modulation = (float) saturationField.getFloat(); current.metalness = (float) metalnessField.getFloat(); current.diffuse = (float) diffuseField.getFloat(); current.specular = (float) specularField.getFloat(); @@ -4107,29 +4903,52 @@ { cMaterial mat = copy.material; - colorField.SetToolTipValue((mat.color)); - modulationField.SetToolTipValue((mat.modulation)); - metalnessField.SetToolTipValue((mat.metalness)); - diffuseField.SetToolTipValue((mat.diffuse)); - specularField.SetToolTipValue((mat.specular)); - shininessField.SetToolTipValue((mat.shininess)); - shiftField.SetToolTipValue((mat.shift)); - ambientField.SetToolTipValue((mat.ambient)); - lightareaField.SetToolTipValue((mat.lightarea)); - diffusenessField.SetToolTipValue((mat.factor)); - velvetField.SetToolTipValue((mat.velvet)); - sheenField.SetToolTipValue((mat.sheen)); - subsurfaceField.SetToolTipValue((mat.subsurface)); - backlitField.SetToolTipValue((mat.bump)); - anisoField.SetToolTipValue((mat.aniso)); - anisoVField.SetToolTipValue((mat.anisoV)); - cameraField.SetToolTipValue((mat.cameralight)); - selfshadowField.SetToolTipValue((mat.diffuseness)); - shadowField.SetToolTipValue((mat.shadow)); - textureField.SetToolTipValue((mat.texture)); - opacityField.SetToolTipValue((mat.opacity)); - fakedepthField.SetToolTipValue((mat.fakedepth)); - shadowbiasField.SetToolTipValue((mat.shadowbias)); + if (!Equal(colorField.getFloat(), mat.color)) + colorField.SetToolTipValue((mat.color)); + if (!Equal(saturationField.getFloat(), mat.modulation)) + saturationField.SetToolTipValue((mat.modulation)); + if (!Equal(metalnessField.getFloat(), mat.metalness)) + metalnessField.SetToolTipValue((mat.metalness)); + if (!Equal(diffuseField.getFloat(), mat.diffuse)) + diffuseField.SetToolTipValue((mat.diffuse)); + if (!Equal(specularField.getFloat(), mat.specular)) + specularField.SetToolTipValue((mat.specular)); + if (!Equal(shininessField.getFloat(), mat.shininess)) + shininessField.SetToolTipValue((mat.shininess)); + if (!Equal(shiftField.getFloat(), mat.shift)) + shiftField.SetToolTipValue((mat.shift)); + if (!Equal(ambientField.getFloat(), mat.ambient)) + ambientField.SetToolTipValue((mat.ambient)); + if (!Equal(lightareaField.getFloat(), mat.lightarea)) + lightareaField.SetToolTipValue((mat.lightarea)); + if (!Equal(diffusenessField.getFloat(), mat.factor)) + diffusenessField.SetToolTipValue((mat.factor)); + if (!Equal(velvetField.getFloat(), mat.velvet)) + velvetField.SetToolTipValue((mat.velvet)); + if (!Equal(sheenField.getFloat(), mat.sheen)) + sheenField.SetToolTipValue((mat.sheen)); + if (!Equal(subsurfaceField.getFloat(), mat.subsurface)) + subsurfaceField.SetToolTipValue((mat.subsurface)); + if (!Equal(backlitField.getFloat(), mat.bump)) + backlitField.SetToolTipValue((mat.bump)); + if (!Equal(anisoField.getFloat(), mat.aniso)) + anisoField.SetToolTipValue((mat.aniso)); + if (!Equal(anisoVField.getFloat(), mat.anisoV)) + anisoVField.SetToolTipValue((mat.anisoV)); + if (!Equal(cameraField.getFloat(), mat.cameralight)) + cameraField.SetToolTipValue((mat.cameralight)); + if (!Equal(selfshadowField.getFloat(), mat.diffuseness)) + selfshadowField.SetToolTipValue((mat.diffuseness)); + if (!Equal(shadowField.getFloat(), mat.shadow)) + shadowField.SetToolTipValue((mat.shadow)); + if (!Equal(textureField.getFloat(), mat.texture)) + textureField.SetToolTipValue((mat.texture)); + if (!Equal(opacityField.getFloat(), mat.opacity)) + opacityField.SetToolTipValue((mat.opacity)); + if (!Equal(fakedepthField.getFloat(), mat.fakedepth)) + fakedepthField.SetToolTipValue((mat.fakedepth)); + if (!Equal(shadowbiasField.getFloat(), mat.shadowbias)) + shadowbiasField.SetToolTipValue((mat.shadowbias)); } if (copy.material != null && copy.projectedVertices.length > 0 && copy.projectedVertices[0] != null) @@ -4164,17 +4983,20 @@ public void stateChanged(ChangeEvent e) { - // assert(false); + // assert(false); if (e.getSource() == versionSlider) { if (muteSlider) return; + Replace(); + int version = versionSlider.getInteger(); - if (copy.versions[version] != null) + if (version != -1 && copy.versionlist[version] != null) { - CopyChanged((Object3D)Uncompress(copy.versions[copy.versionindex = version])); + copy.versionindex = version; + CopyChanged(); } return; @@ -4214,6 +5036,12 @@ { //System.out.println("stateChanged = " + this); materialtouched = true; + + if (Globals.AUTOSATURATE && e.getSource() == colorField && saturationField.getFloat() == 0.001) + { + saturationField.setFloat(1); + } + applySelf(); //System.out.println("this = " + this); //System.out.println("PARENT = " + parent); @@ -4513,6 +5341,7 @@ { if (GetTree() != null) { + GetTree().revalidate(); GetTree().repaint(); } @@ -4521,6 +5350,11 @@ ctrlPanel.validate(); // ? new ctrlPanel.repaint(); } + + if (previousVersionButton != null && copy.versionlist != null) + SetVersionStates(); + + cameraView.requestFocusInWindow(); } static TweenManager tweenManager = new TweenManager(); @@ -4552,7 +5386,7 @@ // group = (Composite) group.get(0); // } - System.out.println("makeSomething of " + thing); + //System.out.println("makeSomething of " + thing); /* if (deselect && jList != null) @@ -4769,7 +5603,9 @@ readobj.ResetDisplayList(); } catch (Exception e) { - e.printStackTrace(); + if (!e.toString().contains("GZIP")) + e.printStackTrace(); + try { java.io.FileInputStream istream = new java.io.FileInputStream(fullname); @@ -4849,6 +5685,8 @@ { //readobj.deepCopySelf(copy); copy.clear(); // june 2014 + copy.skyboxname = readobj.skyboxname; + copy.skyboxext = readobj.skyboxext; for (int i = 0; i < readobj.size(); i++) { Object3D child = readobj.get(i); // reserve(i); @@ -4900,13 +5738,17 @@ c.addChild(csg); } - copy.versions = readobj.versions; + copy.versionlist = readobj.versionlist; copy.versionindex = readobj.versionindex; + copy.versiontable = readobj.versiontable; - if (copy.versions == null) + if (copy.versionlist == null) { - copy.versions = new byte[100][]; + // Backward compatibility + copy.versionlist = new Object3D[100]; copy.versionindex = -1; + + //Save(true); } //? SetUndoStates(); @@ -4921,7 +5763,7 @@ { if (Grafreed.standAlone) { - FileDialog browser = new FileDialog(frame, "Load", FileDialog.LOAD); + FileDialog browser = new FileDialog(frame, "Open", FileDialog.LOAD); browser.show(); String filename = browser.getFile(); if (filename != null && filename.length() > 0) @@ -4998,6 +5840,8 @@ void save() { + Replace(); + if (lastname == null) { return; @@ -5240,6 +6084,7 @@ ButtonGroup buttonGroup; cGridBag toolboxPanel; + cGridBag skyboxPanel; cGridBag materialPanel; cGridBag ctrlPanel; @@ -5251,6 +6096,7 @@ boolean materialFlushed; Object3D latestObject; + cGridBag transformPanel; cGridBag XYZPanel; JSplitPane gridPanel; @@ -5313,7 +6159,7 @@ JLabel colorLabel; cNumberSlider colorField; JLabel modulationLabel; - cNumberSlider modulationField; + cNumberSlider saturationField; JLabel metalnessLabel; cNumberSlider metalnessField; JLabel diffuseLabel; @@ -5344,6 +6190,7 @@ cNumberSlider anisoField; JLabel anisoVLabel; cNumberSlider anisoVField; + JLabel cameraLabel; cNumberSlider cameraField; JLabel selfshadowLabel; @@ -5358,6 +6205,7 @@ cNumberSlider fakedepthField; JLabel shadowbiasLabel; cNumberSlider shadowbiasField; + JLabel bumpLabel; cNumberSlider bumpField; JLabel noiseLabel; -- Gitblit v1.6.2