<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.0//EN" "https://www.web3d.org/specifications/x3d-3.0.dtd">
<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'>
  <head>
    <component level='1' name='DIS'/>
    <meta content='CannonProject.x3d' name='title'/>
    <meta content='Physically Based Modeling project for MV-4472, showing a projectile motion model that takes into account drag, changing air densities with altitude, and wind.' name='description'/>
    <meta content='Included is the model "Lightweight 155mm Howitzer" created by Jeffrey Weekley' name='reference'/>
    <meta content='The Dunes.jpg texture was found on the web at http://www.ecn.net.au/~iain/htextures' name='reference'/>
    <meta content='http://www.ecn.net.au/~iain/htextures' name='reference'/>
    <meta content='Ernesto Salles' name='creator'/>
    <meta content='10 December 2001' name='created'/>
    <meta content='8 July 2023' name='modified'/>
    <meta content='prerequisite: Java3D classes must be installed in CLASSPATH' name='warning'/>
    <meta content='CannonProject/run.bat' name='reference'/>
    <meta content='CannonProject/compile.bat' name='reference'/>
    <meta content='CannonProject/compile.out' name='reference'/>
    <meta content='projectile, physically based model' name='subject'/>
    <meta content='https://www.web3d.org/x3d/content/examples/Basic/DistributedInteractiveSimulation/CannonProject.x3d' name='identifier'/>
    <meta content='X3D-Edit 3.3, https://www.web3d.org/x3d/tools/X3D-Edit' name='generator'/>
    <meta content='../license.html' name='license'/>
  </head>
  <Scene>
    <!-- There was no size given for this weapon, it is built to similar dimensions as its precedessor, the M198 Howitzer. It is 5m total length. -->
    <WorldInfo title='CannonProject.x3d'/>
    <ExternProtoDeclare appinfo='Modified CylinderSensor with children nodes oriented about an arbitrary axis. Warning: ArbitraryAxisCylinderSensor affects children, not peers.' name='ArbitraryAxisCylinderSensor' url='"../../Savage/Tools/Animation/ArbitraryAxisCylinderSensorPrototype.x3d#ArbitraryAxisCylinderSensor" "https://www.web3d.org/x3d/content/examples/Savage/Tools/Animation/ArbitraryAxisCylinderSensorPrototype.x3d#ArbitraryAxisCylinderSensor" "../../Savage/Tools/Animation/ArbitraryAxisCylinderSensorPrototype.wrl#ArbitraryAxisCylinderSensor" "https://www.web3d.org/x3d/content/examples/Savage/Tools/Animation/ArbitraryAxisCylinderSensorPrototype.wrl#ArbitraryAxisCylinderSensor"'>
      <field accessType='initializeOnly' appinfo='shifted axis of rotation from local vertical, default 1 0 0 0' name='shiftRotationAxis' type='SFRotation'/>
      <field accessType='initializeOnly' appinfo='local center for axis of rotation, default 0 0 0' name='center' type='SFVec3f'/>
      <field accessType='initializeOnly' appinfo='whether to show visualization shape to show orientation and cylindrical mapping of mouse movements by sensor, default true' name='showCylinderSensorShape' type='SFBool'/>
      <field accessType='inputOutput' appinfo='scale for visualization shape, default 1 1 1' name='scaleCylinderSensorShape' type='SFVec3f'/>
      <field accessType='inputOutput' appinfo='color for visualization shape, default 0.9 0.9 0.4' name='colorCylinderSensorShape' type='SFColor'/>
      <field accessType='inputOutput' appinfo='transparency for visualization shape' name='transparencyCylinderSensorShape' type='SFFloat'/>
      <field accessType='inputOutput' appinfo='children nodes affected by ArbitraryAxisCylinderSensor' name='children' type='MFNode'/>
      <field accessType='inputOutput' appinfo='determines whether previous offset values are remembered/accumulated, default true' name='autoOffset' type='SFBool'/>
      <field accessType='inputOutput' appinfo='Text tooltip displayed for user interaction' name='description' type='SFString'/>
      <field accessType='inputOutput' appinfo='diskAngle 0 forces disk-like behavior, diskAngle 1.57 (90 degrees) forces cylinder-like behavior, default 0.262, range [0,pi/2]' name='diskAngle' type='SFFloat'/>
      <field accessType='inputOutput' appinfo='enables/disables node operation, default true' name='enabled' type='SFBool'/>
      <field accessType='inputOutput' appinfo='clamps rotation_changed events, default 0, range [-2pi,2pi]' name='minAngle' type='SFFloat'/>
      <field accessType='inputOutput' appinfo='clamps rotation_changed events, default -1, range [-2pi,2pi]' name='maxAngle' type='SFFloat'/>
      <field accessType='initializeOnly' appinfo='sends event and remembers last value sensed, default 0, range (-infinity,infinity)' name='offset' type='SFFloat'/>
      <field accessType='outputOnly' appinfo='output event isActive=true when primary mouse button is pressed, output event isActive=false when released.' name='isActive' type='SFBool'/>
      <field accessType='outputOnly' appinfo='rotation_changed events equal sum of relative bearing changes plus offset value about Y-axis in local coordinate system' name='rotation_changed' type='SFRotation'/>
      <field accessType='outputOnly' appinfo='trackPoint_changed events give intersection point of bearing with sensor&apos;s virtual geometry' name='trackPoint_changed' type='SFVec3f'/>
    </ExternProtoDeclare>
    <Viewpoint description='Lightweight 155mm Howitzer' orientation='0 1 0 -1.57' position='-5 0.7 0'/>
    <Viewpoint description='FarView' position='200 75 300'/>
    <Viewpoint description='AboveView' orientation='0 1 0 -1.57' position='-75.0 40.0 0.0'/>
    <Background skyColor='0.4 0.1 0.2'/>
    <!-- Default gun orientation points along X axis (typically North) -->
    <TimeSensor DEF='TheClock' cycleInterval='10'/>
    <Transform rotation='1 0 0 -1.57'>
      <ProtoInstance DEF='BarrelHeading' name='ArbitraryAxisCylinderSensor'>
        <fieldValue name='shiftRotationAxis' value='1 0 0 1.57'/>
        <fieldValue name='maxAngle' value='0.6'/>
        <fieldValue name='minAngle' value='-0.6'/>
        <fieldValue name='showCylinderSensorShape' value='false'/>
        <fieldValue name='children'>
          <Group DEF='Saddle'>
            <Transform rotation='0.58 0.58 -0.58 2.09' scale='0.75 0.75 0.75' translation='0.667 0 0'>
              <Transform DEF='SaddleBase' rotation='0 1 0 1.57' scale='0.7 0.7 0.7' translation='0.1 -0.6 0'>
                <Transform rotation='-1 0 0 1.57'>
                  <Shape>
                    <Extrusion crossSection='0 0.7 -0.4 0.6 -0.9 0 -0.8 -0.5 0 -0.6 0.8 -0.5 0.9 0 0.4 0.6 0 0.7 -0.4 0.6' solid='false' spine='0 0 0 0 0.2 0 0 0.29 0'/>
                    <Appearance>
                      <Material DEF='grey' diffuseColor='0.5 0.5 0.5' specularColor='1 1 1'/>
                    </Appearance>
                  </Shape>
                </Transform>
              </Transform>
              <Transform DEF='ElevationGear' translation='-0.25 -0.4 0.45'>
                <Transform rotation='0 0 1 1.57'>
                  <Shape>
                    <Box size='0.25 0.325 0.125'/>
                    <Appearance>
                      <Material diffuseColor='0.25 0.66 0.8'/>
                    </Appearance>
                  </Shape>
                  <Transform translation='-0.2 0 0.06'>
                    <Shape>
                      <Appearance>
                        <Material diffuseColor='1 0.25 1'/>
                      </Appearance>
                      <Box size='0.1625 0.165 0.1'/>
                    </Shape>
                    <Transform translation='0.075 -0.05 -0.01'>
                      <Shape>
                        <Appearance>
                          <Material diffuseColor='0.15 0.25 0.1'/>
                        </Appearance>
                        <Cylinder height='0.325' radius='0.075'/>
                      </Shape>
                    </Transform>
                  </Transform>
                  <Transform rotation='1 0 0 1.57' translation='0 0 -0.1'>
                    <Shape>
                      <Appearance>
                        <Material diffuseColor='0 1 0.66'/>
                      </Appearance>
                      <Cylinder height='0.25' radius='0.08'/>
                    </Shape>
                  </Transform>
                </Transform>
                <Transform scale='0.33 0.33 0.33' translation='-0.08 -0.15 0.175'>
                  <Inline DEF='Crank' url='"../../Savage/Weapons/Guns/Lightweight155mmHowitzerCrank.x3d" "https://www.web3d.org/x3d/content/examples/Savage/Weapons/Guns/Lightweight155mmHowitzerCrank.x3d" "../../Savage/Weapons/Guns/Lightweight155mmHowitzerCrank.wrl" "https://www.web3d.org/x3d/content/examples/Savage/Weapons/Guns/Lightweight155mmHowitzerCrank.wrl"'/>
                </Transform>
              </Transform>
              <Transform rotation='1 0 0 3.14'>
                <Transform translation='0 0.8 0'>
                  <Transform USE='ElevationGear'/>
                </Transform>
              </Transform>
              <Transform rotation='0 0 1 1.57' translation='-0.25 -1.1 -0.15'>
                <Transform translation='0.15 -0.1 0'>
                  <Shape>
                    <Appearance>
                      <Material diffuseColor='0.25 0.2 0.4'/>
                    </Appearance>
                    <Box size='0.425 0.17 0.125'/>
                  </Shape>
                </Transform>
                <Transform translation='0 0.1 0'>
                  <Shape>
                    <Appearance>
                      <Material diffuseColor='0.25 0.2 0.4'/>
                    </Appearance>
                    <Cylinder height='0.35' radius='0.0625'/>
                  </Shape>
                </Transform>
                <Transform rotation='-1 0 0 1.57' scale='0.33 0.33 0.33' translation='0 0.33 0'>
                  <Inline USE='Crank'/>
                </Transform>
              </Transform>
              <Transform rotation='-0.58 -0.58 0.58 2.09' translation='-0.25 -0.4 0'>
                <ProtoInstance DEF='BarrelElevation' name='ArbitraryAxisCylinderSensor'>
                  <fieldValue name='minAngle' value='-1.125'/>
                  <fieldValue name='maxAngle' value='0'/>
                  <fieldValue name='offset' value='-0.52'/>
                  <fieldValue name='showCylinderSensorShape' value='false'/>
                  <fieldValue name='children'>
                    <Transform rotation='1 0 0 1.57' translation='0.5 0 -0.1'>
                      <Group DEF='CannonAssembly'>
                        <Transform rotation='0 0 -1 0.79'>
                          <Transform DEF='Cannon' rotation='0 0 -1 0.79' scale='0.033 2 0.033' translation='1.2 1.2 0'>
                            <Shape>
                              <Appearance>
                                <Material diffuseColor='0.15 0.2 0.25'/>
                              </Appearance>
                              <Extrusion beginCap='false' convex='false' creaseAngle='1.57' crossSection='1.00 0.00 0.92 -0.38 0.71 -0.71 0.38 -0.92 0.00 -1.00 -0.38 -0.92 -0.71 -0.71 -0.92 -0.38 -1.00 -0.00 -0.92 0.38 -0.71 0.71 -0.38 0.92 0.00 1.00 0.38 0.92 0.71 0.71 0.92 0.38 1.00 0.00' endCap='false' spine='2.00 0.0 0.00 1.85 0.0 0.77 1.41 0.0 1.41 0.77 0.0 1.85 0.00 0.0 2.00 -0.77 0.0 1.85 -1.41 0.0 1.41 -1.85 0.0 0.77 -2.00 0.0 0.00 -1.85 0.0 -0.77 -1.41 0.0 -1.41 -0.77 0.0 -1.85 0.00 0.0 -2.00 0.77 0.0 -1.85 1.41 0.0 -1.41 1.85 0.0 -0.77 2.00 0.0 0.00'/>
                            </Shape>
                          </Transform>
                          <Transform DEF='MuzzleBrake' translation='2.75 2.63 0'>
                            <Transform DEF='BottomPlate' rotation='0 0 1 0.79'>
                              <Shape>
                                <Box size='0.5 0.07 0.34'/>
                                <Appearance>
                                  <Material diffuseColor='0.15 0.2 0.15'/>
                                </Appearance>
                              </Shape>
                              <Transform DEF='TopPlate' translation='0 0.175 0'>
                                <Shape>
                                  <Box size='0.3 0.07 0.24'/>
                                  <Appearance>
                                    <Material diffuseColor='0.15 0.2 0.15'/>
                                  </Appearance>
                                </Shape>
                              </Transform>
                              <Transform DEF='SuppressionRingOne' rotation='0 0 1 1.57' scale='0.0375 0.0375 0.06' translation='0.12 0.0875 0'>
                                <Shape>
                                  <Appearance>
                                    <Material diffuseColor='0.15 0.2 0.25'/>
                                  </Appearance>
                                  <Extrusion beginCap='false' convex='false' creaseAngle='1.57' crossSection='1.00 0.00 0.92 -0.38 0.71 -0.71 0.38 -0.92 0.00 -1.00 -0.38 -0.92 -0.71 -0.71 -0.92 -0.38 -1.00 -0.00 -0.92 0.38 -0.71 0.71 -0.38 0.92 0.00 1.00 0.38 0.92 0.71 0.71 0.92 0.38 1.00 0.00' endCap='false' spine='2.00 0.0 0.00 1.85 0.0 0.77 1.41 0.0 1.41 0.77 0.0 1.85 0.00 0.0 2.00 -0.77 0.0 1.85 -1.41 0.0 1.41 -1.85 0.0 0.77 -2.00 0.0 0.00 -1.85 0.0 -0.77 -1.41 0.0 -1.41 -0.77 0.0 -1.85 0.00 0.0 -2.00 0.77 0.0 -1.85 1.41 0.0 -1.41 1.85 0.0 -0.77 2.00 0.0 0.00'/>
                                </Shape>
                              </Transform>
                              <Transform DEF='SuppressionRingTwo' rotation='0 0 1 1.57' scale='0.0375 0.0375 0.06' translation='-0.12 0.0875 0'>
                                <Shape>
                                  <Appearance>
                                    <Material diffuseColor='0.15 0.2 0.225'/>
                                  </Appearance>
                                  <Extrusion beginCap='false' convex='false' creaseAngle='1.57' crossSection='1.00 0.00 0.92 -0.38 0.71 -0.71 0.38 -0.92 0.00 -1.00 -0.38 -0.92 -0.71 -0.71 -0.92 -0.38 -1.00 -0.00 -0.92 0.38 -0.71 0.71 -0.38 0.92 0.00 1.00 0.38 0.92 0.71 0.71 0.92 0.38 1.00 0.00' endCap='false' spine='2.00 0.0 0.00 1.85 0.0 0.77 1.41 0.0 1.41 0.77 0.0 1.85 0.00 0.0 2.00 -0.77 0.0 1.85 -1.41 0.0 1.41 -1.85 0.0 0.77 -2.00 0.0 0.00 -1.85 0.0 -0.77 -1.41 0.0 -1.41 -0.77 0.0 -1.85 0.00 0.0 -2.00 0.77 0.0 -1.85 1.41 0.0 -1.41 1.85 0.0 -0.77 2.00 0.0 0.00'/>
                                </Shape>
                              </Transform>
                              <Transform DEF='SuppressionRingThree' rotation='0 0 1 1.57' scale='0.0375 0.0375 0.06' translation='0 0.0875 0'>
                                <Shape>
                                  <Appearance>
                                    <Material diffuseColor='0.15 0.2 0.25'/>
                                  </Appearance>
                                  <Extrusion beginCap='false' convex='false' creaseAngle='1.57' crossSection='1.00 0.00 0.92 -0.38 0.71 -0.71 0.38 -0.92 0.00 -1.00 -0.38 -0.92 -0.71 -0.71 -0.92 -0.38 -1.00 -0.00 -0.92 0.38 -0.71 0.71 -0.38 0.92 0.00 1.00 0.38 0.92 0.71 0.71 0.92 0.38 1.00 0.00' endCap='false' spine='2.00 0.0 0.00 1.85 0.0 0.77 1.41 0.0 1.41 0.77 0.0 1.85 0.00 0.0 2.00 -0.77 0.0 1.85 -1.41 0.0 1.41 -1.85 0.0 0.77 -2.00 0.0 0.00 -1.85 0.0 -0.77 -1.41 0.0 -1.41 -0.77 0.0 -1.85 0.00 0.0 -2.00 0.77 0.0 -1.85 1.41 0.0 -1.41 1.85 0.0 -0.77 2.00 0.0 0.00'/>
                                </Shape>
                              </Transform>
                              <Group DEF='TowRing'>
                                <Transform rotation='1 0 0 1.57' scale='1.1 1.1 1.1' translation='0.31 0 0'>
                                  <Shape>
                                    <Appearance>
                                      <Material diffuseColor='0.5 0.5 0.5' specularColor='1 1 1'/>
                                    </Appearance>
                                    <Extrusion beginCap='false' creaseAngle='1.57' crossSection='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 0' endCap='false' spine='0.03 0 0 0.0276 -0.0114 0 0.0213 -0.0213 0 0.0114 -0.0276 0 0 -0.03 0 -0.0114 -0.0276 0 -0.0213 -0.0213 0 -0.0276 -0.0114 0 -0.03 0 0 -0.0276 0.0114 0 -0.0213 0.0213 0 -0.0114 0.0276 0 0 0.03 0 0.0114 0.0276 0 0.0213 0.0213 0 0.0276 0.0114 0 0.03 0 0'/>
                                  </Shape>
                                  <Transform rotation='0 -1 0 1.57' scale='0.5 1 1' translation='-0.027 0 0'>
                                    <Shape>
                                      <Appearance>
                                        <Material diffuseColor='0.5 0.5 0.5' specularColor='1 1 1'/>
                                      </Appearance>
                                      <Extrusion beginCap='false' convex='false' creaseAngle='1.57' crossSection='0 0 0.007 0 0.018 0.025 0.032 0.035 0.04 0.036 0.04 0.04 0 0.04 0 0' endCap='false' spine='0.001 0 0 0.00092 -0.00038 0 0.00071 -0.00071 0 0.00038 -0.00092 0 0 -0.001 0 -0.00038 -0.00092 0 -0.00071 -0.00071 0 -0.00092 -0.00038 0 -0.001 0 0 -0.00092 0.00038 0 -0.00071 0.00071 0 -0.00038 0.00092 0 0 0.001 0 0.00038 0.00092 0 0.00071 0.00071 0 0.00092 0.00038 0 0.001 0 0'/>
                                    </Shape>
                                  </Transform>
                                </Transform>
                              </Group>
                              <Transform DEF='MuzzleBase' rotation='0 0 1 1.57' scale='0.035 0.166 0.035' translation='-0.25 0.0875 0'>
                                <Shape>
                                  <Appearance>
                                    <Material diffuseColor='0.15 0.2 0.25'/>
                                  </Appearance>
                                  <Extrusion beginCap='false' convex='false' creaseAngle='1.57' crossSection='1.00 0.00 0.92 -0.38 0.71 -0.71 0.38 -0.92 0.00 -1.00 -0.38 -0.92 -0.71 -0.71 -0.92 -0.38 -1.00 -0.00 -0.92 0.38 -0.71 0.71 -0.38 0.92 0.00 1.00 0.38 0.92 0.71 0.71 0.92 0.38 1.00 0.00' endCap='false' spine='2.00 0.0 0.00 1.85 0.0 0.77 1.41 0.0 1.41 0.77 0.0 1.85 0.00 0.0 2.00 -0.77 0.0 1.85 -1.41 0.0 1.41 -1.85 0.0 0.77 -2.00 0.0 0.00 -1.85 0.0 -0.77 -1.41 0.0 -1.41 -0.77 0.0 -1.85 0.00 0.0 -2.00 0.77 0.0 -1.85 1.41 0.0 -1.41 1.85 0.0 -0.77 2.00 0.0 0.00'/>
                                </Shape>
                              </Transform>
                            </Transform>
                          </Transform>
                        </Transform>
                      </Group>
                      <Group DEF='RecoilCradle'>
                        <Transform DEF='Cradle' rotation='0 0 -1 1.57'>
                          <Transform DEF='RightSidewall' rotation='0 1 0 1.57' translation='-0.08 0 0.25'>
                            <Shape>
                              <Box size='0.0625 1.125 0.25'/>
                              <Appearance>
                                <Material/>
                              </Appearance>
                            </Shape>
                            <Transform translation='-0.06 0 0'>
                              <Shape>
                                <Box size='0.06 0.75 0.15'/>
                                <Appearance>
                                  <Material diffuseColor='0.1 0.2 0.1'/>
                                </Appearance>
                              </Shape>
                            </Transform>
                            <Transform DEF='ForwardRightWall' translation='0 0.975 0'>
                              <Shape>
                                <Box size='0.0625 0.775 0.25'/>
                                <Appearance>
                                  <Material diffuseColor='0.2 0.8 0.2'/>
                                </Appearance>
                              </Shape>
                              <Transform translation='-0.06 0 0'>
                                <Shape>
                                  <Box size='0.06 0.5 0.15'/>
                                  <Appearance>
                                    <Material diffuseColor='0.1 0.2 0.1'/>
                                  </Appearance>
                                </Shape>
                              </Transform>
                              <Transform DEF='FrontCradleBar'>
                                <Transform DEF='ForwardCoil' scale='0.4 0.4 0.4' translation='0.25 0.15 0.05'>
                                  <Shape>
                                    <Extrusion beginCap='false' crossSection='-0.3 0.3 -0.6 0.1 -0.6 -0.1 -0.3 -0.3 0.3 -0.3 0.6 -0.1 0.6 0.1 0.3 0.3 -0.3 0.3' endCap='false' solid='false' spine='0 0 0 0 0.6 0'/>
                                    <Appearance>
                                      <Material USE='grey'/>
                                    </Appearance>
                                  </Shape>
                                </Transform>
                              </Transform>
                            </Transform>
                          </Transform>
                          <Transform DEF='LeftSideWall' rotation='0 1 0 1.57' translation='-0.08 0 -0.25'>
                            <Shape>
                              <Box size='0.0625 1.125 0.25'/>
                              <Appearance>
                                <Material/>
                              </Appearance>
                            </Shape>
                            <Transform translation='0.06 0 0'>
                              <Shape>
                                <Box size='0.06 0.75 0.15'/>
                                <Appearance>
                                  <Material diffuseColor='0.1 0.2 0.1'/>
                                </Appearance>
                              </Shape>
                            </Transform>
                            <Transform DEF='ForwardLeftWall' translation='0 0.975 0'>
                              <Shape>
                                <Box size='0.0625 0.775 0.25'/>
                                <Appearance>
                                  <Material diffuseColor='0.2 0.8 0.2'/>
                                </Appearance>
                              </Shape>
                              <Transform translation='0.06 0 0'>
                                <Shape>
                                  <Box size='0.06 0.5 0.15'/>
                                  <Appearance>
                                    <Material diffuseColor='0.1 0.2 0.1'/>
                                  </Appearance>
                                </Shape>
                              </Transform>
                            </Transform>
                          </Transform>
                          <Transform DEF='Accumulator' translation='-0.325 0.2 0'>
                            <Shape>
                              <Cylinder height='0.75' radius='0.08'/>
                              <Appearance>
                                <Material diffuseColor='0 0.25 1'/>
                              </Appearance>
                            </Shape>
                          </Transform>
                          <Transform DEF='RecoilCylinders' translation='-0.25 0.4 0.25'>
                            <Shape>
                              <Cylinder height='0.36' radius='0.04'/>
                              <Appearance>
                                <Material diffuseColor='1 1 0'/>
                              </Appearance>
                            </Shape>
                            <Transform translation='0 -0.3 0'>
                              <Shape>
                                <Cylinder height='0.3' radius='0.025'/>
                                <Appearance>
                                  <Material USE='grey'/>
                                </Appearance>
                              </Shape>
                              <Transform translation='0 -0.15 0'>
                                <Shape>
                                  <Box size='0.1 0.2 0.1'/>
                                  <Appearance>
                                    <Material USE='grey'/>
                                  </Appearance>
                                </Shape>
                              </Transform>
                            </Transform>
                            <Transform rotation='1 0 0 1.57' translation='0 0.25 0'>
                              <Shape>
                                <Cylinder height='0.05' radius='0.075'/>
                                <Appearance>
                                  <Material diffuseColor='1 1 0'/>
                                </Appearance>
                              </Shape>
                              <Transform>
                                <Shape>
                                  <Box size='0.05 0.1 0.05'/>
                                  <Appearance>
                                    <Material diffuseColor='1 0 1'/>
                                  </Appearance>
                                </Shape>
                              </Transform>
                            </Transform>
                          </Transform>
                          <Transform DEF='Coils'>
                            <Transform DEF='Coil' rotation='1 0 0 1.57' translation='-0.1 -0.25 0'>
                              <Shape>
                                <Cylinder height='0.5' radius='0.075'/>
                                <Appearance>
                                  <Material USE='grey'/>
                                </Appearance>
                              </Shape>
                            </Transform>
                            <Transform translation='0 0.1667 0'>
                              <Transform USE='Coil'/>
                            </Transform>
                            <Transform translation='-0.1 0.66 0'>
                              <Transform USE='Coil'/>
                            </Transform>
                          </Transform>
                          <Transform DEF='LeftRecoilCylinders' translation='-0.25 0.4 -0.25'>
                            <Shape>
                              <Cylinder height='0.36' radius='0.04'/>
                              <Appearance>
                                <Material diffuseColor='1 1 0'/>
                              </Appearance>
                            </Shape>
                            <Transform translation='0 -0.3 0'>
                              <Shape>
                                <Cylinder height='0.3' radius='0.025'/>
                                <Appearance>
                                  <Material USE='grey'/>
                                </Appearance>
                              </Shape>
                              <Transform translation='0 -0.15 0'>
                                <Shape>
                                  <Box size='0.1 0.2 0.1'/>
                                  <Appearance>
                                    <Material USE='grey'/>
                                  </Appearance>
                                </Shape>
                              </Transform>
                            </Transform>
                            <Transform rotation='1 0 0 1.57' translation='0 0.25 0'>
                              <Shape>
                                <Cylinder height='0.05' radius='0.075'/>
                                <Appearance>
                                  <Material diffuseColor='1 1 0'/>
                                </Appearance>
                              </Shape>
                              <Transform>
                                <Shape>
                                  <Box size='0.05 0.1 0.05'/>
                                  <Appearance>
                                    <Material diffuseColor='1 0 1'/>
                                  </Appearance>
                                </Shape>
                              </Transform>
                            </Transform>
                          </Transform>
                          <Transform DEF='Transfer' scale='0.75 1 0.75' translation='0.1 0 0'>
                            <Shape>
                              <Appearance>
                                <Material/>
                              </Appearance>
                              <Extrusion creaseAngle='0.785' crossSection='1.00 0.00 0.92 -0.38 0.71 -0.71 0.38 -0.92 0.00 -1.00 -0.38 -0.92 -0.71 -0.71 -0.92 -0.38 -1.00 -0.00 -0.92 0.38 -0.71 0.71 -0.38 0.92 0.00 1.00 0.38 0.92 0.71 0.71 0.92 0.38 1.00 0.00' scale='0.1 0.35 0.1 0.125 0.0625 0.0625 0.0625 0.0625 0.0425 0.0425 0.0425 0.0425 0.06 0.06 0.06 0.06 0.025 0.025 0.025 0.025 0.0125 0.0125 0.0125 0.0125 0.0125 0.0125 0.0125 0.0125' spine='0 -0.25 0 0 0.1 0 0 0.2 0 0 0.25 0 0 0.45 0 0 0.5 0 0 0.52 0 0 0.575 0 0 0.6 0 0 0.65 0 0 0.675 0 0 0.675 0 0 0.75 0 0 0.825 0'/>
                              <!-- original scale had 3-tuples instead of 2-tuples 0.1 0.35 0.1, 0.1 0.125 0.1, 0.0625 0.0625 0.0625, 0.0625 0.0625 0.0625, 0.0425 0.0425 0.0425, 0.0425 0.0425 0.0425, 0.06 0.06 0.06, 0.06 0.06 0.06, 0.025 0.025 0.025, 0.025 0.025 0.025, 0.0125 0.0125 0.0125, 0.0125 0.0125 0.0125 -->
                            </Shape>
                          </Transform>
                        </Transform>
                        <Transform DEF='Breach' translation='0.75 0 0'>
                          <Shape>
                            <Box size='0.25 0.25 0.25'/>
                            <Appearance>
                              <Material diffuseColor='0 0 1'/>
                            </Appearance>
                          </Shape>
                        </Transform>
                      </Group>
                    </Transform>
                  </fieldValue>
                </ProtoInstance>
              </Transform>
            </Transform>
          </Group>
        </fieldValue>
      </ProtoInstance>
      <Group DEF='TrailerBody'>
        <Transform DEF='TrailerBodyMain' rotation='0 0 1 1.57' scale='0.375 0.375 0.375' translation='-0.11 0 -0.2'>
          <Transform rotation='1 0 0 1.57'>
            <Shape>
              <Extrusion convex='false' crossSection='0 0.2 -0.3 0.2 -1 0.5 -1.2 0.7 -1.5 0.4 -0.8 -0.3 -0.8 -0.6 -2.1 -2.55 -1.9 -2.7 -0.6 -1.3 -0.4 -1.4 -0.1 -1.5 0.1 -1.5 0.4 -1.4 0.6 -1.3 1.9 -2.7 2.1 -2.55 0.8 -0.6 0.8 -0.3 1.5 0.4 1.2 0.7 1 0.5 0.3 0.2 0 0.2' solid='false' spine='0 0 0 0 0.1667 0 0 0.33 0'/>
              <Appearance>
                <Material diffuseColor='0.15 0.25 0.1'/>
              </Appearance>
            </Shape>
          </Transform>
          <Transform DEF='RightSpadeHub' rotation='0 0 -1 0.66' translation='-2 2.6 0.1'>
            <Shape>
              <Cylinder height='0.1667' radius='0.1667'/>
              <Appearance>
                <Material diffuseColor='0 1 0.66'/>
              </Appearance>
            </Shape>
            <Group DEF='RightSpade'>
              <Transform rotation='0 0 -1 1.57' scale='0.5 0.5 0.5' translation='-0.1667 0.25 -0.25'>
                <Transform rotation='1 0 0 1.57'>
                  <Transform>
                    <Shape>
                      <IndexedFaceSet coordIndex='0 1 2 3 4 -1' solid='false'>
                        <Coordinate point='0 1 0 0 0 0 1 0 0 1 1 0 0 1 0'/>
                      </IndexedFaceSet>
                      <Appearance>
                        <Material diffuseColor='0 1 1'/>
                      </Appearance>
                    </Shape>
                  </Transform>
                  <Transform>
                    <Shape>
                      <IndexedFaceSet coordIndex='0 1 2 3 -1' solid='false'>
                        <Coordinate point='0 1 0 0 0.9 0.2 0 0 0 0 1 0'/>
                      </IndexedFaceSet>
                      <Appearance>
                        <Material diffuseColor='0 1 1'/>
                      </Appearance>
                    </Shape>
                  </Transform>
                  <Transform>
                    <Shape>
                      <IndexedFaceSet coordIndex='0 1 2 3 -1' solid='false'>
                        <Coordinate point='1 1 0 1 0.9 0.2 1 0 0 1 1 0'/>
                      </IndexedFaceSet>
                      <Appearance>
                        <Material diffuseColor='0 1 1'/>
                      </Appearance>
                    </Shape>
                  </Transform>
                  <Transform>
                    <Shape>
                      <IndexedFaceSet coordIndex='0 1 2 3 4 -1' solid='false'>
                        <Coordinate point='0 1 0 0 0.9 0.2 1 0.9 0.2 1 1 0 0 1 0'/>
                      </IndexedFaceSet>
                      <Appearance>
                        <Material diffuseColor='0 1 1'/>
                      </Appearance>
                    </Shape>
                  </Transform>
                  <Transform>
                    <Shape>
                      <IndexedFaceSet coordIndex='0 1 2 3 -1' solid='false'>
                        <Coordinate point='0 1 0 -0.3 0.3 0.2 0 0 0 0 1 0'/>
                      </IndexedFaceSet>
                      <Appearance>
                        <Material diffuseColor='0 1 1'/>
                      </Appearance>
                    </Shape>
                  </Transform>
                  <Transform>
                    <Shape>
                      <IndexedFaceSet coordIndex='0 1 2 3 -1' solid='false'>
                        <Coordinate point='1 1 0 1.3 0.3 0.2 1 0 0 1 1 0'/>
                      </IndexedFaceSet>
                      <Appearance>
                        <Material diffuseColor='0 1 1'/>
                      </Appearance>
                    </Shape>
                  </Transform>
                  <Transform>
                    <Shape>
                      <IndexedFaceSet coordIndex='0 1 2 3 -1' solid='false'>
                        <Coordinate point='1 1 0 1 0.9 0.2 1.3 0.3 0.2 1 1 0'/>
                      </IndexedFaceSet>
                      <Appearance>
                        <Material diffuseColor='0 1 1'/>
                      </Appearance>
                    </Shape>
                  </Transform>
                  <Transform>
                    <Shape>
                      <IndexedFaceSet coordIndex='0 1 2 3 -1' solid='false'>
                        <Coordinate point='0 1 0 0 0.9 0.2 -0.3 0.3 0.2 0 1 0'/>
                      </IndexedFaceSet>
                      <Appearance>
                        <Material diffuseColor='0 1 1'/>
                      </Appearance>
                    </Shape>
                  </Transform>
                </Transform>
              </Transform>
            </Group>
          </Transform>
          <Transform DEF='LeftSpadeHub' rotation='0 0 1 0.66' translation='2 2.6 0.1'>
            <Shape>
              <Cylinder height='0.1667' radius='0.1667'/>
              <Appearance>
                <Material diffuseColor='0 1 0.66'/>
              </Appearance>
            </Shape>
            <Group DEF='LeftSpade'>
              <Transform rotation='0 0 1 1.57' scale='0.5 0.5 0.5' translation='0.1667 -0.25 -0.25'>
                <Transform rotation='1 0 0 1.57'>
                  <Transform>
                    <Shape>
                      <IndexedFaceSet coordIndex='0 1 2 3 4 -1' solid='false'>
                        <Coordinate point='0 1 0 0 0 0 1 0 0 1 1 0 0 1 0'/>
                      </IndexedFaceSet>
                      <Appearance>
                        <Material diffuseColor='0 1 1'/>
                      </Appearance>
                    </Shape>
                  </Transform>
                  <Transform>
                    <Shape>
                      <IndexedFaceSet coordIndex='0 1 2 3 -1' solid='false'>
                        <Coordinate point='0 1 0 0 0.9 0.2 0 0 0 0 1 0'/>
                      </IndexedFaceSet>
                      <Appearance>
                        <Material diffuseColor='0 1 1'/>
                      </Appearance>
                    </Shape>
                  </Transform>
                  <Transform>
                    <Shape>
                      <IndexedFaceSet coordIndex='0 1 2 3 -1' solid='false'>
                        <Coordinate point='1 1 0 1 0.9 0.2 1 0 0 1 1 0'/>
                      </IndexedFaceSet>
                      <Appearance>
                        <Material diffuseColor='0 1 1'/>
                      </Appearance>
                    </Shape>
                  </Transform>
                  <Transform>
                    <Shape>
                      <IndexedFaceSet coordIndex='0 1 2 3 4 -1' solid='false'>
                        <Coordinate point='0 1 0 0 0.9 0.2 1 0.9 0.2 1 1 0 0 1 0'/>
                      </IndexedFaceSet>
                      <Appearance>
                        <Material diffuseColor='0 1 1'/>
                      </Appearance>
                    </Shape>
                  </Transform>
                  <Transform>
                    <Shape>
                      <IndexedFaceSet coordIndex='0 1 2 3 -1' solid='false'>
                        <Coordinate point='0 1 0 -0.3 0.3 0.2 0 0 0 0 1 0'/>
                      </IndexedFaceSet>
                      <Appearance>
                        <Material diffuseColor='0 1 1'/>
                      </Appearance>
                    </Shape>
                  </Transform>
                  <Transform>
                    <Shape>
                      <IndexedFaceSet coordIndex='0 1 2 3 -1' solid='false'>
                        <Coordinate point='1 1 0 1.3 0.3 0.2 1 0 0 1 1 0'/>
                      </IndexedFaceSet>
                      <Appearance>
                        <Material diffuseColor='0 1 1'/>
                      </Appearance>
                    </Shape>
                  </Transform>
                  <Transform>
                    <Shape>
                      <IndexedFaceSet coordIndex='0 1 2 3 -1' solid='false'>
                        <Coordinate point='1 1 0 1 0.9 0.2 1.3 0.3 0.2 1 1 0'/>
                      </IndexedFaceSet>
                      <Appearance>
                        <Material diffuseColor='0 1 1'/>
                      </Appearance>
                    </Shape>
                  </Transform>
                  <Transform>
                    <Shape>
                      <IndexedFaceSet coordIndex='0 1 2 3 -1' solid='false'>
                        <Coordinate point='0 1 0 0 0.9 0.2 -0.3 0.3 0.2 0 1 0'/>
                      </IndexedFaceSet>
                      <Appearance>
                        <Material diffuseColor='0 1 1'/>
                      </Appearance>
                    </Shape>
                  </Transform>
                </Transform>
              </Transform>
            </Group>
          </Transform>
        </Transform>
        <Transform DEF='LeftFrontStabilizer' rotation='0 1 0 0.25' translation='0.25 0.66 -0.175'>
          <Transform rotation='0 0 1 0.79'>
            <Shape>
              <Appearance>
                <Material diffuseColor='0 0.15 0.8'/>
              </Appearance>
              <Box size='0.5 0.125 0.1'/>
            </Shape>
            <Transform DEF='LeftWheel' rotation='0 0 -1 0.79'>
              <Transform scale='0.05 0.05 0.05' translation='0.2 -0.1 0.15'>
                <Shape>
                  <Extrusion DEF='Tire' beginCap='false' convex='false' creaseAngle='1.57' crossSection='1.00 0.00 0.92 -0.38 0.71 -0.71 0.38 -0.92 0.00 -1.00 -0.38 -0.92 -0.71 -0.71 -0.92 -0.38 -1.00 -0.00 -0.92 0.38 -0.71 0.71 -0.38 0.92 0.00 1.00 0.38 0.92 0.71 0.71 0.92 0.38 1.00 0.00' endCap='false' spine='2.00 0.0 0.00 1.85 0.0 0.77 1.41 0.0 1.41 0.77 0.0 1.85 0.00 0.0 2.00 -0.77 0.0 1.85 -1.41 0.0 1.41 -1.85 0.0 0.77 -2.00 0.0 0.00 -1.85 0.0 -0.77 -1.41 0.0 -1.41 -0.77 0.0 -1.85 0.00 0.0 -2.00 0.77 0.0 -1.85 1.41 0.0 -1.41 1.85 0.0 -0.77 2.00 0.0 0.00'/>
                  <Appearance>
                    <Material diffuseColor='0.1 0.1 0.1'/>
                  </Appearance>
                </Shape>
                <Transform>
                  <Shape>
                    <Cylinder height='1' radius='1.5'/>
                    <Appearance>
                      <Material USE='grey'/>
                    </Appearance>
                  </Shape>
                </Transform>
                <Transform DEF='WheelHub' translation='0 0.66 0'>
                  <Shape>
                    <Cylinder height='3' radius='0.5'/>
                    <Appearance>
                      <Material diffuseColor='0.1 0.1 0.1'/>
                    </Appearance>
                  </Shape>
                  <Transform DEF='LeftStrut' rotation='0 1 0 0.79'>
                    <Transform translation='0 0.9 -1.75'>
                      <Shape>
                        <Box size='1 1 5'/>
                        <Appearance>
                          <Material diffuseColor='0.2 0.2 0.2'/>
                        </Appearance>
                      </Shape>
                    </Transform>
                  </Transform>
                </Transform>
              </Transform>
            </Transform>
          </Transform>
        </Transform>
        <Transform DEF='RightFrontStabilizer' rotation='0 1 0 0.25' translation='0.25 -0.66 -0.175'>
          <Transform rotation='0 0 -1 0.79'>
            <Shape>
              <Appearance>
                <Material diffuseColor='0 0.15 0.8'/>
              </Appearance>
              <Box size='0.5 0.125 0.1'/>
            </Shape>
            <Transform DEF='RightWheel' rotation='0 0 1 0.79'>
              <Transform scale='0.05 0.05 0.05' translation='0.2 0.1 0.15'>
                <Shape>
                  <Extrusion USE='Tire'/>
                  <Appearance>
                    <Material diffuseColor='0.1 0.1 0.1'/>
                  </Appearance>
                </Shape>
                <Transform>
                  <Shape>
                    <Cylinder height='1' radius='1.5'/>
                    <Appearance>
                      <Material USE='grey'/>
                    </Appearance>
                  </Shape>
                </Transform>
                <Transform DEF='RightWheelHub' translation='0 -0.33 0'>
                  <Shape>
                    <Cylinder height='3' radius='0.5'/>
                    <Appearance>
                      <Material diffuseColor='0.1 0.1 0.1'/>
                    </Appearance>
                  </Shape>
                  <Transform DEF='RightStrut' rotation='0 -1 0 2.09'>
                    <Transform translation='0 -1.25 1.75'>
                      <Shape>
                        <Box size='1 1 5'/>
                        <Appearance>
                          <Material diffuseColor='0.2 0.2 0.2'/>
                        </Appearance>
                      </Shape>
                    </Transform>
                  </Transform>
                </Transform>
              </Transform>
            </Transform>
          </Transform>
        </Transform>
      </Group>
    </Transform>
    <Group DEF='ProjectileScene'>
      <Transform translation='200 -0.35 0.0'>
        <Shape DEF='Ground'>
          <Box size='410.0 0.2 150.0'/>
          <Appearance>
            <Material/>
            <ImageTexture url='"dunes.jpg" "https://www.web3d.org/x3d/content/examples/Basic/DistributedInteractiveSimulation/dunes.jpg"'/>
          </Appearance>
        </Shape>
      </Transform>
      <Transform translation='200 100 -75'>
        <Shape DEF='BackDrop'>
          <Box size='410.0 200.0 .2'/>
          <Appearance>
            <ImageTexture url='"horizon.jpg" "https://www.web3d.org/x3d/content/examples/Basic/DistributedInteractiveSimulation/horizon.jpg"'/>
          </Appearance>
        </Shape>
      </Transform>
      <Transform translation='200 -0.25 0.0'>
        <Shape DEF='CenterLine'>
          <Box size='410.0 0.1 2'/>
          <Appearance>
            <Material diffuseColor='0.6 0.4 1' emissiveColor='0.6 0.4 1'/>
          </Appearance>
        </Shape>
      </Transform>
      <EspduTransform DEF='projectileTransform' address='224.0.0.3' marking='Projectile' port='64200' siteID='3' writeInterval='0'>
        <Transform DEF='projectile2' rotation='0 0 1 -1.57' scale='1.5 3 1.5'>
          <Shape>
            <Cylinder radius='.5'/>
            <Appearance>
              <Material diffuseColor='0.887 0.027 0.910' specularColor='0.887 0.027 0.910'/>
            </Appearance>
          </Shape>
          <Transform translation='0 1.5 0'>
            <Shape>
              <Cone bottomRadius='0.5' height='1'/>
              <Appearance>
                <Material diffuseColor='0.35 0.35 0.35' specularColor='0.35 0.35 0.35'/>
              </Appearance>
            </Shape>
          </Transform>
        </Transform>
        <Viewpoint description='Projectile Rear' orientation='0 1 0 -1.57' position='-25 0 0'/>
        <Viewpoint description='Projectile Side' position='0 0 50'/>
        <Viewpoint description='Projectile Front' orientation='0 1 0 1.57' position='25 0 0'/>
      </EspduTransform>
      <Transform DEF='projectileViewTransform'>
        <Viewpoint description='Projectile Side-II' position='0 0 50'/>
        <Viewpoint description='Projectile Front-II' orientation='0 1 0 1.57' position='25 0 0'/>
      </Transform>
    </Group>
    <ROUTE fromField='translation' fromNode='projectileTransform' toField='set_translation' toNode='projectileViewTransform'/>
  </Scene>
</X3D>