From 0eec48b9e30352161eeb08c716184164ea6b14f1 Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Wed, 1 Mar 2017 10:53:53 +0100 Subject: [PATCH] Fix reslice when deleting nodes, fix moving groups. CURA-3412 --- .../CuraEngineBackend/CuraEngineBackend.py | 27 ++++++++++++++----- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/plugins/CuraEngineBackend/CuraEngineBackend.py b/plugins/CuraEngineBackend/CuraEngineBackend.py index f2023e270a..35d0aaef67 100644 --- a/plugins/CuraEngineBackend/CuraEngineBackend.py +++ b/plugins/CuraEngineBackend/CuraEngineBackend.py @@ -105,6 +105,7 @@ class CuraEngineBackend(QObject, Backend): self._backend_log_max_lines = 20000 # Maximum number of lines to buffer self._error_message = None # Pop-up message that shows errors. + self._last_num_objects = 0 # Count number of objects to see if there is something changed self.backendQuit.connect(self._onBackendQuit) self.backendConnected.connect(self._onBackendConnected) @@ -346,16 +347,28 @@ class CuraEngineBackend(QObject, Backend): if type(source) is not SceneNode: return - if source is self._scene.getRoot(): - return + root_scene_nodes_changed = False + 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 + if num_objects != self._last_num_objects: + self._last_num_objects = num_objects + root_scene_nodes_changed = True + else: + return self.determineAutoSlicing() - if source.getMeshData() is None: - return - - if source.getMeshData().getVertices() is None: - return + if not source.callDecoration("isGroup") and not root_scene_nodes_changed: + if source.getMeshData() is None: + return + if source.getMeshData().getVertices() is None: + return self.needsSlicing() self.stopSlicing()