#VRML V2.0 utf8 Shape { appearance Appearance { material Material { diffuseColor 1 0 0 } } geometry Sphere {} } DEF OPENME Transform { translation 0 0 1.5 center -1 0 0 children [ DEF TOUCH TouchSensor {} Shape { appearance Appearance { material Material {} } geometry Box { size 2 2 .1 } } ] } DEF TIMER TimeSensor { cycleInterval 2 } DEF OPENER OrientationInterpolator { key [ 0 1 ] keyValue [ 0 1 0 0, 0 1 0 -1.75 ] } DEF SCRIPT Script { eventIn SFBool isOver eventIn SFBool working eventOut MFRotation keyValue eventOut SFTime moveNow field SFBool isOpen FALSE field SFBool changing FALSE url "vrmlscript: function isOver(val, ts) { if(val && !changing) { moveNow = ts; closed = new SFRotation(0, 1, 0, 0); open = new SFRotation(0, 1, 0, -1.75); if(isOpen) { vals = new MFRotation(open, closed); keyValue = vals; isOpen = FALSE; } else { vals = new MFRotation(closed, open); keyValue = vals; isOpen = TRUE; } } } function working(val) { changing = val; }" } ROUTE TOUCH.isOver TO SCRIPT.isOver ROUTE SCRIPT.keyValue TO OPENER.keyValue ROUTE SCRIPT.moveNow TO TIMER.startTime ROUTE TIMER.fraction_changed TO OPENER.set_fraction ROUTE OPENER.value_changed TO OPENME.rotation ROUTE TIMER.isActive TO SCRIPT.working
mrl