diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index c5db2b01e7..b53b351ac2 100644 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -19,6 +19,9 @@ from UM.SaveFile import SaveFile from UM.Scene.Selection import Selection from UM.Scene.GroupDecorator import GroupDecorator from UM.Settings.Validator import Validator +from types import MethodType + +from UM.Qt.Bindings.MeshFileHandlerProxy import MeshFileHandlerProxy from UM.Operations.AddSceneNodeOperation import AddSceneNodeOperation from UM.Operations.RemoveSceneNodeOperation import RemoveSceneNodeOperation @@ -535,6 +538,54 @@ class CuraApplication(QtApplication): qmlRegisterType(QUrl.fromLocalFile(path), "Cura", 1, 0, type_name) + loadingFiles = [] + + @pyqtSlot(QUrl) + def loadFile(self, file): + scene = self.getController().getScene() + + def findAny(): + for node1 in DepthFirstIterator(scene.getRoot()): + if hasattr(node1, "gcode") and getattr(node1, "gcode") is True: + return True + return False + if findAny(): + self.deleteAll() + + if not file.isValid(): + return + + supported_extensions = [".gcode", ".g"] + + f = file.toLocalFile() + + if len(self.loadingFiles) > 0: + extension = os.path.splitext(f)[1] + if extension.lower() in supported_extensions: + return + extension = os.path.splitext(self.loadingFiles[0])[1] + if extension.lower() in supported_extensions: + return + + self.loadingFiles.append(f) + + job = ReadMeshJob(f) + job.finished.connect(self._readMeshFinished) + job.start() + + def _readMeshFinished(self, job): + node = job.getResult() + if node != None: + filename = job.getFileName() + node.setSelectable(True) + node.setName(filename) + self.loadingFiles.remove(filename) + + op = AddSceneNodeOperation(node, self.getController().getScene().getRoot()) + op.push() + + self.getController().getScene().sceneChanged.emit(node) + def onSelectionChanged(self): if Selection.hasSelection(): if self.getController().getActiveTool(): diff --git a/plugins/GCODEReader/GCODEReader.py b/plugins/GCODEReader/GCODEReader.py index 4b13f03220..1420a9d081 100644 --- a/plugins/GCODEReader/GCODEReader.py +++ b/plugins/GCODEReader/GCODEReader.py @@ -14,11 +14,13 @@ from UM.Math.AxisAlignedBox import AxisAlignedBox from UM.Application import Application from UM.Preferences import Preferences + from cura import LayerDataBuilder from cura import LayerDataDecorator from cura import LayerPolygon import numpy +from types import MethodType from UM.Job import Job diff --git a/resources/qml/Cura.qml b/resources/qml/Cura.qml index e4843f7eb5..4a6a780305 100644 --- a/resources/qml/Cura.qml +++ b/resources/qml/Cura.qml @@ -269,16 +269,16 @@ UM.MainWindow if(drop.urls.length > 0) { // Import models + var imported_model = -1; for(var i in drop.urls) { // 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]); - if (i == drop.urls.length - 1) + Printer.loadFile(drop.urls[i]); + if (imported_model == -1) { - var meshName = backgroundItem.getMeshName(drop.urls[i].toString()); - backgroundItem.hasMesh(decodeURIComponent(meshName)); + imported_model = i; } } } @@ -297,6 +297,11 @@ UM.MainWindow } messageDialog.open() } + if (imported_model != -1) + { + var meshName = backgroundItem.getMeshName(drop.urls[imported_model].toString()) + backgroundItem.hasMesh(decodeURIComponent(meshName)) + } } } } @@ -732,14 +737,11 @@ UM.MainWindow for(var i in fileUrls) { - UM.MeshFileHandler.readLocalFile(fileUrls[i]) - - if (i == fileUrls.length - 1) - { - var meshName = backgroundItem.getMeshName(fileUrls.toString()) - backgroundItem.hasMesh(decodeURIComponent(meshName)) - } + Printer.loadFile(fileUrls[i]) } + + var meshName = backgroundItem.getMeshName(fileUrls[0].toString()) + backgroundItem.hasMesh(decodeURIComponent(meshName)) } } diff --git a/resources/qml/Menus/RecentFilesMenu.qml b/resources/qml/Menus/RecentFilesMenu.qml index c47fc5715b..4453be6887 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.loadFile(modelData); var meshName = backgroundItem.getMeshName(modelData.toString()) backgroundItem.hasMesh(decodeURIComponent(meshName)) }