diff --git a/plugins/CuraEngineBackend/CuraEngineBackend.py b/plugins/CuraEngineBackend/CuraEngineBackend.py index aed68e2c3b..8d549d45a9 100644 --- a/plugins/CuraEngineBackend/CuraEngineBackend.py +++ b/plugins/CuraEngineBackend/CuraEngineBackend.py @@ -23,13 +23,13 @@ class CuraEngineBackend(Backend): super().__init__() # Find out where the engine is located, and how it is called. This depends on how Cura is packaged and which OS we are running on. - default_engine_location = '../PinkUnicornEngine/CuraEngine' - if hasattr(sys, 'frozen'): - default_engine_location = os.path.join(os.path.dirname(os.path.abspath(sys.executable)), 'CuraEngine') - if sys.platform == 'win32': - default_engine_location += '.exe' + default_engine_location = "../PinkUnicornEngine/CuraEngine" + if hasattr(sys, "frozen"): + default_engine_location = os.path.join(os.path.dirname(os.path.abspath(sys.executable)), "CuraEngine") + if sys.platform == "win32": + default_engine_location += ".exe" default_engine_location = os.path.abspath(default_engine_location) - Preferences.getInstance().addPreference('backend/location', default_engine_location) + Preferences.getInstance().addPreference("backend/location", default_engine_location) self._scene = Application.getInstance().getController().getScene() self._scene.sceneChanged.connect(self._onSceneChanged) @@ -59,7 +59,7 @@ class CuraEngineBackend(Backend): self.backendConnected.connect(self._onBackendConnected) def getEngineCommand(self): - return [Preferences.getInstance().getValue("backend/location"), '-j', Resources.getPath(Resources.SettingsLocation, 'fdmprinter.json'), '-vv', '--connect', "127.0.0.1:{0}".format(self._port)] + return [Preferences.getInstance().getValue("backend/location"), "-j", Resources.getPath(Resources.SettingsLocation, "fdmprinter.json"), "-vv", "--connect", "127.0.0.1:{0}".format(self._port)] ## Emitted when we get a message containing print duration and material amount. This also implies the slicing has finished. # \param time The amount of time the print will take. @@ -84,13 +84,13 @@ class CuraEngineBackend(Backend): # - report_progress: True if the slicing progress should be reported, False if not. Default is True. def slice(self, **kwargs): if self._slicing: - if not kwargs.get('force_restart', True): + if not kwargs.get("force_restart", True): return self._slicing = False self._restart = True if self._process is not None: - Logger.log('d', "Killing engine process") + Logger.log("d", "Killing engine process") try: self._process.terminate() except: # terminating a process that is already terminating causes an exception, silently ignore this. @@ -101,7 +101,7 @@ class CuraEngineBackend(Backend): objects = [] for node in DepthFirstIterator(self._scene.getRoot()): if type(node) is SceneNode and node.getMeshData() and node.getMeshData().getVertices() is not None: - if not getattr(node, '_outside_buildarea', False): + if not getattr(node, "_outside_buildarea", False): objects.append(node) if not objects: @@ -110,22 +110,22 @@ class CuraEngineBackend(Backend): self._slicing = True self.slicingStarted.emit() - self._report_progress = kwargs.get('report_progress', True) + self._report_progress = kwargs.get("report_progress", True) if self._report_progress: self.processingProgress.emit(0.0) - self._sendSettings(kwargs.get('settings', self._settings)) + self._sendSettings(kwargs.get("settings", self._settings)) self._scene.acquireLock() # Set the gcode as an empty list. This will be filled with strings by GCodeLayer messages. # This is done so the gcode can be fragmented in memory and does not need a continues memory space. # (AKA. This prevents MemoryErrors) - self._save_gcode = kwargs.get('save_gcode', True) + self._save_gcode = kwargs.get("save_gcode", True) if self._save_gcode: - setattr(self._scene, 'gcode_list', []) + setattr(self._scene, "gcode_list", []) - self._save_polygons = kwargs.get('save_polygons', True) + self._save_polygons = kwargs.get("save_polygons", True) msg = Cura_pb2.ObjectList() @@ -194,7 +194,7 @@ class CuraEngineBackend(Backend): def _onGCodePrefixMessage(self, message): if self._save_gcode: - self._scene.gcode_list.insert(0, message.data.decode('utf-8', 'replace')) + self._scene.gcode_list.insert(0, message.data.decode("utf-8", "replace")) def _onObjectPrintTimeMessage(self, message): self.printDurationMessage.emit(message.time, message.material_amount) @@ -221,7 +221,7 @@ class CuraEngineBackend(Backend): for setting in settings.getAllSettings(include_machine=True): s = msg.settings.add() s.name = setting.getKey() - s.value = str(setting.getValue()).encode('utf-8') + s.value = str(setting.getValue()).encode("utf-8") self._socket.sendMessage(msg) diff --git a/plugins/CuraEngineBackend/ProcessGCodeJob.py b/plugins/CuraEngineBackend/ProcessGCodeJob.py index 4da385a58d..22f3c273aa 100644 --- a/plugins/CuraEngineBackend/ProcessGCodeJob.py +++ b/plugins/CuraEngineBackend/ProcessGCodeJob.py @@ -10,4 +10,4 @@ class ProcessGCodeLayerJob(Job): self._message = message def run(self): - self._scene.gcode_list.append(self._message.data.decode('utf-8', 'replace')) + self._scene.gcode_list.append(self._message.data.decode("utf-8", "replace")) diff --git a/plugins/CuraEngineBackend/ProcessSlicedObjectListJob.py b/plugins/CuraEngineBackend/ProcessSlicedObjectListJob.py index 2938dde0a9..75b3be40c4 100644 --- a/plugins/CuraEngineBackend/ProcessSlicedObjectListJob.py +++ b/plugins/CuraEngineBackend/ProcessSlicedObjectListJob.py @@ -11,7 +11,7 @@ import struct class ProcessSlicedObjectListJob(Job): def __init__(self, message): - super().__init__(description = 'Processing sliced object') + super().__init__() self._message = message self._scene = Application.getInstance().getController().getScene() @@ -27,7 +27,7 @@ class ProcessSlicedObjectListJob(Job): objectIdMap[id(node)] = node settings = Application.getInstance().getActiveMachine() - layerHeight = settings.getSettingValueByKey('layer_height') + layerHeight = settings.getSettingValueByKey("layer_height") for object in self._message.objects: try: @@ -40,7 +40,7 @@ class ProcessSlicedObjectListJob(Job): layerData = LayerData.LayerData() for layer in object.layers: for polygon in layer.polygons: - points = numpy.fromstring(polygon.points, dtype='i8') # Convert bytearray to numpy array + points = numpy.fromstring(polygon.points, dtype="i8") # Convert bytearray to numpy array points = points.reshape((-1,2)) # We get a linear list of pairs that make up the points, so make numpy interpret them correctly. points = numpy.asarray(points, dtype=numpy.float32) points /= 1000 @@ -48,11 +48,11 @@ class ProcessSlicedObjectListJob(Job): points[:,2] *= -1 - if not settings.getSettingValueByKey('machine_center_is_zero'): - center = [settings.getSettingValueByKey('machine_width') / 2, 0.0, -settings.getSettingValueByKey('machine_depth') / 2] + if not settings.getSettingValueByKey("machine_center_is_zero"): + center = [settings.getSettingValueByKey("machine_width") / 2, 0.0, -settings.getSettingValueByKey("machine_depth") / 2] points -= numpy.array(center) - #points = numpy.pad(points, ((0,0), (0,1)), 'constant', constant_values=(0.0, 1.0)) + #points = numpy.pad(points, ((0,0), (0,1)), "constant", constant_values=(0.0, 1.0)) #inverse = node.getWorldTransformation().getInverse().getData() #points = points.dot(inverse) #points = points[:,0:3] diff --git a/plugins/CuraEngineBackend/__init__.py b/plugins/CuraEngineBackend/__init__.py index ad184c0482..8eb149c8ec 100644 --- a/plugins/CuraEngineBackend/__init__.py +++ b/plugins/CuraEngineBackend/__init__.py @@ -2,15 +2,15 @@ from . import CuraEngineBackend from UM.i18n import i18nCatalog -catalog = i18nCatalog('cura') +catalog = i18nCatalog("cura") def getMetaData(): return { - 'type': 'backend', - 'plugin': { - 'name': "CuraEngine Backend", - 'author': 'Arjen Hiemstra', - 'description': catalog.i18nc('CuraEngine backend plugin description', 'Provides the link to the CuraEngine slicing backend') + "type": "backend", + "plugin": { + "name": "CuraEngine Backend", + "author": "Arjen Hiemstra", + "description": catalog.i18nc("CuraEngine backend plugin description", "Provides the link to the CuraEngine slicing backend") } } diff --git a/plugins/GCodeWriter/GCodeWriter.py b/plugins/GCodeWriter/GCodeWriter.py index 2fda172e7d..65bce874be 100644 --- a/plugins/GCodeWriter/GCodeWriter.py +++ b/plugins/GCodeWriter/GCodeWriter.py @@ -10,12 +10,12 @@ class GCodeWriter(MeshWriter): self._gcode = None def write(self, file_name, storage_device, mesh_data): - if 'gcode' in file_name: + if "gcode" in file_name: scene = Application.getInstance().getController().getScene() - gcode_list = getattr(scene, 'gcode_list') + gcode_list = getattr(scene, "gcode_list") if gcode_list: - f = storage_device.openFile(file_name, 'wt') - Logger.log('d', "Writing GCode to file %s", file_name) + f = storage_device.openFile(file_name, "wt") + Logger.log("d", "Writing GCode to file %s", file_name) for gcode in gcode_list: f.write(gcode) storage_device.closeFile(f) diff --git a/plugins/GCodeWriter/__init__.py b/plugins/GCodeWriter/__init__.py index 236403e236..325226e21a 100644 --- a/plugins/GCodeWriter/__init__.py +++ b/plugins/GCodeWriter/__init__.py @@ -2,21 +2,21 @@ from . import GCodeWriter from UM.i18n import i18nCatalog -catalog = i18nCatalog('cura') +catalog = i18nCatalog("cura") def getMetaData(): return { - 'type': 'mesh_writer', - 'plugin': { - 'name': 'GCode Writer', - 'author': 'Arjen Hiemstra', - 'version': '1.0', - 'description': catalog.i18nc('GCode Writer Plugin Description', 'Writes GCode to a file') + "type": "mesh_writer", + "plugin": { + "name": "GCode Writer", + "author": "Arjen Hiemstra", + "version": "1.0", + "description": catalog.i18nc("GCode Writer Plugin Description", "Writes GCode to a file") }, - 'mesh_writer': { - 'extension': 'gcode', - 'description': catalog.i18nc('GCode Writer File Description', 'GCode File') + "mesh_writer": { + "extension": "gcode", + "description": catalog.i18nc("GCode Writer File Description", "GCode File") } } diff --git a/plugins/LayerView/LayerView.py b/plugins/LayerView/LayerView.py index ad1a5dc0f7..73d70ee758 100644 --- a/plugins/LayerView/LayerView.py +++ b/plugins/LayerView/LayerView.py @@ -17,7 +17,7 @@ class LayerView(View): renderer.setRenderSelection(False) if not self._material: - self._material = renderer.createMaterial(Resources.getPath(Resources.ShadersLocation, 'basic.vert'), Resources.getPath(Resources.ShadersLocation, 'vertexcolor.frag')) + self._material = renderer.createMaterial(Resources.getPath(Resources.ShadersLocation, "basic.vert"), Resources.getPath(Resources.ShadersLocation, "vertexcolor.frag")) self._material.setUniformValue("u_color", [1.0, 0.0, 0.0, 1.0]) for node in DepthFirstIterator(scene.getRoot()): diff --git a/plugins/LayerView/__init__.py b/plugins/LayerView/__init__.py index a7a32f4f62..19542e9da7 100644 --- a/plugins/LayerView/__init__.py +++ b/plugins/LayerView/__init__.py @@ -1,17 +1,17 @@ from . import LayerView from UM.i18n import i18nCatalog -catalog = i18nCatalog('cura') +catalog = i18nCatalog("cura") def getMetaData(): return { - 'type': 'view', - 'plugin': { + "type": "view", + "plugin": { "name": "Layer View" }, - 'view': { - 'name': catalog.i18nc('Layers View mode', 'Layers'), - 'view_panel': 'LayerView.qml' + "view": { + "name": catalog.i18nc("Layers View mode", "Layers"), + "view_panel": "LayerView.qml" } } diff --git a/plugins/USBPrinting/PrinterConnection.py b/plugins/USBPrinting/PrinterConnection.py index 463b230582..442cbe2e43 100644 --- a/plugins/USBPrinting/PrinterConnection.py +++ b/plugins/USBPrinting/PrinterConnection.py @@ -129,7 +129,7 @@ class PrinterConnection(SignalEmitter): hex_file = intelHex.readHex(self._firmware_file_name) if len(hex_file) == 0: - Logger.log('e', "Unable to read provided hex file. Could not update firmware") + Logger.log("e", "Unable to read provided hex file. Could not update firmware") return programmer = stk500v2.Stk500v2() @@ -139,7 +139,7 @@ class PrinterConnection(SignalEmitter): time.sleep(1) # Give programmer some time to connect. Might need more in some cases, but this worked in all tested cases. if not programmer.isConnected(): - Logger.log('e', "Unable to connect with serial. Could not update firmware") + Logger.log("e", "Unable to connect with serial. Could not update firmware") return self._updating_firmware = True @@ -164,12 +164,12 @@ class PrinterConnection(SignalEmitter): self._is_connecting = True programmer = stk500v2.Stk500v2() try: - programmer.connect(self._serial_port) # Connect with the serial, if this succeeds, it's an arduino based usb device. + programmer.connect(self._serial_port) # Connect with the serial, if this succeeds, it"s an arduino based usb device. self._serial = programmer.leaveISP() except ispBase.IspError as e: - Logger.log('i', "Could not establish connection on %s: %s. Device is not arduino based." %(self._serial_port,str(e))) + Logger.log("i", "Could not establish connection on %s: %s. Device is not arduino based." %(self._serial_port,str(e))) except Exception as e: - Logger.log('i', "Could not establish connection on %s, unknown reasons. Device is not arduino based." % self._serial_port) + Logger.log("i", "Could not establish connection on %s, unknown reasons. Device is not arduino based." % self._serial_port) # If the programmer connected, we know its an atmega based version. Not all that usefull, but it does give some debugging information. for baud_rate in self._getBaudrateList(): # Cycle all baud rates (auto detect) @@ -178,7 +178,7 @@ class PrinterConnection(SignalEmitter): try: self._serial = serial.Serial(str(self._serial_port), baud_rate, timeout=3, writeTimeout=10000) except serial.SerialException: - Logger.log('i', "Could not open port %s" % self._serial_port) + Logger.log("i", "Could not open port %s" % self._serial_port) return else: if not self.setBaudRate(baud_rate): @@ -187,7 +187,7 @@ class PrinterConnection(SignalEmitter): sucesfull_responses = 0 timeout_time = time.time() + 5 self._serial.write(b"\n") - self._sendCommand("M105") # Request temperature, as this should (if baudrate is correct) result in a command with 'T:' in it + self._sendCommand("M105") # Request temperature, as this should (if baudrate is correct) result in a command with "T:" in it while timeout_time > time.time(): line = self._readline() if line is None: @@ -202,7 +202,7 @@ class PrinterConnection(SignalEmitter): if sucesfull_responses >= self._required_responses_auto_baud: self._serial.timeout = 2 #Reset serial timeout self.setIsConnected(True) - Logger.log('i', "Established printer connection on port %s" % self._serial_port) + Logger.log("i", "Established printer connection on port %s" % self._serial_port) return self.close() # Unable to connect, wrap up. self.setIsConnected(False) @@ -223,15 +223,15 @@ class PrinterConnection(SignalEmitter): if self._is_connected: self._listen_thread.start() #Start listening '''Application.getInstance().addOutputDevice(self._serial_port, { - 'id': self._serial_port, - 'function': self.printGCode, - 'description': 'Print with USB {0}'.format(self._serial_port), - 'icon': 'print_usb', - 'priority': 1 + "id": self._serial_port, + "function": self.printGCode, + "description": "Print with USB {0}".format(self._serial_port), + "icon": "print_usb", + "priority": 1 })''' else: - Logger.log('w', "Printer connection state was not changed") + Logger.log("w", "Printer connection state was not changed") connectionStateChanged = Signal() @@ -254,37 +254,37 @@ class PrinterConnection(SignalEmitter): def _sendCommand(self, cmd): if self._serial is None: return - if 'M109' in cmd or 'M190' in cmd: + if "M109" in cmd or "M190" in cmd: self._heatup_wait_start_time = time.time() - if 'M104' in cmd or 'M109' in cmd: + if "M104" in cmd or "M109" in cmd: try: t = 0 - if 'T' in cmd: - t = int(re.search('T([0-9]+)', cmd).group(1)) - self._target_extruder_temperatures[t] = float(re.search('S([0-9]+)', cmd).group(1)) + if "T" in cmd: + t = int(re.search("T([0-9]+)", cmd).group(1)) + self._target_extruder_temperatures[t] = float(re.search("S([0-9]+)", cmd).group(1)) except: pass - if 'M140' in cmd or 'M190' in cmd: + if "M140" in cmd or "M190" in cmd: try: - self._target_bed_temperature = float(re.search('S([0-9]+)', cmd).group(1)) + self._target_bed_temperature = float(re.search("S([0-9]+)", cmd).group(1)) except: pass - #Logger.log('i','Sending: %s' % (cmd)) + #Logger.log("i","Sending: %s" % (cmd)) try: - command = (cmd + '\n').encode() - #self._serial.write(b'\n') + command = (cmd + "\n").encode() + #self._serial.write(b"\n") self._serial.write(command) except serial.SerialTimeoutException: Logger.log("w","Serial timeout while writing to serial port, trying again.") try: time.sleep(0.5) - self._serial.write((cmd + '\n').encode()) + self._serial.write((cmd + "\n").encode()) except Exception as e: Logger.log("e","Unexpected error while writing serial port %s " % e) self._setErrorState("Unexpected error while writing serial port %s " % e) self.close() except Exception as e: - Logger.log('e',"Unexpected error while writing serial port %s" % e) + Logger.log("e","Unexpected error while writing serial port %s" % e) self._setErrorState("Unexpected error while writing serial port %s " % e) self.close() @@ -332,7 +332,7 @@ class PrinterConnection(SignalEmitter): ## Listen thread function. def _listen(self): - Logger.log('i', "Printer connection listen thread started for %s" % self._serial_port) + Logger.log("i", "Printer connection listen thread started for %s" % self._serial_port) temperature_request_timeout = time.time() ok_timeout = time.time() while self._is_connected: @@ -341,24 +341,24 @@ class PrinterConnection(SignalEmitter): if line is None: break # None is only returned when something went wrong. Stop listening - if line.startswith(b'Error:'): + if line.startswith(b"Error:"): # Oh YEAH, consistency. # Marlin reports an MIN/MAX temp error as "Error:x\n: Extruder switched off. MAXTEMP triggered !\n" # But a bed temp error is reported as "Error: Temperature heated bed switched off. MAXTEMP triggered !!" # So we can have an extra newline in the most common case. Awesome work people. - if re.match(b'Error:[0-9]\n', line): + if re.match(b"Error:[0-9]\n", line): line = line.rstrip() + self._readline() # Skip the communication errors, as those get corrected. - if b'Extruder switched off' in line or b'Temperature heated bed switched off' in line or b'Something is wrong, please turn off the printer.' in line: + if b"Extruder switched off" in line or b"Temperature heated bed switched off" in line or b"Something is wrong, please turn off the printer." in line: if not self.hasError(): self._setErrorState(line[6:]) - elif b' T:' in line or line.startswith(b'T:'): #Temperature message + elif b" T:" in line or line.startswith(b"T:"): #Temperature message try: self._setExtruderTemperature(self._temperature_requested_extruder_index,float(re.search(b"T: *([0-9\.]*)", line).group(1))) except: pass - if b'B:' in line: # Check if it's a bed temperature + if b"B:" in line: # Check if it"s a bed temperature try: self._setBedTemperature(float(re.search(b"B: *([0-9\.]*)", line).group(1))) except Exception as e: @@ -374,16 +374,16 @@ class PrinterConnection(SignalEmitter): self.sendCommand("M105") temperature_request_timeout = time.time() + 5 - if line == b'' and time.time() > ok_timeout: - line = b'ok' # Force a timeout (basicly, send next command) + if line == b"" and time.time() > ok_timeout: + line = b"ok" # Force a timeout (basicly, send next command) - if b'ok' in line: + if b"ok" in line: ok_timeout = time.time() + 5 if not self._command_queue.empty(): self._sendCommand(self._command_queue.get()) else: self._sendNextGcodeLine() - elif b"resend" in line.lower() or b"rs" in line: # Because a resend can be asked with 'resend' and 'rs' + elif b"resend" in line.lower() or b"rs" in line: # Because a resend can be asked with "resend" and "rs" try: self._gcode_position = int(line.replace(b"N:",b" ").replace(b"N",b" ").replace(b":",b" ").split()[-1]) except: @@ -391,13 +391,13 @@ class PrinterConnection(SignalEmitter): self._gcode_position = int(line.split()[1]) else: # Request the temperature on comm timeout (every 2 seconds) when we are not printing.) - if line == b'': + if line == b"": if self._extruder_count > 0: self._temperature_requested_extruder_index = (self._temperature_requested_extruder_index + 1) % self._extruder_count self.sendCommand("M105 T%d" % self._temperature_requested_extruder_index) else: self.sendCommand("M105") - Logger.log('i', "Printer connection listen thread stopped for %s" % self._serial_port) + Logger.log("i", "Printer connection listen thread stopped for %s" % self._serial_port) ## Send next Gcode in the gcode list def _sendNextGcodeLine(self): @@ -407,20 +407,20 @@ class PrinterConnection(SignalEmitter): self._print_start_time_100 = time.time() line = self._gcode[self._gcode_position] - if ';' in line: - line = line[:line.find(';')] + if ";" in line: + line = line[:line.find(";")] line = line.strip() try: - if line == 'M0' or line == 'M1': - line = 'M105' #Don't send the M0 or M1 to the machine, as M0 and M1 are handled as an LCD menu pause. - if ('G0' in line or 'G1' in line) and 'Z' in line: - z = float(re.search('Z([0-9\.]*)', line).group(1)) + if line == "M0" or line == "M1": + line = "M105" #Don"t send the M0 or M1 to the machine, as M0 and M1 are handled as an LCD menu pause. + if ("G0" in line or "G1" in line) and "Z" in line: + z = float(re.search("Z([0-9\.]*)", line).group(1)) if self._current_z != z: self._current_z = z except Exception as e: - Logger.log('e', "Unexpected error with printer connection: %s" % e) + Logger.log("e", "Unexpected error with printer connection: %s" % e) self._setErrorState("Unexpected error: %s" %e) - checksum = functools.reduce(lambda x,y: x^y, map(ord, 'N%d%s' % (self._gcode_position, line))) + checksum = functools.reduce(lambda x,y: x^y, map(ord, "N%d%s" % (self._gcode_position, line))) self._sendCommand("N%d%s*%d" % (self._gcode_position, line, checksum)) self._gcode_position += 1 @@ -457,7 +457,7 @@ class PrinterConnection(SignalEmitter): try: ret = self._serial.readline() except Exception as e: - Logger.log('e',"Unexpected error while reading serial port. %s" %e) + Logger.log("e","Unexpected error while reading serial port. %s" %e) self._setErrorState("Printer has been disconnected") self.close() return None diff --git a/plugins/USBPrinting/USBPrinterManager.py b/plugins/USBPrinting/USBPrinterManager.py index abfd33ccf2..0c513fbade 100644 --- a/plugins/USBPrinting/USBPrinterManager.py +++ b/plugins/USBPrinting/USBPrinterManager.py @@ -17,7 +17,7 @@ from PyQt5.QtCore import QUrl, QObject, pyqtSlot, pyqtProperty, pyqtSignal from UM.i18n import i18nCatalog -i18n_catalog = i18nCatalog('plugins') +i18n_catalog = i18nCatalog("plugins") class USBPrinterManager(QObject, SignalEmitter, Extension): @@ -40,17 +40,17 @@ class USBPrinterManager(QObject, SignalEmitter, Extension): ## Add menu item to top menu of the application. self.addMenuItem(i18n_catalog.i18n("Update firmware"), self.updateAllFirmware) - pyqtError = pyqtSignal(str, arguments = ['amount']) - processingProgress = pyqtSignal(float, arguments = ['amount']) - pyqtExtruderTemperature = pyqtSignal(float, arguments = ['amount']) - pyqtBedTemperature = pyqtSignal(float, arguments = ['amount']) + pyqtError = pyqtSignal(str, arguments = ["amount"]) + processingProgress = pyqtSignal(float, arguments = ["amount"]) + pyqtExtruderTemperature = pyqtSignal(float, arguments = ["amount"]) + pyqtBedTemperature = pyqtSignal(float, arguments = ["amount"]) ## Show firmware interface. # This will create the view if its not already created. def spawnFirmwareInterface(self, serial_port): if self._firmware_view is None: self._firmware_view = QQuickView() - self._firmware_view.engine().rootContext().setContextProperty('manager',self) + self._firmware_view.engine().rootContext().setContextProperty("manager",self) self._firmware_view.setSource(QUrl("plugins/USBPrinting/FirmwareUpdateWindow.qml")) self._firmware_view.show() @@ -59,7 +59,7 @@ class USBPrinterManager(QObject, SignalEmitter, Extension): def spawnControlInterface(self,serial_port): if self._control_view is None: self._control_view = QQuickView() - self._control_view.engine().rootContext().setContextProperty('manager',self) + self._control_view.engine().rootContext().setContextProperty("manager",self) self._control_view.setSource(QUrl("plugins/USBPrinting/ControlWindow.qml")) self._control_view.show() @@ -105,7 +105,7 @@ class USBPrinterManager(QObject, SignalEmitter, Extension): if connection != None: self._printer_connections.remove(connection) connection.close() - time.sleep(5) # Throttle, as we don't need this information to be updated every single second. + time.sleep(5) # Throttle, as we don"t need this information to be updated every single second. def updateAllFirmware(self): self.spawnFirmwareInterface("") @@ -122,13 +122,13 @@ class USBPrinterManager(QObject, SignalEmitter, Extension): machine_type = Application.getInstance().getActiveMachine().getTypeID() firmware_name = "" baudrate = 250000 - if sys.platform.startswith('linux'): + if sys.platform.startswith("linux"): baudrate = 115200 if machine_type == "ultimaker_original": - firmware_name = 'MarlinUltimaker' - firmware_name += '-%d' % (baudrate) + firmware_name = "MarlinUltimaker" + firmware_name += "-%d" % (baudrate) elif machine_type == "ultimaker_original_plus": - firmware_name = 'MarlinUltimaker-UMOP-%d' % (baudrate) + firmware_name = "MarlinUltimaker-UMOP-%d" % (baudrate) elif machine_type == "Witbox": return "MarlinWitbox.hex" elif machine_type == "ultimaker2go": @@ -220,22 +220,22 @@ class USBPrinterManager(QObject, SignalEmitter, Extension): connection = self.getConnectionByPort(serial_port) if connection.isConnected(): Application.getInstance().addOutputDevice(serial_port, { - 'id': serial_port, - 'function': self.spawnControlInterface, - 'description': 'Write to USB {0}'.format(serial_port), - 'icon': 'print_usb', - 'priority': 1 + "id": serial_port, + "function": self.spawnControlInterface, + "description": "Write to USB {0}".format(serial_port), + "icon": "print_usb", + "priority": 1 }) else: Application.getInstance().removeOutputDevice(serial_port) @pyqtSlot() def startPrint(self): - gcode_list = getattr(Application.getInstance().getController().getScene(), 'gcode_list', None) + gcode_list = getattr(Application.getInstance().getController().getScene(), "gcode_list", None) if gcode_list: final_list = [] for gcode in gcode_list: - final_list += gcode.split('\n') + final_list += gcode.split("\n") self.sendGCodeToAllActive(gcode_list) ## Get a list of printer connection objects that are connected. @@ -260,15 +260,15 @@ class USBPrinterManager(QObject, SignalEmitter, Extension): i = 0 while True: values = winreg.EnumValue(key, i) - if not base_list or 'USBSER' in values[0]: + if not base_list or "USBSER" in values[0]: base_list += [values[1]] i += 1 except Exception as e: pass if base_list: - base_list = base_list + glob.glob('/dev/ttyUSB*') + glob.glob('/dev/ttyACM*') + glob.glob("/dev/cu.usb*") - base_list = filter(lambda s: 'Bluetooth' not in s, base_list) # Filter because mac sometimes puts them in the list + base_list = base_list + glob.glob("/dev/ttyUSB*") + glob.glob("/dev/ttyACM*") + glob.glob("/dev/cu.usb*") + base_list = filter(lambda s: "Bluetooth" not in s, base_list) # Filter because mac sometimes puts them in the list else: - base_list = base_list + glob.glob('/dev/ttyUSB*') + glob.glob('/dev/ttyACM*') + glob.glob("/dev/cu.*") + glob.glob("/dev/tty.usb*") + glob.glob("/dev/rfcomm*") + glob.glob('/dev/serial/by-id/*') - return base_list \ No newline at end of file + base_list = base_list + glob.glob("/dev/ttyUSB*") + glob.glob("/dev/ttyACM*") + glob.glob("/dev/cu.*") + glob.glob("/dev/tty.usb*") + glob.glob("/dev/rfcomm*") + glob.glob("/dev/serial/by-id/*") + return base_list diff --git a/plugins/USBPrinting/__init__.py b/plugins/USBPrinting/__init__.py index bd81d0cdce..3ddc66fb23 100644 --- a/plugins/USBPrinting/__init__.py +++ b/plugins/USBPrinting/__init__.py @@ -2,16 +2,16 @@ from . import USBPrinterManager from UM.i18n import i18nCatalog -i18n_catalog = i18nCatalog('cura') +i18n_catalog = i18nCatalog("cura") def getMetaData(): return { - 'type': 'extension', - 'plugin': { - 'name': 'USB printing', - 'author': 'Jaime van Kessel', - 'version': '1.0', - 'description': i18n_catalog.i18nc('usb printing description','Accepts G-Code and sends them to a printer. Plugin can also update firmware') + "type": "extension", + "plugin": { + "name": "USB printing", + "author": "Jaime van Kessel", + "version": "1.0", + "description": i18n_catalog.i18nc("usb printing description","Accepts G-Code and sends them to a printer. Plugin can also update firmware") } } diff --git a/resources/qml/Printer.qml b/resources/qml/Printer.qml index 1d7b6e2b1f..3581464fe0 100644 --- a/resources/qml/Printer.qml +++ b/resources/qml/Printer.qml @@ -268,7 +268,7 @@ UM.MainWindow { id: preferences Component.onCompleted: { - insertPage(1, qsTr('View'), 'view-preview', Qt.resolvedUrl('./ViewPage.qml')); + insertPage(1, qsTr("View"), "view-preview", Qt.resolvedUrl("./ViewPage.qml")); } } diff --git a/resources/qml/PrinterToolbar.qml b/resources/qml/PrinterToolbar.qml index 664981ec2f..37911bc6b5 100644 --- a/resources/qml/PrinterToolbar.qml +++ b/resources/qml/PrinterToolbar.qml @@ -32,7 +32,7 @@ Item { checkable: true; checked: model.active; - //Workaround since using ToolButton's onClicked would break the binding of the checked property, instead + //Workaround since using ToolButton"s onClicked would break the binding of the checked property, instead //just catch the click so we do not trigger that behaviour. MouseArea { anchors.fill: parent; diff --git a/resources/qml/SaveButton.qml b/resources/qml/SaveButton.qml index a44170257d..65cfbd2641 100644 --- a/resources/qml/SaveButton.qml +++ b/resources/qml/SaveButton.qml @@ -15,7 +15,7 @@ Button { enabled: progress >= 0.95; - property string currentDevice: 'local_file' + property string currentDevice: "local_file" property bool defaultOverride: false; property bool defaultAmbiguous: false; diff --git a/resources/qml/Sidebar.qml b/resources/qml/Sidebar.qml index f56c69fe4e..c4e033a760 100644 --- a/resources/qml/Sidebar.qml +++ b/resources/qml/Sidebar.qml @@ -50,13 +50,13 @@ UM.AngledCornerRectangle { modesModel: modesListModel; currentModeIndex: { - var index = parseInt(UM.Preferences.getValue('cura/active_mode')) + var index = parseInt(UM.Preferences.getValue("cura/active_mode")) if(index) { return index; } return 0; } - onCurrentModeIndexChanged: UM.Preferences.setValue('cura/active_mode', currentModeIndex); + onCurrentModeIndexChanged: UM.Preferences.setValue("cura/active_mode", currentModeIndex); } Loader { diff --git a/resources/qml/SidebarSimple.qml b/resources/qml/SidebarSimple.qml index 8c42dc9cf2..a80843d2e6 100644 --- a/resources/qml/SidebarSimple.qml +++ b/resources/qml/SidebarSimple.qml @@ -102,8 +102,8 @@ Item { style: UM.Theme.styles.checkbox; - checked: Printer.getSettingValue('support_enable'); - onCheckedChanged: Printer.setSettingValue('support_enable', checked); + checked: Printer.getSettingValue("support_enable"); + onCheckedChanged: Printer.setSettingValue("support_enable", checked); } Item { Layout.fillWidth: true; Layout.fillHeight: true; } diff --git a/resources/qml/ViewPage.qml b/resources/qml/ViewPage.qml index 2490a3049a..a388bd8e6f 100644 --- a/resources/qml/ViewPage.qml +++ b/resources/qml/ViewPage.qml @@ -10,15 +10,15 @@ UM.PreferencesPage { function reset() { - UM.Preferences.resetPreference('view/show_overhang'); + UM.Preferences.resetPreference("view/show_overhang"); } GridLayout { columns: 2; CheckBox { - checked: UM.Preferences.getValue('view/show_overhang'); - onCheckedChanged: UM.Preferences.setValue('view/show_overhang', checked) + checked: UM.Preferences.getValue("view/show_overhang"); + onCheckedChanged: UM.Preferences.setValue("view/show_overhang", checked) //: Display Overhang preference checkbox text: qsTr("Display Overhang"); diff --git a/setup.py b/setup.py index f3d651415b..b0ad91f1f1 100644 --- a/setup.py +++ b/setup.py @@ -7,23 +7,23 @@ import re import shutil import site -includes = ['sip', 'ctypes', 'UM', 'PyQt5.QtNetwork', 'PyQt5._QOpenGLFunctions_2_0', 'serial', 'Arcus', 'google', 'google.protobuf', 'google.protobuf.descriptor', 'xml.etree', 'xml.etree.ElementTree', 'src'] +includes = ["sip", "ctypes", "UM", "PyQt5.QtNetwork", "PyQt5._QOpenGLFunctions_2_0", "serial", "Arcus", "google", "google.protobuf", "google.protobuf.descriptor", "xml.etree", "xml.etree.ElementTree", "src"] # Include all the UM modules in the includes. As py2exe fails to properly find all the dependencies due to the plugin architecture. for dirpath, dirnames, filenames in os.walk(os.path.dirname(UM.__file__)): - if '__' in dirpath: + if "__" in dirpath: continue - module_path = dirpath.replace(os.path.dirname(UM.__file__), 'UM') + module_path = dirpath.replace(os.path.dirname(UM.__file__), "UM") module_path = module_path.split(os.path.sep) - module_name = '.'.join(module_path) - if os.path.isfile(dirpath + '/__init__.py'): + module_name = ".".join(module_path) + if os.path.isfile(dirpath + "/__init__.py"): includes += [module_name] for filename in filenames: - if '__' in filename or not filename.endswith('.py'): + if "__" in filename or not filename.endswith(".py"): continue - includes += [module_name + '.' + os.path.splitext(filename)[0]] + includes += [module_name + "." + os.path.splitext(filename)[0]] -print('Removing previous distribution package') -shutil.rmtree('dist', True) +print("Removing previous distribution package") +shutil.rmtree("dist", True) setup(name="Cura", version="2.0", @@ -36,24 +36,24 @@ setup(name="Cura", console=[{"script": "printer.py"}], options={"py2exe": {"skip_archive": False, "includes": includes}}) -print('Coping Cura plugins.') -shutil.copytree(os.path.dirname(UM.__file__) + '/../plugins', 'dist/plugins') -for path in os.listdir('plugins'): - shutil.copytree('plugins/' + path, 'dist/plugins/' + path) -print('Coping resources.') -shutil.copytree(os.path.dirname(UM.__file__) + '/../resources', 'dist/resources') -shutil.copytree('resources/qml', 'dist/resources/qml') -shutil.copytree('resources/themes', 'dist/resources/themes') -print('Coping Uranium QML.') -shutil.copytree(os.path.dirname(UM.__file__) + '/Qt/qml/UM', 'dist/qml/UM') +print("Coping Cura plugins.") +shutil.copytree(os.path.dirname(UM.__file__) + "/../plugins", "dist/plugins") +for path in os.listdir("plugins"): + shutil.copytree("plugins/" + path, "dist/plugins/" + path) +print("Coping resources.") +shutil.copytree(os.path.dirname(UM.__file__) + "/../resources", "dist/resources") +shutil.copytree("resources/qml", "dist/resources/qml") +shutil.copytree("resources/themes", "dist/resources/themes") +print("Coping Uranium QML.") +shutil.copytree(os.path.dirname(UM.__file__) + "/Qt/qml/UM", "dist/qml/UM") for site_package in site.getsitepackages(): - qt_origin_path = os.path.join(site_package, 'PyQt5') + qt_origin_path = os.path.join(site_package, "PyQt5") if os.path.isdir(qt_origin_path): - print('Coping PyQt5 plugins from: %s' % qt_origin_path) - shutil.copytree(os.path.join(qt_origin_path, 'plugins'), 'dist/PyQt5/plugins') - print('Coping PyQt5 QtQuick from: %s' % qt_origin_path) - shutil.copytree(os.path.join(qt_origin_path, 'qml/QtQuick'), 'dist/qml/QtQuick') - shutil.copytree(os.path.join(qt_origin_path, 'qml/QtQuick.2'), 'dist/qml/QtQuick.2') - print('Coping PyQt5 svg library from: %s' % qt_origin_path) - shutil.copy(os.path.join(qt_origin_path, 'Qt5Svg.dll'), 'dist/Qt5Svg.dll') -os.rename('dist/printer.exe', 'dist/Cura.exe') + print("Coping PyQt5 plugins from: %s" % qt_origin_path) + shutil.copytree(os.path.join(qt_origin_path, "plugins"), "dist/PyQt5/plugins") + print("Coping PyQt5 QtQuick from: %s" % qt_origin_path) + shutil.copytree(os.path.join(qt_origin_path, "qml/QtQuick"), "dist/qml/QtQuick") + shutil.copytree(os.path.join(qt_origin_path, "qml/QtQuick.2"), "dist/qml/QtQuick.2") + print("Coping PyQt5 svg library from: %s" % qt_origin_path) + shutil.copy(os.path.join(qt_origin_path, "Qt5Svg.dll"), "dist/Qt5Svg.dll") +os.rename("dist/printer.exe", "dist/Cura.exe") diff --git a/src/BuildVolume.py b/src/BuildVolume.py index c8fcc48a02..c6293e1d5d 100644 --- a/src/BuildVolume.py +++ b/src/BuildVolume.py @@ -48,15 +48,15 @@ class BuildVolume(SceneNode): if not self._material: self._material = renderer.createMaterial( - Resources.getPath(Resources.ShadersLocation, 'basic.vert'), - Resources.getPath(Resources.ShadersLocation, 'vertexcolor.frag') + Resources.getPath(Resources.ShadersLocation, "basic.vert"), + Resources.getPath(Resources.ShadersLocation, "vertexcolor.frag") ) self._grid_material = renderer.createMaterial( - Resources.getPath(Resources.ShadersLocation, 'basic.vert'), - Resources.getPath(Resources.ShadersLocation, 'grid.frag') + Resources.getPath(Resources.ShadersLocation, "basic.vert"), + Resources.getPath(Resources.ShadersLocation, "grid.frag") ) - self._grid_material.setUniformValue('u_gridColor0', Color(245, 245, 245, 255)) - self._grid_material.setUniformValue('u_gridColor1', Color(205, 202, 201, 255)) + self._grid_material.setUniformValue("u_gridColor0", Color(245, 245, 245, 255)) + self._grid_material.setUniformValue("u_gridColor1", Color(205, 202, 201, 255)) renderer.queueNode(self, material = self._material, mode = Renderer.RenderLines) renderer.queueNode(self, mesh = self._grid_mesh, material = self._grid_material) diff --git a/src/ConvexHullNode.py b/src/ConvexHullNode.py index fb760b874a..647737fbce 100644 --- a/src/ConvexHullNode.py +++ b/src/ConvexHullNode.py @@ -47,9 +47,9 @@ class ConvexHullNode(SceneNode): def render(self, renderer): if not self._material: - self._material = renderer.createMaterial(Resources.getPath(Resources.ShadersLocation, 'basic.vert'), Resources.getPath(Resources.ShadersLocation, 'color.frag')) + self._material = renderer.createMaterial(Resources.getPath(Resources.ShadersLocation, "basic.vert"), Resources.getPath(Resources.ShadersLocation, "color.frag")) - self._material.setUniformValue('u_color', Color(35, 35, 35, 128)) + self._material.setUniformValue("u_color", Color(35, 35, 35, 128)) renderer.queueNode(self, material = self._material, transparent = True) diff --git a/src/PlatformPhysics.py b/src/PlatformPhysics.py index d2935cf5c7..0b27c27460 100644 --- a/src/PlatformPhysics.py +++ b/src/PlatformPhysics.py @@ -52,8 +52,8 @@ class PlatformPhysics: move_vector.setY(-bbox.bottom) # If there is no convex hull for the node, start calculating it and continue. - if not hasattr(node, '_convex_hull'): - if not hasattr(node, '_convex_hull_job'): + if not hasattr(node, "_convex_hull"): + if not hasattr(node, "_convex_hull_job"): job = ConvexHullJob.ConvexHullJob(node) job.start() node._convex_hull_job = job @@ -65,7 +65,7 @@ class PlatformPhysics: continue # Ignore nodes that do not have the right properties set. - if not hasattr(other_node, '_convex_hull') or not other_node.getBoundingBox(): + if not hasattr(other_node, "_convex_hull") or not other_node.getBoundingBox(): continue # Check to see if the bounding boxes intersect. If not, we can ignore the node as there is no way the hull intersects. diff --git a/src/PlatformPhysicsOperation.py b/src/PlatformPhysicsOperation.py index b1dff81cc7..7a73b38297 100644 --- a/src/PlatformPhysicsOperation.py +++ b/src/PlatformPhysicsOperation.py @@ -27,4 +27,4 @@ class PlatformPhysicsOperation(Operation): return group def __repr__(self): - return 'PlatformPhysicsOperation(t = {0})'.format(self._position) + return "PlatformPhysicsOperation(t = {0})".format(self._position) diff --git a/src/PrintInformation.py b/src/PrintInformation.py index ef34c37ddf..88786085f6 100644 --- a/src/PrintInformation.py +++ b/src/PrintInformation.py @@ -168,27 +168,27 @@ class PrintInformation(QObject): 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')) + 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')) + 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': + if options["minimum"] == "low": minimum_value = self._low_quality_settings.getSettingValueByKey(key) - elif options['minimum'] == 'high': + elif options["minimum"] == "high": minimum_value = self._high_quality_settings.getSettingValueByKey(key) else: continue maximum_value = None - if options['maximum'] == 'low': + if options["maximum"] == "low": maximum_value = self._low_quality_settings.getSettingValueByKey(key) - elif options['maximum'] == 'high': + elif options["maximum"] == "high": maximum_value = self._high_quality_settings.getSettingValueByKey(key) else: continue diff --git a/src/PrinterApplication.py b/src/PrinterApplication.py index b42c1339f6..3fc3a1bf6c 100644 --- a/src/PrinterApplication.py +++ b/src/PrinterApplication.py @@ -35,41 +35,42 @@ from PyQt5.QtGui import QColor import sys import os.path import numpy -numpy.seterr(all='ignore') +numpy.seterr(all="ignore") class PrinterApplication(QtApplication): def __init__(self): - if not hasattr(sys, 'frozen'): - Resources.addResourcePath(os.path.join(os.path.abspath(os.path.dirname(__file__)), '..')) + if not hasattr(sys, "frozen"): + Resources.addResourcePath(os.path.join(os.path.abspath(os.path.dirname(__file__)), "..")) - super().__init__(name = 'cura', version = "master") + super().__init__(name = "cura", version = "master") self.setRequiredPlugins([ - 'CuraEngineBackend', - 'MeshView', - 'LayerView', - 'STLReader', - 'SelectionTool', - 'CameraTool', - 'GCodeWriter', - 'LocalFileStorage' + "CuraEngineBackend", + "MeshView", + "LayerView", + "STLReader", + "SelectionTool", + "CameraTool", + "GCodeWriter", + "LocalFileStorage" ]) self._physics = None self._volume = None self._platform = None self._output_devices = {} self._print_information = None + self._i18n_catalog = None self.activeMachineChanged.connect(self._onActiveMachineChanged) - Preferences.getInstance().addPreference('cura/active_machine', '') - Preferences.getInstance().addPreference('cura/active_mode', 'simple') + Preferences.getInstance().addPreference("cura/active_machine", "") + Preferences.getInstance().addPreference("cura/active_mode", "simple") ## Handle loading of all plugin types (and the backend explicitly) # \sa PluginRegistery def _loadPlugins(self): - if not hasattr(sys, 'frozen'): - self._plugin_registry.addPluginLocation(os.path.join(os.path.abspath(os.path.dirname(__file__)), '..', 'plugins')) + if not hasattr(sys, "frozen"): + self._plugin_registry.addPluginLocation(os.path.join(os.path.abspath(os.path.dirname(__file__)), "..", "plugins")) self._plugin_registry.loadPlugins({ "type": "logger"}) self._plugin_registry.loadPlugins({ "type": "storage_device" }) @@ -79,20 +80,20 @@ class PrinterApplication(QtApplication): self._plugin_registry.loadPlugins({ "type": "tool" }) self._plugin_registry.loadPlugins({ "type": "extension" }) - self._plugin_registry.loadPlugin('CuraEngineBackend') + self._plugin_registry.loadPlugin("CuraEngineBackend") def run(self): - i18n_catalog = i18nCatalog("cura"); + self._i18n_catalog = i18nCatalog("cura"); self.addOutputDevice("local_file", { "id": "local_file", "function": self._writeToLocalFile, - "description": i18n_catalog.i18nc("Save button tooltip", "Save to Disk"), + "description": self._i18n_catalog.i18nc("Save button tooltip", "Save to Disk"), "icon": "save", "priority": 0 }) - self.showSplashMessage(i18n_catalog.i18nc("Splash screen message", "Setting up scene...")) + self.showSplashMessage(self._i18n_catalog.i18nc("Splash screen message", "Setting up scene...")) controller = self.getController() @@ -100,7 +101,7 @@ class PrinterApplication(QtApplication): controller.setCameraTool("CameraTool") controller.setSelectionTool("SelectionTool") - t = controller.getTool('TranslateTool') + t = controller.getTool("TranslateTool") if t: t.setEnabledAxis([ToolHandle.XAxis, ToolHandle.ZAxis]) @@ -116,25 +117,25 @@ class PrinterApplication(QtApplication): self._physics = PlatformPhysics.PlatformPhysics(controller, self._volume) - camera = Camera('3d', root) + camera = Camera("3d", root) camera.setPosition(Vector(-150, 150, 300)) camera.setPerspective(True) camera.lookAt(Vector(0, 0, 0)) self._camera_animation = CameraAnimation.CameraAnimation() - self._camera_animation.setCameraTool(self.getController().getTool('CameraTool')) + self._camera_animation.setCameraTool(self.getController().getTool("CameraTool")) - controller.getScene().setActiveCamera('3d') + controller.getScene().setActiveCamera("3d") - self.showSplashMessage(i18n_catalog.i18nc("Splash screen message", "Loading interface...")) + self.showSplashMessage(self._i18n_catalog.i18nc("Splash screen message", "Loading interface...")) self.setMainQml(Resources.getPath(Resources.QmlFilesLocation, "Printer.qml")) self.initializeEngine() - self.getStorageDevice('LocalFileStorage').removableDrivesChanged.connect(self._removableDrivesChanged) + self.getStorageDevice("LocalFileStorage").removableDrivesChanged.connect(self._removableDrivesChanged) if self.getMachines(): - active_machine_pref = Preferences.getInstance().getValue('cura/active_machine') + active_machine_pref = Preferences.getInstance().getValue("cura/active_machine") if active_machine_pref: for machine in self.getMachines(): if machine.getName() == active_machine_pref: @@ -152,16 +153,16 @@ class PrinterApplication(QtApplication): self.exec_() def registerObjects(self, engine): - engine.rootContext().setContextProperty('Printer', self) + engine.rootContext().setContextProperty("Printer", self) self._print_information = PrintInformation.PrintInformation() - engine.rootContext().setContextProperty('PrintInformation', self._print_information) + engine.rootContext().setContextProperty("PrintInformation", self._print_information) def onSelectionChanged(self): if Selection.hasSelection(): if not self.getController().getActiveTool(): - self.getController().setActiveTool('TranslateTool') + self.getController().setActiveTool("TranslateTool") - self._camera_animation.setStart(self.getController().getTool('CameraTool').getOrigin()) + self._camera_animation.setStart(self.getController().getTool("CameraTool").getOrigin()) self._camera_animation.setTarget(Selection.getSelectedObject(0).getWorldPosition()) self._camera_animation.start() else: @@ -171,7 +172,7 @@ class PrinterApplication(QtApplication): requestAddPrinter = pyqtSignal() ## Remove an object from the scene - @pyqtSlot('quint64') + @pyqtSlot("quint64") def deleteObject(self, object_id): object = self.getController().getScene().findObject(object_id) @@ -180,7 +181,7 @@ class PrinterApplication(QtApplication): op.push() ## Create a number of copies of existing object. - @pyqtSlot('quint64', int) + @pyqtSlot("quint64", int) def multiplyObject(self, object_id, count): node = self.getController().getScene().findObject(object_id) @@ -196,7 +197,7 @@ class PrinterApplication(QtApplication): op.push() ## Center object on platform. - @pyqtSlot('quint64') + @pyqtSlot("quint64") def centerObject(self, object_id): node = self.getController().getScene().findObject(object_id) @@ -290,15 +291,15 @@ class PrinterApplication(QtApplication): outputDevicesChanged = pyqtSignal() - @pyqtProperty('QVariantMap', notify = outputDevicesChanged) + @pyqtProperty("QVariantMap", notify = outputDevicesChanged) def outputDevices(self): return self._output_devices - @pyqtProperty('QStringList', notify = outputDevicesChanged) + @pyqtProperty("QStringList", notify = outputDevicesChanged) def outputDeviceNames(self): return self._output_devices.keys() - @pyqtSlot(str, result = 'QVariant') + @pyqtSlot(str, result = "QVariant") def getSettingValue(self, key): if not self.getActiveMachine(): return None @@ -306,7 +307,7 @@ class PrinterApplication(QtApplication): return self.getActiveMachine().getSettingValueByKey(key) ## Change setting by key value pair - @pyqtSlot(str, 'QVariant') + @pyqtSlot(str, "QVariant") def setSettingValue(self, key, value): if not self.getActiveMachine(): return @@ -336,7 +337,7 @@ class PrinterApplication(QtApplication): @pyqtSlot(str) def writeToOutputDevice(self, device): - self._output_devices[device]['function'](device) + self._output_devices[device]["function"](device) writeToLocalFileRequested = pyqtSignal() @@ -349,12 +350,12 @@ class PrinterApplication(QtApplication): continue try: - path = self.getStorageDevice('LocalFileStorage').getRemovableDrives()[device] + path = self.getStorageDevice("LocalFileStorage").getRemovableDrives()[device] except KeyError: - Logger.log('e', 'Tried to write to unknown SD card %s', device) + Logger.log("e", "Tried to write to unknown SD card %s", device) return - filename = os.path.join(path, node.getName()[0:node.getName().rfind('.')] + '.gcode') + filename = os.path.join(path, node.getName()[0:node.getName().rfind(".")] + ".gcode") job = WriteMeshJob(filename, node.getMeshData()) job._sdcard = device @@ -363,7 +364,7 @@ class PrinterApplication(QtApplication): return def _removableDrivesChanged(self): - drives = self.getStorageDevice('LocalFileStorage').getRemovableDrives() + drives = self.getStorageDevice("LocalFileStorage").getRemovableDrives() for drive in drives: if drive not in self._output_devices: self.addOutputDevice(drive, { @@ -377,7 +378,7 @@ class PrinterApplication(QtApplication): drives_to_remove = [] for device in self._output_devices: if device not in drives: - if self._output_devices[device]['function'] == self._writeToSD: + if self._output_devices[device]["function"] == self._writeToSD: drives_to_remove.append(device) for drive in drives_to_remove: @@ -386,13 +387,13 @@ class PrinterApplication(QtApplication): def _onActiveMachineChanged(self): machine = self.getActiveMachine() if machine: - Preferences.getInstance().setValue('cura/active_machine', machine.getName()) + Preferences.getInstance().setValue("cura/active_machine", machine.getName()) - self._volume.setWidth(machine.getSettingValueByKey('machine_width')) - self._volume.setHeight(machine.getSettingValueByKey('machine_height')) - self._volume.setDepth(machine.getSettingValueByKey('machine_depth')) + self._volume.setWidth(machine.getSettingValueByKey("machine_width")) + self._volume.setHeight(machine.getSettingValueByKey("machine_height")) + self._volume.setDepth(machine.getSettingValueByKey("machine_depth")) - disallowed_areas = machine.getSettingValueByKey('machine_disallowed_areas') + disallowed_areas = machine.getSettingValueByKey("machine_disallowed_areas") areas = [] if disallowed_areas: @@ -407,10 +408,10 @@ class PrinterApplication(QtApplication): self._volume.rebuild() - if self.getController().getTool('ScaleTool'): - self.getController().getTool('ScaleTool').setMaximumBounds(self._volume.getBoundingBox()) + if self.getController().getTool("ScaleTool"): + self.getController().getTool("ScaleTool").setMaximumBounds(self._volume.getBoundingBox()) - offset = machine.getSettingValueByKey('machine_platform_offset') + offset = machine.getSettingValueByKey("machine_platform_offset") if offset: self._platform.setPosition(Vector(offset[0], offset[1], offset[2])) else: @@ -423,10 +424,11 @@ class PrinterApplication(QtApplication): self._i18n_catalog.i18nc("Message action", "Eject"), "eject", self._i18n_catalog.i18nc("Message action tooltip, {0} is sdcard", "Eject SD Card {0}".format(job._sdcard)) + ) message._sdcard = job._sdcard message.actionTriggered.connect(self._onMessageActionTriggered) message.show() def _onMessageActionTriggered(self, message, action): - if action == "Eject": + if action == "eject": self.getStorageDevice("LocalFileStorage").ejectRemovableDrive(message._sdcard)