Ver código fonte

change map_lanetoxodr.

yuchuli 3 anos atrás
pai
commit
ddca5b8c48

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

@@ -81,6 +81,8 @@ DialogAddRoadFromCDA::~DialogAddRoadFromCDA()
 
 void DialogAddRoadFromCDA::on_pushButton_Create_clicked()
 {
+    OpenDrive * pxodr = mpxodr;
+    CDAProc::ProcCDA(mcdadraw,pxodr);
 //    OpenDrive * pxodr = mpxodr;
 //    std::string strtype = ui->comboBox_Type->currentText().toStdString();
 //    std::string strradius = ui->lineEdit_radius->text().toStdString();

+ 65 - 0
src/tool/map_lanetoxodr/function/cdaproc.cpp

@@ -436,3 +436,68 @@ int CDAProc::ProcRoads(std::string strxlsxpath,std::string stroutpath)
     ServiceExcelAPI.Closexlsx(pexcel);
     return nr;
 }
+
+int CDAProc::ProcCDA(iv::map::cdadraw & xcdadraw,OpenDrive * pxodr)
+{
+    if(xcdadraw.mgeos_size() == 0)
+    {
+        std::cout<<" no geo. "<<std::endl;
+        return -1;
+    }
+    int i;
+    double xnow,ynow,hdgnow;
+    xnow = 0;
+    ynow = 0;
+    hdgnow = 0;
+    int nroadid = 0;
+    for(i=0;i<xcdadraw.mgeos_size();i++)
+    {
+        iv::map::cdageo * pgeo = xcdadraw.mutable_mgeos(i);
+        if(pgeo->geotype() == 0)
+        {
+            nroadid++;
+            char strroadid[256];
+            snprintf(strroadid,256,"%d",nroadid);
+            pxodr->AddRoad("zl",pgeo->geolen(),strroadid,"-1");
+            Road * pRoad = pxodr->GetLastAddedRoad();
+            pRoad->AddGeometryBlock();
+            GeometryBlock * pgeob = pRoad->GetLastAddedGeometryBlock();
+            pgeob->AddGeometryLine(0,xnow,ynow,hdgnow,pgeo->geolen());
+            pRoad->GetGeometryCoords(pgeo->geolen()-0.001,xnow,ynow,hdgnow);
+        }
+        if(pgeo->geotype() == 1)
+        {
+            nroadid++;
+            char strroadid[256];
+            snprintf(strroadid,256,"%d",nroadid);
+            pxodr->AddRoad("wd",pgeo->geolen(),strroadid,"-1");
+            Road * pRoad = pxodr->GetLastAddedRoad();
+            pRoad->AddGeometryBlock();
+            GeometryBlock * pgeob = pRoad->GetLastAddedGeometryBlock();
+            pgeob->AddGeometryArc(0,xnow,ynow,hdgnow,pgeo->geolen(),1.0/pgeo->georadius());
+            pRoad->GetGeometryCoords(pgeo->geolen()-0.001,xnow,ynow,hdgnow);
+        }
+
+    }
+
+    for(i=0;i<pxodr->GetRoadCount();i++)
+    {
+        Road * pRoad = pxodr->GetRoad(i);
+        pRoad->AddLaneSection(0);
+        LaneSection * pLS = pRoad->GetLaneSection(0);
+        pLS->AddLane(0,0,"none",false);
+        Lane * pcenterlane = pLS->GetLastAddedLane();
+        pcenterlane->AddRoadMarkRecord(0,"solid","standard","yellow",0.15,"none");
+
+        int i;
+        for(i=0;i<2;i++)
+        {
+            pLS->AddLane(-1,(i+1)*(-1),"driving",false,true);
+            Lane * pnewlane = pLS->GetLastAddedLane();
+            pnewlane->AddWidthRecord(0,3.5,0,0,0);
+
+                pnewlane->AddRoadMarkRecord(0,"solid","standard","standard",0.15,"none");
+        }
+    }
+    return 0;
+}

+ 3 - 1
src/tool/map_lanetoxodr/function/cdaproc.h

@@ -7,7 +7,7 @@
 
 #include <OpenDrive/OpenDrive.h>
 
-
+#include "cdadraw.pb.h"
 
 
 //namespace iv
@@ -69,6 +69,8 @@ public:
         std::string strlannecount,std::string strlanetype,std::string strlanemarkcolor,std::string strlanemarktype);
     static int ProcIntersectionRoad(OpenDrive * pxodr,  std::string strtype,std::string strradius,std::string strroadlen,std::string strlanewidth,
         std::string strlannecount,std::string strlanetype,std::string strlanemarkcolor,std::string strlanemarktype);
+
+    static int ProcCDA(iv::map::cdadraw & xcdadraw,OpenDrive * pxodr);
 };
 
 #endif // CDAPROC_H