in utils/box_intersection.pyx [0:0]
def polygon_clip_float(float [:, :] subjectPolygon, float [:, :] clipPolygon):
"""
Assumes subjectPolygon and clipPolygon have 4 vertices
"""
cdef Py_ssize_t num_clip_points = clipPolygon.shape[0]
cp1 = clipPolygon[num_clip_points - 1]
MAX_INTERSECT_POINTS = 10
num_intersect_points = 0
outputList_np = np.zeros((MAX_INTERSECT_POINTS, 2), dtype=np.float32)
cdef float[:, :] outputList = outputList_np
inputList_np = np.zeros((MAX_INTERSECT_POINTS, 2), dtype=np.float32)
cdef float[:, :] inputList = inputList_np
copy_points(subjectPolygon, outputList, subjectPolygon.shape[0])
cdef Py_ssize_t noutput_list = subjectPolygon.shape[0]
cdef Py_ssize_t ninput_list = 0
cdef Py_ssize_t iidx = 0
for cidx in range(num_clip_points):
clipVertex = clipPolygon[cidx]
cp2 = clipVertex
copy_points(outputList, inputList, noutput_list)
ninput_list = noutput_list
noutput_list = 0
s = inputList[ninput_list - 1]
for iidx in range(ninput_list):
e = inputList[iidx]
if inside(cp1, cp2, e):
if not inside(cp1, cp2, s):
noutput_list = computeIntersection_and_add(cp1, cp2, s, e, outputList, noutput_list)
noutput_list = add_point(outputList, e, noutput_list)
elif inside(cp1, cp2, s):
noutput_list = computeIntersection_and_add(cp1, cp2, s, e, outputList, noutput_list)
s = e
cp1 = cp2
if noutput_list == 0:
break
return outputList_np, noutput_list