def create(self, name=None): """ Generate the scene configuration and insert necessary objects Should always be called at the very end of the Builder script. It will finalise the building process and write the configuration files. """ # Invoke special methods of component that must take place *after* renaming for component in AbstractComponent.components: if hasattr(component, "after_renaming"): component.after_renaming() # Compute node name if name is None: try: self._node_name = os.environ["MORSE_NODE"] except KeyError: self._node_name = os.uname()[1] else: self._node_name = name # Create a new scene for each camera, with specific render resolution # Must be done at the end of the builder script, after renaming # and before adding 'Scene_Script_Holder' self._cfg_camera_scene() # Create a new scene for the MORSE_LOGIC (Scene_Script_Holder, CameraFP) scene = bpymorse.set_active_scene('S.MORSE_LOGIC') scene.game_settings.physics_engine = 'BULLET' scene.game_settings.physics_step_sub = self._physics_step_sub # set simulation view resolution (4:3) scene.render.resolution_x = 800 scene.render.resolution_y = 600 # define 'Scene_Script_Holder' as the blender object of Enrivonment if not 'Scene_Script_Holder' in bpymorse.get_objects(): # Add the necessary objects base = Component('props', 'basics') # Set Scene_Script_Holder as core Environment object self.set_blender_object(bpymorse.get_object('Scene_Script_Holder')) # Copy properties (for UTM modifier configuration) _properties = bpymorse.get_properties(bpymorse.get_object('MORSE.Properties')) self.properties(**_properties) # Write the configuration of the datastreams, and node configuration if not self.multinode_distribution: robot_list = None else: robot_list = self.multinode_distribution.get(self._node_name, []) if not isinstance(robot_list, list): robot_list = [robot_list] Configuration.write_config(robot_list) self._write_multinode(self._node_name) # Change the Screen material if self._display_camera: self._set_scren_mat() # Write the name of the 'environment file' self.properties(environment_file = str(self._environment_file)) # Default time management if 'time_management' not in self._bpy_object.game.properties.keys(): self.properties(time_management = TimeStrategies.BestEffort) if self.fastmode: # SINGLETEXTURE support has been removed between 2.69 and # 2.70. Handle properly the case where it is not defined # anymore. try: self.set_material_mode('SINGLETEXTURE') except TypeError: self.set_material_mode('MULTITEXTURE') self.set_viewport("WIREFRAME") elif not self.is_material_mode_custom: # make sure OpenGL shading language shaders (GLSL) is the # material mode to use for rendering self.set_material_mode('GLSL') # Set the unit system to use for button display (in edit mode) to metric bpymorse.get_context_scene().unit_settings.system = 'METRIC' # Select the type of Framing to Extend, # Show the entire viewport in the display window, # viewing more horizontally or vertically. bpymorse.get_context_scene().game_settings.frame_type = 'EXTEND' # Start player with a visible mouse cursor bpymorse.get_context_scene().game_settings.show_mouse = True # Set the position of the camera camera_fp = bpymorse.get_object('CameraFP') camera_fp.location = self._camera_location camera_fp.rotation_euler = self._camera_rotation camera_fp.game.properties['Speed'].value = self._camera_speed camera_fp.data.clip_start = self._camera_clip_start camera_fp.data.clip_end = self._camera_clip_end camera_fp.data.lens = 20 # set focal length in mm # Make CameraFP the active camera bpymorse.deselect_all() camera_fp.select = True bpymorse.get_context_scene().objects.active = camera_fp # Set default camera bpymorse.get_context_scene().camera = camera_fp # Set viewport to Camera bpymorse.set_viewport_perspective() hud_text = bpymorse.get_object('Keys_text') hud_text.scale.y = 0.027 # to fit the HUD_plane self._created = True # in case we are in edit mode, do not exit on error with CLI sys.excepthook = sys_excepthook # Standard Python excepthook
def create(self, name=None): """ Generate the scene configuration and insert necessary objects Should always be called at the very end of the Builder script. It will finalise the building process and write the configuration files. """ # Invoke special methods of component that must take place *after* renaming for component in AbstractComponent.components: if hasattr(component, "after_renaming"): component.after_renaming() # Compute node name if name is None: try: self._node_name = os.environ["MORSE_NODE"] except KeyError: self._node_name = os.uname()[1] else: self._node_name = name # Create a new scene for each camera, with specific render resolution # Must be done at the end of the builder script, after renaming # and before adding 'Scene_Script_Holder' self._cfg_camera_scene() # Create a new scene for the MORSE_LOGIC (Scene_Script_Holder, CameraFP) scene = bpymorse.set_active_scene('S.MORSE_LOGIC') scene.game_settings.physics_engine = 'BULLET' scene.game_settings.physics_step_sub = self._physics_step_sub # set simulation view resolution (4:3) scene.render.resolution_x = 800 scene.render.resolution_y = 600 # define 'Scene_Script_Holder' as the blender object of Enrivonment if not 'Scene_Script_Holder' in bpymorse.get_objects(): # Add the necessary objects base = Component('props', 'basics') # Set Scene_Script_Holder as core Environment object self.set_blender_object(bpymorse.get_object('Scene_Script_Holder')) # Copy properties (for UTM modifier configuration) _properties = bpymorse.get_properties( bpymorse.get_object('MORSE.Properties')) self.properties(**_properties) # Write the configuration of the datastreams, and node configuration if not self.multinode_distribution: robot_list = None else: robot_list = self.multinode_distribution.get(self._node_name, []) if not isinstance(robot_list, list): robot_list = [robot_list] Configuration.write_config(robot_list) self._write_multinode(self._node_name) # Change the Screen material if self._display_camera: self._set_scren_mat() # Write the name of the 'environment file' self.properties(environment_file=str(self._environment_file)) # Default time management if 'time_management' not in self._bpy_object.game.properties.keys(): self.properties(time_management=TimeStrategies.BestEffort) if self.fastmode: # SINGLETEXTURE support has been removed between 2.69 and # 2.70. Handle properly the case where it is not defined # anymore. try: self.set_material_mode('SINGLETEXTURE') except TypeError: self.set_material_mode('MULTITEXTURE') self.set_viewport("WIREFRAME") elif not self.is_material_mode_custom: # make sure OpenGL shading language shaders (GLSL) is the # material mode to use for rendering self.set_material_mode('GLSL') # Set the unit system to use for button display (in edit mode) to metric bpymorse.get_context_scene().unit_settings.system = 'METRIC' # Select the type of Framing to Extend, # Show the entire viewport in the display window, # viewing more horizontally or vertically. bpymorse.get_context_scene().game_settings.frame_type = 'EXTEND' # Start player with a visible mouse cursor bpymorse.get_context_scene().game_settings.show_mouse = True # Set the position of the camera camera_fp = bpymorse.get_object('CameraFP') camera_fp.location = self._camera_location camera_fp.rotation_euler = self._camera_rotation camera_fp.game.properties['Speed'].value = self._camera_speed camera_fp.data.clip_start = self._camera_clip_start camera_fp.data.clip_end = self._camera_clip_end camera_fp.data.lens = self._focal_length # set focal length in mm # Make CameraFP the active camera bpymorse.deselect_all() camera_fp.select = True bpymorse.get_context_scene().objects.active = camera_fp # Set default camera bpymorse.get_context_scene().camera = camera_fp # Set viewport to Camera bpymorse.set_viewport_perspective() hud_text = bpymorse.get_object('Keys_text') hud_text.scale.y = 0.027 # to fit the HUD_plane self._created = True # in case we are in edit mode, do not exit on error with CLI sys.excepthook = sys.__excepthook__ # Standard Python excepthook
def create(self, name=None): """ Generate the scene configuration and insert necessary objects Should always be called at the very end of the Builder script. It will finalise the building process and write the configuration files. """ # Invoke special methods of component that must take place *after* renaming for component in AbstractComponent.components: if hasattr(component, "after_renaming"): component.after_renaming() # Compute node name if name is None: try: self._node_name = os.environ["MORSE_NODE"] except KeyError: import socket self._node_name = socket.gethostname() else: self._node_name = name # Check time properties scene = bpymorse.get_context_scene() base_frequency = scene.game_settings.fps max_frequency_requested = Configuration.max_frequency() time_scale = self.property_value('time_scale') if self.auto_tune_time: self.use_vsync('OFF') # notyet :D # self.use_internal_syncer() if max_frequency_requested > base_frequency: self.simulator_frequency(max_frequency_requested) else: # Just report bad looking configuration if max_frequency_requested > base_frequency: logger.warning( "You are requesting a component at %d Hz, but the " "simulator main loop is running only at %d Hz. Try " "to raise the frequency of the simulation using " "env.simulator_frequency(%d)" % (max_frequency_requested, base_frequency, max_frequency_requested)) if time_scale: real_fps_requested = max_frequency_requested * time_scale if real_fps_requested > 1000.0: logger.warning( "You are requesting a component at %d Hz, with " " time acceleration factor of %f, leading to a " " real frequency of %d Hz. It will probably hard " " to reach this value with Morse, so consider to " " reduce frequency of component or speed factor " % (max_frequency_requested, time_scale, real_fps_requested)) # Create a new scene for each camera, with specific render resolution # Must be done at the end of the builder script, after renaming # and before adding 'Scene_Script_Holder' self._cfg_camera_scene() # Create a new scene for the MORSE_LOGIC (Scene_Script_Holder, CameraFP) scene = bpymorse.set_active_scene('S.MORSE_LOGIC') scene.game_settings.physics_engine = 'BULLET' scene.game_settings.physics_step_sub = self._physics_step_sub # set simulation view resolution (4:3) scene.render.resolution_x = 800 scene.render.resolution_y = 600 # define 'Scene_Script_Holder' as the blender object of Enrivonment if not 'Scene_Script_Holder' in bpymorse.get_objects(): # Add the necessary objects base = Component('props', 'basics') # Set Scene_Script_Holder as core Environment object self.set_blender_object(bpymorse.get_object('Scene_Script_Holder')) # Copy properties (for UTM modifier configuration) _properties = bpymorse.get_properties( bpymorse.get_object('MORSE.Properties')) self.properties(**_properties) # Write the configuration of the datastreams, and node configuration if not self.multinode_distribution: robot_list = None else: robot_list = self.multinode_distribution.get(self._node_name, []) if not isinstance(robot_list, list): robot_list = [robot_list] Configuration.write_config(robot_list) self._write_multinode(self._node_name) # Change the Screen material if self._display_camera: self._set_scren_mat() # Write the name of the 'environment file' self.properties(environment_file=str(self._environment_file)) # Default time management if 'time_management' not in self._bpy_object.game.properties.keys(): self.properties(time_management=TimeStrategies.BestEffort) if self.fastmode: # SINGLETEXTURE support has been removed between 2.69 and # 2.70. Handle properly the case where it is not defined # anymore. try: self.set_material_mode('SINGLETEXTURE') except TypeError: self.set_material_mode('MULTITEXTURE') self.set_viewport("WIREFRAME") elif not self.is_material_mode_custom: # make sure OpenGL shading language shaders (GLSL) is the # material mode to use for rendering self.set_material_mode('GLSL') # Set the unit system to use for button display (in edit mode) to metric bpymorse.get_context_scene().unit_settings.system = 'METRIC' # Select the type of Framing to Extend, # Show the entire viewport in the display window, # viewing more horizontally or vertically. bpymorse.get_context_scene().game_settings.frame_type = 'EXTEND' # Start player with a visible mouse cursor bpymorse.get_context_scene().game_settings.show_mouse = True # Set the position of the camera camera_fp = bpymorse.get_object('CameraFP') camera_fp.location = self._camera_location camera_fp.rotation_euler = self._camera_rotation camera_fp.game.properties['Speed'].value = self._camera_speed camera_fp.data.clip_start = self._camera_clip_start camera_fp.data.clip_end = self._camera_clip_end camera_fp.data.lens = self._focal_length # set focal length in mm # Make CameraFP the active camera bpymorse.deselect_all() camera_fp.select = True bpymorse.get_context_scene().objects.active = camera_fp # Set default camera bpymorse.get_context_scene().camera = camera_fp # Set viewport to Camera bpymorse.set_viewport_perspective() hud_text = bpymorse.get_object('Keys_text') hud_text.scale.y = 0.027 # to fit the HUD_plane # Create a cube to compute the dt between two frames _dt_name = '__morse_dt_analyser' cube = Cube(_dt_name) cube.scale = (0.01, 0.01, 0.01) cube.location = [0.0, 0.0, -5000.0] cube_obj = bpymorse.get_object(_dt_name) cube_obj.game.physics_type = 'DYNAMIC' cube_obj.hide_render = True cube_obj.game.lock_location_z = True self._created = True # in case we are in edit mode, do not exit on error with CLI sys.excepthook = sys.__excepthook__ # Standard Python excepthook
def create(self, name=None): """ Generate the scene configuration and insert necessary objects Should always be called at the very end of the Builder script. It will finalise the building process and write the configuration files. """ # Invoke special methods of component that must take place *after* renaming for component in AbstractComponent.components: if hasattr(component, "after_renaming"): component.after_renaming() # Compute node name if name is None: try: self._node_name = os.environ["MORSE_NODE"] except KeyError: import socket self._node_name = socket.gethostname() else: self._node_name = name # Check time properties scene = bpymorse.get_context_scene() base_frequency = scene.game_settings.fps max_frequency_requested = Configuration.max_frequency() time_scale = self.property_value('time_scale') if self.auto_tune_time: self.use_vsync('OFF') # notyet :D # self.use_internal_syncer() if max_frequency_requested > base_frequency: self.simulator_frequency(max_frequency_requested) else: # Just report bad looking configuration if max_frequency_requested > base_frequency: logger.warning("You are requesting a component at %d Hz, but the " "simulator main loop is running only at %d Hz. Try " "to raise the frequency of the simulation using " "env.simulator_frequency(%d)" % (max_frequency_requested, base_frequency, max_frequency_requested)) if time_scale: real_fps_requested = max_frequency_requested * time_scale if real_fps_requested > 1000.0: logger.warning("You are requesting a component at %d Hz, with " " time acceleration factor of %f, leading to a " " real frequency of %d Hz. It will probably hard " " to reach this value with Morse, so consider to " " reduce frequency of component or speed factor " % (max_frequency_requested, time_scale, real_fps_requested)) # Create a new scene for each camera, with specific render resolution # Must be done at the end of the builder script, after renaming # and before adding 'Scene_Script_Holder' self._cfg_camera_scene() # Create a new scene for the MORSE_LOGIC (Scene_Script_Holder, CameraFP) scene = bpymorse.set_active_scene('S.MORSE_LOGIC') scene.game_settings.physics_engine = 'BULLET' scene.game_settings.physics_step_sub = self._physics_step_sub # set simulation view resolution (4:3) scene.render.resolution_x = 800 scene.render.resolution_y = 600 # define 'Scene_Script_Holder' as the blender object of Enrivonment if not 'Scene_Script_Holder' in bpymorse.get_objects(): # Add the necessary objects base = Component('props', 'basics') # Set Scene_Script_Holder as core Environment object self.set_blender_object(bpymorse.get_object('Scene_Script_Holder')) # Copy properties (for UTM modifier configuration) _properties = bpymorse.get_properties(bpymorse.get_object('MORSE.Properties')) self.properties(**_properties) # Write the configuration of the datastreams, and node configuration if not self.multinode_distribution: robot_list = None else: robot_list = self.multinode_distribution.get(self._node_name, []) if not isinstance(robot_list, list): robot_list = [robot_list] Configuration.write_config(robot_list) self._write_multinode(self._node_name) # Change the Screen material if self._display_camera: self._set_scren_mat() # Write the name of the 'environment file' self.properties(environment_file = str(self._environment_file)) # Default time management if 'time_management' not in self._bpy_object.game.properties.keys(): self.properties(time_management = TimeStrategies.BestEffort) if self.fastmode: # SINGLETEXTURE support has been removed between 2.69 and # 2.70. Handle properly the case where it is not defined # anymore. try: self.set_material_mode('SINGLETEXTURE') except TypeError: self.set_material_mode('MULTITEXTURE') self.set_viewport("WIREFRAME") elif not self.is_material_mode_custom: # make sure OpenGL shading language shaders (GLSL) is the # material mode to use for rendering self.set_material_mode('GLSL') # Set the unit system to use for button display (in edit mode) to metric bpymorse.get_context_scene().unit_settings.system = 'METRIC' # Select the type of Framing to Extend, # Show the entire viewport in the display window, # viewing more horizontally or vertically. bpymorse.get_context_scene().game_settings.frame_type = 'EXTEND' # Start player with a visible mouse cursor bpymorse.get_context_scene().game_settings.show_mouse = True # Set the position of the camera camera_fp = bpymorse.get_object('CameraFP') camera_fp.location = self._camera_location camera_fp.rotation_euler = self._camera_rotation camera_fp.game.properties['Speed'].value = self._camera_speed camera_fp.data.clip_start = self._camera_clip_start camera_fp.data.clip_end = self._camera_clip_end camera_fp.data.lens = self._focal_length # set focal length in mm # Make CameraFP the active camera bpymorse.deselect_all() camera_fp.select = True bpymorse.get_context_scene().objects.active = camera_fp # Set default camera bpymorse.get_context_scene().camera = camera_fp # Set viewport to Camera bpymorse.set_viewport_perspective() hud_text = bpymorse.get_object('Keys_text') hud_text.scale.y = 0.027 # to fit the HUD_plane # Create a cube to compute the dt between two frames _dt_name = '__morse_dt_analyser' cube = Cube(_dt_name) cube.scale = (0.01, 0.01, 0.01) cube.location = [0.0, 0.0, -5000.0] cube_obj = bpymorse.get_object(_dt_name) cube_obj.game.physics_type = 'DYNAMIC' cube_obj.hide_render = True cube_obj.game.lock_location_z = True self._created = True # in case we are in edit mode, do not exit on error with CLI sys.excepthook = sys.__excepthook__ # Standard Python excepthook