GUI: more canvas experiment

This commit is contained in:
Sidi Liang 2020-01-25 23:18:47 +08:00
parent 24bc3c2039
commit d160b170a8
7 changed files with 26 additions and 659 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 870 KiB

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 MiB

After

Width:  |  Height:  |  Size: 870 KiB

View File

@ -6,9 +6,11 @@ var mode = 1;#//1:Hold 2:Auto Speed
var leftBrakes = props.getNode("/controls/gear/brake-left",1);
var rightBrakes = props.getNode("/controls/gear/brake-right",1);
var throttleNode = props.getNode("/controls/engines/engine/throttle",1);
var lastDeltaSpeed = 0;
var autoSpeedMainLoop = func(){
if(leftBrakes.getValue() == 1 or rightBrakes.getValue() == 1 or throttleNode.getValue() == 1){ #//Stop if full brakes or full throttle are manually applied
throttleNode.setValue(0);
stopAutoSpeed();
}
var currentSpeed = props.getNode("/", 1).getValue("sim/multiplay/generic/float[15]");
@ -16,7 +18,7 @@ var autoSpeedMainLoop = func(){
var throttle = 0;
var brakes = 0; #//range from 0 to 1;
if(deltaSpeed > 0){
throttle = deltaSpeed/targetSpeed - 0.05; #// Max throttle 0.95
throttle = (deltaSpeed / targetSpeed) - 0.05; #// Max throttle 0.95
}else if(deltaSpeed <= -1.852){
throttle = 0;
brakes = ((0 - deltaSpeed) / targetSpeed) - 0.2; #// Max brake 0.8
@ -26,6 +28,7 @@ var autoSpeedMainLoop = func(){
throttleNode.setValue(throttle);
leftBrakes.setValue(brakes);
rightBrakes.setValue(brakes);
lastDeltaSpeed = deltaSpeed;
}
var autoSpeedTimer = maketimer(0.05,autoSpeedMainLoop);

View File

@ -285,6 +285,8 @@ var CurrentSource = {
me.electromotiveForce = me.ratedElectromotiveForce;
}
},
#//Usage: followme.circuit_1.parallelConnection[0].units[0].resetRemainingToFull();
resetRemainingToFull: func(){
me.remaining = me.electricalCapacity;
},

View File

@ -270,11 +270,11 @@ var BatteryWidget = {
#//}else{
#// m._nLevelPct = props.globals.initNode("/systems/electrical/battery-charge-percent-back",0.0,"DOUBLE");
#//}
m._nLevelPct = props.globals.initNode("/systems/electrical/e-tron/battery-remaining-percent",0.0,"DOUBLE");
m._nLevelPct = props.getNode("/systems/electrical/e-tron/battery-remaining-percent");
m._fraction = m._nLevelPct.getValue();
m._capacity = 100; #100 kWh (per pack)
m._fraction = followme.circuit_1.parallelConnection[0].units[0].getRemainingPercentageFloat();
m._capacity = 80; #80 kWh (per pack)
m._cFrame = m._group.getElementById(m._name~"_Frame");
m._cFrameV = m._group.getElementById(m._name~"_Frame_Vis");
@ -282,8 +282,8 @@ var BatteryWidget = {
m._cDataLevel = m._group.getElementById(m._name~"_Data_Level");
m._cDataAbs = m._group.getElementById(m._name~"_Data_Abs");
m._cDataLevel.setText(sprintf("%3d",m._fraction*100)~" %");
m._cDataAbs.setText(sprintf("%3.1f",m._fraction*m._capacity)~" kWh");
m._cDataLevel.setText(sprintf("%3d",m._fraction)~" %");
m._cDataAbs.setText(sprintf("%3.1f",m._fraction*m._capacity*0.01)~" kWh");
m._left = m._cFrame.get("coord[0]");
m._right = m._cFrame.get("coord[2]");
@ -291,7 +291,7 @@ var BatteryWidget = {
return m;
},
setListeners : func(instance) {
append(me._listeners, setlistener(me._nLevelPct,func(n){me._onChargeLevelChange(n);},1,0) );
append(me._listeners, setlistener(me._nLevelPct,func(){me._onChargeLevelChange();},1,0) );
me._cFrameV.addEventListener("drag",func(e){me._onChargeInputChange(e);});
me._cLevel.addEventListener("drag",func(e){me._onChargeInputChange(e);});
@ -304,11 +304,11 @@ var BatteryWidget = {
deinit : func(){
me.removeListeners();
},
_onChargeLevelChange : func(n){
me._fraction = n.getValue();
me._cDataLevel.setText(sprintf("%3d",me._fraction*100)~" %");
me._cDataAbs.setText(sprintf("%3.1f",me._fraction*me._capacity)~" kWh");
_onChargeLevelChange : func(){
me._fraction = followme.circuit_1.parallelConnection[0].units[0].getRemainingPercentageFloat();
me._cDataLevel.setText(sprintf("%3d",me._fraction)~" %");
me._cDataAbs.setText(sprintf("%3.1f",me._fraction*me._capacity*0.01)~" kWh");
me._cLevel.set("coord[2]", me._left + (me._width * me._fraction));
@ -321,223 +321,19 @@ var BatteryWidget = {
newFraction = me._fraction + (e.deltaX/me._width);
}
newFraction = clamp(newFraction,0.0,1.0);
me._nLevelPct.setValue(newFraction);
followme.circuit_1.parallelConnection[0].units[0].remaining = newFraction * m._capacity;
},
};
var WeightWidget = {
new: func(dialog,canvasGroup,name,widgets){
var m = {parents:[WeightWidget,SvgWidget.new(dialog,canvasGroup,name)]};
m._class = "WeightWidget";
m._widget = {};
foreach(w;keys(widgets)){
if(widgets[w] != nil){
if(widgets[w]._class == "PayloadWidget"){
m._widget[w] = widgets[w];
}
}
}
m._cWeightGrossKg = m._group.getElementById("Weight_Gross_Kg");
m._cWeightGrossLbs = m._group.getElementById("Weight_Gross_Lbs");
m._cWeightWarning = m._group.getElementById("Weight_Warning");
m._cWeightPilotKg = m._group.getElementById("Weight_Pilot_Kg");
m._cWeightPilotLbs = m._group.getElementById("Weight_Pilot_Lbs");
m._cWeightCopilotKg = m._group.getElementById("Weight_Copilot_Kg");
m._cWeightCopilotLbs = m._group.getElementById("Weight_Copilot_Lbs");
m._cWeightBaggageKg = m._group.getElementById("Weight_Baggage_Kg");
m._cWeightBaggageLbs = m._group.getElementById("Weight_Baggage_Lbs");
m._cCenterGravityX = m._group.getElementById("Center_Gravity_X");
m._cCenterGravityXWarning = m._group.getElementById("Center_Gravity_Warn");
m._nCGx = props.globals.initNode("/fdm/jsbsim/inertia/cg-x-mm-rp",0.0,"DOUBLE"); #calculated CG distance to reference point, set via system in Systems/dialogs.xml
m._nGross = props.globals.initNode("/fdm/jsbsim/inertia/weight-lbs");
m._nPilot = props.globals.initNode("/payload/weight[0]/weight-lb");
m._nCopilot = props.globals.initNode("/payload/weight[1]/weight-lb");
m._nBaggage = props.globals.initNode("/payload/weight[2]/weight-lb");
m._nTakeoff = props.globals.initNode("/limits/mtow-lbs");
m._cgX = 0;
m._pilot = 0;
m._copilot = 0;
m._baggage = 0;
m._gross = 0;
m._takeoff = 0;
m._takeoff = m._nTakeoff.getValue();
return m;
},
setListeners : func(instance) {
append(me._listeners, setlistener(batteryPayload._nGrossWeight,func(n){me._onGrossWeightChange(n);},1,0) );
append(me._listeners, setlistener(me._nCGx,func(n){me._onCGChange(n);},1,0) );
},
init : func(instance=me){
me.setListeners(instance);
},
deinit : func(){
me.removeListeners();
},
_onGrossWeightChange : func(n){
me._gross = me._nGross.getValue();
me._cWeightGrossKg.setText(sprintf("%5d",me._gross/KG2LB));
me._cWeightGrossLbs.setText(sprintf("%4d",me._gross));
me._pilot = me._nPilot.getValue();
me._cWeightPilotKg.setText(sprintf("%5d",me._pilot/KG2LB));
me._cWeightPilotLbs.setText(sprintf("%4d",me._pilot));
me._copilot = me._nCopilot.getValue();
me._cWeightCopilotKg.setText(sprintf("%5d",me._copilot/KG2LB));
me._cWeightCopilotLbs.setText(sprintf("%4d",me._copilot));
me._baggage = me._nBaggage.getValue();
me._cWeightBaggageKg.setText(sprintf("%5d",me._baggage/KG2LB));
me._cWeightBaggageLbs.setText(sprintf("%4d",me._baggage));
if (me._gross > me._takeoff){
me._cWeightWarning.show();
me._cWeightGrossKg.setColor(COLOR["Red"]);
me._cWeightGrossLbs.setColor(COLOR["Red"]);
}else{
me._cWeightWarning.hide();
me._cWeightGrossKg.setColor(COLOR["Black"]);
me._cWeightGrossLbs.setColor(COLOR["Black"]);
}
},
_onCGChange : func(n){
me._cgX = me._nCGx.getValue();
me._cCenterGravityX.setTranslation((me._cgX-200),0);
if(me._cgX>195 and me._cgX<368){
me._cCenterGravityXWarning.hide();
}else{
me._cCenterGravityXWarning.show();
}
},
};
var PayloadWidget = {
new: func(dialog,canvasGroup,name,index){
var m = {parents:[PayloadWidget,SvgWidget.new(dialog,canvasGroup,name)]};
m._class = "PayloadWidget";
m._index = index;
#debug.dump(m._listCategoryKeys);
m._nRoot = props.globals.getNode("/payload/weight["~m._index~"]");
m._nLable = m._nRoot.initNode("name","","STRING");
### HACK : listener on /payload/weight[0]/weight-lb not working
### two props one for fdm(weight-lb) one for dialog(nt-weight-lb) listener
m._nWeightFdm = m._nRoot.initNode("weight-lb",0.0,"DOUBLE");
m._weight = m._nWeightFdm.getValue(); # lbs
m._nWeight = m._nRoot.initNode("nt-weight-lb",m._weight,"DOUBLE");
m._nCapacity = m._nRoot.initNode("max-lb",0.0,"DOUBLE");
m._capacity = m._nCapacity.getValue();
m._fraction = m._weight / m._capacity;
m._cFrame = m._group.getElementById(m._name~"_Frame");
m._cFrame_Pick = m._group.getElementById(m._name~"_Frame_Pick");
m._cLevel = m._group.getElementById(m._name~"_Level");
m._cLBS = m._group.getElementById(m._name~"_Lbs");
m._cKG = m._group.getElementById(m._name~"_Kg");
m._cLBS.setText(sprintf("%3.0f",m._weight));
m._cKG.setText(sprintf("%3.0f",m._weight));
m._left = m._cFrame.get("coord[0]");
m._right = m._cFrame.get("coord[2]");
m._width = m._right - m._left;
return m;
},
setListeners : func(instance) {
### FIXME : use one property remove the HACK
append(me._listeners, setlistener(me._nWeight,func(n){me._onWeightChange(n);},1,0) );
me._cFrame_Pick.addEventListener("drag",func(e){me._onInputChange(e);});
me._cLevel.addEventListener("drag",func(e){me._onInputChange(e);});
me._cFrame_Pick.addEventListener("wheel",func(e){me._onInputChange(e);});
me._cLevel.addEventListener("wheel",func(e){me._onInputChange(e);});
},
init : func(instance=me){
me.setListeners(instance);
},
deinit : func(){
me.removeListeners();
},
setWeight : func(weight){
me._weight = weight;
### HACK : set two props
me._nWeight.setValue(me._weight);
me._nWeightFdm.setValue(me._weight);
},
_onWeightChange : func(n){
me._weight = me._nWeight.getValue();
#print("PayloadWidget._onWeightChange() ... "~me._weight);
me._fraction = me._weight / me._capacity;
me._cLBS.setText(sprintf("%3.0f",me._weight));
me._cKG.setText(sprintf("%3.0f",me._weight/KG2LB));
me._cLevel.set("coord[2]", me._left + (me._width * me._fraction));
},
_onInputChange : func(e){
var newFraction =0;
if(e.type == "wheel"){
newFraction = me._fraction + (e.deltaY/me._width);
}else{
newFraction = me._fraction + (e.deltaX/me._width);
}
newFraction = clamp(newFraction,0.0,1.0);
me._weight = me._capacity * newFraction;
me.setWeight(me._weight);
},
};
var BatteryPayloadClass = {
new : func(){
var m = {parents:[BatteryPayloadClass]};
m._nRoot = props.globals.initNode("/alphaelectro/dialog/config");
m._nGrossWeight = props.globals.initNode("/fdm/jsbsim/inertia/nt-weight-lbs",0.0,"DOUBLE"); #listener on weight-lbs not possible, set via system in Systems/fuelpayload.xml
m._nRoot = props.globals.initNode("/e-tron/dialog/config");
m._name = "Battery and Systems";
m._title = "Battery and Systems Settings";
m._fdmdata = {
grosswgt : "/fdm/jsbsim/inertia/weight-lbs",
payload : "/payload",
cg : "/fdm/jsbsim/inertia/cg-x-in",
};
m._listeners = [];
@ -623,9 +419,7 @@ var BatteryPayloadClass = {
canvas.parsesvg(me._group, "Aircraft/followme_e-tron/gui/dialogs/config.svg",{"font-mapper": font_mapper});
me._widget.Front = BatteryWidget.new(me,me._group,"Front");
me._widget.Rear = BatteryWidget.new(me,me._group,"Rear");
me._widget.Front = BatteryWidget.new(me,me._group,"Front");

View File

@ -26,8 +26,8 @@
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="211.03013"
inkscape:cy="253.07054"
inkscape:cx="351.03013"
inkscape:cy="293.07054"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
@ -109,13 +109,13 @@
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:53.57478333px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:'Orbitron Bold';text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.33936954px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="496.82639"
y="215.76994"
x="325.82639"
y="222.76994"
id="text2284"><tspan
sodipodi:role="line"
id="tspan2282"
x="496.82639"
y="215.76994"
x="325.82639"
y="222.76994"
style="text-align:center;text-anchor:middle;stroke-width:1.33936954px">Follow Me EV</tspan></text>
<text
id="text2288"
@ -128,438 +128,6 @@
x="322.89066"
id="tspan2286"
sodipodi:role="line">Batteries and Systems</tspan></text>
<g
id="g2776"
transform="translate(0,8.0812204)">
<rect
style="opacity:1;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1.16076195;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect2373"
width="32"
height="32.111198"
x="968"
y="303.56494"
ry="3.6904399" />
<rect
style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:none;stroke-width:2.69892764;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect2369"
width="173"
height="32.111198"
x="795"
y="303.56494"
ry="3.6904399" />
<rect
ry="3.6904399"
y="303.56494"
x="700"
height="32.111198"
width="95"
id="rect2367"
style="opacity:1;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<rect
style="opacity:1;fill:none;fill-opacity:1;stroke:#161616;stroke-width:2.08352709;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect2304"
width="299.99997"
height="32.142857"
x="700"
y="303.53329"
ry="3.6904399" />
<text
id="text2308"
y="265.96994"
x="841.4621"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:27.86049843px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.6965124px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Orbitron;-inkscape-font-specification:Orbitron;stroke-width:0.6965124px"
y="265.96994"
x="841.4621"
id="tspan2306"
sodipodi:role="line">Center of Gravity</tspan></text>
<text
id="text2341"
y="300.35629"
x="695.97491"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.23015881px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28075397px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="stroke-width:0.28075397px"
y="300.35629"
x="695.97491"
id="tspan2339"
sodipodi:role="line">100</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.23015881px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28075397px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="797.76062"
y="300.35629"
id="text2351"><tspan
sodipodi:role="line"
id="tspan2349"
x="797.76062"
y="300.35629"
style="stroke-width:0.28075397px">200</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.23015881px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28075397px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="899.78601"
y="300.35629"
id="text2359"><tspan
sodipodi:role="line"
id="tspan2357"
x="899.78601"
y="300.35629"
style="stroke-width:0.28075397px">300</tspan></text>
<text
id="text2355"
y="300.35629"
x="997.26575"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.23015881px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28075397px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="stroke-width:0.28075397px"
y="300.35629"
x="997.26575"
id="tspan2353"
sodipodi:role="line">400</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.26919985px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.18172999px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="850.54865"
y="286.11429"
id="text2363"><tspan
sodipodi:role="line"
id="tspan2361"
x="850.54865"
y="286.11429"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Orbitron;-inkscape-font-specification:Orbitron;stroke-width:0.18172999px">(mm behind leading edge)</tspan></text>
<path
inkscape:connector-curvature="0"
d="m 800,306.92617 v 24.10715 m -12.05357,-12.05357 h 24.10715"
style="fill:none;fill-rule:evenodd;stroke:#0058ff;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="Center_Gravity_X"
inkscape:label="#path2377" />
<text
id="Center_Gravity_Warn"
y="354.39615"
x="850.46967"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15.45599842px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:'Orbitron Bold';text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.38639992px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"
inkscape:label="#text2382"><tspan
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Orbitron;-inkscape-font-specification:'Orbitron Bold';fill:#ff0000;fill-opacity:1;stroke-width:0.38639992px"
y="354.39615"
x="850.46967"
id="tspan2380"
sodipodi:role="line">out of permitted range!</tspan></text>
</g>
<g
id="g2755"
transform="translate(0,-26.263966)">
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:27.86049843px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.6965124px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="841.4621"
y="447.79739"
id="text2388"><tspan
sodipodi:role="line"
id="tspan2386"
x="841.4621"
y="447.79739"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Orbitron;-inkscape-font-specification:Orbitron;stroke-width:0.6965124px">Gross Weight</tspan></text>
<rect
ry="17.216581"
y="470.80408"
x="701.19934"
height="149.95235"
width="297.60132"
id="rect2390"
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#161616;stroke-width:4.48219109;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<text
id="text2394"
y="491.85144"
x="712.04523"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.57568264px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.3393921px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:start;text-anchor:start;stroke-width:0.3393921px"
y="491.85144"
x="712.04523"
id="tspan2392"
sodipodi:role="line">Empty Weight</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.57568264px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.3393921px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="712.04523"
y="510.70609"
id="text2398"><tspan
sodipodi:role="line"
id="tspan2396"
x="712.04523"
y="510.70609"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:start;text-anchor:start;stroke-width:0.3393921px">Battery Pack Front</tspan></text>
<text
id="text2402"
y="530.27216"
x="712.04523"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.57568264px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.3393921px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:start;text-anchor:start;stroke-width:0.3393921px"
y="530.27216"
x="712.04523"
id="tspan2400"
sodipodi:role="line">Battery Pack Rear</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.57568264px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.3393921px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="712.04523"
y="548.77106"
id="text2406"><tspan
sodipodi:role="line"
id="tspan2404"
x="712.04523"
y="548.77106"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:start;text-anchor:start;stroke-width:0.3393921px">Pilot</tspan></text>
<text
id="text2410"
y="567.26996"
x="712.04523"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.57568264px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.3393921px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:start;text-anchor:start;stroke-width:0.3393921px"
y="567.26996"
x="712.04523"
id="tspan2408"
sodipodi:role="line">Copilot</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.57568264px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.3393921px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="712.04523"
y="586.4541"
id="text2414"><tspan
sodipodi:role="line"
id="tspan2412"
x="712.04523"
y="586.4541"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:start;text-anchor:start;stroke-width:0.3393921px">Baggage</tspan></text>
<path
inkscape:connector-curvature="0"
id="path2416"
d="M 822.76925,598.78203 H 1000"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.70000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.57568264px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.3393921px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="712.04523"
y="613.57483"
id="text2420"><tspan
sodipodi:role="line"
id="tspan2418"
x="712.04523"
y="613.57483"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:start;text-anchor:start;stroke-width:0.3393921px">Gross Weight</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.82265472px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.32056636px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="917.2782"
y="490.40106"
id="text2424"><tspan
sodipodi:role="line"
id="tspan2422"
x="917.2782"
y="490.40106"
style="text-align:end;text-anchor:end;stroke-width:0.32056636px">379 kg</tspan></text>
<text
id="text2428"
y="490.40106"
x="990.31146"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.82265472px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.32056636px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="text-align:end;text-anchor:end;stroke-width:0.32056636px"
y="490.40106"
x="990.31146"
id="tspan2426"
sodipodi:role="line">836 lbs</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.82265472px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.32056636px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="917.2782"
y="511.4725"
id="text2452"><tspan
sodipodi:role="line"
id="tspan2450"
x="917.2782"
y="511.4725"
style="text-align:end;text-anchor:end;stroke-width:0.32056636px">53 kg</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.82265472px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.32056636px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="917.2782"
y="529.68677"
id="text2460"><tspan
sodipodi:role="line"
id="tspan2458"
x="917.2782"
y="529.68677"
style="text-align:end;text-anchor:end;stroke-width:0.32056636px">53 kg</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.82265472px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.32056636px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="917.2782"
y="547.90106"
id="Weight_Pilot_Kg"
inkscape:label="#text2468"><tspan
sodipodi:role="line"
id="tspan2466"
x="917.2782"
y="547.90106"
style="text-align:end;text-anchor:end;stroke-width:0.32056636px">000 kg</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.82265472px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.32056636px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="917.2782"
y="565.75818"
id="Weight_Copilot_Kg"
inkscape:label="#text2476"><tspan
sodipodi:role="line"
id="tspan2474"
x="917.2782"
y="565.75818"
style="text-align:end;text-anchor:end;stroke-width:0.32056636px">000 kg</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.82265472px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.32056636px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="917.2782"
y="584.32965"
id="Weight_Baggage_Kg"
inkscape:label="#text2484"><tspan
sodipodi:role="line"
id="tspan2482"
x="917.2782"
y="584.32965"
style="text-align:end;text-anchor:end;stroke-width:0.32056636px">00 kg</tspan></text>
<text
id="Weight_Gross_Kg"
y="611.47247"
x="917.2782"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.82265472px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.32056636px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"
inkscape:label="#text2444"><tspan
style="text-align:end;text-anchor:end;stroke-width:0.32056636px"
y="611.47247"
x="917.2782"
id="tspan2442"
sodipodi:role="line">000 kg</tspan></text>
<text
id="text2456"
y="511.4725"
x="990.31146"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.82265472px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.32056636px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="text-align:end;text-anchor:end;stroke-width:0.32056636px"
y="511.4725"
x="990.31146"
id="tspan2454"
sodipodi:role="line">117 lbs</tspan></text>
<text
id="text2464"
y="529.68677"
x="990.31146"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.82265472px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.32056636px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="text-align:end;text-anchor:end;stroke-width:0.32056636px"
y="529.68677"
x="990.31146"
id="tspan2462"
sodipodi:role="line">117 lbs</tspan></text>
<text
id="Weight_Pilot_Lbs"
y="547.90106"
x="990.31146"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.82265472px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.32056636px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"
inkscape:label="#text2472"><tspan
style="text-align:end;text-anchor:end;stroke-width:0.32056636px"
y="547.90106"
x="990.31146"
id="tspan2470"
sodipodi:role="line">000 lbs</tspan></text>
<text
id="Weight_Copilot_Lbs"
y="565.75818"
x="990.31146"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.82265472px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.32056636px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"
inkscape:label="#text2480"><tspan
style="text-align:end;text-anchor:end;stroke-width:0.32056636px"
y="565.75818"
x="990.31146"
id="tspan2478"
sodipodi:role="line">000 lbs</tspan></text>
<text
id="Weight_Baggage_Lbs"
y="584.32965"
x="990.31146"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.82265472px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.32056636px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"
inkscape:label="#text2488"><tspan
style="text-align:end;text-anchor:end;stroke-width:0.32056636px"
y="584.32965"
x="990.31146"
id="tspan2486"
sodipodi:role="line">000 lbs</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.82265472px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.32056636px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="990.31146"
y="611.47247"
id="Weight_Gross_Lbs"
inkscape:label="#text2448"><tspan
sodipodi:role="line"
id="tspan2446"
x="990.31146"
y="611.47247"
style="text-align:end;text-anchor:end;stroke-width:0.32056636px">0000 lbs</tspan></text>
<text
id="text2492"
y="645.39465"
x="712.04523"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.57568264px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.3393921px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:start;text-anchor:start;stroke-width:0.3393921px"
y="645.39465"
x="712.04523"
id="tspan2490"
sodipodi:role="line">MTOW</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.82265472px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.32056636px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="917.2782"
y="643.2923"
id="text2496"><tspan
sodipodi:role="line"
id="tspan2494"
x="917.2782"
y="643.2923"
style="text-align:end;text-anchor:end;stroke-width:0.32056636px">550 kg</tspan></text>
<text
id="text2500"
y="643.2923"
x="990.31146"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.82265472px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:Orbitron;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.32056636px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="text-align:end;text-anchor:end;stroke-width:0.32056636px"
y="643.2923"
x="990.31146"
id="tspan2498"
sodipodi:role="line">1213 lbs</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15.45599842px;line-height:100%;font-family:Orbitron;-inkscape-font-specification:'Orbitron Bold';text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.38639992px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="850.46967"
y="666.0282"
id="Weight_Warning"
inkscape:label="#text2504"><tspan
sodipodi:role="line"
id="tspan2502"
x="850.46967"
y="666.0282"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Orbitron;-inkscape-font-specification:'Orbitron Bold';fill:#ff0000;fill-opacity:1;stroke-width:0.38639992px">Gross weight exceeds MTOW!</tspan></text>
</g>
<rect
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#161616;stroke-width:5.46819067;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect2264"

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 25 KiB