Author: paperwing
Date: 2012-03-06 09:02:49 -0800 (Tue, 06 Mar 2012)
New Revision: 28439

Added:
   
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/input/LightMovementInputHandler.java
Modified:
   
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/data/LightingData.java
   
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/input/BirdsEyeInputProcessor.java
   
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/input/MainInputProcessor.java
Log:
Added not-yet-complete class to handle light drag movement; changed how 
InputHandlers are stored in InputProcessor classes to be able to quickly call 
all InputHandlers in order

Modified: 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/data/LightingData.java
===================================================================
--- 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/data/LightingData.java
        2012-03-06 16:10:11 UTC (rev 28438)
+++ 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/data/LightingData.java
        2012-03-06 17:02:49 UTC (rev 28439)
@@ -1,5 +1,6 @@
 package org.cytoscape.paperwing.internal.data;
 
+import org.cytoscape.paperwing.internal.geometric.Vector3;
 import org.cytoscape.paperwing.internal.lighting.Light;
 
 /**
@@ -13,6 +14,32 @@
        /** The array of lights present in the scene */
        private Light[] lights;
        
+       /** The previous projected position of lights used for drag-moving 
lights */
+       private Vector3[] lightPreviousProjections;
+       
+       /** The current projected position of lights used for drag-moving 
lights */
+       private Vector3[] lightCurrentProjections;
+
+       /** The projected distance of a light 
+       
+       /**
+        * Create a default {@link LightingData} object with default lights, 
all turned off.
+        */
+       public LightingData() {
+               lights = new Light[NUM_LIGHTS];
+               
+               lightPreviousProjections = new Vector3[NUM_LIGHTS];
+               lightCurrentProjections = new Vector3[NUM_LIGHTS];
+               
+               for (int i = 0; i < NUM_LIGHTS; i++) {
+                       lights[i] = new Light();
+                       
+                       lightPreviousProjections[i] = new Vector3();
+                       lightCurrentProjections[i] = new Vector3();
+               }
+               
+       }
+       
        /** 
         * Obtain the light with the given index 
         * 
@@ -31,13 +58,7 @@
                return lights;
        }
        
-       /**
-        * Create a default {@link LightingData} object with default lights, 
all turned off.
-        */
-       public LightingData() {
-               lights = new Light[NUM_LIGHTS];
-               for (int i = 0; i < NUM_LIGHTS; i++) {
-                       lights[i] = new Light();
-               }
-       }
+       
+       
+       
 }

Modified: 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/input/BirdsEyeInputProcessor.java
===================================================================
--- 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/input/BirdsEyeInputProcessor.java
     2012-03-06 16:10:11 UTC (rev 28438)
+++ 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/input/BirdsEyeInputProcessor.java
     2012-03-06 17:02:49 UTC (rev 28439)
@@ -1,19 +1,31 @@
 package org.cytoscape.paperwing.internal.input;
 
+import java.util.LinkedList;
+import java.util.List;
+
 import org.cytoscape.paperwing.internal.data.GraphicsData;
 
 public class BirdsEyeInputProcessor implements InputProcessor {
 
-       private InputHandler boundsInputHandler = new BoundsInputHandler();
+       /** The list of InputHandler objects used by this InputProcessor */
+       private List<InputHandler> inputHandlers;
        
-       @Override
+       public BirdsEyeInputProcessor() {
+               inputHandlers = new LinkedList<InputHandler>();
+       
+               // Populate the list of InputHandler objects to be used by this 
InputProcessor.
+               // The InputHandler objects are called in the order that they 
are added.
+               inputHandlers.add(new BoundsInputHandler());
+       }
+       
        public void processInput(KeyboardMonitor keys, MouseMonitor mouse,
                        GraphicsData graphicsData) {
                
-               boundsInputHandler.processInput(keys, mouse, graphicsData);
-
+               for (InputHandler inputHandler : inputHandlers) {
+                       inputHandler.processInput(keys, mouse, graphicsData);
+               }
+               
                keys.update();
                mouse.update();
        }
-
 }

Added: 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/input/LightMovementInputHandler.java
===================================================================
--- 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/input/LightMovementInputHandler.java
                          (rev 0)
+++ 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/input/LightMovementInputHandler.java
  2012-03-06 17:02:49 UTC (rev 28439)
@@ -0,0 +1,71 @@
+package org.cytoscape.paperwing.internal.input;
+
+import org.cytoscape.paperwing.internal.data.GraphicsData;
+import org.cytoscape.paperwing.internal.data.GraphicsSelectionData;
+import org.cytoscape.paperwing.internal.data.LightingData;
+import org.cytoscape.paperwing.internal.geometric.Vector3;
+import org.cytoscape.paperwing.internal.tools.GeometryToolkit;
+import org.cytoscape.paperwing.internal.tools.NetworkToolkit;
+import org.cytoscape.paperwing.internal.tools.SimpleCamera;
+
+import com.jogamp.newt.event.KeyEvent;
+import com.jogamp.newt.event.MouseEvent;
+
+/**
+ * An {@link InputHandler} capable of handling input related to movement of 
the various scene lights.
+ */
+public class LightMovementInputHandler implements InputHandler {
+       
+       // TODO: Move to LightingData
+       private Vector3 previousMouseProjection;
+       private Vector3 currentMouseProjection;
+       
+       public LightMovementInputHandler() {
+               previousMouseProjection = new Vector3();
+               currentMouseProjection = new Vector3();
+       }
+       
+       @Override
+       public void processInput(KeyboardMonitor keys, MouseMonitor mouse,
+                       GraphicsData graphicsData) {
+               
+               processLightMovement(keys, mouse, graphicsData);
+       }
+       
+       // Movement would be similar to dragging of nodes
+       private void processLightMovement(KeyboardMonitor keys, 
+                       MouseMonitor mouse, GraphicsData graphicsData) {
+               
+               LightingData lightingData = graphicsData.getLightingData();
+               SimpleCamera camera = graphicsData.getCamera();
+               
+               // Currently attempts to move only the light at index 0
+               float[] lightPosition = lightingData.getLight(0).getPosition();
+               Vector3 lightCurrentPosition = new Vector3(lightPosition[0], 
lightPosition[1], lightPosition[2]);
+               
+               lightCurrentPosition.divideLocal(lightPosition[3]); // Since 
lightPosition contains homogenous coordinates, perform division
+               
+               double mouseProjectionDistance = 
GeometryToolkit.findOrthogonalDistance(
+                               camera.getPosition(), lightCurrentPosition, 
camera.getDirection());
+               
+               // Capture mouse position
+               if (mouse.getPressed().contains(MouseEvent.BUTTON2)) {
+                       
+                       previousMouseProjection.set(
+                                       GeometryToolkit.convertMouseTo3d(mouse, 
graphicsData, mouseProjectionDistance));
+               }
+               
+               // Capture new mouse position and use displacement to move 
lights
+               if (mouse.hasMoved() 
+                               && mouse.getHeld().contains(MouseEvent.BUTTON2)
+                               && keys.getHeld().contains(KeyEvent.VK_SHIFT)) {
+                       
+                       currentMouseProjection.set(
+                                       GeometryToolkit.convertMouseTo3d(mouse, 
graphicsData, mouseProjectionDistance));
+                       
+                       Vector3 displacement = 
currentMouseProjection.subtract(previousMouseProjection);
+                       
+                       
+               }
+       }
+}


Property changes on: 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/input/LightMovementInputHandler.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Modified: 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/input/MainInputProcessor.java
===================================================================
--- 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/input/MainInputProcessor.java
 2012-03-06 16:10:11 UTC (rev 28438)
+++ 
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/input/MainInputProcessor.java
 2012-03-06 17:02:49 UTC (rev 28439)
@@ -1,22 +1,35 @@
 package org.cytoscape.paperwing.internal.input;
 
+import java.util.LinkedList;
+import java.util.List;
+
 import org.cytoscape.paperwing.internal.data.GraphicsData;
 
 public class MainInputProcessor implements InputProcessor {
        
-       private InputHandler cameraInputHandler = new CameraInputHandler();
-       private InputHandler dragMovementInputHandler = new 
DragMovementInputHandler();
-       private InputHandler selectionInputHandler = new 
SelectionInputHandler();
-       private InputHandler networkChangeInputHandler = new 
NetworkChangeInputHandler();
+       /** The list of InputHandler objects used by this InputProcessor */
+       private List<InputHandler> inputHandlers;
        
+       public MainInputProcessor() {
+               inputHandlers = new LinkedList<InputHandler>();
+       
+               // Populate the list of InputHandler objects to be used by this 
InputProcessor.
+               // The InputHandler objects are called in the order that they 
are added.
+               inputHandlers.add(new CameraInputHandler());
+               inputHandlers.add(new DragMovementInputHandler());
+               inputHandlers.add(new SelectionInputHandler());
+               inputHandlers.add(new NetworkChangeInputHandler());
+       
+               inputHandlers.add(new LightMovementInputHandler());
+       }
+       
        public void processInput(KeyboardMonitor keys, MouseMonitor mouse,
                        GraphicsData graphicsData) {
-
-               cameraInputHandler.processInput(keys, mouse, graphicsData);
-               dragMovementInputHandler.processInput(keys, mouse, 
graphicsData);
-               selectionInputHandler.processInput(keys, mouse, graphicsData);
-               networkChangeInputHandler.processInput(keys, mouse, 
graphicsData);
                
+               for (InputHandler inputHandler : inputHandlers) {
+                       inputHandler.processInput(keys, mouse, graphicsData);
+               }
+               
                keys.update();
                mouse.update();
        }

-- 
You received this message because you are subscribed to the Google Groups 
"cytoscape-cvs" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/cytoscape-cvs?hl=en.

Reply via email to