import net.sf.openrocket.document.Simulation;\r
import net.sf.openrocket.simulation.FlightDataBranch;\r
import net.sf.openrocket.simulation.FlightDataType;\r
+import net.sf.openrocket.simulation.FlightEvent;\r
import net.sf.openrocket.unit.Unit;\r
\r
import org.achartengine.chart.LineChart;\r
* \r
*/\r
public class SimulationChart implements Serializable {\r
- \r
+\r
private final int simulationIndex;\r
private transient FlightDataType series1;\r
private transient FlightDataType series2;\r
- \r
+ private transient List<FlightEvent> events;\r
+\r
// Define 4 different colors and point styles to use for the series.\r
// For now only 2 series are supported though.\r
private final static int[] colors = new int[] { Color.BLUE, Color.YELLOW, Color.GREEN, Color.RED };\r
this.series1 = series1;\r
}\r
\r
+ public FlightDataType getSeries1() {\r
+ return series1;\r
+ }\r
+\r
public void setSeries2(FlightDataType series2) {\r
this.series2 = series2;\r
}\r
\r
+ public FlightDataType getSeries2() {\r
+ return series2;\r
+ }\r
+\r
+ public void setEvents( List<FlightEvent> events ) {\r
+ this.events = events;\r
+ }\r
+\r
+ public List<FlightEvent> getEvents() {\r
+ return events;\r
+ }\r
+\r
public FlightDataBranch getFlightDataBranch( OpenRocketDocument rocketDocument ) {\r
Simulation sim = rocketDocument.getSimulation(simulationIndex);\r
FlightDataBranch flightDataBranch = sim.getSimulatedData().getBranch(0);\r
series2 = flightDataBranch.getTypes()[2];\r
}\r
\r
+ if ( events == null ) {\r
+ events = new ArrayList<FlightEvent>();\r
+ for ( FlightEvent event : flightDataBranch.getEvents() ) {\r
+ switch( event.getType()) {\r
+ case LAUNCHROD:\r
+ case APOGEE:\r
+ case BURNOUT:\r
+ case EJECTION_CHARGE:\r
+ events.add(event);\r
+ default:\r
+ break;\r
+ }\r
+ }\r
+ }\r
+\r
/*\r
* TODO -\r
* Figure out why you can pan all over the place even where there are no visible points.\r
renderer.setShowGrid(true);\r
renderer.setZoomButtonsVisible(true);\r
renderer.setChartTitle(sim.getName());\r
+ renderer.setShowCustomTextGrid(true);\r
+ renderer.setXLabelsAlign(Align.RIGHT);\r
+ renderer.setXLabelsAngle(90); // rotate right\r
+ for( FlightEvent event : events ) {\r
+ renderer.addXTextLabel(event.getTime(), event.getType().toString());\r
+ }\r
\r
renderer.setMargins(new int[] { 50, 30, 0, 20 });\r
{\r
\r
double ymax = computeMaxValueWithPadding( series1values );\r
double xmax = Math.ceil( timevalues.get( timevalues.size()-1));\r
- \r
+\r
AndroidLogWrapper.d(SimulationChart.class,"ymax = " + ymax);\r
renderer.setXAxisMax(xmax);\r
renderer.setYAxisMax(ymax);\r
addXYSeries(dataset, series2.getName(), timevalues, series2values, 1);\r
}\r
XYChart chart = new LineChart(dataset, renderer);\r
- \r
+\r
return chart;\r
}\r
\r
// next 100 if 1000 < max < 10,000\r
// next 1000 if max >= 10,000\r
double numdigits = Math.floor(Math.log10(max));\r
- \r
+\r
if ( numdigits <= 1.0 ) {\r
return 10.0;\r
} else if ( numdigits <= 3.0 ) {\r
} else {\r
return 1000.0 * ( Math.ceil( max / 1000.0 ));\r
}\r
- \r
+\r
}\r
- \r
+\r
}\r