import rhinoscriptsyntax as rs
import Rhino
import scriptcontext as sc


def Orient2Crv():
    
    crvId = rs.GetObject("Select a curve",4,preselect=True)
    if not crvId: 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
    
    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()