yuchuli 2 жил өмнө
parent
commit
0ec35055b5

+ 117 - 1
src/tool/map_lanetoxodr/dialogaddroadfromcda.cpp

@@ -160,7 +160,7 @@ void DialogAddRoadFromCDA::on_comboBox_geo_currentIndexChanged(int index)
         return;
     }
     iv::cdageo * pgeo = &pcdaroad->mvectorgeo[index];
-    ui->comboBox_geo->setCurrentIndex(pgeo->mngeotype);
+    ui->comboBox_geoType->setCurrentIndex(pgeo->mngeotype);
     ui->lineEdit_georadius->setText(QString::number(pgeo->mfradius));
     ui->lineEdit_geolen->setText(QString::number(pgeo->mflen));
 }
@@ -239,3 +239,119 @@ void DialogAddRoadFromCDA::on_pushButton_lanechange_clicked()
     ui->comboBox_Lane->setCurrentIndex(index);
     QMessageBox::information(this,tr("Info"),tr("Change Lane Successfully."),QMessageBox::YesAll);
 }
+
+void DialogAddRoadFromCDA::on_pushButton_geoadd_clicked()
+{
+    iv::cdaroad * pcdaroad = &mcdaroad;
+    iv::cdageo xgeo;
+    xgeo.mflen = ui->lineEdit_geolen->text().toDouble();
+    if(xgeo.mflen <=0)
+    {
+        QMessageBox::warning(this,tr("Warning"),tr("Geo Length Error."),QMessageBox::YesAll);
+        return;
+    }
+    xgeo.mfradius = ui->lineEdit_georadius->text().toDouble();
+    xgeo.mngeotype = ui->comboBox_geoType->currentIndex();
+    if((xgeo.mngeotype == 1) &&(fabs(xgeo.mfradius)<1))
+    {
+        QMessageBox::warning(this,tr("Warning"),tr("Radius Error."),QMessageBox::YesAll);
+        return;
+    }
+    if(xgeo.mflen <= 0)
+    {
+        QMessageBox::warning(this,tr("Warning"),tr("geo Length Error."),QMessageBox::YesAll);
+        return;
+    }
+    int ngeocount = static_cast<int>(pcdaroad->mvectorgeo.size()) ;
+    pcdaroad->mvectorgeo.push_back(xgeo);
+    ui->comboBox_geo->addItem(QString(tr("路段"))+QString::number(ngeocount+1));
+    ui->comboBox_geo->setCurrentIndex(ngeocount);
+
+    int ngeosize = static_cast<int>(pcdaroad->mvectorgeo.size());
+    int i;
+    double fRoadLen = 0;
+    for(i=0;i<ngeosize;i++)
+    {
+        fRoadLen = fRoadLen + pcdaroad->mvectorgeo[i].mflen;
+    }
+    ui->lineEdit_roadlen->setText(QString::number(fRoadLen));
+
+}
+
+void DialogAddRoadFromCDA::on_pushButton_geodel_clicked()
+{
+    iv::cdaroad * pcdaroad = &mcdaroad;
+    if(pcdaroad->mvectorgeo.size() == 0)
+    {
+        QMessageBox::warning(this,tr("Warning"),tr("No Geo."),QMessageBox::YesAll);
+        return;
+    }
+    int index = ui->comboBox_geo->currentIndex();
+    pcdaroad->mvectorgeo.erase(pcdaroad->mvectorgeo.begin() + index);
+
+    int nGeocount = static_cast<int>(pcdaroad->mvectorgeo.size());
+    int i;
+    ui->comboBox_geo->clear();
+    for(i=0;i<nGeocount;i++)
+    {
+        ui->comboBox_geo->addItem(QString(tr("路段"))+QString::number(i+1));
+    }
+
+    if(index<nGeocount)
+    {
+        ui->comboBox_geo->setCurrentIndex(index);
+    }
+    else
+    {
+        ui->comboBox_Lane->setCurrentIndex((nGeocount-1));
+    }
+
+    int ngeosize = static_cast<int>(pcdaroad->mvectorgeo.size());
+    double fRoadLen = 0;
+    for(i=0;i<ngeosize;i++)
+    {
+        fRoadLen = fRoadLen + pcdaroad->mvectorgeo[i].mflen;
+    }
+    ui->lineEdit_roadlen->setText(QString::number(fRoadLen));
+}
+
+void DialogAddRoadFromCDA::on_pushButton_geochange_clicked()
+{
+    iv::cdaroad * pcdaroad = &mcdaroad;
+    if(pcdaroad->mvectorgeo.size() == 0)
+    {
+        QMessageBox::warning(this,tr("Warning"),tr("No Geo."),QMessageBox::YesAll);
+        return;
+    }
+    int index = ui->comboBox_geo->currentIndex();
+    double flen = ui->lineEdit_geolen->text().toDouble();
+    if(flen<=0)
+    {
+        QMessageBox::warning(this,tr("Warning"),tr("geo Length Error."),QMessageBox::YesAll);
+        return;
+    }
+
+    double fRadius = ui->lineEdit_georadius->text().toDouble();
+    if((ui->comboBox_geoType->currentIndex() == 1)&&(fabs(fRadius) < 1))
+    {
+        QMessageBox::warning(this,tr("Warning"),tr("Radius Error."),QMessageBox::YesAll);
+        return;
+    }
+
+    iv::cdageo * pgeo = &pcdaroad->mvectorgeo[index];
+    pgeo->mflen = flen;
+    pgeo->mfradius = fRadius;
+    pgeo->mngeotype = ui->comboBox_geoType->currentIndex();
+    ui->comboBox_geo->setCurrentIndex(index);
+
+    int ngeosize = static_cast<int>(pcdaroad->mvectorgeo.size());
+    double fRoadLen = 0;
+    int i;
+    for(i=0;i<ngeosize;i++)
+    {
+        fRoadLen = fRoadLen + pcdaroad->mvectorgeo[i].mflen;
+    }
+    ui->lineEdit_roadlen->setText(QString::number(fRoadLen));
+
+    QMessageBox::information(this,tr("Info"),tr("Change Lane Successfully."),QMessageBox::YesAll);
+}

+ 6 - 0
src/tool/map_lanetoxodr/dialogaddroadfromcda.h

@@ -31,6 +31,12 @@ private slots:
 
     void on_pushButton_lanechange_clicked();
 
+    void on_pushButton_geoadd_clicked();
+
+    void on_pushButton_geodel_clicked();
+
+    void on_pushButton_geochange_clicked();
+
 private:
     Ui::DialogAddRoadFromCDA *ui;
     OpenDrive * mpxodr;