Update of /cvsroot/bprocessor/model/src/net/sourceforge/bprocessor/model
In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv28226/src/net/sourceforge/bprocessor/model
Modified Files:
Camera.java
Log Message:
added a static focusOn method in the camera
Index: Camera.java
===================================================================
RCS file: /cvsroot/bprocessor/model/src/net/sourceforge/bprocessor/model/Camera.java,v
retrieving revision 1.30
retrieving revision 1.31
diff -C2 -d -r1.30 -r1.31
*** Camera.java 18 Dec 2006 09:11:47 -0000 1.30
--- Camera.java 29 Dec 2006 13:31:55 -0000 1.31
***************
*** 11,14 ****
--- 11,15 ----
import java.util.Iterator;
import java.util.HashSet;
+ import java.util.LinkedList;
import java.util.List;
import java.util.Set;
***************
*** 606,608 ****
--- 607,645 ----
currentCamera.roll = new double[]{0, 1, 0};
}
+
+ /**
+ * Static modification of the camera to focus on a given surface
+ * @param currentCamera The camera to change
+ * @param s The surface to focus on
+ */
+ public static void focusOn(Camera currentCamera, Surface s) {
+ Vertex n = (s.normal());
+ Vertex cen = s.center();
+ double[] center = currentCamera.getCenter();
+ double[] cam = currentCamera.getCamera();
+ double[] dir = new double[]{cam[0] - center[0], cam[1] - center[1], cam[2] - center[2]};
+ Vertex r = new Vertex(dir);
+ n = r.projectOnto(n);
+ Iterator iter = s.getEdges().iterator();
+ Vertex roll = new Vertex(currentCamera.getRoll());
+ Vertex newroll = null;
+ double angle = 2 * 3.14;
+ while (iter.hasNext()) {
+ Edge e = (Edge)iter.next();
+ Vertex d = e.getDirection();
+ double tmp = d.angle(roll);
+ if (tmp < angle) {
+ angle = tmp;
+ newroll = d;
+ }
+ }
+ newroll.normalize();
+ currentCamera.setRoll(new double[]{newroll.getX(), newroll.getY(), newroll.getZ()});
+ currentCamera.setCenter(new double[]{cen.getX(), cen.getY(), cen.getZ()});
+ currentCamera.setCamera(new double[]{cen.getX() + n.getX(),
+ cen.getY() + n.getY(), cen.getZ() + n.getZ()});
+ Collection < Surface > c = new LinkedList < Surface > ();
+ c.add(s);
+ currentCamera.zoomOn(c, 1.0);
+ }
}
|