One more drawable ScatterPoint supporting LightPoint+1 more time serie 2d

This commit is contained in:
Martin Pernollet 2014-10-26 02:36:20 +02:00
parent 0d95faf38d
commit 271292f59e
10 changed files with 384 additions and 26 deletions

View File

@ -9,6 +9,7 @@ import org.jzy3d.chart.AWTChart;
import org.jzy3d.chart.factories.IChartComponentFactory; import org.jzy3d.chart.factories.IChartComponentFactory;
import org.jzy3d.chart.factories.IChartComponentFactory.Toolkit; import org.jzy3d.chart.factories.IChartComponentFactory.Toolkit;
import org.jzy3d.chart2d.primitives.LineSerie2d; import org.jzy3d.chart2d.primitives.LineSerie2d;
import org.jzy3d.chart2d.primitives.ScatterPointSerie2d;
import org.jzy3d.chart2d.primitives.ScatterSerie2d; import org.jzy3d.chart2d.primitives.ScatterSerie2d;
import org.jzy3d.chart2d.primitives.Serie2d; import org.jzy3d.chart2d.primitives.Serie2d;
import org.jzy3d.maths.BoundingBox3d; import org.jzy3d.maths.BoundingBox3d;
@ -34,6 +35,10 @@ public class Chart2d extends AWTChart {
public Chart2d(Toolkit toolkit) { public Chart2d(Toolkit toolkit) {
this(new Chart2dComponentFactory(), Quality.Intermediate, toolkit.toString()); this(new Chart2dComponentFactory(), Quality.Intermediate, toolkit.toString());
layout2d();
}
public void layout2d() {
IAxeLayout axe = getAxeLayout(); IAxeLayout axe = getAxeLayout();
axe.setZAxeLabelDisplayed(false); axe.setZAxeLabelDisplayed(false);
axe.setTickLineDisplayed(false); axe.setTickLineDisplayed(false);
@ -70,6 +75,8 @@ public class Chart2d extends AWTChart {
serie = new LineSerie2d(name); serie = new LineSerie2d(name);
else if (Serie2d.Type.SCATTER.equals(type)) else if (Serie2d.Type.SCATTER.equals(type))
serie = new ScatterSerie2d(name); serie = new ScatterSerie2d(name);
else if (Serie2d.Type.SCATTER_POINTS.equals(type))
serie = new ScatterPointSerie2d(name);
else else
throw new IllegalArgumentException("Unsupported serie type " + type); throw new IllegalArgumentException("Unsupported serie type " + type);
return serie; return serie;
@ -83,6 +90,7 @@ public class Chart2d extends AWTChart {
public Chart2d(IChartComponentFactory factory, Quality quality, String windowingToolkit) { public Chart2d(IChartComponentFactory factory, Quality quality, String windowingToolkit) {
super(factory, quality, windowingToolkit); super(factory, quality, windowingToolkit);
layout2d();
} }
public Chart2d(IChartComponentFactory components, Quality quality) { public Chart2d(IChartComponentFactory components, Quality quality) {

View File

@ -18,6 +18,12 @@ public class Chart2dComponentFactory extends AWTChartComponentFactory{
public Chart newChart(IChartComponentFactory factory, Quality quality, String toolkit){ public Chart newChart(IChartComponentFactory factory, Quality quality, String toolkit){
return new Chart2d(factory, quality, toolkit); return new Chart2d(factory, quality, toolkit);
} }
@Override
public Chart newChart(Quality quality, Toolkit toolkit) {
return new Chart2d(this, quality, toolkit.toString());
}
@Override @Override
public IAxe newAxe(BoundingBox3d box, View view) { public IAxe newAxe(BoundingBox3d box, View view) {
AxeBox2d axe = new AxeBox2d(box); AxeBox2d axe = new AxeBox2d(box);
@ -30,20 +36,20 @@ public class Chart2dComponentFactory extends AWTChartComponentFactory{
return new View2d(this, scene, canvas, quality); return new View2d(this, scene, canvas, quality);
} }
public static Chart chart() { public static Chart2d chart() {
return chart(Quality.Intermediate); return (Chart2d)chart(Quality.Intermediate);
} }
public static Chart chart(Quality quality) { public static Chart2d chart(Quality quality) {
return f.newChart(quality, Toolkit.newt); return (Chart2d)f.newChart(quality, Toolkit.newt);
} }
public static Chart chart(String toolkit) { public static Chart2d chart(String toolkit) {
return f.newChart(Chart.DEFAULT_QUALITY, toolkit); return (Chart2d)f.newChart(Chart.DEFAULT_QUALITY, toolkit);
} }
public static Chart chart(Quality quality, Toolkit toolkit) { public static Chart2d chart(Quality quality, Toolkit toolkit) {
return f.newChart(quality, toolkit); return (Chart2d)f.newChart(quality, toolkit);
} }
public static Chart chart(Quality quality, String toolkit) { public static Chart2d chart(Quality quality, String toolkit) {
return f.newChart(quality, toolkit); return (Chart2d)f.newChart(quality, toolkit);
} }
static Chart2dComponentFactory f = new Chart2dComponentFactory(); static Chart2dComponentFactory f = new Chart2dComponentFactory();

View File

@ -5,9 +5,8 @@ import java.util.List;
import org.jzy3d.colors.Color; import org.jzy3d.colors.Color;
import org.jzy3d.maths.Coord2d; import org.jzy3d.maths.Coord2d;
import org.jzy3d.maths.Coord3d; import org.jzy3d.maths.Coord3d;
import org.jzy3d.plot3d.primitives.AbstractDrawable;
import org.jzy3d.plot3d.primitives.Point;
import org.jzy3d.plot3d.primitives.ConcurrentLineStrip; import org.jzy3d.plot3d.primitives.ConcurrentLineStrip;
import org.jzy3d.plot3d.primitives.Point;
public class LineSerie2d implements Serie2d { public class LineSerie2d implements Serie2d {
protected ConcurrentLineStrip line = new ConcurrentLineStrip(); protected ConcurrentLineStrip line = new ConcurrentLineStrip();
@ -33,6 +32,11 @@ public class LineSerie2d implements Serie2d {
line.add(new Point(new Coord3d(c.x, c.y, 0))); line.add(new Point(new Coord3d(c.x, c.y, 0)));
} }
@Override
public void add(Coord2d c, Color color) {
line.add(new Point(new Coord3d(c.x, c.y, 0), color));
}
@Override @Override
public void add(List<Coord2d> c) { public void add(List<Coord2d> c) {
for(Coord2d c2: c){ for(Coord2d c2: c){
@ -64,5 +68,10 @@ public class LineSerie2d implements Serie2d {
public void clear() { public void clear() {
line.clear(); line.clear();
} }
@Override
public void setWidth(int width) {
line.setWireframeWidth(width);
}
} }

View File

@ -0,0 +1,89 @@
package org.jzy3d.chart2d.primitives;
import java.util.List;
import org.jzy3d.colors.Color;
import org.jzy3d.maths.Coord2d;
import org.jzy3d.maths.Coord3d;
import org.jzy3d.plot3d.primitives.AbstractDrawable;
import org.jzy3d.plot3d.primitives.ConcurrentScatterPoint;
import org.jzy3d.plot3d.primitives.LightPoint;
// TODO : create LightPoint that don't hold a bounding box
public class ScatterPointSerie2d implements Serie2d {
protected ConcurrentScatterPoint scatter;
protected String name;
protected Color defaultColor = Color.YELLOW.clone();
public ScatterPointSerie2d(String name){
this.name = name;
this.scatter = makeDrawable();
}
protected ConcurrentScatterPoint makeDrawable() {
ConcurrentScatterPoint s = new ConcurrentScatterPoint();
s.setWidth(3);
return s;
}
@Override
public void add(float x, float y) {
scatter.add(new LightPoint(new Coord3d(x, y, 0), defaultColor));
}
@Override
public void add(double x, double y) {
scatter.add(new LightPoint(new Coord3d(x, y, 0), defaultColor));
}
@Override
public void add(Coord2d c) {
scatter.add(new LightPoint(new Coord3d(c.x, c.y, 0), defaultColor));
}
@Override
public void add(Coord2d c, Color color) {
scatter.add(new LightPoint(new Coord3d(c.x, c.y, 0), color));
}
@Override
public void add(List<Coord2d> c) {
for(Coord2d c2: c){
scatter.add(new LightPoint(new Coord3d(c2.x, c2.y, 0), defaultColor));
}
}
@Override
public void setColor(Color color){
//line.setColor(color);
}
@Override
public Color getColor(){
return null;//line.getWireframeColor();
}
@Override
public String getName() {
return name;
}
@Override
public AbstractDrawable getDrawable() {
return scatter;
}
@Override
public void clear() {
scatter.clear();
}
@Override
public void setWidth(int width) {
scatter.setWidth(width);
}
}

View File

@ -21,6 +21,27 @@ public class ScatterSerie2d implements Serie2d {
} }
protected ScatterMultiColorList makeDrawable() { protected ScatterMultiColorList makeDrawable() {
ColorMapRedAndGreen g = colormap();
ColorMapper m = colormapper(g);
ScatterMultiColorList s = new ConcurrentScatterMultiColorList(m);
s.setWidth(3);
return s;
}
public ColorMapper colormapper(ColorMapRedAndGreen g) {
ColorMapper m = new ColorMapper(g, 0, 1){
public Color getColor(Coord3d coord){
Color out = colormap.getColor(this, coord.x, coord.z, coord.y);
if(factor!=null)
out.mul(factor);
return out;
}
};
return m;
}
public ColorMapRedAndGreen colormap() {
ColorMapRedAndGreen g = new ColorMapRedAndGreen(){ ColorMapRedAndGreen g = new ColorMapRedAndGreen(){
public Color getColor(double x, double y, double z, double zMin, double zMax) { public Color getColor(double x, double y, double z, double zMin, double zMax) {
double rel_value = processRelativeZValue(z, zMin, zMax); double rel_value = processRelativeZValue(z, zMin, zMax);
@ -37,19 +58,7 @@ public class ScatterSerie2d implements Serie2d {
} }
}; };
g.setDirection(false); g.setDirection(false);
ColorMapper m = new ColorMapper(g, 0, 1){ return g;
public Color getColor(Coord3d coord){
Color out = colormap.getColor(this, coord.x, coord.z, coord.y);
if(factor!=null)
out.mul(factor);
return out;
}
};
ScatterMultiColorList s = new ConcurrentScatterMultiColorList(m);
s.setWidth(3);
return s;
} }
@Override @Override
@ -66,6 +75,12 @@ public class ScatterSerie2d implements Serie2d {
public void add(Coord2d c) { public void add(Coord2d c) {
scatter.add(new Coord3d(c.x, c.y, 0)); scatter.add(new Coord3d(c.x, c.y, 0));
} }
@Override
public void add(Coord2d c, Color color) {
scatter.add(new Coord3d(c.x, c.y, 0));
}
@Override @Override
public void add(List<Coord2d> c) { public void add(List<Coord2d> c) {
@ -98,5 +113,10 @@ public class ScatterSerie2d implements Serie2d {
public void clear() { public void clear() {
scatter.clear(); scatter.clear();
} }
@Override
public void setWidth(int width) {
scatter.setWidth(width);
}
} }

View File

@ -11,15 +11,18 @@ public interface Serie2d {
public void add(float x, float y); public void add(float x, float y);
public void add(double x, double y); public void add(double x, double y);
public void add(Coord2d c); public void add(Coord2d c);
public void add(Coord2d c, Color color);
public void add(List<Coord2d> c); public void add(List<Coord2d> c);
public String getName(); public String getName();
public void setWidth(int width);
public void setColor(Color color); public void setColor(Color color);
public Color getColor(); public Color getColor();
public AbstractDrawable getDrawable(); public AbstractDrawable getDrawable();
public enum Type{ public enum Type{
LINE, SCATTER LINE, SCATTER, SCATTER_POINTS
} }
} }

View File

@ -0,0 +1,77 @@
package org.jzy3d.plot3d.primitives;
import java.util.List;
import javax.media.opengl.GL;
import javax.media.opengl.GL2;
import org.jzy3d.maths.Coord3d;
import org.jzy3d.plot3d.rendering.compat.GLES2CompatUtils;
import org.jzy3d.plot3d.transform.Transform;
public class ConcurrentScatterPoint extends ScatterPoint {
public ConcurrentScatterPoint() {
super();
}
public ConcurrentScatterPoint(List<LightPoint> points, float width) {
super(points, width);
}
public void drawGLES2() {
GLES2CompatUtils.glPointSize(width);
GLES2CompatUtils.glBegin(GL2.GL_POINTS);
if (points != null) {
synchronized (points) {
for (LightPoint p : points) {
GLES2CompatUtils.glColor4f(p.rgb.r, p.rgb.g, p.rgb.b, p.rgb.a);
GLES2CompatUtils.glVertex3f(p.xyz.x, p.xyz.y, p.xyz.z);
}
}
}
GLES2CompatUtils.glEnd();
}
public void drawGL2(GL gl) {
gl.getGL2().glPointSize(width);
gl.getGL2().glBegin(GL2.GL_POINTS);
if (points != null) {
synchronized (points) {
for (LightPoint p : points) {
gl.getGL2().glColor4f(p.rgb.r, p.rgb.g, p.rgb.b, p.rgb.a);
gl.getGL2().glVertex3f(p.xyz.x, p.xyz.y, p.xyz.z);
}
}
}
gl.getGL2().glEnd();
}
@Override
public void applyGeometryTransform(Transform transform) {
synchronized (points) {
for (LightPoint p : points) {
Coord3d c = p.xyz;
c.set(transform.compute(c));
}
}
updateBounds();
}
public void add(LightPoint point) {
synchronized (points) {
this.points.add(point);
}
updateBounds();
}
@Override
public void updateBounds() {
bbox.reset();
synchronized (points) {
for (LightPoint c : points)
bbox.add(c.xyz);
}
}
}

View File

@ -0,0 +1,14 @@
package org.jzy3d.plot3d.primitives;
import org.jzy3d.colors.Color;
import org.jzy3d.maths.Coord3d;
public class LightPoint {
public Coord3d xyz;
public Color rgb;
public LightPoint(Coord3d xyz, Color rgb) {
this.xyz = xyz;
this.rgb = rgb;
}
}

View File

@ -94,11 +94,13 @@ public class LineStrip extends AbstractWireframeable {
for (Point p : points) { for (Point p : points) {
gl.getGL2().glColor4f(p.rgb.r, p.rgb.g, p.rgb.b, p.rgb.a); gl.getGL2().glColor4f(p.rgb.r, p.rgb.g, p.rgb.b, p.rgb.a);
gl.getGL2().glVertex3f(p.xyz.x, p.xyz.y, p.xyz.z); gl.getGL2().glVertex3f(p.xyz.x, p.xyz.y, p.xyz.z);
//System.out.println(p.xyz + p.rgb.toString());
} }
} else { } else {
for (Point p : points) { for (Point p : points) {
gl.getGL2().glColor4f(wfcolor.r, wfcolor.g, wfcolor.b, wfcolor.a); gl.getGL2().glColor4f(wfcolor.r, wfcolor.g, wfcolor.b, wfcolor.a);
gl.getGL2().glVertex3f(p.xyz.x, p.xyz.y, p.xyz.z); gl.getGL2().glVertex3f(p.xyz.x, p.xyz.y, p.xyz.z);
//System.out.println(p.xyz + wfcolor.toString());
} }
} }
gl.getGL2().glEnd(); gl.getGL2().glEnd();

View File

@ -0,0 +1,130 @@
package org.jzy3d.plot3d.primitives;
import java.util.ArrayList;
import java.util.List;
import javax.media.opengl.GL;
import javax.media.opengl.GL2;
import javax.media.opengl.glu.GLU;
import org.jzy3d.colors.Color;
import org.jzy3d.colors.ISingleColorable;
import org.jzy3d.maths.BoundingBox3d;
import org.jzy3d.maths.Coord3d;
import org.jzy3d.plot3d.rendering.compat.GLES2CompatUtils;
import org.jzy3d.plot3d.rendering.view.Camera;
import org.jzy3d.plot3d.transform.Transform;
/**
* Experimental 3d object.
*
* @author Martin Pernollet
*
*/
public class ScatterPoint extends AbstractDrawable implements ISingleColorable {
public ScatterPoint() {
bbox = new BoundingBox3d();
setWidth(1.0f);
setPoints(new ArrayList<LightPoint>());
}
public ScatterPoint(List<LightPoint> points, float width) {
bbox = new BoundingBox3d();
setPoints(points);
setWidth(width);
}
public void clear() {
points.clear();;
bbox.reset();
}
/* */
public void draw(GL gl, GLU glu, Camera cam) {
doTransform(gl, glu, cam);
if (gl.isGL2()) {
drawGL2(gl);
} else {
drawGLES2();
}
doDrawBounds(gl, glu, cam);
}
public void drawGLES2() {
GLES2CompatUtils.glPointSize(width);
GLES2CompatUtils.glBegin(GL2.GL_POINTS);
if (points != null) {
for (LightPoint p : points) {
GLES2CompatUtils.glColor4f(p.rgb.r, p.rgb.g, p.rgb.b, p.rgb.a);
GLES2CompatUtils.glVertex3f(p.xyz.x, p.xyz.y, p.xyz.z);
}
}
GLES2CompatUtils.glEnd();
}
public void drawGL2(GL gl) {
gl.getGL2().glPointSize(width);
gl.getGL2().glBegin(GL2.GL_POINTS);
if (points != null) {
for (LightPoint p : points) {
gl.getGL2().glColor4f(p.rgb.r, p.rgb.g, p.rgb.b, p.rgb.a);
gl.getGL2().glVertex3f(p.xyz.x, p.xyz.y, p.xyz.z);
}
}
gl.getGL2().glEnd();
}
public void applyGeometryTransform(Transform transform) {
for (LightPoint p : points) {
Coord3d c = p.xyz;
c.set(transform.compute(c));
}
updateBounds();
}
/* */
public void add(LightPoint point) {
this.points.add(point);
updateBounds();
}
public void setPoints(List<LightPoint> points) {
this.points = points;
updateBounds();
}
public void updateBounds() {
bbox.reset();
for (LightPoint c : points)
bbox.add(c.xyz);
}
public List<LightPoint> getData() {
return points;
}
public void setColor(Color color) {
}
public Color getColor() {
return null;
}
/**
* Set the width of the point.
*
* @param width
* point's width
*/
public void setWidth(float width) {
this.width = width;
}
public List<LightPoint> points;
public float width;
}