From c0b4d4399591ed81ee907b0af77eeff86a23ad02 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 2 Mar 2017 15:42:36 +0100 Subject: [PATCH 1/3] Add hotkey for reload all models Small change. I can't be bothered to make an issue for this. --- resources/qml/Actions.qml | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/qml/Actions.qml b/resources/qml/Actions.qml index 8d74f1b67c..1a345deafa 100644 --- a/resources/qml/Actions.qml +++ b/resources/qml/Actions.qml @@ -262,6 +262,7 @@ Item id: reloadAllAction; text: catalog.i18nc("@action:inmenu menubar:file","Re&load All Models"); iconName: "document-revert"; + shortcut: "F5" onTriggered: Printer.reloadAll(); } From 1029fb4dddae90fbfee8900cf3c0786612e31e95 Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Thu, 2 Mar 2017 16:38:31 +0100 Subject: [PATCH 2/3] Not to trigger reslice happy anymore, only retrigger if necessary. Also using isSliceable instead of property check when inspecting root node. CURA-3413 CURA-3412 --- cura/CuraApplication.py | 18 ++------------- .../CuraEngineBackend/CuraEngineBackend.py | 22 +++++++++---------- plugins/SliceInfoPlugin/SliceInfo.py | 0 3 files changed, 12 insertions(+), 28 deletions(-) mode change 100644 => 100755 cura/CuraApplication.py mode change 100644 => 100755 plugins/SliceInfoPlugin/SliceInfo.py diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py old mode 100644 new mode 100755 index f28d2e4896..bd38bd8045 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -1094,18 +1094,6 @@ class CuraApplication(QtApplication): fileLoaded = pyqtSignal(str) - def _onFileLoaded(self, job): - nodes = job.getResult() - for node in nodes: - if node is not None: - self.fileLoaded.emit(job.getFileName()) - node.setSelectable(True) - node.setName(os.path.basename(job.getFileName())) - op = AddSceneNodeOperation(node, self.getController().getScene().getRoot()) - op.push() - - self.getController().getScene().sceneChanged.emit(node) #Force scene change. - def _onJobFinished(self, job): if type(job) is not ReadMeshJob or not job.getResult(): return @@ -1133,10 +1121,8 @@ class CuraApplication(QtApplication): else: Logger.log("w", "Could not find a mesh in reloaded node.") - def _openFile(self, file): - job = ReadMeshJob(os.path.abspath(file)) - job.finished.connect(self._onFileLoaded) - job.start() + def _openFile(self, filename): + self.readLocalFile(QUrl.fromLocalFile(filename)) def _addProfileReader(self, profile_reader): # TODO: Add the profile reader to the list of plug-ins that can be used when importing profiles. diff --git a/plugins/CuraEngineBackend/CuraEngineBackend.py b/plugins/CuraEngineBackend/CuraEngineBackend.py index 3aa226c518..981145bebd 100755 --- a/plugins/CuraEngineBackend/CuraEngineBackend.py +++ b/plugins/CuraEngineBackend/CuraEngineBackend.py @@ -342,11 +342,6 @@ class CuraEngineBackend(QObject, Backend): # # \param source The scene node that was changed. def _onSceneChanged(self, source): - if self._tool_active: - # do it later - self._postponed_scene_change_sources.append(source) - return - if type(source) is not SceneNode: return @@ -354,25 +349,27 @@ class CuraEngineBackend(QObject, Backend): if source == self._scene.getRoot(): num_objects = 0 for node in DepthFirstIterator(self._scene.getRoot()): - # For now this seems to be a reliable method to check for nodes that impact slicing - # From: SliceInfo, _onWriteStarted - if type(node) is not SceneNode or not node.getMeshData(): - continue - num_objects += 1 + # Only count sliceable objects + if node.callDecoration("isSliceable"): + num_objects += 1 if num_objects != self._last_num_objects: self._last_num_objects = num_objects root_scene_nodes_changed = True else: return - self.determineAutoSlicing() - if not source.callDecoration("isGroup") and not root_scene_nodes_changed: if source.getMeshData() is None: return if source.getMeshData().getVertices() is None: return + if self._tool_active: + # do it later, each source only has to be done once + if source not in self._postponed_scene_change_sources: + self._postponed_scene_change_sources.append(source) + return + self.needsSlicing() self.stopSlicing() self._onChanged() @@ -517,6 +514,7 @@ class CuraEngineBackend(QObject, Backend): # \param tool The tool that the user was using. def _onToolOperationStopped(self, tool): self._tool_active = False # React on scene change again + self.determineAutoSlicing() # Switch timer on if appropriate # Process all the postponed scene changes while self._postponed_scene_change_sources: source = self._postponed_scene_change_sources.pop(0) diff --git a/plugins/SliceInfoPlugin/SliceInfo.py b/plugins/SliceInfoPlugin/SliceInfo.py old mode 100644 new mode 100755 From bedb41b6d340d368fa6464542e50f60ad027ea88 Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Thu, 2 Mar 2017 16:44:40 +0100 Subject: [PATCH 3/3] SliceInfo now only sends sliceable model hashes (layer data was also sent) --- plugins/SliceInfoPlugin/SliceInfo.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/plugins/SliceInfoPlugin/SliceInfo.py b/plugins/SliceInfoPlugin/SliceInfo.py index 05f7c0e6f5..50ca1dbd06 100755 --- a/plugins/SliceInfoPlugin/SliceInfo.py +++ b/plugins/SliceInfoPlugin/SliceInfo.py @@ -90,9 +90,8 @@ class SliceInfo(Extension): # Listing all files placed on the buildplate modelhashes = [] for node in DepthFirstIterator(CuraApplication.getInstance().getController().getScene().getRoot()): - if type(node) is not SceneNode or not node.getMeshData(): - continue - modelhashes.append(node.getMeshData().getHash()) + if node.callDecoration("isSliceable"): + modelhashes.append(node.getMeshData().getHash()) # Creating md5sums and formatting them as discussed on JIRA modelhash_formatted = ",".join(modelhashes)