1 package net.sf.openrocket.android.motor;
\r
3 import java.util.ArrayList;
\r
4 import java.util.List;
\r
5 import java.util.Vector;
\r
7 import net.sf.openrocket.R;
\r
8 import net.sf.openrocket.android.db.DbAdapter;
\r
9 import net.sf.openrocket.android.util.AndroidLogWrapper;
\r
10 import android.graphics.Color;
\r
11 import android.graphics.PointF;
\r
12 import android.os.Bundle;
\r
13 import android.support.v4.app.Fragment;
\r
14 import android.view.LayoutInflater;
\r
15 import android.view.View;
\r
16 import android.view.ViewGroup;
\r
18 import com.androidplot.xy.LineAndPointFormatter;
\r
19 import com.androidplot.xy.LineAndPointRenderer;
\r
20 import com.androidplot.xy.SimpleXYSeries;
\r
21 import com.androidplot.xy.XYPlot;
\r
22 import com.androidplot.xy.YValueMarker;
\r
24 public class BurnPlotFragment extends Fragment {
\r
26 private ExtendedThrustCurveMotor motor;
\r
27 private long motorId;
\r
29 private XYPlot mySimpleXYPlot;
\r
30 private SimpleXYSeries mySeries;
\r
32 public static BurnPlotFragment newInstance( long motorId ) {
\r
33 BurnPlotFragment frag = new BurnPlotFragment();
\r
34 Bundle bundle = new Bundle();
\r
35 bundle.putLong("motorId", motorId);
\r
36 frag.setArguments(bundle);
\r
41 public void onCreate(Bundle savedInstanceState) {
\r
42 AndroidLogWrapper.d(BurnPlotFragment.class,"onCreate");
\r
44 if ( savedInstanceState!= null) {
\r
45 motorId = savedInstanceState.getLong("motorId",-1);
\r
47 Bundle b = getArguments();
\r
48 motorId = b.getLong("motorId");
\r
51 DbAdapter mDbHelper = new DbAdapter(getActivity());
\r
55 motor = mDbHelper.getMotorDao().fetchMotor(motorId);
\r
56 } catch ( Exception e ) {
\r
61 super.onCreate(savedInstanceState);
\r
65 public void onSaveInstanceState(Bundle outState) {
\r
66 super.onSaveInstanceState(outState);
\r
67 outState.putLong("motorId", motorId);
\r
71 public View onCreateView(LayoutInflater inflater, ViewGroup container,
\r
72 Bundle savedInstanceState) {
\r
73 AndroidLogWrapper.d(BurnPlotFragment.class,"onCreateView");
\r
74 View v = inflater.inflate(R.layout.motor_burn, container, false);
\r
75 mySimpleXYPlot = (XYPlot) v.findViewById(R.id.xyplot);
\r
80 private static List<Double> fromArray( double[] arry ) {
\r
81 List<Double> l = new ArrayList<Double>(arry.length);
\r
82 for( double d: arry ) {
\r
88 private void init( ExtendedThrustCurveMotor motor ) {
\r
90 mySimpleXYPlot.setUserDomainOrigin(0);
\r
91 mySimpleXYPlot.setUserRangeOrigin(0);
\r
92 mySimpleXYPlot.setRangeLabel("impuse (n)");
\r
93 mySimpleXYPlot.setDomainLabel("time (s)");
\r
94 YValueMarker average = new YValueMarker(motor.getThrustCurveMotor().getAverageThrustEstimate(),"average" );
\r
95 average.getLinePaint().setColor(Color.BLACK);
\r
96 average.getTextPaint().setColor(Color.BLACK);
\r
97 mySimpleXYPlot.addMarker( average );
\r
98 mySimpleXYPlot.disableAllMarkup();
\r
101 mySeries = new SimpleXYSeries(
\r
102 fromArray(motor.getThrustCurveMotor().getTimePoints()),
\r
103 fromArray(motor.getThrustCurveMotor().getThrustPoints()),
\r
104 motor.getThrustCurveMotor().getManufacturer().getDisplayName() + " " + motor.getThrustCurveMotor().getDesignation()
\r
106 } catch ( Exception ex ) {
\r
108 Vector<Double> data = new Vector<Double>();
\r
113 mySeries = new SimpleXYSeries(data, SimpleXYSeries.ArrayFormat.XY_VALS_INTERLEAVED,"no data");
\r
116 LineAndPointFormatter formatter= new LineAndPointFormatter(Color.GREEN, Color.GREEN, Color.GREEN);
\r
118 formatter.getLinePaint().setShadowLayer(0, 0, 0, 0);
\r
119 formatter.getVertexPaint().setShadowLayer(0, 0, 0, 0);
\r
120 mySimpleXYPlot.addSeries(mySeries, LineAndPointRenderer.class,formatter);
\r
122 //Set of internal variables for keeping track of the boundaries
\r
123 mySimpleXYPlot.calculateMinMaxVals();
\r
125 mySimpleXYPlot.redraw();
\r