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 )