mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-08-12 01:49:03 +08:00
Remove most of the PrintInformation code and fix the material amount to use profile
This commit is contained in:
parent
1f82e83093
commit
510f5978f0
@ -40,48 +40,13 @@ class PrintInformation(QObject):
|
|||||||
def __init__(self, parent = None):
|
def __init__(self, parent = None):
|
||||||
super().__init__(parent)
|
super().__init__(parent)
|
||||||
|
|
||||||
self._enabled = False
|
|
||||||
|
|
||||||
self._minimum_print_time = Duration(None, self)
|
|
||||||
self._current_print_time = Duration(None, self)
|
self._current_print_time = Duration(None, self)
|
||||||
self._maximum_print_time = Duration(None, self)
|
|
||||||
|
|
||||||
self._material_amount = -1
|
self._material_amount = -1
|
||||||
|
|
||||||
self._time_quality_value = 50
|
|
||||||
self._time_quality_changed_timer = QTimer()
|
|
||||||
self._time_quality_changed_timer.setInterval(500)
|
|
||||||
self._time_quality_changed_timer.setSingleShot(True)
|
|
||||||
self._time_quality_changed_timer.timeout.connect(self._updateTimeQualitySettings)
|
|
||||||
|
|
||||||
self._interpolation_settings = {
|
|
||||||
"layer_height": { "minimum": "low", "maximum": "high", "curve": "linear", "precision": 2 },
|
|
||||||
"fill_sparse_density": { "minimum": "low", "maximum": "high", "curve": "linear", "precision": 0 }
|
|
||||||
}
|
|
||||||
|
|
||||||
self._low_quality_settings = None
|
|
||||||
self._current_settings = None
|
|
||||||
self._high_quality_settings = None
|
|
||||||
|
|
||||||
self._slice_pass = None
|
|
||||||
self._slice_reason = None
|
|
||||||
|
|
||||||
Application.getInstance().getMachineManager().activeMachineInstanceChanged.connect(self._onActiveMachineChanged)
|
|
||||||
self._onActiveMachineChanged()
|
|
||||||
|
|
||||||
Application.getInstance().getController().getScene().sceneChanged.connect(self._onSceneChanged)
|
|
||||||
|
|
||||||
self._backend = Application.getInstance().getBackend()
|
self._backend = Application.getInstance().getBackend()
|
||||||
if self._backend:
|
if self._backend:
|
||||||
self._backend.printDurationMessage.connect(self._onPrintDurationMessage)
|
self._backend.printDurationMessage.connect(self._onPrintDurationMessage)
|
||||||
self._backend.slicingStarted.connect(self._onSlicingStarted)
|
|
||||||
self._backend.slicingCancelled.connect(self._onSlicingCancelled)
|
|
||||||
|
|
||||||
minimumPrintTimeChanged = pyqtSignal()
|
|
||||||
|
|
||||||
@pyqtProperty(Duration, notify = minimumPrintTimeChanged)
|
|
||||||
def minimumPrintTime(self):
|
|
||||||
return self._minimum_print_time
|
|
||||||
|
|
||||||
currentPrintTimeChanged = pyqtSignal()
|
currentPrintTimeChanged = pyqtSignal()
|
||||||
|
|
||||||
@ -89,146 +54,18 @@ class PrintInformation(QObject):
|
|||||||
def currentPrintTime(self):
|
def currentPrintTime(self):
|
||||||
return self._current_print_time
|
return self._current_print_time
|
||||||
|
|
||||||
maximumPrintTimeChanged = pyqtSignal()
|
|
||||||
|
|
||||||
@pyqtProperty(Duration, notify = maximumPrintTimeChanged)
|
|
||||||
def maximumPrintTime(self):
|
|
||||||
return self._maximum_print_time
|
|
||||||
|
|
||||||
materialAmountChanged = pyqtSignal()
|
materialAmountChanged = pyqtSignal()
|
||||||
|
|
||||||
@pyqtProperty(float, notify = materialAmountChanged)
|
@pyqtProperty(float, notify = materialAmountChanged)
|
||||||
def materialAmount(self):
|
def materialAmount(self):
|
||||||
return self._material_amount
|
return self._material_amount
|
||||||
|
|
||||||
timeQualityValueChanged = pyqtSignal()
|
|
||||||
|
|
||||||
@pyqtProperty(int, notify = timeQualityValueChanged)
|
|
||||||
def timeQualityValue(self):
|
|
||||||
return self._time_quality_value
|
|
||||||
|
|
||||||
def setEnabled(self, enabled):
|
|
||||||
if enabled != self._enabled:
|
|
||||||
self._enabled = enabled
|
|
||||||
|
|
||||||
if self._enabled:
|
|
||||||
self._updateTimeQualitySettings()
|
|
||||||
self._onSlicingStarted()
|
|
||||||
|
|
||||||
self.enabledChanged.emit()
|
|
||||||
|
|
||||||
enabledChanged = pyqtSignal()
|
|
||||||
@pyqtProperty(bool, fset = setEnabled, notify = enabledChanged)
|
|
||||||
def enabled(self):
|
|
||||||
return self._enabled
|
|
||||||
|
|
||||||
@pyqtSlot(int)
|
|
||||||
def setTimeQualityValue(self, value):
|
|
||||||
if value != self._time_quality_value:
|
|
||||||
self._time_quality_value = value
|
|
||||||
self.timeQualityValueChanged.emit()
|
|
||||||
|
|
||||||
self._time_quality_changed_timer.start()
|
|
||||||
|
|
||||||
def _onSlicingStarted(self):
|
|
||||||
if self._slice_pass is None:
|
|
||||||
self._slice_pass = self.SlicePass.CurrentSettings
|
|
||||||
|
|
||||||
if self._slice_reason is None:
|
|
||||||
self._slice_reason = self.SliceReason.Other
|
|
||||||
|
|
||||||
if self._slice_pass == self.SlicePass.CurrentSettings and self._slice_reason != self.SliceReason.SettingChanged:
|
|
||||||
self._minimum_print_time.setDuration(-1)
|
|
||||||
self.minimumPrintTimeChanged.emit()
|
|
||||||
self._maximum_print_time.setDuration(-1)
|
|
||||||
self.maximumPrintTimeChanged.emit()
|
|
||||||
|
|
||||||
def _onPrintDurationMessage(self, time, amount):
|
def _onPrintDurationMessage(self, time, amount):
|
||||||
if self._slice_pass == self.SlicePass.CurrentSettings:
|
#if self._slice_pass == self.SlicePass.CurrentSettings:
|
||||||
self._current_print_time.setDuration(time)
|
self._current_print_time.setDuration(time)
|
||||||
self.currentPrintTimeChanged.emit()
|
self.currentPrintTimeChanged.emit()
|
||||||
|
|
||||||
# Material amount is sent as an amount of mm^3, so calculate length from that
|
# Material amount is sent as an amount of mm^3, so calculate length from that
|
||||||
r = self._current_settings.getSettingValueByKey("material_diameter") / 2
|
r = Application.getInstance().getMachineManager().getActiveProfile().getSettingValue("material_diameter") / 2
|
||||||
self._material_amount = round((amount / (math.pi * r ** 2)) / 1000, 2)
|
self._material_amount = round((amount / (math.pi * r ** 2)) / 1000, 2)
|
||||||
self.materialAmountChanged.emit()
|
self.materialAmountChanged.emit()
|
||||||
|
|
||||||
if not self._enabled:
|
|
||||||
return
|
|
||||||
|
|
||||||
if self._slice_reason != self.SliceReason.SettingChanged or not self._minimum_print_time.valid or not self._maximum_print_time.valid:
|
|
||||||
self._slice_pass = self.SlicePass.LowQualitySettings
|
|
||||||
self._backend.slice(settings = self._low_quality_settings, save_gcode = False, save_polygons = False, force_restart = False, report_progress = False)
|
|
||||||
else:
|
|
||||||
self._slice_pass = None
|
|
||||||
self._slice_reason = None
|
|
||||||
elif self._slice_pass == self.SlicePass.LowQualitySettings:
|
|
||||||
self._minimum_print_time.setDuration(time)
|
|
||||||
self.minimumPrintTimeChanged.emit()
|
|
||||||
|
|
||||||
self._slice_pass = self.SlicePass.HighQualitySettings
|
|
||||||
self._backend.slice(settings = self._high_quality_settings, save_gcode = False, save_polygons = False, force_restart = False, report_progress = False)
|
|
||||||
elif self._slice_pass == self.SlicePass.HighQualitySettings:
|
|
||||||
self._maximum_print_time.setDuration(time)
|
|
||||||
self.maximumPrintTimeChanged.emit()
|
|
||||||
|
|
||||||
self._slice_pass = None
|
|
||||||
self._slice_reason = None
|
|
||||||
|
|
||||||
def _onActiveMachineChanged(self):
|
|
||||||
return
|
|
||||||
if self._current_settings:
|
|
||||||
self._current_settings.settingChanged.disconnect(self._onSettingChanged)
|
|
||||||
|
|
||||||
self._current_settings = Application.getInstance().getMachineManager().getActiveMachineInstance()
|
|
||||||
|
|
||||||
if self._current_settings:
|
|
||||||
self._current_settings.settingChanged.connect(self._onSettingChanged)
|
|
||||||
self._low_quality_settings = None
|
|
||||||
self._high_quality_settings = None
|
|
||||||
self._updateTimeQualitySettings()
|
|
||||||
|
|
||||||
self._slice_reason = self.SliceReason.ActiveMachineChanged
|
|
||||||
|
|
||||||
def _updateTimeQualitySettings(self):
|
|
||||||
if not self._current_settings or not self._enabled:
|
|
||||||
return
|
|
||||||
|
|
||||||
if not self._low_quality_settings:
|
|
||||||
self._low_quality_settings = MachineSettings()
|
|
||||||
self._low_quality_settings.loadSettingsFromFile(Resources.getPath(Resources.SettingsLocation, self._current_settings.getTypeID() + ".json"))
|
|
||||||
self._low_quality_settings.loadValuesFromFile(Resources.getPath(Resources.SettingsLocation, "profiles", "low_quality.conf"))
|
|
||||||
|
|
||||||
if not self._high_quality_settings:
|
|
||||||
self._high_quality_settings = MachineSettings()
|
|
||||||
self._high_quality_settings.loadSettingsFromFile(Resources.getPath(Resources.SettingsLocation, self._current_settings.getTypeID() + ".json"))
|
|
||||||
self._high_quality_settings.loadValuesFromFile(Resources.getPath(Resources.SettingsLocation, "profiles", "high_quality.conf"))
|
|
||||||
|
|
||||||
for key, options in self._interpolation_settings.items():
|
|
||||||
minimum_value = None
|
|
||||||
if options["minimum"] == "low":
|
|
||||||
minimum_value = self._low_quality_settings.getSettingValueByKey(key)
|
|
||||||
elif options["minimum"] == "high":
|
|
||||||
minimum_value = self._high_quality_settings.getSettingValueByKey(key)
|
|
||||||
else:
|
|
||||||
continue
|
|
||||||
|
|
||||||
maximum_value = None
|
|
||||||
if options["maximum"] == "low":
|
|
||||||
maximum_value = self._low_quality_settings.getSettingValueByKey(key)
|
|
||||||
elif options["maximum"] == "high":
|
|
||||||
maximum_value = self._high_quality_settings.getSettingValueByKey(key)
|
|
||||||
else:
|
|
||||||
continue
|
|
||||||
|
|
||||||
setting_value = round(minimum_value + (maximum_value - minimum_value) * (self._time_quality_value / 100), options["precision"])
|
|
||||||
self._current_settings.setSettingValueByKey(key, setting_value)
|
|
||||||
|
|
||||||
def _onSceneChanged(self, source):
|
|
||||||
self._slice_reason = self.SliceReason.SceneChanged
|
|
||||||
|
|
||||||
def _onSettingChanged(self, source):
|
|
||||||
self._slice_reason = self.SliceReason.SettingChanged
|
|
||||||
|
|
||||||
def _onSlicingCancelled(self):
|
|
||||||
self._slice_pass = None
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user