From 6ed65dcb597fb2153cef75bf1845978f1115658c Mon Sep 17 00:00:00 2001
From: Normand Briere <nbriere@noware.ca>
Date: Fri, 14 Dec 2018 22:53:55 -0500
Subject: [PATCH] Repair shadow, normal push + attractor mesh.

---
 ObjEditor.java |  270 ++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 201 insertions(+), 69 deletions(-)

diff --git a/ObjEditor.java b/ObjEditor.java
index 228f57c..f7c8293 100644
--- a/ObjEditor.java
+++ b/ObjEditor.java
@@ -28,6 +28,8 @@
         iSendInfo
 //KeyListener
 {
+        boolean timeline;
+        boolean wasFullScreen;
 
     // SCRIPT
     
@@ -158,12 +160,16 @@
         objEditor.ctrlPanel.remove(slowerButton);
         objEditor.ctrlPanel.remove(fasterButton);
         objEditor.ctrlPanel.remove(remarkButton);
+        
+        Remove(normalpushField);
     }
 
     public ObjEditor GetEditor()
     {
         return objEditor; //.GetEditor();
     }
+    
+    // Sometimes myself, sometimes my callee's.
     ObjEditor objEditor;
 
     /*
@@ -238,7 +244,7 @@
         //if (!isDisplayable())
         //setUndecorated(true);
 
-        System.out.println("getFullScreenWindow? " + gd.getFullScreenWindow());
+        //System.out.println("getFullScreenWindow? " + gd.getFullScreenWindow());
         client = inClient;
         copy = localCopy;
         copy.editWindow = this;
@@ -292,9 +298,11 @@
         //normalLensItem.addActionListener(this);
         cameraMenu.add(revertCameraItem = new MenuItem("Revert Camera"));
         revertCameraItem.addActionListener(this);
-        cameraMenu.add(toggleFullItem = new CheckboxMenuItem("Full Screen"));
-        toggleFullItem.addItemListener(this);
-        toggleFullItem.setState(CameraPane.FULLSCREEN);
+        cameraMenu.add(toggleTimelineItem = new CheckboxMenuItem("Timeline"));
+        toggleTimelineItem.addItemListener(this);
+        cameraMenu.add(toggleFullScreenItem = new CheckboxMenuItem("Full Screen"));
+        toggleFullScreenItem.addItemListener(this);
+        toggleFullScreenItem.setState(CameraPane.FULLSCREEN);
         cameraMenu.add("-");
         cameraMenu.add(toggleTextureItem = new CheckboxMenuItem("Texture"));
         toggleTextureItem.addItemListener(this);
@@ -522,18 +530,18 @@
                     maxima.y = sel.toParent[3][1];
                     maxima.z = sel.toParent[3][2];
                     si.SendInfo("    Orig: " + maxima, "regular");
-                    maxima.x = sel.globalTransform[3][0];
-                    maxima.y = sel.globalTransform[3][1];
-                    maxima.z = sel.globalTransform[3][2];
-        if (full)
-            si.SendInfo("    Global Orig: " + maxima, "regular");
                     maxima.x = sel.toParent[0][0];
                     maxima.y = sel.toParent[1][1];
                     maxima.z = sel.toParent[2][2];
                     si.SendInfo("    Scale: " + maxima, "regular");
-                    maxima.x = sel.globalTransform[0][0];
-                    maxima.y = sel.globalTransform[1][1];
-                    maxima.z = sel.globalTransform[2][2];
+        maxima.x = sel.globalTransform[3][0];
+        maxima.y = sel.globalTransform[3][1];
+        maxima.z = sel.globalTransform[3][2];
+        if (full)
+            si.SendInfo("    Global Orig: " + maxima, "regular");
+        maxima.x = sel.globalTransform[0][0];
+        maxima.y = sel.globalTransform[1][1];
+        maxima.z = sel.globalTransform[2][2];
         if (full)
             si.SendInfo("    Global Scale: " + maxima, "regular");
                 }
@@ -593,6 +601,22 @@
             System.err.println("Couldn't insert initial text into text pane.");
         }
     }
+
+        void ToggleFullScreen()
+        {
+                if (CameraPane.FULLSCREEN)
+                {
+                    frame.getContentPane().remove(/*"Center",*/bigThree);
+                    framePanel.add(bigThree);
+                    frame.getContentPane().add(/*"Center",*/framePanel);
+                } else
+                {
+                    frame.getContentPane().remove(/*"Center",*/framePanel);
+                    framePanel.remove(bigThree);
+                    frame.getContentPane().add(/*"Center",*/bigThree);
+                }
+                cameraView.ToggleFullScreen();
+        }
 
     private JTextArea createTextPane()
     {
@@ -794,7 +818,7 @@
 
         aConstraints.fill = GridBagConstraints.VERTICAL;
         jlabel.setHorizontalAlignment(SwingConstants.TRAILING);
-        aConstraints.gridwidth = 2;
+        aConstraints.gridwidth = 1;
         ctrlPanel.add(jlabel, aConstraints); //, oe.ctrlPanel.getComponentCount()-1);
         aConstraints.gridx += 1;
         aConstraints.fill = GridBagConstraints.HORIZONTAL;
@@ -963,6 +987,9 @@
 
         Return();
 
+    normalpushField = AddSlider(oe.ctrlPanel, "Push", -10, 10, 0, -1);
+    Return();
+            
 //	oe.ctrlPanel.add(stepButton = new cButton("Step"), ObjEditor.aConstraints, oe.ctrlPanel.getComponentCount() - 2);
 //        ObjEditor.aConstraints.gridx += 1;
 
@@ -1158,10 +1185,14 @@
         //JPanel worldPanel =
         //		new gov.nasa.worldwind.examples.ApplicationTemplate.AppPanel(null, true);
         //worldPanel.setName("World");
-		/*JPanel*/ cameraPanel =
-                new JPanel(new BorderLayout());
-        cameraPanel.add(cameraView);
+	centralPanel = new JPanel(new BorderLayout());
+	timelinePanel = new JPanel(new BorderLayout());
+        timelineMenubar = new timeflow.app.TimeflowApp().TimeFlowWindow(timelinePanel);
 
+        centralPanel.add(cameraView);
+        //frame.setJMenuBar(timelineMenubar);
+        //centralPanel.add(timelinePanel);
+        
         //topView.camera = ;
         //frontView.camera = new Camera(2);
         //sideView.camera = new Camera(3);
@@ -1191,7 +1222,7 @@
         gridPanel.add(cameraView);
         gridPanel.add(XYZPanel);
          */
-        gridPanel = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, cameraPanel, XYZPanel); //new BorderLayout());
+        gridPanel = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, centralPanel, XYZPanel); //new BorderLayout());
         gridPanel.setContinuousLayout(true);
         gridPanel.setOneTouchExpandable(true);
         gridPanel.setDividerLocation(1.0);
@@ -1244,15 +1275,15 @@
         scrollpane.setWheelScrollingEnabled(true);
         scrollpane.addMouseWheelListener(this); // Default not fast enough
 
-        /*JTabbedPane*/ jtp = new JTabbedPane();
-        jtp.add(scrollpane);
+        /*JTabbedPane*/ scenePanel = new JTabbedPane();
+        scenePanel.add(scrollpane);
 
-        jtp.add(FSPane = new cFileSystemPane(this));
+        scenePanel.add(FSPane = new cFileSystemPane(this));
 
         optionsPanel = new JPanel(new GridBagLayout());
 
         optionsPanel.setName("Options");
-        jtp.add(optionsPanel);
+        scenePanel.add(optionsPanel);
 
 
         /*
@@ -1275,7 +1306,7 @@
         jtp.add(tree);
          */
 
-        bigPanel = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, jtp, gridPanel);
+        bigPanel = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, scenePanel, gridPanel);
         bigPanel.setContinuousLayout(true);
         bigPanel.setOneTouchExpandable(true);
         bigPanel.setDividerLocation(0.8);
@@ -1297,13 +1328,13 @@
         aWindowConstraints.fill = GridBagConstraints.VERTICAL;
         aWindowConstraints.weightx = 0;
         aWindowConstraints.weighty = 1;
-        bigThree.add(jtp, aWindowConstraints);
+        bigThree.add(scenePanel, aWindowConstraints);
         aWindowConstraints.weightx = 1;
         aWindowConstraints.gridwidth = 3;
         //	aConstraints.gridheight = 3;
         aWindowConstraints.gridx = 1;
         aWindowConstraints.fill = GridBagConstraints.BOTH;
-        bigThree.add(cameraPanel, aWindowConstraints);
+        bigThree.add(centralPanel, aWindowConstraints);
         aWindowConstraints.weightx = 0;
         aWindowConstraints.gridx = 4;
         aWindowConstraints.gridwidth = 1;
@@ -1422,7 +1453,7 @@
         aConstraints.gridx += 1;
         aConstraints.gridwidth = ObjEditor.GRIDWIDTH;
         //aConstraints.weightx = 0;
-        ctrlPanel.add(colorField = new NumberSlider(0.001, 1, -0.1), aConstraints);
+        ctrlPanel.add(colorField = new NumberSlider(0.001, 1, -0.5), aConstraints);
         aConstraints.gridx = 0;
         aConstraints.gridy += 1;
         aConstraints.gridwidth = 1;
@@ -1432,7 +1463,7 @@
         aConstraints.fill = GridBagConstraints.HORIZONTAL;
         aConstraints.gridx += 1;
         aConstraints.gridwidth = ObjEditor.GRIDWIDTH;
-        ctrlPanel.add(modulationField = new NumberSlider(0.001, 1, -0.1), aConstraints);
+        ctrlPanel.add(modulationField = new NumberSlider(0.001, 1, -0.5), aConstraints);
         aConstraints.gridx = 0;
         aConstraints.gridy += 1;
         aConstraints.gridwidth = 1;
@@ -1442,7 +1473,7 @@
         aConstraints.fill = GridBagConstraints.HORIZONTAL;
         aConstraints.gridx += 1;
         aConstraints.gridwidth = ObjEditor.GRIDWIDTH;
-        ctrlPanel.add(textureField = new NumberSlider(0.001, 1, -0.1), aConstraints);
+        ctrlPanel.add(textureField = new NumberSlider(0.001, 1, -0.5), aConstraints);
         aConstraints.gridx = 0;
         aConstraints.gridy += 1;
         aConstraints.gridwidth = 1;
@@ -1452,7 +1483,7 @@
         aConstraints.fill = GridBagConstraints.HORIZONTAL;
         aConstraints.gridx += 1;
         aConstraints.gridwidth = ObjEditor.GRIDWIDTH;
-        ctrlPanel.add(anisoField = new NumberSlider(0.001, 1, -0.1), aConstraints);
+        ctrlPanel.add(anisoField = new NumberSlider(0.001, 1, -0.5), aConstraints);
         aConstraints.gridx = 0;
         aConstraints.gridy += 1;
         aConstraints.gridwidth = 1;
@@ -1462,7 +1493,7 @@
         aConstraints.fill = GridBagConstraints.HORIZONTAL;
         aConstraints.gridx += 1;
         aConstraints.gridwidth = ObjEditor.GRIDWIDTH;
-        ctrlPanel.add(anisoVField = new NumberSlider(0.001, 1, -0.1), aConstraints);
+        ctrlPanel.add(anisoVField = new NumberSlider(0.001, 1, -0.5), aConstraints);
         aConstraints.gridx = 0;
         aConstraints.gridy += 1;
         aConstraints.gridwidth = 1;
@@ -1531,7 +1562,7 @@
         aConstraints.fill = GridBagConstraints.HORIZONTAL;
         aConstraints.gridx += 1;
         aConstraints.gridwidth = ObjEditor.GRIDWIDTH;
-        ctrlPanel.add(subsurfaceField = new NumberSlider(0.001, 1, -0.1), aConstraints);
+        ctrlPanel.add(subsurfaceField = new NumberSlider(0.001, 1, -0.5), aConstraints);
         aConstraints.gridx = 0;
         aConstraints.gridy += 1;
         aConstraints.gridwidth = 1;
@@ -1600,7 +1631,7 @@
         aConstraints.fill = GridBagConstraints.HORIZONTAL;
         aConstraints.gridx += 1;
         aConstraints.gridwidth = ObjEditor.GRIDWIDTH;
-        ctrlPanel.add(metalnessField = new NumberSlider(0.001, 1, -0.1), aConstraints);
+        ctrlPanel.add(metalnessField = new NumberSlider(0.001, 1, -0.5), aConstraints);
         aConstraints.gridx = 0;
         aConstraints.gridy += 1;
         aConstraints.gridwidth = 1;
@@ -1671,7 +1702,7 @@
         aConstraints.fill = GridBagConstraints.HORIZONTAL;
         aConstraints.gridx += 1;
         aConstraints.gridwidth = ObjEditor.GRIDWIDTH;
-        ctrlPanel.add(opacityField = new NumberSlider(0.001, 1, -0.1), aConstraints);
+        ctrlPanel.add(opacityField = new NumberSlider(0.001, 1, -0.5), aConstraints);
         aConstraints.gridx = 0;
         aConstraints.gridy += 1;
         aConstraints.gridwidth = 1;
@@ -1859,19 +1890,21 @@
             }
 
             // Images/textures
-            if (textures
-                    && (filename.toLowerCase().endsWith(".jpg")
-                    || filename.toLowerCase().endsWith(".jpeg")
-                    || filename.toLowerCase().endsWith(".gif")
-                    || filename.toLowerCase().endsWith(".png")
-                    || filename.toLowerCase().endsWith(".tre")
-                    || filename.toLowerCase().endsWith(".bmp")
-                    || filename.toLowerCase().endsWith(".tga")
-                    || filename.toLowerCase().endsWith(".sgi")
-                    || filename.toLowerCase().endsWith(".tif")
-                    || filename.toLowerCase().endsWith(".tiff")))
+            if (filename.toLowerCase().endsWith(".jpg")
+                || filename.toLowerCase().endsWith(".jpeg")
+                || filename.toLowerCase().endsWith(".gif")
+                || filename.toLowerCase().endsWith(".png")
+                || filename.toLowerCase().endsWith(".tre")
+                || filename.toLowerCase().endsWith(".bmp")
+                || filename.toLowerCase().endsWith(".tga")
+                || filename.toLowerCase().endsWith(".sgi")
+                || filename.toLowerCase().endsWith(".tif")
+                || filename.toLowerCase().endsWith(".tiff"))
             {
-                DropTexture(filename);
+                if (textures)
+                    DropTexture(filename);
+                else
+                    CreateBillboard(filename);
                 continue;
             }
 
@@ -1880,6 +1913,60 @@
         }
 
         ResetModel();
+    }
+    
+    void CreateBillboard(String filename)
+    {
+        Object3D source = null;
+        Object3D group = copy;
+
+        if (group.selection.size() > 0)
+        {
+            source = group.selection.get(0);
+        }
+
+        Grid grid = new Grid(1,1);
+        grid.material = null;
+        
+        grid.toParent = LA.newMatrix();
+        grid.fromParent = LA.newMatrix();
+        LA.matYRotate(grid.toParent, Math.PI/2);
+        LA.matXRotate(grid.toParent, -Math.PI/2);
+        LA.matXRotate(grid.fromParent, Math.PI/2);
+        LA.matYRotate(grid.fromParent, -Math.PI/2);
+        
+        BillboardNode bb = new BillboardNode();
+        bb.addChild(grid);
+        
+        Object3D newgroup = new Object3D();
+        newgroup.CreateMaterial();
+        
+        File file = new File(filename);
+        newgroup.name = file.getName();
+        newgroup.addChild(bb);
+        
+        Object3D main = newgroup;
+        
+        main.SetPigmentTexture(filename);
+        
+        if (source != null)
+        {
+            main.material = new cMaterial(source.material);
+            if (main.projectedVertices.length < source.projectedVertices.length)
+            {
+                main.projectedVertices = new Object3D.cVector2[source.projectedVertices.length];
+            }
+            
+            for (int i=0; i<source.projectedVertices.length; i++)
+            {
+                main.projectedVertices[i].x = source.projectedVertices[i].x;
+                main.projectedVertices[i].y = source.projectedVertices[i].y;
+            }
+            
+            main.texres = source.texres;
+        }
+        
+        makeSomething(newgroup, false);
     }
     
     Point location;
@@ -2138,6 +2225,8 @@
             {
                 Mocap sel = (Mocap) copy.selection.get(0);
 
+                sel.SetCurrentBones(sel.frame);
+            
                 sel.fullname = fullname;
 
                 if (changename)
@@ -2151,14 +2240,18 @@
                 sel.smoothed = false;
 
                 //    if (!changename)
-                sel.SetPositionDelta(false, true, true, true/*?*/); // false
+                //sel.SetPositionDelta(false, true, true, true/*?*/); // false
+                sel.SetGlobalTransform();
+                sel.LoadData();
+                sel.Rewind();
+                sel.Fade();
                 //                sel.setPose(0);
                 refreshContents();
             } else
             {
                 mocap.Reset();
                 // new skeleton
-                makeSomething(mocap, false); // true);
+                makeSomething(mocap, true); // true);
             }
         } catch (Exception e)
         {
@@ -2185,6 +2278,8 @@
         {
             Mocap sel = (Mocap) select;
 
+            sel.SetCurrentBones(sel.frame);
+            
             File file = new File(fullname);
 
             //       Mocap mocap = new Mocap("Mocap" + file.getName());
@@ -2251,7 +2346,11 @@
 
             if (!changename)
             {
-                sel.SetPositionDelta(false, true, true, true/*?*/);
+                //sel.SetPositionDelta(false, true, true, true/*?*/);
+                sel.SetGlobalTransform();
+                sel.LoadData();
+                sel.Rewind();
+                sel.Fade();
             }
 
             //          sel.setPose(0);
@@ -2890,20 +2989,36 @@
             // june 2013           copy.HardTouch();
             cameraView.repaint();
             return;
-        } else if (event.getSource() == toggleFullItem)
+        } else if (event.getSource() == toggleTimelineItem)
         {
-            if (CameraPane.FULLSCREEN)
+            timeline ^= true;
+
+            if (timeline)
             {
-                frame.getContentPane().remove(/*"Center",*/bigThree);
-                framePanel.add(bigThree);
-                frame.getContentPane().add(/*"Center",*/framePanel);
-            } else
-            {
-                frame.getContentPane().remove(/*"Center",*/framePanel);
-                frame.getContentPane().add(/*"Center",*/bigThree);
+                centralPanel.remove(cameraView);
+                centralPanel.add(timelinePanel);
+                frame.setJMenuBar(timelineMenubar);
+                wasFullScreen = CameraPane.FULLSCREEN;
+                if (!CameraPane.FULLSCREEN)
+                    ToggleFullScreen();
+                toggleFullScreenItem.setEnabled(false);
             }
+            else
+            {
+                centralPanel.remove(timelinePanel);
+                centralPanel.add(cameraView);
+                frame.setJMenuBar(null);
+                if (!wasFullScreen)
+                    ToggleFullScreen();
+                toggleFullScreenItem.setEnabled(true);
+            }
+
             frame.validate();
-            cameraView.ToggleFullScreen();
+            return;
+        } else if (event.getSource() == toggleFullScreenItem)
+        {
+            ToggleFullScreen();
+            frame.validate();
 
             return;
         } else if (event.getSource() == toggleRandomItem)
@@ -3152,9 +3267,9 @@
             cameraView.RevertCamera();
             cameraView.repaint();
             return;
-        } else if (event.getSource() == textureButton)
-        {
-            return; // true;
+//        } else if (event.getSource() == textureButton)
+//        {
+//            return; // true;
         } else // combos...
         if (event.getSource() == texresMenu)
         {
@@ -3441,7 +3556,13 @@
             //System.out.println("PARENT = " + parent);
             //if (parent != null)
             //	parent.applySelf();
-            refreshContents();
+		if (e.getSource() == normalpushField)
+		{
+			objEditor.refreshContents();
+			//Refresh();
+		}
+		else
+                    refreshContents();
             // ??? client.refreshEditWindow();
         }
         //else
@@ -3453,7 +3574,7 @@
         //group.name = nameField.getText();
         //objEditor.applySelf();
 
-        assert (objEditor == this);
+        // OCT2018: assert (objEditor == this);
         if (copy.selection == null || copy.selection.size() == 0)
 			//super.applySelf()
                                 ; else
@@ -3477,12 +3598,18 @@
                 objEditor.copy = keep;
             }
         }
+        
+        if (normalpushField != null)
+                copy.NORMALPUSH = (float)normalpushField.getFloat()/1000;
     }
 
         void SnapObject()
         {
-            Object3D obj = (Object3D)copy.selection.elementAt(0);
-            SnapObject(obj);
+            if (copy.selection.size() > 0)
+            {
+                    Object3D obj = (Object3D)copy.selection.elementAt(0);
+                    SnapObject(obj);
+            }
         }
         
         void SnapObject(Object3D obj)
@@ -3596,7 +3723,7 @@
 
         if (obj.parent != null)
         {
-            obj.parent.TransformToWorld(interest);
+//            obj.parent.TransformToWorld(interest);
         }
 
         if (!CameraPane.TRACK)
@@ -4376,7 +4503,8 @@
     MenuItem revertCameraItem;
     CheckboxMenuItem toggleLiveItem;
     MenuItem stepItem;
-    CheckboxMenuItem toggleFullItem;
+    CheckboxMenuItem toggleFullScreenItem;
+    CheckboxMenuItem toggleTimelineItem;
     CheckboxMenuItem toggleRenderItem;
     CheckboxMenuItem toggleDebugItem;
     CheckboxMenuItem toggleFrustumItem;
@@ -4403,11 +4531,13 @@
     JSplitPane gridPanel;
     JSplitPane bigPanel;
     JPanel bigThree;
-    JTabbedPane jtp;
-    JPanel cameraPanel;
+    JTabbedPane scenePanel;
+    JPanel centralPanel;
+    JPanel timelinePanel;
+    JMenuBar timelineMenubar;
     JSplitPane framePanel;
     JTextArea/*Field*/ nameField;
-    cButton textureButton;
+    //cButton textureButton;
     cButton okButton;
     cButton applyButton;
     cButton cancelButton;
@@ -4515,4 +4645,6 @@
     NumberSlider opacityPowerField;
     JTree jTree;
     //ObjectUI parent;
+    
+    NumberSlider normalpushField;
 }

--
Gitblit v1.6.2