import maya.cmds as mc
import maya.mel as mm

def traceSelected(selected):
    sel = mc.ls(sl=True)    
    currentPanel = mc.getPanel(withFocus=True)
    if mc.window("deleteSJ", exists=True):
        mc.deleteUI("deleteSJ")
    mc.window("deleteSJ", w=300, h=100, title="Close this window to delete script jobs")
    mc.frameLayout(lv=False)
    mc.button(l="Ok", h=32, c="import maya.cmds as mc;mc.deleteUI(\"deleteSJ\");kill=mc.ls(\"traceMe*\");mc.delete(kill)")
    mc.showWindow("deleteSJ")

    if selected:
        spacy = mc.spaceLocator()
        mc.pointConstraint(selected, spacy)
        minRange = mc.playbackOptions(q=True, min=True)
        maxRange = mc.playbackOptions(q=True, max=True)
        placeOne = mc.getAttr(spacy[0]+".t", t=minRange)
        placeTwo = mc.getAttr(spacy[0]+".t", t=minRange+1)
        if mc.objExists("traceMe_"+selected.split(":")[-1]):
            mc.delete("traceMe_"+selected.split(":")[-1])
        curveName = mc.curve(d=1, p=[placeOne[0], placeTwo[0]])
        curveName = mc.rename(curveName, "traceMe_"+selected.split(":")[-1])
        shapeName = mc.listRelatives(f=True)[0]
        c = 2
        t = minRange+2
        while t <= maxRange:
            nextPlace = mc.getAttr(spacy[0]+".t", t=t)
            mc.curve(curveName, a=True, p=[nextPlace[0]])
            t = t + 1
            c = c + 1
        mc.delete(spacy)
        mc.setAttr(curveName+".overrideEnabled", 1)
        mc.setAttr(curveName+".overrideColor", 17)
        mc.setAttr(shapeName+".dispCV", 1)
        c = 0
        tc = mc.getAttr( curveName+".spans" )+1
        while c < tc:
            cvName = str(c)
            c = c + 1
            if mc.keyframe(selected, t=[(c,c)], q=True):
                next = mc.cluster(curveName+".cv["+cvName+"]")
                mc.parent(next[1], curveName)
                mc.setAttr(next[1]+".overrideEnabled", 1)
                mc.setAttr(next[1]+".overrideColor", 4)
        if not mm.eval("runTimeCommand -exists trace_"+selected.replace(":","_")):
            mm.eval("runTimeCommand -c (\"python(\\\"tracer.traceSelected(\\\\\\\""+selected+"\\\\\\\")\\\")\") trace_"+selected.replace(":","_"))
        mm.eval("scriptJob -kws -p deleteSJ -e ToolChanged trace_"+selected.replace(":","_"))
    mc.select(sel)
    mc.setFocus(currentPanel)
