Normand Briere
2019-06-24 c67da2e5d8655704601d6d06e8bc60aabe212253
ObjEditor.java
....@@ -36,6 +36,8 @@
3636 GroupEditor callee;
3737 JFrame frame;
3838
39
+ static ObjEditor theFrame;
40
+
3941 // SCRIPT
4042
4143 transient JFrame textpanel = null;
....@@ -168,7 +170,8 @@
168170 // objEditor.ctrlPanel.remove(remarkButton);
169171
170172 objEditor.ctrlPanel.remove(setupPanel);
171
- objEditor.ctrlPanel.remove(commandsPanel);
173
+ objEditor.ctrlPanel.remove(setupPanel2);
174
+ objEditor.ctrlPanel.remove(objectCommandsPanel);
172175 objEditor.ctrlPanel.remove(pushPanel);
173176 //objEditor.ctrlPanel.remove(fillPanel);
174177
....@@ -243,6 +246,7 @@
243246 //localCopy.parent = null;
244247
245248 frame = new JFrame();
249
+ frame.setUndecorated(true);
246250 objEditor = this;
247251 this.callee = callee;
248252
....@@ -278,7 +282,7 @@
278282 frame.setMenuBar(menuBar = new MenuBar());
279283 menuBar.add(fileMenu = new Menu("File"));
280284 fileMenu.add(newItem = new MenuItem("New"));
281
- fileMenu.add(loadItem = new MenuItem("Load..."));
285
+ fileMenu.add(loadItem = new MenuItem("Open..."));
282286
283287 //oe.menuBar.add(menu = new Menu("Include"));
284288 Menu menu = new Menu("Import");
....@@ -323,9 +327,18 @@
323327 toolbarPanel.setName("Toolbar");
324328 treePanel = new cGridBag();
325329 treePanel.setName("Tree");
330
+
331
+ editPanel = new cGridBag().setVertical(true);
332
+ editPanel.setName("Edit");
333
+
326334 ctrlPanel = new cGridBag().setVertical(false); // new GridBagLayout());
327
- ctrlPanel.setName("Edit");
335
+
336
+ editCommandsPanel = new cGridBag();
337
+ editPanel.add(editCommandsPanel);
338
+ editPanel.add(ctrlPanel);
339
+
328340 materialPanel = new cGridBag().setVertical(true);
341
+
329342 materialPanel.setName("Material");
330343 /*JTextPane*/
331344 infoarea = createTextPane();
....@@ -419,10 +432,10 @@
419432 e.printStackTrace();
420433 }
421434
422
- String selection = infoarea.getText();
423
- java.awt.datatransfer.StringSelection data = new java.awt.datatransfer.StringSelection(selection);
424
- java.awt.datatransfer.Clipboard clipboard =
425
- Toolkit.getDefaultToolkit().getSystemClipboard();
435
+// String selection = infoarea.getText();
436
+// java.awt.datatransfer.StringSelection data = new java.awt.datatransfer.StringSelection(selection);
437
+// java.awt.datatransfer.Clipboard clipboard =
438
+// Toolkit.getDefaultToolkit().getSystemClipboard();
426439 //clipboard.setContents(data, data);
427440 }
428441
....@@ -582,19 +595,89 @@
582595 }
583596 }
584597
598
+static GraphicsDevice device = GraphicsEnvironment
599
+ .getLocalGraphicsEnvironment().getScreenDevices()[0];
600
+
601
+ Rectangle keeprect;
602
+ cRadio radio;
603
+
604
+cButton keepButton;
605
+ cButton twoButton; // Full 3D
606
+ cButton sixButton;
607
+ cButton threeButton;
608
+ cButton sevenButton;
609
+ cButton fourButton; // full panel
610
+ cButton oneButton; // full XYZ
611
+ //cButton currentLayout;
612
+
613
+ boolean maximized;
614
+
615
+ void Minimize()
616
+ {
617
+ frame.setState(Frame.ICONIFIED);
618
+ }
619
+
620
+ void Maximize()
621
+ {
622
+ if (maximized)
623
+ {
624
+ frame.setBounds(keeprect.x, keeprect.y, keeprect.width, keeprect.height);
625
+ }
626
+ else
627
+ {
628
+ keeprect = frame.getBounds();
629
+ Rectangle rect = GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds();
630
+ Dimension rect2 = frame.getToolkit().getScreenSize();
631
+ frame.setBounds(0, rect2.height - rect.height, rect.width, rect.height);
632
+// frame.setState(Frame.MAXIMIZED_BOTH);
633
+ }
634
+
635
+ maximized ^= true;
636
+ }
637
+
585638 void ToggleFullScreen()
586639 {
587640 if (CameraPane.FULLSCREEN)
588641 {
589
- frame.getContentPane().remove(/*"Center",*/bigThree);
590
- framePanel.add(bigThree);
591
- frame.getContentPane().add(/*"Center",*/framePanel);
642
+ device.setFullScreenWindow(null);
643
+ //frame.setVisible(false);
644
+// frame.removeNotify();
645
+// frame.setUndecorated(false);
646
+// frame.addNotify();
647
+ //frame.setBounds(keeprect.x, keeprect.y, keeprect.width, keeprect.height);
648
+
649
+// X frame.getContentPane().remove(/*"Center",*/bigThree);
650
+// X framePanel.add(bigThree);
651
+// X frame.getContentPane().add(/*"Center",*/framePanel);
652
+ framePanel.setDividerLocation(1);
653
+
654
+ //frame.setVisible(true);
655
+ radio.layout = keepButton;
656
+ //theFrame = null;
657
+ keepButton = null;
658
+ radio.layout.doClick();
659
+
592660 } else
593661 {
594
- frame.getContentPane().remove(/*"Center",*/framePanel);
595
- framePanel.remove(bigThree);
596
- frame.getContentPane().add(/*"Center",*/bigThree);
662
+ keepButton = radio.layout;
663
+ //keeprect = frame.getBounds();
664
+// frame.setBounds(0, 0, frame.getToolkit().getScreenSize().width,
665
+// frame.getToolkit().getScreenSize().height);
666
+ //frame.setVisible(false);
667
+ device.setFullScreenWindow(frame);
668
+// frame.removeNotify();
669
+// frame.setUndecorated(true);
670
+// frame.addNotify();
671
+// X frame.getContentPane().remove(/*"Center",*/framePanel);
672
+// X framePanel.remove(bigThree);
673
+// X frame.getContentPane().add(/*"Center",*/bigThree);
674
+ framePanel.setDividerLocation(0);
675
+
676
+ radio.layout = twoButton;
677
+ radio.layout.doClick();
678
+ //frame.setVisible(true);
597679 }
680
+
598681 cameraView.ToggleFullScreen();
599682 }
600683
....@@ -745,9 +828,13 @@
745828 JButton fasterButton;
746829 JButton remarkButton;
747830
831
+ cGridBag editPanel;
832
+ cGridBag editCommandsPanel;
833
+
748834 cGridBag namePanel;
749835 cGridBag setupPanel;
750
- cGridBag commandsPanel;
836
+ cGridBag setupPanel2;
837
+ cGridBag objectCommandsPanel;
751838 cGridBag pushPanel;
752839 cGridBag fillPanel;
753840
....@@ -939,40 +1026,44 @@
9391026 markCB = AddCheckBox(setupPanel, "Mark", copy.marked);
9401027 markCB.setToolTipText("Set the animation target transform");
9411028
942
- rewindCB = AddCheckBox(setupPanel, "Rewind", copy.rewind);
1029
+ setupPanel2 = new cGridBag().setVertical(false);
1030
+
1031
+ rewindCB = AddCheckBox(setupPanel2, "Rewind", copy.rewind);
9431032 rewindCB.setToolTipText("Rewind animation");
9441033
945
- randomCB = AddCheckBox(setupPanel, "Random", copy.random);
946
- randomCB.setToolTipText("Option for switch node");
1034
+ randomCB = AddCheckBox(setupPanel2, "Rand", copy.random);
1035
+ randomCB.setToolTipText("Randomly Rewind or Go back and forth");
9471036
9481037 if (Globals.ADVANCED)
9491038 {
950
- link2masterCB = AddCheckBox(setupPanel, "Support", copy.link2master);
1039
+ link2masterCB = AddCheckBox(setupPanel2, "Supp", copy.link2master);
9511040 link2masterCB.setToolTipText("Attach to support");
952
- speedupCB = AddCheckBox(setupPanel, "Speed", copy.speedup);
1041
+ speedupCB = AddCheckBox(setupPanel2, "Speed", copy.speedup);
9531042 speedupCB.setToolTipText("Option motion capture");
9541043 }
9551044
9561045 oe.ctrlPanel.add(setupPanel);
9571046 oe.ctrlPanel.Return();
1047
+ oe.ctrlPanel.add(setupPanel2);
1048
+ oe.ctrlPanel.Return();
9581049
959
- commandsPanel = new cGridBag().setVertical(false);
1050
+ objectCommandsPanel = new cGridBag().setVertical(false);
9601051
961
- resetButton = AddButton(commandsPanel, "Reset");
1052
+ resetButton = AddButton(objectCommandsPanel, "Reset");
9621053 resetButton.setToolTipText("Jump to frame zero");
963
- stepButton = AddButton(commandsPanel, "Step");
1054
+ stepButton = AddButton(objectCommandsPanel, "Step");
9641055 stepButton.setToolTipText("Step one frame");
9651056 // resetAllButton = AddButton(oe, "Reset All");
9661057 // stepAllButton = AddButton(oe, "Step All");
9671058 // Return();
968
- slowerButton = AddButton(commandsPanel, "Slow");
1059
+ slowerButton = AddButton(objectCommandsPanel, "Slow");
9691060 slowerButton.setToolTipText("Decrease animation speed");
970
- fasterButton = AddButton(commandsPanel, "Fast");
1061
+ fasterButton = AddButton(objectCommandsPanel, "Fast");
9711062 fasterButton.setToolTipText("Increase animation speed");
972
- remarkButton = AddButton(commandsPanel, "Remark");
1063
+ remarkButton = AddButton(objectCommandsPanel, "Remark");
9731064 remarkButton.setToolTipText("Set the current transform as the target");
9741065
975
- oe.ctrlPanel.add(commandsPanel);
1066
+ oe.ctrlPanel.add(objectCommandsPanel);
9761067 oe.ctrlPanel.Return();
9771068
9781069 pushPanel = AddSlider(oe.ctrlPanel, "Push", -1, 1, copy.NORMALPUSH, 1.1); // To have the buttons
....@@ -1178,8 +1269,11 @@
11781269 //worldPanel.setName("World");
11791270 centralPanel = new cGridBag();
11801271 centralPanel.preferredWidth = 20;
1181
- timelinePanel = new JPanel(new BorderLayout());
1182
- timelineMenubar = new timeflow.app.TimeflowApp().TimeFlowWindow(timelinePanel);
1272
+
1273
+ if (Globals.ADVANCED)
1274
+ {
1275
+ timelinePanel = new JPanel(new BorderLayout());
1276
+ timelineMenubar = new timeflow.app.TimeflowApp().TimeFlowWindow(timelinePanel);
11831277
11841278 cameraPanel = new JSplitPane(JSplitPane.VERTICAL_SPLIT, cameraView, timelinePanel);
11851279 cameraPanel.setContinuousLayout(true);
....@@ -1188,7 +1282,10 @@
11881282 // cameraPanel.setDividerSize(9);
11891283 cameraPanel.setResizeWeight(1.0);
11901284
1285
+ }
1286
+
11911287 centralPanel.add(cameraView);
1288
+ centralPanel.setFocusable(true);
11921289 //frame.setJMenuBar(timelineMenubar);
11931290 //centralPanel.add(timelinePanel);
11941291
....@@ -1255,7 +1352,7 @@
12551352 // north.setName("Edit");
12561353 // north.add(ctrlPanel, BorderLayout.NORTH);
12571354 // objectPanel.add(north);
1258
- objectPanel.add(ctrlPanel);
1355
+ objectPanel.add(editPanel);
12591356 objectPanel.add(infoPanel);
12601357
12611358 /*
....@@ -1386,6 +1483,8 @@
13861483 frame.setSize(1280, 860);
13871484 frame.setVisible(true);
13881485
1486
+ cameraView.requestFocusInWindow();
1487
+
13891488 gridPanel.setDividerLocation(1.0);
13901489
13911490 frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
....@@ -2072,19 +2171,19 @@
20722171
20732172 void LoadObjFile(String fullname)
20742173 {
2075
- /*
2174
+ System.out.println("Loading " + fullname);
2175
+ /**/
20762176 //lastFilename = fullname;
20772177 if(loadObjThread == null)
20782178 {
2079
- loadObjThread = new LoadOBJThread();
2080
- loadObjThread.start();
2179
+ loadObjThread = new LoadOBJThread();
2180
+ loadObjThread.start();
20812181 }
20822182
20832183 loadObjThread.add(fullname);
2084
- */
2184
+ /**/
20852185
2086
- System.out.println("Loading " + fullname);
2087
- makeSomething(new FileObject(fullname, true), true);
2186
+ //makeSomething(new FileObject(fullname, true), true);
20882187 }
20892188
20902189 void LoadGFDFile(String fullname)
....@@ -2927,7 +3026,7 @@
29273026 return;
29283027 } else if (event.getSource() == toggleSwitchItem)
29293028 {
2930
- cameraView.ToggleRandom();
3029
+ cameraView.ToggleSwitch();
29313030 cameraView.repaint();
29323031 return;
29333032 } else if (event.getSource() == toggleHandleItem)
....@@ -3214,6 +3313,53 @@
32143313 objEditor.refreshContents();
32153314 }
32163315
3316
+ static public byte[] Compress(Object3D o)
3317
+ {
3318
+ try
3319
+ {
3320
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
3321
+ java.util.zip.GZIPOutputStream zstream = new java.util.zip.GZIPOutputStream(baos);
3322
+ ObjectOutputStream out = new ObjectOutputStream(zstream);
3323
+
3324
+ Object3D parent = o.parent;
3325
+ o.parent = null;
3326
+
3327
+ out.writeObject(o);
3328
+
3329
+ o.parent = parent;
3330
+
3331
+ out.flush();
3332
+
3333
+ zstream.close();
3334
+ out.close();
3335
+
3336
+ return baos.toByteArray();
3337
+ } catch (Exception e)
3338
+ {
3339
+ System.err.println(e);
3340
+ return null;
3341
+ }
3342
+ }
3343
+
3344
+ static public Object Uncompress(byte[] bytes)
3345
+ {
3346
+ System.out.println("#bytes = " + bytes.length);
3347
+ try
3348
+ {
3349
+ ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
3350
+ java.util.zip.GZIPInputStream istream = new java.util.zip.GZIPInputStream(bais);
3351
+ ObjectInputStream in = new ObjectInputStream(istream);
3352
+ Object obj = in.readObject();
3353
+ in.close();
3354
+
3355
+ return obj;
3356
+ } catch (Exception e)
3357
+ {
3358
+ System.err.println(e);
3359
+ return null;
3360
+ }
3361
+ }
3362
+
32173363 static public Object clone(Object o)
32183364 {
32193365 try
....@@ -3222,12 +3368,19 @@
32223368 ObjectOutputStream out = new ObjectOutputStream(baos);
32233369
32243370 out.writeObject(o);
3371
+
3372
+ out.flush();
3373
+ out.close();
3374
+
3375
+ byte[] bytes = baos.toByteArray();
3376
+
3377
+ System.out.println("clone = " + bytes.length);
32253378
3226
- ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
3379
+ ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
32273380 ObjectInputStream in = new ObjectInputStream(bais);
32283381 Object obj = in.readObject();
32293382 in.close();
3230
- out.close();
3383
+
32313384 return obj;
32323385 } catch (Exception e)
32333386 {
....@@ -3242,7 +3395,7 @@
32423395 for (java.util.Enumeration e = buttonGroup.getElements(); e.hasMoreElements();)
32433396 {
32443397 ab = (cRadio)e.nextElement();
3245
- if(ab.GetObject() == client)
3398
+ if(ab.GetObject() == copy)
32463399 {
32473400 return ab;
32483401 }
....@@ -3251,13 +3404,26 @@
32513404 return null;
32523405 }
32533406
3407
+ java.util.Hashtable<java.util.UUID, Object3D> hashtable = new java.util.Hashtable<java.util.UUID, Object3D>();
3408
+
32543409 public void Save()
32553410 {
32563411 cRadio tab = GetCurrentTab();
32573412
3413
+ boolean temp = CameraPane.SWITCH;
3414
+ CameraPane.SWITCH = false;
3415
+
3416
+ copy.ExtractBigData(hashtable);
3417
+
32583418 //EditorFrame.m_MainFrame.requestFocusInWindow();
3259
- tab.graphs[tab.undoindex++] = (Object3D)clone(copy);
3419
+ tab.graphs[tab.undoindex++] = Compress(copy);
32603420
3421
+ copy.RestoreBigData(hashtable);
3422
+
3423
+ CameraPane.SWITCH = temp;
3424
+
3425
+ //assert(hashtable.isEmpty());
3426
+
32613427 for (int i = tab.undoindex; i < tab.graphs.length; i++)
32623428 {
32633429 tab.graphs[i] = null;
....@@ -3285,12 +3451,23 @@
32853451
32863452 void CopyChanged(Object3D obj)
32873453 {
3454
+ boolean temp = CameraPane.SWITCH;
3455
+ CameraPane.SWITCH = false;
3456
+
3457
+ copy.ExtractBigData(hashtable);
3458
+
32883459 copy.clear();
32893460
32903461 for (int i=0; i<obj.Size(); i++)
32913462 {
32923463 copy.add(obj.get(i));
32933464 }
3465
+
3466
+ copy.RestoreBigData(hashtable);
3467
+
3468
+ CameraPane.SWITCH = temp;
3469
+
3470
+ //assert(hashtable.isEmpty());
32943471
32953472 copy.Touch();
32963473
....@@ -3331,7 +3508,7 @@
33313508
33323509 tab.undoindex -= 1;
33333510
3334
- CopyChanged(tab.graphs[tab.undoindex]);
3511
+ CopyChanged((Object3D)Uncompress(tab.graphs[tab.undoindex]));
33353512 }
33363513
33373514 public void Redo()
....@@ -3346,7 +3523,7 @@
33463523
33473524 tab.undoindex += 1;
33483525
3349
- CopyChanged(tab.graphs[tab.undoindex]);
3526
+ CopyChanged((Object3D)Uncompress(tab.graphs[tab.undoindex]));
33503527 }
33513528
33523529 void ImportGFD()
....@@ -4217,6 +4394,7 @@
42174394
42184395 try
42194396 {
4397
+ // Try compressed version first.
42204398 java.io.FileInputStream istream = new java.io.FileInputStream(fullname);
42214399 java.util.zip.GZIPInputStream zstream = new java.util.zip.GZIPInputStream(istream);
42224400 java.io.ObjectInputStream p = new java.io.ObjectInputStream(zstream);
....@@ -4286,6 +4464,12 @@
42864464
42874465 void LoadIt(Object obj)
42884466 {
4467
+ if (obj == null)
4468
+ {
4469
+ // Invalid file
4470
+ return;
4471
+ }
4472
+
42894473 System.out.println("Loaded " + obj);
42904474 //new Exception().printStackTrace();
42914475 Object3D readobj = (Object3D) obj;
....@@ -4295,6 +4479,7 @@
42954479
42964480 if (readobj != null)
42974481 {
4482
+ Save();
42984483 try
42994484 {
43004485 //readobj.deepCopySelf(copy);