SI.SECOND,\r
SI.MEGA(SI.PASCAL),\r
b,\r
- "pressure");\r
+ "pressure", "Time", "Chamber Pressure");\r
pressure.setDomain(burn.getData().keySet());\r
\r
thrust = new Chart<Duration, Force>(\r
SI.SECOND,\r
SI.NEWTON,\r
b,\r
- "thrust");\r
+ "thrust", "Time", "Thrust");\r
thrust.setDomain(burn.getData().keySet());\r
\r
burnRate = new Chart<Pressure, Velocity>(\r
SI.MEGA(SI.PASCAL),\r
SI.METERS_PER_SECOND,\r
burn.getMotor().getFuel(),\r
- "burnRate");\r
+ "burnRate", "Chamber Pressure", "Burn Rate");\r
burnRate.setDomain(\r
burnRate.new IntervalDomain(\r
Amount.valueOf(0, SI.MEGA(SI.PASCAL)),\r
Unit<X> xUnit;\r
Unit<Y> yUnit;\r
\r
+ String xLabel;\r
+ String yLabel;\r
+ \r
Object source;\r
Method f;\r
\r
Iterable<Amount<X>> domain;\r
-\r
- public Chart(Unit<X> xUnit, Unit<Y> yUnit, Object source, String method)\r
+ \r
+ public Chart(Unit<X> xUnit, Unit<Y> yUnit, Object source, String method, String xLabel, String yLabel)\r
throws NoSuchMethodException {\r
super(new BorderLayout());\r
f = source.getClass().getMethod(method, Amount.class);\r
\r
this.xUnit = xUnit;\r
this.yUnit = yUnit;\r
+ \r
+ this.xLabel = xLabel;\r
+ this.yLabel = yLabel;\r
\r
RocketScience.addUnitPreferenceListener(this);\r
\r
setup();\r
}\r
\r
+ private static String toTitle(Method f) {\r
+ String ret = f.getName().substring(0, 1).toUpperCase()\r
+ + f.getName().substring(1);\r
+ ret = ret.replaceAll("(\\p{Ll})(\\p{Lu})", "$1 $2");\r
+ return ret;\r
+ }\r
+ \r
private void setup(){\r
removeAll();\r
this.xUnit = RocketScience.UnitPreference.getUnitPreference()\r
this.yUnit = RocketScience.UnitPreference.getUnitPreference()\r
.getPreferredUnit(yUnit);\r
\r
- chart = ChartFactory.createXYLineChart(f.getName().substring(0, 1)\r
- .toUpperCase()\r
- + f.getName().substring(1), // Title\r
- this.xUnit.toString(), // x-axis Label\r
- this.yUnit.toString(), // y-axis Label\r
+ chart = ChartFactory.createXYLineChart(\r
+ toTitle(f), // Title\r
+ xLabel + " (" + xUnit.toString() + ")", // x-axis Label\r
+ yLabel + " (" + yUnit.toString() + ")", // y-axis Label\r
dataset, PlotOrientation.VERTICAL, // Plot Orientation\r
false, // Show Legend\r
true, // Use tool tips\r
sb.append(f.getName().substring(0, 1).toUpperCase()\r
+ f.getName().substring(1));\r
sb.append("\n");\r
- sb.append(Chart.this.xUnit.toString());\r
+ sb.append(Chart.this.chart.getXYPlot().getDomainAxis().getLabel());\r
sb.append(",");\r
- sb.append(Chart.this.yUnit.toString());\r
+ sb.append(Chart.this.chart.getXYPlot().getRangeAxis().getLabel());\r
sb.append("\n");\r
for (int i = 0; i < s.getItemCount(); i++) {\r
sb.append(s.getX(i));\r
g.setID(Amount.valueOf(10, SI.MILLIMETER));\r
\r
Chart<Length, Area> c = new Chart<Length, Area>(SI.MILLIMETER,\r
- SI.MILLIMETER.pow(2).asType(Area.class), g, "surfaceArea");\r
+ SI.MILLIMETER.pow(2).asType(Area.class), g, "surfaceArea", "Regression", "Area");\r
\r
c.setDomain(c.new IntervalDomain(Amount.valueOf(0, SI.CENTIMETER), g\r
.webThickness()));\r
SI.MILLIMETER,\r
SI.MILLIMETER.pow(2).asType(Area.class),\r
grain,\r
- "surfaceArea");\r
+ "surfaceArea", "Regression", "Area");\r
area.setDomain(area.new IntervalDomain(Amount.valueOf(0, SI.MILLIMETER), grain.webThickness()));\r
\r
volume = new Chart<Length, Volume>(\r
SI.MILLIMETER,\r
SI.MILLIMETER.pow(3).asType(Volume.class),\r
grain,\r
- "volume");\r
+ "volume", "Regression", "Volume");\r
volume.setDomain(volume.new IntervalDomain(Amount.valueOf(0, SI.MILLIMETER), grain.webThickness()));\r
\r
area.setMaximumSize(new Dimension(200,100));\r