#VRML V2.0 utf8
WorldInfo {
title "button5: PROTO"
info "
File: button5.wrl
Version: 1.1
Revisions: 1.0 June 22, 1996 -- initial cut
1.1 February 16, 1997 -- updated to Final Spec
Description: Introduction of PROTO to button tutorial
Requirements: A VRML2.0 capable browser
Author: Matt Leonard
mattl@pobox.com
http://www.pobox.com/~mattl
Copyright: This file is copyright 1996 Matt Leonard
Tabstop: 4
"
} # WorldInfo
NavigationInfo {
type "EXAMINE"
} # NavigationInfo
DEF VIEW_1 Viewpoint {
position 0.2 1.0 1
orientation 1 0 0 -0.6
description "Looking down from the front"
} # VIEW_1
# NOTE: default values for nodes are REQUIRED
PROTO myCylinder [ field SFFloat myRadius 1.0
field SFFloat myHeight 1.0
field SFColor myColor 0.5 0.5 0.5 ] {
Transform {
children [
Shape {
geometry Cylinder {
radius IS myRadius
height IS myHeight
} # geometry
appearance Appearance {
material Material {
diffuseColor IS myColor
} # material
} # appearance
} # Shape
] # children
} # Transform
} # myCylinder
DEF BUTTON_SET_1 Transform {
translation 0.2 -0.03 0.1
scale 2 1 1
children [
myCylinder {
myRadius 0.26
myHeight 0.05
# light purple
myColor 100 0 100
} # myCylinder
] # children
} # BUTTON_SET_1
DEF BUTTON_BASE_1 Transform {
translation 0 0 0
scale 2 1 1
children [
DEF BASE_1 myCylinder {
myRadius 0.1
myHeight 0.05
} # BASE_1
DEF BUTTON_1 Transform {
translation 0 0 0
scale 1 1 1
children [
DEF SWITCH_1 Switch {
whichChoice 0
choice [
DEF POPPED Transform {
translation 0 0.026 0
children [
myCylinder {
myRadius 0.07
myHeight 0.04
# green
myColor 0 255 0
} # myCylinder
] # children
} # POPPED
DEF PUSHED Transform {
translation 0 0.026 0
children [
myCylinder {
myRadius .07
myHeight .005
# red
myColor 255 0 0
} # myCylinder
] # children
} # PUSHED
] # choice
} # SWITCH_1
DEF ON_OFF_1 TouchSensor {
} # ON_OFF_1
DEF TIME_SOURCE_UP_1 TimeSensor {
cycleInterval 3
} # TIME_SOURCE_UP_1
DEF TIME_SOURCE_DOWN_1 TimeSensor {
cycleInterval 3
} # TIME_SOURCE_DOWN_1
] # children
} # BUTTON_1
] # children
} # BUTTON_BASE_1
DEF BUTTON_BASE_2 Transform {
translation 0.4 0 0
scale 2 1 1
children [
USE BASE_1
DEF BUTTON_2 Transform {
translation 0 0 0
scale 1 1 1
children [
DEF SWITCH_2 Switch {
whichChoice 0
choice [
USE POPPED
USE PUSHED
] # choice
} # SWITCH_2
DEF ON_OFF_2 TouchSensor {
} # ON_OFF_2
DEF TIME_SOURCE_UP_2 TimeSensor {
cycleInterval 3
} # TIME_SOURCE_UP_2
DEF TIME_SOURCE_DOWN_2 TimeSensor {
cycleInterval 3
} # TIME_SOURCE_DOWN_2
] # children
} # BUTTON_2
] # children
} # BUTTON_BASE_2
DEF BUTTON_BASE_3 Transform {
translation 0 0 0.2
scale 2 1 1
children [
USE BASE_1
DEF BUTTON_3 Transform {
translation 0 0 0
scale 1 1 1
children [
DEF SWITCH_3 Switch {
whichChoice 0
choice [
USE POPPED
USE PUSHED
] # choice
} # SWITCH_3
DEF ON_OFF_3 TouchSensor {
} # ON_OFF_3
DEF TIME_SOURCE_UP_3 TimeSensor {
cycleInterval 3
} # TIME_SOURCE_UP_3
DEF TIME_SOURCE_DOWN_3 TimeSensor {
cycleInterval 3
} # TIME_SOURCE_DOWN_3
] # children
} # BUTTON_3
] # children
} # BUTTON_BASE_3
DEF BUTTON_BASE_4 Transform {
translation 0.4 0 0.2
scale 2 1 1
children [
USE BASE_1
DEF BUTTON_4 Transform {
translation 0 0 0
scale 1 1 1
children [
DEF SWITCH_4 Switch {
whichChoice 0
choice [
USE POPPED
USE PUSHED
] # choice
} # SWITCH_4
DEF ON_OFF_4 TouchSensor {
} # ON_OFF_4
DEF TIME_SOURCE_UP_4 TimeSensor {
cycleInterval 3
} # TIME_SOURCE_UP_4
DEF TIME_SOURCE_DOWN_4 TimeSensor {
cycleInterval 3
} # TIME_SOURCE_DOWN_4
] # children
} # BUTTON_4
] # children
} # BUTTON_BASE_4
DEF MOVING_BOX Transform {
translation 0 0 -0.6
scale 1 1 1
children [
Shape {
geometry DEF BOX Box {
size 0.1 0.1 0.1
} # Box
appearance Appearance {
material Material {
diffuseColor 133 99 99
} # material
} # appearance
} # Shape
DEF BOX_POSITION_UP PositionInterpolator {
key [ 0 0.5 1.0 ]
keyValue [ 0.0 0.0 -0.6, 0.0 0.1 -0.6, 0.0 0.2 -0.6 ]
} # BOX_POSITION_UP_1
DEF BOX_POSITION_DOWN PositionInterpolator {
key [ 0 0.5 1]
keyValue [ 0.0 0.2 -0.6, 0.0 0.1 -0.6, 0.0 0.0 -0.6 ]
} # BOX_POSITION_DOWN
] # children
} # MOVING_BOX
DEF SWELLING_SPHERE Transform {
translation 0.4 0 -0.6
scale 1 1 1
children [
Shape {
geometry DEF SPHERE Sphere {
radius 0.1
} # Sphere
appearance Appearance {
material Material {
diffuseColor 217 135 25
} # material
} # appearance
} # Shape
DEF SPHERE_SIZE_GROWING PositionInterpolator {
key [ 0 0.5 1]
keyValue [ 1.0 1.0 1.0, 1.2 1.2 1.2, 1.4 1.4 1.4 ]
} # SPHERE_SIZE_GROWING
DEF SPHERE_SIZE_SHRINKING PositionInterpolator {
key [ 0 0.5 1]
keyValue [ 1.4 1.4 1.4, 1.2 1.2 1.2, 1.0 1.0 1.0 ]
} # SPHERE_SIZE_SHRINKING
] # children
} # SWELLING_SPHERE
DEF WHIRLING_CYLINDER Transform {
translation 0.0 0 -0.3
scale 1 1 1
children [
myCylinder {
myRadius 0.1
myHeight 0.1
myColor 107 35 142
} # myCylinder
DEF CYL_ROTATE_1 OrientationInterpolator {
key [ 0 0.5 1.0 ]
keyValue [ 1.0 1.0 1.0 0.0, 3.0 3.0 3.0 3.0, 5.0 5.0 5.0 5.0 ]
} # CYL_ROTATE_1
DEF CYL_ROTATE_2 OrientationInterpolator {
key [ 0 0.5 1.0 ]
keyValue [ 5.0 5.0 5.0 5.0, 3.0 3.0 3.0 3.0, 1.0 1.0 1.0 0.0 ]
} # CYL_ROTATE_2
] # children
} # WHIRLING_CYLINDER
DEF COLORFUL_CONE Transform {
translation 0.4 0 -0.3
scale 1 1 1
children [
Shape {
geometry DEF CONE Cone {
bottomRadius 0.1
height 0.1
} # Cone
appearance Appearance {
material DEF CONE_COLOR Material {
diffuseColor 127 255 0
} # material
} # appearance
} # Shape
DEF CONE_COLOR_1 ColorInterpolator {
key [ 0 0.5 1.0 ]
keyValue [ 0.496 0.996 0.0, 0.3 0.8 0.3, 0.6 0.2 0.8 ]
} # CONE_COLOR_1
DEF CONE_COLOR_2 ColorInterpolator {
key [ 0 0.5 1.0 ]
keyValue [ 0.6 0.2 0.8, 0.3 0.8 0.3, 0.496 0.996 0.0 ]
} # CONE_COLOR_2
] # children
} # COLORFUL_CONE
DEF PUSH_SCRIPT_1 Script {
eventIn SFTime pushButton
eventOut SFInt32 push_pop
eventOut SFTime start_up
eventOut SFTime start_down
url "vrmlscript:
function pushButton(inTime) {
if (push_pop == 1) {
push_pop = 0;
start_down = inTime;
} else {
push_pop = 1;
start_up = inTime;
}
}" # url
} # PUSH_SCRIPT_1
DEF PUSH_SCRIPT_2 Script {
eventIn SFTime pushButton
eventOut SFInt32 push_pop
eventOut SFTime start_up
eventOut SFTime start_down
url "vrmlscript:
function pushButton(inTime) {
if (push_pop == 1) {
push_pop = 0;
start_down = inTime;
} else {
push_pop = 1;
start_up = inTime;
}
}" # url
} # PUSH_SCRIPT_2
DEF PUSH_SCRIPT_3 Script {
eventIn SFTime pushButton
eventOut SFInt32 push_pop
eventOut SFTime start_up
eventOut SFTime start_down
url "vrmlscript:
function pushButton(inTime) {
if (push_pop == 1) {
push_pop = 0;
start_down = inTime;
} else {
push_pop = 1;
start_up = inTime;
}
}" # url
} # PUSH_SCRIPT_3
DEF PUSH_SCRIPT_4 Script {
eventIn SFTime pushButton
eventOut SFInt32 push_pop
eventOut SFTime start_up
eventOut SFTime start_down
url "vrmlscript:
function pushButton(inTime) {
if (push_pop == 1) {
push_pop = 0;
start_down = inTime;
} else {
push_pop = 1;
start_up = inTime;
}
}" # url
} # PUSH_SCRIPT_4
# routing to push/pop button #1
ROUTE ON_OFF_1.touchTime TO PUSH_SCRIPT_1.pushButton
ROUTE PUSH_SCRIPT_1.push_pop TO SWITCH_1.whichChoice
# routing to move box down on button #1 pop
ROUTE PUSH_SCRIPT_1.start_down TO TIME_SOURCE_DOWN_1.startTime
ROUTE TIME_SOURCE_DOWN_1.fraction_changed TO BOX_POSITION_DOWN.set_fraction
ROUTE BOX_POSITION_DOWN.value_changed TO MOVING_BOX.translation
# routing to move box up on button #1 push
ROUTE PUSH_SCRIPT_1.start_up TO TIME_SOURCE_UP_1.startTime
ROUTE TIME_SOURCE_UP_1.fraction_changed TO BOX_POSITION_UP.set_fraction
ROUTE BOX_POSITION_UP.value_changed TO MOVING_BOX.translation
# routing to push/pop button #2
ROUTE ON_OFF_2.touchTime TO PUSH_SCRIPT_2.pushButton
ROUTE PUSH_SCRIPT_2.push_pop TO SWITCH_2.whichChoice
# routing to shrink sphere on button #2 pop
ROUTE PUSH_SCRIPT_2.start_down TO TIME_SOURCE_DOWN_2.startTime
ROUTE TIME_SOURCE_DOWN_2.fraction_changed TO SPHERE_SIZE_SHRINKING.set_fraction
ROUTE SPHERE_SIZE_SHRINKING.value_changed TO SWELLING_SPHERE.scale
# routing to swell sphere on button #2 push
ROUTE PUSH_SCRIPT_2.start_up TO TIME_SOURCE_UP_2.startTime
ROUTE TIME_SOURCE_UP_2.fraction_changed TO SPHERE_SIZE_GROWING.set_fraction
ROUTE SPHERE_SIZE_GROWING.value_changed TO SWELLING_SPHERE.scale
# routing to push/pop button #3
ROUTE ON_OFF_3.touchTime TO PUSH_SCRIPT_3.pushButton
ROUTE PUSH_SCRIPT_3.push_pop TO SWITCH_3.whichChoice
# routing to rotate cylinder one way on button #3 pop
ROUTE PUSH_SCRIPT_3.start_down TO TIME_SOURCE_DOWN_3.startTime
ROUTE TIME_SOURCE_DOWN_3.fraction_changed TO CYL_ROTATE_2.set_fraction
ROUTE CYL_ROTATE_2.value_changed TO WHIRLING_CYLINDER.rotation
# routing to rotate cylinder another way on button #3 push
ROUTE PUSH_SCRIPT_3.start_up TO TIME_SOURCE_UP_3.startTime
ROUTE TIME_SOURCE_UP_3.fraction_changed TO CYL_ROTATE_1.set_fraction
ROUTE CYL_ROTATE_1.value_changed TO WHIRLING_CYLINDER.rotation
# routing to push/pop button #4
ROUTE ON_OFF_4.touchTime TO PUSH_SCRIPT_4.pushButton
ROUTE PUSH_SCRIPT_4.push_pop TO SWITCH_4.whichChoice
# routing to change cone color back on button #4 pop
ROUTE PUSH_SCRIPT_4.start_down TO TIME_SOURCE_DOWN_4.startTime
ROUTE TIME_SOURCE_DOWN_4.fraction_changed TO CONE_COLOR_2.set_fraction
ROUTE CONE_COLOR_2.value_changed TO CONE_COLOR.diffuseColor
# routing to change cone color on button #4 push
ROUTE PUSH_SCRIPT_4.start_up TO TIME_SOURCE_UP_4.startTime
ROUTE TIME_SOURCE_UP_4.fraction_changed TO CONE_COLOR_1.set_fraction
ROUTE CONE_COLOR_1.value_changed TO CONE_COLOR.diffuseColor