Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Ultimaker/Cura.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoralekseisasin <a.sasin@ultimaker.com>2017-09-06 17:58:17 +0300
committeralekseisasin <a.sasin@ultimaker.com>2017-09-06 17:58:17 +0300
commitc614f02d0ff9cbaf8476fb764ac7849c49fc0e45 (patch)
treedfadba8c9ef5ed4cd5cd993fbbe940d9f4f885fe /cura/BuildVolume.py
parentb239eb9eaf597ca15f548272f4f6eefbd6d6455b (diff)
Fixed settings update. After each change in the settings the build volume was rebuilding
CURA-4271
Diffstat (limited to 'cura/BuildVolume.py')
-rwxr-xr-xcura/BuildVolume.py94
1 files changed, 64 insertions, 30 deletions
diff --git a/cura/BuildVolume.py b/cura/BuildVolume.py
index bc5398cb1c..ccdc3cea40 100755
--- a/cura/BuildVolume.py
+++ b/cura/BuildVolume.py
@@ -90,10 +90,15 @@ class BuildVolume(SceneNode):
#Objects loaded at the moment. We are connected to the property changed events of these objects.
self._scene_objects = set()
- self._change_timer = QTimer()
- self._change_timer.setInterval(100)
- self._change_timer.setSingleShot(True)
- self._change_timer.timeout.connect(self._onChangeTimerFinished)
+ self._scene_change_timer = QTimer()
+ self._scene_change_timer.setInterval(100)
+ self._scene_change_timer.setSingleShot(True)
+ self._scene_change_timer.timeout.connect(self._onSceneChangeTimerFinished)
+
+ self._setting_change_timer = QTimer()
+ self._setting_change_timer.setInterval(100)
+ self._setting_change_timer.setSingleShot(True)
+ self._setting_change_timer.timeout.connect(self._onSettingChangeTimerFinished)
self._build_volume_message = Message(catalog.i18nc("@info:status",
"The build volume height has been reduced due to the value of the"
@@ -104,15 +109,19 @@ class BuildVolume(SceneNode):
# activeQualityChanged is always emitted after setActiveVariant, setActiveMaterial and setActiveQuality.
# Therefore this works.
Application.getInstance().getMachineManager().activeQualityChanged.connect(self._onStackChanged)
+
# This should also ways work, and it is semantically more correct,
# but it does not update the disallowed areas after material change
Application.getInstance().getMachineManager().activeStackChanged.connect(self._onStackChanged)
+ # list of settings which were updated
+ self._changed_settings_since_last_rebuild = []
+
def _onSceneChanged(self, source):
if self._global_container_stack:
- self._change_timer.start()
+ self._scene_change_timer.start()
- def _onChangeTimerFinished(self):
+ def _onSceneChangeTimerFinished(self):
root = Application.getInstance().getController().getScene().getRoot()
new_scene_objects = set(node for node in BreadthFirstIterator(root) if node.callDecoration("isSliceable"))
if new_scene_objects != self._scene_objects:
@@ -562,43 +571,68 @@ class BuildVolume(SceneNode):
self._engine_ready = True
self.rebuild()
- def _onSettingPropertyChanged(self, setting_key: str, property_name: str):
- if property_name != "value":
- return
-
+ def _onSettingChangeTimerFinished(self):
rebuild_me = False
- 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 self._height < machine_height:
- self._build_volume_message.show()
+ 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 self._height < machine_height:
+ self._build_volume_message.show()
+ else:
+ self._build_volume_message.hide()
else:
+ self._height = self._global_container_stack.getProperty("machine_height", "value")
self._build_volume_message.hide()
- else:
- self._height = self._global_container_stack.getProperty("machine_height", "value")
- self._build_volume_message.hide()
- rebuild_me = 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:
+ update_disallowed_areas = True
+ rebuild_me = True
+
+ if setting_key in self._raft_settings:
+ update_raft_thickness = True
+ rebuild_me = True
+
+ if setting_key in self._extra_z_settings:
+ update_extra_z_clearance = 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:
+ if setting_key in self._limit_to_extruder_settings:
+ update_disallowed_areas = True
+ rebuild_me = True
+
+ # We only want to update all of them once.
+ if update_disallowed_areas:
self._updateDisallowedAreas()
- rebuild_me = True
- if setting_key in self._raft_settings:
+ if update_raft_thickness:
self._updateRaftThickness()
- rebuild_me = True
- if setting_key in self._extra_z_settings:
+ if update_extra_z_clearance:
self._updateExtraZClearance()
- rebuild_me = True
-
- if setting_key in self._limit_to_extruder_settings:
- self._updateDisallowedAreas()
- rebuild_me = True
if rebuild_me:
self.rebuild()
+ # We just did a rebuild, reset the list.
+ self._changed_settings_since_last_rebuild = []
+
+ def _onSettingPropertyChanged(self, setting_key: str, property_name: str):
+ if property_name != "value":
+ return
+
+ if setting_key not in self._changed_settings_since_last_rebuild:
+ self._changed_settings_since_last_rebuild.append(setting_key)
+ self._setting_change_timer.start()
+
def hasErrors(self) -> bool:
return self._has_errors