def METHOD_NAME(self, face_surface, sv_curve, point, vector):
    nurbs_curve = curve_to_freecad_nurbs(sv_curve)
    if nurbs_curve is None:
        raise Exception("Curve is not NURBS!")
    fc_curve = nurbs_curve.curve
    fc_edge = Part.Edge(fc_curve)
    # face_surface : SvFreeCadNurbsSurface
    fc_face = face_surface.face
    if self.projection_type == 'PARALLEL':
        vector = Base.Vector(*vector)
        projection = fc_face.makeParallelProjection(fc_edge, vector).Edges
    elif self.projection_type == 'PERSPECTIVE':
        point = Base.Vector(*point)
        projection = fc_face.makePerspectiveProjection(fc_edge, point).Edges
    else: # ORTHO
        projection = fc_face.METHOD_NAME([fc_edge]).Edges
    if not projection:
        if self.projection_type == 'PARALLEL':
            words = f"along {vector}"
        elif self.projection_type == 'PERSPECTIVE':
            words = f"from {point}"
        else:
            words = ""
        raise Exception(f"Projection {words} of {sv_curve} onto {face_surface} is empty for some reason")
    trims = [self.get_trim(fc_face, edge) for edge in projection]
    edges = [SvSolidEdgeCurve(edge).to_nurbs() for edge in projection]
    return edges, trims