Source code for morse.modifiers.utm
import logging; logger = logging.getLogger("morse." + __name__)
from morse.core import blenderapi
from morse.core.modifier import Modifier
[docs]class MorseUTMClass(Modifier):
""" Convert between Blender and UTM coordinates. """
[docs] def initialize(self):
""" Initialize the global UTM coordinates in the scene. """
self._global_x = 0.0
self._global_y = 0.0
self._global_z = 0.0
# Get the global coordinates if defined in the scene
scene = blenderapi.scene()
script_empty_name = 'Scene_Script_Holder'
script_empty = scene.objects[script_empty_name]
self._global_x = float(script_empty['UTMXOffset'])
self._global_y = float(script_empty['UTMYOffset'])
self._global_z = float(script_empty['UTMZOffset'])
[docs] def register_component(self, component_name, component_instance, mod_data):
""" Add the corresponding function to a component. """
# Extract the information for this modifier
# This will be tailored for each middleware according to its needs
function_name = mod_data[1]
try:
# Get the reference to the function
function = getattr(self, function_name)
except AttributeError as detail:
logger.error("%s. Check the 'component_config.py' file for typos" % detail)
return
# Choose what to do, depending on the function being used
# Data read functions
if function_name == "utm_to_blender":
component_instance.input_modifiers.append(function)
# Data write functions
elif function_name == "blender_to_utm":
component_instance.output_modifiers.append(function)
[docs] def blender_to_utm(self, component_instance):
""" Convert the coordinates from Blender to UTM reference. """
try:
component_instance.local_data['x'] += self._global_x
component_instance.local_data['y'] += self._global_y
component_instance.local_data['z'] += self._global_z
except KeyError as detail:
logger.warning("Unable to use 'blender_to_utm' on component %s. It does not contain the item %s in its 'local_data' dictionary" % (component_instance.bge_object.name, detail))
[docs] def utm_to_blender(self, component_instance):
""" Convert the coordinates from UTM to Blender reference. """
try:
component_instance.local_data['x'] -= self._global_x
component_instance.local_data['y'] -= self._global_y
component_instance.local_data['z'] -= self._global_z
except KeyError as detail:
logger.warning("Unable to use 'utm_to_blender' on component %s. It does not contain the item %s in its 'local_data' dictionary" % (component_instance.bge_object.name, detail))