From bc829f47837b5a001f911542140b0b8e63c2bb0c Mon Sep 17 00:00:00 2001
From: Normand Briere <nbriere@noware.ca>
Date: Sun, 14 Jul 2019 19:47:03 -0400
Subject: [PATCH] Fix extract big data.

---
 ObjEditor.java   |   50 +++++++----
 CameraPane.java  |   53 ++++++------
 Globals.java     |    2 
 cRadio.java      |    2 
 GroupEditor.java |   36 +++++++--
 Mocap.java       |   10 +-
 Object3D.java    |   72 ++++++++++++-----
 7 files changed, 143 insertions(+), 82 deletions(-)

diff --git a/CameraPane.java b/CameraPane.java
index 9699e8e..80b657b 100644
--- a/CameraPane.java
+++ b/CameraPane.java
@@ -11028,9 +11028,9 @@
 
             gl.glMatrixMode(GL.GL_MODELVIEW);
 
-//gl.glHint(gl.GL_POLYGON_SMOOTH_HINT, gl.GL_NICEST);
-//gl.glEnable(gl.GL_POLYGON_SMOOTH);
-//gl.glEnable(gl.GL_MULTISAMPLE);
+gl.glEnable(gl.GL_POLYGON_SMOOTH);
+gl.glHint(gl.GL_POLYGON_SMOOTH_HINT, gl.GL_NICEST);
+gl.glEnable(gl.GL_MULTISAMPLE);
         } else
         {
             //gl.glDisable(GL.GL_TEXTURE_2D);
@@ -11041,7 +11041,7 @@
         //System.out.println("BLENDING ON");
         gl.glEnable(GL.GL_BLEND);
         gl.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA);
-
+//        gl.glBlendFunc(GL.GL_SRC_ALPHA_SATURATE, GL.GL_ONE);
         gl.glMatrixMode(gl.GL_PROJECTION);
         gl.glLoadIdentity();
 
@@ -14297,12 +14297,12 @@
     void GoDown(int mod)
     {
         MODIFIERS |= COMMAND;
-        /*
+        /**/
         if((mod&SHIFT) == SHIFT)
         manipCamera.RotatePosition(0, -speed);
         else
-        manipCamera.BackForth(0, -speed*delta, getWidth());
-         */
+        manipCamera.BackForth(0, -speed*delta, 0); // getWidth());
+        /**/
         if ((mod & SHIFT) == SHIFT)
         {
             mouseMode = mouseMode; // VR??
@@ -14318,12 +14318,12 @@
     void GoUp(int mod)
     {
         MODIFIERS |= COMMAND;
-        /*
+        /**/
         if((mod&SHIFT) == SHIFT)
         manipCamera.RotatePosition(0, speed);
         else
-        manipCamera.BackForth(0, speed*delta, getWidth());
-         */
+        manipCamera.BackForth(0, speed*delta, 0); // getWidth());
+        /**/
         if ((mod & SHIFT) == SHIFT)
         {
             mouseMode = mouseMode;
@@ -14339,12 +14339,12 @@
     void GoLeft(int mod)
     {
         MODIFIERS |= COMMAND;
-        /*
+        /**/
         if((mod&SHIFT) == SHIFT)
-        manipCamera.RotatePosition(speed, 0);
-        else
         manipCamera.Translate(speed*delta, 0, getWidth());
-         */
+        else
+        manipCamera.RotatePosition(speed, 0);
+        /**/
         if ((mod & SHIFT) == SHIFT)
         {
             mouseMode = mouseMode;
@@ -14360,12 +14360,12 @@
     void GoRight(int mod)
     {
         MODIFIERS |= COMMAND;
-        /*
+        /**/
         if((mod&SHIFT) == SHIFT)
-        manipCamera.RotatePosition(-speed, 0);
-        else
         manipCamera.Translate(-speed*delta, 0, getWidth());
-         */
+        else
+        manipCamera.RotatePosition(-speed, 0);
+        /**/
         if ((mod & SHIFT) == SHIFT)
         {
             mouseMode = mouseMode;
@@ -14946,7 +14946,9 @@
             case 'E' : COMPACT ^= true;
                 repaint();
                 break;
-            case 'W' : DEBUGHSB ^= true;
+            case 'W' : // Wide Window (fullscreen)
+                //DEBUGHSB ^= true;
+                ObjEditor.theFrame.ToggleFullScreen();
                 repaint();
                 break;
             case 'u' : Udebug ^= true; Vdebug = false; NORMALdebug = false; programInitialized = false; repaint(); break;
@@ -14972,13 +14974,7 @@
                 repaint();
                 break;
             case 'l':
-                lightMode ^= true;
-                Globals.lighttouched = true;
-                manipCamera = renderCamera = lightMode ? lightCamera : eyeCamera;
-                targetLookAt.set(manipCamera.lookAt);
-                repaint();
-                break;
-            case 'L':
+            //case 'L':
                 if (lightMode)
                 {
                     lightMode = false;
@@ -15125,7 +15121,10 @@
 //                kompactbit = 6;
 //                break;
             case ' ':
-                ObjEditor.theFrame.ToggleFullScreen();
+                lightMode ^= true;
+                Globals.lighttouched = true;
+                manipCamera = renderCamera = lightMode ? lightCamera : eyeCamera;
+                targetLookAt.set(manipCamera.lookAt);
                 repaint();
                 break;
             //case '`' :
diff --git a/Globals.java b/Globals.java
index b46c997..2601880 100644
--- a/Globals.java
+++ b/Globals.java
@@ -10,7 +10,7 @@
         public static boolean COMPUTESHADOWWHENLIVE = true;
         public static boolean RENDERSHADOW = true;
         
-        public static boolean SAVEONMAKE = false; // problems when auto-save (works with manual save)
+        public static boolean SAVEONMAKE = true; // problems when auto-save (works with manual save)
         
         public static boolean MOUSEDRAGGED = false;
         public static boolean TIMERRUNNING = false;
diff --git a/GroupEditor.java b/GroupEditor.java
index 84ed69e..ec26bdb 100644
--- a/GroupEditor.java
+++ b/GroupEditor.java
@@ -84,6 +84,10 @@
 
     void CloneSelection(boolean supports)
     {
+        if (Globals.SAVEONMAKE)
+            Save();
+        boolean keep = Globals.SAVEONMAKE;
+        Globals.SAVEONMAKE = false;
         //   Object3D keep = GrafreeD.clipboard;
            //Object3D obj;
            for (int i=0; i<group.selection.size(); i++)// Enumeration e = group.selection.elements(); e.hasMoreElements();)
@@ -94,6 +98,7 @@
                
                makeSomething(clone, i==group.selection.size()-1);
            }
+        Globals.SAVEONMAKE = keep;
     }
 
     void CloneClipboard(boolean supports)
@@ -380,14 +385,14 @@
 		shadowYItem.addActionListener(this);
                 shadowZItem = menu.add(new MenuItem("Shadow Blue"));
 		shadowZItem.addActionListener(this);
+		attributeItem = menu.add(new MenuItem("Attribute"));
+		attributeItem.addActionListener(this);
                 
         if (Globals.ADVANCED)
         {
 		menu.add("-");
 		linkerItem = menu.add(new MenuItem("Linker"));
 		linkerItem.addActionListener(this);
-		attributeItem = menu.add(new MenuItem("Attribute"));
-		attributeItem.addActionListener(this);
 		templateItem = menu.add(new MenuItem("Template"));
 		templateItem.addActionListener(this);
 		pointflowItem = menu.add(new MenuItem("Point Flow"));
@@ -971,7 +976,7 @@
         {
             cRadio radioButton = new cRadio(obj.name);
             
-            // Patch to avoid bug with transparency.
+            // June 2019. Patch to avoid bug with transparency.
             radioButton.hadMaterial = obj.material != null;
             if (!radioButton.hadMaterial)
             {
@@ -1223,7 +1228,7 @@
 //                        return;
 //                    }
                     
-                    String string = (String) object;
+                    String string = object.toString();
                     
                     // File path for Mac and Windows
                     if (string.charAt(0) == '/' || string.charAt(1) == ':')
@@ -1488,6 +1493,8 @@
 		reduce34MorphItem = menu.add(new MenuItem("Reduce Morphs (34)"));
 		reduce34MorphItem.addActionListener(this);
 		menu.add("-");
+		menu.add(memoryItem = new MenuItem("Memory Usage"));
+		memoryItem.addActionListener(this);
 		menu.add(computeAOItem = new MenuItem("Compute AO"));
 		computeAOItem.addActionListener(this);
                 
@@ -1496,8 +1503,6 @@
 		mirrorItem = menu.add(new MenuItem("Mirror Poses"));
 		mirrorItem.addActionListener(this);
 		menu.add("-");
-		menu.add(memoryItem = new MenuItem("Memory Usage"));
-		memoryItem.addActionListener(this);
 		menu.add(analyzeItem = new MenuItem("Analyze"));
 		analyzeItem.addActionListener(this);
 		menu.add(dumpItem = new MenuItem("Print"));
@@ -4833,8 +4838,8 @@
                 
 		if (cut)
 		{
-        if (Globals.SAVEONMAKE)
-                    Save();
+//        if (Globals.SAVEONMAKE) // Moved to the clipboard, no need to save.
+//                    Save();
 			//int indices[] = jList.getSelectedIndices();
 			//for (int i = indices.length - 1; i >= 0; i--)
 			//jList.remove(indices[i]);
@@ -4937,6 +4942,10 @@
 	
 	void paste(boolean expand)
 	{
+        if (Globals.SAVEONMAKE)
+            Save();
+        boolean keep = Globals.SAVEONMAKE;
+        Globals.SAVEONMAKE = false;
 	//	if (GrafreeD.clipboard == null)
 	//		return;
 		boolean first = true;
@@ -4996,6 +5005,7 @@
                         Grafreed.clipboard.get(0).parent = keepparent;
 		}
 		
+        Globals.SAVEONMAKE = keep;
 		ResetModel();
 		refreshContents();
 	}
@@ -5131,6 +5141,10 @@
         
 	void group(Object3D csg, boolean grab)
 	{
+        if (Globals.SAVEONMAKE)
+            Save();
+        boolean keep = Globals.SAVEONMAKE;
+        Globals.SAVEONMAKE = false;
 		if (//false) // why??
                     !group.selection.isEmpty())
                 {
@@ -5244,10 +5258,15 @@
                 //node.add(csg);
 		//makeSomething(node);
 		makeSomething(csg);
+        Globals.SAVEONMAKE = keep;
 	}
 	
         void Ungroup(Object3D g)
         {
+        if (Globals.SAVEONMAKE)
+            Save();
+        boolean keep = Globals.SAVEONMAKE;
+        Globals.SAVEONMAKE = false;
             if (g instanceof HiddenObject)
             {
                 HiddenObject h = (HiddenObject) g;
@@ -5264,6 +5283,7 @@
                     objEditor.makeSomething(g.get(i), false);
                 }
             }
+        Globals.SAVEONMAKE = keep;
         }
         
 	void ungroup()
diff --git a/Mocap.java b/Mocap.java
index 545c82e..aa11165 100644
--- a/Mocap.java
+++ b/Mocap.java
@@ -261,6 +261,8 @@
         
 //    LA.matConcat(toParent, hip.get(0).toParent, toParent);
         
+        CameraPane.CreateSelectedPoint();
+        
         CameraPane.debugpointG.toParent[3][0] = poship.x;
         CameraPane.debugpointG.toParent[3][1] = poship.y;
         CameraPane.debugpointG.toParent[3][2] = poship.z;        
@@ -649,8 +651,8 @@
     {
         super.ExtractBigData(o);
         
-        o.bvh = this.bvh;
-        o.skeleton = this.skeleton;
+        o.savebvh = this.bvh;
+        o.saveskeleton = this.skeleton;
         this.bvh = null;
         this.skeleton = null;
     }
@@ -659,8 +661,8 @@
     {
         super.RestoreBigData(o);
         
-        this.bvh = o.bvh;
-        this.skeleton = o.skeleton;
+        this.bvh = o.savebvh;
+        this.skeleton = o.saveskeleton;
     }
     
     boolean smoothed;
diff --git a/ObjEditor.java b/ObjEditor.java
index 5d7d1bb..b1bbdf6 100644
--- a/ObjEditor.java
+++ b/ObjEditor.java
@@ -1174,10 +1174,11 @@
         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");
+        
         if (Globals.ADVANCED)
         {
-                link2masterCB = AddCheckBox(setupPanel2, "Supp", copy.link2master);
-                link2masterCB.setToolTipText("Attach to support");
                 speedupCB = AddCheckBox(setupPanel2, "Speed", copy.speedup);
                 speedupCB.setToolTipText("Option motion capture");
         }
@@ -3480,8 +3481,8 @@
         try
         {
             ByteArrayOutputStream baos = new ByteArrayOutputStream();
-            java.util.zip.GZIPOutputStream zstream = new java.util.zip.GZIPOutputStream(baos);
-            ObjectOutputStream out = new ObjectOutputStream(zstream);
+//            java.util.zip.GZIPOutputStream zstream = new java.util.zip.GZIPOutputStream(baos);
+            ObjectOutputStream out = new ObjectOutputStream(baos); //zstream);
 
         Object3D parent = o.parent;
         o.parent = null;
@@ -3492,10 +3493,14 @@
         
             out.flush();
 
-            zstream.close();
+            baos //zstream
+                    .close();
             out.close();
             
-            return baos.toByteArray();
+            byte[] bytes = baos.toByteArray();
+            
+        System.out.println("save #bytes = " + bytes.length);
+            return bytes;
         } catch (Exception e)
         {
             System.err.println(e);
@@ -3505,13 +3510,16 @@
 
     static public Object Uncompress(byte[] bytes)
     {
-        System.out.println("#bytes = " + bytes.length);
+        System.out.println("restore #bytes = " + bytes.length);
         try
         {
             ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
-            java.util.zip.GZIPInputStream istream = new java.util.zip.GZIPInputStream(bais);
-            ObjectInputStream in = new ObjectInputStream(istream);
+            //java.util.zip.GZIPInputStream istream = new java.util.zip.GZIPInputStream(bais);
+            ObjectInputStream in = new ObjectInputStream(bais); // istream);
             Object obj = in.readObject();
+            
+            bais //istream
+                    .close();
             in.close();
             
             return obj;
@@ -3570,7 +3578,6 @@
     
     public void Save()
     {
-        // Default reduces the probability of heuristics errors.
         Save(true);
     }
     
@@ -3616,8 +3623,13 @@
         //EditorFrame.m_MainFrame.requestFocusInWindow();
         if (!thesame)
         {
-            tab.user[tab.undoindex] = user;
-            tab.graphs[tab.undoindex++] = compress;
+            //tab.user[tab.undoindex] = user;
+            boolean increment = tab.graphs[tab.undoindex] == null;
+            
+            tab.graphs[tab.undoindex] = compress;
+            
+            if (increment)
+                tab.undoindex++;
         }
 
         copy.RestoreBigData(hashtable);
@@ -3626,8 +3638,8 @@
         
         for (int i = tab.undoindex; i < tab.graphs.length; i++)
         {
-            tab.user[i] = false;
-            tab.graphs[i] = null;
+            //tab.user[i] = false;
+        //    tab.graphs[i] = null;
         }
 
         SetUndoStates();
@@ -3720,7 +3732,7 @@
             return false;
         }
 
-        if (tab.graphs[tab.undoindex] == null || !tab.user[tab.undoindex])
+        if (tab.graphs[tab.undoindex] == null) // || !tab.user[tab.undoindex])
         {
             if (Save(false))
                 tab.undoindex -= 1;
@@ -3754,8 +3766,8 @@
 
         CopyChanged((Object3D)Uncompress(tab.graphs[tab.undoindex]));
         
-        if (!tab.user[tab.undoindex])
-            tab.graphs[tab.undoindex] = null;
+        //if (!tab.user[tab.undoindex])
+        //    tab.graphs[tab.undoindex] = null;
     }
 
         void ImportGFD()
@@ -4718,8 +4730,8 @@
         
         if (readobj != null)
         {
-        if (Globals.SAVEONMAKE)
-            Save();
+        //if (Globals.SAVEONMAKE) // A new object cannot share meshes
+        //    Save();
             try
             {
                 //readobj.deepCopySelf(copy);
diff --git a/Object3D.java b/Object3D.java
index 442b170..750acd4 100644
--- a/Object3D.java
+++ b/Object3D.java
@@ -24,9 +24,9 @@
     
     private UUID uuid = UUID.randomUUID();
     
-    // TEMPORARY for mocap undo
-    mocap.reader.BVHReader.BVHResult bvh;
-    Object3D skeleton;
+    // TEMPORARY for mocap undo. No need to be transient.
+    mocap.reader.BVHReader.BVHResult savebvh;
+    Object3D saveskeleton;
     //
     
     ScriptNode scriptnode;
@@ -170,24 +170,35 @@
 
     void ExtractBigData(java.util.Hashtable<java.util.UUID, Object3D> hashtable)
     {
+        Object3D o;
+        
         if (hashtable.containsKey(GetUUID()))
         {
-            Object3D o = hashtable.get(GetUUID());
+            o = hashtable.get(GetUUID());
 
             Grafreed.Assert(this.bRep == o.bRep);
-            if (this.bRep != null)
-                assert(this.bRep.support == o.transientrep);
+            //if (this.bRep != null)
+            //    assert(this.bRep.support == o.transientrep);
+            if (this.support != null)
+                assert(this.support.bRep == o.transientrep);
+        }
+        else
+        {
+            o = new Object3D("copy of " + this.name);
 
-            return;
+            hashtable.put(GetUUID(), o);
         }
 
-        Object3D o = new Object3D("copy of " + this.name);
-
-        hashtable.put(GetUUID(), o);
-
-        for (int i=0; i<Size(); i++)
+        if (!blockloop)
         {
-            get(i).ExtractBigData(hashtable);
+            blockloop = true;
+
+            for (int i=0; i<Size(); i++)
+            {
+                get(i).ExtractBigData(hashtable);
+            }
+
+            blockloop = false;
         }
         
         ExtractBigData(o);
@@ -195,11 +206,23 @@
 
     void ExtractBigData(Object3D o)
     {
+        if (o.bRep != null)
+            Grafreed.Assert(o.bRep == this.bRep);
+        
         o.bRep = this.bRep;
-        if (this.bRep != null)
+// July 2019       if (this.bRep != null)
+//        {
+//            o.transientrep = this.bRep.support;
+//            o.bRep.support = null;
+//        }
+        
+        if (this.support != null)
         {
-            o.transientrep = this.bRep.support;
-            o.bRep.support = null;
+            if (o.transientrep != null)
+                Grafreed.Assert(o.transientrep == this.support.bRep);
+
+            o.transientrep = this.support.bRep;
+            this.support.bRep = null;
         }
         
         //    o.support = this.support;
@@ -219,14 +242,14 @@
         if (!hashtable.containsKey(GetUUID()))
             return;
 
+        Object3D o = hashtable.get(GetUUID());
+
+        RestoreBigData(o);
+
         if (blockloop)
             return;
 
         blockloop = true;
-
-        Object3D o = hashtable.get(GetUUID());
-
-        RestoreBigData(o);
 
         //hashtable.remove(GetUUID());
 
@@ -241,8 +264,12 @@
     void RestoreBigData(Object3D o)
     {
         this.bRep = o.bRep;
-        if (this.bRep != null)
-            this.bRep.support = o.transientrep;
+        if (this.support != null && o.transientrep != null)
+        {
+            this.support.bRep = o.transientrep;
+        }
+// July 2019        if (this.bRep != null)
+//            this.bRep.support = o.transientrep;
     //    this.support = o.support;
     //    this.fileparent = o.fileparent;
     }
@@ -1374,6 +1401,7 @@
                     toParent = LA.newMatrix();
                     fromParent = LA.newMatrix();
                 }
+                
                 LA.matCopy(other.toParent, toParent);
                 LA.matCopy(other.fromParent, fromParent);
                 
diff --git a/cRadio.java b/cRadio.java
index 03fab54..af43de0 100644
--- a/cRadio.java
+++ b/cRadio.java
@@ -36,7 +36,7 @@
     }
     
     byte[] graphs[] = new byte[100][];
-    boolean[] user = new boolean[100];
+    //boolean[] user = new boolean[100];
     
     int undoindex = 0;
     

--
Gitblit v1.6.2