step 6: add stable overlays and live update stress tests
This commit is contained in:
66
examples/markers_live_thread.py
Normal file
66
examples/markers_live_thread.py
Normal file
@@ -0,0 +1,66 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from math import cos, sin
|
||||
from threading import Event, Thread
|
||||
from time import sleep
|
||||
from typing import Any
|
||||
|
||||
import dearpygui.dearpygui as _dpg
|
||||
|
||||
import dpg_map as dpgm
|
||||
|
||||
dpg: Any = _dpg
|
||||
|
||||
|
||||
def main() -> None:
|
||||
dpgm.configure(user_agent="dpg-map markers_live_thread example")
|
||||
stop = Event()
|
||||
|
||||
dpg.create_context()
|
||||
dpg.create_viewport(title="dpg-map live markers", width=1000, height=700)
|
||||
|
||||
with (
|
||||
dpg.window(label="Live Markers", width=-1, height=-1),
|
||||
dpgm.map_widget(
|
||||
tag="live-markers-map", center=(47.9029, 1.9093), zoom=15, width=-1, height=-1
|
||||
),
|
||||
):
|
||||
for index in range(12):
|
||||
dpgm.add_marker(
|
||||
f"vehicle-{index}",
|
||||
lat=47.9029,
|
||||
lon=1.9093,
|
||||
label=str(index + 1),
|
||||
show_label=True,
|
||||
color=(240, 92, 70, 255),
|
||||
)
|
||||
|
||||
def update_markers() -> None:
|
||||
tick = 0
|
||||
while not stop.is_set():
|
||||
for index in range(12):
|
||||
angle = tick * 0.08 + index * 0.52
|
||||
radius = 0.0015 + (index % 4) * 0.0002
|
||||
dpgm.update_marker(
|
||||
f"vehicle-{index}",
|
||||
lat=47.9029 + sin(angle) * radius,
|
||||
lon=1.9093 + cos(angle) * radius,
|
||||
map_tag="live-markers-map",
|
||||
)
|
||||
tick += 1
|
||||
sleep(1 / 30)
|
||||
|
||||
worker = Thread(target=update_markers, name="dpg-map-live-markers", daemon=True)
|
||||
worker.start()
|
||||
try:
|
||||
dpg.setup_dearpygui()
|
||||
dpg.show_viewport()
|
||||
dpg.start_dearpygui()
|
||||
finally:
|
||||
stop.set()
|
||||
worker.join(timeout=1.0)
|
||||
dpg.destroy_context()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
76
examples/trajectory_live_thread.py
Normal file
76
examples/trajectory_live_thread.py
Normal file
@@ -0,0 +1,76 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from collections import deque
|
||||
from math import cos, sin
|
||||
from threading import Event, Thread
|
||||
from time import sleep
|
||||
from typing import Any
|
||||
|
||||
import dearpygui.dearpygui as _dpg
|
||||
|
||||
import dpg_map as dpgm
|
||||
|
||||
dpg: Any = _dpg
|
||||
|
||||
|
||||
def main() -> None:
|
||||
dpgm.configure(user_agent="dpg-map trajectory_live_thread example")
|
||||
stop = Event()
|
||||
points: deque[tuple[float, float]] = deque(maxlen=240)
|
||||
|
||||
dpg.create_context()
|
||||
dpg.create_viewport(title="dpg-map live trajectory", width=1000, height=700)
|
||||
|
||||
with (
|
||||
dpg.window(label="Live Trajectory", width=-1, height=-1),
|
||||
dpgm.map_widget(
|
||||
tag="live-trajectory-map",
|
||||
center=(47.9029, 1.9093),
|
||||
zoom=15,
|
||||
width=-1,
|
||||
height=-1,
|
||||
),
|
||||
):
|
||||
dpgm.add_trajectory(
|
||||
"track",
|
||||
points=[],
|
||||
color=(250, 190, 80, 255),
|
||||
thickness=3.0,
|
||||
show_points=True,
|
||||
point_stride=12,
|
||||
)
|
||||
dpgm.add_marker(
|
||||
"head",
|
||||
lat=47.9029,
|
||||
lon=1.9093,
|
||||
color=(72, 205, 154, 255),
|
||||
radius=6,
|
||||
)
|
||||
|
||||
def update_trajectory() -> None:
|
||||
tick = 0
|
||||
while not stop.is_set():
|
||||
angle = tick * 0.06
|
||||
lat = 47.9029 + sin(angle) * 0.0016 + sin(angle * 2.7) * 0.00025
|
||||
lon = 1.9093 + cos(angle) * 0.0016
|
||||
points.append((lat, lon))
|
||||
snapshot = tuple(points)
|
||||
dpgm.update_trajectory("track", points=snapshot, map_tag="live-trajectory-map")
|
||||
dpgm.update_marker("head", lat=lat, lon=lon, map_tag="live-trajectory-map")
|
||||
tick += 1
|
||||
sleep(1 / 20)
|
||||
|
||||
worker = Thread(target=update_trajectory, name="dpg-map-live-trajectory", daemon=True)
|
||||
worker.start()
|
||||
try:
|
||||
dpg.setup_dearpygui()
|
||||
dpg.show_viewport()
|
||||
dpg.start_dearpygui()
|
||||
finally:
|
||||
stop.set()
|
||||
worker.join(timeout=1.0)
|
||||
dpg.destroy_context()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user