<!-- Utilize ExtrusionCrossSection ProtoInstance as a Shape node (with containerField="children") rather than an Extrusion node (with containerField="geometry"). -->
<WorldInfo title='ExtrusionCrossSectionExampleShip.x3d'/>
<ExternProtoDeclare name='ExtrusionCrossSection' appinfo='Shape prototype for Extrusion node that also draws spine line plus oriented scaled cross sections at each spine point'
documentation='
https://www.web3d.org/x3d/content/examples/Basic/course/ExtrusionCrossSectionPrototype.x3d
'
url='
"ExtrusionCrossSectionPrototype.x3d#ExtrusionCrossSection" "https://www.web3d.org/x3d/content/examples/Basic/course/ExtrusionCrossSectionPrototype.x3d#ExtrusionCrossSection" "ExtrusionCrossSectionPrototype.wrl#ExtrusionCrossSection" "https://www.web3d.org/x3d/content/examples/Basic/course/ExtrusionCrossSectionPrototype.wrl#ExtrusionCrossSection" '
>
<!-- run-time eventIn Extrusion-modification interfaces for VRML 97 compatibility -->
<field name='name' type='SFString' accessType='initializeOnly'
appinfo='Extrusion name'
/>
<field name='crossSection' type='MFVec2f' accessType='initializeOnly'
appinfo='Extrusion field'
/>
<field name='spine' type='MFVec3f' accessType='initializeOnly'
appinfo='Extrusion field'
/>
<field name='scale' type='MFVec2f' accessType='initializeOnly'
appinfo='Extrusion field'
/>
<field name='orientation' type='MFRotation' accessType='initializeOnly'
appinfo='Extrusion field'
/>
<field name='beginCap' type='SFBool' accessType='initializeOnly'
appinfo='Extrusion field'
/>
<field name='endCap' type='SFBool' accessType='initializeOnly'
appinfo='Extrusion field'
/>
<field name='ccw' type='SFBool' accessType='initializeOnly'
appinfo='Extrusion field'
/>
<field name='convex' type='SFBool' accessType='initializeOnly'
appinfo='Extrusion field'
/>
<field name='creaseAngle' type='SFFloat' accessType='initializeOnly'
appinfo='Extrusion field'
/>
<field name='solid' type='SFBool' accessType='initializeOnly'
appinfo='Extrusion field'
/>
<field name='spineColor' type='SFColor' accessType='inputOutput'
appinfo='emissiveColor of spine'
/>
<field name='crossSectionColor' type='SFColor' accessType='inputOutput'
appinfo='diffuseColor of crossSection'
/>
<field name='crossSectionTransparency' type='SFFloat' accessType='inputOutput'
appinfo='transparency of crossSection'
/>
<field name='extrusionColor' type='SFColor' accessType='inputOutput'
appinfo='diffuseColor of extrusion hull'
/>
<field name='extrusionTransparency' type='SFFloat' accessType='inputOutput'
appinfo='transparency of extrusion hull'
/>
<field name='extrusionImageTexture' type='SFNode' accessType='initializeOnly'
appinfo='Image to apply to Extrusion'
/>
<field name='extrusionTextureTransform' type='SFNode' accessType='initializeOnly'
appinfo='TextureTransform coordinates of image applied to Extrusion'
/>
<field name='set_crossSection' type='MFVec2f' accessType='inputOnly'
appinfo='Extrusion field'
/>
<field name='set_spine' type='MFVec3f' accessType='inputOnly'
appinfo='Extrusion field'
/>
<field name='set_scale' type='MFVec2f' accessType='inputOnly'
appinfo='Extrusion field'
/>
<field name='set_orientation' type='MFRotation' accessType='inputOnly'
appinfo='Extrusion field'
/>
<field name='traceEnabled' type='SFBool' accessType='initializeOnly'
appinfo='Whether to provide initialization trace statements showing node construction'
/>
</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'>
</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 -->
<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>
<
ROUTE
fromNode='
TouchSmoke' fromField='touchTime' toNode='
SmokeClock' toField='startTime'/>
<
ROUTE
fromNode='
SmokeClock' fromField='fraction_changed' toNode='
SmokeSpineInterpolator' toField='set_fraction'/>
<
ROUTE
fromNode='
SmokeSpineInterpolator' fromField='value_changed' toNode='
Smoke' toField='set_spine'/>
</Transform>
<Transform DEF='SuperstructurePosition' translation='12 1 0'>
<ProtoInstance name='ExtrusionCrossSection' DEF='Superstructure'>
<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 name='ExtrusionCrossSection' DEF='Stack'>
<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 name='ExtrusionCrossSection' DEF='Hull'>
<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'>
</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'>
</Transform>
</Transform>