99from junctionart .junctions .StraightRoadBuilder import StraightRoadBuilder
1010from junctionart .extensions .CountryCodes import CountryCodes
1111from junctionart .junctions .ODRHelper import ODRHelper
12+ from junctionart .junctions .ConnectionBuilder import ConnectionBuilder
1213from junctionart .junctions .RoadLinker import RoadLinker
1314import pyodrx
1415import 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 = [], []
0 commit comments