| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308 |
- #include "trafficlightdialog.h"
- #include "ui_trafficlightdialog.h"
- #include "trafficlightlanevaliditydialog.h"
- #include "trafficlightpositiondialog.h"
- #include "mainwindow.h"
- #include <QMessageBox>
- 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;i<nroadcount;i++)
- {
- const char * strname = mpxodr->GetRoad(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;i<nsigcount;i++)
- {
- Signal * pSignal = pRoad->GetSignal(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;i<nroadcount;i++)
- {
- Road * pRoad = mpxodr->GetRoad(i);
- int nsignalcount = pRoad->GetSignalCount();
- for(j=0;j<nsignalcount;j++)
- {
- if(id == atoi(pRoad->GetSignal(j)->Getid().data()))
- {
- bHaveExist = true;
- break;
- }
- }
- if(bHaveExist)break;
- }
- }while(bHaveExist == true);
- return id;
- }
|