diff --git a/selfdrive/ui/mici/onroad/model_renderer.py b/selfdrive/ui/mici/onroad/model_renderer.py index b15af9b32a..d461233215 100644 --- a/selfdrive/ui/mici/onroad/model_renderer.py +++ b/selfdrive/ui/mici/onroad/model_renderer.py @@ -154,7 +154,8 @@ class ModelRenderer(Widget, ModelRendererSP): self._draw_path(sm) if ui_state.radar_tracks and sm.valid['liveTracks'] and sm.recv_frame['liveTracks'] >= ui_state.started_frame: - self.radar_tracks.draw_radar_tracks(sm['liveTracks'], self._map_to_screen, self._path_offset_z, track_size=3) + self.radar_tracks.draw_radar_tracks(sm['liveTracks'], self._map_to_screen, self._path_offset_z, track_size=3, + screen_offset=(self._rect.x, self._rect.y)) # if render_lead_indicator and radar_state: # self._draw_lead_indicator() diff --git a/selfdrive/ui/sunnypilot/onroad/radar_tracks.py b/selfdrive/ui/sunnypilot/onroad/radar_tracks.py index 7bf31cbc53..c9ec87d476 100644 --- a/selfdrive/ui/sunnypilot/onroad/radar_tracks.py +++ b/selfdrive/ui/sunnypilot/onroad/radar_tracks.py @@ -42,7 +42,7 @@ def format_radar_tracks_onroad_columns(live_tracks) -> tuple[str, str]: class RadarTracks: - def draw_radar_tracks(self, live_tracks, map_to_screen, path_offset_z, track_size=6): + def draw_radar_tracks(self, live_tracks, map_to_screen, path_offset_z, track_size=6, screen_offset=(0, 0)): for track in live_tracks.points: d_rel, y_rel, v_rel, a_rel = track.dRel, track.yRel, track.vRel, track.aRel if not (math.isfinite(d_rel) and math.isfinite(y_rel) and math.isfinite(v_rel) and math.isfinite(a_rel)): @@ -52,5 +52,5 @@ class RadarTracks: if pt is None: continue - x, y = pt + x, y = pt[0] + screen_offset[0], pt[1] + screen_offset[1] rl.draw_circle(int(x), int(y), track_size, rl.Color(0, 255, 64, 255)) diff --git a/selfdrive/ui/sunnypilot/onroad/test_radar_tracks.py b/selfdrive/ui/sunnypilot/onroad/test_radar_tracks.py index 55c3513fda..9df8c2e352 100644 --- a/selfdrive/ui/sunnypilot/onroad/test_radar_tracks.py +++ b/selfdrive/ui/sunnypilot/onroad/test_radar_tracks.py @@ -1,5 +1,6 @@ from cereal import car +from openpilot.selfdrive.ui.sunnypilot.onroad import radar_tracks from openpilot.selfdrive.ui.sunnypilot.onroad.radar_tracks import format_radar_tracks_onroad_columns, format_radar_tracks_onroad_status, \ format_radar_tracks_status @@ -37,3 +38,24 @@ def test_format_radar_tracks_status_deduplicates_and_sorts_ranges(): "0x210-0x21F -\n0x500-0x51F -\n0x500-0x51F -", "1\n2\n3", ) + + +def test_draw_radar_tracks_applies_screen_offset(monkeypatch): + live_tracks = car.RadarData.new_message() + points = live_tracks.init("points", 1) + points[0].dRel = 10 + points[0].yRel = 1 + points[0].vRel = 2 + points[0].aRel = 0 + drawn_circles = [] + monkeypatch.setattr(radar_tracks.rl, "draw_circle", lambda x, y, size, color: drawn_circles.append((x, y, size))) + + radar_tracks.RadarTracks().draw_radar_tracks( + live_tracks, + lambda d_rel, y_rel, z: (20, 30), + path_offset_z=1.2, + track_size=3, + screen_offset=(100, 7), + ) + + assert drawn_circles == [(120, 37, 3)]