From 21104baa536c6b3d3d0f9ecb7231222ed706f0e8 Mon Sep 17 00:00:00 2001
From: Normand Briere <nbriere@noware.ca>
Date: Tue, 25 Jun 2019 18:27:08 -0400
Subject: [PATCH] Fix camera values

---
 Object3D.java |  191 ++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 171 insertions(+), 20 deletions(-)

diff --git a/Object3D.java b/Object3D.java
index 04e109f..c2b61ec 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)
@@ -881,7 +888,7 @@
         
         if (marked && Globals.isLIVE() && live &&
                 //TEMP21aug2018
-                (Globals.DrawMode() == iCameraPane.SHADOW || !Globals.RENDERSHADOW) &&
+                (Globals.DrawMode() == iCameraPane.SHADOW || !Globals.RENDERSHADOW || !Globals.COMPUTESHADOWWHENLIVE) &&
                 currentframe != Globals.framecount)
         {
             currentframe = Globals.framecount;
@@ -893,7 +900,8 @@
             
             boolean changedir = random && Math.random() < 0.01; // && !link2master;
 
-            if (transformcount*factor > maxcount || (step == 1 && changedir))
+            if (transformcount*factor >= maxcount && (rewind || random) ||
+                    (step == 1 && changedir))
             {
                 countdown = 1;
                 delay = speedup?8:1;
@@ -965,6 +973,7 @@
         if (material == null || material.multiply)
             return true;
         
+        // Transparent objects are dynamic because we have to sort the triangles.
         return material.opacity > 0.99;
     }
     
@@ -2386,6 +2395,10 @@
         }
          */
         }
+        else
+        {
+            //((ObjEditor)editWindow).SetupUI2(null);
+        }
     }
 
     void createEditWindow(GroupEditor callee, boolean newWindow) //, boolean root)
@@ -2427,6 +2440,14 @@
         {
             editWindow.refreshContents();
         }
+        else
+        {
+            if (manipWindow != null)
+            {
+                manipWindow.refreshContents();
+            }
+        }
+                
     //if (parent != null)
     //parent.refreshEditWindow();
     }
@@ -3503,7 +3524,8 @@
         if (blockloop)
             return;
         
-        if (marked || (bRep != null && material != null)) // borderline...
+        if (//marked || // does not make sense
+                (bRep != null || material != null)) // borderline...
             live = h;
         
         for (int i = 0; i < Size(); i++)
@@ -3524,7 +3546,8 @@
             return;
         
         //if (bRep != null)
-        if (marked || (bRep != null && material != null)) // borderline...
+        if (//marked || // does not make sense
+                (bRep != null || material != null)) // borderline...
             link2master = h;
         
         for (int i = 0; i < Size(); i++)
@@ -3544,7 +3567,8 @@
         if (blockloop)
             return;
         
-        if (marked || (bRep != null && material != null)) // borderline...
+        if (//marked || // does not make sense
+                (bRep != null || material != null)) // borderline...
             hide = h;
         
         for (int i = 0; i < Size(); i++)
@@ -3564,7 +3588,7 @@
         if (blockloop)
             return;
         
-        if (bRep != null && material != null) // borderline...
+        if (bRep != null || material != null) // borderline...
             marked = h;
         
         for (int i = 0; i < Size(); i++)
@@ -3574,6 +3598,46 @@
                 continue;
             blockloop = true;
             child.MarkLeaves(h);
+            blockloop = false;
+         //   release(i);
+        }
+    }
+    
+    void RewindLeaves(boolean h)
+    {
+        if (blockloop)
+            return;
+        
+        if (bRep != null || material != null) // borderline...
+            rewind = h;
+        
+        for (int i = 0; i < Size(); i++)
+        {
+            Object3D child = (Object3D) get(i); // reserve(i);
+            if (child == null)
+                continue;
+            blockloop = true;
+            child.RewindLeaves(h);
+            blockloop = false;
+         //   release(i);
+        }
+    }
+    
+    void RandomLeaves(boolean h)
+    {
+        if (blockloop)
+            return;
+        
+        if (bRep != null || material != null) // borderline...
+            random = h;
+        
+        for (int i = 0; i < Size(); i++)
+        {
+            Object3D child = (Object3D) get(i); // reserve(i);
+            if (child == null)
+                continue;
+            blockloop = true;
+            child.RandomLeaves(h);
             blockloop = false;
          //   release(i);
         }
@@ -4351,6 +4415,55 @@
         }
     }
     
+    void RepairSOV()
+    {
+        if (blockloop)
+            return;
+
+        String texname = this.GetPigmentTexture();
+        
+        if (texname.startsWith("sov"))
+        {
+            String[] s = texname.split("/");
+
+            String[] sname = s[1].split("Color.pn");
+            
+            texname = sname[0];
+            
+            if (sname.length > 1)
+            {
+                texname += "Color.jpg";
+            }
+            
+            this.SetPigmentTexture("sov/" + texname);
+        }
+                
+        texname = this.GetBumpTexture();
+        
+        if (texname.startsWith("sov"))
+        {
+            String[] s = texname.split("/");
+
+            String[] sname = s[1].split("Bump.pn");
+            
+            texname = sname[0];
+            
+            if (sname.length > 1)
+            {
+                texname += "Bump.jpg";
+            }
+            
+            this.SetBumpTexture("sov/" + texname);
+        }
+                
+        for (int i=0; i<Size(); i++)
+        {               
+                blockloop = true;
+            get(i).RepairSOV();
+                blockloop = false;
+        }
+    }
+    
     void RepairTexture()
     {
         if (this instanceof FileObject || blockloop)
@@ -4865,6 +4978,14 @@
         }
     }
     
+    ObjEditor GetWindow()
+    {
+        if (editWindow != null)
+            return editWindow;
+        
+        return manipWindow;
+    }
+    
     cTreePath Select(int indexcount, boolean deselect)
     {
         if (hide || dontselect)
@@ -4901,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;
@@ -4930,9 +5052,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;
@@ -5653,7 +5776,7 @@
             support = support;
         
         //boolean usecalllists = IsStatic() && GetBRep() != null && (!CameraPane.SUPPORT || support == null || !link2master); // !(this instanceof cSpring) && !(this instanceof BezierPatch);
-        boolean usecalllists = IsLive(); // IsStatic() && GetBRep() != null && (!CameraPane.SUPPORT || support == null) && !link2master; // !(this instanceof cSpring) && !(this instanceof BezierPatch);
+        boolean usecalllists = !IsLive(); // IsStatic() && GetBRep() != null && (!CameraPane.SUPPORT || support == null) && !link2master; // !(this instanceof cSpring) && !(this instanceof BezierPatch);
         
         if (!usecalllists && bRep != null && bRep.displaylist > 0)
         {
@@ -5673,10 +5796,12 @@
         boolean selectmode = display.DrawMode() == display.SELECTION || display.IsDebugSelection();
         
         if (!selectmode && //display.DrawMode() != display.SELECTION &&
-                (touched || (bRep != null && bRep.displaylist <= 0)))
+                //(touched || (bRep != null && bRep.displaylist <= 0)))
+                (Globals.isLIVE() && Globals.COMPUTESHADOWWHENLIVE || touched && (bRep != null && bRep.displaylist <= 0)))
         {
             Globals.lighttouched = true;
         } // all panes...
+        
         //if (usecalllists && display.DrawMode() != display.SELECTION && display.DrawMode() != display.SHADOW &&
         if (bRep != null && usecalllists && !selectmode && // june 2013 display.DrawMode() != display.SHADOW &&
                 (touched || (bRep != null && bRep.displaylist <= 0)))
@@ -5844,16 +5969,27 @@
         tex = GetTextures();
     }
 
-    boolean failed = false;
+    boolean failedPigment = false;
+    boolean failedBump = false;
     
     try
     {
-        display.BindTextures(tex, texres);
+        display.BindPigmentTexture(tex, texres);
     }
     catch (Exception e)
     {
         System.err.println("FAILED: " + this);
-        failed = true;
+        failedPigment = true;
+    }
+           
+    try
+    {
+        display.BindBumpTexture(tex, texres);
+    }
+    catch (Exception e)
+    {
+        //System.err.println("FAILED: " + this);
+        failedBump = true;
     }
            
             if (!compiled)
@@ -5876,8 +6012,11 @@
                 }
             }
 
-    if (!failed)
-        display.ReleaseTextures(tex);
+    if (!failedBump)
+        display.ReleaseBumpTexture(tex);
+
+    if (!failedPigment)
+        display.ReleasePigmentTexture(tex);
 
     display.PopMaterial(this, selected);
         }
@@ -6250,6 +6389,11 @@
                 // dec 2012
                 new Exception().printStackTrace();
                 return;
+            }
+            
+            if (dontselect)
+            {
+                //bRep.GenerateNormalsMINE();
             }
             
             display.DrawGeometry(bRep, flipV, selectmode);
@@ -7450,7 +7594,8 @@
                         } // vScale, 1);
                         else
                         {
-                            LA.matScale(toParent, 1, totalScale, totalScale);
+                            // EXCEPTION!
+                            LA.matScale(toParent, totalScale, totalScale, totalScale);
                         } // vScale, 1);
                         break;
 
@@ -7686,6 +7831,10 @@
             editWindow = null;
         } // ?
         }
+        else
+        {
+            //editWindow.closeUI();
+        }
     }
     
     boolean root; // patch for edit windows
@@ -7843,6 +7992,8 @@
     }
     
     transient ObjEditor editWindow;
+    transient ObjEditor manipWindow;
+    
     transient ObjectUI objectUI;
     public static int povDepth = 0;
     private static cVector tbMin = new cVector();

--
Gitblit v1.6.2