From 8256788ed89439e22990e123b99fa251e0fe17cd Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 15 Jun 2018 13:40:43 +0200 Subject: [PATCH] Use CuraApplication instead of Application Because we need to call getExtruderManager which is only in CuraApplication. Contributes to issue CURA-5330. --- .../CuraEngineBackend/CuraEngineBackend.py | 61 +++++++++---------- 1 file changed, 30 insertions(+), 31 deletions(-) diff --git a/plugins/CuraEngineBackend/CuraEngineBackend.py b/plugins/CuraEngineBackend/CuraEngineBackend.py index 3e66edc203..21b23ee617 100755 --- a/plugins/CuraEngineBackend/CuraEngineBackend.py +++ b/plugins/CuraEngineBackend/CuraEngineBackend.py @@ -1,8 +1,7 @@ -# Copyright (c) 2017 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. from UM.Backend.Backend import Backend, BackendState -from UM.Application import Application from UM.Scene.SceneNode import SceneNode from UM.Signal import Signal from UM.Logger import Logger @@ -15,6 +14,7 @@ from UM.Qt.Duration import DurationFormat from PyQt5.QtCore import QObject, pyqtSlot from collections import defaultdict +from cura.CuraApplication import CuraApplication from cura.Settings.ExtruderManager import ExtruderManager from . import ProcessSlicedLayersJob from . import StartSliceJob @@ -48,8 +48,8 @@ class CuraEngineBackend(QObject, Backend): if Platform.isWindows(): executable_name += ".exe" default_engine_location = executable_name - if os.path.exists(os.path.join(Application.getInstallPrefix(), "bin", executable_name)): - default_engine_location = os.path.join(Application.getInstallPrefix(), "bin", executable_name) + if os.path.exists(os.path.join(CuraApplication.getInstallPrefix(), "bin", executable_name)): + default_engine_location = os.path.join(CuraApplication.getInstallPrefix(), "bin", executable_name) if hasattr(sys, "frozen"): default_engine_location = os.path.join(os.path.dirname(os.path.abspath(sys.executable)), executable_name) if Platform.isLinux() and not default_engine_location: @@ -61,7 +61,7 @@ class CuraEngineBackend(QObject, Backend): default_engine_location = execpath break - self._application = Application.getInstance() + self._application = CuraApplication.getInstance() self._multi_build_plate_model = None self._machine_error_checker = None @@ -71,7 +71,7 @@ class CuraEngineBackend(QObject, Backend): Logger.log("i", "Found CuraEngine at: %s", default_engine_location) default_engine_location = os.path.abspath(default_engine_location) - Application.getInstance().getPreferences().addPreference("backend/location", default_engine_location) + self._application.getPreferences().addPreference("backend/location", default_engine_location) # Workaround to disable layer view processing if layer view is not active. self._layer_view_active = False @@ -120,7 +120,7 @@ class CuraEngineBackend(QObject, Backend): self._slice_start_time = None self._is_disabled = False - Application.getInstance().getPreferences().addPreference("general/auto_slice", False) + self._application.getPreferences().addPreference("general/auto_slice", False) self._use_timer = False # When you update a setting and other settings get changed through inheritance, many propertyChanged signals are fired. @@ -130,7 +130,7 @@ class CuraEngineBackend(QObject, Backend): self._change_timer.setSingleShot(True) self._change_timer.setInterval(500) self.determineAutoSlicing() - Application.getInstance().getPreferences().preferenceChanged.connect(self._onPreferencesChanged) + self._application.getPreferences().preferenceChanged.connect(self._onPreferencesChanged) self._application.initializationFinished.connect(self.initialize) @@ -169,7 +169,7 @@ class CuraEngineBackend(QObject, Backend): # \return list of commands and args / parameters. def getEngineCommand(self): json_path = Resources.getPath(Resources.DefinitionContainers, "fdmprinter.def.json") - return [Application.getInstance().getPreferences().getValue("backend/location"), "connect", "127.0.0.1:{0}".format(self._port), "-j", json_path, ""] + return [self._application.getPreferences().getValue("backend/location"), "connect", "127.0.0.1:{0}".format(self._port), "-j", json_path, ""] ## Emitted when we get a message containing print duration and material amount. # This also implies the slicing has finished. @@ -221,7 +221,7 @@ class CuraEngineBackend(QObject, Backend): self._scene.gcode_dict = {} # see if we really have to slice - active_build_plate = Application.getInstance().getMultiBuildPlateModel().activeBuildPlate + active_build_plate = self._application.getMultiBuildPlateModel().activeBuildPlate build_plate_to_be_sliced = self._build_plates_to_be_sliced.pop(0) Logger.log("d", "Going to slice build plate [%s]!" % build_plate_to_be_sliced) num_objects = self._numObjectsPerBuildPlate() @@ -236,8 +236,8 @@ class CuraEngineBackend(QObject, Backend): self.slice() return - if Application.getInstance().getPrintInformation() and build_plate_to_be_sliced == active_build_plate: - Application.getInstance().getPrintInformation().setToZeroPrintInformation(build_plate_to_be_sliced) + if self._application.getPrintInformation() and build_plate_to_be_sliced == active_build_plate: + self._application.getPrintInformation().setToZeroPrintInformation(build_plate_to_be_sliced) if self._process is None: self._createSocket() @@ -274,7 +274,7 @@ class CuraEngineBackend(QObject, Backend): self.processingProgress.emit(0) Logger.log("d", "Attempting to kill the engine process") - if Application.getInstance().getUseExternalBackend(): + if self._application.getUseExternalBackend(): return if self._process is not None: @@ -309,7 +309,7 @@ class CuraEngineBackend(QObject, Backend): return if job.getResult() == StartSliceJob.StartJobResult.MaterialIncompatible: - if Application.getInstance().platformActivity: + if self._application.platformActivity: self._error_message = Message(catalog.i18nc("@info:status", "Unable to slice with the current material as it is incompatible with the selected machine or configuration."), title = catalog.i18nc("@info:title", "Unable to slice")) self._error_message.show() @@ -320,7 +320,7 @@ class CuraEngineBackend(QObject, Backend): return if job.getResult() == StartSliceJob.StartJobResult.SettingError: - if Application.getInstance().platformActivity: + if self._application.platformActivity: extruders = list(ExtruderManager.getInstance().getMachineExtruders(self._global_container_stack.getId())) error_keys = [] for extruder in extruders: @@ -350,7 +350,7 @@ class CuraEngineBackend(QObject, Backend): elif job.getResult() == StartSliceJob.StartJobResult.ObjectSettingError: errors = {} - for node in DepthFirstIterator(Application.getInstance().getController().getScene().getRoot()): + for node in DepthFirstIterator(self._application.getController().getScene().getRoot()): stack = node.callDecoration("getStack") if not stack: continue @@ -370,7 +370,7 @@ class CuraEngineBackend(QObject, Backend): return if job.getResult() == StartSliceJob.StartJobResult.BuildPlateError: - if Application.getInstance().platformActivity: + if self._application.platformActivity: self._error_message = Message(catalog.i18nc("@info:status", "Unable to slice because the prime tower or prime position(s) are invalid."), title = catalog.i18nc("@info:title", "Unable to slice")) self._error_message.show() @@ -388,7 +388,7 @@ class CuraEngineBackend(QObject, Backend): return if job.getResult() == StartSliceJob.StartJobResult.NothingToSlice: - if Application.getInstance().platformActivity: + if self._application.platformActivity: self._error_message = Message(catalog.i18nc("@info:status", "Nothing to slice because none of the models fit the build volume. Please scale or rotate models to fit."), title = catalog.i18nc("@info:title", "Unable to slice")) self._error_message.show() @@ -415,7 +415,7 @@ class CuraEngineBackend(QObject, Backend): enable_timer = True self._is_disabled = False - if not Application.getInstance().getPreferences().getValue("general/auto_slice"): + if not self._application.getPreferences().getValue("general/auto_slice"): enable_timer = False for node in DepthFirstIterator(self._scene.getRoot()): if node.callDecoration("isBlockSlicing"): @@ -507,7 +507,7 @@ class CuraEngineBackend(QObject, Backend): # # \param error The exception that occurred. def _onSocketError(self, error): - if Application.getInstance().isShuttingDown(): + if self._application.isShuttingDown(): return super()._onSocketError(error) @@ -528,7 +528,7 @@ class CuraEngineBackend(QObject, Backend): node.getParent().removeChild(node) def markSliceAll(self): - for build_plate_number in range(Application.getInstance().getMultiBuildPlateModel().maxBuildPlate + 1): + for build_plate_number in range(self._application.getMultiBuildPlateModel().maxBuildPlate + 1): if build_plate_number not in self._build_plates_to_be_sliced: self._build_plates_to_be_sliced.append(build_plate_number) @@ -606,11 +606,11 @@ class CuraEngineBackend(QObject, Backend): gcode_list = self._scene.gcode_dict[self._start_slice_job_build_plate] for index, line in enumerate(gcode_list): - replaced = line.replace("{print_time}", str(Application.getInstance().getPrintInformation().currentPrintTime.getDisplayString(DurationFormat.Format.ISO8601))) - replaced = replaced.replace("{filament_amount}", str(Application.getInstance().getPrintInformation().materialLengths)) - replaced = replaced.replace("{filament_weight}", str(Application.getInstance().getPrintInformation().materialWeights)) - replaced = replaced.replace("{filament_cost}", str(Application.getInstance().getPrintInformation().materialCosts)) - replaced = replaced.replace("{jobname}", str(Application.getInstance().getPrintInformation().jobName)) + replaced = line.replace("{print_time}", str(self._application.getPrintInformation().currentPrintTime.getDisplayString(DurationFormat.Format.ISO8601))) + replaced = replaced.replace("{filament_amount}", str(self._application.getPrintInformation().materialLengths)) + replaced = replaced.replace("{filament_weight}", str(self._application.getPrintInformation().materialWeights)) + replaced = replaced.replace("{filament_cost}", str(self._application.getPrintInformation().materialCosts)) + replaced = replaced.replace("{jobname}", str(self._application.getPrintInformation().jobName)) gcode_list[index] = replaced @@ -619,7 +619,7 @@ class CuraEngineBackend(QObject, Backend): Logger.log("d", "Number of models per buildplate: %s", dict(self._numObjectsPerBuildPlate())) # See if we need to process the sliced layers job. - active_build_plate = Application.getInstance().getMultiBuildPlateModel().activeBuildPlate + active_build_plate = self._application.getMultiBuildPlateModel().activeBuildPlate if ( self._layer_view_active and (self._process_layers_job is None or not self._process_layers_job.isRunning()) and @@ -745,10 +745,9 @@ class CuraEngineBackend(QObject, Backend): ## Called when the user changes the active view mode. def _onActiveViewChanged(self): - application = Application.getInstance() - view = application.getController().getActiveView() + view = self._application.getController().getActiveView() if view: - active_build_plate = application.getMultiBuildPlateModel().activeBuildPlate + active_build_plate = self._application.getMultiBuildPlateModel().activeBuildPlate if view.getPluginId() == "SimulationView": # If switching to layer view, we should process the layers if that hasn't been done yet. self._layer_view_active = True # There is data and we're not slicing at the moment @@ -783,7 +782,7 @@ class CuraEngineBackend(QObject, Backend): extruder.propertyChanged.disconnect(self._onSettingChanged) extruder.containersChanged.disconnect(self._onChanged) - self._global_container_stack = Application.getInstance().getGlobalContainerStack() + self._global_container_stack = self._application.getGlobalContainerStack() if self._global_container_stack: self._global_container_stack.propertyChanged.connect(self._onSettingChanged) # Note: Only starts slicing when the value changed.