From a52889a601de2921b3583fadd1a6e4cbd4d8ce3b Mon Sep 17 00:00:00 2001 From: ChrisTerBeke Date: Fri, 1 Dec 2017 16:29:02 +0100 Subject: [PATCH 1/3] Update 3D viewer build volume when relevant machine settings are changed - CURA-4659 --- cura/BuildVolume.py | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/cura/BuildVolume.py b/cura/BuildVolume.py index 50f63e49d5..2567641cc9 100755 --- a/cura/BuildVolume.py +++ b/cura/BuildVolume.py @@ -513,14 +513,13 @@ class BuildVolume(SceneNode): update_disallowed_areas = False update_raft_thickness = False update_extra_z_clearance = True + for setting_key in self._changed_settings_since_last_rebuild: + if setting_key == "print_sequence": machine_height = self._global_container_stack.getProperty("machine_height", "value") - if Application.getInstance().getGlobalContainerStack().getProperty("print_sequence", - "value") == "one_at_a_time" and len( - self._scene_objects) > 1: - self._height = min(self._global_container_stack.getProperty("gantry_height", "value"), - machine_height) + if Application.getInstance().getGlobalContainerStack().getProperty("print_sequence", "value") == "one_at_a_time" and len(self._scene_objects) > 1: + self._height = min(self._global_container_stack.getProperty("gantry_height", "value"), machine_height) if self._height < machine_height: self._build_volume_message.show() else: @@ -528,9 +527,20 @@ class BuildVolume(SceneNode): else: self._height = self._global_container_stack.getProperty("machine_height", "value") self._build_volume_message.hide() + update_disallowed_areas = True rebuild_me = True - if setting_key in self._skirt_settings or setting_key in self._prime_settings or setting_key in self._tower_settings or setting_key == "print_sequence" or setting_key in self._ooze_shield_settings or setting_key in self._distance_settings or setting_key in self._extruder_settings: + # sometimes the machine size or shape settings are adjusted on the active machine, we should reflect this + if setting_key in self._machine_settings: + self._height = self._global_container_stack.getProperty("machine_height", "value") + self._width = self._global_container_stack.getProperty("machine_width", "value") + self._depth = self._global_container_stack.getProperty("machine_depth", "value") + self._shape = self._global_container_stack.getProperty("machine_shape", "value") + update_extra_z_clearance = True + update_disallowed_areas = True + rebuild_me = True + + if setting_key in self._skirt_settings + self._prime_settings + self._tower_settings + self._ooze_shield_settings + self._distance_settings + self._extruder_settings: update_disallowed_areas = True rebuild_me = True @@ -969,6 +979,7 @@ class BuildVolume(SceneNode): def _clamp(self, value, min_value, max_value): return max(min(value, max_value), min_value) + _machine_settings = ["machine_width", "machine_depth", "machine_height", "machine_shape", "machine_center_is_zero"] _skirt_settings = ["adhesion_type", "skirt_gap", "skirt_line_count", "skirt_brim_line_width", "brim_width", "brim_line_count", "raft_margin", "draft_shield_enabled", "draft_shield_dist", "initial_layer_line_width_factor"] _raft_settings = ["adhesion_type", "raft_base_thickness", "raft_interface_thickness", "raft_surface_layers", "raft_surface_thickness", "raft_airgap", "layer_0_z_overlap"] _extra_z_settings = ["retraction_hop_enabled", "retraction_hop"] From 033a4615ebbd7f8adaead4c641f661997f7796d2 Mon Sep 17 00:00:00 2001 From: Mark Burton Date: Fri, 1 Dec 2017 17:47:08 +0000 Subject: [PATCH 2/3] Call resetLayerData() before adding LayerDataDecorator to scene node rather than afterwards. This ensures that the layer data is reset before the scene is rendered. --- plugins/CuraEngineBackend/ProcessSlicedLayersJob.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py b/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py index 37ab451d16..7a43b43fd0 100644 --- a/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py +++ b/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py @@ -208,6 +208,10 @@ class ProcessSlicedLayersJob(Job): self._progress_message.hide() return + view = Application.getInstance().getController().getActiveView() + if view.getPluginId() == "SimulationView": + view.resetLayerData() + # Add LayerDataDecorator to scene node to indicate that the node has layer data decorator = LayerDataDecorator.LayerDataDecorator() decorator.setLayerData(layer_mesh) @@ -226,10 +230,6 @@ class ProcessSlicedLayersJob(Job): if self._progress_message: self._progress_message.setProgress(100) - view = Application.getInstance().getController().getActiveView() - if view.getPluginId() == "SimulationView": - view.resetLayerData() - if self._progress_message: self._progress_message.hide() From c3d9c1b3d8058876e328369a768c8619531e6938 Mon Sep 17 00:00:00 2001 From: Diego Prado Gesto Date: Mon, 4 Dec 2017 09:49:03 +0100 Subject: [PATCH 3/3] CURA-4667 Fix simulation view render race. Change the place where the layer data is reset. --- plugins/CuraEngineBackend/ProcessSlicedLayersJob.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py b/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py index 7a43b43fd0..26a8269183 100644 --- a/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py +++ b/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py @@ -61,7 +61,9 @@ class ProcessSlicedLayersJob(Job): def run(self): start_time = time() - if Application.getInstance().getController().getActiveView().getPluginId() == "SimulationView": + view = Application.getInstance().getController().getActiveView() + if view.getPluginId() == "SimulationView": + view.resetLayerData() self._progress_message.show() Job.yieldThread() if self._abort_requested: @@ -208,10 +210,6 @@ class ProcessSlicedLayersJob(Job): self._progress_message.hide() return - view = Application.getInstance().getController().getActiveView() - if view.getPluginId() == "SimulationView": - view.resetLayerData() - # Add LayerDataDecorator to scene node to indicate that the node has layer data decorator = LayerDataDecorator.LayerDataDecorator() decorator.setLayerData(layer_mesh)