CURA-4269 added a flag to determine wether auto drop should be executed or not

This commit is contained in:
ChrisTerBeke 2017-09-18 10:50:52 +02:00
parent 86e5a1ed97
commit 4ca5987ca8
2 changed files with 13 additions and 6 deletions

View file

@ -9,6 +9,7 @@ from UM.Scene.Iterator.BreadthFirstIterator import BreadthFirstIterator
from UM.Math.Vector import Vector from UM.Math.Vector import Vector
from UM.Scene.Selection import Selection from UM.Scene.Selection import Selection
from UM.Preferences import Preferences from UM.Preferences import Preferences
from UM.Logger import Logger
from cura.ConvexHullDecorator import ConvexHullDecorator from cura.ConvexHullDecorator import ConvexHullDecorator
@ -41,10 +42,12 @@ class PlatformPhysics:
def _onSceneChanged(self, source): def _onSceneChanged(self, source):
self._change_timer.start() self._change_timer.start()
def _onChangeTimerFinished(self): def _onChangeTimerFinished(self, was_triggered_by_tool=False):
if not self._enabled: if not self._enabled:
return return
Logger.log("d", "was_triggered_by_tool=%s", was_triggered_by_tool)
root = self._controller.getScene().getRoot() root = self._controller.getScene().getRoot()
# Keep a list of nodes that are moving. We use this so that we don't move two intersecting objects in the # Keep a list of nodes that are moving. We use this so that we don't move two intersecting objects in the
@ -71,14 +74,15 @@ class PlatformPhysics:
# Check if this is the first time a project file node was loaded (disable auto drop in that case), defaults to True # Check if this is the first time a project file node was loaded (disable auto drop in that case), defaults to True
should_auto_drop = node.getSetting("auto_drop", True) should_auto_drop = node.getSetting("auto_drop", True)
# This should NOT happen if the scene change was triggered by a tool (like translate), only on project load
if was_triggered_by_tool:
should_auto_drop = True
# If a node is grouped or it's loaded from a project file (auto-drop disabled), don't move it down # If a node is grouped or it's loaded from a project file (auto-drop disabled), don't move it down
if Preferences.getInstance().getValue("physics/automatic_drop_down") and not (node.getParent() and node.getParent().callDecoration("isGroup")) and node.isEnabled() and should_auto_drop: if Preferences.getInstance().getValue("physics/automatic_drop_down") and not (node.getParent() and node.getParent().callDecoration("isGroup")) and node.isEnabled() and should_auto_drop:
z_offset = node.callDecoration("getZOffset") if node.getDecorator(ZOffsetDecorator.ZOffsetDecorator) else 0 z_offset = node.callDecoration("getZOffset") if node.getDecorator(ZOffsetDecorator.ZOffsetDecorator) else 0
move_vector = move_vector.set(y=-bbox.bottom + z_offset) move_vector = move_vector.set(y=-bbox.bottom + z_offset)
# Enable auto-drop after processing the project file node for the first time
node.setSetting("auto_drop", False)
# If there is no convex hull for the node, start calculating it and continue. # If there is no convex hull for the node, start calculating it and continue.
if not node.getDecorator(ConvexHullDecorator): if not node.getDecorator(ConvexHullDecorator):
node.addDecorator(ConvexHullDecorator()) node.addDecorator(ConvexHullDecorator())
@ -167,4 +171,4 @@ class PlatformPhysics:
node.removeDecorator(ZOffsetDecorator.ZOffsetDecorator) node.removeDecorator(ZOffsetDecorator.ZOffsetDecorator)
self._enabled = True self._enabled = True
self._onChangeTimerFinished() self._onChangeTimerFinished(True)

View file

@ -77,7 +77,10 @@ class ThreeMFReader(MeshReader):
# \returns Uranium SceneNode. # \returns Uranium SceneNode.
def _convertSavitarNodeToUMNode(self, savitar_node): def _convertSavitarNodeToUMNode(self, savitar_node):
um_node = SceneNode() um_node = SceneNode()
um_node.setSetting("auto_drop", False) # Disable the auto-drop feature when loading a project file and processing the nodes for the first time
# Disable the auto-drop feature when loading a project file and processing the nodes for the first time
um_node.setSetting("auto_drop", False)
transformation = self._createMatrixFromTransformationString(savitar_node.getTransformation()) transformation = self._createMatrixFromTransformationString(savitar_node.getTransformation())
um_node.setTransformation(transformation) um_node.setTransformation(transformation)
mesh_builder = MeshBuilder() mesh_builder = MeshBuilder()