def open_and_display_file(self, fpath, ftype=None): self.set_wait_cursor() progress_dialog_read = None progress_dialog_load = None success = True try: self.update_recent_files(fpath, ftype) self.model_file = ModelFile(fpath, ftype) self.scene = Scene(self.window) progress_dialog_read = ProgressDialog('Reading file...') model, model_data = self.model_file.read(progress_dialog_read.step) progress_dialog_load = ProgressDialog('Loading model...') model.load_data(model_data, progress_dialog_load.step) self.scene.clear() self.scene.add_model(model) if self.model_file.filetype == 'gcode': offset_x = self.config.read('machine.platform_offset_x', float) offset_y = self.config.read('machine.platform_offset_y', float) offset_z = self.config.read('machine.platform_offset_z', float) if offset_x is None and offset_y is None and offset_z is None: self.scene.view_model_center() logging.info( 'Platform offsets not set, showing model in the center' ) else: model.offset_x = offset_x if offset_x is not None else 0 model.offset_y = offset_y if offset_y is not None else 0 model.offset_z = offset_z if offset_z is not None else 0 logging.info( 'Using platform offsets: (%s, %s, %s)' % (model.offset_x, model.offset_y, model.offset_z)) # platform needs to be added last to be translucent platform_w = self.config.read('machine.platform_w', float) platform_d = self.config.read('machine.platform_d', float) platform = Platform(platform_w, platform_d) self.scene.add_supporting_actor(platform) self.panel = self.create_panel() # update panel to reflect new model properties self.panel.set_initial_values() self.panel.connect_handlers() # always start with the same view on the scene self.scene.reset_view(True) if self.model_file.filetype == 'gcode': self.scene.mode_2d = bool(self.config.read('ui.gcode_2d', int)) else: self.scene.mode_2d = False if hasattr(self.panel, 'set_3d_view'): self.panel.set_3d_view(not self.scene.mode_2d) self.window.set_file_widgets(self.scene, self.panel) self.window.filename = self.model_file.basename self.window.file_modified = False self.window.menu_enable_file_items( self.model_file.filetype != 'gcode') if self.model_file.size > 2**30: size = self.model_file.size / 2**30 units = 'GB' elif self.model_file.size > 2**20: size = self.model_file.size / 2**20 units = 'MB' elif self.model_file.size > 2**10: size = self.model_file.size / 2**10 units = 'KB' else: size = self.model_file.size units = 'B' vertex_plural = 'vertex' if int(str( model.vertex_count)[-1]) == 1 else 'vertices' self.window.update_status(' %s (%.1f%s, %d %s)' % (self.model_file.basename, size, units, model.vertex_count, vertex_plural)) except IOError, e: self.set_normal_cursor() error_dialog = OpenErrorAlert(fpath, e.strerror) error_dialog.show() success = False