Source code for models.model_moildev

"""
This ModelMoildev module appears to be a part of an application responsible for managing connections to Moildev
and handling image resolution options
"""


[docs] class ModelMoildev: """ A class responsible for managing the Moildev connections and image resolution options. Attributes: _model (object): The main model instance of the application. _main_config (dict): The main configuration dictionary of the application. _moildev_main (object): The main Moildev connection object. _moildev_pano_rec (object): The Moildev connection object for panorama reconstruction. _moildev_recenter (object): The Moildev connection object for recentering. _ratio_image_resize (list): List of predefined ratios for image resizing. _resolution_option (list): List of available image resolution options. _current_resolution_index (int): Index of the currently selected resolution option. Methods: create_moildev: Creates a connection to Moildev based on the configuration view. calculate_resolution_option: Calculates the image resolution options based on predefined ratios. """ def __init__(self, model): self._model = model self._main_config = self._model.main_config self._moildev_main = None self._moildev_pano_rec = None self._moildev_recenter = None self._ratio_image_resize = [1, 0.9, 0.8, 0.75, 0.6, 0.5, 0.4] self._resolution_option = [] self._current_resolution_index = 0 @property def moildev_main(self): """ Get the main Moildev instance. Returns: Moildev: The main Moildev instance. """ try: return self._moildev_main except Exception as e: self._model.activity_logger.error(f"ModelMoildev.moildev_main(): Error: {str(e)}") @property def moildev_pano_rt(self): """ Get the panorama rectification Moildev instance. Returns: Moildev: The panorama rectification Moildev instance. """ try: return self._moildev_pano_rec except Exception as e: self._model.activity_logger.error(f"ModelMoildev.moildev_pano_rt(): Error: {str(e)}") @property def moildev_recenter(self): """ Get the recenter Moildev instance. Returns: Moildev: The recenter Moildev instance. """ try: return self._moildev_recenter except Exception as e: self._model.activity_logger.error(f"ModelMoildev.moildev_recenter(): Error: {str(e)}") @property def resolution_option(self): """ Get the resolution options available. Return: list: The list of resolution options. """ try: return self._resolution_option except Exception as e: self._model.activity_logger.error(f"ModelMoildev.resolution_option(): Error: {str(e)}") @property def current_resolution_index(self): """ Get the current resolution index. Return: int: The current resolution index. """ try: return self._current_resolution_index except Exception as e: self._model.activity_logger.error(f"ModelMoildev.current_resolution_index(): Error: {str(e)}") @current_resolution_index.setter def current_resolution_index(self, value): """ Set the current resolution index. Arg: value (int): The index to set as the current resolution. """ try: self._current_resolution_index = value except Exception as e: self._model.activity_logger.error(f"ModelMoildev.current_resolution_index(): Error: {str(e)}")
[docs] def create_moildev(self, resize_image_resolution=False): """ Creates a connection to Moildev based on the main configuration. This function checks if there is a `Parameter_name` in `self._main_config`. If it exists, this function initializes the moildev objects using the method `self._model.connect_to_moildev` with the appropriate parameters. If `resize_image_resolution` is set to `True`, the image resolution will be adjusted using `virtual_param_ratio`. The function also sets several main configuration attributes such as `center_coord`, `Recenter_coordinate`, `pointer`, `width`, and `height` based on the values obtained from the moildev object. Args: resize_image_resolution (bool): Flag to determine whether to resize the image resolution. Returns: None """ try: if self._model.debug_mode: self._model.activity_logger.info("ModelMoildev: create_moildev(), " "Create moildev object with 'parameter_name'") try: parameter_name = self._main_config["Parameter_name"] if parameter_name is not None: if resize_image_resolution: self._moildev_main = self._model.connect_to_moildev( parameter_name=parameter_name, parameters_database=None, virtual_param_ratio=self._ratio_image_resize[self.current_resolution_index] ) self._moildev_pano_rec = self._model.connect_to_moildev( parameter_name=parameter_name, parameters_database=None, virtual_param_ratio=self._ratio_image_resize[self.current_resolution_index] ) self._moildev_recenter = self._model.connect_to_moildev( parameter_name=parameter_name, parameters_database=None, virtual_param_ratio=self._ratio_image_resize[self.current_resolution_index] ) else: self._moildev_main = self._model.connect_to_moildev(parameter_name=parameter_name) self._moildev_pano_rec = self._model.connect_to_moildev(parameter_name=parameter_name) self._moildev_recenter = self._model.connect_to_moildev(parameter_name=parameter_name) self.calculate_resolution_option() self._main_config["Image_original"]["center_coord"] = [self._moildev_main.icx, self._moildev_main.icy] self._main_config["Image_recenter"]["Recenter_coordinate"] = [self._moildev_main.icx, self._moildev_main.icy] self._main_config["Image_original"]["pointer"] = [None, None] self._main_config["Image_original"]["width"] = self._moildev_main.image_width self._main_config["Image_original"]["height"] = self._moildev_main.image_height if None in self._main_config["Mode_1"]["coord"] or resize_image_resolution: self._main_config["Mode_1"]["coord"] = [self._moildev_main.icx, self._moildev_main.icy] if None in self._main_config["Mode_2"]["coord"] or resize_image_resolution: self._main_config["Mode_2"]["coord"] = [self._moildev_main.icx, self._moildev_main.icy] if None in self._main_config["Pano_car"]["coord"] or resize_image_resolution: self._main_config["Pano_car"]["coord"] = [self._moildev_main.icx, self._moildev_main.icy] self._model.save_main_config_update() except KeyError as e: if self._model.debug_mode: self._model.activity_logger.error(f"Missing key in configuration: {e}") except AttributeError as e: if self._model.debug_mode: self._model.activity_logger.error(f"Attribute error: {e}") except TypeError as e: if self._model.debug_mode: self._model.activity_logger.error(f"Type error: {e}") except Exception as e: # Catching any other unexpected exceptions if self._model.debug_mode: self._model.activity_logger.error(f"Unexpected error: {e}") self._resolution_option = [] h, w, _ = self._model.image_original.shape self._resolution_option.append((w, h)) self._moildev_main = None self._moildev_pano_rec = None self._moildev_recenter = None except Exception as e: self._model.activity_logger.error(f"ModelMoildev.create_moildev(): Error: {str(e)}")
[docs] def calculate_resolution_option(self): """ Calculates the image resolution options based on predefined ratios. This method calculates the image resolution options by multiplying the main image width and height with predefined ratios. The resulting resolutions are stored in the `_resolution_option` attribute. This can be useful for providing users with various resolution choices for image resizing. Note: The `_ratio_image_resize` attribute should contain the list of predefined ratios for resizing. Attributes: _ratio_image_resize (list): List of predefined ratios for image resizing. Returns: None """ try: if self._model.debug_mode: self._model.activity_logger.info("ModelMoildev: calculate_resolution_option(), " "Calculate image resolution option") self._resolution_option = [] for ratio in self._ratio_image_resize: self._resolution_option.append((int(self.moildev_main.image_width * ratio), int(self.moildev_main.image_height * ratio))) except Exception as e: self._model.activity_logger.error(f"ModelMoildev.calculate_resolution_option(): Error: {str(e)}")