Pārlūkot izejas kodu

change tool/map_lanetoxodr. add in scene mode, show selcted road's geometry.

yuchuli 3 gadi atpakaļ
vecāks
revīzija
cb6aaa03a5

+ 74 - 0
src/tool/map_lanetoxodr/mainwindow.cpp

@@ -1329,6 +1329,13 @@ void MainWindow::onClickXY(double x, double y)
     mpLE_SelLon->setText(QString::number(lon,'f',7));
     mpLE_SelLat->setText(QString::number(lat,'f',7));
     update();
+
+    if(mpCBViewMode->currentIndex() == 1)
+    {
+        UpdateScene_SelectRoadRefGeo();
+    }
+
+
 }
 
 void MainWindow::ComboToString(std::string strroadid,QComboBox * pCB)
@@ -5475,7 +5482,14 @@ void MainWindow::UpdateScene()
         mpscene->removeItem(mvectorviewitem.at(i));
         delete mvectorviewitem.at(i);
     }
+    nsize = mvectorgeoitem.size();
+    for(i=0;i<nsize;i++)
+    {
+        mpscene->removeItem(mvectorgeoitem.at(i));
+        delete mvectorgeoitem.at(i);
+    }
     mvectorviewitem.clear();
+    mvectorgeoitem.clear();
 
     nsize = mxodr.GetRoadCount();
 
@@ -5493,6 +5507,7 @@ void MainWindow::UpdateScene()
         {
             continue;
         }
+
         std::vector<QGraphicsPathItem *> xvectorlanepath = xodrscenfunc::GetRoadLaneItem(&(xvectorrd[i]));
         int j;
         int ncount = xvectorlanepath.size();
@@ -5503,6 +5518,7 @@ void MainWindow::UpdateScene()
             mpscene->addItem(pitem);
             mvectorviewitem.push_back(pitem);
         }
+
     }
 
     for(i=0;i<nsize;i++)
@@ -5559,10 +5575,53 @@ void MainWindow::UpdateScene()
             mvectorviewitem.push_back(pitem);
         }
     }
+    UpdateScene_SelectRoadRefGeo();
     mbRefresh = false;
 //    mpscene->addLine(0,0,1000,100);
 }
 
+void MainWindow::UpdateScene_SelectRoadRefGeo()
+{
+
+    int i;
+    int nsize;
+    nsize = mvectorgeoitem.size();
+    for(i=0;i<nsize;i++)
+    {
+        mpscene->removeItem(mvectorgeoitem.at(i));
+        delete mvectorgeoitem.at(i);
+    }
+    mvectorgeoitem.clear();
+
+    if(mbHideSelected)return;
+
+    int selid = mpCBRoad->currentText().toInt();
+    nsize = mxodr.GetRoadCount();
+    for(i=0;i<nsize;i++)
+    {
+        if(IsHidenRoad(atoi(mxodr.GetRoad(i)->GetRoadId().data())))
+        {
+            continue;
+        }
+
+
+        if(selid == atoi(mxodr.GetRoad(i)->GetRoadId().data()))
+        {
+            RoadDigit xrd(mxodr.GetRoad(i),5.0);
+            std::vector<QGraphicsPathItem *> xvectorlanepath = xodrscenfunc::GetRoadRefGeoItem(&(xrd));
+            int j;
+            int ncount = xvectorlanepath.size();
+            for(j=0;j<ncount;j++)
+            {
+                QGraphicsPathItem * pitem = xvectorlanepath[j];
+                pitem->setPos(mfViewMoveX +VIEW_WIDTH/2,-mfViewMoveY+VIEW_HEIGHT/2);
+                mpscene->addItem(pitem);
+                mvectorgeoitem.push_back(pitem);
+            }
+        }
+    }
+}
+
 
 void MainWindow::onViewModeChange(int index)
 {
@@ -5693,3 +5752,18 @@ bool MainWindow::IsHidenRoad(int nroadid)
     }
     return bIsHiden;
 }
+
+void MainWindow::on_actionHide_Selected_triggered()
+{
+    if(mbHideSelected)
+    {
+        mbHideSelected = false;
+        ui->actionHide_Selected->setText("Hide Selected");
+    }
+    else
+    {
+        mbHideSelected = true;
+        ui->actionHide_Selected->setText("Show Selected");
+    }
+    UpdateScene_SelectRoadRefGeo();
+}

+ 6 - 0
src/tool/map_lanetoxodr/mainwindow.h

@@ -212,6 +212,8 @@ private slots:
 
     void on_actionHide_Road_triggered();
 
+    void on_actionHide_Selected_triggered();
+
 private:
 
 
@@ -424,8 +426,10 @@ private:
     int mnViewMode = 0; //Use Scene
 
     void UpdateScene();
+    void UpdateScene_SelectRoadRefGeo();
 
     std::vector<QGraphicsPathItem *> mvectorviewitem;
+    std::vector<QGraphicsPathItem *> mvectorgeoitem;
 
     std::vector<OpenDrive> mvectorxodrback;
 
@@ -437,6 +441,8 @@ private:
 
     std::vector<int> mvectorhideroadid;
 
+    bool mbHideSelected = false;
+
 
 };
 

+ 6 - 0
src/tool/map_lanetoxodr/mainwindow.ui

@@ -61,6 +61,7 @@
      <string>View</string>
     </property>
     <addaction name="actionHide_Road"/>
+    <addaction name="actionHide_Selected"/>
    </widget>
    <widget class="QMenu" name="menuHelp">
     <property name="title">
@@ -164,6 +165,11 @@
     <string>Road Optimize</string>
    </property>
   </action>
+  <action name="actionHide_Selected">
+   <property name="text">
+    <string>Hide Selected</string>
+   </property>
+  </action>
  </widget>
  <layoutdefault spacing="6" margin="11"/>
  <resources>

+ 68 - 0
src/tool/map_lanetoxodr/xodrscenfunc.cpp

@@ -91,6 +91,74 @@ std::vector<QGraphicsPathItem *> xodrscenfunc::GetRoadParkingItem(RoadDigit *prd
     return xvectorgrapath;
 }
 
+std::vector<QGraphicsPathItem *> xodrscenfunc::GetRoadRefGeoItem(RoadDigit *prd)
+{
+    std::vector<QGraphicsPathItem *> xvectorgrapath;
+    std::vector<iv::RoadDigitUnit> * pvectorrdu =  prd->GetRDU();
+    int nsize = pvectorrdu->size();
+    int i;
+    double fgeowidth = 0.3;
+    double fmarklen = 3.0;
+    for(i=0;i<(nsize-1);i++)
+    {
+        QPainterPath xpath;
+        double fx1,fx2,fx3,fx4,fy1,fy2,fy3,fy4;
+
+        fx1 = pvectorrdu->at(i).mX + 0.5*fgeowidth * cos(pvectorrdu->at(i).mfHdg - M_PI/2.0);
+        fy1 = (pvectorrdu->at(i).mY + 0.5* fgeowidth * sin(pvectorrdu->at(i).mfHdg - M_PI/2.0))*(-1.0);
+        fx2 = pvectorrdu->at(i+1).mX+ 0.5*fgeowidth * cos(pvectorrdu->at(i+1).mfHdg - M_PI/2.0);
+        fy2 = (pvectorrdu->at(i+1).mY +0.5*fgeowidth * sin(pvectorrdu->at(i+1).mfHdg - M_PI/2.0))*(-1.0);
+        fx3 = pvectorrdu->at(i+1).mX + 0.5*fgeowidth * cos(pvectorrdu->at(i+1).mfHdg + M_PI/2.0);
+        fy3 = (pvectorrdu->at(i+1).mY+0.5*fgeowidth * sin(pvectorrdu->at(i+1).mfHdg + M_PI/2.0))*(-1.0);
+        fx4 = pvectorrdu->at(i).mX+ 0.5*fgeowidth * cos(pvectorrdu->at(i).mfHdg + M_PI/2.0);
+        fy4 = (pvectorrdu->at(i).mY+0.5*fgeowidth * sin(pvectorrdu->at(i).mfHdg + M_PI/2.0))*(-1.0);
+        xpath.moveTo(fx1,fy1);
+        xpath.lineTo(fx2,fy2);
+        xpath.lineTo(fx3,fy3);
+        xpath.lineTo(fx4,fy4);
+        xpath.closeSubpath();
+
+        QGraphicsPathItem * pitem = new QGraphicsPathItem;
+        pitem->setPath(xpath);
+        QColor brushcolor = Qt::red;
+
+        pitem->setBrush(brushcolor);
+        pitem->setPen(QPen(brushcolor,0.001));
+        xvectorgrapath.push_back(pitem);
+    }
+
+    if(nsize>0)
+    {
+        QPainterPath xpath;
+        double fx1,fx2,fx3,fx4,fy1,fy2,fy3,fy4;
+        fx1 = pvectorrdu->at(0).mX + 0.5*fmarklen * cos(pvectorrdu->at(0).mfHdg - M_PI/2.0);
+        fy1 = (pvectorrdu->at(0).mY + 0.5* fmarklen * sin(pvectorrdu->at(0).mfHdg - M_PI/2.0))*(-1.0);
+        fx2 = pvectorrdu->at(0).mX+ 0.5*fmarklen * cos(pvectorrdu->at(0).mfHdg + M_PI/2.0);
+        fy2 = (pvectorrdu->at(0).mY+0.5*fmarklen * sin(pvectorrdu->at(0).mfHdg + M_PI/2.0))*(-1.0);
+//        fx3 = pvectorrdu->at(0).mX+ 0.65*fmarklen * cos(pvectorrdu->at(0).mfHdg );
+//        fy3 = (pvectorrdu->at(0).mY+0.65*fmarklen * sin(pvectorrdu->at(0).mfHdg ))*(-1.0);
+        fx3 = fx2+ 0.1*fmarklen * cos(pvectorrdu->at(0).mfHdg);
+        fy3 = (fy2*(-1.0)+0.1*fmarklen * sin(pvectorrdu->at(0).mfHdg ))*(-1.0);
+        fx4 = fx1+ 0.1*fmarklen * cos(pvectorrdu->at(0).mfHdg );
+        fy4 = (fy1*(-1.0)+0.1*fmarklen * sin(pvectorrdu->at(0).mfHdg ))*(-1.0);
+        xpath.moveTo(fx1,fy1);
+        xpath.lineTo(fx2,fy2);
+        xpath.lineTo(fx3,fy3);
+        xpath.lineTo(fx4,fy4);
+        xpath.closeSubpath();
+
+        QGraphicsPathItem * pitem = new QGraphicsPathItem;
+        pitem->setPath(xpath);
+        QColor brushcolor = Qt::green;
+
+        pitem->setBrush(brushcolor);
+        pitem->setPen(QPen(brushcolor,0.001));
+        xvectorgrapath.push_back(pitem);
+    }
+
+    return xvectorgrapath;
+}
+
 std::vector<QGraphicsPathItem *> xodrscenfunc::GetRoadLaneItem(RoadDigit *prd)
 {
     std::vector<QGraphicsPathItem *> xvectorgrapath;

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

@@ -16,6 +16,7 @@ public:
     xodrscenfunc();
 
 public:
+    static std::vector<QGraphicsPathItem *> GetRoadRefGeoItem(RoadDigit * prd);
     static std::vector<QGraphicsPathItem *> GetRoadLaneItem(RoadDigit * prd);
     static std::vector<QGraphicsPathItem *> GetRoadMarkItem(RoadDigit * prd);
     static std::vector<QGraphicsPathItem *> GetRoadParkingItem(RoadDigit * prd,std::vector<QGraphicsTextItem *> & xvectortext,