[Bprocessor-commit] gl/src/net/sourceforge/bprocessor/gl/tool CameraWalkTool.java,NONE,1.1 Tool.java
Status: Pre-Alpha
Brought to you by:
henryml
Update of /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30255/src/net/sourceforge/bprocessor/gl/tool Modified Files: Tool.java CameraFlyTool.java AbstractTool.java ToolFactory.java CameraTool.java Added Files: CameraWalkTool.java Log Message: Added working walk and fly tool along with changes to zoom so that far clipping is better and it is still possible to draw really small Index: Tool.java =================================================================== RCS file: /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool/Tool.java,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** Tool.java 14 Dec 2005 14:20:34 -0000 1.15 --- Tool.java 15 Dec 2005 12:37:00 -0000 1.16 *************** *** 36,39 **** --- 36,41 ---- /** The Fly tool */ public static final int FLY_TOOL = 7; + /** The walk tool */ + public static final int WALK_TOOL = 8; /** Index: CameraTool.java =================================================================== RCS file: /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool/CameraTool.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** CameraTool.java 14 Dec 2005 14:20:34 -0000 1.5 --- CameraTool.java 15 Dec 2005 12:37:00 -0000 1.6 *************** *** 10,15 **** import net.sourceforge.bprocessor.gl.view.View; import net.sourceforge.bprocessor.model.Camera; - import net.sourceforge.bprocessor.model.Plane; - import net.sourceforge.bprocessor.model.Vertex; //import java.awt.event.KeyEvent; --- 10,13 ---- *************** *** 39,55 **** private Cursor rotationCursor; - /** The cursor for drag */ - private Cursor dragCursor; - /** * KeyListener for the GL Canvas * @param glv The 3D canvas * @param cursor1 The Mouse cursor for rotation - * @param cursor2 The Mouse cursor for drag */ ! public CameraTool(GLView glv, Cursor cursor1, Cursor cursor2) { super(glv, cursor1); rotationCursor = cursor1; - dragCursor = cursor2; } --- 37,48 ---- private Cursor rotationCursor; /** * KeyListener for the GL Canvas * @param glv The 3D canvas * @param cursor1 The Mouse cursor for rotation */ ! public CameraTool(GLView glv, Cursor cursor1) { super(glv, cursor1); rotationCursor = cursor1; } *************** *** 73,102 **** View view = glv.getView(); Camera c = view.getCamera(); - double[] center = c.getCenter(); - double[] camera = c.getCamera(); double[] roll = c.getRoll(); ! if ((e.getModifiersEx() & MouseEvent.BUTTON2_DOWN_MASK) == MouseEvent.BUTTON2_DOWN_MASK || ! e.getButton() == MouseEvent.BUTTON2) { ! glv.setCursor(dragCursor); ! ! double x = camera[0] - center[0]; ! double y = camera[1] - center[1]; ! double z = camera[2] - center[2]; ! double sqr = Math.sqrt(x * x + y * y + z * z); ! if (sqr < 1) { ! x *= 1 / sqr; ! y *= 1 / sqr; ! z *= 1 / sqr; ! } ! Vertex first = view.toPlaneCoords(new double[] {previousPos[0], ! previousPos[1]}, ! new Plane(x, y, z, 0)); ! Vertex second = view.toPlaneCoords(new double[] {e.getX(), ! e.getY()}, ! new Plane(x, y, z, 0)); ! c.translate(new double[] {first.getX() - second.getX(), ! first.getY() - second.getY(), ! first.getZ() - second.getZ()}); ! } else if ((e.getModifiersEx() & MouseEvent.BUTTON1_DOWN_MASK) == MouseEvent.BUTTON1_DOWN_MASK || e.getButton() == MouseEvent.BUTTON1) { double angleX = ((double)(e.getX() - previousPos[0]) / 360) * Math.PI; --- 66,71 ---- View view = glv.getView(); Camera c = view.getCamera(); double[] roll = c.getRoll(); ! if ((e.getModifiersEx() & MouseEvent.BUTTON1_DOWN_MASK) == MouseEvent.BUTTON1_DOWN_MASK || e.getButton() == MouseEvent.BUTTON1) { double angleX = ((double)(e.getX() - previousPos[0]) / 360) * Math.PI; Index: ToolFactory.java =================================================================== RCS file: /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool/ToolFactory.java,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** ToolFactory.java 14 Dec 2005 14:20:34 -0000 1.19 --- ToolFactory.java 15 Dec 2005 12:37:00 -0000 1.20 *************** *** 55,58 **** --- 55,61 ---- private CameraFlyTool fly; + /** Camera walktool */ + private CameraWalkTool walk; + /** Tape measure tool */ private TapeMeasureTool tapeMeasure; *************** *** 79,90 **** Cursor rotationCursor = Toolkit.getDefaultToolkit().createCustomCursor(rotationImage, new Point(7, 8), "Rotation"); - url = cl.getResource("Bicondrag.gif"); - Image dragImage = Toolkit.getDefaultToolkit().getImage(url); - Cursor dragCursor = - Toolkit.getDefaultToolkit().createCustomCursor(dragImage, new Point(7, 8), "Drag"); url = cl.getResource("Biconfly.gif"); Image flyImage = Toolkit.getDefaultToolkit().getImage(url); Cursor flyCursor = Toolkit.getDefaultToolkit().createCustomCursor(flyImage, new Point(7, 8), "Fly"); Toolbar tb = Toolbar.getInstance(); --- 82,93 ---- Cursor rotationCursor = Toolkit.getDefaultToolkit().createCustomCursor(rotationImage, new Point(7, 8), "Rotation"); url = cl.getResource("Biconfly.gif"); Image flyImage = Toolkit.getDefaultToolkit().getImage(url); Cursor flyCursor = Toolkit.getDefaultToolkit().createCustomCursor(flyImage, new Point(7, 8), "Fly"); + url = cl.getResource("Biconwalk.gif"); + Image walkImage = Toolkit.getDefaultToolkit().getImage(url); + Cursor walkCursor = + Toolkit.getDefaultToolkit().createCustomCursor(walkImage, new Point(7, 8), "Walk"); Toolbar tb = Toolbar.getInstance(); *************** *** 101,108 **** but = tb.registerAction(new RotationAction(glv)); but.setToolTipText("Rotation"); - but = tb.registerAction(new TapeMeasureAction(glv)); - but.setToolTipText("Tape Measure"); but = tb.registerAction(new CameraFlyAction(glv)); but.setToolTipText("Fly mode"); --- 104,114 ---- but = tb.registerAction(new RotationAction(glv)); but.setToolTipText("Rotation"); but = tb.registerAction(new CameraFlyAction(glv)); but.setToolTipText("Fly mode"); + but = tb.registerAction(new CameraWalkAction(glv)); + but.setToolTipText("Walk mode"); + but = tb.registerAction(new TapeMeasureAction(glv)); + but.setToolTipText("Tape Measure"); + *************** *** 112,118 **** extrusion = new ExtrusionTool(glv, pencilcursor); clipplane = new ClipplaneTool(glv, pencilcursor); ! rotation = new CameraTool(glv, rotationCursor, dragCursor); tapeMeasure = new TapeMeasureTool(glv, pencilcursor); fly = new CameraFlyTool(glv, flyCursor); Notifier.getInstance().addListener(select); --- 118,125 ---- extrusion = new ExtrusionTool(glv, pencilcursor); clipplane = new ClipplaneTool(glv, pencilcursor); ! rotation = new CameraTool(glv, rotationCursor); tapeMeasure = new TapeMeasureTool(glv, pencilcursor); fly = new CameraFlyTool(glv, flyCursor); + walk = new CameraWalkTool(glv, walkCursor); Notifier.getInstance().addListener(select); *************** *** 178,181 **** --- 185,191 ---- currentTool = fly; return fly; + } else if (i == Tool.WALK_TOOL) { + currentTool = walk; + return walk; } else if (i == Tool.TAPE_MEASURE_TOOL) { currentTool = tapeMeasure; *************** *** 246,250 **** /** ! * The rotation action inner class */ class CameraFlyAction extends AbstractAction { --- 256,260 ---- /** ! * The fly action inner class */ class CameraFlyAction extends AbstractAction { *************** *** 272,275 **** --- 282,313 ---- } } + + /** + * The walk action inner class + */ + class CameraWalkAction extends AbstractAction { + /** The GLView */ + private GLView glv = null; + + /** + * Constructor + * @param glv TheGLView + */ + CameraWalkAction(GLView glv) { + this.glv = glv; + ClassLoader cl = Thread.currentThread().getContextClassLoader(); + URL url = cl.getResource("Biconwalk.gif"); + ImageIcon im = new ImageIcon(url); + putValue(Action.SMALL_ICON, im); + } + + /** + * Called when the button is pressed + * @param e The ActionEvent + */ + public void actionPerformed(ActionEvent e) { + glv.changeTool(Tool.WALK_TOOL); + } + } /** Index: AbstractTool.java =================================================================== RCS file: /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool/AbstractTool.java,v retrieving revision 1.37 retrieving revision 1.38 diff -C2 -d -r1.37 -r1.38 *** AbstractTool.java 14 Dec 2005 14:22:43 -0000 1.37 --- AbstractTool.java 15 Dec 2005 12:37:00 -0000 1.38 *************** *** 9,12 **** --- 9,13 ---- import net.sourceforge.bprocessor.model.Camera; import net.sourceforge.bprocessor.model.Edge; + import net.sourceforge.bprocessor.model.Plane; import net.sourceforge.bprocessor.model.Project; import net.sourceforge.bprocessor.model.Surface; *************** *** 16,23 **** --- 17,28 ---- import java.awt.Cursor; + import java.awt.Image; + import java.awt.Point; + import java.awt.Toolkit; import java.awt.event.KeyEvent; import java.awt.event.MouseEvent; import java.awt.event.MouseWheelEvent; + import java.net.URL; import java.util.List; import java.util.Iterator; *************** *** 70,74 **** protected Cursor cursor; ! static { selection = new HashSet(); --- 75,81 ---- protected Cursor cursor; ! /** The cursor for drag */ ! private Cursor dragCursor; ! static { selection = new HashSet(); *************** *** 83,86 **** --- 90,98 ---- this.glv = glv; this.cursor = cursor; + ClassLoader cl = Thread.currentThread().getContextClassLoader(); + URL url = cl.getResource("Bicondrag.gif"); + Image dragImage = Toolkit.getDefaultToolkit().getImage(url); + dragCursor = + Toolkit.getDefaultToolkit().createCustomCursor(dragImage, new Point(7, 8), "Drag"); } *************** *** 202,206 **** AbstractTool.dy = y - pressPos[1]; ! dragged(e); previousPos[0] = x; --- 214,244 ---- AbstractTool.dy = y - pressPos[1]; ! if ((e.getModifiersEx() & MouseEvent.BUTTON2_DOWN_MASK) == MouseEvent.BUTTON2_DOWN_MASK || ! e.getButton() == MouseEvent.BUTTON2) { ! View view = glv.getView(); ! Camera c = view.getCamera(); ! 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; ! } ! Vertex first = view.toPlaneCoords(new double[] {previousPos[0], ! previousPos[1]}, ! new Plane(dx, dy, dz, 0)); ! Vertex second = view.toPlaneCoords(new double[] {e.getX(), ! e.getY()}, ! new Plane(dx, dy, dz, 0)); ! c.translate(new double[] {first.getX() - second.getX(), ! first.getY() - second.getY(), ! first.getZ() - second.getZ()}); ! } else { ! dragged(e); ! } previousPos[0] = x; *************** *** 261,265 **** if ((e.getModifiersEx() & MouseEvent.BUTTON2_DOWN_MASK) == MouseEvent.BUTTON2_DOWN_MASK || e.getButton() == MouseEvent.BUTTON2) { ! glv.changeTool(Tool.ROTATION_TOOL); } else { pressed(e); --- 299,303 ---- if ((e.getModifiersEx() & MouseEvent.BUTTON2_DOWN_MASK) == MouseEvent.BUTTON2_DOWN_MASK || e.getButton() == MouseEvent.BUTTON2) { ! glv.setCursor(dragCursor); } else { pressed(e); *************** *** 273,280 **** */ public void mouseReleased(MouseEvent e) { - int currentButton = e.getButton(); if ((e.getModifiersEx() & MouseEvent.BUTTON2_DOWN_MASK) == MouseEvent.BUTTON2_DOWN_MASK || e.getButton() == MouseEvent.BUTTON2) { ! glv.changeTool(Tool.PREVIOUS_TOOL); } else { released(e); --- 311,317 ---- */ public void mouseReleased(MouseEvent e) { if ((e.getModifiersEx() & MouseEvent.BUTTON2_DOWN_MASK) == MouseEvent.BUTTON2_DOWN_MASK || e.getButton() == MouseEvent.BUTTON2) { ! glv.setCursor(cursor); } else { released(e); --- NEW FILE: CameraWalkTool.java --- //--------------------------------------------------------------------------------- // $Id: CameraWalkTool.java,v 1.1 2005/12/15 12:37:00 rimestad 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 net.sourceforge.bprocessor.gl.GLView; import net.sourceforge.bprocessor.model.Camera; import net.sourceforge.bprocessor.model.Vertex; import java.awt.event.KeyEvent; import java.awt.event.MouseEvent; import java.awt.Cursor; import org.apache.log4j.Logger; /** * The camera fly tool */ public class CameraWalkTool extends AbstractTool { /** The logger */ private static Logger log = Logger.getLogger(CameraWalkTool.class); /** * Constructor * @param glv The 3D canvas * @param cursor the cursor */ public CameraWalkTool(GLView glv, Cursor cursor) { super(glv, cursor); } /** * Invoked when the mouse cursor has been moved * @param e The MouseEvent object */ protected void moved(MouseEvent e) { } /** * Invoked when the mouse is held pressed and moved * @param e The MouseEvent object */ protected void dragged(MouseEvent e) { if (e.getButton() == MouseEvent.BUTTON1 || (e.getModifiersEx() & MouseEvent.BUTTON1_DOWN_MASK) == MouseEvent.BUTTON1_DOWN_MASK) { Camera c = glv.getView().getCamera(); double angleX = ((double)(e.getX() - previousPos[0]) / 360) * Math.PI; double angleY = ((double)(e.getY() - previousPos[1]) / 360) * Math.PI; Camera.rotateHorizontallyEye(c, -angleX); Camera.rotateVerticallyEye(c, angleY); } } /** * Invoked when a mouse button has been pressed on a component. * @param e The MouseEvent object */ protected void pressed(MouseEvent e) { } /** * Invoked when a mouse button has been released on a component. * @param e The MouseEvent */ protected void released(MouseEvent e) { } /** * Invoked when a key has been pressed. Lets user control the speed * and mode of movement. * @param e The KeyEvent */ public void keyPressed(KeyEvent e) { Camera c = glv.getView().getCamera(); Vertex up = new Vertex("", c.getRoll()[0], c.getRoll()[1], c.getRoll()[2]); double x = c.getCenter()[0] - c.getCamera()[0]; double y = c.getCenter()[1] - c.getCamera()[1]; double z = c.getCenter()[2] - c.getCamera()[2]; Vertex forward = new Vertex("", x, y, z); forward.scale(2 / forward.length()); Vertex sidewards = up.cross(forward); sidewards.scale(2 / sidewards.length()); if (e.getKeyCode() == KeyEvent.VK_UP) { c.translate(new double[] {forward.getX(), forward.getY(), 0}); } else if (e.getKeyCode() == KeyEvent.VK_DOWN) { c.translate(new double[] {-forward.getX(), -forward.getY(), 0}); } else if (e.getKeyCode() == KeyEvent.VK_LEFT) { c.translate(new double[] {sidewards.getX(), sidewards.getY(), 0}); } else if (e.getKeyCode() == KeyEvent.VK_RIGHT) { c.translate(new double[] {-sidewards.getX(), -sidewards.getY(), 0}); } else { super.keyPressed(e); } glv.repaint(true); } } Index: CameraFlyTool.java =================================================================== RCS file: /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool/CameraFlyTool.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** CameraFlyTool.java 14 Dec 2005 14:20:34 -0000 1.2 --- CameraFlyTool.java 15 Dec 2005 12:37:00 -0000 1.3 *************** *** 80,86 **** double z = c.getCenter()[2] - c.getCamera()[2]; Vertex forward = new Vertex("", x, y, z); ! forward.scale(1 / forward.length()); Vertex sidewards = up.cross(forward); ! sidewards.scale(1 / sidewards.length()); if (e.getKeyCode() == KeyEvent.VK_UP) { --- 80,86 ---- double z = c.getCenter()[2] - c.getCamera()[2]; Vertex forward = new Vertex("", x, y, z); ! forward.scale(2 / forward.length()); Vertex sidewards = up.cross(forward); ! sidewards.scale(2 / sidewards.length()); if (e.getKeyCode() == KeyEvent.VK_UP) { |