Skip to content

Commit d160aa9

Browse files
committed
Connection Road Code Written
1 parent 39604d6 commit d160aa9

File tree

5 files changed

+1974
-9
lines changed

5 files changed

+1974
-9
lines changed

junctionart/roundabout/ClassicGenerator.py

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from junctionart.junctions.StraightRoadBuilder import StraightRoadBuilder
1010
from junctionart.extensions.CountryCodes import CountryCodes
1111
from junctionart.junctions.ODRHelper import ODRHelper
12+
from junctionart.junctions.ConnectionBuilder import ConnectionBuilder
1213
from junctionart.junctions.RoadLinker import RoadLinker
1314
import pyodrx
1415
import junctionart.extensions as extensions
@@ -28,7 +29,7 @@ def __init__(self, country=CountryCodes.US, laneWidth=3) -> None:
2829
self.laneWidth = laneWidth
2930
self.straightRoadBuilder = StraightRoadBuilder()
3031
self.roadBuilder = RoadBuilder()
31-
32+
self.connectionBuilder = ConnectionBuilder()
3233

3334

3435
def generateWithIncidentPointConfiguration(self, ipConfig: List[Dict], firstRoadId=0, maxLanePerSide=2, minLanePerSide=0, skipEndpoint=None, odrId=0,):
@@ -78,6 +79,11 @@ def generateWithIncidentPointConfiguration(self, ipConfig: List[Dict], firstRoad
7879
# 3.2 work out nearest circle segment from straightRoads/incidentPoints
7980
closestCircularRoadIdForIncidentPoints = self.getClosestCircularRoadIdForIncidentPoints(incidentPoints, circularRoadStartPoints)
8081
# 3.3 make parampolies between straightRoads with respective circle segment(start and end)
82+
links = self.getLaneConfigForConnectionRoads(closestCircularRoadIdForIncidentPoints, straightRoads, circularRoads)
83+
roadDic = self.getRoadDic(straightRoads, circularRoads)
84+
connectionRoads = self.getConnectionRoads(firstStraightRoadId, roadDic, links)
85+
86+
8187
leftParamPolyConnectionRoads, rightParamPolyConnectionRoads, leftClosestCircularRoads, rightClosestCircularRoads, outsideRoads = self.getParamPolyConnectionRoads(closestCircularRoadIdForIncidentPoints, straightRoads, circularRoads, firstStraightRoadId)
8288
# 3.4 join parampolies with staightRoad and circle segment
8389
roads = []
@@ -159,6 +165,35 @@ def createSuccPredRelationBetweenRoads(self, straightRoads, leftParamPolyConnect
159165

160166

161167
return roads
168+
def getLaneConfigForConnectionRoads(self, closestCircularRoadIdForIncidentPoints, straightRoads, circularRoads):
169+
links = []
170+
nStraightRoads = len(straightRoads)
171+
for i in range(nStraightRoads):
172+
closestCiruclarRoadId = closestCircularRoadIdForIncidentPoints[i]
173+
straightRoad = straightRoads[i]
174+
leftCircularRoad = circularRoads[closestCiruclarRoadId - 1]
175+
rightCircularRoad = circularRoads[0] if(closestCiruclarRoadId + 1 == len(circularRoads)) else circularRoads[closestCiruclarRoadId + 1]
176+
incomingRoadId1 = str(leftCircularRoad.id) + ":" + str(-1)
177+
outgoingRoadId1 = str(straightRoad.id) + ":" + str(-1)
178+
outgoingRoadId2 = str(straightRoad.id) + ":" + str(1)
179+
incomingRoadId2 = str(rightCircularRoad.id) + ":" + str(1)
180+
link1 = (incomingRoadId1, outgoingRoadId1)
181+
link2 = (incomingRoadId2, outgoingRoadId2)
182+
print(link1, link2)
183+
links.append(link1)
184+
links.append(link2)
185+
186+
return links
187+
188+
def getRoadDic(self, straightRoads, circularRoads):
189+
roadDic = {road.id : road for road in straightRoads}
190+
for road in circularRoads:
191+
roadDic[road.id] = road
192+
return roadDic
193+
194+
def getConnectionRoads(self, startRoadId, roadDic, laneConfig):
195+
connectionRoads = self.connectionBuilder.createRoadsForLinkConfig(startRoadId, roadDic, 0, null, pyodrx.ContactPoint.start, linkConfig)
196+
return connectionRoads
162197

163198
def getParamPolyConnectionRoads(self, closestCiruclarRoadIdForIncidentPoints, straightRoads, circularRoads, roadId):
164199
leftParamPolyConnectionRoads, rightParamPolyConnectionRoads = [], []

log.txt

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,44 @@ esmini GIT BRANCH: tags/v2.0.9^0
44
esmini BUILD VERSION: 2.0.9.build.1017
55
RoadManager.cpp / 4284 / roadmanager::OpenDrive::SetRoadOSI(): Generating OSI lanes
66
RoadManager.cpp / 4286 / roadmanager::OpenDrive::SetRoadOSI(): Generating OSI road marks
7-
RoadManager.cpp / 5584 / roadmanager::Position::SetRoadMarkPos(): Truncate road mark s pos (40.01) to road length (40.00)
8-
RoadManager.cpp / 5584 / roadmanager::Position::SetRoadMarkPos(): Truncate road mark s pos (40.01) to road length (40.00)
9-
RoadManager.cpp / 5584 / roadmanager::Position::SetRoadMarkPos(): Truncate road mark s pos (40.01) to road length (40.00)
7+
RoadManager.cpp / 5584 / roadmanager::Position::SetRoadMarkPos(): Truncate road mark s pos (23.01) to road length (23.01)
8+
RoadManager.cpp / 5584 / roadmanager::Position::SetRoadMarkPos(): Truncate road mark s pos (23.01) to road length (23.01)
9+
RoadManager.cpp / 5584 / roadmanager::Position::SetRoadMarkPos(): Truncate road mark s pos (23.01) to road length (23.01)
10+
RoadManager.cpp / 5584 / roadmanager::Position::SetRoadMarkPos(): Truncate road mark s pos (23.01) to road length (23.01)
11+
RoadManager.cpp / 5584 / roadmanager::Position::SetRoadMarkPos(): Truncate road mark s pos (23.01) to road length (23.01)
12+
RoadManager.cpp / 5584 / roadmanager::Position::SetRoadMarkPos(): Truncate road mark s pos (23.01) to road length (23.01)
13+
RoadManager.cpp / 5584 / roadmanager::Position::SetRoadMarkPos(): Truncate road mark s pos (23.01) to road length (23.01)
14+
RoadManager.cpp / 5584 / roadmanager::Position::SetRoadMarkPos(): Truncate road mark s pos (23.01) to road length (23.01)
15+
RoadManager.cpp / 5584 / roadmanager::Position::SetRoadMarkPos(): Truncate road mark s pos (23.01) to road length (23.01)
16+
RoadManager.cpp / 5584 / roadmanager::Position::SetRoadMarkPos(): Truncate road mark s pos (23.01) to road length (23.01)
17+
RoadManager.cpp / 5584 / roadmanager::Position::SetRoadMarkPos(): Truncate road mark s pos (23.01) to road length (23.01)
18+
RoadManager.cpp / 5584 / roadmanager::Position::SetRoadMarkPos(): Truncate road mark s pos (23.01) to road length (23.01)
19+
RoadManager.cpp / 5584 / roadmanager::Position::SetRoadMarkPos(): Truncate road mark s pos (23.01) to road length (23.01)
20+
RoadManager.cpp / 5584 / roadmanager::Position::SetRoadMarkPos(): Truncate road mark s pos (23.01) to road length (23.01)
21+
RoadManager.cpp / 5584 / roadmanager::Position::SetRoadMarkPos(): Truncate road mark s pos (23.01) to road length (23.01)
22+
RoadManager.cpp / 5584 / roadmanager::Position::SetRoadMarkPos(): Truncate road mark s pos (23.01) to road length (23.01)
23+
RoadManager.cpp / 5584 / roadmanager::Position::SetRoadMarkPos(): Truncate road mark s pos (23.01) to road length (23.01)
24+
RoadManager.cpp / 5584 / roadmanager::Position::SetRoadMarkPos(): Truncate road mark s pos (23.01) to road length (23.01)
25+
RoadManager.cpp / 5584 / roadmanager::Position::SetRoadMarkPos(): Truncate road mark s pos (23.01) to road length (23.01)
26+
RoadManager.cpp / 5584 / roadmanager::Position::SetRoadMarkPos(): Truncate road mark s pos (23.01) to road length (23.01)
27+
RoadManager.cpp / 5584 / roadmanager::Position::SetRoadMarkPos(): Truncate road mark s pos (23.01) to road length (23.01)
28+
RoadManager.cpp / 5584 / roadmanager::Position::SetRoadMarkPos(): Truncate road mark s pos (23.01) to road length (23.01)
29+
RoadManager.cpp / 5584 / roadmanager::Position::SetRoadMarkPos(): Truncate road mark s pos (23.01) to road length (23.01)
30+
RoadManager.cpp / 5584 / roadmanager::Position::SetRoadMarkPos(): Truncate road mark s pos (23.01) to road length (23.01)
31+
RoadManager.cpp / 5584 / roadmanager::Position::SetRoadMarkPos(): Truncate road mark s pos (23.01) to road length (23.01)
32+
RoadManager.cpp / 5584 / roadmanager::Position::SetRoadMarkPos(): Truncate road mark s pos (23.01) to road length (23.01)
33+
RoadManager.cpp / 5584 / roadmanager::Position::SetRoadMarkPos(): Truncate road mark s pos (23.01) to road length (23.01)
34+
RoadManager.cpp / 5584 / roadmanager::Position::SetRoadMarkPos(): Truncate road mark s pos (23.01) to road length (23.01)
35+
RoadManager.cpp / 5584 / roadmanager::Position::SetRoadMarkPos(): Truncate road mark s pos (23.01) to road length (23.01)
36+
RoadManager.cpp / 5584 / roadmanager::Position::SetRoadMarkPos(): Truncate road mark s pos (23.01) to road length (23.01)
37+
RoadManager.cpp / 5584 / roadmanager::Position::SetRoadMarkPos(): Truncate road mark s pos (23.01) to road length (23.01)
38+
RoadManager.cpp / 5584 / roadmanager::Position::SetRoadMarkPos(): Truncate road mark s pos (23.01) to road length (23.01)
39+
RoadManager.cpp / 5584 / roadmanager::Position::SetRoadMarkPos(): Truncate road mark s pos (23.01) to road length (23.01)
40+
RoadManager.cpp / 5584 / roadmanager::Position::SetRoadMarkPos(): Truncate road mark s pos (23.01) to road length (23.01)
41+
RoadManager.cpp / 5584 / roadmanager::Position::SetRoadMarkPos(): Truncate road mark s pos (23.01) to road length (23.01)
42+
RoadManager.cpp / 5584 / roadmanager::Position::SetRoadMarkPos(): Truncate road mark s pos (23.01) to road length (23.01)
43+
RoadManager.cpp / 5584 / roadmanager::Position::SetRoadMarkPos(): Truncate road mark s pos (23.01) to road length (23.01)
44+
RoadManager.cpp / 5584 / roadmanager::Position::SetRoadMarkPos(): Truncate road mark s pos (23.01) to road length (23.01)
45+
RoadManager.cpp / 5584 / roadmanager::Position::SetRoadMarkPos(): Truncate road mark s pos (23.01) to road length (23.01)
1046
RoadManager.cpp / 4288 / roadmanager::OpenDrive::SetRoadOSI(): Generating OSI lane boundaries
1147
RoadManager.cpp / 4290 / roadmanager::OpenDrive::SetRoadOSI(): OSI road features done

tests/test_ClassicGenerator.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ def test_createRoundAboutFromIncidentPoints(self):
3838
threePoints = [
3939
{"x": 80, "y": 20, "heading": math.radians(0)},
4040
{"x": 210, "y": 20, "heading": math.radians(135)},
41-
{"x": 100, "y": 100, "heading": math.radians(270)},
42-
{"x": 160, "y": -30, "heading": math.radians(90)},
41+
{"x": 100, "y": 100, "heading": math.radians(370)},
42+
{"x": 160, "y": -50, "heading": math.radians(90)},
4343
]
4444
odr = self.builder.generateWithIncidentPointConfiguration(
4545
ipConfig=threePoints

tests/test_ConnectionBuilder.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@
66
import pyodrx as pyodrx
77
import junctionart.extensions as extensions
88
from junctionart.junctions.JunctionBuilder import JunctionBuilder
9+
from junctionart.extensions.CountryCodes import CountryCodes
910
from junctionart.library.Configuration import Configuration
10-
import junctionart.junctions
11+
from junctionart.junctions.RoadBuilder import RoadBuilder
1112

1213
from junctionart.junctions.Direction import CircularDirection
1314
from junctionart.junctions.RoadLinker import RoadLinker
@@ -22,7 +23,7 @@ def setUp(self):
2223

2324
self.configuration = Configuration()
2425
self.esminipath = self.configuration.get("esminipath")
25-
self.roadBuilder = junctions.RoadBuilder()
26+
self.roadBuilder = RoadBuilder()
2627

2728
self.straightRoadBuilder = StraightRoadBuilder()
2829
self.roadLinker = RoadLinker()
@@ -43,7 +44,7 @@ def test_createSingleLaneConnectionRoad(self):
4344
RoadLinker.createExtendedPredSuc(predRoad=roads[1], predCp=pyodrx.ContactPoint.end, sucRoad=roads[2], sucCP=pyodrx.ContactPoint.start)
4445

4546
odrName = "test_createSingleLaneConnectionRoad"
46-
odr = extensions.createOdrByPredecessor(odrName, roads, [])
47+
odr = extensions.createOdrByPredecessor(odrName, roads, [], CountryCodes.US)
4748

4849
# extensions.view_road(odr, os.path.join('..', self.configuration.get("esminipath")))
4950

0 commit comments

Comments
 (0)