package org.jzy3d.plot3d.transform;
import org.jzy3d.maths.BoundingBox3d;
import org.jzy3d.maths.Coord3d;
import org.jzy3d.plot3d.primitives.AbstractDrawable;
import org.jzy3d.plot3d.rendering.compat.GLES2CompatUtils;
import com.jogamp.opengl.GL;
/**
* Translate drawable to (0,0,0) or back to its previous position according to
* the input parameters.
*/
public class TranslateDrawable implements Transformer {
public TranslateDrawable(AbstractDrawable drawable, boolean reverse) {
super();
this.reverse = reverse;
this.drawable = drawable;
}
@Override
public void execute(GL gl) {
if (drawable != null) {
BoundingBox3d bounds = drawable.getBounds();
if (bounds != null) {
Coord3d center = bounds.getCenter();
translateTo(gl, center, reverse);
}
}
}
public void translateTo(GL gl, Coord3d center, boolean reverse) {
if (gl.isGLES()) {
float reverseCoef = (reverse ? -1.0f : 1.0f);
GLES2CompatUtils.glTranslatef(reverseCoef * center.x / 2, reverseCoef * center.y / 2, reverseCoef * center.z / 2);
} else {
if (reverse)
gl.getGL2().glTranslatef(-center.x / 2, -center.y / 2, -center.z / 2);
else
gl.getGL2().glTranslatef(center.x / 2, center.y / 2, center.z / 2);
}
}
@Override
public Coord3d compute(Coord3d input) {
if (drawable != null) {
BoundingBox3d bounds = drawable.getBounds();
if (bounds != null) {
Coord3d center = bounds.getCenter();
if (reverse)
return input.sub(center.div(2));
else
return input.add(center.div(2));
}
}
return null;
}
public AbstractDrawable getDrawable() {
return drawable;
}
public void setDrawable(AbstractDrawable drawable) {
this.drawable = drawable;
}
public boolean isReverse() {
return reverse;
}
public void setReverse(boolean reverse) {
this.reverse = reverse;
}
@Override
public String toString() {
return "(TranslateDrawable)" + drawable;
}
protected AbstractDrawable drawable;
protected boolean reverse;
}
Ads help maintain this website.