Author: paperwing
Date: 2012-01-03 11:05:27 -0800 (Tue, 03 Jan 2012)
New Revision: 27900
Modified:
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/CyActivator.java
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/Graphics.java
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/coordinator/BirdsEyeCoordinatorProcessor.java
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/coordinator/MainCoordinatorProcessor.java
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/coordinator/ViewingCoordinator.java
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/geometric/Quadrilateral.java
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/input/BoundsInputHandler.java
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/rendering/RenderBoundingBoxProcedure.java
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/utility/GraphicsUtility.java
Log:
updated bird's eye view, fixed bounding box movement to more accurately
represent where the mouse is
Modified:
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/CyActivator.java
===================================================================
---
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/CyActivator.java
2012-01-02 22:42:25 UTC (rev 27899)
+++
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/CyActivator.java
2012-01-03 19:05:27 UTC (rev 27900)
@@ -24,27 +24,27 @@
CyServiceRegistrar.class);
WindVisualLexicon windVisualLexicon = new WindVisualLexicon();
- WindMainRenderingEngineFactory windRenderingEngineFactory = new
WindMainRenderingEngineFactory(
+ WindMainRenderingEngineFactory windMainRenderingEngineFactory =
new WindMainRenderingEngineFactory(
cyNetworkViewManagerRef,
cyRenderingEngineManagerRef,
windVisualLexicon, cyServiceRegistrarRef);
- WindBirdsEyeRenderingEngineFactory
windMapRenderingEngineFactory = new WindBirdsEyeRenderingEngineFactory(
+ WindBirdsEyeRenderingEngineFactory
windBirdsEyeRenderingEngineFactory = new WindBirdsEyeRenderingEngineFactory(
cyNetworkViewManagerRef,
cyRenderingEngineManagerRef,
windVisualLexicon, cyServiceRegistrarRef);
- Properties windRenderingEngineFactoryProps = new Properties();
- windRenderingEngineFactoryProps.setProperty("serviceType",
+ Properties windMainRenderingEngineFactoryProps = new
Properties();
+ windMainRenderingEngineFactoryProps.setProperty("serviceType",
"presentationFactory");
- windRenderingEngineFactoryProps.setProperty("id", "wind");
- registerService(bc, windRenderingEngineFactory,
- RenderingEngineFactory.class,
windRenderingEngineFactoryProps);
+ windMainRenderingEngineFactoryProps.setProperty("id", "wind");
+ registerService(bc, windMainRenderingEngineFactory,
+ RenderingEngineFactory.class,
windMainRenderingEngineFactoryProps);
- Properties windMapRenderingEngineFactoryProps = new
Properties();
- windMapRenderingEngineFactoryProps.setProperty("serviceType",
+ Properties windBirdsEyeRenderingEngineFactoryProps = new
Properties();
+
windBirdsEyeRenderingEngineFactoryProps.setProperty("serviceType",
"presentationFactory");
- windMapRenderingEngineFactoryProps.setProperty("id", "windMap");
- registerService(bc, windMapRenderingEngineFactory,
+ windBirdsEyeRenderingEngineFactoryProps.setProperty("id",
"windMap");
+ registerService(bc, windBirdsEyeRenderingEngineFactory,
RenderingEngineFactory.class,
- windMapRenderingEngineFactoryProps);
+ windBirdsEyeRenderingEngineFactoryProps);
Properties windVisualLexiconProps = new Properties();
windVisualLexiconProps.setProperty("serviceType",
"visualLexicon");
Modified:
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/Graphics.java
===================================================================
---
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/Graphics.java
2012-01-02 22:42:25 UTC (rev 27899)
+++
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/Graphics.java
2012-01-03 19:05:27 UTC (rev 27900)
@@ -194,8 +194,8 @@
gl.glShadeModel(GL2.GL_SMOOTH);
float[] ambient = { 0.4f, 0.4f, 0.4f, 1.0f };
- float[] diffuse = { 0.7f, 0.7f, 0.7f, 1.0f };
- float[] specular = { 0.9f, 0.9f, 0.9f, 0.9f };
+ float[] diffuse = { 0.57f, 0.57f, 0.57f, 1.0f };
+ float[] specular = { 0.79f, 0.79f, 0.79f, 1.0f };
float[] position = { -4.0f, 4.0f, 6.0f, 1.0f };
// float[] ambient = { 0.8f, 0.8f, 0.8f, 0.8f };
Modified:
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/coordinator/BirdsEyeCoordinatorProcessor.java
===================================================================
---
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/coordinator/BirdsEyeCoordinatorProcessor.java
2012-01-02 22:42:25 UTC (rev 27899)
+++
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/coordinator/BirdsEyeCoordinatorProcessor.java
2012-01-03 19:05:27 UTC (rev 27900)
@@ -26,15 +26,13 @@
graphicsData.getCoordinatorData().setBounds(coordinator.getCurrentBirdsEyeBounds());
}
- SimpleCamera camera = graphicsData.getCamera();
CoordinatorData coordinatorData =
graphicsData.getCoordinatorData();
+ SimpleCamera camera =
coordinator.getCurrentMainCamera();
if (coordinator.mainCameraChanged()) {
-
coordinatorData.setBounds(ViewingCoordinator.extractBounds(coordinator.getCurrentMainCamera(),
+
coordinatorData.setBounds(ViewingCoordinator.extractNewDrawnBounds(camera.getPosition(),
+ camera.getDirection(),
camera.getUp(), camera.getDistance(),
coordinator.getMainVerticalFov(), coordinator.getMainAspectRatio()));
-
-// System.out.println("New Bounds: " +
ViewingCoordinator.extractBounds(coordinator.getCurrentMainCamera(),
-//
coordinator.getMainVerticalFov(), coordinator.getMainAspectRatio()));
// updateBirdsEyeCamera(coordinator, graphicsData);
@@ -46,8 +44,7 @@
}
updateBirdsEyeCamera(coordinator, graphicsData);
- }
-
+ }
}
private void updateBirdsEyeCamera(ViewingCoordinator coordinator,
Modified:
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/coordinator/MainCoordinatorProcessor.java
===================================================================
---
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/coordinator/MainCoordinatorProcessor.java
2012-01-02 22:42:25 UTC (rev 27899)
+++
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/coordinator/MainCoordinatorProcessor.java
2012-01-03 19:05:27 UTC (rev 27900)
@@ -19,6 +19,8 @@
GraphicsData graphicsData) {
if (!coordinator.isBoundsInitialized()) {
+ SimpleCamera camera = graphicsData.getCamera();
+
double verticalFov = graphicsData.getVerticalFov();
double aspectRatio = (float)
graphicsData.getScreenWidth() / (Math.max(graphicsData.getScreenHeight(), 1));
@@ -27,10 +29,10 @@
System.out.println("ScreenWidth: " +
graphicsData.getScreenWidth() + ", ScreenHeight: " +
graphicsData.getScreenHeight());
System.out.println("Initialing birds eye bounds: fov "
+ verticalFov + ", aspectRatio " + aspectRatio);
-
coordinator.setInitialBirdsEyeBounds(ViewingCoordinator.extractBounds(graphicsData.getCamera(),
- verticalFov,
- aspectRatio));
+
coordinator.setInitialBirdsEyeBounds(ViewingCoordinator.extractNewDrawnBounds(camera.getPosition(),
+ camera.getDirection(), camera.getUp(),
camera.getDistance(), verticalFov, aspectRatio));
+
//debug
System.out.println("Initial bounds: " +
coordinator.getCurrentBirdsEyeBounds());
}
Modified:
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/coordinator/ViewingCoordinator.java
===================================================================
---
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/coordinator/ViewingCoordinator.java
2012-01-02 22:42:25 UTC (rev 27899)
+++
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/coordinator/ViewingCoordinator.java
2012-01-03 19:05:27 UTC (rev 27900)
@@ -44,28 +44,17 @@
// the maps
private static Map<ViewingCoordinator, CyNetworkView> networkViews =
new LinkedHashMap<ViewingCoordinator, CyNetworkView>();
- // Camera direction must be a unit vector
- public static Vector3 extractCameraPosition(ViewingCoordinator
coordinator, Vector3 cameraDirection, double cameraDistance) {
- Vector3 offset = cameraDirection.copy();
- offset.multiplyLocal(-cameraDistance);
-
- Quadrilateral bounds = coordinator.getCurrentBirdsEyeBounds();
-
- Vector3 position = bounds.getCenterPoint();
- position.addLocal(offset);
-
- return position;
- }
+
// Orthogonally shifts the camera to match new bounds, orthogonal with
respect to the camera's direction vector
public static Vector3 findNewOrthoCameraPosition(Quadrilateral
newBounds, Vector3 oldCameraPosition, Vector3 cameraDirection) {
- return
GraphicsUtility.findNewOrthogonalPosition(newBounds.getCenterPoint(),
oldCameraPosition, cameraDirection);
+ return
GraphicsUtility.findNewOrthogonalAnchoredPosition(newBounds.getCenterPoint(),
oldCameraPosition, cameraDirection);
}
- public static Quadrilateral extractBounds(SimpleCamera camera, double
verticalFov, double aspectRatio) {
- return
GraphicsUtility.generateViewingBounds(camera.getPosition(),
camera.getDirection(), camera.getUp(),
- camera.getDistance(), verticalFov, aspectRatio);
+ public static Quadrilateral extractNewDrawnBounds(Vector3
cameraPosition, Vector3 cameraDirection, Vector3 cameraUp, double
cameraDistance, double verticalFov, double aspectRatio) {
+ return GraphicsUtility.generateViewingBounds(cameraPosition,
cameraDirection, cameraUp,
+ cameraDistance, verticalFov, aspectRatio);
}
// This networkView is only used to differentiate between main camera
and
Modified:
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/geometric/Quadrilateral.java
===================================================================
---
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/geometric/Quadrilateral.java
2012-01-02 22:42:25 UTC (rev 27899)
+++
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/geometric/Quadrilateral.java
2012-01-03 19:05:27 UTC (rev 27900)
@@ -3,6 +3,8 @@
public class Quadrilateral {
+ private static double MINIMUM_DIVISOR = Double.MIN_NORMAL;
+
private Vector3 topLeft;
private Vector3 topRight;
private Vector3 bottomLeft;
@@ -87,4 +89,29 @@
return result;
}
+
+ // Project the quadrilateral onto a plane
+ public Quadrilateral projectOntoPlane(Vector3 sourcePoint, double
newDistanceToCenter) {
+
+ double currentDistance = sourcePoint.distance(getCenterPoint());
+ double distanceRatio = newDistanceToCenter /
Math.max(currentDistance, MINIMUM_DIVISOR);
+
+ Vector3 newTopLeft = topLeft.subtract(sourcePoint);
+ newTopLeft.multiplyLocal(distanceRatio);
+ newTopLeft.addLocal(sourcePoint);
+
+ Vector3 newTopRight = topRight.subtract(sourcePoint);
+ newTopRight.multiplyLocal(distanceRatio);
+ newTopRight.addLocal(sourcePoint);
+
+ Vector3 newBottomLeft = bottomLeft.subtract(sourcePoint);
+ newBottomLeft.multiplyLocal(distanceRatio);
+ newBottomLeft.addLocal(sourcePoint);
+
+ Vector3 newBottomRight = bottomRight.subtract(sourcePoint);
+ newBottomRight.multiplyLocal(distanceRatio);
+ newBottomRight.addLocal(sourcePoint);
+
+ return new Quadrilateral(newTopLeft, newTopRight,
newBottomLeft, newBottomRight);
+ }
}
Modified:
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/input/BoundsInputHandler.java
===================================================================
---
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/input/BoundsInputHandler.java
2012-01-02 22:42:25 UTC (rev 27899)
+++
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/input/BoundsInputHandler.java
2012-01-03 19:05:27 UTC (rev 27900)
@@ -5,6 +5,7 @@
import org.cytoscape.paperwing.internal.geometric.Quadrilateral;
import org.cytoscape.paperwing.internal.geometric.Vector3;
import org.cytoscape.paperwing.internal.utility.GraphicsUtility;
+import org.cytoscape.paperwing.internal.utility.SimpleCamera;
import com.jogamp.newt.event.MouseEvent;
@@ -19,19 +20,19 @@
private void processMoveBounds(MouseMonitor mouse, GraphicsData
graphicsData) {
CoordinatorData coordinatorData =
graphicsData.getCoordinatorData();
+ SimpleCamera camera = graphicsData.getCamera();
if (mouse.getHeld().contains(MouseEvent.BUTTON1)) {
- Vector3 mousePosition =
GraphicsUtility.convertMouseTo3d(mouse, graphicsData,
graphicsData.getCamera().getDistance());
+ Vector3 mousePosition =
GraphicsUtility.convertMouseTo3d(mouse, graphicsData, camera.getDistance());
// The y-coordinate needs to be inverted
// mousePosition.set(mousePosition.x(),
-mousePosition.y(), mousePosition.z());
Quadrilateral oldBounds = coordinatorData.getBounds();
-
oldBounds.moveTo(GraphicsUtility.findNewOrthogonalPosition(
- mousePosition,
- oldBounds.getCenterPoint(),
-
graphicsData.getCamera().getDirection()));
+ Vector3 newCenterPoint =
GraphicsUtility.findLinePlaneIntersection(camera.getPosition(),
+
mousePosition.subtract(camera.getPosition()), oldBounds.getCenterPoint(),
camera.getDirection());
+ oldBounds.moveTo(newCenterPoint);
}
}
}
Modified:
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/rendering/RenderBoundingBoxProcedure.java
===================================================================
---
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/rendering/RenderBoundingBoxProcedure.java
2012-01-02 22:42:25 UTC (rev 27899)
+++
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/rendering/RenderBoundingBoxProcedure.java
2012-01-03 19:05:27 UTC (rev 27900)
@@ -6,6 +6,7 @@
import javax.media.opengl.glu.GLUquadric;
import org.cytoscape.paperwing.internal.data.GraphicsData;
+import org.cytoscape.paperwing.internal.geometric.Quadrilateral;
import org.cytoscape.paperwing.internal.geometric.Vector3;
import org.cytoscape.paperwing.internal.utility.GraphicsUtility;
import org.cytoscape.paperwing.internal.utility.RenderColor;
@@ -14,7 +15,7 @@
public class RenderBoundingBoxProcedure implements ReadOnlyGraphicsProcedure {
private static final RenderColor DEFAULT_COLOR =
- new RenderColor(0.7, 0.7, 0.7);
+ new RenderColor(0.57, 0.57, 0.57);
@Override
public void initialize(GraphicsData graphicsData) {
@@ -30,13 +31,14 @@
private void drawHalfBox(GraphicsData graphicsData) {
GL2 gl = graphicsData.getGlContext();
+ Quadrilateral bounds =
graphicsData.getCoordinatorData().getBounds();
double fraction = 0.25;
- Vector3 topLeft =
graphicsData.getCoordinatorData().getBounds().getTopLeft();
- Vector3 topRight =
graphicsData.getCoordinatorData().getBounds().getTopRight();
+ Vector3 topLeft = bounds.getTopLeft();
+ Vector3 topRight = bounds.getTopRight();
- Vector3 bottomLeft =
graphicsData.getCoordinatorData().getBounds().getBottomLeft();
- Vector3 bottomRight =
graphicsData.getCoordinatorData().getBounds().getBottomRight();
+ Vector3 bottomLeft = bounds.getBottomLeft();
+ Vector3 bottomRight = bounds.getBottomRight();
Vector3 topLeftDown = topLeft.towards(bottomLeft, fraction);
Vector3 topLeftRight = topLeft.towards(topRight, fraction);
@@ -86,13 +88,15 @@
private void drawFullBox(GraphicsData graphicsData) {
GL2 gl = graphicsData.getGlContext();
+
+ Quadrilateral bounds =
graphicsData.getCoordinatorData().getBounds();
+
+ Vector3 topLeft = bounds.getTopLeft();
+ Vector3 topRight = bounds.getTopRight();
- Vector3 topLeft =
graphicsData.getCoordinatorData().getBounds().getTopLeft();
- Vector3 topRight =
graphicsData.getCoordinatorData().getBounds().getTopRight();
+ Vector3 bottomLeft = bounds.getBottomLeft();
+ Vector3 bottomRight = bounds.getBottomRight();
- Vector3 bottomLeft =
graphicsData.getCoordinatorData().getBounds().getBottomLeft();
- Vector3 bottomRight =
graphicsData.getCoordinatorData().getBounds().getBottomRight();
-
gl.glDisable(GL2.GL_LIGHTING);
gl.glDisable(GL.GL_DEPTH_TEST);
Modified:
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/utility/GraphicsUtility.java
===================================================================
---
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/utility/GraphicsUtility.java
2012-01-02 22:42:25 UTC (rev 27899)
+++
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/utility/GraphicsUtility.java
2012-01-03 19:05:27 UTC (rev 27900)
@@ -243,7 +243,7 @@
// This method solves the case where newAnchor and oldPosition are
supposed to be aligned by the normal vector,
// but newAnchor has moved and we need to update oldPosition
accordingly.
- public static Vector3 findNewOrthogonalPosition(Vector3 newAnchor,
Vector3 oldPosition, Vector3 normal) {
+ public static Vector3 findNewOrthogonalAnchoredPosition(Vector3
newAnchor, Vector3 oldPosition, Vector3 normal) {
Vector3 diagonalDisplacement = newAnchor.subtract(oldPosition);
double diagonalLength = diagonalDisplacement.magnitude();
@@ -265,4 +265,29 @@
return result;
}
+
+
+ // Assumes lineDirection points from lineSamplePoint into the plane
+ public static Vector3 findLinePlaneIntersection(Vector3
lineSamplePoint, Vector3 lineDirection, Vector3 planeSamplePoint, Vector3
planeNormal) {
+
+ Vector3 sampleOffset =
planeSamplePoint.subtract(lineSamplePoint);
+ double hypotenuse = sampleOffset.magnitude();
+
+ double lineHypotenuseAngle = lineDirection.angle(sampleOffset);
+ double planeHypotenuseAngle = Math.PI / 2 -
planeNormal.angle(sampleOffset);
+
+ double intersectionCornerAngle = Math.PI - lineHypotenuseAngle
- planeHypotenuseAngle;
+
+ // Use sine law
+ // sin(intersection) / hypotenuse = sin(planeHypotenuseAngle) /
lineOffsetMagnitude (desired)
+
+ double lineOffsetMagnitude = Math.sin(planeHypotenuseAngle) *
hypotenuse / Math.sin(intersectionCornerAngle);
+
+ Vector3 lineOffset = lineDirection.normalize();
+ lineOffset.multiplyLocal(lineOffsetMagnitude);
+
+ Vector3 result = lineSamplePoint.plus(lineOffset);
+
+ return result;
+ }
}
--
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.