mirror of
https://github.com/sunnypilot/sunnypilot.git
synced 2026-07-15 06:42:05 +08:00
better count
This commit is contained in:
@@ -10,7 +10,7 @@ from openpilot.selfdrive.ui.mici.onroad.hud_renderer import HudRenderer
|
||||
from openpilot.selfdrive.ui.mici.onroad.model_renderer import ModelRenderer
|
||||
from openpilot.selfdrive.ui.mici.onroad.confidence_ball import ConfidenceBall
|
||||
from openpilot.selfdrive.ui.mici.onroad.cameraview import CameraView
|
||||
from openpilot.selfdrive.ui.sunnypilot.onroad.radar_tracks import format_radar_tracks_onroad_status
|
||||
from openpilot.selfdrive.ui.sunnypilot.onroad.radar_tracks import format_radar_tracks_onroad_columns
|
||||
from openpilot.system.ui.lib.application import FontWeight, gui_app, MousePos, MouseEvent
|
||||
from openpilot.system.ui.widgets.label import UnifiedLabel
|
||||
from openpilot.system.ui.widgets import Widget
|
||||
@@ -160,11 +160,16 @@ class AugmentedRoadView(CameraView):
|
||||
text_color=rl.Color(255, 255, 255, int(255 * 0.9)),
|
||||
alignment=rl.GuiTextAlignment.TEXT_ALIGN_CENTER,
|
||||
alignment_vertical=rl.GuiTextAlignmentVertical.TEXT_ALIGN_MIDDLE)
|
||||
self._radar_tracks_label = UnifiedLabel("none", 26, FontWeight.SEMI_BOLD,
|
||||
text_color=rl.Color(0, 255, 64, 255),
|
||||
alignment=rl.GuiTextAlignment.TEXT_ALIGN_RIGHT,
|
||||
alignment_vertical=rl.GuiTextAlignmentVertical.TEXT_ALIGN_TOP,
|
||||
wrap_text=False)
|
||||
radar_text_args = {
|
||||
"font_size": 26,
|
||||
"font_weight": FontWeight.SEMI_BOLD,
|
||||
"text_color": rl.Color(0, 255, 64, 255),
|
||||
"alignment": rl.GuiTextAlignment.TEXT_ALIGN_RIGHT,
|
||||
"alignment_vertical": rl.GuiTextAlignmentVertical.TEXT_ALIGN_TOP,
|
||||
"wrap_text": False,
|
||||
}
|
||||
self._radar_ranges_label = UnifiedLabel("", **radar_text_args)
|
||||
self._radar_counts_label = UnifiedLabel("none", **radar_text_args)
|
||||
|
||||
self._fade_texture = gui_app.texture("icons_mici/onroad/onroad_fade.png")
|
||||
|
||||
@@ -176,10 +181,12 @@ class AugmentedRoadView(CameraView):
|
||||
super()._update_state()
|
||||
|
||||
if ui_state.sm.updated["liveTracks"]:
|
||||
status = format_radar_tracks_onroad_status(ui_state.sm["liveTracks"]) if ui_state.sm.valid["liveTracks"] else "none"
|
||||
self._radar_tracks_label.set_text(status)
|
||||
status = format_radar_tracks_onroad_columns(ui_state.sm["liveTracks"]) if ui_state.sm.valid["liveTracks"] else ("", "none")
|
||||
self._radar_ranges_label.set_text(status[0])
|
||||
self._radar_counts_label.set_text(status[1])
|
||||
elif not ui_state.sm.alive["liveTracks"]:
|
||||
self._radar_tracks_label.set_text("none")
|
||||
self._radar_ranges_label.set_text("")
|
||||
self._radar_counts_label.set_text("none")
|
||||
|
||||
# update offroad label
|
||||
if ui_state.panda_type == log.PandaState.PandaType.unknown:
|
||||
@@ -234,7 +241,15 @@ class AugmentedRoadView(CameraView):
|
||||
|
||||
if ui_state.radar_tracks:
|
||||
radar_status_width = self._content_rect.width - 90
|
||||
radar_status_height = max(42, self._radar_tracks_label.get_content_height(int(radar_status_width - 16)) + 10)
|
||||
radar_status_inner_width = int(radar_status_width - 16)
|
||||
radar_count_width = 64
|
||||
radar_column_gap = 6
|
||||
radar_range_width = radar_status_inner_width - radar_count_width - radar_column_gap
|
||||
radar_status_height = max(
|
||||
42,
|
||||
self._radar_ranges_label.get_content_height(radar_range_width) + 10,
|
||||
self._radar_counts_label.get_content_height(radar_count_width) + 10,
|
||||
)
|
||||
radar_status_rect = rl.Rectangle(
|
||||
self._content_rect.x + 78,
|
||||
self._content_rect.y + 8,
|
||||
@@ -242,10 +257,16 @@ class AugmentedRoadView(CameraView):
|
||||
radar_status_height,
|
||||
)
|
||||
rl.draw_rectangle_rounded(radar_status_rect, 0.5, 8, rl.Color(0, 0, 0, 170))
|
||||
self._radar_tracks_label.render(rl.Rectangle(
|
||||
self._radar_ranges_label.render(rl.Rectangle(
|
||||
radar_status_rect.x + 8,
|
||||
radar_status_rect.y + 5,
|
||||
radar_status_rect.width - 16,
|
||||
radar_range_width,
|
||||
radar_status_rect.height - 10,
|
||||
))
|
||||
self._radar_counts_label.render(rl.Rectangle(
|
||||
radar_status_rect.x + 8 + radar_range_width + radar_column_gap,
|
||||
radar_status_rect.y + 5,
|
||||
radar_count_width,
|
||||
radar_status_rect.height - 10,
|
||||
))
|
||||
|
||||
|
||||
@@ -24,11 +24,21 @@ def format_radar_tracks_status(live_tracks) -> str:
|
||||
|
||||
|
||||
def format_radar_tracks_onroad_status(live_tracks) -> str:
|
||||
range_text, count_text = format_radar_tracks_onroad_columns(live_tracks)
|
||||
if not range_text:
|
||||
return count_text
|
||||
|
||||
return "\n".join(f"{radar_range} {track_count}" for radar_range, track_count in zip(range_text.splitlines(), count_text.splitlines(), strict=True))
|
||||
|
||||
|
||||
def format_radar_tracks_onroad_columns(live_tracks) -> tuple[str, str]:
|
||||
sources = sorted(live_tracks.trackSources, key=lambda source: (source.startAddress, source.endAddress, source.bus))
|
||||
if not sources:
|
||||
return "none"
|
||||
return "", "none"
|
||||
|
||||
return "\n".join(f"0x{source.startAddress:X}-0x{source.endAddress:X} - {source.trackCount}" for source in sources)
|
||||
range_text = "\n".join(f"0x{source.startAddress:X}-0x{source.endAddress:X} -" for source in sources)
|
||||
count_text = "\n".join(str(source.trackCount) for source in sources)
|
||||
return range_text, count_text
|
||||
|
||||
|
||||
class RadarTracks:
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
from cereal import car
|
||||
|
||||
from openpilot.selfdrive.ui.sunnypilot.onroad.radar_tracks import format_radar_tracks_onroad_status, format_radar_tracks_status
|
||||
from openpilot.selfdrive.ui.sunnypilot.onroad.radar_tracks import format_radar_tracks_onroad_columns, format_radar_tracks_onroad_status, \
|
||||
format_radar_tracks_status
|
||||
|
||||
|
||||
def test_format_radar_tracks_status_none():
|
||||
@@ -8,6 +9,7 @@ def test_format_radar_tracks_status_none():
|
||||
|
||||
assert format_radar_tracks_status(live_tracks) == "none"
|
||||
assert format_radar_tracks_onroad_status(live_tracks) == "none"
|
||||
assert format_radar_tracks_onroad_columns(live_tracks) == ("", "none")
|
||||
|
||||
|
||||
def test_format_radar_tracks_status_range_and_count():
|
||||
@@ -17,6 +19,7 @@ def test_format_radar_tracks_status_range_and_count():
|
||||
|
||||
assert format_radar_tracks_status(live_tracks) == "0x500-0x51F · 2 tracks"
|
||||
assert format_radar_tracks_onroad_status(live_tracks) == "0x500-0x51F - 2"
|
||||
assert format_radar_tracks_onroad_columns(live_tracks) == ("0x500-0x51F -", "2")
|
||||
|
||||
|
||||
def test_format_radar_tracks_status_deduplicates_and_sorts_ranges():
|
||||
@@ -30,3 +33,7 @@ def test_format_radar_tracks_status_deduplicates_and_sorts_ranges():
|
||||
|
||||
assert format_radar_tracks_status(live_tracks) == "0x210-0x21F, 0x500-0x51F · 1 track"
|
||||
assert format_radar_tracks_onroad_status(live_tracks) == "0x210-0x21F - 1\n0x500-0x51F - 2\n0x500-0x51F - 3"
|
||||
assert format_radar_tracks_onroad_columns(live_tracks) == (
|
||||
"0x210-0x21F -\n0x500-0x51F -\n0x500-0x51F -",
|
||||
"1\n2\n3",
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user