def find_common_coverage(locuses): clipper = Pyclipper() current_locus = locuses[0] for locus in locuses[1:]: clipper.AddPaths(scale_to_clipper(current_locus), PT_SUBJECT) clipper.AddPaths(scale_to_clipper(locus), PT_CLIP) current_locus = scale_from_clipper(clipper.Execute(CT_INTERSECTION)) clipper.Clear() l_x, l_y = split_locus_lists([current_locus]) return l_x, l_y
def intersect_polygons(polygon1, polygon2): """ Intersect two polygons. Parameters ---------- polygon1 : list of arrays Vertices of the first polygon in counterclockwise order. polygon1 : list of arrays Vertices of the second polygon in counterclockwise order. Returns ------- intersection : list of arrays Vertices of the intersection in counterclockwise order. """ from pyclipper import Pyclipper, PT_CLIP, PT_SUBJECT, CT_INTERSECTION from pyclipper import scale_to_clipper, scale_from_clipper # could be accelerated by removing the scale_to/from_clipper() subj, clip = (polygon1,), polygon2 pc = Pyclipper() pc.AddPath(scale_to_clipper(clip), PT_CLIP) pc.AddPaths(scale_to_clipper(subj), PT_SUBJECT) solution = pc.Execute(CT_INTERSECTION) if not solution: return [] return scale_from_clipper(solution)[0]