From 8838cca9b498a010f5ab347bc8a964335c8ba59d Mon Sep 17 00:00:00 2001 From: Randy Mackay Date: Fri, 27 Sep 2024 17:33:59 +0900 Subject: [PATCH] picviewer: settings fov wip --- MAVProxy/tools/mavpicviewer/mosaic_window.py | 15 ++++++++++++--- .../tools/mavpicviewer/picviewer_settings.py | 8 +++++++- MAVProxy/tools/mavpicviewer/picviewer_window.py | 16 +++++++++++++++- 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/MAVProxy/tools/mavpicviewer/mosaic_window.py b/MAVProxy/tools/mavpicviewer/mosaic_window.py index ca05fd3d5f..2e07334f22 100644 --- a/MAVProxy/tools/mavpicviewer/mosaic_window.py +++ b/MAVProxy/tools/mavpicviewer/mosaic_window.py @@ -21,10 +21,11 @@ class mosaic_window: """displays a mosaic of images""" - def __init__(self, filelist, image_select_cb): + def __init__(self, filelist, image_select_cb, image_fov_changed_cb): - # keep reference to callback + # keep reference to callbacks self.image_select_cb = image_select_cb + self.image_fov_changed_cb = image_fov_changed_cb # determine if filelist is a string or a list of strings self.filenumber = 0 @@ -49,7 +50,7 @@ def __init__(self, filelist, image_select_cb): self.update_title() # add settings window - self.picviewer_settings = picviewer_settings() + self.picviewer_settings = picviewer_settings(self.settings_changed_cb) # add menu self.menu = wx.Menu() @@ -333,3 +334,11 @@ def hide_image(self, filenumber): panel = self.scrolled_panel_sizer.GetItem(self.filenumber).GetWindow() self.scrolled_panel_sizer.Detach(panel) self.scrolled_panel_sizer.Layout() + + # handle settings changes callback + # this is called by the settings window when a setting is changed + def settings_changed_cb(self, name, value): + """handle settings changes callback""" + print(f"settings_changed: {name} {value}") + if name == "FOV": + self.image_fov_changed_cb(float(value)) diff --git a/MAVProxy/tools/mavpicviewer/picviewer_settings.py b/MAVProxy/tools/mavpicviewer/picviewer_settings.py index 81a15b75b3..9125c47dba 100644 --- a/MAVProxy/tools/mavpicviewer/picviewer_settings.py +++ b/MAVProxy/tools/mavpicviewer/picviewer_settings.py @@ -16,7 +16,7 @@ class picviewer_settings: """window to capture picviewer settings""" - def __init__(self): + def __init__(self, settings_changed_cb): # add settings window self.settings_frame = wx.Frame(None, title="Settings", size=(300, 50)) @@ -28,15 +28,21 @@ def __init__(self): self.settings_frame.Bind(wx.EVT_TEXT_ENTER, self.settings_set_button_click, self.settings_fov_input) self.settings_frame.Bind(wx.EVT_CLOSE, self.settings_close_button_click) + # record callback function + self.settings_changed_cb = settings_changed_cb + # show settings window def show_settings_window(self, event): """show settings window""" self.settings_frame.Show() + print("show_settings_window") + # need to call picviewer_window.set_fov # settings window event handlers def settings_set_button_click(self, event): """settings window event handlers""" print("settings_set_button_click") + self.settings_changed_cb("FOV", self.settings_fov_input.GetValue()) self.settings_frame.Hide() # close/hide settings window diff --git a/MAVProxy/tools/mavpicviewer/picviewer_window.py b/MAVProxy/tools/mavpicviewer/picviewer_window.py index ec41a758c2..e1f1f3a0a7 100644 --- a/MAVProxy/tools/mavpicviewer/picviewer_window.py +++ b/MAVProxy/tools/mavpicviewer/picviewer_window.py @@ -71,7 +71,7 @@ def __init__(self, filelist): self.update_map() # create mosaic of images - self.mosaic = mosaic_window.mosaic_window(self.filelist, self.mosaic_image_select_cb) + self.mosaic = mosaic_window.mosaic_window(self.filelist, self.mosaic_image_select_cb, self.mosaic_image_fov_cb) # create menu self.menu = None @@ -109,6 +109,10 @@ def mosaic_image_select_cb(self, filenumber): self.update_image() self.update_map() + # image FOV change callback + def mosaic_image_fov_cb(self, fov_deg): + self.set_fov(fov_deg) + # set window title def set_title(self, title): """set image title""" @@ -116,6 +120,16 @@ def set_title(self, title): return self.im.set_title(title) + # set FOV + def set_fov(self, fov_deg): + """set image title""" + if self.cam1_params is None: + print("picviewer: failed to set FOV because camera params not set") + return + print("picviewer_window: setting FOV to %f" % fov_deg) + self.cam1_params.FOV = fov_deg + self.update_map() + # process window events def check_events(self): """check for image events"""