Update of /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3655/src/net/sourceforge/bprocessor/gl/tool
Modified Files:
CameraTool.java
Log Message:
Refactored all the rotation from cameratool to the camera in the model as static methods. Fixed small bug with tilting when rotating. There is still a bug when rotation about the eye point though
Index: CameraTool.java
===================================================================
RCS file: /cvsroot/bprocessor/gl/src/net/sourceforge/bprocessor/gl/tool/CameraTool.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** CameraTool.java 12 Dec 2005 14:33:22 -0000 1.3
--- CameraTool.java 13 Dec 2005 12:37:20 -0000 1.4
***************
*** 10,14 ****
import net.sourceforge.bprocessor.gl.view.View;
import net.sourceforge.bprocessor.model.Camera;
- import net.sourceforge.bprocessor.model.Geometry;
import net.sourceforge.bprocessor.model.Plane;
import net.sourceforge.bprocessor.model.Vertex;
--- 10,13 ----
***************
*** 19,24 ****
import java.awt.Cursor;
- import javax.swing.Timer;
-
import org.apache.log4j.Logger;
--- 18,21 ----
***************
*** 36,45 ****
private static Logger log = Logger.getLogger(CameraTool.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 current rotation mode */
protected int mode = ROTATION;
--- 33,36 ----
***************
*** 104,123 ****
} else if ((e.getModifiersEx() & MouseEvent.BUTTON1_DOWN_MASK) ==
MouseEvent.BUTTON1_DOWN_MASK || e.getButton() == MouseEvent.BUTTON1) {
- double[] pivot = super.selectionCenter();
- double[] zero = new double[]{0, 0, 0};
-
- Vertex up = new Vertex("", roll[0], roll[1], roll[2]);
- up.scale(1 / up.length());
- double x = center[0] - camera[0];
- double y = center[1] - camera[1];
- double z = center[2] - camera[2];
- Vertex forward = new Vertex("", x, y, z);
- forward.scale(1 / forward.length());
- Vertex sidewards = up.cross(forward);
- sidewards.scale(1 / sidewards.length());
- /*log.info("forward: " + forward.getX() + ", " + forward.getY() + ", " + forward.getZ());
- log.info("sideward: " + sidewards.getX()
- + ", " + sidewards.getY() + ", " + sidewards.getZ());
- log.info("upwrad: " + up.getX() + ", " + up.getY() + ", " + up.getZ());*/
double angleX = ((double)(e.getX() - previousPos[0]) / 360) * Math.PI;
double angleY = ((double)(e.getY() - previousPos[1]) / 360) * Math.PI;
--- 95,98 ----
***************
*** 129,153 ****
if (e.isShiftDown()) {
// roll camera
! Geometry.rotate(turn * (-angleY - angleX) / 2, forward.getX(),
! forward.getY(), forward.getZ(), roll, zero);
} else if (e.isAltDown()) {
// rotate camera about itself
! Geometry.rotate(angleX, up.getX(), up.getY(), up.getZ(), center, camera);
! Geometry.rotate(-angleY, sidewards.getX(), sidewards.getY(), sidewards.getZ(),
! center, camera);
! Geometry.rotate(angleX, 0, 0, turn, roll, new double[]{0, 0, 0});
! Geometry.rotate(angleY, sidewards.getX(), sidewards.getY(), sidewards.getZ(),
! roll, zero);
} else {
// rotate camera about point of view (or selection if any)
! Geometry.rotate(-angleX, 0, 0, turn, camera, pivot);
! Geometry.rotate(-angleX, 0, 0, turn, center, pivot);
! Geometry.rotate(-angleX, 0, 0, turn, roll, new double[]{0, 0, 0});
! Geometry.rotate(angleY, sidewards.getX(), sidewards.getY(), sidewards.getZ(),
! camera, pivot);
! Geometry.rotate(angleY, sidewards.getX(), sidewards.getY(), sidewards.getZ(),
! center, pivot);
! Geometry.rotate(angleY, sidewards.getX(), sidewards.getY(), sidewards.getZ(),
! roll, zero);
}
glv.repaint();
--- 104,116 ----
if (e.isShiftDown()) {
// roll camera
! Camera.rollCamera(c, turn * (-angleY - angleX) / 2);
} else if (e.isAltDown()) {
// rotate camera about itself
! Camera.rotateHorizontallyEye(c, angleX);
! Camera.rotateVerticallyEye(c, -angleY);
} else {
// rotate camera about point of view (or selection if any)
! Camera.rotateHorizontally(c, -angleX, center);
! Camera.rotateVertically(c, angleY, center);
}
glv.repaint();
|