media @ VU
[] readme course preface I 1 2 II 3 4 III 5 6 7 IV 8 9 10 V 11 12 afterthoughts appendix references examples resources _

talk show tell print

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.