Browse Source

Disable slicing and platform physics when an operation is being performed

This prevents the model from jumping around during rotation/scale

Fixes #56
Arjen Hiemstra 9 years ago
parent
commit
72b1302f9e
2 changed files with 26 additions and 0 deletions
  1. 14 0
      cura/PlatformPhysics.py
  2. 12 0
      plugins/CuraEngineBackend/CuraEngineBackend.py

+ 14 - 0
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()

+ 12 - 0
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()