#include "trafficlightdialog.h" #include "ui_trafficlightdialog.h" #include "trafficlightlanevaliditydialog.h" #include "trafficlightpositiondialog.h" #include "mainwindow.h" #include TrafficLightDialog::TrafficLightDialog(OpenDrive * pxodr,std::string strdefroad,QWidget *parent) : QDialog(parent), ui(new Ui::TrafficLightDialog) { ui->setupUi(this); mpxodr = pxodr; ui->comboBox_dynamic->addItem("yes"); ui->comboBox_dynamic->addItem("no"); ui->lineEdit_id->setReadOnly(true); int i; int nroadcount = mpxodr->GetRoadCount(); for(i=0;iGetRoad(i)->GetRoadId().data(); ui->comboBox_Road->addItem(strname); } MainWindow::ComboToString(strdefroad,ui->comboBox_Road); setWindowTitle("Edit Traffic Light"); } TrafficLightDialog::~TrafficLightDialog() { delete ui; } void TrafficLightDialog::on_comboBox_Road_currentIndexChanged(int index) { Road * pRoad = mpxodr->GetRoad(index); if(pRoad == 0) { // QMessageBox::warning(this,"WARN","MainWindow::onClickCBRoadChange road is NULL"); return; } ui->lineEdit_RoadLen->setText(QString::number(pRoad->GetRoadLength(),'f',3)); ui->comboBox_TrafficLIght->clear(); int nsigcount = pRoad->GetSignalCount(); if(nsigcount == 0) { initlineedit(); return; } int i; for(i=0;iGetSignal(i); ui->comboBox_TrafficLIght->addItem(pSignal->Getid().data()); } } void TrafficLightDialog::initlineedit() { ui->lineEdit_name->setText(""); ui->lineEdit_id->setText(""); ui->lineEdit_s->setText("0.0"); ui->lineEdit_t->setText("0.0"); // ui->comboBox_dynamic->setText(""); ui->lineEdit_orientation->setText("-"); ui->lineEdit_zOffset->setText("0.0"); ui->lineEdit_type->setText("1000001"); ui->lineEdit_country->setText("OpenDrive"); ui->lineEdit_countryRevision->setText("2013"); ui->lineEdit_subtype->setText("-1"); ui->lineEdit_hOffset->setText("0.1"); ui->lineEdit_pitch->setText("0"); ui->lineEdit_roll->setText("0"); ui->lineEdit_height->setText("0.1"); ui->lineEdit_width->setText("0.1"); } void TrafficLightDialog::showsignal(Signal *pSignal) { ui->lineEdit_name->setText(pSignal->Getname().data()); ui->lineEdit_id->setText(pSignal->Getid().data()); ui->lineEdit_s->setText(QString::number(pSignal->Gets())); ui->lineEdit_t->setText(QString::number(pSignal->Gett())); if(pSignal->Getdynamic())ui->comboBox_dynamic->setCurrentIndex(0); else ui->comboBox_dynamic->setCurrentIndex(1); // ui->comboBox_dynamic->setText(""); ui->lineEdit_orientation->setText(pSignal->Getorientation().data()); ui->lineEdit_zOffset->setText(QString::number(pSignal->GetzOffset())); ui->lineEdit_type->setText(pSignal->Gettype().data()); ui->lineEdit_country->setText(pSignal->Getcountry().data()); ui->lineEdit_countryRevision->setText(pSignal->GetcountryRevision().data()); ui->lineEdit_subtype->setText(pSignal->Getsubtype().data()); ui->lineEdit_hOffset->setText(QString::number(pSignal->GethOffset())); ui->lineEdit_pitch->setText(QString::number(pSignal->Getpitch())); ui->lineEdit_roll->setText(QString::number(pSignal->Getroll())); ui->lineEdit_height->setText(QString::number(pSignal->Getheight())); ui->lineEdit_width->setText(QString::number(pSignal->Getwidth())); } void TrafficLightDialog::on_comboBox_TrafficLIght_currentIndexChanged(int index) { Road * pRoad =mpxodr->GetRoad(ui->comboBox_Road->currentIndex()); if(pRoad == 0)return; if(pRoad->GetSignalCount() == 0)return; if(index >= pRoad->GetSignalCount())return; Signal * pSignal = pRoad->GetSignal(index); showsignal(pSignal); } void TrafficLightDialog::on_pushButton_EditinertialPosition_clicked() { Road * pRoad =mpxodr->GetRoad(ui->comboBox_Road->currentIndex()); if(pRoad == 0)return; if(pRoad->GetSignalCount() == 0)return; Signal * pSignal =pRoad->GetSignal(ui->comboBox_TrafficLIght->currentIndex()); if(pSignal == 0)return; double lon0,lat0; mpxodr->GetHeader()->GetLat0Lon0(lat0,lon0); TrafficLightpositionDialog td(pSignal,lon0,lat0,this); int res = td.exec(); (void)&res; } void TrafficLightDialog::on_pushButton_EditlaneValidity_clicked() { Road * pRoad =mpxodr->GetRoad(ui->comboBox_Road->currentIndex()); if(pRoad == 0)return; if(pRoad->GetSignalCount() == 0)return; Signal * pSignal =pRoad->GetSignal(ui->comboBox_TrafficLIght->currentIndex()); if(pSignal == 0)return; TrafficLightlaneValidityDialog td(pSignal,this); int res = td.exec(); (void)&res; } void TrafficLightDialog::on_pushButton_Add_clicked() { Road * pRoad =mpxodr->GetRoad(ui->comboBox_Road->currentIndex()); if(pRoad == 0)return; double s; double t; string id; string name; bool dynamic; string orientation; double zOffset; string type; string country; string countryRevision; string subtype; double hOffset; double pitch; double roll; double height; double width; int nid = getnewsignalid(); string strid = QString::number(nid).toStdString(); geteditvalue(s,t,name,dynamic,orientation,zOffset,type,country,countryRevision, subtype,hOffset,pitch,roll,height,width); pRoad->AddSignal(s,t,strid,name,dynamic,orientation,zOffset,type,country,countryRevision, subtype,hOffset,pitch,roll,height,width); on_comboBox_Road_currentIndexChanged(ui->comboBox_Road->currentIndex()); ui->comboBox_TrafficLIght->setCurrentIndex(pRoad->GetSignalCount()-1); } void TrafficLightDialog::on_pushButton_Delete_clicked() { Road * pRoad =mpxodr->GetRoad(ui->comboBox_Road->currentIndex()); if(pRoad == 0)return; if(pRoad->GetSignalCount() == 0) { QMessageBox::warning(this,"warning","No Signal Delete."); return; } pRoad->DeleteSignal(ui->comboBox_TrafficLIght->currentIndex()); on_comboBox_Road_currentIndexChanged(ui->comboBox_Road->currentIndex()); ui->comboBox_TrafficLIght->setCurrentIndex(pRoad->GetSignalCount()-1); } void TrafficLightDialog::on_pushButton_Update_clicked() { Road * pRoad =mpxodr->GetRoad(ui->comboBox_Road->currentIndex()); if(pRoad == 0)return; if(pRoad->GetSignalCount() == 0)return; Signal * pSignal =pRoad->GetSignal(ui->comboBox_TrafficLIght->currentIndex()); if(pSignal == 0)return; double s; double t; string name; bool dynamic; string orientation; double zOffset; string type; string country; string countryRevision; string subtype; double hOffset; double pitch; double roll; double height; double width; geteditvalue(s,t,name,dynamic,orientation,zOffset,type,country,countryRevision, subtype,hOffset,pitch,roll,height,width); pSignal->Sets(s); pSignal->Sett(t); pSignal->Setname(name); pSignal->Setdynamic(dynamic); pSignal->Setorientation(orientation); pSignal->SetzOffset(zOffset); pSignal->Settype(type); pSignal->Setcountry(country); pSignal->SetcountryRevision(countryRevision); pSignal->Setsubtype(subtype); pSignal->SethOffset(hOffset); pSignal->Setpitch(pitch); pSignal->Setroll(roll); pSignal->Setheight(height); pSignal->Setwidth(width); } int TrafficLightDialog::geteditvalue(double &s, double &t, std::string &name, bool &dynamic, std::string &orientation, double &zOffset, std::string &type, std::string &country, std::string &countryRevision, std::string &subtype, double &hOffset, double &pitch, double &roll, double &height, double &width) { s = ui->lineEdit_s->text().toDouble(); t = ui->lineEdit_t->text().toDouble(); name = ui->lineEdit_name->text().toStdString(); if(ui->comboBox_dynamic->currentIndex() == 0)dynamic = true; else dynamic = false; orientation = ui->lineEdit_orientation->text().toStdString(); zOffset = ui->lineEdit_zOffset->text().toDouble(); type = ui->lineEdit_type->text().toStdString(); country = ui->lineEdit_country->text().toStdString(); countryRevision = ui->lineEdit_countryRevision->text().toStdString(); subtype = ui->lineEdit_subtype->text().toStdString(); hOffset = ui->lineEdit_hOffset->text().toDouble(); pitch = ui->lineEdit_pitch->text().toDouble(); roll = ui->lineEdit_roll->text().toDouble(); height = ui->lineEdit_height->text().toDouble(); width = ui->lineEdit_width->text().toDouble(); return 0; } int TrafficLightDialog::getnewsignalid() { int id = -1; bool bHaveExist = false; do { bHaveExist = false; id = id + 1; int nroadcount = mpxodr->GetRoadCount(); int i,j; for(i=0;iGetRoad(i); int nsignalcount = pRoad->GetSignalCount(); for(j=0;jGetSignal(j)->Getid().data())) { bHaveExist = true; break; } } if(bHaveExist)break; } }while(bHaveExist == true); return id; }