Update GUI 2.1.0: logs history tab, drone panel attitude, linear twist overview
This commit is contained in:
+27
-14
@@ -3,6 +3,11 @@ from PyQt6.QtWebEngineWidgets import QWebEngineView
|
||||
from PyQt6.QtCore import QTimer, pyqtSignal, QObject, pyqtSlot
|
||||
from PyQt6.QtWebChannel import QWebChannel
|
||||
|
||||
|
||||
def _log(level, message):
|
||||
print(f"[{level}] {message}")
|
||||
|
||||
|
||||
class DroneMap:
|
||||
"""無人機地圖類別 - 負責管理 Leaflet 地圖顯示"""
|
||||
|
||||
@@ -874,7 +879,7 @@ class DroneMap:
|
||||
if ok:
|
||||
self.map_loaded = True
|
||||
else:
|
||||
print("⚠️ 地圖加載失敗")
|
||||
_log("ERROR", "地圖載入失敗")
|
||||
|
||||
def update_drone_position(self, drone_id, lat, lon, heading):
|
||||
"""更新無人機位置(加入待處理隊列)"""
|
||||
@@ -924,20 +929,24 @@ class DroneMap:
|
||||
f"{target_lat:.6f}, {target_lon:.6f});"
|
||||
)
|
||||
self.map_view.page().runJavaScript(js_code)
|
||||
print(f"📍 地圖已繪製 Group {group_id} 任務規劃: "
|
||||
f"C({center_lat:.6f}, {center_lon:.6f}) -> T({target_lat:.6f}, {target_lon:.6f})")
|
||||
_log(
|
||||
"INFO",
|
||||
f"地圖已繪製 Group {group_id} 任務規劃: "
|
||||
f"C({center_lat:.6f}, {center_lon:.6f}) -> "
|
||||
f"T({target_lat:.6f}, {target_lon:.6f})",
|
||||
)
|
||||
|
||||
def clear_mission_plan(self):
|
||||
"""清除地圖上所有任務規劃標記"""
|
||||
if self.map_loaded:
|
||||
self.map_view.page().runJavaScript("clearAllMissionPlans();")
|
||||
print("🗑️ 地圖已清除所有任務規劃")
|
||||
_log("INFO", "地圖已清除所有任務規劃")
|
||||
|
||||
def clear_mission_plan_for_group(self, group_id):
|
||||
"""清除指定群組的任務規劃標記"""
|
||||
if self.map_loaded:
|
||||
self.map_view.page().runJavaScript(f"clearMissionPlanForGroup('{group_id}');")
|
||||
print(f"🗑️ 地圖已清除 Group {group_id} 任務規劃")
|
||||
_log("INFO", f"地圖已清除 Group {group_id} 任務規劃")
|
||||
|
||||
def set_mission_mode(self, mode):
|
||||
"""從 Python 端切換地圖的任務模式(觸發框選/路徑標記等)"""
|
||||
@@ -1033,52 +1042,56 @@ class MapBridge(QObject):
|
||||
def clearAllDroneSelection(self):
|
||||
"""供 JavaScript 調用的方法 - 清除所有無人機選擇"""
|
||||
self.clear_all_drone_selection.emit()
|
||||
print("🗑️ 清除所有無人機選擇")
|
||||
_log("INFO", "已清除所有無人機選擇")
|
||||
|
||||
@pyqtSlot()
|
||||
def toggleSelectAllDrones(self):
|
||||
"""供 JavaScript 調用的方法 - 切換全選/取消全選所有無人機"""
|
||||
self.select_all_drones.emit()
|
||||
print("🔄 切換全選無人機")
|
||||
_log("INFO", "已切換全選無人機")
|
||||
|
||||
@pyqtSlot(float, float, float, float)
|
||||
def startMissionSignal(self, center_lat, center_lon, target_lat, target_lon):
|
||||
"""供 JavaScript 調用的方法 - 開始任務"""
|
||||
self.start_mission_signal.emit(center_lat, center_lon, target_lat, target_lon)
|
||||
print(f"🚀 開始任務信號已發出: C({center_lat}, {center_lon}) -> T({target_lat}, {target_lon})")
|
||||
_log(
|
||||
"INFO",
|
||||
f"已發出開始任務信號: "
|
||||
f"C({center_lat}, {center_lon}) -> T({target_lat}, {target_lon})",
|
||||
)
|
||||
|
||||
@pyqtSlot()
|
||||
def pauseMissionSignal(self):
|
||||
"""供 JavaScript 調用的方法 - 暫停任務"""
|
||||
self.pause_mission_signal.emit()
|
||||
print("⏸️ 暫停任務信號已發出")
|
||||
_log("INFO", "已發出暫停任務信號")
|
||||
|
||||
@pyqtSlot(str)
|
||||
def rectangleSelected(self, points_json):
|
||||
"""供 JavaScript 調用的方法 - 矩形選擇完成"""
|
||||
self.rectangle_selected.emit(points_json)
|
||||
print(f"📦 矩形區域已選擇: {points_json}")
|
||||
_log("INFO", f"矩形區域已選擇: {points_json}")
|
||||
|
||||
@pyqtSlot(str)
|
||||
def polygonSelected(self, points_json):
|
||||
"""供 JavaScript 調用的方法 - 多邊形選擇完成"""
|
||||
self.polygon_selected.emit(points_json)
|
||||
print(f"🔷 多邊形區域已選擇: {points_json}")
|
||||
_log("INFO", f"多邊形區域已選擇: {points_json}")
|
||||
|
||||
@pyqtSlot(str)
|
||||
def missionModeChanged(self, mode):
|
||||
"""供 JavaScript 調用的方法 - 任務模式切換"""
|
||||
self.mission_mode_changed.emit(mode)
|
||||
print(f"🔄 任務模式切換: {mode}")
|
||||
_log("INFO", f"任務模式已切換: {mode}")
|
||||
|
||||
@pyqtSlot(str)
|
||||
def routeConfirmed(self, points_json):
|
||||
"""供 JavaScript 調用的方法 - 路徑確認"""
|
||||
self.route_confirmed.emit(points_json)
|
||||
print(f"📍 路徑已確認: {points_json}")
|
||||
_log("INFO", f"路徑已確認: {points_json}")
|
||||
|
||||
@pyqtSlot(str)
|
||||
def droneBoxSelected(self, drone_ids_json):
|
||||
"""供 JavaScript 調用的方法 - 框選無人機完成"""
|
||||
self.drone_box_selected.emit(drone_ids_json)
|
||||
print(f"📦 框選無人機: {drone_ids_json}")
|
||||
_log("INFO", f"框選無人機完成: {drone_ids_json}")
|
||||
|
||||
Reference in New Issue
Block a user