package org.jzy3d.plot3d.primitives.interactive.tools;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Vector;
import org.apache.log4j.Logger;
import org.jzy3d.chart.Chart;
import org.jzy3d.colors.Color;
import org.jzy3d.maths.Coord3d;
import org.jzy3d.maths.TicToc;
import org.jzy3d.plot3d.primitives.AbstractComposite;
import org.jzy3d.plot3d.primitives.AbstractDrawable;
import org.jzy3d.plot3d.primitives.Polygon;
import org.jzy3d.plot3d.rendering.scene.Decomposition;
import org.jzy3d.plot3d.rendering.scene.Graph;
import org.jzy3d.plot3d.rendering.view.Camera;
import com.jogamp.opengl.GL;
import com.jogamp.opengl.glu.GLU;
public class ProjectionUtils {
static Logger logger = Logger.getLogger(ProjectionUtils.class);
public static List project(Chart chart){
return project(chart.getView().getCurrentGL(), new GLU(), chart.getView().getCamera(), chart.getScene().getGraph());
}
public static List project(GL gl, GLU glu, Camera cam, Graph g){
return project(gl, glu, cam, g.getAll());
}
public static List project(GL gl, GLU glu, Camera cam, List list){
return project(gl, glu, cam, Decomposition.getDecomposition(list));
}
public static List project(GL gl, GLU glu, Camera cam, AbstractComposite c){
ArrayList monotypes = Decomposition.getDecomposition(c);
return project(gl, glu, cam, monotypes);
}
public static List project(GL gl, GLU glu, Camera cam, ArrayList monotypes){
final TicToc t = new TicToc();
String report = "";
// prepare a more efficient datastructure
ArrayList> polygons = new ArrayList>(monotypes.size());
ArrayList> colors = new ArrayList>(monotypes.size());
for(AbstractDrawable d: monotypes){
if( d instanceof Polygon ){
polygons.add( ProjectionUtils.getCoordinatesAsArrayList( (Polygon)d ) );
colors.add( ProjectionUtils.getColorsAsArrayList( (Polygon)d ) );
}
else
logger.warn("Only polygons are supported. Ignoring :" + d.getClass());
}
// project
t.tic();
ArrayList> projections = cam.modelToScreen(gl, glu, polygons);
t.toc(); report += " Projections :" + t.elapsedMilisecond();
// gather polygon and its colors in a data structure
int k=0;
List polygonProjections = new ArrayList();
for(ArrayList p: projections){
polygonProjections.add( new PolygonProjection(p, colors.get(k++)) );
}
// sort according to z
t.tic();
Collections.sort(polygonProjections, new ProjectionComparator());
t.tocShow(report+ " Sort : ");
return polygonProjections;
}
/************************************************/
public static ArrayList getCoordinatesAsArrayList(Polygon p){
ArrayList coords = new ArrayList(p.size());
for(int i=0; i getCoordinates(Polygon p){
List coords = new Vector(p.size());
for(int i=0; i getColorsAsArrayList(Polygon p){
ArrayList colors = new ArrayList(4);
for(int i=0; i getColors(Polygon p){
List colors = new Vector(4);
for(int i=0; i
Ads help maintain this website.