Thread: [Bprocessor-commit] gl/src/net/sourceforge/bprocessor/gl/tool Strategy.java, NONE, 1.1 PanStrategy.
Status: Pre-Alpha
Brought to you by:
henryml
From: Michael L. <he...@us...> - 2006-06-21 10:26:43
|
Update of /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv18835/src/net/sourceforge/bprocessor/gl/tool Modified Files: AbstractTool.java Added Files: Strategy.java PanStrategy.java Log Message: Refactored pan-code out into a strategy pattern --- NEW FILE: PanStrategy.java --- //--------------------------------------------------------------------------------- // $Id: PanStrategy.java,v 1.1 2006/06/21 10:26:33 henryml Exp $ // // Copyright (c) 2005 The BProcessor Team (http://bprocessor.sourceforge.net) // Released under the Lesser GNU Public License v2.1 //--------------------------------------------------------------------------------- package net.sourceforge.bprocessor.gl.tool; import java.awt.event.MouseEvent; import net.sourceforge.bprocessor.gl.GLView; import net.sourceforge.bprocessor.gl.view.View; import net.sourceforge.bprocessor.model.Camera; import net.sourceforge.bprocessor.model.Plane; import net.sourceforge.bprocessor.model.Project; import net.sourceforge.bprocessor.model.Vertex; /** * PanStrategy */ public class PanStrategy implements Strategy { /** The GLView */ private GLView glv; /** The x */ private int x; /** The y */ private int y; /** * Constructor * @param glv GLView */ public PanStrategy(GLView glv) { this.glv = glv; } /** * Invoked when the mouse cursor has been moved * @param e The MouseEvent object */ public void moved(MouseEvent e) { } /** * Invoked when the mouse cursor has been pressed * @param e The MouseEvent object */ public void pressed(MouseEvent e) { x = e.getX(); y = e.getY(); } /** * Invoked when the mouse cursor has been dragged * @param e The MouseEvent object */ public void dragged(MouseEvent e) { View view = glv.getView(); Camera c = Project.getInstance().getCurrentCamera(); double[] center = c.getCenter(); double[] camera = c.getCamera(); double dx = camera[0] - center[0]; double dy = camera[1] - center[1]; double dz = camera[2] - center[2]; double sqr = Math.sqrt(dx * dx + dy * dy + dz * dz); if (sqr < 1) { dx *= 1 / sqr; dy *= 1 / sqr; dz *= 1 / sqr; } double d = -dx * center[0] - dy * center[1] - dz * center[2]; Vertex first = view.toPlaneCoords(new double[] {x, y}, new Plane(dx, dy, dz, d)); Vertex second = view.toPlaneCoords(new double[] {e.getX(), e.getY()}, new Plane(dx, dy, dz, d)); c.translate(new double[] {first.getX() - second.getX(), first.getY() - second.getY(), first.getZ() - second.getZ()}); Project.getInstance().changed(c); x = e.getX(); y = e.getY(); } /** * Invoked when the mouse cursor has been released * @param e The MouseEvent object */ public void released(MouseEvent e) { } } --- NEW FILE: Strategy.java --- //--------------------------------------------------------------------------------- // $Id: Strategy.java,v 1.1 2006/06/21 10:26:33 henryml Exp $ // // Copyright (c) 2005 The BProcessor Team (http://bprocessor.sourceforge.net) // Released under the Lesser GNU Public License v2.1 //--------------------------------------------------------------------------------- package net.sourceforge.bprocessor.gl.tool; import java.awt.event.MouseEvent; /** * Strategy */ public interface Strategy { /** * Invoked when the mouse cursor has been moved * @param e The MouseEvent object */ abstract void moved(MouseEvent e); /** * Invoked when a mouse button has been pressed on a component. * @param e The MouseEvent object */ abstract void pressed(MouseEvent e); /** * Invoked when the mouse is held pressed and moved * @param e The MouseEvent object */ abstract void dragged(MouseEvent e); /** * Invoked when a mouse button has been released on a component. * @param e The MouseEvent */ abstract void released(MouseEvent e); } Index: AbstractTool.java =================================================================== RCS file: /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool/AbstractTool.java,v retrieving revision 1.74 retrieving revision 1.75 diff -C2 -d -r1.74 -r1.75 *** AbstractTool.java 20 Jun 2006 13:30:58 -0000 1.74 --- AbstractTool.java 21 Jun 2006 10:26:32 -0000 1.75 *************** *** 50,53 **** --- 50,56 ---- protected boolean directMode = false; + /** Pan strategy */ + protected static Strategy pan; + /** The x axis */ protected Edge xAxis = new Edge(new Vertex(-50, 0, 0), new Vertex(50, 0, 0)); *************** *** 141,144 **** --- 144,151 ---- dragCursor = Toolkit.getDefaultToolkit().createCustomCursor(dragImage, new Point(7, 8), "Drag"); + + if (pan == null) { + pan = new PanStrategy(glv); + } } *************** *** 301,305 **** if ((e.getModifiersEx() & MouseEvent.BUTTON2_DOWN_MASK) == MouseEvent.BUTTON2_DOWN_MASK || e.getButton() == MouseEvent.BUTTON2) { ! panDragged(e); } else { dragged(e); --- 308,314 ---- if ((e.getModifiersEx() & MouseEvent.BUTTON2_DOWN_MASK) == MouseEvent.BUTTON2_DOWN_MASK || e.getButton() == MouseEvent.BUTTON2) { ! ! pan.dragged(e); ! //panDragged(e); } else { dragged(e); *************** *** 394,398 **** if ((e.getModifiersEx() & MouseEvent.BUTTON2_DOWN_MASK) == MouseEvent.BUTTON2_DOWN_MASK || e.getButton() == MouseEvent.BUTTON2) { ! panPressed(e); } else { pressed(e); --- 403,408 ---- if ((e.getModifiersEx() & MouseEvent.BUTTON2_DOWN_MASK) == MouseEvent.BUTTON2_DOWN_MASK || e.getButton() == MouseEvent.BUTTON2) { ! glv.setCursor(dragCursor); ! pan.pressed(e); } else { pressed(e); *************** *** 412,416 **** if ((e.getModifiersEx() & MouseEvent.BUTTON2_DOWN_MASK) == MouseEvent.BUTTON2_DOWN_MASK || e.getButton() == MouseEvent.BUTTON2) { ! panReleased(e); } else { released(e); --- 422,427 ---- if ((e.getModifiersEx() & MouseEvent.BUTTON2_DOWN_MASK) == MouseEvent.BUTTON2_DOWN_MASK || e.getButton() == MouseEvent.BUTTON2) { ! glv.setCursor(cursor); ! pan.released(e); } else { released(e); *************** *** 418,469 **** glv.repaint(true); } - - - /** - * Handle pressed event as pan tool - * @param e MouseEvent - */ - protected void panPressed(MouseEvent e) { - glv.setCursor(dragCursor); - } - - /** - * Handle dragged event as pan tool - * @param e MouseEvent - */ - protected void panDragged(MouseEvent e) { - View view = glv.getView(); - Camera c = Project.getInstance().getCurrentCamera(); - double[] center = c.getCenter(); - double[] camera = c.getCamera(); - double dx = camera[0] - center[0]; - double dy = camera[1] - center[1]; - double dz = camera[2] - center[2]; - double sqr = Math.sqrt(dx * dx + dy * dy + dz * dz); - if (sqr < 1) { - dx *= 1 / sqr; - dy *= 1 / sqr; - dz *= 1 / sqr; - } - double d = -dx * center[0] - dy * center[1] - dz * center[2]; - Vertex first = view.toPlaneCoords(new double[] {previousPos[0], - previousPos[1]}, - new Plane(dx, dy, dz, d)); - Vertex second = view.toPlaneCoords(new double[] {e.getX(), - e.getY()}, - new Plane(dx, dy, dz, d)); - c.translate(new double[] {first.getX() - second.getX(), - first.getY() - second.getY(), - first.getZ() - second.getZ()}); - Project.getInstance().changed(c); - } - - /** - * Handle released event as pan tool - * @param e MouseEvent - */ - protected void panReleased(MouseEvent e) { - glv.setCursor(cursor); - } /** --- 429,432 ---- |