diff --git a/cura/PlatformPhysics.py b/cura/PlatformPhysics.py index a411478b16..53cc87a7b3 100755 --- a/cura/PlatformPhysics.py +++ b/cura/PlatformPhysics.py @@ -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. from PyQt5.QtCore import QTimer +from shapely.errors import TopologicalError # To capture errors if Shapely messes up. from UM.Application import Application +from UM.Logger import Logger from UM.Scene.SceneNode import SceneNode from UM.Scene.Iterator.BreadthFirstIterator import BreadthFirstIterator from UM.Math.Vector import Vector @@ -136,7 +138,11 @@ class PlatformPhysics: own_convex_hull = node.callDecoration("getConvexHull") other_convex_hull = other_node.callDecoration("getConvexHull") if own_convex_hull and other_convex_hull: - overlap = own_convex_hull.translate(move_vector.x, move_vector.z).intersectsPolygon(other_convex_hull) + try: + 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! temp_move_vector = move_vector.set(x = move_vector.x + overlap[0] * self._move_factor, z = move_vector.z + overlap[1] * self._move_factor)