diff --git a/ch.psi.fda/ReleaseNotes.md b/ch.psi.fda/ReleaseNotes.md
index 6d44b51..bf83cd2 100644
--- a/ch.psi.fda/ReleaseNotes.md
+++ b/ch.psi.fda/ReleaseNotes.md
@@ -1,2 +1,4 @@
+# 3.1.0
+ * Abstracted interfaces of plot package and implemented JZY3d, JFreeChart and JavaFX
# 3.0.1
* Update the fda.properties file and replace ch.psi.fda.aq.data.baseDirectory with ch.psi.fda.aq.data.dir.
\ No newline at end of file
diff --git a/ch.psi.fda/pom.xml b/ch.psi.fda/pom.xml
index 6ea429a..9fdbeab 100644
--- a/ch.psi.fda/pom.xml
+++ b/ch.psi.fda/pom.xml
@@ -36,12 +36,6 @@
2.4.1
-
- ch.psi
- plot
- 1.1.31
-
-
com.google.inject
guice
@@ -97,6 +91,11 @@
4.8.2
test
+
+ ${project.groupId}
+ plot
+ 2.0-SNAPSHOT
+
diff --git a/ch.psi.fda/src/main/java/ch/psi/fda/ui/visualizer/SeriesDataFilter.java b/ch.psi.fda/src/main/java/ch/psi/fda/ui/visualizer/SeriesDataFilter.java
index 9d953d7..43a65c2 100644
--- a/ch.psi.fda/src/main/java/ch/psi/fda/ui/visualizer/SeriesDataFilter.java
+++ b/ch.psi.fda/src/main/java/ch/psi/fda/ui/visualizer/SeriesDataFilter.java
@@ -20,6 +20,7 @@
package ch.psi.fda.ui.visualizer;
import ch.psi.plot.Plot;
+import ch.psi.plot.PlotSeries;
public interface SeriesDataFilter {
/**
@@ -27,4 +28,5 @@ public interface SeriesDataFilter {
* @return
*/
public Plot getPlot();
+ public PlotSeries getSeries();
}
diff --git a/ch.psi.fda/src/main/java/ch/psi/fda/ui/visualizer/Visualizer.java b/ch.psi.fda/src/main/java/ch/psi/fda/ui/visualizer/Visualizer.java
index 51fc3b4..11bfe50 100644
--- a/ch.psi.fda/src/main/java/ch/psi/fda/ui/visualizer/Visualizer.java
+++ b/ch.psi.fda/src/main/java/ch/psi/fda/ui/visualizer/Visualizer.java
@@ -19,16 +19,6 @@
package ch.psi.fda.ui.visualizer;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.swing.JPanel;
-import javax.swing.SwingUtilities;
-
-import com.google.common.eventbus.Subscribe;
-
import ch.psi.fda.messages.DataMessage;
import ch.psi.fda.messages.EndOfStreamMessage;
import ch.psi.fda.messages.StreamDelimiterMessage;
@@ -38,12 +28,20 @@ import ch.psi.fda.vdescriptor.XYSeries;
import ch.psi.fda.vdescriptor.XYZSeries;
import ch.psi.fda.vdescriptor.YSeries;
import ch.psi.fda.vdescriptor.YZSeries;
+import ch.psi.plot.LinePlot;
+import ch.psi.plot.LinePlotBase;
+import ch.psi.plot.LinePlotSeries;
+import ch.psi.plot.MatrixPlot;
+import ch.psi.plot.MatrixPlotBase;
+import ch.psi.plot.MatrixPlotSeries;
import ch.psi.plot.Plot;
-import ch.psi.plot.xy.LinePlot;
-import ch.psi.plot.xy.XYSeriesCollectionP;
-import ch.psi.plot.xy.XYSeriesP;
-import ch.psi.plot.xyz.MatrixPlot;
-import ch.psi.plot.xyz.MatrixPlotData;
+import com.google.common.eventbus.Subscribe;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.swing.JPanel;
+import javax.swing.SwingUtilities;
/**
* Visualizer for visualizing data
@@ -61,62 +59,83 @@ public class Visualizer {
private List filters;
private boolean first = true;
-
- public Visualizer(VDescriptor vdescriptor){
+ public Visualizer(VDescriptor vdescriptor){
+ this(vdescriptor,null,null);
+ }
+ public Visualizer(VDescriptor vdescriptor, String linePlotImpl, String matrixPlotImpl){
+ if (linePlotImpl==null){
+ linePlotImpl="jfree";
+ }
+ if (matrixPlotImpl==null){
+ matrixPlotImpl="jfree";
+ }
filters = new ArrayList();
- for(ch.psi.fda.vdescriptor.Plot vplot: vdescriptor.getPlots()){
- if(vplot instanceof ch.psi.fda.vdescriptor.LinePlot){
- ch.psi.fda.vdescriptor.LinePlot lp = (ch.psi.fda.vdescriptor.LinePlot) vplot;
-
- // Create plot for visualization
- ch.psi.plot.xy.LinePlot plot = new ch.psi.plot.xy.LinePlot(lp.getTitle());
-
- for(Series s: lp.getData()){
- if(s instanceof XYSeries){
- XYSeries sxy = (XYSeries)s;
- XYSeriesDataFilter filter = new XYSeriesDataFilter(sxy.getX(), sxy.getY(), plot);
- filter.setSeriesName(sxy.getY());
- filters.add(filter);
- }
- else if(s instanceof YSeries){
- YSeries sy = (YSeries)s;
-
- XYSeriesArrayDataFilter filter = new XYSeriesArrayDataFilter(sy.getY(), plot);
-// filter.setMaxSeries(lp.getMaxSeries()*lp.getY().size()); // Workaround - keep for each array max series
-// filter.setOffset(lp.getOffset());
-// filter.setSize(lp.getSize());
- filter.setSeriesName(sy.getY());
- filters.add(filter);
- }
- }
-
- }
- else if(vplot instanceof ch.psi.fda.vdescriptor.MatrixPlot){
-
- // MatrixPlot does currently not support RegionPositioners because of the
- // plotting problems this would cause. If regions of the positioner have different
- // step sizes it is not easily possible (without (specialized) rasterization) to plot the data.
-
- ch.psi.fda.vdescriptor.MatrixPlot lp = (ch.psi.fda.vdescriptor.MatrixPlot) vplot;
- MatrixPlotData data = new MatrixPlotData(lp.getMinX(), lp.getMaxX(), lp.getnX(), lp.getMinY(), lp.getMaxY(), lp.getnY());
- MatrixPlot plot = new MatrixPlot(lp.getTitle(), data);
-
- for(Series s: lp.getData()){
- if(s instanceof XYZSeries){
- XYZSeries sxyz = (XYZSeries) s;
- filters.add(new XYZSeriesDataFilter(sxyz.getX(), sxyz.getY(), sxyz.getZ(), plot));
-
- }
- else if(s instanceof YZSeries){
- YZSeries syz = (YZSeries) s;
- XYZSeriesArrayDataFilter filter = new XYZSeriesArrayDataFilter(syz.getY(), syz.getZ(), 0, 0, plot);
- filters.add(filter);
-
- }
- }
- }
+ try{
+ for(ch.psi.fda.vdescriptor.Plot vplot: vdescriptor.getPlots()){
+ if(vplot instanceof ch.psi.fda.vdescriptor.LinePlot){
+ ch.psi.fda.vdescriptor.LinePlot lp = (ch.psi.fda.vdescriptor.LinePlot) vplot;
+
+ // Create plot for visualization
+ LinePlot plot = LinePlotBase.newPlot(linePlotImpl);
+ plot.setTitle(lp.getTitle());
+
+ for(Series s: lp.getData()){
+ if(s instanceof XYSeries){
+ XYSeries sxy = (XYSeries)s;
+ XYSeriesDataFilter filter = new XYSeriesDataFilter(sxy.getX(), sxy.getY(), plot);
+ filter.setSeriesName(sxy.getY());
+ filters.add(filter);
+ }
+ else if(s instanceof YSeries){
+ YSeries sy = (YSeries)s;
+
+ XYSeriesArrayDataFilter filter = new XYSeriesArrayDataFilter(sy.getY(), plot);
+ // filter.setMaxSeries(lp.getMaxSeries()*lp.getY().size()); // Workaround - keep for each array max series
+ // filter.setOffset(lp.getOffset());
+ // filter.setSize(lp.getSize());
+ filter.setSeriesName(sy.getY());
+ filters.add(filter);
+ }
+ }
+
+ }
+ else if(vplot instanceof ch.psi.fda.vdescriptor.MatrixPlot){
+
+ // MatrixPlot does currently not support RegionPositioners because of the
+ // plotting problems this would cause. If regions of the positioner have different
+ // step sizes it is not easily possible (without (specialized) rasterization) to plot the data.
+
+ ch.psi.fda.vdescriptor.MatrixPlot lp = (ch.psi.fda.vdescriptor.MatrixPlot) vplot;
+ MatrixPlotSeries data = new MatrixPlotSeries("", lp.getMinX(), lp.getMaxX(), lp.getnX(), lp.getMinY(), lp.getMaxY(), lp.getnY());
+ MatrixPlot plot = MatrixPlotBase.newPlot(matrixPlotImpl);
+ plot.setTitle(lp.getTitle());
+ plot.addSeries(data);
+
+ for(Series s: lp.getData()){
+ if(s instanceof XYZSeries){
+ XYZSeries sxyz = (XYZSeries) s;
+ XYZSeriesDataFilter filter=new XYZSeriesDataFilter(sxyz.getX(), sxyz.getY(), sxyz.getZ(), plot);
+ filter.setSeries(data);
+ filters.add(filter);
+
+ }
+ else if(s instanceof YZSeries){
+ YZSeries syz = (YZSeries) s;
+ XYZSeriesArrayDataFilter filter = new XYZSeriesArrayDataFilter(syz.getY(), syz.getZ(), 0, 0, plot);
+ filter.setSeries(data);
+ filters.add(filter);
+
+ }
+ }
+ }
+ }
}
+ catch (Exception ex) {
+ // Ignore if something goes wrong while adding a datapoint
+ logger.log(Level.SEVERE, null, ex);
+ }
+
}
@@ -135,7 +154,7 @@ public class Visualizer {
for (SeriesDataFilter f: filters) {
Plot plot = f.getPlot();
if(plot instanceof MatrixPlot){
- ((MatrixPlotData) ((MatrixPlot)plot).getData()).clear();
+ f.getSeries().clear();
}
}
clearPlot = false;
@@ -145,15 +164,15 @@ public class Visualizer {
if(filter instanceof XYSeriesDataFilter){
XYSeriesDataFilter xyfilter = (XYSeriesDataFilter) filter;
- if(xyfilter.getActualSeries()==null || xyfilter.isNewseries()){
+ if(xyfilter.getSeries()==null || xyfilter.isNewseries()){
// First series that is filled by this filter!
- XYSeriesP s = new XYSeriesP(xyfilter.getSeriesName() + " " + ecount + "-" + xyfilter.getCount());
- ((LinePlot)xyfilter.getPlot()).getData().addSeries(s);
- xyfilter.setActualSeries(s);
+ LinePlotSeries s = new LinePlotSeries(xyfilter.getSeriesName() + " " + ecount + "-" + xyfilter.getCount());
+ ((LinePlot)xyfilter.getPlot()).addSeries(s);
+ xyfilter.setSeries(s);
xyfilter.setNewseries(false);
}
- XYSeriesP series = xyfilter.getActualSeries(); // TODO Does not work with multiple series filter per plot !!!!
+ LinePlotSeries series = xyfilter.getSeries(); // TODO Does not work with multiple series filter per plot !!!!
// There might be other values than double in the data, therefore we have to check for it
Object dX = message.getData(xyfilter.getIdX());
@@ -168,7 +187,9 @@ public class Visualizer {
}
// Add Data to the series
- series.add(dataX , dataY, updateAtStreamElement);
+/*
+ series.add(dataX , dataY, updateAtStreamElement);*/
+ series.appendData(dataX , dataY);
}
if(filter instanceof XYSeriesArrayDataFilter){
final XYSeriesArrayDataFilter xyfilter = (XYSeriesArrayDataFilter) filter;
@@ -179,31 +200,39 @@ public class Visualizer {
@Override
public void run() {
- XYSeriesP series = new XYSeriesP(xyfilter.getSeriesName() + "-" + xyfilter.getCount()); // Series name must be unique
+ LinePlotSeries series = new LinePlotSeries(xyfilter.getSeriesName() + "-" + xyfilter.getCount()); // Series name must be unique
xyfilter.incrementCount();
// ((LinePlot)xyfilter.getPlot()).getData().removeAllSeries(); // Remove all series from the data
// If we can agree only to display one series at a time also a clear() on the actual series is better
- XYSeriesCollectionP sc = ((LinePlot)xyfilter.getPlot()).getData();
- sc.addSeries(series);
+ ((LinePlot)xyfilter.getPlot()).addSeries(series);
+ xyfilter.setSeries(series);
// Remove outdated series
- if(sc.getSeriesCount()>xyfilter.getMaxSeries()){
+ if(((LinePlot)xyfilter.getPlot()).getNumberOfSeries()>xyfilter.getMaxSeries()){
// Remove oldest series
- sc.removeSeries(0);
+ ((LinePlot)xyfilter.getPlot()).removeSeries(((LinePlot)xyfilter.getPlot()).getSeries(0));
}
double[] data = message.getData(xyfilter.getIdY());
+
+
// Copy data starting from offset to size
int size = data.length;
int offset = xyfilter.getOffset();
if(xyfilter.getSize()>0 && offset+xyfilter.getSize()