Browse Source

change RemoteCtrl_Thread. and Change map_lanetoxodr.

yuchuli 3 years ago
parent
commit
fc7affa2c4

+ 5 - 0
src/common/common/xodr/OpenDrive/ObjectSignal.cpp

@@ -140,6 +140,11 @@ Object_markings::Object_markings(Object_markings_marking xmarking)
     mmarking.push_back(xmarking);
 }
 
+Object_markings::Object_markings()
+{
+
+}
+
 vector<Object_markings_marking> * Object_markings::GetMarkingVector()
 {
     return &mmarking;

+ 1 - 0
src/common/common/xodr/OpenDrive/ObjectSignal.h

@@ -65,6 +65,7 @@ private:
 
 public:
     Object_markings(Object_markings_marking xmarking);
+    Object_markings();
 
     vector<Object_markings_marking> * GetMarkingVector();
     Object_markings_marking* GetMarking(unsigned int i);

+ 97 - 0
src/common/common/xodr/OpenDrive/OpenDriveXmlParser.cpp

@@ -1278,6 +1278,97 @@ bool OpenDriveXmlParser::ReadObjectParkingSpace(Object *pObject, TiXmlElement *n
 }
 //--------------
 
+bool OpenDriveXmlParser::ReadObjectMarkings(Object *pObject, TiXmlElement *node)
+{
+    Object_markings xObject_Markings;
+
+    TiXmlElement *subNode = node->FirstChildElement("marking");
+
+    if(subNode == NULL)
+    {
+        std::cout<<"OpenDriveXmlParser::ReadObjectMarkings markings have one marking at least"<<std::endl;
+        return false;
+    }
+
+    while(subNode)
+    {
+        ReadObjectMarkingsMarking(&xObject_Markings,subNode);
+        subNode = subNode->NextSiblingElement("marking");
+    }
+
+    pObject->Setmarkings(xObject_Markings);
+}
+
+//--------------
+
+bool OpenDriveXmlParser::ReadObjectMarkingsMarking(Object_markings *pObject_Markings, TiXmlElement *node)
+{
+    std::string strside,strweight,strcolor;
+    double fwidth,fzOffset,fspaceLength,flineLength,fstartOffset,fstopOffset;
+
+    int checker=TIXML_SUCCESS;
+    checker+=node->QueryStringAttribute("color",&strcolor);
+    if(checker != TIXML_SUCCESS)
+    {
+        cout<<"Error parsing Object Marking color attributes"<<endl;
+        return false;
+    }
+    checker+=node->QueryDoubleAttribute("spaceLength",&fspaceLength);
+    if(checker != TIXML_SUCCESS)
+    {
+        cout<<"Error parsing Object Marking spaceLength attributes"<<endl;
+        return false;
+    }
+    checker+=node->QueryDoubleAttribute("lineLength",&flineLength);
+    if(checker != TIXML_SUCCESS)
+    {
+        cout<<"Error parsing Object Marking lineLength attributes"<<endl;
+        return false;
+    }
+    checker+=node->QueryDoubleAttribute("startOffset",&fstartOffset);
+    if(checker != TIXML_SUCCESS)
+    {
+        cout<<"Error parsing Object Marking startOffset attributes"<<endl;
+        return false;
+    }
+    checker+=node->QueryDoubleAttribute("stopOffset",&fstopOffset);
+    if(checker != TIXML_SUCCESS)
+    {
+        cout<<"Error parsing Object Marking stopOffset attributes"<<endl;
+        return false;
+    }
+
+    pObject_Markings->AddMarking(strcolor,fspaceLength,flineLength,fstartOffset,fstopOffset);
+    Object_markings_marking * pObject_Markings_Marking = pObject_Markings->GetLastMarking();
+
+    if(node->QueryStringAttribute("side",&strside) == TIXML_SUCCESS)
+    {
+        pObject_Markings_Marking->Setside(strside);
+    }
+
+    if(node->QueryStringAttribute("weight",&strweight) == TIXML_SUCCESS)
+    {
+        pObject_Markings_Marking->Setweight(strweight);
+    }
+
+    if(node->QueryDoubleAttribute("width",&fwidth) == TIXML_SUCCESS)
+    {
+        pObject_Markings_Marking->Setwidth(fwidth);
+    }
+
+    if(node->QueryDoubleAttribute("zOffset",&fzOffset) == TIXML_SUCCESS)
+    {
+        pObject_Markings_Marking->SetzOffset(fzOffset);
+    }
+
+
+    return true;
+
+
+}
+
+//--------------
+
 bool OpenDriveXmlParser::ReadObjectOutlines(Object * pObject,TiXmlElement *node)
 {
     Object_outlines xoutlines;
@@ -1649,6 +1740,12 @@ bool OpenDriveXmlParser::ReadObject(Road *road, TiXmlElement *node)
         subNode = subNode->NextSiblingElement("outline");
     }
 
+    subNode = node->FirstChildElement("markings");
+    if(subNode)
+    {
+        ReadObjectMarkings(pobject,subNode);
+    }
+
     return true;
 }
 //--------------

+ 3 - 0
src/common/common/xodr/OpenDrive/OpenDriveXmlParser.h

@@ -88,6 +88,9 @@ public:
     bool ReadSignal_positionInertial(Signal * pSignal, TiXmlElement *node);
     bool ReadSignal_laneValidity(Signal * pSignal,TiXmlElement * node);
     bool ReadObject(Road * road,TiXmlElement * node);
+    bool ReadObjectMarkings(Object * pObject,TiXmlElement * node);
+    bool ReadObjectMarkingsMarking(Object_markings * pObject_Markings,TiXmlElement * node);
+
 	//--------------
 
 	bool ReadSurface (Road* road, TiXmlElement *node);

+ 60 - 2
src/common/common/xodr/OpenDrive/OpenDriveXmlWriter.cpp

@@ -1263,7 +1263,12 @@ bool OpenDriveXmlWriter::WriteObject(TiXmlElement *node, Object *pObject)
         WriteObjectOutlinesOutline(nodeObject,pObject_outlines_outline);
     }
 
-//    unsigned nmarkingcount =
+    Object_markings * pObject_markings = pObject->Getmarkings();
+    if(pObject_markings != NULL)
+    {
+        WriteObjectMarkings(nodeObject,pObject_markings);
+    }
+
 
     return true;
 }
@@ -1450,12 +1455,65 @@ bool OpenDriveXmlWriter::WriteObjectOutlinesOutline(TiXmlElement *node, Object_o
 
 //--------------
 
+bool OpenDriveXmlWriter::WriteObjectMarkings(TiXmlElement *node, Object_markings *pObject_markings)
+{
+    TiXmlElement * nodeObjectMakrings = new TiXmlElement("markings");
+    node->LinkEndChild(nodeObjectMakrings);
+
+    int lmarkingcount = pObject_markings->GetMarkingCount();
+    if(lmarkingcount == 0)
+    {
+        std::cout<<"Makrings must have at least 1 marking"<<std::endl;
+        return false;
+    }
+    unsigned int i;
+    for(i=0;i<lmarkingcount;i++)
+    {
+        WriteObjectMarkingsMarking(nodeObjectMakrings,pObject_markings->GetMarking(i));
+    }
+
+    return true;
+
+}
+
+//--------------
+
 bool OpenDriveXmlWriter::WriteObjectMarkingsMarking(TiXmlElement *node, Object_markings_marking *pObject_markings_marking)
 {
     TiXmlElement * nodemarking = new TiXmlElement("marking");
     node->LinkEndChild(nodemarking);
 
- //   if(pObject_markings_marking->g)
+    std::string strside,strweight;
+    double fwidth,fzOffset;
+
+    if(pObject_markings_marking->Getside(strside) == 1)
+    {
+        nodemarking->SetAttribute("side",strside);
+    }
+
+    if(pObject_markings_marking->Getweight(strweight) == 1)
+    {
+        nodemarking->SetAttribute("weight",strweight);
+    }
+
+    if(pObject_markings_marking->Getwidth(fwidth) == 1)
+    {
+        nodemarking->SetDoubleAttribute("width",fwidth);
+    }
+
+    nodemarking->SetAttribute("color",pObject_markings_marking->Getcolor());
+
+    if(pObject_markings_marking->GetzOffset(fzOffset) == 1)
+    {
+        nodemarking->SetDoubleAttribute("zOffset",fzOffset);
+    }
+
+    nodemarking->SetDoubleAttribute("spaceLength",pObject_markings_marking->GetspaceLength());
+    nodemarking->SetDoubleAttribute("lineLength",pObject_markings_marking->GetlineLength());
+    nodemarking->SetDoubleAttribute("startOffset",pObject_markings_marking->GetstartOffset());
+    nodemarking->SetDoubleAttribute("stopOffset",pObject_markings_marking->GetstopOffset());
+
+    return true;
 }
 
 //--------------

+ 1 - 0
src/common/common/xodr/OpenDrive/OpenDriveXmlWriter.h

@@ -84,6 +84,7 @@ public:
     bool WriteSignal(TiXmlElement * node, Signal * pSignal);
     bool WriteSignal_positionInertial(TiXmlElement * node, signal_positionInertial * pSignal_positionInertial);
     bool WriteSignal_laneValidity(TiXmlElement * node, signal_laneValidity * pSignal_laneValidity);
+    bool WriteObjectMarkings(TiXmlElement * node,Object_markings * pObject_markings);
     bool WriteObjectMarkingsMarking(TiXmlElement * node,Object_markings_marking * pObject_markings_marking);
 
     //--------------

+ 114 - 9
src/tool/RemoteCtrl_Thread/dialogbigpic.cpp

@@ -39,9 +39,21 @@ DialogBigPic::DialogBigPic(QWidget *parent) :
     mpPicViewRight = new IVPicView();
     mpPicViewRight->start();
 
-    mnLastPicTime = 0;
-    mbDraw = false;
+//    mnLastPicTime = 0;
+    int i;
+    for(i=0;i<3;i++)
+    {
+        mnLastPicTime[i] = 0;
+        mbDraw[i] = false;
+    }
+//    mbDraw = false;
     connect(mpPicView,SIGNAL(painterupadate()),this,SLOT(onPainterUpdate()));
+    connect(mpPicViewLeft,SIGNAL(painterupadate()),this,SLOT(onPainterUpdate()));
+    connect(mpPicViewRight,SIGNAL(painterupadate()),this,SLOT(onPainterUpdate()));
+
+    mpview->scale(0.8,0.8);
+    mpviewLeft->scale(0.4,0.4);
+    mpviewRight->scale(0.4,0.4);
 
     QTimer * timer = new QTimer();
     connect(timer,SIGNAL(timeout()),this,SLOT(onTimerPic()));
@@ -62,14 +74,55 @@ void DialogBigPic::onTimerPic()
 
     bool bUpdate = false;
 
-    int ncam = mnCamera;
-    if((mnLastPicTime != gTimeRawPic[ncam])&&(gTimeRawPic[ncam]!= 0))
+//    int ncam = mnCamera;
+//    if((mnLastPicTime != gTimeRawPic[ncam])&&(gTimeRawPic[ncam]!= 0))
+//    {
+//        gMutexPic[ncam].lock();
+//        mpPicView->SetPic(grawpic[ncam]);
+//        gMutexPic[ncam].unlock();
+//        bUpdate = true;
+//        mbDraw = true;
+//    }
+
+    int ncamcenter = 0;
+    int ncamleft = 2;
+    int ncamright = 3;
+    if(mbFront == false)
+    {
+        ncamcenter = 1;
+        ncamright = 2;
+        ncamleft = 3;
+    }
+
+
+    if((mnLastPicTime[0] != gTimeRawPic[ncamcenter])&&(gTimeRawPic[ncamcenter]!= 0))
+    {
+        gMutexPic[ncamcenter].lock();
+        mpPicView->SetPic(grawpic[ncamcenter]);
+        gMutexPic[ncamcenter].unlock();
+        bUpdate = true;
+        mnLastPicTime[0] = gTimeRawPic[ncamcenter];
+ //       mbDraw[0] = true;
+    }
+
+    if((mnLastPicTime[1] != gTimeRawPic[ncamleft])&&(gTimeRawPic[ncamleft]!= 0))
+    {
+        gMutexPic[ncamleft].lock();
+        mpPicViewLeft->SetPic(grawpic[ncamleft]);
+        gMutexPic[ncamleft].unlock();
+        bUpdate = true;
+        mnLastPicTime[1] = gTimeRawPic[ncamleft];
+//        mbDraw[1] = true;
+    }
+
+    if((mnLastPicTime[2] != gTimeRawPic[ncamright])&&(gTimeRawPic[ncamright]!= 0))
     {
-        gMutexPic[ncam].lock();
-        mpPicView->SetPic(grawpic[ncam]);
-        gMutexPic[ncam].unlock();
+        gMutexPic[ncamright].lock();
+        mpPicViewRight->SetPic(grawpic[ncamright]);
+        gMutexPic[ncamright].unlock();
         bUpdate = true;
-        mbDraw = true;
+        mnLastPicTime[2] = gTimeRawPic[ncamright];
+//        mbDraw[2] = true;
     }
 
 
@@ -80,25 +133,52 @@ void DialogBigPic::onTimerPic()
 void DialogBigPic::paintEvent(QPaintEvent *)
 {
 
-    if(mbDraw)
+    if(mbDraw[0])
     {
         QImage image = mpPicView->GetImage();
         mscene->clear();
         mscene->addPixmap(QPixmap::fromImage(image));
         mpview->setScene(mscene);
         mpview->show();
+    }
 
+    if(mbDraw[1])
+    {
+        QImage image = mpPicViewLeft->GetImage();
         msceneLeft->clear();
         msceneLeft->addPixmap(QPixmap::fromImage(image));
         mpviewLeft->setScene(msceneLeft);
         mpviewLeft->show();
+    }
 
+    if(mbDraw[2])
+    {
+        QImage image = mpPicViewRight->GetImage();
         msceneRight->clear();
         msceneRight->addPixmap(QPixmap::fromImage(image));
         mpviewRight->setScene(msceneRight);
         mpviewRight->show();
     }
 
+//    if(mbDraw)
+//    {
+//        QImage image = mpPicView->GetImage();
+//        mscene->clear();
+//        mscene->addPixmap(QPixmap::fromImage(image));
+//        mpview->setScene(mscene);
+//        mpview->show();
+
+//        msceneLeft->clear();
+//        msceneLeft->addPixmap(QPixmap::fromImage(image));
+//        mpviewLeft->setScene(msceneLeft);
+//        mpviewLeft->show();
+
+//        msceneRight->clear();
+//        msceneRight->addPixmap(QPixmap::fromImage(image));
+//        mpviewRight->setScene(msceneRight);
+//        mpviewRight->show();
+//    }
+
 }
 
 void DialogBigPic::resizeEvent(QResizeEvent *event)
@@ -121,6 +201,21 @@ void DialogBigPic::setRefresh(bool brefresh)
 
 void DialogBigPic::onPainterUpdate()
 {
+    if(sender() == mpPicView)
+    {
+//        qDebug("front draw");
+        mbDraw[0] = true;
+    }
+    if(sender() == mpPicViewLeft)
+    {
+//        qDebug("left draw");
+        mbDraw[1] = true;
+    }
+    if(sender() == mpPicViewRight)
+    {
+//        qDebug("right draw");
+        mbDraw[2] = true;
+    }
     update();
 }
 
@@ -128,3 +223,13 @@ void DialogBigPic::setCamera(int n)
 {
     mnCamera = n;
 }
+
+void DialogBigPic::SetFront()
+{
+    mbFront = true;
+}
+
+void DialogBigPic::SetRear()
+{
+    mbFront = false;
+}

+ 10 - 2
src/tool/RemoteCtrl_Thread/dialogbigpic.h

@@ -25,6 +25,7 @@ private slots:
     void onTimerPic();
    void onPainterUpdate();
 
+
 public:
      void resizeEvent(QResizeEvent *event);
 
@@ -32,6 +33,9 @@ public:
 
      void setCamera(int n);
 
+     void SetFront();
+     void SetRear();
+
 private:
     Ui::DialogBigPic *ui;
 
@@ -47,13 +51,17 @@ private:
     QGraphicsScene *msceneRight;
     IVPicView * mpPicViewRight;
 
-    qint64 mnLastPicTime;
+//    qint64 mnLastPicTime;
+    qint64 mnLastPicTime[3];
 
-    bool mbDraw;
+//    bool mbDraw;
+    bool mbDraw[3];
 
     bool mbRefresh= false;
 
     int mnCamera = 0;
+
+    bool mbFront = true;  //if false, rear drive
 };
 
 #endif // DIALOGBIGPIC_H

+ 2 - 0
src/tool/RemoteCtrl_Thread/dialogpic.cpp

@@ -72,6 +72,8 @@ void DialogPic::onTimerPic()
             gMutexPic[i].unlock();
             bUpdate = true;
             mbDraw[i] = true;
+            mnLastPicTime[i] = gTimeRawPic[i];
+//            qDebug("draw time is %ld",mnLastPicTime[i]);
         }
     }
 

+ 1 - 1
src/tool/RemoteCtrl_Thread/ivpicview.cpp

@@ -11,7 +11,7 @@
 #endif
 
 #define VIEW_WIDTH 640
-#define VIEW_HEIGHT 480
+#define VIEW_HEIGHT 360
 
 IVPicView::IVPicView()
 {

+ 3 - 0
src/tool/RemoteCtrl_Thread/mainwindow.cpp

@@ -783,11 +783,13 @@ void MainWindow::on_radioButton_Drive_clicked()
     mnShift = 1;
     ui->radioButton_picfront->setChecked(true);
     on_radioButton_picfront_clicked();
+    mpbigpicdlg->SetFront();
 }
 
 void MainWindow::on_radioButton_Null_clicked()
 {
     mnShift = 0;
+    mpbigpicdlg->SetFront();
 }
 
 void MainWindow::on_radioButton_Rear_clicked()
@@ -795,6 +797,7 @@ void MainWindow::on_radioButton_Rear_clicked()
     mnShift = -1;
     ui->radioButton_picrear->setChecked(true);
     on_radioButton_picrear_clicked();
+    mpbigpicdlg->SetRear();
 }
 
 void MainWindow::on_radioButton_picfront_clicked()

+ 2 - 0
src/tool/map_lanetoxodr/main.cpp

@@ -90,5 +90,7 @@ int main(int argc, char *argv[])
     w.show();
     w.resize(1280,800);
 
+    qDebug("win id : %d",w.winId());
+
     return a.exec();
 }