<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.3//EN" "https://www.web3d.org/specifications/x3d-3.3.dtd">
<X3D profile='Immersive' version='3.3' xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation='https://www.web3d.org/specifications/x3d-3.3.xsd'>
  <head>
    <meta content='BoxSwitch.x3d' name='title'/>
    <meta content='Don Brutzman' name='creator'/>
    <meta content='30 December 2015' name='created'/>
    <meta content='26 March 2026' name='modified'/>
    <meta content='Demonstrate simple Switch animation by sequencing through a set of Box nodes that are each covered by a different ImageTexture.' name='description'/>
    <meta content='CubeWithLabeledSidesViewpointSequencer.png' name='Image'/>
    <meta content='BoxSwitch.mp4' name='MovingImage'/>
    <meta content='CubeWithLabeledSides.x3d' name='reference'/>
    <meta content='images/CubeSideImages.pdf' name='drawing'/>
    <meta content='images/CubeSideImages.vsd' name='drawing'/>
    <meta content='https://www.web3d.org/x3d/content/examples/X3dForAdvancedModeling/Animation/BoxSwitch.x3d' name='identifier'/>
    <meta content='X3D-Edit 4.0, https://www.web3d.org/x3d/tools/X3D-Edit' name='generator'/>
    <meta content='../license.html' name='license'/>
  </head>
  <Scene>
    <WorldInfo title='BoxSwitch.x3d'/>
    <Background skyColor='0.8 0.8 0.9'/>
    <NavigationInfo type='"EXAMINE" "FLY" "WALK" "ANY"'/>
    <Switch DEF='BoxSwitcher' whichChoice='-1'>
      <Shape>
        <Box DEF='UnitBox'/>
        <Appearance>
          <ImageTexture url='"images/RedImage.png" "https://www.web3d.org/x3d/content/examples/X3dForAdvancedModeling/GeometricShapes/images/RedImage.png"'/>
        </Appearance>
      </Shape>
      <Shape>
        <Box USE='UnitBox'/>
        <Appearance>
          <ImageTexture url='"images/GreenImage.png" "https://www.web3d.org/x3d/content/examples/X3dForAdvancedModeling/GeometricShapes/images/GreenImage.png"'/>
        </Appearance>
      </Shape>
      <Shape>
        <Box USE='UnitBox'/>
        <Appearance>
          <ImageTexture url='"images/TurquoiseImage.png" "https://www.web3d.org/x3d/content/examples/X3dForAdvancedModeling/GeometricShapes/images/TurquoiseImage.png"'/>
        </Appearance>
      </Shape>
      <Shape>
        <Box USE='UnitBox'/>
        <Appearance>
          <ImageTexture url='"images/YellowImage.png" "https://www.web3d.org/x3d/content/examples/X3dForAdvancedModeling/GeometricShapes/images/YellowImage.png"'/>
        </Appearance>
      </Shape>
      <Shape>
        <Box USE='UnitBox'/>
        <Appearance>
          <ImageTexture url='"images/WhiteImage.png" "https://www.web3d.org/x3d/content/examples/X3dForAdvancedModeling/GeometricShapes/images/WhiteImage.png"'/>
        </Appearance>
      </Shape>
      <Shape>
        <Box USE='UnitBox'/>
        <Appearance>
          <ImageTexture url='"images/GreyImage.png" "https://www.web3d.org/x3d/content/examples/X3dForAdvancedModeling/GeometricShapes/images/GreyImage.png"'/>
        </Appearance>
      </Shape>
    </Switch>
    <!-- Animated Box -->
    <TimeSensor DEF='Clock' cycleInterval='12' loop='true'/>
    <IntegerSequencer DEF='Sequencer' key='0 0.1667 0.3333 0.5 0.6667 0.8333 1' keyValue='0 1 2 3 4 5 0'/>
    <ROUTE fromField='fraction_changed' fromNode='Clock' toField='set_fraction' toNode='Sequencer'/>
    <ROUTE fromField='value_changed' fromNode='Sequencer' toField='whichChoice' toNode='BoxSwitcher'/>
    <Viewpoint DEF='OrbitingView' description='Orbiting view' orientation='0 1 0 -1.57' position='-8 0 0'/>
    <!-- Animated Viewpoint, orbiting about the origin -->
    <PositionInterpolator DEF='CircularPathPositionInterpolator' key='0 0.02778 0.05556 0.08333 0.11111 0.13889 0.16667 0.19444 0.22222 0.25 0.27778 0.30556 0.33333 0.36111 0.38889 0.41667 0.44444 0.47222 0.5 0.52778 0.55556 0.58333 0.61111 0.63889 0.66667 0.69444 0.72222 0.75 0.77778 0.80556 0.83333 0.86111 0.88889 0.91667 0.94444 0.97222 1' keyValue='0 0 8 1.389 0 7.878 2.736 0 7.518 4 0 6.928 5.142 0 6.128 6.128 0 5.142 6.928 0 4 7.518 0 2.736 7.878 0 1.389 8 0 0 7.878 0 -1.389 7.518 0 -2.736 6.928 0 -4 6.128 0 -5.142 5.142 0 -6.128 4 0 -6.928 2.736 0 -7.518 1.389 0 -7.878 0 0 -8 -1.389 0 -7.878 -2.736 0 -7.518 -4 0 -6.928 -5.142 0 -6.128 -6.128 0 -5.142 -6.928 0 -4 -7.518 0 -2.736 -7.878 0 -1.389 -8 0 -0 -7.878 0 1.389 -7.518 0 2.736 -6.928 0 4 -6.128 0 5.142 -5.142 0 6.128 -4 0 6.928 -2.736 0 7.518 -1.389 0 7.878 0 0 8'/>
    <ROUTE fromField='fraction_changed' fromNode='Clock' toField='set_fraction' toNode='CircularPathPositionInterpolator'/>
    <ROUTE fromField='value_changed' fromNode='CircularPathPositionInterpolator' toField='position' toNode='OrbitingView'/>
    <OrientationInterpolator DEF='CenterFacingOrientationInterpolator' key='0 0.3333 0.6667 1' keyValue='0 1 0 0 0 1 0 2.094395 0 1 0 4.18879 0 1 0 0'/>
    <ROUTE fromField='fraction_changed' fromNode='Clock' toField='set_fraction' toNode='CenterFacingOrientationInterpolator'/>
    <ROUTE fromField='value_changed' fromNode='CenterFacingOrientationInterpolator' toField='orientation' toNode='OrbitingView'/>
    <!-- Additional Viewpoints -->
    <Viewpoint description='Front view' orientation='0 1 0 1.57' position='8 0 0'/>
    <Viewpoint description='Back view' orientation='0 1 0 -1.57' position='-8 0 0'/>
    <Viewpoint description='Left view' position='0 0 8'/>
    <Viewpoint description='Right view' orientation='0 1 0 3.1416' position='0 0 -8'/>
    <Viewpoint description='Top view' orientation='1 0 0 -1.57' position='0 8 0'/>
    <Viewpoint description='Bottom view' orientation='1 0 0 1.57' position='0 -8 0'/>
  </Scene>
</X3D>