Détail du proto 'Rotation Uniforme'

Exemple d'utilisation du proto: train épicycloïdal

#VRML V2.0 utf8

PROTO RotationUniforme[

  exposedField MFNode children [ ]

  field SFTime cycleInterval 10

  field SFVec3f AxeRotation 0 1 0

  eventIn SFTime MarcheArret

  eventIn SFTime RAZ

]

{

  DEF PieceTourne Transform { children IS children }

  DEF PieceTourne_Temps TimeSensor {cycleInterval IS cycleInterval loop FALSE }

  DEF PieceTourne_tourne OrientationInterpolator {

    key [ 0.0 , 0.3333, 0.6666, 1 ]

    keyValue [ 0 0 1 0,0 0 1 -2.09,0 0 1 -4.18,0 0 1 0 ]

  }

  Script {

    field SFNode NoeudPieceTourne USE PieceTourne

    field SFNode NoeudPieceTourne_Temps USE PieceTourne_Temps

    field SFNode NoeudPieceTourne_tourne USE PieceTourne_tourne

    field SFTime cycleInterval IS cycleInterval

    field SFVec3f AxeRotation IS AxeRotation

    eventIn SFTime MarcheArret IS MarcheArret

    eventIn SFTime RAZ IS RAZ

    url"javascript:

    function initialize(){

      for(i=0;i<4;i++){

        NoeudPieceTourne_tourne.keyValue[i][0]=AxeRotation[0]

        NoeudPieceTourne_tourne.keyValue[i][1]=AxeRotation[1]

        NoeudPieceTourne_tourne.keyValue[i][2]=AxeRotation[2]

      }

    }

    function RAZ(value) {

      NoeudPieceTourne_Temps.loop=FALSE

      NoeudPieceTourne_Temps.stopTime=value

      NoeudPieceTourne.rotation[3]=0

      NoeudPieceTourne_Temps.fraction_changed=0

    }

    function MarcheArret(value) {

      if (NoeudPieceTourne_Temps.loop==FALSE){AnimationDepart(value)}

      else {AnimationPause(value)}

    }

    function AnimationDepart(value) {

      NoeudPieceTourne_Temps.enabled=TRUE

      NoeudPieceTourne_Temps.set_loop=TRUE

      NoeudPieceTourne_Temps.set_startTime=value

    }

    function AnimationPause(value) {

      if(NoeudPieceTourne_Temps.enabled==FALSE){

        NoeudPieceTourne_Temps.startTime=NoeudPieceTourne_Temps.startTime+value-TimeDebutPause

        NoeudPieceTourne_Temps.enabled=TRUE

      }

      else {

        NoeudPieceTourne_Temps.enabled=FALSE

        TimeDebutPause=value

      }

    }

    "

  }

  ROUTE PieceTourne_Temps.fraction_changed TO PieceTourne_tourne.set_fraction

  ROUTE PieceTourne_tourne.value_changed TO PieceTourne.set_rotation

}