mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-15 02:37:49 -06:00
Catch TopologicalError when calculating convex hull intersection
Apparently this can happen. I don't know what shapes this happens with though. I'm guessing it's got something to do with degenerate shapes. Fixes Sentry issue CURA-DZ.
This commit is contained in:
parent
433c9a9f60
commit
ae9f2b4ba9
1 changed files with 8 additions and 2 deletions
|
@ -1,9 +1,11 @@
|
||||||
# Copyright (c) 2015 Ultimaker B.V.
|
# Copyright (c) 2020 Ultimaker B.V.
|
||||||
# Cura is released under the terms of the LGPLv3 or higher.
|
# Cura is released under the terms of the LGPLv3 or higher.
|
||||||
|
|
||||||
from PyQt5.QtCore import QTimer
|
from PyQt5.QtCore import QTimer
|
||||||
|
from shapely.errors import TopologicalError # To capture errors if Shapely messes up.
|
||||||
|
|
||||||
from UM.Application import Application
|
from UM.Application import Application
|
||||||
|
from UM.Logger import Logger
|
||||||
from UM.Scene.SceneNode import SceneNode
|
from UM.Scene.SceneNode import SceneNode
|
||||||
from UM.Scene.Iterator.BreadthFirstIterator import BreadthFirstIterator
|
from UM.Scene.Iterator.BreadthFirstIterator import BreadthFirstIterator
|
||||||
from UM.Math.Vector import Vector
|
from UM.Math.Vector import Vector
|
||||||
|
@ -136,7 +138,11 @@ class PlatformPhysics:
|
||||||
own_convex_hull = node.callDecoration("getConvexHull")
|
own_convex_hull = node.callDecoration("getConvexHull")
|
||||||
other_convex_hull = other_node.callDecoration("getConvexHull")
|
other_convex_hull = other_node.callDecoration("getConvexHull")
|
||||||
if own_convex_hull and other_convex_hull:
|
if own_convex_hull and other_convex_hull:
|
||||||
|
try:
|
||||||
overlap = own_convex_hull.translate(move_vector.x, move_vector.z).intersectsPolygon(other_convex_hull)
|
overlap = own_convex_hull.translate(move_vector.x, move_vector.z).intersectsPolygon(other_convex_hull)
|
||||||
|
except TopologicalError as e: # Can happen if the convex hull is degenerate?
|
||||||
|
Logger.warning("Got a topological error when calculating convex hull intersection: {err}".format(err = str(e)))
|
||||||
|
overlap = False
|
||||||
if overlap: # Moving ensured that overlap was still there. Try anew!
|
if overlap: # Moving ensured that overlap was still there. Try anew!
|
||||||
temp_move_vector = move_vector.set(x = move_vector.x + overlap[0] * self._move_factor,
|
temp_move_vector = move_vector.set(x = move_vector.x + overlap[0] * self._move_factor,
|
||||||
z = move_vector.z + overlap[1] * self._move_factor)
|
z = move_vector.z + overlap[1] * self._move_factor)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue