1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2025-01-29 14:52:12 +01:00

Merge branch 'pt/CC3D_Release' of ssh://gitolite@git.openpilot.org/OpenPilot.git into CC3D_Release

This commit is contained in:
Mike LaBranche 2012-08-08 15:05:57 -07:00
commit 0f35e5f776
36 changed files with 14636 additions and 11407 deletions

View File

@ -147,6 +147,7 @@ C: Sergey Solodennikov (alconaft43)
D: August 2011
V: http://www.youtube.com/watch?v=8SrfIS7OkB4
M: First CopterControl Return to Base Fixed Wing
C: Eric Price (Corvus Corax)
D: August 2011
@ -157,13 +158,23 @@ C: Anders Johansson (dezent)
D: November 2011
V: http://www.youtube.com/watch?v=Xfas2TUhOPw
M: First OpenPilot over 1km FixedWing navigation flight
M: First CopterControl over 1km FixedWing navigation flight
C: Eric Price (Corvus Corax)
D: December 2011
V: http://www.youtube.com/watch?v=nWNWuUiUTNg
M: First successful flight using the GCS only and no RC TX
C:
D:
V:
M: First successful flight using just a mobile phone
C: Jose (please complete details), demoed in Portugal
D:
V:
M: First Altitude Hold using Sonar
M: First Revo Altitude Hold using Sonar
C:
D:
V:
@ -178,17 +189,74 @@ C:
D:
V:
M: First Revo Navigated flight on a FixedWing
C: It got done somewhere along the line, likely Corvus.
An incomplete list of some future Milestones is below:
M: First Revo Navigated flight on a MultiRotor
C: It got done somewhere along the line, James or Sami
M: First Revo Navigated flight on a Heli
C:
D:
V:
M: First Revo 1km Navigated flight on a MultiRotor
C:
D:
V:
M: First Revo 5km Navigated flight on a MultiRotor
C:
D:
V:
M: First Revo 5km Navigated flight on a FixedWing
C:
D:
V:
M: First Revo 1km Navigated flight on a Heli
C:
D:
V:
M: First Revo 5km Navigated flight on a Heli
C:
D:
V:
M: First use of the Magic Waypoint feature
C:
D:
V:
M: First Auto landing on a fixed Wing using CC
C:
D:
V:
M: First Auto landing on a fixed Wing using Revo
C:
D:
V:
M: First Auto take-off on a MultiRotor using Revo
C:
D:
V:
M: First Auto landing on a MultiRotor using Revo
C:
D:
V:
M: First Auto take-off on a Heli using Revo
C:
D:
V:
M: First Auto landing on a Heli using Revo
C:
D:
V:
* First Helicopter flight with OpenPilot Pro
* First fixed wing navigation flight on CopterControl
* First successful flight using the GCS only and no RC TX
* First use of Magic Waypoint
* First Flybarless Helicopter flight with OpenPilot Pro
* First fixed wing navigation flight
* First Multirotor navigation flight
* First Helicopter navigation flight
* First over 5km navigation flight
* First "Follow Me" navigation flight
* First Channel Crossing with OpenPilot

View File

@ -94,7 +94,7 @@
/* Task stack sizes */
#define PIOS_ACTUATOR_STACK_SIZE 1020
#define PIOS_MANUAL_STACK_SIZE 724
#define PIOS_MANUAL_STACK_SIZE 800
#define PIOS_SYSTEM_STACK_SIZE 660
#define PIOS_STABILIZATION_STACK_SIZE 524
#define PIOS_TELEM_STACK_SIZE 500

View File

@ -242,7 +242,7 @@ int WMM_GetMagVector(float Lat, float Lon, float AltEllipsoid, uint16_t Month, u
{
CoordGeodetic->lambda = Lon;
CoordGeodetic->phi = Lat;
CoordGeodetic->HeightAboveEllipsoid = AltEllipsoid;
CoordGeodetic->HeightAboveEllipsoid = AltEllipsoid/1000.0; // convert to km
// Convert from geodeitic to Spherical Equations: 17-18, WMM Technical report
if (WMM_GeodeticToSpherical(CoordGeodetic, CoordSpherical) < 0)

View File

@ -66,7 +66,7 @@ static float GravityAccel(float latitude, float longitude, float altitude);
#ifdef PIOS_GPS_SETS_HOMELOCATION
// Unfortunately need a good size stack for the WMM calculation
#define STACK_SIZE_BYTES 750
#define STACK_SIZE_BYTES 784
#else
#if defined(PIOS_GPS_MINIMAL)
#define STACK_SIZE_BYTES 500

View File

@ -14,8 +14,8 @@
height="80.827866"
id="svg10068"
version="1.1"
inkscape:version="0.48.2 r9819"
sodipodi:docname="arm-status-new.svg"
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="arm-status.svg"
inkscape:export-filename="H:\Documents\Hobbies\W433\My Gauges\vbat-001.png"
inkscape:export-xdpi="103.61"
inkscape:export-ydpi="103.61"
@ -1300,6 +1300,156 @@
id="linearGradient3966"
xlink:href="#linearGradient3790-4-8"
inkscape:collect="always" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3790-4-8"
id="linearGradient3252"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.79280486,0,0,0.72374721,74.461167,-1.3787785)"
x1="298.43829"
y1="368.20679"
x2="300.36011"
y2="506.89417" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3259-9-2"
id="linearGradient3255"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.79280486,0,0,0.72374721,74.461167,-1.3787785)"
x1="311.52808"
y1="572.13867"
x2="310.94031"
y2="526.29114" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3285-6-3"
id="linearGradient3259"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.79280486,0,0,0.72374721,74.461167,-1.3787785)"
x1="295.07001"
y1="573.90204"
x2="295.65781"
y2="418.138" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3285-6-3"
id="linearGradient3261"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.79280486,0,0,0.72374721,74.461167,-1.3787785)"
x1="295.07001"
y1="573.90204"
x2="295.65781"
y2="418.138" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3259-9-2"
id="linearGradient3263"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.79280486,0,0,0.72374721,74.461167,-1.3787785)"
x1="311.52808"
y1="572.13867"
x2="310.94031"
y2="526.29114" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3790-4-8"
id="linearGradient3265"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.79280486,0,0,0.72374721,74.461167,-1.3787785)"
x1="298.43829"
y1="368.20679"
x2="300.36011"
y2="506.89417" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3790-4-8"
id="linearGradient3273"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.79280486,0,0,0.72374721,-180.09727,12.763357)"
x1="298.43829"
y1="368.20679"
x2="300.36011"
y2="506.89417" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3259-9-2"
id="linearGradient3276"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.79280486,0,0,0.72374721,74.461167,-1.3787785)"
x1="311.52808"
y1="572.13867"
x2="310.94031"
y2="526.29114" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3285-6-3"
id="linearGradient3280"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.79280486,0,0,0.72374721,74.461167,-1.3787785)"
x1="295.07001"
y1="573.90204"
x2="295.65781"
y2="418.138" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3259-9-2"
id="linearGradient3282"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.79280486,0,0,0.72374721,-176.05666,-22.591982)"
x1="311.52808"
y1="572.13867"
x2="310.94031"
y2="526.29114" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3755-1"
id="linearGradient3209"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.31025181,0,0,0.29604738,51.62655,372.04954)"
x1="393.51294"
y1="832.61218"
x2="394.48703"
y2="529.75507" />
<linearGradient
id="linearGradient3755-1">
<stop
style="stop-color:#1e1e1e;stop-opacity:1;"
offset="0"
id="stop3757-3" />
<stop
style="stop-color:#4d4d4d;stop-opacity:1;"
offset="1"
id="stop3759-6" />
</linearGradient>
<filter
color-interpolation-filters="sRGB"
inkscape:collect="always"
id="filter4045">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="0.45575892"
id="feGaussianBlur4047" />
</filter>
<linearGradient
y2="529.75507"
x2="394.48703"
y1="832.61218"
x1="393.51294"
gradientTransform="matrix(0.31025181,0,0,0.29604738,51.62655,372.04954)"
gradientUnits="userSpaceOnUse"
id="linearGradient4085"
xlink:href="#linearGradient3755-1"
inkscape:collect="always" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3755-1"
id="linearGradient3312"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.31025181,0,0,0.29604738,51.62655,372.04954)"
x1="393.51294"
y1="832.61218"
x2="394.48703"
y2="529.75507" />
</defs>
<sodipodi:namedview
id="base"
@ -1312,12 +1462,12 @@
inkscape:cx="75.4641"
inkscape:cy="94.18186"
inkscape:document-units="px"
inkscape:current-layer="background"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1600"
inkscape:window-height="823"
inkscape:window-x="-9"
inkscape:window-y="-9"
inkscape:window-width="1440"
inkscape:window-height="838"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:object-paths="true"
showguides="true"
@ -1348,49 +1498,31 @@
id="g2932"
inkscape:groupmode="layer"
transform="translate(-205.8687,-331.45166)">
<rect
style="fill:none;stroke:none"
id="bargraph"
width="205.45833"
height="64.785042"
x="217.77841"
y="339.47308"
ry="4.7808909"
inkscape:export-filename="H:\Documents\Hobbies\W433\g9905.png"
inkscape:export-xdpi="88.809998"
inkscape:export-ydpi="88.809998"
inkscape:label="#rect4388" />
<g
id="background"
inkscape:label="#g8543">
<g
transform="matrix(0.79280486,0,0,0.72374721,322.67019,100.52996)"
id="g4023"
style="display:inline">
<rect
style="fill:url(#linearGradient4033);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
id="rect4025"
width="289.19211"
height="111.67988"
x="-147.32065"
y="319.06393"
ry="17.712246" />
<path
style="fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
d="m -130.38957,321.09916 c -10.40328,0.13552 -16.79656,11.11379 -14.9375,20.75 0.24853,24.79185 -0.48485,49.65785 0.34375,74.40625 1.69659,9.71009 12.36903,14.16124 21.4375,12.5 83.37176,-0.12573 166.769249,0.25097 250.125,-0.1875 9.57786,-1.24954 15.0045,-11.39003 13.28125,-20.53125 -0.32065,-25.06939 0.63636,-50.246 -0.46875,-75.25 -1.99885,-8.70345 -11.6919,-13.22175 -20.28125,-11.71875 -83.166451,0.0209 -166.33459,-0.0417 -249.5,0.0312 z"
id="path4027"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient4035);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
d="m -130.38957,321.09916 c -10.40328,0.13552 -16.79656,11.11379 -14.9375,20.75 0.24853,24.79185 -0.48485,49.65785 0.34375,74.40625 1.69659,9.71009 12.36903,14.16124 21.4375,12.5 83.37176,-0.12573 166.769248,0.25097 250.125,-0.1875 9.57786,-1.24954 15.0045,-11.39003 13.28125,-20.53125 -0.32065,-25.06939 0.63636,-50.246 -0.46875,-75.25 -1.99885,-8.70345 -11.6919,-13.22175 -20.28125,-11.71875 -83.166452,0.0209 -166.33459,-0.0417 -249.5,0.0312 z"
id="path4029"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient3966);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
d="m -129.60832,319.06791 c -9.81258,0 -17.71875,7.90617 -17.71875,17.71875 l 0,7.46875 c 21.91332,13.37842 82.3034,23 153.4062474,23 56.8274986,0 106.8063826,-6.14199 135.7812526,-15.4375 l 0,-15.03125 c 0,-9.81258 -7.87492,-17.71875 -17.6875,-17.71875 l -253.78125,0 z"
id="path4031"
inkscape:connector-curvature="0" />
</g>
inkscape:label="#g3319">
<rect
inkscape:label="#rect4388"
inkscape:export-ydpi="88.809998"
inkscape:export-xdpi="88.809998"
inkscape:export-filename="H:\Documents\Hobbies\W433\g9905.png"
ry="4.7808909"
y="339.47308"
x="217.77841"
height="64.785042"
width="205.45833"
id="bargraph"
style="fill:none;fill-opacity:1;stroke:none" />
inkscape:label="#rect2985-5"
transform="matrix(0.81679353,0,0,0.88235114,142.08795,-134.58341)"
id="solid_bg"
ry="10.434186"
y="528.80811"
x="79.017357"
height="91.499794"
width="280.11307"
style="fill:url(#linearGradient3312);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;filter:url(#filter4045)" />
<g
transform="translate(215.8687,364.87409)"
style="font-size:40px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
@ -1424,7 +1556,7 @@
id="layer1"
inkscape:label="Status-Symbol">
<g
transform="matrix(1.6946172,0,0,1.6946172,-104.16402,177.63069)"
transform="matrix(1.6946172,0,0,1.6946172,-104.16402,179.63069)"
inkscape:label="#g4504"
id="symbol">
<path

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 59 KiB

View File

@ -10,12 +10,12 @@
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="229.27776"
width="270"
height="80.827866"
id="svg10068"
version="1.1"
inkscape:version="0.48.2 r9819"
sodipodi:docname="flightmode-status-new.svg"
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="flightmode-status.svg"
inkscape:export-filename="H:\Documents\Hobbies\W433\My Gauges\vbat-001.png"
inkscape:export-xdpi="103.61"
inkscape:export-ydpi="103.61"
@ -86,7 +86,8 @@
id="path4640"
style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(0.3,0,0,0.3,-0.69,0)" />
transform="matrix(0.3,0,0,0.3,-0.69,0)"
inkscape:connector-curvature="0" />
</marker>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
@ -766,94 +767,6 @@
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5224-4"
id="radialGradient3814"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.29375,0,18.848047)"
cx="14.5"
cy="26.6875"
fx="14.5"
fy="26.6875"
r="10" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5224-4"
id="radialGradient3816"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.29375,0,18.848047)"
cx="14.5"
cy="26.6875"
fx="14.5"
fy="26.6875"
r="10" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5237-2"
id="radialGradient3818"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.5354369,0,0,1.5485894,-15.737913,-10.36738)"
cx="29.392656"
cy="18.898249"
fx="29.392656"
fy="18.898249"
r="29.699959" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5300-7"
id="radialGradient3820"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.2469896,0,0,2.2469896,-37.128341,-8.8439229)"
cx="29.77438"
cy="7.0922189"
fx="29.77438"
fy="7.0922189"
r="25.380436" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5224-4"
id="radialGradient3856"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.29375,0,18.848047)"
cx="14.5"
cy="26.6875"
fx="14.5"
fy="26.6875"
r="10" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5224-4"
id="radialGradient3858"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.29375,0,18.848047)"
cx="14.5"
cy="26.6875"
fx="14.5"
fy="26.6875"
r="10" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5237-2"
id="radialGradient3860"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.5354369,0,0,1.5485894,-15.737913,-10.36738)"
cx="29.392656"
cy="18.898249"
fx="29.392656"
fy="18.898249"
r="29.699959" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5300-7"
id="radialGradient3862"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.2469896,0,0,2.2469896,-37.128341,-8.8439229)"
cx="29.77438"
cy="7.0922189"
fx="29.77438"
fy="7.0922189"
r="25.380436" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5224-4"
@ -949,138 +862,6 @@
fx="29.77438"
fy="7.0922189"
r="25.380436" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5224-4"
id="radialGradient3197"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.29375,0,18.848047)"
cx="14.5"
cy="26.6875"
fx="14.5"
fy="26.6875"
r="10" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5224-4"
id="radialGradient3199"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.29375,0,18.848047)"
cx="14.5"
cy="26.6875"
fx="14.5"
fy="26.6875"
r="10" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5237-2"
id="radialGradient3201"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.5354369,0,0,1.5485894,-15.737913,-10.36738)"
cx="29.392656"
cy="18.898249"
fx="29.392656"
fy="18.898249"
r="29.699959" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5300-7"
id="radialGradient3203"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.2469896,0,0,2.2469896,-37.128341,-8.8439229)"
cx="29.77438"
cy="7.0922189"
fx="29.77438"
fy="7.0922189"
r="25.380436" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5224-4"
id="radialGradient3231"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.29375,0,18.848047)"
cx="14.5"
cy="26.6875"
fx="14.5"
fy="26.6875"
r="10" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5224-4"
id="radialGradient3233"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.29375,0,18.848047)"
cx="14.5"
cy="26.6875"
fx="14.5"
fy="26.6875"
r="10" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5237-2"
id="radialGradient3235"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.5354369,0,0,1.5485894,-15.737913,-10.36738)"
cx="29.392656"
cy="18.898249"
fx="29.392656"
fy="18.898249"
r="29.699959" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5300-7"
id="radialGradient3237"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.2469896,0,0,2.2469896,-37.128341,-8.8439229)"
cx="29.77438"
cy="7.0922189"
fx="29.77438"
fy="7.0922189"
r="25.380436" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3285-6-3"
id="linearGradient4033"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-313.07707,-140.80709)"
x1="295.07001"
y1="573.90204"
x2="295.65781"
y2="418.138" />
<linearGradient
id="linearGradient3285-6-3"
inkscape:collect="always">
<stop
id="stop3287-9-8"
offset="0"
style="stop-color:#333333;stop-opacity:1" />
<stop
id="stop3289-8-2"
offset="1"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3259-9-2"
id="linearGradient4035"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-313.07707,-140.80709)"
x1="311.52808"
y1="572.13867"
x2="310.94031"
y2="526.29114" />
<linearGradient
inkscape:collect="always"
id="linearGradient3259-9-2">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop3261-8-7" />
<stop
style="stop-color:#000000;stop-opacity:0;"
offset="1"
id="stop3263-3-5" />
</linearGradient>
<linearGradient
y2="506.89417"
x2="300.36011"
@ -1104,14 +885,44 @@
id="stop3794-2-7" />
</linearGradient>
<linearGradient
y2="506.89417"
x2="300.36011"
y1="368.20679"
x1="298.43829"
gradientTransform="translate(-313.07707,-140.80709)"
inkscape:collect="always"
xlink:href="#linearGradient3755-1"
id="linearGradient3312"
gradientUnits="userSpaceOnUse"
id="linearGradient3302"
xlink:href="#linearGradient3790-4-8"
gradientTransform="matrix(0.31025181,0,0,0.29604738,51.62655,372.04954)"
x1="393.51294"
y1="832.61218"
x2="394.48703"
y2="529.75507" />
<linearGradient
id="linearGradient3755-1">
<stop
style="stop-color:#1e1e1e;stop-opacity:1;"
offset="0"
id="stop3757-3" />
<stop
style="stop-color:#4d4d4d;stop-opacity:1;"
offset="1"
id="stop3759-6" />
</linearGradient>
<filter
color-interpolation-filters="sRGB"
inkscape:collect="always"
id="filter4045">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="0.45575892"
id="feGaussianBlur4047" />
</filter>
<linearGradient
y2="529.75507"
x2="394.48703"
y1="832.61218"
x1="393.51294"
gradientTransform="matrix(0.31025181,0,0,0.29604738,51.62655,372.04954)"
gradientUnits="userSpaceOnUse"
id="linearGradient3287"
xlink:href="#linearGradient3755-1"
inkscape:collect="always" />
</defs>
<sodipodi:namedview
@ -1122,15 +933,15 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.979899"
inkscape:cx="-7.1957738"
inkscape:cx="54.735681"
inkscape:cy="90.710362"
inkscape:document-units="px"
inkscape:current-layer="background"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1600"
inkscape:window-height="823"
inkscape:window-x="-9"
inkscape:window-y="-9"
inkscape:window-width="1440"
inkscape:window-height="838"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:object-paths="true"
showguides="true"
@ -1146,7 +957,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
<dc:title />
<dc:creator>
<cc:Agent>
<dc:title>Edouard Lafargue</dc:title>
@ -1160,38 +971,12 @@
inkscape:label="Background"
id="g2932"
inkscape:groupmode="layer"
transform="translate(-205.8687,-331.45166)">
transform="translate(-205.8687,-331.45166)"
sodipodi:insensitive="true">
<g
id="background"
inkscape:label="#g8543">
<g
transform="matrix(0.79280486,0,0,0.72374721,322.67019,100.52996)"
id="g4023"
style="display:inline">
<rect
style="fill:url(#linearGradient4033);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
id="rect4025"
width="289.19211"
height="111.67988"
x="-147.32065"
y="319.06393"
ry="17.712246" />
<path
style="fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
d="m -130.38957,321.09916 c -10.40328,0.13552 -16.79656,11.11379 -14.9375,20.75 0.24853,24.79185 -0.48485,49.65785 0.34375,74.40625 1.69659,9.71009 12.36903,14.16124 21.4375,12.5 83.37176,-0.12573 166.769249,0.25097 250.125,-0.1875 9.57786,-1.24954 15.0045,-11.39003 13.28125,-20.53125 -0.32065,-25.06939 0.63636,-50.246 -0.46875,-75.25 -1.99885,-8.70345 -11.6919,-13.22175 -20.28125,-11.71875 -83.166451,0.0209 -166.33459,-0.0417 -249.5,0.0312 z"
id="path4027"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient4035);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
d="m -130.38957,321.09916 c -10.40328,0.13552 -16.79656,11.11379 -14.9375,20.75 0.24853,24.79185 -0.48485,49.65785 0.34375,74.40625 1.69659,9.71009 12.36903,14.16124 21.4375,12.5 83.37176,-0.12573 166.769248,0.25097 250.125,-0.1875 9.57786,-1.24954 15.0045,-11.39003 13.28125,-20.53125 -0.32065,-25.06939 0.63636,-50.246 -0.46875,-75.25 -1.99885,-8.70345 -11.6919,-13.22175 -20.28125,-11.71875 -83.166452,0.0209 -166.33459,-0.0417 -249.5,0.0312 z"
id="path4029"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient3302);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline"
d="m -129.60832,319.06791 c -9.81258,0 -17.71875,7.90617 -17.71875,17.71875 l 0,7.46875 c 21.91332,13.37842 82.3034,23 153.4062474,23 56.8274986,0 106.8063826,-6.14199 135.7812526,-15.4375 l 0,-15.03125 c 0,-9.81258 -7.87492,-17.71875 -17.6875,-17.71875 l -253.78125,0 z"
id="path4031"
inkscape:connector-curvature="0" />
</g>
inkscape:label="#g8543"
transform="matrix(0.96748131,0,0,1,6.7388582,0)">
<rect
inkscape:label="#rect4388"
inkscape:export-ydpi="88.809998"
@ -1203,7 +988,7 @@
height="64.785042"
width="205.45833"
id="bargraph"
style="fill:none;fill-opacity:1;stroke:none" />
style="fill:none;stroke:none" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
@ -1215,574 +1000,334 @@
id="tspan2987"
x="30"
y="37.256439" /></text>
<rect
style="fill:url(#linearGradient3287);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;filter:url(#filter4045)"
width="280.11307"
height="91.499794"
x="79.017357"
y="528.80811"
ry="10.434186"
id="solid_bg"
transform="matrix(0.99034038,0,0,0.88235114,130.0595,-134.58341)"
inkscape:label="#rect2985-5" />
</g>
</g>
<g
inkscape:groupmode="layer"
id="layer1"
inkscape:label="Status-Symbol"
style="display:none"
sodipodi:insensitive="true">
style="display:inline;opacity:1">
<g
transform="matrix(2.0683135,0,0,2.0683135,-162.1788,206.61155)"
transform="matrix(2.0683135,0,0,2.0683135,-116.1788,214.61155)"
inkscape:label="#g4504"
id="symbol">
id="symbol"
style="opacity:0">
<path
transform="matrix(1.3565115,0,0,1.3564842,148.6163,-105.84566)"
style="opacity:0.53012049;color:#000000;fill:url(#radialGradient4814);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter5296-2);enable-background:accumulate"
style="opacity:0.53012049000000006;color:#000000;fill:url(#radialGradient4814);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter5296-2);enable-background:accumulate"
sodipodi:type="arc"
sodipodi:ry="2.9375"
sodipodi:rx="10"
sodipodi:cy="26.6875"
sodipodi:cx="14.5"
id="path4798"
d="m 24.5,26.6875 a 10,2.9375 0 1 1 -20,0 10,2.9375 0 1 1 20,0 z" />
d="m 24.5,26.6875 c 0,1.622336 -4.477153,2.9375 -10,2.9375 -5.5228475,0 -10,-1.315164 -10,-2.9375 0,-1.622336 4.4771525,-2.9375 10,-2.9375 5.522847,0 10,1.315164 10,2.9375 z" />
<path
transform="matrix(0.8476709,0,0,0.8476539,155.99448,-91.479567)"
style="opacity:0.80120479;color:#000000;fill:url(#radialGradient4816);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter5296-2);enable-background:accumulate"
style="opacity:0.80120479000000000;color:#000000;fill:url(#radialGradient4816);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter5296-2);enable-background:accumulate"
sodipodi:type="arc"
sodipodi:ry="2.9375"
sodipodi:rx="10"
sodipodi:cy="26.6875"
sodipodi:cx="14.5"
id="path4800"
d="m 24.5,26.6875 a 10,2.9375 0 1 1 -20,0 10,2.9375 0 1 1 20,0 z" />
d="m 24.5,26.6875 c 0,1.622336 -4.477153,2.9375 -10,2.9375 -5.5228475,0 -10,-1.315164 -10,-2.9375 0,-1.622336 4.4771525,-2.9375 10,-2.9375 5.522847,0 10,1.315164 10,2.9375 z" />
<path
transform="matrix(0.4552142,0,0,0.4578395,154.92379,-94.080092)"
style="fill:url(#radialGradient4818);fill-opacity:1;fill-rule:evenodd;stroke:#d4d0d0;stroke-width:2.19046068;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
style="fill:url(#radialGradient4818);fill-opacity:1;fill-rule:evenodd;stroke:#d4d0d0;stroke-width:2.19046068000000020;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
sodipodi:type="arc"
sodipodi:ry="29.010935"
sodipodi:rx="29.010935"
sodipodi:cy="29.207693"
sodipodi:cx="29.392656"
id="path4802"
d="m 58.403591,29.207693 a 29.010935,29.010935 0 1 1 -58.0218695,0 29.010935,29.010935 0 1 1 58.0218695,0 z" />
d="m 58.403591,29.207693 c 0,16.022297 -12.988638,29.010935 -29.010935,29.010935 -16.022297,0 -29.0109345,-12.988638 -29.0109345,-29.010935 0,-16.022297 12.9886375,-29.01093473 29.0109345,-29.01093473 16.022297,0 29.010935,12.98863773 29.010935,29.01093473 z" />
<path
transform="matrix(0.5041973,0,0,0.5044661,153.2742,-96.019639)"
style="fill:none;stroke:url(#radialGradient4820);stroke-width:1.98282218;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
style="fill:none;stroke:url(#radialGradient4820);stroke-width:1.98282218000000010;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc"
sodipodi:ry="24.175779"
sodipodi:rx="24.175779"
sodipodi:cy="30.352861"
sodipodi:cx="29.77438"
id="path4804"
d="m 53.950159,30.352861 a 24.175779,24.175779 0 1 1 -48.3515586,0 24.175779,24.175779 0 1 1 48.3515586,0 z" />
d="m 53.950159,30.352861 c 0,13.351915 -10.823865,24.17578 -24.175779,24.17578 -13.351915,0 -24.1757796,-10.823865 -24.1757796,-24.17578 0,-13.351914 10.8238646,-24.1757789 24.1757796,-24.1757789 13.351914,0 24.175779,10.8238649 24.175779,24.1757789 z" />
</g>
<rect
style="opacity:0.98000004;fill:#ffffff;fill-opacity:1;stroke:#e31717;stroke-width:3.18836617;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
style="opacity:0.98000003999999996;fill:#ffffff;fill-opacity:1;stroke:#e31717;stroke-width:3.18836617000000010;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="value"
width="132.66878"
height="23"
x="15"
y="41"
y="29"
ry="3.4474616"
inkscape:label="#rect2989" />
<g
id="symbol-Stabilized1"
inkscape:label="#g3832"
transform="matrix(1.2181818,0,0,1.2181818,-416.7342,39.213763)">
<g
transform="matrix(1.6946172,0,0,1.6946172,90.69312,69.91641)"
inkscape:label="#g4504"
id="g3804"
style="display:inline">
<path
transform="matrix(1.3565115,0,0,1.3564842,148.6163,-105.84566)"
style="opacity:0.53012049;color:#000000;fill:url(#radialGradient3814);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter5296-2);enable-background:accumulate"
sodipodi:type="arc"
sodipodi:ry="2.9375"
sodipodi:rx="10"
sodipodi:cy="26.6875"
sodipodi:cx="14.5"
id="path3806"
d="m 24.5,26.6875 a 10,2.9375 0 1 1 -20,0 10,2.9375 0 1 1 20,0 z" />
<path
transform="matrix(0.8476709,0,0,0.8476539,155.99448,-91.479567)"
style="opacity:0.80120479;color:#000000;fill:url(#radialGradient3816);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter5296-2);enable-background:accumulate"
sodipodi:type="arc"
sodipodi:ry="2.9375"
sodipodi:rx="10"
sodipodi:cy="26.6875"
sodipodi:cx="14.5"
id="path3808"
d="m 24.5,26.6875 a 10,2.9375 0 1 1 -20,0 10,2.9375 0 1 1 20,0 z" />
<path
transform="matrix(0.4552142,0,0,0.4578395,154.92379,-94.080092)"
style="fill:url(#radialGradient3818);fill-opacity:1;fill-rule:evenodd;stroke:#d4d0d0;stroke-width:2.19046068;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
sodipodi:type="arc"
sodipodi:ry="29.010935"
sodipodi:rx="29.010935"
sodipodi:cy="29.207693"
sodipodi:cx="29.392656"
id="path3810"
d="m 58.403591,29.207693 a 29.010935,29.010935 0 1 1 -58.0218695,0 29.010935,29.010935 0 1 1 58.0218695,0 z" />
<path
transform="matrix(0.5041973,0,0,0.5044661,153.2742,-96.019639)"
style="fill:none;stroke:url(#radialGradient3820);stroke-width:1.98282218;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc"
sodipodi:ry="24.175779"
sodipodi:rx="24.175779"
sodipodi:cy="30.352861"
sodipodi:cx="29.77438"
id="path3812"
d="m 53.950159,30.352861 a 24.175779,24.175779 0 1 1 -48.3515586,0 24.175779,24.175779 0 1 1 48.3515586,0 z" />
</g>
<g
transform="matrix(0.33832187,0,0,0.33832187,410.06766,-39.187259)"
id="g3796"
style="stroke-width:5.32037735;stroke-miterlimit:4;stroke-dasharray:none">
<path
sodipodi:end="6.2831853"
sodipodi:start="3.1415927"
transform="matrix(0.9559435,0,0,0.9559435,-2.74581,-3.77127)"
d="m -124.28571,-85.600701 a 21.428572,5.7142859 0 0 1 42.857142,10e-7"
sodipodi:ry="5.7142859"
sodipodi:rx="21.428572"
sodipodi:cy="-85.6007"
sodipodi:cx="-102.85714"
id="path3782"
style="opacity:0.98000004;fill:none;stroke:#ff4e34;stroke-width:5.56557703;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
sodipodi:type="arc"
sodipodi:open="true" />
<path
sodipodi:type="arc"
style="opacity:0.98000004;fill:none;stroke:#ff4e34;stroke-width:5.32037735;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
id="path2993"
sodipodi:cx="-101.07143"
sodipodi:cy="-85.243561"
sodipodi:rx="49.642857"
sodipodi:ry="11.785714"
d="m -51.42857,-85.243561 a 49.642857,11.785714 0 1 1 -99.28571,0 49.642857,11.785714 0 1 1 99.28571,0 z"
transform="translate(0,-0.35714)" />
<path
style="fill:none;stroke:#ff4e34;stroke-width:5.32037735;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m -101.07143,-37.895278 0,-96.382562"
id="path2991"
inkscape:connector-curvature="0" />
<path
sodipodi:end="3.1415927"
sodipodi:start="0"
sodipodi:type="arc"
style="opacity:0.98000004;fill:none;stroke:#ff4e34;stroke-width:5.56557703;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="path2995"
sodipodi:cx="-102.85714"
sodipodi:cy="-85.6007"
sodipodi:rx="21.428572"
sodipodi:ry="5.7142859"
d="m -81.428568,-85.6007 a 21.428572,5.7142859 0 1 1 -42.857142,-10e-7"
transform="matrix(0.9559435,0,0,0.9559435,-2.7458124,-3.7712673)"
sodipodi:open="true" />
<path
sodipodi:type="arc"
style="opacity:0.98000004;fill:none;stroke:#ff4e34;stroke-width:5.30381203;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="path2997"
sodipodi:cx="-101.78571"
sodipodi:cy="-85.6007"
sodipodi:rx="20.357143"
sodipodi:ry="39.285713"
d="m -81.42857,-85.6007 a 20.357143,39.285713 0 1 1 -40.71429,0 20.357143,39.285713 0 1 1 40.71429,0 z"
transform="matrix(1.0062564,0,0,1,1.3510971,0)" />
<path
transform="translate(0,-0.35713959)"
d="m -51.42857,-85.243561 a 49.642857,11.785714 0 1 1 -99.28571,0"
sodipodi:ry="11.785714"
sodipodi:rx="49.642857"
sodipodi:cy="-85.243561"
sodipodi:cx="-101.07143"
id="path3791"
style="opacity:0.98000004;fill:none;stroke:#ff4e34;stroke-width:5.32037735;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc"
sodipodi:start="0"
sodipodi:end="3.1415927"
sodipodi:open="true" />
</g>
inkscape:label="#g4061"
transform="matrix(1.0119788,0,0,1.0116202,67.434626,1.7534722)">
<path
sodipodi:open="true"
sodipodi:type="arc"
style="opacity:0.98000003999999996;fill:none;stroke:#4e94f6;stroke-width:5.56557703000000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
id="path3782"
sodipodi:cx="-102.85714"
sodipodi:cy="-85.6007"
sodipodi:rx="21.428572"
sodipodi:ry="5.7142859"
d="m -124.28571,-85.600701 c 0,-3.155913 9.5939,-5.714285 21.42857,-5.714285 11.834674,0 21.428572,2.558373 21.428572,5.714286"
transform="matrix(0.38288032,0.12642058,-0.13394556,0.40567065,69.500572,5.6999542)"
sodipodi:start="3.1415927"
sodipodi:end="6.2831853" />
<path
transform="matrix(0.4005261,0.13224692,-0.1401187,0.42436676,70.121957,7.5119224)"
d="m -51.42857,-85.243561 c 0,6.50907 -22.225864,11.785714 -49.64286,11.785714 -27.41699,0 -49.64285,-5.276644 -49.64285,-11.785714 0,-6.50907 22.22586,-11.785714 49.64285,-11.785714 27.416996,0 49.64286,5.276644 49.64286,11.785714 z"
sodipodi:ry="11.785714"
sodipodi:rx="49.642857"
sodipodi:cy="-85.243561"
sodipodi:cx="-101.07143"
id="path2993"
style="opacity:0.98000003999999996;fill:none;stroke:#4e94f6;stroke-width:5.32037735000000020;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
sodipodi:type="arc" />
<path
inkscape:connector-curvature="0"
id="path2991"
d="m 34.900006,-21.784401 13.505,-40.901556"
style="fill:none;stroke:#4e94f6;stroke-width:2.30992769999999980;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:open="true"
transform="matrix(0.38288032,0.12642058,-0.13394556,0.40567065,69.500571,5.699955)"
d="m -81.428568,-85.6007 c 0,3.155913 -9.593898,5.714285 -21.428572,5.714285 -11.83467,0 -21.42857,-2.558372 -21.42857,-5.714285 0,0 0,-10e-7 0,-10e-7"
sodipodi:ry="5.7142859"
sodipodi:rx="21.428572"
sodipodi:cy="-85.6007"
sodipodi:cx="-102.85714"
id="path2995"
style="opacity:0.98000003999999996;fill:none;stroke:#4e94f6;stroke-width:5.56557703000000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc"
sodipodi:start="0"
sodipodi:end="3.1415927" />
<path
transform="matrix(0.40303195,0.13307431,-0.1401187,0.42436676,70.613065,7.8421591)"
d="m -81.42857,-85.6007 c 0,21.6969 -9.114203,39.285713 -20.35714,39.285713 -11.24294,0 -20.35715,-17.588813 -20.35715,-39.285713 0,-21.6969 9.11421,-39.28571 20.35715,-39.28571 11.242937,0 20.35714,17.58881 20.35714,39.28571 z"
sodipodi:ry="39.285713"
sodipodi:rx="20.357143"
sodipodi:cy="-85.6007"
sodipodi:cx="-101.78571"
id="path2997"
style="opacity:0.98000003999999996;fill:none;stroke:#4e94f6;stroke-width:5.30381202999999960;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc" />
<path
sodipodi:open="true"
sodipodi:end="3.1415927"
sodipodi:start="0"
sodipodi:type="arc"
style="opacity:0.98000003999999996;fill:none;stroke:#4e94f6;stroke-width:5.32037735000000020;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="path3791"
sodipodi:cx="-101.07143"
sodipodi:cy="-85.243561"
sodipodi:rx="49.642857"
sodipodi:ry="11.785714"
d="m -51.42857,-85.243561 c 0,6.50907 -22.225864,11.785714 -49.64286,11.785714 -27.41699,0 -49.64285,-5.276644 -49.64285,-11.785714 0,0 0,0 0,0"
transform="matrix(0.4005261,0.13224692,-0.1401187,0.42436676,70.121957,7.5119225)" />
</g>
<g
id="symbol-Manual"
inkscape:label="#g3891"
transform="matrix(1.2181818,0,0,1.2181818,-114.36834,91.421566)">
<g
transform="matrix(1.6946172,0,0,1.6946172,-96.936102,27.05926)"
inkscape:label="#g4504"
id="g3846">
<path
transform="matrix(1.3565115,0,0,1.3564842,148.6163,-105.84566)"
style="opacity:0.53012049;color:#000000;fill:url(#radialGradient3856);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter5296-2);enable-background:accumulate"
sodipodi:type="arc"
sodipodi:ry="2.9375"
sodipodi:rx="10"
sodipodi:cy="26.6875"
sodipodi:cx="14.5"
id="path3848"
d="m 24.5,26.6875 a 10,2.9375 0 1 1 -20,0 10,2.9375 0 1 1 20,0 z" />
<path
transform="matrix(0.8476709,0,0,0.8476539,155.99448,-91.479567)"
style="opacity:0.80120479;color:#000000;fill:url(#radialGradient3858);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter5296-2);enable-background:accumulate"
sodipodi:type="arc"
sodipodi:ry="2.9375"
sodipodi:rx="10"
sodipodi:cy="26.6875"
sodipodi:cx="14.5"
id="path3850"
d="m 24.5,26.6875 a 10,2.9375 0 1 1 -20,0 10,2.9375 0 1 1 20,0 z" />
<path
transform="matrix(0.4552142,0,0,0.4578395,154.92379,-94.080092)"
style="fill:url(#radialGradient3860);fill-opacity:1;fill-rule:evenodd;stroke:#d4d0d0;stroke-width:2.19046068;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
sodipodi:type="arc"
sodipodi:ry="29.010935"
sodipodi:rx="29.010935"
sodipodi:cy="29.207693"
sodipodi:cx="29.392656"
id="path3852"
d="m 58.403591,29.207693 a 29.010935,29.010935 0 1 1 -58.0218695,0 29.010935,29.010935 0 1 1 58.0218695,0 z" />
<path
transform="matrix(0.5041973,0,0,0.5044661,153.2742,-96.019639)"
style="fill:none;stroke:url(#radialGradient3862);stroke-width:1.98282218;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc"
sodipodi:ry="24.175779"
sodipodi:rx="24.175779"
sodipodi:cy="30.352861"
sodipodi:cx="29.77438"
id="path3854"
d="m 53.950159,30.352861 a 24.175779,24.175779 0 1 1 -48.3515586,0 24.175779,24.175779 0 1 1 48.3515586,0 z" />
</g>
<g
transform="matrix(0.72825401,0,0,0.72825401,0.26819761,-37.594811)"
id="g3882"
style="stroke-width:2.7462945;stroke-miterlimit:4;stroke-dasharray:none">
<path
id="path3864"
d="m 263.57143,-113.1007 c 0,3.35316 -2.55837,6.07143 -5.71428,6.07143 -3.15592,0 -5.71429,-2.71827 -5.71429,-6.07143 0,-3.35316 2.55837,-6.07143 5.71429,-6.07143 3.15591,0 5.71428,2.71827 5.71428,6.07143 z"
style="opacity:0.98000004;fill:none;stroke:#ff4e34;stroke-width:2.7462945;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#ff4e34;stroke-width:2.7462945;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 257.85715,-106.32128 0,16.203659"
id="path3872"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#ff4e34;stroke-width:2.7462945;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 249.76021,-82.544001 7.95495,-7.954951"
id="path3874"
inkscape:connector-curvature="0" />
<path
id="path3876"
d="m 265.71516,-82.544001 -7.95495,-7.954951"
style="fill:none;stroke:#ff4e34;stroke-width:2.7462945;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#ff4e34;stroke-width:2.7462945;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 257.85715,-98.624972 8.92824,-2.711038"
id="path3878"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<path
id="path3880"
d="m 257.89812,-98.637413 -8.62061,-2.698597"
style="fill:none;stroke:#ff4e34;stroke-width:2.7462945;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
</g>
</g>
<g
id="symbol-VelocityControl"
inkscape:label="#g4229"
transform="matrix(1.2181818,0,0,1.2181818,-132.92733,94.550987)">
<g
transform="matrix(1.6946172,0,0,1.6946172,-11.87408,24.490332)"
inkscape:label="#g4504"
id="g3905">
<path
transform="matrix(1.3565115,0,0,1.3564842,148.6163,-105.84566)"
style="opacity:0.53012049;color:#000000;fill:url(#radialGradient4237);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter5296-2);enable-background:accumulate"
sodipodi:type="arc"
sodipodi:ry="2.9375"
sodipodi:rx="10"
sodipodi:cy="26.6875"
sodipodi:cx="14.5"
id="path3907"
d="m 24.5,26.6875 a 10,2.9375 0 1 1 -20,0 10,2.9375 0 1 1 20,0 z" />
<path
transform="matrix(0.8476709,0,0,0.8476539,155.99448,-91.479567)"
style="opacity:0.80120479;color:#000000;fill:url(#radialGradient4239);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter5296-2);enable-background:accumulate"
sodipodi:type="arc"
sodipodi:ry="2.9375"
sodipodi:rx="10"
sodipodi:cy="26.6875"
sodipodi:cx="14.5"
id="path3909"
d="m 24.5,26.6875 a 10,2.9375 0 1 1 -20,0 10,2.9375 0 1 1 20,0 z" />
<path
transform="matrix(0.4552142,0,0,0.4578395,154.92379,-94.080092)"
style="fill:url(#radialGradient4241);fill-opacity:1;fill-rule:evenodd;stroke:#d4d0d0;stroke-width:2.19046068;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
sodipodi:type="arc"
sodipodi:ry="29.010935"
sodipodi:rx="29.010935"
sodipodi:cy="29.207693"
sodipodi:cx="29.392656"
id="path3911"
d="m 58.403591,29.207693 a 29.010935,29.010935 0 1 1 -58.0218695,0 29.010935,29.010935 0 1 1 58.0218695,0 z" />
<path
transform="matrix(0.5041973,0,0,0.5044661,153.2742,-96.019639)"
style="fill:none;stroke:url(#radialGradient4243);stroke-width:1.98282218;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc"
sodipodi:ry="24.175779"
sodipodi:rx="24.175779"
sodipodi:cy="30.352861"
sodipodi:cx="29.77438"
id="path3913"
d="m 53.950159,30.352861 a 24.175779,24.175779 0 1 1 -48.3515586,0 24.175779,24.175779 0 1 1 48.3515586,0 z" />
</g>
inkscape:label="#g4185">
<path
id="path34138-1-7"
style="fill:none;stroke:#ff4e34;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
d="m 273.30882,-128.36777 c 1.48829,2.45185 1.90489,5.20754 1.97538,8.2047 l 9.09496,8.66832 0.2675,3.29229 -9.52708,-5.12363 -0.32923,8.21016 3.60095,3.49806 -0.0617,2.798457 -4.03306,-2.304607 -0.90629,1.196568 -0.16982,1.66e-4 -0.90539,-1.193454 -4.03306,2.304606 -0.0617,-2.798456 3.60095,-3.49806 -0.32923,-8.21016 -9.52708,5.12363 0.2675,-3.29229 9.09497,-8.66832 c 0.0705,-2.99716 0.48708,-5.75285 1.97537,-8.2047"
sodipodi:nodetypes="cccccccccccccccccccc"
inkscape:export-filename="H:\Documents\Hobbies\W433\g9905.png"
inkscape:export-xdpi="103.61"
inkscape:export-ydpi="103.61"
inkscape:connector-curvature="0" />
inkscape:connector-curvature="0"
style="opacity:0.98000003999999996;fill:none;stroke:#4e94f6;stroke-width:3.08949876000000010;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
d="m 154.47291,-53.37562 c 0,3.57692 -3.03523,6.476584 -6.77936,6.476584 -3.74415,0 -6.77937,-2.899664 -6.77937,-6.476584 0,-3.576919 3.03522,-6.476582 6.77937,-6.476582 3.74413,0 6.77936,2.899663 6.77936,6.476582 z"
id="path3864" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
id="path3872"
d="m 147.69355,-46.143802 0,17.284947"
style="fill:none;stroke:#4e94f6;stroke-width:3.08949876000000010;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
inkscape:connector-curvature="0"
id="path3874"
d="m 138.08744,-20.77984 9.43766,-8.485793"
style="fill:none;stroke:#4e94f6;stroke-width:3.08949876000000010;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
inkscape:connector-curvature="0"
style="fill:none;stroke:#4e94f6;stroke-width:3.08949876000000010;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 157.0162,-20.77984 -9.43766,-8.485793"
id="path3876" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
id="path3878"
d="m 147.69355,-37.933911 10.59236,-2.891949"
style="fill:none;stroke:#4e94f6;stroke-width:3.08949876000000010;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
style="fill:none;stroke:#4e94f6;stroke-width:3.08949876000000010;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 147.74216,-37.947183 -10.2274,-2.878677"
id="path3880" />
</g>
<g
transform="matrix(1.2181818,0,0,1.2181818,-488.7342,39.213763)"
inkscape:label="#g3832"
id="symbol-Stabilized2">
<g
style="display:inline"
id="g3173"
inkscape:label="#g4504"
transform="matrix(1.6946172,0,0,1.6946172,90.69312,69.91641)">
<path
d="m 24.5,26.6875 a 10,2.9375 0 1 1 -20,0 10,2.9375 0 1 1 20,0 z"
id="path3175"
sodipodi:cx="14.5"
sodipodi:cy="26.6875"
sodipodi:rx="10"
sodipodi:ry="2.9375"
sodipodi:type="arc"
style="opacity:0.53012049;color:#000000;fill:url(#radialGradient3197);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter5296-2);enable-background:accumulate"
transform="matrix(1.3565115,0,0,1.3564842,148.6163,-105.84566)" />
<path
d="m 24.5,26.6875 a 10,2.9375 0 1 1 -20,0 10,2.9375 0 1 1 20,0 z"
id="path3177"
sodipodi:cx="14.5"
sodipodi:cy="26.6875"
sodipodi:rx="10"
sodipodi:ry="2.9375"
sodipodi:type="arc"
style="opacity:0.80120479;color:#000000;fill:url(#radialGradient3199);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter5296-2);enable-background:accumulate"
transform="matrix(0.8476709,0,0,0.8476539,155.99448,-91.479567)" />
<path
d="m 58.403591,29.207693 a 29.010935,29.010935 0 1 1 -58.0218695,0 29.010935,29.010935 0 1 1 58.0218695,0 z"
id="path3179"
sodipodi:cx="29.392656"
sodipodi:cy="29.207693"
sodipodi:rx="29.010935"
sodipodi:ry="29.010935"
sodipodi:type="arc"
style="fill:url(#radialGradient3201);fill-opacity:1;fill-rule:evenodd;stroke:#d4d0d0;stroke-width:2.19046068;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
transform="matrix(0.4552142,0,0,0.4578395,154.92379,-94.080092)" />
<path
d="m 53.950159,30.352861 a 24.175779,24.175779 0 1 1 -48.3515586,0 24.175779,24.175779 0 1 1 48.3515586,0 z"
id="path3181"
sodipodi:cx="29.77438"
sodipodi:cy="30.352861"
sodipodi:rx="24.175779"
sodipodi:ry="24.175779"
sodipodi:type="arc"
style="fill:none;stroke:url(#radialGradient3203);stroke-width:1.98282218;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
transform="matrix(0.5041973,0,0,0.5044661,153.2742,-96.019639)" />
</g>
<g
style="stroke-width:5.32037735;stroke-miterlimit:4;stroke-dasharray:none"
id="g3183"
transform="matrix(0.33832187,0,0,0.33832187,410.06766,-39.187259)">
<path
sodipodi:open="true"
sodipodi:type="arc"
style="opacity:0.98000004;fill:none;stroke:#ff4e34;stroke-width:5.56557703;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
id="path3185"
sodipodi:cx="-102.85714"
sodipodi:cy="-85.6007"
sodipodi:rx="21.428572"
sodipodi:ry="5.7142859"
d="m -124.28571,-85.600701 a 21.428572,5.7142859 0 0 1 42.857142,10e-7"
transform="matrix(0.9559435,0,0,0.9559435,-2.74581,-3.77127)"
sodipodi:start="3.1415927"
sodipodi:end="6.2831853" />
<path
transform="translate(0,-0.35714)"
d="m -51.42857,-85.243561 a 49.642857,11.785714 0 1 1 -99.28571,0 49.642857,11.785714 0 1 1 99.28571,0 z"
sodipodi:ry="11.785714"
sodipodi:rx="49.642857"
sodipodi:cy="-85.243561"
sodipodi:cx="-101.07143"
id="path3187"
style="opacity:0.98000004;fill:none;stroke:#ff4e34;stroke-width:5.32037735;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
sodipodi:type="arc" />
<path
id="path3189"
d="m -101.07143,-37.895278 0,-96.382562"
style="fill:none;stroke:#ff4e34;stroke-width:5.32037735;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
inkscape:connector-curvature="0" />
<path
sodipodi:open="true"
transform="matrix(0.9559435,0,0,0.9559435,-2.7458124,-3.7712673)"
d="m -81.428568,-85.6007 a 21.428572,5.7142859 0 1 1 -42.857142,-10e-7"
sodipodi:ry="5.7142859"
sodipodi:rx="21.428572"
sodipodi:cy="-85.6007"
sodipodi:cx="-102.85714"
id="path3191"
style="opacity:0.98000004;fill:none;stroke:#ff4e34;stroke-width:5.56557703;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc"
sodipodi:start="0"
sodipodi:end="3.1415927" />
<path
transform="matrix(1.0062564,0,0,1,1.3510971,0)"
d="m -81.42857,-85.6007 a 20.357143,39.285713 0 1 1 -40.71429,0 20.357143,39.285713 0 1 1 40.71429,0 z"
sodipodi:ry="39.285713"
sodipodi:rx="20.357143"
sodipodi:cy="-85.6007"
sodipodi:cx="-101.78571"
id="path3193"
style="opacity:0.98000004;fill:none;stroke:#ff4e34;stroke-width:5.30381203;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc" />
<path
sodipodi:open="true"
sodipodi:end="3.1415927"
sodipodi:start="0"
sodipodi:type="arc"
style="opacity:0.98000004;fill:none;stroke:#ff4e34;stroke-width:5.32037735;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="path3195"
sodipodi:cx="-101.07143"
sodipodi:cy="-85.243561"
sodipodi:rx="49.642857"
sodipodi:ry="11.785714"
d="m -51.42857,-85.243561 a 49.642857,11.785714 0 1 1 -99.28571,0"
transform="translate(0,-0.35713959)" />
</g>
style="display:inline"
id="symbol-Stabilized2"
inkscape:label="#g4061"
transform="matrix(1.0119788,0,0,1.0116202,22.52404,2.193386)">
<path
sodipodi:open="true"
sodipodi:type="arc"
style="opacity:0.98000003999999996;fill:none;stroke:#4e94f6;stroke-width:5.56557703000000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
id="path3782-1"
sodipodi:cx="-102.85714"
sodipodi:cy="-85.6007"
sodipodi:rx="21.428572"
sodipodi:ry="5.7142859"
d="m -124.28571,-85.600701 c 0,-3.155913 9.5939,-5.714285 21.42857,-5.714285 11.834674,0 21.428572,2.558373 21.428572,5.714286"
transform="matrix(0.38288032,0.12642058,-0.13394556,0.40567065,69.500572,5.6999542)"
sodipodi:start="3.1415927"
sodipodi:end="6.2831853" />
<path
transform="matrix(0.4005261,0.13224692,-0.1401187,0.42436676,70.121957,7.5119224)"
d="m -51.42857,-85.243561 c 0,6.50907 -22.225864,11.785714 -49.64286,11.785714 -27.41699,0 -49.64285,-5.276644 -49.64285,-11.785714 0,-6.50907 22.22586,-11.785714 49.64285,-11.785714 27.416996,0 49.64286,5.276644 49.64286,11.785714 z"
sodipodi:ry="11.785714"
sodipodi:rx="49.642857"
sodipodi:cy="-85.243561"
sodipodi:cx="-101.07143"
id="path2993-8"
style="opacity:0.98000003999999996;fill:none;stroke:#4e94f6;stroke-width:5.32037735000000020;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
sodipodi:type="arc" />
<path
inkscape:connector-curvature="0"
id="path2991-9"
d="m 34.900006,-21.784401 13.505,-40.901556"
style="fill:none;stroke:#4e94f6;stroke-width:2.30992769999999980;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:open="true"
transform="matrix(0.38288032,0.12642058,-0.13394556,0.40567065,69.500571,5.699955)"
d="m -81.428568,-85.6007 c 0,3.155913 -9.593898,5.714285 -21.428572,5.714285 -11.83467,0 -21.42857,-2.558372 -21.42857,-5.714285 0,0 0,-10e-7 0,-10e-7"
sodipodi:ry="5.7142859"
sodipodi:rx="21.428572"
sodipodi:cy="-85.6007"
sodipodi:cx="-102.85714"
id="path2995-2"
style="opacity:0.98000003999999996;fill:none;stroke:#4e94f6;stroke-width:5.56557703000000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc"
sodipodi:start="0"
sodipodi:end="3.1415927" />
<path
transform="matrix(0.40303195,0.13307431,-0.1401187,0.42436676,70.613065,7.8421591)"
d="m -81.42857,-85.6007 c 0,21.6969 -9.114203,39.285713 -20.35714,39.285713 -11.24294,0 -20.35715,-17.588813 -20.35715,-39.285713 0,-21.6969 9.11421,-39.28571 20.35715,-39.28571 11.242937,0 20.35714,17.58881 20.35714,39.28571 z"
sodipodi:ry="39.285713"
sodipodi:rx="20.357143"
sodipodi:cy="-85.6007"
sodipodi:cx="-101.78571"
id="path2997-7"
style="opacity:0.98000003999999996;fill:none;stroke:#4e94f6;stroke-width:5.30381202999999960;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc" />
<path
sodipodi:open="true"
sodipodi:end="3.1415927"
sodipodi:start="0"
sodipodi:type="arc"
style="opacity:0.98000003999999996;fill:none;stroke:#4e94f6;stroke-width:5.32037735000000020;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="path3791-9"
sodipodi:cx="-101.07143"
sodipodi:cy="-85.243561"
sodipodi:rx="49.642857"
sodipodi:ry="11.785714"
d="m -51.42857,-85.243561 c 0,6.50907 -22.225864,11.785714 -49.64286,11.785714 -27.41699,0 -49.64285,-5.276644 -49.64285,-11.785714 0,0 0,0 0,0"
transform="matrix(0.4005261,0.13224692,-0.1401187,0.42436676,70.121957,7.5119225)" />
</g>
<g
style="display:inline"
id="symbol-Stabilized3"
inkscape:label="#g3832"
transform="matrix(1.2181818,0,0,1.2181818,-488.7342,-34.786237)">
<g
transform="matrix(1.6946172,0,0,1.6946172,90.69312,69.91641)"
inkscape:label="#g4504"
id="g3207"
style="display:inline">
<path
transform="matrix(1.3565115,0,0,1.3564842,148.6163,-105.84566)"
style="opacity:0.53012049;color:#000000;fill:url(#radialGradient3231);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter5296-2);enable-background:accumulate"
sodipodi:type="arc"
sodipodi:ry="2.9375"
sodipodi:rx="10"
sodipodi:cy="26.6875"
sodipodi:cx="14.5"
id="path3209"
d="m 24.5,26.6875 a 10,2.9375 0 1 1 -20,0 10,2.9375 0 1 1 20,0 z" />
<path
transform="matrix(0.8476709,0,0,0.8476539,155.99448,-91.479567)"
style="opacity:0.80120479;color:#000000;fill:url(#radialGradient3233);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter5296-2);enable-background:accumulate"
sodipodi:type="arc"
sodipodi:ry="2.9375"
sodipodi:rx="10"
sodipodi:cy="26.6875"
sodipodi:cx="14.5"
id="path3211"
d="m 24.5,26.6875 a 10,2.9375 0 1 1 -20,0 10,2.9375 0 1 1 20,0 z" />
<path
transform="matrix(0.4552142,0,0,0.4578395,154.92379,-94.080092)"
style="fill:url(#radialGradient3235);fill-opacity:1;fill-rule:evenodd;stroke:#d4d0d0;stroke-width:2.19046068;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
sodipodi:type="arc"
sodipodi:ry="29.010935"
sodipodi:rx="29.010935"
sodipodi:cy="29.207693"
sodipodi:cx="29.392656"
id="path3213"
d="m 58.403591,29.207693 a 29.010935,29.010935 0 1 1 -58.0218695,0 29.010935,29.010935 0 1 1 58.0218695,0 z" />
<path
transform="matrix(0.5041973,0,0,0.5044661,153.2742,-96.019639)"
style="fill:none;stroke:url(#radialGradient3237);stroke-width:1.98282218;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc"
sodipodi:ry="24.175779"
sodipodi:rx="24.175779"
sodipodi:cy="30.352861"
sodipodi:cx="29.77438"
id="path3215"
d="m 53.950159,30.352861 a 24.175779,24.175779 0 1 1 -48.3515586,0 24.175779,24.175779 0 1 1 48.3515586,0 z" />
</g>
<g
transform="matrix(0.33832187,0,0,0.33832187,410.06766,-39.187259)"
id="g3217"
style="stroke-width:5.32037735;stroke-miterlimit:4;stroke-dasharray:none">
<path
sodipodi:end="6.2831853"
sodipodi:start="3.1415927"
transform="matrix(0.9559435,0,0,0.9559435,-2.74581,-3.77127)"
d="m -124.28571,-85.600701 a 21.428572,5.7142859 0 0 1 42.857142,10e-7"
sodipodi:ry="5.7142859"
sodipodi:rx="21.428572"
sodipodi:cy="-85.6007"
sodipodi:cx="-102.85714"
id="path3219"
style="opacity:0.98000004;fill:none;stroke:#ff4e34;stroke-width:5.56557703;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
sodipodi:type="arc"
sodipodi:open="true" />
<path
sodipodi:type="arc"
style="opacity:0.98000004;fill:none;stroke:#ff4e34;stroke-width:5.32037735;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
id="path3221"
sodipodi:cx="-101.07143"
sodipodi:cy="-85.243561"
sodipodi:rx="49.642857"
sodipodi:ry="11.785714"
d="m -51.42857,-85.243561 a 49.642857,11.785714 0 1 1 -99.28571,0 49.642857,11.785714 0 1 1 99.28571,0 z"
transform="translate(0,-0.35714)" />
<path
inkscape:connector-curvature="0"
style="fill:none;stroke:#ff4e34;stroke-width:5.32037735;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m -101.07143,-37.895278 0,-96.382562"
id="path3223" />
<path
sodipodi:end="3.1415927"
sodipodi:start="0"
sodipodi:type="arc"
style="opacity:0.98000004;fill:none;stroke:#ff4e34;stroke-width:5.56557703;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="path3225"
sodipodi:cx="-102.85714"
sodipodi:cy="-85.6007"
sodipodi:rx="21.428572"
sodipodi:ry="5.7142859"
d="m -81.428568,-85.6007 a 21.428572,5.7142859 0 1 1 -42.857142,-10e-7"
transform="matrix(0.9559435,0,0,0.9559435,-2.7458124,-3.7712673)"
sodipodi:open="true" />
<path
sodipodi:type="arc"
style="opacity:0.98000004;fill:none;stroke:#ff4e34;stroke-width:5.30381203;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="path3227"
sodipodi:cx="-101.78571"
sodipodi:cy="-85.6007"
sodipodi:rx="20.357143"
sodipodi:ry="39.285713"
d="m -81.42857,-85.6007 a 20.357143,39.285713 0 1 1 -40.71429,0 20.357143,39.285713 0 1 1 40.71429,0 z"
transform="matrix(1.0062564,0,0,1,1.3510971,0)" />
<path
transform="translate(0,-0.35713959)"
d="m -51.42857,-85.243561 a 49.642857,11.785714 0 1 1 -99.28571,0"
sodipodi:ry="11.785714"
sodipodi:rx="49.642857"
sodipodi:cy="-85.243561"
sodipodi:cx="-101.07143"
id="path3229"
style="opacity:0.98000004;fill:none;stroke:#ff4e34;stroke-width:5.32037735;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc"
sodipodi:start="0"
sodipodi:end="3.1415927"
sodipodi:open="true" />
</g>
inkscape:label="#g4061"
transform="matrix(1.0119788,0,0,1.0116202,-26.204392,2.678157)">
<path
sodipodi:open="true"
sodipodi:type="arc"
style="opacity:0.98000003999999996;fill:none;stroke:#4e94f6;stroke-width:5.56557703000000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
id="path3782-1-4"
sodipodi:cx="-102.85714"
sodipodi:cy="-85.6007"
sodipodi:rx="21.428572"
sodipodi:ry="5.7142859"
d="m -124.28571,-85.600701 c 0,-3.155913 9.5939,-5.714285 21.42857,-5.714285 11.834674,0 21.428572,2.558373 21.428572,5.714286"
transform="matrix(0.38288032,0.12642058,-0.13394556,0.40567065,69.500572,5.6999542)"
sodipodi:start="3.1415927"
sodipodi:end="6.2831853" />
<path
transform="matrix(0.4005261,0.13224692,-0.1401187,0.42436676,70.121957,7.5119224)"
d="m -51.42857,-85.243561 c 0,6.50907 -22.225864,11.785714 -49.64286,11.785714 -27.41699,0 -49.64285,-5.276644 -49.64285,-11.785714 0,-6.50907 22.22586,-11.785714 49.64285,-11.785714 27.416996,0 49.64286,5.276644 49.64286,11.785714 z"
sodipodi:ry="11.785714"
sodipodi:rx="49.642857"
sodipodi:cy="-85.243561"
sodipodi:cx="-101.07143"
id="path2993-8-3"
style="opacity:0.98000003999999996;fill:none;stroke:#4e94f6;stroke-width:5.32037735000000020;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
sodipodi:type="arc" />
<path
inkscape:connector-curvature="0"
id="path2991-9-1"
d="m 34.900006,-21.784401 13.505,-40.901556"
style="fill:none;stroke:#4e94f6;stroke-width:2.30992769999999980;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:open="true"
transform="matrix(0.38288032,0.12642058,-0.13394556,0.40567065,69.500571,5.699955)"
d="m -81.428568,-85.6007 c 0,3.155913 -9.593898,5.714285 -21.428572,5.714285 -11.83467,0 -21.42857,-2.558372 -21.42857,-5.714285 0,0 0,-10e-7 0,-10e-7"
sodipodi:ry="5.7142859"
sodipodi:rx="21.428572"
sodipodi:cy="-85.6007"
sodipodi:cx="-102.85714"
id="path2995-2-2"
style="opacity:0.98000003999999996;fill:none;stroke:#4e94f6;stroke-width:5.56557703000000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc"
sodipodi:start="0"
sodipodi:end="3.1415927" />
<path
transform="matrix(0.40303195,0.13307431,-0.1401187,0.42436676,70.613065,7.8421591)"
d="m -81.42857,-85.6007 c 0,21.6969 -9.114203,39.285713 -20.35714,39.285713 -11.24294,0 -20.35715,-17.588813 -20.35715,-39.285713 0,-21.6969 9.11421,-39.28571 20.35715,-39.28571 11.242937,0 20.35714,17.58881 20.35714,39.28571 z"
sodipodi:ry="39.285713"
sodipodi:rx="20.357143"
sodipodi:cy="-85.6007"
sodipodi:cx="-101.78571"
id="path2997-7-3"
style="opacity:0.98000003999999996;fill:none;stroke:#4e94f6;stroke-width:5.30381202999999960;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc" />
<path
sodipodi:open="true"
sodipodi:end="3.1415927"
sodipodi:start="0"
sodipodi:type="arc"
style="opacity:0.98000003999999996;fill:none;stroke:#4e94f6;stroke-width:5.32037735000000020;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="path3791-9-3"
sodipodi:cx="-101.07143"
sodipodi:cy="-85.243561"
sodipodi:rx="49.642857"
sodipodi:ry="11.785714"
d="m -51.42857,-85.243561 c 0,6.50907 -22.225864,11.785714 -49.64286,11.785714 -27.41699,0 -49.64285,-5.276644 -49.64285,-11.785714 0,0 0,0 0,0"
transform="matrix(0.4005261,0.13224692,-0.1401187,0.42436676,70.121957,7.5119225)" />
</g>
<path
inkscape:export-ydpi="122.68"
inkscape:export-xdpi="122.68"
inkscape:export-filename="C:\Documents and Settings\t12\My Documents\My Dropbox\graphicswork\openpilot.org\textplay.png"
inkscape:transform-center-y="-3.0986891"
style="fill:#4e94f6;fill-opacity:1;stroke:none;display:inline"
d="m 211.45013,-36.318302 -3.1248,-1.76954 2.7441,-10.131079 -6.94336,-3.792624 -15.31831,6.502526 -21.12817,-5.590136 18.78561,12.727429 7.34855,17.594331 9.5215,3.120718 2.99251,-11.250239 2.95115,0.467429 2.17122,-7.878815 z"
id="symbol-PositionHold"
sodipodi:nodetypes="cccccccccccc"
inkscape:connector-curvature="0"
inkscape:label="#path3565" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 69 KiB

After

Width:  |  Height:  |  Size: 50 KiB

View File

@ -14,7 +14,7 @@
height="80.827866"
id="svg10068"
version="1.1"
inkscape:version="0.48.2 r9819"
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="textonly.svg"
inkscape:export-filename="H:\Documents\Hobbies\W433\My Gauges\vbat-001.png"
inkscape:export-xdpi="103.61"
@ -1012,50 +1012,6 @@
id="linearGradient3561"
xlink:href="#linearGradient3790-4-8"
inkscape:collect="always" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3285-6-3-7"
id="linearGradient4128-2-1"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-313.07707,-140.80709)"
x1="295.07001"
y1="573.90204"
x2="295.65781"
y2="418.138" />
<linearGradient
id="linearGradient3285-6-3-7"
inkscape:collect="always">
<stop
id="stop3287-9-8-4"
offset="0"
style="stop-color:#333333;stop-opacity:1" />
<stop
id="stop3289-8-2-0"
offset="1"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3259-9-2-4"
id="linearGradient4130-6-9"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-313.07707,-140.80709)"
x1="311.52808"
y1="572.13867"
x2="310.94031"
y2="526.29114" />
<linearGradient
inkscape:collect="always"
id="linearGradient3259-9-2-4">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop3261-8-7-8" />
<stop
style="stop-color:#000000;stop-opacity:0;"
offset="1"
id="stop3263-3-5-8" />
</linearGradient>
<linearGradient
y2="506.89417"
x2="300.36011"
@ -1079,15 +1035,104 @@
id="stop3794-2-7-5" />
</linearGradient>
<linearGradient
y2="506.89417"
x2="300.36011"
y1="368.20679"
x1="298.43829"
gradientTransform="translate(-313.07707,-140.80709)"
id="linearGradient3755">
<stop
style="stop-color:#232323;stop-opacity:1;"
offset="0"
id="stop3757" />
<stop
style="stop-color:#555555;stop-opacity:1;"
offset="1"
id="stop3759" />
</linearGradient>
<linearGradient
y2="529.75507"
x2="394.48703"
y1="832.61218"
x1="393.51294"
gradientTransform="matrix(0.31025181,0,0,0.29604738,51.62655,372.04954)"
gradientUnits="userSpaceOnUse"
id="linearGradient3489"
xlink:href="#linearGradient3790-4-8-4"
id="linearGradient4183"
xlink:href="#linearGradient3755-1"
inkscape:collect="always" />
<linearGradient
id="linearGradient3755-1">
<stop
style="stop-color:#1e1e1e;stop-opacity:1;"
offset="0"
id="stop3757-3" />
<stop
style="stop-color:#4d4d4d;stop-opacity:1;"
offset="1"
id="stop3759-6" />
</linearGradient>
<filter
id="filter3777-0"
inkscape:label="filter3777"
inkscape:menu="Shadows and Glows"
inkscape:menu-tooltip="Adds a colorizable drop shadow inside"
color-interpolation-filters="sRGB">
<feGaussianBlur
id="feGaussianBlur3779-4"
stdDeviation="0.01"
result="result8" />
<feOffset
id="feOffset3781-3"
dx="0"
dy="2"
result="result11" />
<feComposite
id="feComposite3783-8"
in2="result11"
result="result6"
in="SourceGraphic"
operator="in" />
<feFlood
id="feFlood3785-2"
result="result10"
in="result6"
flood-opacity="1"
flood-color="rgb(160,155,155)" />
<feBlend
id="feBlend3787-0"
in2="result10"
mode="normal"
in="result6"
result="result12" />
<feComposite
id="feComposite3789-6"
in2="SourceGraphic"
result="result2"
operator="in" />
</filter>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3755"
id="linearGradient3207"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.25148615,0,0,0.25704058,112.31188,56.646157)"
x1="393.51294"
y1="832.61218"
x2="394.48703"
y2="529.75507" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3755-1"
id="linearGradient3209"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.31025181,0,0,0.29604738,51.62655,372.04954)"
x1="393.51294"
y1="832.61218"
x2="394.48703"
y2="529.75507" />
<filter
inkscape:collect="always"
id="filter4045">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="0.45575892"
id="feGaussianBlur4047" />
</filter>
</defs>
<sodipodi:namedview
id="base"
@ -1097,15 +1142,15 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.979899"
inkscape:cx="56.191298"
inkscape:cy="90.710362"
inkscape:cx="127.43811"
inkscape:cy="37.438784"
inkscape:document-units="px"
inkscape:current-layer="g4122"
inkscape:current-layer="g2932"
showgrid="false"
inkscape:window-width="1600"
inkscape:window-height="823"
inkscape:window-x="-9"
inkscape:window-y="-9"
inkscape:window-width="1440"
inkscape:window-height="838"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:object-paths="true"
showguides="true"
@ -1136,54 +1181,16 @@
id="g2932"
inkscape:groupmode="layer"
transform="translate(-205.8687,-331.45166)">
<g
<rect
style="fill:url(#linearGradient3209);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;filter:url(#filter4045)"
width="280.11307"
height="91.499794"
x="79.017357"
y="528.80811"
ry="10.434186"
id="background"
inkscape:label="#g8543">
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
x="30"
y="37.256439"
id="text2985"
transform="translate(205.8687,331.45166)"><tspan
sodipodi:role="line"
id="tspan2987"
x="30"
y="37.256439" /></text>
<g
style="display:inline"
id="g4122"
transform="matrix(0.78843192,0,0,0.71508023,322.16663,104.29215)">
<g
style="display:inline"
id="g4122-1"
transform="matrix(1.0055464,0,0,1.0121203,0.63869144,-5.2612169)">
<rect
ry="17.712246"
y="319.06393"
x="-147.32065"
height="111.67988"
width="289.19211"
id="rect2985"
style="fill:url(#linearGradient4128-2-1);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline" />
<path
inkscape:connector-curvature="0"
id="rect3814"
d="m -130.38957,321.09916 c -10.40328,0.13552 -16.79656,11.11379 -14.9375,20.75 0.24853,24.79185 -0.48485,49.65785 0.34375,74.40625 1.69659,9.71009 12.36903,14.16124 21.4375,12.5 83.37176,-0.12573 166.769249,0.25097 250.125,-0.1875 9.57786,-1.24954 15.0045,-11.39003 13.28125,-20.53125 -0.32065,-25.06939 0.63636,-50.246 -0.46875,-75.25 -1.99885,-8.70345 -11.6919,-13.22175 -20.28125,-11.71875 -83.166451,0.0209 -166.33459,-0.0417 -249.5,0.0312 z"
style="fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline" />
<path
inkscape:connector-curvature="0"
id="rect3755"
d="m -130.38957,321.09916 c -10.40328,0.13552 -16.79656,11.11379 -14.9375,20.75 0.24853,24.79185 -0.48485,49.65785 0.34375,74.40625 1.69659,9.71009 12.36903,14.16124 21.4375,12.5 83.37176,-0.12573 166.769248,0.25097 250.125,-0.1875 9.57786,-1.24954 15.0045,-11.39003 13.28125,-20.53125 -0.32065,-25.06939 0.63636,-50.246 -0.46875,-75.25 -1.99885,-8.70345 -11.6919,-13.22175 -20.28125,-11.71875 -83.166452,0.0209 -166.33459,-0.0417 -249.5,0.0312 z"
style="fill:url(#linearGradient4130-6-9);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline" />
<path
inkscape:connector-curvature="0"
id="rect3781"
d="m -129.60832,319.06791 c -9.81258,0 -17.71875,7.90617 -17.71875,17.71875 l 0,7.46875 c 21.91332,13.37842 82.3034,23 153.4062474,23 56.8274986,0 106.8063826,-6.14199 135.7812526,-15.4375 l 0,-15.03125 c 0,-9.81258 -7.87492,-17.71875 -17.6875,-17.71875 l -253.78125,0 z"
style="fill:url(#linearGradient3489);fill-opacity:1;fill-rule:nonzero;stroke:none;display:inline" />
</g>
</g>
</g>
transform="matrix(0.81679353,0,0,0.88235114,141.83541,-134.83594)"
inkscape:label="#rect2985-5" />
</g>
<g
inkscape:groupmode="layer"

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 37 KiB

View File

@ -1,6 +1,5 @@
import Qt 4.7
import "."
import org.OpenPilot 1.0
Rectangle {
color: "#666666"
@ -22,46 +21,10 @@ Rectangle {
anchors.centerIn: parent
clip: true
OsgEarth {
id: earthView
Loader {
id: worldLoader
anchors.fill: parent
sceneFile: qmlWidget.earthFile
visible: qmlWidget.terrainEnabled
fieldOfView: 90
yaw: AttitudeActual.Yaw
pitch: AttitudeActual.Pitch
roll: AttitudeActual.Roll
latitude: qmlWidget.actualPositionUsed ?
GPSPosition.Latitude/10000000.0 : qmlWidget.latitude
longitude: qmlWidget.actualPositionUsed ?
GPSPosition.Longitude/10000000.0 : qmlWidget.longitude
altitude: qmlWidget.actualPositionUsed ?
GPSPosition.Altitude : qmlWidget.altitude
}
Image {
id: world
source: "image://svg/pfd.svg!world"
sourceSize: background.sourceSize
smooth: true
visible: !qmlWidget.terrainEnabled
transform: [
Translate {
id: pitchTranslate
x: (world.parent.width - world.width)/2
y: (world.parent.height - world.height)/2 + AttitudeActual.Pitch*world.parent.height/94
},
Rotation {
angle: -AttitudeActual.Roll
origin.x : world.parent.width/2
origin.y : world.parent.height/2
}
]
source: qmlWidget.terrainEnabled ? "PfdTerrainView.qml" : "PfdWorldView.qml"
}
Image {
@ -69,9 +32,13 @@ Rectangle {
source: "image://svg/pfd.svg!rollscale"
sourceSize: background.sourceSize
smooth: true
transformOrigin: Item.Center
rotation: -AttitudeActual.Roll
anchors.centerIn: parent
//rotate it around the center of scene
transform: Rotation {
angle: -AttitudeActual.Roll
origin.x : sceneItem.width/2 - x
origin.y : sceneItem.height/2 - y
}
}
Image {

View File

@ -0,0 +1,20 @@
import Qt 4.7
import org.OpenPilot 1.0
OsgEarth {
id: earthView
sceneFile: qmlWidget.earthFile
fieldOfView: 90
yaw: AttitudeActual.Yaw
pitch: AttitudeActual.Pitch
roll: AttitudeActual.Roll
latitude: qmlWidget.actualPositionUsed ?
GPSPosition.Latitude/10000000.0 : qmlWidget.latitude
longitude: qmlWidget.actualPositionUsed ?
GPSPosition.Longitude/10000000.0 : qmlWidget.longitude
altitude: qmlWidget.actualPositionUsed ?
GPSPosition.Altitude : qmlWidget.altitude
}

View File

@ -0,0 +1,29 @@
import Qt 4.7
Item {
//worldView should fill the source size of svg document
id: worldView
Image {
id: world
source: "image://svg/pfd.svg!world"
sourceSize.width: worldView.width
sourceSize.height: worldView.height
smooth: true
transform: [
Translate {
id: pitchTranslate
x: (world.parent.width - world.width)/2
y: (world.parent.height - world.height)/2 + AttitudeActual.Pitch*world.parent.height/94
},
Rotation {
angle: -AttitudeActual.Roll
origin.x : world.parent.width/2
origin.y : world.parent.height/2
}
]
}
}

View File

@ -14,7 +14,7 @@
height="707.56323"
id="svg2"
version="1.1"
inkscape:version="0.48.1 "
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="pfd.svg"
style="display:inline"
inkscape:export-filename="H:\Documents\Hobbies\OpenPilot\SVN\artwork\PFD-2.png"
@ -1616,13 +1616,13 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.73067675"
inkscape:cx="305.98471"
inkscape:cx="431.15187"
inkscape:cy="372.16908"
inkscape:document-units="px"
inkscape:current-layer="layer3"
showgrid="false"
inkscape:window-width="1366"
inkscape:window-height="706"
inkscape:window-width="1440"
inkscape:window-height="838"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
@ -1715,7 +1715,7 @@
inkscape:groupmode="layer"
id="layer1"
transform="translate(230.4171,-254.91153)"
style="display:inline"
style="display:none"
sodipodi:insensitive="true">
<g
id="world"
@ -2097,13 +2097,13 @@
id="speed-bg"
width="110.05586"
height="450"
x="-147.23766"
x="-209.23766"
y="131.33096" />
<path
inkscape:connector-curvature="0"
inkscape:label="#rect6927"
style="fill:#000000;fill-opacity:0.78431373;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
d="m -146.39854,337.78541 78.912168,0 0,9.3094 10.606602,9.3094 -10.606602,9.3094 0.08512,9.3094 -78.997288,0 0,-37.2376 z"
d="m -208.39854,337.78541 78.91217,0 0,9.3094 10.6066,9.3094 -10.6066,9.3094 0.0851,9.3094 -78.99729,0 0,-37.2376 z"
id="speed-window"
sodipodi:nodetypes="cccccccc" />
<g

Before

Width:  |  Height:  |  Size: 320 KiB

After

Width:  |  Height:  |  Size: 320 KiB

View File

@ -262,7 +262,9 @@ int main(int argc, char **argv)
rl.rlim_cur = rl.rlim_max;
setrlimit(RLIMIT_NOFILE, &rl);
#endif
#ifdef Q_OS_LINUX
QApplication::setAttribute(Qt::AA_X11InitThreads, true);
#endif
QApplication::setGraphicsSystem("raster");
SharedTools::QtSingleApplication app((QLatin1String(appNameC)), argc, argv);

View File

@ -0,0 +1 @@
MyListWidget {font-size: 11px;}

View File

@ -0,0 +1 @@
MyListWidget {font-size: 11px;}

View File

@ -0,0 +1 @@
MyListWidget {font-size: 11px;}

View File

@ -79,7 +79,9 @@ void MyTabbedStackWidget::insertTab(const int index, QWidget *tab, const QIcon &
void MyTabbedStackWidget::removeTab(int index)
{
m_stackWidget->removeWidget(m_stackWidget->widget(index));
QWidget * wid=m_stackWidget->widget(index);
m_stackWidget->removeWidget(wid);
delete wid;
QListWidgetItem *item = m_listWidget->item(index);
m_listWidget->removeItemWidget(item);
delete item;

View File

@ -158,7 +158,7 @@ namespace Utils {
{
double Lat = LLA[0];
double Lon = LLA[1];
double AltEllipsoid = LLA[2];
double AltEllipsoid = LLA[2]/1000.0; // convert to km
// ***********
// range check supplied params

View File

@ -6,14 +6,14 @@
<rect>
<x>0</x>
<y>0</y>
<width>833</width>
<height>852</height>
<width>862</width>
<height>598</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_12">
<layout class="QVBoxLayout" name="verticalLayout_10">
<item>
<widget class="QTabWidget" name="tabWidget">
<property name="currentIndex">
@ -24,9 +24,18 @@
<string>Mixer Settings</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_2" stretch="0">
<property name="margin">
<property name="leftMargin">
<number>12</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>12</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QScrollArea" name="scrollArea">
<property name="sizePolicy">
@ -119,12 +128,18 @@
<rect>
<x>0</x>
<y>0</y>
<width>779</width>
<height>691</height>
<width>808</width>
<height>491</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<layout class="QVBoxLayout" name="verticalLayout">
<property name="spacing">
<number>12</number>
</property>
<property name="margin">
<number>0</number>
</property>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="sizeConstraint">
<enum>QLayout::SetFixedSize</enum>
@ -173,20 +188,30 @@
</item>
</layout>
</item>
<item row="3" column="0">
<item>
<widget class="Line" name="line">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<widget class="QStackedWidget" name="airframesWidget">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>775</width>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="currentIndex">
<number>1</number>
</property>
@ -671,759 +696,748 @@ margin:1px;</string>
</layout>
</widget>
<widget class="QWidget" name="multiRotor">
<layout class="QVBoxLayout" name="verticalLayout_4" stretch="1">
<item>
<layout class="QVBoxLayout" name="verticalLayout_8" stretch="0,0,0">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_7" stretch="0,0">
<item>
<layout class="QVBoxLayout" name="verticalLayout_24">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_5">
<item>
<widget class="QLabel" name="label_15">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Frame type:</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="multirotorFrameType">
<property name="toolTip">
<string>Select the Multirotor frame type here.</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_5">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_22">
<item>
<layout class="QVBoxLayout" name="verticalLayout_20">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_25">
<item>
<widget class="QLabel" name="label_4">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Mix Level</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_17">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_19">
<item>
<layout class="QVBoxLayout" name="verticalLayout_22">
<item>
<widget class="QLabel" name="mrRollMixValue">
<property name="minimumSize">
<size>
<width>30</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>100</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QSlider" name="mrRollMixLevel">
<property name="minimumSize">
<size>
<width>35</width>
<height>0</height>
</size>
</property>
<property name="toolTip">
<string>Weight of Roll mixing in percent.
Typical values are 100% for + configuration and 50% for X configuration on quads.</string>
</property>
<property name="maximum">
<number>100</number>
</property>
<property name="value">
<number>100</number>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_42">
<property name="styleSheet">
<string notr="true">background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255));
color: rgb(255, 255, 255);
border-radius: 5;
font: bold 12px;
margin:1px;</string>
</property>
<property name="text">
<string>Roll</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_23">
<item>
<widget class="QLabel" name="mrPitchMixValue">
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>100</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QSlider" name="mrPitchMixLevel">
<property name="minimumSize">
<size>
<width>35</width>
<height>0</height>
</size>
</property>
<property name="toolTip">
<string>Weight of Pitch mixing in percent.
Typical values are 100% for + configuration and 50% for X configuration on quads.</string>
</property>
<property name="maximum">
<number>100</number>
</property>
<property name="value">
<number>100</number>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_40">
<property name="styleSheet">
<string notr="true">background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255));
color: rgb(255, 255, 255);
border-radius: 5;
font: bold 12px;
margin:1px;</string>
</property>
<property name="text">
<string>Pitch</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_21">
<item>
<widget class="QLabel" name="mrYawMixValue">
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>50</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QSlider" name="mrYawMixLevel">
<property name="minimumSize">
<size>
<width>40</width>
<height>0</height>
</size>
</property>
<property name="toolTip">
<string>Weight of Yaw mixing in percent.
Typical value is 50% for + or X configuration on quads.</string>
</property>
<property name="minimum">
<number>-100</number>
</property>
<property name="maximum">
<number>100</number>
</property>
<property name="value">
<number>50</number>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_6">
<property name="autoFillBackground">
<bool>false</bool>
</property>
<property name="styleSheet">
<string notr="true">background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255));
color: rgb(255, 255, 255);
border-radius: 5;
font: bold 12px;
margin:1px;</string>
</property>
<property name="text">
<string>Yaw</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
</layout>
</item>
<item>
<widget class="QGraphicsView" name="quadShape">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>80</width>
<height>80</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background:transparent</string>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Plain</enum>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
<item>
<widget class="QGroupBox" name="groupBox_6">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>300</width>
<height>300</height>
</size>
</property>
<property name="title">
<string>Throttle Curve</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_9">
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<widget class="QGroupBox" name="groupBox_10">
<property name="title">
<string>Frame Type</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_8" stretch="0,0,1,0">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_7">
<property name="sizeConstraint">
<enum>QLayout::SetFixedSize</enum>
</property>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>13</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QComboBox" name="multirotorFrameType">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>45</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>25</height>
</size>
</property>
<property name="toolTip">
<string>Select the Multirotor frame type here.</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_5">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>13</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<spacer name="verticalSpacer_6">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>8</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QGraphicsView" name="quadShape">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>120</width>
<height>120</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background:transparent</string>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Plain</enum>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer_7">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>8</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item row="0" column="1">
<widget class="QGroupBox" name="groupBox_9">
<property name="maximumSize">
<size>
<width>250</width>
<height>16777215</height>
</size>
</property>
<property name="title">
<string>Mix Level</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_5">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_19">
<item>
<layout class="QVBoxLayout" name="verticalLayout_22">
<item>
<widget class="MixerCurve" name="multiThrottleCurve" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
<widget class="QLabel" name="mrRollMixValue">
<property name="minimumSize">
<size>
<width>30</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>100</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QSlider" name="mrRollMixLevel">
<property name="minimumSize">
<size>
<width>35</width>
<height>0</height>
</size>
</property>
<property name="toolTip">
<string>Weight of Roll mixing in percent.
Typical values are 100% for + configuration and 50% for X configuration on quads.</string>
</property>
<property name="maximum">
<number>100</number>
</property>
<property name="value">
<number>100</number>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_42">
<property name="styleSheet">
<string notr="true">background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255));
color: rgb(255, 255, 255);
border-radius: 5;
font: bold 12px;
margin:1px;</string>
</property>
<property name="text">
<string>Roll</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_23">
<item>
<widget class="QLabel" name="mrPitchMixValue">
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="sizeIncrement">
<property name="text">
<string>100</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QSlider" name="mrPitchMixLevel">
<property name="minimumSize">
<size>
<width>10</width>
<height>10</height>
<width>35</width>
<height>0</height>
</size>
</property>
<property name="baseSize">
<size>
<width>300</width>
<height>350</height>
</size>
<property name="toolTip">
<string>Weight of Pitch mixing in percent.
Typical values are 100% for + configuration and 50% for X configuration on quads.</string>
</property>
<property name="maximum">
<number>100</number>
</property>
<property name="value">
<number>100</number>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_40">
<property name="styleSheet">
<string notr="true">background:transparent</string>
<string notr="true">background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255));
color: rgb(255, 255, 255);
border-radius: 5;
font: bold 12px;
margin:1px;</string>
</property>
<property name="text">
<string>Pitch</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_6" stretch="1,0,3">
<property name="spacing">
<number>10</number>
</property>
<item>
<layout class="QVBoxLayout" name="verticalLayout_10">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_26">
<item>
<widget class="QLabel" name="label_23">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Tricopter Yaw</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_18">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Preferred</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<widget class="QLabel" name="label_2">
<property name="styleSheet">
<string notr="true">background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255));
color: rgb(255, 255, 255);
border-radius: 5;
font: bold 12px;
margin:1px;</string>
</property>
<property name="text">
<string>channel:</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="triYawChannelBox">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>40</width>
<height>0</height>
</size>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer_4">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<spacer name="horizontalSpacer_9">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>10</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Motor output channels</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_10">
<property name="spacing">
<number>1</number>
</property>
<property name="margin">
<number>1</number>
</property>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_21">
<item>
<layout class="QFormLayout" name="formLayout_2">
<property name="sizeConstraint">
<enum>QLayout::SetMaximumSize</enum>
<widget class="QLabel" name="mrYawMixValue">
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="fieldGrowthPolicy">
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
<property name="text">
<string>50</string>
</property>
<property name="verticalSpacing">
<number>3</number>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<item row="1" column="0">
<widget class="QLabel" name="MotorOutputLabel1">
<property name="styleSheet">
<string notr="true">background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255));
color: rgb(255, 255, 255);
border-radius: 5;
font: bold 12px;
margin:1px;</string>
</property>
<property name="text">
<string>1</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="multiMotorChannelBox1">
<property name="toolTip">
<string>Assign your motor output channels using the drawing above as a reference. Respect propeller rotation.</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_8">
<property name="styleSheet">
<string notr="true">background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255));
color: rgb(255, 255, 255);
border-radius: 5;
font: bold 12px;
margin:1px;</string>
</property>
<property name="text">
<string>2</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QComboBox" name="multiMotorChannelBox2">
<property name="toolTip">
<string>Assign your motor output channels using the drawing above as a reference. Respect propeller rotation.</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_9">
<property name="styleSheet">
<string notr="true">background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255));
color: rgb(255, 255, 255);
border-radius: 5;
font: bold 12px;
margin:1px;</string>
</property>
<property name="text">
<string>3</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QComboBox" name="multiMotorChannelBox3">
<property name="toolTip">
<string>Assign your motor output channels using the drawing above as a reference. Respect propeller rotation.</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_10">
<property name="styleSheet">
<string notr="true">background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255));
color: rgb(255, 255, 255);
border-radius: 5;
font: bold 12px;
margin:1px;</string>
</property>
<property name="text">
<string>4</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QComboBox" name="multiMotorChannelBox4">
<property name="toolTip">
<string>Assign your motor output channels using the drawing above as a reference. Respect propeller rotation.</string>
</property>
</widget>
</item>
<item row="0" column="1">
<spacer name="verticalSpacer_8">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>0</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item>
<layout class="QFormLayout" name="formLayout_4">
<property name="sizeConstraint">
<enum>QLayout::SetMaximumSize</enum>
<widget class="QSlider" name="mrYawMixLevel">
<property name="minimumSize">
<size>
<width>40</width>
<height>0</height>
</size>
</property>
<property name="fieldGrowthPolicy">
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
<property name="toolTip">
<string>Weight of Yaw mixing in percent.
Typical value is 50% for + or X configuration on quads.</string>
</property>
<property name="verticalSpacing">
<number>3</number>
<property name="minimum">
<number>-100</number>
</property>
<item row="1" column="0">
<widget class="QLabel" name="label_11">
<property name="styleSheet">
<string notr="true">background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255));
<property name="maximum">
<number>100</number>
</property>
<property name="value">
<number>50</number>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_6">
<property name="autoFillBackground">
<bool>false</bool>
</property>
<property name="styleSheet">
<string notr="true">background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255));
color: rgb(255, 255, 255);
border-radius: 5;
font: bold 12px;
margin:1px;</string>
</property>
<property name="text">
<string>5</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="multiMotorChannelBox5">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>Assign your motor output channels using the drawing above as a reference. Respect propeller rotation.</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_12">
<property name="styleSheet">
<string notr="true">background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255));
color: rgb(255, 255, 255);
border-radius: 5;
font: bold 12px;
margin:1px;</string>
</property>
<property name="text">
<string>6</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QComboBox" name="multiMotorChannelBox6">
<property name="enabled">
<bool>false</bool>
</property>
<property name="toolTip">
<string>Assign your motor output channels using the drawing above as a reference. Respect propeller rotation.</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_16">
<property name="styleSheet">
<string notr="true">background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255));
color: rgb(255, 255, 255);
border-radius: 5;
font: bold 12px;
margin:1px;</string>
</property>
<property name="text">
<string>7</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QComboBox" name="multiMotorChannelBox7">
<property name="enabled">
<bool>false</bool>
</property>
<property name="toolTip">
<string>Assign your motor output channels using the drawing above as a reference. Respect propeller rotation.</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_17">
<property name="styleSheet">
<string notr="true">background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255));
color: rgb(255, 255, 255);
border-radius: 5;
font: bold 12px;
margin:1px;</string>
</property>
<property name="text">
<string>8</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QComboBox" name="multiMotorChannelBox8">
<property name="enabled">
<bool>false</bool>
</property>
<property name="toolTip">
<string>Assign your motor output channels using the drawing above as a reference. Respect propeller rotation.</string>
</property>
</widget>
</item>
<item row="0" column="1">
<spacer name="verticalSpacer_9">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</property>
<property name="text">
<string>Yaw</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item row="0" column="2">
<widget class="QGroupBox" name="groupBox_6">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>300</width>
<height>300</height>
</size>
</property>
<property name="title">
<string>Throttle Curve</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_9">
<item>
<widget class="MixerCurve" name="multiThrottleCurve" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="sizeIncrement">
<size>
<width>10</width>
<height>10</height>
</size>
</property>
<property name="baseSize">
<size>
<width>300</width>
<height>350</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background:transparent</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="1" column="0">
<widget class="QGroupBox" name="groupBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>124</height>
</size>
</property>
<property name="title">
<string>Motor output channels</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_10">
<property name="spacing">
<number>4</number>
</property>
<property name="leftMargin">
<number>1</number>
</property>
<property name="topMargin">
<number>1</number>
</property>
<property name="rightMargin">
<number>1</number>
</property>
<property name="bottomMargin">
<number>6</number>
</property>
<item>
<layout class="QFormLayout" name="formLayout_2">
<property name="sizeConstraint">
<enum>QLayout::SetMaximumSize</enum>
</property>
<property name="fieldGrowthPolicy">
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
</property>
<property name="verticalSpacing">
<number>3</number>
</property>
<item row="0" column="0">
<widget class="QLabel" name="MotorOutputLabel1">
<property name="styleSheet">
<string notr="true">background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255));
color: rgb(255, 255, 255);
border-radius: 5;
font: bold 12px;
margin:1px;</string>
</property>
<property name="text">
<string>1</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="multiMotorChannelBox1">
<property name="toolTip">
<string>Assign your motor output channels using the drawing above as a reference. Respect propeller rotation.</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_8">
<property name="styleSheet">
<string notr="true">background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255));
color: rgb(255, 255, 255);
border-radius: 5;
font: bold 12px;
margin:1px;</string>
</property>
<property name="text">
<string>2</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="multiMotorChannelBox2">
<property name="toolTip">
<string>Assign your motor output channels using the drawing above as a reference. Respect propeller rotation.</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_9">
<property name="styleSheet">
<string notr="true">background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255));
color: rgb(255, 255, 255);
border-radius: 5;
font: bold 12px;
margin:1px;</string>
</property>
<property name="text">
<string>3</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QComboBox" name="multiMotorChannelBox3">
<property name="toolTip">
<string>Assign your motor output channels using the drawing above as a reference. Respect propeller rotation.</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_10">
<property name="styleSheet">
<string notr="true">background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255));
color: rgb(255, 255, 255);
border-radius: 5;
font: bold 12px;
margin:1px;</string>
</property>
<property name="text">
<string>4</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QComboBox" name="multiMotorChannelBox4">
<property name="toolTip">
<string>Assign your motor output channels using the drawing above as a reference. Respect propeller rotation.</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QFormLayout" name="formLayout_4">
<property name="sizeConstraint">
<enum>QLayout::SetMaximumSize</enum>
</property>
<property name="fieldGrowthPolicy">
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
</property>
<property name="verticalSpacing">
<number>3</number>
</property>
<item row="0" column="0">
<widget class="QLabel" name="label_11">
<property name="styleSheet">
<string notr="true">background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255));
color: rgb(255, 255, 255);
border-radius: 5;
font: bold 12px;
margin:1px;</string>
</property>
<property name="text">
<string>5</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="multiMotorChannelBox5">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>Assign your motor output channels using the drawing above as a reference. Respect propeller rotation.</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_12">
<property name="styleSheet">
<string notr="true">background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255));
color: rgb(255, 255, 255);
border-radius: 5;
font: bold 12px;
margin:1px;</string>
</property>
<property name="text">
<string>6</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="multiMotorChannelBox6">
<property name="enabled">
<bool>false</bool>
</property>
<property name="toolTip">
<string>Assign your motor output channels using the drawing above as a reference. Respect propeller rotation.</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_16">
<property name="styleSheet">
<string notr="true">background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255));
color: rgb(255, 255, 255);
border-radius: 5;
font: bold 12px;
margin:1px;</string>
</property>
<property name="text">
<string>7</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QComboBox" name="multiMotorChannelBox7">
<property name="enabled">
<bool>false</bool>
</property>
<property name="toolTip">
<string>Assign your motor output channels using the drawing above as a reference. Respect propeller rotation.</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_17">
<property name="styleSheet">
<string notr="true">background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255));
color: rgb(255, 255, 255);
border-radius: 5;
font: bold 12px;
margin:1px;</string>
</property>
<property name="text">
<string>8</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QComboBox" name="multiMotorChannelBox8">
<property name="enabled">
<bool>false</bool>
</property>
<property name="toolTip">
<string>Assign your motor output channels using the drawing above as a reference. Respect propeller rotation.</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item row="1" column="1">
<widget class="QGroupBox" name="groupBox_11">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>124</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>250</width>
<height>16777215</height>
</size>
</property>
<property name="title">
<string>Tricopter Yaw</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<widget class="QLabel" name="label_2">
<property name="styleSheet">
<string notr="true">background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255));
color: rgb(255, 255, 255);
border-radius: 5;
font: bold 12px;
margin:1px;</string>
</property>
<property name="text">
<string>channel:</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="triYawChannelBox">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>40</width>
<height>0</height>
</size>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer_4">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item row="1" column="2">
<layout class="QHBoxLayout" name="horizontalLayout_6">
<item>
<spacer name="horizontalSpacer_6">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_20">
<item>
<spacer name="horizontalSpacer_12">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Expanding</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="mrStatusLabel">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Mixer OK</string>
</property>
</widget>
</item>
</layout>
<widget class="QLabel" name="mrStatusLabel">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Mixer OK</string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
</property>
</widget>
</item>
</layout>
</item>
@ -2625,42 +2639,6 @@ margin:1px;</string>
</widget>
</widget>
</item>
<item row="1" column="0">
<widget class="Line" name="line">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="0" column="1">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="3" column="1">
<spacer name="horizontalSpacer_6">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Expanding</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</widget>
@ -2755,8 +2733,8 @@ margin:1px;</string>
<rect>
<x>0</x>
<y>0</y>
<width>247</width>
<height>301</height>
<width>902</width>
<height>595</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_18">
@ -3101,90 +3079,98 @@ p, li { white-space: pre-wrap; }
<property name="minimumSize">
<size>
<width>0</width>
<height>75</height>
<height>45</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>45</height>
</size>
</property>
<property name="title">
<string/>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="spacing">
<number>4</number>
</property>
<property name="leftMargin">
<number>12</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="spacing">
<number>4</number>
<spacer name="horizontalSpacer_10">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeConstraint">
<enum>QLayout::SetFixedSize</enum>
<property name="sizeHint" stdset="0">
<size>
<width>607</width>
<height>13</height>
</size>
</property>
<item>
<spacer name="horizontalSpacer_10">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>10</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="airframeHelp">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>32</width>
<height>32</height>
</size>
</property>
<property name="toolTip">
<string>Takes you to the wiki page</string>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../coreplugin/core.qrc">
<normaloff>:/core/images/helpicon.svg</normaloff>:/core/images/helpicon.svg</iconset>
</property>
<property name="iconSize">
<size>
<width>32</width>
<height>32</height>
</size>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="saveAircraftToRAM">
<property name="toolTip">
<string>Send to board, but don't save permanently (flash or SD).</string>
</property>
<property name="text">
<string>Apply</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="saveAircraftToSD">
<property name="toolTip">
<string>Applies and Saves all settings to flash or SD depending on board.</string>
</property>
<property name="text">
<string>Save</string>
</property>
</widget>
</item>
</layout>
</spacer>
</item>
<item>
<widget class="QPushButton" name="airframeHelp">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>25</width>
<height>26</height>
</size>
</property>
<property name="toolTip">
<string>Takes you to the wiki page</string>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../coreplugin/core.qrc">
<normaloff>:/core/images/helpicon.svg</normaloff>:/core/images/helpicon.svg</iconset>
</property>
<property name="iconSize">
<size>
<width>25</width>
<height>25</height>
</size>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="saveAircraftToRAM">
<property name="toolTip">
<string>Send to board, but don't save permanently (flash or SD).</string>
</property>
<property name="text">
<string>Apply</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="saveAircraftToSD">
<property name="toolTip">
<string>Applies and Saves all settings to flash or SD depending on board.</string>
</property>
<property name="text">
<string>Save</string>
</property>
</widget>
</item>
</layout>
</widget>

View File

@ -10,13 +10,16 @@
<height>845</height>
</rect>
</property>
<property name="contextMenuPolicy">
<enum>Qt::DefaultContextMenu</enum>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<property name="autoFillBackground">
<bool>false</bool>
</property>
<layout class="QVBoxLayout" name="verticalLayout_6">
<layout class="QVBoxLayout" name="verticalLayout_6" stretch="0,0,0">
<property name="spacing">
<number>12</number>
</property>
@ -131,8 +134,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>792</width>
<height>677</height>
<width>790</width>
<height>678</height>
</rect>
</property>
<property name="autoFillBackground">
@ -918,136 +921,159 @@ value.</string>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="spacing">
<number>4</number>
<widget class="QGroupBox" name="groupBox_2">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>425</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="camerastabilizationHelp">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>32</width>
<height>32</height>
</size>
</property>
<property name="font">
<font>
<kerning>true</kerning>
</font>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../coreplugin/core.qrc">
<normaloff>:/core/images/helpicon.svg</normaloff>:/core/images/helpicon.svg</iconset>
</property>
<property name="iconSize">
<size>
<width>32</width>
<height>32</height>
</size>
</property>
<property name="shortcut">
<string>Ctrl+S</string>
</property>
<property name="default">
<bool>false</bool>
</property>
<property name="flat">
<bool>true</bool>
</property>
<property name="objrelation" stdset="0">
<stringlist>
<string>button:help</string>
<string>url:http://wiki.openpilot.org/x/cACrAQ</string>
</stringlist>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="camerastabilizationResetToDefaults">
<property name="minimumSize">
<size>
<width>140</width>
<height>28</height>
</size>
</property>
<property name="toolTip">
<string>Load default CameraStabilization settings except output channels
<property name="minimumSize">
<size>
<width>0</width>
<height>45</height>
</size>
</property>
<property name="title">
<string/>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="spacing">
<number>4</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>456</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="camerastabilizationHelp">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>32</width>
<height>26</height>
</size>
</property>
<property name="font">
<font>
<kerning>true</kerning>
</font>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../coreplugin/core.qrc">
<normaloff>:/core/images/helpicon.svg</normaloff>:/core/images/helpicon.svg</iconset>
</property>
<property name="iconSize">
<size>
<width>25</width>
<height>25</height>
</size>
</property>
<property name="shortcut">
<string>Ctrl+S</string>
</property>
<property name="default">
<bool>false</bool>
</property>
<property name="flat">
<bool>true</bool>
</property>
<property name="objrelation" stdset="0">
<stringlist>
<string>button:help</string>
<string>url:http://wiki.openpilot.org/x/cACrAQ</string>
</stringlist>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="camerastabilizationResetToDefaults">
<property name="minimumSize">
<size>
<width>140</width>
<height>16</height>
</size>
</property>
<property name="toolTip">
<string>Load default CameraStabilization settings except output channels
Loaded settings are not applied automatically. You have to click the
Apply or Save button afterwards.</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string>Reset To Defaults</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="camerastabilizationSaveRAM">
<property name="minimumSize">
<size>
<width>78</width>
<height>28</height>
</size>
</property>
<property name="toolTip">
<string>Send settings to the board but do not save to the non-volatile memory</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string>Apply</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="camerastabilizationSaveSD">
<property name="minimumSize">
<size>
<width>71</width>
<height>28</height>
</size>
</property>
<property name="toolTip">
<string>Send settings to the board and save to the non-volatile memory</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string>Save</string>
</property>
<property name="checked">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string>Reset To Defaults</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="camerastabilizationSaveRAM">
<property name="minimumSize">
<size>
<width>78</width>
<height>16</height>
</size>
</property>
<property name="toolTip">
<string>Send settings to the board but do not save to the non-volatile memory</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string>Apply</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="camerastabilizationSaveSD">
<property name="minimumSize">
<size>
<width>71</width>
<height>16</height>
</size>
</property>
<property name="toolTip">
<string>Send settings to the board and save to the non-volatile memory</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string>Save</string>
</property>
<property name="checked">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>

View File

@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>592</width>
<height>763</height>
<width>588</width>
<height>746</height>
</rect>
</property>
<property name="windowTitle">
@ -107,8 +107,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>562</width>
<height>567</height>
<width>558</width>
<height>580</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
@ -385,7 +385,7 @@
<item>
<widget class="QGroupBox" name="groupBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@ -393,174 +393,182 @@
<property name="minimumSize">
<size>
<width>0</width>
<height>75</height>
<height>45</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>45</height>
</size>
</property>
<property name="title">
<string/>
</property>
<layout class="QVBoxLayout" name="verticalLayout_4">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="spacing">
<number>4</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="spacing">
<number>4</number>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="cchwHelp">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>32</width>
<height>32</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>32</width>
<height>32</height>
</size>
</property>
<property name="toolTip">
<string>Takes you to the wiki page</string>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../coreplugin/core.qrc">
<normaloff>:/core/images/helpicon.svg</normaloff>:/core/images/helpicon.svg</iconset>
</property>
<property name="iconSize">
<size>
<width>32</width>
<height>32</height>
</size>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="saveTelemetryToRAM">
<property name="palette">
<palette>
<active>
<colorrole role="Base">
<brush brushstyle="SolidPattern">
<color alpha="0">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
<colorrole role="Window">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>232</red>
<green>232</green>
<blue>232</blue>
</color>
</brush>
</colorrole>
</active>
<inactive>
<colorrole role="Base">
<brush brushstyle="SolidPattern">
<color alpha="0">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
<colorrole role="Window">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>232</red>
<green>232</green>
<blue>232</blue>
</color>
</brush>
</colorrole>
</inactive>
<disabled>
<colorrole role="Base">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>232</red>
<green>232</green>
<blue>232</blue>
</color>
</brush>
</colorrole>
<colorrole role="Window">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>232</red>
<green>232</green>
<blue>232</blue>
</color>
</brush>
</colorrole>
</disabled>
</palette>
</property>
<property name="toolTip">
<string>Send to OpenPilot but don't write in SD.
<property name="sizeHint" stdset="0">
<size>
<width>369</width>
<height>16</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="cchwHelp">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>25</width>
<height>26</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>25</width>
<height>26</height>
</size>
</property>
<property name="toolTip">
<string>Takes you to the wiki page</string>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../coreplugin/core.qrc">
<normaloff>:/core/images/helpicon.svg</normaloff>:/core/images/helpicon.svg</iconset>
</property>
<property name="iconSize">
<size>
<width>25</width>
<height>25</height>
</size>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="saveTelemetryToRAM">
<property name="palette">
<palette>
<active>
<colorrole role="Base">
<brush brushstyle="SolidPattern">
<color alpha="0">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
<colorrole role="Window">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>232</red>
<green>232</green>
<blue>232</blue>
</color>
</brush>
</colorrole>
</active>
<inactive>
<colorrole role="Base">
<brush brushstyle="SolidPattern">
<color alpha="0">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
<colorrole role="Window">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>232</red>
<green>232</green>
<blue>232</blue>
</color>
</brush>
</colorrole>
</inactive>
<disabled>
<colorrole role="Base">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>232</red>
<green>232</green>
<blue>232</blue>
</color>
</brush>
</colorrole>
<colorrole role="Window">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>232</red>
<green>232</green>
<blue>232</blue>
</color>
</brush>
</colorrole>
</disabled>
</palette>
</property>
<property name="toolTip">
<string>Send to OpenPilot but don't write in SD.
Beware of not locking yourself out!</string>
</property>
<property name="autoFillBackground">
<bool>false</bool>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string>Apply</string>
</property>
<property name="checkable">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="saveTelemetryToSD">
<property name="toolTip">
<string>Applies and Saves all settings to SD.
</property>
<property name="autoFillBackground">
<bool>false</bool>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string>Apply</string>
</property>
<property name="checkable">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="saveTelemetryToSD">
<property name="toolTip">
<string>Applies and Saves all settings to SD.
Beware of not locking yourself out!</string>
</property>
<property name="autoFillBackground">
<bool>false</bool>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string>Save</string>
</property>
</widget>
</item>
</layout>
</property>
<property name="autoFillBackground">
<bool>false</bool>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string>Save</string>
</property>
</widget>
</item>
</layout>
</widget>

View File

@ -86,6 +86,7 @@ ConfigCCHWWidget::ConfigCCHWWidget(QWidget *parent) : ConfigTaskWidget(parent)
enableControls(false);
populateWidgets();
refreshWidgetsValues();
forceConnectedState();
}
ConfigCCHWWidget::~ConfigCCHWWidget()

View File

@ -43,6 +43,7 @@ ConfigCCAttitudeWidget::ConfigCCAttitudeWidget(QWidget *parent) :
ui(new Ui_ccattitude)
{
ui->setupUi(this);
forceConnectedState(); //dynamic widgets don't recieve the connected signal
connect(ui->zeroBias,SIGNAL(clicked()),this,SLOT(startAccelCalibration()));
ExtensionSystem::PluginManager *pm=ExtensionSystem::PluginManager::instance();
@ -113,6 +114,7 @@ void ConfigCCAttitudeWidget::accelsUpdated(UAVObject * obj) {
attitudeSettingsData.GyroBias[2] = -z_gyro_bias;
attitudeSettingsData.BiasCorrectGyro = AttitudeSettings::BIASCORRECTGYRO_TRUE;
AttitudeSettings::GetInstance(getObjectManager())->setData(attitudeSettingsData);
this->setDirty(true);
} else {
// Possible to get here if weird threading stuff happens. Just ignore updates.
qDebug("Unexpected accel update received.");
@ -135,7 +137,8 @@ void ConfigCCAttitudeWidget::timeout() {
void ConfigCCAttitudeWidget::startAccelCalibration() {
QMutexLocker locker(&startStop);
//need to apply so board rotation values don't get overwriten when calibrating
apply();
updates = 0;
x_accum.clear();
y_accum.clear();

View File

@ -71,6 +71,8 @@ ConfigTxPIDWidget::ConfigTxPIDWidget(QWidget *parent) : ConfigTaskWidget(parent)
addUAVObjectToWidgetRelation("TxPIDSettings", "UpdateMode", m_txpid->UpdateMode);
addWidget(m_txpid->TxPIDEnable);
enableControls(false);
populateWidgets();
refreshWidgetsValues();

View File

@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>702</width>
<height>920</height>
<height>764</height>
</rect>
</property>
<property name="windowTitle">
@ -108,7 +108,7 @@
<x>0</x>
<y>0</y>
<width>672</width>
<height>783</height>
<height>657</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout">
@ -740,8 +740,8 @@ font:bold;</string>
<rect>
<x>0</x>
<y>0</y>
<width>540</width>
<height>510</height>
<width>672</width>
<height>795</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout_7">
@ -1265,8 +1265,8 @@ margin:1px;</string>
<rect>
<x>0</x>
<y>0</y>
<width>529</width>
<height>165</height>
<width>672</width>
<height>795</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
@ -1393,104 +1393,112 @@ margin:1px;</string>
</item>
<item>
<widget class="QGroupBox" name="groupBox_3">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>45</height>
</size>
</property>
<property name="title">
<string/>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<layout class="QHBoxLayout" name="horizontalLayout_5">
<property name="spacing">
<number>4</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_5">
<property name="spacing">
<number>4</number>
<spacer name="horizontalSpacer_5">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<item>
<spacer name="horizontalSpacer_5">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="inputHelp">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>32</width>
<height>32</height>
</size>
</property>
<property name="toolTip">
<string>Takes you to the wiki page</string>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../coreplugin/core.qrc">
<normaloff>:/core/images/helpicon.svg</normaloff>:/core/images/helpicon.svg</iconset>
</property>
<property name="iconSize">
<size>
<width>32</width>
<height>32</height>
</size>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="saveRCInputToRAM">
<property name="minimumSize">
<size>
<width>60</width>
<height>28</height>
</size>
</property>
<property name="toolTip">
<string>Send to OpenPilot but don't write in SD.
<property name="sizeHint" stdset="0">
<size>
<width>483</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="inputHelp">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>25</width>
<height>26</height>
</size>
</property>
<property name="toolTip">
<string>Takes you to the wiki page</string>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../coreplugin/core.qrc">
<normaloff>:/core/images/helpicon.svg</normaloff>:/core/images/helpicon.svg</iconset>
</property>
<property name="iconSize">
<size>
<width>25</width>
<height>25</height>
</size>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="saveRCInputToRAM">
<property name="minimumSize">
<size>
<width>60</width>
<height>28</height>
</size>
</property>
<property name="toolTip">
<string>Send to OpenPilot but don't write in SD.
Be sure to set the Neutral position on all sliders before sending!</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string>Apply</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="saveRCInputToSD">
<property name="minimumSize">
<size>
<width>60</width>
<height>28</height>
</size>
</property>
<property name="toolTip">
<string>Be sure to set the Neutral position on all sliders before sending!
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string>Apply</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="saveRCInputToSD">
<property name="minimumSize">
<size>
<width>60</width>
<height>28</height>
</size>
</property>
<property name="toolTip">
<string>Be sure to set the Neutral position on all sliders before sending!
Applies and Saves all settings to SD</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string>Save</string>
</property>
</widget>
</item>
</layout>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string>Save</string>
</property>
</widget>
</item>
</layout>
</widget>

View File

@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>811</width>
<height>937</height>
<height>895</height>
</rect>
</property>
<property name="windowTitle">
@ -114,7 +114,7 @@
<x>0</x>
<y>0</y>
<width>781</width>
<height>800</height>
<height>788</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
@ -129,13 +129,19 @@
<property name="minimumSize">
<size>
<width>0</width>
<height>78</height>
<height>60</height>
</size>
</property>
<property name="title">
<string/>
</property>
<layout class="QGridLayout" name="gridLayout">
<property name="topMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item row="0" column="0">
<spacer name="horizontalSpacer_3">
<property name="orientation">
@ -926,113 +932,115 @@ margin:1px;</string>
<property name="minimumSize">
<size>
<width>0</width>
<height>75</height>
<height>45</height>
</size>
</property>
<property name="title">
<string/>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
<number>4</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
<number>4</number>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="outputHelp">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>32</width>
<height>32</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>32</width>
<height>32</height>
</size>
</property>
<property name="toolTip">
<string>Takes you to the wiki page</string>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../coreplugin/core.qrc">
<normaloff>:/core/images/helpicon.svg</normaloff>:/core/images/helpicon.svg</iconset>
</property>
<property name="iconSize">
<size>
<width>32</width>
<height>32</height>
</size>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="saveRCOutputToRAM">
<property name="minimumSize">
<size>
<width>60</width>
<height>28</height>
</size>
</property>
<property name="toolTip">
<string>Send to OpenPilot but don't write in SD.
<property name="sizeHint" stdset="0">
<size>
<width>592</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="outputHelp">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>25</width>
<height>26</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>25</width>
<height>26</height>
</size>
</property>
<property name="toolTip">
<string>Takes you to the wiki page</string>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../coreplugin/core.qrc">
<normaloff>:/core/images/helpicon.svg</normaloff>:/core/images/helpicon.svg</iconset>
</property>
<property name="iconSize">
<size>
<width>25</width>
<height>25</height>
</size>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="saveRCOutputToRAM">
<property name="minimumSize">
<size>
<width>60</width>
<height>28</height>
</size>
</property>
<property name="toolTip">
<string>Send to OpenPilot but don't write in SD.
Be sure to set the Neutral position on all sliders before sending!</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string>Apply</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="saveRCOutputToSD">
<property name="minimumSize">
<size>
<width>60</width>
<height>28</height>
</size>
</property>
<property name="toolTip">
<string>Be sure to set the Neutral position on all sliders before sending!
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string>Apply</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="saveRCOutputToSD">
<property name="minimumSize">
<size>
<width>60</width>
<height>28</height>
</size>
</property>
<property name="toolTip">
<string>Be sure to set the Neutral position on all sliders before sending!
Applies and Saves all settings to SD</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string>Save</string>
</property>
</widget>
</item>
</layout>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string>Save</string>
</property>
</widget>
</item>
</layout>
</widget>

File diff suppressed because it is too large Load Diff

View File

@ -6,14 +6,14 @@
<rect>
<x>0</x>
<y>0</y>
<width>708</width>
<height>880</height>
<width>789</width>
<height>715</height>
</rect>
</property>
<property name="windowTitle">
<string>TxPID</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QTabWidget" name="tabWidget">
<property name="currentIndex">
@ -107,8 +107,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>678</width>
<height>678</height>
<width>759</width>
<height>543</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
@ -178,7 +178,7 @@ Up to 3 separate PID options (or option pairs) can be selected and updated.</str
<property name="minimumSize">
<size>
<width>0</width>
<height>100</height>
<height>293</height>
</size>
</property>
<property name="title">
@ -636,7 +636,7 @@ margin:1px;</string>
<item>
<widget class="QGroupBox" name="groupBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@ -644,115 +644,140 @@ margin:1px;</string>
<property name="minimumSize">
<size>
<width>0</width>
<height>75</height>
<height>45</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>79</height>
<height>45</height>
</size>
</property>
<property name="title">
<string/>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="spacing">
<number>4</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<layout class="QHBoxLayout" name="submitButtons">
<property name="spacing">
<number>4</number>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<item>
<widget class="QFrame" name="frame">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="pushButton">
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../coreplugin/core.qrc">
<normaloff>:/core/images/helpicon.svg</normaloff>:/core/images/helpicon.svg</iconset>
</property>
<property name="iconSize">
<size>
<width>32</width>
<height>32</height>
</size>
</property>
<property name="flat">
<bool>true</bool>
</property>
<property name="objrelation" stdset="0">
<stringlist>
<string>button:help</string>
<string>url:http://wiki.openpilot.org/x/DACiAQ</string>
</stringlist>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="Apply">
<property name="minimumSize">
<size>
<width>60</width>
<height>28</height>
</size>
</property>
<property name="toolTip">
<string>Send settings to the board but do not save to the non-volatile memory</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string>Apply</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="Save">
<property name="minimumSize">
<size>
<width>60</width>
<height>28</height>
</size>
</property>
<property name="toolTip">
<string>Send settings to the board and save to the non-volatile memory</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string>Save</string>
</property>
<property name="checked">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
<property name="sizeHint" stdset="0">
<size>
<width>570</width>
<height>13</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="pushButton">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>25</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>25</width>
<height>25</height>
</size>
</property>
<property name="baseSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="autoFillBackground">
<bool>false</bool>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../coreplugin/core.qrc">
<normaloff>:/core/images/helpicon.svg</normaloff>:/core/images/helpicon.svg</iconset>
</property>
<property name="iconSize">
<size>
<width>25</width>
<height>25</height>
</size>
</property>
<property name="autoDefault">
<bool>false</bool>
</property>
<property name="default">
<bool>false</bool>
</property>
<property name="flat">
<bool>true</bool>
</property>
<property name="objrelation" stdset="0">
<stringlist>
<string>button:help</string>
<string>url:http://wiki.openpilot.org/x/DACiAQ</string>
</stringlist>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="Apply">
<property name="minimumSize">
<size>
<width>78</width>
<height>32</height>
</size>
</property>
<property name="toolTip">
<string>Send settings to the board but do not save to the non-volatile memory</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string>Apply</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="Save">
<property name="minimumSize">
<size>
<width>71</width>
<height>32</height>
</size>
</property>
<property name="toolTip">
<string>Send settings to the board and save to the non-volatile memory</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string>Save</string>
</property>
<property name="checked">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</widget>

View File

@ -2426,30 +2426,18 @@
<type>uavGadget</type>
</side0>
<side1>
<side0>
<classId>LineardialGadget</classId>
<gadget>
<activeConfiguration>Flight mode</activeConfiguration>
</gadget>
<type>uavGadget</type>
</side0>
<side1>
<classId>LineardialGadget</classId>
<gadget>
<activeConfiguration>GPS Sats</activeConfiguration>
</gadget>
<type>uavGadget</type>
</side1>
<splitterOrientation>1</splitterOrientation>
<splitterSizes>@Variant(AAAACQAAAAIAAAACAAAAoAAAAAIAAACk)</splitterSizes>
<type>splitter</type>
<classId>LineardialGadget</classId>
<gadget>
<activeConfiguration>Flight mode</activeConfiguration>
</gadget>
<type>uavGadget</type>
</side1>
<splitterOrientation>1</splitterOrientation>
<splitterSizes>@Variant(AAAACQAAAAIAAAACAAAAmQAAAAIAAAFC)</splitterSizes>
<splitterSizes>@Variant(AAAACQAAAAIAAAACAAAAsQAAAAIAAAEV)</splitterSizes>
<type>splitter</type>
</side1>
<splitterOrientation>1</splitterOrientation>
<splitterSizes>@Variant(AAAACQAAAAIAAAACAAAAmQAAAAIAAAHc)</splitterSizes>
<splitterSizes>@Variant(AAAACQAAAAIAAAACAAAArgAAAAIAAAHH)</splitterSizes>
<type>splitter</type>
</side0>
<side1>

View File

@ -17,6 +17,7 @@
#include "osgearth.h"
#include <QtCore/qfileinfo.h>
#include <QtCore/qthread.h>
#include <QtDeclarative/qdeclarative.h>
#include <QtDeclarative/qdeclarativeview.h>
#include <QtDeclarative/qdeclarativeengine.h>
@ -42,7 +43,8 @@
OsgEarthItem::OsgEarthItem(QDeclarativeItem *parent):
QDeclarativeItem(parent),
m_fbo(0),
m_renderer(0),
m_rendererThread(0),
m_currentSize(640, 480),
m_roll(0.0),
m_pitch(0.0),
@ -51,8 +53,7 @@ OsgEarthItem::OsgEarthItem(QDeclarativeItem *parent):
m_longitude(153.0),
m_altitude(400.0),
m_fieldOfView(90.0),
m_sceneFile(QLatin1String("/usr/share/osgearth/maps/srtm.earth")),
m_cameraDirty(false)
m_sceneFile(QLatin1String("/usr/share/osgearth/maps/srtm.earth"))
{
setSize(m_currentSize);
setFlag(ItemHasNoContents, false);
@ -60,6 +61,31 @@ OsgEarthItem::OsgEarthItem(QDeclarativeItem *parent):
OsgEarthItem::~OsgEarthItem()
{
if (m_renderer) {
m_rendererThread->exit();
//wait up to 10 seconds for renderer thread to exit
m_rendererThread->wait(10*1000);
delete m_renderer;
delete m_rendererThread;
}
}
QString OsgEarthItem::resolvedSceneFile() const
{
QString sceneFile = m_sceneFile;
//try to resolve the relative scene file name:
if (!QFileInfo(sceneFile).exists()) {
QDeclarativeView *view = qobject_cast<QDeclarativeView*>(scene()->views().first());
if (view) {
QUrl baseUrl = view->engine()->baseUrl();
sceneFile = baseUrl.resolved(sceneFile).toLocalFile();
}
}
return sceneFile;
}
void OsgEarthItem::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry)
@ -95,107 +121,43 @@ void OsgEarthItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *styl
Q_UNUSED(style);
QGLWidget *glWidget = qobject_cast<QGLWidget*>(widget);
if (!m_glWidget) {
//make a shared gl widget to avoid
//osg rendering to mess with qpainter state
m_glWidget = new QGLWidget(widget, glWidget);
m_glWidget.data()->setAttribute(Qt::WA_PaintOutsidePaintEvent);
}
if (!m_renderer) {
m_renderer = new OsgEarthItemRenderer(this, glWidget);
connect(m_renderer, SIGNAL(frameReady()),
this, SLOT(updateView()), Qt::QueuedConnection);
if (!m_viewer.get())
QMetaObject::invokeMethod(this, "initScene", Qt::QueuedConnection);
m_rendererThread = new QThread(this);
m_renderer->moveToThread(m_rendererThread);
m_rendererThread->start();
if (glWidget && m_fbo)
glWidget->drawTexture(boundingRect(), m_fbo->texture());
}
void OsgEarthItem::markCameraDirty()
{
m_cameraDirty = true;
QMetaObject::invokeMethod(this, "updateFBO", Qt::QueuedConnection);
}
void OsgEarthItem::updateFBO()
{
if (!m_cameraDirty || !m_viewer.get() || m_glWidget.isNull())
QMetaObject::invokeMethod(m_renderer, "initScene", Qt::QueuedConnection);
return;
m_cameraDirty = false;
m_glWidget.data()->makeCurrent();
if (m_fbo && m_fbo->size() != m_currentSize) {
delete m_fbo;
m_fbo = 0;
}
if (!m_fbo) {
m_fbo = new QGLFramebufferObject(m_currentSize, QGLFramebufferObject::CombinedDepthStencil);
QPainter p(m_fbo);
p.fillRect(0,0,m_currentSize.width(), m_currentSize.height(), Qt::gray);
}
QGLFramebufferObject *fbo = m_renderer->lastFrame();
//To find a camera view matrix, find placer matrixes for two points
//onr at requested coords and another latitude shifted by 0.01 deg
osgEarth::Util::ObjectPlacer placer(m_viewer->getSceneData());
osg::Matrixd positionMatrix;
placer.createPlacerMatrix(m_latitude, m_longitude, m_altitude, positionMatrix);
osg::Matrixd positionMatrix2;
placer.createPlacerMatrix(m_latitude+0.01, m_longitude, m_altitude, positionMatrix2);
osg::Vec3d eye(0.0f, 0.0f, 0.0f);
osg::Vec3d viewVector(0.0f, 0.0f, 0.0f);
osg::Vec3d upVector(0.0f, 0.0f, 1.0f);
eye = positionMatrix.preMult(eye);
upVector = positionMatrix.preMult(upVector);
upVector.normalize();
viewVector = positionMatrix2.preMult(viewVector) - eye;
viewVector.normalize();
viewVector *= 10.0;
//TODO: clarify the correct rotation order,
//currently assuming yaw, pitch, roll
osg::Quat q;
q.makeRotate(-m_yaw*M_PI/180.0, upVector);
upVector = q * upVector;
viewVector = q * viewVector;
osg::Vec3d side = viewVector ^ upVector;
q.makeRotate(m_pitch*M_PI/180.0, side);
upVector = q * upVector;
viewVector = q * viewVector;
q.makeRotate(m_roll*M_PI/180.0, viewVector);
upVector = q * upVector;
viewVector = q * viewVector;
osg::Vec3d center = eye + viewVector;
// qDebug() << "e " << eye.x() << eye.y() << eye.z();
// qDebug() << "c " << center.x() << center.y() << center.z();
// qDebug() << "up" << upVector.x() << upVector.y() << upVector.z();
m_viewer->getCamera()->setViewMatrixAsLookAt(osg::Vec3d(eye.x(), eye.y(), eye.z()),
osg::Vec3d(center.x(), center.y(), center.z()),
osg::Vec3d(upVector.x(), upVector.y(), upVector.z()));
{
QPainter fboPainter(m_fbo);
fboPainter.beginNativePainting();
m_viewer->frame();
fboPainter.endNativePainting();
}
m_glWidget.data()->doneCurrent();
if (glWidget && fbo)
glWidget->drawTexture(boundingRect(), fbo->texture());
}
void OsgEarthItem::updateView()
{
update();
}
void OsgEarthItem::updateFrame()
{
if (m_renderer) {
m_renderer->markDirty();
QMetaObject::invokeMethod(m_renderer, "updateFrame", Qt::QueuedConnection);
}
}
void OsgEarthItem::setRoll(qreal arg)
{
if (!qFuzzyCompare(m_roll, arg)) {
m_roll = arg;
markCameraDirty();
updateFrame();
emit rollChanged(arg);
}
}
@ -204,7 +166,7 @@ void OsgEarthItem::setPitch(qreal arg)
{
if (!qFuzzyCompare(m_pitch, arg)) {
m_pitch = arg;
markCameraDirty();
updateFrame();
emit pitchChanged(arg);
}
}
@ -213,7 +175,7 @@ void OsgEarthItem::setYaw(qreal arg)
{
if (!qFuzzyCompare(m_yaw, arg)) {
m_yaw = arg;
markCameraDirty();
updateFrame();
emit yawChanged(arg);
}
}
@ -250,14 +212,15 @@ void OsgEarthItem::setFieldOfView(qreal arg)
m_fieldOfView = arg;
emit fieldOfViewChanged(arg);
if (m_viewer.get()) {
//it should be a queued call to OsgEarthItemRenderer instead
/*if (m_viewer.get()) {
m_viewer->getCamera()->setProjectionMatrixAsPerspective(
m_fieldOfView,
qreal(m_currentSize.width())/m_currentSize.height(),
1.0f, 10000.0f);
}
}*/
markCameraDirty();
updateFrame();
}
}
@ -269,27 +232,51 @@ void OsgEarthItem::setSceneFile(QString arg)
}
}
void OsgEarthItem::initScene()
OsgEarthItemRenderer::OsgEarthItemRenderer(OsgEarthItem *item, QGLWidget *glWidget) :
QObject(0),
m_item(item),
m_lastFboNumber(0),
m_currentSize(640, 480),
m_cameraDirty(false)
{
if (m_viewer.get())
return;
//make a shared gl widget to avoid
//osg rendering to mess with qpainter state
//this runs in the main thread
m_glWidget = new QGLWidget(0, glWidget);
m_glWidget.data()->setAttribute(Qt::WA_PaintOutsidePaintEvent);
for (int i=0; i<FboCount; i++) {
m_fbo[i] = new QGLFramebufferObject(m_currentSize, QGLFramebufferObject::CombinedDepthStencil);
QPainter p(m_fbo[i]);
p.fillRect(0,0,m_currentSize.width(), m_currentSize.height(), Qt::gray);
}
}
OsgEarthItemRenderer::~OsgEarthItemRenderer()
{
m_glWidget.data()->makeCurrent();
for (int i=0; i<FboCount; i++) {
delete m_fbo[i];
m_fbo[i] = 0;
}
m_glWidget.data()->doneCurrent();
delete m_glWidget.data();
}
QGLFramebufferObject *OsgEarthItemRenderer::lastFrame()
{
return m_fbo[m_lastFboNumber];
}
void OsgEarthItemRenderer::initScene()
{
Q_ASSERT(!m_viewer.get());
int w = m_currentSize.width();
int h = m_currentSize.height();
QString sceneFile = m_sceneFile;
//try to resolve the relative scene file name:
if (!QFileInfo(sceneFile).exists()) {
QDeclarativeView *view = qobject_cast<QDeclarativeView*>(scene()->views().first());
if (view) {
QUrl baseUrl = view->engine()->baseUrl();
sceneFile = baseUrl.resolved(sceneFile).toLocalFile();
}
}
QString sceneFile = m_item->resolvedSceneFile();
m_model = osgDB::readNodeFile(sceneFile.toStdString());
//setup caching
@ -320,8 +307,76 @@ void OsgEarthItem::initScene()
// configure the near/far so we don't clip things that are up close
camera->setNearFarRatio(0.00002);
camera->setProjectionMatrixAsPerspective(m_fieldOfView, qreal(w)/h, 1.0f, 10000.0f);
camera->setProjectionMatrixAsPerspective(m_item->fieldOfView(), qreal(w)/h, 1.0f, 10000.0f);
markCameraDirty();
updateFrame();
}
void OsgEarthItemRenderer::updateFrame()
{
if (!m_cameraDirty || !m_viewer.get() || m_glWidget.isNull())
return;
m_glWidget.data()->makeCurrent();
//To find a camera view matrix, find placer matrixes for two points
//onr at requested coords and another latitude shifted by 0.01 deg
osgEarth::Util::ObjectPlacer placer(m_viewer->getSceneData());
m_cameraDirty = false;
osg::Matrixd positionMatrix;
placer.createPlacerMatrix(m_item->latitude(), m_item->longitude(), m_item->altitude(), positionMatrix);
osg::Matrixd positionMatrix2;
placer.createPlacerMatrix(m_item->latitude()+0.01, m_item->longitude(), m_item->altitude(), positionMatrix2);
osg::Vec3d eye(0.0f, 0.0f, 0.0f);
osg::Vec3d viewVector(0.0f, 0.0f, 0.0f);
osg::Vec3d upVector(0.0f, 0.0f, 1.0f);
eye = positionMatrix.preMult(eye);
upVector = positionMatrix.preMult(upVector);
upVector.normalize();
viewVector = positionMatrix2.preMult(viewVector) - eye;
viewVector.normalize();
viewVector *= 10.0;
//TODO: clarify the correct rotation order,
//currently assuming yaw, pitch, roll
osg::Quat q;
q.makeRotate(-m_item->yaw()*M_PI/180.0, upVector);
upVector = q * upVector;
viewVector = q * viewVector;
osg::Vec3d side = viewVector ^ upVector;
q.makeRotate(m_item->pitch()*M_PI/180.0, side);
upVector = q * upVector;
viewVector = q * viewVector;
q.makeRotate(m_item->roll()*M_PI/180.0, viewVector);
upVector = q * upVector;
viewVector = q * viewVector;
osg::Vec3d center = eye + viewVector;
// qDebug() << "e " << eye.x() << eye.y() << eye.z();
// qDebug() << "c " << center.x() << center.y() << center.z();
// qDebug() << "up" << upVector.x() << upVector.y() << upVector.z();
m_viewer->getCamera()->setViewMatrixAsLookAt(osg::Vec3d(eye.x(), eye.y(), eye.z()),
osg::Vec3d(center.x(), center.y(), center.z()),
osg::Vec3d(upVector.x(), upVector.y(), upVector.z()));
{
QGLFramebufferObject *fbo = m_fbo[(m_lastFboNumber + 1) % FboCount];
QPainter fboPainter(fbo);
fboPainter.beginNativePainting();
m_viewer->frame();
fboPainter.endNativePainting();
}
m_glWidget.data()->doneCurrent();
m_lastFboNumber = (m_lastFboNumber + 1) % FboCount;
emit frameReady();
}

View File

@ -24,6 +24,7 @@
class QGLFramebufferObject;
class QGLWidget;
class OsgEarthItemRenderer;
class OsgEarthItem : public QDeclarativeItem
{
@ -46,6 +47,7 @@ public:
~OsgEarthItem();
QString sceneFile() const { return m_sceneFile; }
QString resolvedSceneFile() const;
qreal fieldOfView() const { return m_fieldOfView; }
qreal roll() const { return m_roll; }
@ -61,6 +63,7 @@ protected:
void paint(QPainter *painter, const QStyleOptionGraphicsItem *style, QWidget *widget);
public slots:
void updateView();
void setSceneFile(QString arg);
void setFieldOfView(qreal arg);
@ -85,16 +88,12 @@ signals:
void fieldOfViewChanged(qreal arg);
private slots:
void markCameraDirty();
void updateFBO();
void initScene();
void updateFrame();
private:
osg::ref_ptr<osgViewer::Viewer> m_viewer;
osg::ref_ptr<osgViewer::GraphicsWindowEmbedded> m_gw;
osg::ref_ptr<osg::Node> m_model;
QWeakPointer<QGLWidget> m_glWidget;
QGLFramebufferObject *m_fbo;
OsgEarthItemRenderer *m_renderer;
QThread *m_rendererThread;
QSize m_currentSize;
qreal m_roll;
@ -108,6 +107,42 @@ private:
qreal m_fieldOfView;
QString m_sceneFile;
};
class OsgEarthItemRenderer : public QObject
{
Q_OBJECT
public:
OsgEarthItemRenderer(OsgEarthItem *item, QGLWidget *glWidget);
~OsgEarthItemRenderer();
QGLFramebufferObject *lastFrame();
void markDirty() { m_cameraDirty = true; }
public slots:
void initScene();
void updateFrame();
signals:
void frameReady();
private slots:
void updateFBO();
private:
enum { FboCount = 3 };
OsgEarthItem *m_item;
osg::ref_ptr<osgViewer::Viewer> m_viewer;
osg::ref_ptr<osgViewer::GraphicsWindowEmbedded> m_gw;
osg::ref_ptr<osg::Node> m_model;
QWeakPointer<QGLWidget> m_glWidget;
QGLFramebufferObject* m_fbo[FboCount];
int m_lastFboNumber;
QSize m_currentSize;
bool m_cameraDirty;
};

View File

@ -9,11 +9,6 @@ include(../../openpilotgcsplugin.pri)
include(../../plugins/coreplugin/coreplugin.pri)
include(pfdqml_dependencies.pri)
contains(DEFINES,USE_OSG){
LIBS += -losg -losgUtil -losgViewer -losgQt -losgDB -lOpenThreads -losgGA
LIBS += -losgEarth -losgEarthFeatures -losgEarthUtil
}
HEADERS += \
pfdqmlplugin.h \
pfdqmlgadget.h \
@ -21,10 +16,7 @@ HEADERS += \
pfdqmlgadgetfactory.h \
pfdqmlgadgetconfiguration.h \
pfdqmlgadgetoptionspage.h
contains(DEFINES,USE_OSG){
\
osgearth.h
}
SOURCES += \
pfdqmlplugin.cpp \
pfdqmlgadget.cpp \
@ -32,9 +24,14 @@ SOURCES += \
pfdqmlgadgetwidget.cpp \
pfdqmlgadgetconfiguration.cpp \
pfdqmlgadgetoptionspage.cpp
contains(DEFINES,USE_OSG){
\
osgearth.cpp
contains(DEFINES,USE_OSG) {
LIBS += -losg -losgUtil -losgViewer -losgQt -losgDB -lOpenThreads -losgGA
LIBS += -losgEarth -losgEarthFeatures -losgEarthUtil
HEADERS += osgearth.h
SOURCES += osgearth.cpp
}
OTHER_FILES += PfdQml.pluginspec

View File

@ -62,6 +62,11 @@ QWidget *PfdQmlGadgetOptionsPage::createPage(QWidget *parent)
options_page->altitude->setText(QString::number(m_config->altitude()));
options_page->useOnlyCache->setChecked(m_config->cacheOnly());
#ifndef USE_OSG
options_page->showTerrain->setChecked(false);
options_page->showTerrain->setVisible(false);
#endif
return optionsPageWidget;
}

View File

@ -224,6 +224,12 @@ void ConfigTaskWidget::onAutopilotDisconnect()
invalidateObjects();
}
void ConfigTaskWidget::forceConnectedState()
{
isConnected=true;
setDirty(false);
}
void ConfigTaskWidget::onAutopilotConnect()
{
invalidateObjects();

View File

@ -130,6 +130,7 @@ public:
void setOutOfLimitsStyle(QString style){outOfLimitsStyle=style;}
void addHelpButton(QPushButton * button,QString url);
void forceShadowUpdates();
void forceConnectedState();
public slots:
void onAutopilotDisconnect();
void onAutopilotConnect();

View File

@ -40,7 +40,7 @@ through serial or USB)</string>
<property name="toolTip">
<string>Boots the system.
Only useful if the system is halted
(mainboard blue LED blinking slowly, orange LED off)
(mainboard blue LED blinking slowly, green LED on)
If telemetry is not running, select the link using the dropdown
menu on the right.</string>
@ -217,7 +217,7 @@ p, li { white-space: pre-wrap; }
</layout>
</widget>
<resources>
<include location="../coreplugin/core.qrc"/>
<include location="../coreplugin/core.qrc"/>
</resources>
<connections/>
</ui>