From 89da025f40680d9cea46f2b0a7c8c6829a0d0451 Mon Sep 17 00:00:00 2001
From: Normand Briere <nbriere@noware.ca>
Date: Sun, 12 Apr 2015 19:37:37 -0400
Subject: [PATCH] Height fields.

---
 Object3D.java |   61 +++++++++++++++++++++---------
 1 files changed, 43 insertions(+), 18 deletions(-)

diff --git a/Object3D.java b/Object3D.java
index 1b4f39c..8f3990d 100644
--- a/Object3D.java
+++ b/Object3D.java
@@ -3717,7 +3717,7 @@
 
     boolean getCentroid(cVector centroid, boolean xform)
     {
-        assert(false);
+// for speaker        assert(false);
         if (blockloop)
             return false;
         
@@ -4515,16 +4515,28 @@
     
     Object3D GetFileRoot()
     {
+        if (overflow)
+            return null;
+        
+        overflow = true;
+            
+        Object3D pfr = null;
+        
         if (parent == null && fileparent == null)
-            return this;
+            pfr = this;
         
         if (parent == null && fileparent != null) // V4.gfd???
-            return fileparent;
+            pfr = fileparent;
         
-        if (parent == null)
-            return this;
+        if (pfr == null && parent == null)
+            pfr = this;
         
-        return parent.GetFileRoot();
+        if (pfr == null)
+            pfr = parent.GetFileRoot();
+        
+        overflow = false;
+        
+        return pfr;
     }
     
     cTreePath GetPath()
@@ -5280,7 +5292,7 @@
         if (name != null && name.contains("sclera"))
             name = name;
         
-        if (this instanceof CheckerIG)
+        if (this instanceof Checker)
             return;
         
         if (display.drawMode == display.SHADOW && PASSTEST)
@@ -7735,8 +7747,15 @@
         info.pane.repaint();
     }
 
+    boolean overflow = false;
+    
     void TransformToWorld(cVector out) // , cVector out)
     {
+        if (overflow)
+            return;
+        
+        overflow = true;
+            
         // june 2013 ???       assert (in == out);
         cVector in = out;
         if (toParent != null && !(this instanceof Texture || this instanceof TextureNode))
@@ -7753,6 +7772,8 @@
         {
             (parent!=null?parent:fileparent).TransformToWorld(out); //, out);
         }
+        
+        overflow = false;
     }
 
     void TransformToLocal(cVector out) //, cVector out)
@@ -7995,19 +8016,22 @@
             max = new cVector();
         }
         
-        Object3D sourcenode = GetFileRoot();
-    
-        if (!sourcenode.name.contains("rclab"))
+        if (false) // Can crawl!!
         {
-            getBounds(min, max, true);
+            Object3D sourcenode = GetFileRoot();
 
-            if (min.y != Double.POSITIVE_INFINITY && min.y > 2)
+            if (sourcenode != null && !sourcenode.name.contains("rclab"))
             {
-//                sourcenode.getBounds(min, max, true);
-                sourcenode.getBounds(v0, v1, true);
-//                sourcenode.toParent = sourcenode.toParent;
-//                get(0).toParent = get(0).toParent;
-//                sourcenode.GlobalTransform();
+                getBounds(min, max, true);
+
+                if (min.y != Double.POSITIVE_INFINITY && min.y > 2)
+                {
+    //                sourcenode.getBounds(min, max, true);
+                    sourcenode.getBounds(v0, v1, true);
+    //                sourcenode.toParent = sourcenode.toParent;
+    //                get(0).toParent = get(0).toParent;
+    //                sourcenode.GlobalTransform();
+                }
             }
         }
         
@@ -8016,7 +8040,8 @@
         if (support != null)
         {
             assert(bRep != null);
-            GraphreeD.Assert(support.bRep == bRep.support);
+            if (!(support instanceof GenericJoint)) // support.bRep != null)
+                GraphreeD.Assert(support.bRep == bRep.support);
         }
         else
         {

--
Gitblit v1.6.2