import Blender from Blender import * global slider1 global button1 global slider2 global button2 global slider3 global button3 def event(evt, val): # the function to handle input events if not val: # val = 0: it's a key/mbutton release Draw.Redraw(1) return def whichButton(evt): if evt == 1: setIpoCurveVal("ObIpo", "LocX", slider1.val) if evt == 2: removeKey("ObIpo", "LocX") if evt == 3: setIpoCurveVal("ObIpo", "LocY", slider2.val) if evt == 4: removeKey("ObIpo", "LocY") if evt == 5: setIpoCurveVal("ObIpo", "LocZ", slider3.val) if evt == 6: removeKey("ObIpo", "LocZ") def gui(): global slider1 global button1 global slider2 global button2 global slider3 global button3 posx = 10 posy = 300 width = 200 height = 20 slider1.val = getIpoCurveVal("ObIpo", "LocX") slider1 = Draw.Number("custom attr 1: ", 1, posx, posy, width, height, slider1.val, -100.0, 100.0, "") button1 = Draw.PushButton("Remove Key", 2, posx + width + 20, posy, 100, height, "Remove Key") posy -= 20 slider2.val = getIpoCurveVal("ObIpo", "LocY") slider2 = Draw.Number("custom attr 2: ", 3, posx, posy, width, height, slider2.val, -100.0, 100.0, "") button2 = Draw.PushButton("Remove Key", 4, posx + width + 20, posy, 100, height, "Remove Key") posy -= 20 slider3.val = getIpoCurveVal("ObIpo", "LocZ") slider3 = Draw.Number("custom attr 3: ", 5, posx, posy, width, height, slider3.val, -100.0, 100.0, "") button3 = Draw.PushButton("Remove Key", 6, posx + width + 20, posy, 100, height, "Remove Key") Draw.Redraw(1) def reallyUpdate(): Blender.Redraw() Blender.Set("curframe", Blender.Get("curframe") + 1) Blender.Redraw() Blender.Set("curframe", Blender.Get("curframe") - 1) Blender.Redraw() def getIpoCurveVal(ipoName, ipoCurveName): ipo = Ipo.Get(ipoName) for x in range(len(ipo.curves)): if ipo.curves[x].name == ipoCurveName: foundCurve = ipo.curves[x] break return foundCurve[Blender.Get("curframe")] def setIpoCurveVal(ipoName, ipoCurveName, val): ipo = Ipo.Get(ipoName) for x in range(len(ipo.curves)): if ipo.curves[x].name == ipoCurveName: foundCurve = ipo.curves[x] break foundCurve.append((Blender.Get("curframe"), val)) foundCurve.recalc() reallyUpdate() def removeKey(ipoName, ipoCurveName): ipo = Ipo.Get(ipoName) for x in range(len(ipo.curves)): if ipo.curves[x].name == ipoCurveName: foundCurve = ipo.curves[x] break bezPoints = foundCurve.bezierPoints for incr in range(len(bezPoints)): if abs(bezPoints[incr].pt[0] - Blender.Get("curframe")) < 0.001: foundCurve.delBezier(incr) reallyUpdate() break slider1 = Draw.Create(getIpoCurveVal("ObIpo", "LocX")) slider2 = Draw.Create(getIpoCurveVal("ObIpo", "LocY")) slider3 = Draw.Create(getIpoCurveVal("ObIpo", "LocZ")) button1 = Draw.Create(0) button2 = Draw.Create(0) button3 = Draw.Create(0) Draw.Register(gui, event, whichButton)