<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.2//EN" "http://www.web3d.org/specifications/x3d-3.2.dtd">
<X3D profile='Immersive' version='3.2' xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation='http://www.web3d.org/specifications/x3d-3.2.xsd'>
  <head>
    <meta content='ExtrusionCrossSectionExampleShip.x3d' name='title'/>
    <meta content='Don Brutzman' name='creator'/>
    <meta content='20 December 1999' name='created'/>
    <meta content='7 February 2012' name='modified'/>
    <meta content='Ship model as example use of ExtrusionCrossSectionPrototype for drawing several different Extrusion spines and cross sections.' name='description'/>
    <meta content='ExtrusionCrossSectionExampleShip.png' name='image'/>
    <meta content='Utilize ExtrusionCrossSection ProtoInstance as a Shape node (with containerField="children") rather than an Extrusion node (with containerField="geometry").' name='hint'/>
    <meta content='ExtrusionExampleShip.x3d' name='reference'/>
    <meta content='VRML 97 Specification, 6.18 Extrusion' name='reference'/>
    <meta content='http://www.web3d.org/technicalinfo/specifications/vrml97/part1/nodesRef.html#Extrusion' name='reference'/>
    <meta content='VRML 97 Specification, Figure 6.6' name='image'/>
    <meta content='http://www.web3d.org/technicalinfo/specifications/vrml97/part1/Images/Extrusion.gif' name='image'/>
    <meta content='http://www.web3d.org/x3d/content/examples/Basic/course/ExtrusionCrossSectionExampleShip.x3d' name='identifier'/>
    <meta content='X3D-Edit 3.2, https://savage.nps.edu/X3D-Edit' name='generator'/>
    <meta content='../license.html' name='license'/>
  </head>
  <Scene>
    <!-- Utilize ExtrusionCrossSection ProtoInstance as a Shape node (with containerField="children") rather than an Extrusion node (with containerField="geometry"). -->
    <ExternProtoDeclare appinfo='Shape prototype for Extrusion node that also draws spine line plus oriented scaled cross sections at each spine point' documentation='http://www.web3d.org/x3d/content/examples/Basic/course/ExtrusionCrossSectionPrototype.x3d' name='ExtrusionCrossSection' url='"ExtrusionCrossSectionPrototype.x3d#ExtrusionCrossSection" "http://www.web3d.org/x3d/content/examples/Basic/course/ExtrusionCrossSectionPrototype.x3d#ExtrusionCrossSection" "ExtrusionCrossSectionPrototype.wrl#ExtrusionCrossSection" "http://www.web3d.org/x3d/content/examples/Basic/course/ExtrusionCrossSectionPrototype.wrl#ExtrusionCrossSection"'>
      <!-- run-time eventIn Extrusion-modification interfaces for VRML 97 compatibility -->
      <field accessType='initializeOnly' appinfo='Extrusion name' name='name' type='SFString'/>
      <field accessType='initializeOnly' appinfo='Extrusion field' name='crossSection' type='MFVec2f'/>
      <field accessType='initializeOnly' appinfo='Extrusion field' name='spine' type='MFVec3f'/>
      <field accessType='initializeOnly' appinfo='Extrusion field' name='scale' type='MFVec2f'/>
      <field accessType='initializeOnly' appinfo='Extrusion field' name='orientation' type='MFRotation'/>
      <field accessType='initializeOnly' appinfo='Extrusion field' name='beginCap' type='SFBool'/>
      <field accessType='initializeOnly' appinfo='Extrusion field' name='endCap' type='SFBool'/>
      <field accessType='initializeOnly' appinfo='Extrusion field' name='ccw' type='SFBool'/>
      <field accessType='initializeOnly' appinfo='Extrusion field' name='convex' type='SFBool'/>
      <field accessType='initializeOnly' appinfo='Extrusion field' name='creaseAngle' type='SFFloat'/>
      <field accessType='initializeOnly' appinfo='Extrusion field' name='solid' type='SFBool'/>
      <field accessType='inputOutput' appinfo='emissiveColor of spine' name='spineColor' type='SFColor'/>
      <field accessType='inputOutput' appinfo='diffuseColor of crossSection' name='crossSectionColor' type='SFColor'/>
      <field accessType='inputOutput' appinfo='transparency of crossSection' name='crossSectionTransparency' type='SFFloat'/>
      <field accessType='inputOutput' appinfo='diffuseColor of extrusion hull' name='extrusionColor' type='SFColor'/>
      <field accessType='inputOutput' appinfo='transparency of extrusion hull' name='extrusionTransparency' type='SFFloat'/>
      <field accessType='initializeOnly' appinfo='Image to apply to Extrusion' name='extrusionImageTexture' type='SFNode'/>
      <field accessType='initializeOnly' appinfo='TextureTransform coordinates of image applied to Extrusion' name='extrusionTextureTransform' type='SFNode'/>
      <field accessType='inputOnly' appinfo='Extrusion field' name='set_crossSection' type='MFVec2f'/>
      <field accessType='inputOnly' appinfo='Extrusion field' name='set_spine' type='MFVec3f'/>
      <field accessType='inputOnly' appinfo='Extrusion field' name='set_scale' type='MFVec2f'/>
      <field accessType='inputOnly' appinfo='Extrusion field' name='set_orientation' type='MFRotation'/>
      <field accessType='initializeOnly' appinfo='Whether to provide initialization trace statements showing node construction' name='traceEnabled' type='SFBool'/>
    </ExternProtoDeclare>
    <!-- ==================== -->
    <!-- Example instance -->
    <NavigationInfo speed='4'/>
    <Viewpoint description='ship hull' position='0 0 40'/>
    <Viewpoint description='stack' position='8 5 20'/>
    <Viewpoint description='smoke extrusion start' position='6.8 7 10'/>
    <Viewpoint description='forward starboard quarter' orientation='0 1 0 0.5' position='20 3 25'/>
    <Transform rotation='0 1 0 1.57' translation='15 30 0'>
      <Viewpoint description='touch smoke to animate' orientation='1 0 0 -1' position='0 0 0'/>
    </Transform>
    <Background groundColor='0.7 0.7 0.7' skyAngle='0.05 1.5 1.59' skyColor='0.6 0.6 0.4 0.4 0.4 0.7 0.3 0.3 0.6 0.1 0.1 0.3'/>
    <!-- ==================== -->
    <Transform DEF='SmokePosition' translation='5.8 7 0'>
      <!-- Smoke shows that crossSection, spine, scale and orientation can be animated -->
      <ProtoInstance DEF='Smoke' name='ExtrusionCrossSection'>
        <fieldValue name='name' value='Smoke'/>
        <fieldValue name='crossSection' value='0 1 -1 0 0 -0.5 1.5 0 0 1'/>
        <fieldValue name='spine' value='0 0 0 -1 0 0 -2 0 0 -3 0 0 -5 0 0'/>
        <fieldValue name='scale' value='0.8 0.7 0.7 0.6 0.6 0.5 0.5 0.3 0.4 0.2'/>
        <fieldValue name='orientation' value='0 1 0 0 0 1 0 0 0 1 0 -0.4 0 1 0 0 1 0 0 0.4'/>
        <fieldValue name='creaseAngle' value='1'/>
        <fieldValue name='solid' value='false'/>
        <fieldValue name='spineColor' value='1 1 1'/>
        <fieldValue name='crossSectionColor' value='0.2 0.2 0.6'/>
        <fieldValue name='extrusionColor' value='0.0 0.9 0.9'/>
        <fieldValue name='extrusionTransparency' value='0.5'/>
        <fieldValue name='traceEnabled' value='false'/>
      </ProtoInstance>
      <TouchSensor DEF='TouchSmoke' description='click smoke to animate'/>
      <TimeSensor DEF='SmokeClock' cycleInterval='30' startTime='-1'/>
      <CoordinateInterpolator DEF='SmokeSpineInterpolator' key='0 0.2 0.5 0.8 1' keyValue='0 0 0 -1 0 0 -2 0 0 -3 0 0 -5 0 0 0 0 0 -2 0 0 -4 -0.5 0 -6 -1 0 -8 -2 0 0 0 0 -4 0 0 -8 -1 0 -13 -2 0 -20 -2.5 0 0 0 0 -2 0 0 -4 -0.5 0 -6 -1 0 -8 -2 0 0 0 0 -1 0 0 -2 0 0 -3 0 0 -5 0 0'/>
      <ROUTE fromField='touchTime' fromNode='TouchSmoke' toField='startTime' toNode='SmokeClock'/>
      <ROUTE fromField='fraction_changed' fromNode='SmokeClock' toField='set_fraction' toNode='SmokeSpineInterpolator'/>
      <ROUTE fromField='value_changed' fromNode='SmokeSpineInterpolator' toField='set_spine' toNode='Smoke'/>
    </Transform>
    <Transform DEF='SuperstructurePosition' translation='12 1 0'>
      <ProtoInstance DEF='Superstructure' name='ExtrusionCrossSection'>
        <fieldValue name='name' value='Superstructure'/>
        <fieldValue name='crossSection' value='0.1 1 0.1 -1 -1 -1 -1 1 0.1 1'/>
        <fieldValue name='spine' value='0 0 0 0 1 0 0 1.95 0 0 1.96 0 0 3 0'/>
        <fieldValue name='scale' value='6 2 6 2 6 2 1 1.8 1 1.8'/>
        <fieldValue name='spineColor' value='0.7 0.7 0'/>
        <fieldValue name='ccw' value='true'/>
        <fieldValue name='crossSectionColor' value='0.6 0.6 0.2'/>
        <fieldValue name='extrusionColor' value='0.3 0.6 0.6'/>
        <fieldValue name='extrusionTransparency' value='0.6'/>
        <fieldValue name='traceEnabled' value='false'/>
      </ProtoInstance>
    </Transform>
    <Transform DEF='StackPosition' translation='8 1 0'>
      <ProtoInstance DEF='Stack' name='ExtrusionCrossSection'>
        <fieldValue name='name' value='Stack'/>
        <fieldValue name='crossSection' value='0 1 0.38 0.92 0.71 0.71 0.92 0.38 1 0 0.92 -0.38 0.71 -0.71 0.38 -0.92 0 -1 -0.38 -0.92 -0.71 -0.71 -0.92 -0.38 -1 0 -0.92 0.38 -0.71 0.71 -0.38 0.92 0 1'/>
        <fieldValue name='spine' value='0.1 2 0 0 5 0 -0.4 5.6 0 -1 6 0'/>
        <fieldValue name='scale' value='1 1 1 1 0.9 0.85 0.8 0.4'/>
        <fieldValue name='orientation' value='0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 0.4'/>
        <fieldValue name='spineColor' value='1 1 1'/>
        <fieldValue name='creaseAngle' value='1'/>
        <fieldValue name='crossSectionColor' value='0.8 0.2 0.2'/>
        <fieldValue name='crossSectionTransparency' value='0.1'/>
        <fieldValue name='extrusionColor' value='0.3 0.3 0.3'/>
        <fieldValue name='extrusionTransparency' value='0.5'/>
        <fieldValue name='traceEnabled' value='false'/>
      </ProtoInstance>
    </Transform>
    <Transform DEF='HullPosition' translation='0 1 0'>
      <ProtoInstance DEF='Hull' name='ExtrusionCrossSection'>
        <fieldValue name='name' value='Hull'/>
        <fieldValue name='solid' value='false'/>
        <fieldValue name='crossSection' value='0 1 0.38 0.92 0.71 0.71 0.92 0.38 1 0 0.92 -0.38 0.71 -0.71 0.38 -0.92 0 -1'/>
        <fieldValue name='spine' value='-20 0 0 -17 0 0 0 0 0 10 0 0 22 1 0'/>
        <fieldValue name='scale' value='3 4 4 4 4 4 4 4 5 .1'/>
        <fieldValue name='orientation' value='1 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 1 -0.5'/>
        <fieldValue name='traceEnabled' value='false'/>
      </ProtoInstance>
    </Transform>
    <!-- ==================== -->
    <!-- Display world coordinate axes at (0 0 0) -->
    <Transform scale='5 5 5'>
      <Inline DEF='CoordinateAxes' url='"../../X3dForWebAuthors/Chapter03-Grouping/CoordinateAxes.x3d" "../../Savage/Tools/Authoring/CoordinateAxes.x3d" "http://X3dGraphics.com/examples/X3dForWebAuthors/Chapter03-Grouping/CoordinateAxes.x3d" "https://savage.nps.edu/Savage/Tools/Authoring/CoordinateAxes.x3d" "../../X3dForWebAuthors/Chapter03-Grouping/CoordinateAxes.wrl" "../../Savage/Tools/Authoring/CoordinateAxes.wrl" "http://X3dGraphics.com/examples/X3dForWebAuthors/Chapter03-Grouping/CoordinateAxes.wrl" "https://savage.nps.edu/Savage/Tools/Authoring/CoordinateAxes.wrl"'/>
    </Transform>
    <!-- Display smoke extrusion coordinate axes: y along spine, x pointing up -->
    <Transform translation='6 8.5 0'>
      <Transform rotation='0 0 1 1.57'>
        <Inline USE='CoordinateAxes'/>
      </Transform>
    </Transform>
  </Scene>
</X3D>
