|
@@ -71,5 +71,66 @@ int CreateExtendRoad::CreateBeforeRoad(OpenDrive *pxodr, Road *pRoad, double fLe
|
|
|
}
|
|
|
|
|
|
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+int CreateExtendRoad::CreateAfterRoad(OpenDrive *pxodr, Road *pRoad, double fLength)
|
|
|
+{
|
|
|
+ std::string strroadid = pRoad->GetRoadId();
|
|
|
+ double x,y,hdg;
|
|
|
+ pRoad->GetGeometryCoords(pRoad->GetRoadLength() - 0.00001,x,y,hdg);
|
|
|
+
|
|
|
+ double xnew,ynew,hdgnew;
|
|
|
+ xnew = x ;
|
|
|
+ ynew = y ;
|
|
|
+ hdgnew = hdg;
|
|
|
+
|
|
|
+ int nroadid = gw->CreateRoadID();
|
|
|
+ pxodr->AddRoad("",fLength,QString::number(nroadid).toStdString(),"-1");
|
|
|
+
|
|
|
+ int i;
|
|
|
+
|
|
|
+ for(i=0;i<(int)pxodr->GetRoadCount();i++)
|
|
|
+ {
|
|
|
+ if(pxodr->GetRoad(i)->GetRoadId() == strroadid)
|
|
|
+ {
|
|
|
+ pRoad = pxodr->GetRoad(i);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ Road * pnewroad = pxodr->GetLastAddedRoad();
|
|
|
+
|
|
|
+ pnewroad->AddGeometryBlock();
|
|
|
+ GeometryBlock * pgeob = pnewroad->GetLastAddedGeometryBlock();
|
|
|
+ pgeob->AddGeometryLine(0,xnew,ynew,hdgnew,fLength);
|
|
|
+
|
|
|
+ if(pRoad->GetLaneOffsetCount()>0)
|
|
|
+ {
|
|
|
+ pnewroad->AddLaneOffset(0,pRoad->GetLaneOffsetValue(pRoad->GetRoadLength()-0.00001),0,0,0);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ if(pRoad->GetLaneSectionCount()>0)
|
|
|
+ {
|
|
|
+ LaneSection * pLS = pRoad->GetLaneSection(pRoad->GetLaneSectionCount()-1);
|
|
|
+ pnewroad->AddLaneSection(0);
|
|
|
+ LaneSection * pLSnew = pnewroad->GetLastAddedLaneSection();
|
|
|
+ for(i=0;i<(int)pLS->GetLaneCount();i++)
|
|
|
+ {
|
|
|
+ Lane * pLane = pLS->GetLane(i);
|
|
|
+ pLSnew->AddLane(pLane->GetSide(),pLane->GetId(),pLane->GetType(),pLane->GetLevel());
|
|
|
+ Lane * pnewlane = pLSnew->GetLastAddedLane();
|
|
|
+ pnewlane->AddWidthRecord(0,pLane->GetWidthValue(pRoad->GetRoadLength()-0.00001),0,0,0);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if(pRoad->GetElevationCount()>0)
|
|
|
+ {
|
|
|
+ pRoad->AddElevation(0,pRoad->GetElevationValue(pRoad->GetRoadLength() - 0.00001),0,0,0);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
return 0;
|
|
|
}
|