From 21ac57b36a9e3b909853c7d64ac29b7ad72490a3 Mon Sep 17 00:00:00 2001
From: Normand Briere <nbriere@noware.ca>
Date: Mon, 02 Sep 2019 16:52:19 -0400
Subject: [PATCH] Figure panel.

---
 BoundaryRep.java |   84 +++++++++++++++++++++++++++++++++--------
 1 files changed, 67 insertions(+), 17 deletions(-)

diff --git a/BoundaryRep.java b/BoundaryRep.java
index 3583aa0..3d93ef4 100644
--- a/BoundaryRep.java
+++ b/BoundaryRep.java
@@ -686,6 +686,7 @@
     
     void RecomputeBasis(BoundaryRep other, double[][] toRoot, Vertex v)
     {
+        CameraPane.CreateSelectedPoint();
         CameraPane.selectedpoint.
             getAverage(cStatic.point1, true);
 
@@ -1003,6 +1004,7 @@
             
             v.closestsupport = -1;
             
+        CameraPane.CreateSelectedPoint();
         CameraPane.selectedpoint.
             getAverage(cStatic.point1, true);
 
@@ -1261,6 +1263,7 @@
         for (int wi = v0.weights.length; --wi>=0;)
             v[wi] = 0;
             
+        CameraPane.CreateSelectedPoint();
         CameraPane.selectedpoint.
             getAverage(cStatic.point1, true);
 
@@ -1398,6 +1401,7 @@
         v0.x = v0.y = v0.z = 0;
         v0.norm.x = v0.norm.y = v0.norm.z = 0;
             
+        CameraPane.CreateSelectedPoint();
         CameraPane.selectedpoint.
             getAverage(cStatic.point1, true);
 
@@ -1997,7 +2001,10 @@
                 if (v.vertexlinks == null)
                     continue;
                 
-                if (v.weights != null && v.weights[j] < 0.001 * v.totalweight) // == 0)
+                // Warning: faster but dangerous
+                if (v.weights != null && v.weights[j]
+                        // == 0)
+                        < 0.0001 * v.totalweight)
                 {
                     //testweight += v.weights[j-1];
                     continue;
@@ -3857,6 +3864,28 @@
         Trim(true/*wastrim*/,true,crease,wasstrip,false);
     }
     
+    void GenerateNormalsMesh()
+    {
+        if (stripified)
+        {
+            Unstripify();
+        }
+        
+        if (trimmed)
+        {
+            normals = null;
+        }
+        else
+        {
+            for (int i=VertexCount(); --i>=0;)
+            {
+                Vertex v = GetVertex(i);
+
+                v.norm = null;
+            }
+        }
+    }
+    
     void GenNormalsJME()
     {
         assert(false);
@@ -3979,7 +4008,7 @@
             NormalGenerator ng;
             
             if (crease)
-                ng = new NormalGenerator(Math.PI/6); // default is 44 degrees (or Math.PI/3); // /4);
+                ng = new NormalGenerator(Math.PI/4); // default is 44 degrees (or Math.PI/3); // /4);
             else
                 ng = new NormalGenerator(Math.PI); // (Math.PI / 3); // /4);
             
@@ -3997,8 +4026,6 @@
                 //System.out.println("NEW = " + positions.length);
                 uvmap = new float[ta.getVertexCount() * 2];
                 
-                colors = new float[ta.getVertexCount()]; // * 3];
-
                 ta.getCoordinates(0, positions);
                 ta.getNormals(0, normals);
 //                ta.getColors(0, colors);
@@ -4006,6 +4033,14 @@
 
                 System.out.println("UV = " + uvmap[2] + ", " + uvmap[3] + ";");
 
+                colors = null;
+//                colors = new float[ta.getVertexCount()]; // * 3];
+//
+//                for (int i=colors.length; --i>=0;)
+//                {
+//                        colors[i] = 1;
+//                }
+                
                 triangles = new int[ta.getVertexCount()];
 
                 for (int i = 0; i < triangles.length; i++)
@@ -4013,8 +4048,9 @@
                     triangles[i] = i;
                 }
                 
-                Untrim();
-                MergeNormals();
+//                Untrim();
+                if (!trimmed)
+                    MergeNormals();
             }
         }
 
@@ -4042,17 +4078,18 @@
                 positions = new float[3 * ga.getVertexCount()];
                 normals = new float[3 * ga.getVertexCount()];
                 uvmap = new float[2 * ga.getVertexCount()];
-                colors = new float[1 * ga.getVertexCount()];
 
                 tsa.getCoordinates(0, positions);
                 tsa.getNormals(0, normals);
                 tsa.getTextureCoordinates(0, 0, uvmap);
            //     tsa.getColors(0, colors);
-                
-                for (int i=colors.length; --i>=0;)
-                {
-                        colors[i] = 1;
-                }
+
+                colors = null;
+//                colors = new float[1 * ga.getVertexCount()];
+//                for (int i=colors.length; --i>=0;)
+//                {
+//                        colors[i] = 1;
+//                }
 
                 int stripcount = tsa.getNumStrips();
                 triangles = new int[stripcount];
@@ -4061,6 +4098,7 @@
                 stripified = true;
             } catch (ClassCastException e)
             {
+                // ??? aug 2019
                 TriangleArray ta = (TriangleArray) ga;
 
                 positions = new float[3 * ga.getVertexCount()];
@@ -4076,8 +4114,9 @@
                 triangles[0] = 3;
             }
             
-            Untrim();
-            MergeNormals();
+            //Untrim();
+            if (!trimmed)
+                MergeNormals();
         }
 
     /*
@@ -4131,6 +4170,8 @@
     
     void MergeNormals()
     {
+        assert(!trimmed);
+        
         boolean smooth = Grafreed.smoothmode;
         boolean link = Grafreed.linkUV;
         Grafreed.smoothmode = true;
@@ -4942,9 +4983,18 @@
             v./*pos.*/y = positions[i3 + 1];
             v./*pos.*/z = positions[i3 + 2];
 
-            v.norm.x = normals[i3];
-            v.norm.y = normals[i3 + 1];
-            v.norm.z = normals[i3 + 2];
+            if (normals == null)
+            {
+                v.norm.x = 0;
+                v.norm.y = 0;
+                v.norm.z = 0;
+            }
+            else
+            {
+                v.norm.x = normals[i3];
+                v.norm.y = normals[i3 + 1];
+                v.norm.z = normals[i3 + 2];
+            }
 
             v.s = uvmap[i2];
             v.t = uvmap[i2 + 1];

--
Gitblit v1.6.2