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.

Reply via email to