import rhinoscriptsyntax as rs
import Rhino
import scriptcontext as sc


def Orient2Crv():
    
    crvIds = rs.GetObjects("Select curves to orient",4,preselect=True)
    if not crvIds: return
    
    baseId = rs.GetObject("Select the first reference curve", 4)
    if not baseId: return
    
    targId = rs.GetObject("Select the second reference curve.", 4)
    if not targId: return
    
    
    for crvId in crvIds:
        
        crvGeo = sc.doc.Objects.Find(crvId).Geometry
    
        p1 = crvGeo.PointAtStart
        pBase = rs.EvaluateCurve(targId, rs.CurveClosestPoint(baseId, p1))
        pTarg = rs.EvaluateCurve(targId, rs.CurveClosestPoint(targId, p1))
        dist = Rhino.Geometry.Point3d.DistanceTo(p1, pTarg)
        plane = Rhino.Geometry.Plane.WorldXY
        plane.Origin = p1
        sphere = Rhino.Geometry.Sphere(plane, dist).ToBrep()
        
        pInt = Rhino.Geometry.Intersect.Intersection.CurveBrep(crvGeo, sphere,.001)[2]
        
        if len(pInt) !=0: 
            pRef = pInt[0]
        else:
            pRef = crvGeo.PointAtEnd
            
        rs.OrientObject(crvId, [p1,pRef], [p1,pTarg])
    
    
Orient2Crv()