Normand Briere
2019-08-17 5892f05411c3d4dce2d8a59e0966dc2e1843a971
ObjEditor.java
....@@ -34,6 +34,7 @@
3434 iSendInfo
3535 //KeyListener
3636 {
37
+ public cToggleButton pinButton;
3738 boolean timeline;
3839 boolean wasFullScreen;
3940
....@@ -41,6 +42,35 @@
4142 JFrame frame;
4243
4344 static ObjEditor theFrame;
45
+
46
+ public void AllocProjectedVertices(Object3D object)
47
+ {
48
+ assert (object.projectedVertices != null);
49
+
50
+ if (object.projectedVertices.length <= 2)
51
+ {
52
+ // Side effect...
53
+ Object3D.cVector2[] keep = object.projectedVertices;
54
+ object.projectedVertices = new Object3D.cVector2[3];
55
+ for (int i = 0; i < 3; i++)
56
+ {
57
+ if (i < keep.length)
58
+ {
59
+ object.projectedVertices[i] = keep[i];
60
+ } else
61
+ {
62
+ object.projectedVertices[i] = new Object3D.cVector2();
63
+ }
64
+ /*
65
+ if(keep.length == 0)
66
+ object.projectedVertices[0] = new Object3D.cVector2();
67
+ else
68
+ object.projectedVertices[0] = keep[0];
69
+ object.projectedVertices[1] = new Object3D.cVector2();
70
+ */
71
+ }
72
+ }
73
+ }
4474
4575 public cGridBag GetSeparator()
4676 {
....@@ -74,11 +104,19 @@
74104 return new cCheckBox(icon, border);
75105 }
76106
77
- ImageIcon GetIcon(String name)
107
+ static java.util.Hashtable<String, javax.swing.ImageIcon> icons = new java.util.Hashtable<String, javax.swing.ImageIcon>();
108
+
109
+ static ImageIcon GetIcon(String name)
78110 {
111
+ javax.swing.ImageIcon iconCache = icons.get(name);
112
+ if (iconCache != null)
113
+ {
114
+ return iconCache;
115
+ }
116
+
79117 try
80118 {
81
- BufferedImage image = javax.imageio.ImageIO.read(getClass().getClassLoader().getResourceAsStream(name));
119
+ BufferedImage image = javax.imageio.ImageIO.read(ObjEditor.class.getClassLoader().getResourceAsStream(name));
82120
83121 // if (image.getWidth() > 48 && image.getHeight() > 48)
84122 // {
....@@ -93,10 +131,14 @@
93131 // }
94132
95133 javax.swing.ImageIcon icon = new javax.swing.ImageIcon(image);
134
+
135
+ icons.put(name, icon);
136
+
96137 return icon;
97138 }
98139 catch (Exception e)
99140 {
141
+ //icons.put(name, null);
100142 return null;
101143 }
102144 }
....@@ -296,11 +338,13 @@
296338 client = inClient;
297339 copy = client;
298340
299
- if (copy.versionlist == null)
300
- {
301
- copy.versionlist = new Object3D[100];
302
- copy.versionindex = -1;
303
- }
341
+// if (copy.versionlist == null)
342
+// {
343
+// copy.versionlist = new Object3D[100];
344
+// copy.versionindex = -1;
345
+//
346
+// callee.Save(true);
347
+// }
304348
305349 // "this" is not called: SetupUI2(objEditor);
306350 }
....@@ -319,6 +363,8 @@
319363 {
320364 copy.versionlist = new Object3D[100];
321365 copy.versionindex = -1;
366
+
367
+// Save(true);
322368 }
323369
324370 SetupUI2(callee.GetEditor());
....@@ -342,7 +388,8 @@
342388 //parent = p;
343389
344390 GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
345
- System.out.println("getFullScreenWindow? " + gd.getFullScreenWindow());
391
+ if (Globals.DEBUG)
392
+ System.out.println("getFullScreenWindow? " + gd.getFullScreenWindow());
346393 //gd.setFullScreenWindow(this);
347394 //setResizable(false);
348395 //if (!isDisplayable())
....@@ -353,11 +400,13 @@
353400 copy = localCopy;
354401 copy.editWindow = this;
355402
356
- if (copy.versionlist == null)
357
- {
358
-// copy.versions = new byte[100][];
403
+// if (copy.versionlist == null)
404
+// {
405
+// copy.versionlist = new Object3D[100];
359406 // copy.versionindex = -1;
360
- }
407
+//
408
+// Save(true);
409
+// }
361410
362411 SetupMenu();
363412
....@@ -377,6 +426,9 @@
377426
378427 static java.util.Vector<Object3D> listUI = new java.util.Vector<Object3D>();
379428
429
+ // This is to refresh the UI of the material panel.
430
+ boolean patchMaterial;
431
+
380432 void SetupMenu()
381433 {
382434 frame.setMenuBar(menuBar = new MenuBar());
....@@ -426,6 +478,8 @@
426478
427479 ChangeListener changeListener = new ChangeListener()
428480 {
481
+ //String name;
482
+
429483 public void stateChanged(ChangeEvent changeEvent)
430484 {
431485 // if (objectPanel.getSelectedIndex() == objectPanel.indexOfTab("Material") && !materialFlushed)
....@@ -444,7 +498,37 @@
444498 // EditSelection(false);
445499 // }
446500
447
- refreshContents(false); // To refresh Info tab
501
+// if (objectPanel.getSelectedIndex() == 4)
502
+// {
503
+// name = copy.skyboxname;
504
+//
505
+// if (name == null)
506
+// {
507
+// name = "";
508
+// }
509
+//
510
+// copy.skyboxname = "cubemaps/default-skyboxes/rgb";
511
+// copy.skyboxext = "jpg";
512
+// }
513
+// else
514
+// {
515
+// if (name != null)
516
+// {
517
+// if (name.equals(""))
518
+// {
519
+// copy.skyboxname = null;
520
+// copy.skyboxext = null;
521
+// }
522
+// else
523
+// {
524
+// copy.skyboxname = name;
525
+// }
526
+// }
527
+// }
528
+ cameraView.transformMode = objectPanel.getSelectedIndex() == 4;
529
+
530
+// refreshContents(false); // To refresh Info tab
531
+ cameraView.repaint();
448532 }
449533 };
450534 objectPanel.addChangeListener(changeListener);
....@@ -466,6 +550,8 @@
466550
467551 toolboxPanel = new cGridBag().setVertical(true);
468552 //toolboxPanel.setName("Toolbox");
553
+
554
+ skyboxPanel = new cGridBag().setVertical(true);
469555
470556 materialPanel = new cGridBag().setVertical(false);
471557 //materialPanel.setName("Material");
....@@ -751,6 +837,7 @@
751837 boolean maximized;
752838
753839 cButton fullscreenLayout;
840
+ cButton expandedLayout;
754841
755842 void Minimize()
756843 {
....@@ -790,10 +877,12 @@
790877 cButton minButton;
791878 cButton maxButton;
792879 cButton fullButton;
880
+ cButton collapseButton;
881
+ cButton maximize3DButton;
793882
794883 void ToggleFullScreen()
795884 {
796
-GraphicsDevice device = frame.getGraphicsConfiguration().getDevice();
885
+ GraphicsDevice device = frame.getGraphicsConfiguration().getDevice();
797886
798887 cameraView.ToggleFullScreen();
799888
....@@ -814,13 +903,13 @@
814903 // X frame.getContentPane().remove(/*"Center",*/bigThree);
815904 // X framePanel.add(bigThree);
816905 // X frame.getContentPane().add(/*"Center",*/framePanel);
817
- framePanel.setDividerLocation(46);
906
+// framePanel.setDividerLocation(46); // icons are 24x24
818907
819908 //frame.setVisible(true);
820
- radio.layout = keepButton;
909
+// radio.layout = keepButton;
821910 //theFrame = null;
822911 keepButton = null;
823
- radio.layout.doClick();
912
+// radio.layout.doClick();
824913
825914 } else
826915 {
....@@ -841,10 +930,10 @@
841930 // X frame.getContentPane().remove(/*"Center",*/framePanel);
842931 // X framePanel.remove(bigThree);
843932 // X frame.getContentPane().add(/*"Center",*/bigThree);
844
- framePanel.setDividerLocation(0);
933
+// framePanel.setDividerLocation(0);
845934
846
- radio.layout = fullscreenLayout;
847
- radio.layout.doClick();
935
+// radio.layout = fullscreenLayout;
936
+// radio.layout.doClick();
848937 //frame.setVisible(true);
849938 }
850939 frame.validate();
....@@ -852,23 +941,37 @@
852941 cameraView.requestFocusInWindow();
853942 }
854943
855
- private Object3D CompressCopy()
944
+ void CollapseToolbar()
945
+ {
946
+ framePanel.setDividerLocation(0);
947
+ //frame.validate();
948
+
949
+ cameraView.requestFocusInWindow();
950
+ }
951
+
952
+ private Object3D Duplicate(Object3D object)
856953 {
857954 boolean temp = CameraPane.SWITCH;
858955 CameraPane.SWITCH = false;
859956
860
- copy.ExtractBigData(versiontable);
957
+ if (Grafreed.grafreed.universe.versiontable == null)
958
+ Grafreed.grafreed.universe.versiontable = new java.util.Hashtable<java.util.UUID, Object3D>();
959
+
960
+ object.ExtractBigData(Grafreed.grafreed.universe.versiontable);
861961 // if (copy == client)
862962
863
- Object3D versions[] = copy.versionlist;
864
- copy.versionlist = null;
963
+ Object3D versions[] = object.versionlist;
964
+ java.util.Hashtable<java.util.UUID, Object3D> versiontable = object.versiontable; // if Grafreed.grafreed.universe
965
+ object.versionlist = null;
966
+ object.versiontable = null;
865967
866968 //byte[] compress = Compress(copy);
867
- Object3D compress = (Object3D)Grafreed.clone(copy);
969
+ Object3D compress = (Object3D)Grafreed.clone(object);
868970
869
- copy.versionlist = versions;
971
+ object.versionlist = versions;
972
+ object.versiontable = versiontable; // if Grafreed.grafreed.universe
870973
871
- copy.RestoreBigData(versiontable);
974
+ object.RestoreBigData(Grafreed.grafreed.universe.versiontable);
872975
873976 CameraPane.SWITCH = temp;
874977
....@@ -1205,6 +1308,18 @@
12051308
12061309 namePanel = new cGridBag();
12071310
1311
+ //if (copy.pinned)
1312
+ {
1313
+ pinButton = GetToggleButton("icons/pin.png", !Grafreed.NIMBUSLAF);
1314
+ pinButton.setSelected(copy.pinned);
1315
+ cGridBag t = new cGridBag();
1316
+ t.preferredWidth = 2;
1317
+ t.add(pinButton);
1318
+ namePanel.add(t);
1319
+
1320
+ pinButton.addItemListener(this);
1321
+ }
1322
+
12081323 nameField = AddText(namePanel, copy.GetName());
12091324 namePanel.add(new JScrollPane(nameField, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER));
12101325 oe.ctrlPanel.add(namePanel);
....@@ -1218,14 +1333,14 @@
12181333
12191334 liveCB = AddCheckBox(setupPanel, "Live", copy.live);
12201335 liveCB.setToolTipText("Animate object");
1336
+ markCB = AddCheckBox(setupPanel, "Anim", copy.marked);
1337
+ markCB.setToolTipText("Set target transform");
12211338 selectableCB = AddCheckBox(setupPanel, "Select", !copy.dontselect);
12221339 selectableCB.setToolTipText("Make object selectable");
12231340 // Return();
12241341
12251342 hideCB = AddCheckBox(setupPanel, "Hide", copy.hide);
12261343 hideCB.setToolTipText("Hide object");
1227
- markCB = AddCheckBox(setupPanel, "Mark", copy.marked);
1228
- markCB.setToolTipText("As animation target transform");
12291344
12301345 ToolTipManager.sharedInstance().setLightWeightPopupEnabled(false);
12311346
....@@ -1427,6 +1542,7 @@
14271542
14281543 if (cam == null || !(copy.get(0) instanceof cGroup))
14291544 {
1545
+ if (Globals.DEBUG)
14301546 System.out.println("CREATE CAMERAS");
14311547 cams = new cTemplate();
14321548 cams.name = "Cameras";
....@@ -1552,31 +1668,34 @@
15521668
15531669 //JScrollPane tmp = new JScrollPane(ctrlPanel, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
15541670 //tmp.setName("Edit");
1671
+ objectPanel.add(toolboxPanel);
1672
+ objectPanel.setIconAt(0, GetIcon("icons/primitives.png"));
1673
+ objectPanel.setToolTipTextAt(0, "Objects & textures");
1674
+
15551675 objectPanel.add(materialPanel);
1556
- objectPanel.setIconAt(0, GetIcon("icons/material.png"));
1557
- objectPanel.setToolTipTextAt(0, "Material");
1676
+ objectPanel.setIconAt(1, GetIcon("icons/material.png"));
1677
+ objectPanel.setToolTipTextAt(1, "Material");
15581678
1679
+ objectPanel.add(skyboxPanel);
1680
+ objectPanel.setIconAt(2, GetIcon("icons/skybox.jpg"));
1681
+ objectPanel.setToolTipTextAt(2, "Backgrounds");
1682
+
15591683 // JPanel north = new JPanel(new BorderLayout());
15601684 // north.setName("Edit");
15611685 // north.add(ctrlPanel, BorderLayout.NORTH);
15621686 // objectPanel.add(north);
15631687 objectPanel.add(editPanel);
1564
- objectPanel.setIconAt(1, GetIcon("icons/write.png"));
1565
- objectPanel.setToolTipTextAt(1, "Edit controls");
1566
-
1567
- //if (Globals.ADVANCED)
1568
- objectPanel.add(infoPanel);
1569
- objectPanel.setIconAt(2, GetIcon("icons/info.png"));
1570
- objectPanel.setToolTipTextAt(2, "Information");
1688
+ objectPanel.setIconAt(3, GetIcon("icons/write.png"));
1689
+ objectPanel.setToolTipTextAt(3, "Edit controls");
15711690
15721691 objectPanel.add(XYZPanel);
1573
- objectPanel.setIconAt(3, GetIcon("icons/XYZ.png"));
1574
- objectPanel.setToolTipTextAt(3, "XYZ/RGB transform");
1692
+ objectPanel.setIconAt(4, GetIcon("icons/XYZ.png"));
1693
+ objectPanel.setToolTipTextAt(4, "XYZ/RGB transform");
15751694
1576
- objectPanel.add(toolboxPanel);
1577
- objectPanel.setIconAt(4, GetIcon("icons/primitives.png"));
1578
- objectPanel.setToolTipTextAt(4, "Objects & backgrounds");
1579
-
1695
+ patchMaterial = true;
1696
+ cameraView.patchMaterial = this;
1697
+ objectPanel.setSelectedIndex(1);
1698
+
15801699 /*
15811700 aConstraints.gridx = 0;
15821701 aConstraints.gridwidth = 1;
....@@ -1596,7 +1715,7 @@
15961715 scrollpane.addMouseWheelListener(this); // Default not fast enough
15971716
15981717 /*JTabbedPane*/ scenePanel = new cGridBag();
1599
- scenePanel.preferredWidth = 5;
1718
+ scenePanel.preferredWidth = 6;
16001719
16011720 JTabbedPane tabbedPane = new JTabbedPane();
16021721 tabbedPane.add(scrollpane);
....@@ -1613,6 +1732,11 @@
16131732
16141733 scenePanel.add(tabbedPane);
16151734
1735
+ //if (Globals.ADVANCED)
1736
+// tabbedPane.add(infoPanel);
1737
+// tabbedPane.setIconAt(3, GetIcon("icons/info.png"));
1738
+// tabbedPane.setToolTipTextAt(3, "Information");
1739
+
16161740 /*
16171741 cTree jTree = new cTree(null);
16181742 ToolTipManager.sharedInstance().registerComponent(jTree);
....@@ -1683,6 +1807,23 @@
16831807 // aConstraints.gridheight = 1;
16841808
16851809 framePanel = new JSplitPane(JSplitPane.VERTICAL_SPLIT, toolbarPanel, bigThree);
1810
+
1811
+ framePanel.addPropertyChangeListener(JSplitPane.DIVIDER_LOCATION_PROPERTY,
1812
+ new java.beans.PropertyChangeListener()
1813
+ {
1814
+ public void propertyChange(java.beans.PropertyChangeEvent pce)
1815
+ {
1816
+ if ((Integer)pce.getOldValue() == 1)
1817
+ {
1818
+ if (radio.layout != expandedLayout)
1819
+ {
1820
+ radio.layout = expandedLayout;
1821
+ radio.layout.doClick();
1822
+ }
1823
+ }
1824
+ }
1825
+ });
1826
+
16861827 framePanel.setContinuousLayout(false);
16871828 framePanel.setOneTouchExpandable(false);
16881829 //.setDividerLocation(0.8);
....@@ -1692,7 +1833,7 @@
16921833
16931834 frame.getContentPane().setLayout(new BorderLayout());
16941835 /**/
1695
- JTabbedPane worldPane = new JTabbedPane();
1836
+ //JTabbedPane worldPane = new JTabbedPane();
16961837 //worldPane.add(bigPanel);
16971838 //worldPane.add(worldPanel);
16981839 /**/
....@@ -1752,7 +1893,15 @@
17521893
17531894 // Skin
17541895 colorField.setFloat(material.color);
1755
- saturationField.setFloat(material.modulation);
1896
+ float saturation = material.modulation;
1897
+
1898
+ if (!cameraView.Skinshader)
1899
+ {
1900
+ saturation /= 1.5;
1901
+ }
1902
+
1903
+ saturationField.setFloat(saturation);
1904
+
17561905 subsurfaceField.setFloat(material.subsurface);
17571906 selfshadowField.setFloat(material.diffuseness);
17581907 diffusenessField.setFloat(material.factor);
....@@ -2063,6 +2212,21 @@
20632212 });
20642213 presetpanel.add(bump0);
20652214
2215
+ cLabel borderShader = GetLabel("icons/shadericons/borderfade.jpg", !Grafreed.NIMBUSLAF);
2216
+ borderShader.setToolTipText("Border fade");
2217
+ borderShader.addMouseListener(new MouseAdapter()
2218
+ {
2219
+ public void mouseClicked(MouseEvent e)
2220
+ {
2221
+ borderfadeField.setFloat(0.5);
2222
+ opacityField.setFloat(0.75);
2223
+
2224
+ materialtouched = true;
2225
+ applySelf();
2226
+ }
2227
+ });
2228
+ presetpanel.add(borderShader);
2229
+
20662230 cLabel halo = GetLabel("icons/shadericons/shadericon00017.png", !Grafreed.NIMBUSLAF);
20672231 halo.setToolTipText("Halo");
20682232 halo.addMouseListener(new MouseAdapter()
....@@ -2101,6 +2265,25 @@
21012265 }
21022266 });
21032267 presetpanel.add(candle);
2268
+
2269
+ cLabel shadowShader = GetLabel("icons/shadericons/shadow.png", !Grafreed.NIMBUSLAF);
2270
+ shadowShader.setToolTipText("Shadow");
2271
+ shadowShader.addMouseListener(new MouseAdapter()
2272
+ {
2273
+ public void mouseClicked(MouseEvent e)
2274
+ {
2275
+ diffuseField.setFloat(0.001);
2276
+ ambientField.setFloat(0.001);
2277
+ cameraField.setFloat(0.001);
2278
+ specularField.setFloat(0.001);
2279
+ fakedepthField.setFloat(0.001);
2280
+ opacityField.setFloat(0.6);
2281
+
2282
+ materialtouched = true;
2283
+ applySelf();
2284
+ }
2285
+ });
2286
+ presetpanel.add(shadowShader);
21042287
21052288 cGridBag panel = new cGridBag().setVertical(true);
21062289
....@@ -2151,9 +2334,20 @@
21512334
21522335 cGridBag huepanel = new cGridBag();
21532336 cGridBag huelabel = new cGridBag();
2154
- skin = GetLabel("icons/hue.png", false);
2155
- skin.fit = true;
2156
- huelabel.add(skin);
2337
+ cLabel hue = GetLabel("icons/hue.png", false);
2338
+ hue.fit = true;
2339
+
2340
+ hue.addMouseListener(new MouseAdapter()
2341
+ {
2342
+ public void mousePressed(MouseEvent e)
2343
+ {
2344
+ int x = e.getX();
2345
+
2346
+ colorField.setFloat((double)x / ((cLabel)e.getSource()).getWidth());
2347
+ }
2348
+ });
2349
+
2350
+ huelabel.add(hue);
21572351 huelabel.preferredWidth = 20;
21582352 huepanel.add(new cGridBag()); // Label
21592353 huepanel.add(huelabel); // Field/slider
....@@ -3429,32 +3623,8 @@
34293623
34303624 if (multiplyToggle != null)
34313625 multiplyToggle.setSelected(mat.multiply);
3432
-
3433
- assert (object.projectedVertices != null);
3434
-
3435
- if (object.projectedVertices.length <= 2)
3436
- {
3437
- // Side effect...
3438
- Object3D.cVector2[] keep = object.projectedVertices;
3439
- object.projectedVertices = new Object3D.cVector2[3];
3440
- for (int i = 0; i < 3; i++)
3441
- {
3442
- if (i < keep.length)
3443
- {
3444
- object.projectedVertices[i] = keep[i];
3445
- } else
3446
- {
3447
- object.projectedVertices[i] = new Object3D.cVector2();
3448
- }
3449
- /*
3450
- if(keep.length == 0)
3451
- object.projectedVertices[0] = new Object3D.cVector2();
3452
- else
3453
- object.projectedVertices[0] = keep[0];
3454
- object.projectedVertices[1] = new Object3D.cVector2();
3455
- */
3456
- }
3457
- }
3626
+
3627
+ AllocProjectedVertices(object);
34583628
34593629 SetMaterial(mat, object.projectedVertices);
34603630 }
....@@ -3574,6 +3744,17 @@
35743744 public void itemStateChanged(ItemEvent event)
35753745 {
35763746 // System.out.println("Propagate = " + propagate);
3747
+ if (event.getSource() == pinButton)
3748
+ {
3749
+ copy.pinned ^= true;
3750
+ if (!copy.pinned && !copy.editWindow.copy.selection.contains(copy))
3751
+ {
3752
+ ((GroupEditor)copy.editWindow).listUI.remove(copy);
3753
+ copy.CloseUI();
3754
+ //copy.editWindow.refreshContents();
3755
+ }
3756
+ }
3757
+ else
35773758 if (event.getSource() == propagateToggle)
35783759 {
35793760 propagate ^= true;
....@@ -3753,7 +3934,7 @@
37533934 //System.out.println("ObjEditor " + event);
37543935 applySelf0(true);
37553936 //parent.applySelf();
3756
- objEditor.refreshContents();
3937
+ // conflicts with requestFocus objEditor.refreshContents();
37573938 } else if (source == resetButton)
37583939 {
37593940 CameraPane.fullreset = true;
....@@ -4046,7 +4227,7 @@
40464227 {
40474228 //Save(true);
40484229 Replace();
4049
- SetUndoStates();
4230
+ SetVersionStates();
40504231 }
40514232
40524233 private boolean Equal(byte[] compress, byte[] name)
....@@ -4065,8 +4246,6 @@
40654246 return true;
40664247 }
40674248
4068
- java.util.Hashtable<java.util.UUID, Object3D> versiontable = new java.util.Hashtable<java.util.UUID, Object3D>();
4069
-
40704249 void DeleteVersion()
40714250 {
40724251 for (int i = copy.versionindex; i < copy.versionlist.length-1; i++)
....@@ -4074,19 +4253,23 @@
40744253 copy.versionlist[i] = copy.versionlist[i+1];
40754254 }
40764255
4077
- CopyChanged();
4256
+ if (copy.versionlist[copy.versionindex] == null)
4257
+ copy.versionindex -= 1;
40784258
4079
- SetUndoStates();
4259
+ if (copy.versionindex != -1)
4260
+ CopyChanged();
4261
+
4262
+ SetVersionStates();
40804263 }
40814264
40824265 public boolean Save(boolean user)
40834266 {
40844267 System.err.println("Save");
4085
- //Replace();
4268
+ Replace();
40864269
4087
- cRadio tab = GetCurrentTab();
4270
+ //cRadio tab = GetCurrentTab();
40884271
4089
- Object3D compress = CompressCopy(); // Saved version. No need for "Replace"?
4272
+ Object3D compress = Duplicate(copy); // Saved version. No need for "Replace"?
40904273
40914274 boolean thesame = false;
40924275
....@@ -4122,7 +4305,7 @@
41224305 // copy.versionlist[i] = null;
41234306 // }
41244307
4125
- SetUndoStates();
4308
+ SetVersionStates();
41264309
41274310 // test save
41284311 if (false)
....@@ -4180,14 +4363,14 @@
41804363
41814364 void CopyChanged()
41824365 {
4183
- Object3D obj = copy.versionlist[copy.versionindex];
4366
+ Object3D obj = (Object3D)Grafreed.clone(copy.versionlist[copy.versionindex]);
41844367
4185
- SetUndoStates();
4368
+ SetVersionStates();
41864369
41874370 boolean temp = CameraPane.SWITCH;
41884371 CameraPane.SWITCH = false;
41894372
4190
- copy.ExtractBigData(versiontable);
4373
+ copy.ExtractBigData(Grafreed.grafreed.universe.versiontable);
41914374
41924375 copy.clear();
41934376
....@@ -4199,7 +4382,7 @@
41994382 copy.add(obj.get(i));
42004383 }
42014384
4202
- copy.RestoreBigData(versiontable);
4385
+ copy.RestoreBigData(Grafreed.grafreed.universe.versiontable);
42034386
42044387 CameraPane.SWITCH = temp;
42054388
....@@ -4249,22 +4432,27 @@
42494432 return count;
42504433 }
42514434
4252
- void SetUndoStates()
4435
+ void SetVersionStates()
42534436 {
4254
- cRadio tab = GetCurrentTab();
4437
+ //if (true)
4438
+ // return;
4439
+
4440
+ //cRadio tab = GetCurrentTab();
42554441
4256
- restoreButton.setEnabled(true); // copy.versionindex != -1);
4257
- replaceButton.setEnabled(true); // copy.versionindex != -1);
4442
+ restoreButton.setEnabled(copy.versionindex != -1);
4443
+ replaceButton.setEnabled(copy.versionindex != -1);
42584444
42594445 previousVersionButton.setEnabled(copy.versionindex > 0);
42604446 nextVersionButton.setEnabled(copy.versionlist[copy.versionindex + 1] != null);
42614447
4262
- deleteVersionButton.setEnabled(//copy.versionindex > 0 &&
4263
- copy.versionlist[copy.versionindex + 1] != null);
4448
+ deleteVersionButton.setEnabled(copy.versionindex != -1);
4449
+ //copy.versionlist[copy.versionindex + 1] != null);
42644450
42654451 muteSlider = true;
4452
+ versionSlider.setMinimum(0);
42664453 versionSlider.setMaximum(VersionCount() - 1);
42674454 versionSlider.setInteger(copy.versionindex);
4455
+ versionSlider.setEnabled(copy.versionindex != -1);
42684456 muteSlider = false;
42694457 }
42704458
....@@ -4275,7 +4463,7 @@
42754463
42764464 System.err.println("Undo");
42774465
4278
- cRadio tab = GetCurrentTab();
4466
+ //cRadio tab = GetCurrentTab();
42794467
42804468 if (copy.versionindex == 0)
42814469 {
....@@ -4307,7 +4495,7 @@
43074495 {
43084496 System.err.println("Restore");
43094497
4310
- cRadio tab = GetCurrentTab();
4498
+ //cRadio tab = GetCurrentTab();
43114499
43124500 if (copy.versionindex == -1 || copy.versionlist[copy.versionindex] == null)
43134501 {
....@@ -4323,9 +4511,9 @@
43234511
43244512 public boolean Replace()
43254513 {
4326
- System.err.println("Replace");
4514
+ //System.err.println("Replace");
43274515
4328
- cRadio tab = GetCurrentTab();
4516
+ //cRadio tab = GetCurrentTab();
43294517
43304518 if (copy.versionindex == -1 || copy.versionlist[copy.versionindex] == null)
43314519 {
....@@ -4333,7 +4521,7 @@
43334521 return false;
43344522 }
43354523
4336
- copy.versionlist[copy.versionindex] = CompressCopy();
4524
+ copy.versionlist[copy.versionindex] = Duplicate(copy);
43374525
43384526 return true;
43394527 }
....@@ -4343,7 +4531,7 @@
43434531 // Option?
43444532 Replace();
43454533
4346
- cRadio tab = GetCurrentTab();
4534
+ //cRadio tab = GetCurrentTab();
43474535
43484536 if (copy.versionlist[copy.versionindex + 1] == null)
43494537 {
....@@ -4550,6 +4738,12 @@
45504738 // else
45514739 // applySelf(true);
45524740 // }
4741
+
4742
+ boolean Equal(double a, double b)
4743
+ {
4744
+ return Math.abs(a - b) < 0.001;
4745
+ }
4746
+
45534747 void applySelf0(boolean name)
45544748 {
45554749 if (name)
....@@ -4599,29 +4793,52 @@
45994793 {
46004794 cMaterial mat = copy.material;
46014795
4602
- colorField.SetToolTipValue((mat.color));
4603
- saturationField.SetToolTipValue((mat.modulation));
4604
- metalnessField.SetToolTipValue((mat.metalness));
4605
- diffuseField.SetToolTipValue((mat.diffuse));
4606
- specularField.SetToolTipValue((mat.specular));
4607
- shininessField.SetToolTipValue((mat.shininess));
4608
- shiftField.SetToolTipValue((mat.shift));
4609
- ambientField.SetToolTipValue((mat.ambient));
4610
- lightareaField.SetToolTipValue((mat.lightarea));
4611
- diffusenessField.SetToolTipValue((mat.factor));
4612
- velvetField.SetToolTipValue((mat.velvet));
4613
- sheenField.SetToolTipValue((mat.sheen));
4614
- subsurfaceField.SetToolTipValue((mat.subsurface));
4615
- backlitField.SetToolTipValue((mat.bump));
4616
- anisoField.SetToolTipValue((mat.aniso));
4617
- anisoVField.SetToolTipValue((mat.anisoV));
4618
- cameraField.SetToolTipValue((mat.cameralight));
4619
- selfshadowField.SetToolTipValue((mat.diffuseness));
4620
- shadowField.SetToolTipValue((mat.shadow));
4621
- textureField.SetToolTipValue((mat.texture));
4622
- opacityField.SetToolTipValue((mat.opacity));
4623
- fakedepthField.SetToolTipValue((mat.fakedepth));
4624
- shadowbiasField.SetToolTipValue((mat.shadowbias));
4796
+ if (!Equal(colorField.getFloat(), mat.color))
4797
+ colorField.SetToolTipValue((mat.color));
4798
+ if (!Equal(saturationField.getFloat(), mat.modulation))
4799
+ saturationField.SetToolTipValue((mat.modulation));
4800
+ if (!Equal(metalnessField.getFloat(), mat.metalness))
4801
+ metalnessField.SetToolTipValue((mat.metalness));
4802
+ if (!Equal(diffuseField.getFloat(), mat.diffuse))
4803
+ diffuseField.SetToolTipValue((mat.diffuse));
4804
+ if (!Equal(specularField.getFloat(), mat.specular))
4805
+ specularField.SetToolTipValue((mat.specular));
4806
+ if (!Equal(shininessField.getFloat(), mat.shininess))
4807
+ shininessField.SetToolTipValue((mat.shininess));
4808
+ if (!Equal(shiftField.getFloat(), mat.shift))
4809
+ shiftField.SetToolTipValue((mat.shift));
4810
+ if (!Equal(ambientField.getFloat(), mat.ambient))
4811
+ ambientField.SetToolTipValue((mat.ambient));
4812
+ if (!Equal(lightareaField.getFloat(), mat.lightarea))
4813
+ lightareaField.SetToolTipValue((mat.lightarea));
4814
+ if (!Equal(diffusenessField.getFloat(), mat.factor))
4815
+ diffusenessField.SetToolTipValue((mat.factor));
4816
+ if (!Equal(velvetField.getFloat(), mat.velvet))
4817
+ velvetField.SetToolTipValue((mat.velvet));
4818
+ if (!Equal(sheenField.getFloat(), mat.sheen))
4819
+ sheenField.SetToolTipValue((mat.sheen));
4820
+ if (!Equal(subsurfaceField.getFloat(), mat.subsurface))
4821
+ subsurfaceField.SetToolTipValue((mat.subsurface));
4822
+ if (!Equal(backlitField.getFloat(), mat.bump))
4823
+ backlitField.SetToolTipValue((mat.bump));
4824
+ if (!Equal(anisoField.getFloat(), mat.aniso))
4825
+ anisoField.SetToolTipValue((mat.aniso));
4826
+ if (!Equal(anisoVField.getFloat(), mat.anisoV))
4827
+ anisoVField.SetToolTipValue((mat.anisoV));
4828
+ if (!Equal(cameraField.getFloat(), mat.cameralight))
4829
+ cameraField.SetToolTipValue((mat.cameralight));
4830
+ if (!Equal(selfshadowField.getFloat(), mat.diffuseness))
4831
+ selfshadowField.SetToolTipValue((mat.diffuseness));
4832
+ if (!Equal(shadowField.getFloat(), mat.shadow))
4833
+ shadowField.SetToolTipValue((mat.shadow));
4834
+ if (!Equal(textureField.getFloat(), mat.texture))
4835
+ textureField.SetToolTipValue((mat.texture));
4836
+ if (!Equal(opacityField.getFloat(), mat.opacity))
4837
+ opacityField.SetToolTipValue((mat.opacity));
4838
+ if (!Equal(fakedepthField.getFloat(), mat.fakedepth))
4839
+ fakedepthField.SetToolTipValue((mat.fakedepth));
4840
+ if (!Equal(shadowbiasField.getFloat(), mat.shadowbias))
4841
+ shadowbiasField.SetToolTipValue((mat.shadowbias));
46254842 }
46264843
46274844 if (copy.material != null && copy.projectedVertices.length > 0 && copy.projectedVertices[0] != null)
....@@ -4662,9 +4879,11 @@
46624879 if (muteSlider)
46634880 return;
46644881
4882
+ Replace();
4883
+
46654884 int version = versionSlider.getInteger();
46664885
4667
- if (copy.versionlist[version] != null)
4886
+ if (version != -1 && copy.versionlist[version] != null)
46684887 {
46694888 copy.versionindex = version;
46704889 CopyChanged();
....@@ -4708,7 +4927,7 @@
47084927 //System.out.println("stateChanged = " + this);
47094928 materialtouched = true;
47104929
4711
- if (e.getSource() == colorField && saturationField.getFloat() == 0.001)
4930
+ if (Globals.AUTOSATURATE && e.getSource() == colorField && saturationField.getFloat() == 0.001)
47124931 {
47134932 saturationField.setFloat(1);
47144933 }
....@@ -5023,7 +5242,9 @@
50235242 }
50245243
50255244 if (previousVersionButton != null && copy.versionlist != null)
5026
- SetUndoStates();
5245
+ SetVersionStates();
5246
+
5247
+ cameraView.requestFocusInWindow();
50275248 }
50285249
50295250 static TweenManager tweenManager = new TweenManager();
....@@ -5055,7 +5276,7 @@
50555276 // group = (Composite) group.get(0);
50565277 // }
50575278
5058
- System.out.println("makeSomething of " + thing);
5279
+ //System.out.println("makeSomething of " + thing);
50595280
50605281 /*
50615282 if (deselect && jList != null)
....@@ -5409,11 +5630,15 @@
54095630
54105631 copy.versionlist = readobj.versionlist;
54115632 copy.versionindex = readobj.versionindex;
5633
+ copy.versiontable = readobj.versiontable;
54125634
54135635 if (copy.versionlist == null)
54145636 {
5637
+ // Backward compatibility
54155638 copy.versionlist = new Object3D[100];
54165639 copy.versionindex = -1;
5640
+
5641
+ //Save(true);
54175642 }
54185643
54195644 //? SetUndoStates();
....@@ -5505,6 +5730,8 @@
55055730
55065731 void save()
55075732 {
5733
+ Replace();
5734
+
55085735 if (lastname == null)
55095736 {
55105737 return;
....@@ -5747,6 +5974,7 @@
57475974 ButtonGroup buttonGroup;
57485975
57495976 cGridBag toolboxPanel;
5977
+ cGridBag skyboxPanel;
57505978 cGridBag materialPanel;
57515979 cGridBag ctrlPanel;
57525980
....@@ -5851,6 +6079,7 @@
58516079 cNumberSlider anisoField;
58526080 JLabel anisoVLabel;
58536081 cNumberSlider anisoVField;
6082
+
58546083 JLabel cameraLabel;
58556084 cNumberSlider cameraField;
58566085 JLabel selfshadowLabel;
....@@ -5865,6 +6094,7 @@
58656094 cNumberSlider fakedepthField;
58666095 JLabel shadowbiasLabel;
58676096 cNumberSlider shadowbiasField;
6097
+
58686098 JLabel bumpLabel;
58696099 cNumberSlider bumpField;
58706100 JLabel noiseLabel;