1 package net.sf.openrocket.android.thrustcurve;
\r
3 import java.io.ByteArrayInputStream;
\r
4 import java.io.InputStream;
\r
5 import java.util.Vector;
\r
7 import org.xml.sax.Attributes;
\r
9 import android.sax.Element;
\r
10 import android.sax.RootElement;
\r
11 import android.sax.StartElementListener;
\r
12 import android.util.Log;
\r
13 import android.util.Xml;
\r
15 class RSEBurnFile extends MotorBurnFile {
\r
17 private final static String TAG = "RSEBurnFile";
\r
19 static void parse( MotorBurnFile that, String filecontents ) {
\r
21 parse(that, new ByteArrayInputStream(filecontents.getBytes()) );
\r
24 private final static String root_tag = "engine-database";
\r
25 private final static String engine_list_tag = "engine-list";
\r
26 private final static String engine_tag = "engine";
\r
28 private final static String delays_attr = "delays";
\r
29 private final static String len_attr = "len";
\r
30 private final static String propwgt_attr = "propWt";
\r
31 private final static String totwgt_attr = "initWt";
\r
33 private final static String data_tag = "data";
\r
34 private final static String eng_data_tag = "eng-data";
\r
36 private final static String time_attr="t";
\r
37 private final static String force_attr="f";
\r
39 static void parse( final MotorBurnFile that, InputStream in ) {
\r
41 RootElement rootEl = new RootElement(root_tag);
\r
42 Element engineEl = rootEl.getChild(engine_list_tag).getChild(engine_tag);
\r
44 final Vector<Double> datapoints = new Vector<Double>();
\r
46 Log.d(TAG,"parsing start");
\r
48 engineEl.setStartElementListener(
\r
49 new StartElementListener() {
\r
51 public void start(Attributes arg0) {
\r
52 Log.d(TAG,"start engineEl");
\r
53 that.setPropWeightG(Double.parseDouble(arg0.getValue(propwgt_attr)));
\r
54 that.setTotWeightG(Double.parseDouble(arg0.getValue(totwgt_attr)));
\r
55 that.setLength(Float.parseFloat(arg0.getValue(len_attr)));
\r
56 that.setDelays(arg0.getValue(delays_attr));
\r
57 Log.d(TAG, "me is now " + that.toString());
\r
62 Element datapointEl = engineEl.getChild(data_tag).getChild(eng_data_tag);
\r
63 datapointEl.setStartElementListener(
\r
64 new StartElementListener() {
\r
66 public void start(Attributes attributes) {
\r
67 Double x = Double.parseDouble(attributes.getValue(time_attr));
\r
68 Double y = Double.parseDouble(attributes.getValue(force_attr));
\r
69 Log.d(TAG, "add data point " + x + "," + y);
\r
77 Xml.parse(in, Xml.Encoding.UTF_8, rootEl.getContentHandler());
\r
78 } catch (Exception e) {
\r
79 throw new RuntimeException(e);
\r
82 that.setDatapoints(datapoints);
\r
86 // <engine-database>
\r
88 // <engine FDiv="10" FFix="1" FStep="-1." Isp="202.11" Itot="8.919" Type="single-use" auto-calc-cg="1" auto-calc-mass="1" avgThrust="3.795" burn-time="2.35" cgDiv="10" cgFix="1" cgStep="-1." code="C4" delays="3,5,7" dia="18." exitDia="0." initWt="17." len="50." mDiv="10" mFix="1" mStep="-1." massFrac="26.47" mfg="Apogee" peakThrust="11.31" propWt="4.5" tDiv="10" tFix="1" tStep="-1." throatDia="0.">
\r
89 // <comments>Apogee C4 RASP.ENG file made from NAR published data
\r
90 // File produced September 4, 2000
\r
91 // The total impulse, peak thrust, average thrust and burn time are
\r
92 // the same as the averaged static test data on the NAR web site in
\r
93 // the certification file. The curve drawn with these data points is as
\r
94 // close to the certification curve as can be with such a limited
\r
95 // number of points (32) allowed with wRASP up to v1.6.
\r
98 // <eng-data cg="25." f="0." m="4.5" t="0."/>
\r
99 // <eng-data cg="25." f="3.23" m="4.48533" t="0.018"/>
\r
100 // <eng-data cg="25." f="6.874" m="4.42671" t="0.041"/>
\r
101 // <eng-data cg="25." f="8.779" m="4.00814" t="0.147"/>
\r
102 // <eng-data cg="25." f="10.683" m="3.28643" t="0.294"/>
\r
103 // <eng-data cg="25." f="11.31" m="2.89252" t="0.365"/>
\r
104 // <eng-data cg="25." f="10.521" m="2.76585" t="0.388"/>
\r
105 // <eng-data cg="25." f="8.779" m="2.649" t="0.412"/>
\r
106 // <eng-data cg="25." f="7.04" m="2.53328" t="0.441"/>
\r
107 // <eng-data cg="25." f="4.555" m="2.46308" t="0.465"/>
\r
108 // <eng-data cg="25." f="3.479" m="2.33337" t="0.529"/>
\r
109 // <eng-data cg="25." f="2.981" m="2.1704" t="0.629"/>
\r
110 // <eng-data cg="25." f="3.23" m="2.1328" t="0.653"/>
\r
111 // <eng-data cg="25." f="2.816" m="2.03366" t="0.718"/>
\r
112 // <eng-data cg="25." f="2.733" m="1.84469" t="0.853"/>
\r
113 // <eng-data cg="25." f="2.65" m="1.5568" t="1.065"/>
\r
114 // <eng-data cg="25." f="2.567" m="1.30938" t="1.253"/>
\r
115 // <eng-data cg="25." f="2.401" m="1.05873" t="1.453"/>
\r
116 // <eng-data cg="25." f="2.484" m="0.761739" t="1.694"/>
\r
117 // <eng-data cg="25." f="2.484" m="0.636413" t="1.794"/>
\r
118 // <eng-data cg="25." f="2.733" m="0.612724" t="1.812"/>
\r
119 // <eng-data cg="25." f="2.401" m="0.575165" t="1.841"/>
\r
120 // <eng-data cg="25." f="2.401" m="0.446759" t="1.947"/>
\r
121 // <eng-data cg="25." f="2.401" m="0.246881" t="2.112"/>
\r
122 // <eng-data cg="25." f="2.401" m="0.0978809" t="2.235"/>
\r
123 // <eng-data cg="25." f="2.236" m="0.0429024" t="2.282"/>
\r
124 // <eng-data cg="25." f="1.656" m="0.0134478" t="2.312"/>
\r
125 // <eng-data cg="25." f="0.662" m="0.003507" t="2.329"/>
\r
126 // <eng-data cg="25." f="0." m="-0." t="2.35"/>
\r
130 // </engine-database>
\r