Normand Briere
2019-09-17 54adfcbf93eb477bedeec45409f36cf7e102b790
ObjEditor.java
....@@ -24,6 +24,7 @@
2424 matrix.Matrix;
2525
2626 import grafeme.ui.*;
27
+import org.xj3d.ui.swt.widgets.ImageLoader;
2728
2829 class ObjEditor /*extends JFrame*/ implements iCallBack, ObjectUI,
2930 ActionListener, ChangeListener,
....@@ -97,9 +98,11 @@
9798
9899 cButton GetButton(String name, boolean border)
99100 {
100
- ImageIcon icon = GetIcon(name);
101
- if (icon != null || name.contains("/"))
102
- return new cButton(icon, border);
101
+ //ImageIcon icon = GetIcon(name);
102
+ boolean fit = !name.startsWith("icons");
103
+ if (//icon != null ||
104
+ name.contains("/"))
105
+ return new cButton(name, border, fit);
103106 else
104107 return new cButton(name, border);
105108 }
....@@ -136,9 +139,18 @@
136139 {
137140 BufferedImage image;
138141
139
- if (name.endsWith("jpg"))
140
- // Much faster!
141
- image = new sun.awt.image.codec.JPEGImageDecoderImpl(ObjEditor.class.getClassLoader().getResourceAsStream(name)).decodeAsBufferedImage();
142
+ if (!Grafreed.isWindows && name.endsWith("jpg"))
143
+ {
144
+ try
145
+ {
146
+ // Much faster!
147
+ image = JpegLoader.load(name);
148
+ }
149
+ catch (Exception e)
150
+ {
151
+ image = javax.imageio.ImageIO.read(ObjEditor.class.getClassLoader().getResourceAsStream(name));
152
+ }
153
+ }
142154 else
143155 image = javax.imageio.ImageIO.read(ObjEditor.class.getClassLoader().getResourceAsStream(name));
144156
....@@ -495,7 +507,7 @@
495507 //povItem.addActionListener(this);
496508 closeItem.addActionListener(this);
497509
498
- objectPanel = new JTabbedPane();
510
+ objectTabbedPane = new JTabbedPane();
499511
500512 ChangeListener changeListener = new ChangeListener()
501513 {
....@@ -546,13 +558,13 @@
546558 // }
547559 // }
548560 // }
549
- cameraView.transformMode = objectPanel.getSelectedIndex() == 4;
561
+ cameraView.transformMode = objectTabbedPane.getSelectedIndex() == 5;
550562
551563 // refreshContents(false); // To refresh Info tab
552564 cameraView.repaint();
553565 }
554566 };
555
- objectPanel.addChangeListener(changeListener);
567
+ objectTabbedPane.addChangeListener(changeListener);
556568
557569 toolbarPanel = new JPanel();
558570 toolbarPanel.setName("Toolbar");
....@@ -595,7 +607,7 @@
595607 //infoPanel.setLayout(new BorderLayout());
596608 //infoPanel.add(createTextPane());
597609
598
- mainPanel = new JSplitPane(JSplitPane.VERTICAL_SPLIT, treePanel, objectPanel);
610
+ mainPanel = new JSplitPane(JSplitPane.VERTICAL_SPLIT, treePanel, objectTabbedPane);
599611 mainPanel.setName("Main");
600612 mainPanel.setContinuousLayout(true);
601613 mainPanel.setOneTouchExpandable(true);
....@@ -787,6 +799,8 @@
787799 // SendInfo(" delay: " + sel.delay + newline, "regular");
788800 // live, hide, ...
789801 //?? SendInfo(" Orig: " + maxima + newline, "regular");
802
+ if (sel.GetTextures().pigmentdata != null)
803
+ si.SendInfo(" EMBEDDED ", "regular");
790804 si.SendInfo((debug ? " Texture: " : " ") + sel.GetTextures(), "bold");
791805 // SendInfo((debug ? " Material: " : " ") + sel.material + newline, "regular");
792806 if (sel instanceof cMesh)
....@@ -897,10 +911,20 @@
897911
898912 cButton minButton;
899913 cButton maxButton;
900
- cButton fullButton;
914
+ cButton fullScreenButton;
901915 cButton collapseButton;
902916 cButton maximize3DButton;
903917
918
+ public void Show3DView()
919
+ {
920
+ // bug
921
+ //gridPanel.setDividerLocation(1.0);
922
+ //bigPanel.setDividerLocation(0.0);
923
+ bigThree.ClearUI();
924
+ bigThree.add(centralPanel);
925
+ bigThree.FlushUI();
926
+ }
927
+
904928 void ToggleFullScreen()
905929 {
906930 GraphicsDevice device = frame.getGraphicsConfiguration().getDevice();
....@@ -927,14 +951,18 @@
927951 // framePanel.setDividerLocation(46); // icons are 24x24
928952
929953 //frame.setVisible(true);
930
-// radio.layout = keepButton;
954
+ radio.layout = keepButton;
931955 //theFrame = null;
932956 keepButton = null;
933
-// radio.layout.doClick();
957
+ radio.layout.doClick();
934958
935959 } else
936960 {
937961 keepButton = radio.layout;
962
+
963
+ radio.layout = twoButton;
964
+ Show3DView();
965
+
938966 //keeprect = frame.getBounds();
939967 // frame.setBounds(0, 0, frame.getToolkit().getScreenSize().width,
940968 // frame.getToolkit().getScreenSize().height);
....@@ -956,6 +984,7 @@
956984 // radio.layout = fullscreenLayout;
957985 // radio.layout.doClick();
958986 //frame.setVisible(true);
987
+ CollapseToolbar();
959988 }
960989 frame.validate();
961990
....@@ -981,6 +1010,8 @@
9811010 object.ExtractBigData(Grafreed.grafreed.universe.versiontable);
9821011 // if (copy == client)
9831012
1013
+ assert(!object.HasBigData());
1014
+
9841015 Object3D versions[] = object.versionlist;
9851016 java.util.Hashtable<java.util.UUID, Object3D> versiontable = object.versiontable; // if Grafreed.grafreed.universe
9861017 object.versionlist = null;
....@@ -991,6 +1022,8 @@
9911022
9921023 //byte[] compress = Compress(copy);
9931024 Object3D compress = (Object3D)Grafreed.clone(object);
1025
+
1026
+ assert(!compress.HasBigData());
9941027
9951028 object.parent = parent;
9961029
....@@ -1138,6 +1171,7 @@
11381171 JCheckBox selectableCB;
11391172 JCheckBox hideCB;
11401173 JCheckBox link2masterCB;
1174
+ JCheckBox sortCB;
11411175 JCheckBox markCB;
11421176 JCheckBox randomCB;
11431177 JCheckBox speedupCB;
....@@ -1328,6 +1362,11 @@
13281362 obj = o;
13291363 }
13301364 }
1365
+
1366
+ String GetSupportText()
1367
+ {
1368
+ return "Support";
1369
+ }
13311370
13321371 void SetupUI2(ObjEditor oe)
13331372 {
....@@ -1376,11 +1415,14 @@
13761415 rewindCB = AddCheckBox(setupPanel2, "Rewind", copy.rewind);
13771416 rewindCB.setToolTipText("Rewind animation");
13781417
1418
+ sortCB = AddCheckBox(setupPanel2, "Sort", copy.sort);
1419
+ sortCB.setToolTipText("Display from back to front");
1420
+
13791421 randomCB = AddCheckBox(setupPanel2, "Random", copy.random);
13801422 randomCB.setToolTipText("Randomly Rewind (or Go back and forth)");
13811423
1382
- link2masterCB = AddCheckBox(setupPanel2, "Support", copy.link2master);
1383
- link2masterCB.setToolTipText("Attach to support");
1424
+ link2masterCB = AddCheckBox(setupPanel2, GetSupportText(), copy.link2master);
1425
+ link2masterCB.setToolTipText("Link to support");
13841426
13851427 if (Globals.ADVANCED)
13861428 {
....@@ -1556,6 +1598,8 @@
15561598
15571599 return null;
15581600 }
1601
+
1602
+ int objectTabCount;
15591603
15601604 void SetupViews()
15611605 {
....@@ -1691,6 +1735,12 @@
16911735 //XYZPanel.setName("XYZ");
16921736
16931737 transformPanel.add(resetTransformPanel);
1738
+
1739
+ cGridBag scalePanel = AddSlider(transformPanel, "Scale", 1, 10, 1);
1740
+ scalePanel.preferredHeight = 2;
1741
+ scaleSlider = (cNumberSlider)scalePanel.getComponent(1);
1742
+ transformPanel.add(scalePanel);
1743
+
16941744 transformPanel.add(XYZPanel);
16951745
16961746 /*
....@@ -1728,33 +1778,42 @@
17281778
17291779 //JScrollPane tmp = new JScrollPane(ctrlPanel, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
17301780 //tmp.setName("Edit");
1731
- objectPanel.add(skyboxPanel);
1732
- objectPanel.setIconAt(0, GetIcon("icons/skybox.jpg"));
1733
- objectPanel.setToolTipTextAt(0, "Backgrounds");
17341781
1735
- objectPanel.add(toolboxPanel);
1736
- objectPanel.setIconAt(1, GetIcon("icons/primitives.png"));
1737
- objectPanel.setToolTipTextAt(1, "Objects & textures");
1782
+ objectTabCount = 0;
1783
+
1784
+ objectTabbedPane.add(skyboxPanel);
1785
+ objectTabbedPane.setIconAt(objectTabCount, GetIcon("icons/skybox.jpg"));
1786
+ objectTabbedPane.setToolTipTextAt(objectTabCount++, "Backgrounds");
1787
+
1788
+ objectTabbedPane.add(toolboxPanel);
1789
+ objectTabbedPane.setIconAt(objectTabCount, GetIcon("icons/primitives.png"));
1790
+ objectTabbedPane.setToolTipTextAt(objectTabCount++, "Objects & textures");
17381791
1739
- objectPanel.add(materialPanel);
1740
- objectPanel.setIconAt(2, GetIcon("icons/material.png"));
1741
- objectPanel.setToolTipTextAt(2, "Material");
1792
+ objectTabbedPane.add(materialPanel);
1793
+ objectTabbedPane.setIconAt(objectTabCount, GetIcon("icons/material.png"));
1794
+ objectTabbedPane.setToolTipTextAt(objectTabCount++, "Material");
17421795
1796
+ figurePanel = new cGridBag();
1797
+ figurePanel.add(new cButton("FIGURES and POSES coming soon!"));
1798
+ objectTabbedPane.add(figurePanel);
1799
+ objectTabbedPane.setIconAt(objectTabCount, GetIcon("icons/figure.png"));
1800
+ objectTabbedPane.setToolTipTextAt(objectTabCount++, "Figures and poses");
1801
+
17431802 // JPanel north = new JPanel(new BorderLayout());
17441803 // north.setName("Edit");
17451804 // north.add(ctrlPanel, BorderLayout.NORTH);
17461805 // objectPanel.add(north);
1747
- objectPanel.add(editPanel);
1748
- objectPanel.setIconAt(3, GetIcon("icons/writewhite.png"));
1749
- objectPanel.setToolTipTextAt(3, "Edit controls");
1806
+ objectTabbedPane.add(editPanel);
1807
+ objectTabbedPane.setIconAt(objectTabCount, GetIcon("icons/writewhite.png"));
1808
+ objectTabbedPane.setToolTipTextAt(objectTabCount++, "Edit controls");
17501809
1751
- objectPanel.add(transformPanel);
1752
- objectPanel.setIconAt(4, GetIcon("icons/XYZ.png"));
1753
- objectPanel.setToolTipTextAt(4, "TRS transform");
1810
+ objectTabbedPane.add(transformPanel);
1811
+ objectTabbedPane.setIconAt(objectTabCount, GetIcon("icons/XYZ.png"));
1812
+ objectTabbedPane.setToolTipTextAt(objectTabCount++, "TRS transform");
17541813
17551814 patchMaterial = true;
17561815 cameraView.patchMaterial = this;
1757
- objectPanel.setSelectedIndex(2);
1816
+ objectTabbedPane.setSelectedIndex(2);
17581817
17591818 /*
17601819 aConstraints.gridx = 0;
....@@ -1775,10 +1834,10 @@
17751834 scrollpane.addMouseWheelListener(this); // Default not fast enough
17761835
17771836 /*JTabbedPane*/ scenePanel = new cGridBag();
1778
- scenePanel.preferredWidth = 5;
1837
+ scenePanel.preferredWidth = 6;
17791838
1780
- JTabbedPane tabbedPane = new JTabbedPane();
1781
- tabbedPane.add(scrollpane);
1839
+ JTabbedPane sceneTabbedPane = new JTabbedPane();
1840
+ sceneTabbedPane.add(scrollpane);
17821841
17831842 optionsPanel = new cGridBag().setVertical(false);
17841843
....@@ -1786,11 +1845,207 @@
17861845
17871846 AddOptions(optionsPanel); //, aConstraints);
17881847
1789
- tabbedPane.add(FSPane = new cFileSystemPane(this));
1848
+ sceneTabbedPane.add(FSPane = new cFileSystemPane(this));
17901849
1791
- tabbedPane.add(optionsPanel);
1850
+ fullscenePanel = new cGridBag();
1851
+ fullscenePanel.setName("Download");
1852
+ sceneTabbedPane.add(fullscenePanel);
17921853
1793
- scenePanel.add(tabbedPane);
1854
+ cButton fullsceneButton;
1855
+
1856
+ fullscenePanel.add(fullsceneButton = GetButton("fullscenes/alsace.png", !Globals.NIMBUSLAF));
1857
+ fullsceneButton.setToolTipText("Alsace!");
1858
+ fullsceneButton.addActionListener(new ActionListener()
1859
+ {
1860
+ @Override
1861
+ public void actionPerformed(ActionEvent e)
1862
+ {
1863
+ ReadGFD("https://www.noaofarc.ca/akeeba/categories/Applications/Alsace.gfd", new iCallBack()
1864
+ {
1865
+
1866
+ public void Callback(Object obj)
1867
+ {
1868
+ LoadIt(obj);
1869
+ }
1870
+
1871
+ public void DragGesture()
1872
+ {
1873
+ }
1874
+ });
1875
+ }
1876
+ });
1877
+
1878
+ fullscenePanel.add(fullsceneButton = GetButton("fullscenes/desertmotel.png", !Globals.NIMBUSLAF));
1879
+ fullsceneButton.setToolTipText("Desert Motel!");
1880
+ fullsceneButton.addActionListener(new ActionListener()
1881
+ {
1882
+ @Override
1883
+ public void actionPerformed(ActionEvent e)
1884
+ {
1885
+ ReadGFD("https://www.noaofarc.ca/akeeba/categories/Applications/DesertMotel.gfd", new iCallBack()
1886
+ {
1887
+
1888
+ public void Callback(Object obj)
1889
+ {
1890
+ LoadIt(obj);
1891
+ }
1892
+
1893
+ public void DragGesture()
1894
+ {
1895
+ }
1896
+ });
1897
+ }
1898
+ });
1899
+
1900
+ fullscenePanel.Return();
1901
+
1902
+ fullscenePanel.add(fullsceneButton = GetButton("fullscenes/london.png", !Globals.NIMBUSLAF));
1903
+ fullsceneButton.setToolTipText("Old London!");
1904
+ fullsceneButton.addActionListener(new ActionListener()
1905
+ {
1906
+ @Override
1907
+ public void actionPerformed(ActionEvent e)
1908
+ {
1909
+ ReadGFD("https://www.noaofarc.ca/akeeba/categories/Applications/oldlondon.gfd", new iCallBack()
1910
+ {
1911
+
1912
+ public void Callback(Object obj)
1913
+ {
1914
+ LoadIt(obj);
1915
+ }
1916
+
1917
+ public void DragGesture()
1918
+ {
1919
+ }
1920
+ });
1921
+ }
1922
+ });
1923
+
1924
+ fullscenePanel.add(fullsceneButton = GetButton("fullscenes/skullcove.png", !Globals.NIMBUSLAF));
1925
+ fullsceneButton.setToolTipText("Skull Cove Island!");
1926
+ fullsceneButton.addActionListener(new ActionListener()
1927
+ {
1928
+ @Override
1929
+ public void actionPerformed(ActionEvent e)
1930
+ {
1931
+ ReadGFD("https://www.noaofarc.ca/akeeba/categories/Applications/SkullCoveIsland.gfd", new iCallBack()
1932
+ {
1933
+
1934
+ public void Callback(Object obj)
1935
+ {
1936
+ LoadIt(obj);
1937
+ }
1938
+
1939
+ public void DragGesture()
1940
+ {
1941
+ }
1942
+ });
1943
+ }
1944
+ });
1945
+
1946
+ fullscenePanel.Return();
1947
+
1948
+ fullscenePanel.add(fullsceneButton = GetButton("fullscenes/tuscany.png", !Globals.NIMBUSLAF));
1949
+ fullsceneButton.setToolTipText("Tuscany!");
1950
+ fullsceneButton.addActionListener(new ActionListener()
1951
+ {
1952
+ @Override
1953
+ public void actionPerformed(ActionEvent e)
1954
+ {
1955
+ ReadGFD("https://www.noaofarc.ca/akeeba/categories/Applications/Tuscany.gfd", new iCallBack()
1956
+ {
1957
+
1958
+ public void Callback(Object obj)
1959
+ {
1960
+ LoadIt(obj);
1961
+ }
1962
+
1963
+ public void DragGesture()
1964
+ {
1965
+ }
1966
+ });
1967
+ }
1968
+ });
1969
+
1970
+ fullscenePanel.add(fullsceneButton = GetButton("fullscenes/venice.png", !Globals.NIMBUSLAF));
1971
+ fullsceneButton.setToolTipText("Venice!");
1972
+ fullsceneButton.addActionListener(new ActionListener()
1973
+ {
1974
+ @Override
1975
+ public void actionPerformed(ActionEvent e)
1976
+ {
1977
+ ReadGFD("https://www.noaofarc.ca/akeeba/categories/Applications/Venice.gfd", new iCallBack()
1978
+ {
1979
+
1980
+ public void Callback(Object obj)
1981
+ {
1982
+ LoadIt(obj);
1983
+ }
1984
+
1985
+ public void DragGesture()
1986
+ {
1987
+ }
1988
+ });
1989
+ }
1990
+ });
1991
+
1992
+ fullscenePanel.Return();
1993
+
1994
+ fullscenePanel.add(fullsceneButton = GetButton("fullscenes/viking.png", !Globals.NIMBUSLAF));
1995
+ fullsceneButton.setToolTipText("Viking Village!");
1996
+ fullsceneButton.addActionListener(new ActionListener()
1997
+ {
1998
+ @Override
1999
+ public void actionPerformed(ActionEvent e)
2000
+ {
2001
+ ReadGFD("https://www.noaofarc.ca/akeeba/categories/Applications/VikingVillage.gfd", new iCallBack()
2002
+ {
2003
+
2004
+ public void Callback(Object obj)
2005
+ {
2006
+ LoadIt(obj);
2007
+ }
2008
+
2009
+ public void DragGesture()
2010
+ {
2011
+ }
2012
+ });
2013
+ }
2014
+ });
2015
+
2016
+ fullscenePanel.add(fullsceneButton = GetButton("fullscenes/yvoire.png", !Globals.NIMBUSLAF));
2017
+ fullsceneButton.setToolTipText("Yvoire!");
2018
+ fullsceneButton.addActionListener(new ActionListener()
2019
+ {
2020
+ @Override
2021
+ public void actionPerformed(ActionEvent e)
2022
+ {
2023
+ ReadGFD("https://www.noaofarc.ca/akeeba/categories/Applications/Yvoire.gfd", new iCallBack()
2024
+ {
2025
+
2026
+ public void Callback(Object obj)
2027
+ {
2028
+ LoadIt(obj);
2029
+ }
2030
+
2031
+ public void DragGesture()
2032
+ {
2033
+ }
2034
+ });
2035
+ }
2036
+ });
2037
+
2038
+ fullscenePanel.Return();
2039
+
2040
+ fullscenePanel.add(new cGridBag());
2041
+ fullscenePanel.add(new cGridBag());
2042
+ fullscenePanel.Return();
2043
+ fullscenePanel.add(new cGridBag());
2044
+ fullscenePanel.add(new cGridBag());
2045
+
2046
+ sceneTabbedPane.add(optionsPanel);
2047
+
2048
+ scenePanel.add(sceneTabbedPane);
17942049
17952050 cGridBag creditsPanel = new cGridBag().setVertical(true);
17962051 creditsPanel.setName("Credits");
....@@ -1879,14 +2134,14 @@
18792134 creditsPanel.add(new cGridBag());
18802135 }
18812136
1882
- tabbedPane.add(creditsPanel);
1883
- tabbedPane.setToolTipTextAt(3, "Credits");
2137
+ sceneTabbedPane.add(creditsPanel);
2138
+ sceneTabbedPane.setToolTipTextAt(3, "Credits");
18842139
18852140 if (Globals.SHOWINFO)
18862141 {
1887
- objectPanel.add(infoPanel);
1888
- objectPanel.setIconAt(5, GetIcon("icons/info.png"));
1889
- objectPanel.setToolTipTextAt(4, "Information");
2142
+ objectTabbedPane.add(infoPanel);
2143
+ objectTabbedPane.setIconAt(objectTabCount, GetIcon("icons/info.png"));
2144
+ objectTabbedPane.setToolTipTextAt(objectTabCount++, "Information");
18902145 }
18912146
18922147 /*
....@@ -1967,11 +2222,16 @@
19672222 {
19682223 if ((Integer)pce.getOldValue() == 1)
19692224 {
1970
- if (radio.layout != expandedLayout)
2225
+ if (CameraPane.FULLSCREEN)
19712226 {
1972
- radio.layout = expandedLayout;
1973
- radio.layout.doClick();
2227
+ ToggleFullScreen();
19742228 }
2229
+
2230
+// if (radio.layout != expandedLayout)
2231
+// {
2232
+// radio.layout = expandedLayout;
2233
+// radio.layout.doClick();
2234
+// }
19752235 }
19762236 }
19772237 });
....@@ -1995,7 +2255,7 @@
19952255
19962256 // aConstraints = gbc; // (GridBagConstraints) GrafreeD.clone(gbc);
19972257
1998
- frame.setSize(1280, 860);
2258
+ frame.setSize(1280, 900);
19992259
20002260 cameraView.requestFocusInWindow();
20012261
....@@ -4072,6 +4332,11 @@
40724332 copy.Touch(); // display list issue
40734333 objEditor.refreshContents(true); // To show item colors
40744334 return;
4335
+ } else if (event.getSource() == sortCB)
4336
+ {
4337
+ copy.sort ^= true;
4338
+ objEditor.refreshContents();
4339
+ return;
40754340 } else if (event.getSource() == link2masterCB)
40764341 {
40774342 copy.link2master ^= true;
....@@ -4081,6 +4346,20 @@
40814346 if (event.getSource() == randomCB)
40824347 {
40834348 copy.random ^= true;
4349
+ if (this instanceof RandomEditor)
4350
+ {
4351
+ cGridBag itemPanel = ((RandomEditor)this).itemPanel;
4352
+ itemPanel.getComponent(0).setEnabled(!copy.random);
4353
+
4354
+ // Tooltip?
4355
+ if (copy.random)
4356
+ {
4357
+ }
4358
+ else
4359
+ {
4360
+ }
4361
+ }
4362
+
40844363 objEditor.refreshContents();
40854364 return;
40864365 }
....@@ -4316,6 +4595,12 @@
43164595
43174596 void New()
43184597 {
4598
+ copy.skyboxname = "cubemaps/penguins-skyboxes/yonder";
4599
+ copy.skyboxext = "jpg";
4600
+
4601
+ copy.versionlist = null;
4602
+ copy.versionindex = -1;
4603
+
43194604 while (copy.Size() > 0)
43204605 {
43214606 copy.remove(0);
....@@ -4326,9 +4611,15 @@
43264611 if (copy == Grafreed.grafreed.universe)
43274612 {
43284613 CreateCameras();
4329
- cameraView.SetCamera(GetCamera(copy, 0));
4614
+ cameraView.SetCamera(GetCamera(copy, 0), true);
4615
+ cameraView.SetLight(GetCamera(copy, 4));
43304616 }
4617
+
43314618 ResetModel();
4619
+
4620
+ DuplicateVersion();
4621
+
4622
+ this.SetVersionStates();
43324623 objEditor.refreshContents();
43334624 }
43344625
....@@ -4470,13 +4761,13 @@
44704761
44714762 SetVersionStates();
44724763
4473
- SetCameras();
4764
+ SetCameras(false);
44744765 }
44754766
4476
- public boolean Save(boolean user)
4767
+ public boolean DuplicateVersion() // boolean user)
44774768 {
44784769 System.err.println("Save");
4479
- Replace();
4770
+ //Replace();
44804771
44814772 if (copy.versionlist == null)
44824773 {
....@@ -4585,15 +4876,16 @@
45854876 {
45864877 Object3D obj = (Object3D)Grafreed.clone(changed.versionlist[copy.versionindex]);
45874878
4879
+ assert(!obj.HasBigData());
4880
+
45884881 boolean temp = CameraPane.SWITCH;
45894882 CameraPane.SWITCH = false;
45904883
45914884 changed.ExtractBigData(Grafreed.grafreed.universe.versiontable);
45924885
45934886 changed.clear();
4594
-
4595
- changed.skyboxname = obj.skyboxname;
4596
- changed.skyboxext = obj.skyboxext;
4887
+
4888
+ obj.deepCopyNode(changed);
45974889
45984890 for (int i=0; i<obj.Size(); i++)
45994891 {
....@@ -4668,7 +4960,7 @@
46684960 replaceButton.setEnabled(copy.versionindex != -1);
46694961
46704962 previousVersionButton.setEnabled(copy.versionindex > 0);
4671
- nextVersionButton.setEnabled(copy.versionlist[copy.versionindex + 1] != null);
4963
+ nextVersionButton.setEnabled(copy.versionlist != null && copy.versionlist[copy.versionindex + 1] != null);
46724964
46734965 deleteVersionButton.setEnabled(copy.versionindex != -1);
46744966 //copy.versionlist[copy.versionindex + 1] != null);
....@@ -4718,7 +5010,7 @@
47185010
47195011 SetVersionStates();
47205012
4721
- SetCameras();
5013
+ SetCameras(false);
47225014
47235015 return true;
47245016 }
....@@ -4740,7 +5032,7 @@
47405032
47415033 SetVersionStates();
47425034
4743
- SetCameras();
5035
+ SetCameras(false);
47445036
47455037 return true;
47465038 }
....@@ -4751,7 +5043,8 @@
47515043
47525044 //cRadio tab = GetCurrentTab();
47535045
4754
- if (copy.versionindex == -1 || copy.versionlist[copy.versionindex] == null)
5046
+ // < 0 means == -2 || == -1
5047
+ if (copy.versionindex < 0 || copy.versionlist[copy.versionindex] == null)
47555048 {
47565049 // No version yet. OK. java.awt.Toolkit.getDefaultToolkit().beep();
47575050 return false;
....@@ -4784,30 +5077,39 @@
47845077
47855078 SetVersionStates();
47865079
4787
- SetCameras();
5080
+ SetCameras(false);
47885081 }
47895082
4790
- void SetCameras()
5083
+ void SetCameras(boolean set)
47915084 {
4792
- Camera neweye = (Camera)copy.GetObject(cameraView.cameras[0].GetUUID());
4793
- Camera newlight = (Camera)copy.GetObject(cameraView.LightCamera().GetUUID());
4794
-
4795
- cameraView.SetCamera(neweye);
4796
- cameraView.SetLight(newlight);
5085
+ if (copy == Grafreed.grafreed.universe)
5086
+ {
5087
+ Camera neweye = (Camera)copy.GetObject(cameraView.cameras[cameraView.cameracount^1].GetUUID());
5088
+ Camera newlight = (Camera)copy.GetObject(cameraView.LightCamera().GetUUID());
5089
+
5090
+ cameraView.SetCamera(neweye, set);
5091
+ cameraView.SetLight(newlight);
5092
+ }
47975093 }
4798
-
5094
+
5095
+ void ImportGFD(String url)
5096
+ {
5097
+ objEditor.ReadGFD(url, objEditor);
5098
+ }
5099
+
47995100 void ImportGFD()
48005101 {
48015102 FileDialog browser = new FileDialog(objEditor.frame, "Import GrafreeD", FileDialog.LOAD);
4802
- browser.show();
5103
+ browser.setVisible(true);
48035104 String filename = browser.getFile();
48045105 if (filename != null && filename.length() > 0)
48055106 {
48065107 String fullname = browser.getDirectory() + filename;
48075108
48085109 //Object3D readobj =
4809
- objEditor.ReadGFD(fullname, objEditor);
5110
+ // objEditor.ReadGFD(fullname, objEditor);
48105111 //makeSomething(readobj);
5112
+ ImportGFD(fullname);
48115113 }
48125114 }
48135115
....@@ -5124,9 +5426,16 @@
51245426 cNumberSlider versionSlider;
51255427 cNumberSlider versionField;
51265428
5429
+ cNumberSlider scaleSlider;
5430
+
5431
+ void ScaleSelection(int scale)
5432
+ {
5433
+ }
5434
+
51275435 public void stateChanged(ChangeEvent e)
51285436 {
51295437 // assert(false);
5438
+ // Main version slider
51305439 if (e.getSource() == versionSlider)
51315440 {
51325441 if (muteSlider)
....@@ -5141,12 +5450,13 @@
51415450 copy.versionindex = version;
51425451 CopyChanged(copy);
51435452 SetVersionStates();
5144
- SetCameras();
5453
+ SetCameras(false);
51455454 }
51465455
51475456 return;
51485457 }
51495458
5459
+ // Version slider of edited object
51505460 if (e.getSource() == versionField)
51515461 {
51525462 int version = versionField.getInteger();
....@@ -5160,6 +5470,14 @@
51605470 return;
51615471 }
51625472
5473
+ if (e.getSource() == scaleSlider)
5474
+ {
5475
+ int scale = scaleSlider.getInteger();
5476
+
5477
+ ScaleSelection(scale);
5478
+ return;
5479
+ }
5480
+
51635481 if (freezematerial)
51645482 {
51655483 return;
....@@ -5397,7 +5715,7 @@
53975715 interest.y = k * interest.y + (1 - k) * height;
53985716 }
53995717
5400
- CameraPane.zoomonce = true;
5718
+ // CameraPane.zoomonce = true;
54015719
54025720 // june 2014
54035721 Camera parentcam = cameraView.manipCamera;
....@@ -5471,7 +5789,7 @@
54715789
54725790 objEditor.ScreenFit(obj, false);
54735791
5474
- cameraView.pingthread.StepToTarget(true); // aout 2013
5792
+ cameraView.pingthread.StepToTarget(); //true); // aout 2013
54755793 refreshContents();
54765794 }
54775795
....@@ -5748,10 +6066,27 @@
57486066 {
57496067 Object3D readobj = null;
57506068
6069
+ java.net.URL url = null;
6070
+
6071
+ try
6072
+ {
6073
+ url = new java.net.URL(fullname);
6074
+ } catch (Exception e)
6075
+ {
6076
+ try
6077
+ {
6078
+ url = new java.net.URL("file:///" + fullname);
6079
+ } catch (Exception e2)
6080
+ {
6081
+ e2.printStackTrace();
6082
+ }
6083
+ }
6084
+
57516085 try
57526086 {
57536087 // Try compressed version first.
5754
- java.io.FileInputStream istream = new java.io.FileInputStream(fullname);
6088
+ java.io.InputStream istream //= new java.io.FileInputStream(fullname);
6089
+ = url.openStream();
57556090 java.util.zip.GZIPInputStream zstream = new java.util.zip.GZIPInputStream(istream);
57566091 java.io.ObjectInputStream p = new java.io.ObjectInputStream(zstream);
57576092
....@@ -5766,7 +6101,8 @@
57666101
57676102 try
57686103 {
5769
- java.io.FileInputStream istream = new java.io.FileInputStream(fullname);
6104
+ java.io.InputStream istream //= new java.io.FileInputStream(fullname);
6105
+ = url.openStream();
57706106 java.io.ObjectInputStream p = new java.io.ObjectInputStream(istream);
57716107
57726108 readobj = (Object3D) p.readObject();
....@@ -5864,12 +6200,11 @@
58646200 // // oct 2012 if(cam.parent == null)
58656201 // cam.parent = copy.get(0); // cams;
58666202 // }
5867
- cameraView.SetCamera((Camera) cams.get(0));
5868
- // MAJOR CRASH!!
5869
- cameraView.SetLight((Camera) cams.get(4));
5870
- topView.SetCamera((Camera) cams.get(1));
5871
- frontView.SetCamera((Camera) cams.get(2));
5872
- sideView.SetCamera((Camera) cams.get(3));
6203
+ cameraView.SetCamera((Camera) cams.get(0), true);
6204
+ cameraView.SetLight((Camera) cams.get(4)); // MAJOR CRASH!!
6205
+ topView.SetCamera((Camera) cams.get(1), true);
6206
+ frontView.SetCamera((Camera) cams.get(2), true);
6207
+ sideView.SetCamera((Camera) cams.get(3), true);
58736208
58746209 // copy.get(0).clear();
58756210 // copy.get(0).addAll(cams);
....@@ -5911,6 +6246,8 @@
59116246
59126247 //? SetUndoStates();
59136248
6249
+ cameraView.RevertCamera();
6250
+
59146251 ResetModel();
59156252 copy.HardTouch(); // recompile?
59166253 refreshContents();
....@@ -5922,7 +6259,7 @@
59226259 if (Grafreed.standAlone)
59236260 {
59246261 FileDialog browser = new FileDialog(frame, "Open", FileDialog.LOAD);
5925
- browser.show();
6262
+ browser.setVisible(true);
59266263 String filename = browser.getFile();
59276264 if (filename != null && filename.length() > 0)
59286265 {
....@@ -6245,12 +6582,14 @@
62456582 cGridBag skyboxPanel;
62466583 cGridBag materialPanel;
62476584 cGridBag ctrlPanel;
6585
+ cGridBag figurePanel;
6586
+ cGridBag fullscenePanel;
62486587
62496588 JScrollPane infoPanel;
62506589
62516590 cGridBag optionsPanel;
62526591
6253
- JTabbedPane objectPanel;
6592
+ JTabbedPane objectTabbedPane;
62546593 boolean materialFlushed;
62556594 Object3D latestObject;
62566595