blender/release/scripts/widgetwizard.py

918 lines
22 KiB
Python
Raw Normal View History

#!BPY
"""
Name: 'Shape Widget Wizard'
Blender: 238
Group: 'Animation'
Tip: 'Adds Widgets for Driven Shapes'
"""
__author__ = ["Johnny Matthews (guitargeek)"]
__url__ = ("blender", "elysiun")
__version__ = "0.0.9 12/15/05"
__bpydoc__ = """\
"Shape Widget Wizard" creates objects that drive shape channels.
Explanation:
Shapes define morph targets and sometimes it is helpful to animate with a GUI
control panel of widgets. This script lets you define several different types
of controls that (depending on the type) control 1 to 4 shapes with a single
controller.
Usage:
1. Click where you want the widget to go<br>
2. Highlight the object that has shapes<br>
3. Run the script<br>
4. Choose the type of widget (there are next and back buttons if you pick the wrong kind)<br>
5. Click next and choose what shapes go where on the widget<br>
6. Choose a display name for the widget<br>
7. Click finish
The widget is added and you are returned to the first screen for adding another widget.
"""
###################################################################
# #
# Shape Widget Wizard #
# #
# all versions (C) December 2005 Johnny Matthews (guitargeek) #
# #
# Released under the GPL #
# #
# Works in Blender 2.4 and higher #
# #
# This script can be found online at: #
# http://guitargeek.superihost.com/widgetmaker #
# #
# email: johnny.matthews@gmail.com #
###################################################################
# History #
# 0.9 #
# Added Name Objects #
# 0.81 #
# Added Single Shape Toggle #
# #
# 0.8 #
# Controller is Transform Locked and can only move #
# in appropriate directions #
# #
# 0.7 #
# Controller is named the same as the range + ".ctrl" #
# #
###################################################################
import Blender
import bpy
from Blender import Mesh,Object,Material,Window,IpoCurve,Ipo,Text3d
from Blender.BGL import *
from Blender.Draw import *
print "----------------------"
SHAPE1_ONE_MONE = 1
SHAPE1_ONE_ZERO = 2
SHAPE1_ZERO_MONE = 3
SHAPE1_TOGGLE = 12
SHAPE2_EXCLUSIVE = 4
SHAPE2_V = 5
SHAPE2_T = 6
SHAPE2_INVT = 7
SHAPE2_PLUS = 8
SHAPE3_T = 9
SHAPE3_INVT = 10
SHAPE4_X = 11
stage = 1
numshapes = Create(1)
widmenu = Create(1)
rangename = Create("Range")
shapes = [Create(0),Create(0),Create(0),Create(0)]
drawtype = 0
#get rid of an ipo curve by deleting all its points
def delCurve(ipo):
while len(ipo.bezierPoints) > 0:
ipo.delBezier(0)
ipo.recalc()
#if a given ipocurve is not there create it, otherwise get it
def verifyIpocurve(ky,index):
ipo = ky.ipo
if ipo == None:
nip = bpy.data.ipos.new("keyipo", "Key")
ky.ipo = nip
ipo = ky.ipo
if index == 0:
idx = "Basis"
else:
idx = "Key " + str(index)
crv = ipo[idx]
if crv == None:
# print idx
crv = ipo.addCurve(idx)
crv.interpolation = IpoCurve.InterpTypes.LINEAR
return crv
# Add the Drivers and Curves
def setupDrivers(ob,ctrl,type):
global shapes
me = ob.getData(mesh=1)
ky = me.key
# Should we add an error here??
if not ky:
return
if type in [SHAPE1_ONE_MONE,SHAPE1_ONE_ZERO,SHAPE1_ZERO_MONE]:
ctrl.protectFlags = int("111111011",2)
ipo = verifyIpocurve(ky,shapes[0].val)
ipo.driver = 1
ipo.driverObject = ctrl
ipo.driverChannel = IpoCurve.LOC_Z
ipo.recalc()
delCurve(ipo)
if type == 1:
ipo.append((-1,-1))
ipo.append((0,0))
ipo.append((1,1))
if type == 2:
ipo.append((0,0))
ipo.append((1,1))
if type == 3:
ipo.append((-1,-1))
ipo.append((0,0))
ipo.recalc()
if type == SHAPE1_TOGGLE:
ctrl.protectFlags = int("111111011",2)
ipo = verifyIpocurve(ky,shapes[0].val)
ipo.driver = 1
ipo.driverObject = ctrl
ipo.driverChannel = IpoCurve.LOC_Z
ipo.recalc()
delCurve(ipo)
ipo.append((0,0))
ipo.append((0.5,0))
ipo.append((0.500001,1))
ipo.append((1,1))
ipo.recalc()
if type == SHAPE2_EXCLUSIVE:
ctrl.protectFlags = int("111111011",2)
ipo = verifyIpocurve(ky,shapes[0].val)
ipo.driver = 1
ipo.driverObject = ctrl
ipo.driverChannel = IpoCurve.LOC_Z
ipo.recalc()
delCurve(ipo)
ipo.append((0,0))
ipo.append((1,1))
ipo.recalc()
ipo2 = verifyIpocurve(ky,shapes[1].val)
ipo2.driver = 1
ipo2.driverObject = ctrl
ipo2.driverChannel = IpoCurve.LOC_Z
ipo2.recalc()
delCurve(ipo2)
ipo2.append((-1,1))
ipo2.append((0,0))
ipo2.recalc()
if type == SHAPE2_T:
ctrl.protectFlags = int("111111010",2)
ipo = verifyIpocurve(ky,shapes[0].val)
ipo.driver = 1
ipo.driverObject = ctrl
ipo.driverChannel = IpoCurve.LOC_Z
ipo.recalc()
delCurve(ipo)
ipo.append((-1,-1))
ipo.append((0,0))
ipo.recalc()
ipo2 = verifyIpocurve(ky,shapes[1].val)
ipo2.driver = 1
ipo2.driverObject = ctrl
ipo2.driverChannel = IpoCurve.LOC_X
ipo2.recalc()
delCurve(ipo2)
ipo2.append((-1,-1))
ipo2.append((1,1))
ipo2.recalc()
if type == SHAPE2_INVT:
ctrl.protectFlags = int("111111010",2)
ipo = verifyIpocurve(ky,shapes[0].val)
ipo.driver = 1
ipo.driverObject = ctrl
ipo.driverChannel = IpoCurve.LOC_Z
ipo.recalc()
delCurve(ipo)
ipo.append((0,0))
ipo.append((1,1))
ipo.recalc()
ipo2 = verifyIpocurve(ky,shapes[1].val)
ipo2.driver = 1
ipo2.driverObject = ctrl
ipo2.driverChannel = IpoCurve.LOC_X
ipo2.recalc()
delCurve(ipo2)
ipo2.append((-1,-1))
ipo2.append((1,1))
ipo2.recalc()
if type == SHAPE2_PLUS:
ctrl.protectFlags = int("111111010",2)
ipo = verifyIpocurve(ky,shapes[0].val)
ipo.driver = 1
ipo.driverObject = ctrl
ipo.driverChannel = IpoCurve.LOC_Z
ipo.recalc()
delCurve(ipo)
ipo.append((-1,-1))
ipo.append((1,1))
ipo.recalc()
ipo2 = verifyIpocurve(ky,shapes[1].val)
ipo2.driver = 1
ipo2.driverObject = ctrl
ipo2.driverChannel = IpoCurve.LOC_X
ipo2.recalc()
delCurve(ipo2)
ipo2.append((-1,-1))
ipo2.append((1,1))
ipo2.recalc()
if type == SHAPE2_V: # 2 Shape Mix
ctrl.protectFlags = int("111111010",2)
ipo = verifyIpocurve(ky,shapes[0].val)
ipo.driver = 1
ipo.driverObject = ctrl
ipo.driverChannel = IpoCurve.LOC_Z
delCurve(ipo)
ipo.append((0,0))
ipo.append((1,1))
ipo.recalc()
ipo2 = verifyIpocurve(ky,shapes[1].val)
ipo2.driver = 1
ipo2.driverObject = ctrl
ipo2.driverChannel = IpoCurve.LOC_X
delCurve(ipo2)
ipo2.append((0,0))
ipo2.append((1,1))
ipo2.recalc()
if type == SHAPE3_INVT:
ctrl.protectFlags = int("111111010",2)
ipo = verifyIpocurve(ky,shapes[0].val)
ipo.driver = 1
ipo.driverObject = ctrl
ipo.driverChannel = IpoCurve.LOC_Z
ipo.recalc()
delCurve(ipo)
ipo.append((0,0))
ipo.append((1,1))
ipo.recalc()
ipo2 = verifyIpocurve(ky,shapes[1].val)
ipo2.driver = 1
ipo2.driverObject = ctrl
ipo2.driverChannel = IpoCurve.LOC_X
ipo2.recalc()
delCurve(ipo2)
ipo2.append((-1,1))
ipo2.append((0,0))
ipo2.recalc()
ipo2 = verifyIpocurve(ky,shapes[2].val)
ipo2.driver = 1
ipo2.driverObject = ctrl
ipo2.driverChannel = IpoCurve.LOC_X
ipo2.recalc()
delCurve(ipo2)
ipo2.append((0,0))
ipo2.append((1,1))
ipo2.recalc()
if type == SHAPE3_T:
ctrl.protectFlags = int("111111010",2)
ipo = verifyIpocurve(ky,shapes[0].val)
ipo.driver = 1
ipo.driverObject = ctrl
ipo.driverChannel = IpoCurve.LOC_Z
ipo.recalc()
delCurve(ipo)
ipo.append((-1,-1))
ipo.append((0,0))
ipo.recalc()
ipo2 = verifyIpocurve(ky,shapes[1].val)
ipo2.driver = 1
ipo2.driverObject = ctrl
ipo2.driverChannel = IpoCurve.LOC_X
ipo2.recalc()
delCurve(ipo2)
ipo2.append((-1,1))
ipo2.append((0,0))
ipo2.recalc()
ipo2 = verifyIpocurve(ky,shapes[2].val)
ipo2.driver = 1
ipo2.driverObject = ctrl
ipo2.driverChannel = IpoCurve.LOC_X
ipo2.recalc()
delCurve(ipo2)
ipo2.append((0,0))
ipo2.append((1,1))
ipo2.recalc()
if type == SHAPE4_X:
ctrl.protectFlags = int("111111010",2)
ipo = verifyIpocurve(ky,shapes[0].val)
ipo.driver = 1
ipo.driverObject = ctrl
ipo.driverChannel = IpoCurve.LOC_Z
delCurve(ipo)
ipo.append((0,0))
ipo.append((1,1))
ipo.recalc()
ipo2 = verifyIpocurve(ky,shapes[1].val)
ipo2.driver = 1
ipo2.driverObject = ctrl
ipo2.driverChannel = IpoCurve.LOC_X
delCurve(ipo2)
ipo2.append((0,0))
ipo2.append((1,1))
ipo2.recalc()
ipo3 = verifyIpocurve(ky,shapes[2].val)
ipo3.driver = 1
ipo3.driverObject = ctrl
ipo3.driverChannel = IpoCurve.LOC_X
delCurve(ipo3)
ipo3.append((-1,1))
ipo3.append((0,0))
ipo3.recalc()
ipo4 = verifyIpocurve(ky,shapes[3].val)
ipo4.driver = 1
ipo4.driverObject = ctrl
ipo4.driverChannel = IpoCurve.LOC_Z
delCurve(ipo4)
ipo4.append((-1,1))
ipo4.append((0,0))
ipo4.recalc()
#The Main Call to Build the Widget
def build(type):
global shapes,widmenu,rangename
sce = bpy.data.scenes.active
ob = sce.objects.active
try:
ob.getData(mesh=1).key
except:
Blender.Draw.PupMenu('Aborting%t|Object has no keys')
return
loc = Window.GetCursorPos()
range = makeRange(sce, type,rangename.val)
controller = makeController(sce, rangename.val)
text = makeText(sce, rangename.val)
range.restrictRender = True
controller.restrictRender = True
text.restrictRender = True
range.setLocation(loc)
controller.setLocation(loc)
text.setLocation(loc)
range.makeParent([controller],1)
range.makeParent([text],0)
sce.update()
setupDrivers(ob,controller,widmenu.val)
#Create the text
def makeText(sce, name):
txt = bpy.data.curves.new(name+'.name', 'Text3d')
txt.setDrawMode(Text3d.DRAW3D)
txt.setAlignment(Text3d.MIDDLE)
txt.setText(name)
ob = sce.objects.new(txt)
ob.setEuler((3.14159/2,0,0))
return ob
#Create the mesh controller
def makeController(sce, name):
me = bpy.data.meshes.new(name+".ctrl")
ob = sce.objects.new(me)
me.verts.extend([\
(-0.15,0, 0),\
( 0,0, 0.15),\
( 0.15,0, 0),\
( 0,0,-0.15)])
me.edges.extend([(0,1,2,3)])
return ob
#Create the mesh range
def makeRange(sce,type,name):
#ob.setDrawMode(8) # Draw Name
me = bpy.data.meshes.new(name)
ob = sce.objects.new(me)
if type == SHAPE1_ONE_ZERO:
me.verts.extend([\
(-0.15,0,0),\
( 0.15,0,0),\
(-0.15,0,1),\
( 0.15,0,1),\
(-0.25,0,.1),\
(-0.25,0,-.10),\
(0.25,0,.1),\
(0.25,0,-0.10)])
me.edges.extend([(0,1,3,2),(4,5,0),(6,7,1)])
elif type == SHAPE1_TOGGLE:
me.verts.extend([\
(-0.15,0,-0.5),\
( 0.15,0,-0.5),\
( 0.15,0, 0.5),\
(-0.15,0, 0.5),\
(-0.15,0, 1.5),\
( 0.15,0, 1.5)])
me.edges.extend([(0,1,2,3),(3,4,5,2)])
elif type == SHAPE1_ZERO_MONE:
me.verts.extend([\
(-0.15,0,0),\
( 0.15,0,0),\
(-0.15,0,-1),\
( 0.15,0,-1),\
(-0.25,0,.1),\
(-0.25,0,-.10),\
(0.25,0,.1),\
(0.25,0,-0.10)])
me.edges.extend([(0,1,3,2),(4,5,0),(6,7,1)])
elif type in [SHAPE1_ONE_MONE,SHAPE2_EXCLUSIVE]:
me.verts.extend([\
(-0.15,0,-1),\
( 0.15,0,-1),\
(-0.15,0,1),\
( 0.15,0,1),\
(-0.25,0,.1),\
(-0.25,0,-.10),\
(0.25,0,.1),\
(0.25,0,-0.10),\
(-0.15,0,0),\
( 0.15,0,0)])
l = [(0,1,3,2),(4,5,8),(6,7,9)]
me.edges.extend(l)
elif type == SHAPE2_T:
me.verts.extend([\
(-1,0,0),\
( 1,0,0),\
( 1,0,-1),\
(-1,0,-1)])
me.edges.extend([(0,1,2,3)])
elif type == SHAPE2_INVT:
me.verts.extend([\
(-1,0,0),\
( 1,0,0),\
( 1,0,1),\
(-1,0,1)])
me.edges.extend([(0,1,2,3)])
elif type == SHAPE2_PLUS:
me.verts.extend([\
(-1,0,-1),\
( 1,0,-1),\
( 1,0,1),\
(-1,0,1)])
me.edges.extend([(0,1,2,3)])
elif type == SHAPE2_V:
me.verts.extend([\
(0,0,0),\
(1,0,0),\
(1,0,1),\
(0,0,1)])
me.edges.extend([(0,1,2,3)])
ob.setEuler((0,-0.78539,0))
elif type == SHAPE3_INVT:
me.verts.extend([\
(-1,0,0),\
( 1,0,0),\
( 1,0,1),\
(-1,0,1)])
me.edges.extend([(0,1,2,3)])
elif type == SHAPE3_T:
me.verts.extend([\
(-1,0,0),\
( 1,0,0),\
( 1,0,-1),\
(-1,0,-1)])
me.edges.extend([(0,1,2,3)])
elif type == SHAPE4_X:
me.verts.extend([\
(0,0,-1),\
(1,0,-1),\
(1,0,0),\
(1,0,1),\
(0,0,1),\
(-1,0,1),\
(-1,0,0),\
(-1,0,-1)])
me.edges.extend([(0,1),(1,2),(2,3),(3,4),(4,5),(5,6),(6,7),(7,0)])
ob.setEuler((0,-0.78539,0))
return ob
def create():
main()
####################### gui ######################
EVENT_NONE = 1
EVENT_EXIT = 100
EVENT_WIDGET_MENU = 101
EVENT_NEXT = 102
EVENT_BACK = 103
#get the list of shapes from the selected object
def shapeMenuText():
ob = bpy.data.scenes.active.objects.active
if not ob:
return ""
me = ob.getData(mesh=1)
try: key= me.key
except: key = None
if key == None:
return ""
blocks = key.blocks
menu = "Choose Shape %t|"
for i, block in enumerate(blocks):
menu = menu + block.name + " %x" + str(i) + "|"
return menu
#draw the widget for the gui
def drawWidget(type):
glColor3f(0.0,0.0,0.0)
global shapes
if type == SHAPE1_ONE_MONE:# 1 to -1 Single Shape
glBegin(GL_LINE_STRIP)
glVertex2i(150,50)
glVertex2i(170,50)
glVertex2i(170,150)
glVertex2i(150,150)
glVertex2i(150,50)
glEnd()
glBegin(GL_LINE_STRIP)
glVertex2i(140,100)
glVertex2i(190,100)
glEnd()
glRasterPos2d(180,140)
Text("1","normal")
glRasterPos2d(180,60)
Text("-1","normal")
shapes[0] = Menu(shapeMenuText(), EVENT_NONE, 190, 100, 100, 18, shapes[0].val, "Choose Shape.")
elif type == SHAPE1_TOGGLE:# Toggle Single Shape
glBegin(GL_LINE_STRIP)
glVertex2i(150,50)
glVertex2i(170,50)
glVertex2i(170,100)
glVertex2i(150,100)
glVertex2i(150,50)
glEnd()
glBegin(GL_LINE_STRIP)
glVertex2i(170,100)
glVertex2i(170,150)
glVertex2i(150,150)
glVertex2i(150,100)
glEnd()
glRasterPos2d(180,140)
Text("On","normal")
glRasterPos2d(180,60)
Text("Off","normal")
shapes[0] = Menu(shapeMenuText(), EVENT_NONE, 190, 100, 100, 18, shapes[0].val, "Choose Shape.")
elif type == SHAPE1_ONE_ZERO: # 1 to 0 Single Shape
glBegin(GL_LINE_STRIP)
glVertex2i(150,50)
glVertex2i(170,50)
glVertex2i(170,150)
glVertex2i(150,150)
glVertex2i(150,50)
glEnd()
glBegin(GL_LINE_STRIP)
glVertex2i(140,50)
glVertex2i(190,50)
glEnd()
glRasterPos2d(180,140)
Text("1","normal")
glRasterPos2d(180,60)
Text("0","normal")
shapes[0] = Menu(shapeMenuText(), EVENT_NONE, 190, 100, 100, 18, shapes[0].val, "Choose Shape.")
elif type == SHAPE1_ZERO_MONE:
glBegin(GL_LINE_STRIP)
glVertex2i(150,50)
glVertex2i(170,50)
glVertex2i(170,150)
glVertex2i(150,150)
glVertex2i(150,50)
glEnd()
glBegin(GL_LINE_STRIP)
glVertex2i(140,150)
glVertex2i(190,150)
glEnd()
glRasterPos2d(180,140)
Text("0","normal")
glRasterPos2d(180,60)
Text("-1","normal")
shapes[0] = Menu(shapeMenuText(), EVENT_NONE, 190, 100, 100, 18, shapes[0].val, "Choose Shape.")
elif type == SHAPE2_EXCLUSIVE:
glBegin(GL_LINE_STRIP)
glVertex2i(150,50)
glVertex2i(170,50)
glVertex2i(170,150)
glVertex2i(150,150)
glVertex2i(150,50)
glEnd()
glBegin(GL_LINE_STRIP)
glVertex2i(140,100)
glVertex2i(190,100)
glEnd()
glRasterPos2d(180,140)
Text("1","normal")
glRasterPos2d(180,60)
Text("1","normal")
shapes[0] = Menu(shapeMenuText(), EVENT_NONE, 195, 135, 100, 18, shapes[0].val, "Choose Shape 1.")
shapes[1] = Menu(shapeMenuText(), EVENT_NONE, 195, 52, 100, 18, shapes[1].val, "Choose Shape 2.")
elif type == SHAPE2_T:
glBegin(GL_LINE_STRIP)
glVertex2i(150,75)
glVertex2i(250,75)
glVertex2i(250,125)
glVertex2i(150,125)
glVertex2i(150,75)
glEnd()
glBegin(GL_LINE_STRIP)
glVertex2i(140,125)
glVertex2i(260,125)
glEnd()
glRasterPos2d(200,140)
Text("0","normal")
glRasterPos2d(200,60)
Text("-1","normal")
glRasterPos2d(250,140)
Text("1","normal")
glRasterPos2d(150,140)
Text("-1","normal")
shapes[0] = Menu(shapeMenuText(), EVENT_NONE, 220, 52, 100, 18, shapes[0].val, "Choose Shape 1.")
shapes[1] = Menu(shapeMenuText(), EVENT_NONE, 260, 135, 100, 18, shapes[1].val, "Choose Shape 2.")
elif type == SHAPE2_INVT:
glBegin(GL_LINE_STRIP)
glVertex2i(150,75)
glVertex2i(250,75)
glVertex2i(250,125)
glVertex2i(150,125)
glVertex2i(150,75)
glEnd()
glBegin(GL_LINE_STRIP)
glVertex2i(140,75)
glVertex2i(260,75)
glEnd()
glRasterPos2d(200,60)
Text("0","normal")
glRasterPos2d(200,140)
Text("1","normal")
glRasterPos2d(250,60)
Text("1","normal")
glRasterPos2d(150,60)
Text("-1","normal")
shapes[0] = Menu(shapeMenuText(), EVENT_NONE, 220, 135, 100, 18, shapes[0].val, "Choose Shape 1.")
shapes[1] = Menu(shapeMenuText(), EVENT_NONE, 260, 52, 100, 18, shapes[1].val, "Choose Shape 2.")
elif type == SHAPE2_PLUS:
glBegin(GL_LINE_STRIP)
glVertex2i(150,50)
glVertex2i(250,50)
glVertex2i(250,150)
glVertex2i(150,150)
glVertex2i(150,50)
glEnd()
glBegin(GL_LINE_STRIP)
glVertex2i(140,100)
glVertex2i(260,100)
glEnd()
glRasterPos2d(200,105)
Text("0","normal")
glRasterPos2d(200,140)
Text("1","normal")
glRasterPos2d(200,55)
Text("-1","normal")
glRasterPos2d(250,105)
Text("1","normal")
glRasterPos2d(150,105)
Text("-1","normal")
shapes[0] = Menu(shapeMenuText(), EVENT_NONE, 220, 155, 100, 18, shapes[0].val, "Choose Shape 1.")
shapes[1] = Menu(shapeMenuText(), EVENT_NONE, 260, 100, 100, 18, shapes[1].val, "Choose Shape 2.")
elif type == SHAPE2_V:
glBegin(GL_LINE_STRIP)
glVertex2i(150,70)
glVertex2i(185,105)
glVertex2i(150,141)
glVertex2i(115,105)
glVertex2i(150,70)
glEnd()
glRasterPos2d(110,105)
Text("1","normal")
glRasterPos2d(190,105)
Text("1","normal")
glRasterPos2d(150,80)
Text("0","normal")
shapes[0] = Menu(shapeMenuText(), EVENT_NONE, 20, 125, 100, 18, shapes[0].val, "Choose Shape 1.")
shapes[1] = Menu(shapeMenuText(), EVENT_NONE, 195, 125, 100, 18, shapes[1].val, "Choose Shape 2.")
elif type == SHAPE3_T:
glBegin(GL_LINE_STRIP)
glVertex2i(150,75)
glVertex2i(250,75)
glVertex2i(250,125)
glVertex2i(150,125)
glVertex2i(150,75)
glEnd()
glBegin(GL_LINE_STRIP)
glVertex2i(140,125)
glVertex2i(260,125)
glEnd()
glRasterPos2d(200,140)
Text("0","normal")
glRasterPos2d(200,60)
Text("-1","normal")
glRasterPos2d(250,140)
Text("1","normal")
glRasterPos2d(150,140)
Text("1","normal")
shapes[0] = Menu(shapeMenuText(), EVENT_NONE, 220, 52, 100, 18, shapes[0].val, "Choose Shape 1.")
shapes[1] = Menu(shapeMenuText(), EVENT_NONE, 45, 135, 100, 18, shapes[1].val, "Choose Shape 2.")
shapes[2] = Menu(shapeMenuText(), EVENT_NONE, 260, 135, 100, 18, shapes[2].val, "Choose Shape 3.")
elif type == SHAPE3_INVT:
glBegin(GL_LINE_STRIP)
glVertex2i(150,75)
glVertex2i(250,75)
glVertex2i(250,125)
glVertex2i(150,125)
glVertex2i(150,75)
glEnd()
glBegin(GL_LINE_STRIP)
glVertex2i(140,75)
glVertex2i(260,75)
glEnd()
glRasterPos2d(200,60)
Text("0","normal")
glRasterPos2d(200,140)
Text("1","normal")
glRasterPos2d(250,60)
Text("1","normal")
glRasterPos2d(150,60)
Text("1","normal")
shapes[0] = Menu(shapeMenuText(), EVENT_NONE, 220, 135, 100, 18, shapes[0].val, "Choose Shape 1.")
shapes[1] = Menu(shapeMenuText(), EVENT_NONE, 45, 52, 100, 18, shapes[1].val, "Choose Shape 2.")
shapes[2] = Menu(shapeMenuText(), EVENT_NONE, 260, 52, 100, 18, shapes[2].val, "Choose Shape 3.")
elif type == SHAPE4_X:
glBegin(GL_LINE_STRIP)
glVertex2i(150,70)
glVertex2i(185,105)
glVertex2i(150,141)
glVertex2i(115,105)
glVertex2i(150,70)
glEnd()
glRasterPos2d(120,125)
Text("1","normal")
glRasterPos2d(180,125)
Text("1","normal")
glRasterPos2d(120,80)
Text("1","normal")
glRasterPos2d(180,80)
Text("1","normal")
glRasterPos2d(145,105)
Text("0","normal")
shapes[0] = Menu(shapeMenuText(), EVENT_NONE, 10, 125, 100, 18, shapes[0].val, "Choose Shape 1.")
shapes[1] = Menu(shapeMenuText(), EVENT_NONE, 195, 125, 100, 18, shapes[1].val, "Choose Shape 2.")
shapes[2] = Menu(shapeMenuText(), EVENT_NONE, 10, 60, 100, 18, shapes[2].val, "Choose Shape 3.")
shapes[3] = Menu(shapeMenuText(), EVENT_NONE, 195, 60, 100, 18, shapes[3].val, "Choose Shape 4.")
#the gui callback
def draw():
global widmenu,numshapes,stage,type, shapes,rangename
#glRasterPos2d(5,200)
#Text("Shape Widget Wizard","large")
Label("Shape Widget Wizard", 5,200, 200, 12)
PushButton("Quit", EVENT_EXIT, 5, 5, 50, 18)
if stage == 1:
name = "Choose Widget Type %t|\
1 Shape: 1 / -1 %x" +str(SHAPE1_ONE_MONE) +"|\
1 Shape: 1,0 %x" +str(SHAPE1_ONE_ZERO) +"|\
1 Shape: 0,-1 %x" +str(SHAPE1_ZERO_MONE)+"|\
1 Shape: Toggle %x" +str(SHAPE1_TOGGLE) +"|\
2 Shape Exclusive %x"+str(SHAPE2_EXCLUSIVE)+"|\
2 Shape - V %x" +str(SHAPE2_V) +"|\
2 Shape - T %x" +str(SHAPE2_T) +"|\
2 Shape - Inv T %x" +str(SHAPE2_INVT) +"|\
2 Shape - + %x" +str(SHAPE2_PLUS) +"|\
3 Shape - T %x" +str(SHAPE3_T) +"|\
3 Shape - Inv T%x" +str(SHAPE3_INVT) +"|\
4 Shape - Mix %x" +str(SHAPE4_X)
widmenu = Menu(name, EVENT_NONE, 5, 120, 200, 40, widmenu.val, "Choose Widget Type.")
PushButton("Next", EVENT_NEXT, 5, 25, 50, 18)
elif stage == 2:
glRasterPos2d(60,140)
rangename = String("Name: ", EVENT_NONE, 5, 170, 200, 18, rangename.val, 50, "Name for Range Object")
drawWidget(widmenu.val)
BeginAlign()
PushButton("Back", EVENT_BACK, 5, 25, 50, 18, "Choose another shape type")
PushButton("Finish", EVENT_NEXT, 55, 25, 50, 18, "Add Objects at the cursor location")
EndAlign()
return
def event(evt, val):
if (evt == QKEY and not val):
Exit()
def bevent(evt):
global widmenu,stage,drawtype
######### Manages GUI events
if evt==EVENT_EXIT:
Exit()
elif evt==EVENT_BACK:
if stage == 2:
stage = 1
Redraw()
elif evt==EVENT_NEXT:
if stage == 1:
stage = 2
Redraw()
elif stage == 2:
build(widmenu.val)
stage = 1
Window.RedrawAll()
Register(draw, event, bevent)