source

vrml

VRML 2.0 Tutorial--button4.wrl Source

#VRML V2.0 utf8

WorldInfo {
	title "button4: 4 buttons"
	info "
		File:          button1.wrl
		Version:       1.1
		Revisions:     1.0 June 22, 1996 -- initial cut
                     	1.1 February 16, 1997 -- updated to Final Spec
		Description:   4 buttons drive various shapes' behaviors
		Requirements:  A VRML2.0 Draft #2b capable browser
		Author:        Matt Leonard
                     mattl@pobox.com
                     http://www.pobox.com/~mattl
		Copyright:     This file is copyright 1996 Matt Leonard
		Tabstop:       4
	" # info
} # 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

DEF BUTTON_SET_1 Transform {
	translation 0.2 -0.03 0.1
	scale 2 1 1

	children [
		Shape {
			geometry Cylinder {
				radius 0.26
				height 0.05
			} # Cylinder

			appearance Appearance {
				material Material {
					# light purple
					diffuseColor 100 0 100
				} # material
			} # appearance
		} # Shape
	] # children
} # BUTTON_SET_1


DEF BUTTON_BASE_1 Transform {
	translation 0 0 0
	scale 2 1 1

	children [
		DEF BASE_1 Shape {
			geometry Cylinder {
				radius 0.1
				height 0.05
			} # Cylinder
		} # 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 [
								Shape {
									geometry Cylinder {
										radius 0.07
										height 0.04
									} # Cylinder

									appearance Appearance {
										material Material {
											# green
											diffuseColor 0 255 0
										} # material
									} # appearance
								} # Shape
							] # children
						} # POPPED

						DEF PUSHED Transform {
							translation 0 0.026 0
							children [
								Shape {
									geometry Cylinder {
										radius .07
										height .005
									} # Cylinder

									appearance Appearance {
										material Material {
											# red
											diffuseColor 255 0 0
										} # material
									} # appearance
								} # Shape
							] # 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 [
		Shape {
			geometry DEF CYLINDER Cylinder {
				radius 0.1
				height 0.1
			} # Cylinder

			appearance Appearance {
				material Material {
					diffuseColor 107 35 142
				} # material
			} # appearance
		} # Shape

		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

-- Back to Tutorial --

vrml navbar