All pastes #564848 Raw Edit

custom attribute GUI template

public text v1 · immutable
·published 2007-06-13 19:13 UTC
rendered paste body
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)