Merge pull request #8335

Speed up disable extruder
This commit is contained in:
Jelle Spijker 2020-09-09 09:42:36 +02:00 committed by GitHub
commit 0725bdcd64
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 50 additions and 39 deletions

View file

@ -63,6 +63,7 @@ class MachineManager(QObject):
self._current_root_material_id = {} # type: Dict[str, str]
self._default_extruder_position = "0" # to be updated when extruders are switched on and off
self._num_user_settings = 0
self._instance_container_timer = QTimer() # type: QTimer
self._instance_container_timer.setInterval(250)
@ -126,6 +127,8 @@ class MachineManager(QObject):
self.activeQualityGroupChanged.connect(self.activeQualityDisplayNameChanged)
self.activeQualityChangesGroupChanged.connect(self.activeQualityDisplayNameChanged)
self.activeStackValueChanged.connect(self._reCalculateNumUserSettings)
activeQualityDisplayNameChanged = pyqtSignal()
activeQualityGroupChanged = pyqtSignal()
@ -151,6 +154,22 @@ class MachineManager(QObject):
printerConnectedStatusChanged = pyqtSignal() # Emitted every time the active machine change or the outputdevices change
rootMaterialChanged = pyqtSignal()
numUserSettingsChanged = pyqtSignal()
def _reCalculateNumUserSettings(self):
if not self._global_container_stack:
if self._num_user_settings != 0:
self.numUserSettingsChanged.emit()
self._num_user_settings = 0
return
num_user_settings = self._global_container_stack.getTop().getNumInstances()
stacks = self._global_container_stack.extruderList
for stack in stacks:
num_user_settings += stack.getTop().getNumInstances()
if self._num_user_settings != num_user_settings:
self._num_user_settings = num_user_settings
self.numUserSettingsChanged.emit()
def setInitialActiveMachine(self) -> None:
active_machine_id = self._application.getPreferences().getValue("cura/active_machine")
@ -415,31 +434,13 @@ class MachineManager(QObject):
Logger.log("d", "Checking %s stacks for errors took %.2f s" % (count, time.time() - time_start))
return False
@pyqtProperty(bool, notify = activeStackValueChanged)
@pyqtProperty(bool, notify = numUserSettingsChanged)
def hasUserSettings(self) -> bool:
"""Check if the global_container has instances in the user container"""
return self._num_user_settings != 0
if not self._global_container_stack:
return False
if self._global_container_stack.getTop().getNumInstances() != 0:
return True
for stack in self._global_container_stack.extruderList:
if stack.getTop().getNumInstances() != 0:
return True
return False
@pyqtProperty(int, notify = activeStackValueChanged)
@pyqtProperty(int, notify = numUserSettingsChanged)
def numUserSettings(self) -> int:
if not self._global_container_stack:
return 0
num_user_settings = self._global_container_stack.getTop().getNumInstances()
stacks = self._global_container_stack.extruderList
for stack in stacks:
num_user_settings += stack.getTop().getNumInstances()
return num_user_settings
return self._num_user_settings
@pyqtSlot(str)
def clearUserSettingAllCurrentStacks(self, key: str) -> None:
@ -967,11 +968,10 @@ class MachineManager(QObject):
if self._global_container_stack is None:
return
with postponeSignals(*self._getContainerChangedSignals(), compress = CompressTechnique.CompressPerParameterValue):
property_names = ["value", "resolve", "validationState"]
for container in [self._global_container_stack] + self._global_container_stack.extruderList:
for setting_key in container.getAllKeys():
container.propertiesChanged.emit(setting_key, property_names)
property_names = ["value", "resolve", "validationState"]
for container in [self._global_container_stack] + self._global_container_stack.extruderList:
for setting_key in container.getAllKeys():
container.propertiesChanged.emit(setting_key, property_names)
@pyqtSlot(int, bool)
def setExtruderEnabled(self, position: int, enabled: bool) -> None:
@ -985,10 +985,6 @@ class MachineManager(QObject):
self.updateNumberExtrudersEnabled()
self.correctExtruderSettings()
# In case this extruder is being disabled and it's the currently selected one, switch to the default extruder
if not enabled and position == ExtruderManager.getInstance().activeExtruderIndex:
ExtruderManager.getInstance().setActiveExtruderIndex(int(self._default_extruder_position))
# Ensure that the quality profile is compatible with current combination, or choose a compatible one if available
self._updateQualityWithMaterial()
self.extruderChanged.emit()
@ -996,8 +992,7 @@ class MachineManager(QObject):
self.activeQualityGroupChanged.emit()
# Update items in SettingExtruder
ExtruderManager.getInstance().extrudersChanged.emit(self._global_container_stack.getId())
# Make sure the front end reflects changes
self.forceUpdateAllSettings()
# Also trigger the build plate compatibility to update
self.activeMaterialChanged.emit()
self.activeIntentChanged.emit()