From a69bb4474a3264a9a7a7f8b8d8154ea771f167c8 Mon Sep 17 00:00:00 2001 From: Normand Briere <nbriere@noware.ca> Date: Fri, 28 Jun 2019 23:44:22 -0400 Subject: [PATCH] Fix ungroup. --- ObjEditor.java | 1069 ++++++++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 837 insertions(+), 232 deletions(-) diff --git a/ObjEditor.java b/ObjEditor.java index d3eefb5..b7cf47d 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.*; @@ -13,6 +14,9 @@ import javax.swing.plaf.metal.MetalLookAndFeel; //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; @@ -35,6 +39,67 @@ GroupEditor callee; JFrame frame; + + static ObjEditor theFrame; + + cButton GetButton(String name, boolean border) + { + try + { + ImageIcon icon = GetIcon(name); + return new cButton(icon, border); + } + catch (Exception e) + { + return new cButton(name, border); + } + } + + cToggleButton GetToggleButton(String name, boolean border) + { + try + { + ImageIcon icon = GetIcon(name); + return new cToggleButton(icon, border); + } + catch (Exception e) + { + return new cToggleButton(name, border); + } + } + + cCheckBox GetCheckBox(String name, boolean border) + { + try + { + ImageIcon icon = GetIcon(name); + return new cCheckBox(icon, border); + } + catch (Exception e) + { + return new cCheckBox(name, border); + } + } + + private ImageIcon GetIcon(String name) throws IOException + { + BufferedImage image = javax.imageio.ImageIO.read(getClass().getClassLoader().getResourceAsStream(name)); + + if (image.getWidth() != 24 && image.getHeight() != 24) + { + BufferedImage resized = new BufferedImage(24, 24, image.getType()); + Graphics2D g = resized.createGraphics(); + g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); + //g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + g.drawImage(image, 0, 0, 24, 24, 0, 0, image.getWidth(), image.getHeight(), null); + g.dispose(); + + image = resized; + } + + javax.swing.ImageIcon icon = new javax.swing.ImageIcon(image); + return icon; + } // SCRIPT @@ -143,7 +208,9 @@ //nameField.removeActionListener(this); // objEditor.ctrlPanel.remove(nameField); - if (!GroupEditor.allparams) + objEditor.ctrlPanel.remove(namePanel); + + if (!allparams) return; // objEditor.ctrlPanel.remove(liveCB); @@ -165,9 +232,9 @@ // objEditor.ctrlPanel.remove(fasterButton); // objEditor.ctrlPanel.remove(remarkButton); - objEditor.ctrlPanel.remove(namePanel); objEditor.ctrlPanel.remove(setupPanel); - objEditor.ctrlPanel.remove(commandsPanel); + objEditor.ctrlPanel.remove(setupPanel2); + objEditor.ctrlPanel.remove(objectCommandsPanel); objEditor.ctrlPanel.remove(pushPanel); //objEditor.ctrlPanel.remove(fillPanel); @@ -242,6 +309,7 @@ //localCopy.parent = null; frame = new JFrame(); + frame.setUndecorated(true); objEditor = this; this.callee = callee; @@ -272,27 +340,48 @@ 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(loadItem = 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")); } + newItem.addActionListener(this); loadItem.addActionListener(this); saveItem.addActionListener(this); saveAsItem.addActionListener(this); @@ -301,70 +390,53 @@ //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(toggleTimelineItem = new CheckboxMenuItem("Timeline")); - toggleTimelineItem.addItemListener(this); - cameraMenu.add(toggleFullScreenItem = new CheckboxMenuItem("Full Screen")); - toggleFullScreenItem.addItemListener(this); - toggleFullScreenItem.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(Globals.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 cGridBag(); treePanel.setName("Tree"); + + editPanel = new cGridBag().setVertical(true); + editPanel.setName("Edit"); + ctrlPanel = new cGridBag().setVertical(false); // new GridBagLayout()); - ctrlPanel.setName("Edit"); + + editCommandsPanel = new cGridBag(); + editPanel.add(editCommandsPanel); + editPanel.add(ctrlPanel); + + toolboxPanel = new cGridBag().setVertical(false); + toolboxPanel.setName("Toolbox"); + materialPanel = new cGridBag().setVertical(true); materialPanel.setName("Material"); + /*JTextPane*/ infoarea = createTextPane(); doc = infoarea.getStyledDocument(); @@ -377,7 +449,7 @@ // 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.setPreferredSize(new Dimension(50, 200)); infoPanel.setName("Info"); //infoPanel.setLayout(new BorderLayout()); //infoPanel.add(createTextPane()); @@ -389,7 +461,14 @@ mainPanel.setDividerSize(9); 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)); @@ -457,10 +536,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); } @@ -483,13 +562,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 @@ -531,7 +610,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) { @@ -620,20 +699,111 @@ } } +static GraphicsDevice device = GraphicsEnvironment + .getLocalGraphicsEnvironment().getScreenDevices()[0]; + + 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; + + void Minimize() + { + 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) + { + ToggleFullScreen(); + } + + 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); + } + + maximized ^= true; + + frame.validate(); + } + + cButton minButton; + cButton maxButton; + cButton fullButton; + void ToggleFullScreen() { - if (CameraPane.FULLSCREEN) + cameraView.ToggleFullScreen(); + + if (!CameraPane.FULLSCREEN) { - frame.getContentPane().remove(/*"Center",*/bigThree); - framePanel.add(bigThree); - frame.getContentPane().add(/*"Center",*/framePanel); + device.setFullScreenWindow(null); + frame.validate(); + + //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(1); + + //frame.setVisible(true); + radio.layout = keepButton; + //theFrame = null; + keepButton = null; + radio.layout.doClick(); + } else { - frame.getContentPane().remove(/*"Center",*/framePanel); - framePanel.remove(bigThree); - frame.getContentPane().add(/*"Center",*/bigThree); + keepButton = radio.layout; + //keeprect = frame.getBounds(); +// frame.setBounds(0, 0, frame.getToolkit().getScreenSize().width, +// frame.getToolkit().getScreenSize().height); + //frame.setVisible(false); + device.setFullScreenWindow(frame); + frame.validate(); +// 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); } - cameraView.ToggleFullScreen(); + frame.validate(); } private JTextPane createTextPane() @@ -734,7 +904,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); @@ -766,6 +936,7 @@ // NumberSlider vDivsField; // JCheckBox endcaps; JCheckBox liveCB; + JCheckBox selectCB; JCheckBox hideCB; JCheckBox link2masterCB; JCheckBox markCB; @@ -773,7 +944,12 @@ JCheckBox speedupCB; JCheckBox rewindCB; JCheckBox flipVCB; + + cCheckBox toggleTextureCB; + cCheckBox toggleSwitchCB; + JComboBox texresMenu; + JButton resetButton; JButton stepButton; JButton stepAllButton; @@ -782,9 +958,13 @@ JButton fasterButton; JButton remarkButton; + cGridBag editPanel; + cGridBag editCommandsPanel; + cGridBag namePanel; cGridBag setupPanel; - cGridBag commandsPanel; + cGridBag setupPanel2; + cGridBag objectCommandsPanel; cGridBag pushPanel; cGridBag fillPanel; @@ -956,44 +1136,67 @@ namePanel = new cGridBag(); nameField = AddText(namePanel, copy.GetName()); - namePanel.add(nameField); + namePanel.add(new JScrollPane(nameField, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER)); oe.ctrlPanel.add(namePanel); oe.ctrlPanel.Return(); - if (!GroupEditor.allparams) + if (!allparams) return; setupPanel = new cGridBag().setVertical(false); liveCB = AddCheckBox(setupPanel, "Live", copy.live); - if (Globals.ADVANCED) - link2masterCB = AddCheckBox(setupPanel, "Supp", copy.link2master); - hideCB = AddCheckBox(setupPanel, "Hide", copy.hide); + liveCB.setToolTipText("Animate object"); + selectCB = AddCheckBox(setupPanel, "Select", !copy.dontselect); + selectCB.setToolTipText("Make object selectable"); // Return(); + hideCB = AddCheckBox(setupPanel, "Hide", copy.hide); + hideCB.setToolTipText("Hide object"); markCB = AddCheckBox(setupPanel, "Mark", copy.marked); - rewindCB = AddCheckBox(setupPanel, "Rew", copy.rewind); - randomCB = AddCheckBox(setupPanel, "Rand", copy.random); + markCB.setToolTipText("As animation target transform"); + + 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)"); + if (Globals.ADVANCED) + { + link2masterCB = AddCheckBox(setupPanel2, "Supp", copy.link2master); + link2masterCB.setToolTipText("Attach to support"); + 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(); - commandsPanel = new cGridBag().setVertical(false); + objectCommandsPanel = new cGridBag().setVertical(false); - resetButton = AddButton(commandsPanel, "Reset"); - stepButton = AddButton(commandsPanel, "Step"); + 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(commandsPanel, "Speed", copy.speedup); // Return(); - slowerButton = AddButton(commandsPanel, "Slow"); - fasterButton = AddButton(commandsPanel, "Fast"); - remarkButton = AddButton(commandsPanel, "Remark"); + 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"); - oe.ctrlPanel.add(commandsPanel); + oe.ctrlPanel.add(objectCommandsPanel); oe.ctrlPanel.Return(); - pushPanel = AddSlider(oe.ctrlPanel, "Push", -10, 10, 0, 1); + pushPanel = AddSlider(oe.ctrlPanel, "Push", -1, 1, copy.NORMALPUSH, 1.1); // To have the buttons normalpushField = (cNumberSlider)pushPanel.getComponent(1); //Return(); @@ -1196,8 +1399,11 @@ //worldPanel.setName("World"); centralPanel = new cGridBag(); centralPanel.preferredWidth = 20; - timelinePanel = new JPanel(new BorderLayout()); - timelineMenubar = new timeflow.app.TimeflowApp().TimeFlowWindow(timelinePanel); + + 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); @@ -1206,7 +1412,10 @@ // cameraPanel.setDividerSize(9); cameraPanel.setResizeWeight(1.0); + } + centralPanel.add(cameraView); + centralPanel.setFocusable(true); //frame.setJMenuBar(timelineMenubar); //centralPanel.add(timelinePanel); @@ -1273,8 +1482,9 @@ // north.setName("Edit"); // north.add(ctrlPanel, BorderLayout.NORTH); // objectPanel.add(north); - objectPanel.add(ctrlPanel); + objectPanel.add(editPanel); objectPanel.add(infoPanel); + objectPanel.add(toolboxPanel); /* aConstraints.gridx = 0; @@ -1283,7 +1493,7 @@ aConstraints.gridy += 1; aConstraints.gridwidth = 1; mainPanel.add(objectPanel, aConstraints); - */ + */ scrollpane = new JScrollPane(mainPanel, ScrollPaneConstants.// VERTICAL_SCROLLBAR_ALWAYS, VERTICAL_SCROLLBAR_AS_NEEDED, @@ -1295,14 +1505,12 @@ scrollpane.addMouseWheelListener(this); // Default not fast enough /*JTabbedPane*/ scenePanel = new cGridBag(); - scenePanel.preferredWidth = 7; + scenePanel.preferredWidth = 6; JTabbedPane tabbedPane = new JTabbedPane(); tabbedPane.add(scrollpane); - tabbedPane.add(FSPane = new cFileSystemPane(this)); - - optionsPanel = new cGridBag().setVertical(true); + optionsPanel = new cGridBag().setVertical(false); optionsPanel.setName("Options"); @@ -1310,6 +1518,8 @@ tabbedPane.add(optionsPanel); + tabbedPane.add(FSPane = new cFileSystemPane(this)); + scenePanel.add(tabbedPane); /* @@ -1401,9 +1611,13 @@ // aConstraints = gbc; // (GridBagConstraints) GrafreeD.clone(gbc); - frame.setSize(1024, 768); - frame.show(); + frame.setSize(1280, 860); + + frame.validate(); + frame.setVisible(true); + cameraView.requestFocusInWindow(); + gridPanel.setDividerLocation(1.0); frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); @@ -1441,19 +1655,22 @@ cGridBag editBar = new cGridBag().setVertical(false); - editBar.add(createMaterialButton = new cButton("Create", !GrafreeD.NIMBUSLAF)); // , aConstraints); + editBar.add(createMaterialButton = new cButton("Create", !Grafreed.NIMBUSLAF)); // , aConstraints); createMaterialButton.setToolTipText("Create material"); /* ctrlPanel.add(resetSlidersButton = new cButton("Reset All"), aConstraints); */ - editBar.add(clearMaterialButton = new cButton("Clear", !GrafreeD.NIMBUSLAF)); // , aConstraints); + editBar.add(clearMaterialButton = new cButton("Clear", !Grafreed.NIMBUSLAF)); // , aConstraints); clearMaterialButton.setToolTipText("Clear material"); - 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); + 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); + } editBar.preferredHeight = 15; @@ -1487,24 +1704,6 @@ textureLabel.setHorizontalAlignment(SwingConstants.TRAILING); texture.add(textureField = new cNumberSlider(this, 0.001, 1, -0.5)); // , aConstraints); colorSection.add(texture); - - 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); - colorSection.add(anisoU); - - 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); - colorSection.add(anisoV); - - 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); - colorSection.add(shadowbias); panel.add(new JSeparator()); @@ -1556,6 +1755,12 @@ fakedepth.add(fakedepthField = new cNumberSlider(this, 0.001, 50, -1)); // , aConstraints); diffuseSection.add(fakedepth); + 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); + panel.add(new JSeparator()); panel.add(diffuseSection); @@ -1606,6 +1811,18 @@ // 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); + + 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); + panel.add(new JSeparator()); @@ -1613,35 +1830,35 @@ //ctrlPanel.add(new JLabel("----------------------------------")); // , aConstraints); - cGridBag globalSection = new cGridBag().setVertical(true); + //cGridBag globalSection = new cGridBag().setVertical(true); 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); - globalSection.add(camera); + colorSection.add(camera); 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); - globalSection.add(ambient); + colorSection.add(ambient); 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); - globalSection.add(backlit); + colorSection.add(backlit); cGridBag opacity = new cGridBag(); opacity.add(opacityLabel = new JLabel("Opacity")); // , aConstraints); opacityLabel.setHorizontalAlignment(SwingConstants.TRAILING); opacity.add(opacityField = new cNumberSlider(this, 0.001, 1, -0.5)); // , aConstraints); - globalSection.add(opacity); + colorSection.add(opacity); - panel.add(new JSeparator()); + //panel.add(new JSeparator()); - panel.add(globalSection); + //panel.add(globalSection); //ctrlPanel.add(new JLabel("----------------------------------")); // , aConstraints); @@ -1722,12 +1939,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) @@ -1898,7 +2118,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) @@ -1947,6 +2167,7 @@ e2.printStackTrace(); } } + LoadJMEThread loadThread; class LoadJMEThread extends Thread @@ -2004,6 +2225,7 @@ //LoadFile0(filename, converter); } } + LoadOBJThread loadObjThread; class LoadOBJThread extends Thread @@ -2082,19 +2304,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) @@ -2355,11 +2577,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) { @@ -2711,6 +2933,8 @@ void SetMaterial(Object3D object) { + latestObject = object; + cMaterial mat = object.material; if (mat == null) @@ -2719,7 +2943,8 @@ return; } - multiplyToggle.setSelected(mat.multiply); + if (multiplyToggle != null) + multiplyToggle.setSelected(mat.multiply); assert (object.projectedVertices != null); @@ -2821,12 +3046,17 @@ // } /**/ - if (deselect) + if (deselect || child == null) { //group.deselectAll(); //freeze = true; GetTree().clearSelection(); //freeze = false; + + if (child == null) + { + return; + } } //group.addSelectee(child); @@ -2895,7 +3125,7 @@ cameraView.ToggleDL(); cameraView.repaint(); return; - } else if (event.getSource() == toggleTextureItem) + } else if (event.getSource() == toggleTextureItem || event.getSource() == toggleTextureCB) { cameraView.ToggleTexture(); // june 2013 copy.HardTouch(); @@ -2934,9 +3164,9 @@ 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) @@ -2965,6 +3195,10 @@ { copy.live ^= true; return; + } else if (event.getSource() == selectCB) + { + copy.dontselect ^= true; + return; } else if (event.getSource() == hideCB) { copy.hide ^= true; @@ -2979,6 +3213,7 @@ if (event.getSource() == randomCB) { copy.random ^= true; + objEditor.refreshContents(); return; } if (event.getSource() == speedupCB) @@ -3002,8 +3237,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); @@ -3015,7 +3251,7 @@ textarea = null; textpanel = null; } - if (event.getSource() == cancelbutton) + if (source == cancelbutton) { textpanel.setVisible(false); textpanel.remove(textarea); @@ -3027,50 +3263,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; 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(); @@ -3103,53 +3339,75 @@ // 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 == loadItem) { load(); //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 (source == zBufferItem) { try { @@ -3171,21 +3429,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(); @@ -3197,6 +3442,283 @@ } } + void New() + { + while (copy.Size() > 1) + { + copy.remove(1); + } + + ResetModel(); + objEditor.refreshContents(); + } + + static public byte[] Compress(Object3D o) + { + try + { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + java.util.zip.GZIPOutputStream zstream = new java.util.zip.GZIPOutputStream(baos); + ObjectOutputStream out = new ObjectOutputStream(zstream); + + Object3D parent = o.parent; + o.parent = null; + + out.writeObject(o); + + o.parent = parent; + + out.flush(); + + zstream.close(); + out.close(); + + return baos.toByteArray(); + } catch (Exception e) + { + System.err.println(e); + return null; + } + } + + static public Object Uncompress(byte[] bytes) + { + System.out.println("#bytes = " + bytes.length); + try + { + ByteArrayInputStream bais = new ByteArrayInputStream(bytes); + java.util.zip.GZIPInputStream istream = new java.util.zip.GZIPInputStream(bais); + ObjectInputStream in = new ObjectInputStream(istream); + Object obj = in.readObject(); + 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; + } + + java.util.Hashtable<java.util.UUID, Object3D> hashtable = new java.util.Hashtable<java.util.UUID, Object3D>(); + + public void Save() + { + System.err.println("Save"); + + cRadio tab = GetCurrentTab(); + + boolean temp = CameraPane.SWITCH; + CameraPane.SWITCH = false; + + copy.ExtractBigData(hashtable); + + byte[] compress = Compress(copy); + + //EditorFrame.m_MainFrame.requestFocusInWindow(); + tab.graphs[tab.undoindex++] = compress; + + copy.RestoreBigData(hashtable); + + CameraPane.SWITCH = temp; + + //assert(hashtable.isEmpty()); + + for (int i = tab.undoindex; i < tab.graphs.length; i++) + { + tab.graphs[i] = null; + } + + SetUndoStates(); + + // test save + if (false) + { + try + { + FileOutputStream ostream = new FileOutputStream("save" + tab.undoindex); + ObjectOutputStream p = new ObjectOutputStream(ostream); + + p.writeObject(copy); + + p.flush(); + + ostream.close(); + } catch (Exception e) + { + e.printStackTrace(); + } + } + } + + void CopyChanged(Object3D obj) + { + SetUndoStates(); + + boolean temp = CameraPane.SWITCH; + CameraPane.SWITCH = false; + + copy.ExtractBigData(hashtable); + + copy.clear(); + + for (int i=0; i<obj.Size(); i++) + { + copy.add(obj.get(i)); + } + + copy.RestoreBigData(hashtable); + + CameraPane.SWITCH = temp; + + //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(); + } + + cButton undoButton; + cButton redoButton; + + void SetUndoStates() + { + cRadio tab = GetCurrentTab(); + + undoButton.setEnabled(tab.undoindex > 0); + redoButton.setEnabled(tab.graphs[tab.undoindex + 1] != null); + } + + public void Undo() + { + System.err.println("Undo"); + + cRadio tab = GetCurrentTab(); + + if (tab.undoindex == 0) + { + java.awt.Toolkit.getDefaultToolkit().beep(); + return; + } + + if (tab.graphs[tab.undoindex] == null) + { + Save(); + tab.undoindex -= 1; + } + + tab.undoindex -= 1; + + CopyChanged((Object3D)Uncompress(tab.graphs[tab.undoindex])); + } + + public void Redo() + { + cRadio tab = GetCurrentTab(); + + if (tab.graphs[tab.undoindex + 1] == null) + { + java.awt.Toolkit.getDefaultToolkit().beep(); + return; + } + + tab.undoindex += 1; + + CopyChanged((Object3D)Uncompress(tab.graphs[tab.undoindex])); + } + + void ImportGFD() + { + FileDialog browser = new FileDialog(objEditor.frame, "Import GrafreeD", FileDialog.LOAD); + browser.show(); + String filename = browser.getFile(); + if (filename != null && filename.length() > 0) + { + 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) @@ -3212,8 +3734,8 @@ Globals.ANIMATION ^= true; - GrafreeD.wav.cursor = 0; - GrafreeD.wav.loop = 0; + Grafreed.wav.cursor = 0; + Grafreed.wav.loop = 0; } } else { @@ -3234,7 +3756,6 @@ callee.refreshContents(); } else { - new Exception().printStackTrace(); System.exit(0); } } @@ -3264,7 +3785,7 @@ void CreateMaterial() { //copy.ClearMaterial(); // PATCH - copy.CreateMaterialS(multiplyToggle.isSelected()); + copy.CreateMaterialS(multiplyToggle != null && multiplyToggle.isSelected()); if (copy.selection.size() > 0) //SetMaterial(copy); { @@ -3315,7 +3836,7 @@ assert false; } - void EditSelection() + void EditSelection(boolean newWindow) { } @@ -3323,11 +3844,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() @@ -3401,6 +3922,36 @@ { //System.out.println("Propagate = " + propagate); copy.UpdateMaterial(anchor, current, propagate); + + if (copy.material != null) + { + cMaterial mat = copy.material; + + colorField.SetToolTipValue((mat.color)); + modulationField.SetToolTipValue((mat.modulation)); + metalnessField.SetToolTipValue((mat.metalness)); + diffuseField.SetToolTipValue((mat.diffuse)); + specularField.SetToolTipValue((mat.specular)); + shininessField.SetToolTipValue((mat.shininess)); + shiftField.SetToolTipValue((mat.shift)); + ambientField.SetToolTipValue((mat.ambient)); + lightareaField.SetToolTipValue((mat.lightarea)); + diffusenessField.SetToolTipValue((mat.factor)); + velvetField.SetToolTipValue((mat.velvet)); + sheenField.SetToolTipValue((mat.sheen)); + subsurfaceField.SetToolTipValue((mat.subsurface)); + backlitField.SetToolTipValue((mat.bump)); + anisoField.SetToolTipValue((mat.aniso)); + anisoVField.SetToolTipValue((mat.anisoV)); + cameraField.SetToolTipValue((mat.cameralight)); + selfshadowField.SetToolTipValue((mat.diffuseness)); + shadowField.SetToolTipValue((mat.shadow)); + textureField.SetToolTipValue((mat.texture)); + opacityField.SetToolTipValue((mat.opacity)); + fakedepthField.SetToolTipValue((mat.fakedepth)); + shadowbiasField.SetToolTipValue((mat.shadowbias)); + } + if (copy.material != null && copy.projectedVertices.length > 0 && copy.projectedVertices[0] != null) { copy.projectedVertices[0].x = (int) (bumpField.getFloat() * 1000); @@ -3516,7 +4067,7 @@ } if (normalpushField != null) - copy.NORMALPUSH = (float)normalpushField.getFloat()/1000; + copy.NORMALPUSH = (float)normalpushField.getFloat()/100; } void SnapObject() @@ -3780,6 +4331,8 @@ void makeSomething(Object3D thing, boolean resetmodel) // deselect) { + if (Globals.SAVEONMAKE) // && resetmodel) + Save(); //Tween.set(thing, 0).target(1).start(tweenManager); //Tween.to(thing, 0, 0.5f).target(0).start(tweenManager); // if (thing instanceof GenericJointDemo) @@ -3866,6 +4419,12 @@ { ResetModel(); Select(thing.GetTreePath(), true, false); // unselect... false); + + if (thing.Size() == 0) + { + //EditSelection(false); + } + refreshContents(); } @@ -3983,6 +4542,7 @@ } } } + LoadGFDThread loadGFDThread; void ReadGFD(String fullname, iCallBack cb) @@ -4002,8 +4562,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(); @@ -4011,7 +4573,20 @@ readobj.ResetDisplayList(); } catch (Exception e) { - e.printStackTrace(); + //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(); } @@ -4057,6 +4632,12 @@ void LoadIt(Object obj) { + if (obj == null) + { + // Invalid file + return; + } + System.out.println("Loaded " + obj); //new Exception().printStackTrace(); Object3D readobj = (Object3D) obj; @@ -4066,6 +4647,8 @@ if (readobj != null) { + if (Globals.SAVEONMAKE) + Save(); try { //readobj.deepCopySelf(copy); @@ -4128,7 +4711,7 @@ void load() // throws ClassNotFoundException { - if (GrafreeD.standAlone) + if (Grafreed.standAlone) { FileDialog browser = new FileDialog(frame, "Load", FileDialog.LOAD); browser.show(); @@ -4215,11 +4798,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); @@ -4229,17 +4814,20 @@ { } } + 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(); } @@ -4338,13 +4926,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; @@ -4356,8 +4944,8 @@ p.writeObject(object); p.flush(); + zstream.close(); ostream.close(); - // zstream.close(); // group.selection.get(0).parent = parent; //FileOutputStream fos = new FileOutputStream(fullname); @@ -4378,7 +4966,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(); @@ -4404,7 +4992,8 @@ Object3D client; Object3D copy; MenuBar menuBar; - Menu windowMenu; + Menu fileMenu; + MenuItem newItem; MenuItem loadItem; MenuItem saveItem; MenuItem saveAsItem; @@ -4412,11 +5001,9 @@ MenuItem reexportItem; MenuItem povItem; MenuItem closeItem; - Menu cameraMenu; + CheckboxMenuItem zBufferItem; //MenuItem normalLensItem; - MenuItem editCameraItem; - MenuItem revertCameraItem; MenuItem stepItem; CheckboxMenuItem toggleLiveItem; CheckboxMenuItem toggleFullScreenItem; @@ -4427,25 +5014,38 @@ CheckboxMenuItem toggleFootContactItem; CheckboxMenuItem toggleDLItem; CheckboxMenuItem toggleTextureItem; - CheckboxMenuItem toggleRandomItem; + CheckboxMenuItem toggleSwitchItem; CheckboxMenuItem toggleRootItem; CheckboxMenuItem animationItem; CheckboxMenuItem toggleHandleItem; CheckboxMenuItem togglePaintItem; JSplitPane mainPanel; JScrollPane scrollpane; + JPanel toolbarPanel; + cGridBag treePanel; + JPanel radioPanel; ButtonGroup buttonGroup; - cGridBag ctrlPanel; + + cGridBag toolboxPanel; cGridBag materialPanel; + cGridBag ctrlPanel; + JScrollPane infoPanel; + cGridBag optionsPanel; + JTabbedPane objectPanel; + boolean materialFlushed; + Object3D latestObject; + cGridBag XYZPanel; + JSplitPane gridPanel; JSplitPane bigPanel; + cGridBag bigThree; cGridBag scenePanel; cGridBag centralPanel; @@ -4560,8 +5160,13 @@ cNumberSlider fogField; JLabel opacityPowerLabel; cNumberSlider opacityPowerField; - JTree jTree; + cTree jTree; //ObjectUI parent; cNumberSlider normalpushField; + + private MenuItem importGFDItem; + private MenuItem importVRMLX3DItem; + private MenuItem import3DSItem; + private MenuItem importOBJItem; } -- Gitblit v1.6.2