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.