package Savage.Environment.SeaState;

import org.web3d.x3d.jsail.Core.*;
import org.web3d.x3d.jsail.EnvironmentalEffects.*;
import org.web3d.x3d.jsail.fields.*;
import org.web3d.x3d.jsail.Geometry3D.*;
import org.web3d.x3d.jsail.Grouping.*;
import org.web3d.x3d.jsail.Interpolation.*;
import org.web3d.x3d.jsail.Navigation.*;
import org.web3d.x3d.jsail.Networking.*;
import org.web3d.x3d.jsail.PointingDeviceSensor.*;
import org.web3d.x3d.jsail.Scripting.*;
import org.web3d.x3d.jsail.Shape.*;
import org.web3d.x3d.jsail.Text.*;
import org.web3d.x3d.jsail.Texturing.*;
import org.web3d.x3d.jsail.Time.*;

// Javadoc metadata annotations follow, see below for X3DJSAIL Java source code.
/**
 * <p> Sea state rendering of ocean wave motion. </p>
 <p> Related links: Catalog page <a href="../../../../Environment/SeaState/MoveSeaByExtrusion14Index.html" target="_blank">MoveSeaByExtrusion14</a>,  source <a href="../../../../Environment/SeaState/MoveSeaByExtrusion14.java">MoveSeaByExtrusion14.java</a>, <a href="https://www.web3d.org/x3d/content/examples/X3dResources.html" target="_blank">X3D Resources</a>, <a href="https://www.web3d.org/x3d/content/examples/X3dSceneAuthoringHints.html" target="_blank">X3D Scene Authoring Hints</a>, and <a href="https://www.web3d.org/x3d/content/X3dTooltips.html" target="_blank">X3D Tooltips</a>. </p>
	<table style="color:black; border:0px solid; border-spacing:10px 0px;">
        <caption>Scene Meta Information</caption>
		<tr style="background-color:silver; border-color:silver;">
			<td style="text-align:center; padding:10px 0px;"><i>meta tags</i></td>
			<td style="text-align:left;   padding:10px 0px;">&nbsp; Document Metadata </td>
		</tr>

		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> title </i> </td>
			<td> <a href="../../../../Environment/SeaState/MoveSeaByExtrusion14.x3d">MoveSeaByExtrusion14.x3d</a> </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> creator </i> </td>
			<td> Marcus V. da S. Simoes </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> created </i> </td>
			<td> 11 January 2001 </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> modified </i> </td>
			<td> 20 October 2019 </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> description </i> </td>
			<td> Sea state rendering of ocean wave motion. </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> identifier </i> </td>
			<td> <a href="https://www.web3d.org/x3d/content/examples/Savage/Environment/SeaState/MoveSeaByExtrusion14.x3d" target="_blank">https://www.web3d.org/x3d/content/examples/Savage/Environment/SeaState/MoveSeaByExtrusion14.x3d</a> </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> generator </i> </td>
			<td> X3D-Edit 3.2, <a href="https://www.web3d.org/x3d/tools/X3D-Edit" target="_blank">https://www.web3d.org/x3d/tools/X3D-Edit</a> </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> license </i> </td>
			<td> <a href="../../../../Environment/SeaState/../../license.html">../../license.html</a> </td>
		</tr>
		<tr style="background-color:silver; border-color:silver;">
			<td style="text-align:center;" colspan="2">  &nbsp; </td>
		</tr>
	</table>

	<p>
		This program uses the
		<a href="https://www.web3d.org/specifications/java/X3DJSAIL.html" target="_blank">X3D Java Scene Access Interface Library (X3DJSAIL)</a>.
		It has been produced using the 
		<a href="https://www.web3d.org/x3d/stylesheets/X3dToJava.xslt" target="_blank">X3dToJava.xslt</a>
		stylesheet
	       (<a href="https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/stylesheets/X3dToJava.xslt" target="_blank">version control</a>)
                which is used to create Java source code from an original <code>.x3d</code> model.
	</p>

	* @author Marcus V. da S. Simoes
 */

public class MoveSeaByExtrusion14
{
	/** Default constructor to create this object. */
	public MoveSeaByExtrusion14 ()
	{
	  initialize();
	}

	/** Create and initialize the X3D model for this object. */
	public final void initialize()
	{
            try { // catch-all
  x3dModel = new X3D().setProfile(X3D.PROFILE_IMMERSIVE).setVersion(X3D.VERSION_3_3)
  .setHead(new head()
    .addMeta(new meta().setName(meta.NAME_TITLE      ).setContent("MoveSeaByExtrusion14.x3d"))
    .addMeta(new meta().setName(meta.NAME_CREATOR    ).setContent("Marcus V. da S. Simoes"))
    .addMeta(new meta().setName(meta.NAME_CREATED    ).setContent("11 January 2001"))
    .addMeta(new meta().setName(meta.NAME_MODIFIED   ).setContent("20 October 2019"))
    .addMeta(new meta().setName(meta.NAME_DESCRIPTION).setContent("Sea state rendering of ocean wave motion."))
    .addMeta(new meta().setName(meta.NAME_IDENTIFIER ).setContent("https://www.web3d.org/x3d/content/examples/Savage/Environment/SeaState/MoveSeaByExtrusion14.x3d"))
    .addMeta(new meta().setName(meta.NAME_GENERATOR  ).setContent("X3D-Edit 3.2, https://www.web3d.org/x3d/tools/X3D-Edit"))
    .addMeta(new meta().setName(meta.NAME_LICENSE    ).setContent("../../license.html")))
  .setScene(new Scene()
    .addComments(" Axis ")
    .addChild(new WorldInfo().setTitle("MoveSeaByExtrusion14.x3d"))
    .addChild(new NavigationInfo().setSpeed(100))
    .addChild(new Background().setGroundAngle(new double[] {1.309,1.570796}).setGroundColor(new MFColor(new double[] {0.0,0.2,0.7,0.0,0.5,1.0,0.6,0.6,0.6})).setSkyAngle(new double[] {1.309,1.571}).setSkyColor(new MFColor(new double[] {0.0,0.2,0.7,0.0,0.5,1.0,0.6,0.6,0.6})))
    .addComments(" ================================================= ")
    .addComments(" SeaState&DirectionControlPanel ")
    .addComments(" ================================================= ")
    .addChild(new Transform("SeaBoxSeaandRockIsland")
      .addChild(new Shape()
        .setGeometry(new Box().setSize(800.0,400.0,1000.0))
        .setAppearance(new Appearance()
          .setMaterial(new Material().setTransparency(1))))
      .addChild(new Transform("TheSeaState").setTranslation(0.0,0.0,-500.0)
        .addChild(new Transform().setTranslation(0.0,-5000.0,0.0)
          .addChild(new Shape("BasicWave")
            .setAppearance(new Appearance("SeaColor")
              .setTexture(new ImageTexture().setUrl(new String[] {"pool.jpg","https://www.web3d.org/x3d/content/examples/Savage/Environment/SeaState/pool.jpg"}))
              .setMaterial(new Material().setDiffuseColor(0.0,0.0,0.0).setTransparency(0.3)))
            .setGeometry(new Extrusion("BasicExtrusion").setBeginCap(false).setConvex(false).setCreaseAngle(0.01).setCrossSection(new MFVec2f(new double[] {0.0,0.0,0.0,10.0,0.0,0.0})).setEndCap(false).setSolid(false).setSpine(getBasicExtrusion_7_20_spine()))))
        .addChild(new Switch("SeaStateNumber").setWhichChoice(0)
          .addChild(new Group("SeaState_1")
            .addChild(new Transform("SST1Escale").setScale(100.0,.05,100.0)
              .addChild(new Shape().setUSE("BasicWave"))))
          .addChild(new Group("SeaState_2")
            .addChild(new Transform("SST2Scale").setScale(100.0,1.0,100.0)
              .addChild(new Shape().setUSE("BasicWave"))))
          .addChild(new Group("SeaState_3")
            .addChild(new Transform("SST3Scale").setScale(100.0,2.0,100.0)
              .addChild(new Shape().setUSE("BasicWave"))))
          .addChild(new Group("SeaState_4")
            .addChild(new Transform("SST4Scale").setScale(100.0,4.0,100.0)
              .addChild(new Shape().setUSE("BasicWave"))))
          .addChild(new Group("SeaState_5")
            .addChild(new Transform("SST5Scale").setScale(100.0,8.0,100.0)
              .addChild(new Shape().setUSE("BasicWave"))))
          .addChild(new Group("SeaState_6")
            .addChild(new Transform("SSTScale6").setScale(100.0,12.0,100.0)
              .addChild(new Shape().setUSE("BasicWave"))))
          .addChild(new Group("SeaState_7")
            .addChild(new Transform("SSTScale7").setScale(100.0,16.0,100.0)
              .addChild(new Shape().setUSE("BasicWave"))))
          .addChild(new Group("SeaState_8")
            .addChild(new Transform("SSTScale8").setScale(100.0,21.0,100.0)
              .addChild(new Shape().setUSE("BasicWave"))))))
      .addChild(new Group("TheBeach")
        .addChild(new Transform().setScale(25.0,120.0,25.0).setTranslation(-400.0,-2.0,-400.0)
          .addChild(new Shape()
            .setGeometry(new ElevationGrid("BeachElevation").setXDimension(10).setZDimension(10).setHeight(new double[] {0.0000,0.0025,0.0049,0.0070,0.0088,0.0102,0.0110,0.0112,0.0108,0.0096,0.0078,0.0052,0.0019,-0.0020,-0.0066,-0.0116,-0.0171,-0.0228,-0.0287,-0.0347,-0.0405,-0.0461,-0.0512,-0.0558,-0.0596,-0.0626,-0.0645,-0.0654,-0.0651,-0.0636,-0.0607,-0.0565,-0.0510,-0.0443,-0.0363,-0.0271,-0.0170,-0.0060,0.0057,0.0179,0.0305,0.0431,0.0557,0.0678,0.0794,0.0901,0.0997,0.1081,0.1150,0.1202,0.1236,0.1250,0.1244,0.1217,0.1268,0.1299,0.128,0.0897,0.0768,0.0622,0.0460,0.0286,0.101,-0.0091,-0.0287,-0.0485,-0.0680,-0.0870,-0.1051,-0.1220,-0.1373,-0.1508,-0.1622,-0.1713,-0.1778,-0.1815,-0.1824,-0.1804,-0.1754,-0.1673,-0.1564,-0.1427,-0.1264,-0.1076,-0.0867,-0.0639,-0.0396,-0.0142,0.0,0.0,0.0,0.0,0.10,0.1,0.14,0.11,0.11,0.0,0.04,0.0}))
            .setAppearance(new Appearance()
              .setTexture(new ImageTexture().setUrl(new String[] {"rocks_1.jpg","https://www.web3d.org/x3d/content/examples/Savage/Environment/SeaState/clouds2.jpg"})))))
        .addChild(new Transform("BeachView").setRotation(0.0,1.0,0.0,1.2).setTranslation(250.0,10.0,100.0)
          .addChild(new Viewpoint().setDescription("ROCK VIEW")))))
    .addComments(" ================================================= ")
    .addComments(" SeaLevelChoiceGroup ")
    .addComments(" ================================================= ")
    .addChild(new Group("SeaStateAndDirectionControlPanel")
      .addChild(new Transform().setTranslation(0.0,100.0,4000.0)
        .addChild(new Billboard()
          .addChild(new Group("SeaStateChoice")
            .addChild(new Transform("Option1").setTranslation(0.0,-2.0,0.0)
              .addChild(new Transform("Box1").setTranslation(0.0,.1,0.0)
                .addChild(new Shape("BoxSensor")
                  .setGeometry(new Box().setSize(1.0,.4,.1))
                  .setAppearance(new Appearance()
                    .setMaterial(new Material().setDiffuseColor(0.0,0.0,1.0).setSpecularColor(0.0,0.0,1.0).setTransparency(.9))))
                .addChild(new TouchSensor("TouchSensorSeaState1").setDescription("touch to activate"))
                .addChild(new Transform("Text1").setScale(.25,.25,.25).setTranslation(0.0,0.0,.1)
                  .addChild(new Shape()
                    .setGeometry(new Text().setString(new String[] {"SST 1"})
                      .setFontStyle(new FontStyle().setJustify(FontStyle.JUSTIFY_MIDDLE_MIDDLE)))
                    .setAppearance(new Appearance()
                      .setMaterial(new Material().setEmissiveColor(.8,.8,.8)))))))
            .addChild(new Transform("Option2").setTranslation(0.0,-1.5,0.0)
              .addChild(new Transform("Box2").setTranslation(0.0,.1,0.0)
                .addChild(new Shape()
                  .setGeometry(new Box().setSize(1.0,.4,.1))
                  .setAppearance(new Appearance()
                    .setMaterial(new Material().setDiffuseColor(0.0,0.0,.8).setTransparency(.7))))
                .addChild(new TouchSensor("TouchSensorSeaState2").setDescription("touch to activate"))
                .addChild(new Transform("Text2").setScale(.25,.25,.25).setTranslation(0.0,0.0,.1)
                  .addChild(new Shape()
                    .setGeometry(new Text().setString(new String[] {"SST 2"})
                      .setFontStyle(new FontStyle().setJustify(FontStyle.JUSTIFY_MIDDLE_MIDDLE)))
                    .setAppearance(new Appearance()
                      .setMaterial(new Material().setEmissiveColor(.8,.8,.8)))))))
            .addChild(new Transform("Option3").setTranslation(0.0,-1.0,0.0)
              .addChild(new Transform("Box3").setTranslation(0.0,.1,0.0)
                .addChild(new Shape()
                  .setGeometry(new Box().setSize(1.0,.4,.1))
                  .setAppearance(new Appearance()
                    .setMaterial(new Material().setDiffuseColor(0.0,0.0,.8).setTransparency(.7))))
                .addChild(new TouchSensor("TouchSensorSeaState3").setDescription("touch to activate"))
                .addChild(new Transform("Text3").setScale(.25,.25,.25).setTranslation(0.0,0.0,.1)
                  .addChild(new Shape()
                    .setGeometry(new Text().setString(new String[] {"SST 3"})
                      .setFontStyle(new FontStyle().setJustify(FontStyle.JUSTIFY_MIDDLE_MIDDLE)))
                    .setAppearance(new Appearance()
                      .setMaterial(new Material().setEmissiveColor(.8,.8,.8)))))))
            .addChild(new Transform("Option4").setTranslation(0.0,-0.5,0.0)
              .addChild(new Transform("Box4").setTranslation(0.0,.1,0.0)
                .addChild(new Shape()
                  .setGeometry(new Box().setSize(1.0,.4,.1))
                  .setAppearance(new Appearance()
                    .setMaterial(new Material().setDiffuseColor(0.0,0.8,0.0).setTransparency(0.8))))
                .addChild(new TouchSensor("TouchSensorSeaState4").setDescription("touch to activate"))
                .addChild(new Transform("Text4").setScale(.25,.25,.25).setTranslation(0.0,0.0,.1)
                  .addChild(new Shape()
                    .setGeometry(new Text().setString(new String[] {"SST 4"})
                      .setFontStyle(new FontStyle().setJustify(FontStyle.JUSTIFY_MIDDLE_MIDDLE)))
                    .setAppearance(new Appearance()
                      .setMaterial(new Material().setEmissiveColor(.8,.8,.8)))))))
            .addChild(new Transform("Option5")
              .addChild(new Transform("Box5").setTranslation(0.0,.1,0.0)
                .addChild(new Shape()
                  .setGeometry(new Box().setSize(1.0,.4,.1))
                  .setAppearance(new Appearance()
                    .setMaterial(new Material().setDiffuseColor(0.0,.5,0.0).setTransparency(.4))))
                .addChild(new Transform("Text5").setScale(.25,.25,.25).setTranslation(0.0,0.0,.1)
                  .addChild(new Shape()
                    .setGeometry(new Text().setString(new String[] {"SST 5"})
                      .setFontStyle(new FontStyle().setJustify(FontStyle.JUSTIFY_MIDDLE_MIDDLE)))
                    .setAppearance(new Appearance()
                      .setMaterial(new Material().setEmissiveColor(.8,.8,.8)))))
                .addChild(new TouchSensor("TouchSensorSeaState5").setDescription("touch to activate"))))
            .addChild(new Transform("Option6").setTranslation(0.0,.5,0.0)
              .addChild(new Transform("Box6").setTranslation(0.0,.1,0.0)
                .addChild(new Transform("Text6").setScale(.25,.25,.25).setTranslation(0.0,0.0,.1)
                  .addChild(new Shape()
                    .setGeometry(new Text().setString(new String[] {"SST 6"})
                      .setFontStyle(new FontStyle().setJustify(FontStyle.JUSTIFY_MIDDLE_MIDDLE)))
                    .setAppearance(new Appearance()
                      .setMaterial(new Material().setEmissiveColor(.8,.8,.8)))))
                .addChild(new Shape()
                  .setGeometry(new Box().setSize(1.0,.4,.1))
                  .setAppearance(new Appearance()
                    .setMaterial(new Material().setDiffuseColor(.2,0.0,0.0).setTransparency(0.8))))
                .addChild(new TouchSensor("TouchSensorSeaState6").setDescription("touch to activate"))))
            .addChild(new Transform("Option7").setTranslation(0.0,1.0,0.0)
              .addChild(new Transform("Box7").setTranslation(0.0,.1,0.0)
                .addChild(new Transform("Text7").setScale(.25,.25,.25).setTranslation(0.0,0.0,.1)
                  .addChild(new Shape()
                    .setGeometry(new Text().setString(new String[] {"SST 7"})
                      .setFontStyle(new FontStyle().setJustify(FontStyle.JUSTIFY_MIDDLE_MIDDLE)))
                    .setAppearance(new Appearance()
                      .setMaterial(new Material().setEmissiveColor(.8,.8,.8)))))
                .addChild(new Shape()
                  .setGeometry(new Box().setSize(1.0,.4,.1))
                  .setAppearance(new Appearance()
                    .setMaterial(new Material().setDiffuseColor(.5,0.0,0.0).setTransparency(0.7))))
                .addChild(new TouchSensor("TouchSensorSeaState7").setDescription("touch to activate"))))
            .addChild(new Transform("Option8").setTranslation(0.0,1.5,0.0)
              .addChild(new Transform("Box8").setTranslation(0.0,.1,0.0)
                .addChild(new Transform("Text8").setScale(.25,.25,.25).setTranslation(0.0,0.0,.1)
                  .addChild(new Shape()
                    .setGeometry(new Text().setString(new String[] {"SST 8"})
                      .setFontStyle(new FontStyle().setJustify(FontStyle.JUSTIFY_MIDDLE_MIDDLE)))
                    .setAppearance(new Appearance()
                      .setMaterial(new Material().setEmissiveColor(.8,.8,.8)))))
                .addChild(new Shape()
                  .setGeometry(new Box().setSize(1.0,.4,.1))
                  .setAppearance(new Appearance()
                    .setMaterial(new Material().setDiffuseColor(1.0,0.0,0.0).setTransparency(0.5))))
                .addChild(new TouchSensor("TouchSensorSeaState8").setDescription("touch to activate"))))
            .addChild(new Transform().setTranslation(0.0,0.0,-3.0)
              .addChild(new Shape()
                .setGeometry(new Box().setSize(2.0,6.5,0.2))
                .setAppearance(new Appearance()
                  .setMaterial(new Material().setDiffuseColor(.3,.3,.3)))))))
        .addChild(new Viewpoint().setDescription("SEA PANEL").setPosition(-2.0,0.0,6.0))))
    .addComments(" ================================================= ")
    .addComments(" TaskForce ")
    .addComments(" ================================================= ")
    .addChild(new Group("TaskForce")
      .addComments(" Cruiser ")
      .addChild(new Transform("ShipVelocity").setRotation(0.0,1.0,0.0,2.357)
        .addChild(new Transform("ShipBuoyance")
          .addChild(new Transform("ShipPitch")
            .addChild(new Transform("ShipRoll")
              .addChild(new Inline().setUrl(new String[] {"../../ShipsMilitary/CruiserUnitedStates/Cruiser.x3d","https://www.web3d.org/x3d/content/examples/Savage/ShipsMilitary/CruiserUnitedStates/Cruiser.x3d","../../ShipsMilitary/CruiserUnitedStates/Cruiser.wrl","https://www.web3d.org/x3d/content/examples/Savage/ShipsMilitary/CruiserUnitedStates/Cruiser.wrl"}))
              .addChild(new Transform().setTranslation(38.0,18.5,-9.5)
                .addChild(new Viewpoint("ShipBridge").setDescription("BRIDGE VIEW").setFieldOfView(1.51).setOrientation(0.0,1.0,0.0,-1.57)))))
          .addChild(new Viewpoint("TopView").setDescription("AERIAL VIEW").setOrientation(1.0,0.0,0.0,-1.571).setPosition(0.0,500.0,0.0))))
      .addComments(" SubmarineSimulation@5mDepth ")
      .addChild(new Transform("SubBuoyance").setRotation(0.0,1.0,0.0,0.785).setScale(.1,.1,.1).setTranslation(300.0,-10.0,-300.0)
        .addChild(new Transform("SubPitch")
          .addChild(new Transform("SubRoll")
            .addChild(new Transform()
              .addChild(new Inline().setUrl(new String[] {"../../Submarines/SsnLosAngelesUnitedStates/688.x3d","https://www.web3d.org/x3d/content/examples/Savage/Submarines/SsnLosAngelesUnitedStates/688.x3d","../../Submarines/SsnLosAngelesUnitedStates/688.wrl","https://www.web3d.org/x3d/content/examples/Savage/Submarines/SsnLosAngelesUnitedStates/688.wrl"}))
              .addChild(new Viewpoint().setDescription("PERISCOPE VIEW").setFieldOfView(0.4).setOrientation(0.0,1.0,0.0,1.57).setPosition(0.0,120.0,0.0)))))))
    .addComments(" ================================================= ")
    .addComments(" AnimationClock ")
    .addComments(" ================================================= ")
    .addChild(new Group("TimeSensors")
      .addChild(new TimeSensor("ShipClock").setCycleInterval(80).setLoop(true))
      .addChild(new TimeSensor("BuoyanceClock").setCycleInterval(80).setLoop(true))
      .addChild(new TimeSensor("PitchClock").setCycleInterval(25).setLoop(true))
      .addChild(new TimeSensor("RollClock").setCycleInterval(40).setLoop(true))
      .addChild(new TimeSensor("Clock").setCycleInterval(45).setLoop(true)))
    .addComments(" ================================================= ")
    .addComments(" Interpolators ")
    .addComments(" ================================================= ")
    .addComments(" MovingTheShip ")
    .addChild(new Group("Orientation")
      .addChild(new OrientationInterpolator("Roll").setKey(new double[] {0.0,0.5,1.0}).setKeyValue(new MFRotation(new double[] {1.0,0.0,0.0,-0.08,1.0,0.0,0.0,0.08,1.0,0.0,0.0,-0.08})))
      .addChild(new OrientationInterpolator("Pitch").setKey(new double[] {0.0,0.5,1.0}).setKeyValue(new MFRotation(new double[] {0.0,0.0,1.0,-0.03,0.0,0.0,1.0,0.03,0.0,0.0,1.0,-0.03})))
      .addChild(new PositionInterpolator("ShipBuoyanceHeight").setKey(new double[] {0.0,0.0100,0.0200,0.0300,0.0400,0.0500,0.0600,0.0700,0.0800,0.0900,0.1000,0.1100,0.1200,0.1300,0.1400,0.1500,0.1600,0.1700,0.1800,0.1900,0.2000,0.2100,0.2200,0.2300,0.2400,0.2500,0.2600,0.2700,0.2800,0.2900,0.3000,0.3100,0.3200,0.3300,0.3400,0.3500,0.3600,0.3700,0.3800,0.3900,0.4000}).setKeyValue(new MFVec3f(new double[] {400.0,1.1345,400.0000,390.0,0.8160,390.0000,380.0,0.1025,380.0000,370.0,-0.7565,370.0000,360.0,-1.4155,360.0000,350.0,-1.5765,350.0000,340.0,-1.1230,340.0000,330.0,-0.1865,330.0000,320.0,0.8910,320.0000,310.0,1.6865,310.0000,300.0,1.8670,300.0000,290.0,1.3340,290.0000,280.0,0.2705,280.0000,270.0,-0.9230,270.0000,260.0,-1.7840,260.0000,250.0,-1.9755,250.0000,240.0,-1.4200,240.0000,230.0,-0.3350,230.0000,220.0,0.8590,220.0000,210.0,1.7040,210.0000,200.0,1.8880,200.0000,190.0,1.3640,190.0000,180.0,0.3615,180.0000,170.0,-0.7170,170.0000,160.0,-1.4600,160.0000,150.0,-1.6120,150.0000,140.0,-1.1630,140.0000,130.0,-0.3360,130.0000,120.0,0.5205,120.0000,110.0,1.0815,110.0000,100.0,1.1740,100.0000,90.0,0.8305,90.0000,80.0,0.2515,80.0000,70.0,-0.2990,70.0000,60.0,-0.6120,60.0000,50.0,-0.6185,50.0000,40.0,-0.3955,40.0000,30.0,-0.1090,30.0000,20.0,0.0805,20.0000,10.0,0.1020,10.0000,0.0,0.0,0.0})))
      .addChild(new PositionInterpolator("SubBuoyanceHeigth").setKey(new double[] {0.0,0.0100,0.0200,0.0300,0.0400,0.0500,0.0600,0.0700,0.0800,0.0900,0.1000,0.1100,0.1200,0.1300,0.1400,0.1500,0.1600,0.1700,0.1800,0.1900,0.2000,0.2100,0.2200,0.2300,0.2400,0.2500,0.2600,0.2700,0.2800,0.2900,0.3000,0.3100,0.3200,0.3300,0.3400,0.3500,0.3600,0.3700,0.3800,0.3900,0.4000}).setKeyValue(new MFVec3f(new double[] {300.0,-0.0060,-300.0000,300.0,0.0710,-300.0000,300.0,0.0030,-300.0000,300.0,-0.2115,-300.0000,300.0,-0.4640,-300.0000,300.0,-0.5885,-300.0000,300.0,-0.4515,-300.0000,300.0,-0.0370,-300.0000,300.0,0.5240,-300.0000,300.0,0.9950,-300.0000,300.0,1.1345,-300.0000,300.0,0.8160,-300.0000,300.0,0.1025,-300.0000,300.0,-0.7565,-300.0000,300.0,-1.4155,-300.0000,300.0,-1.5765,-300.0000,300.0,-1.1230,-300.0000,300.0,-0.1865,-300.0000,300.0,0.8910,-300.0000,300.0,1.6865,-300.0000,300.0,1.8670,-300.0000,300.0,1.3340,-300.0000,300.0,0.2705,-300.0000,300.0,-0.9230,-300.0000,300.0,-1.7840,-300.0000,300.0,-1.9755,-300.0000,300.0,-1.4200,-300.0000,300.0,-0.3350,-300.0000,300.0,0.8590,-300.0000,300.0,1.7040,-300.0000,300.0,1.8880,-300.0000,300.0,1.3640,-300.0000,300.0,-0.7170,-300.0000,300.0,-1.4600,-300.0000,300.0,-1.6120,-300.0000,300.0,-1.1630,-300.0000,300.0,-0.3360,-300.0000,300.0,0.5205,-300.0000,300.0,1.0815,-300.0000,300.0,1.1740,-300.0000,300.0,0.8305,-300.0}))))
    .addComments(" MovingTheSea ")
    .addChild(new Group("Coordinate")
      .addChild(new CoordinateInterpolator("Ondulation").setKey(new double[] {0.0,0.25,0.50,0.75,1.0}).setKeyValue(getOndulation_4_198_keyValue())))
    .addComments(" ================================================= ")
    .addComments(" Scripts ")
    .addComments(" ================================================= ")
    .addChild(new Group("ScriptsForWaveMovement")
      .addChild(new Script("SeaStateChoiceToValue").setSourceCode("""
ecmascript:

// Return the numeric value of SST button clicked
//mfVec3fObjectName = new MFVec3f(SFVec3f v1, SFVec3f v2,...)
//sfVec3fObjectName = new SFVec3f(numeric x, numeric y, numeric z)
//sfRotationObjectName = new SFRotation(numeric x, numeric y, numeric z, numeric angle)
//mfRotationObjectName = new MFRotation(SFRotation r1, SFRotation r2, ...)
//mfFloatObjectName = new MFFloat(numeric n1, numeric n2, ...)

//Sea state 4 ( Beaufort=4-6)with wind=20 Knots
//               freq=0.124(8.1 period)
//               wavelength=159.2m
//               waveheight=4-8 ft or 1.32m-2.64 meam +/- 1.98=2.00m


function initialize ()
{
	SeaStateValue = 0;
}

//function ComputeSSH(Ssh)
//Sea state 1 (Beaufort 2 to 3) with wind 4 to 10 Knots
//               freq = .5   (    period (T))
//               wavelength= 12.5   m (L)
//               waveheight=2-4 (3 as mean or ft or 0.91 meam +/- .91m ( A )
//{
//	A=0.91;
//	L=12.5;
//	k=1/159.2;
//	f=0.5;
//	pi=3.141592;
//	T=8.1;
//	for ( var x=0, t=0 ; i <= 10 ; x=x+0.1, t=t+0.1);
//	theta0=0;
//	theta1=pi/12;
//	theta2=-pi/12;
//	w=2*pi*0.124;
//	height=A*cos(2*pi*((x/L)-(t/T)));
//	saida=[x       t        height];
//	return height;
//}

function SeaStateChoice1 (inputBoolean, timestamp)
{
	if (inputBoolean)
	{
//	ComputeSSH(1);
	SeaStateValue = 0;
	L=1
 	y0=L* -0.0060
	y1=L*0.0710
	y2=L*0.0030
	y3=L*-0.2115
	y4=L*-0.4640
	y5=L*-0.5885
	y6=L*-0.4515
	y7=L*-0.0370
	y8=L*0.5240
	y9=L*0.9950
	y10=L*1.1345
	y11=L*0.8160
	y12=L*0.1025
	y13=L*-0.7565
	y14=L*-1.4155
	y15=L*-1.5765
	y16=L*-1.1230
	y17=L*-0.1865
	y18=L*0.8910
	y19=L*1.6865
	y20=L*1.8670
	y21=L*1.3340
	y22=L*0.2705
	y23=L*-0.9230
	y24=L*-1.7840
	y25=L*-1.9755
	y26=L*-1.4200
	y27=L*-0.3350
	y28=L*0.8590
	y29=L*1.7040
	y30=L*1.8880
	y31=L*1.3640
	y32=L*0.3615
	y33=L*-0.7170
	y34=L*-1.4600
	y35=L*-1.6120
	y36=L*-1.1630
	y37=L*-0.3360
	y38=L*-0.5205
	y39=L*-1.0815
	y40=L*-0.1740
	x1 = new SFVec3f(400, y0, 400);
	x2 = new SFVec3f(390, y1, 390);
	x3 = new SFVec3f(380, y2, 380);
	x4 = new SFVec3f(370, y3, 370);
	x5 = new SFVec3f(360, y4, 360);
	x6= new SFVec3f(350, y5, 350);
	x7 = new SFVec3f(340, y6, 340);
	x8 = new SFVec3f(330, y7, 330);
	x9 = new SFVec3f(320, y8, 320);
	x10 = new SFVec3f(310,y9, 310);
	x11 = new SFVec3f(300, y10, 300);
	x12 = new SFVec3f(290, y11, 290);
	x13 = new SFVec3f(280, y12, 280);
	x14 = new SFVec3f(260, y13, 260);
	x15 = new SFVec3f(250, y14, 250);
	x16= new SFVec3f(240, y15, 240);
	x17 = new SFVec3f(230, y16, 230);
	x18 = new SFVec3f(220, y17, 220);
	x19 = new SFVec3f(210, y18, 210);
	x20 = new SFVec3f(200,y19, 200);
	x21 = new SFVec3f(190, y20, 190);
	x22 = new SFVec3f(180, y21, 180);
	x23 = new SFVec3f(170, y22, 170);
	x24 = new SFVec3f(160, y23, 160);
	x25 = new SFVec3f(150, y4, 150);
	x26= new SFVec3f(140, y25, 140);
	x27 = new SFVec3f(130, y26, 130);
	x28 = new SFVec3f(120, y27, 120);
	x29 = new SFVec3f(110, y28, 110);
	x30 = new SFVec3f(100, y29, 100);
	x31 = new SFVec3f(90, y30, 90);
	x32= new SFVec3f(80, y31, 80);
	x33 = new SFVec3f(70, y32, 70);
	x34 = new SFVec3f(60, y33, 60);
	x35 = new SFVec3f(50, y34, 50);
	x36= new SFVec3f(40, y35, 40);
	x37 = new SFVec3f(30, y36, 30);
	x38 = new SFVec3f(20, y37, 20);
	x39 = new SFVec3f(10, y38, 10);
	x40 = new SFVec3f(5,y39, 5);
	x41 = new SFVec3f(0,y40, 0);
	R1 = new SFRotation(1, 0, 0, 0.01);
	R2 = new SFRotation(1, 0, 0, -0.01);
	R3 = new SFRotation(1, 0, 0, 0.01);
	P1 = new SFRotation(0, 0, 1, 0.01);
	P2 = new SFRotation(0, 0, 1, -0.01);
	P3 = new SFRotation(0, 0, 1, 0.01);
	PitchValue = new MFRotation(P1, P2, P3);
	RollValue = new MFRotation(R1, R2, R3);
	BuoyanceValue = new MFVec3f(x1, x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41)
	BuoyanceKeyValues = new MFFloat( 0, 0.01, 0.02,0.03, 0.04, 0.05, 0.06, 0.07,0.08, 0.09, 0.1, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 0.19, 0.2, 0.21, 0.22, 0.23, 0.24, 0.2500  , 0.2600  , 0.2700  , 0.2800  , 0.2900  , 0.3000  , 0.3100  , 0.3200  , 0.3300  , 0.3400  , 0.3500  , 0.3600  , 0.3700  , 0.3800   ,0.3900   ,0.4000)
	}
}

function SeaStateChoice2 (inputBoolean, timestamp)
{
	if (inputBoolean)
	{
	SeaStateValue = 1;
	L=1.5
 	y0=L* -0.0060
	y1=L*0.0710
	y2=L*0.0030
	y3=L*-0.2115
	y4=L*-0.4640
	y5=L*-0.5885
	y6=L*-0.4515
	y7=L*-0.0370
	y8=L*0.5240
	y9=L*0.9950
	y10=L*1.1345
	y11=L*0.8160
	y12=L*0.1025
	y13=L*-0.7565
	y14=L*-1.4155
	y15=L*-1.5765
	y16=L*-1.1230
	y17=L*-0.1865
	y18=L*0.8910
	y19=L*1.6865
	y20=L*1.8670
	y21=L*1.3340
	y22=L*0.2705
	y23=L*-0.9230
	y24=L*-1.7840
	y25=L*-1.9755
	y26=L*-1.4200
	y27=L*-0.3350
	y28=L*0.8590
	y29=L*1.7040
	y30=L*1.8880
	y31=L*1.3640
	y32=L*0.3615
	y33=L*-0.7170
	y34=L*-1.4600
	y35=L*-1.6120
	y36=L*-1.1630
	y37=L*-0.3360
	y38=L*-0.5205
	y39=L*-1.0815
	y40=L*-0.1740
	x1 = new SFVec3f(400, y0, 400);
	x2 = new SFVec3f(390, y1, 390);
	x3 = new SFVec3f(380, y2, 380);
	x4 = new SFVec3f(370, y3, 370);
	x5 = new SFVec3f(360, y4, 360);
	x6= new SFVec3f(350, y5, 350);
	x7 = new SFVec3f(340, y6, 340);
	x8 = new SFVec3f(330, y7, 330);
	x9 = new SFVec3f(320, y8, 320);
	x10 = new SFVec3f(310,y9, 310);
	x11 = new SFVec3f(300, y10, 300);
	x12 = new SFVec3f(290, y11, 290);
	x13 = new SFVec3f(280, y12, 280);
	x14 = new SFVec3f(260, y13, 260);
	x15 = new SFVec3f(250, y14, 250);
	x16= new SFVec3f(240, y15, 240);
	x17 = new SFVec3f(230, y16, 230);
	x18 = new SFVec3f(220, y17, 220);
	x19 = new SFVec3f(210, y18, 210);
	x20 = new SFVec3f(200,y19, 200);
	x21 = new SFVec3f(190, y20, 190);
	x22 = new SFVec3f(180, y21, 180);
	x23 = new SFVec3f(170, y22, 170);
	x24 = new SFVec3f(160, y23, 160);
	x25 = new SFVec3f(150, y4, 150);
	x26= new SFVec3f(140, y25, 140);
	x27 = new SFVec3f(130, y26, 130);
	x28 = new SFVec3f(120, y27, 120);
	x29 = new SFVec3f(110, y28, 110);
	x30 = new SFVec3f(100, y29, 100);
	x31 = new SFVec3f(90, y30, 90);
	x32= new SFVec3f(80, y31, 80);
	x33 = new SFVec3f(70, y32, 70);
	x34 = new SFVec3f(60, y33, 60);
	x35 = new SFVec3f(50, y34, 50);
	x36= new SFVec3f(40, y35, 40);
	x37 = new SFVec3f(30, y36, 30);
	x38 = new SFVec3f(20, y37, 20);
	x39 = new SFVec3f(10, y38, 10);
	x40 = new SFVec3f(5,y39, 5);
	x41 = new SFVec3f(0,y40, 0);
	R1 = new SFRotation(1, 0, 0, 0.02);
	R2 = new SFRotation(1, 0, 0, -0.02);
	R3 = new SFRotation(1, 0, 0, 0.02);
	P1 = new SFRotation(0, 0, 1, 0.02);
	P2 = new SFRotation(0, 0, 1, -0.02);
	P3 = new SFRotation(0, 0, 1, 0.02);
	PitchValue = new MFRotation(P1, P2, P3);
	RollValue = new MFRotation(R1, R2, R3);
	BuoyanceValue = new MFVec3f(x1, x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41)
	BuoyanceKeyValues = new MFFloat( 0, 0.01, 0.02,0.03, 0.04, 0.05, 0.06, 0.07,0.08, 0.09, 0.1, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 0.19, 0.2, 0.21, 0.22, 0.23, 0.24, 0.2500  , 0.2600  , 0.2700  , 0.2800  , 0.2900  , 0.3000  , 0.3100  , 0.3200  , 0.3300  , 0.3400  , 0.3500  , 0.3600  , 0.3700  , 0.3800   ,0.3900   ,0.4000)
	}
}

function SeaStateChoice3 (inputBoolean,timestamp)
{
	if (inputBoolean)
	{
	SeaStateValue = 2;
	L=2
 	y0=L* -0.0060
	y1=L*0.0710
	y2=L*0.0030
	y3=L*-0.2115
	y4=L*-0.4640
	y5=L*-0.5885
	y6=L*-0.4515
	y7=L*-0.0370
	y8=L*0.5240
	y9=L*0.9950
	y10=L*1.1345
	y11=L*0.8160
	y12=L*0.1025
	y13=L*-0.7565
	y14=L*-1.4155
	y15=L*-1.5765
	y16=L*-1.1230
	y17=L*-0.1865
	y18=L*0.8910
	y19=L*1.6865
	y20=L*1.8670
	y21=L*1.3340
	y22=L*0.2705
	y23=L*-0.9230
	y24=L*-1.7840
	y25=L*-1.9755
	y26=L*-1.4200
	y27=L*-0.3350
	y28=L*0.8590
	y29=L*1.7040
	y30=L*1.8880
	y31=L*1.3640
	y32=L*0.3615
	y33=L*-0.7170
	y34=L*-1.4600
	y35=L*-1.6120
	y36=L*-1.1630
	y37=L*-0.3360
	y38=L*-0.5205
	y39=L*-1.0815
	y40=L*-0.1740
	x1 = new SFVec3f(400, y0, 400);
	x2 = new SFVec3f(390, y1, 390);
	x3 = new SFVec3f(380, y2, 380);
	x4 = new SFVec3f(370, y3, 370);
	x5 = new SFVec3f(360, y4, 360);
	x6= new SFVec3f(350, y5, 350);
	x7 = new SFVec3f(340, y6, 340);
	x8 = new SFVec3f(330, y7, 330);
	x9 = new SFVec3f(320, y8, 320);
	x10 = new SFVec3f(310,y9, 310);
	x11 = new SFVec3f(300, y10, 300);
	x12 = new SFVec3f(290, y11, 290);
	x13 = new SFVec3f(280, y12, 280);
	x14 = new SFVec3f(260, y13, 260);
	x15 = new SFVec3f(250, y14, 250);
	x16= new SFVec3f(240, y15, 240);
	x17 = new SFVec3f(230, y16, 230);
	x18 = new SFVec3f(220, y17, 220);
	x19 = new SFVec3f(210, y18, 210);
	x20 = new SFVec3f(200,y19, 200);
	x21 = new SFVec3f(190, y20, 190);
	x22 = new SFVec3f(180, y21, 180);
	x23 = new SFVec3f(170, y22, 170);
	x24 = new SFVec3f(160, y23, 160);
	x25 = new SFVec3f(150, y4, 150);
	x26= new SFVec3f(140, y25, 140);
	x27 = new SFVec3f(130, y26, 130);
	x28 = new SFVec3f(120, y27, 120);
	x29 = new SFVec3f(110, y28, 110);
	x30 = new SFVec3f(100, y29, 100);
	x31 = new SFVec3f(90, y30, 90);
	x32= new SFVec3f(80, y31, 80);
	x33 = new SFVec3f(70, y32, 70);
	x34 = new SFVec3f(60, y33, 60);
	x35 = new SFVec3f(50, y34, 50);
	x36= new SFVec3f(40, y35, 40);
	x37 = new SFVec3f(30, y36, 30);
	x38 = new SFVec3f(20, y37, 20);
	x39 = new SFVec3f(10, y38, 10);
	x40 = new SFVec3f(5,y39, 5);
	x41 = new SFVec3f(0,y40, 0);
	R1 = new SFRotation(1, 0, 0, 0.03);
	R2 = new SFRotation(1, 0, 0, -0.03);
	R3 = new SFRotation(1, 0, 0, 0.03);
	P1 = new SFRotation(0, 0, 1, 0.03);
	P2 = new SFRotation(0, 0, 1, -0.03);
	P3 = new SFRotation(0, 0, 1, 0.03);
	PitchValue = new MFRotation(P1, P2, P3);
	RollValue = new MFRotation(R1, R2, R3);
	BuoyanceValue = new MFVec3f(x1, x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41)
	BuoyanceKeyValues = new MFFloat( 0, 0.01, 0.02,0.03, 0.04, 0.05, 0.06, 0.07,0.08, 0.09, 0.1, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 0.19, 0.2, 0.21, 0.22, 0.23, 0.24, 0.2500  , 0.2600  , 0.2700  , 0.2800  , 0.2900  , 0.3000  , 0.3100  , 0.3200  , 0.3300  , 0.3400  , 0.3500  , 0.3600  , 0.3700  , 0.3800   ,0.3900   ,0.4000)
	}
}


function SeaStateChoice4 (inputBoolean, timestamp)
{
	if (inputBoolean)
	{
	L=3
 	y0=L* -0.0060
	y1=L*0.0710
	y2=L*0.0030
	y3=L*-0.2115
	y4=L*-0.4640
	y5=L*-0.5885
	y6=L*-0.4515
	y7=L*-0.0370
	y8=L*0.5240
	y9=L*0.9950
	y10=L*1.1345
	y11=L*0.8160
	y12=L*0.1025
	y13=L*-0.7565
	y14=L*-1.4155
	y15=L*-1.5765
	y16=L*-1.1230
	y17=L*-0.1865
	y18=L*0.8910
	y19=L*1.6865
	y20=L*1.8670
	y21=L*1.3340
	y22=L*0.2705
	y23=L*-0.9230
	y24=L*-1.7840
	y25=L*-1.9755
	y26=L*-1.4200
	y27=L*-0.3350
	y28=L*0.8590
	y29=L*1.7040
	y30=L*1.8880
	y31=L*1.3640
	y32=L*0.3615
	y33=L*-0.7170
	y34=L*-1.4600
	y35=L*-1.6120
	y36=L*-1.1630
	y37=L*-0.3360
	y38=L*-0.5205
	y39=L*-1.0815
	y40=L*-0.1740
	x1 = new SFVec3f(400, y0, 400);
	x2 = new SFVec3f(390, y1, 390);
	x3 = new SFVec3f(380, y2, 380);
	x4 = new SFVec3f(370, y3, 370);
	x5 = new SFVec3f(360, y4, 360);
	x6= new SFVec3f(350, y5, 350);
	x7 = new SFVec3f(340, y6, 340);
	x8 = new SFVec3f(330, y7, 330);
	x9 = new SFVec3f(320, y8, 320);
	x10 = new SFVec3f(310,y9, 310);
	x11 = new SFVec3f(300, y10, 300);
	x12 = new SFVec3f(290, y11, 290);
	x13 = new SFVec3f(280, y12, 280);
	x14 = new SFVec3f(260, y13, 260);
	x15 = new SFVec3f(250, y14, 250);
	x16= new SFVec3f(240, y15, 240);
	x17 = new SFVec3f(230, y16, 230);
	x18 = new SFVec3f(220, y17, 220);
	x19 = new SFVec3f(210, y18, 210);
	x20 = new SFVec3f(200,y19, 200);
	x21 = new SFVec3f(190, y20, 190);
	x22 = new SFVec3f(180, y21, 180);
	x23 = new SFVec3f(170, y22, 170);
	x24 = new SFVec3f(160, y23, 160);
	x25 = new SFVec3f(150, y4, 150);
	x26= new SFVec3f(140, y25, 140);
	x27 = new SFVec3f(130, y26, 130);
	x28 = new SFVec3f(120, y27, 120);
	x29 = new SFVec3f(110, y28, 110);
	x30 = new SFVec3f(100, y29, 100);
	x31 = new SFVec3f(90, y30, 90);
	x32= new SFVec3f(80, y31, 80);
	x33 = new SFVec3f(70, y32, 70);
	x34 = new SFVec3f(60, y33, 60);
	x35 = new SFVec3f(50, y34, 50);
	x36= new SFVec3f(40, y35, 40);
	x37 = new SFVec3f(30, y36, 30);
	x38 = new SFVec3f(20, y37, 20);
	x39 = new SFVec3f(10, y38, 10);
	x40 = new SFVec3f(5,y39, 5);
	x41 = new SFVec3f(0,y40, 0);
	R1 = new SFRotation(1, 0, 0, 0.07);
	R2 = new SFRotation(1, 0, 0, -0.07);
	R3 = new SFRotation(1, 0, 0, 0.07);
	P1 = new SFRotation(0, 0, 1, 0.07);
	P2 = new SFRotation(0, 0, 1, -0.07);
	P3 = new SFRotation(0, 0, 1, 0.07);
	PitchValue = new MFRotation(P1, P2, P3);
	RollValue = new MFRotation(R1, R2, R3);
	BuoyanceValue = new MFVec3f(x1, x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41)
	BuoyanceKeyValues = new MFFloat( 0, 0.01, 0.02,0.03, 0.04, 0.05, 0.06, 0.07,0.08, 0.09, 0.1, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 0.19, 0.2, 0.21, 0.22, 0.23, 0.24, 0.2500  , 0.2600  , 0.2700  , 0.2800  , 0.2900  , 0.3000  , 0.3100  , 0.3200  , 0.3300  , 0.3400  , 0.3500  , 0.3600  , 0.3700  , 0.3800   ,0.3900   ,0.4000)
	}
}


function SeaStateChoice5 (inputBoolean, timestamp)
{
	if (inputBoolean)
	{
	SeaStateValue = 4;
	L=5
 	y0=L* -0.0060
	y1=L*0.0710
	y2=L*0.0030
	y3=L*-0.2115
	y4=L*-0.4640
	y5=L*-0.5885
	y6=L*-0.4515
	y7=L*-0.0370
	y8=L*0.5240
	y9=L*0.9950
	y10=L*1.1345
	y11=L*0.8160
	y12=L*0.1025
	y13=L*-0.7565
	y14=L*-1.4155
	y15=L*-1.5765
	y16=L*-1.1230
	y17=L*-0.1865
	y18=L*0.8910
	y19=L*1.6865
	y20=L*1.8670
	y21=L*1.3340
	y22=L*0.2705
	y23=L*-0.9230
	y24=L*-1.7840
	y25=L*-1.9755
	y26=L*-1.4200
	y27=L*-0.3350
	y28=L*0.8590
	y29=L*1.7040
	y30=L*1.8880
	y31=L*1.3640
	y32=L*0.3615
	y33=L*-0.7170
	y34=L*-1.4600
	y35=L*-1.6120
	y36=L*-1.1630
	y37=L*-0.3360
	y38=L*-0.5205
	y39=L*-1.0815
	y40=L*-0.1740
	x1 = new SFVec3f(400, y0, 400);
	x2 = new SFVec3f(390, y1, 390);
	x3 = new SFVec3f(380, y2, 380);
	x4 = new SFVec3f(370, y3, 370);
	x5 = new SFVec3f(360, y4, 360);
	x6= new SFVec3f(350, y5, 350);
	x7 = new SFVec3f(340, y6, 340);
	x8 = new SFVec3f(330, y7, 330);
	x9 = new SFVec3f(320, y8, 320);
	x10 = new SFVec3f(310,y9, 310);
	x11 = new SFVec3f(300, y10, 300);
	x12 = new SFVec3f(290, y11, 290);
	x13 = new SFVec3f(280, y12, 280);
	x14 = new SFVec3f(260, y13, 260);
	x15 = new SFVec3f(250, y14, 250);
	x16= new SFVec3f(240, y15, 240);
	x17 = new SFVec3f(230, y16, 230);
	x18 = new SFVec3f(220, y17, 220);
	x19 = new SFVec3f(210, y18, 210);
	x20 = new SFVec3f(200,y19, 200);
	x21 = new SFVec3f(190, y20, 190);
	x22 = new SFVec3f(180, y21, 180);
	x23 = new SFVec3f(170, y22, 170);
	x24 = new SFVec3f(160, y23, 160);
	x25 = new SFVec3f(150, y4, 150);
	x26= new SFVec3f(140, y25, 140);
	x27 = new SFVec3f(130, y26, 130);
	x28 = new SFVec3f(120, y27, 120);
	x29 = new SFVec3f(110, y28, 110);
	x30 = new SFVec3f(100, y29, 100);
	x31 = new SFVec3f(90, y30, 90);
	x32= new SFVec3f(80, y31, 80);
	x33 = new SFVec3f(70, y32, 70);
	x34 = new SFVec3f(60, y33, 60);
	x35 = new SFVec3f(50, y34, 50);
	x36= new SFVec3f(40, y35, 40);
	x37 = new SFVec3f(30, y36, 30);
	x38 = new SFVec3f(20, y37, 20);
	x39 = new SFVec3f(10, y38, 10);
	x40 = new SFVec3f(5,y39, 5);
	x41 = new SFVec3f(0,y40, 0);
	R1 = new SFRotation(1, 0, 0, 0.1);
	R2 = new SFRotation(1, 0, 0, -0.1);
	R3 = new SFRotation(1, 0, 0, 0.1);
	P1 = new SFRotation(0, 0, 1, 0.1);
	P2 = new SFRotation(0, 0, 1, -0.1);
	P3 = new SFRotation(0, 0, 1, 0.1);
	PitchValue = new MFRotation(P1, P2, P3);
	RollValue = new MFRotation(R1, R2, R3);
	BuoyanceValue = new MFVec3f(x1, x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41)
	BuoyanceKeyValues = new MFFloat( 0, 0.01, 0.02,0.03, 0.04, 0.05, 0.06, 0.07,0.08, 0.09, 0.1, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 0.19, 0.2, 0.21, 0.22, 0.23, 0.24, 0.2500  , 0.2600  , 0.2700  , 0.2800  , 0.2900  , 0.3000  , 0.3100  , 0.3200  , 0.3300  , 0.3400  , 0.3500  , 0.3600  , 0.3700  , 0.3800   ,0.3900   ,0.4000)
	}
}

function SeaStateChoice6 (inputBoolean, timestamp)
{
	if (inputBoolean)
	{
	SeaStateValue = 5;
	L=7
 	y0=L* -0.0060
	y1=L*0.0710
	y2=L*0.0030
	y3=L*-0.2115
	y4=L*-0.4640
	y5=L*-0.5885
	y6=L*-0.4515
	y7=L*-0.0370
	y8=L*0.5240
	y9=L*0.9950
	y10=L*1.1345
	y11=L*0.8160
	y12=L*0.1025
	y13=L*-0.7565
	y14=L*-1.4155
	y15=L*-1.5765
	y16=L*-1.1230
	y17=L*-0.1865
	y18=L*0.8910
	y19=L*1.6865
	y20=L*1.8670
	y21=L*1.3340
	y22=L*0.2705
	y23=L*-0.9230
	y24=L*-1.7840
	y25=L*-1.9755
	y26=L*-1.4200
	y27=L*-0.3350
	y28=L*0.8590
	y29=L*1.7040
	y30=L*1.8880
	y31=L*1.3640
	y32=L*0.3615
	y33=L*-0.7170
	y34=L*-1.4600
	y35=L*-1.6120
	y36=L*-1.1630
	y37=L*-0.3360
	y38=L*-0.5205
	y39=L*-1.0815
	y40=L*-0.1740
	x1 = new SFVec3f(400, y0, 400);
	x2 = new SFVec3f(390, y1, 390);
	x3 = new SFVec3f(380, y2, 380);
	x4 = new SFVec3f(370, y3, 370);
	x5 = new SFVec3f(360, y4, 360);
	x6= new SFVec3f(350, y5, 350);
	x7 = new SFVec3f(340, y6, 340);
	x8 = new SFVec3f(330, y7, 330);
	x9 = new SFVec3f(320, y8, 320);
	x10 = new SFVec3f(310,y9, 310);
	x11 = new SFVec3f(300, y10, 300);
	x12 = new SFVec3f(290, y11, 290);
	x13 = new SFVec3f(280, y12, 280);
	x14 = new SFVec3f(260, y13, 260);
	x15 = new SFVec3f(250, y14, 250);
	x16= new SFVec3f(240, y15, 240);
	x17 = new SFVec3f(230, y16, 230);
	x18 = new SFVec3f(220, y17, 220);
	x19 = new SFVec3f(210, y18, 210);
	x20 = new SFVec3f(200,y19, 200);
	x21 = new SFVec3f(190, y20, 190);
	x22 = new SFVec3f(180, y21, 180);
	x23 = new SFVec3f(170, y22, 170);
	x24 = new SFVec3f(160, y23, 160);
	x25 = new SFVec3f(150, y4, 150);
	x26= new SFVec3f(140, y25, 140);
	x27 = new SFVec3f(130, y26, 130);
	x28 = new SFVec3f(120, y27, 120);
	x29 = new SFVec3f(110, y28, 110);
	x30 = new SFVec3f(100, y29, 100);
	x31 = new SFVec3f(90, y30, 90);
	x32= new SFVec3f(80, y31, 80);
	x33 = new SFVec3f(70, y32, 70);
	x34 = new SFVec3f(60, y33, 60);
	x35 = new SFVec3f(50, y34, 50);
	x36= new SFVec3f(40, y35, 40);
	x37 = new SFVec3f(30, y36, 30);
	x38 = new SFVec3f(20, y37, 20);
	x39 = new SFVec3f(10, y38, 10);
	x40 = new SFVec3f(5,y39, 5);
	x41 = new SFVec3f(0,y40, 0);
	R1 = new SFRotation(1, 0, 0, 0.1);
	R2 = new SFRotation(1, 0, 0, -0.1);
	R3 = new SFRotation(1, 0, 0, 0.1);
	P1 = new SFRotation(0, 0, 1, 0.15);
	P2 = new SFRotation(0, 0, 1, -0.15);
	P3 = new SFRotation(0, 0, 1, 0.15);
	PitchValue = new MFRotation(P1, P2, P3);
	RollValue = new MFRotation(R1, R2, R3);
	BuoyanceValue = new MFVec3f(x1, x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41)
	BuoyanceKeyValues = new MFFloat( 0, 0.01, 0.02,0.03, 0.04, 0.05, 0.06, 0.07,0.08, 0.09, 0.1, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 0.19, 0.2, 0.21, 0.22, 0.23, 0.24, 0.2500  , 0.2600  , 0.2700  , 0.2800  , 0.2900  , 0.3000  , 0.3100  , 0.3200  , 0.3300  , 0.3400  , 0.3500  , 0.3600  , 0.3700  , 0.3800   ,0.3900   ,0.4000)
	}
}


function SeaStateChoice7 (inputBoolean, timestamp)
{
	if (inputBoolean)
	{
	 SeaStateValue = 6;
	L=9
 	y0=L* -0.0060
	y1=L*0.0710
	y2=L*0.0030
	y3=L*-0.2115
	y4=L*-0.4640
	y5=L*-0.5885
	y6=L*-0.4515
	y7=L*-0.0370
	y8=L*0.5240
	y9=L*0.9950
	y10=L*1.1345
	y11=L*0.8160
	y12=L*0.1025
	y13=L*-0.7565
	y14=L*-1.4155
	y15=L*-1.5765
	y16=L*-1.1230
	y17=L*-0.1865
	y18=L*0.8910
	y19=L*1.6865
	y20=L*1.8670
	y21=L*1.3340
	y22=L*0.2705
	y23=L*-0.9230
	y24=L*-1.7840
	y25=L*-1.9755
	y26=L*-1.4200
	y27=L*-0.3350
	y28=L*0.8590
	y29=L*1.7040
	y30=L*1.8880
	y31=L*1.3640
	y32=L*0.3615
	y33=L*-0.7170
	y34=L*-1.4600
	y35=L*-1.6120
	y36=L*-1.1630
	y37=L*-0.3360
	y38=L*-0.5205
	y39=L*-1.0815
	y40=L*-0.1740
	x1 = new SFVec3f(400, y0, 400);
	x2 = new SFVec3f(390, y1, 390);
	x3 = new SFVec3f(380, y2, 380);
	x4 = new SFVec3f(370, y3, 370);
	x5 = new SFVec3f(360, y4, 360);
	x6= new SFVec3f(350, y5, 350);
	x7 = new SFVec3f(340, y6, 340);
	x8 = new SFVec3f(330, y7, 330);
	x9 = new SFVec3f(320, y8, 320);
	x10 = new SFVec3f(310,y9, 310);
	x11 = new SFVec3f(300, y10, 300);
	x12 = new SFVec3f(290, y11, 290);
	x13 = new SFVec3f(280, y12, 280);
	x14 = new SFVec3f(260, y13, 260);
	x15 = new SFVec3f(250, y14, 250);
	x16= new SFVec3f(240, y15, 240);
	x17 = new SFVec3f(230, y16, 230);
	x18 = new SFVec3f(220, y17, 220);
	x19 = new SFVec3f(210, y18, 210);
	x20 = new SFVec3f(200,y19, 200);
	x21 = new SFVec3f(190, y20, 190);
	x22 = new SFVec3f(180, y21, 180);
	x23 = new SFVec3f(170, y22, 170);
	x24 = new SFVec3f(160, y23, 160);
	x25 = new SFVec3f(150, y4, 150);
	x26= new SFVec3f(140, y25, 140);
	x27 = new SFVec3f(130, y26, 130);
	x28 = new SFVec3f(120, y27, 120);
	x29 = new SFVec3f(110, y28, 110);
	x30 = new SFVec3f(100, y29, 100);
	x31 = new SFVec3f(90, y30, 90);
	x32= new SFVec3f(80, y31, 80);
	x33 = new SFVec3f(70, y32, 70);
	x34 = new SFVec3f(60, y33, 60);
	x35 = new SFVec3f(50, y34, 50);
	x36= new SFVec3f(40, y35, 40);
	x37 = new SFVec3f(30, y36, 30);
	x38 = new SFVec3f(20, y37, 20);
	x39 = new SFVec3f(10, y38, 10);
	x40 = new SFVec3f(5,y39, 5);
	x41 = new SFVec3f(0,y40, 0);
	R1 = new SFRotation(1, 0, 0, 0.15);
	R2 = new SFRotation(1, 0, 0, -0.15);
	R3 = new SFRotation(1, 0, 0, 0.15);
	P1 = new SFRotation(0, 0, 1, 0.2);
	P2 = new SFRotation(0, 0, 1, -0.2);
	P3 = new SFRotation(0, 0, 1, 0.2);
	PitchValue = new MFRotation(P1, P2, P3);
	RollValue = new MFRotation(R1, R2, R3);
	BuoyanceValue = new MFVec3f(x1, x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41)
	BuoyanceKeyValues = new MFFloat( 0, 0.01, 0.02,0.03, 0.04, 0.05, 0.06, 0.07,0.08, 0.09, 0.1, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 0.19, 0.2, 0.21, 0.22, 0.23, 0.24, 0.2500  , 0.2600  , 0.2700  , 0.2800  , 0.2900  , 0.3000  , 0.3100  , 0.3200  , 0.3300  , 0.3400  , 0.3500  , 0.3600  , 0.3700  , 0.3800   ,0.3900   ,0.4000)
	}
}


function SeaStateChoice8 (inputBoolean, timestamp)
{
	if (inputBoolean)
	{
	SeaStateValue = 7;
	L=10
 	y0=L* -0.0060
	y1=L*0.0710
	y2=L*0.0030
	y3=L*-0.2115
	y4=L*-0.4640
	y5=L*-0.5885
	y6=L*-0.4515
	y7=L*-0.0370
	y8=L*0.5240
	y9=L*0.9950
	y10=L*1.1345
	y11=L*0.8160
	y12=L*0.1025
	y13=L*-0.7565
	y14=L*-1.4155
	y15=L*-1.5765
	y16=L*-1.1230
	y17=L*-0.1865
	y18=L*0.8910
	y19=L*1.6865
	y20=L*1.8670
	y21=L*1.3340
	y22=L*0.2705
	y23=L*-0.9230
	y24=L*-1.7840
	y25=L*-1.9755
	y26=L*-1.4200
	y27=L*-0.3350
	y28=L*0.8590
	y29=L*1.7040
	y30=L*1.8880
	y31=L*1.3640
	y32=L*0.3615
	y33=L*-0.7170
	y34=L*-1.4600
	y35=L*-1.6120
	y36=L*-1.1630
	y37=L*-0.3360
	y38=L*-0.5205
	y39=L*-1.0815
	y40=L*-0.1740
	x1 = new SFVec3f(400, y0, 400);
	x2 = new SFVec3f(390, y1, 390);
	x3 = new SFVec3f(380, y2, 380);
	x4 = new SFVec3f(370, y3, 370);
	x5 = new SFVec3f(360, y4, 360);
	x6= new SFVec3f(350, y5, 350);
	x7 = new SFVec3f(340, y6, 340);
	x8 = new SFVec3f(330, y7, 330);
	x9 = new SFVec3f(320, y8, 320);
	x10 = new SFVec3f(310,y9, 310);
	x11 = new SFVec3f(300, y10, 300);
	x12 = new SFVec3f(290, y11, 290);
	x13 = new SFVec3f(280, y12, 280);
	x14 = new SFVec3f(260, y13, 260);
	x15 = new SFVec3f(250, y14, 250);
	x16= new SFVec3f(240, y15, 240);
	x17 = new SFVec3f(230, y16, 230);
	x18 = new SFVec3f(220, y17, 220);
	x19 = new SFVec3f(210, y18, 210);
	x20 = new SFVec3f(200,y19, 200);
	x21 = new SFVec3f(190, y20, 190);
	x22 = new SFVec3f(180, y21, 180);
	x23 = new SFVec3f(170, y22, 170);
	x24 = new SFVec3f(160, y23, 160);
	x25 = new SFVec3f(150, y4, 150);
	x26= new SFVec3f(140, y25, 140);
	x27 = new SFVec3f(130, y26, 130);
	x28 = new SFVec3f(120, y27, 120);
	x29 = new SFVec3f(110, y28, 110);
	x30 = new SFVec3f(100, y29, 100);
	x31 = new SFVec3f(90, y30, 90);
	x32= new SFVec3f(80, y31, 80);
	x33 = new SFVec3f(70, y32, 70);
	x34 = new SFVec3f(60, y33, 60);
	x35 = new SFVec3f(50, y34, 50);
	x36= new SFVec3f(40, y35, 40);
	x37 = new SFVec3f(30, y36, 30);
	x38 = new SFVec3f(20, y37, 20);
	x39 = new SFVec3f(10, y38, 10);
	x40 = new SFVec3f(5,y39, 5);
	x41 = new SFVec3f(0,y40, 0);
	R1 = new SFRotation(1, 0, 0, 0.25);
	R2 = new SFRotation(1, 0, 0, -0.25);
	R3 = new SFRotation(1, 0, 0, 0.25);
	P1 = new SFRotation(0, 0, 1, 0.3);
	P2 = new SFRotation(0, 0, 1, -0.3);
	P3 = new SFRotation(0, 0, 1, 0.3);
	PitchValue = new MFRotation(P1, P2, P3);
	RollValue = new MFRotation(R1, R2, R3);
	BuoyanceValue = new MFVec3f(x1, x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41)
	BuoyanceKeyValues = new MFFloat( 0, 0.01, 0.02,0.03, 0.04, 0.05, 0.06, 0.07,0.08, 0.09, 0.1, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 0.19, 0.2, 0.21, 0.22, 0.23, 0.24, 0.2500  , 0.2600  , 0.2700  , 0.2800  , 0.2900  , 0.3000  , 0.3100  , 0.3200  , 0.3300  , 0.3400  , 0.3500  , 0.3600  , 0.3700  , 0.3800   ,0.3900   ,0.4000)
	}
}
""")
        .addField(new field().setName("SeaStateChoice0").setType(field.TYPE_SFBOOL).setAccessType(field.ACCESSTYPE_INPUTONLY))
        .addField(new field().setName("SeaStateChoice1").setType(field.TYPE_SFBOOL).setAccessType(field.ACCESSTYPE_INPUTONLY))
        .addField(new field().setName("SeaStateChoice2").setType(field.TYPE_SFBOOL).setAccessType(field.ACCESSTYPE_INPUTONLY))
        .addField(new field().setName("SeaStateChoice3").setType(field.TYPE_SFBOOL).setAccessType(field.ACCESSTYPE_INPUTONLY))
        .addField(new field().setName("SeaStateChoice4").setType(field.TYPE_SFBOOL).setAccessType(field.ACCESSTYPE_INPUTONLY))
        .addField(new field().setName("SeaStateChoice5").setType(field.TYPE_SFBOOL).setAccessType(field.ACCESSTYPE_INPUTONLY))
        .addField(new field().setName("SeaStateChoice6").setType(field.TYPE_SFBOOL).setAccessType(field.ACCESSTYPE_INPUTONLY))
        .addField(new field().setName("SeaStateChoice7").setType(field.TYPE_SFBOOL).setAccessType(field.ACCESSTYPE_INPUTONLY))
        .addField(new field().setName("SeaStateChoice8").setType(field.TYPE_SFBOOL).setAccessType(field.ACCESSTYPE_INPUTONLY))
        .addField(new field().setName("SeaStateValue").setType(field.TYPE_SFINT32).setAccessType(field.ACCESSTYPE_OUTPUTONLY))
        .addField(new field().setName("BuoyanceValue").setType(field.TYPE_MFVEC3F).setAccessType(field.ACCESSTYPE_OUTPUTONLY))
        .addField(new field().setName("BuoyanceKeyValues").setType(field.TYPE_MFFLOAT).setAccessType(field.ACCESSTYPE_OUTPUTONLY))
        .addField(new field().setName("PitchValue").setType(field.TYPE_MFROTATION).setAccessType(field.ACCESSTYPE_OUTPUTONLY))
        .addField(new field().setName("RollValue").setType(field.TYPE_MFROTATION).setAccessType(field.ACCESSTYPE_OUTPUTONLY))))
    .addComments(" ================================================= ")
    .addComments(" RoutesToChooseSST ")
    .addComments(" ================================================= ")
    .addChild(new ROUTE().setFromNode("TouchSensorSeaState1").setFromField("isActive").setToNode("SeaStateChoiceToValue").setToField("SeaStateChoice1"))
    .addChild(new ROUTE().setFromNode("TouchSensorSeaState2").setFromField("isActive").setToNode("SeaStateChoiceToValue").setToField("SeaStateChoice2"))
    .addChild(new ROUTE().setFromNode("TouchSensorSeaState3").setFromField("isActive").setToNode("SeaStateChoiceToValue").setToField("SeaStateChoice3"))
    .addChild(new ROUTE().setFromNode("TouchSensorSeaState4").setFromField("isActive").setToNode("SeaStateChoiceToValue").setToField("SeaStateChoice4"))
    .addChild(new ROUTE().setFromNode("TouchSensorSeaState5").setFromField("isActive").setToNode("SeaStateChoiceToValue").setToField("SeaStateChoice5"))
    .addChild(new ROUTE().setFromNode("TouchSensorSeaState6").setFromField("isActive").setToNode("SeaStateChoiceToValue").setToField("SeaStateChoice6"))
    .addChild(new ROUTE().setFromNode("TouchSensorSeaState7").setFromField("isActive").setToNode("SeaStateChoiceToValue").setToField("SeaStateChoice7"))
    .addChild(new ROUTE().setFromNode("TouchSensorSeaState8").setFromField("isActive").setToNode("SeaStateChoiceToValue").setToField("SeaStateChoice8"))
    .addChild(new ROUTE().setFromNode("SeaStateChoiceToValue").setFromField("SeaStateValue").setToNode("SeaStateNumber").setToField("whichChoice"))
    .addChild(new ROUTE().setFromNode("SeaStateChoiceToValue").setFromField("BuoyanceValue").setToNode("ShipBuoyanceHeight").setToField("set_keyValue"))
    .addChild(new ROUTE().setFromNode("SeaStateChoiceToValue").setFromField("BuoyanceKeyValues").setToNode("ShipBuoyanceHeight").setToField("set_key"))
    .addChild(new ROUTE().setFromNode("SeaStateChoiceToValue").setFromField("PitchValue").setToNode("Pitch").setToField("set_keyValue"))
    .addChild(new ROUTE().setFromNode("SeaStateChoiceToValue").setFromField("RollValue").setToNode("Roll").setToField("set_keyValue"))
    .addComments(" ")
    .addComments(" ================================================= ")
    .addComments(" RoutesToMoveTheSea ")
    .addComments(" ================================================= ")
    .addChild(new ROUTE().setFromNode("Clock").setFromField("fraction_changed").setToNode("Ondulation").setToField("set_fraction"))
    .addChild(new ROUTE().setFromNode("Ondulation").setFromField("value_changed").setToNode("BasicExtrusion").setToField("set_spine"))
    .addComments(" ================================================= ")
    .addComments(" RoutesToMoveTheShip ")
    .addComments(" ================================================= ")
    .addChild(new ROUTE().setFromNode("PitchClock").setFromField("fraction_changed").setToNode("Pitch").setToField("set_fraction"))
    .addChild(new ROUTE().setFromNode("Pitch").setFromField("value_changed").setToNode("ShipPitch").setToField("set_rotation"))
    .addChild(new ROUTE().setFromNode("Pitch").setFromField("value_changed").setToNode("SubPitch").setToField("set_rotation"))
    .addChild(new ROUTE().setFromNode("RollClock").setFromField("fraction_changed").setToNode("Roll").setToField("set_fraction"))
    .addChild(new ROUTE().setFromNode("Roll").setFromField("value_changed").setToNode("ShipRoll").setToField("set_rotation"))
    .addChild(new ROUTE().setFromNode("Roll").setFromField("value_changed").setToNode("SubRoll").setToField("set_rotation"))
    .addChild(new ROUTE().setFromNode("BuoyanceClock").setFromField("fraction_changed").setToNode("ShipBuoyanceHeight").setToField("set_fraction"))
    .addChild(new ROUTE().setFromNode("ShipBuoyanceHeight").setFromField("value_changed").setToNode("ShipBuoyance").setToField("set_translation"))
    .addChild(new ROUTE().setFromNode("BuoyanceClock").setFromField("fraction_changed").setToNode("SubBuoyanceHeigth").setToField("set_fraction"))
    .addChild(new ROUTE().setFromNode("SubBuoyanceHeigth").setFromField("value_changed").setToNode("ShipBuoyance").setToField("set_translation"))
    .addChild(new ROUTE().setFromNode("ShipClock").setFromField("fraction_changed").setToNode("ShipBuoyanceHeight").setToField("set_fraction"))
    .addChild(new ROUTE().setFromNode("ShipBuoyanceHeight").setFromField("value_changed").setToNode("ShipVelocity").setToField("set_translation")));
            }
            catch (Exception ex)
            {       
                System.err.println ("*** Further hints on X3DJSAIL errors and exceptions at");
                System.err.println ("*** https://www.web3d.org/specifications/java/X3DJSAIL.html");
                throw (ex);
            }
	}
	// end of initialize() method

		/** Define subarrays using type double[] */
		private double[] getBasicExtrusion_7_20_spine_1()
		{
			double[] value = {0.0,0.0,0.0000,1.0,0.0204,1.0000,2.0,0.0161,2.0000,3.0,-0.0218,3.0000,4.0,-0.0791,4.0000,5.0,-0.1237,5.0000,6.0,-0.1224,6.000,7.0,-0.0598,7.0000,8.0,0.0503,8.0000,9.0,0.1661,9.0000,10.0,0.2348,10.0000,11.0,0.2163,11.0000,12.0,0.1041,12.0000,13.0,-0.0672,13.0000,14.0,-0.2326,14.0000,15.0,-0.3224,15.0000,16.0,-0.2920,16.0000,17.0,-0.1434,17.0000,18.0,0.0723,18.0000,19.0,0.2728,19.0000,20.0,0.3776,20.0000,21.0,0.3408,21.0000,22.0,0.1718,22.0000,23.0,-0.0670,23.0000,24.0,-0.2840,24.0000,25.0,-0.3951,25.0000,26.0,-0.3568,26.0000,27.0,-0.1846,27.0000,28.0,0.0541,28.0000,29.0,0.2668,29.0000,30.0,0.3734,30.0000,31.0,0.3373,31.0000,32.0,0.1782,32.0000,33.0,-0.0373,33.0000,34.0,-0.2246,34.0000,35.0,-0.3153,35.0000,36.0,-0.2831,36.0000,37.0,-0.1513,37.0000,38.0,0.0205,38.0000,39.0,0.1632,39.0000,40.0,0.2269,40.0000,41.0,0.1990,41.0000,42.0,0.1048,42.0000,43.0,-0.0074,43.0000,44.0,-0.0903,44.0000,45.0,-0.1177,45.0000,46.0,-0.0928,46.0000,47.0,-0.0423,47.0000,48.0,0.0006,48.0000,49.0,0.0142,49.0000,50.0,-0.0012,50.0000,51.0,-0.0251,51.0000,52.0,-0.0307,52.0000,53.0,-0.0015,53.0000,54.0,0.0571,54.0000,55.0,0.1175,55.0000,56.0,0.1429,56.0000,57.0,0.1069,57.0000,58.0,0.0098,58.0000,59.0,-0.1166,59.0000,60.0,-0.2197,60.0000,61.0,-0.2485,61.0000,62.0,-0.1780,62.0000,63.0,-0.0240,63.0000,64.0,0.1590,64.0000,65.0,0.2978,65.0000,66.0,0.3309,66.0000,67.0,0.2357,67.0000,68.0,0.0411,68.0000,69.0,-0.1814,69.0000,70.0,-0.3446,70.0000,71.0,-0.3815,71.0000,72.0,-0.2729,72.0000,73.0,-0.0574,73.0000,74.0,0.1834,74.0000,75.0,0.3563,75.0000,76.0,0.3946,76.0000,77.0,0.2841,77.0000,78.0,0.0689,78.0000,79.0,-0.1668,79.0000,80.0,-0.3327,80.0000,81.0,-0.3686,81.0000,82.0,-0.2664,82.0000,83.0,-0.0721,83.0000,84.0,0.1355,84.0000,85.0,0.2774,85.0000,86.0,0.3057,86.0000,87.0,0.2201,87.0000,88.0,0.0645,88.0000,89.0,-0.0946,89.0000,90.0,-0.1969,90.0000,91.0,-0.2121,91.0000,92.0,-0.1485,92.0000,93.0,-0.0450,93.0000,94.0,0.0499,94.0000,95.0,0.1004,95.0000,96.0,0.0972,96.0000,97.0,0.0580,97.0000,98.0,0.0142,98.0000,99.0,-0.0071,99.0000};
			return value;
		}
		private double[] getBasicExtrusion_7_20_spine_2()
		{
			double[] value = {100.0,0.0020,100.0};
			return value;
		}


		/** Large attribute array: Extrusion DEF='BasicExtrusion' spine field, scene-graph level=7, element #20, 303 total numbers made up of 101 3-tuple values.
		 * Reassemble split array as single method to improve readability and runnability.
		 * Provide large array values via separate methods, hoping to avoid 'code too large' Java compilation errors. 
		 * Individual Java methods (including aggregated initializations) are limited to 64KB.
		 * @see https://stackoverflow.com/questions/2407912/code-too-large-compilation-error-in-java
		 * @see https://stackoverflow.com/questions/11437905/java-too-many-constants-jvm-error
		 */
		private MFVec3f getBasicExtrusion_7_20_spine()
		{
			MFVec3f BasicExtrusion_7_20_spine = new MFVec3f()/*2.finalize*/
				.append(new MFVec3f(getBasicExtrusion_7_20_spine_1()))
				.append(new MFVec3f(getBasicExtrusion_7_20_spine_2()));
			return BasicExtrusion_7_20_spine;
		}
		/** Large attribute array: CoordinateInterpolator DEF='Ondulation' keyValue field, scene-graph level=4, element #198, 285 total numbers made up of 95 3-tuple values.
		 * Reassemble split array as single method to improve readability and runnability.
		 * Provide large array values via separate methods, hoping to avoid 'code too large' Java compilation errors. 
		 * Individual Java methods (including aggregated initializations) are limited to 64KB.
		 * @see https://stackoverflow.com/questions/2407912/code-too-large-compilation-error-in-java
		 * @see https://stackoverflow.com/questions/11437905/java-too-many-constants-jvm-error
		 */
		private MFVec3f getOndulation_4_198_keyValue()
		{
			MFVec3f Ondulation_4_198_keyValue = new MFVec3f(new double[] {-4.100,0.0,0.0,-4.0,0.0,0.0,-3.529,0.674,0.0,-3.059,0.996,0.0,-2.588,0.798,0.0,-2.118,0.184,0.0,-1.647,-0.526,0.0,-1.176,-0.962,0.0,-0.706,-0.895,0.0,-0.235,-0.361,0.0,0.235,0.361,0.0,0.706,0.895,0.0,1.176,0.962,0.0,1.647,0.526,0.0,2.118,-0.184,0.0,2.588,-0.798,0.0,3.059,-0.996,0.0,3.529,-0.674,0.0,4.0,0.0,0.0,-4.100,-1.0,0.0,-4.0,-1.0,0.0,-3.529,-0.739,0.0,-3.059,-0.092,0.0,-2.588,0.603,0.0,-2.118,0.983,0.0,-1.647,0.850,0.0,-1.176,0.274,0.0,-0.706,-0.446,0.0,-0.235,-0.932,0.0,0.235,-0.932,0.0,0.706,-0.446,0.0,1.176,0.274,0.0,1.647,0.850,0.0,2.118,0.983,0.0,2.588,0.603,0.0,3.059,-0.092,0.0,3.529,-0.739,0.0,4.0,-1.0,0.0,-4.100,0.0,0.0,-4.0,0.0,0.0,-3.529,-0.674,0.0,-3.059,-0.996,0.0,-2.588,-0.798,0.0,-2.118,-0.184,0.0,-1.647,0.526,0.0,-1.176,0.962,0.0,-0.706,0.895,0.0,-0.235,0.361,0.0,0.235,-0.361,0.0,0.706,-0.895,0.0,1.176,-0.962,0.0,1.647,-0.526,0.0,2.118,0.184,0.0,2.588,0.798,0.0,3.059,0.996,0.0,3.529,0.674,0.0,4.0,0.0,0.0,-4.100,1.0,0.0,-4.0,1.0,0.0,-3.529,0.739,0.0,-3.059,0.092,0.0,-2.588,-0.603,0.0,-2.118,-0.983,0.0,-1.647,-0.850,0.0,-1.176,-0.274,0.0,-0.706,0.446,0.0,-0.235,0.932,0.0,0.235,0.932,0.0,0.706,0.446,0.0,1.176,-0.274,0.0,1.647,-0.850,0.0,2.118,-0.983,0.0,2.588,-0.603,0.0,3.059,0.092,0.0,3.529,0.739,0.0,4.0,1.0,0.0,-4.100,0.0,0.0,-4.0,0.0,0.0,-3.529,0.674,0.0,-3.059,0.996,0.0,-2.588,0.798,0.0,-2.118,0.184,0.0,-1.647,-0.526,0.0,-1.176,-0.962,0.0,-0.706,-0.895,0.0,-0.235,-0.361,0.0,0.235,0.361,0.0,0.706,0.895,0.0,1.176,0.962,0.0,1.647,0.526,0.0,2.118,-0.184,0.0,2.588,-0.798,0.0,3.059,-0.996,0.0,3.529,-0.674,0.0,4.0,0.0,0.0});
			return Ondulation_4_198_keyValue;
		}

	/** The initialized model object, created within initialize() method. */
	private X3D x3dModel;

	/** 
	 * Provide a 
	 * <a href="https://dzone.com/articles/java-copy-shallow-vs-deep-in-which-you-will-swim" target="_blank">shallow copy</a>
	 * of the X3D model.
	 * @see <a href="https://www.web3d.org/specifications/java/javadoc/org/web3d/x3d/jsail/Core/X3D.html">X3D</a>
	 * @return MoveSeaByExtrusion14 model
	 */
	public X3D getX3dModel()
	{	  
		return x3dModel;
	}
	   
    /** 
     * Default main() method provided for test purposes, uses CommandLine to set global ConfigurationProperties for this object.
     * @param args array of input parameters, provided as arguments
     * @see <a href="https://www.web3d.org/specifications/java/javadoc/org/web3d/x3d/jsail/Core/X3D.html#handleArguments-java.lang.String:A-">X3D.handleArguments(args)</a>
     * @see <a href="https://www.web3d.org/specifications/java/javadoc/org/web3d/x3d/jsail/Core/X3D.html#validationReport--">X3D.validationReport()</a>
     * @see <a href="https://www.web3d.org/specifications/java/javadoc/org/web3d/x3d/jsail/CommandLine.html">CommandLine</a>
     * @see <a href="https://www.web3d.org/specifications/java/javadoc/org/web3d/x3d/jsail/CommandLine.html#USAGE">CommandLine.USAGE</a>
     * @see <a href="https://www.web3d.org/specifications/java/javadoc/org/web3d/x3d/jsail/ConfigurationProperties.html">ConfigurationProperties</a>
     */
    public static void main(String args[])
    {
        System.out.println("Build this X3D model, showing validation diagnostics...");
        X3D thisExampleX3dModel = new MoveSeaByExtrusion14().getX3dModel();
//      System.out.println("X3D model construction complete.");
	
        // next handle command line arguments
        boolean hasArguments = (args != null) && (args.length > 0);
        boolean validate = true; // default
        boolean argumentsLoadNewModel = false;
        String  fileName = new String();

        if (args != null)
        {
                for (String arg : args)
                {
                        if (arg.toLowerCase().startsWith("-v") || arg.toLowerCase().contains("validate"))
                        {
                                validate = true; // making sure
                        }
                        if (arg.toLowerCase().endsWith(X3D.FILE_EXTENSION_X3D) ||
                                arg.toLowerCase().endsWith(X3D.FILE_EXTENSION_CLASSICVRML) ||
                                arg.toLowerCase().endsWith(X3D.FILE_EXTENSION_X3DB) ||
                                arg.toLowerCase().endsWith(X3D.FILE_EXTENSION_VRML97) ||
                                arg.toLowerCase().endsWith(X3D.FILE_EXTENSION_EXI) ||
                                arg.toLowerCase().endsWith(X3D.FILE_EXTENSION_GZIP) ||
                                arg.toLowerCase().endsWith(X3D.FILE_EXTENSION_ZIP) ||
                                arg.toLowerCase().endsWith(X3D.FILE_EXTENSION_HTML) ||
                                arg.toLowerCase().endsWith(X3D.FILE_EXTENSION_XHTML))
                        {
                                argumentsLoadNewModel = true;
                                fileName = arg;
                        }
                }
        }
        if      (argumentsLoadNewModel)
                System.out.println("WARNING: \"Savage.Environment.SeaState.MoveSeaByExtrusion14\" model invocation is attempting to load file \"" + fileName + "\" instead of simply validating itself... file loading ignored.");
        else if (hasArguments) // if no arguments provided, this method produces usage warning
                thisExampleX3dModel.handleArguments(args);
	
        if (validate)
        {
            //  System.out.println("--- TODO fix duplicated outputs ---"); // omit when duplicated outputs problem is solved/refactored
		String validationResults = thisExampleX3dModel.validationReport();
            //  System.out.println("-----------------------------------"); // omit when duplicated outputs problem is solved/refactored
                System.out.print("Savage.Environment.SeaState.MoveSeaByExtrusion14 self-validation test confirmation: ");
                if (!validationResults.equals("success"))
                    System.out.println();
                System.out.println(validationResults.trim());

                // experimental: test X3DJSAIL output files
                // Environment/SeaState/MoveSeaByExtrusion14_JavaExport.* file validation is checked when building X3D Example Archives
                String filenameX3D  = "Environment/SeaState/MoveSeaByExtrusion14_JavaExport.x3d"; 
                String filenameX3DV = "Environment/SeaState/MoveSeaByExtrusion14_JavaExport.x3dv"; 
                String filenameJSON = "Environment/SeaState/MoveSeaByExtrusion14_JavaExport.json";
                thisExampleX3dModel.toFileX3D        (filenameX3D);
                thisExampleX3dModel.toFileClassicVRML(filenameX3DV);
// TODO         thisExampleX3dModel.toFileJSON       (filenameJSON);
        }
    }
}
