Browse Source

Merge branch 'master' of http://192.168.14.36:3000/adc_pilot/modularization

fujiankuan 4 years ago
parent
commit
0afa4b1083

+ 158 - 0
src/tool/map_lanetoxodr/ivxodrtool.cpp

@@ -0,0 +1,158 @@
+#include "ivxodrtool.h"
+
+#include <limits>
+#include <math.h>
+
+ivxodrtool::ivxodrtool()
+{
+
+}
+
+ivxodrtool & ivxodrtool::Inst()
+{
+    static ivxodrtool x;
+    return x;
+}
+
+
+void ivxodrtool::ChangeMaxMin(double x, double y, double &xmin, double &ymin, double &xmax, double &ymax)
+{
+    if(x<xmin)xmin = x;
+    if(y<ymin)ymin = y;
+    if(x>xmax)xmax = x;
+    if(y>ymax)ymax = y;
+}
+
+int ivxodrtool::GetRoadMaxMin(Road *pRoad, double &xmin, double &ymin, double &xmax, double &ymax)
+{
+    if(pRoad == 0)return -1;
+
+    int j;
+    xmin = std::numeric_limits<double>::max();
+    ymin = std::numeric_limits<double>::max();
+    xmax = (-1.0)*std::numeric_limits<double>::max();
+    ymax = (-1.0)*std::numeric_limits<double>::max();
+    for(j=0;j<pRoad->GetGeometryBlockCount();j++)
+    {
+        GeometryBlock * pgeob = pRoad->GetGeometryBlock(j);
+        double x,y;
+        double x_center,y_center;
+        double R;
+        RoadGeometry * pg;
+        GeometryArc * parc;
+        GeometryParamPoly3 * ppp3;
+        GeometrySpiral *pSpiral;
+        double rel_x,rel_y,rel_hdg;
+        pg = pgeob->GetGeometryAt(0);
+
+        x = pg->GetX();
+        y = pg->GetY();
+
+        ChangeMaxMin(x,y,xmin,ymin,xmax,ymax);
+
+        switch (pg->GetGeomType()) {
+        case 0:
+            ChangeMaxMin(x + pg->GetLength() * cos(pg->GetHdg()),y + pg->GetLength() * sin(pg->GetHdg()),xmin,ymin,xmax,ymax);
+
+            break;
+
+        case 1:
+            pSpiral = (GeometrySpiral * )pg;
+            {
+               int ncount = 100;
+               double sstep = pSpiral->GetLength()/((double)ncount);
+               int k;
+               double x0,y0,hdg0,s0;
+               x0 = pSpiral->GetX();
+               y0 = pSpiral->GetY();
+               s0 = pSpiral->GetS();
+               hdg0 = pSpiral->GetHdg() ;
+               for(k=0;k<ncount;k++)
+               {
+                   pSpiral->GetCoords(s0+sstep*k,rel_x,rel_y,rel_hdg);
+
+                   x = rel_x;
+                   y = rel_y;
+                   ChangeMaxMin(x,y,xmin,ymin,xmax,ymax);
+
+
+               }
+            }
+
+//                    qDebug("spi");
+            break;
+        case 2:
+            {
+            parc = (GeometryArc *)pg;
+            R = abs(1.0/parc->GetCurvature());
+            if(parc->GetCurvature() > 0)
+            {
+                x_center = pg->GetX() + R *cos(pg->GetHdg() + M_PI/2.0);
+                y_center = pg->GetY() + R * sin(pg->GetHdg() + M_PI/2.0);
+            }
+            else
+            {
+                x_center = pg->GetX() + R *cos(pg->GetHdg() -M_PI/2.0);
+                y_center = pg->GetY() + R * sin(pg->GetHdg() - M_PI/2.0);
+            }
+
+            int k;
+            int ncount = 100 ;
+            double curv = parc->GetCurvature();
+            double hdgstep;
+            double hdg0 = parc->GetHdg();
+            double hdgnow = parc->GetHdg();
+            if(ncount > 0) hdgstep= (parc->GetLength()/R)/ncount;
+            for(k=0;k<ncount;k++)
+            {
+                double x_draw,y_draw;
+
+                if(curv > 0)
+                {
+                    hdgnow =  hdg0 + k*hdgstep;
+                    x_draw = x_center + R *cos(hdgnow - M_PI/2.0);
+                    y_draw = y_center + R * sin(hdgnow - M_PI/2.0);
+                }
+                else
+                {
+                    hdgnow = hdg0 - k * hdgstep;
+                    x_draw = x_center + R *cos(hdgnow  + M_PI/2.0);
+                    y_draw = y_center + R * sin(hdgnow + M_PI/2.0);
+                }
+                ChangeMaxMin(x_draw,y_draw,xmin,ymin,xmax,ymax);
+
+            }
+            }
+            break;
+        case 4:
+            {
+            ppp3 = (GeometryParamPoly3 * )pg;
+            int ncount = ppp3->GetLength();
+            double sstep;
+            if(ncount > 0)sstep = ppp3->GetLength()/ncount;
+            else sstep = 10000.0;
+            double s = 0;
+            while(s < ppp3->GetLength())
+            {
+                double xtem,ytem;
+                xtem = ppp3->GetuA() +  ppp3->GetuB() * s +  ppp3->GetuC() * s*s +  ppp3->GetuD() * s*s*s;
+                ytem = ppp3->GetvA() + ppp3->GetvB() * s + ppp3->GetvC() * s*s + ppp3->GetvD() * s*s*s;
+                x = xtem*cos(ppp3->GetHdg()) - ytem * sin(ppp3->GetHdg()) + ppp3->GetX();
+                y = xtem*sin(ppp3->GetHdg()) + ytem * cos(ppp3->GetHdg()) + ppp3->GetY();
+                ChangeMaxMin(x,y,xmin,ymin,xmax,ymax);
+                s = s+ sstep;
+            }
+            }
+            break;
+        default:
+            break;
+        }
+
+//         painter->drawPoint((int)(x*nfac),(int)(y*(-1.0*nfac)));
+
+    }
+    return 0;
+
+
+
+}

+ 24 - 0
src/tool/map_lanetoxodr/ivxodrtool.h

@@ -0,0 +1,24 @@
+#ifndef IVXODRTOOL_H
+#define IVXODRTOOL_H
+
+#include "OpenDrive/OpenDrive.h"
+
+class ivxodrtool
+{
+public:
+    ivxodrtool();
+public:
+    static ivxodrtool& Inst();
+
+public:
+    int GetRoadMaxMin(Road * pRoad,double & xmin,double & ymin,double & xmax,double & ymax);
+
+private:
+
+    void ChangeMaxMin(double x,double y,double & xmin,double & ymin,double & xmax,double & ymax);
+};
+
+
+#define ServiceXODRTool ivxodrtool::Inst()
+
+#endif // IVXODRTOOL_H

+ 12 - 0
src/tool/map_lanetoxodr/mainwindow.cpp

@@ -4795,3 +4795,15 @@ void MainWindow::on_actionSet_Traffic_Light_triggered()
     TrafficLightDialog td(&mxodr,this);
     int res = td.exec();
 }
+
+void MainWindow::on_actionEdit_Road_Lane_triggered()
+{
+
+}
+
+void MainWindow::on_actionEdit_Road_triggered()
+{
+
+    RoadEditDialog rd(&mxodr,this);
+    int res = rd.exec();
+}

+ 5 - 0
src/tool/map_lanetoxodr/mainwindow.h

@@ -42,6 +42,7 @@
 #include "autoconnect.h"
 #include "speeddialog.h"
 #include "trafficlightdialog.h"
+#include "roadeditdialog.h"
 
 #include <iostream>
 #include <map>
@@ -165,6 +166,10 @@ private slots:
 
     void on_actionSet_Traffic_Light_triggered();
 
+    void on_actionEdit_Road_Lane_triggered();
+
+    void on_actionEdit_Road_triggered();
+
 private:
 
 

+ 27 - 0
src/tool/map_lanetoxodr/mainwindow.ui

@@ -42,8 +42,17 @@
     <addaction name="actionSet_Speed"/>
     <addaction name="actionSet_Traffic_Light"/>
    </widget>
+   <widget class="QMenu" name="menuTool">
+    <property name="title">
+     <string>Tool</string>
+    </property>
+    <addaction name="actionEdit_Road"/>
+    <addaction name="actionMerge_Road"/>
+    <addaction name="actionEdit_Road_Lane"/>
+   </widget>
    <addaction name="menuFile"/>
    <addaction name="menuFunction"/>
+   <addaction name="menuTool"/>
   </widget>
   <widget class="QToolBar" name="mainToolBar">
    <attribute name="toolBarArea">
@@ -85,6 +94,24 @@
     <string>Edit Traffic Light</string>
    </property>
   </action>
+  <action name="actionEdit_Road">
+   <property name="text">
+    <string>Edit Road</string>
+   </property>
+   <property name="toolTip">
+    <string>编辑导率</string>
+   </property>
+  </action>
+  <action name="actionMerge_Road">
+   <property name="text">
+    <string>Merge Road</string>
+   </property>
+  </action>
+  <action name="actionEdit_Road_Lane">
+   <property name="text">
+    <string>Edit Road Lane</string>
+   </property>
+  </action>
  </widget>
  <layoutdefault spacing="6" margin="11"/>
  <resources>

+ 5 - 0
src/tool/map_lanetoxodr/map_lanetoxodr.pro

@@ -29,8 +29,10 @@ QMAKE_LFLAGS += -no-pie
 
 SOURCES += \
     autoconnect.cpp \
+    ivxodrtool.cpp \
         main.cpp \
         mainwindow.cpp \
+    roadeditdialog.cpp \
     speeddialog.cpp \
     trafficlightdialog.cpp \
     trafficlightlanevaliditydialog.cpp \
@@ -64,8 +66,10 @@ SOURCES += \
 
 HEADERS += \
     autoconnect.h \
+    ivxodrtool.h \
         mainwindow.h \
     rawtype.h \
+    roadeditdialog.h \
     speeddialog.h \
     trafficlightdialog.h \
     trafficlightlanevaliditydialog.h \
@@ -96,6 +100,7 @@ HEADERS += \
 
 FORMS += \
         mainwindow.ui \
+        roadeditdialog.ui \
         speeddialog.ui \
         trafficlightdialog.ui \
         trafficlightlanevaliditydialog.ui \

+ 345 - 0
src/tool/map_lanetoxodr/roadeditdialog.cpp

@@ -0,0 +1,345 @@
+#include "roadeditdialog.h"
+#include "ui_roadeditdialog.h"
+
+#include "math.h"
+
+#define VIEW_WIDTH 850
+#define VIEW_HEIGHT 350
+
+RoadEditDialog::RoadEditDialog(OpenDrive * pxodr,QWidget *parent) :
+    QDialog(parent),
+    ui(new Ui::RoadEditDialog)
+{
+    mpxodr = pxodr;
+    ui->setupUi(this);
+
+    myview = new MyView(this);
+    myview->setObjectName(QStringLiteral("graphicsView"));
+    myview->setGeometry(QRect(30, 400, 900, 400));
+
+    connect(myview,SIGNAL(dbclickxy(double,double)),this,SLOT(onClickXY(double,double)));
+
+    image = new QImage(VIEW_WIDTH, VIEW_HEIGHT, QImage::Format_RGB32);//画布的初始化大小设为300*300,使用32位颜色
+    myview->setCacheMode(myview->CacheBackground);
+
+    painter = new QPainter(image);
+
+    painter->end();
+
+    scene = new QGraphicsScene;
+
+    ui->comboBox_geotype->addItem("Line");
+    ui->comboBox_geotype->addItem("Spiral");
+    ui->comboBox_geotype->addItem("Arc");
+    ui->comboBox_geotype->addItem("Poly");
+    ui->comboBox_geotype->addItem("Param Poly");
+
+    int i;
+    int nroadcount = mpxodr->GetRoadCount();
+    for(i=0;i<nroadcount;i++)
+    {
+        const char * strname = mpxodr->GetRoad(i)->GetRoadId().data();
+        ui->comboBox_Road->addItem(strname);
+
+    }
+}
+
+RoadEditDialog::~RoadEditDialog()
+{
+    delete ui;
+}
+
+void RoadEditDialog::ExecPainter()
+{
+    painter->begin(image);
+
+    int nkeep = 30;
+    Road * pRoad = mpCurRoad;
+//         qDebug("time is %d",x.elapsed());
+         image->fill(QColor(255, 255, 255));//对画布进行填充
+
+     //    std::vector<iv::GPSData> navigation_data = brain->navigation_data;
+         painter->setRenderHint(QPainter::Antialiasing, true);//设置反锯齿模式,好看一点
+
+  //       painter->translate(mnMoveX,mnMoveY);
+
+ //        painter->translate(VIEW_WIDTH/2,VIEW_HEIGHT/2);
+
+    double froad_xmin,froad_ymin,froad_xmax,froad_ymax;
+
+    int nfac = 1;
+    ServiceXODRTool.GetRoadMaxMin(pRoad,froad_xmin,froad_ymin,froad_xmax,froad_ymax);
+
+
+    double fac_x,fac_y;
+    fac_x = 100000;
+    fac_y = 100000;
+    if(froad_xmax > froad_xmin)
+    {
+        fac_x = (VIEW_WIDTH-nkeep*2)/(froad_xmax - froad_xmin);
+    }
+
+    if(froad_ymax > froad_ymin)
+    {
+        fac_y = (VIEW_HEIGHT - nkeep*2)/(froad_ymax - froad_ymin);
+    }
+
+    nfac = fac_x;
+    if(fac_y < nfac)nfac = fac_y;
+
+
+         painter->translate(nkeep,VIEW_HEIGHT-nkeep);
+
+         painter->setPen(Qt::black);
+
+//         painter->drawLine(VIEW_WIDTH/(-2),0,VIEW_WIDTH/2,0);
+//         painter->drawLine(0,VIEW_HEIGHT/(-2),0,VIEW_HEIGHT/2);
+
+         int i;
+
+
+        //         int nfac = 5;;
+
+
+         painter->setPen(Qt::blue);
+
+//         if(mbClick)
+//         {
+//         painter->setPen(Qt::red);
+//         painter->drawEllipse(QPoint(mClickX ,mClickY),mnMarkSize,mnMarkSize);
+
+//         painter->setPen(Qt::black);
+//         }
+
+//     if(mbSetObj)
+//     {
+//         painter->setPen(Qt::green);
+//         painter->drawRect(mfObjX*nfac-mnMarkSize,mfObjY*nfac*(-1)-mnMarkSize,mnMarkSize*2,mnMarkSize*2);
+
+//         painter->setPen(Qt::black);
+//     }
+
+     painter->setPen(Qt::green);
+     double x0,y0;
+//     GaussProjCal(glon0,glat0,&x0,&y0);
+
+     painter->setPen(Qt::blue);
+ //            int nfac = nfac;
+  //   int selid = mpCBRoad->currentText().toInt();
+
+   //     continue;
+         int j;
+
+         painter->setPen(Qt::blue);
+
+
+         for(j=0;j<pRoad->GetGeometryBlockCount();j++)
+         {
+             GeometryBlock * pgeob = pRoad->GetGeometryBlock(j);
+             double x,y;
+             double x_center,y_center;
+             double R;
+             RoadGeometry * pg;
+             GeometryArc * parc;
+             GeometryParamPoly3 * ppp3;
+             GeometrySpiral *pSpiral;
+             double rel_x,rel_y,rel_hdg;
+             pg = pgeob->GetGeometryAt(0);
+
+             x = pg->GetX();
+             y = pg->GetY();
+
+              painter->setPen(Qt::blue);
+             if(j == mnSelGeo)
+             {
+                 painter->setPen(Qt::green);
+             }
+
+//             if(j== 0)
+//             {
+//                 if(selid == atoi(pRoad->GetRoadId().data()))
+//                 {
+//                     painter->setPen(Qt::green);
+//                     painter->drawEllipse(x*nfac-5,y*nfac*(-1)-5,10,10);
+//                     painter->setPen(Qt::red);
+//                 }
+//             }
+
+             switch (pg->GetGeomType()) {
+             case 0:
+                 painter->drawLine(QPoint((x-froad_xmin)*nfac,(y-froad_ymin)*nfac*(-1)),
+                                   QPoint(((x-froad_xmin) + pg->GetLength() * cos(pg->GetHdg()))*nfac,((y-froad_ymin) + pg->GetLength() * sin(pg->GetHdg()))*nfac*(-1)));
+                 break;
+
+             case 1:
+                 pSpiral = (GeometrySpiral * )pg;
+                 {
+                    int ncount = pSpiral->GetLength() * nfac;
+                    double sstep = pSpiral->GetLength()/((double)ncount);
+                    int k;
+                    double x0,y0,hdg0,s0;
+                    x0 = pSpiral->GetX();
+                    y0 = pSpiral->GetY();
+                    s0 = pSpiral->GetS();
+                    hdg0 = pSpiral->GetHdg() ;
+                    painter->setPen(Qt::red);
+                    for(k=0;k<ncount;k++)
+                    {
+                        pSpiral->GetCoords(s0+sstep*k,rel_x,rel_y,rel_hdg);
+
+                        x = rel_x - froad_xmin;
+                        y = rel_y - froad_ymin;
+                        painter->drawPoint((int)(x*nfac),(int)(y*(-1.0*nfac)));
+
+                    }
+                    painter->setPen(Qt::blue);
+                 }
+
+ //                    qDebug("spi");
+                 break;
+             case 2:
+                 {
+                 parc = (GeometryArc *)pg;
+                 R = abs(1.0/parc->GetCurvature());
+                 if(parc->GetCurvature() > 0)
+                 {
+                     x_center = pg->GetX() + R *cos(pg->GetHdg() + M_PI/2.0);
+                     y_center = pg->GetY() + R * sin(pg->GetHdg() + M_PI/2.0);
+                 }
+                 else
+                 {
+                     x_center = pg->GetX() + R *cos(pg->GetHdg() -M_PI/2.0);
+                     y_center = pg->GetY() + R * sin(pg->GetHdg() - M_PI/2.0);
+                 }
+
+                 int k;
+                 int ncount = parc->GetLength() * nfac ;
+                 double curv = parc->GetCurvature();
+                 double hdgstep;
+                 double hdg0 = parc->GetHdg();
+                 double hdgnow = parc->GetHdg();
+                 if(ncount > 0) hdgstep= (parc->GetLength()/R)/ncount;
+                 for(k=0;k<ncount;k++)
+                 {
+                     double x_draw,y_draw;
+
+                     if(curv > 0)
+                     {
+                         hdgnow =  hdg0 + k*hdgstep;
+                         x_draw = x_center + R *cos(hdgnow - M_PI/2.0);
+                         y_draw = y_center + R * sin(hdgnow - M_PI/2.0);
+                     }
+                     else
+                     {
+                         hdgnow = hdg0 - k * hdgstep;
+                         x_draw = x_center + R *cos(hdgnow  + M_PI/2.0);
+                         y_draw = y_center + R * sin(hdgnow + M_PI/2.0);
+                     }
+                     x_draw = x_draw - froad_xmin;
+                     y_draw = y_draw - froad_ymin;
+                     painter->drawPoint(x_draw * nfac ,y_draw * nfac *(-1));
+                 }
+                 }
+                 break;
+             case 4:
+                 {
+                 ppp3 = (GeometryParamPoly3 * )pg;
+                 int ncount = ppp3->GetLength()* nfac;
+                 double sstep;
+                 if(ncount > 0)sstep = ppp3->GetLength()/ncount;
+                 else sstep = 10000.0;
+                 double s = 0;
+                 while(s < ppp3->GetLength())
+                 {
+                     double xtem,ytem;
+                     xtem = ppp3->GetuA() +  ppp3->GetuB() * s +  ppp3->GetuC() * s*s +  ppp3->GetuD() * s*s*s;
+                     ytem = ppp3->GetvA() + ppp3->GetvB() * s + ppp3->GetvC() * s*s + ppp3->GetvD() * s*s*s;
+                     x = xtem*cos(ppp3->GetHdg()) - ytem * sin(ppp3->GetHdg()) + ppp3->GetX();
+                     y = xtem*sin(ppp3->GetHdg()) + ytem * cos(ppp3->GetHdg()) + ppp3->GetY();
+                     x = x - froad_xmin;
+                     y = y- froad_ymin;
+                     painter->drawPoint((int)(x*nfac),(int)(y*(-1.0*nfac)));
+                     s = s+ sstep;
+                 }
+                 }
+                 break;
+             default:
+                 break;
+             }
+
+    //         painter->drawPoint((int)(x*nfac),(int)(y*(-1.0*nfac)));
+
+         }
+
+
+
+
+
+        painter->setPen(Qt::green);
+
+
+
+         painter->end();
+}
+
+void RoadEditDialog::paintEvent(QPaintEvent * painter)
+{
+    if(mpCurRoad != 0)
+    {
+        ExecPainter();
+        scene->clear();
+        scene->addPixmap(QPixmap::fromImage(*image));
+        myview->setScene(scene);
+        myview->show();
+    }
+}
+
+void RoadEditDialog::on_comboBox_Road_activated(const QString &arg1)
+{
+
+}
+
+void RoadEditDialog::on_comboBox_Road_currentIndexChanged(int index)
+{
+    Road * pRoad = mpxodr->GetRoad(index);
+    if(pRoad == 0)
+    {
+ //       QMessageBox::warning(this,"WARN","MainWindow::onClickCBRoadChange road is NULL");
+        return;
+    }
+
+    mpCurRoad = pRoad;
+
+    mnSelGeo = -1;
+
+    ui->lineEdit_roadlen->setText(QString::number(pRoad->GetRoadLength()));
+
+    ui->comboBox_Geo->clear();
+    int nsize = pRoad->GetGeometryBlockCount();
+    int i;
+    for(i=0;i<nsize;i++)
+    {
+        ui->comboBox_Geo->addItem(QString("Geo ")+QString::number(i));
+    }
+
+    update();
+}
+
+void RoadEditDialog::on_comboBox_Geo_currentIndexChanged(int index)
+{
+    if(mpCurRoad == 0 )return;
+    if(index<0)return;
+    mnSelGeo = index;
+    if(index>= mpCurRoad->GetGeometryBlockCount())return;
+    GeometryBlock * pgb = mpCurRoad->GetGeometryBlock(index);
+    RoadGeometry * pg = pgb->GetGeometryAt(0);
+    ui->lineEdit_s->setText(QString::number(pg->GetS()));
+    ui->lineEdit_x->setText(QString::number(pg->GetX()));
+    ui->lineEdit_y->setText(QString::number(pg->GetY()));
+    ui->lineEdit_hdg->setText(QString::number(pg->GetHdg()));
+    ui->lineEdit_len->setText(QString::number(pg->GetLength()));
+    if((pg->GetGeomType()>=0)&&(pg->GetGeomType()<5))
+    {
+        ui->comboBox_geotype->setCurrentIndex(pg->GetGeomType());
+    }
+}

+ 50 - 0
src/tool/map_lanetoxodr/roadeditdialog.h

@@ -0,0 +1,50 @@
+#ifndef ROADEDITDIALOG_H
+#define ROADEDITDIALOG_H
+
+#include <QDialog>
+
+#include "myview.h"
+#include "OpenDrive/OpenDrive.h"
+
+#include "ivxodrtool.h"
+
+namespace Ui {
+class RoadEditDialog;
+}
+
+class RoadEditDialog : public QDialog
+{
+    Q_OBJECT
+
+public:
+    explicit RoadEditDialog(OpenDrive * pxodr,QWidget *parent = nullptr);
+    ~RoadEditDialog();
+
+private:
+    void ExecPainter();
+
+private slots:
+   virtual void paintEvent(QPaintEvent *);
+
+    void on_comboBox_Road_activated(const QString &arg1);
+
+    void on_comboBox_Road_currentIndexChanged(int index);
+
+    void on_comboBox_Geo_currentIndexChanged(int index);
+
+private:
+    Ui::RoadEditDialog *ui;
+    OpenDrive * mpxodr;
+
+    QImage *image;
+    QPainter *painter;
+    MyView *myview;
+    QTimer *timer;
+    QGraphicsScene *scene;
+
+    Road * mpCurRoad = 0;
+
+    int mnSelGeo = -1;
+};
+
+#endif // ROADEDITDIALOG_H

+ 226 - 0
src/tool/map_lanetoxodr/roadeditdialog.ui

@@ -0,0 +1,226 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>RoadEditDialog</class>
+ <widget class="QDialog" name="RoadEditDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>1260</width>
+    <height>830</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Dialog</string>
+  </property>
+  <widget class="QLabel" name="label">
+   <property name="geometry">
+    <rect>
+     <x>60</x>
+     <y>39</y>
+     <width>121</width>
+     <height>21</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>Road</string>
+   </property>
+  </widget>
+  <widget class="QComboBox" name="comboBox_Road">
+   <property name="geometry">
+    <rect>
+     <x>160</x>
+     <y>30</y>
+     <width>241</width>
+     <height>41</height>
+    </rect>
+   </property>
+  </widget>
+  <widget class="QComboBox" name="comboBox_Geo">
+   <property name="geometry">
+    <rect>
+     <x>230</x>
+     <y>100</y>
+     <width>161</width>
+     <height>31</height>
+    </rect>
+   </property>
+  </widget>
+  <widget class="QLineEdit" name="lineEdit_s">
+   <property name="geometry">
+    <rect>
+     <x>520</x>
+     <y>100</y>
+     <width>113</width>
+     <height>25</height>
+    </rect>
+   </property>
+  </widget>
+  <widget class="QLineEdit" name="lineEdit_x">
+   <property name="geometry">
+    <rect>
+     <x>770</x>
+     <y>100</y>
+     <width>113</width>
+     <height>25</height>
+    </rect>
+   </property>
+  </widget>
+  <widget class="QLineEdit" name="lineEdit_y">
+   <property name="geometry">
+    <rect>
+     <x>1040</x>
+     <y>100</y>
+     <width>113</width>
+     <height>25</height>
+    </rect>
+   </property>
+  </widget>
+  <widget class="QLineEdit" name="lineEdit_len">
+   <property name="geometry">
+    <rect>
+     <x>770</x>
+     <y>150</y>
+     <width>113</width>
+     <height>25</height>
+    </rect>
+   </property>
+  </widget>
+  <widget class="QLabel" name="label_2">
+   <property name="geometry">
+    <rect>
+     <x>96</x>
+     <y>110</y>
+     <width>91</width>
+     <height>20</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>Geometry</string>
+   </property>
+  </widget>
+  <widget class="QLineEdit" name="lineEdit_hdg">
+   <property name="geometry">
+    <rect>
+     <x>520</x>
+     <y>150</y>
+     <width>113</width>
+     <height>25</height>
+    </rect>
+   </property>
+  </widget>
+  <widget class="QLabel" name="label_3">
+   <property name="geometry">
+    <rect>
+     <x>430</x>
+     <y>106</y>
+     <width>67</width>
+     <height>17</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>s:</string>
+   </property>
+  </widget>
+  <widget class="QLabel" name="label_4">
+   <property name="geometry">
+    <rect>
+     <x>680</x>
+     <y>104</y>
+     <width>67</width>
+     <height>17</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>x:</string>
+   </property>
+  </widget>
+  <widget class="QLabel" name="label_5">
+   <property name="geometry">
+    <rect>
+     <x>940</x>
+     <y>102</y>
+     <width>67</width>
+     <height>17</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>y:</string>
+   </property>
+  </widget>
+  <widget class="QLabel" name="label_6">
+   <property name="geometry">
+    <rect>
+     <x>430</x>
+     <y>154</y>
+     <width>67</width>
+     <height>17</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>hdg:</string>
+   </property>
+  </widget>
+  <widget class="QLabel" name="label_7">
+   <property name="geometry">
+    <rect>
+     <x>680</x>
+     <y>154</y>
+     <width>67</width>
+     <height>17</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>Length:</string>
+   </property>
+  </widget>
+  <widget class="QLineEdit" name="lineEdit_roadlen">
+   <property name="geometry">
+    <rect>
+     <x>770</x>
+     <y>30</y>
+     <width>113</width>
+     <height>25</height>
+    </rect>
+   </property>
+  </widget>
+  <widget class="QLabel" name="label_8">
+   <property name="geometry">
+    <rect>
+     <x>626</x>
+     <y>38</y>
+     <width>121</width>
+     <height>17</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>Road Length</string>
+   </property>
+  </widget>
+  <widget class="QLabel" name="label_9">
+   <property name="geometry">
+    <rect>
+     <x>940</x>
+     <y>152</y>
+     <width>67</width>
+     <height>17</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>Type</string>
+   </property>
+  </widget>
+  <widget class="QComboBox" name="comboBox_geotype">
+   <property name="geometry">
+    <rect>
+     <x>1040</x>
+     <y>149</y>
+     <width>111</width>
+     <height>31</height>
+    </rect>
+   </property>
+  </widget>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>