diff --git a/OutputGCodeButton.qml b/OutputGCodeButton.qml index 1c9a18f98e..d94b51319a 100644 --- a/OutputGCodeButton.qml +++ b/OutputGCodeButton.qml @@ -13,7 +13,7 @@ Rectangle { border.color: UM.Theme.borderColor; signal saveRequested(); - signal saveToSdRequested(); + signal saveToSDRequested(); Label { id: label; @@ -55,7 +55,7 @@ Rectangle { onClicked: { switch(base.state) { case 'sdcard': - base.saveToSdRequested(); + base.saveToSDRequested(); break; default: base.saveRequested(); diff --git a/Printer.qml b/Printer.qml index 06d4bc245e..0283e2d1fc 100644 --- a/Printer.qml +++ b/Printer.qml @@ -180,6 +180,7 @@ UM.MainWindow { height: 40; onSaveRequested: actions.save.trigger(); + onSaveToSDRequested: Printer.saveToSD() } UM.MessageStack { diff --git a/PrinterApplication.py b/PrinterApplication.py index 82043f91cf..6bf527c3da 100644 --- a/PrinterApplication.py +++ b/PrinterApplication.py @@ -6,6 +6,8 @@ from UM.Math.Vector import Vector from UM.Math.Matrix import Matrix from UM.Resources import Resources from UM.Scene.ToolHandle import ToolHandle +from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator +from UM.Mesh.WriteMeshJob import WriteMeshJob from UM.Scene.BoxRenderer import BoxRenderer from UM.Scene.Selection import Selection @@ -132,6 +134,20 @@ class PrinterApplication(QtApplication): def removableDrives(self): return list(self.getStorageDevice('LocalFileStorage').getRemovableDrives().keys()) + @pyqtSlot() + def saveToSD(self): + for node in DepthFirstIterator(self.getController().getScene().getRoot()): + if type(node) is not SceneNode or not node.getMeshData(): + continue + + drives = self.getStorageDevice('LocalFileStorage').getRemovableDrives() + path = next(iter(drives.values())) + filename = os.path.join(path, node.getName()[0:node.getName().rfind('.')] + '.gcode') + + job = WriteMeshJob(filename, node.getMeshData()) + job.start() + return + def _removableDrivesChanged(self): print(self.getStorageDevice('LocalFileStorage').getRemovableDrives()) self.removableDrivesChanged.emit()