#include "routedialog.h"
#include "ui_routedialog.h"
+#include "usersettings.h"
#include <cmath>
#include <QPainter>
#include <QList>
#include <QMessageBox>
#include <QFile>
#include <QFileDialog>
+#include <QPolygon>
/*
* Vector class.
*/
class Vector
{
- qreal x, y, z;
+ qreal x, y, z; // Location
+ qreal v; // Velocity
public:
Vector() { x=0.; y=0. ; z=0.; };
Vector( qreal initX, qreal initY, qreal initZ) { x = initX, y = initY; z = initZ; };
void setX( qreal newX) { x = newX; };
void setY( qreal newY) { y = newY; };
void setZ( qreal newZ) { z = newZ; };
+ void setV( qreal newV) { v = newV; };
qreal getX() { return x; };
qreal getY() { return y; };
qreal getZ() { return z; };
+ qreal getV() { return v; };
qreal length() { return sqrt(x*x+y*y+z*z); };
Vector operator+(Vector v)
{
ui(new Ui::RouteDialog)
{
ui->setupUi(this);
- left = 5; top = 5; right = 395; bottom = 195; // Limits in screen coordinates
+ this->setWindowTitle("Route");
+ left = 5; top = 5; right = 495; bottom = 295; // Limits in screen coordinates
+
+ // Send rout to server button disable/enable.
+ ui->sendPushButton->setEnabled(false);
+ if (loginSaved())
+ {
+ ui->sendPushButton->setEnabled(true);
+ }
}
RouteDialog::~RouteDialog()
break;
}
}
+int RouteDialog::getLeft()
+{
+ return left;
+}
+int RouteDialog::getRight()
+{
+ return right;
+}
+int RouteDialog::getTop()
+{
+ return top;
+}
+int RouteDialog::getBottom()
+{
+ return bottom;
+}
+void drawFlag( RouteDialog *rD, QPainter *p, int x, int y)
+{
+ /*QPolygon pg;
+
+ pg.setPoint(0,x, y-25);
+ pg.setPoint(1,x+10,y-20);
+ pg.setPoint(2,x, y-15);
+ pg.setPoint(3,x,y-20);*/
+ if (y> (rD->getTop() + 25))
+ {
+ // Upside
+ p->drawLine(x,y,x,y-15);
+ if (x <= (rD->getRight()-20))
+ {
+ // flag right
+ p->drawLine( x, y-25, x+10, y-20);
+ p->drawLine( x+10, y-20, x, y-15);
+ p->drawLine( x, y-15, x, y-25);
+ }
+ else
+ {
+ // Flag left
+ p->drawLine( x, y-25, x-10, y-20);
+ p->drawLine( x-10, y-20, x, y-15);
+ p->drawLine( x, y-15, x, y-25);
+ }
+
+ }
+ else if (y <= (rD->getTop() + 25))
+ {
+ // downside
+ p->drawLine(x,y,x,y+15);
+ if (x <= (rD->getRight()-20))
+ {
+ // flag right
+ p->drawLine( x, y+25, x+10, y+20);
+ p->drawLine( x+10, y+20, x, y+15);
+ p->drawLine( x, y+15, x, y+25);
+ }
+ else
+ {
+ // Flag left
+ p->drawLine( x, y+25, x-10, y+20);
+ p->drawLine( x-10, y+20, x, y+15);
+ p->drawLine( x, y+15, x, y+25);
+ }
+ }
+ //p->drawPolygon();
+ // p->drawPolygon( pg,Qt::OddEvenFill);
+ //p->drawPolyline( &pg);
+ //p->drawPoints( pg);
+}
/**
* Draws route to the route dialog.
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true);
- painter.setPen(QPen((Qt::black),2));
+ painter.setPen(QPen((Qt::white),2));
painter.setBrush(QBrush((Qt::yellow), Qt::SolidPattern));
// Draw route window frame
/*painter.drawLine(left,top,right,top);
painter.drawLine(right,top,right,bottom);
painter.drawLine(left,top,left,bottom);
- painter.drawLine(left,bottom,right,bottom);
- */
+ painter.drawLine(left,bottom,right,bottom);*/
+
maxi = vertexList.size();
for (i=0; i<maxi-1; i++)
{
// Starting point
startx = x1Screen; starty = y1Screen;
- painter.drawEllipse( x1Screen-5, y1Screen-5, 10, 10);
+ // painter.drawEllipse( x1Screen-5, y1Screen-5, 10, 10);
+ drawFlag( this, &painter, x1Screen , y1Screen);
}
painter.drawLine( x1Screen, y1Screen, x2Screen, y2Screen);
}
// Show the endig point if different than the starting point
if (x2Screen != startx || y2Screen != starty)
{
- painter.drawEllipse( x2Screen-5, y2Screen-5, 10, 10);
+ //painter.drawEllipse( x2Screen-5, y2Screen-5, 10, 10);
+ drawFlag( this, &painter,x2Screen, y2Screen );
}
-}
-void RouteDialog::on_closePushButton_clicked()
-{
- close();
+ {
+ qreal maxvx, maxvy; // max speed point coordinates
+ qreal maxv; // max speed
+ Vector v;
+
+ maxv = 0.0;
+ for (i=0; i<maxi-1; i++)
+ {
+ v = vertexList.at(i);
+ if (v.getV() > maxv)
+ {
+ maxv = v.getV();
+ maxvx = v.getX();
+ maxvy = v.getY();
+ }
+ }
+ // Translate world coordinates to screen coordinates
+ x1Screen = left + (maxvx-xmin)/(xmax-xmin)*(right-left);
+ y1Screen = top + (ymax-maxvy)/(ymax-ymin)*(bottom-top);
+
+ // Show max velocity point by yellow circle
+ painter.drawEllipse( x1Screen-5, y1Screen-5, 10, 10);
+
+ QString jono;
+ jono = QString("%1 m/s").arg(maxv);
+ ui->speedValueLabel->setText(jono);
+ }
}
-/*
- * Read route coordinates (latitude, longitude, altitude) from file.
- */
-bool RouteDialog::readRouteFromFile( QString &filename)
-{
+bool RouteDialog::readRouteFromFile( QString &routeFile)
+ {
Vector temp;
QString rivi;
QFile file;
- QString fileName = QFileDialog::getOpenFileName(this,
- tr("Read Route"), "./", tr("Route Files (*.txt)"));
+ //QString fileName = QFileDialog::getOpenFileName(this,
+ // tr("Read Route"), "./", tr("Route Files (*.txt)"));
- file.setFileName( fileName);
+ //file.setFileName( fileName);
+ file.setFileName( "routetemp.xml");
if (!file.open(QIODevice::ReadOnly))
{
QMessageBox::about(0, "Error", "File not found");
}
vertexList.clear();
+
while(!file.atEnd())
{
- QString str1, str2, str3;
+ int count;
+ bool allRead;
+ QString astr1, astr2, astr3, astr4;
+ QString str1, str2, str3, str4;
rivi = file.readLine();
+ allRead = false;
+ count = 0;
+ while( !allRead)
+ {
+ astr1 = rivi.section(" ", count*4+1, count*4+1); // latitude=""
+ astr2 = rivi.section(" ", count*4+2, count*4+2); // longitude=""
+ astr3 = rivi.section(" ", count*4+3, count*4+3); // altitude=""
+ astr4 = rivi.section(" ", count*4+4, count*4+4); // speed=""
+
+ {
+ double x, y, z, v;
+ str1 = astr1.section('"',1,1);
+ str2 = astr2.section('"',1,1);
+ str3 = astr3.section('"',1,1);
+ str4 = astr4.section('"',1,1);
+ //QString str = QString("%1 %2 %3 %4").arg(str1).arg(str2).arg(str3).arg(str4);
+ //QMessageBox::about(0, "LUKEE", str);
+ /* */
+
+ if (str1.length() > 0)
+ {
+ x = str2.toDouble();// latitude y-value
+ y = str1.toDouble();// longitude x-value
+ z = str3.toDouble();// altitude z-value
+ v = str4.toDouble();// speed m/s
+ // QString str = QString("%1 %2 %3 %4").arg(x).arg(y).arg(z).arg(v);
+ // QMessageBox::about(0, "LUKEE", str);
+ temp.setX( x); // Longitude
+ temp.setY( y); // Latitude
+ temp.setZ( z); // altitude
+ temp.setV( v);
+
+ vertexList.append(temp);
+ count++;
+ }
+ else
+ {
+ allRead = true;
+ }
+ }
+ }
+ // Older version
+ /*
str1 = rivi.section(" ", 0, 0);
if (str1.compare("Start:") != 0 && str1.compare("Stop:") != 0)
{
- str1 = rivi.section(" ", 2, 2); // latitude y-value
- str2 = rivi.section(" ", 4, 4); // longitude x-value
- str3 = rivi.section(" ", 6, 6); // altitude z-value
+ str1 = rivi.section(" ", 2, 2); // latitude y-value
+ str2 = rivi.section(" ", 4, 4); // longitude x-value
+ str3 = rivi.section(" ", 6, 6); // altitude z-value
+ str4 = rivi.section(" ", 8, 8); // speed m/s
//QString str = QString("la: %1 lo: %2 al: %3").arg(str1).arg(str2).arg(str3);
//QMessageBox::about(0, "LUKEE", str);
if (str1.length() > 0)
{
- double x, y, z;
+ double x, y, z, v;
x = str2.toDouble();
y = str1.toDouble();
z = str3.toDouble();
+ v = str4.toDouble();
temp.setX( x); // Longitude
temp.setY( y); // Latitude
temp.setZ( z); // altitude
+ temp.setV( v);
vertexList.append(temp);
}
}
+ */
}
file.close();
*/
return true;
-}
+ }
/*
* Find out data range for x-, y- and z-coordinates
clip3d(x1,y1,z1,x2,y2,z2, xscreen1, yscreen1, xscreen2, yscreen2 );
}
+
+void RouteDialog::on_newPushButton_clicked()
+{
+ close(); // go back to previous dialog
+}
+
+void RouteDialog::on_sendPushButton_clicked()
+{
+ emit sendroute();
+}
+
+void RouteDialog::setLabelInfoToUser(QString infoText)
+{
+ this->ui->labelInfoToUser->setText(infoText);
+}