"""
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)}")