67 lines
1.7 KiB
Python
67 lines
1.7 KiB
Python
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()
|