(no commit message)
[sw/motorsim] / gui / com / billkuker / rocketry / motorsim / visual / Chart.java
index b39ab15fb946b4de26afb38cbeb3cc4fe9236d67..27c71b4c633e3bdd3754e3208054dce6822bbee6 100644 (file)
@@ -44,7 +44,8 @@ public class Chart<X extends Quantity, Y extends Quantity> extends JPanel {
        private static final long serialVersionUID = 1L;\r
        private static Logger log = Logger.getLogger(Chart.class);\r
        \r
-       private final Stroke dashed =new BasicStroke(1, 1, 1, 1, new float[]{2,4}, 0);\r
+       private final Stroke dashed = new BasicStroke(1, 1, 1, 1, new float[]{2,4}, 0);\r
+       private final Font labelFont = new Font(Font.DIALOG, Font.BOLD, 10);\r
 \r
        private static ThreadFactory tf = new ThreadFactory() {\r
                public Thread newThread(Runnable r) {\r
@@ -132,64 +133,34 @@ public class Chart<X extends Quantity, Y extends Quantity> extends JPanel {
                                );\r
                add(new ChartPanel(chart));\r
        }\r
-\r
-       public void showMax(){\r
-               markMax = true;\r
+       \r
+       public void addDomainMarker(Amount<X> x, String label, Color c){\r
+               double xVal = x.doubleValue(xUnit);\r
+               Marker marker = new ValueMarker(xVal);\r
+               marker.setStroke(dashed);\r
+               marker.setPaint(c);\r
+               marker.setLabelPaint(c);\r
+               marker.setLabelFont(labelFont);\r
+               marker.setLabel(label + ": " + RocketScience.ammountToRoundedString(x));\r
+               marker.setLabelTextAnchor(TextAnchor.TOP_LEFT);\r
+               marker.setLabelOffset(new RectangleInsets(0, -5, 0, 0));\r
+               chart.getXYPlot().addDomainMarker(marker);\r
        }\r
        \r
-       public void showAverage(){\r
-               markAverage = true;\r
+       public void addRangeMarker(Amount<Y> y, String label, Color c){\r
+               double yVal = y.doubleValue(yUnit);\r
+               Marker marker = new ValueMarker(yVal);\r
+               marker.setStroke(dashed);\r
+               marker.setPaint(c);\r
+               marker.setLabelPaint(c);\r
+               marker.setLabelFont(labelFont);\r
+               marker.setLabel(label + ": " + RocketScience.ammountToRoundedString(y));\r
+               marker.setLabelTextAnchor(TextAnchor.TOP_LEFT);\r
+               marker.setLabelOffset(new RectangleInsets(0, 5, 0, 0));\r
+               chart.getXYPlot().addRangeMarker(marker);\r
        }\r
-       private boolean markMax = false, markAverage = false;\r
-       private Marker focusMarkerX, focusMarkerY;\r
-       private void markMax(){\r
-               if ( !markMax && !markAverage )\r
-                       return;\r
-               if ( dataset.getSeriesCount() != 1 ){\r
-                       return;\r
-               }\r
-               final XYSeries s = dataset.getSeries(0);\r
-\r
-               double max = 0;\r
-               double accum = 0;\r
-               for ( int i = 0; i < s.getItemCount(); i++){\r
-                       if ( s.getY(i).doubleValue() > max ){\r
-                               max = s.getY(i).doubleValue();\r
-                       }\r
-                       if ( i > 0 ){\r
-                               double dx = s.getX(i).doubleValue() - s.getX(i-1).doubleValue();\r
-                               accum += s.getY(i).doubleValue() * dx;\r
-                       }\r
-               }\r
-               double average = accum / (s.getX(s.getItemCount()-1).doubleValue() - s.getX(0).doubleValue());\r
-               \r
-               if (markMax) {\r
-                       Marker marker = new ValueMarker(average);\r
-                       marker.setStroke(dashed);\r
-                       marker.setPaint(Color.BLACK);\r
-                       marker.setLabelFont(new Font(Font.DIALOG, Font.BOLD, 10));\r
-                       marker.setLabel("Average: "\r
-                                       + RocketScience.ammountToRoundedString(Amount.valueOf(\r
-                                                       average, yUnit)));\r
-                       marker.setLabelTextAnchor(TextAnchor.TOP_LEFT);\r
-                       marker.setLabelOffset(new RectangleInsets(0, 5, 0, 0));\r
-                       chart.getXYPlot().addRangeMarker(marker);\r
-               }\r
-\r
-               if (markAverage) {\r
-                       Marker marker = new ValueMarker(max);\r
-                       marker.setStroke(dashed);\r
-                       marker.setPaint(Color.BLACK);\r
-                       marker.setLabelFont(new Font(Font.DIALOG, Font.BOLD, 10));\r
-                       marker.setLabel("Max: "\r
-                                       + RocketScience.ammountToRoundedString(Amount.valueOf(max,\r
-                                                       yUnit)));\r
-                       marker.setLabelTextAnchor(TextAnchor.TOP_LEFT);\r
-                       marker.setLabelOffset(new RectangleInsets(0, 5, 0, 0));\r
-                       chart.getXYPlot().addRangeMarker(marker);\r
-               }\r
 \r
-       }\r
+       private Marker focusMarkerX, focusMarkerY;\r
 \r
        public void mark(Amount<X> m) {\r
                if (focusMarkerX != null)\r
@@ -211,7 +182,7 @@ public class Chart<X extends Quantity, Y extends Quantity> extends JPanel {
                                focusMarkerY.setLabelAnchor(RectangleAnchor.TOP_RIGHT);\r
                                focusMarkerY.setLabelTextAnchor(TextAnchor.TOP_RIGHT);\r
                                focusMarkerY.setLabelPaint(Color.BLUE);\r
-                               focusMarkerY.setLabelFont(new Font(Font.DIALOG, Font.BOLD, 10));\r
+                               focusMarkerY.setLabelFont(labelFont);\r
                                focusMarkerY.setLabelOffset(new RectangleInsets(0,5,0,0));\r
                                chart.getXYPlot().addRangeMarker(focusMarkerY);\r
                                focusMarkerY.setLabel(RocketScience.ammountToRoundedString(val));\r
@@ -258,7 +229,7 @@ public class Chart<X extends Quantity, Y extends Quantity> extends JPanel {
        }\r
        \r
        private void drawDone(){\r
-               markMax();\r
+       \r
        }\r
 \r
        private volatile boolean stop = false;\r