From c8cd749692199eea243f1df54d7b64ad3c9bb97f Mon Sep 17 00:00:00 2001 From: Laurent Lalanne Date: Thu, 21 Aug 2014 14:28:17 +0200 Subject: [PATCH] OP-1438 VSI_Arc_PFD+Status Refactored PFD for best viewing on small devices / laptops. Battery panel added on left --- .../share/openpilotgcs/pfd/default/Info.qml | 494 +++-- .../openpilotgcs/pfd/default/Warnings.qml | 8 - .../share/openpilotgcs/pfd/default/pfd.svg | 1638 ++++++----------- 3 files changed, 926 insertions(+), 1214 deletions(-) diff --git a/ground/openpilotgcs/share/openpilotgcs/pfd/default/Info.qml b/ground/openpilotgcs/share/openpilotgcs/pfd/default/Info.qml index c6cc2fa5f..81f1e9d90 100644 --- a/ground/openpilotgcs/share/openpilotgcs/pfd/default/Info.qml +++ b/ground/openpilotgcs/share/openpilotgcs/pfd/default/Info.qml @@ -31,12 +31,21 @@ Item { property real wp_eta_m: (wp_eta > 0 ? Math.floor((wp_eta - wp_eta_h*3600)/60) : 0) property real wp_eta_s: (wp_eta > 0 ? Math.floor(wp_eta - wp_eta_h*3600 - wp_eta_m*60) : 0) + property real est_flight_time: Math.round(FlightBatteryState.EstimatedFlightTime) + property real est_time_h: (est_flight_time > 0 ? Math.floor(est_flight_time / 3600) : 0 ) + property real est_time_m: (est_flight_time > 0 ? Math.floor((est_flight_time - est_time_h*3600)/60) : 0) + property real est_time_s: (est_flight_time > 0 ? Math.floor(est_flight_time - est_time_h*3600 - est_time_m*60) : 0) + property real posEast_old property real posNorth_old property real total_distance property bool init_dist: false property bool hide_display_rc: false + property bool hide_display_bat: false + + // Uninitialised, Ok, Warning, Critical, Error + property variant batColors : ["#2c2929", "green", "orange", "red", "red"] function reset_distance(){ total_distance = 0; @@ -63,10 +72,19 @@ Item { } function hide_display_rcinput(){ - if (hide_display_rc == false) + if (hide_display_rc == false && hide_display_bat == false) hide_display_rc = true; else hide_display_rc = false; + battery_bg.z = -1 + } + + function hide_display_battery(){ + if (hide_display_bat == false && hide_display_rc == false) + hide_display_bat = true; + else + hide_display_bat = false; + battery_bg.z = 10 } SvgElementImage { @@ -76,21 +94,6 @@ Item { width: parent.width } - SvgElementImage { - id: batinfo_energy - elementName: "warning-low-energy" - sceneSize: info.sceneSize - Rectangle { - anchors.fill: batinfo_energy - border.width: 0 - // Alarm based on FlightBatteryState.EstimatedFlightTime < 120s orange, < 60s red - color: (FlightBatteryState.EstimatedFlightTime <= 120 && FlightBatteryState.EstimatedFlightTime > 60 ? "orange" : - (FlightBatteryState.EstimatedFlightTime <= 60 ? "red": "black")) - - visible: FlightBatteryState.ConsumedEnergy > 0 - } - } - Repeater { id: satNumberBar @@ -111,55 +114,17 @@ Item { elementName: "gps-mode-text" Text { - text: ["No GPS", "No Fix", "Fix2D", "Fix3D"][GPSPositionSensor.Status] + text: ["NO GPS", "NO FIX", "FIX 2D", "FIX 3D"][GPSPositionSensor.Status] anchors.centerIn: parent - font.pixelSize: Math.floor(parent.height*1.2) + font.pixelSize: Math.floor(parent.height*1.3) + font.family: "Arial" color: "white" } } - SvgElementPositionItem { - sceneSize: info.sceneSize - elementName: "telemetry-status" - - Text { - text: ["Disconnected","HandshakeReq","HandshakeAck","Connected"][tele_status.toString()] - - anchors.centerIn: parent - font.pixelSize: Math.floor(parent.height*1.2) - color: "white" - } - } - - Repeater { - id: txNumberBar - - property int txRateNumber : GCSTelemetryStats.TxDataRate.toFixed()/10 // 250 max - - model: 25 - SvgElementImage { - property int minTxRateNumber : index+1 - elementName: "tx" + minTxRateNumber - sceneSize: info.sceneSize - visible: txNumberBar.txRateNumber >= minTxRateNumber && ((GCSTelemetryStats.Status ==3 && OPLinkStatus.LinkState == 4 ) - || (GCSTelemetryStats.Status ==3 && OPLinkStatus.LinkState == 1 )) - } - } - - Repeater { - id: rxNumberBar - - property int rxRateNumber : GCSTelemetryStats.RxDataRate.toFixed()/100 // 2500 max - - model: 25 - SvgElementImage { - property int minRxRateNumber : index+1 - elementName: "rx" + minRxRateNumber - sceneSize: info.sceneSize - visible: rxNumberBar.rxRateNumber >= minRxRateNumber && ((GCSTelemetryStats.Status ==3 && OPLinkStatus.LinkState == 4 ) - || (GCSTelemetryStats.Status ==3 && OPLinkStatus.LinkState == 1 )) - } - } + // + // Waypoint Info + // SvgElementPositionItem { sceneSize: info.sceneSize @@ -171,10 +136,13 @@ Item { Text { text: " "+wp_heading.toFixed(1)+"°" - anchors.centerIn: parent - font.pixelSize: parent.height*1.1 - color: "magenta" + color: "cyan" + + font { + family: "Arial" + pixelSize: Math.floor(parent.height * 1.5) + } } } @@ -188,10 +156,13 @@ Item { Text { text: " "+wp_distance.toFixed(0)+" m" - anchors.centerIn: parent - font.pixelSize: parent.height*1.1 - color: "magenta" + color: "cyan" + + font { + family: "Arial" + pixelSize: Math.floor(parent.height * 1.5) + } } } @@ -203,14 +174,17 @@ Item { y: Math.floor(scaledBounds.y * sceneItem.height) visible: OPLinkStatus.LinkState == 4 //OPLink Connected - MouseArea { id: total_dist_mouseArea; anchors.fill: parent; onClicked: reset_distance()} + MouseArea { id: total_dist_mouseArea; anchors.fill: parent; cursorShape: Qt.PointingHandCursor; onClicked: reset_distance()} Text { text: " "+total_distance.toFixed(0)+" m" - anchors.centerIn: parent - font.pixelSize: parent.height*1.1 - color: "magenta" + color: "cyan" + + font { + family: "Arial" + pixelSize: Math.floor(parent.height * 1.5) + } } Timer { @@ -229,10 +203,13 @@ Item { Text { text: formatTime(wp_eta_h) + ":" + formatTime(wp_eta_m) + ":" + formatTime(wp_eta_s) - anchors.centerIn: parent - font.pixelSize: parent.height*1.1 - color: "magenta" + color: "cyan" + + font { + family: "Arial" + pixelSize: Math.floor(parent.height * 1.5) + } } } @@ -246,10 +223,13 @@ Item { Text { text: (WaypointActive.Index+1)+" / "+PathPlan.WaypointCount - anchors.centerIn: parent - font.pixelSize: parent.height*1.1 - color: "magenta" + color: "cyan" + + font { + family: "Arial" + pixelSize: Math.floor(parent.height * 1.5) + } } } @@ -262,102 +242,24 @@ Item { visible: SystemAlarms.Alarm_PathPlan == 1 Text { - text: ["Fly End Point","Fly Vector","Fly Circle Right","Fly Circle Left","Drive End Point","Drive Vector","Drive Circle Right", - "Drive Circle Left","Fixed Attitude","Set Accessory","Land","Disarm Alarm"][PathDesired.Mode] - + text: ["FLY END POINT","FLY VECTOR","FLY CIRCLE RIGHT","FLY CIRCLE LEFT","DRIVE END POINT","DRIVE VECTOR","DRIVE CIRCLE LEFT", + "DRIVE CIRCLE RIGHT","FIXED ATTITUDE","SET ACCESSORY","LAND","DISARM ALARM"][PathDesired.Mode] anchors.centerIn: parent - font.pixelSize: parent.height*1.1 - color: "magenta" - } - } + color: "cyan" - SvgElementPositionItem { - sceneSize: info.sceneSize - elementName: "battery-volt-text" - visible: FlightBatteryState.Voltage > 0 - - Text { - text: FlightBatteryState.Voltage.toFixed(2) - anchors.centerIn: parent - color: "white" font { family: "Arial" - pixelSize: Math.floor(parent.height * 1.2) + pixelSize: Math.floor(parent.height * 1.5) } } } - SvgElementPositionItem { - sceneSize: info.sceneSize - elementName: "battery-amp-text" - visible: FlightBatteryState.Current > 0 - - Text { - text: FlightBatteryState.Current.toFixed(2) - anchors.centerIn: parent - color: "white" - font { - family: "Arial" - pixelSize: Math.floor(parent.height * 1.2) - } - } - } - - SvgElementPositionItem { - sceneSize: info.sceneSize - elementName: "battery-milliamp-text" - visible: FlightBatteryState.ConsumedEnergy > 0 - - Text { - text: FlightBatteryState.ConsumedEnergy.toFixed() - anchors.centerIn: parent - color: "white" - font { - family: "Arial" - pixelSize: Math.floor(parent.height * 1.2) - } - } - } - - Repeater { - id: throttleNumberBar - - property int throttleNumber : ActuatorDesired.Thrust.toFixed(1)*10 - - model: 10 - SvgElementImage { - property int minThrottleNumber : index+1 - elementName: "eng" + minThrottleNumber - sceneSize: info.sceneSize - - visible: throttleNumberBar.throttleNumber >= minThrottleNumber - } - } - - SvgElementImage { - id: mask_ThrottleBar - elementName: "throttle-mask" - sceneSize: info.sceneSize - } - SvgElementImage { id: mask_SatBar elementName: "satbar-mask" sceneSize: info.sceneSize } - SvgElementImage { - id: mask_telemetryTx - elementName: "tx-mask" - sceneSize: info.sceneSize - } - - SvgElementImage { - id: mask_telemetryRx - elementName: "rx-mask" - sceneSize: info.sceneSize - } - SvgElementImage { id: home_bg elementName: "home-bg" @@ -469,6 +371,9 @@ Item { } } + // + // Rc-Input panel + // SvgElementImage { id: rc_input_bg @@ -484,6 +389,7 @@ Item { transitions: Transition { SequentialAnimation { + id: rc_input_anim PropertyAnimation { property: "x"; duration: 800 } } } @@ -509,17 +415,43 @@ Item { } SvgElementImage { - id: rc_input_icon - elementName: "rc-input-icon" + id: rc_input_mousearea + elementName: "rc-input-panel-mousearea" sceneSize: info.sceneSize y: Math.floor(scaledBounds.y * sceneItem.height) - MouseArea { id: hidedisp_rcinput; anchors.fill: parent; onClicked: hide_display_rcinput()} + MouseArea { id: hidedisp_rcinput; anchors.fill: parent; cursorShape: Qt.WhatsThisCursor; onClicked: hide_display_rcinput()} states: State { name: "fading" when: hide_display_rc !== true - PropertyChanges { target: rc_input_icon; x: Math.floor(scaledBounds.x * sceneItem.width) - (rc_input_bg.width * 0.85); } + PropertyChanges { target: rc_input_mousearea; x: Math.floor(scaledBounds.x * sceneItem.width) - (rc_input_bg.width * 0.85); } + } + + transitions: Transition { + SequentialAnimation { + PropertyAnimation { property: "x"; duration: 800 } + } + } + } + + SvgElementImage { + id: rc_throttle + elementName: "rc-throttle" + sceneSize: info.sceneSize + + width: scaledBounds.width * sceneItem.width + height: (scaledBounds.height * sceneItem.height) * (ManualControlCommand.Throttle) + + x: scaledBounds.x * sceneItem.width + y: (scaledBounds.y * sceneItem.height) - rc_throttle.height + (scaledBounds.height * sceneItem.height) + + smooth: true + + states: State { + name: "fading" + when: hide_display_rc !== true + PropertyChanges { target: rc_throttle; x: Math.floor(scaledBounds.x * sceneItem.width) - (rc_input_bg.width * 0.85); } } transitions: Transition { @@ -562,6 +494,244 @@ Item { } } + // + // Battery panel + // + + SvgElementImage { + id: battery_bg + elementName: "battery-bg" + sceneSize: info.sceneSize + y: Math.floor(scaledBounds.y * sceneItem.height) + z: 10 + + //visible: !hide_display_rc + states: State { + name: "fading" + when: hide_display_bat !== true + PropertyChanges { target: battery_bg; x: Math.floor(scaledBounds.x * sceneItem.width) - (battery_bg.width * 0.85); } + } + + transitions: Transition { + SequentialAnimation { + PropertyAnimation { property: "x"; duration: 800 } + } + } + } + + SvgElementPositionItem { + id: battery_volt + sceneSize: info.sceneSize + elementName: "battery-volt-text" + z: 11 + + width: scaledBounds.width * sceneItem.width + height: scaledBounds.height * sceneItem.height + y: scaledBounds.y * sceneItem.height + + states: State { + name: "fading" + when: hide_display_bat !== true + PropertyChanges { target: battery_volt; x: Math.floor(scaledBounds.x * sceneItem.width) - (battery_bg.width * 0.85); } + } + + transitions: Transition { + SequentialAnimation { + PropertyAnimation { property: "x"; duration: 800 } + } + } + + Rectangle { + anchors.fill: parent + color: info.batColors[SystemAlarms.Alarm_Battery] + border.color: "white" + border.width: battery_volt.width * 0.01 + radius: border.width * 4 + + Text { + text: FlightBatteryState.Voltage.toFixed(2) + anchors.centerIn: parent + color: "white" + font { + family: "Arial" + pixelSize: Math.floor(parent.height * 0.6) + } + } + } + } + + SvgElementPositionItem { + id: battery_amp + sceneSize: info.sceneSize + elementName: "battery-amp-text" + z: 12 + + width: scaledBounds.width * sceneItem.width + height: scaledBounds.height * sceneItem.height + y: scaledBounds.y * sceneItem.height + + states: State { + name: "fading" + when: hide_display_bat !== true + PropertyChanges { target: battery_amp; x: Math.floor(scaledBounds.x * sceneItem.width) - (battery_bg.width * 0.85); } + } + + transitions: Transition { + SequentialAnimation { + PropertyAnimation { property: "x"; duration: 800 } + } + } + + Rectangle { + anchors.fill: parent + color: info.batColors[SystemAlarms.Alarm_Battery] + border.color: "white" + border.width: battery_volt.width * 0.01 + radius: border.width * 4 + + Text { + text: FlightBatteryState.Current.toFixed(2) + anchors.centerIn: parent + color: "white" + font { + family: "Arial" + pixelSize: Math.floor(parent.height * 0.6) + } + } + } + } + + SvgElementPositionItem { + id: battery_milliamp + sceneSize: info.sceneSize + elementName: "battery-milliamp-text" + z: 13 + + width: scaledBounds.width * sceneItem.width + height: scaledBounds.height * sceneItem.height + y: scaledBounds.y * sceneItem.height + + states: State { + name: "fading" + when: hide_display_bat !== true + PropertyChanges { target: battery_milliamp; x: Math.floor(scaledBounds.x * sceneItem.width) - (battery_bg.width * 0.85); } + } + + transitions: Transition { + SequentialAnimation { + PropertyAnimation { property: "x"; duration: 800 } + } + } + + Rectangle { + anchors.fill: parent + + // Alarm based on FlightBatteryState.EstimatedFlightTime < 120s orange, < 60s red + color: (FlightBatteryState.EstimatedFlightTime <= 120 && FlightBatteryState.EstimatedFlightTime > 60 ? "orange" : + (FlightBatteryState.EstimatedFlightTime <= 60 ? "red": info.batColors[SystemAlarms.Alarm_Battery])) + + border.color: "white" + border.width: battery_volt.width * 0.01 + radius: border.width * 4 + + Text { + text: FlightBatteryState.ConsumedEnergy.toFixed(0) + anchors.centerIn: parent + color: "white" + font { + family: "Arial" + pixelSize: Math.floor(parent.height * 0.6) + } + } + } + } + + SvgElementPositionItem { + id: battery_estimated_flight_time + sceneSize: info.sceneSize + elementName: "battery-estimated-flight-time" + z: 14 + width: scaledBounds.width * sceneItem.width + height: scaledBounds.height * sceneItem.height + y: scaledBounds.y * sceneItem.height + + states: State { + name: "fading" + when: hide_display_bat !== true + PropertyChanges { target: battery_estimated_flight_time; x: Math.floor(scaledBounds.x * sceneItem.width) - (battery_bg.width * 0.85); } + } + + transitions: Transition { + SequentialAnimation { + PropertyAnimation { property: "x"; duration: 800 } + } + } + + Rectangle { + anchors.fill: parent + //color: info.batColors[SystemAlarms.Alarm_Battery] + + // Alarm based on FlightBatteryState.EstimatedFlightTime < 120s orange, < 60s red + color: (FlightBatteryState.EstimatedFlightTime <= 120 && FlightBatteryState.EstimatedFlightTime > 60 ? "orange" : + (FlightBatteryState.EstimatedFlightTime <= 60 ? "red": info.batColors[SystemAlarms.Alarm_Battery])) + + border.color: "white" + border.width: battery_volt.width * 0.01 + radius: border.width * 4 + + Text { + text: formatTime(est_time_h) + ":" + formatTime(est_time_m) + ":" + formatTime(est_time_s) + anchors.centerIn: parent + color: "white" + font { + family: "Arial" + pixelSize: Math.floor(parent.height * 0.6) + } + } + } + } + + SvgElementImage { + id: battery_labels + elementName: "battery-labels" + sceneSize: info.sceneSize + y: Math.floor(scaledBounds.y * sceneItem.height) + z: 15 + states: State { + name: "fading" + when: hide_display_bat !== true + PropertyChanges { target: battery_labels; x: Math.floor(scaledBounds.x * sceneItem.width) - (battery_bg.width * 0.85); } + } + + transitions: Transition { + SequentialAnimation { + PropertyAnimation { property: "x"; duration: 800 } + } + } + } + + SvgElementImage { + id: battery_mousearea + elementName: "battery-panel-mousearea" + sceneSize: info.sceneSize + y: Math.floor(scaledBounds.y * sceneItem.height) + z: 16 + + MouseArea { id: hidedisp_battery; anchors.fill: parent; cursorShape: Qt.WhatsThisCursor; onClicked: hide_display_battery()} + + states: State { + name: "fading" + when: hide_display_bat !== true + PropertyChanges { target: battery_mousearea; x: Math.floor(scaledBounds.x * sceneItem.width) - (battery_bg.width * 0.85); } + } + + transitions: Transition { + SequentialAnimation { + PropertyAnimation { property: "x"; duration: 800 } + } + } + } + SvgElementImage { id: info_border elementName: "info-border" diff --git a/ground/openpilotgcs/share/openpilotgcs/pfd/default/Warnings.qml b/ground/openpilotgcs/share/openpilotgcs/pfd/default/Warnings.qml index ed5b610ba..9144e66ff 100644 --- a/ground/openpilotgcs/share/openpilotgcs/pfd/default/Warnings.qml +++ b/ground/openpilotgcs/share/openpilotgcs/pfd/default/Warnings.qml @@ -255,14 +255,6 @@ Item { visible: SystemAlarms.Alarm_Telemetry > 1 } - SvgElementImage { - id: warning_battery - elementName: "warning-battery" - sceneSize: warnings.sceneSize - anchors.right: parent.right - visible: SystemAlarms.Alarm_Battery > 1 - } - SvgElementImage { id: warning_attitude elementName: "warning-attitude" diff --git a/ground/openpilotgcs/share/openpilotgcs/pfd/default/pfd.svg b/ground/openpilotgcs/share/openpilotgcs/pfd/default/pfd.svg index 2fb698ff8..03ec7c74b 100644 --- a/ground/openpilotgcs/share/openpilotgcs/pfd/default/pfd.svg +++ b/ground/openpilotgcs/share/openpilotgcs/pfd/default/pfd.svg @@ -184,13 +184,13 @@ + y2="442.49057" /> + inkscape:label="rc-input-panel" + style="display:inline" + sodipodi:insensitive="true"> + style="display:inline" + sodipodi:insensitive="true"> - - - - + id="g8289"> - + transform="matrix(1.1599442,0,0,1.1601679,-0.06770889,-73.769595)" + id="rc-input-bg"> + sodipodi:nodetypes="sssscsssscsss" + style="fill:#2c2929;fill-opacity:1;stroke:#ffffff;stroke-width:0.86202729;stroke-opacity:1" + d="m -1.8968835,311 c -2.77,0 -5,2.23 -5,5 l 0,140 c 0,2.77 2.23,5 5,5 L 145,461 l 19,0 c 2.77,0 5,-2.23 5,-5 l 0,-30 c 0,-2.77 -2.23,-5 -5,-5 l -14,0 l 0,-105 c 0,-2.77 -2.23,-5 -5,-5 z" + id="rc-bg" + inkscape:connector-curvature="0" /> - - - - + style="fill:none;stroke:#ffffff;stroke-width:0.86202729;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 150,421 l 0,40" + id="path4930" + inkscape:connector-curvature="0" /> + + + + + + + + + + THROTTLE + + + + + style="display:inline" + sodipodi:insensitive="true"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + inkscape:label="#g4460" + transform="matrix(1.1653043,0,0,1,0.08265213,0)"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + transform="translate(0,-2.08992)" /> + transform="matrix(1.7146685,0,0,1.7146685,-176.95942,-5.87421)"> + transform="matrix(1.6526792,0,0,1.6526792,-165.99391,-4.9162026)"> + transform="matrix(1.6526792,0,0,1.6526792,-194.69489,-29.916207)"> + transform="matrix(1.6526792,0,0,1.6526792,-155.46815,-5.1260141)"> + transform="matrix(1.7146685,0,0,1.7146685,-265.93598,-6.5942385)"> - - - - + transform="matrix(0.89658208,0,0,1.0166066,0.62788103,-5.1809092)" + style="display:inline" + id="g8787"> + + style="fill:#787878;fill-opacity:1;stroke:#e0dfe1;stroke-width:1.57115781;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" + d="m 6.071295,40.854862 l 8.702853,-8.702852 l 3.698713,-0.652713 c 1.081677,1.081677 2.282834,2.282834 3.263569,3.263569 c 0.543928,0.543928 -0.435142,3.916284 -0.435142,3.916284 l -8.702853,8.702852 z" + id="path8779" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccccc" /> + sodipodi:type="arc" + style="fill:none;stroke:#e0dfe1;stroke-width:2.55313134;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + id="path8781" + sodipodi:cx="77" + sodipodi:cy="-18" + sodipodi:rx="9" + sodipodi:ry="9" + d="m 86,-18 a 9,9 0 0 1 -13.5,7.794229" + transform="matrix(0.59409,-0.16048456,0.16048456,0.59409,-14.282595,58.387875)" + sodipodi:start="0" + sodipodi:end="2.0943951" + sodipodi:open="true" /> + sodipodi:open="true" + sodipodi:end="2.0943951" + sodipodi:start="0" + transform="matrix(0.94346447,-0.22256175,0.2922493,0.96228953,-38.3717,70.240727)" + d="m 86,-18 a 9,9 0 0 1 -13.5,7.794229" + sodipodi:ry="9" + sodipodi:rx="9" + sodipodi:cy="-18" + sodipodi:cx="77" + id="path8783" + style="fill:none;stroke:#e0dfe1;stroke-width:1.59286559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + sodipodi:type="arc" /> - + sodipodi:nodetypes="ccccccc" + inkscape:connector-curvature="0" + id="path8785" + d="m 34.355566,12.570595 l -8.702852,8.702849 L 25,24.972157 c 1.081677,1.081678 2.282835,2.282835 3.263569,3.263569 c 0.543929,0.543929 3.916285,-0.435142 3.916285,-0.435142 l 8.702852,-8.702853 z" + style="fill:#787878;fill-opacity:1;stroke:#e0dfe1;stroke-width:1.57115781;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + style="display:inline" + sodipodi:insensitive="true"> + inkscape:label="waypoint-eta-text" + sodipodi:insensitive="true"> + transform="matrix(1.1017861,0,0,1.1017861,61.29339,14.558341)"> + inkscape:label="waypoint-distance-text" + sodipodi:insensitive="true"> + transform="matrix(1.1017861,0,0,1.1017861,17.436688,-10.441659)"> + inkscape:label="waypoint-heading-text" + sodipodi:insensitive="true"> + transform="matrix(1.1017861,0,0,1.1017861,-11.977973,14.558341)"> + inkscape:label="waypoint-mode-text" + sodipodi:insensitive="true"> + transform="matrix(1.0767613,0,0,1.0767613,127.81017,6.4920314)"> + style="display:inline" + sodipodi:insensitive="true"> + transform="matrix(1.0767613,0,0,1.0767613,19.497871,6.4920315)"> + transform="translate(0,16)" + sodipodi:insensitive="true"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + style="display:inline" + sodipodi:insensitive="true"> @@ -2872,11 +2568,12 @@ id="layer52" inkscape:label="gps-mode-text" style="display:inline" - transform="translate(0,-0.972157)"> + transform="translate(0,-0.972157)" + sodipodi:insensitive="true"> + transform="matrix(1.4543578,0,0,1.4543578,-4.981688,1.3723646)"> + style="display:inline" + sodipodi:insensitive="true"> - - - - - - - - - - - - - - -