@@ -19,6 +19,9 @@ package io.rtron.readerwriter.opendrive.reader.mapper.opendrive16
19
19
import arrow.core.None
20
20
import arrow.core.Option
21
21
import arrow.core.some
22
+ import io.github.oshai.kotlinlogging.KotlinLogging
23
+ import io.rtron.model.opendrive.lane.EAccessRestrictionType
24
+ import io.rtron.model.opendrive.lane.ELaneType
22
25
import io.rtron.model.opendrive.lane.ERoadLanesLaneSectionLCRLaneRoadMarkLaneChange
23
26
import io.rtron.model.opendrive.lane.ERoadMarkColor
24
27
import io.rtron.model.opendrive.lane.ERoadMarkRule
@@ -33,13 +36,16 @@ import io.rtron.model.opendrive.lane.RoadLanesLaneSectionLCRLaneRoadMark
33
36
import io.rtron.model.opendrive.lane.RoadLanesLaneSectionLCRLaneRoadMarkExplicit
34
37
import io.rtron.model.opendrive.lane.RoadLanesLaneSectionLCRLaneRoadMarkType
35
38
import io.rtron.model.opendrive.lane.RoadLanesLaneSectionLCRLaneRoadMarkTypeLine
39
+ import io.rtron.model.opendrive.lane.RoadLanesLaneSectionLRLaneAccessRestriction
36
40
import io.rtron.model.opendrive.lane.RoadLanesLaneSectionLRLaneBorder
37
41
import io.rtron.model.opendrive.lane.RoadLanesLaneSectionLRLaneWidth
38
42
import io.rtron.model.opendrive.lane.RoadLanesLaneSectionLeft
39
43
import io.rtron.model.opendrive.lane.RoadLanesLaneSectionLeftLane
40
44
import io.rtron.model.opendrive.lane.RoadLanesLaneSectionRight
41
45
import io.rtron.model.opendrive.lane.RoadLanesLaneSectionRightLane
42
46
import io.rtron.readerwriter.opendrive.reader.mapper.common.OpendriveCommonMapper
47
+ import org.asam.opendrive16.E_AccessRestrictionType
48
+ import org.asam.opendrive16.E_LaneType
43
49
import org.asam.opendrive16.E_RoadMarkColor
44
50
import org.asam.opendrive16.E_RoadMarkRule
45
51
import org.asam.opendrive16.E_RoadMarkType
@@ -73,6 +79,8 @@ import org.mapstruct.ValueMapping
73
79
imports = [Option ::class ],
74
80
)
75
81
abstract class Opendrive16LaneMapper {
82
+ private val logger = KotlinLogging .logger {}
83
+
76
84
abstract fun mapRoadLanes (sources : T_Road_Lanes ): RoadLanes
77
85
78
86
//
@@ -89,23 +97,17 @@ abstract class Opendrive16LaneMapper {
89
97
90
98
abstract fun mapRoadLanesLaneSectionRight (source : T_Road_Lanes_LaneSection_Right ): RoadLanesLaneSectionRight
91
99
92
- abstract fun mapRoadLanesLaneSectionCenterLane (source : T_Road_Lanes_LaneSection_Center_Lane ): RoadLanesLaneSectionCenterLane
100
+ fun mapRoadLanesLaneSectionCenterLane (source : List <T_Road_Lanes_LaneSection_Center_Lane >): RoadLanesLaneSectionCenterLane {
101
+ // TODO: reporting
102
+ if (source.size != 1 ) {
103
+ logger.info { " Center lane must have exactly one lane." }
104
+ }
93
105
94
- @AfterMapping
95
- open fun afterMappingRoadLanesLaneSectionCenterLane (
96
- source : T_Road_Lanes_LaneSection_Center_Lane ,
97
- @MappingTarget target : RoadLanesLaneSectionCenterLane ,
98
- ) {
99
- target.border =
100
- source.borderOrWidth
101
- .filterIsInstance(T_Road_Lanes_LaneSection_Lr_Lane_Border ::class .java)
102
- .map { mapLrLaneBorder(it) }
103
- target.width =
104
- source.borderOrWidth
105
- .filterIsInstance(T_Road_Lanes_LaneSection_Lr_Lane_Width ::class .java)
106
- .map { mapLrLaneWidth(it) }
106
+ return mapRoadLanesLaneSectionCenterLane(source.first())
107
107
}
108
108
109
+ abstract fun mapRoadLanesLaneSectionCenterLane (source : T_Road_Lanes_LaneSection_Center_Lane ): RoadLanesLaneSectionCenterLane
110
+
109
111
abstract fun mapRoadLanesLaneSectionLeftLane (source : T_Road_Lanes_LaneSection_Left_Lane ): RoadLanesLaneSectionLeftLane
110
112
111
113
@AfterMapping
@@ -167,6 +169,17 @@ abstract class Opendrive16LaneMapper {
167
169
source : T_Road_Lanes_LaneSection_Lcr_Lane_RoadMark_Explicit ,
168
170
): RoadLanesLaneSectionLCRLaneRoadMarkExplicit
169
171
172
+ //
173
+ // Access
174
+ //
175
+ fun mapLaneAccessRestrictionTypeToList (source : E_AccessRestrictionType ): List <RoadLanesLaneSectionLRLaneAccessRestriction > =
176
+ listOf (mapLaneAccessRestrictionTypeToClass(source))
177
+
178
+ fun mapLaneAccessRestrictionTypeToClass (source : E_AccessRestrictionType ): RoadLanesLaneSectionLRLaneAccessRestriction =
179
+ RoadLanesLaneSectionLRLaneAccessRestriction (type = mapLaneAccessRestrictionType(source))
180
+
181
+ abstract fun mapLaneAccessRestrictionType (source : E_AccessRestrictionType ): EAccessRestrictionType
182
+
170
183
//
171
184
// Enumerations
172
185
//
@@ -178,6 +191,10 @@ abstract class Opendrive16LaneMapper {
178
191
T_Bool .FALSE -> false
179
192
}
180
193
194
+ fun mapLaneTypeToOption (source : E_LaneType ? ): Option <ELaneType > = source?.let { mapLaneType(it).some() } ? : None
195
+
196
+ abstract fun mapLaneType (source : E_LaneType ): ELaneType
197
+
181
198
fun mapERoadMarkColorToOption (source : E_RoadMarkColor ? ): Option <ERoadMarkColor > = source?.let { mapRoadMarkColor(it).some() } ? : None
182
199
183
200
abstract fun mapRoadMarkColor (source : E_RoadMarkColor ): ERoadMarkColor
0 commit comments