package org.jzy3d.plot3d.rendering.view.annotation;
import org.jzy3d.colors.Color;
import org.jzy3d.maths.Coord2d;
import org.jzy3d.maths.Coord3d;
import org.jzy3d.maths.Utils;
import org.jzy3d.plot3d.primitives.AbstractDrawable;
import org.jzy3d.plot3d.primitives.AbstractGeometry;
import org.jzy3d.plot3d.primitives.Point;
import org.jzy3d.plot3d.primitives.Polygon;
import org.jzy3d.plot3d.rendering.compat.GLES2CompatUtils;
import org.jzy3d.plot3d.rendering.ordering.AbstractOrderingStrategy;
import org.jzy3d.plot3d.rendering.scene.Graph;
import org.jzy3d.plot3d.rendering.view.Camera;
import org.jzy3d.plot3d.rendering.view.View;
import org.jzy3d.plot3d.text.ITextRenderer;
import org.jzy3d.plot3d.text.align.Halign;
import org.jzy3d.plot3d.text.align.Valign;
import org.jzy3d.plot3d.text.renderers.TextBitmapRenderer;
import com.jogamp.opengl.GL;
import com.jogamp.opengl.glu.GLU;
/**
* Draws all point distance to camera eye.
*
* The camera is represented as a red point.
*
* @author Martin
*/
public class CameraDistanceAnnotation extends Point {
public CameraDistanceAnnotation(View view, Color color) {
super();
this.view = view;
setColor(color);
setWidth(5);
}
@Override
public void draw(GL gl, GLU glu, Camera cam) {
computeCameraPosition();
doTransform(gl, glu, cam);
doDrawCamera(gl, glu, cam);
Halign h = Halign.RIGHT;
Valign v = Valign.CENTER;
Coord2d screenOffset = new Coord2d(10, 0);
Color colorBary = Color.BLACK;
Color colorPt = Color.GRAY.clone();
colorPt.alphaSelf(0.5f);
Graph graph = view.getScene().getGraph();
AbstractOrderingStrategy strat = graph.getStrategy();
for (AbstractDrawable drawables : graph.getDecomposition()) {
double d = strat.score(drawables);
txt.drawText(gl, glu, view.getCamera(), Utils.num2str(d, 4),
drawables.getBarycentre(), h, v, colorBary, screenOffset,3);
if (drawables instanceof AbstractGeometry) {
Polygon p = (Polygon) drawables;
for (Point pt : p.getPoints()) {
// Point pt2 = pt.clone();
d = strat.score(pt);
txt.drawText(gl, glu, view.getCamera(),
Utils.num2str(d, 4), pt.getCoord(), h, v, colorPt,
screenOffset,3);
}
}
}
}
public void computeCameraPosition() {
Coord3d scaling = view.getLastViewScaling().clone();
xyz = view.getCamera().getEye().clone();
xyz = xyz.div(scaling);
}
public void doDrawCamera(GL gl, GLU glu, Camera cam) {
if (gl.isGL2()) {
gl.getGL2().glPointSize(width);
gl.getGL2().glBegin(GL.GL_POINTS);
gl.getGL2().glColor4f(rgb.r, rgb.g, rgb.b, rgb.a);
gl.getGL2().glVertex3f(xyz.x, xyz.y, xyz.z);
gl.getGL2().glEnd();
} else {
GLES2CompatUtils.glPointSize(width);
GLES2CompatUtils.glBegin(GL.GL_POINTS);
GLES2CompatUtils.glColor4f(rgb.r, rgb.g, rgb.b, rgb.a);
GLES2CompatUtils.glVertex3f(xyz.x, xyz.y, xyz.z);
GLES2CompatUtils.glEnd();
}
}
protected View view;
protected ITextRenderer txt = new TextBitmapRenderer();
}
Ads help maintain this website.