mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2025-01-18 03:52:11 +01:00
OP-1005 Removes 'old' PFD (non qml based one).
This commit is contained in:
parent
a6ac956127
commit
68b2b28594
@ -1,11 +0,0 @@
|
||||
<plugin name="PFDGadget" version="1.0.0" compatVersion="1.0.0">
|
||||
<vendor>The OpenPilot Project</vendor>
|
||||
<copyright>(C) 2010 Edouard Lafargue</copyright>
|
||||
<license>The GNU Public License (GPL) Version 3</license>
|
||||
<description>The Primary Flight Display gadget</description>
|
||||
<url>http://www.openpilot.org</url>
|
||||
<dependencyList>
|
||||
<dependency name="Core" version="1.0.0"/>
|
||||
<dependency name="UAVObjects" version="1.0.0"/>
|
||||
</dependencyList>
|
||||
</plugin>
|
@ -1,394 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="1038.8931"
|
||||
height="707.56323"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.47 r22583"
|
||||
sodipodi:docname="pfd-default.svg"
|
||||
style="display:inline"
|
||||
inkscape:export-filename="H:\Documents\Hobbies\OpenPilot\SVN\artwork\PFD-2.png"
|
||||
inkscape:export-xdpi="269.53"
|
||||
inkscape:export-ydpi="269.53">
|
||||
<defs
|
||||
id="defs4">
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 353.78162 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="1038.8931 : 353.78162 : 1"
|
||||
inkscape:persp3d-origin="519.44653 : 235.85441 : 1"
|
||||
id="perspective49" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.49497475"
|
||||
inkscape:cx="386.89507"
|
||||
inkscape:cy="316.00835"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer7"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1280"
|
||||
inkscape:window-height="725"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-maximized="1"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:snap-grids="false"
|
||||
inkscape:snap-to-guides="true"
|
||||
inkscape:snap-smooth-nodes="false"
|
||||
inkscape:snap-global="false">
|
||||
<sodipodi:guide
|
||||
orientation="0,1"
|
||||
position="1060.7625,922.28538"
|
||||
id="guide5941" />
|
||||
<sodipodi:guide
|
||||
orientation="0,1"
|
||||
position="519.447,353.69582"
|
||||
id="guide6851" />
|
||||
<sodipodi:guide
|
||||
orientation="-0.70710678,0.70710678"
|
||||
position="519.447,353.69582"
|
||||
id="guide6897" />
|
||||
<sodipodi:guide
|
||||
orientation="0.70710678,0.70710678"
|
||||
position="519.447,353.69582"
|
||||
id="guide6899" />
|
||||
<sodipodi:guide
|
||||
orientation="0.70710678,0.70710678"
|
||||
position="407.55996,-15.60171"
|
||||
id="guide6916" />
|
||||
<sodipodi:guide
|
||||
orientation="-0.70710678,0.70710678"
|
||||
position="732.46291,91.541146"
|
||||
id="guide6918" />
|
||||
<sodipodi:guide
|
||||
orientation="0,1"
|
||||
position="341.53388,18.198896"
|
||||
id="guide6920" />
|
||||
<sodipodi:guide
|
||||
orientation="0,1"
|
||||
position="519.70281,477.96972"
|
||||
id="guide4338" />
|
||||
<sodipodi:guide
|
||||
orientation="1,0"
|
||||
position="519.447,353.69582"
|
||||
id="guide4372" />
|
||||
<sodipodi:guide
|
||||
orientation="0,1"
|
||||
position="732.46291,91.541146"
|
||||
id="guide3257" />
|
||||
<sodipodi:guide
|
||||
orientation="1,0"
|
||||
position="156.82618,353.69582"
|
||||
id="guide4225" />
|
||||
<sodipodi:guide
|
||||
orientation="0,1"
|
||||
position="-378.30213,170.71578"
|
||||
id="guide5917" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer7"
|
||||
inkscape:label="Background"
|
||||
style="display:inline"
|
||||
transform="translate(230.4171,-2.5493479)">
|
||||
<rect
|
||||
transform="translate(0,-252.36218)"
|
||||
style="fill:#453e3e;fill-opacity:1;stroke:#060000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
|
||||
id="background"
|
||||
width="1033.8402"
|
||||
height="702.51031"
|
||||
x="-227.89064"
|
||||
y="261.44824"
|
||||
inkscape:label="#rect6231"
|
||||
ry="10" />
|
||||
<g
|
||||
style="font-size:40px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
|
||||
id="text3627">
|
||||
<path
|
||||
d="m -39.769348,292.21622 24.667969,0 0,3.32031 -10.351563,0 0,25.83984 -3.964844,0 0,-25.83984 -10.351562,0 0,-3.32031"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3636" />
|
||||
<path
|
||||
d="m 6.7540894,308.17325 0,13.20312 -3.59375,0 0,-13.08593 c -1.84e-5,-2.0703 -0.4036638,-3.61978 -1.2109375,-4.64844 -0.8073081,-1.02863 -2.01824434,-1.54295 -3.6328125,-1.54297 -1.9401158,2e-5 -3.4700622,0.61851 -4.5898438,1.85547 -1.1197995,1.23699 -1.6796947,2.92319 -1.6796875,5.05859 l 0,12.36328 -3.6132811,0 0,-30.39062 3.6132811,0 0,11.91406 c 0.8593669,-1.31508 1.8684805,-2.29816 3.0273438,-2.94922 1.1718635,-0.65102 2.5195184,-0.97654 4.04296871,-0.97656 2.51300399,2e-5 4.41404379,0.78127 5.70312499,2.34375 1.2890412,1.5495 1.9335718,3.83465 1.9335938,6.85547"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3638" />
|
||||
<path
|
||||
d="m 32.672058,309.54044 0,1.75781 -16.523437,0 c 0.156243,2.47396 0.89843,4.36198 2.226562,5.66406 1.341136,1.28907 3.203114,1.9336 5.585938,1.93359 1.380193,1e-5 2.714827,-0.16926 4.003906,-0.50781 1.302064,-0.33854 2.591125,-0.84635 3.867187,-1.52344 l 0,3.39844 c -1.289082,0.54688 -2.610696,0.96354 -3.964843,1.25 -1.354183,0.28646 -2.72788,0.42969 -4.121094,0.42969 -3.489594,0 -6.256518,-1.01563 -8.300781,-3.04688 -2.031254,-2.03124 -3.046878,-4.77863 -3.046875,-8.24218 -3e-6,-3.58072 0.963538,-6.41926 2.890625,-8.51563 1.940097,-2.10935 4.550771,-3.16404 7.832031,-3.16406 2.942692,2e-5 5.266909,0.95054 6.972656,2.85156 1.718728,1.88804 2.578103,4.45965 2.578125,7.71485 m -3.59375,-1.05469 c -0.02606,-1.96613 -0.579445,-3.53514 -1.660156,-4.70703 -1.067725,-1.17186 -2.486994,-1.7578 -4.257813,-1.75782 -2.005219,2e-5 -3.61329,0.56643 -4.824218,1.69922 -1.197924,1.13283 -1.888027,2.72788 -2.070313,4.78516 l 12.8125,-0.0195"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3640" />
|
||||
<path
|
||||
d="m 51.246277,302.86075 c -0.403662,-0.23436 -0.84637,-0.40363 -1.328125,-0.50781 -0.468765,-0.11717 -0.989598,-0.17577 -1.5625,-0.17579 -2.031262,2e-5 -3.59376,0.66409 -4.6875,1.99219 -1.080737,1.31512 -1.621101,3.20965 -1.621094,5.6836 l 0,11.52343 -3.613281,0 0,-21.875 3.613281,0 0,3.39844 c 0.7552,-1.3281 1.738272,-2.31118 2.949219,-2.94922 1.210926,-0.65102 2.682279,-0.97654 4.414062,-0.97656 0.247381,2e-5 0.520819,0.0195 0.820313,0.0586 0.299463,0.0261 0.631494,0.0716 0.996094,0.13672 l 0.01953,3.69141"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3642" />
|
||||
<path
|
||||
d="m 72.906433,309.54044 0,1.75781 -16.523437,0 c 0.156243,2.47396 0.89843,4.36198 2.226562,5.66406 1.341136,1.28907 3.203114,1.9336 5.585938,1.93359 1.380193,1e-5 2.714827,-0.16926 4.003906,-0.50781 1.302064,-0.33854 2.591125,-0.84635 3.867187,-1.52344 l 0,3.39844 c -1.289082,0.54688 -2.610696,0.96354 -3.964843,1.25 -1.354183,0.28646 -2.72788,0.42969 -4.121094,0.42969 -3.489594,0 -6.256518,-1.01563 -8.300781,-3.04688 -2.031254,-2.03124 -3.046878,-4.77863 -3.046875,-8.24218 -3e-6,-3.58072 0.963538,-6.41926 2.890625,-8.51563 1.940097,-2.10935 4.550771,-3.16404 7.832031,-3.16406 2.942692,2e-5 5.266909,0.95054 6.972656,2.85156 1.718728,1.88804 2.578103,4.45965 2.578125,7.71485 m -3.59375,-1.05469 c -0.02606,-1.96613 -0.579445,-3.53514 -1.660156,-4.70703 -1.067725,-1.17186 -2.486994,-1.7578 -4.257813,-1.75782 -2.005219,2e-5 -3.61329,0.56643 -4.824218,1.69922 -1.197924,1.13283 -1.888027,2.72788 -2.070313,4.78516 l 12.8125,-0.0195"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3644" />
|
||||
<path
|
||||
d="m 89.449402,299.50137 3.59375,0 4.492187,17.07032 4.472661,-17.07032 4.23828,0 4.49218,17.07032 4.47266,-17.07032 3.59375,0 -5.72266,21.875 -4.23828,0 -4.70703,-17.92968 -4.726561,17.92968 -4.238281,0 -5.722656,-21.875"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3646" />
|
||||
<path
|
||||
d="m 134.21503,310.38028 c -2.90366,10e-6 -4.91538,0.33204 -6.03516,0.99609 -1.1198,0.66408 -1.67969,1.79689 -1.67969,3.39844 0,1.27605 0.41666,2.29167 1.25,3.04688 0.84635,0.74219 1.99218,1.11328 3.4375,1.11328 1.99218,0 3.58723,-0.70312 4.78516,-2.10938 1.21092,-1.41926 1.81639,-3.30077 1.81641,-5.64453 l 0,-0.80078 -3.57422,0 m 7.16797,-1.48438 0,12.48047 -3.59375,0 0,-3.32031 c -0.82033,1.32813 -1.84247,2.3112 -3.06641,2.94922 -1.22397,0.625 -2.72137,0.9375 -4.49219,0.9375 -2.23959,0 -4.02344,-0.625 -5.35156,-1.875 -1.31511,-1.26302 -1.97266,-2.94921 -1.97266,-5.05859 0,-2.46093 0.82031,-4.3164 2.46094,-5.56641 1.65364,-1.24999 4.11457,-1.87499 7.38281,-1.875 l 5.03907,0 0,-0.35156 c -2e-5,-1.65363 -0.5469,-2.92967 -1.64063,-3.82813 -1.08074,-0.91144 -2.60418,-1.36717 -4.57031,-1.36719 -1.25001,2e-5 -2.46746,0.14976 -3.65235,0.44922 -1.1849,0.2995 -2.32422,0.74872 -3.41796,1.34766 l 0,-3.32031 c 1.31509,-0.50779 2.59113,-0.8854 3.82812,-1.13282 1.23697,-0.26039 2.4414,-0.3906 3.61328,-0.39062 3.16405,2e-5 5.52733,0.82033 7.08985,2.46094 1.56248,1.64064 2.34372,4.12762 2.34375,7.46093"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3648" />
|
||||
<path
|
||||
d="m 162.75018,300.1459 0,3.39844 c -1.01564,-0.52081 -2.07033,-0.91144 -3.16406,-1.17187 -1.09376,-0.2604 -2.22657,-0.39061 -3.39844,-0.39063 -1.78386,2e-5 -3.125,0.27346 -4.02343,0.82031 -0.88543,0.5469 -1.32814,1.36721 -1.32813,2.46094 -1e-5,0.83335 0.319,1.4909 0.95703,1.97266 0.63802,0.46876 1.92057,0.91798 3.84766,1.34765 l 1.23047,0.27344 c 2.55207,0.54689 4.36196,1.32163 5.42968,2.32422 1.08072,0.98959 1.62108,2.37631 1.6211,4.16016 -2e-5,2.03125 -0.80731,3.63932 -2.42188,4.82422 -1.60157,1.18489 -3.8086,1.77734 -6.62109,1.77734 -1.17188,0 -2.39584,-0.11719 -3.67188,-0.35156 -1.26302,-0.22136 -2.59766,-0.5599 -4.0039,-1.01563 l 0,-3.71094 c 1.32812,0.69011 2.63671,1.21095 3.92578,1.5625 1.28905,0.33855 2.56509,0.50782 3.82812,0.50782 1.6927,0 2.99478,-0.28646 3.90625,-0.85938 0.91145,-0.58593 1.36718,-1.40624 1.36719,-2.46094 -1e-5,-0.97655 -0.33204,-1.72525 -0.99609,-2.24609 -0.65106,-0.52082 -2.08986,-1.02213 -4.31641,-1.50391 l -1.25,-0.29296 c -2.22657,-0.46874 -3.83464,-1.18489 -4.82422,-2.14844 -0.98958,-0.97655 -1.48437,-2.31119 -1.48437,-4.00391 0,-2.05727 0.72916,-3.64581 2.1875,-4.76562 1.45833,-1.11977 3.52864,-1.67967 6.21094,-1.67969 1.32811,2e-5 2.57811,0.0977 3.75,0.29297 1.17185,0.19533 2.25258,0.4883 3.24218,0.8789"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3650" />
|
||||
<path
|
||||
d="m 192.34003,310.38028 c -2.90366,10e-6 -4.91538,0.33204 -6.03516,0.99609 -1.1198,0.66408 -1.67969,1.79689 -1.67969,3.39844 0,1.27605 0.41666,2.29167 1.25,3.04688 0.84635,0.74219 1.99218,1.11328 3.4375,1.11328 1.99218,0 3.58723,-0.70312 4.78516,-2.10938 1.21092,-1.41926 1.81639,-3.30077 1.81641,-5.64453 l 0,-0.80078 -3.57422,0 m 7.16797,-1.48438 0,12.48047 -3.59375,0 0,-3.32031 c -0.82033,1.32813 -1.84247,2.3112 -3.06641,2.94922 -1.22397,0.625 -2.72137,0.9375 -4.49219,0.9375 -2.23959,0 -4.02344,-0.625 -5.35156,-1.875 -1.31511,-1.26302 -1.97266,-2.94921 -1.97266,-5.05859 0,-2.46093 0.82031,-4.3164 2.46094,-5.56641 1.65364,-1.24999 4.11457,-1.87499 7.38281,-1.875 l 5.03907,0 0,-0.35156 c -2e-5,-1.65363 -0.5469,-2.92967 -1.64063,-3.82813 -1.08074,-0.91144 -2.60418,-1.36717 -4.57031,-1.36719 -1.25001,2e-5 -2.46746,0.14976 -3.65235,0.44922 -1.1849,0.2995 -2.32422,0.74872 -3.41796,1.34766 l 0,-3.32031 c 1.31509,-0.50779 2.59113,-0.8854 3.82812,-1.13282 1.23697,-0.26039 2.4414,-0.3906 3.61328,-0.39062 3.16405,2e-5 5.52733,0.82033 7.08985,2.46094 1.56248,1.64064 2.34372,4.12762 2.34375,7.46093"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3652" />
|
||||
<path
|
||||
d="m 223.14081,318.09512 0,11.60157 -3.61328,0 0,-30.19532 3.61328,0 0,3.32032 c 0.7552,-1.30207 1.70572,-2.26561 2.85156,-2.89063 1.15884,-0.638 2.53905,-0.95701 4.14063,-0.95703 2.65623,2e-5 4.81117,1.05471 6.46484,3.16406 1.66664,2.10939 2.49998,4.88283 2.5,8.32031 -2e-5,3.43751 -0.83336,6.21095 -2.5,8.32032 -1.65367,2.10937 -3.80861,3.16406 -6.46484,3.16406 -1.60158,0 -2.98179,-0.3125 -4.14063,-0.9375 -1.14584,-0.63802 -2.09636,-1.60807 -2.85156,-2.91016 m 12.22656,-7.63672 c -2e-5,-2.64321 -0.54689,-4.71352 -1.64062,-6.21093 -1.08075,-1.5104 -2.57163,-2.26561 -4.47266,-2.26563 -1.90105,2e-5 -3.39845,0.75523 -4.49219,2.26563 -1.08074,1.49741 -1.6211,3.56772 -1.62109,6.21093 -10e-6,2.64324 0.54035,4.72006 1.62109,6.23047 1.09374,1.4974 2.59114,2.2461 4.49219,2.2461 1.90103,0 3.39191,-0.7487 4.47266,-2.2461 1.09373,-1.51041 1.6406,-3.58723 1.64062,-6.23047"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3654" />
|
||||
<path
|
||||
d="m 257.73065,302.86075 c -0.40366,-0.23436 -0.84637,-0.40363 -1.32812,-0.50781 -0.46877,-0.11717 -0.9896,-0.17577 -1.5625,-0.17579 -2.03126,2e-5 -3.59376,0.66409 -4.6875,1.99219 -1.08074,1.31512 -1.6211,3.20965 -1.6211,5.6836 l 0,11.52343 -3.61328,0 0,-21.875 3.61328,0 0,3.39844 c 0.7552,-1.3281 1.73828,-2.31118 2.94922,-2.94922 1.21093,-0.65102 2.68228,-0.97654 4.41406,-0.97656 0.24739,2e-5 0.52082,0.0195 0.82032,0.0586 0.29946,0.0261 0.63149,0.0716 0.99609,0.13672 l 0.0195,3.69141"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3656" />
|
||||
<path
|
||||
d="m 269.15643,302.0209 c -1.92709,2e-5 -3.45053,0.75523 -4.57031,2.26563 -1.1198,1.49741 -1.67969,3.5547 -1.67969,6.17187 0,2.6172 0.55338,4.681 1.66016,6.19141 1.11978,1.4974 2.64973,2.2461 4.58984,2.24609 1.91405,1e-5 3.43098,-0.7552 4.55078,-2.26562 1.11978,-1.51041 1.67967,-3.5677 1.67969,-6.17188 -2e-5,-2.59113 -0.55991,-4.64191 -1.67969,-6.15234 -1.1198,-1.52342 -2.63673,-2.28514 -4.55078,-2.28516 m 0,-3.04687 c 3.12499,2e-5 5.57941,1.01565 7.36328,3.04687 1.78384,2.03127 2.67576,4.84377 2.67579,8.4375 -3e-5,3.58074 -0.89195,6.39324 -2.67579,8.4375 -1.78387,2.03125 -4.23829,3.04688 -7.36328,3.04688 -3.13803,0 -5.59896,-1.01563 -7.38281,-3.04688 -1.77084,-2.04426 -2.65625,-4.85676 -2.65625,-8.4375 0,-3.59373 0.88541,-6.40623 2.65625,-8.4375 1.78385,-2.03122 4.24478,-3.04685 7.38281,-3.04687"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3658" />
|
||||
<path
|
||||
d="m 300.83612,310.4584 c -2e-5,-2.64321 -0.54689,-4.71352 -1.64062,-6.21093 -1.08075,-1.5104 -2.57163,-2.26561 -4.47266,-2.26563 -1.90105,2e-5 -3.39845,0.75523 -4.49219,2.26563 -1.08074,1.49741 -1.6211,3.56772 -1.62109,6.21093 -10e-6,2.64324 0.54035,4.72006 1.62109,6.23047 1.09374,1.4974 2.59114,2.2461 4.49219,2.2461 1.90103,0 3.39191,-0.7487 4.47266,-2.2461 1.09373,-1.51041 1.6406,-3.58723 1.64062,-6.23047 m -12.22656,-7.63671 c 0.7552,-1.30207 1.70572,-2.26561 2.85156,-2.89063 1.15884,-0.638 2.53905,-0.95701 4.14063,-0.95703 2.65623,2e-5 4.81117,1.05471 6.46484,3.16406 1.66664,2.10939 2.49998,4.88283 2.5,8.32031 -2e-5,3.43751 -0.83336,6.21095 -2.5,8.32032 -1.65367,2.10937 -3.80861,3.16406 -6.46484,3.16406 -1.60158,0 -2.98179,-0.3125 -4.14063,-0.9375 -1.14584,-0.63802 -2.09636,-1.60807 -2.85156,-2.91016 l 0,3.28125 -3.61328,0 0,-30.39062 3.61328,0 0,11.83594"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3660" />
|
||||
<path
|
||||
d="m 310.52362,290.98575 3.59375,0 0,30.39062 -3.59375,0 0,-30.39062"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3662" />
|
||||
<path
|
||||
d="m 340.32831,309.54044 0,1.75781 -16.52344,0 c 0.15624,2.47396 0.89843,4.36198 2.22656,5.66406 1.34114,1.28907 3.20312,1.9336 5.58594,1.93359 1.38019,1e-5 2.71483,-0.16926 4.00391,-0.50781 1.30206,-0.33854 2.59112,-0.84635 3.86718,-1.52344 l 0,3.39844 c -1.28908,0.54688 -2.61069,0.96354 -3.96484,1.25 -1.35418,0.28646 -2.72788,0.42969 -4.12109,0.42969 -3.4896,0 -6.25652,-1.01563 -8.30078,-3.04688 -2.03126,-2.03124 -3.04688,-4.77863 -3.04688,-8.24218 0,-3.58072 0.96354,-6.41926 2.89063,-8.51563 1.94009,-2.10935 4.55077,-3.16404 7.83203,-3.16406 2.94269,2e-5 5.26691,0.95054 6.97265,2.85156 1.71873,1.88804 2.57811,4.45965 2.57813,7.71485 m -3.59375,-1.05469 c -0.0261,-1.96613 -0.57945,-3.53514 -1.66016,-4.70703 -1.06772,-1.17186 -2.48699,-1.7578 -4.25781,-1.75782 -2.00522,2e-5 -3.61329,0.56643 -4.82422,1.69922 -1.19792,1.13283 -1.88803,2.72788 -2.07031,4.78516 l 12.8125,-0.0195"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3664" />
|
||||
<path
|
||||
d="m 363.258,303.70059 c 0.89841,-1.61456 1.97263,-2.80597 3.22265,-3.57422 1.24998,-0.7682 2.72133,-1.15232 4.41406,-1.15234 2.27862,2e-5 4.03643,0.8008 5.27344,2.40234 1.23695,1.58856 1.85544,3.85419 1.85547,6.79688 l 0,13.20312 -3.61328,0 0,-13.08593 c -3e-5,-2.09634 -0.37113,-3.65233 -1.11328,-4.66797 -0.74222,-1.01561 -1.87503,-1.52342 -3.39844,-1.52344 -1.862,2e-5 -3.33336,0.61851 -4.41406,1.85547 -1.08075,1.23699 -1.62112,2.92319 -1.6211,5.05859 l 0,12.36328 -3.61328,0 0,-13.08593 c -10e-6,-2.10936 -0.37111,-3.66535 -1.11328,-4.66797 -0.7422,-1.01561 -1.88803,-1.52342 -3.4375,-1.52344 -1.83595,2e-5 -3.29428,0.62502 -4.375,1.875 -1.08074,1.23699 -1.6211,2.91668 -1.62109,5.03906 l 0,12.36328 -3.61328,0 0,-21.875 3.61328,0 0,3.39844 c 0.8203,-1.34113 1.80337,-2.33071 2.94922,-2.96875 1.14582,-0.638 2.50649,-0.95701 4.08203,-0.95703 1.58852,2e-5 2.93618,0.40367 4.04297,1.21094 1.11977,0.80731 1.94659,1.97918 2.48047,3.51562"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3666" />
|
||||
<path
|
||||
d="m 397.9455,290.98575 3.59375,0 0,30.39062 -3.59375,0 0,-30.39062"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3668" />
|
||||
<path
|
||||
d="m 417.51581,302.0209 c -1.9271,2e-5 -3.45053,0.75523 -4.57031,2.26563 -1.1198,1.49741 -1.6797,3.5547 -1.67969,6.17187 -10e-6,2.6172 0.55338,4.681 1.66015,6.19141 1.11979,1.4974 2.64973,2.2461 4.58985,2.24609 1.91405,1e-5 3.43097,-0.7552 4.55078,-2.26562 1.11977,-1.51041 1.67967,-3.5677 1.67969,-6.17188 -2e-5,-2.59113 -0.55992,-4.64191 -1.67969,-6.15234 -1.11981,-1.52342 -2.63673,-2.28514 -4.55078,-2.28516 m 0,-3.04687 c 3.12498,2e-5 5.57941,1.01565 7.36328,3.04687 1.78383,2.03127 2.67576,4.84377 2.67578,8.4375 -2e-5,3.58074 -0.89195,6.39324 -2.67578,8.4375 -1.78387,2.03125 -4.2383,3.04688 -7.36328,3.04688 -3.13803,0 -5.59897,-1.01563 -7.38281,-3.04688 -1.77084,-2.04426 -2.65626,-4.85676 -2.65625,-8.4375 -10e-6,-3.59373 0.88541,-6.40623 2.65625,-8.4375 1.78384,-2.03122 4.24478,-3.04685 7.38281,-3.04687"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3670" />
|
||||
<path
|
||||
d="m 443.43378,310.38028 c -2.90366,10e-6 -4.91538,0.33204 -6.03516,0.99609 -1.1198,0.66408 -1.67969,1.79689 -1.67969,3.39844 0,1.27605 0.41666,2.29167 1.25,3.04688 0.84635,0.74219 1.99218,1.11328 3.4375,1.11328 1.99218,0 3.58723,-0.70312 4.78516,-2.10938 1.21092,-1.41926 1.81639,-3.30077 1.81641,-5.64453 l 0,-0.80078 -3.57422,0 m 7.16797,-1.48438 0,12.48047 -3.59375,0 0,-3.32031 c -0.82033,1.32813 -1.84247,2.3112 -3.06641,2.94922 -1.22397,0.625 -2.72137,0.9375 -4.49219,0.9375 -2.23959,0 -4.02344,-0.625 -5.35156,-1.875 -1.31511,-1.26302 -1.97266,-2.94921 -1.97266,-5.05859 0,-2.46093 0.82031,-4.3164 2.46094,-5.56641 1.65364,-1.24999 4.11457,-1.87499 7.38281,-1.875 l 5.03907,0 0,-0.35156 c -2e-5,-1.65363 -0.5469,-2.92967 -1.64063,-3.82813 -1.08074,-0.91144 -2.60418,-1.36717 -4.57031,-1.36719 -1.25001,2e-5 -2.46746,0.14976 -3.65235,0.44922 -1.1849,0.2995 -2.32422,0.74872 -3.41796,1.34766 l 0,-3.32031 c 1.31509,-0.50779 2.59113,-0.8854 3.82812,-1.13282 1.23697,-0.26039 2.4414,-0.3906 3.61328,-0.39062 3.16405,2e-5 5.52733,0.82033 7.08985,2.46094 1.56248,1.64064 2.34372,4.12762 2.34375,7.46093"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3672" />
|
||||
<path
|
||||
d="m 472.41815,302.82169 0,-11.83594 3.59375,0 0,30.39062 -3.59375,0 0,-3.28125 c -0.75522,1.30209 -1.71225,2.27214 -2.87109,2.91016 -1.14585,0.625 -2.52606,0.9375 -4.14063,0.9375 -2.64323,0 -4.79818,-1.05469 -6.46484,-3.16406 -1.65365,-2.10937 -2.48047,-4.88281 -2.48047,-8.32032 0,-3.43748 0.82682,-6.21092 2.48047,-8.32031 1.66666,-2.10935 3.82161,-3.16404 6.46484,-3.16406 1.61457,2e-5 2.99478,0.31903 4.14063,0.95703 1.15884,0.62502 2.11587,1.58856 2.87109,2.89063 m -12.24609,7.63671 c -10e-6,2.64324 0.54036,4.72006 1.62109,6.23047 1.09374,1.4974 2.59114,2.2461 4.49219,2.2461 1.90103,0 3.39842,-0.7487 4.49219,-2.2461 1.09373,-1.51041 1.6406,-3.58723 1.64062,-6.23047 -2e-5,-2.64321 -0.54689,-4.71352 -1.64062,-6.21093 -1.09377,-1.5104 -2.59116,-2.26561 -4.49219,-2.26563 -1.90105,2e-5 -3.39845,0.75523 -4.49219,2.26563 -1.08073,1.49741 -1.6211,3.56772 -1.62109,6.21093"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3674" />
|
||||
<path
|
||||
d="m 483.41425,299.50137 3.59375,0 0,21.875 -3.59375,0 0,-21.875 m 0,-8.51562 3.59375,0 0,4.55078 -3.59375,0 0,-4.55078"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3676" />
|
||||
<path
|
||||
d="m 512.69159,308.17325 0,13.20312 -3.59375,0 0,-13.08593 c -2e-5,-2.0703 -0.40366,-3.61978 -1.21094,-4.64844 -0.80731,-1.02863 -2.01824,-1.54295 -3.63281,-1.54297 -1.94012,2e-5 -3.47006,0.61851 -4.58984,1.85547 -1.1198,1.23699 -1.6797,2.92319 -1.67969,5.05859 l 0,12.36328 -3.61328,0 0,-21.875 3.61328,0 0,3.39844 c 0.85937,-1.31508 1.86848,-2.29816 3.02734,-2.94922 1.17187,-0.65102 2.51952,-0.97654 4.04297,-0.97656 2.513,2e-5 4.41404,0.78127 5.70313,2.34375 1.28904,1.5495 1.93357,3.83465 1.93359,6.85547"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3678" />
|
||||
<path
|
||||
d="m 534.29315,310.18497 c -2e-5,-2.60416 -0.54038,-4.62238 -1.62109,-6.05469 -1.06773,-1.43227 -2.57163,-2.14842 -4.51172,-2.14844 -1.92709,2e-5 -3.431,0.71617 -4.51172,2.14844 -1.06771,1.43231 -1.60157,3.45053 -1.60156,6.05469 -10e-6,2.59115 0.53385,4.60287 1.60156,6.03515 1.08072,1.4323 2.58463,2.14844 4.51172,2.14844 1.94009,0 3.44399,-0.71614 4.51172,-2.14844 1.08071,-1.43228 1.62107,-3.444 1.62109,-6.03515 m 3.59375,8.47656 c -2e-5,3.72396 -0.82684,6.49088 -2.48047,8.30078 -1.65366,1.82291 -4.18621,2.73437 -7.59765,2.73438 -1.26303,-10e-6 -2.45444,-0.0977 -3.57422,-0.29297 -1.1198,-0.1823 -2.20704,-0.46876 -3.26172,-0.85938 l 0,-3.49609 c 1.05468,0.57291 2.09635,0.99609 3.125,1.26953 1.02864,0.27343 2.07681,0.41015 3.14453,0.41016 2.35676,-10e-6 4.12108,-0.6185 5.29297,-1.85547 1.17186,-1.22396 1.75779,-3.07943 1.75781,-5.56641 l 0,-1.77734 c -0.7422,1.28906 -1.69272,2.2526 -2.85156,2.89062 -1.15887,0.63802 -2.54559,0.95703 -4.16016,0.95703 -2.6823,0 -4.84375,-1.02213 -6.48437,-3.0664 -1.64063,-2.04427 -2.46094,-4.7526 -2.46094,-8.125 0,-3.38541 0.82031,-6.10025 2.46094,-8.14453 1.64062,-2.04425 3.80207,-3.06639 6.48437,-3.06641 1.61457,2e-5 3.00129,0.31903 4.16016,0.95703 1.15884,0.63804 2.10936,1.60158 2.85156,2.89063 l 0,-3.32032 3.59375,0 0,19.16016"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3680" />
|
||||
<path
|
||||
d="m 561.57831,293.29044 0,6.21093 7.40234,0 0,2.79297 -7.40234,0 0,11.875 c -10e-6,1.78386 0.24088,2.92969 0.72265,3.4375 0.49479,0.50782 1.49088,0.76172 2.98829,0.76172 l 3.6914,0 0,3.00781 -3.6914,0 c -2.77345,0 -4.68751,-0.51432 -5.74219,-1.54297 -1.05469,-1.04166 -1.58204,-2.92968 -1.58203,-5.66406 l 0,-11.875 -2.63672,0 0,-2.79297 2.63672,0 0,-6.21093 3.61328,0"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3682" />
|
||||
<path
|
||||
d="m 591.91034,308.17325 0,13.20312 -3.59375,0 0,-13.08593 c -2e-5,-2.0703 -0.40366,-3.61978 -1.21094,-4.64844 -0.80731,-1.02863 -2.01824,-1.54295 -3.63281,-1.54297 -1.94012,2e-5 -3.47006,0.61851 -4.58984,1.85547 -1.1198,1.23699 -1.6797,2.92319 -1.67969,5.05859 l 0,12.36328 -3.61328,0 0,-30.39062 3.61328,0 0,11.91406 c 0.85937,-1.31508 1.86848,-2.29816 3.02734,-2.94922 1.17187,-0.65102 2.51952,-0.97654 4.04297,-0.97656 2.513,2e-5 4.41404,0.78127 5.70313,2.34375 1.28904,1.5495 1.93357,3.83465 1.93359,6.85547"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3684" />
|
||||
<path
|
||||
d="m 617.82831,309.54044 0,1.75781 -16.52344,0 c 0.15624,2.47396 0.89843,4.36198 2.22656,5.66406 1.34114,1.28907 3.20312,1.9336 5.58594,1.93359 1.38019,1e-5 2.71483,-0.16926 4.00391,-0.50781 1.30206,-0.33854 2.59112,-0.84635 3.86718,-1.52344 l 0,3.39844 c -1.28908,0.54688 -2.61069,0.96354 -3.96484,1.25 -1.35418,0.28646 -2.72788,0.42969 -4.12109,0.42969 -3.4896,0 -6.25652,-1.01563 -8.30078,-3.04688 -2.03126,-2.03124 -3.04688,-4.77863 -3.04688,-8.24218 0,-3.58072 0.96354,-6.41926 2.89063,-8.51563 1.94009,-2.10935 4.55077,-3.16404 7.83203,-3.16406 2.94269,2e-5 5.26691,0.95054 6.97265,2.85156 1.71873,1.88804 2.57811,4.45965 2.57813,7.71485 m -3.59375,-1.05469 c -0.0261,-1.96613 -0.57945,-3.53514 -1.66016,-4.70703 -1.06772,-1.17186 -2.48699,-1.7578 -4.25781,-1.75782 -2.00522,2e-5 -3.61329,0.56643 -4.82422,1.69922 -1.19792,1.13283 -1.88803,2.72788 -2.07031,4.78516 l 12.8125,-0.0195"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3686" />
|
||||
<path
|
||||
d="m -18.773254,345.4584 0,10.95704 4.960937,0 c 1.835923,1e-5 3.255192,-0.47525 4.2578126,-1.42579 1.0025861,-0.9505 1.5038877,-2.30466 1.5039063,-4.0625 -1.86e-5,-1.74476 -0.5013202,-3.09242 -1.5039063,-4.04296 -1.0026206,-0.9505 -2.4218896,-1.42576 -4.2578126,-1.42579 l -4.960937,0 m -3.945313,-3.24218 8.90625,0 c 3.268213,3e-5 5.7356586,0.74221 7.4023439,2.22656 1.6796655,1.47138 2.5195085,3.63284 2.5195312,6.48437 -2.27e-5,2.87763 -0.8398657,5.0521 -2.5195312,6.52344 -1.6666853,1.47137 -4.1341309,2.20705 -7.4023439,2.20703 l -4.960937,0 0,11.71875 -3.945313,0 0,-29.16015"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3688" />
|
||||
<path
|
||||
d="m 1.4220581,342.21622 16.7578129,0 0,3.32031 -12.8125004,0 0,8.59375 11.5625004,0 0,3.32031 -11.5625004,0 0,13.92578 -3.9453125,0 0,-29.16015"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3690" />
|
||||
<path
|
||||
d="m 28.414246,345.4584 0,22.67579 4.765625,0 c 4.02342,0 6.966126,-0.91146 8.828125,-2.73438 1.874976,-1.82291 2.812475,-4.70051 2.8125,-8.63281 -2.5e-5,-3.90623 -0.937524,-6.7643 -2.8125,-8.57422 -1.861999,-1.82289 -4.804705,-2.73435 -8.828125,-2.73438 l -4.765625,0 m -3.945313,-3.24218 8.105469,0 c 5.651024,3e-5 9.798155,1.17841 12.441406,3.53515 2.643202,2.34378 3.964815,6.01565 3.964844,11.01563 -2.9e-5,5.02605 -1.328152,8.71745 -3.984375,11.07422 -2.656272,2.35677 -6.796893,3.53515 -12.421875,3.53515 l -8.105469,0 0,-29.16015"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3692" />
|
||||
<path
|
||||
d="m 77.769714,360.38028 c -2.903656,10e-6 -4.915373,0.33204 -6.035156,0.99609 -1.119798,0.66408 -1.679693,1.79689 -1.679687,3.39844 -6e-6,1.27605 0.41666,2.29167 1.25,3.04688 0.846346,0.74219 1.992178,1.11328 3.4375,1.11328 1.992174,0 3.587225,-0.70312 4.785156,-2.10938 1.210921,-1.41926 1.816389,-3.30077 1.816406,-5.64453 l 0,-0.80078 -3.574219,0 m 7.167969,-1.48438 0,12.48047 -3.59375,0 0,-3.32031 c -0.820329,1.32813 -1.842463,2.3112 -3.066406,2.94922 -1.223971,0.625 -2.721366,0.9375 -4.492188,0.9375 -2.23959,0 -4.023443,-0.625 -5.351562,-1.875 -1.315107,-1.26302 -1.972659,-2.94921 -1.972656,-5.05859 -3e-6,-2.46093 0.820309,-4.3164 2.460937,-5.56641 1.653639,-1.24999 4.114574,-1.87499 7.382813,-1.875 l 5.039062,0 0,-0.35156 c -1.7e-5,-1.65363 -0.546892,-2.92967 -1.640625,-3.82813 -1.080744,-0.91144 -2.60418,-1.36717 -4.570312,-1.36719 -1.25001,2e-5 -2.467457,0.14976 -3.652344,0.44922 -1.184902,0.2995 -2.324224,0.74872 -3.417969,1.34766 l 0,-3.32031 c 1.315099,-0.50779 2.591139,-0.8854 3.828125,-1.13282 1.23697,-0.26039 2.441396,-0.3906 3.613281,-0.39062 3.164048,2e-5 5.527327,0.82033 7.089844,2.46094 1.56248,1.64064 2.343729,4.12762 2.34375,7.46093"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3694" />
|
||||
<path
|
||||
d="m 105.03534,352.86075 c -0.40366,-0.23436 -0.84637,-0.40363 -1.32813,-0.50781 -0.46876,-0.11717 -0.98959,-0.17577 -1.5625,-0.17579 -2.03126,2e-5 -3.593756,0.66409 -4.687496,1.99219 -1.080737,1.31512 -1.621101,3.20965 -1.621093,5.6836 l 0,11.52343 -3.613282,0 0,-21.875 3.613282,0 0,3.39844 c 0.7552,-1.3281 1.738272,-2.31118 2.949218,-2.94922 1.210926,-0.65102 2.682281,-0.97654 4.414061,-0.97656 0.24738,2e-5 0.52082,0.0195 0.82031,0.0586 0.29947,0.0261 0.6315,0.0716 0.9961,0.13672 l 0.0195,3.69141"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3696" />
|
||||
<path
|
||||
d="m 112.39862,343.29044 0,6.21093 7.40234,0 0,2.79297 -7.40234,0 0,11.875 c -10e-6,1.78386 0.24088,2.92969 0.72266,3.4375 0.49478,0.50782 1.49087,0.76172 2.98828,0.76172 l 3.6914,0 0,3.00781 -3.6914,0 c -2.77345,0 -4.68751,-0.51432 -5.74219,-1.54297 -1.05469,-1.04166 -1.58203,-2.92968 -1.58203,-5.66406 l 0,-11.875 -2.63672,0 0,-2.79297 2.63672,0 0,-6.21093 3.61328,0"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3698" />
|
||||
<path
|
||||
d="m 122.45721,349.50137 3.59375,0 4.49219,17.07032 4.47266,-17.07032 4.23828,0 4.49219,17.07032 4.47265,-17.07032 3.59375,0 -5.72265,21.875 -4.23828,0 -4.70704,-17.92968 -4.72656,17.92968 -4.23828,0 -5.72266,-21.875"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3700" />
|
||||
<path
|
||||
d="m 165.758,352.0209 c -1.9271,2e-5 -3.45053,0.75523 -4.57032,2.26563 -1.1198,1.49741 -1.67969,3.5547 -1.67968,6.17187 -1e-5,2.6172 0.55337,4.681 1.66015,6.19141 1.11978,1.4974 2.64973,2.2461 4.58985,2.24609 1.91404,1e-5 3.43097,-0.7552 4.55078,-2.26562 1.11977,-1.51041 1.67967,-3.5677 1.67968,-6.17188 -1e-5,-2.59113 -0.55991,-4.64191 -1.67968,-6.15234 -1.11981,-1.52342 -2.63674,-2.28514 -4.55078,-2.28516 m 0,-3.04687 c 3.12498,2e-5 5.5794,1.01565 7.36328,3.04687 1.78383,2.03127 2.67576,4.84377 2.67578,8.4375 -2e-5,3.58074 -0.89195,6.39324 -2.67578,8.4375 -1.78388,2.03125 -4.2383,3.04688 -7.36328,3.04688 -3.13803,0 -5.59897,-1.01563 -7.38282,-3.04688 -1.77083,-2.04426 -2.65625,-4.85676 -2.65625,-8.4375 0,-3.59373 0.88542,-6.40623 2.65625,-8.4375 1.78385,-2.03122 4.24479,-3.04685 7.38282,-3.04687"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3702" />
|
||||
<path
|
||||
d="m 194.41034,352.86075 c -0.40366,-0.23436 -0.84637,-0.40363 -1.32813,-0.50781 -0.46876,-0.11717 -0.98959,-0.17577 -1.5625,-0.17579 -2.03126,2e-5 -3.59376,0.66409 -4.6875,1.99219 -1.08073,1.31512 -1.6211,3.20965 -1.62109,5.6836 l 0,11.52343 -3.61328,0 0,-21.875 3.61328,0 0,3.39844 c 0.7552,-1.3281 1.73827,-2.31118 2.94922,-2.94922 1.21093,-0.65102 2.68228,-0.97654 4.41406,-0.97656 0.24738,2e-5 0.52082,0.0195 0.82031,0.0586 0.29947,0.0261 0.6315,0.0716 0.9961,0.13672 l 0.0195,3.69141"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3704" />
|
||||
<path
|
||||
d="m 198.08221,340.98575 3.61329,0 0,17.94922 10.72265,-9.4336 4.58985,0 -11.60157,10.23438 12.08985,11.64062 -4.6875,0 -11.11328,-10.68359 0,10.68359 -3.61329,0 0,-30.39062"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3706" />
|
||||
<path
|
||||
d="m 222.34003,366.41544 4.12109,0 0,3.35937 -3.20312,6.25 -2.51954,0 1.60157,-6.25 0,-3.35937"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3708" />
|
||||
<path
|
||||
d="m 250.36737,368.09512 0,11.60157 -3.61328,0 0,-30.19532 3.61328,0 0,3.32032 c 0.7552,-1.30207 1.70572,-2.26561 2.85156,-2.89063 1.15885,-0.638 2.53905,-0.95701 4.14063,-0.95703 2.65623,2e-5 4.81118,1.05471 6.46484,3.16406 1.66665,2.10939 2.49998,4.88283 2.5,8.32031 -2e-5,3.43751 -0.83335,6.21095 -2.5,8.32032 -1.65366,2.10937 -3.80861,3.16406 -6.46484,3.16406 -1.60158,0 -2.98178,-0.3125 -4.14063,-0.9375 -1.14584,-0.63802 -2.09636,-1.60807 -2.85156,-2.91016 m 12.22656,-7.63672 c -2e-5,-2.64321 -0.54689,-4.71352 -1.64062,-6.21093 -1.08075,-1.5104 -2.57163,-2.26561 -4.47266,-2.26563 -1.90105,2e-5 -3.39845,0.75523 -4.49219,2.26563 -1.08073,1.49741 -1.6211,3.56772 -1.62109,6.21093 -1e-5,2.64324 0.54036,4.72006 1.62109,6.23047 1.09374,1.4974 2.59114,2.2461 4.49219,2.2461 1.90103,0 3.39191,-0.7487 4.47266,-2.2461 1.09373,-1.51041 1.6406,-3.58723 1.64062,-6.23047"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3710" />
|
||||
<path
|
||||
d="m 272.28143,340.98575 3.59375,0 0,30.39062 -3.59375,0 0,-30.39062"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3712" />
|
||||
<path
|
||||
d="m 302.08612,359.54044 0,1.75781 -16.52344,0 c 0.15625,2.47396 0.89843,4.36198 2.22657,5.66406 1.34113,1.28907 3.20311,1.9336 5.58593,1.93359 1.3802,1e-5 2.71483,-0.16926 4.00391,-0.50781 1.30206,-0.33854 2.59112,-0.84635 3.86719,-1.52344 l 0,3.39844 c -1.28909,0.54688 -2.6107,0.96354 -3.96485,1.25 -1.35418,0.28646 -2.72788,0.42969 -4.12109,0.42969 -3.48959,0 -6.25652,-1.01563 -8.30078,-3.04688 -2.03126,-2.03124 -3.04688,-4.77863 -3.04688,-8.24218 0,-3.58072 0.96354,-6.41926 2.89063,-8.51563 1.9401,-2.10935 4.55077,-3.16404 7.83203,-3.16406 2.94269,2e-5 5.26691,0.95054 6.97266,2.85156 1.71872,1.88804 2.5781,4.45965 2.57812,7.71485 m -3.59375,-1.05469 c -0.0261,-1.96613 -0.57944,-3.53514 -1.66016,-4.70703 -1.06772,-1.17186 -2.48699,-1.7578 -4.25781,-1.75782 -2.00522,2e-5 -3.61329,0.56643 -4.82422,1.69922 -1.19792,1.13283 -1.88802,2.72788 -2.07031,4.78516 l 12.8125,-0.0195"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3714" />
|
||||
<path
|
||||
d="m 317.92596,360.38028 c -2.90365,10e-6 -4.91537,0.33204 -6.03515,0.99609 -1.1198,0.66408 -1.6797,1.79689 -1.67969,3.39844 -10e-6,1.27605 0.41666,2.29167 1.25,3.04688 0.84635,0.74219 1.99218,1.11328 3.4375,1.11328 1.99218,0 3.58723,-0.70312 4.78516,-2.10938 1.21092,-1.41926 1.81639,-3.30077 1.8164,-5.64453 l 0,-0.80078 -3.57422,0 m 7.16797,-1.48438 0,12.48047 -3.59375,0 0,-3.32031 c -0.82033,1.32813 -1.84246,2.3112 -3.0664,2.94922 -1.22397,0.625 -2.72137,0.9375 -4.49219,0.9375 -2.23959,0 -4.02344,-0.625 -5.35156,-1.875 -1.31511,-1.26302 -1.97266,-2.94921 -1.97266,-5.05859 0,-2.46093 0.82031,-4.3164 2.46094,-5.56641 1.65364,-1.24999 4.11457,-1.87499 7.38281,-1.875 l 5.03906,0 0,-0.35156 c -10e-6,-1.65363 -0.54689,-2.92967 -1.64062,-3.82813 -1.08075,-0.91144 -2.60418,-1.36717 -4.57031,-1.36719 -1.25001,2e-5 -2.46746,0.14976 -3.65235,0.44922 -1.1849,0.2995 -2.32422,0.74872 -3.41797,1.34766 l 0,-3.32031 c 1.3151,-0.50779 2.59114,-0.8854 3.82813,-1.13282 1.23697,-0.26039 2.44139,-0.3906 3.61328,-0.39062 3.16405,2e-5 5.52733,0.82033 7.08984,2.46094 1.56248,1.64064 2.34373,4.12762 2.34375,7.46093"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3716" />
|
||||
<path
|
||||
d="m 346.46112,350.1459 0,3.39844 c -1.01564,-0.52081 -2.07033,-0.91144 -3.16406,-1.17187 -1.09377,-0.2604 -2.22658,-0.39061 -3.39844,-0.39063 -1.78386,2e-5 -3.12501,0.27346 -4.02344,0.82031 -0.88542,0.5469 -1.32813,1.36721 -1.32812,2.46094 -10e-6,0.83335 0.319,1.4909 0.95703,1.97266 0.63801,0.46876 1.92056,0.91798 3.84766,1.34765 l 1.23046,0.27344 c 2.55207,0.54689 4.36197,1.32163 5.42969,2.32422 1.08071,0.98959 1.62108,2.37631 1.6211,4.16016 -2e-5,2.03125 -0.80731,3.63932 -2.42188,4.82422 -1.60158,1.18489 -3.80861,1.77734 -6.62109,1.77734 -1.17189,0 -2.39584,-0.11719 -3.67188,-0.35156 -1.26302,-0.22136 -2.59766,-0.5599 -4.0039,-1.01563 l 0,-3.71094 c 1.32812,0.69011 2.63671,1.21095 3.92578,1.5625 1.28905,0.33855 2.56509,0.50782 3.82812,0.50782 1.6927,0 2.99478,-0.28646 3.90625,-0.85938 0.91145,-0.58593 1.36717,-1.40624 1.36719,-2.46094 -2e-5,-0.97655 -0.33205,-1.72525 -0.99609,-2.24609 -0.65106,-0.52082 -2.08986,-1.02213 -4.31641,-1.50391 l -1.25,-0.29296 c -2.22657,-0.46874 -3.83464,-1.18489 -4.82422,-2.14844 -0.98959,-0.97655 -1.48438,-2.31119 -1.48437,-4.00391 -10e-6,-2.05727 0.72916,-3.64581 2.1875,-4.76562 1.45832,-1.11977 3.52863,-1.67967 6.21093,-1.67969 1.32812,2e-5 2.57811,0.0977 3.75,0.29297 1.17186,0.19533 2.25259,0.4883 3.24219,0.8789"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3718" />
|
||||
<path
|
||||
d="m 372.08612,359.54044 0,1.75781 -16.52344,0 c 0.15625,2.47396 0.89843,4.36198 2.22657,5.66406 1.34113,1.28907 3.20311,1.9336 5.58593,1.93359 1.3802,1e-5 2.71483,-0.16926 4.00391,-0.50781 1.30206,-0.33854 2.59112,-0.84635 3.86719,-1.52344 l 0,3.39844 c -1.28909,0.54688 -2.6107,0.96354 -3.96485,1.25 -1.35418,0.28646 -2.72788,0.42969 -4.12109,0.42969 -3.48959,0 -6.25652,-1.01563 -8.30078,-3.04688 -2.03126,-2.03124 -3.04688,-4.77863 -3.04688,-8.24218 0,-3.58072 0.96354,-6.41926 2.89063,-8.51563 1.9401,-2.10935 4.55077,-3.16404 7.83203,-3.16406 2.94269,2e-5 5.26691,0.95054 6.97266,2.85156 1.71872,1.88804 2.5781,4.45965 2.57812,7.71485 m -3.59375,-1.05469 c -0.0261,-1.96613 -0.57944,-3.53514 -1.66016,-4.70703 -1.06772,-1.17186 -2.48699,-1.7578 -4.25781,-1.75782 -2.00522,2e-5 -3.61329,0.56643 -4.82422,1.69922 -1.19792,1.13283 -1.88802,2.72788 -2.07031,4.78516 l 12.8125,-0.0195"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3720" />
|
||||
<path
|
||||
d="m 406.46112,350.34122 0,3.35937 c -1.01564,-0.55988 -2.03778,-0.97654 -3.06641,-1.25 -1.01564,-0.28644 -2.04428,-0.42967 -3.08593,-0.42969 -2.33074,2e-5 -4.14064,0.74221 -5.42969,2.22657 -1.28907,1.47137 -1.9336,3.54168 -1.93359,6.21093 -10e-6,2.66928 0.64452,4.7461 1.93359,6.23047 1.28905,1.47136 3.09895,2.20704 5.42969,2.20703 1.04165,1e-5 2.07029,-0.13671 3.08593,-0.41015 1.02863,-0.28646 2.05077,-0.70963 3.06641,-1.26953 l 0,3.32031 c -1.00262,0.46875 -2.04429,0.82031 -3.125,1.05469 -1.06772,0.23437 -2.20704,0.35156 -3.41797,0.35156 -3.29428,0 -5.91146,-1.03516 -7.85156,-3.10547 -1.94011,-2.07031 -2.91016,-4.86327 -2.91016,-8.37891 0,-3.56769 0.97656,-6.37368 2.92969,-8.41796 1.96614,-2.04425 4.65494,-3.06639 8.06641,-3.06641 1.10675,2e-5 2.18748,0.11721 3.24218,0.35156 1.05467,0.22138 2.07681,0.55992 3.06641,1.01563"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3722" />
|
||||
<path
|
||||
d="m 430.93378,358.17325 0,13.20312 -3.59375,0 0,-13.08593 c -2e-5,-2.0703 -0.40367,-3.61978 -1.21094,-4.64844 -0.80731,-1.02863 -2.01824,-1.54295 -3.63281,-1.54297 -1.94012,2e-5 -3.47007,0.61851 -4.58985,1.85547 -1.1198,1.23699 -1.67969,2.92319 -1.67968,5.05859 l 0,12.36328 -3.61329,0 0,-30.39062 3.61329,0 0,11.91406 c 0.85936,-1.31508 1.86848,-2.29816 3.02734,-2.94922 1.17186,-0.65102 2.51952,-0.97654 4.04297,-0.97656 2.513,2e-5 4.41404,0.78127 5.70312,2.34375 1.28904,1.5495 1.93357,3.83465 1.9336,6.85547"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3724" />
|
||||
<path
|
||||
d="m 456.85175,359.54044 0,1.75781 -16.52344,0 c 0.15624,2.47396 0.89843,4.36198 2.22656,5.66406 1.34114,1.28907 3.20311,1.9336 5.58594,1.93359 1.38019,1e-5 2.71483,-0.16926 4.0039,-0.50781 1.30207,-0.33854 2.59113,-0.84635 3.86719,-1.52344 l 0,3.39844 c -1.28908,0.54688 -2.61069,0.96354 -3.96484,1.25 -1.35418,0.28646 -2.72788,0.42969 -4.1211,0.42969 -3.48959,0 -6.25651,-1.01563 -8.30078,-3.04688 -2.03125,-2.03124 -3.04687,-4.77863 -3.04687,-8.24218 0,-3.58072 0.96354,-6.41926 2.89062,-8.51563 1.9401,-2.10935 4.55077,-3.16404 7.83203,-3.16406 2.9427,2e-5 5.26691,0.95054 6.97266,2.85156 1.71873,1.88804 2.5781,4.45965 2.57813,7.71485 m -3.59375,-1.05469 c -0.0261,-1.96613 -0.57945,-3.53514 -1.66016,-4.70703 -1.06773,-1.17186 -2.48699,-1.7578 -4.25781,-1.75782 -2.00522,2e-5 -3.61329,0.56643 -4.82422,1.69922 -1.19793,1.13283 -1.88803,2.72788 -2.07031,4.78516 l 12.8125,-0.0195"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3726" />
|
||||
<path
|
||||
d="m 478.49237,350.34122 0,3.35937 c -1.01564,-0.55988 -2.03778,-0.97654 -3.06641,-1.25 -1.01564,-0.28644 -2.04428,-0.42967 -3.08593,-0.42969 -2.33074,2e-5 -4.14064,0.74221 -5.42969,2.22657 -1.28907,1.47137 -1.9336,3.54168 -1.93359,6.21093 -10e-6,2.66928 0.64452,4.7461 1.93359,6.23047 1.28905,1.47136 3.09895,2.20704 5.42969,2.20703 1.04165,1e-5 2.07029,-0.13671 3.08593,-0.41015 1.02863,-0.28646 2.05077,-0.70963 3.06641,-1.26953 l 0,3.32031 c -1.00262,0.46875 -2.04429,0.82031 -3.125,1.05469 -1.06772,0.23437 -2.20704,0.35156 -3.41797,0.35156 -3.29428,0 -5.91146,-1.03516 -7.85156,-3.10547 -1.94011,-2.07031 -2.91016,-4.86327 -2.91016,-8.37891 0,-3.56769 0.97656,-6.37368 2.92969,-8.41796 1.96614,-2.04425 4.65494,-3.06639 8.06641,-3.06641 1.10675,2e-5 2.18748,0.11721 3.24218,0.35156 1.05467,0.22138 2.07681,0.55992 3.06641,1.01563"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3728" />
|
||||
<path
|
||||
d="m 484.64471,340.98575 3.61329,0 0,17.94922 10.72265,-9.4336 4.58985,0 -11.60157,10.23438 12.08985,11.64062 -4.6875,0 -11.11328,-10.68359 0,10.68359 -3.61329,0 0,-30.39062"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3730" />
|
||||
<path
|
||||
d="m 529.8205,373.40762 c -1.01564,2.60417 -2.00522,4.30338 -2.96875,5.09766 -0.96356,0.79426 -2.25262,1.1914 -3.86719,1.19141 l -2.8711,0 0,-3.00782 2.10938,0 c 0.98958,0 1.7578,-0.23438 2.30469,-0.70312 0.54686,-0.46876 1.15233,-1.57553 1.8164,-3.32031 l 0.64453,-1.64063 -8.84765,-21.52344 3.80859,0 6.83594,17.10938 6.83594,-17.10938 3.80859,0 -9.60937,23.90625"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3732" />
|
||||
<path
|
||||
d="m 552.86737,352.0209 c -1.92709,2e-5 -3.45053,0.75523 -4.57031,2.26563 -1.1198,1.49741 -1.6797,3.5547 -1.67969,6.17187 -1e-5,2.6172 0.55338,4.681 1.66016,6.19141 1.11978,1.4974 2.64973,2.2461 4.58984,2.24609 1.91405,1e-5 3.43097,-0.7552 4.55078,-2.26562 1.11978,-1.51041 1.67967,-3.5677 1.67969,-6.17188 -2e-5,-2.59113 -0.55991,-4.64191 -1.67969,-6.15234 -1.11981,-1.52342 -2.63673,-2.28514 -4.55078,-2.28516 m 0,-3.04687 c 3.12499,2e-5 5.57941,1.01565 7.36328,3.04687 1.78383,2.03127 2.67576,4.84377 2.67578,8.4375 -2e-5,3.58074 -0.89195,6.39324 -2.67578,8.4375 -1.78387,2.03125 -4.23829,3.04688 -7.36328,3.04688 -3.13803,0 -5.59896,-1.01563 -7.38281,-3.04688 -1.77084,-2.04426 -2.65625,-4.85676 -2.65625,-8.4375 0,-3.59373 0.88541,-6.40623 2.65625,-8.4375 1.78385,-2.03122 4.24478,-3.04685 7.38281,-3.04687"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3734" />
|
||||
<path
|
||||
d="m 568.47284,362.74356 0,-13.24219 3.59375,0 0,13.10547 c -10e-6,2.07032 0.40364,3.62631 1.21094,4.66797 0.80728,1.02865 2.01822,1.54297 3.63281,1.54297 1.94009,0 3.47004,-0.61849 4.58984,-1.85547 1.1328,-1.23697 1.6992,-2.92317 1.69922,-5.05859 l 0,-12.40235 3.59375,0 0,21.875 -3.59375,0 0,-3.35937 c -0.87241,1.32813 -1.88804,2.31771 -3.04687,2.96875 -1.14585,0.63802 -2.48048,0.95703 -4.00391,0.95703 -2.51303,0 -4.42058,-0.78125 -5.72266,-2.34375 -1.30208,-1.5625 -1.95312,-3.84765 -1.95312,-6.85547 m 9.04297,-13.76953 0,0"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3736" />
|
||||
<path
|
||||
d="m 606.91034,352.86075 c -0.40366,-0.23436 -0.84637,-0.40363 -1.32813,-0.50781 -0.46876,-0.11717 -0.98959,-0.17577 -1.5625,-0.17579 -2.03126,2e-5 -3.59376,0.66409 -4.6875,1.99219 -1.08073,1.31512 -1.6211,3.20965 -1.62109,5.6836 l 0,11.52343 -3.61328,0 0,-21.875 3.61328,0 0,3.39844 c 0.7552,-1.3281 1.73827,-2.31118 2.94922,-2.94922 1.21093,-0.65102 2.68228,-0.97654 4.41406,-0.97656 0.24738,2e-5 0.52082,0.0195 0.82031,0.0586 0.29947,0.0261 0.6315,0.0716 0.9961,0.13672 l 0.0195,3.69141"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3738" />
|
||||
<path
|
||||
d="m 176.89081,400.34122 0,3.35937 c -1.01565,-0.55988 -2.03778,-0.97654 -3.06641,-1.25 -1.01564,-0.28644 -2.04428,-0.42967 -3.08594,-0.42969 -2.33074,2e-5 -4.14063,0.74221 -5.42968,2.22657 -1.28907,1.47137 -1.9336,3.54168 -1.9336,6.21093 0,2.66928 0.64453,4.7461 1.9336,6.23047 1.28905,1.47136 3.09894,2.20704 5.42968,2.20703 1.04166,1e-5 2.0703,-0.13671 3.08594,-0.41015 1.02863,-0.28646 2.05076,-0.70963 3.06641,-1.26953 l 0,3.32031 c -1.00262,0.46875 -2.04429,0.82031 -3.125,1.05469 -1.06773,0.23437 -2.20705,0.35156 -3.41797,0.35156 -3.29428,0 -5.91147,-1.03516 -7.85156,-3.10547 -1.94011,-2.07031 -2.91016,-4.86327 -2.91016,-8.37891 0,-3.56769 0.97656,-6.37368 2.92969,-8.41796 1.96614,-2.04425 4.65494,-3.06639 8.0664,-3.06641 1.10676,2e-5 2.18749,0.11721 3.24219,0.35156 1.05467,0.22138 2.07681,0.55992 3.06641,1.01563"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3740" />
|
||||
<path
|
||||
d="m 191.65643,402.0209 c -1.92709,2e-5 -3.45053,0.75523 -4.57031,2.26563 -1.1198,1.49741 -1.67969,3.5547 -1.67969,6.17187 0,2.6172 0.55338,4.681 1.66016,6.19141 1.11978,1.4974 2.64973,2.2461 4.58984,2.24609 1.91405,1e-5 3.43098,-0.7552 4.55078,-2.26562 1.11978,-1.51041 1.67967,-3.5677 1.67969,-6.17188 -2e-5,-2.59113 -0.55991,-4.64191 -1.67969,-6.15234 -1.1198,-1.52342 -2.63673,-2.28514 -4.55078,-2.28516 m 0,-3.04687 c 3.12499,2e-5 5.57941,1.01565 7.36328,3.04687 1.78384,2.03127 2.67576,4.84377 2.67579,8.4375 -3e-5,3.58074 -0.89195,6.39324 -2.67579,8.4375 -1.78387,2.03125 -4.23829,3.04688 -7.36328,3.04688 -3.13803,0 -5.59896,-1.01563 -7.38281,-3.04688 -1.77084,-2.04426 -2.65625,-4.85676 -2.65625,-8.4375 0,-3.59373 0.88541,-6.40623 2.65625,-8.4375 1.78385,-2.03122 4.24478,-3.04685 7.38281,-3.04687"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3742" />
|
||||
<path
|
||||
d="m 225.81659,408.17325 0,13.20312 -3.59375,0 0,-13.08593 c -2e-5,-2.0703 -0.40366,-3.61978 -1.21094,-4.64844 -0.80731,-1.02863 -2.01824,-1.54295 -3.63281,-1.54297 -1.94012,2e-5 -3.47006,0.61851 -4.58984,1.85547 -1.1198,1.23699 -1.6797,2.92319 -1.67969,5.05859 l 0,12.36328 -3.61328,0 0,-21.875 3.61328,0 0,3.39844 c 0.85937,-1.31508 1.86848,-2.29816 3.02734,-2.94922 1.17187,-0.65102 2.51952,-0.97654 4.04297,-0.97656 2.513,2e-5 4.41404,0.78127 5.70313,2.34375 1.28904,1.5495 1.93357,3.83465 1.93359,6.85547"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3744" />
|
||||
<path
|
||||
d="m 250.6994,399.50137 0,21.875 -3.61328,0 0,-19.08203 -9.86328,0 0,19.08203 -3.61328,0 0,-19.08203 -3.4375,0 0,-2.79297 3.4375,0 0,-1.52343 c -10e-6,-2.38279 0.55989,-4.1406 1.67969,-5.27344 1.1328,-1.14581 2.86457,-1.71872 5.19531,-1.71875 l 3.61328,0 0,2.98828 -3.4375,0 c -1.28907,3e-5 -2.18751,0.26044 -2.69531,0.78125 -0.4948,0.52086 -0.7422,1.45836 -0.74219,2.8125 l 0,1.93359 13.47656,0 m -3.61328,-8.47656 3.61328,0 0,4.55078 -3.61328,0 0,-4.55078"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3746" />
|
||||
<path
|
||||
d="m 272.65253,410.18497 c -2e-5,-2.60416 -0.54039,-4.62238 -1.6211,-6.05469 -1.06772,-1.43227 -2.57163,-2.14842 -4.51172,-2.14844 -1.92709,2e-5 -3.43099,0.71617 -4.51171,2.14844 -1.06772,1.43231 -1.60157,3.45053 -1.60157,6.05469 0,2.59115 0.53385,4.60287 1.60157,6.03515 1.08072,1.4323 2.58462,2.14844 4.51171,2.14844 1.94009,0 3.444,-0.71614 4.51172,-2.14844 1.08071,-1.43228 1.62108,-3.444 1.6211,-6.03515 m 3.59375,8.47656 c -2e-5,3.72396 -0.82685,6.49088 -2.48047,8.30078 -1.65367,1.82291 -4.18621,2.73437 -7.59766,2.73438 -1.26303,-10e-6 -2.45443,-0.0977 -3.57422,-0.29297 -1.1198,-0.1823 -2.20703,-0.46876 -3.26172,-0.85938 l 0,-3.49609 c 1.05469,0.57291 2.09635,0.99609 3.125,1.26953 1.02864,0.27343 2.07682,0.41015 3.14454,0.41016 2.35675,-10e-6 4.12107,-0.6185 5.29296,-1.85547 1.17186,-1.22396 1.7578,-3.07943 1.75782,-5.56641 l 0,-1.77734 c -0.74221,1.28906 -1.69273,2.2526 -2.85157,2.89062 -1.15886,0.63802 -2.54558,0.95703 -4.16015,0.95703 -2.6823,0 -4.84376,-1.02213 -6.48438,-3.0664 -1.64062,-2.04427 -2.46094,-4.7526 -2.46093,-8.125 -10e-6,-3.38541 0.82031,-6.10025 2.46093,-8.14453 1.64062,-2.04425 3.80208,-3.06639 6.48438,-3.06641 1.61457,2e-5 3.00129,0.31903 4.16015,0.95703 1.15884,0.63804 2.10936,1.60158 2.85157,2.89063 l 0,-3.32032 3.59375,0 0,19.16016"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3748" />
|
||||
<path
|
||||
d="m 283.27753,412.74356 0,-13.24219 3.59375,0 0,13.10547 c -1e-5,2.07032 0.40364,3.62631 1.21093,4.66797 0.80729,1.02865 2.01822,1.54297 3.63282,1.54297 1.94009,0 3.47003,-0.61849 4.58984,-1.85547 1.1328,-1.23697 1.6992,-2.92317 1.69922,-5.05859 l 0,-12.40235 3.59375,0 0,21.875 -3.59375,0 0,-3.35937 c -0.87241,1.32813 -1.88804,2.31771 -3.04688,2.96875 -1.14584,0.63802 -2.48048,0.95703 -4.0039,0.95703 -2.51303,0 -4.42058,-0.78125 -5.72266,-2.34375 -1.30209,-1.5625 -1.95313,-3.84765 -1.95312,-6.85547 m 9.04297,-13.76953 0,0"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3750" />
|
||||
<path
|
||||
d="m 321.71503,402.86075 c -0.40367,-0.23436 -0.84637,-0.40363 -1.32813,-0.50781 -0.46876,-0.11717 -0.9896,-0.17577 -1.5625,-0.17579 -2.03126,2e-5 -3.59376,0.66409 -4.6875,1.99219 -1.08074,1.31512 -1.6211,3.20965 -1.62109,5.6836 l 0,11.52343 -3.61328,0 0,-21.875 3.61328,0 0,3.39844 c 0.7552,-1.3281 1.73827,-2.31118 2.94922,-2.94922 1.21092,-0.65102 2.68228,-0.97654 4.41406,-0.97656 0.24738,2e-5 0.52082,0.0195 0.82031,0.0586 0.29947,0.0261 0.6315,0.0716 0.9961,0.13672 l 0.0195,3.69141"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3752" />
|
||||
<path
|
||||
d="m 335.46503,410.38028 c -2.90366,10e-6 -4.91538,0.33204 -6.03516,0.99609 -1.1198,0.66408 -1.67969,1.79689 -1.67969,3.39844 0,1.27605 0.41666,2.29167 1.25,3.04688 0.84635,0.74219 1.99218,1.11328 3.4375,1.11328 1.99218,0 3.58723,-0.70312 4.78516,-2.10938 1.21092,-1.41926 1.81639,-3.30077 1.81641,-5.64453 l 0,-0.80078 -3.57422,0 m 7.16797,-1.48438 0,12.48047 -3.59375,0 0,-3.32031 c -0.82033,1.32813 -1.84247,2.3112 -3.06641,2.94922 -1.22397,0.625 -2.72137,0.9375 -4.49219,0.9375 -2.23959,0 -4.02344,-0.625 -5.35156,-1.875 -1.31511,-1.26302 -1.97266,-2.94921 -1.97266,-5.05859 0,-2.46093 0.82031,-4.3164 2.46094,-5.56641 1.65364,-1.24999 4.11457,-1.87499 7.38281,-1.875 l 5.03907,0 0,-0.35156 c -2e-5,-1.65363 -0.5469,-2.92967 -1.64063,-3.82813 -1.08074,-0.91144 -2.60418,-1.36717 -4.57031,-1.36719 -1.25001,2e-5 -2.46746,0.14976 -3.65235,0.44922 -1.1849,0.2995 -2.32422,0.74872 -3.41796,1.34766 l 0,-3.32031 c 1.31509,-0.50779 2.59113,-0.8854 3.82812,-1.13282 1.23697,-0.26039 2.4414,-0.3906 3.61328,-0.39062 3.16405,2e-5 5.52733,0.82033 7.08985,2.46094 1.56248,1.64064 2.34372,4.12762 2.34375,7.46093"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3754" />
|
||||
<path
|
||||
d="m 353.60956,393.29044 0,6.21093 7.40234,0 0,2.79297 -7.40234,0 0,11.875 c -10e-6,1.78386 0.24088,2.92969 0.72265,3.4375 0.49479,0.50782 1.49088,0.76172 2.98829,0.76172 l 3.6914,0 0,3.00781 -3.6914,0 c -2.77345,0 -4.68751,-0.51432 -5.74219,-1.54297 -1.05469,-1.04166 -1.58204,-2.92968 -1.58203,-5.66406 l 0,-11.875 -2.63672,0 0,-2.79297 2.63672,0 0,-6.21093 3.61328,0"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3756" />
|
||||
<path
|
||||
d="m 365.758,399.50137 3.59375,0 0,21.875 -3.59375,0 0,-21.875 m 0,-8.51562 3.59375,0 0,4.55078 -3.59375,0 0,-4.55078"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3758" />
|
||||
<path
|
||||
d="m 385.32831,402.0209 c -1.9271,2e-5 -3.45053,0.75523 -4.57031,2.26563 -1.1198,1.49741 -1.6797,3.5547 -1.67969,6.17187 -10e-6,2.6172 0.55338,4.681 1.66015,6.19141 1.11979,1.4974 2.64973,2.2461 4.58985,2.24609 1.91405,1e-5 3.43097,-0.7552 4.55078,-2.26562 1.11977,-1.51041 1.67967,-3.5677 1.67969,-6.17188 -2e-5,-2.59113 -0.55992,-4.64191 -1.67969,-6.15234 -1.11981,-1.52342 -2.63673,-2.28514 -4.55078,-2.28516 m 0,-3.04687 c 3.12498,2e-5 5.57941,1.01565 7.36328,3.04687 1.78383,2.03127 2.67576,4.84377 2.67578,8.4375 -2e-5,3.58074 -0.89195,6.39324 -2.67578,8.4375 -1.78387,2.03125 -4.2383,3.04688 -7.36328,3.04688 -3.13803,0 -5.59897,-1.01563 -7.38281,-3.04688 -1.77084,-2.04426 -2.65626,-4.85676 -2.65625,-8.4375 -10e-6,-3.59373 0.88541,-6.40623 2.65625,-8.4375 1.78384,-2.03122 4.24478,-3.04685 7.38281,-3.04687"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3760" />
|
||||
<path
|
||||
d="m 419.48846,408.17325 0,13.20312 -3.59375,0 0,-13.08593 c -10e-6,-2.0703 -0.40366,-3.61978 -1.21093,-4.64844 -0.80731,-1.02863 -2.01825,-1.54295 -3.63282,-1.54297 -1.94011,2e-5 -3.47006,0.61851 -4.58984,1.85547 -1.1198,1.23699 -1.67969,2.92319 -1.67969,5.05859 l 0,12.36328 -3.61328,0 0,-21.875 3.61328,0 0,3.39844 c 0.85937,-1.31508 1.86848,-2.29816 3.02735,-2.94922 1.17186,-0.65102 2.51952,-0.97654 4.04297,-0.97656 2.513,2e-5 4.41404,0.78127 5.70312,2.34375 1.28904,1.5495 1.93357,3.83465 1.93359,6.85547"
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="path3762" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 51 KiB |
@ -1,22 +0,0 @@
|
||||
TEMPLATE = lib
|
||||
TARGET = PFDGadget
|
||||
QT += svg
|
||||
QT += opengl
|
||||
include(../../openpilotgcsplugin.pri)
|
||||
include(../../plugins/coreplugin/coreplugin.pri)
|
||||
include(pfd_dependencies.pri)
|
||||
HEADERS += pfdplugin.h
|
||||
HEADERS += pfdgadget.h
|
||||
HEADERS += pfdgadgetwidget.h
|
||||
HEADERS += pfdgadgetfactory.h
|
||||
HEADERS += pfdgadgetconfiguration.h
|
||||
HEADERS += pfdgadgetoptionspage.h
|
||||
SOURCES += pfdplugin.cpp
|
||||
SOURCES += pfdgadget.cpp
|
||||
SOURCES += pfdgadgetfactory.cpp
|
||||
SOURCES += pfdgadgetwidget.cpp
|
||||
SOURCES += pfdgadgetconfiguration.cpp
|
||||
SOURCES += pfdgadgetoptionspage.cpp
|
||||
OTHER_FILES += PFDGadget.pluginspec
|
||||
FORMS += pfdgadgetoptionspage.ui
|
||||
RESOURCES += pfd.qrc
|
@ -1,5 +0,0 @@
|
||||
<RCC>
|
||||
<qresource prefix="/pfd">
|
||||
<file>images/pfd-default.svg</file>
|
||||
</qresource>
|
||||
</RCC>
|
@ -1 +0,0 @@
|
||||
include(../../plugins/uavobjects/uavobjects.pri)
|
@ -1,57 +0,0 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
*
|
||||
* @file pfdgadget.cpp
|
||||
* @author Edouard Lafargue Copyright (C) 2010.
|
||||
* @addtogroup GCSPlugins GCS Plugins
|
||||
* @{
|
||||
* @addtogroup OPMapPlugin Primary Flight Display Plugin
|
||||
* @{
|
||||
* @brief The Primary Flight Display Gadget
|
||||
*****************************************************************************/
|
||||
/*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include "pfdgadget.h"
|
||||
#include "pfdgadgetwidget.h"
|
||||
#include "pfdgadgetconfiguration.h"
|
||||
|
||||
PFDGadget::PFDGadget(QString classId, PFDGadgetWidget *widget, QWidget *parent) :
|
||||
IUAVGadget(classId, parent),
|
||||
m_widget(widget)
|
||||
{}
|
||||
|
||||
PFDGadget::~PFDGadget()
|
||||
{
|
||||
delete m_widget;
|
||||
}
|
||||
|
||||
/*
|
||||
This is called when a configuration is loaded, and updates the plugin's settings.
|
||||
Careful: the plugin is already drawn before the loadConfiguration method is called the
|
||||
first time, so you have to be careful not to assume all the plugin values are initialized
|
||||
the first time you use them
|
||||
*/
|
||||
void PFDGadget::loadConfiguration(IUAVGadgetConfiguration *config)
|
||||
{
|
||||
PFDGadgetConfiguration *m = qobject_cast<PFDGadgetConfiguration *>(config);
|
||||
|
||||
m_widget->setHqFonts(m->getHqFonts());
|
||||
m_widget->setDialFile(m->dialFile());
|
||||
m_widget->enableOpenGL(m->useOpenGL());
|
||||
m_widget->enableSmoothUpdates(m->getBeSmooth());
|
||||
m_widget->connectNeedles();
|
||||
}
|
@ -1,58 +0,0 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
*
|
||||
* @file pfdgadget.h
|
||||
* @author Edouard Lafargue Copyright (C) 2010.
|
||||
* @addtogroup GCSPlugins GCS Plugins
|
||||
* @{
|
||||
* @addtogroup OPMapPlugin Primary Flight Display Plugin
|
||||
* @{
|
||||
* @brief The Primary Flight Display Gadget
|
||||
*****************************************************************************/
|
||||
/*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#ifndef PFDGADGET_H_
|
||||
#define PFDGADGET_H_
|
||||
|
||||
#include <coreplugin/iuavgadget.h>
|
||||
#include "pfdgadgetwidget.h"
|
||||
|
||||
class IUAVGadget;
|
||||
class QWidget;
|
||||
class QString;
|
||||
class PFDGadgetWidget;
|
||||
|
||||
using namespace Core;
|
||||
|
||||
class PFDGadget : public Core::IUAVGadget {
|
||||
Q_OBJECT
|
||||
public:
|
||||
PFDGadget(QString classId, PFDGadgetWidget *widget, QWidget *parent = 0);
|
||||
~PFDGadget();
|
||||
|
||||
QWidget *widget()
|
||||
{
|
||||
return m_widget;
|
||||
}
|
||||
void loadConfiguration(IUAVGadgetConfiguration *config);
|
||||
|
||||
private:
|
||||
PFDGadgetWidget *m_widget;
|
||||
};
|
||||
|
||||
|
||||
#endif // PFDGADGET_H_
|
@ -1,77 +0,0 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
*
|
||||
* @file pfdgadgetconfiguration.cpp
|
||||
* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
|
||||
* @addtogroup GCSPlugins GCS Plugins
|
||||
* @{
|
||||
* @addtogroup OPMapPlugin Primary Flight Display Plugin
|
||||
* @{
|
||||
* @brief The Primary Flight Display Gadget
|
||||
*****************************************************************************/
|
||||
/*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include "pfdgadgetconfiguration.h"
|
||||
#include "utils/pathutils.h"
|
||||
|
||||
/**
|
||||
* Loads a saved configuration or defaults if non exist.
|
||||
*
|
||||
*/
|
||||
PFDGadgetConfiguration::PFDGadgetConfiguration(QString classId, QSettings *qSettings, QObject *parent) :
|
||||
IUAVGadgetConfiguration(classId, parent),
|
||||
m_defaultDial("Unknown"),
|
||||
beSmooth(true)
|
||||
{
|
||||
// if a saved configuration exists load it
|
||||
if (qSettings != 0) {
|
||||
QString dialFile = qSettings->value("dialFile").toString();
|
||||
useOpenGLFlag = qSettings->value("useOpenGLFlag").toBool();
|
||||
hqFonts = qSettings->value("hqFonts").toBool();
|
||||
beSmooth = qSettings->value("beSmooth").toBool();
|
||||
m_defaultDial = Utils::PathUtils().InsertDataPath(dialFile);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Clones a configuration.
|
||||
*
|
||||
*/
|
||||
IUAVGadgetConfiguration *PFDGadgetConfiguration::clone()
|
||||
{
|
||||
PFDGadgetConfiguration *m = new PFDGadgetConfiguration(this->classId());
|
||||
|
||||
m->m_defaultDial = m_defaultDial;
|
||||
m->useOpenGLFlag = useOpenGLFlag;
|
||||
m->hqFonts = hqFonts;
|
||||
m->beSmooth = beSmooth;
|
||||
return m;
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves a configuration.
|
||||
*
|
||||
*/
|
||||
void PFDGadgetConfiguration::saveConfig(QSettings *qSettings) const
|
||||
{
|
||||
QString dialFile = Utils::PathUtils().RemoveDataPath(m_defaultDial);
|
||||
|
||||
qSettings->setValue("dialFile", dialFile);
|
||||
qSettings->setValue("useOpenGLFlag", useOpenGLFlag);
|
||||
qSettings->setValue("hqFonts", hqFonts);
|
||||
qSettings->setValue("beSmooth", beSmooth);
|
||||
}
|
@ -1,86 +0,0 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
*
|
||||
* @file pfdgadgetconfiguration.h
|
||||
* @author Edouard Lafargue Copyright (C) 2010.
|
||||
* @addtogroup GCSPlugins GCS Plugins
|
||||
* @{
|
||||
* @addtogroup OPMapPlugin Primary Flight Display Plugin
|
||||
* @{
|
||||
* @brief The Primary Flight Display Gadget
|
||||
*****************************************************************************/
|
||||
/*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#ifndef PFDGADGETCONFIGURATION_H
|
||||
#define PFDGADGETCONFIGURATION_H
|
||||
|
||||
#include <coreplugin/iuavgadgetconfiguration.h>
|
||||
|
||||
using namespace Core;
|
||||
|
||||
class PFDGadgetConfiguration : public IUAVGadgetConfiguration {
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit PFDGadgetConfiguration(QString classId, QSettings *qSettings = 0, QObject *parent = 0);
|
||||
|
||||
// set dial configuration functions
|
||||
void setDialFile(QString dialFile)
|
||||
{
|
||||
m_defaultDial = dialFile;
|
||||
}
|
||||
void setUseOpenGL(bool flag)
|
||||
{
|
||||
useOpenGLFlag = flag;
|
||||
}
|
||||
void setHqFonts(bool flag)
|
||||
{
|
||||
hqFonts = flag;
|
||||
}
|
||||
void setBeSmooth(bool flag)
|
||||
{
|
||||
beSmooth = flag;
|
||||
}
|
||||
|
||||
// get dial configuration functions
|
||||
QString dialFile()
|
||||
{
|
||||
return m_defaultDial;
|
||||
}
|
||||
bool useOpenGL()
|
||||
{
|
||||
return useOpenGLFlag;
|
||||
}
|
||||
bool getHqFonts()
|
||||
{
|
||||
return hqFonts;
|
||||
}
|
||||
bool getBeSmooth()
|
||||
{
|
||||
return beSmooth;
|
||||
}
|
||||
|
||||
void saveConfig(QSettings *settings) const;
|
||||
IUAVGadgetConfiguration *clone();
|
||||
|
||||
private:
|
||||
QString m_defaultDial; // The name of the dial's SVG source file
|
||||
bool useOpenGLFlag;
|
||||
bool hqFonts;
|
||||
bool beSmooth;
|
||||
};
|
||||
|
||||
#endif // PFDGADGETCONFIGURATION_H
|
@ -1,58 +0,0 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
*
|
||||
* @file pfdgadgetfactory.cpp
|
||||
* @author Edouard Lafargue Copyright (C) 2010.
|
||||
* @addtogroup GCSPlugins GCS Plugins
|
||||
* @{
|
||||
* @addtogroup OPMapPlugin Primary Flight Display Plugin
|
||||
* @{
|
||||
* @brief The Primary Flight Display Gadget
|
||||
*****************************************************************************/
|
||||
/*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
#include "pfdgadgetfactory.h"
|
||||
#include "pfdgadgetwidget.h"
|
||||
#include "pfdgadget.h"
|
||||
#include "pfdgadgetconfiguration.h"
|
||||
#include "pfdgadgetoptionspage.h"
|
||||
#include <coreplugin/iuavgadget.h>
|
||||
|
||||
PFDGadgetFactory::PFDGadgetFactory(QObject *parent) :
|
||||
IUAVGadgetFactory(QString("PFDGadget"),
|
||||
tr("Primary Flight Display"),
|
||||
parent)
|
||||
{}
|
||||
|
||||
PFDGadgetFactory::~PFDGadgetFactory()
|
||||
{}
|
||||
|
||||
Core::IUAVGadget *PFDGadgetFactory::createGadget(QWidget *parent)
|
||||
{
|
||||
PFDGadgetWidget *gadgetWidget = new PFDGadgetWidget(parent);
|
||||
|
||||
return new PFDGadget(QString("PFDGadget"), gadgetWidget, parent);
|
||||
}
|
||||
|
||||
IUAVGadgetConfiguration *PFDGadgetFactory::createConfiguration(QSettings *qSettings)
|
||||
{
|
||||
return new PFDGadgetConfiguration(QString("PFDGadget"), qSettings);
|
||||
}
|
||||
|
||||
IOptionsPage *PFDGadgetFactory::createOptionsPage(IUAVGadgetConfiguration *config)
|
||||
{
|
||||
return new PFDGadgetOptionsPage(qobject_cast<PFDGadgetConfiguration *>(config));
|
||||
}
|
@ -1,51 +0,0 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
*
|
||||
* @file pfdgadgetfactory.h
|
||||
* @author Edouard Lafargue Copyright (C) 2010.
|
||||
* @addtogroup GCSPlugins GCS Plugins
|
||||
* @{
|
||||
* @addtogroup OPMapPlugin Primary Flight Display Plugin
|
||||
* @{
|
||||
* @brief The Primary Flight Display Gadget
|
||||
*****************************************************************************/
|
||||
/*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#ifndef PFDGADGETFACTORY_H_
|
||||
#define PFDGADGETFACTORY_H_
|
||||
|
||||
#include <coreplugin/iuavgadgetfactory.h>
|
||||
|
||||
namespace Core {
|
||||
class IUAVGadget;
|
||||
class IUAVGadgetFactory;
|
||||
}
|
||||
|
||||
using namespace Core;
|
||||
|
||||
class PFDGadgetFactory : public IUAVGadgetFactory {
|
||||
Q_OBJECT
|
||||
public:
|
||||
PFDGadgetFactory(QObject *parent = 0);
|
||||
~PFDGadgetFactory();
|
||||
|
||||
Core::IUAVGadget *createGadget(QWidget *parent);
|
||||
IUAVGadgetConfiguration *createConfiguration(QSettings *qSettings);
|
||||
IOptionsPage *createOptionsPage(IUAVGadgetConfiguration *config);
|
||||
};
|
||||
|
||||
#endif // PFDGADGETFACTORY_H_
|
@ -1,85 +0,0 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
*
|
||||
* @file pfdgadgetoptionspage.cpp
|
||||
* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
|
||||
* @addtogroup GCSPlugins GCS Plugins
|
||||
* @{
|
||||
* @addtogroup OPMapPlugin Primary Flight Display Plugin
|
||||
* @{
|
||||
* @brief The Primary Flight Display Gadget
|
||||
*****************************************************************************/
|
||||
/*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include "pfdgadgetoptionspage.h"
|
||||
#include "pfdgadgetconfiguration.h"
|
||||
#include "ui_pfdgadgetoptionspage.h"
|
||||
#include "extensionsystem/pluginmanager.h"
|
||||
#include "uavobjectmanager.h"
|
||||
#include "uavdataobject.h"
|
||||
|
||||
|
||||
#include <QFileDialog>
|
||||
#include <QtAlgorithms>
|
||||
#include <QStringList>
|
||||
|
||||
PFDGadgetOptionsPage::PFDGadgetOptionsPage(PFDGadgetConfiguration *config, QObject *parent) :
|
||||
IOptionsPage(parent),
|
||||
m_config(config)
|
||||
{}
|
||||
|
||||
// creates options page widget (uses the UI file)
|
||||
QWidget *PFDGadgetOptionsPage::createPage(QWidget *parent)
|
||||
{
|
||||
Q_UNUSED(parent);
|
||||
|
||||
options_page = new Ui::PFDGadgetOptionsPage();
|
||||
// main widget
|
||||
QWidget *optionsPageWidget = new QWidget;
|
||||
// main layout
|
||||
options_page->setupUi(optionsPageWidget);
|
||||
|
||||
|
||||
// Restore the contents from the settings:
|
||||
options_page->svgSourceFile->setExpectedKind(Utils::PathChooser::File);
|
||||
options_page->svgSourceFile->setPromptDialogFilter(tr("SVG image (*.svg)"));
|
||||
options_page->svgSourceFile->setPromptDialogTitle(tr("Choose SVG image"));
|
||||
options_page->svgSourceFile->setPath(m_config->dialFile());
|
||||
options_page->useOpenGL->setChecked(m_config->useOpenGL());
|
||||
options_page->hqText->setChecked(m_config->getHqFonts());
|
||||
options_page->smoothUpdates->setChecked(m_config->getBeSmooth());
|
||||
|
||||
return optionsPageWidget;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when the user presses apply or OK.
|
||||
*
|
||||
* Saves the current values
|
||||
*
|
||||
*/
|
||||
void PFDGadgetOptionsPage::apply()
|
||||
{
|
||||
m_config->setDialFile(options_page->svgSourceFile->path());
|
||||
m_config->setUseOpenGL(options_page->useOpenGL->checkState());
|
||||
m_config->setHqFonts(options_page->hqText->checkState());
|
||||
m_config->setBeSmooth(options_page->smoothUpdates->checkState());
|
||||
}
|
||||
|
||||
|
||||
void PFDGadgetOptionsPage::finish()
|
||||
{}
|
@ -1,64 +0,0 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
*
|
||||
* @file pfdgadgetoptionspage.h
|
||||
* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
|
||||
* @addtogroup GCSPlugins GCS Plugins
|
||||
* @{
|
||||
* @addtogroup OPMapPlugin Primary Flight Display Plugin
|
||||
* @{
|
||||
* @brief The Primary Flight Display Gadget
|
||||
*****************************************************************************/
|
||||
/*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#ifndef PFDGADGETOPTIONSPAGE_H
|
||||
#define PFDGADGETOPTIONSPAGE_H
|
||||
|
||||
#include "coreplugin/dialogs/ioptionspage.h"
|
||||
#include "QString"
|
||||
#include <QStringList>
|
||||
#include <QDebug>
|
||||
|
||||
namespace Core {
|
||||
class IUAVGadgetConfiguration;
|
||||
}
|
||||
|
||||
class PFDGadgetConfiguration;
|
||||
|
||||
namespace Ui {
|
||||
class PFDGadgetOptionsPage;
|
||||
}
|
||||
|
||||
using namespace Core;
|
||||
|
||||
class PFDGadgetOptionsPage : public IOptionsPage {
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit PFDGadgetOptionsPage(PFDGadgetConfiguration *config, QObject *parent = 0);
|
||||
|
||||
QWidget *createPage(QWidget *parent);
|
||||
void apply();
|
||||
void finish();
|
||||
|
||||
private:
|
||||
Ui::PFDGadgetOptionsPage *options_page;
|
||||
PFDGadgetConfiguration *m_config;
|
||||
|
||||
private slots:
|
||||
};
|
||||
|
||||
#endif // PFDGADGETOPTIONSPAGE_H
|
@ -1,150 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>PFDGadgetOptionsPage</class>
|
||||
<widget class="QWidget" name="PFDGadgetOptionsPage">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>430</width>
|
||||
<height>306</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<property name="margin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QScrollArea" name="scrollArea">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::NoFrame</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Plain</enum>
|
||||
</property>
|
||||
<property name="widgetResizable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<widget class="QWidget" name="scrollAreaWidgetContents">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>430</width>
|
||||
<height>306</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<property name="margin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout" stretch="0,0">
|
||||
<property name="spacing">
|
||||
<number>10</number>
|
||||
</property>
|
||||
<property name="sizeConstraint">
|
||||
<enum>QLayout::SetMaximumSize</enum>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>10</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>PFD SVG: </string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="Utils::PathChooser" name="svgSourceFile" native="true">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="useOpenGL">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Use OpenGL for rendering</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="hqText">
|
||||
<property name="text">
|
||||
<string>High Quality text (OpenGL)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="smoothUpdates">
|
||||
<property name="text">
|
||||
<string>Smooth updates</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::MinimumExpanding</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>Utils::PathChooser</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>utils/pathchooser.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
@ -1,1133 +0,0 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
*
|
||||
* @file pfdgadgetwidget.cpp
|
||||
* @author Edouard Lafargue Copyright (C) 2010.
|
||||
* @addtogroup GCSPlugins GCS Plugins
|
||||
* @{
|
||||
* @addtogroup OPMapPlugin Primary Flight Display Plugin
|
||||
* @{
|
||||
* @brief The Primary Flight Display Gadget
|
||||
*****************************************************************************/
|
||||
/*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include "pfdgadgetwidget.h"
|
||||
#include <utils/stylehelper.h>
|
||||
#include <utils/cachedsvgitem.h>
|
||||
#include <iostream>
|
||||
#include <QDebug>
|
||||
#include <QPainter>
|
||||
#include <QtOpenGL/QGLWidget>
|
||||
#include <cmath>
|
||||
|
||||
PFDGadgetWidget::PFDGadgetWidget(QWidget *parent) : QGraphicsView(parent)
|
||||
{
|
||||
setMinimumSize(64, 64);
|
||||
setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
|
||||
setScene(new QGraphicsScene(this));
|
||||
// setRenderHint(QPainter::SmoothPixmapTransform);
|
||||
|
||||
setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
|
||||
// setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);
|
||||
// setRenderHints(QPainter::TextAntialiasing);
|
||||
// setRenderHints(QPainter::HighQualityAntialiasing);
|
||||
|
||||
m_renderer = new QSvgRenderer();
|
||||
|
||||
attitudeObj = NULL;
|
||||
headingObj = NULL;
|
||||
gcsBatteryObj = NULL;
|
||||
gpsObj = NULL;
|
||||
compassBandWidth = 0;
|
||||
pfdError = true;
|
||||
hqFonts = false;
|
||||
rollTarget = 0;
|
||||
rollValue = 0;
|
||||
pitchTarget = 0;
|
||||
pitchValue = 0;
|
||||
headingTarget = 0;
|
||||
headingValue = 0;
|
||||
groundspeedTarget = 0;
|
||||
groundspeedValue = 0;
|
||||
altitudeTarget = 0;
|
||||
altitudeValue = 0;
|
||||
|
||||
// This timer mechanism makes needles rotate smoothly
|
||||
connect(&dialTimer, SIGNAL(timeout()), this, SLOT(moveNeedles()));
|
||||
dialTimer.start(30);
|
||||
|
||||
connect(&skyDialTimer, SIGNAL(timeout()), this, SLOT(moveSky()));
|
||||
skyDialTimer.start(30);
|
||||
}
|
||||
|
||||
PFDGadgetWidget::~PFDGadgetWidget()
|
||||
{
|
||||
skyDialTimer.stop();
|
||||
dialTimer.stop();
|
||||
}
|
||||
|
||||
void PFDGadgetWidget::setToolTipPrivate()
|
||||
{
|
||||
static qint32 updateRate = 0;
|
||||
UAVObject::Metadata mdata = attitudeObj->getMetadata();
|
||||
|
||||
if (mdata.flightTelemetryUpdatePeriod != updateRate) {
|
||||
this->setToolTip("Current refresh rate:" + QString::number(mdata.flightTelemetryUpdatePeriod) + " miliseconds" + "\nIf you want to change it please edit the AttitudeActual metadata on the object browser.");
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Enables/Disables OpenGL
|
||||
*/
|
||||
void PFDGadgetWidget::enableOpenGL(bool flag)
|
||||
{
|
||||
if (flag) {
|
||||
setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers)));
|
||||
} else {
|
||||
setViewport(new QWidget);
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Connects the widget to the relevant UAVObjects
|
||||
|
||||
Should only be called after the PFD artwork is loaded.
|
||||
We want: AttitudeActual, FlightBattery, Location.
|
||||
|
||||
*/
|
||||
void PFDGadgetWidget::connectNeedles()
|
||||
{
|
||||
if (attitudeObj != NULL) {
|
||||
disconnect(attitudeObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(updateAttitude(UAVObject *)));
|
||||
}
|
||||
|
||||
if (headingObj != NULL) {
|
||||
disconnect(headingObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(updateHeading(UAVObject *)));
|
||||
}
|
||||
|
||||
if (gcsBatteryObj != NULL) {
|
||||
disconnect(gcsBatteryObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(updateBattery(UAVObject *)));
|
||||
}
|
||||
|
||||
if (gpsObj != NULL) {
|
||||
disconnect(gpsObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(updateGPS(UAVObject *)));
|
||||
}
|
||||
|
||||
// Safeguard: if artwork did not load properly, don't go further
|
||||
if (pfdError) {
|
||||
return;
|
||||
}
|
||||
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
|
||||
UAVObjectManager *objManager = pm->getObject<UAVObjectManager>();
|
||||
|
||||
airspeedObj = dynamic_cast<UAVDataObject *>(objManager->getObject("AirspeedActual"));
|
||||
if (airspeedObj != NULL) {
|
||||
connect(airspeedObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(updateAirspeed(UAVObject *)));
|
||||
} else {
|
||||
qDebug() << "Error: Object is unknown (AirspeedActual).";
|
||||
}
|
||||
|
||||
groundspeedObj = dynamic_cast<UAVDataObject *>(objManager->getObject("VelocityActual"));
|
||||
if (groundspeedObj != NULL) {
|
||||
connect(groundspeedObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(updateGroundspeed(UAVObject *)));
|
||||
} else {
|
||||
qDebug() << "Error: Object is unknown (VelocityActual).";
|
||||
}
|
||||
|
||||
altitudeObj = dynamic_cast<UAVDataObject *>(objManager->getObject("PositionActual"));
|
||||
if (altitudeObj != NULL) {
|
||||
connect(altitudeObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(updateAltitude(UAVObject *)));
|
||||
} else {
|
||||
qDebug() << "Error: Object is unknown (PositionActual).";
|
||||
}
|
||||
|
||||
attitudeObj = dynamic_cast<UAVDataObject *>(objManager->getObject("AttitudeActual"));
|
||||
if (attitudeObj != NULL) {
|
||||
connect(attitudeObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(updateAttitude(UAVObject *)));
|
||||
} else {
|
||||
qDebug() << "Error: Object is unknown (AttitudeActual).";
|
||||
}
|
||||
|
||||
headingObj = dynamic_cast<UAVDataObject *>(objManager->getObject("PositionActual"));
|
||||
if (headingObj != NULL) {
|
||||
connect(headingObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(updateHeading(UAVObject *)));
|
||||
} else {
|
||||
qDebug() << "Error: Object is unknown (PositionActual).";
|
||||
}
|
||||
|
||||
if (gcsGPSStats) {
|
||||
gpsObj = dynamic_cast<UAVDataObject *>(objManager->getObject("GPSPosition"));
|
||||
if (gpsObj != NULL) {
|
||||
connect(gpsObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(updateGPS(UAVObject *)));
|
||||
} else {
|
||||
qDebug() << "Error: Object is unknown (GPSPosition).";
|
||||
}
|
||||
}
|
||||
|
||||
if (gcsTelemetryArrow || gcsTelemetryStats) {
|
||||
// Only register if the PFD wants link stats/status
|
||||
gcsTelemetryObj = dynamic_cast<UAVDataObject *>(objManager->getObject("GCSTelemetryStats"));
|
||||
if (gcsTelemetryObj != NULL) {
|
||||
connect(gcsTelemetryObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(updateLinkStatus(UAVObject *)));
|
||||
} else {
|
||||
qDebug() << "Error: Object is unknown (GCSTelemetryStats).";
|
||||
}
|
||||
}
|
||||
|
||||
if (gcsBatteryStats) { // Only register if the PFD wants battery display
|
||||
gcsBatteryObj = dynamic_cast<UAVDataObject *>(objManager->getObject("FlightBatteryState"));
|
||||
if (gcsBatteryObj != NULL) {
|
||||
connect(gcsBatteryObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(updateBattery(UAVObject *)));
|
||||
} else {
|
||||
qDebug() << "Error: Object is unknown (FlightBatteryState).";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
\brief Updates the GPS stats
|
||||
*/
|
||||
void PFDGadgetWidget::updateGPS(UAVObject *object1)
|
||||
{
|
||||
UAVObjectField *field = object1->getField(QString("Satellites"));
|
||||
UAVObjectField *field1 = object1->getField(QString("PDOP"));
|
||||
|
||||
if (field && field1) {
|
||||
QString s = QString("GPS: ") + field->getValue().toString() + "\nPDP: "
|
||||
+ field1->getValue().toString();
|
||||
if (s != satString) {
|
||||
gcsGPSStats->setPlainText(s);
|
||||
satString = s;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Updates the link stats
|
||||
*/
|
||||
void PFDGadgetWidget::updateLinkStatus(UAVObject *object1)
|
||||
{
|
||||
// TODO: find a way to avoid updating the graphics if the value
|
||||
// has not changed since the last update
|
||||
// Double check that the field exists:
|
||||
QString st = QString("Status");
|
||||
QString tdr = QString("TxDataRate");
|
||||
QString rdr = QString("RxDataRate");
|
||||
UAVObjectField *field = object1->getField(st);
|
||||
UAVObjectField *field2 = object1->getField(tdr);
|
||||
UAVObjectField *field3 = object1->getField(rdr);
|
||||
|
||||
if (field && field2 && field3) {
|
||||
QString s = field->getValue().toString();
|
||||
if (m_renderer->elementExists("gcstelemetry-" + s) && gcsTelemetryArrow) {
|
||||
gcsTelemetryArrow->setElementId("gcstelemetry-" + s);
|
||||
} else { // Safeguard
|
||||
gcsTelemetryArrow->setElementId("gcstelemetry-Disconnected");
|
||||
}
|
||||
double v1 = field2->getDouble();
|
||||
double v2 = field3->getDouble();
|
||||
s.sprintf("%.0f/%.0f", v1, v2);
|
||||
if (gcsTelemetryStats) {
|
||||
gcsTelemetryStats->setPlainText(s);
|
||||
}
|
||||
} else {
|
||||
qDebug() << "UpdateLinkStatus: Wrong field, maybe an issue with object disconnection ?";
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Reads the updated attitude and computes the new display position
|
||||
|
||||
Resolution is 1 degree roll & 1/7.5 degree pitch.
|
||||
*/
|
||||
void PFDGadgetWidget::updateAttitude(UAVObject *object1)
|
||||
{
|
||||
setToolTipPrivate();
|
||||
UAVObjectField *rollField = object1->getField(QString("Roll"));
|
||||
UAVObjectField *yawField = object1->getField(QString("Yaw"));
|
||||
UAVObjectField *pitchField = object1->getField(QString("Pitch"));
|
||||
if (rollField && yawField && pitchField) {
|
||||
// These factors assume some things about the PFD SVG, namely:
|
||||
// - Roll, Pitch and Heading value in degrees
|
||||
// - Pitch lines are 300px high for a +20/-20 range, which means
|
||||
// 7.5 pixels per pitch degree.
|
||||
// TODO: loosen this constraint and only require a +/- 20 deg range,
|
||||
// and compute the height from the SVG element.
|
||||
// Also: keep the integer value only, to avoid unnecessary redraws
|
||||
rollTarget = -floor(rollField->getDouble() * 10) / 10;
|
||||
if ((rollTarget - rollValue) > 180) {
|
||||
rollValue += 360;
|
||||
} else if (((rollTarget - rollValue) < -180)) {
|
||||
rollValue -= 360;
|
||||
}
|
||||
pitchTarget = floor(pitchField->getDouble() * 7.5);
|
||||
|
||||
// These factors assume some things about the PFD SVG, namely:
|
||||
// - Heading value in degrees
|
||||
// - "Scale" element is 540 degrees wide
|
||||
|
||||
// Corvus Corax: "If you want a smooth transition between two angles, It is usually solved that by substracting
|
||||
// one from another, and if the result is >180 or <-180 I substract (respectively add) 360 degrees
|
||||
// to it. That way you always get the "shorter difference" to turn in."
|
||||
double fac = compassBandWidth / 540;
|
||||
headingTarget = yawField->getDouble() * (-fac);
|
||||
if (headingTarget != headingTarget) {
|
||||
headingTarget = headingValue; // NaN checking.
|
||||
}
|
||||
if ((headingValue - headingTarget) / fac > 180) {
|
||||
headingTarget += 360 * fac;
|
||||
} else if (((headingValue - headingTarget) / fac < -180)) {
|
||||
headingTarget -= 360 * fac;
|
||||
}
|
||||
headingTarget = floor(headingTarget * 10) / 10; // Avoid stupid redraws
|
||||
|
||||
if (!dialTimer.isActive()) {
|
||||
dialTimer.start(); // Rearm the dial Timer which might be stopped.
|
||||
}
|
||||
} else {
|
||||
qDebug() << "Unable to get one of the fields for attitude update";
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Updates the compass reading and speed dial.
|
||||
|
||||
This also updates speed & altitude according to PositionActual data.
|
||||
|
||||
Note: the speed dial shows the ground speed at the moment, because
|
||||
there is no airspeed by default. Should become configurable in a future
|
||||
gadget release (TODO)
|
||||
*/
|
||||
void PFDGadgetWidget::updateHeading(UAVObject *object)
|
||||
{
|
||||
Q_UNUSED(object);
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Called by updates to @PositionActual to compute groundspeed from velocity
|
||||
*/
|
||||
void PFDGadgetWidget::updateGroundspeed(UAVObject *object)
|
||||
{
|
||||
UAVObjectField *northField = object->getField("North");
|
||||
UAVObjectField *eastField = object->getField("East");
|
||||
|
||||
if (northField && eastField) {
|
||||
double val = floor(sqrt(pow(northField->getDouble(), 2) + pow(eastField->getDouble(), 2)) * 10) / 10;
|
||||
groundspeedTarget = val * speedScaleHeight / 30;
|
||||
|
||||
if (!dialTimer.isActive()) {
|
||||
dialTimer.start(); // Rearm the dial Timer which might be stopped.
|
||||
}
|
||||
} else {
|
||||
qDebug() << "UpdateHeading: Wrong field, maybe an issue with object disconnection ?";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
\brief Called by updates to @AirspeedActual
|
||||
*/
|
||||
void PFDGadgetWidget::updateAirspeed(UAVObject *object)
|
||||
{
|
||||
UAVObjectField *airspeedField = object->getField("CalibratedAirspeed");
|
||||
|
||||
if (airspeedField) {
|
||||
airspeedTarget = airspeedField->getDouble();
|
||||
|
||||
if (!dialTimer.isActive()) {
|
||||
dialTimer.start(); // Rearm the dial Timer which might be stopped.
|
||||
}
|
||||
} else {
|
||||
qDebug() << "UpdateHeading: Wrong field, maybe an issue with object disconnection ?";
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Called by the @ref PositionActual updates to show altitude
|
||||
*/
|
||||
void PFDGadgetWidget::updateAltitude(UAVObject *object)
|
||||
{
|
||||
UAVObjectField *downField = object->getField("Down");
|
||||
|
||||
if (downField) {
|
||||
altitudeTarget = -downField->getDouble();
|
||||
|
||||
if (!dialTimer.isActive()) {
|
||||
dialTimer.start(); // Rearm the dial Timer which might be stopped.
|
||||
}
|
||||
} else {
|
||||
qDebug() << "Unable to get field for altitude update. Obj: " << object->getName();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
\brief Called by the UAVObject which got updated
|
||||
*/
|
||||
void PFDGadgetWidget::updateBattery(UAVObject *object1)
|
||||
{
|
||||
// Double check that the field exists:
|
||||
QString voltage = QString("Voltage");
|
||||
QString current = QString("Current");
|
||||
QString energy = QString("ConsumedEnergy");
|
||||
UAVObjectField *field = object1->getField(voltage);
|
||||
UAVObjectField *field2 = object1->getField(current);
|
||||
UAVObjectField *field3 = object1->getField(energy);
|
||||
|
||||
if (field && field2 && field3) {
|
||||
QString s = QString();
|
||||
double v0 = field->getDouble();
|
||||
double v1 = field2->getDouble();
|
||||
double v2 = field3->getDouble();
|
||||
s.sprintf("%.2fV\n%.2fA\n%.0fmAh", v0, v1, v2);
|
||||
if (s != batString) {
|
||||
gcsBatteryStats->setPlainText(s);
|
||||
batString = s;
|
||||
}
|
||||
} else {
|
||||
qDebug() << "UpdateBattery: Wrong field, maybe an issue with object disconnection ?";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
\brief Sets up the PFD from the SVG master file.
|
||||
|
||||
Initializes the display, and does all the one-time calculations.
|
||||
*/
|
||||
void PFDGadgetWidget::setDialFile(QString dfn)
|
||||
{
|
||||
QGraphicsScene *l_scene = scene();
|
||||
|
||||
setBackgroundBrush(QBrush(Utils::StyleHelper::baseColor()));
|
||||
if (QFile::exists(dfn) && m_renderer->load(dfn) && m_renderer->isValid()) {
|
||||
/* The PFD element IDs are fixed, not like with the analog dial.
|
||||
- Background: background
|
||||
- Foreground: foreground (contains all fixed elements, including plane)
|
||||
- earth/sky : world
|
||||
- Roll scale: rollscale
|
||||
- compass frame: compass (part of the foreground)
|
||||
- compass band : compass-band
|
||||
- Home point: homewaypoint
|
||||
- Next point: nextwaypoint
|
||||
- Home point bearing: homewaypoint-bearing
|
||||
- Next point bearing: nextwaypoint-bearing
|
||||
- Speed rectangle (left side): speed-bg
|
||||
- Speed scale: speed-scale.
|
||||
- Black speed window: speed-window.
|
||||
- Altitude rectangle (right site): altitude-bg.
|
||||
- Altitude scale: altitude-scale.
|
||||
- Black altitude window: altitude-window.
|
||||
- GCS Telemetry status arrow: gcstelemetry-XXXX
|
||||
- Telemetry link rate: linkrate
|
||||
- GPS status text: gps-txt
|
||||
- Battery stats: battery-txt
|
||||
*/
|
||||
l_scene->clear(); // Deletes all items contained in the scene as well.
|
||||
m_background = new CachedSvgItem();
|
||||
// All other items will be clipped to the shape of the background
|
||||
m_background->setFlags(QGraphicsItem::ItemClipsChildrenToShape |
|
||||
QGraphicsItem::ItemClipsToShape);
|
||||
m_background->setSharedRenderer(m_renderer);
|
||||
m_background->setElementId("background");
|
||||
l_scene->addItem(m_background);
|
||||
|
||||
m_world = new CachedSvgItem();
|
||||
m_world->setParentItem(m_background);
|
||||
m_world->setSharedRenderer(m_renderer);
|
||||
m_world->setElementId("world");
|
||||
l_scene->addItem(m_world);
|
||||
|
||||
// red Roll scale: rollscale
|
||||
m_rollscale = new CachedSvgItem();
|
||||
m_rollscale->setSharedRenderer(m_renderer);
|
||||
m_rollscale->setElementId("rollscale");
|
||||
l_scene->addItem(m_rollscale);
|
||||
|
||||
// Home point:
|
||||
m_homewaypoint = new CachedSvgItem();
|
||||
// Next point:
|
||||
m_nextwaypoint = new CachedSvgItem();
|
||||
// Home point bearing:
|
||||
m_homepointbearing = new CachedSvgItem();
|
||||
// Next point bearing:
|
||||
m_nextpointbearing = new CachedSvgItem();
|
||||
|
||||
QGraphicsSvgItem *m_foreground = new CachedSvgItem();
|
||||
m_foreground->setParentItem(m_background);
|
||||
m_foreground->setSharedRenderer(m_renderer);
|
||||
m_foreground->setElementId("foreground");
|
||||
l_scene->addItem(m_foreground);
|
||||
|
||||
////////////////////
|
||||
// Compass
|
||||
////////////////////
|
||||
// Get the default location of the Compass:
|
||||
QMatrix compassMatrix = m_renderer->matrixForElement("compass");
|
||||
qreal startX = compassMatrix.mapRect(m_renderer->boundsOnElement("compass")).x();
|
||||
qreal startY = compassMatrix.mapRect(m_renderer->boundsOnElement("compass")).y();
|
||||
// Then once we have the initial location, we can put it
|
||||
// into a QGraphicsSvgItem which we will display at the same
|
||||
// place: we do this so that the heading scale can be clipped to
|
||||
// the compass dial region.
|
||||
m_compass = new CachedSvgItem();
|
||||
m_compass->setSharedRenderer(m_renderer);
|
||||
m_compass->setElementId("compass");
|
||||
m_compass->setFlags(QGraphicsItem::ItemClipsChildrenToShape |
|
||||
QGraphicsItem::ItemClipsToShape);
|
||||
l_scene->addItem(m_compass);
|
||||
QTransform matrix;
|
||||
matrix.translate(startX, startY);
|
||||
m_compass->setTransform(matrix, false);
|
||||
|
||||
// Now place the compass scale inside:
|
||||
m_compassband = new CachedSvgItem();
|
||||
m_compassband->setSharedRenderer(m_renderer);
|
||||
m_compassband->setElementId("compass-band");
|
||||
m_compassband->setParentItem(m_compass);
|
||||
l_scene->addItem(m_compassband);
|
||||
matrix.reset();
|
||||
// Note: the compass band has to be a path, which means all text elements have to be
|
||||
// converted, ortherwise boundsOnElement does not compute the height correctly
|
||||
// if the highest element is a text element. This is a Qt Bug as far as I can tell.
|
||||
|
||||
// compass-scale is the while bottom line inside the band: using the band's width
|
||||
// includes half the width of the letters, which causes errors:
|
||||
compassBandWidth = m_renderer->boundsOnElement("compass-scale").width();
|
||||
|
||||
////////////////////
|
||||
// Speed
|
||||
////////////////////
|
||||
// Speedometer on the left hand:
|
||||
//
|
||||
compassMatrix = m_renderer->matrixForElement("speed-bg");
|
||||
startX = compassMatrix.mapRect(m_renderer->boundsOnElement("speed-bg")).x();
|
||||
startY = compassMatrix.mapRect(m_renderer->boundsOnElement("speed-bg")).y();
|
||||
QGraphicsSvgItem *verticalbg = new CachedSvgItem();
|
||||
verticalbg->setSharedRenderer(m_renderer);
|
||||
verticalbg->setElementId("speed-bg");
|
||||
verticalbg->setFlags(QGraphicsItem::ItemClipsChildrenToShape |
|
||||
QGraphicsItem::ItemClipsToShape);
|
||||
l_scene->addItem(verticalbg);
|
||||
matrix.reset();
|
||||
matrix.translate(startX, startY);
|
||||
verticalbg->setTransform(matrix, false);
|
||||
|
||||
// Note: speed-scale should contain exactly 6 major ticks
|
||||
// for 30km/h
|
||||
m_speedscale = new QGraphicsItemGroup();
|
||||
m_speedscale->setParentItem(verticalbg);
|
||||
|
||||
QGraphicsSvgItem *speedscalelines = new CachedSvgItem();
|
||||
speedscalelines->setSharedRenderer(m_renderer);
|
||||
speedscalelines->setElementId("speed-scale");
|
||||
speedScaleHeight = m_renderer->matrixForElement("speed-scale").mapRect(
|
||||
m_renderer->boundsOnElement("speed-scale")).height();
|
||||
startX = compassMatrix.mapRect(m_renderer->boundsOnElement("speed-bg")).width();
|
||||
startX -= m_renderer->matrixForElement("speed-scale").mapRect(
|
||||
m_renderer->boundsOnElement("speed-scale")).width();
|
||||
matrix.reset();
|
||||
matrix.translate(startX, 0);
|
||||
speedscalelines->setTransform(matrix, false);
|
||||
// Quick way to reposition the item before putting it in the group:
|
||||
speedscalelines->setParentItem(verticalbg);
|
||||
m_speedscale->addToGroup(speedscalelines); // (reparents the item)
|
||||
|
||||
// Add the scale text elements:
|
||||
QGraphicsTextItem *speed0 = new QGraphicsTextItem("0");
|
||||
speed0->setDefaultTextColor(QColor("White"));
|
||||
speed0->setFont(QFont("Arial", (int)speedScaleHeight / 30));
|
||||
if (hqFonts) {
|
||||
speed0->setCacheMode(QGraphicsItem::DeviceCoordinateCache);
|
||||
}
|
||||
matrix.reset();
|
||||
matrix.translate(compassMatrix.mapRect(m_renderer->boundsOnElement("speed-bg")).width() / 10, -speedScaleHeight / 30);
|
||||
speed0->setTransform(matrix, false);
|
||||
speed0->setParentItem(verticalbg);
|
||||
m_speedscale->addToGroup(speed0);
|
||||
for (int i = 0; i < 6; i++) {
|
||||
speed0 = new QGraphicsTextItem("");
|
||||
speed0->setDefaultTextColor(QColor("White"));
|
||||
speed0->setFont(QFont("Arial", (int)speedScaleHeight / 30));
|
||||
speed0->setPlainText(QString().setNum(i * 5 + 1));
|
||||
if (hqFonts) {
|
||||
speed0->setCacheMode(QGraphicsItem::DeviceCoordinateCache);
|
||||
}
|
||||
matrix.translate(0, speedScaleHeight / 6);
|
||||
speed0->setTransform(matrix, false);
|
||||
speed0->setParentItem(verticalbg);
|
||||
m_speedscale->addToGroup(speed0);
|
||||
}
|
||||
// Now vertically center the speed scale on the speed background
|
||||
QRectF rectB = verticalbg->boundingRect();
|
||||
QRectF rectN = speedscalelines->boundingRect();
|
||||
m_speedscale->setPos(0, rectB.height() / 2 - rectN.height() / 2 - rectN.height() / 6);
|
||||
|
||||
// Isolate the speed window and put it above the speed scale
|
||||
compassMatrix = m_renderer->matrixForElement("speed-window");
|
||||
startX = compassMatrix.mapRect(m_renderer->boundsOnElement("speed-window")).x();
|
||||
startY = compassMatrix.mapRect(m_renderer->boundsOnElement("speed-window")).y();
|
||||
qreal speedWindowHeight = compassMatrix.mapRect(m_renderer->boundsOnElement("speed-window")).height();
|
||||
QGraphicsSvgItem *speedwindow = new CachedSvgItem();
|
||||
speedwindow->setSharedRenderer(m_renderer);
|
||||
speedwindow->setElementId("speed-window");
|
||||
speedwindow->setFlags(QGraphicsItem::ItemClipsChildrenToShape |
|
||||
QGraphicsItem::ItemClipsToShape);
|
||||
l_scene->addItem(speedwindow);
|
||||
matrix.reset();
|
||||
matrix.translate(startX, startY);
|
||||
speedwindow->setTransform(matrix, false);
|
||||
|
||||
// Last create a Text Item at the location of the speed window
|
||||
// and save it for future updates:
|
||||
m_speedtext = new QGraphicsTextItem("0000");
|
||||
m_speedtext->setDefaultTextColor(QColor("White"));
|
||||
m_speedtext->setFont(QFont("Arial", (int)speedWindowHeight / 2));
|
||||
if (hqFonts) {
|
||||
m_speedtext->setCacheMode(QGraphicsItem::DeviceCoordinateCache);
|
||||
}
|
||||
m_speedtext->setParentItem(speedwindow);
|
||||
|
||||
////////////////////
|
||||
// Altitude
|
||||
////////////////////
|
||||
// Right hand, very similar to speed
|
||||
compassMatrix = m_renderer->matrixForElement("altitude-bg");
|
||||
startX = compassMatrix.mapRect(m_renderer->boundsOnElement("altitude-bg")).x();
|
||||
startY = compassMatrix.mapRect(m_renderer->boundsOnElement("altitude-bg")).y();
|
||||
verticalbg = new CachedSvgItem();
|
||||
verticalbg->setSharedRenderer(m_renderer);
|
||||
verticalbg->setElementId("altitude-bg");
|
||||
verticalbg->setFlags(QGraphicsItem::ItemClipsChildrenToShape |
|
||||
QGraphicsItem::ItemClipsToShape);
|
||||
l_scene->addItem(verticalbg);
|
||||
matrix.reset();
|
||||
matrix.translate(startX, startY);
|
||||
verticalbg->setTransform(matrix, false);
|
||||
|
||||
// Note: altitude-scale should contain exactly 6 major ticks
|
||||
// for 30 meters
|
||||
m_altitudescale = new QGraphicsItemGroup();
|
||||
m_altitudescale->setParentItem(verticalbg);
|
||||
|
||||
QGraphicsSvgItem *altitudescalelines = new CachedSvgItem();
|
||||
altitudescalelines->setSharedRenderer(m_renderer);
|
||||
altitudescalelines->setElementId("altitude-scale");
|
||||
altitudeScaleHeight = m_renderer->matrixForElement("altitude-scale").mapRect(
|
||||
m_renderer->boundsOnElement("altitude-scale")).height();
|
||||
// Quick way to reposition the item before putting it in the group:
|
||||
altitudescalelines->setParentItem(verticalbg);
|
||||
m_altitudescale->addToGroup(altitudescalelines); // (reparents the item)
|
||||
|
||||
// Add the scale text elements:
|
||||
speed0 = new QGraphicsTextItem("XXXX");
|
||||
speed0->setDefaultTextColor(QColor("White"));
|
||||
speed0->setFont(QFont("Arial", (int)altitudeScaleHeight / 30));
|
||||
if (hqFonts) {
|
||||
speed0->setCacheMode(QGraphicsItem::DeviceCoordinateCache);
|
||||
}
|
||||
matrix.reset();
|
||||
matrix.translate(m_renderer->matrixForElement("altitude-scale").mapRect(m_renderer->boundsOnElement("altitude-scale")).width()
|
||||
+ m_renderer->matrixForElement("altitude-bg").mapRect(m_renderer->boundsOnElement("altitude-bg")).width() / 10, -altitudeScaleHeight / 30);
|
||||
speed0->setTransform(matrix, false);
|
||||
speed0->setParentItem(verticalbg);
|
||||
m_altitudescale->addToGroup(speed0);
|
||||
for (int i = 0; i < 6; i++) {
|
||||
speed0 = new QGraphicsTextItem("XXXX");
|
||||
speed0->setDefaultTextColor(QColor("White"));
|
||||
speed0->setFont(QFont("Arial", (int)altitudeScaleHeight / 30));
|
||||
speed0->setPlainText(QString().setNum(i * 5 + 1));
|
||||
if (hqFonts) {
|
||||
speed0->setCacheMode(QGraphicsItem::DeviceCoordinateCache);
|
||||
}
|
||||
matrix.translate(0, altitudeScaleHeight / 6);
|
||||
speed0->setTransform(matrix, false);
|
||||
speed0->setParentItem(verticalbg);
|
||||
m_altitudescale->addToGroup(speed0);
|
||||
}
|
||||
// Now vertically center the speed scale on the speed background
|
||||
rectB = verticalbg->boundingRect();
|
||||
rectN = altitudescalelines->boundingRect();
|
||||
m_altitudescale->setPos(0, rectB.height() / 2 - rectN.height() / 2 - rectN.height() / 6);
|
||||
|
||||
// Isolate the Altitude window and put it above the altitude scale
|
||||
compassMatrix = m_renderer->matrixForElement("altitude-window");
|
||||
startX = compassMatrix.mapRect(m_renderer->boundsOnElement("altitude-window")).x();
|
||||
startY = compassMatrix.mapRect(m_renderer->boundsOnElement("altitude-window")).y();
|
||||
qreal altitudeWindowHeight = compassMatrix.mapRect(m_renderer->boundsOnElement("altitude-window")).height();
|
||||
QGraphicsSvgItem *altitudewindow = new CachedSvgItem();
|
||||
altitudewindow->setSharedRenderer(m_renderer);
|
||||
altitudewindow->setElementId("altitude-window");
|
||||
altitudewindow->setFlags(QGraphicsItem::ItemClipsChildrenToShape |
|
||||
QGraphicsItem::ItemClipsToShape);
|
||||
l_scene->addItem(altitudewindow);
|
||||
matrix.reset();
|
||||
matrix.translate(startX, startY);
|
||||
altitudewindow->setTransform(matrix, false);
|
||||
|
||||
// Last create a Text Item at the location of the speed window
|
||||
// and save it for future updates:
|
||||
m_altitudetext = new QGraphicsTextItem("0000");
|
||||
m_altitudetext->setDefaultTextColor(QColor("White"));
|
||||
m_altitudetext->setFont(QFont("Arial", (int)altitudeWindowHeight / 2));
|
||||
if (hqFonts) {
|
||||
m_altitudetext->setCacheMode(QGraphicsItem::DeviceCoordinateCache);
|
||||
}
|
||||
m_altitudetext->setParentItem(altitudewindow);
|
||||
startX = compassMatrix.mapRect(m_renderer->boundsOnElement("altitude-window")).width() / 10;
|
||||
matrix.reset();
|
||||
matrix.translate(startX, 0);
|
||||
m_altitudetext->setTransform(matrix, false);
|
||||
|
||||
////////////////
|
||||
// GCS Telemetry Indicator
|
||||
////////////////
|
||||
if (m_renderer->elementExists("gcstelemetry-Disconnected")) {
|
||||
compassMatrix = m_renderer->matrixForElement("gcstelemetry-Disconnected");
|
||||
startX = compassMatrix.mapRect(m_renderer->boundsOnElement("gcstelemetry-Disconnected")).x();
|
||||
startY = compassMatrix.mapRect(m_renderer->boundsOnElement("gcstelemetry-Disconnected")).y();
|
||||
gcsTelemetryArrow = new CachedSvgItem();
|
||||
gcsTelemetryArrow->setSharedRenderer(m_renderer);
|
||||
gcsTelemetryArrow->setElementId("gcstelemetry-Disconnected");
|
||||
l_scene->addItem(gcsTelemetryArrow);
|
||||
matrix.reset();
|
||||
matrix.translate(startX, startY);
|
||||
gcsTelemetryArrow->setTransform(matrix, false);
|
||||
} else {
|
||||
gcsTelemetryArrow = NULL;
|
||||
}
|
||||
|
||||
if (m_renderer->elementExists("linkrate")) {
|
||||
compassMatrix = m_renderer->matrixForElement("linkrate");
|
||||
startX = compassMatrix.mapRect(m_renderer->boundsOnElement("linkrate")).x();
|
||||
startY = compassMatrix.mapRect(m_renderer->boundsOnElement("linkrate")).y();
|
||||
qreal linkRateHeight = compassMatrix.mapRect(m_renderer->boundsOnElement("linkrate")).height();
|
||||
gcsTelemetryStats = new QGraphicsTextItem();
|
||||
gcsTelemetryStats->setDefaultTextColor(QColor("White"));
|
||||
gcsTelemetryStats->setFont(QFont("Arial", (int)linkRateHeight));
|
||||
if (hqFonts) {
|
||||
gcsTelemetryStats->setCacheMode(QGraphicsItem::DeviceCoordinateCache);
|
||||
}
|
||||
l_scene->addItem(gcsTelemetryStats);
|
||||
matrix.reset();
|
||||
matrix.translate(startX, startY - linkRateHeight / 2);
|
||||
gcsTelemetryStats->setTransform(matrix, false);
|
||||
} else {
|
||||
gcsTelemetryStats = NULL;
|
||||
}
|
||||
|
||||
|
||||
////////////////
|
||||
// GCS Battery Indicator
|
||||
////////////////
|
||||
/* (to be used the day I add a green/yellow/red indicator)
|
||||
compassMatrix = m_renderer->matrixForElement("gcstelemetry-Disconnected");
|
||||
startX = compassMatrix.mapRect(m_renderer->boundsOnElement("gcstelemetry-Disconnected")).x();
|
||||
startY = compassMatrix.mapRect(m_renderer->boundsOnElement("gcstelemetry-Disconnected")).y();
|
||||
gcsTelemetryArrow = new CachedSvgItem();
|
||||
gcsTelemetryArrow->setSharedRenderer(m_renderer);
|
||||
gcsTelemetryArrow->setElementId("gcstelemetry-Disconnected");
|
||||
l_scene->addItem(gcsTelemetryArrow);
|
||||
matrix.reset();
|
||||
matrix.translate(startX,startY);
|
||||
gcsTelemetryArrow->setTransform(matrix,false);
|
||||
*/
|
||||
|
||||
if (m_renderer->elementExists("battery-txt")) {
|
||||
compassMatrix = m_renderer->matrixForElement("battery-txt");
|
||||
startX = compassMatrix.mapRect(m_renderer->boundsOnElement("battery-txt")).x();
|
||||
startY = compassMatrix.mapRect(m_renderer->boundsOnElement("battery-txt")).y();
|
||||
qreal batStatHeight = compassMatrix.mapRect(m_renderer->boundsOnElement("battery-txt")).height();
|
||||
gcsBatteryStats = new QGraphicsTextItem("Battery");
|
||||
gcsBatteryStats->setDefaultTextColor(QColor("White"));
|
||||
gcsBatteryStats->setFont(QFont("Arial", (int)batStatHeight));
|
||||
if (hqFonts) {
|
||||
gcsBatteryStats->setCacheMode(QGraphicsItem::DeviceCoordinateCache);
|
||||
}
|
||||
l_scene->addItem(gcsBatteryStats);
|
||||
matrix.reset();
|
||||
matrix.translate(startX, startY - batStatHeight / 2);
|
||||
gcsBatteryStats->setTransform(matrix, false);
|
||||
} else {
|
||||
gcsBatteryStats = NULL;
|
||||
}
|
||||
|
||||
////////////////
|
||||
// GCS GPS Indicator
|
||||
////////////////
|
||||
/* (to be used the day I add a green/yellow/red indicator)
|
||||
compassMatrix = m_renderer->matrixForElement("gcstelemetry-Disconnected");
|
||||
startX = compassMatrix.mapRect(m_renderer->boundsOnElement("gcstelemetry-Disconnected")).x();
|
||||
startY = compassMatrix.mapRect(m_renderer->boundsOnElement("gcstelemetry-Disconnected")).y();
|
||||
gcsTelemetryArrow = new CachedSvgItem();
|
||||
gcsTelemetryArrow->setSharedRenderer(m_renderer);
|
||||
gcsTelemetryArrow->setElementId("gcstelemetry-Disconnected");
|
||||
l_scene->addItem(gcsTelemetryArrow);
|
||||
matrix.reset();
|
||||
matrix.translate(startX,startY);
|
||||
gcsTelemetryArrow->setTransform(matrix,false);
|
||||
*/
|
||||
|
||||
if (m_renderer->elementExists("gps-txt")) {
|
||||
compassMatrix = m_renderer->matrixForElement("gps-txt");
|
||||
startX = compassMatrix.mapRect(m_renderer->boundsOnElement("gps-txt")).x();
|
||||
startY = compassMatrix.mapRect(m_renderer->boundsOnElement("gps-txt")).y();
|
||||
qreal gpsStatHeight = compassMatrix.mapRect(m_renderer->boundsOnElement("gps-txt")).height();
|
||||
gcsGPSStats = new QGraphicsTextItem("GPS");
|
||||
gcsGPSStats->setDefaultTextColor(QColor("White"));
|
||||
gcsGPSStats->setFont(QFont("Arial", (int)gpsStatHeight));
|
||||
if (hqFonts) {
|
||||
gcsGPSStats->setCacheMode(QGraphicsItem::DeviceCoordinateCache);
|
||||
}
|
||||
l_scene->addItem(gcsGPSStats);
|
||||
matrix.reset();
|
||||
matrix.translate(startX, startY - gpsStatHeight / 2);
|
||||
gcsGPSStats->setTransform(matrix, false);
|
||||
} else {
|
||||
gcsGPSStats = NULL;
|
||||
}
|
||||
|
||||
l_scene->setSceneRect(m_background->boundingRect());
|
||||
|
||||
/////////////////
|
||||
// Item placement
|
||||
/////////////////
|
||||
|
||||
// Now Initialize the center for all transforms of the relevant elements to the
|
||||
// center of the background:
|
||||
|
||||
// 1) Move the center of the needle to the center of the background.
|
||||
rectB = m_background->boundingRect();
|
||||
rectN = m_world->boundingRect();
|
||||
m_world->setPos(rectB.width() / 2 - rectN.width() / 2, rectB.height() / 2 - rectN.height() / 2);
|
||||
// 2) Put the transform origin point of the needle at its center.
|
||||
m_world->setTransformOriginPoint(rectN.width() / 2, rectN.height() / 2);
|
||||
|
||||
rectN = m_rollscale->boundingRect();
|
||||
m_rollscale->setPos(rectB.width() / 2 - rectN.width() / 2, rectB.height() / 2 - rectN.height() / 2);
|
||||
m_rollscale->setTransformOriginPoint(rectN.width() / 2, rectN.height() / 2);
|
||||
|
||||
// Also to the same init for the compass:
|
||||
rectB = m_compass->boundingRect();
|
||||
rectN = m_compassband->boundingRect();
|
||||
m_compassband->setPos(rectB.width() / 2 - rectN.width() / 2, rectB.height() / 2 - rectN.height() / 2);
|
||||
m_compassband->setTransformOriginPoint(rectN.width() / 2, rectN.height() / 2);
|
||||
|
||||
// Last: we just loaded the dial file which is by default valid for a "zero" value
|
||||
// of the needles, so we have to reset the needles too upon dial file loading, otherwise
|
||||
// we would end up with an offset when we change a dial file and the needle value
|
||||
// is not zero at that time.
|
||||
rollValue = 0;
|
||||
pitchValue = 0;
|
||||
headingValue = 0;
|
||||
groundspeedValue = 0;
|
||||
altitudeValue = 0;
|
||||
pfdError = false;
|
||||
if (!dialTimer.isActive()) {
|
||||
dialTimer.start(); // Rearm the dial Timer which might be stopped.
|
||||
}
|
||||
} else { qDebug() << "Error on PFD artwork file.";
|
||||
m_renderer->load(QString(":/pfd/images/pfd-default.svg"));
|
||||
l_scene->clear(); // This also deletes all items contained in the scene.
|
||||
m_background = new CachedSvgItem();
|
||||
m_background->setSharedRenderer(m_renderer);
|
||||
l_scene->addItem(m_background);
|
||||
pfdError = true; }
|
||||
}
|
||||
|
||||
void PFDGadgetWidget::paint()
|
||||
{
|
||||
// update();
|
||||
}
|
||||
|
||||
void PFDGadgetWidget::paintEvent(QPaintEvent *event)
|
||||
{
|
||||
// Skip painting until the dial file is loaded
|
||||
if (!m_renderer->isValid()) {
|
||||
qDebug() << "Dial file not loaded, not rendering";
|
||||
return;
|
||||
}
|
||||
QGraphicsView::paintEvent(event);
|
||||
}
|
||||
|
||||
// This event enables the dial to be dynamically resized
|
||||
// whenever the gadget is resized, taking advantage of the vector
|
||||
// nature of SVG dials.
|
||||
void PFDGadgetWidget::resizeEvent(QResizeEvent *event)
|
||||
{
|
||||
Q_UNUSED(event);
|
||||
fitInView(m_background, Qt::KeepAspectRatio);
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
\brief Update method for the vertical scales
|
||||
*/
|
||||
void PFDGadgetWidget::moveVerticalScales() {}
|
||||
|
||||
void PFDGadgetWidget::moveSky()
|
||||
{
|
||||
int dialCount = 2; // Gets decreased by one for each element
|
||||
|
||||
// which has finished moving
|
||||
// qDebug() << "MoveSky";
|
||||
/// TODO: optimize!!!
|
||||
if (pfdError) {
|
||||
// skyDialTimer.stop();
|
||||
return;
|
||||
}
|
||||
|
||||
// In some instances, it can happen that the rollValue & target are
|
||||
// invalid inside the UAVObjects, and become a "nan" value, which freezes
|
||||
// the PFD and the whole GCS: for this reason, we check this here.
|
||||
// The strange check below works, it is a workaround because "isnan(double)"
|
||||
// is not supported on every compiler.
|
||||
if (rollTarget != rollTarget || pitchTarget != pitchTarget) {
|
||||
return;
|
||||
}
|
||||
//////
|
||||
// Roll
|
||||
//////
|
||||
if (rollValue != rollTarget) {
|
||||
double rollDiff;
|
||||
if ((abs((rollValue - rollTarget) * 10) > 5) && beSmooth) {
|
||||
rollDiff = (rollTarget - rollValue) / 2;
|
||||
} else {
|
||||
rollDiff = rollTarget - rollValue;
|
||||
dialCount--;
|
||||
}
|
||||
m_world->setRotation(m_world->rotation() + rollDiff);
|
||||
m_rollscale->setRotation(m_rollscale->rotation() + rollDiff);
|
||||
rollValue += rollDiff;
|
||||
} else {
|
||||
dialCount--;
|
||||
}
|
||||
|
||||
//////
|
||||
// Pitch
|
||||
//////
|
||||
if (pitchValue != pitchTarget) {
|
||||
double pitchDiff;
|
||||
if ((abs((pitchValue - pitchTarget) * 10) > 5) && beSmooth) {
|
||||
// if (0) {
|
||||
pitchDiff = (pitchTarget - pitchValue) / 2;
|
||||
} else {
|
||||
pitchDiff = pitchTarget - pitchValue;
|
||||
dialCount--;
|
||||
}
|
||||
QPointF opd = QPointF(0, pitchDiff);
|
||||
m_world->setTransform(QTransform::fromTranslate(opd.x(), opd.y()), true);
|
||||
QPointF oop = m_world->transformOriginPoint();
|
||||
m_world->setTransformOriginPoint((oop.x() - opd.x()), (oop.y() - opd.y()));
|
||||
pitchValue += pitchDiff;
|
||||
} else {
|
||||
dialCount--;
|
||||
}
|
||||
|
||||
if (dialCount) {
|
||||
scene()->update(sceneRect());
|
||||
}
|
||||
// if (!dialCount)
|
||||
// skyDialTimer.stop();
|
||||
}
|
||||
|
||||
|
||||
// Take an input value and move the elements accordingly.
|
||||
// Movement is smooth, starts fast and slows down when
|
||||
// approaching the target.
|
||||
//
|
||||
void PFDGadgetWidget::moveNeedles()
|
||||
{
|
||||
int dialCount = 3; // Gets decreased by one for each element
|
||||
|
||||
// which has finished moving
|
||||
|
||||
// qDebug() << "MoveNeedles";
|
||||
/// TODO: optimize!!!
|
||||
|
||||
if (pfdError) {
|
||||
dialTimer.stop();
|
||||
return;
|
||||
}
|
||||
|
||||
//////
|
||||
// Heading
|
||||
//
|
||||
// If you want a smooth transition between two angles, It is usually solved that by substracting
|
||||
// one from another, and if the result is >180 or <-180 I substract (respectively add) 360 degrees
|
||||
// to it. That way you always get the "shorter difference" to turn in.
|
||||
//////
|
||||
if (headingValue != headingTarget) {
|
||||
double headingDiff;
|
||||
if ((abs((headingValue - headingTarget) * 10) > 5) && beSmooth) {
|
||||
headingDiff = (headingTarget - headingValue) / 5;
|
||||
} else {
|
||||
headingDiff = headingTarget - headingValue;
|
||||
dialCount--;
|
||||
}
|
||||
double threshold = 180 * compassBandWidth / 540;
|
||||
// Note: rendering can jump oh so very slightly when crossing the 180 degree
|
||||
// boundary, should not impact actual useability of the display.
|
||||
if ((headingValue + headingDiff) >= threshold) {
|
||||
// We went over 180°: activate a -360 degree offset
|
||||
headingDiff -= 2 * threshold;
|
||||
headingTarget -= 2 * threshold;
|
||||
} else if ((headingValue + headingDiff) < -threshold) {
|
||||
// We went under -180°: remove the -360 degree offset
|
||||
headingDiff += 2 * threshold;
|
||||
headingTarget += 2 * threshold;
|
||||
}
|
||||
QPointF opd = QPointF(headingDiff, 0);
|
||||
m_compassband->setTransform(QTransform::fromTranslate(opd.x(), opd.y()), true);
|
||||
headingValue += headingDiff;
|
||||
} else {
|
||||
dialCount--;
|
||||
}
|
||||
|
||||
//////
|
||||
// Airspeed
|
||||
//////
|
||||
if (airspeedValue != airspeedTarget) {
|
||||
if ((abs(airspeedValue - airspeedTarget) > speedScaleHeight / 100) && beSmooth) {
|
||||
airspeedValue += (airspeedTarget - airspeedValue) / 2;
|
||||
} else {
|
||||
airspeedValue = airspeedTarget;
|
||||
dialCount--;
|
||||
}
|
||||
|
||||
float airspeed_kph = airspeedValue * 3.6;
|
||||
float airspeed_kph_scale = airspeed_kph * speedScaleHeight / 30;
|
||||
|
||||
qreal x = m_speedscale->transform().dx();
|
||||
// opd = QPointF(x,fmod(airspeed_kph,speedScaleHeight/6));
|
||||
// fmod does rounding errors!! the formula below works better:
|
||||
QPointF opd = QPointF(x, airspeed_kph_scale - floor(airspeed_kph_scale / speedScaleHeight * 6) * speedScaleHeight / 6);
|
||||
m_speedscale->setTransform(QTransform::fromTranslate(opd.x(), opd.y()), false);
|
||||
|
||||
double speedText = airspeed_kph;
|
||||
QString s = QString().sprintf("%.0f", speedText);
|
||||
m_speedtext->setPlainText(s);
|
||||
|
||||
// Now update the text elements inside the scale:
|
||||
// (Qt documentation states that the list has the same order
|
||||
// as the item add order in the QGraphicsItemGroup)
|
||||
QList <QGraphicsItem *> textList = m_speedscale->childItems();
|
||||
qreal val = 5 * floor(airspeed_kph_scale / speedScaleHeight * 6) + 20;
|
||||
foreach(QGraphicsItem * item, textList) {
|
||||
if (QGraphicsTextItem * text = qgraphicsitem_cast<QGraphicsTextItem *>(item)) {
|
||||
QString s = (val < 0) ? QString() : QString().sprintf("%.0f", val);
|
||||
if (text->toPlainText() == s) {
|
||||
break; // This should happen at element one if is has not changed, indicating
|
||||
}
|
||||
// that it's not necessary to do the rest of the list
|
||||
text->setPlainText(s);
|
||||
val -= 5;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
dialCount--;
|
||||
}
|
||||
|
||||
//////
|
||||
// Groundspeed
|
||||
//////
|
||||
if (groundspeedValue != groundspeedTarget) {
|
||||
groundspeedValue = groundspeedTarget;
|
||||
qreal x = m_speedscale->transform().dx();
|
||||
// opd = QPointF(x,fmod(groundspeedValue,speedScaleHeight/6));
|
||||
// fmod does rounding errors!! the formula below works better:
|
||||
QPointF opd = QPointF(x, groundspeedValue - floor(groundspeedValue / speedScaleHeight * 6) * speedScaleHeight / 6);
|
||||
m_speedscale->setTransform(QTransform::fromTranslate(opd.x(), opd.y()), false);
|
||||
|
||||
double speedText = groundspeedValue / speedScaleHeight * 30;
|
||||
QString s = QString().sprintf("%.0f", speedText);
|
||||
m_speedtext->setPlainText(s);
|
||||
|
||||
// Now update the text elements inside the scale:
|
||||
// (Qt documentation states that the list has the same order
|
||||
// as the item add order in the QGraphicsItemGroup)
|
||||
QList <QGraphicsItem *> textList = m_speedscale->childItems();
|
||||
qreal val = 5 * floor(groundspeedValue / speedScaleHeight * 6) + 20;
|
||||
foreach(QGraphicsItem * item, textList) {
|
||||
if (QGraphicsTextItem * text = qgraphicsitem_cast<QGraphicsTextItem *>(item)) {
|
||||
QString s = (val < 0) ? QString() : QString().sprintf("%.0f", val);
|
||||
if (text->toPlainText() == s) {
|
||||
break; // This should happen at element one if is has not changed, indicating
|
||||
}
|
||||
// that it's not necessary to do the rest of the list
|
||||
text->setPlainText(s);
|
||||
val -= 5;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//////
|
||||
// Altitude
|
||||
//////
|
||||
if (altitudeValue != altitudeTarget) {
|
||||
if ((abs(altitudeValue - altitudeTarget) > altitudeScaleHeight / 100) && beSmooth) {
|
||||
altitudeValue += (altitudeTarget - altitudeValue) / 2;
|
||||
} else {
|
||||
altitudeValue = altitudeTarget;
|
||||
dialCount--;
|
||||
}
|
||||
|
||||
// The altitude scale represents 30 meters
|
||||
float altitudeValue_scale = floor(altitudeValue * 10) / 10 * altitudeScaleHeight / 30;
|
||||
|
||||
qreal x = m_altitudescale->transform().dx();
|
||||
// opd = QPointF(x,fmod(altitudeValue,altitudeScaleHeight/6));
|
||||
// fmod does rounding errors!! the formula below works better:
|
||||
QPointF opd = QPointF(x, altitudeValue_scale - floor(altitudeValue_scale / altitudeScaleHeight * 6) * altitudeScaleHeight / 6);
|
||||
m_altitudescale->setTransform(QTransform::fromTranslate(opd.x(), opd.y()), false);
|
||||
|
||||
double altitudeText = altitudeValue;
|
||||
QString s = QString().sprintf("%.0f", altitudeText);
|
||||
m_altitudetext->setPlainText(s);
|
||||
|
||||
// Now update the text elements inside the scale:
|
||||
// (Qt documentation states that the list has the same order
|
||||
// as the item add order in the QGraphicsItemGroup)
|
||||
QList <QGraphicsItem *> textList = m_altitudescale->childItems();
|
||||
qreal val = 5 * floor(altitudeValue_scale / altitudeScaleHeight * 6) + 20;
|
||||
foreach(QGraphicsItem * item, textList) {
|
||||
if (QGraphicsTextItem * text = qgraphicsitem_cast<QGraphicsTextItem *>(item)) {
|
||||
QString s = (val < 0) ? QString() : QString().sprintf("%.0f", val);
|
||||
if (text->toPlainText() == s) {
|
||||
break; // This should happen at element one if is has not changed, indicating
|
||||
}
|
||||
// that it's not necessary to do the rest of the list
|
||||
text->setPlainText(s);
|
||||
val -= 5;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
dialCount--;
|
||||
}
|
||||
|
||||
if (!dialCount) {
|
||||
dialTimer.stop();
|
||||
} else {
|
||||
scene()->update(sceneRect());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@}
|
||||
@}
|
||||
*/
|
@ -1,160 +0,0 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
*
|
||||
* @file pfdgadgetwidget.h
|
||||
* @author Edouard Lafargue Copyright (C) 2010.
|
||||
* @addtogroup GCSPlugins GCS Plugins
|
||||
* @{
|
||||
* @addtogroup OPMapPlugin Primary Flight Display Plugin
|
||||
* @{
|
||||
* @brief The Primary Flight Display Gadget
|
||||
*****************************************************************************/
|
||||
/*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#ifndef PFDGADGETWIDGET_H_
|
||||
#define PFDGADGETWIDGET_H_
|
||||
|
||||
#include "pfdgadgetconfiguration.h"
|
||||
#include "extensionsystem/pluginmanager.h"
|
||||
#include "uavobjectmanager.h"
|
||||
#include "uavobject.h"
|
||||
#include <QGraphicsView>
|
||||
#include <QtSvg/QSvgRenderer>
|
||||
#include <QtSvg/QGraphicsSvgItem>
|
||||
|
||||
#include <QFile>
|
||||
#include <QTimer>
|
||||
|
||||
class PFDGadgetWidget : public QGraphicsView {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
PFDGadgetWidget(QWidget *parent = 0);
|
||||
~PFDGadgetWidget();
|
||||
void setDialFile(QString dfn);
|
||||
void paint();
|
||||
// Sets up needle/UAVObject connections:
|
||||
void connectNeedles();
|
||||
void enableOpenGL(bool flag);
|
||||
void setHqFonts(bool flag)
|
||||
{
|
||||
hqFonts = flag;
|
||||
}
|
||||
void enableSmoothUpdates(bool flag)
|
||||
{
|
||||
beSmooth = flag;
|
||||
}
|
||||
|
||||
|
||||
public slots:
|
||||
void updateAttitude(UAVObject *object1);
|
||||
void updateHeading(UAVObject *object1);
|
||||
void updateGPS(UAVObject *object1);
|
||||
void updateGroundspeed(UAVObject *object1);
|
||||
void updateAirspeed(UAVObject *object1);
|
||||
void updateAltitude(UAVObject *object1);
|
||||
void updateBattery(UAVObject *object1);
|
||||
void updateLinkStatus(UAVObject *object1);
|
||||
|
||||
protected:
|
||||
void paintEvent(QPaintEvent *event);
|
||||
void resizeEvent(QResizeEvent *event);
|
||||
|
||||
|
||||
private slots:
|
||||
void moveNeedles();
|
||||
void moveVerticalScales();
|
||||
void moveSky();
|
||||
void setToolTipPrivate();
|
||||
private:
|
||||
QSvgRenderer *m_renderer;
|
||||
|
||||
// Background: background
|
||||
QGraphicsSvgItem *m_background;
|
||||
// earth/sky : world
|
||||
QGraphicsSvgItem *m_world;
|
||||
// Roll scale: rollscale
|
||||
QGraphicsSvgItem *m_rollscale;
|
||||
// Compass dial:
|
||||
QGraphicsSvgItem *m_compass;
|
||||
// Compass band:
|
||||
QGraphicsSvgItem *m_compassband;
|
||||
// Home point:
|
||||
QGraphicsSvgItem *m_homewaypoint;
|
||||
// Next point:
|
||||
QGraphicsSvgItem *m_nextwaypoint;
|
||||
// Home point bearing:
|
||||
QGraphicsSvgItem *m_homepointbearing;
|
||||
// Next point bearing:
|
||||
QGraphicsSvgItem *m_nextpointbearing;
|
||||
// Speed scale:
|
||||
QGraphicsItemGroup *m_speedscale;
|
||||
// Speed indicator text:
|
||||
QGraphicsTextItem *m_speedtext;
|
||||
// Vertical altitude scale:
|
||||
QGraphicsItemGroup *m_altitudescale;
|
||||
// Altitude indicator text:
|
||||
QGraphicsTextItem *m_altitudetext;
|
||||
// GCS link status Arrow
|
||||
QGraphicsSvgItem *gcsTelemetryArrow;
|
||||
QGraphicsTextItem *gcsTelemetryStats;
|
||||
QGraphicsTextItem *gcsBatteryStats;
|
||||
QGraphicsTextItem *gcsGPSStats;
|
||||
|
||||
// The Value and target variables
|
||||
// are expressed in degrees
|
||||
double rollTarget;
|
||||
double rollValue;
|
||||
double pitchTarget;
|
||||
double pitchValue;
|
||||
double headingTarget;
|
||||
double headingValue;
|
||||
double groundspeedTarget;
|
||||
double groundspeedValue;
|
||||
double airspeedTarget;
|
||||
double airspeedValue;
|
||||
double altitudeTarget;
|
||||
double altitudeValue;
|
||||
|
||||
qreal compassBandWidth;
|
||||
qreal speedScaleHeight;
|
||||
qreal altitudeScaleHeight;
|
||||
|
||||
// Name of the fields to read when an update is received:
|
||||
UAVDataObject *airspeedObj;
|
||||
UAVDataObject *altitudeObj;
|
||||
UAVDataObject *attitudeObj;
|
||||
UAVDataObject *groundspeedObj;
|
||||
UAVDataObject *headingObj;
|
||||
UAVDataObject *gpsObj;
|
||||
UAVDataObject *gcsTelemetryObj;
|
||||
UAVDataObject *gcsBatteryObj;
|
||||
|
||||
// Rotation timer
|
||||
QTimer dialTimer;
|
||||
QTimer skyDialTimer;
|
||||
|
||||
QString satString;
|
||||
QString batString;
|
||||
|
||||
// Flag to check for pfd Error
|
||||
bool pfdError;
|
||||
// Flag to enable better rendering of fonts in OpenGL
|
||||
bool hqFonts;
|
||||
bool beSmooth;
|
||||
};
|
||||
#endif /* PFDGADGETWIDGET_H_ */
|
@ -1,65 +0,0 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
*
|
||||
* @file pfdplugin.h
|
||||
* @author Edouard Lafargue Copyright (C) 2010.
|
||||
* @addtogroup GCSPlugins GCS Plugins
|
||||
* @{
|
||||
* @addtogroup OPMapPlugin Primary Flight Display Plugin
|
||||
* @{
|
||||
* @brief The Primary Flight Display Gadget
|
||||
*****************************************************************************/
|
||||
/*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include "pfdplugin.h"
|
||||
#include "pfdgadgetfactory.h"
|
||||
#include <QDebug>
|
||||
#include <QtPlugin>
|
||||
#include <QStringList>
|
||||
#include <extensionsystem/pluginmanager.h>
|
||||
|
||||
|
||||
PFDPlugin::PFDPlugin()
|
||||
{
|
||||
// Do nothing
|
||||
}
|
||||
|
||||
PFDPlugin::~PFDPlugin()
|
||||
{
|
||||
// Do nothing
|
||||
}
|
||||
|
||||
bool PFDPlugin::initialize(const QStringList & args, QString *errMsg)
|
||||
{
|
||||
Q_UNUSED(args);
|
||||
Q_UNUSED(errMsg);
|
||||
mf = new PFDGadgetFactory(this);
|
||||
addAutoReleasedObject(mf);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void PFDPlugin::extensionsInitialized()
|
||||
{
|
||||
// Do nothing
|
||||
}
|
||||
|
||||
void PFDPlugin::shutdown()
|
||||
{
|
||||
// Do nothing
|
||||
}
|
||||
Q_EXPORT_PLUGIN(PFDPlugin)
|
@ -1,46 +0,0 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
*
|
||||
* @file pfdplugin.h
|
||||
* @author Edouard Lafargue Copyright (C) 2010.
|
||||
* @addtogroup GCSPlugins GCS Plugins
|
||||
* @{
|
||||
* @addtogroup OPMapPlugin Primary Flight Display Plugin
|
||||
* @{
|
||||
* @brief The Primary Flight Display Gadget
|
||||
*****************************************************************************/
|
||||
/*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#ifndef PFDPLUGIN_H_
|
||||
#define PFDPLUGIN_H_
|
||||
|
||||
#include <extensionsystem/iplugin.h>
|
||||
|
||||
class PFDGadgetFactory;
|
||||
|
||||
class PFDPlugin : public ExtensionSystem::IPlugin {
|
||||
public:
|
||||
PFDPlugin();
|
||||
~PFDPlugin();
|
||||
|
||||
void extensionsInitialized();
|
||||
bool initialize(const QStringList & arguments, QString *errorString);
|
||||
void shutdown();
|
||||
private:
|
||||
PFDGadgetFactory *mf;
|
||||
};
|
||||
#endif /* PFDPLUGIN_H_ */
|
@ -22,7 +22,7 @@
|
||||
|
||||
PfdQmlGadgetFactory::PfdQmlGadgetFactory(QObject *parent) :
|
||||
IUAVGadgetFactory(QString("PfdQmlGadget"),
|
||||
tr("PFD (qml)"),
|
||||
tr("PFD"),
|
||||
parent)
|
||||
{}
|
||||
|
||||
|
@ -132,12 +132,6 @@ plugin_gpsdisplay.depends = plugin_coreplugin
|
||||
plugin_gpsdisplay.depends += plugin_uavobjects
|
||||
SUBDIRS += plugin_gpsdisplay
|
||||
|
||||
# Primary Flight Display (PFD) gadget
|
||||
plugin_pfd.subdir = pfd
|
||||
plugin_pfd.depends = plugin_coreplugin
|
||||
plugin_pfd.depends += plugin_uavobjects
|
||||
SUBDIRS += plugin_pfd
|
||||
|
||||
# QML viewer gadget
|
||||
plugin_qmlview.subdir = qmlview
|
||||
plugin_qmlview.depends = plugin_coreplugin
|
||||
@ -150,7 +144,7 @@ plugin_pathactioneditor.depends = plugin_coreplugin
|
||||
plugin_pathactioneditor.depends += plugin_uavobjects
|
||||
SUBDIRS += plugin_pathactioneditor
|
||||
|
||||
# Primary Flight Display (PFD) gadget, QML version
|
||||
# Primary Flight Display (PFD) gadget
|
||||
plugin_pfdqml.subdir = pfdqml
|
||||
plugin_pfdqml.depends = plugin_coreplugin
|
||||
plugin_pfdqml.depends += plugin_uavobjects
|
||||
|
Loading…
x
Reference in New Issue
Block a user