Rewrite BurnPlotFragment to use AChartEngine for plotting instead of Androidplot.
This commit is contained in:
parent
31c69313fb
commit
6c4e3c6bcd
@ -7,7 +7,6 @@
|
|||||||
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
|
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
|
||||||
<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
|
<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
|
||||||
<classpathentry kind="lib" path="libs/android-support-v4.jar"/>
|
<classpathentry kind="lib" path="libs/android-support-v4.jar"/>
|
||||||
<classpathentry kind="lib" path="libs/Androidplot-core-0.4.4-release.jar"/>
|
|
||||||
<classpathentry kind="lib" path="libs/achartengine-0.7.0.jar" sourcepath="/AChartEngine/src"/>
|
<classpathentry kind="lib" path="libs/achartengine-0.7.0.jar" sourcepath="/AChartEngine/src"/>
|
||||||
<classpathentry kind="output" path="bin/classes"/>
|
<classpathentry kind="output" path="bin/classes"/>
|
||||||
</classpath>
|
</classpath>
|
||||||
|
Binary file not shown.
@ -1,10 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<com.androidplot.xy.XYPlot xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:id="@+id/xyplot"
|
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:layout_height="fill_parent"
|
|
||||||
android:layout_marginLeft="2dp"
|
|
||||||
android:layout_marginRight="2dp"
|
|
||||||
android:layout_marginTop="5dp"
|
|
||||||
title=" "
|
|
||||||
/>
|
|
@ -1,33 +1,34 @@
|
|||||||
package net.sf.openrocket.android.motor;
|
package net.sf.openrocket.android.motor;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Vector;
|
|
||||||
|
|
||||||
import net.sf.openrocket.R;
|
|
||||||
import net.sf.openrocket.android.db.DbAdapter;
|
import net.sf.openrocket.android.db.DbAdapter;
|
||||||
import net.sf.openrocket.android.util.AndroidLogWrapper;
|
import net.sf.openrocket.android.util.AndroidLogWrapper;
|
||||||
|
|
||||||
|
import org.achartengine.GraphicalView;
|
||||||
|
import org.achartengine.chart.LineChart;
|
||||||
|
import org.achartengine.chart.PointStyle;
|
||||||
|
import org.achartengine.chart.XYChart;
|
||||||
|
import org.achartengine.model.XYMultipleSeriesDataset;
|
||||||
|
import org.achartengine.model.XYSeries;
|
||||||
|
import org.achartengine.renderer.XYMultipleSeriesRenderer;
|
||||||
|
import org.achartengine.renderer.XYSeriesRenderer;
|
||||||
|
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
import android.graphics.PointF;
|
import android.graphics.Paint.Align;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
import com.androidplot.xy.LineAndPointFormatter;
|
|
||||||
import com.androidplot.xy.LineAndPointRenderer;
|
|
||||||
import com.androidplot.xy.SimpleXYSeries;
|
|
||||||
import com.androidplot.xy.XYPlot;
|
|
||||||
import com.androidplot.xy.YValueMarker;
|
|
||||||
|
|
||||||
public class BurnPlotFragment extends Fragment {
|
public class BurnPlotFragment extends Fragment {
|
||||||
|
|
||||||
private ExtendedThrustCurveMotor motor;
|
private ExtendedThrustCurveMotor motor;
|
||||||
private long motorId;
|
private long motorId;
|
||||||
|
|
||||||
private XYPlot mySimpleXYPlot;
|
/** The encapsulated graphical view. */
|
||||||
private SimpleXYSeries mySeries;
|
private GraphicalView mView;
|
||||||
|
/** The chart to be drawn. */
|
||||||
|
private XYChart mChart;
|
||||||
|
|
||||||
public static BurnPlotFragment newInstance( long motorId ) {
|
public static BurnPlotFragment newInstance( long motorId ) {
|
||||||
BurnPlotFragment frag = new BurnPlotFragment();
|
BurnPlotFragment frag = new BurnPlotFragment();
|
||||||
@ -71,58 +72,85 @@ public class BurnPlotFragment extends Fragment {
|
|||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||||
Bundle savedInstanceState) {
|
Bundle savedInstanceState) {
|
||||||
AndroidLogWrapper.d(BurnPlotFragment.class,"onCreateView");
|
AndroidLogWrapper.d(BurnPlotFragment.class,"onCreateView");
|
||||||
View v = inflater.inflate(R.layout.motor_burn, container, false);
|
|
||||||
mySimpleXYPlot = (XYPlot) v.findViewById(R.id.xyplot);
|
|
||||||
init(motor);
|
|
||||||
return v;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static List<Double> fromArray( double[] arry ) {
|
init(motor);
|
||||||
List<Double> l = new ArrayList<Double>(arry.length);
|
mView = new GraphicalView(container.getContext(), mChart);
|
||||||
for( double d: arry ) {
|
return mView;
|
||||||
l.add(d);
|
|
||||||
}
|
|
||||||
return l;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void init( ExtendedThrustCurveMotor motor ) {
|
private void init( ExtendedThrustCurveMotor motor ) {
|
||||||
|
|
||||||
mySimpleXYPlot.setUserDomainOrigin(0);
|
XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer(1);
|
||||||
mySimpleXYPlot.setUserRangeOrigin(0);
|
|
||||||
mySimpleXYPlot.setRangeLabel("impuse (n)");
|
|
||||||
mySimpleXYPlot.setDomainLabel("time (s)");
|
|
||||||
YValueMarker average = new YValueMarker(motor.getThrustCurveMotor().getAverageThrustEstimate(),"average" );
|
|
||||||
average.getLinePaint().setColor(Color.BLACK);
|
|
||||||
average.getTextPaint().setColor(Color.BLACK);
|
|
||||||
mySimpleXYPlot.addMarker( average );
|
|
||||||
mySimpleXYPlot.disableAllMarkup();
|
|
||||||
|
|
||||||
try {
|
renderer.setAxisTitleTextSize(16);
|
||||||
mySeries = new SimpleXYSeries(
|
renderer.setChartTitleTextSize(20);
|
||||||
fromArray(motor.getThrustCurveMotor().getTimePoints()),
|
renderer.setLabelsTextSize(15);
|
||||||
fromArray(motor.getThrustCurveMotor().getThrustPoints()),
|
renderer.setLegendTextSize(15);
|
||||||
motor.getThrustCurveMotor().getManufacturer().getDisplayName() + " " + motor.getThrustCurveMotor().getDesignation()
|
renderer.setPointSize(5f);
|
||||||
);
|
renderer.setXLabels(10);
|
||||||
} catch ( Exception ex ) {
|
renderer.setYLabels(10);
|
||||||
|
renderer.setShowGrid(true);
|
||||||
|
renderer.setZoomButtonsVisible(false);
|
||||||
|
renderer.setZoomEnabled(false,false);
|
||||||
|
renderer.setPanEnabled(false,false);
|
||||||
|
renderer.setMargins(new int[] { 50, 40, 10, 20 });
|
||||||
|
renderer.setShowLegend(false);
|
||||||
|
renderer.setAxesColor(Color.LTGRAY);
|
||||||
|
renderer.setLabelsColor(Color.LTGRAY);
|
||||||
|
|
||||||
Vector<Double> data = new Vector<Double>();
|
renderer.setChartTitle(motor.getThrustCurveMotor().getManufacturer() + " " + motor.getThrustCurveMotor().getDesignation());
|
||||||
data.add(0.0);
|
|
||||||
data.add(0.0);
|
renderer.setXTitle("time (s)");
|
||||||
data.add(1.0);
|
renderer.setXLabelsAlign(Align.RIGHT);
|
||||||
data.add(1.0);
|
|
||||||
mySeries = new SimpleXYSeries(data, SimpleXYSeries.ArrayFormat.XY_VALS_INTERLEAVED,"no data");
|
renderer.setYTitle("impuse (n)");
|
||||||
|
renderer.setYLabelsAlign(Align.RIGHT,0);
|
||||||
|
|
||||||
|
XYSeriesRenderer r = new XYSeriesRenderer();
|
||||||
|
r.setColor(Color.RED);
|
||||||
|
r.setPointStyle(PointStyle.CIRCLE);
|
||||||
|
r.setFillPoints(true);
|
||||||
|
renderer.addSeriesRenderer(r);
|
||||||
|
// setting the YAximMin to 0 locks the origins.
|
||||||
|
renderer.setYAxisMin(0.0, 0);
|
||||||
|
|
||||||
|
// TODO get markers working in achartengine
|
||||||
|
//YValueMarker average = new YValueMarker(motor.getThrustCurveMotor().getAverageThrustEstimate(),"average" );
|
||||||
|
//average.getLinePaint().setColor(Color.BLACK);
|
||||||
|
//average.getTextPaint().setColor(Color.BLACK);
|
||||||
|
//mySimpleXYPlot.addMarker( average );
|
||||||
|
|
||||||
|
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
|
||||||
|
|
||||||
|
XYSeries series = new XYSeries(motor.getThrustCurveMotor().getDesignation(), 0);
|
||||||
|
|
||||||
|
double[] timePoints = motor.getThrustCurveMotor().getTimePoints();
|
||||||
|
double[] thrustPoints = motor.getThrustCurveMotor().getThrustPoints();
|
||||||
|
|
||||||
|
// We are going to abuse this loop to also compute the Y axis max.
|
||||||
|
int maxy = 0;
|
||||||
|
int datasize = timePoints.length;
|
||||||
|
for( int i = 0; i<datasize; i++ ) {
|
||||||
|
series.add(timePoints[i], thrustPoints[i]);
|
||||||
|
int ceil = new Double(Math.ceil(thrustPoints[i])).intValue();
|
||||||
|
if ( ceil > maxy ) {
|
||||||
|
maxy = ceil;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
renderer.setYAxisMax(maxy);
|
||||||
|
|
||||||
LineAndPointFormatter formatter= new LineAndPointFormatter(Color.GREEN, Color.GREEN, Color.GREEN);
|
// Find the X axis max. compute it as next larger integer if t_max > 2 else round up to next tenth.
|
||||||
|
double maxx = timePoints[datasize-1];
|
||||||
|
if ( maxx >= 2.0 ) {
|
||||||
|
maxx = Math.ceil(maxx);
|
||||||
|
} else {
|
||||||
|
maxx = new Double( Math.ceil(maxx*10.0) ).intValue() /10.0;
|
||||||
|
}
|
||||||
|
renderer.setXAxisMax(maxx);
|
||||||
|
|
||||||
formatter.getLinePaint().setShadowLayer(0, 0, 0, 0);
|
dataset.addSeries(series);
|
||||||
formatter.getVertexPaint().setShadowLayer(0, 0, 0, 0);
|
|
||||||
mySimpleXYPlot.addSeries(mySeries, LineAndPointRenderer.class,formatter);
|
|
||||||
|
|
||||||
//Set of internal variables for keeping track of the boundaries
|
mChart = new LineChart(dataset, renderer);
|
||||||
mySimpleXYPlot.calculateMinMaxVals();
|
|
||||||
|
|
||||||
mySimpleXYPlot.redraw();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user