X3D Model Documentation: M198Howitzer.x3d

  1  <?xml version="1.0" encoding="UTF-8"?>
  2 
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.0//EN" "https://www.web3d.org/specifications/x3d-3.0.dtd">
  3  <X3D profile='Immersive' version='3.0 xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation='https://www.web3d.org/specifications/x3d-3.0.xsd'>
  4       <head>
  5            <meta name='titlecontent='M198Howitzer.x3d'/>
  6            <meta name='descriptioncontent='M198 Howitzer to scale'/>
  7            <meta name='creatorcontent='J.P. McDonough'/>
  8            <meta name='createdcontent='7 January 2004'/>
  9            <meta name='modifiedcontent='28 November 2019'/>
 10            <meta name='referencecontent='M198-dvic502.jpg'/>
 11            <meta name='referencecontent='Impact.avi'/>
 12            <meta name='referencecontent='http://www.army.mil/fact_files_site/m198'/>
 13            <meta name='referencecontent='https://www.fas.org/man/dod-101/sys/land/m198.htm'/>
 14            <meta name='identifiercontent='https://savage.nps.edu/Savage/Weapons/Guns/M198Howitzer.x3d'/>
 15            <meta name='generatorcontent='X3D-Edit, https://savage.nps.edu/X3D-Edit'/>
 16            <meta name='licensecontent='../../license.html'/>
 17       </head>
<!--

<!--
Event Graph ROUTE Table shows event connections.
-->
<!-- to top Index for DEF nodes: AnimationControl, AnimationTransform, artyRound, BALLSIZE, BallTransform, barrel, barrelCover, barrelGroup, barrelMover1, basePlate, basePlateClamp, betweenTrails, black, BOOMCLOCK, BoomMaterial, BoomTimer, BoomTransform, BoxDownTimer, BoxUpTimer, brakeResevoir, breech, ButtonChoice, cami, camiPaint, camo, CannonFireSound, carriage_sensor, CircularHandle, clamp, ClearSphere, ClearSphere1, ClearSphere2, CLOCK, clock3, connectingCylinder, Crank, CrankShaft, downBarrel, elevatingMech1, elevMechMover1, ExampleViewPositionOrientation, explosion, explosionSound, explosionSounds, explosionsoundsensor, EXPSHAPE, fireMe, fireTheRound, handwheelGroup, hotGas, lbasePlateClamp, left_stantion, leftHandwheel, leftRim, leftSideBar1, leftSpade, leftTire, leftTrail, leftTrailMover, leftWheel, leftWheel1, linkBolt, LowerCar, LowerCarriage1, lowerElevMechExtender, lTrailSpreader, lTravelLockAnchor, M198_Howitzer, MoveBoxDown, MoveBoxUp, muzzle_break, muzzleBreak, recoil, recoilMover, RECOILTIMER, recoilTransform, rideTheRound, rightHandwheel, rightRim, rightSideBar, RightSpade, rightTire, RightTrail, rightTrailMover, rightTrunion, rightUpperCylinder, rightWheel, rightWheel1, rim, rotateUpperCarriage, roundOrientationInterpolator, roundPathInterpolator, roundSpinner, ruc, rucL, rucR, rWheelLift, ScaleInterp, SetBoxDown, SetBoxUp, Shaft, shiny, shinyPiece, shootRound, shotEffects, shrinkCylinder, shrinkCylinderR, sideBar, sideBars, sideView, sideViewClose, sign, spade, spinTimer, StrutOne, Struts, StrutThree, StrutTwo, target, targetSphere, theBarrel, theGround, theRound, theRoundSpinner, tire, Top, TopBall, trail, trailSpreader, TransparencyInterp, Transparent, travelLock, travelLockAnchor, travelLockClock, travelLockOrient, travelLockOrientor, travelLockPiece, travelLockSensor, traversingPlatform, traversingWheel, tube, tube1, tubeSensor, underTube, upperCarriage, upperCarriagePiece, upperCylinder1, upperCylinderMover, upperExtender, upperTravelLocker, wheelDown, wheelInterpolator, wheelLift, wheelRaiser, wheelSensor, wheelUp

Index for Viewpoint nodes: betweenTrails, downBarrel, rideTheRound, sideView, sideViewClose, target, underTube

Index for ExternProtoDeclare definition: ViewPositionOrientation
-->
 18       <Scene>
 19            <WorldInfo title='M198Howitzer.x3d'/>
 20            <ExternProtoDeclare name='ViewPositionOrientationappinfo='ViewPositionOrientation provides provides console output of local position and orientation as user navigates'   url=' "../../../Savage/Tools/Authoring/ViewPositionOrientationPrototype.x3d#ViewPositionOrientation" "https://savage.nps.edu/Savage/Tools/Authoring/ViewPositionOrientationPrototype.x3d#ViewPositionOrientation" "../../../Savage/Tools/Authoring/ViewPositionOrientationPrototype.wrl#ViewPositionOrientation" "https://savage.nps.edu/Savage/Tools/Authoring/ViewPositionOrientationPrototype.wrl#ViewPositionOrientation" '>
 21                 <field name='enabledtype='SFBoolaccessType='inputOutput'
                appinfo='Whether or not ViewPositionOrientation sends output to console.'/>
 22                 <field name='traceEnabledtype='SFBoolaccessType='initializeOnly'
                appinfo='Output internal trace messages for debugging this node - developer use only can be ignored.'/>
 23                 <field name='set_traceEnabledtype='SFBoolaccessType='inputOnly'
                appinfo='Ability to turn output tracing on/off at runtime.'/>
 24                 <field name='position_changedtype='SFVec3faccessType='outputOnly'
                appinfo='Output local position.'/>
 25                 <field name='orientation_changedtype='SFRotationaccessType='outputOnly'
                appinfo='Output local orientation.'/>
 26                 <field name='outputViewpointStringtype='MFStringaccessType='outputOnly'
                appinfo='MFString value of new Viewpoint'/>
 27            </ExternProtoDeclare>
 28            <ProtoInstance name='ViewPositionOrientationDEF='ExampleViewPositionOrientation'>
 29                 <fieldValue name='enabledvalue='false'/>
 30            </ProtoInstance>
 31            <Sound maxBack='100maxFront='100minBack='0.01minFront='0.01'>
 32 
               <!-- ROUTE information for CannonFireSound node:  [from shootRound.touchTime to startTime ] -->
               <AudioClip DEF='CannonFireSounddescription='Cannon fire sound'   url=' "../../GroundVehicles/T72M/CannonFire.wav" "https://savage.nps.edu/Savage/GroundVehicles/T72M/CannonFire.wav" '/>
 33            </Sound>
 34            <Viewpoint DEF='betweenTrailsdescription='between Trailsorientation='-1 0 0 0position='0 1.4 10'/>
 35            <Viewpoint DEF='sideViewClosedescription='Side View Closeorientation='0.007 0.997 0.076 1.7635position='9.8 2.2 -1.8'/>
 36            <Viewpoint DEF='sideViewdescription='from Sideorientation='0 1 0 1.57position='320 10 -160'/>
 37            <Viewpoint DEF='underTubedescription='under Tubeorientation='-0.02 -0.982 -0.19 3.1266position='0 5.7 -7.4'/>
 38            <Viewpoint DEF='downBarreldescription='down Barrelorientation='0.012 -0.925 -0.381 3.138position='-0.1 7.6 -6.7'/>
 39            <!-- Roughly to scale. -->
 40            <Group DEF='M198_Howitzer'>
 41                 <Group DEF='LowerCar'>
 42                      <Shape>
 43                           <Cylinder DEF='LowerCarriage1height='.5'/>
 44 
                         <!-- Appearance camiPaint is a DEF node that has 26 USE nodes: USE_1, USE_2, USE_3, USE_4, USE_5, USE_6, USE_7, USE_8, USE_9, USE_10, USE_11, USE_12, USE_13, USE_14, USE_15, USE_16, USE_17, USE_18, USE_19, USE_20, USE_21, USE_22, USE_23, USE_24, USE_25, USE_26 -->
                         <Appearance DEF='camiPaint'>
 45                                <Material DEF='camiambientIntensity='0.25diffuseColor='0.054 0.233 0.39shininess='0'/>
 46 
                              <!-- ImageTexture camo is a DEF node that has 1 USE node: USE_1 -->
                              <ImageTexture DEF='camorepeatS='falserepeatT='false'   url=' "greenCamo.jpg " "https://savage.nps.edu/Savage/Weapons/Guns/greenCamo.jpg " '/>
 47                           </Appearance>
 48                      </Shape>
 49 
                    <!-- ROUTE information for rightTrailMover node:  [from trailSpreader.rotation_changed to set_rotation ] -->
                    <Transform DEF='rightTrailMovertranslation='.1 0 0'>
 50                           <Transform DEF='RightTrailrotation='0 1 0 -1.1translation='0 -.3 0'>
 51                                <Transform DEF='brakeResevoirrotation='0 1 0 1.57translation='2 .27 0'>
 52                                     <Transform rotation='1 0 0 1.57scale='1.6 1 1.2'>
 53                                          <Shape>
 54                                               <Cylinder height='1.2radius='.15'/>
 55                                               <Appearance USE='camiPaint'/>
 56                                          </Shape>
 57                                     </Transform>
 58                                </Transform>
 59                                <Transform DEF='basePlateClamprotation='0 1 0 1.7scale='.05 .05 .05translation='2.7 .6 -.2'>
 60 
                                   <!-- Shape clamp is a DEF node that has 3 USE nodes: USE_1, USE_2, USE_3 -->
                                   <Shape DEF='clamp'>
 61                                          <Extrusion crossSection='0 0 1 0 1 2 3 2 3 3 0 3 0 0solid='falsespine='0 0 0 2 0 0'/>
 62                                          <Appearance USE='camiPaint'/>
 63                                     </Shape>
 64                                </Transform>
 65                                <Transform rotation='0 1 0 -1.7scale='.05 .05 .05translation='1.7 .6 -.2'>
 66                                     <Shape USE='clamp'/>
 67                                </Transform>
 68                                <Transform rotation='1 0 0 -1.57'>
 69                                     <Transform scale='.22 .3 .19'>
 70 
                                        <!-- Shape trail is a DEF node that has 1 USE node: USE_1 -->
                                        <Shape DEF='trail'>
 71                                               <Extrusion crossSection='0 0 0 3 16 2.2 20 1 20 -1 18.5 -1 18 0 0 0spine='0 0 0 0 1.5 0'/>
 72                                               <Appearance USE='camiPaint'/>
 73                                          </Shape>
 74                                     </Transform>
 75                                </Transform>
 76                           </Transform>
 77                           <Transform DEF='RightSpaderotation='0 1 0 .5scale='.07 .1 .1translation='2.9 -0.45 3.45'>
 78                                <Transform rotation='0 1 0 3.14'>
 79                                     <Transform rotation='1 0 0 -1.57'>
 80 
                                        <!-- Shape spade is a DEF node that has 1 USE node: USE_1 -->
                                        <Shape DEF='spade'>
 81                                               <Appearance USE='camiPaint'/>
 82                                               <Extrusion crossSection='0 0 5 0 4 -5 4 -4 3.85 -3.5 3.75 -3 3.5 -2 3 -1 0 -.5 0 0spine='0 0 0 20 0 0'/>
 83                                          </Shape>
 84                                     </Transform>
 85                                </Transform>
 86                           </Transform>
 87 
                         <!-- ROUTE information for trailSpreader node:  [from rotation_changed to rightTrailMover.set_rotation ] -->
                         <CylinderSensor DEF='trailSpreaderdescription='Used to spread the trailsmaxAngle='0minAngle='-.5'/>
 88                           < ROUTE  fromNode='trailSpreader' fromField='rotation_changed' toNode='rightTrailMover' toField='set_rotation'/>
 89                      </Transform>
 90 
                    <!-- ROUTE information for leftTrailMover node:  [from lTrailSpreader.rotation_changed to set_rotation ] -->
                    <Transform DEF='leftTrailMovertranslation='-.1 0 0'>
 91                           <Transform DEF='leftTrailrotation='0 1 0 -2.1translation='-.5 -.3 -.25'>
 92                                <Transform DEF='lbasePlateClamprotation='0 1 0 1.7scale='.05 .05 .05translation='2.7 .6 -.2'>
 93                                     <Shape USE='clamp'/>
 94                                </Transform>
 95                                <Transform rotation='0 1 0 -1.7scale='.05 .05 .05translation='1.7 .6 -.2'>
 96                                     <Shape USE='clamp'/>
 97                                </Transform>
 98                                <Transform rotation='1 0 0 -1.57'>
 99                                     <Transform scale='.22 .3 .19'>
100                                          <Shape USE='trail'/>
101                                     </Transform>
102                                </Transform>
103                           </Transform>
104                           <Transform DEF='leftSpaderotation='0 1 0 -.523scale='.07 .1 .1translation='-1.9 -0.45 3.9'>
105                                <Transform center='.5 0 .5rotation='0 1 0 3.14'>
106                                     <Transform rotation='1 0 0 -1.57'>
107                                          <Shape USE='spade'/>
108                                     </Transform>
109                                </Transform>
110                           </Transform>
111 
                         <!-- ROUTE information for lTrailSpreader node:  [from rotation_changed to leftTrailMover.set_rotation ] -->
                         <CylinderSensor DEF='lTrailSpreaderdescription='Used to spread the trailsmaxAngle='.5'/>
112                           < ROUTE  fromNode='lTrailSpreader' fromField='rotation_changed' toNode='leftTrailMover' toField='set_rotation'/>
113                      </Transform>
114                      <Transform translation='0 -.25 -.75'>
115                           <Shape DEF='basePlate'>
116                                <Cone bottomRadius='.75height='.25'/>
117                                <Appearance USE='camiPaint'/>
118                           </Shape>
119                      </Transform>
120                      <Group DEF='wheelRaiser'>
121 
                         <!-- ROUTE information for AnimationTransform node:  [from wheelUp.value_changed to set_rotation ] [from wheelDown.value_changed to set_rotation ] -->
                         <Transform DEF='AnimationTransformrotation='1 0 0 .1'>
122 
                              <!-- ROUTE information for ButtonChoice node:  [from SetBoxUp.triggerValue to whichChoice ] [from SetBoxDown.triggerValue to whichChoice ] -->
                              <Switch DEF='ButtonChoicewhichChoice='0'>
123                                     <Group>
124                                          <Transform scale='4 1 1translation='0 -.3 -.3'>
125 
                                             <!-- Shape ClearSphere is a DEF node that has 1 USE node: USE_1 -->
                                             <Shape DEF='ClearSphere'>
126                                                    <Appearance>
127                                                         <Material DEF='TransparentemissiveColor='1 1 1transparency='1.0'/>
128                                                    </Appearance>
129                                                    <Sphere radius='.5'/>
130                                               </Shape>
131                                          </Transform>
132 
                                        <!-- ROUTE information for ClearSphere1 node:  [from touchTime to BoxUpTimer.startTime ] [from isActive to SetBoxUp.set_boolean ] -->
                                        <TouchSensor DEF='ClearSphere1description='used to raise and lower the wheels'/>
133 
                                        <!-- ROUTE information for wheelUp node:  [from BoxUpTimer.fraction_changed to set_fraction ] [from value_changed to AnimationTransform.set_rotation ] -->
                                        <OrientationInterpolator DEF='wheelUpkey='0 .25 .5 .75 .85 1keyValue='1 0 0 0 1 0 0 .5 1 0 0 .75 1 0 0 1.25 1 0 0 1.7 1 0 0 2'/>
134                                          <PositionInterpolator DEF='MoveBoxUpkey='0 .5 1keyValue='0 -3 0 0 0 0 0 3 0'/>
135 
                                        <!-- ROUTE information for BoxUpTimer node:  [from ClearSphere1.touchTime to startTime ] [from fraction_changed to wheelUp.set_fraction ] -->
                                        <TimeSensor DEF='BoxUpTimercycleInterval='3'/>
136                                          < ROUTE  fromNode='BoxUpTimer' fromField='fraction_changed' toNode='wheelUp' toField='set_fraction'/>
137                                          < ROUTE  fromNode='wheelUp' fromField='value_changed' toNode='AnimationTransform' toField='set_rotation'/>
138                                          < ROUTE  fromNode='ClearSphere1' fromField='touchTime' toNode='BoxUpTimer' toField='startTime'/>
139                                     </Group>
140                                     <Group>
141                                          <Transform scale='4 1 1translation='0 -.3 -.3'>
142                                               <Shape USE='ClearSphere'/>
143                                          </Transform>
144 
                                        <!-- ROUTE information for ClearSphere2 node:  [from touchTime to BoxDownTimer.startTime ] [from isActive to SetBoxDown.set_boolean ] -->
                                        <TouchSensor DEF='ClearSphere2description='used to raise and lower the wheels'/>
145 
                                        <!-- ROUTE information for wheelDown node:  [from BoxDownTimer.fraction_changed to set_fraction ] [from value_changed to AnimationTransform.set_rotation ] -->
                                        <OrientationInterpolator DEF='wheelDownkey='0 .25 .5 .75 .85 1keyValue='1 0 0 2 1 0 0 1.7 1 0 0 1.25 1 0 0 .75 1 0 0 .5 1 0 0 0'/>
146                                          <PositionInterpolator DEF='MoveBoxDownkey='0 0.5 1keyValue='0 3 0 0 0 0 0 -3 0'/>
147 
                                        <!-- ROUTE information for BoxDownTimer node:  [from ClearSphere2.touchTime to startTime ] [from fraction_changed to wheelDown.set_fraction ] -->
                                        <TimeSensor DEF='BoxDownTimercycleInterval='3'/>
148                                          < ROUTE  fromNode='BoxDownTimer' fromField='fraction_changed' toNode='wheelDown' toField='set_fraction'/>
149                                          < ROUTE  fromNode='wheelDown' fromField='value_changed' toNode='AnimationTransform' toField='set_rotation'/>
150                                          < ROUTE  fromNode='ClearSphere2' fromField='touchTime' toNode='BoxDownTimer' toField='startTime'/>
151                                     </Group>
152                                </Switch>
153                                <Group DEF='rightWheel'>
154                                     <Transform DEF='rightWheel1translation='.2 -.8 -.3'>
155                                          <Transform DEF='rightTirerotation='0 0 1 -1.57translation='1.0 .4 0'>
156 
                                             <!-- Shape tire is a DEF node that has 1 USE node: USE_1 -->
                                             <Shape DEF='tire'>
157                                                    <Cylinder height='.2radius='.4'/>
158                                                    <Appearance>
159 
                                                       <!-- Material black is a DEF node that has 1 USE node: USE_1 -->
                                                       <Material DEF='blackdiffuseColor='0.1 0.1 0.1shininess='0'/>
160                                                    </Appearance>
161                                               </Shape>
162                                          </Transform>
163                                          <Transform DEF='rightRimrotation='0 0 1 -1.57translation='1.0 .4 0'>
164 
                                             <!-- Shape rim is a DEF node that has 1 USE node: USE_1 -->
                                             <Shape DEF='rim'>
165                                                    <Cylinder height='.22radius='.25'/>
166                                                    <Appearance USE='camiPaint'/>
167                                               </Shape>
168                                          </Transform>
169                                     </Transform>
170                                     <Transform rotation='1 0 0 -1.75'>
171                                          <Transform DEF='rWheelLiftrotation='0 1 0 1.57scale='.25 .25 .25translation='1 0 0'>
172                                               <Transform>
173                                                    <Shape>
174                                                         <Extrusion crossSection='-1 0 -0.9 0.435889894354067 -0.8 0.6 -0.7 0.714142842854285 -0.6 0.8 -0.5 0.866025403784439 -0.4 0.916515138991168 -0.3 0.953939201416946 -0.2 0.979795897113271 -0.1 0.99498743710662 0 1 0.1 0.99498743710662 0.2 0.979795897113271 0.3 0.953939201416946 0.4 0.916515138991168 0.5 0.866025403784439 0.6 0.8 0.7 0.714142842854285 0.8 0.6 0.9 0.435889894354067 1 0 0.9 -0.435889894354067 0.8 -0.6 0.7 -0.714142842854285 0.6 -0.8 0.5 -0.866025403784439 0.4 -0.916515138991168 0.3 -0.953939201416946 0.2 -0.979795897113271 0.1 -0.99498743710662 0 -1 -0.1 -0.99498743710662 -0.2 -0.979795897113271 -0.3 -0.953939201416946 -0.4 -0.916515138991168 -0.5 -0.866025403784439 -0.6 -0.8 -0.7 -0.714142842854285 -0.8 -0.6 -0.9 -0.435889894354067 -1 0spine='0 0 0 0 0 .3'/>
175                                                         <Appearance USE='camiPaint'/>
176                                                    </Shape>
177                                               </Transform>
178                                               <Transform translation='1.5 1.5 .45'>
179                                                    <Shape>
180                                                         <Extrusion crossSection='-1 0 -0.9 0.435889894354067 -0.8 0.6 -0.7 0.714142842854285 -0.6 0.8 -0.5 0.866025403784439 -0.4 0.916515138991168 -0.3 0.953939201416946 -0.2 0.979795897113271 -0.1 0.99498743710662 0 1 0.1 0.99498743710662 0.2 0.979795897113271 0.3 0.953939201416946 0.4 0.916515138991168 0.5 0.866025403784439 0.6 0.8 0.7 0.714142842854285 0.8 0.6 0.9 0.435889894354067 1 0 0.9 -0.435889894354067 0.8 -0.6 0.7 -0.714142842854285 0.6 -0.8 0.5 -0.866025403784439 0.4 -0.916515138991168 0.3 -0.953939201416946 0.2 -0.979795897113271 0.1 -0.99498743710662 0 -1 -0.1 -0.99498743710662 -0.2 -0.979795897113271 -0.3 -0.953939201416946 -0.4 -0.916515138991168 -0.5 -0.866025403784439 -0.6 -0.8 -0.7 -0.714142842854285 -0.8 -0.6 -0.9 -0.435889894354067 -1 0spine='0 0 0 0 0 .3'/>
181                                                         <Appearance USE='camiPaint'/>
182                                                    </Shape>
183                                               </Transform>
184                                               <Transform rotation='0 0 1 1translation='1 1 0.3'>
185                                                    <Shape>
186                                                         <Box size='2 1 .3'/>
187                                                         <Appearance USE='camiPaint'/>
188                                                    </Shape>
189                                               </Transform>
190                                          </Transform>
191                                     </Transform>
192                                </Group>
193                                <Group DEF='leftWheel'>
194 
                                   <!-- ROUTE information for leftWheel1 node:  [from wheelInterpolator.value_changed to set_rotation ] -->
                                   <Transform DEF='leftWheel1translation='-1.2 -.35 -.35'>
195                                          <Transform DEF='leftTirerotation='0 0 1 -1.57'>
196                                               <Shape USE='tire'/>
197                                          </Transform>
198                                          <Transform DEF='leftRimrotation='0 0 1 -1.57'>
199                                               <Shape USE='rim'/>
200                                          </Transform>
201                                     </Transform>
202 
                                   <!-- ROUTE information for wheelSensor node:  [from isOver to CLOCK.set_enabled ] -->
                                   <TouchSensor DEF='wheelSensordescription='Point at box to spin it'/>
203 
                                   <!-- ROUTE information for CLOCK node:  [from wheelSensor.isOver to set_enabled ] [from fraction_changed to wheelInterpolator.set_fraction ] -->
                                   <TimeSensor DEF='CLOCKcycleInterval='4enabled='falseloop='true'/>
204 
                                   <!-- ROUTE information for wheelInterpolator node:  [from CLOCK.fraction_changed to set_fraction ] [from value_changed to leftWheel1.set_rotation ] -->
                                   <OrientationInterpolator DEF='wheelInterpolatorkey='0.0 0.25 0.50 0.75 1.0keyValue='1 0.0 0 -1.57 1 0.0 0 0 1 0.0 0 1.57 1 0 0 3.14 1 0 0 -1.57'/>
205                                     <Transform rotation='1 0 0 -3.1'>
206                                          <Transform DEF='wheelLiftrotation='0 1 0 -1.57scale='.25 .25 .25translation='-1 0 0'>
207                                               <Transform>
208                                                    <Shape>
209                                                         <Extrusion crossSection='-1 0 -0.9 0.435889894354067 -0.8 0.6 -0.7 0.714142842854285 -0.6 0.8 -0.5 0.866025403784439 -0.4 0.916515138991168 -0.3 0.953939201416946 -0.2 0.979795897113271 -0.1 0.99498743710662 0 1 0.1 0.99498743710662 0.2 0.979795897113271 0.3 0.953939201416946 0.4 0.916515138991168 0.5 0.866025403784439 0.6 0.8 0.7 0.714142842854285 0.8 0.6 0.9 0.435889894354067 1 0 0.9 -0.435889894354067 0.8 -0.6 0.7 -0.714142842854285 0.6 -0.8 0.5 -0.866025403784439 0.4 -0.916515138991168 0.3 -0.953939201416946 0.2 -0.979795897113271 0.1 -0.99498743710662 0 -1 -0.1 -0.99498743710662 -0.2 -0.979795897113271 -0.3 -0.953939201416946 -0.4 -0.916515138991168 -0.5 -0.866025403784439 -0.6 -0.8 -0.7 -0.714142842854285 -0.8 -0.6 -0.9 -0.435889894354067 -1 0spine='0 0 0 0 0 .3'/>
210                                                         <Appearance USE='camiPaint'/>
211                                                    </Shape>
212                                               </Transform>
213                                               <Transform translation='1.5 1.5 .45'>
214                                                    <Shape>
215                                                         <Extrusion crossSection='-1 0 -0.9 0.435889894354067 -0.8 0.6 -0.7 0.714142842854285 -0.6 0.8 -0.5 0.866025403784439 -0.4 0.916515138991168 -0.3 0.953939201416946 -0.2 0.979795897113271 -0.1 0.99498743710662 0 1 0.1 0.99498743710662 0.2 0.979795897113271 0.3 0.953939201416946 0.4 0.916515138991168 0.5 0.866025403784439 0.6 0.8 0.7 0.714142842854285 0.8 0.6 0.9 0.435889894354067 1 0 0.9 -0.435889894354067 0.8 -0.6 0.7 -0.714142842854285 0.6 -0.8 0.5 -0.866025403784439 0.4 -0.916515138991168 0.3 -0.953939201416946 0.2 -0.979795897113271 0.1 -0.99498743710662 0 -1 -0.1 -0.99498743710662 -0.2 -0.979795897113271 -0.3 -0.953939201416946 -0.4 -0.916515138991168 -0.5 -0.866025403784439 -0.6 -0.8 -0.7 -0.714142842854285 -0.8 -0.6 -0.9 -0.435889894354067 -1 0spine='0 0 0 0 0 .3'/>
216                                                         <Appearance USE='camiPaint'/>
217                                                    </Shape>
218                                               </Transform>
219                                               <Transform rotation='0 0 1 1translation='1 1 0.3'>
220                                                    <Shape>
221                                                         <Box size='2 1 .3'/>
222                                                         <Appearance USE='camiPaint'/>
223                                                    </Shape>
224                                               </Transform>
225                                          </Transform>
226                                     </Transform>
227                                </Group>
228                           </Transform>
229                      </Group>
230                      <Group DEF='AnimationControl'>
231 
                         <!-- ROUTE information for SetBoxDown node:  [from ClearSphere2.isActive to set_boolean ] [from triggerValue to ButtonChoice.whichChoice ] -->
                         <IntegerTrigger DEF='SetBoxDownintegerKey='0'/>
232 
                         <!-- ROUTE information for SetBoxUp node:  [from ClearSphere1.isActive to set_boolean ] [from triggerValue to ButtonChoice.whichChoice ] -->
                         <IntegerTrigger DEF='SetBoxUpintegerKey='1'/>
233                           < ROUTE  fromNode='ClearSphere1' fromField='isActive' toNode='SetBoxUp' toField='set_boolean'/>
234                           < ROUTE  fromNode='ClearSphere2' fromField='isActive' toNode='SetBoxDown' toField='set_boolean'/>
235                           < ROUTE  fromNode='SetBoxUp' fromField='triggerValue' toNode='ButtonChoice' toField='whichChoice'/>
236                           < ROUTE  fromNode='SetBoxDown' fromField='triggerValue' toNode='ButtonChoice' toField='whichChoice'/>
237                      </Group>
238                 </Group>
239                 <Group DEF='upperCarriagePiece'>
240 
                    <!-- ROUTE information for rotateUpperCarriage node:  [from carriage_sensor.rotation_changed to set_rotation ] -->
                    <Transform DEF='rotateUpperCarriagecenter='0 -2.5 0'>
241                           <Group DEF='upperCarriage'>
242                                <Transform DEF='rightTrunionrotation='1 0 0 1.57translation='.6 1.2 .65'>
243                                     <Transform rotation='0 1 0 3.14'>
244 
                                        <!-- Shape left_stantion is a DEF node that has 1 USE node: USE_1 -->
                                        <Shape DEF='left_stantion'>
245                                               <Extrusion crossSection='0 4 2 43 -4 5 -7 10 -712 -9 2 -9 0 -4 0 4scale='.1 .1spine='0 0 0 .2 0 0'/>
246                                               <Appearance USE='camiPaint'/>
247                                          </Shape>
248                                     </Transform>
249                                </Transform>
250                                <Transform rotation='1 0 0 1.57translation='-.4 1.2 .65'>
251                                     <Transform rotation='0 1 0 3.14'>
252                                          <Shape USE='left_stantion'/>
253                                     </Transform>
254                                </Transform>
255                                <Transform DEF='leftHandwheelrotation='0 1 0 -1.57scale='.8 .8 .8translation='-.75 1 .5'>
256                                     <!-- This handwheel was copied from the Savage library from the LW155 howitzer -->
257 
                                   <!-- LOD Crank is a DEF node that has 2 USE nodes: USE_1, USE_2 -->
                                   <LOD DEF='Crankrange='25'>
258                                          <Group DEF='handwheelGroup'>
259                                               <Transform DEF='CircularHandle'>
260                                                    <Shape>
261                                                         <Extrusion beginCap='falsecreaseAngle='1.57crossSection='0.1 0 0.092 -0.038 0.071 -0.071 0.038 -0.092 0 -0.1 -0.038 -0.092 -0.071 -0.071 -0.092 -0.038 -0.1 0 -0.092 0.038 -0.071 0.071 -0.038 0.092 0 0.1 0.038 0.092 0.071 0.071 0.092 0.038 0.1 0endCap='falsescale='0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6 0.6spine='0.3 0 0 0.276 -0.114 0 0.213 -0.213 0 0.114 -0.276 0 0 -0.3 0 -0.114 -0.276 0 -0.213 -0.213 0 -0.276 -0.114 0 -0.3 0 0 -0.276 0.114 0 -0.213 0.213 0 -0.114 0.276 0 0 0.3 0 0.114 0.276 0 0.213 0.213 0 0.276 0.114 0 0.3 0 0'/>
262                                                         <Appearance>
263                                                              <Material diffuseColor='.1 .10 .1'/>
264                                                         </Appearance>
265                                                    </Shape>
266                                               </Transform>
267                                               <Transform DEF='CrankShafttranslation='0 0 -0.05'>
268                                                    <Transform DEF='Shaftrotation='1 0 0 1.57'>
269                                                         <Shape>
270                                                              <Cylinder height='0.02radius='0.08'/>
271                                                              <Appearance>
272                                                                   <Material diffuseColor='.1 .1 .1'/>
273                                                              </Appearance>
274                                                         </Shape>
275                                                    </Transform>
276                                                    <Transform DEF='Toprotation='1 0 0 1.57translation='0 0 -0.1'>
277                                                         <Shape>
278                                                              <Cylinder height='0.2radius='0.05'/>
279                                                              <Appearance>
280                                                                   <Material diffuseColor='.1 .1 .1'/>
281                                                              </Appearance>
282                                                         </Shape>
283                                                    </Transform>
284                                                    <Transform DEF='TopBalltranslation='0 0 -0.01'>
285                                                         <Shape>
286                                                              <Sphere radius='0.05'/>
287                                                              <Appearance>
288                                                                   <Material diffuseColor='.1 .1 .1'/>
289                                                              </Appearance>
290                                                         </Shape>
291                                                    </Transform>
292                                               </Transform>
293                                               <Transform DEF='Struts'>
294 
                                                  <!-- Transform StrutOne is a DEF node that has 2 USE nodes: USE_1, USE_2 -->
                                                  <Transform DEF='StrutOnerotation='1 0 0 0.21translation='0 0.04 -0.05725'>
295                                                         <Shape>
296                                                              <Extrusion creaseAngle='3.14crossSection='0.01 0 0.0092 -0.0038 0.0071 -0.0071 0.0038 -0.0092 0 -0.01 -0.0038 -0.0092 -0.0071 -0.0071 -0.0092 -0.0038 -0.01 0 -0.0092 0.0038 -0.0071 0.0071 -0.0038 0.0092 0 0.01 0.0038 0.0092 0.0071 0.0071 0.0092 0.0038 0.01 0scale='4 2 2 2 2 2 2 2 2 4spine='0 0 0 0 0.125 0 0 0.25 0 0 0.255 0 0 0.275 0'/>
297                                                              <Appearance>
298                                                                   <Material diffuseColor='.1 .1 .1'/>
299                                                              </Appearance>
300                                                         </Shape>
301                                                    </Transform>
302                                                    <Transform DEF='StrutTworotation='0 0 1 2.09'>
303                                                         <Transform USE='StrutOne'/>
304                                                    </Transform>
305                                                    <Transform DEF='StrutThreerotation='0 0 -1 2.09'>
306                                                         <Transform USE='StrutOne'/>
307                                                    </Transform>
308                                               </Transform>
309                                          </Group>
310                                          <WorldInfo info='"null node"'/>
311                                     </LOD>
312                                </Transform>
313                                <Transform DEF='rightHandwheelrotation='0 1 0 1.57scale='.8 .8 .8translation='.75 1 .5'>
314                                     <LOD USE='Crank'/>
315                                </Transform>
316                                <Transform DEF='traversingWheelrotation='0 1 0 -.85scale='.5 .5 .5translation='-.68 .5 .6'>
317                                     <LOD USE='Crank'/>
318                                </Transform>
319                                <Transform translation='0 .25 0'>
320                                     <Shape DEF='traversingPlatform'>
321                                          <Cylinder height='.35radius='.8'/>
322                                          <Appearance USE='camiPaint'/>
323                                     </Shape>
324                                </Transform>
325                                <Transform DEF='rightUpperCylinderrotation='0 0 1 1.57translation='0 1.5 .2'>
326                                     <Transform center='0 0 1rotation='0 0 1 -3.14'>
327                                          <Transform>
328 
                                             <!-- ROUTE information for ruc node:  [from upperCylinderMover.upperRotation to set_rotation ] -->
                                             <Transform DEF='ruccenter='0 0 .3'>
329                                                    <Transform DEF='rucLrotation='1 0 0 -1.57translation='0 -.48 0'>
330                                                         <Transform translation='0 .050 0'>
331 
                                                            <!-- Shape upperCylinder1 is a DEF node that has 1 USE node: USE_1 -->
                                                            <Shape DEF='upperCylinder1'>
332                                                                   <Cylinder height='.45radius='.075'/>
333                                                                   <Appearance USE='camiPaint'/>
334                                                              </Shape>
335                                                         </Transform>
336                                                         <Transform translation='0 -.22 0'>
337 
                                                            <!-- Shape linkBolt is a DEF node that has 1 USE node: USE_1 -->
                                                            <Shape DEF='linkBolt'>
338                                                                   <Sphere radius='.05'/>
339                                                                   <Appearance>
340                                                                        <Material USE='black'/>
341                                                                   </Appearance>
342                                                              </Shape>
343                                                         </Transform>
344 
                                                       <!-- ROUTE information for shrinkCylinder node:  [from upperCylinderMover.extendCylinder to set_translation ] [from upperCylinderMover.shrinkCylinder to set_scale ] -->
                                                       <Transform DEF='shrinkCylindertranslation='0 .22 0'>
345 
                                                            <!-- Shape upperExtender is a DEF node that has 1 USE node: USE_1 -->
                                                            <Shape DEF='upperExtender'>
346                                                                   <Cylinder height='.55radius='.060'/>
347                                                                   <Appearance>
348                                                                        <ImageTexture   url=' "baffle.jpg " "https://savage.nps.edu/Savage/Weapons/Guns/baffle.jpg " '/>
349                                                                   </Appearance>
350                                                              </Shape>
351                                                         </Transform>
352                                                    </Transform>
353                                                    <Transform DEF='rucRrotation='1 0 0 -1.57translation='0 .48 0'>
354                                                         <Transform translation='0 .050 0'>
355                                                              <Shape USE='upperCylinder1'/>
356                                                         </Transform>
357                                                         <Transform translation='0 -.22 0'>
358                                                              <Shape USE='linkBolt'/>
359                                                         </Transform>
360 
                                                       <!-- ROUTE information for shrinkCylinderR node:  [from upperCylinderMover.extendCylinder to set_translation ] [from upperCylinderMover.shrinkCylinder to set_scale ] -->
                                                       <Transform DEF='shrinkCylinderRtranslation='0 .22 0'>
361                                                              <Shape USE='upperExtender'/>
362                                                         </Transform>
363                                                    </Transform>
364                                               </Transform>
365                                          </Transform>
366                                     </Transform>
367                                </Transform>
368                           </Group>
369                           <Transform DEF='barrelGrouprotation='0 0 1 -1.57'>
370 
                              <!-- ROUTE information for barrelMover1 node:  [from tubeSensor.rotation_changed to set_rotation ] -->
                              <Transform DEF='barrelMover1center='-1. 0 .45rotation='0 0 1 .01translation='.2 0 0'>
371 
                                   <!-- ROUTE information for tubeSensor node:  [from rotation_changed to barrelMover1.set_rotation ] [from rotation_changed to upperCylinderMover.barrelRotation ] -->
                                   <CylinderSensor DEF='tubeSensordescription='sensor for tube elevationmaxAngle='0minAngle='-.65'/>
372                                     < ROUTE  fromNode='tubeSensor' fromField='rotation_changed' toNode='barrelMover1' toField='set_rotation'/>
373                                     <Transform DEF='theBarrel'>
374                                          <Group DEF='barrel'>
375                                               <Transform DEF='recoilTransformrotation='0 0 1 1.57translation='-.20 0 -.2'>
376 
                                                  <!-- ROUTE information for recoilMover node:  [from recoil.value_changed to set_translation ] -->
                                                  <Transform DEF='recoilMover'>
377                                                         <Transform DEF='tube1rotation='1 0 0 -.84translation='0 2.45 -1'>
378                                                              <Transform translation='0 -2.5 0'>
379                                                                   <Shape>
380                                                                        <Extrusion DEF='tubecrossSection='-1 0 -0.9 0.435889894354067 -0.8 0.6 -0.7 0.714142842854285 -0.6 0.8 -0.5 0.866025403784439 -0.4 0.916515138991168 -0.3 0.953939201416946 -0.2 0.979795897113271 -0.1 0.99498743710662 0 1 0.1 0.99498743710662 0.2 0.979795897113271 0.3 0.953939201416946 0.4 0.916515138991168 0.5 0.866025403784439 0.6 0.8 0.7 0.714142842854285 0.8 0.6 0.9 0.435889894354067 1 0 0.9 -0.435889894354067 0.8 -0.6 0.7 -0.714142842854285 0.6 -0.8 0.5 -0.866025403784439 0.4 -0.916515138991168 0.3 -0.953939201416946 0.2 -0.979795897113271 0.1 -0.99498743710662 0 -1 -0.1 -0.99498743710662 -0.2 -0.979795897113271 -0.3 -0.953939201416946 -0.4 -0.916515138991168 -0.5 -0.866025403784439 -0.6 -0.8 -0.7 -0.714142842854285 -0.8 -0.6 -0.9 -0.435889894354067 -1 0scale='.2 .2 .2 .2 .18 .18 .18 .18 .2 .2spine='0 0 0 0 3.5 0 0 3.6 0 0 4.7 0 0 5.2 0'/>
381                                                                        <Appearance USE='camiPaint'/>
382                                                                   </Shape>
383                                                                   <Transform DEF='shinyPiecetranslation='0 3 0'>
384                                                                        <Shape>
385                                                                             <Cylinder height='1.1radius='.205'/>
386 
                                                                           <!-- Appearance shiny is a DEF node that has 1 USE node: USE_1 -->
                                                                           <Appearance DEF='shiny'>
387                                                                                  <Material diffuseColor='.7 .7 .7'/>
388                                                                             </Appearance>
389                                                                        </Shape>
390                                                                   </Transform>
391                                                              </Transform>
392                                                              <Transform DEF='breechtranslation='0 -2.5 0'>
393                                                                   <Shape>
394                                                                        <Cylinder height='.1radius='.2'/>
395                                                                        <Appearance USE='shiny'/>
396                                                                   </Shape>
397                                                              </Transform>
398                                                         </Transform>
399                                                         <Transform DEF='muzzle_breaktranslation='0 .05 0'>
400                                                              <Transform rotation='1 0 0 .75translation='.25 4.48 -3.6'>
401                                                                   <Transform rotation='0 0 1 1.57'>
402                                                                        <Transform rotation='1 0 0 3.14scale='1.6 .7 .85'>
403                                                                             <Shape DEF='muzzleBreak'>
404                                                                                  <Extrusion crossSection='0 0 3 0 3 -3 2.8 -3.2 2.3 -3.7 2 -4 1 -4 .8 -3.8 .3 -3.3 0 -3 0 0scale='.25 .25spine='0 0 0 .25 0 0'/>
405                                                                                  <Appearance USE='camiPaint'/>
406                                                                             </Shape>
407                                                                        </Transform>
408                                                                   </Transform>
409                                                              </Transform>
410                                                              <Transform rotation='1 0 0 .75translation='.25 4.4 -3.2'>
411                                                                   <Shape>
412                                                                        <Box size='.01 .3 .4'/>
413                                                                        <Appearance>
414                                                                             <Material diffuseColor='.1 .1 .1'/>
415                                                                        </Appearance>
416                                                                   </Shape>
417                                                              </Transform>
418                                                              <Transform rotation='1 0 0 .75translation='-.225 4.4 -3.2'>
419                                                                   <Shape>
420                                                                        <Box size='.01 .3 .4'/>
421                                                                        <Appearance>
422                                                                             <Material diffuseColor='.1 .1 .1'/>
423                                                                        </Appearance>
424                                                                   </Shape>
425                                                              </Transform>
426                                                              <Transform rotation='1 0 0 -.84translation='0 4.64 -3.45'>
427                                                                   <Shape>
428                                                                        <Cylinder height='.02radius='.17'/>
429                                                                        <Appearance>
430                                                                             <Material diffuseColor='.1 .1 .1'/>
431                                                                        </Appearance>
432                                                                   </Shape>
433                                                              </Transform>
434                                                         </Transform>
435                                                    </Transform>
436                                                    <Transform DEF='sideBarstranslation='0 -.2 0'>
437                                                         <Transform DEF='rightSideBarrotation='1 0 0 .75translation='.45 1.9 -.250'>
438 
                                                            <!-- Shape sideBar is a DEF node that has 1 USE node: USE_1 -->
                                                            <Shape DEF='sideBar'>
439                                                                   <Box size='.2 .2 2.2'/>
440                                                                   <Appearance USE='camiPaint'/>
441                                                              </Shape>
442                                                         </Transform>
443                                                         <Transform DEF='leftSideBar1rotation='1 0 0 .75translation='-.45 1.9 -.250'>
444                                                              <Shape USE='sideBar'/>
445                                                         </Transform>
446                                                         <Transform DEF='lTravelLockAnchorrotation='1 0 0 -2.3translation='-.55 1.7 -.2'>
447                                                              <Shape>
448                                                                   <Extrusion crossSection='0 0 0 .15 .15 .15 .15 0 0 0scale='1 .85 .75 .75 .5 .5spine='0 0 0 0 .1 0 0 .2 0'/>
449                                                                   <Appearance USE='camiPaint'/>
450                                                              </Shape>
451                                                         </Transform>
452                                                         <Transform DEF='travelLockAnchorrotation='1 0 0 -2.3translation='.4 1.7 -.2'>
453                                                              <Shape>
454                                                                   <Extrusion crossSection='0 0 0 .15 .15 .15 .15 0 0 0scale='1 .85 .75 .75 .5 .5spine='0 0 0 0 .1 0 0 .2 0'/>
455                                                                   <Appearance USE='camiPaint'/>
456                                                              </Shape>
457                                                         </Transform>
458                                                         <Transform rotation='1 0 0 .65translation='.48 2.4 -1.'>
459 
                                                            <!-- Shape upperTravelLocker is a DEF node that has 1 USE node: USE_1 -->
                                                            <Shape DEF='upperTravelLocker'>
460                                                                   <Box size='.07 .2 .04'/>
461                                                                   <Appearance USE='camiPaint'/>
462                                                              </Shape>
463                                                         </Transform>
464                                                         <Transform rotation='1 0 0 .65translation='-.48 2.4 -1'>
465                                                              <Shape USE='upperTravelLocker'/>
466                                                         </Transform>
467                                                    </Transform>
468                                                    <Transform rotation='1 0 0 -.84translation='0 1.65 -.1'>
469                                                         <Shape DEF='barrelCover'>
470                                                              <Cylinder height='2.5radius='.4'/>
471                                                              <Appearance USE='camiPaint'/>
472                                                         </Shape>
473                                                    </Transform>
474                                                    <Transform DEF='travelLockPiecerotation='1 0 0 -.76translation='-.5 1.72 -.75'>
475 
                                                       <!-- ROUTE information for travelLockOrient node:  [from travelLockOrientor.value_changed to set_rotation ] -->
                                                       <Transform DEF='travelLockOrientcenter='0 -.5 0rotation='1 0 0 -2.25'>
476                                                              <Transform>
477 
                                                                 <!-- Shape travelLock is a DEF node that has 7 USE nodes: USE_1, USE_2, USE_3, USE_4, USE_5, USE_6, USE_7 -->
                                                                 <Shape DEF='travelLock'>
478                                                                        <Cylinder height='1radius='.05'/>
479                                                                        <Appearance USE='camiPaint'/>
480                                                                   </Shape>
481                                                              </Transform>
482                                                              <Transform translation='1 0 0'>
483                                                                   <Shape USE='travelLock'/>
484                                                              </Transform>
485                                                              <Transform rotation='0 0 1 .78scale='1 1.38 1translation='.5 0 0'>
486                                                                   <Shape USE='travelLock'/>
487                                                              </Transform>
488                                                              <Transform center='0 0 -.705rotation='0 0 1 -.78scale='1 1.38 1translation='.5 0 0'>
489                                                                   <Shape USE='travelLock'/>
490                                                              </Transform>
491                                                              <Transform DEF='connectingCylinderrotation='0 0 1 1.57scale='1 .1 1translation='0 .5 0'>
492                                                                   <Shape USE='travelLock'/>
493                                                              </Transform>
494                                                              <Transform rotation='0 0 1 1.57scale='1 .1 1translation='0 -.5 0'>
495                                                                   <Shape USE='travelLock'/>
496                                                              </Transform>
497                                                              <Transform rotation='0 0 1 1.57scale='1 .1 1translation='1 .5 0'>
498                                                                   <Shape USE='travelLock'/>
499                                                              </Transform>
500                                                              <Transform rotation='0 0 1 1.57scale='1 .1 1translation='1 -.5 0'>
501                                                                   <Shape USE='travelLock'/>
502                                                              </Transform>
503                                                         </Transform>
504 
                                                       <!-- ROUTE information for travelLockOrientor node:  [from travelLockClock.fraction_changed to set_fraction ] [from value_changed to travelLockOrient.set_rotation ] -->
                                                       <OrientationInterpolator DEF='travelLockOrientorkey='0 .25 .5 .75 .85 1keyValue='1 0 0 -2.25 1 0 0 -1.7 1 0 0 -1.25 1 0 0 -.75 1 0 0 -.5 1 0 0 0'/>
505 
                                                       <!-- ROUTE information for travelLockSensor node:  [from touchTime to travelLockClock.set_startTime ] -->
                                                       <TouchSensor DEF='travelLockSensordescription='rasies and lowers travel lock'/>
506 
                                                       <!-- ROUTE information for travelLockClock node:  [from travelLockSensor.touchTime to set_startTime ] [from fraction_changed to travelLockOrientor.set_fraction ] -->
                                                       <TimeSensor DEF='travelLockClockcycleInterval='5'/>
507                                                         < ROUTE  fromNode='travelLockSensor' fromField='touchTime' toNode='travelLockClock' toField='set_startTime'/>
508                                                         < ROUTE  fromNode='travelLockClock' fromField='fraction_changed' toNode='travelLockOrientor' toField='set_fraction'/>
509                                                         < ROUTE  fromNode='travelLockOrientor' fromField='value_changed' toNode='travelLockOrient' toField='set_rotation'/>
510                                                    </Transform>
511 
                                                  <!-- ROUTE information for theRound node:  [from roundPathInterpolator.value_changed to set_translation ] [from roundOrientationInterpolator.value_changed to set_rotation ] -->
                                                  <Transform DEF='theRoundrotation='1 0 0 -.77translation='0 3.7 -2.5'>
512 
                                                       <!-- ROUTE information for theRoundSpinner node:  [from roundSpinner.value_changed to set_rotation ] -->
                                                       <Transform DEF='theRoundSpinner'>
513                                                              <Transform>
514                                                                   <Transform scale='.2 1 .2'>
515 
                                                                      <!-- Shape artyRound is a DEF node that has 3 USE nodes: USE_1, USE_2, USE_3 -->
                                                                      <Shape DEF='artyRound'>
516                                                                             <Appearance USE='camiPaint'/>
517                                                                             <Extrusion crossSection='-1 0 -0.9 0.435889894354067 -0.8 0.6 -0.7 0.714142842854285 -0.6 0.8 -0.5 0.866025403784439 -0.4 0.916515138991168 -0.3 0.953939201416946 -0.2 0.979795897113271 -0.1 0.99498743710662 0 1 0.1 0.99498743710662 0.2 0.979795897113271 0.3 0.953939201416946 0.4 0.916515138991168 0.5 0.866025403784439 0.6 0.8 0.7 0.714142842854285 0.8 0.6 0.9 0.435889894354067 1 0 0.9 -0.435889894354067 0.8 -0.6 0.7 -0.714142842854285 0.6 -0.8 0.5 -0.866025403784439 0.4 -0.916515138991168 0.3 -0.953939201416946 0.2 -0.979795897113271 0.1 -0.99498743710662 0 -1 -0.1 -0.99498743710662 -0.2 -0.979795897113271 -0.3 -0.953939201416946 -0.4 -0.916515138991168 -0.5 -0.866025403784439 -0.6 -0.8 -0.7 -0.714142842854285 -0.8 -0.6 -0.9 -0.435889894354067 -1 0scale='.35 .35 .5 .5 .5 .5 .3 .3 .01 .01spine='0 0 0 0 .15 0 0 .8 0 0 .9 0 0 1 0'/>
518                                                                        </Shape>
519                                                                   </Transform>
520                                                              </Transform>
521 
                                                            <!-- ROUTE information for spinTimer node:  [from shootRound.touchTime to set_startTime ] [from fraction_changed to roundSpinner.set_fraction ] -->
                                                            <TimeSensor DEF='spinTimercycleInterval='3loop='true'/>
522 
                                                            <!-- ROUTE information for roundSpinner node:  [from spinTimer.fraction_changed to set_fraction ] [from value_changed to theRoundSpinner.set_rotation ] -->
                                                            <OrientationInterpolator DEF='roundSpinnerkey='0.0 0.25 0.50 0.75 1.0keyValue='0 1 0 -1.57 0 1 0 0 0 1 0 1.57 0 1 0 3.14 0 1 0 -1.57'/>
523                                                         </Transform>
524 
                                                       <!-- ROUTE information for roundPathInterpolator node:  [from clock3.fraction_changed to set_fraction ] [from value_changed to theRound.set_translation ] -->
                                                       <PositionInterpolator DEF='roundPathInterpolatorkey='0.057 0.0858823529 0.088235294 0.117647059 0.147058824 0.176470588 0.205882353 0.235294118 0.264705882 0.294117647 0.323529412 0.352941176 0.382352941 0.411764706 0.441176471 0.470588235 0.5 0.529411765 0.558823529 0.588235294 0.617647059 0.647058824 0.676470588 0.705882353 0.735294118 0.764705882 0.794117647 0.823529412 0.852941176 0.882352941 0.911764706 0.941176471 0.970588235keyValue='0 3.8 -2.6 0 30.6227766 -10 0 59.2455532 -20 0 85.86832981 -30 0 110.4911064 -40 0 133.113883 -50 0 153.7366596 -60 0 172.3594362 -70 0 188.9822128 -80 0 203.6049894 -90 0 216.227766 -100 0 226.8505426 -110 0 235.4733192 -120 0 242.0960958 -130 0 246.7188724 -140 0 249.341649 -150 0 249.9644256 -160 0 248.5872022 -170 0 245.2099788 -180 0 239.8327554 -190 0 232.455532 -200 0 223.0783086 -210 0 211.7010852 -220 0 198.3238618 -230 0 182.9466384 -240 0 165.569415 -250 0 146.1921916 -260 0 124.8149682 -270 0 101.4377448 -280 0 76.06052145 -290 0 48.68329805 -300 0 19.30607465 -310 0 -1 -320'/>
525 
                                                       <!-- ROUTE information for roundOrientationInterpolator node:  [from clock3.fraction_changed to set_fraction ] [from value_changed to theRound.set_rotation ] -->
                                                       <OrientationInterpolator DEF='roundOrientationInterpolatorkey='0.029411765 0.058823529 0.088235294 0.117647059 0.147058824 0.176470588 0.205882353 0.235294118 0.264705882 0.294117647 0.323529412 0.352941176 0.382352941 0.411764706 0.441176471 0.470588235 0.5 0.529411765 0.558823529 0.588235294 0.617647059 0.647058824 0.676470588 0.705882353 0.735294118 0.764705882 0.794117647 0.823529412 0.852941176 0.882352941 0.911764706 0.941176471 0.970588235keyValue='1 0 0 -1.03580267483729 1 0 0 -1.07069156372618 1 0 0 -1.10558045261507 1 0 0 -1.14046934150396 1 0 0 -1.17535823039285 1 0 0 -1.21024711928174 1 0 0 -1.24513600817063 1 0 0 -1.28002489705952 1 0 0 -1.31491378594841 1 0 0 -1.34980267483729 1 0 0 -1.38469156372618 1 0 0 -1.41958045261507 1 0 0 -1.45446934150396 1 0 0 -1.48935823039285 1 0 0 -1.52424711928174 1 0 0 -1.55913600817063 1 0 0 -1.59402489705952 1 0 0 -1.6289137859484 1 0 0 -1.66380267483729 1 0 0 -1.69869156372618 1 0 0 -1.73358045261507 1 0 0 -1.76846934150396 1 0 0 -1.80335823039285 1 0 0 -1.83824711928174 1 0 0 -1.87313600817063 1 0 0 -1.90802489705952 1 0 0 -1.9429137859484 1 0 0 -1.97780267483729 1 0 0 -2.01269156372618 1 0 0 -2.04758045261507 1 0 0 -2.08246934150396 1 0 0 -2.11735823039285 1 0 0 -2.15224711928174'/>
526                                                         <Viewpoint DEF='rideTheRounddescription='ride the roundorientation='1 0 0 .45position='0 -5 10'/>
527                                                    </Transform>
528 
                                                  <!-- ROUTE information for RECOILTIMER node:  [from shootRound.touchTime to set_startTime ] [from fraction_changed to recoil.set_fraction ] -->
                                                  <TimeSensor DEF='RECOILTIMERcycleInterval='5'/>
529 
                                                  <!-- ROUTE information for recoil node:  [from RECOILTIMER.fraction_changed to set_fraction ] [from value_changed to recoilMover.set_translation ] -->
                                                  <PositionInterpolator DEF='recoilkey='0 .2 .4 .6 .8 1keyValue='0 0 0 0 -.20 .25 0 -.40 .5 0 -.20 .25 0 -.10 .15 0 0 0'/>
530                                                    < ROUTE  fromNode='RECOILTIMER' fromField='fraction_changed' toNode='recoil' toField='set_fraction'/>
531                                                    < ROUTE  fromNode='recoil' fromField='value_changed' toNode='recoilMover' toField='set_translation'/>
532                                               </Transform>
533                                               <Transform DEF='shotEffectsrotation='1 0 0 1.57translation='-4.7 0 -3.5'>
534                                                    <Transform DEF='hotGasrotation='0 0 1 -.76translation='-.3 -.3 0'>
535                                                         <Group>
536 
                                                            <!-- ROUTE information for BallTransform node:  [from BALLSIZE.value_changed to set_scale ] -->
                                                            <Transform DEF='BallTransformscale='.000001 .0000001 .0000001'>
537                                                                   <Shape>
538                                                                        <Sphere DEF='EXPSHAPEradius='25'/>
539                                                                        <Appearance>
540                                                                             <!-- explosion.png is from the Pearl Harbor scene from www.planetnine.com. -->
541                                                                             <ImageTexture DEF='explosion'   url=' "explosion.png " "https://savage.nps.edu/Savage/GroundVehicles/T72M/explosion.png " "https://savage.nps.edu/Savage/Weapons/Missiles/explosion.png " '/>
542                                                                        </Appearance>
543                                                                   </Shape>
544                                                              </Transform>
545 
                                                            <!-- ROUTE information for BALLSIZE node:  [from BOOMCLOCK.fraction_changed to set_fraction ] [from value_changed to BallTransform.set_scale ] -->
                                                            <PositionInterpolator DEF='BALLSIZEkey='0.0 0.1 0.2 .3 .4 .5 .6 .7 .8 .9 1.0keyValue='0 0 0 .003 .001 .003 .006 .002 .006 .01 .003 .01 .015 .006 .015 .02 .02 .02 .01 .01 .01 .006 .006 .006 .003 .003 .003 0 0 0 0 0 0'/>
546 
                                                            <!-- ROUTE information for BOOMCLOCK node:  [from shootRound.touchTime to set_startTime ] [from fraction_changed to BALLSIZE.set_fraction ] -->
                                                            <TimeSensor DEF='BOOMCLOCKcycleInterval='.85'/>
547                                                         </Group>
548                                                    </Transform>
549                                                    <Transform rotation='0 0 1 -.76'>
550 
                                                       <!-- ROUTE information for BoomTransform node:  [from ScaleInterp.value_changed to set_scale ] -->
                                                       <Transform DEF='BoomTransformscale='0.0001 0.00001 0.00001translation='0.0 0 0.0'>
551                                                              <Shape>
552                                                                   <Extrusion beginCap='falsecreaseAngle='1.57crossSection='1.0 0.0 0.92 -0.38 0.71 -0.71 0.38 -0.92 0.0 -1.0 -0.38 -0.92 -0.71 -0.71 -0.92 -0.38 -1.0 -0.0 -0.92 0.38 -0.71 0.71 -0.38 0.92 0.0 1.0 0.38 0.92 0.71 0.71 0.92 0.38 1.0 0.0endCap='falsespine='2.0 0.0 0.0 1.85 0.0 0.77 1.41 0.0 1.41 0.77 0.0 1.85 0.0 0.0 2.0 -0.77 0.0 1.85 -1.41 0.0 1.41 -1.85 0.0 0.77 -2.0 0.0 0.0 -1.85 0.0 -0.77 -1.41 0.0 -1.41 -0.77 0.0 -1.85 0.0 0.0 -2.0 0.77 0.0 -1.85 1.41 0.0 -1.41 1.85 0.0 -0.77 2.0 0.0 0.0'/>
553                                                                   <Appearance>
554 
                                                                      <!-- ROUTE information for BoomMaterial node:  [from TransparencyInterp.value_changed to set_transparency ] -->
                                                                      <Material DEF='BoomMaterial'/>
555                                                                        <ImageTexture   url=' "Boom1.jpg " "https://savage.nps.edu/Savage/GroundVehicles/T72M/Boom1.jpg " "https://savage.nps.edu/Savage/ShipsMilitary/FrigateYavuzTurkey/Boom1.jpg " '/>
556                                                                   </Appearance>
557                                                              </Shape>
558 
                                                            <!-- ROUTE information for TransparencyInterp node:  [from BoomTimer.fraction_changed to set_fraction ] [from value_changed to BoomMaterial.set_transparency ] -->
                                                            <ScalarInterpolator DEF='TransparencyInterpkey='0 0.04 0.1 0.7 1.0keyValue='1.0 0.2 0.3 1.0 1.0'/>
559 
                                                            <!-- ROUTE information for ScaleInterp node:  [from BoomTimer.fraction_changed to set_fraction ] [from value_changed to BoomTransform.set_scale ] -->
                                                            <PositionInterpolator DEF='ScaleInterpkey='0 0.04 0.1 0.7 1.0keyValue='0.00001 0.00001 0.00001 0.05 0.4 0.05 0.4 0.6 0.4 0.5 0.9 0.5 0.00001 0.0001 0.00001'/>
560 
                                                            <!-- ROUTE information for BoomTimer node:  [from shootRound.touchTime to set_startTime ] [from fraction_changed to ScaleInterp.set_fraction ] [from fraction_changed to TransparencyInterp.set_fraction ] -->
                                                            <TimeSensor DEF='BoomTimercycleInterval='5.0'/>
561                                                         </Transform>
562                                                         < ROUTE  fromNode='BOOMCLOCK' fromField='fraction_changed' toNode='BALLSIZE' toField='set_fraction'/>
563                                                         < ROUTE  fromNode='BALLSIZE' fromField='value_changed' toNode='BallTransform' toField='set_scale'/>
564                                                         < ROUTE  fromNode='BoomTimer' fromField='fraction_changed' toNode='ScaleInterp' toField='set_fraction'/>
565                                                         < ROUTE  fromNode='ScaleInterp' fromField='value_changed' toNode='BoomTransform' toField='set_scale'/>
566                                                         < ROUTE  fromNode='BoomTimer' fromField='fraction_changed' toNode='TransparencyInterp' toField='set_fraction'/>
567                                                         < ROUTE  fromNode='TransparencyInterp' fromField='value_changed' toNode='BoomMaterial' toField='set_transparency'/>
568                                                    </Transform>
569                                               </Transform>
570                                          </Group>
571                                     </Transform>
572                                     <Transform DEF='elevMechMover1'>
573                                          <Transform>
574                                               <Transform rotation='0 0 1 1.57'>
575                                                    <Transform rotation='1 0 0 -.25translation='.45 1.7 -.3'>
576 
                                                       <!-- Shape elevatingMech1 is a DEF node that has 1 USE node: USE_1 -->
                                                       <Shape DEF='elevatingMech1'>
577                                                              <Cylinder height='1.3radius='.08'/>
578                                                              <Appearance USE='camiPaint'/>
579                                                         </Shape>
580                                                         <Transform translation='0 -1 0'>
581 
                                                            <!-- Shape lowerElevMechExtender is a DEF node that has 1 USE node: USE_1 -->
                                                            <Shape DEF='lowerElevMechExtender'>
582                                                                   <Cylinder height='1radius='.070'/>
583                                                                   <Appearance>
584                                                                        <Material diffuseColor='.7 .7 .7'/>
585                                                                   </Appearance>
586                                                              </Shape>
587                                                         </Transform>
588                                                    </Transform>
589                                                    <Transform rotation='1 0 0 -.25translation='-.45 1.7 -0.3'>
590                                                         <Shape USE='elevatingMech1'/>
591                                                         <Transform translation='0 -1 0'>
592                                                              <Shape USE='lowerElevMechExtender'/>
593                                                         </Transform>
594                                                    </Transform>
595                                               </Transform>
596                                          </Transform>
597                                     </Transform>
598                                </Transform>
599 
600                                     <field name='barrelRotationtype='SFRotationaccessType='inputOnly'/>
601                                     <field name='upperRotationtype='SFRotationaccessType='outputOnly'/>
602                                     <field name='shrinkCylindertype='SFVec3faccessType='outputOnly'/>
603                                     <field name='extendCylindertype='SFVec3faccessType='outputOnly'/>
  <![CDATA[
              
ecmascript:

function barrelRotation (value, eventTime ) {
	angle = value[3];
	outputAngle = .75 * angle;
	upperRotation = new SFRotation ( 0, 1, 0, outputAngle);
	extendCylinder = new SFVec3f ( 0, .22 + (-.7 * angle), 0);	
	shrinkCylinder = new SFVec3f (1, 1.02 * (.85 - angle), 1);
}

            
]]>
605                                </Script>
606                                < ROUTE  fromNode='tubeSensor' fromField='rotation_changed' toNode='upperCylinderMover' toField='barrelRotation'/>
607                                < ROUTE  fromNode='upperCylinderMover' fromField='upperRotation' toNode='ruc' toField='set_rotation'/>
608                                < ROUTE  fromNode='upperCylinderMover' fromField='extendCylinder' toNode='shrinkCylinder' toField='set_translation'/>
609                                < ROUTE  fromNode='upperCylinderMover' fromField='shrinkCylinder' toNode='shrinkCylinder' toField='set_scale'/>
610                                < ROUTE  fromNode='upperCylinderMover' fromField='extendCylinder' toNode='shrinkCylinderR' toField='set_translation'/>
611                                < ROUTE  fromNode='upperCylinderMover' fromField='shrinkCylinder' toNode='shrinkCylinderR' toField='set_scale'/>
612                           </Transform>
613 
                         <!-- ROUTE information for carriage_sensor node:  [from rotation_changed to rotateUpperCarriage.set_rotation ] -->
                         <CylinderSensor DEF='carriage_sensordescription='sensor for upper carriage deflectionmaxAngle='.90minAngle='-.90'/>
614                           < ROUTE  fromNode='carriage_sensor' fromField='rotation_changed' toNode='rotateUpperCarriage' toField='set_rotation'/>
615                      </Transform>
616                 </Group>
617            </Group>
618            <Background   backUrl=' "sky2.jpg " "https://savage.nps.edu/Savage/Weapons/Guns/sky2.jpg " '   frontUrl=' "sky2.jpg " "https://savage.nps.edu/Savage/Weapons/Guns/sky2.jpg " '   leftUrl=' "sky2.jpg " "https://savage.nps.edu/Savage/Weapons/Guns/sky2.jpg " '   rightUrl=' "sky2.jpg " "https://savage.nps.edu/Savage/Weapons/Guns/sky2.jpg " '   topUrl=' "sky2.jpg " "https://savage.nps.edu/Savage/Weapons/Guns/sky2.jpg " '/>
619            <Viewpoint DEF='targetdescription='as seen from targetorientation='0 0.995 -0.097 3.14position='0 10 -372'/>
620            <Transform DEF='theGroundtranslation='0 -1.5 0'>
621                 <Transform scale='100 .3 100'>
622                      <Inline   url=' "../../../Vrml2Sourcebook/Chapter14-ElevationGrid/Figure14.5ElevationGridTerrain.x3d" "https://www.web3d.org/x3d/content/examples/Vrml2Sourcebook/Chapter14-ElevationGrid/Figure14.5ElevationGridTerrain.x3d" "../../../Vrml2Sourcebook/Chapter14-ElevationGrid/Figure14.5ElevationGridTerrain.wrl" "https://www.web3d.org/x3d/content/examples/Vrml2Sourcebook/Chapter14-ElevationGrid/Figure14.5ElevationGridTerrain.wrl" '/>
623                 </Transform>
624            </Transform>
625            < ROUTE  fromNode='wheelSensor' fromField='isOver' toNode='CLOCK' toField='set_enabled'/>
626            < ROUTE  fromNode='CLOCK' fromField='fraction_changed' toNode='wheelInterpolator' toField='set_fraction'/>
627            < ROUTE  fromNode='wheelInterpolator' fromField='value_changed' toNode='leftWheel1' toField='set_rotation'/>
628            <Transform DEF='fireTheRoundtranslation='5 3 -5'>
629                 <Billboard DEF='fireMe'>
630                      <Transform translation='-1 -.35 0'>
631                           <Shape>
632                                <Text string='"FIRE!"'>
633                                     <FontStyle justify='"MIDDLE" "MIDDLE"'/>
634                                </Text>
635                                <Appearance>
636                                     <Material emissiveColor='.9 .9 .9'/>
637                                </Appearance>
638                           </Shape>
639                      </Transform>
640                      <Shape>
641                           <Box DEF='signsize='4 2 .2'/>
642                           <Appearance>
643                                <Material transparency='.6'/>
644                                <ImageTexture USE='camo'/>
645                           </Appearance>
646                      </Shape>
647                 </Billboard>
648 
               <!-- ROUTE information for shootRound node:  [from touchTime to BoomTimer.set_startTime ] [from touchTime to RECOILTIMER.set_startTime ] [from touchTime to BOOMCLOCK.set_startTime ] [from touchTime to clock3.set_startTime ] [from touchTime to CannonFireSound.startTime ] [from touchTime to spinTimer.set_startTime ] -->
               <TouchSensor DEF='shootRounddescription='touch muzzlebreak to shoot round'/>
649 
               <!-- ROUTE information for clock3 node:  [from shootRound.touchTime to set_startTime ] [from fraction_changed to roundPathInterpolator.set_fraction ] [from fraction_changed to roundOrientationInterpolator.set_fraction ] -->
               <TimeSensor DEF='clock3cycleInterval='15'/>
650            </Transform>
651            <Transform DEF='targetSpheretranslation='0 0 -320'>
652                 <Transform>
653                      <Shape>
654                           <Box size='10 1 10'/>
655                           <Appearance USE='camiPaint'/>
656                      </Shape>
657 
                    <!-- ROUTE information for explosionsoundsensor node:  [from enterTime to explosionSound.startTime ] -->
                    <ProximitySensor DEF='explosionsoundsensorsize='200 400 300'/>
658                 </Transform>
659                 <Sound DEF='explosionSoundsmaxBack='100maxFront='100minBack='.01minFront='.01'>
660 
                    <!-- ROUTE information for explosionSound node:  [from explosionsoundsensor.enterTime to startTime ] -->
                    <AudioClip DEF='explosionSounddescription='explosion sound'   url=' "ShellExplode.au" "https://savage.nps.edu/Savage/Weapons/Guns/ShellExplode.au" '/>
661                 </Sound>
662                 < ROUTE  fromNode='explosionsoundsensor' fromField='enterTime' toNode='explosionSound' toField='startTime'/>
663            </Transform>
664            <Transform scale='.2 1 .2translation='5 0 0'>
665                 <Shape USE='artyRound'/>
666            </Transform>
667            <Transform scale='.2 1 .2translation='5.2 0 0'>
668                 <Shape USE='artyRound'/>
669            </Transform>
670            <Transform scale='.2 1 .2translation='5.4 0 0'>
671                 <Shape USE='artyRound'/>
672            </Transform>
673            <Transform/>
674            < ROUTE  fromNode='shootRound' fromField='touchTime' toNode='BoomTimer' toField='set_startTime'/>
675            < ROUTE  fromNode='shootRound' fromField='touchTime' toNode='RECOILTIMER' toField='set_startTime'/>
676            < ROUTE  fromNode='shootRound' fromField='touchTime' toNode='BOOMCLOCK' toField='set_startTime'/>
677            < ROUTE  fromNode='shootRound' fromField='touchTime' toNode='clock3' toField='set_startTime'/>
678            < ROUTE  fromNode='shootRound' fromField='touchTime' toNode='CannonFireSound' toField='startTime'/>
679            < ROUTE  fromNode='clock3' fromField='fraction_changed' toNode='roundPathInterpolator' toField='set_fraction'/>
680            < ROUTE  fromNode='clock3' fromField='fraction_changed' toNode='roundOrientationInterpolator' toField='set_fraction'/>
681            < ROUTE  fromNode='roundPathInterpolator' fromField='value_changed' toNode='theRound' toField='set_translation'/>
682            < ROUTE  fromNode='roundOrientationInterpolator' fromField='value_changed' toNode='theRound' toField='set_rotation'/>
683            < ROUTE  fromNode='shootRound' fromField='touchTime' toNode='spinTimer' toField='set_startTime'/>
684            < ROUTE  fromNode='spinTimer' fromField='fraction_changed' toNode='roundSpinner' toField='set_fraction'/>
685            < ROUTE  fromNode='roundSpinner' fromField='value_changed' toNode='theRoundSpinner' toField='set_rotation'/>
686       </Scene>
687  </X3D>
<!--

<!--
Event Graph ROUTE Table shows event connections.
-->
<!-- to top Index for DEF nodes: AnimationControl, AnimationTransform, artyRound, BALLSIZE, BallTransform, barrel, barrelCover, barrelGroup, barrelMover1, basePlate, basePlateClamp, betweenTrails, black, BOOMCLOCK, BoomMaterial, BoomTimer, BoomTransform, BoxDownTimer, BoxUpTimer, brakeResevoir, breech, ButtonChoice, cami, camiPaint, camo, CannonFireSound, carriage_sensor, CircularHandle, clamp, ClearSphere, ClearSphere1, ClearSphere2, CLOCK, clock3, connectingCylinder, Crank, CrankShaft, downBarrel, elevatingMech1, elevMechMover1, ExampleViewPositionOrientation, explosion, explosionSound, explosionSounds, explosionsoundsensor, EXPSHAPE, fireMe, fireTheRound, handwheelGroup, hotGas, lbasePlateClamp, left_stantion, leftHandwheel, leftRim, leftSideBar1, leftSpade, leftTire, leftTrail, leftTrailMover, leftWheel, leftWheel1, linkBolt, LowerCar, LowerCarriage1, lowerElevMechExtender, lTrailSpreader, lTravelLockAnchor, M198_Howitzer, MoveBoxDown, MoveBoxUp, muzzle_break, muzzleBreak, recoil, recoilMover, RECOILTIMER, recoilTransform, rideTheRound, rightHandwheel, rightRim, rightSideBar, RightSpade, rightTire, RightTrail, rightTrailMover, rightTrunion, rightUpperCylinder, rightWheel, rightWheel1, rim, rotateUpperCarriage, roundOrientationInterpolator, roundPathInterpolator, roundSpinner, ruc, rucL, rucR, rWheelLift, ScaleInterp, SetBoxDown, SetBoxUp, Shaft, shiny, shinyPiece, shootRound, shotEffects, shrinkCylinder, shrinkCylinderR, sideBar, sideBars, sideView, sideViewClose, sign, spade, spinTimer, StrutOne, Struts, StrutThree, StrutTwo, target, targetSphere, theBarrel, theGround, theRound, theRoundSpinner, tire, Top, TopBall, trail, trailSpreader, TransparencyInterp, Transparent, travelLock, travelLockAnchor, travelLockClock, travelLockOrient, travelLockOrientor, travelLockPiece, travelLockSensor, traversingPlatform, traversingWheel, tube, tube1, tubeSensor, underTube, upperCarriage, upperCarriagePiece, upperCylinder1, upperCylinderMover, upperExtender, upperTravelLocker, wheelDown, wheelInterpolator, wheelLift, wheelRaiser, wheelSensor, wheelUp

Index for Viewpoint nodes: betweenTrails, downBarrel, rideTheRound, sideView, sideViewClose, target, underTube

Index for ExternProtoDeclare definition: ViewPositionOrientation
-->
X3D Tooltips element index: Appearance, AudioClip, Background, Billboard, Box, Cone, Cylinder, CylinderSensor, ExternProtoDeclare, Extrusion, field, fieldValue, FontStyle, Group, head, ImageTexture, Inline, IntegerTrigger, LOD, Material, meta, OrientationInterpolator, PositionInterpolator, ProtoInstance, ProximitySensor, ROUTE, ScalarInterpolator, Scene, Script, Shape, Sound, Sphere, Switch, Text, TimeSensor, TouchSensor, Transform, Viewpoint, WorldInfo, X3D, plus documentation for accessType definitions, type definitions, XML data types, and field types

Event Graph ROUTE Table entries with 47 ROUTE connections total, showing X3D event-model relationships for this scene.

Each row shows an event cascade that may occur during a single timestamp interval between frame renderings, as part of the X3D execution model.

ClearSphere1
TouchSensor
touchTime
SFTime

ROUTE
event to
(1)
BoxUpTimer
TimeSensor
startTime
SFTime
then
 
 
 
BoxUpTimer
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(2)
wheelUp
OrientationInterpolator
set_fraction
SFFloat
then
 
 
 
wheelUp
OrientationInterpolator
value_changed
SFRotation

ROUTE
event to
(3)
AnimationTransform
Transform
set_rotation
SFRotation
ClearSphere1
TouchSensor
isActive
SFBool

ROUTE
event to
(1)
SetBoxUp
IntegerTrigger
set_boolean
SFBool
then
 
 
 
SetBoxUp
IntegerTrigger
triggerValue
SFInt32

ROUTE
event to
(2)
ButtonChoice
Switch
whichChoice
SFInt32

ClearSphere2
TouchSensor
touchTime
SFTime

ROUTE
event to
(1)
BoxDownTimer
TimeSensor
startTime
SFTime
then
 
 
 
BoxDownTimer
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(2)
wheelDown
OrientationInterpolator
set_fraction
SFFloat
then
 
 
 
wheelDown
OrientationInterpolator
value_changed
SFRotation

ROUTE
event to
(3)
AnimationTransform
Transform
set_rotation
SFRotation
ClearSphere2
TouchSensor
isActive
SFBool

ROUTE
event to
(1)
SetBoxDown
IntegerTrigger
set_boolean
SFBool
then
 
 
 
SetBoxDown
IntegerTrigger
triggerValue
SFInt32

ROUTE
event to
(2)
ButtonChoice
Switch
whichChoice
SFInt32

shootRound
TouchSensor
touchTime
SFTime

ROUTE
event to
(1)
BoomTimer
TimeSensor
set_startTime
SFTime
then
 
 
 
BoomTimer
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(2)
ScaleInterp
PositionInterpolator
set_fraction
SFFloat
then
 
 
 
ScaleInterp
PositionInterpolator
value_changed
SFVec3f

ROUTE
event to
(3)
BoomTransform
Transform
set_scale
SFVec3f
  then
 
 
 
BoomTimer
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(2)
TransparencyInterp
ScalarInterpolator
set_fraction
SFFloat
then
 
 
 
TransparencyInterp
ScalarInterpolator
value_changed
SFFloat

ROUTE
event to
(3)
BoomMaterial
Material
set_transparency
SFFloat
shootRound
TouchSensor
touchTime
SFTime

ROUTE
event to
(1)
RECOILTIMER
TimeSensor
set_startTime
SFTime
then
 
 
 
RECOILTIMER
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(2)
recoil
PositionInterpolator
set_fraction
SFFloat
then
 
 
 
recoil
PositionInterpolator
value_changed
SFVec3f

ROUTE
event to
(3)
recoilMover
Transform
set_translation
SFVec3f
shootRound
TouchSensor
touchTime
SFTime

ROUTE
event to
(1)
BOOMCLOCK
TimeSensor
set_startTime
SFTime
then
 
 
 
BOOMCLOCK
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(2)
BALLSIZE
PositionInterpolator
set_fraction
SFFloat
then
 
 
 
BALLSIZE
PositionInterpolator
value_changed
SFVec3f

ROUTE
event to
(3)
BallTransform
Transform
set_scale
SFVec3f
shootRound
TouchSensor
touchTime
SFTime

ROUTE
event to
(1)
clock3
TimeSensor
set_startTime
SFTime
then
 
 
 
clock3
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(2)
roundPathInterpolator
PositionInterpolator
set_fraction
SFFloat
then
 
 
 
roundPathInterpolator
PositionInterpolator
value_changed
SFVec3f

ROUTE
event to
(3)
theRound
Transform
set_translation
SFVec3f
  then
 
 
 
clock3
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(2)
roundOrientationInterpolator
OrientationInterpolator
set_fraction
SFFloat
then
 
 
 
roundOrientationInterpolator
OrientationInterpolator
value_changed
SFRotation

ROUTE
event to
(3)
theRound
Transform
set_rotation
SFRotation
shootRound
TouchSensor
touchTime
SFTime

ROUTE
event to
(1)
CannonFireSound
AudioClip
startTime
SFTime
shootRound
TouchSensor
touchTime
SFTime

ROUTE
event to
(1)
spinTimer
TimeSensor
set_startTime
SFTime
then
 
 
 
spinTimer
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(2)
roundSpinner
OrientationInterpolator
set_fraction
SFFloat
then
 
 
 
roundSpinner
OrientationInterpolator
value_changed
SFRotation

ROUTE
event to
(3)
theRoundSpinner
Transform
set_rotation
SFRotation

travelLockSensor
TouchSensor
touchTime
SFTime

ROUTE
event to
(1)
travelLockClock
TimeSensor
set_startTime
SFTime
then
 
 
 
travelLockClock
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(2)
travelLockOrientor
OrientationInterpolator
set_fraction
SFFloat
then
 
 
 
travelLockOrientor
OrientationInterpolator
value_changed
SFRotation

ROUTE
event to
(3)
travelLockOrient
Transform
set_rotation
SFRotation

wheelSensor
TouchSensor
isOver
SFBool

ROUTE
event to
(1)
CLOCK
TimeSensor
set_enabled
SFBool
then
 
 
 
CLOCK
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(2)
wheelInterpolator
OrientationInterpolator
set_fraction
SFFloat
then
 
 
 
wheelInterpolator
OrientationInterpolator
value_changed
SFRotation

ROUTE
event to
(3)
leftWheel1
Transform
set_rotation
SFRotation

explosionsoundsensor
ProximitySensor
enterTime
SFTime

ROUTE
event to
(1)
explosionSound
AudioClip
startTime
SFTime

ExampleViewPositionOrientation
ProtoInstance
ViewPositionOrientation
No ROUTE connection found for output events from this node.
This ProtoInstance contains SFNode/MFNode fieldValue declarations with
direct access to other nodes, and thus has potential to produce run-time animation. 

carriage_sensor
CylinderSensor
rotation_changed
SFRotation

ROUTE
event to
(1)
rotateUpperCarriage
Transform
set_rotation
SFRotation

lTrailSpreader
CylinderSensor
rotation_changed
SFRotation

ROUTE
event to
(1)
leftTrailMover
Transform
set_rotation
SFRotation

trailSpreader
CylinderSensor
rotation_changed
SFRotation

ROUTE
event to
(1)
rightTrailMover
Transform
set_rotation
SFRotation

tubeSensor
CylinderSensor
rotation_changed
SFRotation

ROUTE
event to
(1)
barrelMover1
Transform
set_rotation
SFRotation
tubeSensor
CylinderSensor
rotation_changed
SFRotation

ROUTE
event to
(1)
upperCylinderMover
Script
barrelRotation
SFRotation
then
 
 
 
upperCylinderMover
Script
extendCylinder
SFVec3f

ROUTE
event to
(2)
shrinkCylinder
Transform
set_translation
SFVec3f
  then
 
 
 
upperCylinderMover
Script
extendCylinder
SFVec3f

ROUTE
event to
(2)
shrinkCylinderR
Transform
set_translation
SFVec3f
  then
 
 
 
upperCylinderMover
Script
shrinkCylinder
SFVec3f

ROUTE
event to
(2)
shrinkCylinder
Transform
set_scale
SFVec3f
  then
 
 
 
upperCylinderMover
Script
shrinkCylinder
SFVec3f

ROUTE
event to
(2)
shrinkCylinderR
Transform
set_scale
SFVec3f
  then
 
 
 
upperCylinderMover
Script
upperRotation
SFRotation

ROUTE
event to
(2)
ruc
Transform
set_rotation
SFRotation


Additional guidance on X3D animation can be found in the 10-Step Animation Design Process and Event Tracing hint sheets. Have fun with X3D! 😀

-->
<!-- Online at
https://savage.nps.edu/Savage/Weapons/Guns/M198HowitzerIndex.html -->
<!-- Version control at
https://gitlab.nps.edu/Savage/Savage/Weapons/Guns/M198Howitzer.x3d -->

<!-- Color-coding legend: X3D terminology <X3dNode  DEF='idNamefield='value'/> matches XML terminology <XmlElement  DEF='idNameattribute='value'/>
(Light-blue background: event-based behavior node or statement) (Grey background inside box: inserted documentation) (Magenta background: X3D Extensibility)
    <ProtoInstance name='ProtoName'> <field name='fieldName'/> </ProtoInstance> -->

to top <!-- For additional help information about X3D scenes, please see X3D Tooltips, X3D Resources, and X3D Scene Authoring Hints. -->