From b3ae4e889872ca0b9ca76f1d17b2f0b961226729 Mon Sep 17 00:00:00 2001 From: Normand Briere <nbriere@noware.ca> Date: Mon, 05 Aug 2019 21:48:55 -0400 Subject: [PATCH] Fix physics UI --- ObjEditor.java | 2812 +++++++++++++++++++++++++++++++++++++++++++---------------- 1 files changed, 2,057 insertions(+), 755 deletions(-) diff --git a/ObjEditor.java b/ObjEditor.java index 4b1a4fd..c2efc4b 100644 --- a/ObjEditor.java +++ b/ObjEditor.java @@ -4,6 +4,7 @@ import java.awt.*; import java.awt.event.*; +import java.awt.image.BufferedImage; import javax.swing.*; import javax.swing.event.*; import javax.swing.text.*; @@ -14,10 +15,15 @@ //import javax.swing.plaf.ColorUIResource; //import javax.swing.plaf.metal.DefaultMetalTheme; +import javax.swing.plaf.basic.BasicSplitPaneDivider; +import javax.swing.plaf.basic.BasicSplitPaneUI; + //import javax.media.opengl.GLCanvas; import //weka.core. matrix.Matrix; + +import grafeme.ui.*; class ObjEditor /*extends JFrame*/ implements iCallBack, ObjectUI, ActionListener, ChangeListener, @@ -28,7 +34,87 @@ iSendInfo //KeyListener { + boolean timeline; + boolean wasFullScreen; + GroupEditor callee; + JFrame frame; + + static ObjEditor theFrame; + + 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); + } + + cLabel GetLabel(String name, boolean border) + { + //ImageIcon icon = GetIcon(name); + return new cLabel(GetImage(name), border); + } + + cToggleButton GetToggleButton(String name, boolean border) + { + ImageIcon icon = GetIcon(name); + return new cToggleButton(icon, border); + } + + cCheckBox GetCheckBox(String name, boolean border) + { + ImageIcon icon = GetIcon(name); + return new cCheckBox(icon, border); + } + + ImageIcon GetIcon(String name) + { + try + { + BufferedImage image = javax.imageio.ImageIO.read(getClass().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); + return icon; + } + catch (Exception e) + { + return null; + } + } + + BufferedImage GetImage(String name) + { + try + { + BufferedImage image = javax.imageio.ImageIO.read(getClass().getClassLoader().getResourceAsStream(name)); + + return image; + } + catch (Exception e) + { + return null; + } + } + // SCRIPT transient JFrame textpanel = null; @@ -119,51 +205,62 @@ void keyPressed(int key, int modifiers) { System.out.println("KEY PRESSED"); - CameraPane.theRenderer.keyPressed(key, modifiers); + Globals.theRenderer.keyPressed(key, modifiers); } */ static GridBagConstraints aConstraints; static GridBagConstraints aWindowConstraints; - GroupEditor callee; - JFrame frame; + static int GRIDWIDTH = 100; // 4; public void closeUI() { //new Exception().printStackTrace(); - System.out.println("this = " + this); - System.out.println("objEditor = " + objEditor); +// System.out.println("this = " + this); +// System.out.println("objEditor = " + objEditor); //nameField.removeActionListener(this); - objEditor.ctrlPanel.remove(nameField); +// objEditor.ctrlPanel.remove(nameField); - if (!GroupEditor.allparams) + objEditor.ctrlPanel.remove(namePanel); + + if (!allparams) return; - objEditor.ctrlPanel.remove(liveCB); - objEditor.ctrlPanel.remove(hideCB); - objEditor.ctrlPanel.remove(markCB); - - objEditor.ctrlPanel.remove(randomCB); - objEditor.ctrlPanel.remove(speedupCB); - objEditor.ctrlPanel.remove(rewindCB); - - objEditor.ctrlPanel.remove(resetButton); - objEditor.ctrlPanel.remove(stepButton); -// objEditor.ctrlPanel.remove(stepAllButton); -// objEditor.ctrlPanel.remove(resetAllButton); - objEditor.ctrlPanel.remove(link2masterCB); - //objEditor.ctrlPanel.remove(flipVCB); - //objEditor.ctrlPanel.remove(texresMenu); - objEditor.ctrlPanel.remove(slowerButton); - objEditor.ctrlPanel.remove(fasterButton); - objEditor.ctrlPanel.remove(remarkButton); +// objEditor.ctrlPanel.remove(liveCB); +// objEditor.ctrlPanel.remove(hideCB); +// objEditor.ctrlPanel.remove(markCB); +// +// objEditor.ctrlPanel.remove(randomCB); +// objEditor.ctrlPanel.remove(speedupCB); +// objEditor.ctrlPanel.remove(rewindCB); +// +// objEditor.ctrlPanel.remove(resetButton); +// objEditor.ctrlPanel.remove(stepButton); +//// objEditor.ctrlPanel.remove(stepAllButton); +//// objEditor.ctrlPanel.remove(resetAllButton); +// objEditor.ctrlPanel.remove(link2masterCB); +// //objEditor.ctrlPanel.remove(flipVCB); +// //objEditor.ctrlPanel.remove(texresMenu); +// objEditor.ctrlPanel.remove(slowerButton); +// objEditor.ctrlPanel.remove(fasterButton); +// objEditor.ctrlPanel.remove(remarkButton); + + objEditor.ctrlPanel.remove(setupPanel); + objEditor.ctrlPanel.remove(setupPanel2); + objEditor.ctrlPanel.remove(objectCommandsPanel); + objEditor.ctrlPanel.remove(pushPanel); + //objEditor.ctrlPanel.remove(fillPanel); + + //Remove(normalpushField); } public ObjEditor GetEditor() { return objEditor; //.GetEditor(); } + + // Sometimes myself, sometimes my callee's. ObjEditor objEditor; /* @@ -199,6 +296,12 @@ client = inClient; copy = client; + if (copy.versionlist == null) + { + copy.versionlist = new Object3D[100]; + copy.versionindex = -1; + } + // "this" is not called: SetupUI2(objEditor); } @@ -212,6 +315,12 @@ client = inClient; copy = client; + if (copy.versionlist == null) + { + copy.versionlist = new Object3D[100]; + copy.versionindex = -1; + } + SetupUI2(callee.GetEditor()); } @@ -226,6 +335,7 @@ //localCopy.parent = null; frame = new JFrame(); + frame.setUndecorated(false); objEditor = this; this.callee = callee; @@ -238,11 +348,17 @@ //if (!isDisplayable()) //setUndecorated(true); - System.out.println("getFullScreenWindow? " + gd.getFullScreenWindow()); + //System.out.println("getFullScreenWindow? " + gd.getFullScreenWindow()); client = inClient; copy = localCopy; copy.editWindow = this; + if (copy.versionlist == null) + { +// copy.versions = new byte[100][]; +// copy.versionindex = -1; + } + SetupMenu(); //SetupName(objEditor); // new @@ -256,28 +372,49 @@ return frame.action(event, obj); } + // Cannot work without static + static boolean allparams = true; + + static java.util.Vector<Object3D> listUI = new java.util.Vector<Object3D>(); + void SetupMenu() { frame.setMenuBar(menuBar = new MenuBar()); - menuBar.add(windowMenu = new Menu("File")); - windowMenu.add(loadItem = new MenuItem("Load...")); - windowMenu.add("-"); - windowMenu.add(saveItem = new MenuItem("Save")); - windowMenu.add(saveAsItem = new MenuItem("Save As...")); + menuBar.add(fileMenu = new Menu("File")); + fileMenu.add(newItem = new MenuItem("New")); + fileMenu.add(openItem = new MenuItem("Open...")); + + //oe.menuBar.add(menu = new Menu("Include")); + Menu menu = new Menu("Import"); + importOBJItem = menu.add(new MenuItem("OBJ file...")); + importOBJItem.addActionListener(this); + import3DSItem = menu.add(new MenuItem("3DS file...")); + import3DSItem.addActionListener(this); + importVRMLX3DItem = menu.add(new MenuItem("VRML/X3D file...")); + importVRMLX3DItem.addActionListener(this); + menu.add("-"); + importGFDItem = menu.add(new MenuItem("Grafreed file...")); + importGFDItem.addActionListener(this); + fileMenu.add(menu); + fileMenu.add("-"); + + fileMenu.add(saveItem = new MenuItem("Save")); + fileMenu.add(saveAsItem = new MenuItem("Save As...")); //windowMenu.add(povItem = new MenuItem("Emit POV-Ray...")); - windowMenu.add("-"); - windowMenu.add(exportAsItem = new MenuItem("Export Selection...")); - windowMenu.add(reexportItem = new MenuItem("Re-export")); - windowMenu.add("-"); + fileMenu.add("-"); + fileMenu.add(exportAsItem = new MenuItem("Export Selection...")); + fileMenu.add(reexportItem = new MenuItem("Re-export")); + fileMenu.add("-"); if (client.parent != null) { - windowMenu.add(closeItem = new MenuItem("Close")); + fileMenu.add(closeItem = new MenuItem("Close")); } else { - windowMenu.add(closeItem = new MenuItem("Exit")); + fileMenu.add(closeItem = new MenuItem("Exit")); } - loadItem.addActionListener(this); + newItem.addActionListener(this); + openItem.addActionListener(this); saveItem.addActionListener(this); saveAsItem.addActionListener(this); exportAsItem.addActionListener(this); @@ -285,80 +422,69 @@ //povItem.addActionListener(this); closeItem.addActionListener(this); - menuBar.add(cameraMenu = new Menu("View")); - //cameraMenu.add(zBufferItem = new CheckboxMenuItem("Z Buffer")); - //zBufferItem.addActionListener(this); - //cameraMenu.add(normalLensItem = new MenuItem("Normal Lens")); - //normalLensItem.addActionListener(this); - cameraMenu.add(revertCameraItem = new MenuItem("Revert Camera")); - revertCameraItem.addActionListener(this); - cameraMenu.add(toggleFullItem = new CheckboxMenuItem("Full Screen")); - toggleFullItem.addItemListener(this); - toggleFullItem.setState(CameraPane.FULLSCREEN); - cameraMenu.add("-"); - cameraMenu.add(toggleTextureItem = new CheckboxMenuItem("Texture")); - toggleTextureItem.addItemListener(this); - toggleTextureItem.setState(CameraPane.textureon); - cameraMenu.add(toggleLiveItem = new CheckboxMenuItem("Live")); - toggleLiveItem.addItemListener(this); - toggleLiveItem.setState(CameraPane.isLIVE()); - cameraMenu.add(stepItem = new MenuItem("Step")); - stepItem.addActionListener(this); -// cameraMenu.add(toggleDLItem = new CheckboxMenuItem("Display List")); -// toggleDLItem.addItemListener(this); -// toggleDLItem.setState(false); - cameraMenu.add(toggleRenderItem = new CheckboxMenuItem("Render")); - toggleRenderItem.addItemListener(this); - toggleRenderItem.setState(!CameraPane.frozen); - cameraMenu.add(toggleDebugItem = new CheckboxMenuItem("Debug")); - toggleDebugItem.addItemListener(this); - toggleDebugItem.setState(CameraPane.DEBUG); - cameraMenu.add(toggleFrustumItem = new CheckboxMenuItem("Frustum")); - toggleFrustumItem.addItemListener(this); - toggleFrustumItem.setState(CameraPane.FRUSTUM); - cameraMenu.add(toggleFootContactItem = new CheckboxMenuItem("Foot contact")); - toggleFootContactItem.addItemListener(this); - toggleFootContactItem.setState(CameraPane.FOOTCONTACT); - cameraMenu.add(toggleRandomItem = new CheckboxMenuItem("Random")); - toggleRandomItem.addItemListener(this); - toggleRandomItem.setState(CameraPane.RANDOM); - cameraMenu.add(toggleHandleItem = new CheckboxMenuItem("Handles")); - toggleHandleItem.addItemListener(this); - toggleHandleItem.setState(CameraPane.HANDLES); - cameraMenu.add(togglePaintItem = new CheckboxMenuItem("Paint mode")); - togglePaintItem.addItemListener(this); - togglePaintItem.setState(CameraPane.PAINTMODE); -// cameraMenu.add(toggleRootItem = new CheckboxMenuItem("Alternate Root")); -// toggleRootItem.addItemListener(this); -// toggleRootItem.setState(false); -// cameraMenu.add(animationItem = new CheckboxMenuItem("Animation")); -// animationItem.addItemListener(this); -// animationItem.setState(CameraPane.ANIMATION); - cameraMenu.add("-"); - cameraMenu.add(editCameraItem = new MenuItem("Freeze Camera")); - editCameraItem.addActionListener(this); - objectPanel = new JTabbedPane(); + + ChangeListener changeListener = new ChangeListener() + { + public void stateChanged(ChangeEvent changeEvent) + { +// if (objectPanel.getSelectedIndex() == objectPanel.indexOfTab("Material") && !materialFlushed) +// { +// if (latestObject != null) +// { +// refreshContents(true); +// SetMaterial(latestObject); +// } +// +// materialFlushed = true; +// } +// if (objectPanel.getSelectedIndex() == objectPanel.indexOfTab("Edit")) +// { +// if (listUI.size() == 0) +// EditSelection(false); +// } + + refreshContents(false); // To refresh Info tab + } + }; + objectPanel.addChangeListener(changeListener); + toolbarPanel = new JPanel(); toolbarPanel.setName("Toolbar"); - treePanel = new JPanel(); + + treePanel = new cGridBag(); treePanel.setName("Tree"); - ctrlPanel = new JPanel(); // new GridBagLayout()); - ctrlPanel.setName("Edit"); - materialPanel = new JPanel(); - materialPanel.setName("Material"); + + editPanel = new cGridBag().setVertical(true); + //editPanel.setName("Edit"); + + ctrlPanel = new cGridBag().setVertical(false); // new GridBagLayout()); + + editCommandsPanel = new cGridBag(); + editPanel.add(editCommandsPanel); + editPanel.add(ctrlPanel); + + toolboxPanel = new cGridBag().setVertical(true); + //toolboxPanel.setName("Toolbox"); + + materialPanel = new cGridBag().setVertical(false); + //materialPanel.setName("Material"); + /*JTextPane*/ infoarea = createTextPane(); + doc = infoarea.getStyledDocument(); + infoarea.setEditable(true); SetText(); + // infoarea.setFont(infoarea.getFont().deriveFont(10, 14f)); // infoarea.setOpaque(false); // //infoarea.setForeground(textcolor); - infoarea.setLineWrap(true); - infoarea.setWrapStyleWord(true); +// TEXTAREA infoarea.setLineWrap(true); +// TEXTAREA infoarea.setWrapStyleWord(true); infoPanel = new JScrollPane(infoarea, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); //AS_NEEDED); - infoPanel.setPreferredSize(new Dimension(50, 200)); - infoPanel.setName("Info"); + infoPanel.setPreferredSize(new Dimension(1, 1)); + //infoPanel.setName("Info"); //infoPanel.setLayout(new BorderLayout()); //infoPanel.add(createTextPane()); @@ -366,16 +492,23 @@ mainPanel.setName("Main"); mainPanel.setContinuousLayout(true); mainPanel.setOneTouchExpandable(true); - mainPanel.setDividerLocation(1.0); mainPanel.setDividerSize(9); - mainPanel.setResizeWeight(0); - + mainPanel.setDividerLocation(0.5); //1.0); + mainPanel.setResizeWeight(0.5); + +//mainPanel.setDividerSize((int) (mainPanel.getDividerSize() * 1.5)); + BasicSplitPaneDivider divider = ( (BasicSplitPaneUI) mainPanel.getUI()).getDivider(); + divider.setDividerSize(15); + divider.setBorder(BorderFactory.createTitledBorder(divider.getBorder(), "Custom border title -- gets rid of the one-touch arrows!")); + + mainPanel.setUI(new BasicSplitPaneUI()); + //ctrlPanel.setLayout(new GridLayout(4, 1, 5, 5)); //mainPanel.setLayout(new GridBagLayout()); toolbarPanel.setLayout(new FlowLayout(FlowLayout.LEFT)); - treePanel.setLayout(new GridBagLayout()); - ctrlPanel.setLayout(new GridBagLayout()); - materialPanel.setLayout(new GridBagLayout()); +// treePanel.setLayout(new GridBagLayout()); + //ctrlPanel.setLayout(new GridBagLayout()); + //materialPanel.setLayout(new GridBagLayout()); aConstraints = new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0, GridBagConstraints.NORTHEAST, GridBagConstraints.BOTH, new Insets(1, 1, 1, 1), 0, 0); @@ -414,7 +547,7 @@ static String newline = "\n"; protected static final String buttonString = "JButton"; StyledDocument doc; - JTextArea infoarea; + JTextPane infoarea; void ClearInfo() { @@ -437,10 +570,10 @@ e.printStackTrace(); } - String selection = infoarea.getText(); - java.awt.datatransfer.StringSelection data = new java.awt.datatransfer.StringSelection(selection); - java.awt.datatransfer.Clipboard clipboard = - Toolkit.getDefaultToolkit().getSystemClipboard(); +// String selection = infoarea.getText(); +// java.awt.datatransfer.StringSelection data = new java.awt.datatransfer.StringSelection(selection); +// java.awt.datatransfer.Clipboard clipboard = +// Toolkit.getDefaultToolkit().getSystemClipboard(); //clipboard.setContents(data, data); } @@ -463,13 +596,13 @@ //SendInfo("Name:", "bold"); if (sel.GetTextures() != null || debug) { - si.SendInfo(sel.toString(), "bold"); + si.SendInfo(sel.toString() + (Globals.ADVANCED?"":" " + System.identityHashCode(sel)), "bold"); //SendInfo("#children virtual = " + sel.size() + "; real = " + sel.Size() + newline, "regular"); if (sel.Size() > 0) { si.SendInfo("#children = " + sel.Size(), "regular"); } - si.SendInfo((debug ? " Parent: " : " ") + sel.parent, "regular"); + si.SendInfo((debug ? " Parent: " : " ") + sel.parent + (Globals.ADVANCED?"":" " + System.identityHashCode(sel.parent)), "regular"); if (debug) { try @@ -481,7 +614,10 @@ } if (full) - si.SendInfo(" BBox: " + minima + " - " + maxima, "regular"); + { + si.SendInfo(" BBox min: " + minima, "regular"); + si.SendInfo(" BBox max: " + maxima, "regular"); + } if (sel.bRep != null) { @@ -508,7 +644,7 @@ } if (sel.support != null) { - si.SendInfo(" support: " + sel.support, "regular"); + si.SendInfo(" support: " + sel.support + (Globals.ADVANCED?"":" " + System.identityHashCode(sel.support)), "regular"); } if (sel.scriptnode != null) { @@ -579,6 +715,9 @@ { CameraPane.pointflow = (PointFlow) sel; } + + si.SendInfo("_____________________", "regular"); + si.SendInfo("", "regular"); } } @@ -594,52 +733,194 @@ } } - private JTextArea createTextPane() - { - String[] initString = - { - "This is an editable JTextPane, ", //regular - "another ", //italic - "styled ", //bold - "text ", //small - "component, ", //large - "which supports embedded components..." + newline,//regular - " " + newline, //button - "...and embedded icons..." + newline, //regular - " ", //icon - newline + "JTextPane is a subclass of JEditorPane that " - + "uses a StyledEditorKit and StyledDocument, and provides " - + "cover methods for interacting with those objects." - }; +//static GraphicsDevice device = GraphicsEnvironment +// .getLocalGraphicsEnvironment().getScreenDevices()[0]; - String[] initStyles = - { - "regular", "italic", "bold", "small", "large", - "regular", "button", "regular", "icon", - "regular" - }; + Rectangle keeprect; + cRadio radio; + +cButton keepButton; + cButton twoButton; // Full 3D + cButton sixButton; + cButton threeButton; + cButton sevenButton; + cButton fourButton; // full panel + cButton oneButton; // full XYZ + //cButton currentLayout; + + boolean maximized; + + cButton fullscreenLayout; - JTextPane textPane = new JTextPane(); - textPane.setEditable(true); - /*StyledDocument*/ doc = textPane.getStyledDocument(); - addStylesToDocument(doc); - - try + void Minimize() { - for (int j = 0; j < 2; j++) + frame.setState(Frame.ICONIFIED); + frame.validate(); + } + +// artifactURI=null, type=0, property=${file.reference.jfxrt.jar}, object=org.netbeans.modules.java.api.common.classpath.ClassPathSupport$RelativePath@6767876f, broken=false, additional={} +// artifactURI=null, type=0, property=${file.reference.mac-ui.jar}, object=org.netbeans.modules.java.api.common.classpath.ClassPathSupport$RelativePath@16bdc817, broken=false, additional={} +// artifactURI=null, type=0, property=${file.reference.classes.jar}, object=org.netbeans.modules.java.api.common.classpath.ClassPathSupport$RelativePath@9daa9c17, broken=false, additional={} + void Maximize() + { + if (CameraPane.FULLSCREEN) { - for (int i = 0; i < initString.length; i++) - { - doc.insertString(doc.getLength(), initString[i], - doc.getStyle(initStyles[i])); - } + ToggleFullScreen(); } - } catch (BadLocationException ble) + + if (maximized) + { + frame.setBounds(keeprect.x, keeprect.y, keeprect.width, keeprect.height); + } + else + { + keeprect = frame.getBounds(); +// Rectangle rect = GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds(); +// Dimension rect2 = frame.getToolkit().getScreenSize(); +// frame.setBounds(0, rect2.height - rect.height, rect.width, rect.height); +// frame.setState(Frame.MAXIMIZED_BOTH); + frame.setBounds(frame.getGraphicsConfiguration().getBounds()); + } + + maximized ^= true; + + frame.validate(); + } + + cButton minButton; + cButton maxButton; + cButton fullButton; + + void ToggleFullScreen() { - System.err.println("Couldn't insert initial text into text pane."); +GraphicsDevice device = frame.getGraphicsConfiguration().getDevice(); + + cameraView.ToggleFullScreen(); + + if (!CameraPane.FULLSCREEN) + { + device.setFullScreenWindow(null); + frame.dispose(); + frame.setUndecorated(false); + frame.validate(); + frame.setVisible(true); + + //frame.setVisible(false); +// frame.removeNotify(); +// frame.setUndecorated(false); +// frame.addNotify(); + //frame.setBounds(keeprect.x, keeprect.y, keeprect.width, keeprect.height); + +// X frame.getContentPane().remove(/*"Center",*/bigThree); +// X framePanel.add(bigThree); +// X frame.getContentPane().add(/*"Center",*/framePanel); + framePanel.setDividerLocation(46); + + //frame.setVisible(true); + radio.layout = keepButton; + //theFrame = null; + keepButton = null; + radio.layout.doClick(); + + } else + { + keepButton = radio.layout; + //keeprect = frame.getBounds(); +// frame.setBounds(0, 0, frame.getToolkit().getScreenSize().width, +// frame.getToolkit().getScreenSize().height); + //frame.setVisible(false); + + frame.dispose(); + frame.setUndecorated(true); + device.setFullScreenWindow(frame); + frame.validate(); + frame.setVisible(true); +// frame.removeNotify(); +// frame.setUndecorated(true); +// frame.addNotify(); +// X frame.getContentPane().remove(/*"Center",*/framePanel); +// X framePanel.remove(bigThree); +// X frame.getContentPane().add(/*"Center",*/bigThree); + framePanel.setDividerLocation(0); + + radio.layout = fullscreenLayout; + radio.layout.doClick(); + //frame.setVisible(true); + } + frame.validate(); + + cameraView.requestFocusInWindow(); } - return new JTextArea(); // textPane; + private Object3D CompressCopy() + { + boolean temp = CameraPane.SWITCH; + CameraPane.SWITCH = false; + + copy.ExtractBigData(versiontable); + // if (copy == client) + + Object3D versions[] = copy.versionlist; + copy.versionlist = null; + + //byte[] compress = Compress(copy); + Object3D compress = (Object3D)Grafreed.clone(copy); + + copy.versionlist = versions; + + copy.RestoreBigData(versiontable); + + CameraPane.SWITCH = temp; + + return compress; + } + + private JTextPane createTextPane() + { +// TEXTAREA String[] initString = +// { +// "This is an editable JTextPane, ", //regular +// "another ", //italic +// "styled ", //bold +// "text ", //small +// "component, ", //large +// "which supports embedded components..." + newline,//regular +// " " + newline, //button +// "...and embedded icons..." + newline, //regular +// " ", //icon +// newline + "JTextPane is a subclass of JEditorPane that " +// + "uses a StyledEditorKit and StyledDocument, and provides " +// + "cover methods for interacting with those objects." +// }; +// +// String[] initStyles = +// { +// "regular", "italic", "bold", "small", "large", +// "regular", "button", "regular", "icon", +// "regular" +// }; +// +// JTextPane textPane = new JTextPane(); +// textPane.setEditable(true); +// /*StyledDocument*/ doc = textPane.getStyledDocument(); +// addStylesToDocument(doc); +// +// try +// { +// for (int j = 0; j < 2; j++) +// { +// for (int i = 0; i < initString.length; i++) +// { +// doc.insertString(doc.getLength(), initString[i], +// doc.getStyle(initStyles[i])); +// } +// } +// } catch (BadLocationException ble) +// { +// System.err.println("Couldn't insert initial text into text pane."); +// } + + return new JTextPane(); // textPane; } protected void addStylesToDocument(StyledDocument doc) @@ -692,7 +973,7 @@ protected static ImageIcon createImageIcon(String path, String description) { - java.net.URL imgURL = GrafreeD.class.getResource(path); + java.net.URL imgURL = Grafreed.class.getResource(path); if (imgURL != null) { return new ImageIcon(imgURL, description); @@ -715,6 +996,7 @@ { SetupMaterial(materialPanel); } + //SetupName(); //SetupViews(); } @@ -724,6 +1006,7 @@ // NumberSlider vDivsField; // JCheckBox endcaps; JCheckBox liveCB; + JCheckBox selectableCB; JCheckBox hideCB; JCheckBox link2masterCB; JCheckBox markCB; @@ -731,7 +1014,12 @@ JCheckBox speedupCB; JCheckBox rewindCB; JCheckBox flipVCB; + + cCheckBox toggleTextureCB; + cCheckBox toggleSwitchCB; + JComboBox texresMenu; + JButton resetButton; JButton stepButton; JButton stepAllButton; @@ -739,115 +1027,87 @@ JButton slowerButton; JButton fasterButton; JButton remarkButton; + + cGridBag editPanel; + cGridBag editCommandsPanel; + + cGridBag namePanel; + cGridBag setupPanel; + cGridBag setupPanel2; + cGridBag objectCommandsPanel; + cGridBag pushPanel; + cGridBag fillPanel; - JCheckBox AddCheckBox(ObjEditor oe, String label, boolean on) + JCheckBox AddCheckBox(cGridBag panel, String label, boolean on) { JCheckBox cb; - oe.aConstraints.fill = GridBagConstraints.HORIZONTAL; - oe.aConstraints.gridwidth = 1; // 3; -// oe.aConstraints.weightx = 1; -// oe.aConstraints.anchor = GridBagConstraints.WEST; - oe.ctrlPanel.add(cb = new JCheckBox(label, on), oe.aConstraints); //, oe.ctrlPanel.getComponentCount()-1); + panel.add(cb = new JCheckBox(label, on)); //, oe.aConstraints); //, oe.ctrlPanel.getComponentCount()-1); cb.addItemListener(this); -// oe.aConstraints.anchor = GridBagConstraints.EAST; - oe.aConstraints.gridwidth = 1; - oe.aConstraints.gridx += 1; return cb; } - cButton AddButton(ObjEditor oe, String label) + cButton AddButton(cGridBag panel, String label) { cButton cb; - oe.aConstraints.fill = GridBagConstraints.HORIZONTAL; - oe.aConstraints.gridwidth = 1; -// oe.aConstraints.weightx = 1; -// oe.aConstraints.anchor = GridBagConstraints.WEST; - oe.ctrlPanel.add(cb = new cButton(label), oe.aConstraints, oe.ctrlPanel.getComponentCount() - 1); + panel.add(cb = new cButton(label)); //, oe.aConstraints, oe.ctrlPanel.getComponentCount() - 1); cb.addActionListener(this); -// oe.aConstraints.anchor = GridBagConstraints.EAST; - oe.aConstraints.gridwidth = 1; - oe.aConstraints.gridx += 1; return cb; } - JComboBox AddCombo(ObjEditor oe, java.util.Vector list, int item) + JComboBox AddCombo(cGridBag panel, java.util.Vector list, int item) { JComboBox combo; - oe.aConstraints.fill = GridBagConstraints.HORIZONTAL; - oe.ctrlPanel.add(combo = new JComboBox(new cListModel(list, item)), oe.aConstraints); //, oe.ctrlPanel.getComponentCount()-1); - oe.aConstraints.gridx += 1; + panel.add(combo = new JComboBox(new cListModel(list, item))); //, oe.aConstraints); //, oe.ctrlPanel.getComponentCount()-1); combo.addActionListener(this); return combo; } - NumberSlider AddSlider(JPanel ctrlPanel, String label, double min, double max, double current, double pow) + cGridBag AddSlider(cGridBag panel, String label, double min, double max, double current, double pow) { - NumberSlider combo; + cGridBag control = new cGridBag(); + + cNumberSlider combo; JLabel jlabel = new JLabel(label); - - aConstraints.fill = GridBagConstraints.VERTICAL; jlabel.setHorizontalAlignment(SwingConstants.TRAILING); - aConstraints.gridwidth = 2; - ctrlPanel.add(jlabel, aConstraints); //, oe.ctrlPanel.getComponentCount()-1); - aConstraints.gridx += 1; - aConstraints.fill = GridBagConstraints.HORIZONTAL; - aConstraints.gridwidth = ObjEditor.GRIDWIDTH; - ctrlPanel.add(combo = new NumberSlider(min, max, pow), aConstraints); //, oe.ctrlPanel.getComponentCount()-1); - aConstraints.gridx += 1; - aConstraints.gridwidth = 1; - + control.add(jlabel); //, aConstraints); //, oe.ctrlPanel.getComponentCount()-1); + control.add(combo = new cNumberSlider(this, min, max, pow)); //, aConstraints); //, oe.ctrlPanel.getComponentCount()-1); combo.setFloat(current); - - combo.label = jlabel; - - combo.addChangeListener(this); - - return combo; + + panel.add(control); + + return control; } - NumberSlider AddSlider(JPanel ctrlPanel, String label, int min, int max, int current) + cGridBag AddSlider(cGridBag panel, String label, int min, int max, int current) { - NumberSlider combo; + cGridBag control = new cGridBag(); + + cNumberSlider combo; JLabel jlabel = new JLabel(label); - - aConstraints.fill = GridBagConstraints.VERTICAL; jlabel.setHorizontalAlignment(SwingConstants.TRAILING); - aConstraints.gridwidth = 2; - ctrlPanel.add(jlabel, aConstraints); //, oe.ctrlPanel.getComponentCount()-1); - aConstraints.gridx += 1; - aConstraints.fill = GridBagConstraints.HORIZONTAL; - aConstraints.gridwidth = ObjEditor.GRIDWIDTH; - ctrlPanel.add(combo = new NumberSlider(min, max), aConstraints); //, oe.ctrlPanel.getComponentCount()-1); - aConstraints.gridx += 1; - aConstraints.gridwidth = 1; - + control.add(jlabel); //, aConstraints); //, oe.ctrlPanel.getComponentCount()-1); + control.add(combo = new cNumberSlider(this, min, max)); //, aConstraints); //, oe.ctrlPanel.getComponentCount()-1); combo.setInteger(current); - combo.label = jlabel; - - combo.addChangeListener(this); - - return combo; + panel.add(control); + + return control; } - JTextArea AddText(JPanel ctrlPanel, String name) + JTextArea AddText(cGridBag ctrlPanel, String name) { JTextArea text; - aConstraints.fill = GridBagConstraints.HORIZONTAL; - aConstraints.gridwidth = ObjEditor.GRIDWIDTH; - ctrlPanel.add(text = new JTextArea(name), aConstraints); //, oe.ctrlPanel.getComponentCount()-1); + ctrlPanel.add(text = new JTextArea(name)); //, aConstraints); //, oe.ctrlPanel.getComponentCount()-1); text.addCaretListener(this); - aConstraints.gridx += 1; - aConstraints.gridwidth = 1; return text; } @@ -877,9 +1137,16 @@ objEditor.ctrlPanel.remove(j); } + void Remove(cNumberSlider j) + { + j.removeChangeListener(this); + //objEditor.ctrlPanel.remove(j.label); + objEditor.ctrlPanel.remove(j); + } + /* */ - void Return() // ObjEditor oe) + void Return0() // ObjEditor oe) { aConstraints.gridy += 1; aConstraints.gridx = 0; @@ -934,35 +1201,81 @@ void SetupUI2(ObjEditor oe) { -// oe.aConstraints.weightx = 0; -// oe.aConstraints.weighty = 0; -// oe.aConstraints.gridx = 0; -// oe.aConstraints.gridy = 0; - SetupName(oe); + //SetupName(oe); - if (!GroupEditor.allparams) + namePanel = new cGridBag(); + + nameField = AddText(namePanel, copy.GetName()); + namePanel.add(new JScrollPane(nameField, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER)); + oe.ctrlPanel.add(namePanel); + + oe.ctrlPanel.Return(); + + if (!allparams) return; - liveCB = AddCheckBox(oe, "Live", copy.live); - link2masterCB = AddCheckBox(oe, "Supp", copy.link2master); - hideCB = AddCheckBox(oe, "Hide", copy.hide); + setupPanel = new cGridBag().setVertical(false); + + liveCB = AddCheckBox(setupPanel, "Live", copy.live); + liveCB.setToolTipText("Animate object"); + selectableCB = AddCheckBox(setupPanel, "Select", !copy.dontselect); + selectableCB.setToolTipText("Make object selectable"); // Return(); - markCB = AddCheckBox(oe, "Mark", copy.marked); - rewindCB = AddCheckBox(oe, "Rew", copy.rewind); - randomCB = AddCheckBox(oe, "Rand", copy.random); - Return(); - resetButton = AddButton(oe, "Reset"); - stepButton = AddButton(oe, "Step"); + + 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); + + rewindCB = AddCheckBox(setupPanel2, "Rewind", copy.rewind); + rewindCB.setToolTipText("Rewind animation"); + + randomCB = AddCheckBox(setupPanel2, "Random", copy.random); + randomCB.setToolTipText("Randomly Rewind (or Go back and forth)"); + + link2masterCB = AddCheckBox(setupPanel2, "Support", copy.link2master); + link2masterCB.setToolTipText("Attach to support"); + + if (Globals.ADVANCED) + { + speedupCB = AddCheckBox(setupPanel2, "Speed", copy.speedup); + speedupCB.setToolTipText("Option motion capture"); + } + + oe.ctrlPanel.add(setupPanel); + oe.ctrlPanel.Return(); + oe.ctrlPanel.add(setupPanel2); + oe.ctrlPanel.Return(); + + objectCommandsPanel = new cGridBag().setVertical(false); + + resetButton = AddButton(objectCommandsPanel, "Reset"); + resetButton.setToolTipText("Jump to frame zero"); + stepButton = AddButton(objectCommandsPanel, "Step"); + stepButton.setToolTipText("Step one frame"); // resetAllButton = AddButton(oe, "Reset All"); // stepAllButton = AddButton(oe, "Step All"); - speedupCB = AddCheckBox(oe, "Speed", copy.speedup); // Return(); - slowerButton = AddButton(oe, "Slow"); - fasterButton = AddButton(oe, "Fast"); - remarkButton = AddButton(oe, "Rem"); + slowerButton = AddButton(objectCommandsPanel, "Slow"); + slowerButton.setToolTipText("Decrease animation speed"); + fasterButton = AddButton(objectCommandsPanel, "Fast"); + fasterButton.setToolTipText("Increase animation speed"); + remarkButton = AddButton(objectCommandsPanel, "Remark"); + remarkButton.setToolTipText("Set the current transform as the target"); - Return(); + oe.ctrlPanel.add(objectCommandsPanel); + oe.ctrlPanel.Return(); + pushPanel = AddSlider(oe.ctrlPanel, "Push", -1, 1, copy.NORMALPUSH, 1.1); // To have the buttons + normalpushField = (cNumberSlider)pushPanel.getComponent(1); + //Return(); + + oe.ctrlPanel.Return(); + // oe.ctrlPanel.add(stepButton = new cButton("Step"), ObjEditor.aConstraints, oe.ctrlPanel.getComponentCount() - 2); // ObjEditor.aConstraints.gridx += 1; @@ -1056,7 +1369,7 @@ oe.aConstraints.gridwidth = 1; /**/ nameField = AddText(oe.ctrlPanel, copy.GetName()); - Return(); + oe.ctrlPanel.Return(); //ctrlPanel.add(textureButton = new Button("Texture...")); //textureButton.setEnabled(false); @@ -1158,11 +1471,28 @@ //JPanel worldPanel = // new gov.nasa.worldwind.examples.ApplicationTemplate.AppPanel(null, true); //worldPanel.setName("World"); - /*JPanel*/ cameraPanel = - new JPanel(new BorderLayout()); - cameraPanel.add(cameraView); - //new timeflow.app.TimeflowApp().TimeFlowWindow(cameraPanel, frame); + centralPanel = new cGridBag(); + centralPanel.preferredWidth = 20; + + if (Globals.ADVANCED) + { + timelinePanel = new JPanel(new BorderLayout()); + timelineMenubar = new timeflow.app.TimeflowApp().TimeFlowWindow(timelinePanel); + cameraPanel = new JSplitPane(JSplitPane.VERTICAL_SPLIT, cameraView, timelinePanel); + cameraPanel.setContinuousLayout(true); + cameraPanel.setOneTouchExpandable(true); +// cameraPanel.setDividerLocation(0.9); +// cameraPanel.setDividerSize(9); + cameraPanel.setResizeWeight(1.0); + + } + + centralPanel.add(cameraView); + centralPanel.setFocusable(true); + //frame.setJMenuBar(timelineMenubar); + //centralPanel.add(timelinePanel); + //topView.camera = ; //frontView.camera = new Camera(2); //sideView.camera = new Camera(3); @@ -1178,12 +1508,14 @@ //frontView.object = copy; //sideView.object = copy; - XYZPanel = new JPanel(); - XYZPanel.setLayout(new GridLayout(3, 1, 5, 5)); + XYZPanel = new cGridBag().setVertical(true); + //XYZPanel.setLayout(new GridLayout(3, 1, 5, 5)); - XYZPanel.add(/*BorderLayout.SOUTH,*/sideView); // Scroll); - XYZPanel.add(/*BorderLayout.CENTER,*/frontView); // Scroll); - XYZPanel.add(/*BorderLayout.NORTH,*/topView); // Scroll); + XYZPanel.preferredWidth = 5; + XYZPanel.addComponent(/*BorderLayout.SOUTH,*/sideView); // Scroll); + XYZPanel.addComponent(/*BorderLayout.CENTER,*/frontView); // Scroll); + XYZPanel.addComponent(/*BorderLayout.NORTH,*/topView); // Scroll); + //XYZPanel.setName("XYZ"); /* gridPanel = new JPanel(); //new BorderLayout()); @@ -1192,7 +1524,7 @@ gridPanel.add(cameraView); gridPanel.add(XYZPanel); */ - gridPanel = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, cameraPanel, XYZPanel); //new BorderLayout()); + gridPanel = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, centralPanel, XYZPanel); //new BorderLayout()); gridPanel.setContinuousLayout(true); gridPanel.setOneTouchExpandable(true); gridPanel.setDividerLocation(1.0); @@ -1221,12 +1553,30 @@ //JScrollPane tmp = new JScrollPane(ctrlPanel, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); //tmp.setName("Edit"); objectPanel.add(materialPanel); - JPanel north = new JPanel(new BorderLayout()); - north.setName("Edit"); - north.add(ctrlPanel, BorderLayout.NORTH); - objectPanel.add(north); - objectPanel.add(infoPanel); + objectPanel.setIconAt(0, GetIcon("icons/material.png")); + objectPanel.setToolTipTextAt(0, "Material"); + + objectPanel.add(toolboxPanel); + objectPanel.setIconAt(1, GetIcon("icons/primitives.png")); + objectPanel.setToolTipTextAt(1, "Objects & backgrounds"); +// JPanel north = new JPanel(new BorderLayout()); +// north.setName("Edit"); +// north.add(ctrlPanel, BorderLayout.NORTH); +// objectPanel.add(north); + objectPanel.add(editPanel); + objectPanel.setIconAt(2, GetIcon("icons/write.png")); + objectPanel.setToolTipTextAt(2, "Edit controls"); + + //if (Globals.ADVANCED) + objectPanel.add(infoPanel); + objectPanel.setIconAt(3, GetIcon("icons/info.png")); + objectPanel.setToolTipTextAt(3, "Information"); + + objectPanel.add(XYZPanel); + objectPanel.setIconAt(4, GetIcon("icons/XYZ.png")); + objectPanel.setToolTipTextAt(4, "XYZ/RGB transform"); + /* aConstraints.gridx = 0; aConstraints.gridwidth = 1; @@ -1234,7 +1584,7 @@ aConstraints.gridy += 1; aConstraints.gridwidth = 1; mainPanel.add(objectPanel, aConstraints); - */ + */ scrollpane = new JScrollPane(mainPanel, ScrollPaneConstants.// VERTICAL_SCROLLBAR_ALWAYS, VERTICAL_SCROLLBAR_AS_NEEDED, @@ -1245,16 +1595,23 @@ scrollpane.setWheelScrollingEnabled(true); scrollpane.addMouseWheelListener(this); // Default not fast enough - /*JTabbedPane*/ scenePanel = new JTabbedPane(); - scenePanel.add(scrollpane); + /*JTabbedPane*/ scenePanel = new cGridBag(); + scenePanel.preferredWidth = 5; + + JTabbedPane tabbedPane = new JTabbedPane(); + tabbedPane.add(scrollpane); - scenePanel.add(FSPane = new cFileSystemPane(this)); - - optionsPanel = new JPanel(new GridBagLayout()); + optionsPanel = new cGridBag().setVertical(false); optionsPanel.setName("Options"); - scenePanel.add(optionsPanel); + + AddOptions(optionsPanel); //, aConstraints); + + tabbedPane.add(optionsPanel); + + tabbedPane.add(FSPane = new cFileSystemPane(this)); + scenePanel.add(tabbedPane); /* cTree jTree = new cTree(null); @@ -1288,6 +1645,7 @@ //bigPanel.setSize(new Dimension(10,10)); //bigPanel.add(ctrlPanel); //bigPanel.add(gridPanel); + /** bigThree = new JPanel(); //big.setLayout(new FlowLayout(FlowLayout.LEFT)); bigThree.setLayout(new GridBagLayout()); //1,3,5,5)); @@ -1304,14 +1662,20 @@ // aConstraints.gridheight = 3; aWindowConstraints.gridx = 1; aWindowConstraints.fill = GridBagConstraints.BOTH; - bigThree.add(cameraPanel, aWindowConstraints); + bigThree.add(centralPanel, aWindowConstraints); aWindowConstraints.weightx = 0; aWindowConstraints.gridx = 4; aWindowConstraints.gridwidth = 1; // aConstraints.gridheight = 3; aWindowConstraints.fill = GridBagConstraints.VERTICAL; bigThree.add(XYZPanel, aWindowConstraints); + /**/ + bigThree = new cGridBag(); + bigThree.addComponent(scenePanel); + bigThree.addComponent(centralPanel); + //bigThree.addComponent(XYZPanel); + // // SIDE EFFECT!!! // aConstraints.gridx = 0; // aConstraints.gridy = 0; @@ -1319,9 +1683,9 @@ // aConstraints.gridheight = 1; framePanel = new JSplitPane(JSplitPane.VERTICAL_SPLIT, toolbarPanel, bigThree); - framePanel.setContinuousLayout(true); - framePanel.setOneTouchExpandable(true); - framePanel.setDividerLocation(0.8); + framePanel.setContinuousLayout(false); + framePanel.setOneTouchExpandable(false); + //.setDividerLocation(0.8); //framePanel.setDividerSize(15); //framePanel.setResizeWeight(0.15); framePanel.setName("Frame"); @@ -1332,20 +1696,25 @@ //worldPane.add(bigPanel); //worldPane.add(worldPanel); /**/ - frame.getContentPane().add(/*"Center",*/framePanel); + //frame.getContentPane().add(/*"Center",*/framePanel); + frame.add(/*"Center",*/framePanel); //frame.getContentPane().add(/*"Center",*/ worldPane); // aConstraints = gbc; // (GridBagConstraints) GrafreeD.clone(gbc); - frame.setSize(1024, 768); - frame.show(); - + frame.setSize(1280, 860); + + cameraView.requestFocusInWindow(); + gridPanel.setDividerLocation(1.0); + + frame.validate(); + + frame.setVisible(true); frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); frame.addWindowListener(new WindowAdapter() { - public void windowClosing(WindowEvent e) { Close(); @@ -1353,6 +1722,10 @@ }); } + void AddOptions(cGridBag panel) //, GridBagConstraints constraints) + { + } + JTree GetTree() { return objEditor.jTree; @@ -1364,260 +1737,556 @@ ctrlPanel.removeAll(); } - void SetupMaterial(JPanel ctrlPanel) + void SetupMaterial(cGridBag materialpanel) { - aConstraints.weighty = 0; - //aConstraints.weightx = 1; - /* + cGridBag presetpanel = new cGridBag().setVertical(true); + + cLabel skin = GetLabel("icons/shadericons/shadericon00000.png", !Grafreed.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); + saturationField.setFloat(material.modulation); + 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", !Grafreed.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", !Grafreed.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", !Grafreed.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", !Grafreed.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", !Grafreed.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", !Grafreed.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", !Grafreed.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", !Grafreed.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", !Grafreed.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", !Grafreed.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", !Grafreed.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", !Grafreed.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", !Grafreed.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", !Grafreed.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", !Grafreed.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", !Grafreed.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 halo = GetLabel("icons/shadericons/shadericon00017.png", !Grafreed.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", !Grafreed.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); + + 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); - aConstraints.fill = GridBagConstraints.HORIZONTAL; - aConstraints.gridx += 1; - */ + */ - aConstraints.gridwidth = 1; - ctrlPanel.add(createMaterialButton = new cButton("Create"), aConstraints); - aConstraints.gridx += 1; - aConstraints.weighty = 0; - aConstraints.gridwidth = 1; + cGridBag editBar = new cGridBag().setVertical(false); + + editBar.add(createMaterialButton = new cButton("Create", !Grafreed.NIMBUSLAF)); // , aConstraints); + createMaterialButton.setToolTipText("Create material"); /* ctrlPanel.add(resetSlidersButton = new cButton("Reset All"), aConstraints); - aConstraints.gridx += 1; - aConstraints.weighty = 0; - aConstraints.gridwidth = 1; */ - ctrlPanel.add(clearMaterialButton = new cButton("Clear"), aConstraints); - aConstraints.gridx += 1; + editBar.add(clearMaterialButton = new cButton("Clear", !Grafreed.NIMBUSLAF)); // , aConstraints); + clearMaterialButton.setToolTipText("Clear material"); + + if (Globals.ADVANCED) + { + editBar.add(resetSlidersButton = new cButton("Reset", !Grafreed.NIMBUSLAF)); // , aConstraints); + editBar.add(propagateToggle = new cCheckBox("Prop", propagate)); // , aConstraints); + editBar.add(multiplyToggle = new cCheckBox("Mult", false)); // , aConstraints); + } - ctrlPanel.add(resetSlidersButton = new cButton("Reset"), aConstraints); - - aConstraints.gridx += 1; - - ctrlPanel.add(propagateToggle = new cCheckBox("Prop", propagate), aConstraints); - - aConstraints.gridx += 1; - - ctrlPanel.add(multiplyToggle = new cCheckBox("Mult", false), aConstraints); - - aConstraints.gridx = 0; - aConstraints.gridy += 1; - aConstraints.weighty = 0; - aConstraints.gridwidth = 1; + editBar.preferredHeight = 15; + + panel.add(editBar); + /**/ //aConstraints.weighty = 0; ////aConstraints.weightx = 1; //aConstraints.weighty = 1; aConstraints.gridwidth = ObjEditor.GRIDWIDTH; // 100; //aConstraints.gridx += 1; - ctrlPanel.add(new JLabel("----------------------------------"), aConstraints); - aConstraints.weighty = 0; - aConstraints.gridx = 0; - aConstraints.gridy += 1; - aConstraints.gridwidth = 1; + //ctrlPanel.add(new JLabel("----------------------------------")); // , aConstraints); - ctrlPanel.add(colorLabel = new JLabel("Color/hue"), aConstraints); - colorLabel.setHorizontalAlignment(SwingConstants.TRAILING); - aConstraints.fill = GridBagConstraints.HORIZONTAL; - aConstraints.gridx += 1; - aConstraints.gridwidth = ObjEditor.GRIDWIDTH; - //aConstraints.weightx = 0; - ctrlPanel.add(colorField = new NumberSlider(0.001, 1, -0.1), aConstraints); - aConstraints.gridx = 0; - aConstraints.gridy += 1; - aConstraints.gridwidth = 1; + cGridBag colorSection = new cGridBag().setVertical(true); - ctrlPanel.add(modulationLabel = new JLabel("Saturation"), aConstraints); - modulationLabel.setHorizontalAlignment(SwingConstants.TRAILING); - aConstraints.fill = GridBagConstraints.HORIZONTAL; - aConstraints.gridx += 1; - aConstraints.gridwidth = ObjEditor.GRIDWIDTH; - ctrlPanel.add(modulationField = new NumberSlider(0.001, 1, -0.1), aConstraints); - aConstraints.gridx = 0; - aConstraints.gridy += 1; - aConstraints.gridwidth = 1; + cGridBag huepanel = new cGridBag(); + cGridBag huelabel = new cGridBag(); + skin = GetLabel("icons/hue.png", false); + skin.fit = true; + huelabel.add(skin); + huelabel.preferredWidth = 20; + huepanel.add(new cGridBag()); // Label + huepanel.add(huelabel); // Field/slider + + huepanel.preferredHeight = 7; - ctrlPanel.add(textureLabel = new JLabel("Texture"), aConstraints); - textureLabel.setHorizontalAlignment(SwingConstants.TRAILING); - aConstraints.fill = GridBagConstraints.HORIZONTAL; - aConstraints.gridx += 1; - aConstraints.gridwidth = ObjEditor.GRIDWIDTH; - ctrlPanel.add(textureField = new NumberSlider(0.001, 1, -0.1), aConstraints); - aConstraints.gridx = 0; - aConstraints.gridy += 1; - aConstraints.gridwidth = 1; + 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)); // , aConstraints); - ctrlPanel.add(anisoLabel = new JLabel("AnisoU"), aConstraints); - anisoLabel.setHorizontalAlignment(SwingConstants.TRAILING); - aConstraints.fill = GridBagConstraints.HORIZONTAL; - aConstraints.gridx += 1; - aConstraints.gridwidth = ObjEditor.GRIDWIDTH; - ctrlPanel.add(anisoField = new NumberSlider(0.001, 1, -0.1), aConstraints); - aConstraints.gridx = 0; - aConstraints.gridy += 1; - aConstraints.gridwidth = 1; + //colorField.preferredWidth = 200; + colorSection.add(color); - ctrlPanel.add(anisoVLabel = new JLabel("AnisoV"), aConstraints); - anisoVLabel.setHorizontalAlignment(SwingConstants.TRAILING); - aConstraints.fill = GridBagConstraints.HORIZONTAL; - aConstraints.gridx += 1; - aConstraints.gridwidth = ObjEditor.GRIDWIDTH; - ctrlPanel.add(anisoVField = new NumberSlider(0.001, 1, -0.1), aConstraints); - aConstraints.gridx = 0; - aConstraints.gridy += 1; - aConstraints.gridwidth = 1; + cGridBag modulation = new cGridBag(); + modulation.add(modulationLabel = new JLabel("Saturation")); // , aConstraints); + modulationLabel.setHorizontalAlignment(SwingConstants.TRAILING); + modulation.add(saturationField = new cNumberSlider(this, 0.001, 1)); // , aConstraints); + colorSection.add(modulation); - ctrlPanel.add(shadowbiasLabel = new JLabel("Shadowbias"), aConstraints); - shadowbiasLabel.setHorizontalAlignment(SwingConstants.TRAILING); - aConstraints.fill = GridBagConstraints.HORIZONTAL; - aConstraints.gridx += 1; - aConstraints.gridwidth = ObjEditor.GRIDWIDTH; - ctrlPanel.add(shadowbiasField = new NumberSlider(0.001, 50, -1), aConstraints); - aConstraints.gridx = 0; - aConstraints.gridy += 1; - aConstraints.gridwidth = 1; + 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); - //aConstraints.weighty = 1; - aConstraints.gridwidth = ObjEditor.GRIDWIDTH; // 100; - //aConstraints.gridx += 1; - ctrlPanel.add(new JLabel("----------------------------------"), aConstraints); - aConstraints.weighty = 0; - aConstraints.gridx = 0; - aConstraints.gridy += 1; - aConstraints.gridwidth = 1; + 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); - ctrlPanel.add(diffuseLabel = new JLabel("Diffuse"), aConstraints); - diffuseLabel.setHorizontalAlignment(SwingConstants.TRAILING); - aConstraints.fill = GridBagConstraints.HORIZONTAL; - aConstraints.gridx += 1; - aConstraints.gridwidth = ObjEditor.GRIDWIDTH; - ctrlPanel.add(diffuseField = new NumberSlider(0.001, 50, -1), aConstraints); - aConstraints.gridx = 0; - aConstraints.gridy += 1; - aConstraints.gridwidth = 1; + panel.add(GetSeparator()); + + panel.add(colorSection); + + //ctrlPanel.add(new JLabel("----------------------------------")); // , aConstraints); + + cGridBag diffuseSection = new cGridBag().setVertical(true); + + cGridBag diffuse = new cGridBag(); + diffuse.add(diffuseLabel = new JLabel("Diffuse")); // , aConstraints); + diffuseLabel.setHorizontalAlignment(SwingConstants.TRAILING); + diffuse.add(diffuseField = new cNumberSlider(this, 0.001, 50, -1)); // , aConstraints); + diffuseSection.add(diffuse); - ctrlPanel.add(diffusenessLabel = new JLabel("Diffusion"), aConstraints); - diffusenessLabel.setHorizontalAlignment(SwingConstants.TRAILING); - aConstraints.fill = GridBagConstraints.HORIZONTAL; - aConstraints.gridx += 1; - aConstraints.gridwidth = ObjEditor.GRIDWIDTH; - ctrlPanel.add(diffusenessField = new NumberSlider(0.001, 50, -1), aConstraints); - aConstraints.gridx = 0; - aConstraints.gridy += 1; - aConstraints.gridwidth = 1; + cGridBag diffuseness = new cGridBag(); + diffuseness.add(diffusenessLabel = new JLabel("Diffusion")); // , aConstraints); + diffusenessLabel.setHorizontalAlignment(SwingConstants.TRAILING); + diffuseness.add(diffusenessField = new cNumberSlider(this, 0.001, 50, -1)); // , aConstraints); + diffuseSection.add(diffuseness); - ctrlPanel.add(selfshadowLabel = new JLabel("Selfshadow"), aConstraints); - selfshadowLabel.setHorizontalAlignment(SwingConstants.TRAILING); - aConstraints.fill = GridBagConstraints.HORIZONTAL; - aConstraints.gridx += 1; - aConstraints.gridwidth = ObjEditor.GRIDWIDTH; - ctrlPanel.add(selfshadowField = new NumberSlider(0.001, 50, -1), aConstraints); - aConstraints.gridx = 0; - aConstraints.gridy += 1; - aConstraints.gridwidth = 1; + cGridBag selfshadow = new cGridBag(); + selfshadow.add(selfshadowLabel = new JLabel("Selfshadow")); // , aConstraints); + selfshadowLabel.setHorizontalAlignment(SwingConstants.TRAILING); + selfshadow.add(selfshadowField = new cNumberSlider(this, 0.001, 50, -1)); // , aConstraints); + diffuseSection.add(selfshadow); - ctrlPanel.add(sheenLabel = new JLabel("Sheen"), aConstraints); - sheenLabel.setHorizontalAlignment(SwingConstants.TRAILING); - aConstraints.fill = GridBagConstraints.HORIZONTAL; - aConstraints.gridx += 1; - aConstraints.gridwidth = ObjEditor.GRIDWIDTH; - ctrlPanel.add(sheenField = new NumberSlider(0.001, 50, -1), aConstraints); - aConstraints.gridx = 0; - aConstraints.gridy += 1; - aConstraints.gridwidth = 1; + cGridBag sheen = new cGridBag(); + sheen.add(sheenLabel = new JLabel("Sheen")); // , aConstraints); + sheenLabel.setHorizontalAlignment(SwingConstants.TRAILING); + sheen.add(sheenField = new cNumberSlider(this, 0.001, 50, -1)); // , aConstraints); + diffuseSection.add(sheen); - ctrlPanel.add(subsurfaceLabel = new JLabel("Subsurface"), aConstraints); - subsurfaceLabel.setHorizontalAlignment(SwingConstants.TRAILING); - aConstraints.fill = GridBagConstraints.HORIZONTAL; - aConstraints.gridx += 1; - aConstraints.gridwidth = ObjEditor.GRIDWIDTH; - ctrlPanel.add(subsurfaceField = new NumberSlider(0.001, 1, -0.1), aConstraints); - aConstraints.gridx = 0; - aConstraints.gridy += 1; - aConstraints.gridwidth = 1; + cGridBag subsurface = new cGridBag(); + subsurface.add(subsurfaceLabel = new JLabel("Subsurface")); // , aConstraints); + subsurfaceLabel.setHorizontalAlignment(SwingConstants.TRAILING); + subsurface.add(subsurfaceField = new cNumberSlider(this, 0.001, 1, -0.5)); // , aConstraints); + diffuseSection.add(subsurface); - ctrlPanel.add(shadowLabel = new JLabel("Shadowing"), aConstraints); - shadowLabel.setHorizontalAlignment(SwingConstants.TRAILING); - aConstraints.fill = GridBagConstraints.HORIZONTAL; - aConstraints.gridx += 1; - aConstraints.gridwidth = ObjEditor.GRIDWIDTH; - ctrlPanel.add(shadowField = new NumberSlider(0.001, 50, -1), aConstraints); - aConstraints.gridx = 0; - aConstraints.gridy += 1; - aConstraints.gridwidth = 1; + cGridBag shadow = new cGridBag(); + shadow.add(shadowLabel = new JLabel("Shadowing")); // , aConstraints); + shadowLabel.setHorizontalAlignment(SwingConstants.TRAILING); + shadow.add(shadowField = new cNumberSlider(this, 0.001, 50, -1)); // , aConstraints); + diffuseSection.add(shadow); - ctrlPanel.add(fakedepthLabel = new JLabel("Fakedepth"), aConstraints); - fakedepthLabel.setHorizontalAlignment(SwingConstants.TRAILING); - aConstraints.fill = GridBagConstraints.HORIZONTAL; - aConstraints.gridx += 1; - aConstraints.gridwidth = ObjEditor.GRIDWIDTH; - ctrlPanel.add(fakedepthField = new NumberSlider(0.001, 50, -1), aConstraints); - aConstraints.gridx = 0; - aConstraints.gridy += 1; - aConstraints.gridwidth = 1; + cGridBag fakedepth = new cGridBag(); + fakedepth.add(fakedepthLabel = new JLabel("Fakedepth")); // , aConstraints); + fakedepthLabel.setHorizontalAlignment(SwingConstants.TRAILING); + fakedepth.add(fakedepthField = new cNumberSlider(this, 0.001, 50, -1)); // , aConstraints); + diffuseSection.add(fakedepth); - //aConstraints.weighty = 1; - aConstraints.gridwidth = ObjEditor.GRIDWIDTH; // 100; - //aConstraints.gridx += 1; - ctrlPanel.add(new JLabel("----------------------------------"), aConstraints); - aConstraints.weighty = 0; - aConstraints.gridx = 0; - aConstraints.gridy += 1; - aConstraints.gridwidth = 1; + cGridBag shadowbias = new cGridBag(); + shadowbias.add(shadowbiasLabel = new JLabel("Shadowbias")); // , aConstraints); + shadowbiasLabel.setHorizontalAlignment(SwingConstants.TRAILING); + shadowbias.add(shadowbiasField = new cNumberSlider(this, 0.001, 50, -1)); // , aConstraints); + diffuseSection.add(shadowbias); - ctrlPanel.add(specularLabel = new JLabel("Specular"), aConstraints); - specularLabel.setHorizontalAlignment(SwingConstants.TRAILING); - aConstraints.fill = GridBagConstraints.HORIZONTAL; - aConstraints.gridx += 1; - aConstraints.gridwidth = ObjEditor.GRIDWIDTH; - ctrlPanel.add(specularField = new NumberSlider(0.001, 50, -1), aConstraints); - aConstraints.gridx = 0; - aConstraints.gridy += 1; - aConstraints.gridwidth = 1; + panel.add(GetSeparator()); + + panel.add(diffuseSection); + + //ctrlPanel.add(new JLabel("----------------------------------")); // , aConstraints); + + cGridBag specularSection = new cGridBag().setVertical(true); - ctrlPanel.add(lightareaLabel = new JLabel("Lightarea"), aConstraints); - lightareaLabel.setHorizontalAlignment(SwingConstants.TRAILING); - aConstraints.fill = GridBagConstraints.HORIZONTAL; - aConstraints.gridx += 1; - aConstraints.gridwidth = ObjEditor.GRIDWIDTH; - ctrlPanel.add(lightareaField = new NumberSlider(0.001, 50, -1), aConstraints); - aConstraints.gridx = 0; - aConstraints.gridy += 1; - aConstraints.gridwidth = 1; + cGridBag specular = new cGridBag(); + specular.add(specularLabel = new JLabel("Specular")); // , aConstraints); + specularLabel.setHorizontalAlignment(SwingConstants.TRAILING); + specular.add(specularField = new cNumberSlider(this, 0.001, 50, -1)); // , aConstraints); + specularSection.add(specular); - ctrlPanel.add(shininessLabel = new JLabel("Roughness"), aConstraints); - shininessLabel.setHorizontalAlignment(SwingConstants.TRAILING); - aConstraints.fill = GridBagConstraints.HORIZONTAL; - aConstraints.gridx += 1; - aConstraints.gridwidth = ObjEditor.GRIDWIDTH; - ctrlPanel.add(shininessField = new NumberSlider(0.001, 50, -1), aConstraints); - aConstraints.gridx = 0; - aConstraints.gridy += 1; - aConstraints.gridwidth = 1; + cGridBag lightarea = new cGridBag(); + lightarea.add(lightareaLabel = new JLabel("Lightarea")); // , aConstraints); + lightareaLabel.setHorizontalAlignment(SwingConstants.TRAILING); + lightarea.add(lightareaField = new cNumberSlider(this, 0.001, 50, -1)); // , aConstraints); + specularSection.add(lightarea); - ctrlPanel.add(metalnessLabel = new JLabel("Metalness"), aConstraints); - metalnessLabel.setHorizontalAlignment(SwingConstants.TRAILING); - aConstraints.fill = GridBagConstraints.HORIZONTAL; - aConstraints.gridx += 1; - aConstraints.gridwidth = ObjEditor.GRIDWIDTH; - ctrlPanel.add(metalnessField = new NumberSlider(0.001, 1, -0.1), aConstraints); - aConstraints.gridx = 0; - aConstraints.gridy += 1; - aConstraints.gridwidth = 1; + cGridBag shininess = new cGridBag(); + shininess.add(shininessLabel = new JLabel("Roughness")); // , aConstraints); + shininessLabel.setHorizontalAlignment(SwingConstants.TRAILING); + shininess.add(shininessField = new cNumberSlider(this, 0.001, 50, -1)); // , aConstraints); + specularSection.add(shininess); - ctrlPanel.add(velvetLabel = new JLabel("Velvet"), aConstraints); - velvetLabel.setHorizontalAlignment(SwingConstants.TRAILING); - aConstraints.fill = GridBagConstraints.HORIZONTAL; - aConstraints.gridx += 1; - aConstraints.gridwidth = ObjEditor.GRIDWIDTH; - ctrlPanel.add(velvetField = new NumberSlider(0.001, 50, -1), aConstraints); - aConstraints.gridx = 0; - aConstraints.gridy += 1; - aConstraints.gridwidth = 1; + cGridBag metalness = new cGridBag(); + metalness.add(metalnessLabel = new JLabel("Metalness")); // , aConstraints); + metalnessLabel.setHorizontalAlignment(SwingConstants.TRAILING); + metalness.add(metalnessField = new cNumberSlider(this, 0.001, 1, -0.5)); // , aConstraints); + specularSection.add(metalness); - shiftField = AddSlider(ctrlPanel, "Shift", 0.001, 50, copy.material.shift, -1); - Return(); + cGridBag velvet = new cGridBag(); + velvet.add(velvetLabel = new JLabel("Velvet")); // , aConstraints); + velvetLabel.setHorizontalAlignment(SwingConstants.TRAILING); + velvet.add(velvetField = new cNumberSlider(this, 0.001, 50, -1)); // , aConstraints); + specularSection.add(velvet); + + shiftField = (cNumberSlider)AddSlider(specularSection, "Shift", 0.001, 50, copy.material.shift, -1).getComponent(1); + //Return(); // ctrlPanel.add(shiftLabel = new JLabel("Shift"), aConstraints); // shiftLabel.setHorizontalAlignment(SwingConstants.TRAILING); // aConstraints.fill = GridBagConstraints.HORIZONTAL; @@ -1628,130 +2297,99 @@ // aConstraints.gridy += 1; // aConstraints.gridwidth = 1; - //aConstraints.weighty = 1; - aConstraints.gridwidth = ObjEditor.GRIDWIDTH; // 100; - //aConstraints.gridx += 1; - ctrlPanel.add(new JLabel("----------------------------------"), aConstraints); - aConstraints.weighty = 0; - aConstraints.gridx = 0; - aConstraints.gridy += 1; - aConstraints.gridwidth = 1; + cGridBag anisoU = new cGridBag(); + anisoU.add(anisoLabel = new JLabel("AnisoU")); // , aConstraints); + anisoLabel.setHorizontalAlignment(SwingConstants.TRAILING); + anisoU.add(anisoField = new cNumberSlider(this, 0.001, 1, -0.5)); // , aConstraints); + specularSection.add(anisoU); - ctrlPanel.add(cameraLabel = new JLabel("GlobalLight"), aConstraints); - cameraLabel.setHorizontalAlignment(SwingConstants.TRAILING); - aConstraints.fill = GridBagConstraints.HORIZONTAL; - aConstraints.gridx += 1; - aConstraints.gridwidth = ObjEditor.GRIDWIDTH; - ctrlPanel.add(cameraField = new NumberSlider(0.001, 50, -1), aConstraints); - aConstraints.gridx = 0; - aConstraints.gridy += 1; - aConstraints.gridwidth = 1; + cGridBag anisoV = new cGridBag(); + anisoV.add(anisoVLabel = new JLabel("AnisoV")); // , aConstraints); + anisoVLabel.setHorizontalAlignment(SwingConstants.TRAILING); + anisoV.add(anisoVField = new cNumberSlider(this, 0.001, 1, -0.5)); // , aConstraints); + specularSection.add(anisoV); - ctrlPanel.add(ambientLabel = new JLabel("Ambient"), aConstraints); - ambientLabel.setHorizontalAlignment(SwingConstants.TRAILING); - aConstraints.fill = GridBagConstraints.HORIZONTAL; - aConstraints.gridx += 1; - aConstraints.gridwidth = ObjEditor.GRIDWIDTH; - ctrlPanel.add(ambientField = new NumberSlider(0.001, 50, -1), aConstraints); - aConstraints.gridx = 0; - aConstraints.gridy += 1; - aConstraints.gridwidth = 1; - ctrlPanel.add(backlitLabel = new JLabel("Backlit"), aConstraints); - backlitLabel.setHorizontalAlignment(SwingConstants.TRAILING); - aConstraints.fill = GridBagConstraints.HORIZONTAL; - aConstraints.gridx += 1; - aConstraints.gridwidth = ObjEditor.GRIDWIDTH; - ctrlPanel.add(backlitField = new NumberSlider(0.001, 50, -1), aConstraints); - aConstraints.gridx = 0; - aConstraints.gridy += 1; - aConstraints.gridwidth = 1; + panel.add(GetSeparator()); + + panel.add(specularSection); + + //ctrlPanel.add(new JLabel("----------------------------------")); // , aConstraints); + + //cGridBag globalSection = new cGridBag().setVertical(true); - ctrlPanel.add(opacityLabel = new JLabel("Opacity"), aConstraints); - opacityLabel.setHorizontalAlignment(SwingConstants.TRAILING); - aConstraints.fill = GridBagConstraints.HORIZONTAL; - aConstraints.gridx += 1; - aConstraints.gridwidth = ObjEditor.GRIDWIDTH; - ctrlPanel.add(opacityField = new NumberSlider(0.001, 1, -0.1), aConstraints); - aConstraints.gridx = 0; - aConstraints.gridy += 1; - aConstraints.gridwidth = 1; - aConstraints.weighty = 0; + cGridBag camera = new cGridBag(); + camera.add(cameraLabel = new JLabel("GlobalLight")); // , aConstraints); + cameraLabel.setHorizontalAlignment(SwingConstants.TRAILING); + camera.add(cameraField = new cNumberSlider(this, 0.001, 50, -1)); // , aConstraints); + colorSection.add(camera); - ctrlPanel.add(bumpLabel = new JLabel("Bump"), aConstraints); - bumpLabel.setHorizontalAlignment(SwingConstants.TRAILING); - aConstraints.fill = GridBagConstraints.HORIZONTAL; - aConstraints.gridx += 1; - aConstraints.gridwidth = ObjEditor.GRIDWIDTH; - ctrlPanel.add(bumpField = new NumberSlider(0.0, 2), aConstraints); - aConstraints.gridx = 0; - aConstraints.gridy += 1; - aConstraints.gridwidth = 1; + cGridBag ambient = new cGridBag(); + ambient.add(ambientLabel = new JLabel("Ambient")); // , aConstraints); + ambientLabel.setHorizontalAlignment(SwingConstants.TRAILING); + ambient.add(ambientField = new cNumberSlider(this, 0.001, 50, -1)); // , aConstraints); + colorSection.add(ambient); - ctrlPanel.add(noiseLabel = new JLabel("Noise"), aConstraints); - noiseLabel.setHorizontalAlignment(SwingConstants.TRAILING); - aConstraints.fill = GridBagConstraints.HORIZONTAL; - aConstraints.gridx += 1; - aConstraints.gridwidth = ObjEditor.GRIDWIDTH; - ctrlPanel.add(noiseField = new NumberSlider(0.0, 1/*5*/), aConstraints); - aConstraints.gridx = 0; - aConstraints.gridy += 1; - aConstraints.gridwidth = 1; + cGridBag backlit = new cGridBag(); + backlit.add(backlitLabel = new JLabel("Backlit")); // , aConstraints); + backlitLabel.setHorizontalAlignment(SwingConstants.TRAILING); + backlit.add(backlitField = new cNumberSlider(this, 0.001, 50, -1)); // , aConstraints); + colorSection.add(backlit); - ctrlPanel.add(powerLabel = new JLabel("Turbulance"), aConstraints); - powerLabel.setHorizontalAlignment(SwingConstants.TRAILING); - aConstraints.fill = GridBagConstraints.HORIZONTAL; - aConstraints.gridx += 1; - aConstraints.gridwidth = ObjEditor.GRIDWIDTH; - ctrlPanel.add(powerField = new NumberSlider(0.0, 5), aConstraints); - aConstraints.gridx = 0; - aConstraints.gridy += 1; - aConstraints.gridwidth = 1; + //panel.add(new JSeparator()); + + //panel.add(globalSection); + + //ctrlPanel.add(new JLabel("----------------------------------")); // , aConstraints); + + cGridBag textureSection = new cGridBag().setVertical(true); - ctrlPanel.add(borderfadeLabel = new JLabel("Borderfade"), aConstraints); - borderfadeLabel.setHorizontalAlignment(SwingConstants.TRAILING); - aConstraints.fill = GridBagConstraints.HORIZONTAL; - aConstraints.gridx += 1; - aConstraints.gridwidth = ObjEditor.GRIDWIDTH; - ctrlPanel.add(borderfadeField = new NumberSlider(0.0, 2), aConstraints); - aConstraints.gridx = 0; - aConstraints.gridy += 1; - aConstraints.gridwidth = 1; + cGridBag bump = new cGridBag(); + bump.add(bumpLabel = new JLabel("Bump")); // , aConstraints); + bumpLabel.setHorizontalAlignment(SwingConstants.TRAILING); + bump.add(bumpField = new cNumberSlider(this, 0.0, 2)); // , aConstraints); + textureSection.add(bump); - ctrlPanel.add(fogLabel = new JLabel("Punch"), aConstraints); - fogLabel.setHorizontalAlignment(SwingConstants.TRAILING); - aConstraints.fill = GridBagConstraints.HORIZONTAL; - aConstraints.gridx += 1; - aConstraints.gridwidth = ObjEditor.GRIDWIDTH; - ctrlPanel.add(fogField = new NumberSlider(0.0, 20), aConstraints); - aConstraints.gridx = 0; - aConstraints.gridy += 1; - aConstraints.gridwidth = 1; + cGridBag noise = new cGridBag(); + noise.add(noiseLabel = new JLabel("Noise")); // , aConstraints); + noiseLabel.setHorizontalAlignment(SwingConstants.TRAILING); + noise.add(noiseField = new cNumberSlider(this, 0.0, 1/*5*/)); // , aConstraints); + textureSection.add(noise); - ctrlPanel.add(opacityPowerLabel = new JLabel("Halo"), aConstraints); - opacityPowerLabel.setHorizontalAlignment(SwingConstants.TRAILING); - aConstraints.fill = GridBagConstraints.HORIZONTAL; - aConstraints.gridx += 1; - aConstraints.gridwidth = ObjEditor.GRIDWIDTH; - ctrlPanel.add(opacityPowerField = new NumberSlider(0.0, 10 /*10 dec 2013*/), aConstraints); - aConstraints.gridx = 0; - aConstraints.gridy += 1; - aConstraints.gridwidth = 1; + cGridBag power = new cGridBag(); + power.add(powerLabel = new JLabel("Turbulance")); // , aConstraints); + powerLabel.setHorizontalAlignment(SwingConstants.TRAILING); + power.add(powerField = new cNumberSlider(this, 0.0, 5)); // , aConstraints); + textureSection.add(power); - //aConstraints.weighty = 1; - aConstraints.gridwidth = ObjEditor.GRIDWIDTH; // 100; - //aConstraints.gridx += 1; - ctrlPanel.add(new JLabel("----------------------------------"), aConstraints); - aConstraints.weighty = 0; + cGridBag borderfade = new cGridBag(); + borderfade.add(borderfadeLabel = new JLabel("Borderfade")); // , aConstraints); + borderfadeLabel.setHorizontalAlignment(SwingConstants.TRAILING); + borderfade.add(borderfadeField = new cNumberSlider(this, 0.0, 2)); // , aConstraints); + textureSection.add(borderfade); - aConstraints.gridx = 0; - aConstraints.gridy = 0; - aConstraints.gridwidth = 1; + cGridBag fog = new cGridBag(); + fog.add(fogLabel = new JLabel("Punch")); // , aConstraints); + fogLabel.setHorizontalAlignment(SwingConstants.TRAILING); + fog.add(fogField = new cNumberSlider(this, 0.0, 20)); // , aConstraints); + textureSection.add(fog); + + cGridBag opacityPower = new cGridBag(); + opacityPower.add(opacityPowerLabel = new JLabel("Halo")); // , aConstraints); + opacityPowerLabel.setHorizontalAlignment(SwingConstants.TRAILING); + opacityPower.add(opacityPowerField = new cNumberSlider(this, 0.0, 10 /*10 dec 2013*/)); // , aConstraints); + textureSection.add(opacityPower); + + panel.add(GetSeparator()); + + panel.add(textureSection); + + //ctrlPanel.add(new JLabel("----------------------------------")); // , aConstraints); SetMaterial(copy); // .GetMaterial()); - colorField.addChangeListener(this); - modulationField.addChangeListener(this); + //colorField.addChangeListener(this); +// modulationField.addChangeListener(this); metalnessField.addChangeListener(this); diffuseField.addChangeListener(this); specularField.addChangeListener(this); @@ -1781,12 +2419,15 @@ opacityPowerField.addChangeListener(this); /**/ - resetSlidersButton.addActionListener(this); clearMaterialButton.addActionListener(this); createMaterialButton.addActionListener(this); - - propagateToggle.addItemListener(this); - multiplyToggle.addItemListener(this); + + if (Globals.ADVANCED) + { + resetSlidersButton.addActionListener(this); + propagateToggle.addItemListener(this); + multiplyToggle.addItemListener(this); + } } void DropFile(java.io.File[] files, boolean textures) @@ -1804,8 +2445,9 @@ // 3D models if (filename.endsWith(".3ds") || filename.endsWith(".3DS")) { - lastConverter = new com.jmex.model.converters.MaxToJme(); - LoadFile(filename, lastConverter); + //lastConverter = new com.jmex.model.converters.MaxToJme(); + //LoadFile(filename, lastConverter); + LoadObjFile(filename); // New 3ds loader continue; } if (filename.endsWith(".dae") || filename.endsWith(".DAE")) @@ -1957,7 +2599,7 @@ //? flashIt = false; CameraPane pane = (CameraPane) cameraView; - pane.clickStart(location.x, location.y, 0); + pane.clickStart(location.x, location.y, 0, 0); pane.clickEnd(location.x, location.y, 0, true); if (group.selection.size() == 1) @@ -2006,6 +2648,7 @@ e2.printStackTrace(); } } + LoadJMEThread loadThread; class LoadJMEThread extends Thread @@ -2063,6 +2706,7 @@ //LoadFile0(filename, converter); } } + LoadOBJThread loadObjThread; class LoadOBJThread extends Thread @@ -2141,19 +2785,19 @@ void LoadObjFile(String fullname) { - /* + System.out.println("Loading " + fullname); + /**/ //lastFilename = fullname; if(loadObjThread == null) { - loadObjThread = new LoadOBJThread(); - loadObjThread.start(); + loadObjThread = new LoadOBJThread(); + loadObjThread.start(); } loadObjThread.add(fullname); - */ + /**/ - System.out.println("Loading " + fullname); - makeSomething(new FileObject(fullname, true), true); + //makeSomething(new FileObject(fullname, true), true); } void LoadGFDFile(String fullname) @@ -2414,11 +3058,11 @@ void ImportJME(com.jmex.model.converters.FormatConverter converter, String ext, String dialogName) { - if (GrafreeD.standAlone) + if (Grafreed.standAlone) { /**/ FileDialog browser = new FileDialog(frame, dialogName, FileDialog.LOAD); - browser.show(); + browser.setVisible(true); String filename = browser.getFile(); if (filename != null && filename.length() > 0) { @@ -2529,6 +3173,7 @@ LA.matXRotate(((Object3D) group.get(group.size() - 1)).toParent, -Math.PI / 2); LA.matXRotate(((Object3D) group.get(group.size() - 1)).fromParent, Math.PI / 2); } + //cJME.count++; //cJME.count %= 12; if (gc) @@ -2563,6 +3208,7 @@ } if (input == null) { + new Exception().printStackTrace(); System.exit(0); } @@ -2711,6 +3357,7 @@ } } } + cFileSystemPane FSPane; void SetMaterial(cMaterial mat, Object3D.cVector2[] others) @@ -2720,7 +3367,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); @@ -2764,11 +3411,14 @@ } } } + freezematerial = false; } void SetMaterial(Object3D object) { + latestObject = object; + cMaterial mat = object.material; if (mat == null) @@ -2777,7 +3427,8 @@ return; } - multiplyToggle.setSelected(mat.multiply); + if (multiplyToggle != null) + multiplyToggle.setSelected(mat.multiply); assert (object.projectedVertices != null); @@ -2879,12 +3530,17 @@ // } /**/ - if (deselect) + if (deselect || child == null) { //group.deselectAll(); //freeze = true; GetTree().clearSelection(); //freeze = false; + + if (child == null) + { + return; + } } //group.addSelectee(child); @@ -2953,31 +3609,48 @@ cameraView.ToggleDL(); cameraView.repaint(); return; - } else if (event.getSource() == toggleTextureItem) + } else if (event.getSource() == toggleTextureItem || event.getSource() == toggleTextureCB) { cameraView.ToggleTexture(); // june 2013 copy.HardTouch(); cameraView.repaint(); return; - } else if (event.getSource() == toggleFullItem) + } else if (event.getSource() == toggleTimelineItem) { - if (CameraPane.FULLSCREEN) + timeline ^= true; + + if (timeline) { - frame.getContentPane().remove(/*"Center",*/bigThree); - framePanel.add(bigThree); - frame.getContentPane().add(/*"Center",*/framePanel); - } else - { - frame.getContentPane().remove(/*"Center",*/framePanel); - frame.getContentPane().add(/*"Center",*/bigThree); + centralPanel.remove(cameraView); + cameraPanel.add(cameraView); + centralPanel.add(cameraPanel); + frame.setJMenuBar(timelineMenubar); + wasFullScreen = CameraPane.FULLSCREEN; + if (!CameraPane.FULLSCREEN) + ToggleFullScreen(); + toggleFullScreenItem.setEnabled(false); } + else + { + centralPanel.remove(cameraPanel); + centralPanel.add(cameraView); + frame.setJMenuBar(null); + if (!wasFullScreen) + ToggleFullScreen(); + toggleFullScreenItem.setEnabled(true); + } + frame.validate(); - cameraView.ToggleFullScreen(); + return; + } else if (event.getSource() == toggleFullScreenItem) + { + ToggleFullScreen(); + frame.validate(); return; - } else if (event.getSource() == toggleRandomItem) + } else if (event.getSource() == toggleSwitchItem || event.getSource() == toggleSwitchCB) { - cameraView.ToggleRandom(); + cameraView.ToggleSwitch(); cameraView.repaint(); return; } else if (event.getSource() == toggleHandleItem) @@ -3005,12 +3678,17 @@ } else if (event.getSource() == liveCB) { copy.live ^= true; + objEditor.refreshContents(true); // To show item colors + return; + } else if (event.getSource() == selectableCB) + { + copy.dontselect ^= true; return; } else if (event.getSource() == hideCB) { copy.hide ^= true; copy.Touch(); // display list issue - objEditor.refreshContents(); + objEditor.refreshContents(true); // To show item colors return; } else if (event.getSource() == link2masterCB) { @@ -3020,6 +3698,7 @@ if (event.getSource() == randomCB) { copy.random ^= true; + objEditor.refreshContents(); return; } if (event.getSource() == speedupCB) @@ -3043,8 +3722,9 @@ public void actionPerformed(ActionEvent event) { + Object source = event.getSource(); // SCRIPT DIALOG - if (event.getSource() == okbutton) + if (source == okbutton) { textpanel.setVisible(false); textpanel.remove(textarea); @@ -3056,7 +3736,7 @@ textarea = null; textpanel = null; } - if (event.getSource() == cancelbutton) + if (source == cancelbutton) { textpanel.setVisible(false); textpanel.remove(textarea); @@ -3068,49 +3748,50 @@ //applySelf(); //client.refreshEditWindow(); //refreshContents(); - if (event.getSource() == nameField) + if (source == nameField) { //System.out.println("ObjEditor " + event); applySelf0(true); //parent.applySelf(); objEditor.refreshContents(); - } else if (event.getSource() == resetButton) + } else if (source == resetButton) { CameraPane.fullreset = true; copy.Reset(); // ResetMeshes(); copy.Touch(); objEditor.refreshContents(); - } else if (event.getSource() == stepItem) + } else if (source == stepItem) { - cameraView.ONESTEP = true; + //cameraView.ONESTEP = true; + Globals.ONESTEP = true; cameraView.repaint(); return; - } else if (event.getSource() == stepButton) + } else if (source == stepButton) { copy.Step(); copy.Touch(); objEditor.refreshContents(); - } else if (event.getSource() == slowerButton) + } else if (source == slowerButton) { copy.Slower(); copy.Touch(); objEditor.refreshContents(); - } else if (event.getSource() == fasterButton) + } else if (source == fasterButton) { copy.Faster(); copy.Touch(); objEditor.refreshContents(); - } else if (event.getSource() == remarkButton) + } else if (source == remarkButton) { copy.Remark(); copy.Touch(); objEditor.refreshContents(); - } else if (event.getSource() == stepAllButton) + } else if (source == stepAllButton) { copy.StepAll(); copy.Touch(); objEditor.refreshContents(); - } else if (event.getSource() == resetAllButton) + } else if (source == resetAllButton) { //CameraPane.fullreset = true; copy.ResetAll(); // ResetMeshes(); @@ -3143,53 +3824,79 @@ // Close(); // } // else - if (event.getSource() == resetSlidersButton) + if (source == resetSlidersButton) { ResetSliders(); - } else if (event.getSource() == clearMaterialButton) + } else if (source == clearMaterialButton) { ClearMaterial(); - } else if (event.getSource() == createMaterialButton) + } else if (source == createMaterialButton) { CreateMaterial(); - } else if (event.getSource() == clearPanelButton) + } else if (source == clearPanelButton) { copy.ClearUI(); refreshContents(true); - } /* - } - - public boolean action(Event event, Object arg) - { - */ else if (event.getSource() == closeItem) + } else if (source == importGFDItem) + { + ImportGFD(); + } else + if (source == importVRMLX3DItem) + { + ImportVRMLX3D(); + } else + if (source == import3DSItem) + { + objEditor.ImportJME(new com.jmex.model.converters.MaxToJme(), "3ds", "Import 3DS"); + } else + if (source == importOBJItem) + { + //objEditor.ImportJME(new com.jmex.model.converters.ObjToJme(), "obj", "Import OBJ"); + FileDialog browser = new FileDialog(frame, "Import OBJ", FileDialog.LOAD); + browser.setVisible(true); + String filename = browser.getFile(); + if (filename != null && filename.length() > 0) + { + String fullname = browser.getDirectory() + filename; + makeSomething(ReadOBJ(fullname), true); + } + } else + if (source == closeItem) { Close(); //return true; - } else if (event.getSource() == loadItem) + } else if (source == openItem) { - load(); + Open(); //return true; - } else if (event.getSource() == saveItem) + } else if (source == newItem) + { + New(); + } else if (source == saveItem) { save(); //return true; - } else if (event.getSource() == saveAsItem) + } else if (source == saveAsItem) { saveAs(); //return true; - } else if (event.getSource() == reexportItem) + } else if (source == reexportItem) { reexport(); //return true; - } else if (event.getSource() == exportAsItem) + } else if (source == exportAsItem) { export(); //return true; - } else if (event.getSource() == povItem) + } else if (source == povItem) { generatePOV(); //return true; - } else if (event.getSource() == zBufferItem) + } else if (event.getSource() == archiveItem) + { + cTools.Archive(frame); + return; + } else if (source == zBufferItem) { try { @@ -3211,21 +3918,8 @@ cameraView.repaint(); //return true; } - */ else if (event.getSource() == editCameraItem) - { - cameraView.ProtectCamera(); - cameraView.repaint(); - return; - } else if (event.getSource() == revertCameraItem) - { - cameraView.RevertCamera(); - cameraView.repaint(); - return; - } else if (event.getSource() == textureButton) - { - return; // true; - } else // combos... - if (event.getSource() == texresMenu) + */ else // combos... + if (source == texresMenu) { System.err.println("Object = " + copy + "; change value " + copy.texres + " to " + texresMenu.getSelectedIndex()); copy.texres = texresMenu.getSelectedIndex(); @@ -3237,27 +3931,487 @@ } } - void ToggleAnimation() + void New() { - if (!CameraPane.ANIMATION) + while (copy.Size() > 1) { - FileDialog browser = new FileDialog(frame, "Save Animation As...", FileDialog.SAVE); + copy.remove(1); + } + + ResetModel(); + objEditor.refreshContents(); + } + + static public byte[] Compress(Object3D o) + { + // Slower to actually compress. + try + { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); +// java.util.zip.GZIPOutputStream zstream = new java.util.zip.GZIPOutputStream(baos); + ObjectOutputStream out = new ObjectOutputStream(baos); //zstream); + + Object3D parent = o.parent; + o.parent = null; + + out.writeObject(o); + + o.parent = parent; + + out.flush(); + + baos //zstream + .close(); + out.close(); + + byte[] bytes = baos.toByteArray(); + + System.out.println("save #bytes = " + bytes.length); + return bytes; + } catch (Exception e) + { + System.err.println(e); + return null; + } + } + + static public Object Uncompress(byte[] bytes) + { + System.out.println("restore #bytes = " + bytes.length); + try + { + ByteArrayInputStream bais = new ByteArrayInputStream(bytes); + //java.util.zip.GZIPInputStream istream = new java.util.zip.GZIPInputStream(bais); + ObjectInputStream in = new ObjectInputStream(bais); // istream); + Object obj = in.readObject(); + + bais //istream + .close(); + in.close(); + + return obj; + } catch (Exception e) + { + System.err.println(e); + return null; + } + } + + static public Object clone(Object o) + { + try + { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ObjectOutputStream out = new ObjectOutputStream(baos); + + out.writeObject(o); + + out.flush(); + out.close(); + + byte[] bytes = baos.toByteArray(); + + System.out.println("clone = " + bytes.length); + + ByteArrayInputStream bais = new ByteArrayInputStream(bytes); + ObjectInputStream in = new ObjectInputStream(bais); + Object obj = in.readObject(); + in.close(); + + return obj; + } catch (Exception e) + { + System.err.println(e); + return null; + } + } + + cRadio GetCurrentTab() + { + cRadio ab; + for (java.util.Enumeration e = buttonGroup.getElements(); e.hasMoreElements();) + { + ab = (cRadio)e.nextElement(); + if(ab.GetObject() == copy) + { + return ab; + } + } + + return null; + } + + + public void Save() + { + //Save(true); + Replace(); + SetUndoStates(); + } + + private boolean Equal(byte[] compress, byte[] name) + { + if (compress.length != name.length) + { + return false; + } + + for (int i=compress.length; --i>=0;) + { + if (compress[i] != name[i]) + return false; + } + + 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]; + } + + CopyChanged(); + + SetUndoStates(); + } + + public boolean Save(boolean user) + { + System.err.println("Save"); + //Replace(); + + cRadio tab = GetCurrentTab(); + + Object3D compress = CompressCopy(); // Saved version. No need for "Replace"? + + boolean thesame = false; + +// 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.versionlist[++copy.versionindex] = compress; + + // if (increment) + // tab.versionindex++; + } + + //copy.RestoreBigData(versiontable); + + //assert(hashtable.isEmpty()); + +// for (int i = copy.versionindex+1; i < copy.versionlist.length; i++) +// { +// //tab.user[i] = false; +// copy.versionlist[i] = null; +// } + + SetUndoStates(); + + // test save + if (false) + { + try + { + FileOutputStream ostream = new FileOutputStream("save" + copy.versionindex); + ObjectOutputStream p = new ObjectOutputStream(ostream); + + p.writeObject(copy); + + p.flush(); + + ostream.close(); + } catch (Exception e) + { + e.printStackTrace(); + } + } + + return !thesame; + } + + boolean flashIt = true; + + void RefreshSelection() + { + 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 = copy.versionlist[copy.versionindex]; + + SetUndoStates(); + + boolean temp = CameraPane.SWITCH; + CameraPane.SWITCH = false; + + copy.ExtractBigData(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); + + CameraPane.SWITCH = temp; + + RefreshSelection(); + //assert(hashtable.isEmpty()); + + copy.Touch(); + + ResetModel(); + copy.HardTouch(); // recompile? + + cRadio ab; + for (java.util.Enumeration e = buttonGroup.getElements(); e.hasMoreElements();) + { + ab = (cRadio)e.nextElement(); + Object3D test = copy.GetObject(ab.object.GetUUID()); + //ab.camera = (Camera)copy.GetObject(ab.camera.GetUUID()); + if (test != null) + { + test.editWindow = ab.object.editWindow; + ab.object = test; + } + } + + refreshContents(true); + } + + cButton previousVersionButton; + cButton restoreButton; + cButton replaceButton; + cButton nextVersionButton; + cButton saveVersionButton; + cButton deleteVersionButton; + + boolean muteSlider; + + int VersionCount() + { + int count = 0; + + for (int i = copy.versionlist.length; --i >= 0;) + { + if (copy.versionlist[i] != null) + count++; + } + + return count; + } + + void SetUndoStates() + { + cRadio tab = GetCurrentTab(); + + restoreButton.setEnabled(true); // copy.versionindex != -1); + replaceButton.setEnabled(true); // copy.versionindex != -1); + + previousVersionButton.setEnabled(copy.versionindex > 0); + nextVersionButton.setEnabled(copy.versionlist[copy.versionindex + 1] != null); + + deleteVersionButton.setEnabled(//copy.versionindex > 0 && + copy.versionlist[copy.versionindex + 1] != null); + + muteSlider = true; + versionSlider.setMaximum(VersionCount() - 1); + versionSlider.setInteger(copy.versionindex); + muteSlider = false; + } + + public boolean PreviousVersion() + { + // Option? + Replace(); + + System.err.println("Undo"); + + cRadio tab = GetCurrentTab(); + + if (copy.versionindex == 0) + { + java.awt.Toolkit.getDefaultToolkit().beep(); + return false; + } + +// if (tab.graphs[tab.versionindex] == null) // || !tab.user[tab.versionindex]) +// { +// if (Save(false)) +// tab.versionindex -= 1; +// else +// { +// if (tab.versionindex <= 0) +// return false; +// else +// tab.versionindex -= 1; +// } +// } + + copy.versionindex -= 1; + + CopyChanged(); + + return true; + } + + public boolean Restore() + { + System.err.println("Restore"); + + cRadio tab = GetCurrentTab(); + + if (copy.versionindex == -1 || copy.versionlist[copy.versionindex] == null) + { + java.awt.Toolkit.getDefaultToolkit().beep(); + return false; + } + + //CopyChanged((Object3D)Uncompress(copy.versions[copy.versionindex])); + CopyChanged(); + + return true; + } + + public boolean Replace() + { + System.err.println("Replace"); + + cRadio tab = GetCurrentTab(); + + if (copy.versionindex == -1 || copy.versionlist[copy.versionindex] == null) + { + // No version yet. OK. java.awt.Toolkit.getDefaultToolkit().beep(); + return false; + } + + copy.versionlist[copy.versionindex] = CompressCopy(); + + return true; + } + + public void NextVersion() + { + // Option? + Replace(); + + cRadio tab = GetCurrentTab(); + + if (copy.versionlist[copy.versionindex + 1] == null) + { + java.awt.Toolkit.getDefaultToolkit().beep(); + return; + } + + copy.versionindex += 1; + + CopyChanged(); + + //if (!tab.user[tab.versionindex]) + // tab.graphs[tab.versionindex] = null; + } + + void ImportGFD() + { + FileDialog browser = new FileDialog(objEditor.frame, "Import GrafreeD", FileDialog.LOAD); browser.show(); String filename = browser.getFile(); if (filename != null && filename.length() > 0) { - CameraPane.filename = browser.getDirectory() + filename; + String fullname = browser.getDirectory() + filename; + + //Object3D readobj = + objEditor.ReadGFD(fullname, objEditor); + //makeSomething(readobj); + } + } + + void ImportVRMLX3D() + { + if (Grafreed.standAlone) + { + /**/ + FileDialog browser = new FileDialog(objEditor.frame, "Import VRML/X3D", FileDialog.LOAD); + browser.show(); + String filename = browser.getFile(); + if (filename != null && filename.length() > 0) + { + String fullname = browser.getDirectory() + filename; + LoadVRMLX3D(fullname); + } + /**/ + } + } + + void ToggleAnimation() + { + if (!Globals.ANIMATION) + { + FileDialog browser = new FileDialog(frame, "Save Animation As...", FileDialog.SAVE); + browser.setVisible(true); + String filename = browser.getFile(); + if (filename != null && filename.length() > 0) + { + Globals.filename = browser.getDirectory() + filename; //CameraPane.framecount = 0; - CameraPane.imagecount = 0; + Globals.imagecount = 0; - CameraPane.ANIMATION ^= true; + Globals.ANIMATION ^= true; - GrafreeD.wav.cursor = 0; - GrafreeD.wav.loop = 0; + Grafreed.wav.cursor = 0; + Grafreed.wav.loop = 0; } } else { - CameraPane.ANIMATION ^= true; + Globals.ANIMATION ^= true; } } @@ -3303,7 +4457,7 @@ void CreateMaterial() { //copy.ClearMaterial(); // PATCH - copy.CreateMaterialS(multiplyToggle.isSelected()); + copy.CreateMaterialS(multiplyToggle != null && multiplyToggle.isSelected()); if (copy.selection.size() > 0) //SetMaterial(copy); { @@ -3354,7 +4508,7 @@ assert false; } - void EditSelection() + void EditSelection(boolean newWindow) { } @@ -3362,11 +4516,11 @@ { copy.ResetBlockLoop(); // temporary problem - boolean random = CameraPane.RANDOM; - CameraPane.RANDOM = false; // parse everything + boolean random = CameraPane.SWITCH; + CameraPane.SWITCH = false; // parse everything copy.ResetDisplayList(); copy.HardTouch(); - CameraPane.RANDOM = random; + CameraPane.SWITCH = random; } // public void applySelf() @@ -3413,7 +4567,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(); @@ -3436,10 +4590,40 @@ current.fakedepth = (float) fakedepthField.getFloat(); current.shadowbias = (float) shadowbiasField.getFloat(); - if (!NumberSlider.frozen) + if (!cNumberSlider.frozen) { //System.out.println("Propagate = " + propagate); copy.UpdateMaterial(anchor, current, propagate); + + if (copy.material != null) + { + cMaterial mat = copy.material; + + colorField.SetToolTipValue((mat.color)); + saturationField.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 (copy.material != null && copy.projectedVertices.length > 0 && copy.projectedVertices[0] != null) { copy.projectedVertices[0].x = (int) (bumpField.getFloat() * 1000); @@ -3468,9 +4652,26 @@ //copy.Touch(); } + cNumberSlider versionSlider; + public void stateChanged(ChangeEvent e) { // assert(false); + if (e.getSource() == versionSlider) + { + if (muteSlider) + return; + + int version = versionSlider.getInteger(); + + if (copy.versionlist[version] != null) + { + copy.versionindex = version; + CopyChanged(); + } + + return; + } if (freezematerial) { @@ -3484,6 +4685,7 @@ || e.getSource() == apertureField || e.getSource() == shadowblurField) { + new Exception().printStackTrace(); System.exit(0); cameraView.options1[0] = (float) focusField.getFloat() * 10; cameraView.options1[1] = (float) apertureField.getFloat() / 1000; @@ -3505,12 +4707,24 @@ { //System.out.println("stateChanged = " + this); materialtouched = true; + + if (e.getSource() == colorField && saturationField.getFloat() == 0.001) + { + saturationField.setFloat(1); + } + applySelf(); //System.out.println("this = " + this); //System.out.println("PARENT = " + parent); //if (parent != null) // parent.applySelf(); - refreshContents(); + if (e.getSource() == normalpushField) + { + objEditor.refreshContents(); + //Refresh(); + } + else + refreshContents(); // ??? client.refreshEditWindow(); } //else @@ -3522,7 +4736,7 @@ //group.name = nameField.getText(); //objEditor.applySelf(); - assert (objEditor == this); + // OCT2018: assert (objEditor == this); if (copy.selection == null || copy.selection.size() == 0) //super.applySelf() ; else @@ -3546,12 +4760,18 @@ objEditor.copy = keep; } } + + if (normalpushField != null) + copy.NORMALPUSH = (float)normalpushField.getFloat()/100; } void SnapObject() { - Object3D obj = (Object3D)copy.selection.elementAt(0); - SnapObject(obj); + if (copy.selection.size() > 0) + { + Object3D obj = (Object3D)copy.selection.elementAt(0); + SnapObject(obj); + } } void SnapObject(Object3D obj) @@ -3792,20 +5012,26 @@ { if (GetTree() != null) { + GetTree().revalidate(); GetTree().repaint(); } radioPanel.revalidate(); radioPanel.repaint(); - ctrlPanel.revalidate(); // ? new + ctrlPanel.validate(); // ? new ctrlPanel.repaint(); } + + if (previousVersionButton != null && copy.versionlist != null) + SetUndoStates(); } static TweenManager tweenManager = new TweenManager(); void makeSomething(Object3D thing, boolean resetmodel) // deselect) { + if (Globals.REPLACEONMAKE) // && resetmodel) + Save(); //Tween.set(thing, 0).target(1).start(tweenManager); //Tween.to(thing, 0, 0.5f).target(0).start(tweenManager); // if (thing instanceof GenericJointDemo) @@ -3892,6 +5118,12 @@ { ResetModel(); Select(thing.GetTreePath(), true, false); // unselect... false); + + if (thing.Size() == 0) + { + //EditSelection(false); + } + refreshContents(); } @@ -4009,6 +5241,7 @@ } } } + LoadGFDThread loadGFDThread; void ReadGFD(String fullname, iCallBack cb) @@ -4028,8 +5261,10 @@ try { + // Try compressed version first. java.io.FileInputStream istream = new java.io.FileInputStream(fullname); - java.io.ObjectInputStream p = new java.io.ObjectInputStream(istream); + java.util.zip.GZIPInputStream zstream = new java.util.zip.GZIPInputStream(istream); + java.io.ObjectInputStream p = new java.io.ObjectInputStream(zstream); readobj = (Object3D) p.readObject(); istream.close(); @@ -4037,7 +5272,22 @@ readobj.ResetDisplayList(); } catch (Exception e) { - e.printStackTrace(); + if (!e.toString().contains("GZIP")) + e.printStackTrace(); + + try + { + java.io.FileInputStream istream = new java.io.FileInputStream(fullname); + java.io.ObjectInputStream p = new java.io.ObjectInputStream(istream); + + readobj = (Object3D) p.readObject(); + istream.close(); + + readobj.ResetDisplayList(); + } catch (Exception e2) + { + e2.printStackTrace(); + } } // catch(java.io.StreamCorruptedException e) { e.printStackTrace(); } // catch(java.io.IOException e) { System.out.println("IOexception"); e.printStackTrace(); } @@ -4083,6 +5333,12 @@ void LoadIt(Object obj) { + if (obj == null) + { + // Invalid file + return; + } + System.out.println("Loaded " + obj); //new Exception().printStackTrace(); Object3D readobj = (Object3D) obj; @@ -4092,10 +5348,14 @@ if (readobj != null) { + //if (Globals.SAVEONMAKE) // A new object cannot share meshes + // Save(); try { //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); @@ -4136,6 +5396,7 @@ } } catch (ClassCastException e) { + e.printStackTrace(); assert (false); Composite c = (Composite) copy; c.children.clear(); @@ -4146,17 +5407,28 @@ c.addChild(csg); } + copy.versionlist = readobj.versionlist; + copy.versionindex = readobj.versionindex; + + if (copy.versionlist == null) + { + copy.versionlist = new Object3D[100]; + copy.versionindex = -1; + } + + //? SetUndoStates(); + ResetModel(); copy.HardTouch(); // recompile? refreshContents(); } } - void load() // throws ClassNotFoundException + void Open() // throws ClassNotFoundException { - if (GrafreeD.standAlone) + 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) @@ -4241,11 +5513,13 @@ try { FileOutputStream ostream = new FileOutputStream(lastname); - ObjectOutputStream p = new ObjectOutputStream(ostream); + java.util.zip.GZIPOutputStream zstream = new java.util.zip.GZIPOutputStream(ostream); + ObjectOutputStream p = new ObjectOutputStream(zstream); p.writeObject(copy); p.flush(); + zstream.close(); ostream.close(); //FileOutputStream fos = new FileOutputStream(fullname); @@ -4253,19 +5527,23 @@ //ps.print(buffer.toString()); } catch (IOException e) { + e.printStackTrace(); } } + String lastname; void saveAs() { - if (GrafreeD.standAlone) + if (Grafreed.standAlone) { FileDialog browser = new FileDialog(frame, "Save As", FileDialog.SAVE); browser.setVisible(true); String filename = browser.getFile(); if (filename != null && filename.length() > 0) { + if (!filename.endsWith(".gfd")) + filename += ".gfd"; lastname = browser.getDirectory() + filename; save(); } @@ -4364,13 +5642,13 @@ try { FileOutputStream ostream = new FileOutputStream(filename); - // ?? java.util.zip.GZIPOutputStream zstream = new java.util.zip.GZIPOutputStream(ostream); - ObjectOutputStream p = new ObjectOutputStream(/*z*/ostream); + java.util.zip.GZIPOutputStream zstream = new java.util.zip.GZIPOutputStream(ostream); + ObjectOutputStream p = new ObjectOutputStream(zstream); Object3D objectparent = obj.parent; obj.parent = null; - Object3D object = (Object3D) GrafreeD.clone(obj); + Object3D object = (Object3D) Grafreed.clone(obj); obj.parent = objectparent; @@ -4382,8 +5660,8 @@ p.writeObject(object); p.flush(); + zstream.close(); ostream.close(); - // zstream.close(); // group.selection.get(0).parent = parent; //FileOutputStream fos = new FileOutputStream(fullname); @@ -4404,7 +5682,7 @@ buffer.append("background { color rgb <0.8,0.8,0.8> }\n\n"); cameraView.renderCamera.generatePOV(buffer, bnds.width, bnds.height); copy.generatePOV(buffer); - if (GrafreeD.standAlone) + if (Grafreed.standAlone) { FileDialog browser = new FileDialog(frame, "Export POV", 1); browser.show(); @@ -4430,53 +5708,70 @@ Object3D client; Object3D copy; MenuBar menuBar; - Menu windowMenu; - MenuItem loadItem; + Menu fileMenu; + MenuItem newItem; + MenuItem openItem; MenuItem saveItem; MenuItem saveAsItem; MenuItem exportAsItem; MenuItem reexportItem; MenuItem povItem; MenuItem closeItem; - Menu cameraMenu; + CheckboxMenuItem zBufferItem; //MenuItem normalLensItem; - MenuItem editCameraItem; - MenuItem revertCameraItem; - CheckboxMenuItem toggleLiveItem; MenuItem stepItem; - CheckboxMenuItem toggleFullItem; + CheckboxMenuItem toggleLiveItem; + CheckboxMenuItem toggleFullScreenItem; + CheckboxMenuItem toggleTimelineItem; CheckboxMenuItem toggleRenderItem; CheckboxMenuItem toggleDebugItem; CheckboxMenuItem toggleFrustumItem; CheckboxMenuItem toggleFootContactItem; CheckboxMenuItem toggleDLItem; CheckboxMenuItem toggleTextureItem; - CheckboxMenuItem toggleRandomItem; + CheckboxMenuItem toggleSwitchItem; CheckboxMenuItem toggleRootItem; CheckboxMenuItem animationItem; + MenuItem archiveItem; CheckboxMenuItem toggleHandleItem; CheckboxMenuItem togglePaintItem; JSplitPane mainPanel; JScrollPane scrollpane; + JPanel toolbarPanel; - JPanel treePanel; + + cGridBag treePanel; + JPanel radioPanel; ButtonGroup buttonGroup; - JPanel ctrlPanel; - JPanel materialPanel; + + cGridBag toolboxPanel; + cGridBag materialPanel; + cGridBag ctrlPanel; + JScrollPane infoPanel; - JPanel optionsPanel; + + cGridBag optionsPanel; + JTabbedPane objectPanel; - JPanel XYZPanel; + boolean materialFlushed; + Object3D latestObject; + + cGridBag XYZPanel; + JSplitPane gridPanel; JSplitPane bigPanel; - JPanel bigThree; - JTabbedPane scenePanel; - JPanel cameraPanel; + + cGridBag bigThree; + cGridBag scenePanel; + cGridBag centralPanel; + JSplitPane cameraPanel; + JPanel timelinePanel; + JMenuBar timelineMenubar; JSplitPane framePanel; JTextArea/*Field*/ nameField; - cButton textureButton; + //cButton textureButton; cButton okButton; cButton applyButton; cButton cancelButton; @@ -4523,65 +5818,72 @@ // MATERIAL JLabel materialLabel; JLabel colorLabel; - NumberSlider colorField; + cNumberSlider colorField; JLabel modulationLabel; - NumberSlider modulationField; + cNumberSlider saturationField; JLabel metalnessLabel; - NumberSlider metalnessField; + cNumberSlider metalnessField; JLabel diffuseLabel; - NumberSlider diffuseField; + cNumberSlider diffuseField; JLabel specularLabel; - NumberSlider specularField; + cNumberSlider specularField; JLabel shininessLabel; - NumberSlider shininessField; + cNumberSlider shininessField; JLabel shiftLabel; - NumberSlider shiftField; + cNumberSlider shiftField; JLabel ambientLabel; - NumberSlider ambientField; + cNumberSlider ambientField; JLabel lightareaLabel; - NumberSlider lightareaField; + cNumberSlider lightareaField; JLabel diffusenessLabel; - NumberSlider diffusenessField; + cNumberSlider diffusenessField; JLabel velvetLabel; - NumberSlider velvetField; + cNumberSlider velvetField; JLabel sheenLabel; - NumberSlider sheenField; + cNumberSlider sheenField; JLabel subsurfaceLabel; - NumberSlider subsurfaceField; + cNumberSlider subsurfaceField; //JLabel bumpLabel; //NumberSlider bumpField; JLabel backlitLabel; - NumberSlider backlitField; + cNumberSlider backlitField; JLabel anisoLabel; - NumberSlider anisoField; + cNumberSlider anisoField; JLabel anisoVLabel; - NumberSlider anisoVField; + cNumberSlider anisoVField; JLabel cameraLabel; - NumberSlider cameraField; + cNumberSlider cameraField; JLabel selfshadowLabel; - NumberSlider selfshadowField; + cNumberSlider selfshadowField; JLabel shadowLabel; - NumberSlider shadowField; + cNumberSlider shadowField; JLabel textureLabel; - NumberSlider textureField; + cNumberSlider textureField; JLabel opacityLabel; - NumberSlider opacityField; + cNumberSlider opacityField; JLabel fakedepthLabel; - NumberSlider fakedepthField; + cNumberSlider fakedepthField; JLabel shadowbiasLabel; - NumberSlider shadowbiasField; + cNumberSlider shadowbiasField; JLabel bumpLabel; - NumberSlider bumpField; + cNumberSlider bumpField; JLabel noiseLabel; - NumberSlider noiseField; + cNumberSlider noiseField; JLabel powerLabel; - NumberSlider powerField; + cNumberSlider powerField; JLabel borderfadeLabel; - NumberSlider borderfadeField; + cNumberSlider borderfadeField; JLabel fogLabel; - NumberSlider fogField; + cNumberSlider fogField; JLabel opacityPowerLabel; - NumberSlider opacityPowerField; - JTree jTree; + cNumberSlider opacityPowerField; + cTree jTree; //ObjectUI parent; + + cNumberSlider normalpushField; + + private MenuItem importGFDItem; + private MenuItem importVRMLX3DItem; + private MenuItem import3DSItem; + private MenuItem importOBJItem; } -- Gitblit v1.6.2