From a69bb4474a3264a9a7a7f8b8d8154ea771f167c8 Mon Sep 17 00:00:00 2001
From: Normand Briere <nbriere@noware.ca>
Date: Fri, 28 Jun 2019 23:44:22 -0400
Subject: [PATCH] Fix ungroup.

---
 Object3D.java |   45 ++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 38 insertions(+), 7 deletions(-)

diff --git a/Object3D.java b/Object3D.java
index 45bb2a6..2a9ae20 100644
--- a/Object3D.java
+++ b/Object3D.java
@@ -181,7 +181,7 @@
             return;
         }
 
-        Object3D o = new Object3D();
+        Object3D o = new Object3D("copy of " + this.name);
 
         hashtable.put(GetUUID(), o);
 
@@ -219,16 +219,23 @@
         if (!hashtable.containsKey(GetUUID()))
             return;
 
+        if (blockloop)
+            return;
+
+        blockloop = true;
+
         Object3D o = hashtable.get(GetUUID());
 
         RestoreBigData(o);
 
-        hashtable.remove(GetUUID());
+        //hashtable.remove(GetUUID());
 
         for (int i=0; i<Size(); i++)
         {
             get(i).RestoreBigData(hashtable);
         }
+        
+        blockloop = false;
     }
 
     void RestoreBigData(Object3D o)
@@ -2433,6 +2440,14 @@
         {
             editWindow.refreshContents();
         }
+        else
+        {
+            if (manipWindow != null)
+            {
+                manipWindow.refreshContents();
+            }
+        }
+                
     //if (parent != null)
     //parent.refreshEditWindow();
     }
@@ -4963,6 +4978,14 @@
         }
     }
     
+    ObjEditor GetWindow()
+    {
+        if (editWindow != null)
+            return editWindow;
+        
+        return manipWindow;
+    }
+    
     cTreePath Select(int indexcount, boolean deselect)
     {
         if (hide || dontselect)
@@ -4999,10 +5022,11 @@
                 if (leaf != null)
                 {
                     cTreePath tp = new cTreePath(this, leaf);
-                    if (editWindow != null)
+                    ObjEditor window = GetWindow();
+                    if (window != null)
                     {
                         //System.out.println("editWindow = " + editWindow + " vs " + this);
-                        editWindow.Select(tp, deselect, true);
+                        window.Select(tp, deselect, true);
                     }
 
                     return tp;
@@ -5019,6 +5043,7 @@
 
             if (child == null)
                 continue;
+            
             if (child.HasTransparency() && child.size() != 0)
             {
                 cTreePath leaf = child.Select(indexcount, deselect);
@@ -5028,9 +5053,10 @@
                 if (leaf != null)
                 {
                     cTreePath tp = new cTreePath(this, leaf);
-                    if (editWindow != null)
+                    ObjEditor window = GetWindow();
+                    if (window != null)
                     {
-                        editWindow.Select(tp, deselect, true);
+                        window.Select(tp, deselect, true);
                     }
 
                     return tp;
@@ -5772,7 +5798,7 @@
         
         if (!selectmode && //display.DrawMode() != display.SELECTION &&
                 //(touched || (bRep != null && bRep.displaylist <= 0)))
-                (Globals.isLIVE() && Globals.COMPUTESHADOWWHENLIVE || touched && (bRep != null && bRep.displaylist <= 0)))
+                (Globals.isLIVE() && Globals.COMPUTESHADOWWHENLIVE || touched && Globals.COMPUTESHADOWWHENLIVE)) // || (bRep != null && bRep.displaylist <= 0)))
         {
             Globals.lighttouched = true;
         } // all panes...
@@ -5904,6 +5930,7 @@
             if (GetBRep() != null)
             {
                 display.NextIndex();
+                
                 // vertex color conflict : gl.glCallList(list);
                 DrawNode(display, root, selected);
                 if (this instanceof BezierPatch)
@@ -7967,6 +7994,10 @@
     }
     
     transient ObjEditor editWindow;
+    transient ObjEditor manipWindow;
+    
+    transient boolean pinned;
+    
     transient ObjectUI objectUI;
     public static int povDepth = 0;
     private static cVector tbMin = new cVector();

--
Gitblit v1.6.2