package org.jzy3d.plot3d.primitives.selectable;
import java.util.List;
import org.jzy3d.colors.Color;
import org.jzy3d.colors.ISingleColorable;
import org.jzy3d.maths.Coord3d;
import org.jzy3d.maths.Polygon2d;
import org.jzy3d.plot3d.primitives.Scatter;
import org.jzy3d.plot3d.rendering.compat.GLES2CompatUtils;
import org.jzy3d.plot3d.rendering.view.Camera;
import com.jogamp.opengl.GL;
import com.jogamp.opengl.glu.GLU;
/**
* A Scatter that supports an "highlighted status" to change selected point
* color
*
* @author Martin Pernollet
*
*/
public class SelectableScatter extends Scatter implements ISingleColorable,
Selectable {
public SelectableScatter(Coord3d[] coordinates, Color[] colors) {
super(coordinates, colors);
}
@Override
public void draw(GL gl, GLU glu, Camera cam) {
doTransform(gl, glu, cam);
if (gl.isGL2()) {
gl.getGL2().glPointSize(width);
gl.getGL2().glBegin(GL.GL_POINTS);
if (colors == null)
gl.getGL2().glColor4f(rgb.r, rgb.g, rgb.b, rgb.a);
if (coordinates != null) {
int k = 0;
for (Coord3d c : coordinates) {
if (colors != null) {
if (isHighlighted[k]) // Selection coloring goes here
gl.getGL2().glColor4f(highlightColor.r,
highlightColor.g, highlightColor.b,
highlightColor.a);
else
gl.getGL2().glColor4f(colors[k].r, colors[k].g,
colors[k].b, colors[k].a);
k++;
}
gl.getGL2().glVertex3f(c.x, c.y, c.z);
}
}
gl.getGL2().glEnd();
} else {
GLES2CompatUtils.glPointSize(width);
gl.getGL2().glBegin(GL.GL_POINTS);
if (colors == null)
GLES2CompatUtils.glColor4f(rgb.r, rgb.g, rgb.b, rgb.a);
if (coordinates != null) {
int k = 0;
for (Coord3d c : coordinates) {
if (colors != null) {
if (isHighlighted[k]) // Selection coloring goes here
GLES2CompatUtils.glColor4f(highlightColor.r,
highlightColor.g, highlightColor.b,
highlightColor.a);
else
GLES2CompatUtils.glColor4f(colors[k].r,
colors[k].g, colors[k].b, colors[k].a);
k++;
}
GLES2CompatUtils.glVertex3f(c.x, c.y, c.z);
}
}
GLES2CompatUtils.glEnd();
}
}
@Override
public void project(GL gl, GLU glu, Camera cam) {
projection = cam.modelToScreen(gl, glu, getData());
}
public Coord3d[] getProjection() {
return projection;
}
public Color getHighlightColor() {
return highlightColor;
}
public void setHighlightColor(Color highlightColor) {
this.highlightColor = highlightColor;
}
public void setHighlighted(int id, boolean value) {
isHighlighted[id] = value;
}
public boolean getHighlighted(int id) {
return isHighlighted[id];
}
public void resetHighlighting() {
this.isHighlighted = new boolean[coordinates.length];
}
/* */
/**
* Set the coordinates of the point.
*
* @param xyz
* point's coordinates
*/
@Override
public void setData(Coord3d[] coordinates) {
this.coordinates = coordinates;
this.isHighlighted = new boolean[coordinates.length];
bbox.reset();
for (Coord3d c : coordinates)
bbox.add(c);
}
@Override
public Coord3d[] getData() {
return coordinates;
}
@Override
public Polygon2d getHull2d() {
throw new RuntimeException("not implemented");
}
@Override
public List getLastProjection() {
throw new RuntimeException("not implemented");
}
/**********************************************************************/
protected boolean[] isHighlighted;
protected Color highlightColor = Color.RED.clone();
protected Coord3d[] projection;
}
Ads help maintain this website.