Commit 35898750 authored by lm's avatar lm

Merge branch 'experimental' of github.com:pixhawk/qgroundcontrol into experimental

parents b634b5d7 9717f87c
......@@ -19,6 +19,7 @@ var followEnabled = false;
var lastLat = 0;
var lastLon = 0;
var lastAlt = 0;
var currLat = 47.3769;
var currLon = 8.549444;
var currAlt = 470;
......@@ -44,6 +45,8 @@ var planeOrient;
var planeLoc;
var aircraft = [];
var aircraftLocations = [];
var aircraftLastLocations = [];
var attitudes = [];
var locations = [];
var trails = [];
......@@ -133,7 +136,8 @@ function createAircraft(id, type, color)
// Write into global structure
aircraft[id] = planePlacemark;
attitudes[id] = planeOrient;
locations[id] = planeLoc;
aircraftLocations[id] = planeLoc;
aircraftLastLocations[id] = ge.createLocation('');
//planeColor = color;
createTrail(id, color);
......@@ -191,7 +195,7 @@ function addTrailPosition(id, lat, lon, alt)
trails[id].setAltitudeMode(ge.ALTITUDE_ABSOLUTE);
// Add LineString points
trails[id].getCoordinates().pushLatLngAlt(lat, lon, alt);
trails[id].getCoordinates().pushLatLngAlt(lat, lon, alt);
// Create a style and set width and color of line
trailPlacemarks[id].setStyleSelector(ge.createStyle(''));
......@@ -228,24 +232,27 @@ function setAircraftPositionAttitude(id, lat, lon, alt, roll, pitch, yaw)
{
if (id == currAircraft)
{
lastLat = currLat;
lastLon = lastLon;
if (lastLat == 0)
{
lastLat = currLat;
lastLon = lastLon;
}
currLat = lat;
currLon = lon;
currAlt = alt;
//currFollowHeading = ((yaw/M_PI)+1.0)*360.0;
}
// FIXME Currently invalid conversion from right-handed z-down to z-up frame
planeOrient.setRoll(((roll/M_PI)+1.0)*360.0);
planeOrient.setTilt(((pitch/M_PI)+1.0)*360.0);
planeOrient.setHeading(((yaw/M_PI)+1.0)*360.0);
}
planeLoc.setLatitude(lat);
planeLoc.setLongitude(lon);
planeLoc.setAltitude(alt);
//planeLoc.setLatitude(lat);
//planeLoc.setLongitude(lon);
//planeLoc.setAltitude(alt);
}
......@@ -280,13 +287,24 @@ function setCurrentAircraft(id)
function updateFollowAircraft()
{
currView = ge.getView().copyAsLookAt(ge.ALTITUDE_ABSOLUTE);
currView.setLatitude(currLat);
currView.setLongitude(currLon);
currView.setAltitude(currAlt);
// Interpolate between t-1 and t and set new states
lastLat = lastLat*0.7+currLat*0.3;
lastLon = lastLon*0.7+currLon*0.3;
lastAlt = lastAlt*0.7+currAlt*0.3;
currView.setLatitude(lastLat);
currView.setLongitude(lastLon);
currView.setAltitude(lastAlt);
currView.setRange(currViewRange);
currView.setTilt(currFollowTilt);
currFollowHeading = 0.9*currFollowHeading+0.1*((Math.atan2(lastLat-currLat, lastLon-currLon)/M_PI)+1.0)*360.0;
currFollowHeading = 0;// 0.9*currFollowHeading+0.1*((Math.atan2(lastLat-currLat, lastLon-currLon)/M_PI)+1.0)*360.0;
currView.setHeading(currFollowHeading-0.0);
// FIXME Shouldn't update aircraft in here, but works for now
planeLoc.setLatitude(lastLat);
planeLoc.setLongitude(lastLon);
planeLoc.setAltitude(lastAlt);
ge.getView().setAbstractView(currView);
}
......
......@@ -29,12 +29,9 @@ namespace qmapcontrol
LayerManager::LayerManager(MapControl* mapcontrol, QSize size)
:mapcontrol(mapcontrol), scroll(QPoint(0,0)), size(size), whilenewscroll(QPoint(0,0))
{
// genauer berechnen?
offSize = size *2;
composedOffscreenImage = QPixmap(offSize);
composedOffscreenImage2 = QPixmap(offSize);
setOffscreenImageFactor(2);
zoomImage = QPixmap(size);
zoomImage.fill(Qt::white);
zoomImage.fill(Qt::black);
screenmiddle = QPoint(size.width()/2, size.height()/2);
}
......@@ -44,6 +41,19 @@ namespace qmapcontrol
mylayers.clear();
}
void LayerManager::setOffscreenImageFactor(float factor)
{
offSize = size * factor;
offFactor = factor;
composedOffscreenImage = QPixmap(offSize);
composedOffscreenImage2 = QPixmap(offSize);
}
float LayerManager::offscreenImageFactor()
{
return offFactor;
}
QPointF LayerManager::currentCoordinate() const
{
return mapmiddle;
......@@ -264,7 +274,7 @@ namespace qmapcontrol
// layer rendern abbrechen?
zoomImageScroll = QPoint(0,0);
zoomImage.fill(Qt::white);
zoomImage.fill(Qt::black);
QPixmap tmpImg = composedOffscreenImage.copy(screenmiddle.x()+scroll.x(),screenmiddle.y()+scroll.y(), size.width(), size.height());
QPainter painter(&zoomImage);
......@@ -471,11 +481,11 @@ namespace qmapcontrol
void LayerManager::resize(QSize newSize)
{
size = newSize;
offSize = newSize *2;
offSize = newSize *offFactor;
composedOffscreenImage = QPixmap(offSize);
composedOffscreenImage2 = QPixmap(offSize);
zoomImage = QPixmap(newSize);
zoomImage.fill(Qt::white);
zoomImage.fill(Qt::black);
screenmiddle = QPoint(newSize.width()/2, newSize.height()/2);
......
......@@ -121,6 +121,11 @@ namespace qmapcontrol
*/
void setZoom(int zoomlevel);
//! Sets the factor the offscreen image should be larger than the visible area
void setOffscreenImageFactor(float factor);
//! Get the factor the offscreen image is larger than the screen
float offscreenImageFactor();
//! The Viewport of the display
/*!
* Returns the visible viewport in world coordinates
......@@ -174,7 +179,7 @@ namespace qmapcontrol
private:
LayerManager& operator=(const LayerManager& rhs);
LayerManager(const LayerManager& old);
//! This method have to be invoked to draw a new offscreen image
//! This method has to be invoked to draw a new offscreen image
/*!
* @param clearImage if the current offscreeen image should be cleared
* @param showZoomImage if a zoom image should be painted
......@@ -190,8 +195,9 @@ namespace qmapcontrol
QPoint scroll; // scrollvalue of the offscreen image
QPoint zoomImageScroll; // scrollvalue of the zoom image
QSize size; // widget size
QSize offSize; // size of the offscreen image
QSize size; ///< widget size
QSize offSize; ///< size of the offscreen image
float offFactor; ///< Size of the offscreen image
QPixmap composedOffscreenImage;
QPixmap composedOffscreenImage2;
......
......@@ -23,6 +23,9 @@
*
*/
#include <QDialog>
#include <QDesktopServices>
#include "mapcontrol.h"
namespace qmapcontrol
{
......@@ -61,6 +64,29 @@ namespace qmapcontrol
return layermanager->layer(layername);
}
void MapControl::setOffscreenImageFactor(double factor)
{
layermanager->setOffscreenImageFactor(factor);
}
float MapControl::offscreenImageFactor()
{
return layermanager->offscreenImageFactor();
}
void MapControl::openImageSaveDialog()
{
QString fileName = QFileDialog::getSaveFileName(this, tr("Save Image as"), QDesktopServices::storageLocation(QDesktopServices::DesktopLocation), tr("Image file (*.jpg *.png);;"));
if (fileName != "")
{
if (!fileName.contains(".png") && !fileName.contains(".jpg"))
{
fileName.append(".png");
}
layermanager->getImage().save(fileName, fileName.split(".").last().toUpper().toAscii(), 95);
}
}
QList<QString> MapControl::layers() const
{
return layermanager->layers();
......
......@@ -92,6 +92,9 @@ namespace qmapcontrol
*/
Layer* layer ( const QString& layername ) const;
//! The factor the offscreen image is larger than the current viewport
float offscreenImageFactor();
//! returns the names of all layers
/*!
* @return returns a QList with the names of all layers
......@@ -356,6 +359,12 @@ namespace qmapcontrol
*/
void resize(const QSize newSize);
//! Open a popup to save the current offscreen image to disk
void openImageSaveDialog();
//! Sets the factor the offscreen image should be larger than the visible area */
void setOffscreenImageFactor(double factor);
private slots:
void tick();
void loadingFinished();
......
......@@ -58,12 +58,18 @@ macx {
debug {
#QMAKE_CXXFLAGS += -finstrument-functions
#LIBS += -lSaturn
CONFIG += console
}
} else {
# x64 Mac OS X Snow Leopard 10.6 and later
CONFIG += x86_64 cocoa
CONFIG -= x86 phonon
message(Building for Mac OS X 64bit/Snow Leopard 10.6 and later)
debug {
#QMAKE_CXXFLAGS += -finstrument-functions
#LIBS += -lSaturn
CONFIG += console
}
}
QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.5
......@@ -154,12 +160,13 @@ linux-g++ {
debug {
DESTDIR = $$TARGETDIR/debug
CONFIG += debug
CONFIG += debug console
}
release {
DESTDIR = $$TARGETDIR/release
DEFINES += QT_NO_DEBUG
CONFIG -= console
}
QMAKE_POST_LINK += cp -rf $$BASEDIR/audio $$DESTDIR/.
......@@ -224,12 +231,13 @@ linux-g++-64 {
debug {
DESTDIR = $$TARGETDIR/debug
CONFIG += debug
CONFIG += debug console
}
release {
DESTDIR = $$TARGETDIR/release
DEFINES += QT_NO_DEBUG
CONFIG -= console
}
QMAKE_POST_LINK += cp -rf $$BASEDIR/audio $$DESTDIR/.
......
......@@ -39,7 +39,6 @@ BASEDIR = $$IN_PWD
TARGETDIR = $$OUT_PWD
BUILDDIR = $$TARGETDIR/build
LANGUAGE = C++
CONFIG += console
OBJECTS_DIR = $$BUILDDIR/obj
MOC_DIR = $$BUILDDIR/moc
UI_HEADERS_DIR = src/ui/generated
......
......@@ -109,7 +109,7 @@ void MAVLinkProtocol::receiveBytes(LinkInterface* link, QByteArray b)
// Log data
if (m_loggingEnabled)
{
int len = MAVLINK_MAX_PACKET_LEN+sizeof(quint64);
const int len = MAVLINK_MAX_PACKET_LEN+sizeof(quint64);
uint8_t buf[len];
quint64 time = QGC::groundTimeUsecs();
memcpy(buf, (void*)&time, sizeof(quint64));
......
......@@ -13,6 +13,7 @@
#include <QComboBox>
#include <QGridLayout>
#include <QDir>
#include <QDoubleSpinBox>
#include "QGC.h"
#include "MapWidget.h"
......@@ -38,7 +39,7 @@ MapWidget::MapWidget(QWidget *parent) :
mc = new qmapcontrol::MapControl(QSize(320, 240));
// VISUAL MAP STYLE
QString buttonStyle("QAbstractButton { background-color: rgba(20, 20, 20, 45%); border-color: rgba(10, 10, 10, 50%)}");
QString buttonStyle("QAbstractButton { background-color: rgba(20, 20, 20, 45%); border-color: rgba(10, 10, 10, 50%)} QDoubleSpinBox { background-color: rgba(20, 20, 20, 45%); border-color: rgba(10, 10, 10, 50%)}");
mc->setPen(QGC::colorCyan.darker(400));
......@@ -163,6 +164,19 @@ MapWidget::MapWidget(QWidget *parent) :
QPushButton* goToButton = new QPushButton(QIcon(""), "T", this);
goToButton->setStyleSheet(buttonStyle);
// SAVE FILES
QPushButton* saveButton = new QPushButton(QIcon(""), "S", this);
saveButton->setStyleSheet(buttonStyle);
// SET OFFSCREEN BUFFER SIZE
QDoubleSpinBox* offscreenSpinBox = new QDoubleSpinBox(this);
offscreenSpinBox->setStyleSheet(buttonStyle);
offscreenSpinBox->setMinimum(2);
offscreenSpinBox->setMaximum(30);
offscreenSpinBox->setValue(mc->offscreenImageFactor());
connect(offscreenSpinBox, SIGNAL(valueChanged(double)), mc, SLOT(setOffscreenImageFactor(double)));
zoomin->setMaximumWidth(30);
zoomout->setMaximumWidth(30);
createPath->setMaximumWidth(30);
......@@ -188,8 +202,10 @@ MapWidget::MapWidget(QWidget *parent) :
// Add spacers to compress buttons on the top left
innerlayout->addItem(new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Expanding), 5, 0);
innerlayout->addItem(new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Expanding), 0, 1, 0, 7);
innerlayout->addWidget(mapButton, 0, 6);
innerlayout->addWidget(goToButton, 0, 7);
innerlayout->addWidget(mapButton, 0, 2);
innerlayout->addWidget(goToButton, 0, 3);
innerlayout->addWidget(saveButton, 0, 4);
innerlayout->addWidget(offscreenSpinBox, 0, 5);
innerlayout->setRowStretch(0, 1);
innerlayout->setRowStretch(1, 100);
mc->setLayout(innerlayout);
......@@ -204,6 +220,8 @@ MapWidget::MapWidget(QWidget *parent) :
connect(goToButton, SIGNAL(clicked()), this, SLOT(goTo()));
connect(saveButton, SIGNAL(clicked()), mc, SLOT(openImageSaveDialog()));
QList<UASInterface*> systems = UASManager::instance()->getUASList();
foreach(UASInterface* system, systems)
{
......@@ -248,6 +266,8 @@ MapWidget::MapWidget(QWidget *parent) :
drawCamBorder = false;
radioCamera = 10;
//mc->setOffscreenImageFactor(15);
}
void MapWidget::goTo()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment