### CurveTool to Tracker - written by Martin Viel www.martinviel.com ###
import nuke

def createTracker():
    
    CURVE=nuke.thisNode()
    AUTOCROP=CURVE['autocropdata']
    
    def topLeft(F):
        x= AUTOCROP.getValueAt(F,0)
        t= AUTOCROP.getValueAt(F,3)
        return x,t
        
    def topRight(F):
        r= AUTOCROP.getValueAt(F,2)
        t= AUTOCROP.getValueAt(F,3)
        return r,t
        
    def bottomLeft(F):
        x= AUTOCROP.getValueAt(F,0)
        y= AUTOCROP.getValueAt(F,1)
        return x,y
        
    def bottomRight(F):
        r= AUTOCROP.getValueAt(F,2)
        y= AUTOCROP.getValueAt(F,1)
        return r,y
        
    def middleLeft(F):
        x= AUTOCROP.getValueAt(F,0)
        y= AUTOCROP.getValueAt(F,1)
        t= AUTOCROP.getValueAt(F,3)
        return x, y+(t-y)/2
        
    def middleRight(F):
        r= AUTOCROP.getValueAt(F,2)
        y= AUTOCROP.getValueAt(F,1)
        t= AUTOCROP.getValueAt(F,3)
        return r, y+(t-y)/2
        
    def middleTop(F):
        x= AUTOCROP.getValueAt(F,0)
        r= AUTOCROP.getValueAt(F,2)
        t= AUTOCROP.getValueAt(F,3)
        return x+(r-x)/2, t
        
    def middleBottom(F):
        x= AUTOCROP.getValueAt(F,0)
        r= AUTOCROP.getValueAt(F,2)
        y= AUTOCROP.getValueAt(F,1)
        return x+(r-x)/2, y
    
    
    tracker=nuke.nodes.Tracker4()
    tracker.setXYpos(CURVE.xpos()+100,CURVE.ypos())
    tracker.showControlPanel()
    
    
    if CURVE['corners_CurveTooltoTracker'].value()==True:
        EXPR = [topLeft,topRight,bottomRight,bottomLeft]
    else:
        EXPR = [middleLeft,middleTop,middleRight,middleBottom]
    
    for t in range(4):
        
        #new track
        tracker['add_track'].execute()
        
        #new keys
        for key in AUTOCROP.getKeyList():
            tracker['tracks'].setValueAt(EXPR[t](key)[0],key,t*31+2)
            tracker['tracks'].setValueAt(EXPR[t](key)[1],key,t*31+3)
            
        #clean
        if nuke.frame() not in AUTOCROP.getKeyList():
            for c in range(31):
                tracker['tracks'].removeKey(t*31+c)
    
    tracker['add_track'].execute()
    tracker['del_tracks'].execute()



def curvetool_onCreate():
    
    CURVE=nuke.thisNode()
    
    if 'Tab_CurveTooltoTracker' not in CURVE.knobs():
        
        CURVE.addKnob(nuke.Tab_Knob('Tab_CurveTooltoTracker','AutoCropData to Tracker'))
        
        CURVE.addKnob(nuke.PyScript_Knob('createTracker_CurveTooltoTracker','create a Tracker with AutoCropData values','curvetool_to_tracker.createTracker()'))
        
        CURVE.addKnob(nuke.Boolean_Knob('corners_CurveTooltoTracker','points on corners',True))
        CURVE['corners_CurveTooltoTracker'].setFlag(nuke.STARTLINE) #STARTLINE
        
        #about
        CURVE.addKnob(nuke.Text_Knob('about_CurveTooltoTracker',' ',"<p style='color:gray'><br><b>CurveTool to Tracker</b> - More on <a href='https://martinviel.com' style='color:gray'>martinviel.com</a>"))
    
    
    
### CurveTool to Tracker - written by Martin Viel www.martinviel.com ###
    