media @ VU
proto-slide-pvl-set.vr
proto-slide-pvl-set.vr
(wrl
)
[ flux /
bitmanagement /
cortona /
octaga
]
slide set
Web3D/VR
extern
@proto @vr-proto-slide-pvl-slide.wrl
@proto @vr-proto-slide-effects-transitions.wrl
proto
PROTO SlideSet [
exposedField SFInt32 touched 0
exposedField MFNode slides []
exposedField SFFloat width 0
exposedField SFFloat height 0
exposedField SFBool auto TRUE
exposedField SFString view ""
exposedField SFVec3f position 0 0 10
exposedField SFVec3f location 0 0 0
exposedField SFRotation rotation 0 0 1 0
exposedField SFVec3f scale 1 1 1
exposedField SFBool show FALSE
eventIn SFTime previous
eventIn SFTime next
eventIn SFInt32 hide
eventOut SFInt32 update
eventOut SFInt32 number
eventOut SFInt32 level
eventOut SFString id
eventOut SFString direction
exposedField SFNode backdrop NULL
exposedField SFNode background NULL
exposedField MFColor bgColor [ 0.4 0.4 0.8 ]
] {
viewpoint
DEF viewpoint Viewpoint { position 0 0 10 }
body
DEF switch Switch {
whichChoice 0
choice [
DEF root Transform {
translation IS location
scale IS scale
rotation IS rotation
children [
DEF body Transform {
translation 0 0 -25
scale 2.2 1.8 0.5
children [
DEF decoration slide-background { }
DEF SWITCH Switch {
whichChoice 0
choice IS slides
}
] }
] }
] }
script
DEF SCRIPT Script {
directOutput TRUE
field SFNode me USE SCRIPT
field SFNode body USE body
field SFBool show IS show
field SFBool auto IS auto
field SFString view IS view
field SFNode background IS background
field SFNode decoration USE decoration
field SFNode viewpoint USE viewpoint
field SFVec3f position IS position
field SFInt32 nextSlide 0
field SFInt32 effect 0
field SFNode effects TransitionEffects{}
field SFNode showTimeSensor TimeSensor{}
eventIn SFBool showTimer
field SFNode hideTimeSensor TimeSensor{}
eventIn SFBool hideTimer
field SFNode xswitch USE switch
field SFNode slides USE SWITCH
eventIn SFTime next IS next
eventIn SFTime prev IS previous
eventIn SFInt32 hide IS hide
eventOut SFInt32 update IS update
eventOut SFInt32 number IS number
eventOut SFString id IS id
eventOut SFInt32 level IS level
eventOut SFString direction IS direction
functions
url "vrmlscript:
function initialize() {
Browser.addRoute(showTimeSensor,'isActive',
me, 'showTimer');
Browser.addRoute(hideTimeSensor,'isActive',
me, 'hideTimer');
viewpoint.set_bind = TRUE;
setBgColor(); // AE
if (auto) {
x = 1.1*Browser.windowAspect; y = 1.18*1.8; z=0.5;
body.scale = new SFVec3f(x,y,z);
}
id = 'start';
number = 0;
direction = 'forward';
}
function setBgColor() {
var currSlide = slides.whichChoice;
var slide = slides.choice[currSlide];
if(slide.hasBgColor) {
background.skyColor = slide.bgColor;
}
decoration.whichChoice = slide.bgChoice;
//viewpoint.position = position;
//viewpoint.set_bind = TRUE;
}
hide
function hide(value) {
xswitch.whichChoice = value;
}
next
function next(value,time) {
var nrSlides = slides.choice.length;
var currSlide = slides.whichChoice;
var slide = slides.choice[currSlide];
var currLevel = slide.showLevel;
var toon = show;
direction = 'forward';
if(currLevel+1 >= slide.nrLevels) {
if(currSlide+1 >= nrSlides) {
level = 0;
nextSlide = 0;
} else {
level = 0;
nextSlide = currSlide + 1;
}
number = nextSlide;
slides.choice[nextSlide].showLevel = 0;
id = slides.choice[nextSlide].id;
toon = show || slides.choice[nextSlide].show;
if (toon) {
hideTimeSensor.startTime = time;
hideTimeSensor.stopTime = time + 3;
} else {
slides.whichChoice = nextSlide;
}
update = 1;
} else {
slide.showLevel = currLevel+1;
level = currLevel + 1;
update = 2;
}
}
previous
function prev(value,time) {
var nrSlides = slides.choice.length;
var currSlide = slides.whichChoice;
var slide = slides.choice[currSlide];
var currLevel = slide.showLevel;
var toon = show;
direction = 'backward';
if(currLevel-1 <= -1) {
if(currSlide-1 <= -1) {
nextSlide = nrSlides - 1;
} else {
nextSlide = currSlide - 1;
}
number = nextSlide;
slides.choice[nextSlide].showLevel =
slides.choice[nextSlide].nrLevels - 1;
id = slides.choice[nextSlide].id;
toon = show || slides.choice[nextSlide].show;
if (toon) {
hideTimeSensor.startTime = time;
hideTimeSensor.stopTime = time + 3;
} else {
slides.whichChoice = nextSlide;
}
update = 3;
} else {
slide.showLevel = currLevel-1;
level = slide.showLevel;
update = 4;
}
}
show
function showTimer(value,time) {
var currSlide = slides.whichChoice;
var slide = slides.choice[currSlide];
if(value) {
if(slide.showEffect == -1) {
effect = Math.round(Math.random()*
effects.show.length);
if(effect >= effects.show.length) {
effect=0;
}
} else {
effect = slide.showEffect;
}
Browser.addRoute(effects.show[effect],
'translation',
slide,
'translation');
Browser.addRoute(effects.show[effect],
'rotation',
slide,
'rotation');
Browser.addRoute(showTimeSensor,
'fraction_changed',
effects.show[effect],
'set_fraction');
effects.show[effect].set_fraction = 0.0;
} else {
Browser.deleteRoute(effects.show[effect],
'translation',
slide,
'translation');
Browser.deleteRoute(effects.show[effect],
'rotation',
slide,
'rotation');
Browser.deleteRoute(showTimeSensor,
'fraction_changed',
effects.show[effect],
'set_fraction');
}
}
hide
function hideTimer(value,time) {
var currSlide = slides.whichChoice;
var slide = slides.choice[currSlide];
if(value) {
if(slide.hideEffect == -1) {
effect = Math.round(Math.random()*
effects.hide.length);
if(effect >= effects.hide.length) {
effect=0;
}
} else {
effect = slide.hideEffect;
}
Browser.addRoute(effects.hide[effect],
'translation',
slide,
'translation');
Browser.addRoute(effects.hide[effect],
'rotation',
slide,
'rotation');
Browser.addRoute(hideTimeSensor,
'fraction_changed',
effects.hide[effect],
'set_fraction');
effects.hide[effect].set_fraction = 0.0;
} else {
Browser.deleteRoute(effects.hide[effect],
'translation',
slide,
'translation');
Browser.deleteRoute(effects.hide[effect],
'rotation',
slide,
'rotation');
Browser.deleteRoute(hideTimeSensor,
'fraction_changed',
effects.hide[effect],
'set_fraction');
// Start show-animation
slides.whichChoice = nextSlide;
setBgColor();
showTimeSensor.startTime = time;
showTimeSensor.stopTime = time + 3;
}
}
"
}
}
(C) A. Eliëns
21/5/2007
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.