diff --git a/pyaedt/modeler/geometry_operators.py b/pyaedt/modeler/geometry_operators.py index 2086c0f58b1..d55705d34c7 100644 --- a/pyaedt/modeler/geometry_operators.py +++ b/pyaedt/modeler/geometry_operators.py @@ -1558,6 +1558,8 @@ def point_in_polygon(point, polygon, tolerance=1e-8): The method implements the radial algorithm (https://es.wikipedia.org/wiki/Algoritmo_radial) + This version supports also self-intersecting polygons. + point : List List of ``[x, y]`` coordinates. polygon : List @@ -1591,9 +1593,10 @@ def point_in_polygon(point, polygon, tolerance=1e-8): if abs(abs(a) - math.pi) < tol: return 0 asum += a + r = asum % (2*math.pi) if abs(asum) < tol: return -1 - elif abs(abs(asum) - 2*math.pi) < tol: + elif r < tol or (2*math.pi - r) < tol: return 1 else: # pragma: no cover raise Exception("Unexpected error!")