From 54adfcbf93eb477bedeec45409f36cf7e102b790 Mon Sep 17 00:00:00 2001 From: Normand Briere <nbriere@noware.ca> Date: Mon, 16 Sep 2019 21:54:55 -0400 Subject: [PATCH] Navigation with intersection. --- ObjEditor.java | 499 ++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 419 insertions(+), 80 deletions(-) diff --git a/ObjEditor.java b/ObjEditor.java index 68657fd..d5be27b 100644 --- a/ObjEditor.java +++ b/ObjEditor.java @@ -24,6 +24,7 @@ matrix.Matrix; import grafeme.ui.*; +import org.xj3d.ui.swt.widgets.ImageLoader; class ObjEditor /*extends JFrame*/ implements iCallBack, ObjectUI, ActionListener, ChangeListener, @@ -97,9 +98,11 @@ cButton GetButton(String name, boolean border) { - ImageIcon icon = GetIcon(name); - if (icon != null || name.contains("/")) - return new cButton(icon, border); + //ImageIcon icon = GetIcon(name); + boolean fit = !name.startsWith("icons"); + if (//icon != null || + name.contains("/")) + return new cButton(name, border, fit); else return new cButton(name, border); } @@ -136,9 +139,18 @@ { BufferedImage image; - if (name.endsWith("jpg")) - // Much faster! - image = new sun.awt.image.codec.JPEGImageDecoderImpl(ObjEditor.class.getClassLoader().getResourceAsStream(name)).decodeAsBufferedImage(); + if (!Grafreed.isWindows && name.endsWith("jpg")) + { + try + { + // Much faster! + image = JpegLoader.load(name); + } + catch (Exception e) + { + image = javax.imageio.ImageIO.read(ObjEditor.class.getClassLoader().getResourceAsStream(name)); + } + } else image = javax.imageio.ImageIO.read(ObjEditor.class.getClassLoader().getResourceAsStream(name)); @@ -495,7 +507,7 @@ //povItem.addActionListener(this); closeItem.addActionListener(this); - objectPanel = new JTabbedPane(); + objectTabbedPane = new JTabbedPane(); ChangeListener changeListener = new ChangeListener() { @@ -546,13 +558,13 @@ // } // } // } - cameraView.transformMode = objectPanel.getSelectedIndex() == 4; + cameraView.transformMode = objectTabbedPane.getSelectedIndex() == 5; // refreshContents(false); // To refresh Info tab cameraView.repaint(); } }; - objectPanel.addChangeListener(changeListener); + objectTabbedPane.addChangeListener(changeListener); toolbarPanel = new JPanel(); toolbarPanel.setName("Toolbar"); @@ -595,7 +607,7 @@ //infoPanel.setLayout(new BorderLayout()); //infoPanel.add(createTextPane()); - mainPanel = new JSplitPane(JSplitPane.VERTICAL_SPLIT, treePanel, objectPanel); + mainPanel = new JSplitPane(JSplitPane.VERTICAL_SPLIT, treePanel, objectTabbedPane); mainPanel.setName("Main"); mainPanel.setContinuousLayout(true); mainPanel.setOneTouchExpandable(true); @@ -787,6 +799,8 @@ // SendInfo(" delay: " + sel.delay + newline, "regular"); // live, hide, ... //?? SendInfo(" Orig: " + maxima + newline, "regular"); + if (sel.GetTextures().pigmentdata != null) + si.SendInfo(" EMBEDDED ", "regular"); si.SendInfo((debug ? " Texture: " : " ") + sel.GetTextures(), "bold"); // SendInfo((debug ? " Material: " : " ") + sel.material + newline, "regular"); if (sel instanceof cMesh) @@ -897,10 +911,20 @@ cButton minButton; cButton maxButton; - cButton fullButton; + cButton fullScreenButton; cButton collapseButton; cButton maximize3DButton; + public void Show3DView() + { + // bug + //gridPanel.setDividerLocation(1.0); + //bigPanel.setDividerLocation(0.0); + bigThree.ClearUI(); + bigThree.add(centralPanel); + bigThree.FlushUI(); + } + void ToggleFullScreen() { GraphicsDevice device = frame.getGraphicsConfiguration().getDevice(); @@ -927,14 +951,18 @@ // framePanel.setDividerLocation(46); // icons are 24x24 //frame.setVisible(true); -// radio.layout = keepButton; + radio.layout = keepButton; //theFrame = null; keepButton = null; -// radio.layout.doClick(); + radio.layout.doClick(); } else { keepButton = radio.layout; + + radio.layout = twoButton; + Show3DView(); + //keeprect = frame.getBounds(); // frame.setBounds(0, 0, frame.getToolkit().getScreenSize().width, // frame.getToolkit().getScreenSize().height); @@ -956,6 +984,7 @@ // radio.layout = fullscreenLayout; // radio.layout.doClick(); //frame.setVisible(true); + CollapseToolbar(); } frame.validate(); @@ -981,6 +1010,8 @@ object.ExtractBigData(Grafreed.grafreed.universe.versiontable); // if (copy == client) + assert(!object.HasBigData()); + Object3D versions[] = object.versionlist; java.util.Hashtable<java.util.UUID, Object3D> versiontable = object.versiontable; // if Grafreed.grafreed.universe object.versionlist = null; @@ -991,6 +1022,8 @@ //byte[] compress = Compress(copy); Object3D compress = (Object3D)Grafreed.clone(object); + + assert(!compress.HasBigData()); object.parent = parent; @@ -1138,6 +1171,7 @@ JCheckBox selectableCB; JCheckBox hideCB; JCheckBox link2masterCB; + JCheckBox sortCB; JCheckBox markCB; JCheckBox randomCB; JCheckBox speedupCB; @@ -1328,6 +1362,11 @@ obj = o; } } + + String GetSupportText() + { + return "Support"; + } void SetupUI2(ObjEditor oe) { @@ -1376,11 +1415,14 @@ rewindCB = AddCheckBox(setupPanel2, "Rewind", copy.rewind); rewindCB.setToolTipText("Rewind animation"); + sortCB = AddCheckBox(setupPanel2, "Sort", copy.sort); + sortCB.setToolTipText("Display from back to front"); + 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"); + link2masterCB = AddCheckBox(setupPanel2, GetSupportText(), copy.link2master); + link2masterCB.setToolTipText("Link to support"); if (Globals.ADVANCED) { @@ -1556,6 +1598,8 @@ return null; } + + int objectTabCount; void SetupViews() { @@ -1691,6 +1735,12 @@ //XYZPanel.setName("XYZ"); transformPanel.add(resetTransformPanel); + + cGridBag scalePanel = AddSlider(transformPanel, "Scale", 1, 10, 1); + scalePanel.preferredHeight = 2; + scaleSlider = (cNumberSlider)scalePanel.getComponent(1); + transformPanel.add(scalePanel); + transformPanel.add(XYZPanel); /* @@ -1728,33 +1778,42 @@ //JScrollPane tmp = new JScrollPane(ctrlPanel, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); //tmp.setName("Edit"); - objectPanel.add(skyboxPanel); - objectPanel.setIconAt(0, GetIcon("icons/skybox.jpg")); - objectPanel.setToolTipTextAt(0, "Backgrounds"); - objectPanel.add(toolboxPanel); - objectPanel.setIconAt(1, GetIcon("icons/primitives.png")); - objectPanel.setToolTipTextAt(1, "Objects & textures"); + objectTabCount = 0; + + objectTabbedPane.add(skyboxPanel); + objectTabbedPane.setIconAt(objectTabCount, GetIcon("icons/skybox.jpg")); + objectTabbedPane.setToolTipTextAt(objectTabCount++, "Backgrounds"); + + objectTabbedPane.add(toolboxPanel); + objectTabbedPane.setIconAt(objectTabCount, GetIcon("icons/primitives.png")); + objectTabbedPane.setToolTipTextAt(objectTabCount++, "Objects & textures"); - objectPanel.add(materialPanel); - objectPanel.setIconAt(2, GetIcon("icons/material.png")); - objectPanel.setToolTipTextAt(2, "Material"); + objectTabbedPane.add(materialPanel); + objectTabbedPane.setIconAt(objectTabCount, GetIcon("icons/material.png")); + objectTabbedPane.setToolTipTextAt(objectTabCount++, "Material"); + figurePanel = new cGridBag(); + figurePanel.add(new cButton("FIGURES and POSES coming soon!")); + objectTabbedPane.add(figurePanel); + objectTabbedPane.setIconAt(objectTabCount, GetIcon("icons/figure.png")); + objectTabbedPane.setToolTipTextAt(objectTabCount++, "Figures and poses"); + // JPanel north = new JPanel(new BorderLayout()); // north.setName("Edit"); // north.add(ctrlPanel, BorderLayout.NORTH); // objectPanel.add(north); - objectPanel.add(editPanel); - objectPanel.setIconAt(3, GetIcon("icons/writewhite.png")); - objectPanel.setToolTipTextAt(3, "Edit controls"); + objectTabbedPane.add(editPanel); + objectTabbedPane.setIconAt(objectTabCount, GetIcon("icons/writewhite.png")); + objectTabbedPane.setToolTipTextAt(objectTabCount++, "Edit controls"); - objectPanel.add(transformPanel); - objectPanel.setIconAt(4, GetIcon("icons/XYZ.png")); - objectPanel.setToolTipTextAt(4, "TRS transform"); + objectTabbedPane.add(transformPanel); + objectTabbedPane.setIconAt(objectTabCount, GetIcon("icons/XYZ.png")); + objectTabbedPane.setToolTipTextAt(objectTabCount++, "TRS transform"); patchMaterial = true; cameraView.patchMaterial = this; - objectPanel.setSelectedIndex(2); + objectTabbedPane.setSelectedIndex(2); /* aConstraints.gridx = 0; @@ -1775,10 +1834,10 @@ scrollpane.addMouseWheelListener(this); // Default not fast enough /*JTabbedPane*/ scenePanel = new cGridBag(); - scenePanel.preferredWidth = 5; + scenePanel.preferredWidth = 6; - JTabbedPane tabbedPane = new JTabbedPane(); - tabbedPane.add(scrollpane); + JTabbedPane sceneTabbedPane = new JTabbedPane(); + sceneTabbedPane.add(scrollpane); optionsPanel = new cGridBag().setVertical(false); @@ -1786,11 +1845,207 @@ AddOptions(optionsPanel); //, aConstraints); - tabbedPane.add(FSPane = new cFileSystemPane(this)); + sceneTabbedPane.add(FSPane = new cFileSystemPane(this)); - tabbedPane.add(optionsPanel); + fullscenePanel = new cGridBag(); + fullscenePanel.setName("Download"); + sceneTabbedPane.add(fullscenePanel); - scenePanel.add(tabbedPane); + cButton fullsceneButton; + + fullscenePanel.add(fullsceneButton = GetButton("fullscenes/alsace.png", !Globals.NIMBUSLAF)); + fullsceneButton.setToolTipText("Alsace!"); + fullsceneButton.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + ReadGFD("https://www.noaofarc.ca/akeeba/categories/Applications/Alsace.gfd", new iCallBack() + { + + public void Callback(Object obj) + { + LoadIt(obj); + } + + public void DragGesture() + { + } + }); + } + }); + + fullscenePanel.add(fullsceneButton = GetButton("fullscenes/desertmotel.png", !Globals.NIMBUSLAF)); + fullsceneButton.setToolTipText("Desert Motel!"); + fullsceneButton.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + ReadGFD("https://www.noaofarc.ca/akeeba/categories/Applications/DesertMotel.gfd", new iCallBack() + { + + public void Callback(Object obj) + { + LoadIt(obj); + } + + public void DragGesture() + { + } + }); + } + }); + + fullscenePanel.Return(); + + fullscenePanel.add(fullsceneButton = GetButton("fullscenes/london.png", !Globals.NIMBUSLAF)); + fullsceneButton.setToolTipText("Old London!"); + fullsceneButton.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + ReadGFD("https://www.noaofarc.ca/akeeba/categories/Applications/oldlondon.gfd", new iCallBack() + { + + public void Callback(Object obj) + { + LoadIt(obj); + } + + public void DragGesture() + { + } + }); + } + }); + + fullscenePanel.add(fullsceneButton = GetButton("fullscenes/skullcove.png", !Globals.NIMBUSLAF)); + fullsceneButton.setToolTipText("Skull Cove Island!"); + fullsceneButton.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + ReadGFD("https://www.noaofarc.ca/akeeba/categories/Applications/SkullCoveIsland.gfd", new iCallBack() + { + + public void Callback(Object obj) + { + LoadIt(obj); + } + + public void DragGesture() + { + } + }); + } + }); + + fullscenePanel.Return(); + + fullscenePanel.add(fullsceneButton = GetButton("fullscenes/tuscany.png", !Globals.NIMBUSLAF)); + fullsceneButton.setToolTipText("Tuscany!"); + fullsceneButton.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + ReadGFD("https://www.noaofarc.ca/akeeba/categories/Applications/Tuscany.gfd", new iCallBack() + { + + public void Callback(Object obj) + { + LoadIt(obj); + } + + public void DragGesture() + { + } + }); + } + }); + + fullscenePanel.add(fullsceneButton = GetButton("fullscenes/venice.png", !Globals.NIMBUSLAF)); + fullsceneButton.setToolTipText("Venice!"); + fullsceneButton.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + ReadGFD("https://www.noaofarc.ca/akeeba/categories/Applications/Venice.gfd", new iCallBack() + { + + public void Callback(Object obj) + { + LoadIt(obj); + } + + public void DragGesture() + { + } + }); + } + }); + + fullscenePanel.Return(); + + fullscenePanel.add(fullsceneButton = GetButton("fullscenes/viking.png", !Globals.NIMBUSLAF)); + fullsceneButton.setToolTipText("Viking Village!"); + fullsceneButton.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + ReadGFD("https://www.noaofarc.ca/akeeba/categories/Applications/VikingVillage.gfd", new iCallBack() + { + + public void Callback(Object obj) + { + LoadIt(obj); + } + + public void DragGesture() + { + } + }); + } + }); + + fullscenePanel.add(fullsceneButton = GetButton("fullscenes/yvoire.png", !Globals.NIMBUSLAF)); + fullsceneButton.setToolTipText("Yvoire!"); + fullsceneButton.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + ReadGFD("https://www.noaofarc.ca/akeeba/categories/Applications/Yvoire.gfd", new iCallBack() + { + + public void Callback(Object obj) + { + LoadIt(obj); + } + + public void DragGesture() + { + } + }); + } + }); + + fullscenePanel.Return(); + + fullscenePanel.add(new cGridBag()); + fullscenePanel.add(new cGridBag()); + fullscenePanel.Return(); + fullscenePanel.add(new cGridBag()); + fullscenePanel.add(new cGridBag()); + + sceneTabbedPane.add(optionsPanel); + + scenePanel.add(sceneTabbedPane); cGridBag creditsPanel = new cGridBag().setVertical(true); creditsPanel.setName("Credits"); @@ -1879,14 +2134,14 @@ creditsPanel.add(new cGridBag()); } - tabbedPane.add(creditsPanel); - tabbedPane.setToolTipTextAt(3, "Credits"); + sceneTabbedPane.add(creditsPanel); + sceneTabbedPane.setToolTipTextAt(3, "Credits"); if (Globals.SHOWINFO) { - objectPanel.add(infoPanel); - objectPanel.setIconAt(5, GetIcon("icons/info.png")); - objectPanel.setToolTipTextAt(4, "Information"); + objectTabbedPane.add(infoPanel); + objectTabbedPane.setIconAt(objectTabCount, GetIcon("icons/info.png")); + objectTabbedPane.setToolTipTextAt(objectTabCount++, "Information"); } /* @@ -1967,11 +2222,16 @@ { if ((Integer)pce.getOldValue() == 1) { - if (radio.layout != expandedLayout) + if (CameraPane.FULLSCREEN) { - radio.layout = expandedLayout; - radio.layout.doClick(); + ToggleFullScreen(); } + +// if (radio.layout != expandedLayout) +// { +// radio.layout = expandedLayout; +// radio.layout.doClick(); +// } } } }); @@ -1995,7 +2255,7 @@ // aConstraints = gbc; // (GridBagConstraints) GrafreeD.clone(gbc); - frame.setSize(1280, 860); + frame.setSize(1280, 900); cameraView.requestFocusInWindow(); @@ -4072,6 +4332,11 @@ copy.Touch(); // display list issue objEditor.refreshContents(true); // To show item colors return; + } else if (event.getSource() == sortCB) + { + copy.sort ^= true; + objEditor.refreshContents(); + return; } else if (event.getSource() == link2masterCB) { copy.link2master ^= true; @@ -4081,6 +4346,20 @@ if (event.getSource() == randomCB) { copy.random ^= true; + if (this instanceof RandomEditor) + { + cGridBag itemPanel = ((RandomEditor)this).itemPanel; + itemPanel.getComponent(0).setEnabled(!copy.random); + + // Tooltip? + if (copy.random) + { + } + else + { + } + } + objEditor.refreshContents(); return; } @@ -4316,6 +4595,12 @@ void New() { + copy.skyboxname = "cubemaps/penguins-skyboxes/yonder"; + copy.skyboxext = "jpg"; + + copy.versionlist = null; + copy.versionindex = -1; + while (copy.Size() > 0) { copy.remove(0); @@ -4326,9 +4611,15 @@ if (copy == Grafreed.grafreed.universe) { CreateCameras(); - cameraView.SetCamera(GetCamera(copy, 0)); + cameraView.SetCamera(GetCamera(copy, 0), true); + cameraView.SetLight(GetCamera(copy, 4)); } + ResetModel(); + + DuplicateVersion(); + + this.SetVersionStates(); objEditor.refreshContents(); } @@ -4470,13 +4761,13 @@ SetVersionStates(); - SetCameras(); + SetCameras(false); } - public boolean Save(boolean user) + public boolean DuplicateVersion() // boolean user) { System.err.println("Save"); - Replace(); + //Replace(); if (copy.versionlist == null) { @@ -4585,15 +4876,16 @@ { Object3D obj = (Object3D)Grafreed.clone(changed.versionlist[copy.versionindex]); + assert(!obj.HasBigData()); + boolean temp = CameraPane.SWITCH; CameraPane.SWITCH = false; changed.ExtractBigData(Grafreed.grafreed.universe.versiontable); changed.clear(); - - changed.skyboxname = obj.skyboxname; - changed.skyboxext = obj.skyboxext; + + obj.deepCopyNode(changed); for (int i=0; i<obj.Size(); i++) { @@ -4668,7 +4960,7 @@ replaceButton.setEnabled(copy.versionindex != -1); previousVersionButton.setEnabled(copy.versionindex > 0); - nextVersionButton.setEnabled(copy.versionlist[copy.versionindex + 1] != null); + nextVersionButton.setEnabled(copy.versionlist != null && copy.versionlist[copy.versionindex + 1] != null); deleteVersionButton.setEnabled(copy.versionindex != -1); //copy.versionlist[copy.versionindex + 1] != null); @@ -4718,7 +5010,7 @@ SetVersionStates(); - SetCameras(); + SetCameras(false); return true; } @@ -4740,7 +5032,7 @@ SetVersionStates(); - SetCameras(); + SetCameras(false); return true; } @@ -4751,7 +5043,8 @@ //cRadio tab = GetCurrentTab(); - if (copy.versionindex == -1 || copy.versionlist[copy.versionindex] == null) + // < 0 means == -2 || == -1 + if (copy.versionindex < 0 || copy.versionlist[copy.versionindex] == null) { // No version yet. OK. java.awt.Toolkit.getDefaultToolkit().beep(); return false; @@ -4784,30 +5077,39 @@ SetVersionStates(); - SetCameras(); + SetCameras(false); } - void SetCameras() + void SetCameras(boolean set) { - Camera neweye = (Camera)copy.GetObject(cameraView.cameras[0].GetUUID()); - Camera newlight = (Camera)copy.GetObject(cameraView.LightCamera().GetUUID()); - - cameraView.SetCamera(neweye); - cameraView.SetLight(newlight); + if (copy == Grafreed.grafreed.universe) + { + Camera neweye = (Camera)copy.GetObject(cameraView.cameras[cameraView.cameracount^1].GetUUID()); + Camera newlight = (Camera)copy.GetObject(cameraView.LightCamera().GetUUID()); + + cameraView.SetCamera(neweye, set); + cameraView.SetLight(newlight); + } } - + + void ImportGFD(String url) + { + objEditor.ReadGFD(url, objEditor); + } + void ImportGFD() { FileDialog browser = new FileDialog(objEditor.frame, "Import GrafreeD", FileDialog.LOAD); - browser.show(); + browser.setVisible(true); String filename = browser.getFile(); if (filename != null && filename.length() > 0) { String fullname = browser.getDirectory() + filename; //Object3D readobj = - objEditor.ReadGFD(fullname, objEditor); + // objEditor.ReadGFD(fullname, objEditor); //makeSomething(readobj); + ImportGFD(fullname); } } @@ -5124,9 +5426,16 @@ cNumberSlider versionSlider; cNumberSlider versionField; + cNumberSlider scaleSlider; + + void ScaleSelection(int scale) + { + } + public void stateChanged(ChangeEvent e) { // assert(false); + // Main version slider if (e.getSource() == versionSlider) { if (muteSlider) @@ -5141,12 +5450,13 @@ copy.versionindex = version; CopyChanged(copy); SetVersionStates(); - SetCameras(); + SetCameras(false); } return; } + // Version slider of edited object if (e.getSource() == versionField) { int version = versionField.getInteger(); @@ -5160,6 +5470,14 @@ return; } + if (e.getSource() == scaleSlider) + { + int scale = scaleSlider.getInteger(); + + ScaleSelection(scale); + return; + } + if (freezematerial) { return; @@ -5397,7 +5715,7 @@ interest.y = k * interest.y + (1 - k) * height; } - CameraPane.zoomonce = true; + // CameraPane.zoomonce = true; // june 2014 Camera parentcam = cameraView.manipCamera; @@ -5471,7 +5789,7 @@ objEditor.ScreenFit(obj, false); - cameraView.pingthread.StepToTarget(true); // aout 2013 + cameraView.pingthread.StepToTarget(); //true); // aout 2013 refreshContents(); } @@ -5748,10 +6066,27 @@ { Object3D readobj = null; + java.net.URL url = null; + + try + { + url = new java.net.URL(fullname); + } catch (Exception e) + { + try + { + url = new java.net.URL("file:///" + fullname); + } catch (Exception e2) + { + e2.printStackTrace(); + } + } + try { // Try compressed version first. - java.io.FileInputStream istream = new java.io.FileInputStream(fullname); + java.io.InputStream istream //= new java.io.FileInputStream(fullname); + = url.openStream(); java.util.zip.GZIPInputStream zstream = new java.util.zip.GZIPInputStream(istream); java.io.ObjectInputStream p = new java.io.ObjectInputStream(zstream); @@ -5766,7 +6101,8 @@ try { - java.io.FileInputStream istream = new java.io.FileInputStream(fullname); + java.io.InputStream istream //= new java.io.FileInputStream(fullname); + = url.openStream(); java.io.ObjectInputStream p = new java.io.ObjectInputStream(istream); readobj = (Object3D) p.readObject(); @@ -5864,12 +6200,11 @@ // // oct 2012 if(cam.parent == null) // cam.parent = copy.get(0); // cams; // } - cameraView.SetCamera((Camera) cams.get(0)); - // MAJOR CRASH!! - cameraView.SetLight((Camera) cams.get(4)); - topView.SetCamera((Camera) cams.get(1)); - frontView.SetCamera((Camera) cams.get(2)); - sideView.SetCamera((Camera) cams.get(3)); + cameraView.SetCamera((Camera) cams.get(0), true); + cameraView.SetLight((Camera) cams.get(4)); // MAJOR CRASH!! + topView.SetCamera((Camera) cams.get(1), true); + frontView.SetCamera((Camera) cams.get(2), true); + sideView.SetCamera((Camera) cams.get(3), true); // copy.get(0).clear(); // copy.get(0).addAll(cams); @@ -5911,6 +6246,8 @@ //? SetUndoStates(); + cameraView.RevertCamera(); + ResetModel(); copy.HardTouch(); // recompile? refreshContents(); @@ -5922,7 +6259,7 @@ if (Grafreed.standAlone) { FileDialog browser = new FileDialog(frame, "Open", FileDialog.LOAD); - browser.show(); + browser.setVisible(true); String filename = browser.getFile(); if (filename != null && filename.length() > 0) { @@ -6245,12 +6582,14 @@ cGridBag skyboxPanel; cGridBag materialPanel; cGridBag ctrlPanel; + cGridBag figurePanel; + cGridBag fullscenePanel; JScrollPane infoPanel; cGridBag optionsPanel; - JTabbedPane objectPanel; + JTabbedPane objectTabbedPane; boolean materialFlushed; Object3D latestObject; -- Gitblit v1.6.2