From b6efb029509980fd08ca4ebe28c89cf8d79fa46c Mon Sep 17 00:00:00 2001
From: Normand Briere <nbriere@noware.ca>
Date: Tue, 03 Sep 2019 21:25:24 -0400
Subject: [PATCH] deepCopyNode

---
 ObjEditor.java      |   21 +-
 MorphNode.java      |    4 
 Sphere.java         |    4 
 BezierPatch.java    |    4 
 Lathe.java          |    4 
 BlobComponent.java  |    4 
 FileObject.java     |    4 
 TextureNode.java    |    4 
 Klein.java          |    4 
 ScriptNode.java     |    4 
 Skybox.java         |    4 
 FrameSelector.java  |    4 
 Superellipsoid.java |    4 
 RandomNode.java     |   21 +++
 Blob.java           |    4 
 Torus.java          |    4 
 Cone.java           |    4 
 SwitchNode.java     |    4 
 Box.java            |    4 
 Grid.java           |    4 
 Biparam.java        |    4 
 CSG.java            |    4 
 Composite.java      |    4 
 JpegLoader.java     |   16 ++
 RandomEditor.java   |    9 +
 Attribute.java      |    4 
 Object3D.java       |  208 ++++++++++++++++++-----------
 Spline.java         |    4 
 28 files changed, 229 insertions(+), 138 deletions(-)

diff --git a/Attribute.java b/Attribute.java
index 670dda4..5e115c3 100644
--- a/Attribute.java
+++ b/Attribute.java
@@ -22,9 +22,9 @@
         return csg;
     }
 
-    protected void deepCopySelf(Object3D other)
+    protected void deepCopyNode(Object3D other)
     {
-        super.deepCopySelf(other);
+        super.deepCopyNode(other);
         Attribute c = (Attribute) other;
         
         c.cleardepth = cleardepth;
diff --git a/BezierPatch.java b/BezierPatch.java
index 7686627..2b6e438 100644
--- a/BezierPatch.java
+++ b/BezierPatch.java
@@ -43,9 +43,9 @@
         return l;
     }
 
-    protected void deepCopySelf(Object3D other)
+    protected void deepCopyNode(Object3D other)
     {
-        super.deepCopySelf(other);
+        super.deepCopyNode(other);
         BezierPatch bp = (BezierPatch)other;
 		bp.depth = depth;
         int count = ctrlPnts.size();
diff --git a/Biparam.java b/Biparam.java
index a6be6c3..51c6b3f 100644
--- a/Biparam.java
+++ b/Biparam.java
@@ -40,9 +40,9 @@
         super.DrawNode(display, root, selected);
     }
     
-    protected void deepCopySelf(Object3D other)
+    protected void deepCopyNode(Object3D other)
     {
-        super.deepCopySelf(other);
+        super.deepCopyNode(other);
         Biparam bp = (Biparam)other;
         bp.uDivs = uDivs;
         bp.vDivs = vDivs;
diff --git a/Blob.java b/Blob.java
index 6a7cf90..69de286 100644
--- a/Blob.java
+++ b/Blob.java
@@ -21,9 +21,9 @@
         return blob;
     }
 
-    protected void deepCopySelf(Object3D other)
+    protected void deepCopyNode(Object3D other)
     {
-        super.deepCopySelf(other);
+        super.deepCopyNode(other);
         Blob b = (Blob)other;
         b.threshold = threshold;
         b.cellSize = cellSize;
diff --git a/BlobComponent.java b/BlobComponent.java
index dc3a512..f2cbc54 100644
--- a/BlobComponent.java
+++ b/BlobComponent.java
@@ -20,9 +20,9 @@
 		return comp;
 	}
 	
-	protected void deepCopySelf(Object3D other)
+	protected void deepCopyNode(Object3D other)
 	{
-		super.deepCopySelf(other);
+		super.deepCopyNode(other);
 		BlobComponent b = (BlobComponent)other;
 		//b.center = new cVector();
 		//LA.vecCopy(center, b.center);
diff --git a/Box.java b/Box.java
index 8459450..75353f5 100644
--- a/Box.java
+++ b/Box.java
@@ -23,9 +23,9 @@
         return rec;
     }
 
-    protected void deepCopySelf(Object3D other)
+    protected void deepCopyNode(Object3D other)
     {
-        super.deepCopySelf(other);
+        super.deepCopyNode(other);
 //        Box rec = (Box)other;
 //        rec.minima = new cVector();
 //        LA.vecCopy(minima, rec.minima);
diff --git a/CSG.java b/CSG.java
index cefd400..5a4e95c 100644
--- a/CSG.java
+++ b/CSG.java
@@ -31,9 +31,9 @@
         return csg;
     }
 
-    protected void deepCopySelf(Object3D other)
+    protected void deepCopyNode(Object3D other)
     {
-        super.deepCopySelf(other);
+        super.deepCopyNode(other);
         CSG c = (CSG) other;
         c.csgType = csgType;
         c.genType = genType;
diff --git a/Composite.java b/Composite.java
index c4deff4..2b8dc5e 100644
--- a/Composite.java
+++ b/Composite.java
@@ -293,9 +293,9 @@
         return compo;
     }
 
-    protected void deepCopySelf(Object3D other)
+    protected void deepCopyNode(Object3D other)
     {
-        super.deepCopySelf(other);
+        super.deepCopyNode(other);
         
         if (false)
         {
diff --git a/Cone.java b/Cone.java
index 571227c..1cd10db 100644
--- a/Cone.java
+++ b/Cone.java
@@ -86,9 +86,9 @@
         return cone;
     }
 
-    protected void deepCopySelf(Object3D other)
+    protected void deepCopyNode(Object3D other)
     {
-        super.deepCopySelf(other);
+        super.deepCopyNode(other);
         Cone c = (Cone)other;
         LA.vecCopy(base, c.base);
         c.baseRadius = baseRadius;
diff --git a/FileObject.java b/FileObject.java
index 0d614bf..e7042e6 100644
--- a/FileObject.java
+++ b/FileObject.java
@@ -101,9 +101,9 @@
         return e;
     }
 
-    protected void deepCopySelf(Object3D other)
+    protected void deepCopyNode(Object3D other)
     {
-        super.deepCopySelf(other);
+        super.deepCopyNode(other);
     }
     
 //    void Draw(CameraPane display, Object3D /*Composite*/ root, boolean selected)
diff --git a/FrameSelector.java b/FrameSelector.java
index d811fba..08538f9 100644
--- a/FrameSelector.java
+++ b/FrameSelector.java
@@ -47,9 +47,9 @@
         return e;
     }
 
-    protected void deepCopySelf(Object3D other)
+    protected void deepCopyNode(Object3D other)
     {
-        super.deepCopySelf(other);
+        super.deepCopyNode(other);
         FrameSelector bp = (FrameSelector)other;
      //   bp.frame = (int)(Math.random()*(getNumFrames() - mocap.offset));
     }
diff --git a/Grid.java b/Grid.java
index f4023e6..97d7ca9 100644
--- a/Grid.java
+++ b/Grid.java
@@ -37,9 +37,9 @@
         return e;
     }
 
-    protected void deepCopySelf(Object3D other)
+    protected void deepCopyNode(Object3D other)
     {
-        super.deepCopySelf(other);
+        super.deepCopyNode(other);
         Grid e = (Grid)other;
         e.center = new cVector();
         LA.vecCopy(center, e.center);
diff --git a/JpegLoader.java b/JpegLoader.java
new file mode 100644
index 0000000..8d7c2b5
--- /dev/null
+++ b/JpegLoader.java
@@ -0,0 +1,16 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+/**
+ *
+ * @author nbriere
+ */
+public class JpegLoader
+{
+    static java.awt.image.BufferedImage load(String name)
+    {
+        return new sun.awt.image.codec.JPEGImageDecoderImpl(ObjEditor.class.getClassLoader().getResourceAsStream(name)).decodeAsBufferedImage();
+    }
+}
diff --git a/Klein.java b/Klein.java
index 601ff95..2c4f0f3 100644
--- a/Klein.java
+++ b/Klein.java
@@ -74,9 +74,9 @@
         return e;
     }
 
-    protected void deepCopySelf(Object3D other)
+    protected void deepCopyNode(Object3D other)
     {
-        super.deepCopySelf(other);
+        super.deepCopyNode(other);
         Klein e = (Klein) other;
         if (center != null)
         {
diff --git a/Lathe.java b/Lathe.java
index e9dd881..be0cc73 100644
--- a/Lathe.java
+++ b/Lathe.java
@@ -22,9 +22,9 @@
         return l;
     }
 
-    protected void deepCopySelf(Object3D other)
+    protected void deepCopyNode(Object3D other)
     {
-        super.deepCopySelf(other);
+        super.deepCopyNode(other);
         Lathe l = (Lathe)other;
         l.spline = (Spline)spline.deepCopy();
     }
diff --git a/MorphNode.java b/MorphNode.java
index 5d2224f..c67411a 100644
--- a/MorphNode.java
+++ b/MorphNode.java
@@ -107,9 +107,9 @@
         return e;
     }
 
-    protected void deepCopySelf(Object3D other)
+    protected void deepCopyNode(Object3D other)
     {
-        super.deepCopySelf(other);
+        super.deepCopyNode(other);
         MorphNode bp = (MorphNode)other;
         
         bp.morphweights = (double[]) Grafreed.clone(morphweights);
diff --git a/ObjEditor.java b/ObjEditor.java
index 06f91f8..7f5ac09 100644
--- a/ObjEditor.java
+++ b/ObjEditor.java
@@ -24,6 +24,7 @@
         matrix.Matrix;
 
 import grafeme.ui.*;
+import org.xj3d.ui.swt.widgets.ImageLoader;
 
 class ObjEditor /*extends JFrame*/ implements iCallBack, ObjectUI,
         ActionListener, ChangeListener,
@@ -141,7 +142,7 @@
                 try
                 {
                     // Much faster!
-                    image = new sun.awt.image.codec.JPEGImageDecoderImpl(ObjEditor.class.getClassLoader().getResourceAsStream(name)).decodeAsBufferedImage();
+                    image = JpegLoader.load(name);
                 }
                 catch (Exception e)
                 {
@@ -4662,9 +4663,8 @@
         changed.ExtractBigData(Grafreed.grafreed.universe.versiontable);
         
         changed.clear();
-        
-        changed.skyboxname = obj.skyboxname;
-        changed.skyboxext = obj.skyboxext;
+
+        obj.deepCopyNode(changed);
                 
         for (int i=0; i<obj.Size(); i++)
         {
@@ -4860,11 +4860,14 @@
 
     void SetCameras()
     {
-        Camera neweye = (Camera)copy.GetObject(cameraView.cameras[0].GetUUID());
-        Camera newlight = (Camera)copy.GetObject(cameraView.LightCamera().GetUUID());
-        
-        cameraView.SetCamera(neweye);
-        cameraView.SetLight(newlight);
+        if (copy == Grafreed.grafreed.universe)
+        {
+            Camera neweye = (Camera)copy.GetObject(cameraView.cameras[0].GetUUID());
+            Camera newlight = (Camera)copy.GetObject(cameraView.LightCamera().GetUUID());
+
+            cameraView.SetCamera(neweye);
+            cameraView.SetLight(newlight);
+        }
     }
     
         void ImportGFD()
diff --git a/Object3D.java b/Object3D.java
index 88267e2..864faeb 100644
--- a/Object3D.java
+++ b/Object3D.java
@@ -40,6 +40,78 @@
     
     ScriptNode scriptnode;
 
+    void deepCopyNode(Object3D other)
+    {
+        other.skyboxname = skyboxname;
+        other.skyboxext = skyboxext;
+        
+        if (toParent != null)
+        {
+            other.toParent = LA.newMatrix();
+            other.fromParent = LA.newMatrix();
+            LA.matCopy(toParent, other.toParent);
+            LA.matCopy(fromParent, other.fromParent);
+            if (toParentMarked != null)
+            {
+                other.toParentMarked = LA.newMatrix();
+                other.fromParentMarked = LA.newMatrix();
+                LA.matCopy(toParentMarked, other.toParentMarked);
+                LA.matCopy(fromParentMarked, other.fromParentMarked);
+            }
+        }
+        else
+        {
+            if (other.toParent == null)
+//                assert(other.toParent == null);
+//                new Exception().printStackTrace();
+                System.err.println("null parent: " + other);
+        }
+        
+        /*
+        double ident[][] = LA.newMatrix();
+        if (bRep == null)
+        other.bRep = null;
+        else
+        other.bRep = new BoundaryRep(bRep, ident);
+         */
+        // Really new...
+        //other.editWindow = null;
+        if (name == null)
+            other.name = null;
+        else
+            other.name = new String(name);
+
+        if (material != null)
+        {
+            other.material = new cMaterial(material);
+        } else
+        {
+            other.material = null;
+        }
+
+        other.GetTextures().name = GetTextures().name;
+        
+        CopyExtraMaterial(other);
+        
+        other.touched = touched;
+        other.softtouched = softtouched;
+        
+        other.random = random;
+        other.link2master = link2master;
+        other.transformcount = transformcount;
+        other.marked = marked;
+        other.skip = skip;
+        other.count = count;
+        other.flipV = flipV;
+        other.live = live;
+        other.rewind = rewind;
+        other.hide = hide;
+        other.texres = texres;
+        other.speedup = speedup;
+        other.height = height;
+        other.depth = depth;
+    }
+
     int VersionCount()
     {
         int count = 0;
@@ -1310,78 +1382,16 @@
             return;
         
         blockloop = true;
+        
+        other.parent = parent;
+        
         //System.out.println("COPY " + this + " to " + other);
         //new Exception().printStackTrace();
+        deepCopyNode(other);
 
-        other.parent = parent;
-        if (toParent != null)
-        {
-            other.toParent = LA.newMatrix();
-            other.fromParent = LA.newMatrix();
-            LA.matCopy(toParent, other.toParent);
-            LA.matCopy(fromParent, other.fromParent);
-            if (toParentMarked != null)
-            {
-                other.toParentMarked = LA.newMatrix();
-                other.fromParentMarked = LA.newMatrix();
-                LA.matCopy(toParentMarked, other.toParentMarked);
-                LA.matCopy(fromParentMarked, other.fromParentMarked);
-            }
-        }
-        else
-        {
-            if (other.toParent == null)
-//                assert(other.toParent == null);
-//                new Exception().printStackTrace();
-                System.err.println("null parent: " + other);
-        }
-        /*
-        double ident[][] = LA.newMatrix();
-        if (bRep == null)
-        other.bRep = null;
-        else
-        other.bRep = new BoundaryRep(bRep, ident);
-         */
-        // Really new...
         other.bRep = bRep; // Share the geometry
         
         other.support = support; // Share the support
-
-        //other.editWindow = null;
-        if (name == null)
-            other.name = null;
-        else
-            other.name = new String(name);
-
-        if (material != null)
-        {
-            other.material = new cMaterial(material);
-        } else
-        {
-            other.material = null;
-        }
-
-        other.GetTextures().name = GetTextures().name;
-        
-        CopyExtraMaterial(other);
-        
-        other.touched = touched;
-        other.softtouched = softtouched;
-        
-        other.random = random;
-        other.link2master = link2master;
-        other.transformcount = transformcount;
-        other.marked = marked;
-        other.skip = skip;
-        other.count = count;
-        other.flipV = flipV;
-        other.live = live;
-        other.rewind = rewind;
-        other.hide = hide;
-        other.texres = texres;
-        other.speedup = speedup;
-        other.height = height;
-        other.depth = depth;
 
 // aout 2013        if (/*displaylist != -1 &&*/other.displaylist != displaylist)
 //        {
@@ -1437,17 +1447,24 @@
         if ((mask & GEOMETRY) != 0)
         {
             if (bRep != null)
-                bRep.overwriteThis(other.bRep==null?other.transientrep:other.bRep);
-            else
-                assert(other.bRep == null);
-            
-            if (bRep != null)
             {
+                bRep.overwriteThis(other.bRep==null?other.transientrep:other.bRep);
                 CameraPane.RemoveList(bRep.displaylist);
                 bRep.displaylist = 0; // june 2013 -1;
             }
             else
-                bRep = bRep;
+            {
+                //assert(other.bRep == null);
+                bRep = other.bRep;
+            }
+            
+//            if (bRep != null)
+//            {
+//                CameraPane.RemoveList(bRep.displaylist);
+//                bRep.displaylist = 0; // june 2013 -1;
+//            }
+//            else
+//                bRep = bRep;
         }
             
         /* Use a MASK = GEO/MAT
@@ -4260,9 +4277,9 @@
             max = new cVector();
         }
         
-        for (int i = 0; i<size(); i++)
+        for (int i = 0; i<Size(); i++)
         {
-            Object3D child = (Object3D) reserve(i);
+            Object3D child = (Object3D) get(i); //reserve(i);
             if (child == null)
                 continue;
             
@@ -4281,14 +4298,14 @@
             if (child.hide && !(child instanceof Merge) || child.skip)
             //if (child.hide)
             {
-                release(i);
+                //release(i);
                 continue;
             }
             
                 blockloop = true;
             child.getBounds(min, max, true); // xform);
                 blockloop = false;
-            release(i);
+            //release(i);
             
             MinMax(minima, maxima);
         }
@@ -6357,6 +6374,20 @@
             {
                 drawSelf(display, root, selected, blocked);
             }
+            
+//            if (!(this instanceof Composite))
+//            {
+//                for (int i = 0; i < size(); i++)
+//                {
+//                    Object3D child = (Object3D) reserve(i);
+//                    if (child == null)
+//                        continue;
+//
+//                    child.draw(display, root, selected, blocked);
+//
+//                    release(i);
+//                }
+//            }
         } else
         {
             /*
@@ -6427,6 +6458,20 @@
 // june 2013            drawSelf(display, root, selected);
                     }
                 }
+                
+                assert (!(this instanceof Composite));
+                {
+                    for (int i = 0; i < size(); i++)
+                    {
+                        Object3D child = (Object3D) reserve(i);
+                        if (child == null)
+                            continue;
+
+                        child.draw(display, root, selected, blocked);
+
+                        release(i);
+                    }
+                }
             }
 
     if (!failedBump)
@@ -6479,16 +6524,17 @@
 
     void CallList(iCameraPane display, Object3D /*Composite*/ root, boolean selected, boolean blocked)
     {
-        if (GetBRep() == null)
-        {
-            drawSelf(display, root, selected, blocked);
-        } else
+        if (GetBRep() != null)
         {
             DrawNode(display, root, selected);
             if (this instanceof BezierPatch)
             {
                 //drawSelf(display, root, selected);
             }
+        }
+        else
+        {
+            drawSelf(display, root, selected, blocked);
         }
     }
 
@@ -8237,7 +8283,7 @@
 //        if (!Globals.ADVANCED)
 //            return objname;
         
-        return objname + " " + System.identityHashCode(this); // + GetUUID()
+        return objname; // + " " + System.identityHashCode(this); // + GetUUID()
     }
 
     public int hashCode()
diff --git a/RandomEditor.java b/RandomEditor.java
index f6e4a71..747e799 100644
--- a/RandomEditor.java
+++ b/RandomEditor.java
@@ -136,9 +136,14 @@
 		return objEditor;
 	}
 
-	void refreshContents2()
+	void refreshContents()
 	{
-		objEditor.refreshContents();
+            itemField.setMinimum(0);
+            itemField.setMaximum(randomnode.Size() - 1);
+            itemField.setInteger(randomnode.rndIndex);
+            
+            itemField.validate();
+	//	objEditor.refreshContents();
 	}
 	
     RandomNode randomnode;
diff --git a/RandomNode.java b/RandomNode.java
index daf6231..5551439 100644
--- a/RandomNode.java
+++ b/RandomNode.java
@@ -20,6 +20,15 @@
             return comp;
     }
     
+    protected void deepCopyNode(Object3D other)
+    {
+        super.deepCopyNode(other);
+        RandomNode bp = (RandomNode)other;
+        bp.rndIndex = rndIndex;
+        bp.damp = damp;
+        bp.firstchoice = firstchoice;
+    }
+    
 //    public int Size()
 //    {
 //        return 1;
@@ -43,6 +52,18 @@
             return super.size();
     }
     
+    void addChild(Object3D child)
+    {
+        super.addChild(child);
+        
+        this.rndIndex = Size() - 1;
+        
+        if (this.editWindow != null)
+        {
+            ((RandomEditor)this.objectUI).refreshContents();
+        }
+    }
+    
     int rndIndex = -1;
     
     static int globalseed = 0;
diff --git a/ScriptNode.java b/ScriptNode.java
index 269b6be..68ec53e 100644
--- a/ScriptNode.java
+++ b/ScriptNode.java
@@ -1821,9 +1821,9 @@
         return e;
     }
 
-    protected void deepCopySelf(Object3D other)
+    protected void deepCopyNode(Object3D other)
     {
-        super.deepCopySelf(other);
+        super.deepCopyNode(other);
 //        FrameSelector bp = (FrameSelector)other;
 //        bp.frame = (int)(Math.random()*(getNumFrames() - mocap.offset));
     }
diff --git a/Skybox.java b/Skybox.java
index b019c2a..e2eb3df 100644
--- a/Skybox.java
+++ b/Skybox.java
@@ -24,9 +24,9 @@
         return rec;
     }
 
-    protected void deepCopySelf(Object3D other)
+    protected void deepCopyNode(Object3D other)
     {
-        super.deepCopySelf(other);
+        super.deepCopyNode(other);
         Skybox rec = (Skybox)other;
         rec.minima = new cVector();
         LA.vecCopy(minima, rec.minima);
diff --git a/Sphere.java b/Sphere.java
index baf117f..4a0b298 100644
--- a/Sphere.java
+++ b/Sphere.java
@@ -95,9 +95,9 @@
         return e;
     }
 
-    protected void deepCopySelf(Object3D other)
+    protected void deepCopyNode(Object3D other)
     {
-        super.deepCopySelf(other);
+        super.deepCopyNode(other);
         Sphere e = (Sphere) other;
         if (center != null)
         {
diff --git a/Spline.java b/Spline.java
index 4fdf5a6..8baab7b 100644
--- a/Spline.java
+++ b/Spline.java
@@ -19,9 +19,9 @@
         return spline;
     }
 
-    protected void deepCopySelf(Object3D other)
+    protected void deepCopyNode(Object3D other)
     {
-        super.deepCopySelf(other);
+        super.deepCopyNode(other);
         Spline spline = (Spline)other;
         spline.type = type;
         int count = ctrlPnts.size();
diff --git a/Superellipsoid.java b/Superellipsoid.java
index 8c643f0..79fdb29 100644
--- a/Superellipsoid.java
+++ b/Superellipsoid.java
@@ -30,9 +30,9 @@
         return s;
     }
 
-    protected void deepCopySelf(Object3D other)
+    protected void deepCopyNode(Object3D other)
     {
-        super.deepCopySelf(other);
+        super.deepCopyNode(other);
         Superellipsoid s = (Superellipsoid)other;
         s.east = east;
         s.north = north;
diff --git a/SwitchNode.java b/SwitchNode.java
index 7189ebc..edfdfe0 100644
--- a/SwitchNode.java
+++ b/SwitchNode.java
@@ -138,9 +138,9 @@
         return e;
     }
 
-    protected void deepCopySelf(Object3D other)
+    protected void deepCopyNode(Object3D other)
     {
-        super.deepCopySelf(other);
+        super.deepCopyNode(other);
         SwitchNode bp = (SwitchNode)other;
         bp.child = child;
     }
diff --git a/TextureNode.java b/TextureNode.java
index 83bf1db..39c3c15 100644
--- a/TextureNode.java
+++ b/TextureNode.java
@@ -124,9 +124,9 @@
 //        else
 //            return 1;
 //    }
-    protected void deepCopySelf(Object3D other)
+    protected void deepCopyNode(Object3D other)
     {
-        super.deepCopySelf(other);
+        super.deepCopyNode(other);
         
         other.maxcount = maxcount;
         other.transformcount = transformcount;
diff --git a/Torus.java b/Torus.java
index dd1a181..3b5ebd2 100644
--- a/Torus.java
+++ b/Torus.java
@@ -25,9 +25,9 @@
         return t;
     }
 
-    protected void deepCopySelf(Object3D other)
+    protected void deepCopyNode(Object3D other)
     {
-        super.deepCopySelf(other);
+        super.deepCopyNode(other);
         Torus t = (Torus)other;
         t.major = major;
         t.minor = minor;

--
Gitblit v1.6.2