package mikera.transformz.impl; import mikera.transformz.ATranslation; import mikera.transformz.Translation3; import mikera.transformz.marker.ISpecialisedTransform; import mikera.vectorz.AVector; import mikera.vectorz.Vector; import mikera.vectorz.Vector3; /** * Class representing a transform that returns a 3D constant * @author Mike * */ public final class ConstantTransform3 extends AConstantTransform implements ISpecialisedTransform { private double x,y,z; /** * Creates a new constant transform, using the provided vector as the constant value * Does *not* take a defensive copy * @param inputDimensions * @param value */ public ConstantTransform3(int inputDimensions, AVector value) { super(inputDimensions); x=value.get(0); y=value.get(1); z=value.get(2); } @Override public double calculateElement(int i, AVector inputVector) { switch (i) { case 0: return x; case 1: return y; case 2: return z; default: throw new IndexOutOfBoundsException("Index: "+i); } } @Override public int outputDimensions() { return 3; } @Override public void transform(AVector source, AVector dest) { if (dest instanceof Vector3) { transform(source,(Vector3)dest); return; } assert(source.length()==inputDimensions()); dest.set(0,x); dest.set(1,y); dest.set(2,z); } @Override public Vector transform(AVector source) { return Vector.of(x,y,z); } public Vector3 transform(Vector3 source) { return Vector3.of(x,y,z); } public void transform(AVector source, Vector3 dest) { assert(source.length()==inputDimensions()); dest.x=x; dest.y=y; dest.z=z; } @Override public ATranslation getTranslation() { return new Translation3(x,y,z); } @Override public AVector getConstantValue() { return new Vector3(x,y,z); } }