diff --git a/cura/PlatformPhysics.py b/cura/PlatformPhysics.py index 5e4bd5a415..d7276c9773 100644 --- a/cura/PlatformPhysics.py +++ b/cura/PlatformPhysics.py @@ -24,8 +24,12 @@ class PlatformPhysics: super().__init__() self._controller = controller self._controller.getScene().sceneChanged.connect(self._onSceneChanged) + self._controller.toolOperationStarted.connect(self._onToolOperationStarted) + self._controller.toolOperationStopped.connect(self._onToolOperationStopped) self._build_volume = volume + self._enabled = True + self._change_timer = QTimer() self._change_timer.setInterval(100) self._change_timer.setSingleShot(True) @@ -35,6 +39,9 @@ class PlatformPhysics: self._change_timer.start() def _onChangeTimerFinished(self): + if not self._enabled: + return + root = self._controller.getScene().getRoot() for node in BreadthFirstIterator(root): if node is root or type(node) is not SceneNode: @@ -93,3 +100,10 @@ class PlatformPhysics: if node.getBoundingBox().intersectsBox(self._build_volume.getBoundingBox()) == AxisAlignedBox.IntersectionResult.FullIntersection: op = ScaleToBoundsOperation(node, self._build_volume.getBoundingBox()) op.push() + + def _onToolOperationStarted(self, tool): + self._enabled = False + + def _onToolOperationStopped(self, tool): + self._enabled = True + self._onChangeTimerFinished() diff --git a/plugins/CuraEngineBackend/CuraEngineBackend.py b/plugins/CuraEngineBackend/CuraEngineBackend.py index 45a2148892..9fbd7a47a1 100644 --- a/plugins/CuraEngineBackend/CuraEngineBackend.py +++ b/plugins/CuraEngineBackend/CuraEngineBackend.py @@ -59,6 +59,8 @@ class CuraEngineBackend(Backend): self._save_polygons = True self._report_progress = True + self._enabled = True + self.backendConnected.connect(self._onBackendConnected) def getEngineCommand(self): @@ -86,6 +88,9 @@ class CuraEngineBackend(Backend): # If False, this method will do nothing when already slicing. True by default. # - report_progress: True if the slicing progress should be reported, False if not. Default is True. def slice(self, **kwargs): + if not self._enabled: + return + if self._slicing: if not kwargs.get("force_restart", True): return @@ -235,3 +240,10 @@ class CuraEngineBackend(Backend): if self._restart: self._onChanged() self._restart = False + + def _onToolOperationStarted(self, tool): + self._enabled = False + + def _onToolOperationStopped(self, tool): + self._enabled = True + self._onChanged()