mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-15 10:47:49 -06:00
Fixed settings update. After each change in the settings the build volume was rebuilding
CURA-4271
This commit is contained in:
parent
b239eb9eaf
commit
c614f02d0f
1 changed files with 72 additions and 38 deletions
|
@ -90,10 +90,15 @@ class BuildVolume(SceneNode):
|
||||||
#Objects loaded at the moment. We are connected to the property changed events of these objects.
|
#Objects loaded at the moment. We are connected to the property changed events of these objects.
|
||||||
self._scene_objects = set()
|
self._scene_objects = set()
|
||||||
|
|
||||||
self._change_timer = QTimer()
|
self._scene_change_timer = QTimer()
|
||||||
self._change_timer.setInterval(100)
|
self._scene_change_timer.setInterval(100)
|
||||||
self._change_timer.setSingleShot(True)
|
self._scene_change_timer.setSingleShot(True)
|
||||||
self._change_timer.timeout.connect(self._onChangeTimerFinished)
|
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",
|
self._build_volume_message = Message(catalog.i18nc("@info:status",
|
||||||
"The build volume height has been reduced due to the value of the"
|
"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.
|
# activeQualityChanged is always emitted after setActiveVariant, setActiveMaterial and setActiveQuality.
|
||||||
# Therefore this works.
|
# Therefore this works.
|
||||||
Application.getInstance().getMachineManager().activeQualityChanged.connect(self._onStackChanged)
|
Application.getInstance().getMachineManager().activeQualityChanged.connect(self._onStackChanged)
|
||||||
|
|
||||||
# This should also ways work, and it is semantically more correct,
|
# This should also ways work, and it is semantically more correct,
|
||||||
# but it does not update the disallowed areas after material change
|
# but it does not update the disallowed areas after material change
|
||||||
Application.getInstance().getMachineManager().activeStackChanged.connect(self._onStackChanged)
|
Application.getInstance().getMachineManager().activeStackChanged.connect(self._onStackChanged)
|
||||||
|
|
||||||
|
# list of settings which were updated
|
||||||
|
self._changed_settings_since_last_rebuild = []
|
||||||
|
|
||||||
def _onSceneChanged(self, source):
|
def _onSceneChanged(self, source):
|
||||||
if self._global_container_stack:
|
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()
|
root = Application.getInstance().getController().getScene().getRoot()
|
||||||
new_scene_objects = set(node for node in BreadthFirstIterator(root) if node.callDecoration("isSliceable"))
|
new_scene_objects = set(node for node in BreadthFirstIterator(root) if node.callDecoration("isSliceable"))
|
||||||
if new_scene_objects != self._scene_objects:
|
if new_scene_objects != self._scene_objects:
|
||||||
|
@ -562,42 +571,67 @@ class BuildVolume(SceneNode):
|
||||||
self._engine_ready = True
|
self._engine_ready = True
|
||||||
self.rebuild()
|
self.rebuild()
|
||||||
|
|
||||||
|
def _onSettingChangeTimerFinished(self):
|
||||||
|
rebuild_me = False
|
||||||
|
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()
|
||||||
|
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._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()
|
||||||
|
|
||||||
|
if update_raft_thickness:
|
||||||
|
self._updateRaftThickness()
|
||||||
|
|
||||||
|
if update_extra_z_clearance:
|
||||||
|
self._updateExtraZClearance()
|
||||||
|
|
||||||
|
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):
|
def _onSettingPropertyChanged(self, setting_key: str, property_name: str):
|
||||||
if property_name != "value":
|
if property_name != "value":
|
||||||
return
|
return
|
||||||
|
|
||||||
rebuild_me = False
|
if setting_key not in self._changed_settings_since_last_rebuild:
|
||||||
if setting_key == "print_sequence":
|
self._changed_settings_since_last_rebuild.append(setting_key)
|
||||||
machine_height = self._global_container_stack.getProperty("machine_height", "value")
|
self._setting_change_timer.start()
|
||||||
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()
|
|
||||||
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:
|
|
||||||
self._updateDisallowedAreas()
|
|
||||||
rebuild_me = True
|
|
||||||
|
|
||||||
if setting_key in self._raft_settings:
|
|
||||||
self._updateRaftThickness()
|
|
||||||
rebuild_me = True
|
|
||||||
|
|
||||||
if setting_key in self._extra_z_settings:
|
|
||||||
self._updateExtraZClearance()
|
|
||||||
rebuild_me = True
|
|
||||||
|
|
||||||
if setting_key in self._limit_to_extruder_settings:
|
|
||||||
self._updateDisallowedAreas()
|
|
||||||
rebuild_me = True
|
|
||||||
|
|
||||||
if rebuild_me:
|
|
||||||
self.rebuild()
|
|
||||||
|
|
||||||
def hasErrors(self) -> bool:
|
def hasErrors(self) -> bool:
|
||||||
return self._has_errors
|
return self._has_errors
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue