Force updating the convex hull of a group node if one of its children is removed

Before this fix, if a subselection of a group was deleted from the group, the convex hull would not update.

CURA-1054
This commit is contained in:
fieldOfView 2016-05-11 17:44:58 +02:00
parent 4830943113
commit 9f2e87fdcb

View file

@ -24,11 +24,19 @@ class ConvexHullDecorator(SceneNodeDecorator):
self._convex_hull_node = None self._convex_hull_node = None
self._convex_hull_job = None self._convex_hull_job = None
# Keep track of the previous parent so we can clear its convex hull when the object is reparented
self._parent_node = None
self._profile = None self._profile = None
Application.getInstance().getMachineManager().activeProfileChanged.connect(self._onActiveProfileChanged) Application.getInstance().getMachineManager().activeProfileChanged.connect(self._onActiveProfileChanged)
Application.getInstance().getMachineManager().activeMachineInstanceChanged.connect(self._onActiveMachineInstanceChanged) Application.getInstance().getMachineManager().activeMachineInstanceChanged.connect(self._onActiveMachineInstanceChanged)
self._onActiveProfileChanged() self._onActiveProfileChanged()
def setNode(self, node):
super().setNode(node)
self._parent_node = node.getParent()
node.parentChanged.connect(self._onParentChanged)
## Force that a new (empty) object is created upon copy. ## Force that a new (empty) object is created upon copy.
def __deepcopy__(self, memo): def __deepcopy__(self, memo):
copy = ConvexHullDecorator() copy = ConvexHullDecorator()
@ -71,6 +79,9 @@ class ConvexHullDecorator(SceneNodeDecorator):
def setConvexHull(self, hull): def setConvexHull(self, hull):
self._convex_hull = hull self._convex_hull = hull
if not hull and self._convex_hull_node:
self._convex_hull_node.setParent(None)
self._convex_hull_node = None
def getConvexHullJob(self): def getConvexHullJob(self):
return self._convex_hull_job return self._convex_hull_job
@ -97,15 +108,15 @@ class ConvexHullDecorator(SceneNodeDecorator):
if self._convex_hull_job: if self._convex_hull_job:
self._convex_hull_job.cancel() self._convex_hull_job.cancel()
self.setConvexHull(None) self.setConvexHull(None)
if self._convex_hull_node:
self._convex_hull_node.setParent(None)
self._convex_hull_node = None
def _onSettingValueChanged(self, setting): def _onSettingValueChanged(self, setting):
if setting == "print_sequence": if setting == "print_sequence":
if self._convex_hull_job: if self._convex_hull_job:
self._convex_hull_job.cancel() self._convex_hull_job.cancel()
self.setConvexHull(None) self.setConvexHull(None)
if self._convex_hull_node:
self._convex_hull_node.setParent(None) def _onParentChanged(self, node):
self._convex_hull_node = None # Force updating the convex hull of the parent group if the object is in a group
if self._parent_node and self._parent_node.callDecoration("isGroup"):
self._parent_node.callDecoration("setConvexHull", None)
self._parent_node = self.getNode().getParent()