package Savage.Scenarios.TankManeuver;

import org.web3d.x3d.jsail.Core.*;
import org.web3d.x3d.jsail.EnvironmentalEffects.*;
import org.web3d.x3d.jsail.EventUtilities.*;
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.Lighting.*;
import org.web3d.x3d.jsail.Navigation.*;
import org.web3d.x3d.jsail.Networking.*;
import org.web3d.x3d.jsail.Shape.*;
import org.web3d.x3d.jsail.Time.*;

// Javadoc metadata annotations follow, see below for X3DJSAIL Java source code.
/**
 * <p> FIG 3-11A-C from FM 17-15 Tank Platoon. Depicts a platoon of tanks maneuvering upon an inferior force, consisting of a lone BMP. </p>
 <p> Related links: Catalog page <a href="../../../../Scenarios/TankManeuver/TankManeuverIndex.html" target="_blank">TankManeuver</a>,  source <a href="../../../../Scenarios/TankManeuver/TankManeuver.java">TankManeuver.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="../../../../Scenarios/TankManeuver/TankManeuver.x3d">TankManeuver.x3d</a> </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> description </i> </td>
			<td> FIG 3-11A-C from FM 17-15 Tank Platoon. Depicts a platoon of tanks maneuvering upon an inferior force, consisting of a lone BMP. </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> creator </i> </td>
			<td> Michael W. Martin </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> created </i> </td>
			<td> 1 September 2004 </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> reference </i> </td>
			<td> <a href="https://www.fas.org/man/dod-101/sys/land/m1.htm" target="_blank">https://www.fas.org/man/dod-101/sys/land/m1.htm</a> </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> reference </i> </td>
			<td> <a href="https://www.fas.org/man/dod-101/sys/land/row/bmp-1.htm" target="_blank">https://www.fas.org/man/dod-101/sys/land/row/bmp-1.htm</a> </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> reference </i> </td>
			<td> <a href="http://www.globalsecurity.org/military/library/policy/army/fm/17-15/chp3.htm" target="_blank">http://www.globalsecurity.org/military/library/policy/army/fm/17-15/chp3.htm</a> </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> reference </i> </td>
			<td> fig311A.JPG </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> reference </i> </td>
			<td> fig311B.JPG </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> reference </i> </td>
			<td> fig311C.JPG </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> reference </i> </td>
			<td> m1a1-line.gif </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> reference </i> </td>
			<td> bmp-1-DMSC9112086_JPG.jpg </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> reference </i> </td>
			<td> bmp-a-001.gif </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> reference </i> </td>
			<td> <a href="../../../../Scenarios/TankManeuver/SRTG.java">SRTG.java</a> </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> reference </i> </td>
			<td> SRTG.bat </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> subject </i> </td>
			<td> M1A2 BMP-1 maneuver "FM 15-17" </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/Scenarios/TankManeuver/TankManeuver.x3d" target="_blank">https://www.web3d.org/x3d/content/examples/Savage/Scenarios/TankManeuver/TankManeuver.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="../../../../Scenarios/TankManeuver/../../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 Michael W. Martin
 */

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

	/** Create and initialize the X3D model for this object. */
	public final void initialize()
	{
            try { // catch-all
  x3dModel = new X3D().setProfile(X3D.PROFILE_INTERACTIVE).setVersion(X3D.VERSION_3_0)
  .setHead(new head()
    .addMeta(new meta().setName(meta.NAME_TITLE      ).setContent("TankManeuver.x3d"))
    .addMeta(new meta().setName(meta.NAME_DESCRIPTION).setContent("FIG 3-11A-C from FM 17-15 Tank Platoon. Depicts a platoon of tanks maneuvering upon an inferior force, consisting of a lone BMP."))
    .addMeta(new meta().setName(meta.NAME_CREATOR    ).setContent("Michael W. Martin"))
    .addMeta(new meta().setName(meta.NAME_CREATED    ).setContent("1 September 2004"))
    .addMeta(new meta().setName(meta.NAME_MODIFIED   ).setContent("20 October 2019"))
    .addMeta(new meta().setName(meta.NAME_REFERENCE  ).setContent("https://www.fas.org/man/dod-101/sys/land/m1.htm"))
    .addMeta(new meta().setName(meta.NAME_REFERENCE  ).setContent("https://www.fas.org/man/dod-101/sys/land/row/bmp-1.htm"))
    .addMeta(new meta().setName(meta.NAME_REFERENCE  ).setContent("http://www.globalsecurity.org/military/library/policy/army/fm/17-15/chp3.htm"))
    .addMeta(new meta().setName(meta.NAME_REFERENCE  ).setContent("fig311A.JPG"))
    .addMeta(new meta().setName(meta.NAME_REFERENCE  ).setContent("fig311B.JPG"))
    .addMeta(new meta().setName(meta.NAME_REFERENCE  ).setContent("fig311C.JPG"))
    .addMeta(new meta().setName(meta.NAME_REFERENCE  ).setContent("m1a1-line.gif"))
    .addMeta(new meta().setName(meta.NAME_REFERENCE  ).setContent("bmp-1-DMSC9112086_JPG.jpg"))
    .addMeta(new meta().setName(meta.NAME_REFERENCE  ).setContent("bmp-a-001.gif"))
    .addMeta(new meta().setName(meta.NAME_REFERENCE  ).setContent("SRTG.java"))
    .addMeta(new meta().setName(meta.NAME_REFERENCE  ).setContent("SRTG.bat"))
    .addMeta(new meta().setName(meta.NAME_SUBJECT    ).setContent("M1A2 BMP-1 maneuver \"FM 15-17\""))
    .addMeta(new meta().setName(meta.NAME_IDENTIFIER ).setContent("https://www.web3d.org/x3d/content/examples/Savage/Scenarios/TankManeuver/TankManeuver.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()
    .addChild(new WorldInfo().setTitle("TankManeuver.x3d"))
    .addChild(new NavigationInfo().setHeadlight(false))
    .addChild(new TimeSensor("Clock").setCycleInterval(20).setLoop(true))
    .addChild(new Viewpoint().setDescription("Start View").setJump(false).setOrientation(-0.58,0.58,0.58,2.09).setPosition(1.0,98.0,0.0))
    .addChild(new Viewpoint().setDescription("View whole field").setJump(false).setOrientation(0.0,0.785,0.785,3.14).setPosition(0.0,74.0,0.0))
    .addChild(new Viewpoint().setDescription("1st Three-quarters View").setJump(false).setOrientation(0.0,0.972,0.236,3.14).setPosition(0.0,38.0,-70.0))
    .addChild(new Viewpoint().setDescription("2nd Three-quarters View").setJump(false).setOrientation(-0.3925,-0.875,-0.3925,1.785).setPosition(-65.0,60.0,0.0))
    .addChild(new Viewpoint().setDescription("3rd Three-quarters View").setJump(false).setOrientation(-1.0,0.0,0.0,.58875).setPosition(0.0,38.0,70.0))
    .addChild(new Viewpoint().setDescription("4th Three-quarters View").setJump(false).setOrientation(-0.3925,0.875,0.3925,1.785).setPosition(65.0,60.0,0.0))
    .addChild(new Transform("Tank1").setRotation(0.0,1.0,0.0,1.57).setTranslation(-28.0,.39,0.0)
      .addChild(new Transform("Tank1Rot")
        .addChild(new Inline("M1A2Hull").setUrl(new String[] {"M1A2Hull.wrl","https://www.web3d.org/x3d/content/examples/Savage/Scenarios/TankManeuver/M1A2Hull.wrl"}))
        .addChild(new Transform("Turret1")
          .addChild(new Inline("M1A2Turret").setUrl(new String[] {"M1A2Turret.wrl","https://www.web3d.org/x3d/content/examples/Savage/Scenarios/TankManeuver/M1A2Turret.wrl"}))
          .addChild(new Viewpoint("View1").setDescription("Tank 1").setJump(false).setOrientation(0.0,1.0,0.0,3.14).setPosition(0.0,2.0,-15.0)))))
    .addChild(new Transform("Tank2").setRotation(0.0,1.0,0.0,1.57).setTranslation(-38.0,.39,10.0)
      .addChild(new Transform("Tank2Rot")
        .addChild(new Inline().setUSE("M1A2Hull"))
        .addChild(new Transform("Turret2")
          .addChild(new Inline().setUSE("M1A2Turret"))
          .addChild(new Viewpoint("View2").setDescription("Tank 2").setJump(false).setOrientation(0.0,1.0,0.0,3.14).setPosition(0.0,2.0,-15.0)))))
    .addChild(new Transform("Tank3").setRotation(0.0,1.0,0.0,1.57).setTranslation(-38.0,.39,-20.0)
      .addChild(new Transform("Tank3Rot")
        .addChild(new Inline().setUSE("M1A2Hull"))
        .addChild(new Transform("Turret3")
          .addChild(new Inline().setUSE("M1A2Turret"))
          .addChild(new Viewpoint("View3").setDescription("Tank 3").setJump(false).setOrientation(0.0,1.0,0.0,3.14).setPosition(0.0,2.0,-15.0))
          .addChild(new Transform().setScale(.1,.1,.1).setTranslation(-.15,0.63,1.6)
            .addChild(new Transform("MGFire").setScale(.01,.01,.01).setTranslation(0.0,0.0,-1.0)
              .addChild(new Inline("GunFire").setUrl(new String[] {"GunFire.wrl","https://www.web3d.org/x3d/content/examples/Savage/Scenarios/TankManeuver/GunFire.wrl"})))
            .addChild(new Viewpoint().setDescription("MG Fire").setJump(false).setOrientation(0.0,1.0,0.0,-.785).setPosition(-40.0,0.0,40.0))))))
    .addChild(new Transform("Tank4").setRotation(0.0,1.0,0.0,1.57).setTranslation(-28.0,.39,-10.0)
      .addChild(new Transform("Tank4Rot")
        .addChild(new Inline().setUSE("M1A2Hull"))
        .addChild(new Transform("Turret4")
          .addChild(new Inline().setUSE("M1A2Turret"))
          .addChild(new Viewpoint("View4").setDescription("Tank 4").setJump(false).setOrientation(0.0,1.0,0.0,3.14).setPosition(0.0,2.0,-15.0))
          .addChild(new Transform().setTranslation(0.0,0.63,3.87)
            .addChild(new Transform("TankFire").setScale(.01,.01,.01).setTranslation(0.0,0.0,-1.0)
              .addChild(new Inline().setUSE("GunFire")))
            .addChild(new Viewpoint().setDescription("Tank Fire").setJump(false).setOrientation(0.0,1.0,0.0,-.9).setPosition(-6.0,1.0,6.0))))))
    .addChild(new Transform().setRotation(0.0,1.0,0.0,-2.355).setTranslation(35.0,2.0,25.0)
      .addChild(new Switch("BMPSwitch").setWhichChoice(0)
        .addChild(new Transform()
          .addChild(new Transform("BMPRot")
            .addChild(new Inline().setUrl(new String[] {"BMP1Hull.wrl","https://www.web3d.org/x3d/content/examples/Savage/Scenarios/TankManeuver/BMP1Hull.wrl"}))
            .addChild(new Transform()
              .addChild(new Inline().setUrl(new String[] {"BMP1Turret.wrl","https://www.web3d.org/x3d/content/examples/Savage/Scenarios/TankManeuver/BMP1Turret.wrl"}))))
          .addChild(new Transform("ExplosionTran").setScale(.1,.1,.1)
            .addChild(new Inline().setUrl(new String[] {"Explosion.wrl","https://www.web3d.org/x3d/content/examples/Savage/Scenarios/TankManeuver/Explosion.wrl"}))))
        .addChild(new Transform()
          .addChild(new Transform("SmokePos").setScale(1.5,1.5,1.5).setTranslation(0.0,.25,0.0)
            .addChild(new Inline().setUrl(new String[] {"Smoke.wrl","https://www.web3d.org/x3d/content/examples/Savage/Scenarios/TankManeuver/Smoke.wrl"})))
          .addChild(new Inline().setUrl(new String[] {"DestroyedBMP.wrl","https://www.web3d.org/x3d/content/examples/Savage/Scenarios/TankManeuver/DestroyedBMP.wrl"}))))
      .addChild(new Viewpoint("ViewBMP").setDescription("BMP").setJump(false).setOrientation(0.0,1.0,0.0,3.14).setPosition(0.0,2.0,-10.0)))
    .addChild(new Viewpoint().setDescription("Enemy Position 1").setJump(false).setOrientation(0.0,-0.984,-0.177,3.1411).setPosition(35.0,7.0,14.0))
    .addChild(new Viewpoint().setDescription("Enemy Position 3").setJump(false).setOrientation(-0.174,-0.969,-0.174,1.601).setPosition(24.0,7.0,25.0))
    .addChild(new PointLight().setAmbientIntensity(.4).setIntensity(.7).setLocation(0.0,100.0,0.0).setRadius(200))
    .addChild(new Background().setGroundColor(new MFColor(new double[] {.5,.5,.5})).setSkyColor(new MFColor(new double[] {.4,.4,1.0,.9,.9,1.0})))
    .addChild(new Transform().setRotation(0.0,1.0,0.0,3.14).setTranslation(40.0,0.0,30.0)
      .addChild(new Shape()
        .setAppearance(new Appearance()
          .setMaterial(new Material().setDiffuseColor(.2,1.0,.2).setSpecularColor(.4,.3,0.0)))
        .setGeometry(new ElevationGrid().setCcw(false).setCreaseAngle(3.14159).setSolid(false).setXDimension(80).setZDimension(60).setHeight(getElevationGrid_5_83_height()))))
    .addChild(new Group()
      .addChild(new Transform().setRotation(0.0,1.0,0.0,.785).setScale(2.0,2.0,2.0).setTranslation(38.0,2.3,19.0)
        .addChild(new Inline("Tree1").setUrl(new String[] {"Tree1.wrl","https://www.web3d.org/x3d/content/examples/Savage/Scenarios/TankManeuver/Tree1.wrl"})))
      .addChild(new Transform().setRotation(0.0,1.0,0.0,1.57).setScale(2.0,2.0,2.0).setTranslation(23.0,2.0,27.0)
        .addChild(new Inline("Tree2").setUrl(new String[] {"Tree2.wrl","https://www.web3d.org/x3d/content/examples/Savage/Scenarios/TankManeuver/Tree2.wrl"})))
      .addChild(new Transform().setRotation(0.0,1.0,0.0,2.355).setScale(2.0,2.0,2.0).setTranslation(22.0,1.3,23.0)
        .addChild(new Inline("Tree3").setUrl(new String[] {"Tree3.wrl","https://www.web3d.org/x3d/content/examples/Savage/Scenarios/TankManeuver/Tree3.wrl"})))
      .addChild(new Transform().setRotation(0.0,1.0,0.0,3.14).setScale(2.0,2.0,2.0).setTranslation(20.0,1.6,26.0)
        .addChild(new Inline("Tree4").setUrl(new String[] {"Tree4.wrl","https://www.web3d.org/x3d/content/examples/Savage/Scenarios/TankManeuver/Tree4.wrl"})))
      .addChild(new Transform().setScale(2.0,2.0,2.0).setTranslation(37.0,1.95,15.0)
        .addChild(new Inline().setUSE("Tree1")))
      .addChild(new Transform().setScale(2.0,2.0,2.0).setTranslation(17.0,1.2,28.0)
        .addChild(new Inline().setUSE("Tree2")))
      .addChild(new Transform().setScale(2.0,2.0,2.0).setTranslation(16.0,.7,24.0)
        .addChild(new Inline().setUSE("Tree3")))
      .addChild(new Transform().setScale(2.0,2.0,2.0).setTranslation(38.0,2.0,16.0)
        .addChild(new Inline().setUSE("Tree4"))))
    .addChild(new Group()
      .addChild(new PositionInterpolator("Tank2Path").setKey(new double[] {0.0,0.015,0.03,0.09,0.105,0.12,0.21,0.99}).setKeyValue(new MFVec3f(new double[] {-38.0,.39,10.0,-36.5,.39,10.5,-36.0,.39,12.0,-32.0,.39,20.0,-31.5,.39,21.5,-30.0,.39,22.0,-18.0,.39,22.0,-18.0,.39,22.0})))
      .addChild(new OrientationInterpolator("Tank2Orient").setKey(new double[] {0.0,0.015,0.03,0.09,0.105,0.12,0.21,0.99}).setKeyValue(new MFRotation(new double[] {0.0,1.0,0.0,0.0,0.0,1.0,0.0,-.785,0.0,1.0,0.0,-1.038,0.0,1.0,0.0,-1.038,0.0,1.0,0.0,-.785,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0})))
      .addChild(new OrientationInterpolator("Turret2Orient").setKey(new double[] {0.0,0.015,0.03,0.09,0.105,0.12,0.21,0.99}).setKeyValue(new MFRotation(new double[] {0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,1.038,0.0,1.0,0.0,.785,0.0,1.0,0.0,0.0,0.0,1.0,0.0,-.06,0.0,1.0,0.0,-.06})))
      .addChild(new ROUTE().setFromNode("Clock").setFromField("fraction_changed").setToNode("Tank2Path").setToField("set_fraction"))
      .addChild(new ROUTE().setFromNode("Tank2Path").setFromField("value_changed").setToNode("Tank2").setToField("set_translation"))
      .addChild(new ROUTE().setFromNode("Clock").setFromField("fraction_changed").setToNode("Tank2Orient").setToField("set_fraction"))
      .addChild(new ROUTE().setFromNode("Tank2Orient").setFromField("value_changed").setToNode("Tank2Rot").setToField("set_rotation"))
      .addChild(new ROUTE().setFromNode("Clock").setFromField("fraction_changed").setToNode("Turret2Orient").setToField("set_fraction"))
      .addChild(new ROUTE().setFromNode("Turret2Orient").setFromField("value_changed").setToNode("Turret2").setToField("set_rotation")))
    .addChild(new Group()
      .addChild(new PositionInterpolator("Tank1Path").setKey(new double[] {0.0,0.015,0.03,0.08,0.095,0.11,0.12,0.99}).setKeyValue(new MFVec3f(new double[] {-28.0,.39,0.0,-26.5,.39,0.5,-26.0,.39,2.0,-22.0,.39,8.0,-21.5,.39,9.5,-20.0,.39,10.0,-18.0,.39,10.0,-18.0,.39,10.0})))
      .addChild(new OrientationInterpolator("Tank1Orient").setKey(new double[] {0.0,0.015,0.03,0.08,0.095,0.11,0.12,0.99}).setKeyValue(new MFRotation(new double[] {0.0,1.0,0.0,0.0,0.0,1.0,0.0,-.785,0.0,1.0,0.0,-1.038,0.0,1.0,0.0,-1.038,0.0,1.0,0.0,-.785,0.0,1.0,0.0,0.0,0.0,1.0,0.0,-.025,0.0,1.0,0.0,-.025})))
      .addChild(new OrientationInterpolator("Turret1Orient").setKey(new double[] {0.0,0.015,0.03,0.08,0.095,0.11,0.12,0.99}).setKeyValue(new MFRotation(new double[] {0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,.785,0.0,1.0,0.0,.785,0.0,1.0,0.0,.785,0.0,1.0,0.0,0.0,0.0,1.0,0.0,-.25,0.0,1.0,0.0,-.25})))
      .addChild(new ROUTE().setFromNode("Clock").setFromField("fraction_changed").setToNode("Tank1Path").setToField("set_fraction"))
      .addChild(new ROUTE().setFromNode("Tank1Path").setFromField("value_changed").setToNode("Tank1").setToField("set_translation"))
      .addChild(new ROUTE().setFromNode("Clock").setFromField("fraction_changed").setToNode("Tank1Orient").setToField("set_fraction"))
      .addChild(new ROUTE().setFromNode("Tank1Orient").setFromField("value_changed").setToNode("Tank1Rot").setToField("set_rotation"))
      .addChild(new ROUTE().setFromNode("Clock").setFromField("fraction_changed").setToNode("Turret1Orient").setToField("set_fraction"))
      .addChild(new ROUTE().setFromNode("Turret1Orient").setFromField("value_changed").setToNode("Turret1").setToField("set_rotation")))
    .addChild(new Group()
      .addChild(new PositionInterpolator("Tank3Path").setKey(new double[] {0.0,0.015,0.075,0.09,0.25,0.27,0.295,0.32,0.99}).setKeyValue(new MFVec3f(new double[] {-38.0,.39,-20.0,-37.5,.39,-20.5,-30.5,.39,-26.5,-29.0,.39,-27.0,-5.0,.39,-27.0,-3.0,.39,-26.0,-.5,1.09,-23.5,2.0,1.39,-21.0,2.0,1.39,-21.0})))
      .addChild(new OrientationInterpolator("Tank3Orient").setKey(new double[] {0.0,0.015,0.075,0.09,0.25,0.27,0.295,0.32,0.99}).setKeyValue(new MFRotation(new double[] {0.0,1.0,0.0,0.0,0.0,1.0,0.0,.709,0.0,1.0,0.0,.709,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,-0.785,-0.23,-0.97,-0.09,0.81,0.0,1.0,0.0,-0.785,0.0,1.0,0.0,-0.785})))
      .addChild(new OrientationInterpolator("Turret3Orient").setKey(new double[] {0.0,0.015,0.075,0.09,0.25,0.27,0.295,0.32,0.38,0.44,.50,.56,.60,.66,0.99}).setKeyValue(new MFRotation(new double[] {0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,-.785,0.0,1.0,0.0,-.785,0.0,1.0,0.0,-.785,0.0,1.0,0.0,0.0,0.0,1.0,0.0,-.11,0.0,1.0,0.0,-.11,0.0,1.0,0.0,-.25,0.0,1.0,0.0,-.11,0.0,1.0,0.0,-.25,0.0,1.0,0.0,-.11,0.0,1.0,0.0,-.25,0.0,1.0,0.0,-.11,0.0,1.0,0.0,-.11})))
      .addChild(new ROUTE().setFromNode("Clock").setFromField("fraction_changed").setToNode("Tank3Path").setToField("set_fraction"))
      .addChild(new ROUTE().setFromNode("Tank3Path").setFromField("value_changed").setToNode("Tank3").setToField("set_translation"))
      .addChild(new ROUTE().setFromNode("Clock").setFromField("fraction_changed").setToNode("Tank3Orient").setToField("set_fraction"))
      .addChild(new ROUTE().setFromNode("Tank3Orient").setFromField("value_changed").setToNode("Tank3Rot").setToField("set_rotation"))
      .addChild(new ROUTE().setFromNode("Clock").setFromField("fraction_changed").setToNode("Turret3Orient").setToField("set_fraction"))
      .addChild(new ROUTE().setFromNode("Turret3Orient").setFromField("value_changed").setToNode("Turret3").setToField("set_rotation")))
    .addChild(new Group()
      .addChild(new PositionInterpolator("Tank4Path").setKey(new double[] {0.0,0.015,0.075,0.09,0.13,0.145,0.99}).setKeyValue(new MFVec3f(new double[] {-28.0,.39,-10.0,-27.5,.39,-10.5,-19.5,.39,-14.5,-18.0,.39,-15.0,-11.5,.39,-15.0,-10.0,.39,-14.0,-10.0,.39,-14.0})))
      .addChild(new OrientationInterpolator("Tank4Orient").setKey(new double[] {0.0,0.015,0.075,0.09,0.13,0.145,0.99}).setKeyValue(new MFRotation(new double[] {0.0,1.0,0.0,0.0,0.0,1.0,0.0,.32,0.0,1.0,0.0,.32,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,-.58,0.0,1.0,0.0,-.58})))
      .addChild(new OrientationInterpolator("Turret4Orient").setKey(new double[] {0.0,0.015,0.075,0.09,0.13,0.145,0.99}).setKeyValue(new MFRotation(new double[] {0.0,1.0,0.0,0.0,0.0,1.0,0.0,-.8366,0.0,1.0,0.0,-.9472,0.0,1.0,0.0,-.6465,0.0,1.0,0.0,-.7104,0.0,1.0,0.0,-0.1341,0.0,1.0,0.0,-0.1341})))
      .addChild(new ROUTE().setFromNode("Clock").setFromField("fraction_changed").setToNode("Tank4Path").setToField("set_fraction"))
      .addChild(new ROUTE().setFromNode("Tank4Path").setFromField("value_changed").setToNode("Tank4").setToField("set_translation"))
      .addChild(new ROUTE().setFromNode("Clock").setFromField("fraction_changed").setToNode("Tank4Orient").setToField("set_fraction"))
      .addChild(new ROUTE().setFromNode("Tank4Orient").setFromField("value_changed").setToNode("Tank4Rot").setToField("set_rotation"))
      .addChild(new ROUTE().setFromNode("Clock").setFromField("fraction_changed").setToNode("Turret4Orient").setToField("set_fraction"))
      .addChild(new ROUTE().setFromNode("Turret4Orient").setFromField("value_changed").setToNode("Turret4").setToField("set_rotation")))
    .addChild(new Group()
      .addChild(new IntegerSequencer("BMPExplosion").setKey(new double[] {0.0,.5}).setKeyValue(new int[] {0,1}))
      .addChild(new ROUTE().setFromNode("Clock").setFromField("fraction_changed").setToNode("BMPExplosion").setToField("set_fraction"))
      .addChild(new ROUTE().setFromNode("BMPExplosion").setFromField("value_changed").setToNode("BMPSwitch").setToField("set_whichChoice")))
    .addChild(new Group()
      .addChild(new PositionInterpolator("GrowSmoke").setKey(new double[] {0.0,.5,.75,.99}).setKeyValue(new MFVec3f(new double[] {.1,.01,.1,.1,.01,.1,1.0,1.0,1.0,1.0,1.0,1.0})))
      .addChild(new ROUTE().setFromNode("Clock").setFromField("fraction_changed").setToNode("GrowSmoke").setToField("set_fraction"))
      .addChild(new ROUTE().setFromNode("GrowSmoke").setFromField("value_changed").setToNode("SmokePos").setToField("set_scale")))
    .addChild(new Group()
      .addChild(new PositionInterpolator("GrowExplosion").setKey(new double[] {0.0,.48,.49,.5}).setKeyValue(new MFVec3f(new double[] {.01,.01,.01,.01,.01,.01,1.0,1.0,1.0,.01,.01,.01})))
      .addChild(new ROUTE().setFromNode("Clock").setFromField("fraction_changed").setToNode("GrowExplosion").setToField("set_fraction"))
      .addChild(new ROUTE().setFromNode("GrowExplosion").setFromField("value_changed").setToNode("ExplosionTran").setToField("set_scale")))
    .addChild(new Group()
      .addChild(new PositionInterpolator("TankFirePos").setKey(new double[] {0.0,.445,.45,.455,.46,.48,.99}).setKeyValue(new MFVec3f(new double[] {0.0,0.0,-1.0,0.0,0.0,-.5,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,59.0,0.0,0.0,59.0})))
      .addChild(new PositionInterpolator("TankFireSize").setKey(new double[] {0.0,.445,.45,.455,.46,.48,.99}).setKeyValue(new MFVec3f(new double[] {.001,.001,.001,.001,.001,.001,2.0,2.0,0.1,1.5,1.5,1.5,.1,.1,3.0,.1,.1,.1,.1,.1,.1})))
      .addChild(new ROUTE().setFromNode("Clock").setFromField("fraction_changed").setToNode("TankFireSize").setToField("set_fraction"))
      .addChild(new ROUTE().setFromNode("TankFireSize").setFromField("value_changed").setToNode("TankFire").setToField("set_scale"))
      .addChild(new ROUTE().setFromNode("Clock").setFromField("fraction_changed").setToNode("TankFirePos").setToField("set_fraction"))
      .addChild(new ROUTE().setFromNode("TankFirePos").setFromField("value_changed").setToNode("TankFire").setToField("set_translation")))
    .addChild(new Group()
      .addChild(new PositionInterpolator("MGFirePos").setKey(new double[] {0.0,0.315,0.32,0.68,0.685,0.99}).setKeyValue(new MFVec3f(new double[] {0.0,0.0,-.5,0.0,0.0,-.3,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-1.0,0.0,0.0,-1.0})))
      .addChild(new PositionInterpolator("MGFireSize").setKey(new double[] {0.0,.315,0.32,0.325,0.33,0.33,0.335,0.34,0.34,0.345,0.35,0.35,0.355,0.36,0.36,0.365,0.37,0.37,0.375,0.38,0.38,0.385,0.39,0.39,0.395,0.4,0.4,0.405,0.41,0.41,0.415,0.42,0.42,0.425,0.43,0.43,0.435,0.44,0.44,0.445,0.45,0.45,0.455,0.46,0.46,0.465,0.47,0.47,0.475,0.48,0.48,0.485,0.49,0.49,0.495,0.5,0.5,0.505,0.51,0.51,0.515,0.52,0.52,0.525,0.53,0.53,0.535,0.54,0.54,0.545,0.55,0.55,0.555,0.56,0.56,0.565,0.57,0.57,0.575,0.58,0.58,0.585,0.59,0.59,0.595,0.6,0.6,0.605,0.61,0.61,0.615,0.62,0.62,0.625,0.63,0.63,0.635,0.64,0.64,0.645,0.65,0.65,0.655,0.66,0.66,0.665,0.67,0.67,0.675,0.68,.685,.99}).setKeyValue(getMGFireSize_4_163_keyValue()))
      .addChild(new ROUTE().setFromNode("Clock").setFromField("fraction_changed").setToNode("MGFireSize").setToField("set_fraction"))
      .addChild(new ROUTE().setFromNode("MGFireSize").setFromField("value_changed").setToNode("MGFire").setToField("set_scale"))
      .addChild(new ROUTE().setFromNode("Clock").setFromField("fraction_changed").setToNode("MGFirePos").setToField("set_fraction"))
      .addChild(new ROUTE().setFromNode("MGFirePos").setFromField("value_changed").setToNode("MGFire").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[] getElevationGrid_5_83_height_1()
		{
			double[] value = {2.0,2.0,2.0,2.0,2.0,2.006326531,2.037201166,2.119533528,2.266763848,2.454402332,2.625364431,2.700991254,2.650670554,2.498688047,2.315335277,2.153411079,2.052099125,2.009183673,2.0,2.0,1.983819242,1.916938776,1.751253644,1.501399417,1.242857143,1.074752187,0.999241983,0.954227405,0.862040816,0.686559767,0.446501458,0.214693878,0.066997085,0.009854227,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.001428571,0.004285714,0.008571429,0.01,0.008571429,0.004285714,0.001428571,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2.0,2.0,2.0,2.0,2.0,2.009428571,2.047612245,2.144918367,2.308142857,2.507142857,2.681142857,2.762387755,2.736,2.603714286,2.420857143,2.232489796,2.093469388,2.021428571,2.0,1.999,1.977673469,1.907755102,1.742653061,1.508653061,1.255897959,1.083,0.982897959,0.915387755,0.802183673,0.622653061,0.403081633,0.200612245,0.068571429,0.011326531,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.004,0.012,0.027,0.034,0.033,0.018,0.007,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2.0,2.0,2.0,2.0,2.0,2.013,2.061428571,2.182714286,2.373714286,2.598,2.778285714,2.864,2.841285714,2.719,2.526714286,2.310714286,2.131428571,2.035,1.999,1.993,1.958571429,1.868857143,1.686571429,1.452142857,1.209285714,1.043571429,0.924428571,0.816571429,0.658857143,0.462571429,0.269142857,0.120285714,0.036571429,0.005428571,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.001,0.013,0.036,0.076,0.094,0.093,0.052,0.022,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2.0,2.0,2.0,2.0,2.0,2.013,2.061,2.181,2.369,2.59,2.77,2.863,2.849,2.732,2.535,2.314,2.131,2.035,1.996,1.978,1.917,1.792,1.588,1.355,1.134,0.971,0.824,0.664,0.47,0.28,0.133,0.046,0.01,0.001,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.004,0.029,0.078,0.154,0.188,0.18,0.1,0.042,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2.006326531,2.009428571,2.013,2.013,2.009,2.013,2.045,2.131,2.275,2.451,2.613,2.707,2.71,2.604,2.422,2.224,2.073,1.998,1.965,1.93,1.836,1.674,1.453,1.233,1.04,0.872,0.691,0.485,0.286,0.133,0.046,0.01,0.001,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.001,0.004,0.009,0.013,0.014,0.022,0.063,0.147,0.259,0.308,0.278,0.154,0.06,0.001,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2.037201166,2.051040816,2.070428571,2.076,2.059,2.035,2.032,2.068,2.15,2.258,2.377,2.457,2.471,2.388,2.243,2.083,1.963,1.897,1.859,1.807,1.692,1.516,1.3,1.106,0.932,0.752,0.542,0.319,0.148,0.046,0.01,0.001,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.004,0.016,0.04,0.065,0.08,0.093,0.142,0.252,0.387,0.444,0.38,0.216,0.081,0.007,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2.120145773,2.154102041,2.205571429,2.226,2.188,2.114,2.053,2.032,2.057,2.107,2.173,2.222,2.232,2.175,2.067,1.93,1.807,1.711,1.648,1.584,1.478,1.324,1.14,0.973,0.803,0.609,0.391,0.19,0.066,0.01,0.001,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.01,0.04,0.103,0.173,0.227,0.255,0.305,0.414,0.543,0.589,0.488,0.291,0.115,0.022,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2.255276968,2.311693878,2.405285714,2.446,2.386,2.252,2.121,2.041,2.019,2.029,2.053,2.072,2.07,2.024,1.929,1.782,1.622,1.476,1.386,1.319,1.241,1.121,0.971,0.812,0.637,0.439,0.247,0.099,0.025,0.001,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.016,0.065,0.175,0.309,0.43,0.492,0.544,0.625,0.715,0.728,0.596,0.376,0.163,0.045,0.001,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2.393381924,2.466367347,2.593857143,2.65,2.576,2.393,2.204,2.074,2.016,2.004,2.009,2.009,1.991,1.929,1.809,1.626,1.429,1.26,1.166,1.109,1.052,0.942,0.794,0.613,0.434,0.259,0.126,0.04,0.007,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.019,0.08,0.221,0.409,0.602,0.729,0.806,0.86,0.89,0.853,0.693,0.462,0.223,0.075,0.007,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2.451895044,2.530326531,2.671428571,2.733,2.654,2.453,2.242,2.092,2.019,1.996,1.99,1.974,1.934,1.838,1.678,1.464,1.263,1.115,1.043,0.997,0.936,0.803,0.625,0.413,0.244,0.113,0.046,0.01,0.001,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.016,0.074,0.215,0.432,0.68,0.891,1.021,1.085,1.064,0.978,0.789,0.549,0.295,0.114,0.022,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2.393381924,2.466367347,2.593857143,2.65,2.576,2.393,2.204,2.074,2.011,1.984,1.957,1.91,1.832,1.699,1.517,1.307,1.14,1.033,0.985,0.931,0.841,0.673,0.472,0.256,0.115,0.031,0.01,0.001,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.01,0.056,0.173,0.388,0.662,0.954,1.156,1.269,1.233,1.115,0.895,0.637,0.37,0.157,0.042,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2.255276968,2.311693878,2.405285714,2.446,2.386,2.252,2.119,2.033,1.987,1.947,1.878,1.781,1.654,1.502,1.333,1.165,1.046,0.969,0.918,0.831,0.702,0.515,0.325,0.148,0.051,0.004,0.001,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.004,0.035,0.123,0.317,0.591,0.926,1.19,1.363,1.355,1.233,0.993,0.711,0.427,0.19,0.057,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2.120145773,2.154102041,2.205571429,2.226,2.188,2.113,2.042,1.994,1.945,1.871,1.745,1.597,1.433,1.288,1.154,1.036,0.942,0.86,0.778,0.656,0.502,0.328,0.183,0.073,0.022,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
			return value;
		}
		private double[] getElevationGrid_5_83_height_2()
		{
			double[] value = {0.0,0.0,0.0,0.0,0.001,0.02,0.084,0.244,0.498,0.83,1.129,1.345,1.385,1.285,1.047,0.753,0.454,0.205,0.063,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2.037201166,2.051040816,2.070428571,2.076,2.058,2.027,1.991,1.948,1.865,1.742,1.564,1.391,1.229,1.117,1.018,0.916,0.803,0.679,0.559,0.424,0.286,0.16,0.073,0.025,0.007,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.01,0.056,0.178,0.4,0.703,1.012,1.252,1.337,1.274,1.054,0.766,0.46,0.208,0.064,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2.006326531,2.009428571,2.013,2.012,2.002,1.982,1.938,1.865,1.733,1.569,1.371,1.213,1.088,1.012,0.929,0.803,0.643,0.464,0.323,0.206,0.119,0.053,0.016,0.004,0.001,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.004,0.035,0.124,0.311,0.583,0.889,1.148,1.264,1.235,1.034,0.759,0.454,0.205,0.063,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2.0,2.0,2.0,1.996,1.978,1.933,1.844,1.718,1.546,1.373,1.202,1.089,1.009,0.945,0.847,0.679,0.483,0.28,0.148,0.065,0.031,0.01,0.001,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.001,0.02,0.084,0.236,0.484,0.78,1.055,1.189,1.183,0.992,0.726,0.427,0.19,0.057,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2.0,2.0,2.0,1.99,1.953,1.863,1.715,1.531,1.343,1.192,1.076,1.005,0.945,0.86,0.729,0.531,0.334,0.154,0.058,0.01,0.004,0.001,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.01,0.057,0.177,0.402,0.681,0.963,1.103,1.105,0.916,0.657,0.37,0.157,0.042,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2.0,1.999,1.996,1.974,1.913,1.775,1.578,1.355,1.177,1.057,0.982,0.917,0.838,0.717,0.559,0.361,0.198,0.073,0.022,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.004,0.039,0.135,0.341,0.603,0.879,1.014,1.012,0.823,0.57,0.298,0.115,0.022,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.998571429,1.993,1.978,1.931,1.838,1.664,1.451,1.228,1.075,0.97,0.888,0.785,0.658,0.512,0.358,0.202,0.093,0.025,0.007,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.001,0.03,0.114,0.308,0.558,0.822,0.948,0.937,0.748,0.501,0.241,0.082,0.007,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.971107872,1.95577551,1.916142857,1.831,1.701,1.512,1.319,1.137,1.016,0.906,0.778,0.615,0.441,0.295,0.176,0.086,0.031,0.004,0.001,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.026,0.105,0.292,0.536,0.792,0.914,0.9,0.712,0.468,0.214,0.067,0.001,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.861282799,1.835897959,1.771428571,1.656,1.501,1.324,1.173,1.047,0.95,0.823,0.648,0.439,0.25,0.127,0.058,0.025,0.007,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.023,0.095,0.267,0.5,0.752,0.885,0.882,0.702,0.46,0.208,0.064,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.626705539,1.596693878,1.520285714,1.401,1.257,1.121,1.013,0.925,0.832,0.69,0.5,0.289,0.127,0.038,0.01,0.004,0.001,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.017,0.074,0.216,0.425,0.668,0.825,0.852,0.696,0.46,0.208,0.064,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.302769679,1.270938776,1.194857143,1.092,0.984,0.894,0.815,0.736,0.633,0.494,0.331,0.168,0.06,0.007,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.01,0.047,0.146,0.312,0.532,0.71,0.78,0.665,0.45,0.204,0.063,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.953673469,0.917571429,0.843,0.753,0.679,0.622,0.562,0.485,0.385,0.277,0.17,0.079,0.025,0.001,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.004,0.022,0.08,0.195,0.375,0.548,0.648,0.576,0.402,0.183,0.057,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.615801749,0.580061224,0.511142857,0.432,0.378,0.337,0.294,0.236,0.167,0.107,0.058,0.025,0.007,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.001,0.007,0.035,0.102,0.228,0.362,0.456,0.417,0.297,0.135,0.042,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
			return value;
		}
		private double[] getElevationGrid_5_83_height_3()
		{
			double[] value = {0.314927114,0.28944898,0.239714286,0.183,0.147,0.123,0.102,0.074,0.044,0.023,0.01,0.004,0.001,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.001,0.013,0.046,0.116,0.193,0.25,0.23,0.163,0.073,0.022,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.109125364,0.098387755,0.074571429,0.048,0.032,0.023,0.017,0.01,0.004,0.001,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.004,0.016,0.043,0.073,0.094,0.085,0.058,0.025,0.007,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.018279883,0.015795918,0.009857143,0.004,0.001,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.001,0.004,0.01,0.016,0.019,0.016,0.01,0.004,0.001,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.001,0.004,0.01,0.017,0.022,0.022,0.017,0.01,0.004,0.001,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.004,0.016,0.043,0.077,0.106,0.112,0.092,0.058,0.025,0.007,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.001,0.004,0.01,0.017,0.023,0.035,0.063,0.126,0.207,0.281,0.299,0.251,0.163,0.073,0.022,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.004,0.016,0.043,0.077,0.11,0.141,0.188,0.283,0.407,0.521,0.547,0.464,0.311,0.148,0.051,0.004,0.001,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.001,0.004,0.019,0.053,0.122,0.206,0.291,0.353,0.419,0.523,0.66,0.776,0.79,0.669,0.47,0.25,0.108,0.025,0.007,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.001,0.004,0.013,0.029,0.069,0.138,0.259,0.395,0.53,0.618,0.697,0.793,0.917,1.002,0.99,0.84,0.628,0.382,0.204,0.073,0.022,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.004,0.016,0.049,0.101,0.189,0.3,0.457,0.612,0.759,0.853,0.937};
			return value;
		}
		private double[] getElevationGrid_5_83_height_4()
		{
			double[] value = {1.029,1.132,1.18,1.134,0.971,0.77,0.525,0.319,0.135,0.042,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.01,0.04,0.116,0.225,0.375,0.52,0.677,0.804,0.92,1.008,1.099,1.203,1.282,1.294,1.209,1.05,0.866,0.636,0.409,0.183,0.057,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.017,0.068,0.194,0.367,0.575,0.735,0.864,0.946,1.028,1.124,1.232,1.344,1.38,1.339,1.21,1.062,0.9,0.69,0.451,0.204,0.063,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.001,0.026,0.098,0.264,0.481,0.719,0.877,0.978,1.04,1.124,1.25,1.372,1.461,1.431,1.322,1.164,1.032,0.899,0.703,0.46,0.208,0.064,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.004,0.038,0.131,0.322,0.561,0.801,0.953,1.049,1.134,1.254,1.411,1.517,1.539,1.428,1.262,1.107,0.998,0.893,0.703,0.46,0.208,0.064,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.01,0.057,0.177,0.385,0.634,0.859,1.014,1.129,1.264,1.42,1.577,1.624,1.556,1.373,1.186,1.059,0.98,0.892,0.703,0.46,0.208,0.064,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.001,0.004,0.026,0.091,0.241,0.461,0.716,0.926,1.1,1.249,1.436,1.603,1.721,1.682,1.529,1.298,1.121,1.025,0.974,0.892,0.703,0.46,0.208,0.064,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.004,0.016,0.062,0.157,0.337,0.558,0.804,0.999,1.197,1.384,1.604,1.751,1.805,1.686,1.481,1.236,1.081,1.007,0.973,0.892,0.703,0.46,0.208,0.064,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.001,0.004,0.019,0.053,0.138,0.271,0.473,0.679,0.894,1.074,1.291,1.508,1.727,1.827,1.809,1.635,1.416,1.189,1.06,1.001,0.973,0.892,0.703,0.46,0.208,0.064,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.001,0.004,0.013,0.029,0.069,0.138,0.269,0.436,0.643,0.821,0.996,1.163,1.381,1.602,1.778,1.81,1.722,1.52,1.318,1.135,1.042,0.999,0.97,0.886,0.696,0.454,0.205,0.063,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.004,0.016,0.049,0.101,0.189,0.3,0.461,0.631,0.814,0.963,1.113,1.281,1.481,1.664,1.757,1.71,1.565,1.361,1.198,1.073,1.022,0.996,0.961,0.865,0.669,0.427,0.19,0.057,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.01,0.04,0.116,0.225,0.375,0.52,0.678,0.814,0.954,1.09,1.242,1.419,1.573,1.67,1.655,1.538,1.373,1.202,1.093,1.025,1.007,0.99,0.943,0.823,0.615,0.37,0.157,0.042,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.017,0.068,0.194,0.367,0.575,0.734,0.86,0.944,1.043,1.186,1.358,1.534,1.617,1.603,1.488,1.336,1.196,1.086,1.031,1.004,1.0,0.98,0.916,0.765,0.542,0.295,0.114,0.022,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
			return value;
		}
		private double[] getElevationGrid_5_83_height_5()
		{
			double[] value = {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.001,0.004,0.032,0.105,0.27,0.484,0.721,0.877,0.972,1.023,1.107,1.263,1.442,1.586,1.586,1.472,1.301,1.16,1.073,1.025,1.007,1.0,0.996,0.965,0.877,0.696,0.461,0.223,0.075,0.007,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.004,0.016,0.065,0.165,0.355,0.578,0.808,0.95,1.039,1.098,1.197,1.353,1.505,1.582,1.507,1.334,1.159,1.053,1.016,1.004,1.0,0.996,0.981,0.931,0.813,0.612,0.373,0.162,0.045,0.001,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.01,0.04,0.126,0.265,0.475,0.681,0.875,0.998,1.109,1.213,1.348,1.485,1.574,1.557,1.419,1.223,1.073,1.001,0.991,0.988,0.981,0.968,0.93,0.852,0.701,0.496,0.273,0.108,0.022,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.001,0.02,0.074,0.205,0.389,0.617,0.796,0.944,1.046,1.188,1.349,1.523,1.624,1.629,1.511,1.324,1.125,0.998,0.942,0.935,0.928,0.907,0.874,0.801,0.695,0.527,0.346,0.168,0.06,0.007,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.004,0.035,0.119,0.292,0.513,0.747,0.902,1.014,1.104,1.27,1.467,1.655,1.705,1.626,1.423,1.206,1.008,0.885,0.815,0.791,0.772,0.735,0.684,0.585,0.472,0.319,0.19,0.079,0.025,0.001,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.01,0.056,0.173,0.376,0.621,0.846,0.992,1.095,1.197,1.372,1.565,1.724,1.71,1.561,1.302,1.073,0.867,0.727,0.616,0.561,0.525,0.483,0.428,0.332,0.244,0.14,0.073,0.025,0.007,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.017,0.078,0.228,0.452,0.712,0.925,1.087,1.214,1.355,1.526,1.68,1.77,1.687,1.484,1.186,0.941,0.713,0.547,0.395,0.314,0.267,0.234,0.195,0.134,0.086,0.038,0.016,0.004,0.001,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.022857143,0.096857143,0.271857143,0.509142857,0.778,0.988,1.182857143,1.356142857,1.547142857,1.708142857,1.811142857,1.821142857,1.675285714,1.423,1.085,0.804714286,0.545857143,0.364857143,0.209,0.131,0.09,0.074,0.056,0.032,0.016,0.004,0.001,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.02522449,0.10944898,0.30222449,0.553489796,0.823489796,1.037938776,1.26422449,1.487489796,1.713265306,1.859489796,1.91577551,1.86255102,1.668979592,1.36877551,0.987367347,0.658591837,0.380306122,0.209367347,0.088714286,0.038428571,0.015,0.011,0.007,0.003,0.001,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.024606414,0.121166181,0.335131195,0.61058309,0.869562682,1.080233236,1.320845481,1.587725948,1.819241983,1.941924198,1.961107872,1.873119534,1.64516035,1.295597668,0.884402332,0.525655977,0.260349854,0.112565598,0.035918367,0.009183673,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
			return value;
		}


		/** Define subarrays using type double[] */
		private double[] getMGFireSize_4_163_keyValue_1()
		{
			double[] value = {.001,.001,.001,.001,.001,.001,2.0,2.0,0.1,1.5,1.5,1.5,.1,.1,3.0,2.0,2.0,0.1,1.5,1.5,1.5,.1,.1,3.0,2.0,2.0,0.1,1.5,1.5,1.5,.1,.1,3.0,2.0,2.0,0.1,1.5,1.5,1.5,.1,.1,3.0,2.0,2.0,0.1,1.5,1.5,1.5,.1,.1,3.0,2.0,2.0,0.1,1.5,1.5,1.5,.1,.1,3.0,2.0,2.0,0.1,1.5,1.5,1.5,.1,.1,3.0,2.0,2.0,0.1,1.5,1.5,1.5,.1,.1,3.0,2.0,2.0,0.1,1.5,1.5,1.5,.1,.1,3.0,2.0,2.0,0.1,1.5,1.5,1.5,.1,.1,3.0,2.0,2.0,0.1,1.5,1.5,1.5,.1,.1,3.0,2.0,2.0,0.1,1.5,1.5,1.5,.1,.1,3.0,2.0,2.0,0.1,1.5,1.5,1.5,.1,.1,3.0,2.0,2.0,0.1,1.5,1.5,1.5,.1,.1,3.0,2.0,2.0,0.1,1.5,1.5,1.5,.1,.1,3.0,2.0,2.0,0.1,1.5,1.5,1.5,.1,.1,3.0,2.0,2.0,0.1,1.5,1.5,1.5,.1,.1,3.0,2.0,2.0,0.1,1.5,1.5,1.5,.1,.1,3.0,2.0,2.0,0.1,1.5,1.5,1.5,.1,.1,3.0,2.0,2.0,0.1,1.5,1.5,1.5,.1,.1,3.0,2.0,2.0,0.1,1.5,1.5,1.5,.1,.1,3.0,2.0,2.0,0.1,1.5,1.5,1.5,.1,.1,3.0,2.0,2.0,0.1,1.5,1.5,1.5,.1,.1,3.0,2.0,2.0,0.1,1.5,1.5,1.5,.1,.1,3.0,2.0,2.0,0.1,1.5,1.5,1.5,.1,.1,3.0,2.0,2.0,0.1,1.5,1.5,1.5,.1,.1,3.0,2.0,2.0,0.1,1.5,1.5,1.5,.1,.1,3.0,2.0,2.0,0.1,1.5,1.5,1.5,.1,.1,3.0,2.0,2.0,0.1,1.5,1.5,1.5,.1,.1,3.0,2.0,2.0,0.1,1.5,1.5,1.5,.1,.1,3.0,2.0,2.0,0.1,1.5,1.5,1.5,.1,.1,3.0,2.0,2.0,0.1,1.5,1.5,1.5,.1,.1,3.0,2.0,2.0,0.1,1.5,1.5,1.5};
			return value;
		}
		private double[] getMGFireSize_4_163_keyValue_2()
		{
			double[] value = {.1,.1,3.0,2.0,2.0,0.1,1.5,1.5,1.5,.1,.1,3.0,2.0,2.0,0.1,1.5,1.5,1.5,.1,.1,3.0,2.0,2.0,0.1,1.5,1.5,1.5,.1,.1,3.0,.001,.001,.001,.001,.001,.001};
			return value;
		}

		/** Large attribute array: ElevationGrid height field, scene-graph level=5, element #83, 4800 total numbers.
		 * 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 MFFloat getElevationGrid_5_83_height()
		{
			MFFloat ElevationGrid_5_83_height = new MFFloat()/*2.finalize*/
				.append(new MFFloat(getElevationGrid_5_83_height_1()))
				.append(new MFFloat(getElevationGrid_5_83_height_2()))
				.append(new MFFloat(getElevationGrid_5_83_height_3()))
				.append(new MFFloat(getElevationGrid_5_83_height_4()))
				.append(new MFFloat(getElevationGrid_5_83_height_5()));
			return ElevationGrid_5_83_height;
		}
		/** Large attribute array: PositionInterpolator DEF='MGFireSize' keyValue field, scene-graph level=4, element #163, 336 total numbers made up of 112 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 getMGFireSize_4_163_keyValue()
		{
			MFVec3f MGFireSize_4_163_keyValue = new MFVec3f()/*2.finalize*/
				.append(new MFVec3f(getMGFireSize_4_163_keyValue_1()))
				.append(new MFVec3f(getMGFireSize_4_163_keyValue_2()));
			return MGFireSize_4_163_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 TankManeuver 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 TankManeuver().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.Scenarios.TankManeuver.TankManeuver\" 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.Scenarios.TankManeuver.TankManeuver self-validation test confirmation: ");
                if (!validationResults.equals("success"))
                    System.out.println();
                System.out.println(validationResults.trim());

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