def polygon_clip_float()

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