|
@@ -8,6 +8,10 @@
|
|
|
#include <QFileDialog>
|
|
|
#include <QMessageBox>
|
|
|
|
|
|
+#include <functional>
|
|
|
+
|
|
|
+using namespace std;
|
|
|
+
|
|
|
#include "dialogcustomobj.h"
|
|
|
|
|
|
#define VIEW_WIDTH 1000
|
|
@@ -17,6 +21,23 @@
|
|
|
double glon0 = 117.0866293;
|
|
|
double glat0 = 39.1364713;
|
|
|
|
|
|
+using std::placeholders::_1;
|
|
|
+using std::placeholders::_2;
|
|
|
+using std::placeholders::_3;
|
|
|
+using std::placeholders::_4;
|
|
|
+using std::placeholders::_5;
|
|
|
+
|
|
|
+class xodrobj
|
|
|
+{
|
|
|
+public:
|
|
|
+ double flatsrc;
|
|
|
+ double flonsrc;
|
|
|
+ double fhgdsrc;
|
|
|
+ double flat;
|
|
|
+ double flon;
|
|
|
+ int lane;
|
|
|
+};
|
|
|
+
|
|
|
MainWindow::MainWindow(QWidget *parent)
|
|
|
: QMainWindow(parent)
|
|
|
, ui(new Ui::MainWindow)
|
|
@@ -82,6 +103,8 @@ MainWindow::MainWindow(QWidget *parent)
|
|
|
|
|
|
// mpaDecition = iv::modulecomm::RegisterRecvPlus("decition",fundecition);
|
|
|
mpaDecition = iv::modulecomm::RegisterRecvPlus("deciton",fundecition);
|
|
|
+ mpaXodrDst = iv::modulecomm::RegisterRecvPlus("xodrreq",std::bind(&MainWindow::UpdateXodrObj,this,_1,_2,_3,_4,_5));
|
|
|
+ mpamap = iv::modulecomm::RegisterRecvPlus("tracemap",std::bind(&MainWindow::UpdateMap,this,_1,_2,_3,_4,_5));
|
|
|
|
|
|
setWindowTitle(tr("Simple Planning Simulator"));
|
|
|
|
|
@@ -261,6 +284,10 @@ void MainWindow::CreateTab1View(QTabWidget * p)
|
|
|
|
|
|
p->addTab(pScroll,"Simulate");
|
|
|
|
|
|
+ connect(this,SIGNAL(signalSetDstPos(double,double)),this,SLOT(onSetDstPos(double,double)));
|
|
|
+ connect(this,SIGNAL(signalSetStartPos(double,double)),this,SLOT(onSetStartPos(double,double)));
|
|
|
+ connect(this,SIGNAL(signalUpdateTraceMap()),this,SLOT(onUpdateTraceMap()));
|
|
|
+
|
|
|
|
|
|
|
|
|
}
|
|
@@ -544,6 +571,7 @@ void MainWindow::CreateEP()
|
|
|
mpscene->addItem(ppix);
|
|
|
ppix->setZValue(101.0);
|
|
|
mppixep = ppix;
|
|
|
+ mppixep->setVisible(false);
|
|
|
}
|
|
|
|
|
|
void MainWindow::SetCarPos(double x,double y, double fhdg)
|
|
@@ -884,6 +912,76 @@ void MainWindow::onTimerUpdateCarPos()
|
|
|
mppixcar->setPos(mfViewMoveX +VIEW_WIDTH/2.0 + x - x1 ,-mfViewMoveY+VIEW_HEIGHT/2.0 - y + y1);
|
|
|
|
|
|
if(mbTrack)myview->centerOn(mfViewMoveX +VIEW_WIDTH/2.0 + x - x1 ,-mfViewMoveY+VIEW_HEIGHT/2.0 - y + y1);
|
|
|
+}
|
|
|
+
|
|
|
+void MainWindow::onSetDstPos(double x, double y)
|
|
|
+{
|
|
|
+ double fViewSize = 2.0;
|
|
|
+ double x1,y1;
|
|
|
+ x1 = fViewSize * 0.5;
|
|
|
+ y1 = -fViewSize;
|
|
|
+ mppixep->setVisible(true);
|
|
|
+ mppixep->setPos(mfViewMoveX +VIEW_WIDTH/2.0 + x - x1 ,-mfViewMoveY+VIEW_HEIGHT/2.0 - y + y1);
|
|
|
+}
|
|
|
+
|
|
|
+void MainWindow::onSetStartPos(double x, double y)
|
|
|
+{
|
|
|
+ double fViewSize = 2.0;
|
|
|
+ double x1,y1;
|
|
|
+ x1 = fViewSize * 0.5;
|
|
|
+ y1 = -fViewSize;
|
|
|
+ mppixsp->setVisible(true);
|
|
|
+ mppixsp->setPos(mfViewMoveX +VIEW_WIDTH/2.0 + x - x1 ,-mfViewMoveY+VIEW_HEIGHT/2.0 - y + y1);
|
|
|
+}
|
|
|
+
|
|
|
+void MainWindow::onUpdateTraceMap()
|
|
|
+{
|
|
|
+ std::vector<iv::GPS_INS> xvectortracemap;
|
|
|
+ mmutexmap.lock();
|
|
|
+ xvectortracemap = mvectormap;
|
|
|
+ mmutexmap.unlock();
|
|
|
+
|
|
|
+ double x0,y0;
|
|
|
+ double x,y;
|
|
|
+
|
|
|
+ if(mxodr.GetHeader() == NULL)
|
|
|
+ {
|
|
|
+ std::cout<<" onUpdateTraceMap , xodr fail."<<std::endl;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ double lon0,lat0;
|
|
|
+ mxodr.GetHeader()->GetLat0Lon0(lat0,lon0);
|
|
|
+ GaussProjCal(lon0,lat0,&x0,&y0);
|
|
|
+
|
|
|
+ int i;
|
|
|
+
|
|
|
+ while(mvectormappointitem.size()>0)
|
|
|
+ {
|
|
|
+ QGraphicsEllipseItem * pitem = mvectormappointitem[0];
|
|
|
+ mpscene->removeItem(pitem);
|
|
|
+ delete pitem;
|
|
|
+ mvectormappointitem.erase(mvectormappointitem.begin());
|
|
|
+ }
|
|
|
+
|
|
|
+ int nPointSize = static_cast<int>(xvectortracemap.size());
|
|
|
+ for(i=0;i<nPointSize;i++)
|
|
|
+ {
|
|
|
+ GaussProjCal(xvectortracemap[i].gps_lng,xvectortracemap[i].gps_lat,&x,&y);
|
|
|
+ x = x - x0;
|
|
|
+ y = y - y0;
|
|
|
+ double fpointwidth = 0.1;
|
|
|
+ QGraphicsEllipseItem * pitem = new QGraphicsEllipseItem(0.0,0.0,fpointwidth,fpointwidth);
|
|
|
+ pitem->setBrush(Qt::green);
|
|
|
+ pitem->setPen(QPen(Qt::yellow,0.001));
|
|
|
+ mpscene->addItem(pitem);
|
|
|
+ mvectormappointitem.push_back(pitem);
|
|
|
+ pitem->setPos(mfViewMoveX +VIEW_WIDTH/2.0 + x - fpointwidth * 0.5 ,-mfViewMoveY+VIEW_HEIGHT/2.0 - y - fpointwidth * 0.5);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
|
|
|
void MainWindow::UpdateDecition(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
|
|
@@ -903,6 +1001,94 @@ void MainWindow::UpdateDecition(const char * strdata,const unsigned int nSize,co
|
|
|
mpsimmodel->SetCMD(xdecition.accelerator(),xdecition.torque(),xdecition.brake(),xdecition.wheelangle());
|
|
|
}
|
|
|
|
|
|
+void MainWindow::UpdateXodrObj(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
|
|
|
+{
|
|
|
+ (void)index;
|
|
|
+ (void)dt;
|
|
|
+ (void)strmemname;
|
|
|
+
|
|
|
+ if(nSize<sizeof(xodrobj))
|
|
|
+ {
|
|
|
+ std::cout<<"UpdateXodrObj small."<<std::endl;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ xodrobj xo;
|
|
|
+ memcpy(&xo,strdata,sizeof(xodrobj));
|
|
|
+
|
|
|
+ double x0,y0;
|
|
|
+ double x,y;
|
|
|
+
|
|
|
+ if(mxodr.GetHeader() == NULL)
|
|
|
+ {
|
|
|
+ std::cout<<" UpdateXodrObj , xodr fail."<<std::endl;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ double lon0,lat0;
|
|
|
+ mxodr.GetHeader()->GetLat0Lon0(lat0,lon0);
|
|
|
+ GaussProjCal(lon0,lat0,&x0,&y0);
|
|
|
+ GaussProjCal(xo.flon,xo.flat,&x,&y);
|
|
|
+ x = x - x0;
|
|
|
+ y = y - y0;
|
|
|
+
|
|
|
+// emit signalSetDstPos(x,y);
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+void MainWindow::UpdateMap(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
|
|
|
+{
|
|
|
+ (void)index;
|
|
|
+ (void)dt;
|
|
|
+ (void)strmemname;
|
|
|
+
|
|
|
+ if(nSize<sizeof(iv::GPS_INS))
|
|
|
+ {
|
|
|
+ std::cout<<" no map data."<<std::endl;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ int nPointSize = static_cast<int>(nSize/sizeof(iv::GPS_INS));
|
|
|
+ iv::GPS_INS * pmap = (iv::GPS_INS * )strdata;
|
|
|
+
|
|
|
+ double x0,y0;
|
|
|
+ double x,y;
|
|
|
+
|
|
|
+ if(mxodr.GetHeader() == NULL)
|
|
|
+ {
|
|
|
+ std::cout<<" UpdateMap , xodr fail."<<std::endl;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ double lon0,lat0;
|
|
|
+ mxodr.GetHeader()->GetLat0Lon0(lat0,lon0);
|
|
|
+ GaussProjCal(lon0,lat0,&x0,&y0);
|
|
|
+ GaussProjCal(pmap[0].gps_lng,pmap[0].gps_lat,&x,&y);
|
|
|
+ x = x - x0;
|
|
|
+ y = y - y0;
|
|
|
+
|
|
|
+ emit signalSetStartPos(x,y);
|
|
|
+
|
|
|
+
|
|
|
+ GaussProjCal(pmap[nPointSize -1].gps_lng,pmap[nPointSize -1].gps_lat,&x,&y);
|
|
|
+ x = x - x0;
|
|
|
+ y = y - y0;
|
|
|
+
|
|
|
+ emit signalSetDstPos(x,y);
|
|
|
+
|
|
|
+ mmutexmap.lock();
|
|
|
+ mvectormap.clear();
|
|
|
+ int i;
|
|
|
+ for(i=0;i<nPointSize;i++)
|
|
|
+ {
|
|
|
+ mvectormap.push_back(pmap[i]);
|
|
|
+ }
|
|
|
+ mmutexmap.unlock();
|
|
|
+
|
|
|
+ emit signalUpdateTraceMap();
|
|
|
+
|
|
|
+
|
|
|
+}
|
|
|
|
|
|
void MainWindow::on_actionSaveObject_triggered()
|
|
|
{
|