/**
*
*/
package ddddbb.comb;
import ddddbb.math.Camera4d;
import ddddbb.math.D3Graphics;
import ddddbb.math.Point;
import ddddbb.math.Point2d;
import ddddbb.math.Point3d;
import ddddbb.math.Point4d;
import ddddbb.math.Camera4d.ProjectionException;
public abstract class ALocation {
abstract public Point o();
abstract public int spaceDim();
abstract public int dim();
public boolean p3AheadEye;
public Point3d p3;
public boolean p2AheadEye;
public Point2d p2l;
public Point2d p2r;
/* computes the temporary p3, p2l and p2r projections if not already done (IN) */
public void proj3d2dIN(D3Graphics g3,Camera4d c4) throws ProjectionException {
proj2dIN(g3,c4);
}
public void proj3dIN(Camera4d c4) throws ddddbb.math.Camera4d.ProjectionException {
assert dim() == 0;
if (spaceDim() == 4) {
if ( p3 == null ) {
p3 = new Point3d();
}
p3AheadEye = c4.proj3d((Point4d)o(),p3);
if (!p3AheadEye) { throw new Camera4d.ProjectionException(); }
}
if (spaceDim() == 3) {
p3 = (Point3d)o();
}
}
public void proj2dIN(D3Graphics g3,Camera4d c4) throws ProjectionException {
assert spaceDim() == 4;
assert dim() == 0;
proj3dIN(c4);
if (p2l == null ) {
p2l = new Point2d();
p2r = new Point2d();
}
p2AheadEye = g3.screenProj(p3,p2l,p2r);
}
Cell _dst;
}