﻿<?xml version="1.0" encoding="UTF-8"?>
<X3D profile="Immersive"  version="3.1">
  <!-- This is Image Clip template. It defines the shape into which the image is mapped as well
    as duration timer with start/end logic. -->
  <Transform>
    <MetadataSet name='Template'>
      <MetadataString containerField='value' name='TemplateID' value='"DefaultImageClipTemplate"'/>
      <MetadataInteger containerField='value' name='TemplateKind' value='1'/>
      <MetadataString containerField='value' name='TimeDependentNode' value='""'/>
    </MetadataSet>
    
    <Transform>
      <!-- Properties Set -->
      <MetadataSet DEF='ExtentSockets'>

        <MetadataSet containerField='value' name='ExtentSocket'>
          <!--Change property type to IN-->
          <MetadataString containerField='value' name='socketName' value='"translate"'/>
          <MetadataFloat containerField='value' name='socketCompatibilitySet' value='1.0'/>
          <MetadataString containerField='value' name='socketParentDEF' value='"BaseExtentTransform"'/>
          <MetadataString containerField='value' name='socketConnectAttribute' value='"translation"'/>
          <MetadataString containerField='value' name='socketConnectToExtent' value='"either"'/>
        </MetadataSet>
        
        <MetadataSet containerField='value' name='ExtentSocket'>
          <MetadataString containerField='value' name='socketName' value='"scale"'/>
          <MetadataFloat containerField='value' name='socketCompatibilitySet' value='1.0'/>
          <MetadataString containerField='value' name='socketParentDEF' value='"BaseExtentTransform"'/>
          <MetadataString containerField='value' name='socketConnectAttribute' value='"scale"'/>
          <MetadataString containerField='value' name='socketConnectToExtent' value='"either"'/>
        </MetadataSet>

        <MetadataSet containerField='value' name='ExtentSocket'>
          <MetadataString containerField='value' name='socketName' value='"rotate"'/>
          <MetadataFloat containerField='value' name='socketCompatibilitySet' value='1.0'/>
          <MetadataString containerField='value' name='socketParentDEF' value='"BaseExtentTransform"'/>
          <MetadataString containerField='value' name='socketConnectAttribute' value='"rotation"'/>
          <MetadataString containerField='value' name='socketConnectToExtent' value='"current"'/>
        </MetadataSet>

        <MetadataSet containerField='value' name='ExtentSocket'>
          <MetadataString containerField='value' name='socketName' value='"centerOfRotation"'/>
          <MetadataFloat containerField='value' name='socketCompatibilitySet' value='1.0'/>
          <MetadataString containerField='value' name='socketParentDEF' value='"BaseExtentTransform"'/>
          <MetadataString containerField='value' name='socketConnectAttribute' value='"center"'/>
          <MetadataString containerField='value' name='socketConnectToExtent' value='"current"'/>
        </MetadataSet>
        
        <MetadataSet containerField='value' name='ExtentSocket'>
          <MetadataString containerField='value' name='socketName' value='"rotate"'/>
          <MetadataFloat containerField='value' name='socketCompatibilitySet' value='1.0'/>
          <MetadataString containerField='value' name='socketParentDEF' value='"TransformFromNextExtent"'/>
          <MetadataString containerField='value' name='socketConnectAttribute' value='"rotation"'/>
          <MetadataString containerField='value' name='socketConnectToExtent' value='"next"'/>
        </MetadataSet>

        <MetadataSet containerField='value' name='ExtentSocket'>
          <MetadataString containerField='value' name='socketName' value='"centerOfRotation"'/>
          <MetadataFloat containerField='value' name='socketCompatibilitySet' value='1.0'/>
          <MetadataString containerField='value' name='socketParentDEF' value='"TransformFromNextExtent"'/>
          <MetadataString containerField='value' name='socketConnectAttribute' value='"center"'/>
          <MetadataString containerField='value' name='socketConnectToExtent' value='"next"'/>
        </MetadataSet>

        <MetadataSet containerField='value' name='ExtentSocket'>
          <MetadataString containerField='value' name='socketName' value='"transparency"'/>
          <MetadataFloat containerField='value' name='socketCompatibilitySet' value='1.0'/>
          <MetadataString containerField='value' name='socketParentDEF' value='"ExtentMaterial"'/>
          <MetadataString containerField='value' name='socketConnectAttribute' value='"transparency"'/>
          <MetadataString containerField='value' name='socketConnectToExtent' value='"either"'/>
        </MetadataSet>

        <MetadataSet containerField='value' name='ExtentSocket'>
          <MetadataString containerField='value' name='socketName' value='"appearanceShader"'/>
          <MetadataFloat containerField='value' name='socketCompatibilitySet' value='1.0'/>
          <MetadataString containerField='value' name='socketParentDEF' value='"AppearanceNode"'/>
          <MetadataString containerField='value' name='socketChildNodeType' value='"X3dShaderNode"'/>
          <MetadataString containerField='value' name='socketConnectToExtent' value='"either"'/>
        </MetadataSet>

        <MetadataSet containerField='value' name='ExtentSocket'>
          <MetadataString containerField='value' name='socketName' value='"textureTransform"'/>
          <MetadataFloat containerField='value' name='socketCompatibilitySet' value='1.0'/>
          <MetadataString containerField='value' name='socketParentDEF' value='"AppearanceNode"'/>
          <MetadataString containerField='value' name='socketChildNodeType' value='"X3dTextureTransform"'/>
          <MetadataString containerField='value' name='socketConnectToExtent' value='"current"'/>
        </MetadataSet>

        <MetadataSet containerField='value' name='ExtentSocket'>
          <MetadataString containerField='value' name='socketName' value='"grid"'/>
          <MetadataFloat containerField='value' name='socketCompatibilitySet' value='1.0'/>
          <MetadataString containerField='value' name='socketParentDEF' value='"ImageShape"'/>
          <MetadataString containerField='value' name='socketChildNodeType' value='"X3DGeometryNode"'/>
          <MetadataString containerField='value' name='socketConnectToExtent' value='"either"'/>
        </MetadataSet>

        <MetadataSet containerField='value' name='ExtentSocket'>
          <MetadataString containerField='value' name='socketName' value='"effectShader"'/>
          <MetadataFloat containerField='value' name='socketCompatibilitySet' value='1.0'/>
          <MetadataString containerField='value' name='socketParentDEF' value='"ExtentEffectMotionTexture"'/>
          <!-- MotionTexture needs to know when ImageTexture or ShaderSet are dirty so it can allocate resource only when needed.-->
          <MetadataString containerField='value' name='socketChildNodeType' value='"X3DShaderNode"'/>
          <MetadataString containerField='value' name='socketConnectToExtent' value='"either"'/>
        </MetadataSet>

      </MetadataSet>
    </Transform>

    <Transform DEF='BaseExtentTransform'>
      <MetadataSet name='BPSet'>
        <MetadataString containerField='value' name='rotateStepNinety' reference='Custom'/>
      </MetadataSet>
      <Transform DEF='TransformFromNextExtent'>
       <Transform DEF='InnerExtentTransform'>
        <Switch whichChoice="0" DEF="ExtentShapeSwitch">

          <Shape>
            <Appearance DEF='AppearanceNode'>
              <Material DEF='ExtentMaterial' transparency='0' diffuseColor='0 0 0' shininess='0'/>
              <MotionTexture DEF='ExtentEffectMotionTexture'>
              <!-- MotionTexture needs to know when ImageTexture or ShaderSet are dirty so it can allocate resource only when needed.-->
                <ImageTexture DEF='ImageTexture' containerField='texture' repeatS='false' repeatT='false' url='""' />
                <ShaderSet DEF='ExtentEffectShaderSet'/>
              </MotionTexture>
              <TextureTransform DEF='BaseTextureTransform' center='-0.5 -0.5' translation='0 0' rotation='0' scale='1 1' containerField='textureTransform'/>
            </Appearance>
            <IndexedFaceSet containerField='geometry' creaseAngle='0.524' coordIndex='0 1 2 -1 0 2 3 -1' texCoordIndex='0 1 2 -1 0 2 3 -1'>
              <Coordinate containerField='coord' point='-4 3 0 -4 -3 0 4 -3 0 4 3 0' />
              <TextureCoordinate DEF='Extent_TextureCoordinates' containerField='texCoord' point='0 1 0 0 1 0 1 1' />
            </IndexedFaceSet>
          </Shape>

          <!-- A DEF is needed on the shape because the code needs to reference it
               in order to inject a geometry node (not required on the shape above) -->
          <Shape DEF='ImageShape'>
            <Appearance USE='AppearanceNode'/>
          </Shape>

        </Switch>
       </Transform>
      </Transform>
      <Transform>
        <MetadataSet name='placeholder'>
          <MetadataString containerField='value' name='PlaceholderName' value='"Effects"'/>
        </MetadataSet>
      </Transform>
    </Transform>

  </Transform>
</X3D>
