Draws all the roads, including lane markings, arrows and traffic signs
(self, map_surface, carla_world, carla_map, world_to_pixel, world_to_pixel_width)
| 501 | self.surface = self.big_map_surface |
| 502 | |
| 503 | def draw_road_map(self, map_surface, carla_world, carla_map, world_to_pixel, world_to_pixel_width): |
| 504 | """Draws all the roads, including lane markings, arrows and traffic signs""" |
| 505 | map_surface.fill(COLOR_ALUMINIUM_4) |
| 506 | precision = 0.05 |
| 507 | |
| 508 | def lane_marking_color_to_tango(lane_marking_color): |
| 509 | """Maps the lane marking color enum specified in PythonAPI to a Tango Color""" |
| 510 | tango_color = COLOR_BLACK |
| 511 | |
| 512 | if lane_marking_color == carla.LaneMarkingColor.White: |
| 513 | tango_color = COLOR_ALUMINIUM_2 |
| 514 | |
| 515 | elif lane_marking_color == carla.LaneMarkingColor.Blue: |
| 516 | tango_color = COLOR_SKY_BLUE_0 |
| 517 | |
| 518 | elif lane_marking_color == carla.LaneMarkingColor.Green: |
| 519 | tango_color = COLOR_CHAMELEON_0 |
| 520 | |
| 521 | elif lane_marking_color == carla.LaneMarkingColor.Red: |
| 522 | tango_color = COLOR_SCARLET_RED_0 |
| 523 | |
| 524 | elif lane_marking_color == carla.LaneMarkingColor.Yellow: |
| 525 | tango_color = COLOR_ORANGE_0 |
| 526 | |
| 527 | return tango_color |
| 528 | |
| 529 | def draw_solid_line(surface, color, closed, points, width): |
| 530 | """Draws solid lines in a surface given a set of points, width and color""" |
| 531 | if len(points) >= 2: |
| 532 | pygame.draw.lines(surface, color, closed, points, width) |
| 533 | |
| 534 | def draw_broken_line(surface, color, closed, points, width): |
| 535 | """Draws broken lines in a surface given a set of points, width and color""" |
| 536 | # Select which lines are going to be rendered from the set of lines |
| 537 | broken_lines = [x for n, x in enumerate(zip(*(iter(points),) * 20)) if n % 3 == 0] |
| 538 | |
| 539 | # Draw selected lines |
| 540 | for line in broken_lines: |
| 541 | pygame.draw.lines(surface, color, closed, line, width) |
| 542 | |
| 543 | def get_lane_markings(lane_marking_type, lane_marking_color, waypoints, sign): |
| 544 | """For multiple lane marking types (SolidSolid, BrokenSolid, SolidBroken and BrokenBroken), it converts them |
| 545 | as a combination of Broken and Solid lines""" |
| 546 | margin = 0.25 |
| 547 | marking_1 = [world_to_pixel(lateral_shift(w.transform, sign * w.lane_width * 0.5)) for w in waypoints] |
| 548 | if lane_marking_type == carla.LaneMarkingType.Broken or (lane_marking_type == carla.LaneMarkingType.Solid): |
| 549 | return [(lane_marking_type, lane_marking_color, marking_1)] |
| 550 | else: |
| 551 | marking_2 = [world_to_pixel(lateral_shift(w.transform, |
| 552 | sign * (w.lane_width * 0.5 + margin * 2))) for w in waypoints] |
| 553 | if lane_marking_type == carla.LaneMarkingType.SolidBroken: |
| 554 | return [(carla.LaneMarkingType.Broken, lane_marking_color, marking_1), |
| 555 | (carla.LaneMarkingType.Solid, lane_marking_color, marking_2)] |
| 556 | elif lane_marking_type == carla.LaneMarkingType.BrokenSolid: |
| 557 | return [(carla.LaneMarkingType.Solid, lane_marking_color, marking_1), |
| 558 | (carla.LaneMarkingType.Broken, lane_marking_color, marking_2)] |
| 559 | elif lane_marking_type == carla.LaneMarkingType.BrokenBroken: |
| 560 | return [(carla.LaneMarkingType.Broken, lane_marking_color, marking_1), |
no test coverage detected