From f924d3e00db476c06f55f3d5aaef307e17575340 Mon Sep 17 00:00:00 2001
From: Normand Briere <nbriere@noware.ca>
Date: Mon, 13 May 2019 07:29:08 -0400
Subject: [PATCH] Transform children

---
 CameraPane.java |  530 +++++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 461 insertions(+), 69 deletions(-)

diff --git a/CameraPane.java b/CameraPane.java
index b54e1a7..9a919e6 100644
--- a/CameraPane.java
+++ b/CameraPane.java
@@ -56,8 +56,6 @@
     static int CURRENTANTIALIAS = 0; // 1;
 	/*static*/ boolean RENDERSHADOW = true;
     /*static*/ int RENDERPROGRAM = 2; // 0 == none, 1 == fast, 2 == normal
-    static boolean ANIMATION = false;
-    static String filename;
     
     boolean DISPLAYTEXT = false;
     //boolean REDUCETEXTURE = true;
@@ -92,6 +90,8 @@
 
 static    int tickcount = 0; // slow pose issue
 
+static    boolean BUTTONLESSWHEEL = false;
+static    boolean ZOOMBOXMODE = false;
 static    boolean BOXMODE = false;
 static    boolean IMAGEFLIP = false;
 static    boolean SMOOTHFOCUS = false;
@@ -106,7 +106,7 @@
 static    boolean OEIL = true;
 static    boolean OEILONCE = false; // do oeilon then oeiloff
 static    boolean LOOKAT = true;
-static    boolean RANDOM = true; // false;
+static    boolean SWITCH = true; // false;
 static    boolean HANDLES = false; // selection doesn't work!!
 static  boolean PAINTMODE = false;
 
@@ -191,9 +191,43 @@
     
     /// INTERFACE
     
+    public javax.media.opengl.GL GetGL0()
+    {
+            return null;
+    }
+    
+    public int GenList()
+    {
+            javax.media.opengl.GL gl = GetGL();
+        return gl.glGenLists(1);
+    }
+    
+    public void NewList(int id)
+    {
+            javax.media.opengl.GL gl = GetGL();
+        gl.glNewList(id, gl.GL_COMPILE); //_AND_EXECUTE);
+    }
+    
+    public void CallList(int id)
+    {
+        javax.media.opengl.GL gl = GetGL();
+        gl.glCallList(id);
+    }
+    
+    public void EndList()
+    {
+            javax.media.opengl.GL gl = GetGL();
+        gl.glEndList();
+    }
+    
     public boolean IsBoxMode()
     {
             return BOXMODE;
+    }
+    
+    public boolean IsZoomBoxMode()
+    {
+            return ZOOMBOXMODE;
     }
     
     public void ClearDepth()
@@ -1059,7 +1093,336 @@
         gl.glMatrixMode(gl.GL_MODELVIEW);
     }
     
+        public void DrawBox(cVector min, cVector max)
+        {
+            javax.media.opengl.GL gl = GetGL();
+                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();
+        }
+
+        public void DrawGeometry(BoundaryRep bRep, boolean flipV, boolean selectmode)
+        {
+            int[] strips = bRep.getRawIndices();
+            
+            javax.media.opengl.GL gl = GetGL();
+        
+                // 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, flipV, selectmode);
+                        drawVertex(gl, q, flipV, 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, flipV, selectmode);
+                        }
+
+                        gl.glEnd();
+                    }
+                }
+        }
+
+    static cSpring.Point3D temp = new cSpring.Point3D();
+    static cSpring.Point3D temp2 = new cSpring.Point3D();
+    static cSpring.Point3D temp3 = new cSpring.Point3D();
+    
+        public void DrawDynamicMesh(cMesh mesh)
+        {
+                GL gl = GetGL(); // getGL();
+
+                cSpring.PhysicsController3D Phys = mesh.Phys;
+                
+                gl.glDisable(gl.GL_LIGHTING);
+                
+                gl.glLineWidth(1);
+                gl.glColor3f(1,1,1);
+                gl.glBegin(gl.GL_LINES);
+                double scale = 0;
+                int count = 0;
+                for (int s=0; s<Phys.allSprings.size(); s++)
+                {
+                    cSpring.Spring spring = Phys.allSprings.get(s);
+                        if(s == 0)
+                        {
+                            //System.out.println(" spring : " + spring.a.position + "; " + spring.b.position);
+                        }
+                if (mesh.showsprings)
+                {
+                    temp.set(spring.a.position);
+                    temp.add(spring.b.position);
+                    temp.mul(0.5);
+                    temp2.set(spring.a.position);
+                    temp2.sub(spring.b.position);
+                    temp2.mul(spring.restLength/2);
+                    temp.sub(temp2);
+                    gl.glVertex3f((float)temp.x, (float)temp.y, (float)temp.z);
+                    temp.add(temp2);
+                    temp.add(temp2);
+                    gl.glVertex3f((float)temp.x, (float)temp.y, (float)temp.z);
+                }
+
+                    if (spring.isHandle)
+                        continue;
+                    
+                    //if (scale < spring.restLength)
+                        scale += spring.restLength;
+                        count++;
+                }
+                gl.glEnd();
+
+                if (count == 0)
+                    scale = 0.01;
+                else
+                    scale /= count * 3;
+                
+                //scale = 0.25;
+                
+                if (mesh.ShowInfo())
+                {
+                    gl.glLineWidth(4);
+                    for (int s=0; s<Phys.allNodes.size(); s++)
+                    {
+                        cSpring.DynamicNode node = Phys.allNodes.get(s);
+                        if (node.mass == 0)
+                            continue;
+                        
+                        int i = node.springs==null?-1:node.springs.size();
+                        gl.glColor3f((i>>2)&1,(i>>1)&1,i&1);
+                        //temp.set(node.springForce.x, node.springForce.y, node.springForce.z);
+                        //temp.normalize();
+                        //gl.glColor3d((temp.x+1)/2, (temp.y+1)/2, (temp.z+1)/2);
+                        gl.glBegin(gl.GL_LINES);
+                        gl.glVertex3d(node.position.x, node.position.y, node.position.z);
+                        //gl.glVertex3d(node.position.x + node.normal.x*scale, node.position.y + node.normal.y*scale, node.position.z + node.normal.z*scale);
+                        gl.glVertex3d(node.position.x + mesh.bRep.GetVertex(s).norm.x*scale,
+                                node.position.y + mesh.bRep.GetVertex(s).norm.y*scale,
+                                node.position.z + mesh.bRep.GetVertex(s).norm.z*scale);
+                        gl.glEnd();
+                    }
+
+                    gl.glLineWidth(8);
+                    for (int s=0; s<Phys.allNodes.size(); s++)
+                    {
+                        cSpring.DynamicNode node = Phys.allNodes.get(s);
+
+                        if (node.springs != null)
+                        {
+                            for (int i=0; i<node.springs.size(); i+=1)
+                            {
+                                cSpring.DynamicNode f = node.springs.get(i).GetOther(node);
+                                
+                                int c = i+1;
+                           //     c = node.springs.get(i).nbcopies;
+
+                                gl.glColor3f((c>>2)&1,(c>>1)&1,c&1);
+                                gl.glBegin(gl.GL_LINES);
+                                    gl.glVertex3d(node.position.x, node.position.y, node.position.z);
+                                    gl.glVertex3d(f.position.x/3+node.position.x*2/3, f.position.y/3+node.position.y*2/3, f.position.z/3+node.position.z*2/3);
+                                gl.glEnd();
+                            }
+                        }
+                    }
+
+                    gl.glLineWidth(1);
+                }
+                
+                gl.glEnable(gl.GL_LIGHTING);
+        }
+    
     /// INTERFACE
+    
+    public void StartTriangles()
+    {
+         javax.media.opengl.GL gl = GetGL();
+         gl.glBegin(gl.GL_TRIANGLES);
+    }
+    
+    public void EndTriangles()
+    {
+         GetGL().glEnd();
+    }
+    
+    void drawVertex(javax.media.opengl.GL gl, Vertex pv, boolean flipV, 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 SetColor(Object3D obj, Vertex p0)
     {
@@ -1254,18 +1617,18 @@
         //col.getColorComponents(ColorSpace.getInstance(ColorSpace.CS_LINEAR_RGB), CameraPane.modelParams0);
         if (!material.multiply)
         {
-            display.color = color;
+            display.color = material.color;
             display.saturation = material.modulation;
         }
         else
         {
-            display.color *= color*2;
+            display.color *= material.color*2;
             display.saturation *= material.modulation*2;
         }
             
         cColor.HSBtoRGB(display.color, display.saturation, 1, display.modelParams0);
 
-        float[] colorV = GrafreeD.colorV;
+        float[] colorV = Grafreed.colorV;
 
         /**/
         if (display.DrawMode() == display.DEFAULT) // && display.RENDERPROGRAM == 0)
@@ -1777,7 +2140,7 @@
         System.err.println("LIVE = " + Globals.isLIVE());
         
         if (!Globals.isLIVE()) // save sound
-            GrafreeD.savesound = true; // wav.save();
+            Grafreed.savesound = true; // wav.save();
      //   else
             repaint(); // start loop // may 2013
     }
@@ -1810,6 +2173,11 @@
     public void ToggleBoxMode()
     {
         BOXMODE ^= true;
+    }
+
+    public void ToggleZoomBoxMode()
+    {
+        ZOOMBOXMODE ^= true;
     }
 
     public void ToggleSmoothFocus()
@@ -1899,7 +2267,7 @@
 
     void ToggleRandom()
     {
-        RANDOM ^= true;
+        SWITCH ^= true;
     }
 
     void ToggleHandles()
@@ -3838,6 +4206,7 @@
     
     com.sun.opengl.util.texture.Texture CompressTexture2(String name)
     {
+                new Exception().printStackTrace();
         System.exit(0);
         com.sun.opengl.util.texture.Texture texture = null;
 
@@ -7706,12 +8075,16 @@
         {
             String texname = tex;
             
-            String[] split = tex.split("Textures");
-            if (split.length > 1)
-                texname = "/Users/nbriere/Textures" + split[split.length-1];
-            else
-                if (!texname.startsWith("/"))
-                    texname = "/Users/nbriere/Textures/" + texname;
+//            String[] split = tex.split("Textures");
+//            if (split.length > 1)
+//                texname = "/Users/nbriere/Textures" + split[split.length-1];
+//            else
+//                if (!texname.startsWith("/"))
+//                    texname = "/Users/nbriere/Textures/" + texname;
+            if (!new File(tex).exists())
+            {
+                    texname = javax.swing.filechooser.FileSystemView.getFileSystemView().getDefaultDirectory() + "/Textures/" + texname;
+            }
             
             if (CACHETEXTURE)
                 texture = textures.get(texname); // TEXTURE CACHE
@@ -9024,7 +9397,7 @@
             //gl.glFlush();
             gl.glAccum(gl.GL_ACCUM, 1.0f / ACSIZE);
 
-            if (ANIMATION && ABORTED)
+            if (Globals.ANIMATION && ABORTED)
             {
     System.err.println("    ABORTED FRAME");
                 break;
@@ -9054,7 +9427,7 @@
         setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
 
         // save image
-        if (ANIMATION && !ABORTED)
+        if (Globals.ANIMATION && !ABORTED)
         {
             VPwidth = viewport[2];
             VPheight = viewport[3];
@@ -9165,11 +9538,11 @@
             
 //            imagecount++;
             
-            String fullname = filename + (i%100000)/10000 + "" + (i%10000)/1000 + "" + (i%1000)/100 + "" + (i%100)/10 + "" + (i%10) + "." + ext;
+            String fullname = Globals.filename + (i%100000)/10000 + "" + (i%10000)/1000 + "" + (i%1000)/100 + "" + (i%100)/10 + "" + (i%10) + "." + ext;
             
             if (!BOXMODE)
             {
-                System.out.println("image: " + fullname + " (wav cursor=" + (GrafreeD.wav.cursor / 735 / 4) + ")");
+                System.out.println("image: " + fullname + " (wav cursor=" + (Grafreed.wav.cursor / 735 / 4) + ")");
             }
     
             if (!BOXMODE)
@@ -9207,7 +9580,7 @@
             ABORTED = false;
         }
         else
-            GrafreeD.wav.cursor += 735 * ACSIZE;
+            Grafreed.wav.cursor += 735 * ACSIZE;
         
         if (false)
         {
@@ -9870,11 +10243,11 @@
 
     public void display(GLAutoDrawable drawable)
     {
-        if (GrafreeD.savesound && GrafreeD.hassound)
+        if (Grafreed.savesound && Grafreed.hassound)
         {
-            GrafreeD.wav.save();
-            GrafreeD.savesound = false;
-            GrafreeD.hassound = false;
+            Grafreed.wav.save();
+            Grafreed.savesound = false;
+            Grafreed.hassound = false;
         }
 //        if (DEBUG_SELECTION)
 //        {
@@ -10004,7 +10377,7 @@
             Object3D theobject = object;
             Object3D theparent = object.parent;
             object.parent = null;
-            object = (Object3D)GrafreeD.clone(object);
+            object = (Object3D)Grafreed.clone(object);
             object.Stripify();
             if (theobject.selection == null || theobject.selection.Size() == 0)
                 theobject.PreprocessOcclusion(this);
@@ -10889,8 +11262,14 @@
     {
             renderpass++;
 //        System.out.println("Draw object... ");
+        STEP = 1;
         if (FAST) // in case there is no script
-            STEP = 16;
+            STEP = 8;
+            
+        if (CURRENTANTIALIAS == 0 || ACSIZE == 1)
+        {
+            STEP *= 4;
+        }
             
         //object.FullInvariants();
         
@@ -10904,8 +11283,8 @@
             e.printStackTrace();
         }
         
-        if (GrafreeD.RENDERME > 0)
-            GrafreeD.RENDERME--; // mechante magouille
+        if (Grafreed.RENDERME > 0)
+            Grafreed.RENDERME--; // mechante magouille
         
         Globals.ONESTEP = false;
     }
@@ -12228,8 +12607,10 @@
             "MAX ndotl.x, ndotl.x, -ndotl.x;" +
                 
                 "SUB temp.x, one.x, ndotl.x;" +
-                "ADD temp.x, temp.x, options2.z;" + // lightsheen
-                "ADD temp.y, one.y, options2.y;" + // sursurface
+                // Tuning for default skin
+                //"ADD temp.x, temp.x, options2.z;" + // lightsheen
+                "MAD temp.x, options2.z, half.y, temp.x;" + // lightsheen
+                "ADD temp.y, one.y, options2.y;" + // subsurface
                 "MUL temp.x, temp.x, temp.y;" +
                                 
                 "MUL saturation, saturation, temp.xxxx;" +
@@ -13138,7 +13519,7 @@
     public void mousePressed(MouseEvent e)
     {
         //System.out.println("mousePressed: " + e);
-        clickStart(e.getX(), e.getY(), e.getModifiersEx());
+        clickStart(e.getX(), e.getY(), e.getModifiers(), e.getModifiersEx());
     }
 
     static long prevtime = 0;
@@ -13165,6 +13546,7 @@
 	
         //System.err.println("Dtime = " + Dtime + "; units = " + e.getUnitsToScroll() + "; ratio (units/ms) = " + ratio);
             
+        if (BUTTONLESSWHEEL)
 	if (Math.abs(ratio) < 0.1 || Math.abs(Dtime) == 0) // < 30)
 	{
             return;
@@ -13173,7 +13555,7 @@
         boolean capsLocked = Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK);
         
         // TIMER
-        if (!wheeltimer.isRunning() && e.getModifiersEx() == 0 && !capsLocked) // VR
+        if (ZOOMBOXMODE && !wheeltimer.isRunning() && e.getModifiersEx() == 0 && !capsLocked) // VR
         {
             keepboxmode = BOXMODE;
             keepsupport = SUPPORT;
@@ -13213,8 +13595,8 @@
       //      mode |= META;
         //}
         
-        SetMouseMode(WHEEL | e.getModifiersEx());
-        drag(anchorX, anchorY + e.getUnitsToScroll()*8, 0);
+        SetMouseMode(e.getModifiers(), WHEEL | e.getModifiersEx());
+        drag(anchorX, anchorY + e.getUnitsToScroll()*8, 0, 0);
         anchorX = ax;
         anchorY = ay;
         prevX = px;
@@ -13274,6 +13656,10 @@
 //            wasliveok = true;
 //            waslive = false;
             
+            // May 2019 Forget it:
+            if (true)
+                    return;
+            
             // source == timer
             if (mouseDown)
             {
@@ -13312,7 +13698,7 @@
     
     javax.swing.Timer timer = new javax.swing.Timer(350, this);
 
-    void clickStart(int x, int y, int modifiers)
+    void clickStart(int x, int y, int modifiers, int modifiersex)
     {
         if (!wasliveok)
             return;
@@ -13329,7 +13715,7 @@
 //        touched = true; // main DL
         if (isRenderer)
         {
-            SetMouseMode(modifiers);
+            SetMouseMode(modifiers, modifiersex);
         }
 
         selectX = anchorX = x;
@@ -13342,7 +13728,7 @@
         clicked = true;
         hold = false;
 
-        if (((modifiers & ~1024) & ~0) == 0) // Single or multiple selection
+        if (((modifiersex & ~1024) & ~0) == 0) // Single or multiple selection
         // june 2013 means CTRL_CLICK: if (((modifiers & ~1024) & ~128) == 0) // Single or multiple selection
         {
       //  System.out.println("RESTART II " + modifiers);
@@ -13373,7 +13759,7 @@
             info.camera = renderCamera;
             info.x = x;
             info.y = y;
-            info.modifiers = modifiers;
+            info.modifiers = modifiersex;
             editObj = object.doEditClick(info, 0);
             if (!editObj)
             {
@@ -13390,11 +13776,11 @@
     
     public void mouseDragged(MouseEvent e)
     {
+        //System.out.println("mouseDragged: " + e);
         if (isRenderer)
             movingcamera = true;
         //if (drawing)
         //return;
-        //System.out.println("mouseDragged: " + e);
         if ((e.getModifiersEx() & CTRL) != 0
             || (e.getModifiersEx() & COMMAND) != 0) // || IsFrozen())
         {
@@ -13402,7 +13788,7 @@
             clickEnd(e.getX(), e.getY(), e.getModifiersEx());
         }
         else
-            drag(e.getX(), e.getY(), e.getModifiersEx());
+            drag(e.getX(), e.getY(), e.getModifiers(), e.getModifiersEx());
         
     //try { Thread.sleep(1); } catch (Exception ex) {}
     }
@@ -13575,6 +13961,7 @@
         
         public void run()
         {
+                new Exception().printStackTrace();
             System.exit(0);
             for (;;)
             {
@@ -13638,7 +14025,7 @@
                     {
                         Globals.lighttouched = true;
                     }
-                    drag(X, (mouseMode != 0) ? Y : anchorY, MODIFIERS);
+                    drag(X, (mouseMode != 0) ? Y : anchorY, 0, MODIFIERS);
                 }
             //else
             }
@@ -13738,7 +14125,7 @@
     int X, Y;
     boolean SX, SY;
 
-    void drag(int x, int y, int modifiers)
+    void drag(int x, int y, int modifiers, int modifiersex)
     {
         if (IsFrozen())
         {
@@ -13747,17 +14134,17 @@
 
         drag = true; // NEW
         
-        boolean continuous = (modifiers & COMMAND) == COMMAND;
+        boolean continuous = (modifiersex & COMMAND) == COMMAND;
 
         X = x;
         Y = y;
         // floating state for animation
-        MODIFIERS = modifiers;
-        modifiers &= ~1024;
+        MODIFIERS = modifiersex;
+        modifiersex &= ~1024;
         if (false) // modifiers != 0)
         {
             //new Exception().printStackTrace();
-            System.out.println("mouseDragged: " + modifiers);
+            System.out.println("mouseDragged: " + modifiersex);
             System.out.println("SHIFT = " + SHIFT);
             System.out.println("CONTROL = " + COMMAND);
             System.out.println("META = " + META);
@@ -13777,7 +14164,7 @@
                 info.camera = renderCamera;
                 info.x = x;
                 info.y = y;
-                object.editWindow.copy.doEditDrag(info);
+                object.editWindow.copy.doEditDrag(info, (modifiers & MouseEvent.BUTTON3_MASK) != 0);
             } else
             {
                 if (x < startX)
@@ -13929,7 +14316,6 @@
     public void mouseMoved(MouseEvent e)
     {
         //System.out.println("mouseMoved: " + e);
-
         if (isRenderer)
             return;
         
@@ -13977,9 +14363,9 @@
         boolean control = ((modifiers & CTRL) != 0); // june 2013: for point selection
         boolean command = ((modifiers & COMMAND) != 0); // june 2013: for multiple selection
         
-        if (control || command || IsFrozen())
+// No delay        if (control || command || IsFrozen())
             timeout = true;
-        else
+// ?? May 2019        else
        // timer.setDelay((modifiers & 128) != 0?0:350);
         mouseDown = false;
     if (!control && !command) // june 2013
@@ -14089,7 +14475,7 @@
         System.out.println("keyReleased: " + e);
     }
 
-    void SetMouseMode(int modifiers)
+    void SetMouseMode(int modifiers, int modifiersex)
     {
         //System.out.println("SetMouseMode = " + modifiers);
         //modifiers &= ~1024;
@@ -14101,25 +14487,25 @@
         //if (modifiers == 0) // || (modifiers == (1024 | CONTROL)))
         //	return;
         //System.out.println("SetMode = " + modifiers);
-        if ((modifiers & WHEEL) == WHEEL)
+        if ((modifiersex & WHEEL) == WHEEL)
         {
             mouseMode |= ZOOM;
         }
         
         boolean capsLocked = Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK);
-        if (capsLocked || (modifiers & META) == META)
+        if (capsLocked) // || (modifiers & META) == META)
         {
             mouseMode |= VR; // BACKFORTH;
         }
-        if ((modifiers & CTRLCLICK) == CTRLCLICK)
+        if ((modifiersex & CTRLCLICK) == CTRLCLICK)
         {
             mouseMode |= SELECT;
         }
-        if ((modifiers & COMMAND) == COMMAND)
+        if ((modifiersex & COMMAND) == COMMAND)
         {
             mouseMode |= SELECT;
         }
-        if ((modifiers & SHIFT) == SHIFT || forcetranslate)
+        if ((modifiersex & SHIFT) == SHIFT || forcetranslate || (modifiers & MouseEvent.BUTTON3_MASK) != 0)
         {
             mouseMode &= ~VR;
             mouseMode |= TRANSLATE;
@@ -14148,7 +14534,7 @@
 
         if (isRenderer) //
         {
-            SetMouseMode(modifiers);
+            SetMouseMode(0, modifiers);
         }
 
         Globals.theRenderer.keyPressed(key);
@@ -14484,7 +14870,7 @@
                 //RESIZETEXTURE ^= true;
                 //break;
             case 'z':
-                RENDERSHADOW ^= true;
+                Globals.RENDERSHADOW ^= true;
                 Globals.lighttouched = true;
                 repaint();
                 break;
@@ -14608,7 +14994,7 @@
         //mode = ROTATE;
         if ((MODIFIERS & COMMAND) == 0) // VR??
         {
-            SetMouseMode(modifiers);
+            SetMouseMode(0, modifiers);
         }
     }
 
@@ -14742,8 +15128,9 @@
 
     protected void processMouseMotionEvent(MouseEvent e)
     {
-        //System.out.println("processMouseMotionEvent: " + mouseMode);
-        if (e.getButton() == MouseEvent.NOBUTTON && (mouseMode & SELECT) == 0)
+        //System.out.println("processMouseMotionEvent: " + mouseMode + " " + e.getModifiers() + " " + e.getModifiersEx() + " " + e.getButton());
+        //if (e.getButton() == MouseEvent.NOBUTTON && (mouseMode & SELECT) == 0)
+        if ((e.getModifiers() & MouseEvent.BUTTON1_MASK) == 0 && (e.getModifiers() & MouseEvent.BUTTON3_MASK) == 0 && (mouseMode & SELECT) == 0)
         {
             mouseMoved(e);
         } else
@@ -14773,6 +15160,7 @@
 
     void SelectParent()
     {
+                new Exception().printStackTrace();
         System.exit(0);
         Composite group = (Composite) object;
         java.util.Vector selectees = new java.util.Vector(group.selection);
@@ -14796,6 +15184,7 @@
 
     void SelectChildren()
     {
+                new Exception().printStackTrace();
         System.exit(0);
         /*
         Composite group = (Composite) object;
@@ -15178,6 +15567,7 @@
     public boolean mouseDown(Event evt, int x, int y)
     {
         System.out.println("mouseDown: " + evt);
+        System.exit(0);
         /*
         locked = true;
         drag = false;
@@ -15221,7 +15611,7 @@
         {
             keyPressed(0, modifiers);
         }
-        clickStart(x, y, modifiers);
+ //       clickStart(x, y, modifiers);
         return true;
     }
 
@@ -15339,7 +15729,7 @@
         {
             keyReleased(0, 0);
         }
-        drag(x, y, modifiers);
+        drag(x, y, 0, modifiers);
         return true;
     }
 
@@ -15909,6 +16299,7 @@
         {
             if (!selection)
             {
+                new Exception().printStackTrace();
                 System.exit(0);
                 return;
             }
@@ -16036,16 +16427,16 @@
                             System.out.println("; fromto " + sel + " " + Trunk(previousselectedpoint.toParent[3][0]) + " " + Trunk(previousselectedpoint.toParent[3][2]) + " " + Trunk(selectedpoint.toParent[3][0]) + " " + Trunk(selectedpoint.toParent[3][2]));
                         }
                         
-                        previousselectedpoint = (Sphere) GrafreeD.clone(selectedpoint);
+                        previousselectedpoint = (Sphere) Grafreed.clone(selectedpoint);
                     }
                 }
                 
                 if (!movingcamera && !PAINTMODE)
                     object.editWindow.ScreenFitPoint(); // fev 2014
                 
-                if (PAINTMODE && GrafreeD.clipboard.size() == 1) // object.editWindow.copy.selection.Size() > 0)
+                if (PAINTMODE && Grafreed.clipboard.size() == 1) // object.editWindow.copy.selection.Size() > 0)
                 {
-                    Object3D paintobj = GrafreeD.clipboard.get(0); // object.editWindow.copy.selection.elementAt(0);
+                    Object3D paintobj = Grafreed.clipboard.get(0); // object.editWindow.copy.selection.elementAt(0);
                     
                     Object3D group = new Object3D("inst" + paintcount++);
                     
@@ -16201,7 +16592,7 @@
                 gl.glDisable(gl.GL_CULL_FACE);
             }
 
-            if (!RENDERSHADOW)
+            if (!Globals.RENDERSHADOW)
                 gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
 
             // SB gl.glPolygonOffset(2.5f, 10);
@@ -16211,7 +16602,7 @@
             //gl.glColorMask(false, false, false, false);
 
             //render_scene_from_light_view(gl, drawable, 0, 0);
-            if (RENDERSHADOW && Globals.lighttouched && !movingcamera) // && !parent.IsFreezed())
+            if (Globals.RENDERSHADOW && Globals.lighttouched && !movingcamera) // && !parent.IsFreezed())
             {
                 gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
 
@@ -16695,10 +17086,11 @@
     static IntBuffer textbuffer = null; // IntBuffer.allocate(TEXT_WIDTH*8*8 * TEXT_HEIGHT);
     // Depth buffer format
     //private int depth_format;
-    static public void NextIndex(Object3D o, GL gl)
+    
+    public void NextIndex()
     {
         indexcount+=16;
-        gl.glColor3d(((indexcount >>> 16) & 255) / 255.0, ((indexcount >>> 8) & 255) / 255.0, ((indexcount) & 255) / 255.0);
+        GetGL().glColor3d(((indexcount >>> 16) & 255) / 255.0, ((indexcount >>> 8) & 255) / 255.0, ((indexcount) & 255) / 255.0);
     //objects[indexcount] = o;
     //System.out.println("indexcount = " + indexcount);
     }

--
Gitblit v1.6.2