Removed chart max / min funcs, replaced with range and domain marker functions.
authorBill Kuker <bkuker@billkuker.com>
Fri, 5 Nov 2010 13:42:29 +0000 (13:42 +0000)
committerBill Kuker <bkuker@billkuker.com>
Fri, 5 Nov 2010 13:42:29 +0000 (13:42 +0000)
gui/com/billkuker/rocketry/motorsim/visual/BurnPanel.java
gui/com/billkuker/rocketry/motorsim/visual/Chart.java

index 2d297f12fd461e5424b3ed4736e57e4c4bdb30da..527accab0726386fb6b670cfe08c4fcbe4ca3b90 100644 (file)
@@ -1,6 +1,7 @@
 package com.billkuker.rocketry.motorsim.visual;\r
 \r
 import java.awt.BorderLayout;\r
+import java.awt.Color;\r
 import java.awt.Dimension;\r
 import java.awt.GridLayout;\r
 import java.text.NumberFormat;\r
@@ -44,8 +45,6 @@ public class BurnPanel extends JPanel {
                                        SI.MEGA(SI.PASCAL),\r
                                        b,\r
                                        "pressure");\r
-                       pressure.showAverage();\r
-                       pressure.showMax();\r
                        pressure.setDomain(burn.getData().keySet());\r
                        \r
                        thrust = new Chart<Duration, Force>(\r
@@ -53,8 +52,6 @@ public class BurnPanel extends JPanel {
                                        SI.NEWTON,\r
                                        b,\r
                                        "thrust");\r
-                       thrust.showAverage();\r
-                       thrust.showMax();\r
                        thrust.setDomain(burn.getData().keySet());\r
                        \r
                        burnRate = new Chart<Pressure, Velocity>(\r
@@ -122,6 +119,11 @@ public class BurnPanel extends JPanel {
                                                .ammountToRoundedString(bi.maxPressure())));\r
 \r
                                add(text, BorderLayout.NORTH);\r
+                               \r
+                               thrust.addRangeMarker(bi.maxThrust(), "Max", Color.BLACK);\r
+                               thrust.addRangeMarker(bi.averageThrust(), "Average", Color.BLACK);\r
+                               pressure.addRangeMarker(bi.maxPressure(), "Max", Color.BLACK);\r
+                               burnRate.addDomainMarker(bi.maxPressure(), "Max", Color.RED);\r
                        }\r
                        \r
                        \r
index b39ab15fb946b4de26afb38cbeb3cc4fe9236d67..e41cfba7b6e72a6f0e15f6b603522d0e7c0a57a6 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,35 @@ 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(Color.BLACK);\r
+               marker.setLabelFont(labelFont);\r
+               marker.setLabel("Max: "\r
+                               + RocketScience.ammountToRoundedString(Amount.valueOf(yVal,\r
+                                               yUnit)));\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 +183,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 +230,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