Browse Source

change map_lanetoxodr. add object marking.

yuchuli 3 years ago
parent
commit
1200821727

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

@@ -125,9 +125,10 @@ void Object_markings_marking::ClearzOffset()
     if(mzOffset.size()>0)mzOffset.clear();
 }
 
-Object_markings_marking::Object_markings_marking(std::string color, double spaceLength, double lineLength,
+Object_markings_marking::Object_markings_marking(std::string strside,std::string color, double spaceLength, double lineLength,
                                                  double startOffset, double stopOffset)
 {
+    Setside(strside);
     mcolor = color;
     mspaceLength = spaceLength;
     mlineLength = lineLength;
@@ -170,10 +171,10 @@ Object_markings_marking*			Object_markings::GetLastMarking()
     return &mmarking.at(mmarking.size() -1);
 }
 
-unsigned int Object_markings::AddMarking(string color,double spaceLength,
+unsigned int Object_markings::AddMarking(std::string strside,string color,double spaceLength,
                         double lineLength,double startOffset,double stopOffset)
 {
-    mmarking.push_back(Object_markings_marking(color,spaceLength,lineLength,startOffset,stopOffset));
+    mmarking.push_back(Object_markings_marking(strside,color,spaceLength,lineLength,startOffset,stopOffset));
     return mmarking.size()-1;
 }
 
@@ -191,6 +192,7 @@ void Object_markings::DeleteMarking(unsigned int index)
 {
     if((mmarking.size() == 0) ||(index>=mmarking.size()))
     {
+        return;
     }
 
     mmarking.erase(mmarking.begin() + index);

+ 3 - 2
src/common/common/xodr/OpenDrive/ObjectSignal.h

@@ -51,7 +51,7 @@ public:
 
 
 public:
-    Object_markings_marking(string color,double spaceLength,
+    Object_markings_marking(std::string strside,string color,double spaceLength,
                             double lineLength,double startOffset,double stopOffset);
 };
 
@@ -71,7 +71,7 @@ public:
     Object_markings_marking* GetMarking(unsigned int i);
     unsigned int GetMarkingCount();
     Object_markings_marking*			GetLastMarking();
-    unsigned int AddMarking(string color,double spaceLength,
+    unsigned int AddMarking(std::string strside,string color,double spaceLength,
                             double lineLength,double startOffset,double stopOffset);
     unsigned int CloneMarking(unsigned int index);
     void DeleteMarking(unsigned int index);
@@ -447,6 +447,7 @@ public:
     unsigned int AddObjectoutline();
     unsigned int CloneObjectoutline(unsigned int index);
     void DeleteObjectoutline(unsigned int index);
+
 };
 //----------------------------------------------------------------------------------
 

+ 7 - 5
src/common/common/xodr/OpenDrive/OpenDriveXmlParser.cpp

@@ -1307,6 +1307,12 @@ bool OpenDriveXmlParser::ReadObjectMarkingsMarking(Object_markings *pObject_Mark
     double fwidth,fzOffset,fspaceLength,flineLength,fstartOffset,fstopOffset;
 
     int checker=TIXML_SUCCESS;
+    checker+=node->QueryStringAttribute("side",&strside);
+    if(checker != TIXML_SUCCESS)
+    {
+        cout<<"Error parsing Object Marking side attributes"<<endl;
+        return false;
+    }
     checker+=node->QueryStringAttribute("color",&strcolor);
     if(checker != TIXML_SUCCESS)
     {
@@ -1338,13 +1344,9 @@ bool OpenDriveXmlParser::ReadObjectMarkingsMarking(Object_markings *pObject_Mark
         return false;
     }
 
-    pObject_Markings->AddMarking(strcolor,fspaceLength,flineLength,fstartOffset,fstopOffset);
+    pObject_Markings->AddMarking(strside,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)
     {

+ 1 - 1
src/common/modulecomm/shm/procsm_if.cpp

@@ -249,7 +249,7 @@ procsm_if::~procsm_if()
     {
 #ifdef USE_GROUPUDP
         mbGroupRecvRun = false;
-        mpthread->join();
+//        mpthread->join();
 #endif
 
         QTime xTime;

+ 1 - 1
src/common/modulecomm/shm/procsm_if.h

@@ -124,7 +124,7 @@ private:
     struct sockaddr_in listen_addr_;
     void ThreadGroupRecv();
     void InitSock();
-    std::thread * mpthread;
+//    std::thread * mpthread;
     bool mbGroupRecvRun = true;
 
     qint64 mKey;

+ 336 - 2
src/tool/map_lanetoxodr/dialogroadobject_marking.cpp

@@ -1,10 +1,15 @@
 #include "dialogroadobject_marking.h"
 #include "ui_dialogroadobject_marking.h"
 
+#include <iostream>
 
 static std::string gstr_e_markingsideType[] ={"left","right","front","rear"};
+static std::string gstr_e_markingweight[] ={"standard","bold"};
+static std::string gstr_e_markingcolor[] = {"standard","blue","green","red","white","yellow","orange"};
 
 static const int gmarkingsideTypeCount = 4;
+static const int gmarkingweightCount = 2;
+static const int gmarkingcolorcount = 7;
 
 
 DialogRoadObject_Marking::DialogRoadObject_Marking(Object * pObject,QWidget *parent) :
@@ -22,8 +27,24 @@ DialogRoadObject_Marking::DialogRoadObject_Marking(Object * pObject,QWidget *par
     {
         mpCBside->addItem(gstr_e_markingsideType[i].data());
     }
-    mpCBside->addItem("NO");
-    mpCBside->setCurrentIndex(gmarkingsideTypeCount);
+    mpCBside->setCurrentIndex(0);
+
+    for(i=0;i<gmarkingweightCount;i++)
+    {
+        mpCBweight->addItem(gstr_e_markingweight[i].data());
+    }
+    mpCBweight->addItem("NO");
+    mpCBweight->setCurrentIndex(gmarkingweightCount);
+
+    for(i=0;i<gmarkingcolorcount;i++)
+    {
+        mpCBcolor->addItem(gstr_e_markingcolor[i].data());
+    }
+    mpCBcolor->setCurrentIndex(0);
+
+    UpdateCB();
+
+    setWindowTitle("Edit Marking");
 
 
 }
@@ -87,24 +108,337 @@ void DialogRoadObject_Marking::CreateView()
     connect(mpPBDelete,SIGNAL(clicked(bool)),this,SLOT(onClickDelete()));
     connect(mpPBChange,SIGNAL(clicked(bool)),this,SLOT(onClickChange()));
 
+
 }
 
 void DialogRoadObject_Marking::CurrentMarking(int index)
 {
+    if(index == -1)return;
+    if(mpObject == 0)return;
+
+    Object * pObject = mpObject;
+
+    Object_markings * pmarkings = pObject->Getmarkings();
+
+    if(pmarkings == NULL)
+    {
+        return;
+    }
+
+    Object_markings_marking * pmarking = pmarkings->GetMarking(index);
+
+    if(pmarking == NULL)
+    {
+        std::cout<<" Object Marking "<<index<<" is NULL"<<std::endl;
+        return;
+    }
+
+    std::string strside,strweight,strcolor;
+    double fwidth,fzOffset,fspaceLength,flineLength,fstartOffset,fstopOffset;
+    bool bweight = false;
+    bool bwidth = false;
+    bool bzOffset = false;
+
+    pmarking->Getside(strside);
+    if(pmarking->Getweight(strweight) == 1)
+    {
+        bweight = true;
+    }
+    strcolor = pmarking->Getcolor();
+    if(pmarking->Getwidth(fwidth) == 1)
+    {
+        bwidth = true;
+    }
+    if(pmarking->GetzOffset(fzOffset) == 1)
+    {
+        bzOffset = true;
+    }
+    fspaceLength = pmarking->GetspaceLength();
+    flineLength = pmarking->GetlineLength();
+    fstartOffset = pmarking->GetstartOffset();
+    fstopOffset = pmarking->GetstopOffset();
+
+    int indexside =0;
+    int i;
+    for(i=0;i<gmarkingsideTypeCount;i++)
+    {
+        if(gstr_e_markingsideType[i] == strside)
+        {
+            indexside = i;
+            break;
+        }
+    }
+    int indexweight = gmarkingweightCount;
+    for(i=0;i<gmarkingweightCount;i++)
+    {
+        if(gstr_e_markingweight[i] == strweight)
+        {
+            indexweight = i;
+            break;
+        }
+    }
+    int indexcolor = 0;
+    for(i=0;i<gmarkingcolorcount;i++)
+    {
+        if(gstr_e_markingcolor[i] == strcolor)
+        {
+            indexcolor = i;
+            break;
+        }
+    }
+
+    mpCBside->setCurrentIndex(indexside);
+    if(bweight) mpCBweight->setCurrentIndex(indexweight);
+    else mpCBweight->setCurrentIndex(gmarkingweightCount);
+    mpCBcolor->setCurrentIndex(indexcolor);
+    if(bwidth) mpLEwidth->setText(QString::number(fwidth));
+    else mpLEwidth->setText("");
+    if(bzOffset) mpLEzOffset->setText(QString::number(fzOffset));
+    else mpLEzOffset->setText("");
+    mpLEspaceLength->setText(QString::number(fspaceLength));
+    mpLElineLength->setText(QString::number(flineLength));
+    mpLEstartOffset->setText(QString::number(fstartOffset));
+    mpLEstopOffset->setText(QString::number(fstopOffset));
+}
+
+void DialogRoadObject_Marking::UpdateCB()
+{
+    mpCBMarking->clear();
+    int i;
+    if(mpObject == 0)return;
+    Object * pObject = mpObject;
 
+    Object_markings * pmarkings = pObject->Getmarkings();
+    if(pmarkings == NULL)return;
+    int nMarkingCount = pmarkings->GetMarkingCount();
+
+    for(i=0;i<nMarkingCount;i++)
+    {
+        mpCBMarking->addItem(QString("Marking ")+ QString::number(i));
+    }
 }
 
 void DialogRoadObject_Marking::onClickAdd()
 {
+    if(mpObject == 0)
+    {
+        QMessageBox::warning(this,"Warning","Object is NULL.",QMessageBox::YesAll);
+        return;
+    }
+
+    Object * pObject = mpObject;
+
+    std::string strside,strweight,strcolor;
+    double fwidth,fzOffset,fspaceLength,flineLength,fstartOffset,fstopOffset;
+
+    bool bweight = false;
+    bool bwidth = false;
+    bool bzOffset = false;
+
+    strside = mpCBside->currentText().toStdString();
+
+    if(mpCBweight->currentIndex() != (unsigned int)gmarkingweightCount)
+    {
+        strweight = mpCBweight->currentText().toStdString();
+        bweight = true;
+    }
+
+    strcolor = mpCBcolor->currentText().toStdString();
+
+    if(ViewCreate::CheckLE(mpLEwidth,"width",false,this) == true)
+    {
+        fwidth = mpLEwidth->text().toDouble();
+        bwidth = true;
+    }
+
+    if(ViewCreate::CheckLE(mpLEzOffset,"zOffset",false,this) == true)
+    {
+        fzOffset = mpLEzOffset->text().toDouble();
+        bzOffset = true;
+    }
+
+    if(ViewCreate::CheckLE(mpLEspaceLength,"spaceLength",true,this) == true)
+    {
+        fspaceLength = mpLEspaceLength->text().toDouble();
+    }
+    else
+    {
+        return;
+    }
+
+    if(ViewCreate::CheckLE(mpLElineLength,"lineLength",true,this) == true)
+    {
+        flineLength = mpLElineLength->text().toDouble();
+    }
+    else
+    {
+        return;
+    }
+
+    if(ViewCreate::CheckLE(mpLEstartOffset,"startOffset",true,this) == true)
+    {
+        fstartOffset = mpLEstartOffset->text().toDouble();
+    }
+    else
+    {
+        return;
+    }
+
+    if(ViewCreate::CheckLE(mpLEstopOffset,"stopOffset",true,this) == true)
+    {
+        fstopOffset = mpLEstopOffset->text().toDouble();
+    }
+    else
+    {
+        return;
+    }
+
+    Object_markings * pmarkings = pObject->Getmarkings();
+
+    Object_markings_marking * pmarking;
+
+    if(pmarkings == NULL)
+    {
+        Object_markings xmarkings;
+        unsigned markindex =  xmarkings.AddMarking(strside,strcolor,fspaceLength,flineLength,fstartOffset,fstopOffset);
+        pmarking = xmarkings.GetMarking(markindex);
+        if(bweight)pmarking->Setweight(strweight);
+        if(bwidth)pmarking->Setwidth(fwidth);
+        if(bzOffset)pmarking->SetzOffset(fzOffset);
+        pObject->Setmarkings(xmarkings);
+    }
+    else
+    {
+        unsigned markindex =  pmarkings->AddMarking(strside,strcolor,fspaceLength,flineLength,fstartOffset,fstopOffset);
+        pmarking = pmarkings->GetMarking(markindex);
+        if(bweight)pmarking->Setweight(strweight);
+        if(bwidth)pmarking->Setwidth(fwidth);
+        if(bzOffset)pmarking->SetzOffset(fzOffset);
+    }
+
+    UpdateCB();
 
 }
 
 void DialogRoadObject_Marking::onClickDelete()
 {
+    Object * pObject = mpObject;
+
+    if(mpObject == 0)return;
 
+    Object_markings * pmarkings = pObject->Getmarkings();
+
+    if(pmarkings == NULL)
+    {
+        QMessageBox::warning(this,"Warning","No Marking",QMessageBox::YesAll);
+        return;
+    }
+
+    pmarkings->DeleteMarking(mpCBMarking->currentIndex());
+
+    if(pmarkings->GetMarkingCount() == 0)
+    {
+        pObject->Resetmarkings();
+    }
+
+    UpdateCB();
 }
 
 void DialogRoadObject_Marking::onClickChange()
 {
+    Object * pObject = mpObject;
+
+    if(mpObject == 0)return;
+
+    Object_markings * pmarkings = pObject->Getmarkings();
+
+    if(pmarkings == NULL)
+    {
+        QMessageBox::warning(this,"Warning","No Marking",QMessageBox::YesAll);
+        return;
+    }
+
+    Object_markings_marking * pmarking = pmarkings->GetMarking(mpCBMarking->currentIndex());
+
+    if(pmarking == NULL)
+    {
+        QMessageBox::warning(this,"Warning","Can't GetMarking.",QMessageBox::YesAll);
+    }
+
+    std::string strside,strweight,strcolor;
+    double fwidth,fzOffset,fspaceLength,flineLength,fstartOffset,fstopOffset;
+
+    bool bweight = false;
+    bool bwidth = false;
+    bool bzOffset = false;
+
+    strside = mpCBside->currentText().toStdString();
+
+    if(mpCBweight->currentIndex() != (unsigned int)gmarkingweightCount)
+    {
+        strweight = mpCBweight->currentText().toStdString();
+        bweight = true;
+    }
+
+    strcolor = mpCBcolor->currentText().toStdString();
+
+    if(ViewCreate::CheckLE(mpLEwidth,"width",false,this) == true)
+    {
+        fwidth = mpLEwidth->text().toDouble();
+        bwidth = true;
+    }
+
+    if(ViewCreate::CheckLE(mpLEzOffset,"zOffset",false,this) == true)
+    {
+        fzOffset = mpLEzOffset->text().toDouble();
+        bzOffset = true;
+    }
+
+    if(ViewCreate::CheckLE(mpLEspaceLength,"spaceLength",true,this) == true)
+    {
+        fspaceLength = mpLEspaceLength->text().toDouble();
+    }
+    else
+    {
+        return;
+    }
+
+    if(ViewCreate::CheckLE(mpLElineLength,"lineLength",true,this) == true)
+    {
+        flineLength = mpLElineLength->text().toDouble();
+    }
+    else
+    {
+        return;
+    }
+
+    if(ViewCreate::CheckLE(mpLEstartOffset,"startOffset",true,this) == true)
+    {
+        fstartOffset = mpLEstartOffset->text().toDouble();
+    }
+    else
+    {
+        return;
+    }
+
+    if(ViewCreate::CheckLE(mpLEstopOffset,"stopOffset",true,this) == true)
+    {
+        fstopOffset = mpLEstopOffset->text().toDouble();
+    }
+    else
+    {
+        return;
+    }
+
+    pmarking->Setside(strside);
+    pmarking->Setweight(strweight);
+    pmarking->Setwidth(fwidth);
+    pmarking->Setcolor(strcolor);
+    pmarking->SetzOffset(fzOffset);
+    pmarking->SetspaceLength(fspaceLength);
+    pmarking->SetlineLength(flineLength);
+    pmarking->SetstartOffset(fstartOffset);
+    pmarking->SetstopOffset(fstopOffset);
 
+    QMessageBox::information(this,"Info","Change marking successfully",QMessageBox::YesAll);
 }

+ 1 - 0
src/tool/map_lanetoxodr/dialogroadobject_marking.h

@@ -24,6 +24,7 @@ private:
 
 private:
     void CreateView();
+    void UpdateCB();
 
 private slots:
     void CurrentMarking(int index);

+ 1 - 1
src/tool/map_lanetoxodr/dialogroadobject_marking.ui

@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>861</width>
-    <height>533</height>
+    <height>404</height>
    </rect>
   </property>
   <property name="windowTitle">