From 631719825b865aaf9fa1cb124d9fc5bd9dd78bd4 Mon Sep 17 00:00:00 2001
From: Normand Briere <nbriere@noware.ca>
Date: Sun, 05 May 2019 10:27:02 -0400
Subject: [PATCH] Disabled timer for instant selection.

---
 Object3D.java |  324 +++++++++++++++--------------------------------------
 1 files changed, 95 insertions(+), 229 deletions(-)

diff --git a/Object3D.java b/Object3D.java
index bdfe925..76593d2 100644
--- a/Object3D.java
+++ b/Object3D.java
@@ -5,6 +5,7 @@
 import java.util.Vector;
 
 import javax.media.j3d.Transform3D;
+import javax.media.opengl.GL;
 import javax.vecmath.Vector3d;
 
 import javax.imageio.ImageIO;
@@ -2299,6 +2300,7 @@
     {
         if (newWindow)
         {
+                new Exception().printStackTrace();
             System.exit(0);
             if (parent != null)
             {
@@ -2475,13 +2477,13 @@
         return retval;
     }
 
-    void doEditDrag(ClickInfo info)
+    void doEditDrag(ClickInfo info, boolean opposite)
     {
         switch (doSomething)
         {
             case 1: // '\001'
                 //super.
-                        doEditDrag0(info);
+                        doEditDrag0(info, opposite);
                 break;
 
             case 2: // '\002'
@@ -2494,11 +2496,11 @@
                     {
                         //sel.hitSomething = childToDrag.hitSomething;
                         //childToDrag.doEditDrag(info);
-                        sel.doEditDrag(info);
+                        sel.doEditDrag(info, opposite);
                     } else
                     {
                         //super.
-                                doEditDrag0(info);
+                                doEditDrag0(info, opposite);
                     }
                 }
                 break;
@@ -2905,7 +2907,8 @@
     {
         if (bRep != null)
         {
-            bRep.GenUV();
+            bRep.GenUV(); //1);
+            //bRep.UnfoldUV();
             Touch();
         }
     }
@@ -5156,10 +5159,34 @@
         
    //     System.out.println("Fullname = " + fullname);
         
-        if (fullname.name.indexOf(":") == -1)
-            return fullname.name;
+        // Does not work on Windows due to C:
+//        if (fullname.name.indexOf(":") == -1)
+//            return fullname.name;
+//        
+//        return fullname.name.substring(0,fullname.name.indexOf(":"));
         
-        return fullname.name.substring(0,fullname.name.indexOf(":"));
+        String[] split = fullname.name.split(":");
+        
+        if (split.length == 0)
+        {
+                return "";
+        }
+        
+        if (split.length <= 2)
+        {
+                if (fullname.name.endsWith(":"))
+                {
+                        // Windows
+                        return fullname.name.substring(0, fullname.name.length()-1);
+                }
+                
+                return split[0];
+        }
+        
+        // Windows
+        assert(split.length == 4);
+        
+        return split[0] + ":" + split[1];
     }
     
     static String GetBump(cTexture fullname)
@@ -5168,10 +5195,38 @@
             return "";
         
   //      System.out.println("Fullname = " + fullname);
-        if (fullname.name.indexOf(":") == -1)
-            return "";
-
-        return fullname.name.substring(fullname.name.indexOf(":")+1,fullname.name.length());
+        // Does not work on Windows due to C:
+//        if (fullname.name.indexOf(":") == -1)
+//            return "";
+//
+//        return fullname.name.substring(fullname.name.indexOf(":")+1,fullname.name.length());
+        String[] split = fullname.name.split(":");
+        
+        if (split.length == 0)
+        {
+                return "";
+        }
+        
+        if (split.length == 1)
+        {
+                return "";
+        }
+        
+        if (split.length == 2)
+        {
+                if (fullname.name.endsWith(":"))
+                {
+                        // Windows
+                        return "";
+                }
+                
+                return split[1];
+        }
+        
+        // Windows
+        assert(split.length == 4);
+        
+        return split[2] + ":" + split[3];
     }
     
     String GetPigmentTexture()
@@ -5245,7 +5300,7 @@
         System.out.print("; textures = " + textures);
         System.out.println("; usedtextures = " + usedtextures);
         
-        if (GetTextures() == null)
+        if (GetTextures() == null) // What is that??
             GetTextures().name = ":";
         
         String texname = tex;
@@ -5371,7 +5426,7 @@
             return;
         }
         
-        javax.media.opengl.GL gl = display.GetGL();
+        //javax.media.opengl.GL gl = display.GetGL();
 
         /*
         if (touched)
@@ -5423,7 +5478,7 @@
             //if (displaylist == -1 && usecalllists)
             if ((bRep != null && bRep.displaylist <= 0) && usecalllists) // june 2013
             {
-                bRep.displaylist = gl.glGenLists(1);
+                bRep.displaylist = display.GenList();
                 assert(bRep.displaylist != 0);
 //        System.err.println("glGenLists: " + bRep.displaylist + " for " + this);
                 //System.out.println("\tgen list " + list);
@@ -5435,14 +5490,16 @@
             if (usecalllists)
             {
 //            System.err.println("new list " + bRep.displaylist + " for " + this);
-                gl.glNewList(bRep.displaylist, gl.GL_COMPILE); //_AND_EXECUTE);
+                display.NewList(bRep.displaylist);
             }
+            
             CallList(display, root, selected, blocked);
+            
           //  compiled = true;
             if (usecalllists)
             {
 //            System.err.println("end list " + bRep.displaylist + " for " + this);
-                gl.glEndList();
+                display.EndList();
             }
             //gl.glDrawBuffer(gl.GL_BACK);
             // XXX touched = false;
@@ -5490,7 +5547,7 @@
             if (display.DrawMode() == iCameraPane.SHADOW)
             {
                 if (!link2master // tricky to cull in shadow mode.
-                         && GetBRep().FrustumCull(this, gl, display.LightCamera(), true))
+                         && GetBRep().FrustumCull(this, null, display.LightCamera(), true))
                 {
                     //System.out.print("CULLED");
                     culled = true;
@@ -5498,7 +5555,7 @@
             }
             else
                 //GetBRep().getBounds(v0, v1, this);
-                if (GetBRep().FrustumCull(this, gl, display.RenderCamera(), false))
+                if (GetBRep().FrustumCull(this, null, display.RenderCamera(), false))
                     culled = true;
             
 //            LA.xformPos(v0, display.renderCamera.toScreen, v0);
@@ -5538,7 +5595,7 @@
         {
             if (GetBRep() != null)
             {
-                CameraPane.NextIndex(this, gl);
+                display.NextIndex();
                 // vertex color conflict : gl.glCallList(list);
                 DrawNode(display, root, selected);
                 if (this instanceof BezierPatch)
@@ -5595,7 +5652,7 @@
                         
 //        System.err.println("glCallList: " + bRep.displaylist + " for " + this);
                         assert(bRep.displaylist != 0);
-                        gl.glCallList(bRep.displaylist);
+                        display.CallList(bRep.displaylist);
 // june 2013            drawSelf(display, root, selected);
                     }
                 }
@@ -5895,9 +5952,10 @@
             return;
         }
         
+        //bRep.GenUV(1/material.diffuseness);
 //        bRep.lock = true;
 
-        javax.media.opengl.GL gl = display.GetGL();
+        //javax.media.opengl.GL gl = display.GetGL();
 
         if (CameraPane.BOXMODE && !selected) // || CameraPane.movingcamera)
         {
@@ -5914,23 +5972,7 @@
 
                 bRep.getMinMax(min, max, 100);
                 
-                gl.glBegin(gl.GL_LINES);
-                
-                gl.glVertex3d(min.x, min.y, min.z);
-                gl.glVertex3d(min.x, min.y, max.z);
-                gl.glVertex3d(min.x, min.y, min.z);
-                gl.glVertex3d(min.x, max.y, min.z);
-                gl.glVertex3d(min.x, min.y, min.z);
-                gl.glVertex3d(max.x, min.y, min.z);
-                
-                gl.glVertex3d(max.x, max.y, max.z);
-                gl.glVertex3d(min.x, max.y, max.z);
-                gl.glVertex3d(max.x, max.y, max.z);
-                gl.glVertex3d(max.x, min.y, max.z);
-                gl.glVertex3d(max.x, max.y, max.z);
-                gl.glVertex3d(max.x, max.y, min.z);
-                
-                gl.glEnd();
+                display.DrawBox(min, max);
                 
                 return;
             }
@@ -5984,178 +6026,14 @@
                 new Exception().printStackTrace();
                 return;
             }
-
-            // TRIANGLE STRIP ARRAY
-            if (bRep.trimmed)
-            {
-                float[] v = bRep.getRawVertices();
-                float[] n = bRep.getRawNormals();
-                float[] c = bRep.getRawColors();
-                float[] uv = bRep.getRawUVMap();
-
-                int count2 = 0;
-                int count3 = 0;
-
-                if (n.length > 0)
-                {
-                    for (int i = 0; i < strips.length; i++)
-                    {
-                        gl.glBegin(gl.GL_TRIANGLE_STRIP);
-
-                        /*
-                boolean locked = false;
-                float eps = 0.1f;
-                boolean wrap = CameraPane.UVWRAP; // true; // UV WRAP TEXTURE ISSUE: true = artifacts, false = nice
-
-                int dot = 0;
-
-                if ((dot&1) == 0)
-                    dot |= (Math.abs(qv.s - pv.s) < eps && Math.abs(qv.t - pv.t) < eps) ? 3 : 1;
-
-                if (wrap || (dot&2) != 0) // Math.abs(qv.s - pv.s) < eps && Math.abs(qv.t - pv.t) < eps)
-                    gl.glTexCoord2f((float) qv.s, (float) qv.t);
-                else
-                {
-                    locked = true;
-                    gl.glTexCoord2f((float) pv.s, (float) pv.t);
-                }
-                //System.out.println("vertexq = " + qv.x + ", " + qv.y + ", " + qv.z);
-                gl.glVertex3f((float) qv.x, (float) qv.y, (float) qv.z);
-                if (hasnorm)
-                {
-                    //System.out.println("normalr = " + rv.norm.x + ", " + rv.norm.y + ", " + rv.norm.z);
-                    gl.glNormal3f((float) rv.norm.x, (float) rv.norm.y, (float) rv.norm.z);
-                }
-
-                if ((dot&4) == 0)
-                    dot |= (Math.abs(rv.s - pv.s) < eps && Math.abs(rv.t - pv.t) < eps) ? 12 : 4;
-
-                if (wrap || !locked && (dot&8) != 0)
-                    gl.glTexCoord2f((float) rv.s, (float) rv.t);
-                else
-                    gl.glTexCoord2f((float) pv.s, (float) pv.t);
-
-                f.dot = dot;
-                */
-
-                        if (!selectmode)
-                        {
-                            if (n[count3] != 0 || n[count3 + 1] != 0 || n[count3 + 2] != 0)
-                            {
-                                gl.glNormal3f(n[count3], n[count3 + 1], n[count3 + 2]);
-                            } else
-                            {
-                                gl.glNormal3f(0, 0, 1);
-                            }
-
-                            if (c != null)
-                            //System.out.println("glcolor = " + c[count3] + ", " + c[count3+1] + ", " + c[count3+2]);
-                            {
-                                gl.glColor4f(c[count3/3], c[count3/3 /* + 1*/], c[count3/3 /* + 2*/], 1);
-                            }
-                        }
-                        if (flipV)
-                            gl.glTexCoord2f(uv[count2], 1-uv[count2 + 1]);
-                        else
-                            gl.glTexCoord2f(uv[count2], uv[count2 + 1]);
-                        //System.out.println("vertex1 = " + v[count3] + ", " + v[count3+1] + ", " + v[count3+2]);
-                        gl.glVertex3f(v[count3], v[count3 + 1], v[count3 + 2]);
-
-                        count2 += 2;
-                        count3 += 3;
-                        if (!selectmode)
-                        {
-                            if (n[count3] != 0 || n[count3 + 1] != 0 || n[count3 + 2] != 0)
-                            {
-                                gl.glNormal3f(n[count3], n[count3 + 1], n[count3 + 2]);
-                            } else
-                            {
-                                gl.glNormal3f(0, 0, 1);
-                            }
-                            if (c != null)
-                            {
-                                gl.glColor4f(c[count3/3], c[count3/3 /* + 1*/], c[count3/3 /* + 2*/], 1);
-                            }
-                        }
-                        if (flipV)
-                            gl.glTexCoord2f(uv[count2], 1-uv[count2 + 1]);
-                        else
-                            gl.glTexCoord2f(uv[count2], uv[count2 + 1]);
-                        //System.out.println("vertex2 = " + v[count3] + ", " + v[count3+1] + ", " + v[count3+2]);
-                        gl.glVertex3f(v[count3], v[count3 + 1], v[count3 + 2]);
-
-                        count2 += 2;
-                        count3 += 3;
-                        for (int j = 0; j < strips[i] - 2; j++)
-                        {
-                            //gl.glTexCoord2d(...);
-                            if (!selectmode)
-                            {
-                                if (n[count3] != 0 || n[count3 + 1] != 0 || n[count3 + 2] != 0)
-                                {
-                                    gl.glNormal3f(n[count3], n[count3 + 1], n[count3 + 2]);
-                                } else
-                                {
-                                    gl.glNormal3f(0, 0, 1);
-                                }
-                                if (c != null)
-                                {
-                                    gl.glColor4f(c[count3/3], c[count3/3 /* + 1*/], c[count3/3 /* + 2*/], 1);
-                                }
-                            }
-
-                            if (flipV)
-                                gl.glTexCoord2f(uv[count2], 1-uv[count2 + 1]);
-                            else
-                                gl.glTexCoord2f(uv[count2], uv[count2 + 1]);
-                            //System.out.println("coord3 = " + uv[count2] + ", " + uv[count2+1]);
-                            gl.glVertex3f(v[count3], v[count3 + 1], v[count3 + 2]);
-                            count2 += 2;
-                            count3 += 3;
-                        }
-
-                        gl.glEnd();
-                    }
-                }
-
-                assert count3 == v.length;
-            }
-            else // !trimmed
-            {
-                int count = 0;
-                for (int i = 0; i < strips.length; i++)
-                {
-                    gl.glBegin(gl.GL_TRIANGLE_STRIP);
-                    
-                    Vertex p = bRep.GetVertex(bRep.indices[count++]);
-                    Vertex q = bRep.GetVertex(bRep.indices[count++]);
-                    
-                    drawVertex(gl, p, selectmode);
-                    drawVertex(gl, q, selectmode);
-                    
-                    for (int j = 0; j < strips[i] - 2; j++)
-                    {
-                        Vertex r = bRep.GetVertex(bRep.indices[count++]);
-
-//                        if (j%2 == 0)
-//                            drawFace(p, q, r, display, null);
-//                        else
-//                            drawFace(p, r, q, display, null);
-                        
-//                        p = q;
-//                        q = r;
-                        drawVertex(gl, r, selectmode);
-                    }
-
-                    gl.glEnd();
-                }
-            }
+            
+            display.DrawGeometry(bRep, flipV, selectmode);
         } else // catch (Error e)
         {
             // TRIANGLE ARRAY
             if (IsOpaque()) // Static())
             {
-                gl.glBegin(gl.GL_TRIANGLES);
+                    display.StartTriangles();
                 int facecount = bRep.FaceCount();
                 for (int i = 0; i < facecount; i++)
                 {
@@ -6220,7 +6098,7 @@
 
                     display.DrawFace(this, p, q, r, face);
                 }
-                gl.glEnd();
+                    display.EndTriangles();
             }
             else
             {
@@ -6249,8 +6127,8 @@
                 //System.out.println("SORT");
                 
                 java.util.Arrays.sort(facescompare);
-                
-                gl.glBegin(gl.GL_TRIANGLES);
+
+                display.StartTriangles();
                 for (int i = 0; i < facecount; i++)
                 {
                     Face face = bRep.GetFace(facescompare[i].index);
@@ -6264,11 +6142,12 @@
 
                     display.DrawFace(this, p, q, r, face);
                 }
-                gl.glEnd();
+                display.EndTriangles();
             }
             
             if (false) // live && support != null && support.bRep != null) // debug weights
             {
+                    /*
                 gl.glDisable(gl.GL_LIGHTING);
                 float[] colorV = new float[3];
                 
@@ -6347,6 +6226,7 @@
 //                        gl.glEnd();
                     }
                 }
+                     */
             }
         }
 
@@ -6405,22 +6285,6 @@
     void Print(Vertex v)
     {
         //System.err.println("(" + v.x + ", " + v.y + ", " + v.z + ")");
-    }
-    
-    void drawVertex(javax.media.opengl.GL gl, Vertex pv, boolean selectmode)
-    {
-        if (!selectmode)
-        {
-            gl.glNormal3f((float) pv.norm.x, (float) pv.norm.y, (float) pv.norm.z);
-            gl.glColor4f(pv.AO, pv.AO, pv.AO, 1);
-            
-            if (flipV)
-                gl.glTexCoord2f((float) pv.s, 1-(float) pv.t);
-            else
-                gl.glTexCoord2f((float) pv.s, (float) pv.t);
-        }
-
-        gl.glVertex3f((float) pv.x, (float) pv.y, (float) pv.z);
     }
     
     void drawSelf(ClickInfo info, int level, boolean select)
@@ -7120,7 +6984,7 @@
         }
 
         //System.out.println("info.modifiers = " + info.modifiers);
-        modified = (info.modifiers & CameraPane.META) != 0;
+        modified = (info.modifiers & CameraPane.SHIFT) != 0; // Was META
         //System.out.println("modified = " + modified);
         //new Exception().printStackTrace();
         //viewCode = info.pane.renderCamera.viewCode;
@@ -7148,7 +7012,7 @@
         return true;
     }
 
-    void doEditDrag0(ClickInfo info)
+    void doEditDrag0(ClickInfo info, boolean opposite)
     {
         if (hitSomething == 0)
         {
@@ -7175,7 +7039,7 @@
                 
                 scale *= 0.05f * Globals.theRenderer.RenderCamera().Distance();
                 
-                if (modified)
+                if (modified || opposite)
                 {
                     //assert(false);
                             /*
@@ -7269,6 +7133,7 @@
 
                 if (modified)
                 {
+                    // Rotate 90 degrees
                     angle /= (Math.PI / 4);
                     angle = Math.floor(angle + 0.5);
                     angle *= (Math.PI / 4);
@@ -7566,6 +7431,7 @@
             objectUI.closeUI();
             if (editWindow != null)
             {
+                editWindow.ctrlPanel.FlushUI();
                 editWindow.refreshContents();
             } // ? new
             objectUI = null;

--
Gitblit v1.6.2