[Bprocessor-commit] gl/src/net/sourceforge/bprocessor/gl/tool RotationTool.java,NONE,1.1 AbstractToo
Status: Pre-Alpha
Brought to you by:
henryml
From: rimestad <rim...@us...> - 2005-11-17 16:58:30
|
Update of /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22059 Modified Files: AbstractTool.java CameraMoveTimer.java ToolFactory.java Tool.java Added Files: RotationTool.java Log Message: added rotation tool Index: CameraMoveTimer.java =================================================================== RCS file: /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool/CameraMoveTimer.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** CameraMoveTimer.java 31 Aug 2005 14:56:33 -0000 1.2 --- CameraMoveTimer.java 17 Nov 2005 16:58:16 -0000 1.3 *************** *** 7,22 **** package net.sourceforge.bprocessor.gl.tool; import net.sourceforge.bprocessor.gl.GLView; import net.sourceforge.bprocessor.gl.view.View; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; /** * Carama move timer class */ class CameraMoveTimer implements ActionListener { /** The calling mouselistener */ ! private AbstractTool at; /** The current GLView */ --- 7,33 ---- package net.sourceforge.bprocessor.gl.tool; + import net.sourceforge.bprocessor.model.Vertex; + import net.sourceforge.bprocessor.model.Edge; + import net.sourceforge.bprocessor.model.Surface; + import net.sourceforge.bprocessor.gl.GLView; import net.sourceforge.bprocessor.gl.view.View; + import java.util.Iterator; + import java.awt.event.ActionEvent; import java.awt.event.ActionListener; + import org.apache.log4j.Logger; + /** * Carama move timer class */ class CameraMoveTimer implements ActionListener { + /** The logger */ + private static Logger log = Logger.getLogger(CameraMoveTimer.class); + /** The calling mouselistener */ ! private RotationTool at; /** The current GLView */ *************** *** 28,32 **** * @param glv the GLView */ ! public CameraMoveTimer(AbstractTool at, GLView glv) { this.at = at; this.glv = glv; --- 39,43 ---- * @param glv the GLView */ ! public CameraMoveTimer(RotationTool at, GLView glv) { this.at = at; this.glv = glv; *************** *** 38,44 **** */ public void actionPerformed(ActionEvent e) { ! View v = glv.getView(); ! v.translateRotationX(10 * at.getdy()); ! v.translateRotationY(10 * at.getdx()); glv.repaint(true); } --- 49,85 ---- */ public void actionPerformed(ActionEvent e) { ! View view = glv.getView(); ! if (at.mode == RotationTool.ROTATION) { ! if (at.selection.size() == 0) { ! // just rotate about the camera view point ! view.translateRotationX(at.getdy() / 5); ! view.translateRotationY(at.getdx() / 5); ! } else { ! // find the point on the object to rotate about ! Iterator it = at.selection.iterator(); ! if (it.hasNext()) { ! Object o = it.next(); ! double[] center; ! if (o instanceof Surface) { ! Vertex v = ((Surface)o).center(); ! center = new double[] {v.getX(), v.getY(), v.getZ()}; ! } else if (o instanceof Edge) { ! center = ((Edge)o).center(); ! } else if (o instanceof Vertex) { ! Vertex v = (Vertex)o; ! center = new double[] {v.getX(), v.getY(), v.getZ()}; ! } else { ! center = null; ! log.error("unsupportet type " + o); ! } ! if (center != null) { ! view.translateRotationX(at.getdy() / 5, center); ! view.translateRotationY(at.getdx() / 5, center); ! } ! } ! } ! } else if (at.mode == RotationTool.ROLL) { ! view.rollCamera(at.getdx() / 5); ! } glv.repaint(true); } Index: ToolFactory.java =================================================================== RCS file: /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool/ToolFactory.java,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** ToolFactory.java 15 Nov 2005 19:04:10 -0000 1.12 --- ToolFactory.java 17 Nov 2005 16:58:16 -0000 1.13 *************** *** 49,52 **** --- 49,55 ---- private ClipplaneTool clipplane; + /** rotation tool */ + private RotationTool rotation; + /** * Constructor *************** *** 54,58 **** */ private ToolFactory(GLView glv) { - ClassLoader cl = Thread.currentThread().getContextClassLoader(); URL url = cl.getResource("Bcursorpen1.gif"); --- 57,60 ---- *************** *** 60,64 **** Cursor pencilcursor = Toolkit.getDefaultToolkit().createCustomCursor(pencilimage, new Point(7, 8), "Pencil"); - Toolbar tb = Toolbar.getInstance(); --- 62,65 ---- *************** *** 73,82 **** but = tb.registerAction(new ClipAction(glv)); but.setToolTipText("Clipping"); select = new SpaceTool(glv, null); pencil = new PencilTool(glv, pencilcursor); ! move = new MoveTool(glv, null); ! extrusion = new ExtrusionTool(glv, null); ! clipplane = new ClipplaneTool(glv, null); Notifier.getInstance().addListener(select); --- 74,86 ---- but = tb.registerAction(new ClipAction(glv)); but.setToolTipText("Clipping"); + but = tb.registerAction(new RotationAction(glv)); + but.setToolTipText("Rotation"); select = new SpaceTool(glv, null); pencil = new PencilTool(glv, pencilcursor); ! move = new MoveTool(glv, pencilcursor); ! extrusion = new ExtrusionTool(glv, pencilcursor); ! clipplane = new ClipplaneTool(glv, pencilcursor); ! rotation = new RotationTool(glv, pencilcursor); Notifier.getInstance().addListener(select); *************** *** 119,122 **** --- 123,128 ---- } else if (i == Tool.CLIP_TOOL) { return clipplane; + } else if (i == Tool.ROTATION_TOOL) { + return rotation; } else { log.error("[get] No such tool " + i); *************** *** 156,159 **** --- 162,193 ---- /** + * The rotation action inner class + */ + class RotationAction extends AbstractAction { + /** The GLView */ + private GLView glv = null; + + /** + * Constructor + * @param glv TheGLView + */ + RotationAction(GLView glv) { + this.glv = glv; + ClassLoader cl = Thread.currentThread().getContextClassLoader(); + URL url = cl.getResource("Biconrotcam.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.ROTATION_TOOL); + } + } + + /** * The move action inner class */ Index: AbstractTool.java =================================================================== RCS file: /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool/AbstractTool.java,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -d -r1.26 -r1.27 *** AbstractTool.java 7 Nov 2005 07:21:21 -0000 1.26 --- AbstractTool.java 17 Nov 2005 16:58:16 -0000 1.27 *************** *** 15,22 **** import java.awt.Cursor; - import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.MouseEvent; - import java.awt.event.InputEvent; import java.util.List; --- 15,20 ---- *************** *** 26,31 **** import java.util.HashSet; - import javax.swing.Timer; - import org.apache.log4j.Logger; /** --- 24,27 ---- *************** *** 39,42 **** --- 35,41 ---- private static int[] pressPos = new int[2]; + /** The mouse position last time there was a mouse event */ + private static int[] lastPos = new int[2]; + /** The mouse movement in x axis since press */ private static int dx = 0; *************** *** 57,69 **** protected static final double EPSILON = 0.4; - /** The move action listener */ - private static ActionListener moveAction; - /** The selected objects */ protected static Collection selection; - /** The carmera move timer */ - private static Timer timer; - /** The 3DView */ protected GLView glv = null; --- 56,62 ---- *************** *** 78,82 **** static { - timer = new Timer(40, null); selection = new HashSet(); } --- 71,74 ---- *************** *** 90,95 **** this.glv = glv; this.cursor = cursor; - timer.start(); - moveAction = new CameraMoveTimer(this, glv); } --- 82,85 ---- *************** *** 109,122 **** View v = glv.getView(); if (e.getKeyCode() == KeyEvent.VK_UP) { - v.translateCenter(new double[] {0.0, 1.0, 0.0}); - } else if (e.getKeyCode() == KeyEvent.VK_DOWN) { v.translateCenter(new double[] {0.0, -1.0, 0.0}); } else if (e.getKeyCode() == KeyEvent.VK_LEFT) { v.translateCenter(new double[] {-1.0, 0.0, 0.0}); } else if (e.getKeyCode() == KeyEvent.VK_RIGHT) { v.translateCenter(new double[] {1.0, 0.0, 0.0}); ! } else if (e.getKeyChar() == KeyEvent.VK_COMMA) { v.zoom(1.1); ! } else if (e.getKeyChar() == KeyEvent.VK_PERIOD) { v.zoom(0.9); } else if (e.getKeyCode() == KeyEvent.VK_Q) { --- 99,112 ---- View v = glv.getView(); if (e.getKeyCode() == KeyEvent.VK_UP) { v.translateCenter(new double[] {0.0, -1.0, 0.0}); + } else if (e.getKeyCode() == KeyEvent.VK_DOWN) { + v.translateCenter(new double[] {0.0, 1.0, 0.0}); } else if (e.getKeyCode() == KeyEvent.VK_LEFT) { v.translateCenter(new double[] {-1.0, 0.0, 0.0}); } else if (e.getKeyCode() == KeyEvent.VK_RIGHT) { v.translateCenter(new double[] {1.0, 0.0, 0.0}); ! } else if (e.getKeyCode() == KeyEvent.VK_Z) { v.zoom(1.1); ! } else if (e.getKeyCode() == KeyEvent.VK_X) { v.zoom(0.9); } else if (e.getKeyCode() == KeyEvent.VK_Q) { *************** *** 124,130 **** } else if (e.getKeyCode() == KeyEvent.VK_W) { glv.changeTool(Tool.PENCIL_TOOL); ! } else if (e.getKeyCode() == KeyEvent.VK_E) { glv.changeTool(Tool.MOVE_TOOL); } else if (e.getKeyCode() == KeyEvent.VK_R) { glv.changeTool(Tool.EXTRUSION_TOOL); } else if (e.getKeyCode() == KeyEvent.VK_F1) { --- 114,122 ---- } else if (e.getKeyCode() == KeyEvent.VK_W) { glv.changeTool(Tool.PENCIL_TOOL); ! } else if (e.getKeyCode() == KeyEvent.VK_M) { glv.changeTool(Tool.MOVE_TOOL); } else if (e.getKeyCode() == KeyEvent.VK_R) { + glv.changeTool(Tool.ROTATION_TOOL); + } else if (e.getKeyCode() == KeyEvent.VK_E) { glv.changeTool(Tool.EXTRUSION_TOOL); } else if (e.getKeyCode() == KeyEvent.VK_F1) { *************** *** 171,174 **** --- 163,175 ---- AbstractTool.dy = y - pressPos[1]; + View v = glv.getView(); + if ((e.getModifiersEx() & MouseEvent.BUTTON2_DOWN_MASK) == MouseEvent.BUTTON2_DOWN_MASK) { + v.translateCenter(new double[] {(x - lastPos[0]) / (30 * (glv.getView()).getZoomFactor()), + (y - lastPos[1]) / (30 * (glv.getView()).getZoomFactor()), + 0.0}); + } + + lastPos[0] = x; + lastPos[1] = y; dragged(e); glv.repaint(true); *************** *** 183,188 **** int y = e.getY(); ! AbstractTool.dx = x - pressPos[0]; ! AbstractTool.dy = y - pressPos[1]; moved(e); glv.repaint(true); --- 184,192 ---- int y = e.getY(); ! dx = x - pressPos[0]; ! dy = y - pressPos[1]; ! ! lastPos[0] = x; ! lastPos[1] = y; moved(e); glv.repaint(true); *************** *** 215,227 **** */ public void mousePressed(MouseEvent e) { - int currentButton = e.getButton(); pressPos[0] = e.getX(); pressPos[1] = e.getY(); ! int rotamask = InputEvent.CTRL_DOWN_MASK; ! if (currentButton == MouseEvent.BUTTON3 || e.isControlDown()) { ! timer.addActionListener(moveAction); ! } else { ! pressed(e); ! } glv.repaint(true); } --- 219,229 ---- */ public void mousePressed(MouseEvent e) { pressPos[0] = e.getX(); pressPos[1] = e.getY(); ! dx = 0; ! dy = 0; ! lastPos[0] = pressPos[0]; ! lastPos[1] = pressPos[1]; ! pressed(e); glv.repaint(true); } *************** *** 234,241 **** int currentButton = e.getButton(); - timer.removeActionListener(moveAction); - AbstractTool.dx = 0; - AbstractTool.dy = 0; - released(e); glv.repaint(true); --- 236,239 ---- --- NEW FILE: RotationTool.java --- //--------------------------------------------------------------------------------- // $Id: RotationTool.java,v 1.1 2005/11/17 16:58:16 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 java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.InputEvent; import java.awt.Cursor; import javax.swing.Timer; import org.apache.log4j.Logger; /** * The rotationtool */ public class RotationTool extends AbstractTool { /** Rotation mode */ public static final int ROTATION = 0; /** Roll mode */ public static final int ROLL = 1; /** The logger */ private static Logger log = Logger.getLogger(RotationTool.class); /** The carmera move timer */ private static Timer timer; /** The mouse position last time the mouse was pressed initializes to (0,0) */ private static int[] pressPos = new int[2]; /** The move action listener */ private static ActionListener rotateAction; /** The current rotation mode */ protected int mode = ROTATION; static { timer = new Timer(40, null); } /** * KeyListener for the GL Canvas * @param glv The 3D canvas * @param cursor The Mouse cursor */ public RotationTool(GLView glv, Cursor cursor) { super(glv, cursor); timer.start(); rotateAction = new CameraMoveTimer(this, glv); } /** * Invoked when the mouse cursor has been moved * @param e The MouseEvent object */ protected void moved(MouseEvent e) { if ((e.getModifiersEx() & InputEvent.SHIFT_DOWN_MASK) == InputEvent.SHIFT_DOWN_MASK) { mode = ROLL; } else { mode = ROTATION; } } /** * Invoked when the mouse is held pressed and moved * @param e The MouseEvent object */ protected void dragged(MouseEvent e) { if ((e.getModifiersEx() & InputEvent.SHIFT_DOWN_MASK) == InputEvent.SHIFT_DOWN_MASK) { mode = ROLL; } else { mode = ROTATION; } } /** * Invoked when a mouse button has been pressed on a component. * @param e The MouseEvent object */ protected void pressed(MouseEvent e) { if ((e.getModifiersEx() & InputEvent.SHIFT_DOWN_MASK) == InputEvent.SHIFT_DOWN_MASK) { mode = ROLL; } else { mode = ROTATION; } if (e.getButton() == MouseEvent.BUTTON1) { timer.addActionListener(rotateAction); } } /** * Invoked when a mouse button has been released on a component. * @param e The MouseEvent */ protected void released(MouseEvent e) { if (e.getButton() == MouseEvent.BUTTON1) { timer.removeActionListener(rotateAction); } } } Index: Tool.java =================================================================== RCS file: /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool/Tool.java,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** Tool.java 7 Nov 2005 07:21:21 -0000 1.10 --- Tool.java 17 Nov 2005 16:58:16 -0000 1.11 *************** *** 27,30 **** --- 27,32 ---- /** The Clipping tool */ public static final int CLIP_TOOL = 4; + /** The Rotation tool */ + public static final int ROTATION_TOOL = 5; /** |