viernes, 20 de diciembre de 2013

Uso jzy3d en JFrame y JPanel

Ejemplo de uso de jzy3d en un panel, en este caso utilicé versión jzy3d-api-0.9.2-SNAPSHOT para generar una gráfica de superficie.
import java.awt.BorderLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.border.MatteBorder;

import org.jzy3d.chart.Chart;
import org.jzy3d.chart.controllers.keyboard.camera.AWTCameraKeyController;
import org.jzy3d.chart.factories.SwingChartComponentFactory;
import org.jzy3d.colors.ColorMapper;
import org.jzy3d.colors.colormaps.ColorMapRBG;
import org.jzy3d.maths.Coord3d;
import org.jzy3d.plot3d.primitives.Point;
import org.jzy3d.plot3d.primitives.Polygon;
import org.jzy3d.plot3d.primitives.Shape;
import org.jzy3d.plot3d.rendering.canvas.Quality;

public class GraficaPerdidasPorEscenarios {

 public JPanel generarGrafica(double[][] distDataProp){
  List polygons = new ArrayList();
  final JPanel panel = new JPanel();
  panel.setLayout(new BorderLayout()); // Use BorderLayout
  panel.setBounds(10, 10, 100, 100);
  for (int i = 0; i < distDataProp.length - 1; i++) {
   for (int j = 0; j < distDataProp[i].length - 1; j++) {
    Polygon polygon = new Polygon();
    polygon.add(new Point(new Coord3d(i, j, distDataProp[i][j])));
    polygon.add(new Point(new Coord3d(i, j + 1,distDataProp[i][j + 1])));
    polygon.add(new Point(new Coord3d(i + 1, j + 1,distDataProp[i + 1][j + 1])));
    polygon.add(new Point(new Coord3d(i + 1, j,distDataProp[i + 1][j])));
    polygons.add(polygon);
   }
  }

  Shape surface = new Shape(polygons);
  surface.setColorMapper(new ColorMapper(new ColorMapRBG(), surface.getBounds().getZmin(), surface.getBounds().getZmax(),new org.jzy3d.colors.Color(1, 1, 1, 1f)));
  surface.setWireframeDisplayed(true);
  surface.setWireframeColor(org.jzy3d.colors.Color.BLACK);
  Chart chart = SwingChartComponentFactory.chart(Quality.Advanced);
  chart.getScene().getGraph().add(surface);
  chart.addController(new  AWTCameraKeyController());
  JComponent grafica = (JComponent)chart.getCanvas();
  panel.add(grafica);
  return panel;
 }
}

No hay comentarios:

Publicar un comentario