<!-- Utilize ExtrusionCrossSection ProtoInstance as a Shape node (with containerField="children") rather than an Extrusion node (with containerField="geometry"). -->
<
ExternProtoDeclare name='
ExtrusionCrossSection'
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 '
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 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'
type='
"EXAMINE" "ANY"'
transitionType='
"ANIMATE"'
transitionTime='
1.0'/>
<
Viewpoint description='
ship hull'
position='
0 0 40'
retainUserOffsets='
false'/>
<
Viewpoint description='
stack'
position='
8 5 20'
retainUserOffsets='
false'/>
<
Viewpoint description='
smoke extrusion start'
position='
6.8 7 10'
retainUserOffsets='
false'/>
<
Viewpoint description='
forward starboard quarter'
orientation='
0 1 0 0.5'
position='
20 3 25'
retainUserOffsets='
false'/>
<
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'
retainUserOffsets='
false'/>
</
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'
transparency='
0'/>
<!-- ==================== -->
<
Transform DEF='
SmokePosition'
translation='
5.8 7 0'>
<!-- Smoke shows that crossSection, spine, scale and orientation can be animated -->
<!--
Smoke ROUTE:
[
from SmokeSpineInterpolator.value_changed to set_spine
]
-->
<
ProtoInstance name='
ExtrusionCrossSection'
DEF='
Smoke'>
<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>
<!--
TouchSmoke ROUTE:
[
from touchTime to SmokeClock.startTime
]
-->
<
TouchSensor DEF='
TouchSmoke'
description='
click smoke to animate'/>
<!--
SmokeClock ROUTEs:
[
from TouchSmoke.touchTime to startTime
]
[
from fraction_changed to SmokeSpineInterpolator.set_fraction
]
-->
<
TimeSensor DEF='
SmokeClock'
cycleInterval='
30'
startTime='
-1'/>
<!--
SmokeSpineInterpolator ROUTEs:
[
from SmokeClock.fraction_changed to set_fraction
]
[
from value_changed to Smoke.set_spine
]
-->
<
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 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>