diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index 679911bb0a..6297efb747 100644 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -1031,4 +1031,68 @@ class CuraApplication(QtApplication): def log(self, msg): Logger.log("d", msg) + _loading_files = [] + _non_sliceable_extensions = [".gcode", ".g"] + + @pyqtSlot(QUrl) + def readLocalFile(self, file): + if not file.isValid(): + return + + scene = self.getController().getScene() + + for node in DepthFirstIterator(scene.getRoot()): + if node.callDecoration("shouldBlockSlicing"): + self.deleteAll() + break + + f = file.toLocalFile() + extension = os.path.splitext(f)[1] + filename = os.path.basename(f) + if len(self._loading_files) > 0: + # If a non-slicable file is already being loaded, we prevent loading of any further non-slicable files + if extension.lower() in self._non_sliceable_extensions: + message = Message( + self._i18n_catalog.i18nc("@info:status", + "Only one G-code file can be loaded at a time. Skipped importing {0}", + filename)) + message.show() + return + # If file being loaded is non-slicable file, then prevent loading of any other files + extension = os.path.splitext(self._loading_files[0])[1] + if extension.lower() in self._non_sliceable_extensions: + message = Message( + self._i18n_catalog.i18nc("@info:status", + "Can't open any other file if G-code is loading. Skipped importing {0}", + filename)) + message.show() + return + + self._loading_files.append(f) + if extension in self._non_sliceable_extensions: + self.deleteAll() + + job = ReadMeshJob(f) + job.finished.connect(self._readMeshFinished) + job.start() + + def _readMeshFinished(self, job): + node = job.getResult() + filename = job.getFileName() + self._loading_files.remove(filename) + + if node != None: + node.setSelectable(True) + node.setName(os.path.basename(filename)) + + extension = os.path.splitext(filename)[1] + if extension.lower() in self._non_sliceable_extensions: + self.changeLayerViewSignal.emit() + + scene = self.getController().getScene() + + op = AddSceneNodeOperation(node, scene.getRoot()) + op.push() + + scene.sceneChanged.emit(node) diff --git a/plugins/CuraEngineBackend/CuraEngineBackend.py b/plugins/CuraEngineBackend/CuraEngineBackend.py index db5e256d81..44009ae1de 100644 --- a/plugins/CuraEngineBackend/CuraEngineBackend.py +++ b/plugins/CuraEngineBackend/CuraEngineBackend.py @@ -191,7 +191,7 @@ class CuraEngineBackend(Backend): def pauseSlicing(self): self.close() self._pause_slicing = True - self.backendStateChange.emit(BackendState.SlicingDisabled) + self.backendStateChange.emit(BackendState.Disabled) def continueSlicing(self): if self._pause_slicing: diff --git a/plugins/GCodeReader/GCodeReader.py b/plugins/GCodeReader/GCodeReader.py index ef278a0019..e9aea36fae 100644 --- a/plugins/GCodeReader/GCodeReader.py +++ b/plugins/GCodeReader/GCodeReader.py @@ -223,7 +223,7 @@ class GCodeReader(MeshReader): for line in file: if self._cancelled: - Logger.log("i", "Parsing %s cancelled" % file_name) + Logger.log("d", "Parsing %s cancelled" % file_name) return None current_line += 1 if current_line % file_step == 0: diff --git a/resources/qml/Cura.qml b/resources/qml/Cura.qml index 8eb3cf850e..1383338144 100644 --- a/resources/qml/Cura.qml +++ b/resources/qml/Cura.qml @@ -275,7 +275,7 @@ UM.MainWindow // There is no endsWith in this version of JS... if ((drop.urls[i].length <= 12) || (drop.urls[i].substring(drop.urls[i].length-12) !== ".curaprofile")) { // Drop an object - UM.MeshFileHandler.readLocalFile(drop.urls[i]); + Printer.readLocalFile(drop.urls[i]); if (imported_model == -1) { imported_model = i; @@ -737,7 +737,7 @@ UM.MainWindow for(var i in fileUrls) { - UM.MeshFileHandler.readLocalFile(fileUrls[i]) + Printer.readLocalFile(fileUrls[i]) } var meshName = backgroundItem.getMeshName(fileUrls[0].toString()) diff --git a/resources/qml/Menus/RecentFilesMenu.qml b/resources/qml/Menus/RecentFilesMenu.qml index c47fc5715b..866b06ccbb 100644 --- a/resources/qml/Menus/RecentFilesMenu.qml +++ b/resources/qml/Menus/RecentFilesMenu.qml @@ -26,7 +26,7 @@ Menu return (index + 1) + ". " + path.slice(path.lastIndexOf("/") + 1); } onTriggered: { - UM.MeshFileHandler.readLocalFile(modelData); + Printer.readLocalFile(modelData); var meshName = backgroundItem.getMeshName(modelData.toString()) backgroundItem.hasMesh(decodeURIComponent(meshName)) }