Update of /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12419
Modified Files:
MoveTool.java
Log Message:
added support for 3D movement
Index: MoveTool.java
===================================================================
RCS file: /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool/MoveTool.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** MoveTool.java 5 Aug 2005 11:25:18 -0000 1.2
--- MoveTool.java 19 Aug 2005 09:50:44 -0000 1.3
***************
*** 13,16 ****
--- 13,17 ----
import java.awt.event.MouseEvent;
+ import java.awt.event.KeyEvent;
import java.util.List;
***************
*** 21,26 ****
--- 22,40 ----
*/
public class MoveTool extends SelectTool {
+
/** The logger */
private static Logger log = Logger.getLogger(MoveTool.class);
+
+ /** XY move mode for 3D view */
+ private static final int XY = 0;
+
+ /** XZ move mode for 3D view */
+ private static final int XZ = 1;
+
+ /** The speed of moving in 3D view */
+ private int moveSpeed = 60;
+
+ /** The the moving mode in 3D view */
+ private int moveMode = XY;
/**
***************
*** 37,40 ****
--- 51,100 ----
*/
protected void dragged(MouseEvent e) {
+ if (viewType == View.VIEW_3D) {
+ int x = e.getX();
+ int y = e.getY();
+ double deltaX = x - pressPos[0];
+ double deltaY = y - pressPos[1];
+ double[] coords;
+ if (selectedSurface != null) {
+ List l = Util.traverse(selectedSurface);
+ for (int i = 0; i < l.size(); i++) {
+ Vertex v = (Vertex)l.get(i);
+ if (moveMode == XY) {
+ coords = new double[] {v.getX() + deltaX / moveSpeed,
+ v.getY() - deltaY / moveSpeed,
+ v.getZ() + 0};
+ updateVertex(v, coords);
+ } else {
+ coords = new double[] {v.getX() + deltaX / moveSpeed,
+ v.getY() + 0,
+ v.getZ() - deltaY / moveSpeed};
+ updateVertex(v, coords);
+ }
+ }
+ } else if (selectedEdge != null) {
+ Vertex to = selectedEdge.getTo();
+ Vertex from = selectedEdge.getFrom();
+ if (moveMode == XY) {
+ coords = new double[] {to.getX() + deltaX / moveSpeed,
+ to.getY() - deltaY / moveSpeed,
+ to.getZ() + 0};
+ updateVertex(to, coords);
+ coords = new double[] {from.getX() + deltaX / moveSpeed,
+ from.getY() - deltaY / moveSpeed,
+ from.getZ() + 0};
+ updateVertex(from, coords);
+ } else {
+ coords = new double[] {to.getX() + deltaX / moveSpeed,
+ to.getY() + 0,
+ to.getZ() - deltaY / moveSpeed};
+ updateVertex(to, coords);
+ coords = new double[] {from.getX() + deltaX / moveSpeed,
+ from.getY() + 0,
+ from.getZ() - deltaY / moveSpeed};
+ updateVertex(from, coords);
+ }
+ }
+ }
if (selectedVertex != null) {
int x = e.getX();
***************
*** 53,57 ****
coordsa[1] - coordsb[1],
coordsa[2] - coordsb[2]};
!
List l = Util.traverse(selectedSurface);
for (int i = 0; i < l.size(); i++) {
--- 113,117 ----
coordsa[1] - coordsb[1],
coordsa[2] - coordsb[2]};
!
List l = Util.traverse(selectedSurface);
for (int i = 0; i < l.size(); i++) {
***************
*** 86,88 ****
--- 146,170 ----
pressPos[1] = e.getY();
}
+
+ /**
+ * 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) {
+ if (e.getKeyCode() == KeyEvent.VK_X) {
+ if (moveSpeed > 13) {
+ moveSpeed -= 3;
+ }
+ } else if (e.getKeyCode() == KeyEvent.VK_Z) {
+ moveSpeed += 3;
+ } else if (e.getKeyCode() == KeyEvent.VK_A) {
+ moveMode = XY;
+ } else if (e.getKeyCode() == KeyEvent.VK_S) {
+ moveMode = XZ;
+ } else {
+ super.keyPressed(e);
+ }
+ glv.repaint();
+ }
}
|