package eclipse.view.gui.tab.graph; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.GridLayout; import java.util.List; import java.util.Observable; import java.util.Observer; import javax.swing.BorderFactory; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; import org.jfree.chart.ChartMouseEvent; import org.jfree.chart.ChartMouseListener; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.entity.XYItemEntity; import org.jfree.chart.plot.XYPlot; import org.jfree.chart.renderer.xy.StandardXYItemRenderer; import org.jfree.data.time.TimeSeries; import org.jfree.data.xy.DefaultXYDataset; import org.jfree.ui.RectangleInsets; import eclipse.model.data.Data; import eclipse.model.data.DataManager; import eclipse.model.data.Device; import eclipse.model.data.DeviceItem; import eclipse.view.gui.tab.TabPane; /** * This graph give a view off the RPM associated to the W required to move at thi moment * @author Marco * */ public class TelemetryGraphPoint extends JPanel implements Observer, TabPane { private static final long serialVersionUID = 2510144635582789458L; TimeSeries graphedValues; ChartPanel chartPanel; int deviceId; int itemDeviceId; DeviceItem item; Device device; DefaultXYDataset dataset; double x; double y; double[][] seriesmarco; public TelemetryGraphPoint() { this.deviceId = 3; this.itemDeviceId = 11; item = DataManager.getInstance().getDeviceByID(deviceId).getItemByID(itemDeviceId); device = DataManager.getInstance().getDeviceByID(deviceId); //item.addObserver(this); addHistory(); createGraph(); this.setLayout(new GridLayout(1,1)); this.add(chartPanel); //this.setSize(1000,1000); } private void createGraph() { //graphedValues = new TimeSeries(item.getUnit()); //graphedValues = new TimeSeries(item.getUnit(), Second.class); //graphedValues.setMaximumItemAge(3000); //graphedValues.setMaximumItemCount(30); dataset= new DefaultXYDataset(); //dataset.addSeries(this.graphedValues); dataset.addSeries(1,seriesmarco); NumberAxis domain = new NumberAxis("W Dépensé"); NumberAxis range = new NumberAxis("RPM"); //range.setRange(item.getMinValue(), item.getMaxValue()); range.setAutoRange(true); domain.setAutoRange(true); range.setAutoRangeIncludesZero(false); domain.setAutoRangeIncludesZero(false); domain.setTickLabelFont(new Font("SansSerif", Font.PLAIN, 12)); range.setTickLabelFont(new Font("SansSerif", Font.PLAIN, 12)); domain.setLabelFont(new Font("SansSerif", Font.PLAIN, 14)); range.setLabelFont(new Font("SansSerif", Font.PLAIN, 14)); StandardXYItemRenderer renderer = new StandardXYItemRenderer(StandardXYItemRenderer.SHAPES); renderer.setSeriesPaint(0, Color.RED); renderer.setBaseStroke(new BasicStroke(3f, BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL)); XYPlot plot = new XYPlot(dataset, domain, range, renderer); plot.setBackgroundPaint(Color.lightGray); plot.setDomainGridlinePaint(Color.white); plot.setRangeGridlinePaint(Color.white); plot.setAxisOffset(new RectangleInsets(5.0, 5.0, 5.0, 5.0)); domain.setAutoRange(true); // domain.setLowerMargin(0.0); // domain.setUpperMargin(0.0); domain.setTickLabelsVisible(true); //range.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); JFreeChart chart = new JFreeChart("Puissance vs Vitesse", new Font("SansSerif",Font.BOLD, 24), plot, true); //List<String> subtitles = new List<String>(); //subtitles.add("(on " + device.getName() + ")"); //chart.setSubtitles(subtitles); chart.setBackgroundPaint(Color.white); chartPanel = new ChartPanel(chart); chartPanel.setBorder(BorderFactory.createCompoundBorder( BorderFactory.createEmptyBorder(4, 4, 4, 4), BorderFactory.createLineBorder(Color.black))); chartPanel.setSize(new Dimension(400, 400)); chartPanel.addChartMouseListener(new ChartMouseListener(){ public void chartMouseClicked(ChartMouseEvent e){ try{ XYItemEntity xyitem=(XYItemEntity) e.getEntity(); double x = dataset.getXValue(xyitem.getSeriesIndex(), xyitem.getItem()); double y = dataset.getYValue(xyitem.getSeriesIndex(), xyitem.getItem()); JOptionPane.showMessageDialog(new JFrame(), ""+y+" :: "+x); } catch(Exception exception ) { } } @SuppressWarnings("unused") public void chartMouseClicked1(ChartMouseEvent arg0) { XYItemEntity xyitem=(XYItemEntity) arg0.getEntity(); double x = dataset.getXValue(xyitem.getSeriesIndex(), xyitem.getItem()); double y = dataset.getYValue(xyitem.getSeriesIndex(), xyitem.getItem()); } @Override public void chartMouseMoved(ChartMouseEvent arg0) { // TODO Auto-generated method stub } }); } @SuppressWarnings("unused") private void addValuetoGraph(double value) { } private void addHistory() { List<Data> speed = item.getAllData(); List<Data> voltage = null; List<Data> current = null; voltage =DataManager.getInstance().getDeviceByID(3).getItemByID(73).getAllData(); current =DataManager.getInstance().getDeviceByID(3).getItemByID(72).getAllData(); seriesmarco = new double[2][speed.size()]; for(int i=0;i<seriesmarco[0].length;i++){ if(i<voltage.size()&&i<current.size()) seriesmarco[0][i]=voltage.get(i).getData()*current.get(i).getData(); seriesmarco[1][i]=speed.get(i).getData(); } // graphedValues = new TimeSeries("value"); // for (int i=0;i<tmp.length;i++) // graphedValues.addOrUpdate(new Second(new Date((long) tmp[i][0])), tmp[i][1]*3.6); // } @Override public void updateValues() { } @Override public void update(Observable arg0, Object arg1) { } }