mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-08-15 09:45:57 +08:00
Check for adhesion area collisions in one-at-a-time ordering
CURA-6785
This commit is contained in:
parent
7bf2fa3b43
commit
9512030060
@ -92,12 +92,24 @@ class OneAtATimeIterator(Iterator.Iterator):
|
|||||||
score_b = sum(self._hit_map[self._original_node_list.index(b)])
|
score_b = sum(self._hit_map[self._original_node_list.index(b)])
|
||||||
return score_a - score_b
|
return score_a - score_b
|
||||||
|
|
||||||
# Checks if A can be printed before B
|
## Checks if A can be printed before B
|
||||||
def _checkHit(self, a: SceneNode, b: SceneNode) -> bool:
|
def _checkHit(self, a: SceneNode, b: SceneNode) -> bool:
|
||||||
if a == b:
|
if a == b:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
overlap = a.callDecoration("getConvexHullBoundary").intersectsPolygon(b.callDecoration("getConvexHullHeadFull"))
|
a_hit_hull = a.callDecoration("getConvexHullBoundary")
|
||||||
|
b_hit_hull = b.callDecoration("getConvexHullHeadFull")
|
||||||
|
overlap = a_hit_hull.intersectsPolygon(b_hit_hull)
|
||||||
|
|
||||||
|
if overlap:
|
||||||
|
return True
|
||||||
|
|
||||||
|
# Adhesion areas must never overlap, regardless of printing order
|
||||||
|
# This would cause over-extrusion
|
||||||
|
a_hit_hull = a.callDecoration("getAdhesionArea")
|
||||||
|
b_hit_hull = b.callDecoration("getAdhesionArea")
|
||||||
|
overlap = a_hit_hull.intersectsPolygon(b_hit_hull)
|
||||||
|
|
||||||
if overlap:
|
if overlap:
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
|
@ -76,7 +76,18 @@ class ConvexHullDecorator(SceneNodeDecorator):
|
|||||||
def __deepcopy__(self, memo):
|
def __deepcopy__(self, memo):
|
||||||
return ConvexHullDecorator()
|
return ConvexHullDecorator()
|
||||||
|
|
||||||
## Get the unmodified 2D projected convex hull of the node (if any)
|
|
||||||
|
## The polygon representing the 2D adhesion area.
|
||||||
|
# If no adhesion is used, the regular convex hull is returned
|
||||||
|
def getAdhesionArea(self) -> Optional[Polygon]:
|
||||||
|
if self._node is None:
|
||||||
|
return None
|
||||||
|
|
||||||
|
hull = self._compute2DConvexHull()
|
||||||
|
return self._add2DAdhesionMargin(hull)
|
||||||
|
|
||||||
|
|
||||||
|
## Get the unmodified 2D projected convex hull with 2D adhesion area of the node (if any)
|
||||||
def getConvexHull(self) -> Optional[Polygon]:
|
def getConvexHull(self) -> Optional[Polygon]:
|
||||||
if self._node is None:
|
if self._node is None:
|
||||||
return None
|
return None
|
||||||
|
Loading…
x
Reference in New Issue
Block a user