vizmenu_example.py
This example script demonstrates the use of vizmenu.
import viz
import vizact
viz.setMultiSample(4)
viz.fov(60)
viz.go()
import vizinfo
info = vizinfo.add(
'This example demonstrates the use of vizmenu.\nMove the
mouse to the gray at the top of the screen to unhide the menu.\nPress
c to put the menu in the center of the screen and press l put the menu
on the left.' )
info.translate( [.98, .3] )
viz.clearcolor( viz.SKYBLUE )
viz.addChild( 'ground.osgb'
)
#Setup color schemes for menu
defaultTheme = viz.getTheme()
darkTheme = viz.getTheme()
greenTheme = viz.getTheme()
#Set in colors for dark theme
darkTheme.borderColor = (0.1,0.1,0.1,1)
darkTheme.backColor = (0.4,0.4,0.4,1)
darkTheme.lightBackColor =
(0.6,0.6,0.6,1)
darkTheme.darkBackColor =
(0.2,0.2,0.2,1)
darkTheme.highBackColor =
(0.2,0.2,0.2,1)
#Set in colors for green theme
greenTheme.borderColor =
(0.1,0.2,0.05,1)
greenTheme.backColor = (0.5,0.7,0.3,1)
greenTheme.lightBackColor =
(0.6,0.8,0.4,1)
greenTheme.darkBackColor =
(0.2,0.4,0.1,1)
greenTheme.highBackColor =
(0.2,0.4,0.1,1)
greenTheme.highTextColor =
(0.95,0.88,0.33,1)
themes = ( defaultTheme, darkTheme, greenTheme )
#Add balls for the menu options to affect
import vizshape
ball1 = vizshape.addSphere(radius=0.1)
ball2 = ball1.copy()
ball1.setPosition([-.5, 1.6, 2.5])
ball2.setPosition([.5, 1.6, 2.5])
#Create main menu object
import vizmenu
menu = vizmenu.add()
#Place the menu in the center or on the left
vizact.onkeydown( 'c', menu.setAlignment,
vizmenu.CENTER )
vizact.onkeydown( 'l', menu.setAlignment,
vizmenu.LEFT )
#Create three menu subjects
AppearanceMenu = menu.add( 'Appearance' )
Ball1Menu = menu.add( 'Ball 1' )
Ball2Menu = menu.add( 'Ball 2' )
#Appearance Menu
#Add dropdown list of theme options to Appearance menu
themeDropDown = AppearanceMenu.add( viz.DROPLIST,
'Theme' )
themeDropDown.addItems( ['Default','Dark','Green'] )
def onTheme(
e ):
#Change menu theme when new item in drop-down
list is selected
viz.setTheme(
themes[e.newSel]
)
#Call onTheme when themeDropDown is changed
vizact.onlist( themeDropDown, onTheme )
#Create a number of sub-menus with labels
fooMenu = AppearanceMenu.add( vizmenu.MENU,
'foo' )
barMenu = fooMenu.add( vizmenu.MENU,
'bar' )
#Add textbox to sub-sub-menu
messageBox = barMenu.add( viz.TEXTBOX,
'Textbox' )
#Add object to display what is in the textbox
onScreenText = viz.addText( '', viz.SCREEN )
def textChanged(e):
#The GUI textbox e.object has been modified
#e.newText is the new text
#e.oldText is the previous text
#e.key is the key that has just been pressed
onScreenText.message(
e.newText )
vizact.ontextbox(messageBox, textChanged)
#Ball1 menu
#Create sub-menu to house ball color radio buttons
Ball1ColorMenu = Ball1Menu.add( vizmenu.MENU,
'Color' )
#Add ball color modifying radio buttons
Ball1Red = Ball1ColorMenu.add( viz.RADIO,
0, 'Red'
)
Ball1White = Ball1ColorMenu.add( viz.RADIO,
0, 'White'
)
Ball1Blue = Ball1ColorMenu.add( viz.RADIO,
0, 'Blue'
)
#Set inital selected radio button
Ball1White.set(
viz.DOWN )
#Set callbacks for changing ball color
vizact.onbuttondown( Ball1Red, ball1.color,
viz.RED )
vizact.onbuttondown( Ball1White, ball1.color,
viz.WHITE )
vizact.onbuttondown( Ball1Blue, ball1.color,
viz.BLUE )
#Ball2 menu
#Setup menu in ball
progressBar = Ball2Menu.add( viz.PROGRESS_BAR,
'1.00', 'Alpha'
)
progressBar.set(
1.0 )
def updateAlpha(
sliderPOS ):
#Set transparency of ball
progressBar.message(
str('%.2f'%(sliderPOS)) )
ball2.alpha(
sliderPOS )
vizact.onslider( progressBar, updateAlpha )