package Savage.ShipsMilitary.DDG51FlightIIaUnitedStates;

import org.web3d.x3d.jsail.Core.*;
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.Rendering.*;
import org.web3d.x3d.jsail.Shape.*;

// Javadoc metadata annotations follow, see below for X3DJSAIL Java source code.
/**
 * <p> PhalanxAntiMissileDefense from Savage MEKO 2000 Model. </p>
 <p> Related links: Catalog page <a href="../../../../ShipsMilitary/DDG51FlightIIaUnitedStates/PhalanxIndex.html" target="_blank">Phalanx</a>,  source <a href="../../../../ShipsMilitary/DDG51FlightIIaUnitedStates/Phalanx.java">Phalanx.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="../../../../ShipsMilitary/DDG51FlightIIaUnitedStates/Phalanx.x3d">Phalanx.x3d</a> </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> description </i> </td>
			<td> PhalanxAntiMissileDefense from Savage MEKO 2000 Model </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> creator </i> </td>
			<td> Kavousanos-Kavousanakis, Andreas GRC </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> created </i> </td>
			<td> 19 August 2003 </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> TODO </i> </td>
			<td> add ROUTE connections </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> Image </i> </td>
			<td> <a href="../../../../ShipsMilitary/DDG51FlightIIaUnitedStates/Phalanx.png">Phalanx.png</a> </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/ShipsMilitary/DDG51FlightIIaUnitedStates/Phalanx.x3d" target="_blank">https://www.web3d.org/x3d/content/examples/Savage/ShipsMilitary/DDG51FlightIIaUnitedStates/Phalanx.x3d</a> </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> generator </i> </td>
			<td> X3D-Edit, <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="../../../../ShipsMilitary/DDG51FlightIIaUnitedStates/../../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 Kavousanos-Kavousanakis, Andreas GRC
 */

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

	/** Create and initialize the X3D model for this object. */
	public final void initialize()
	{
            try { // catch-all
  x3dModel = new X3D().setProfile(X3D.PROFILE_INTERCHANGE).setVersion(X3D.VERSION_3_0)
  .setHead(new head()
    .addMeta(new meta().setName(meta.NAME_TITLE      ).setContent("Phalanx.x3d"))
    .addMeta(new meta().setName(meta.NAME_DESCRIPTION).setContent("PhalanxAntiMissileDefense from Savage MEKO 2000 Model"))
    .addMeta(new meta().setName(meta.NAME_CREATOR    ).setContent("Kavousanos-Kavousanakis, Andreas GRC"))
    .addMeta(new meta().setName(meta.NAME_CREATED    ).setContent("19 August 2003"))
    .addMeta(new meta().setName(meta.NAME_MODIFIED   ).setContent("20 October 2019"))
    .addMeta(new meta().setName(meta.NAME_TODO       ).setContent("add ROUTE connections"))
    .addMeta(new meta().setName(meta.NAME_IMAGE      ).setContent("Phalanx.png"))
    .addMeta(new meta().setName(meta.NAME_IDENTIFIER ).setContent("https://www.web3d.org/x3d/content/examples/Savage/ShipsMilitary/DDG51FlightIIaUnitedStates/Phalanx.x3d"))
    .addMeta(new meta().setName(meta.NAME_GENERATOR  ).setContent("X3D-Edit, 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("Phalanx.x3d"))
    .addChild(new Transform("BASE_PHALANX_AFT").setCenter(-4.0,-81.5,13.0)
      .addComments(" PHALANX AFT ")
      .addChild(new Shape()
        .addComments(" PHALANX BASE ")
        .setGeometry(new IndexedFaceSet().setSolid(false).setCoordIndex(new int[] {0,1,2,3,-1,4,5,0,3,-1,6,5,4,7,-1,1,0,5,6,-1,7,4,3,2,-1,8,9,10,11,-1,12,13,8,11,-1,14,13,12,15,-1,9,8,13,14,-1,15,12,11,10,-1,16,17,18,19,-1,20,16,19,21,-1,22,20,21,23,-1,24,22,23,25,-1,26,24,25,27,-1,28,26,27,29,-1,30,31,28,29,-1,32,33,31,30,-1,34,35,33,32,-1,36,37,35,34,-1,38,39,37,36,-1,18,17,39,38,-1,17,16,20,22,24,26,28,31,33,35,37,39,-1,21,19,18,38,36,34,32,30,29,27,25,23,-1,40,41,42,43,-1,44,45,40,43,-1,46,47,48,49,-1,50,47,46,51,-1,42,41,50,51,-1,40,47,50,41,-1,40,45,48,47,-1,51,46,43,42,-1,46,49,44,43,-1,52,53,54,55,-1,56,57,52,55,-1,58,59,60,61,-1,62,59,58,63,-1,54,53,62,63,-1,52,59,62,53,-1,52,57,60,59,-1,63,58,55,54,-1,58,61,56,55,-1,64,65,66,67,-1,68,65,64,69,-1,70,68,69,71,-1,66,65,68,70,-1,71,69,64,67,-1,72,73,74,75,-1,76,73,72,77,-1,78,79,76,77,-1}).setNormalIndex(new int[] {0,0,0,0,-1,1,1,1,1,-1,2,2,2,2,-1,3,3,3,3,-1,4,4,4,4,-1,0,0,0,0,-1,1,1,1,1,-1,2,2,2,2,-1,3,3,3,3,-1,4,4,4,4,-1,5,6,7,8,-1,9,5,8,10,-1,11,9,10,12,-1,13,11,12,14,-1,15,13,14,16,-1,17,15,16,17,-1,18,19,17,17,-1,20,21,19,18,-1,22,23,21,20,-1,24,25,23,22,-1,26,27,25,24,-1,7,6,27,26,-1,2,2,2,2,2,2,2,2,2,2,2,2,-1,28,29,30,31,32,0,33,34,35,36,0,0,-1,37,37,37,37,-1,38,38,38,38,-1,39,39,39,39,-1,40,40,40,40,-1,1,1,1,1,-1,4,4,4,4,-1,4,4,4,4,-1,3,3,3,3,-1,3,3,3,3,-1,37,37,37,37,-1,38,38,38,38,-1,39,39,39,39,-1,40,40,40,40,-1,1,1,1,1,-1,4,4,4,4,-1,4,4,4,4,-1,3,3,3,3,-1,3,3,3,3,-1,3,3,3,3,-1,1,1,1,1,-1,4,4,4,4,-1,2,2,2,2,-1,0,0,0,0,-1,3,3,3,3,-1,41,41,41,41,-1,4,4,4,4,-1})
          .setCoord(new Coordinate().setPoint(getCoordinate_6_13_point()))
          .setNormal(new Normal().setVector(getNormal_6_14_vector())))
        .setAppearance(new Appearance("App")
          .setMaterial(new Material("Mat").setAmbientIntensity(0.02).setDiffuseColor(0.5294,0.5294,0.5294).setShininess(0.55))))
      .addChild(new Transform("PHALANX_AFT").setCenter(-4.0,-81.5,13.0)
        .addComments(" Rotating Parts ")
        .addChild(new Shape()
          .addComments(" MOTION ADDED BY TRANSLATOR ")
          .setGeometry(new IndexedFaceSet().setSolid(false).setCoordIndex(new int[] {0,1,2,3,4,5,-1,6,5,4,7,-1,7,4,3,8,-1,8,3,2,9,-1,9,2,1,10,-1,10,1,0,11,-1,11,0,5,6,-1,6,7,8,9,10,11,-1,12,13,14,15,16,17,-1}).setNormalIndex(new int[] {0,0,0,0,0,0,-1,1,1,1,1,-1,2,2,2,2,-1,3,3,3,3,-1,4,4,4,4,-1,5,5,5,5,-1,6,6,6,6,-1,7,7,7,7,7,7,-1,7,7,7,7,7,7,-1})
            .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {-4.00388,-81.9147,13.5445,-4.12123,-81.9147,13.4738,-4.11869,-81.9147,13.3368,-3.9988,-81.9147,13.2705,-3.88145,-81.9147,13.3412,-3.88399,-81.9147,13.4782,-3.88399,-80.7923,13.4782,-3.88145,-80.7923,13.3412,-3.9988,-80.7923,13.2705,-4.11869,-80.7923,13.3368,-4.12123,-80.7923,13.4738,-4.00388,-80.7923,13.5445,-3.92737,-81.9149,13.4741,-3.92394,-81.9149,13.3847,-3.99962,-81.9149,13.337,-4.07874,-81.9149,13.3787,-4.08218,-81.9149,13.4681,-4.0065,-81.9149,13.5158})))
            .setNormal(new Normal().setVector(new MFVec3f(new double[] {0.0,-1.0,0.0,0.999829,0.0,0.0185154,0.515951,0.0,-0.856618,-0.48388,0.0,-0.875134,-0.999829,0.0,-0.0185137,-0.515952,0.0,0.856618,0.48388,0.0,0.875134,0.0,1.0,0.0}))))
          .setAppearance(new Appearance()
            .setMaterial(new Material().setDiffuseColor(0.0,0.0,0.0).setShininess(0.5))))
        .addChild(new Shape()
          .addComments(" MOTION ADDED BY TRANSLATOR ")
          .setGeometry(new IndexedFaceSet().setSolid(false).setCoordIndex(new int[] {6,5,4,7,-1,7,4,3,8,-1,8,3,2,9,-1,9,2,1,10,-1,10,1,0,11,-1,11,0,5,6,-1,6,7,8,9,10,11,-1}).setNormalIndex(new int[] {1,1,1,1,-1,2,2,2,2,-1,3,3,3,3,-1,4,4,4,4,-1,5,5,5,5,-1,6,6,6,6,-1,0,0,0,0,0,0,-1})
            .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {-3.92737,-81.9149,13.4741,-3.92394,-81.9149,13.3847,-3.99962,-81.9149,13.337,-4.07874,-81.9149,13.3787,-4.08218,-81.9149,13.4681,-4.0065,-81.9149,13.5158,-4.0065,-82.9764,13.5158,-4.08218,-82.9764,13.4681,-4.07874,-82.9764,13.3787,-3.99962,-82.9764,13.337,-3.92394,-82.9764,13.3847,-3.92737,-82.9764,13.4741})))
            .setNormal(new Normal().setVector(new MFVec3f(new double[] {0.0,-1.0,0.0,-0.532912,0.0,0.846171,-0.999261,0.0,-0.0384323,-0.466346,0.0,-0.884602,0.532912,0.0,-0.846171,0.999261,0.0,0.0384323,0.466346,0.0,0.884602}))))
          .setAppearance(new Appearance()
            .setMaterial(new Material().setDiffuseColor(0.0,0.0,0.0).setShininess(0.5))))
        .addChild(new Shape()
          .addComments(" PHALANX RADAR ")
          .setGeometry(new IndexedFaceSet().setSolid(false).setCoordIndex(new int[] {0,1,2,3,-1,3,2,4,5,-1,6,7,8,9,-1,7,10,11,8,-1,12,6,9,13,-1,14,12,13,15,-1,16,14,15,17,-1,18,16,17,19,-1,20,18,19,4,-1,21,20,4,2,-1,22,21,2,1,-1,23,22,1,24,-1,25,23,24,26,-1,10,25,26,11,-1,27,28,29,-1,27,30,28,-1,27,31,30,-1,27,32,31,-1,27,33,32,-1,27,34,33,-1,27,35,34,-1,27,36,35,-1,27,37,36,-1,27,38,37,-1,27,39,38,-1,31,32,22,23,-1,21,22,32,33,-1,23,25,30,31,-1,28,30,25,10,-1,29,7,6,39,-1,29,39,27,-1,38,39,6,12,-1,10,7,29,28,-1,14,37,38,12,-1,36,37,14,16,-1,35,36,16,18,-1,34,35,18,20,-1,33,34,20,21,-1,40,9,8,41,-1,13,9,40,42,-1,15,13,42,43,-1,17,15,43,44,-1,19,17,44,45,-1,4,19,45,5,-1,46,24,1,0,-1,47,26,24,46,-1,48,11,26,47,-1,41,8,11,48,-1}).setNormalIndex(new int[] {0,1,2,3,-1,3,2,4,5,-1,6,7,8,9,-1,7,10,11,8,-1,12,6,9,13,-1,14,12,13,15,-1,16,14,15,17,-1,18,16,17,19,-1,20,18,19,4,-1,21,20,4,2,-1,22,21,2,1,-1,23,22,1,24,-1,25,23,24,26,-1,10,25,26,11,-1,27,28,29,-1,27,30,28,-1,27,31,30,-1,27,32,31,-1,27,33,32,-1,27,34,33,-1,27,35,34,-1,27,36,35,-1,27,37,36,-1,27,38,37,-1,27,39,38,-1,31,32,22,23,-1,21,22,32,33,-1,23,25,30,31,-1,28,30,25,10,-1,29,7,6,39,-1,29,39,27,-1,38,39,6,12,-1,10,7,29,28,-1,14,37,38,12,-1,36,37,14,16,-1,35,36,16,18,-1,34,35,18,20,-1,33,34,20,21,-1,40,9,8,41,-1,13,9,40,42,-1,15,13,42,43,-1,17,15,43,44,-1,19,17,44,45,-1,4,19,45,5,-1,46,24,1,0,-1,47,26,24,46,-1,48,11,26,47,-1,41,8,11,48,-1})
            .setCoord(new Coordinate().setPoint(getCoordinate_7_31_point()))
            .setNormal(new Normal().setVector(getNormal_7_32_vector())))
          .setAppearance(new Appearance("PhalanxRadar")
            .setMaterial(new Material().setAmbientIntensity(0.722876).setDiffuseColor(1.000000,1.000000,1.000000).setShininess(0.062500).setSpecularColor(0.407843,0.407843,0.407843))))
        .addChild(new OrientationInterpolator("Phalanx_path").setKey(new double[] {0.0,0.25,0.50,0.75,1.0}).setKeyValue(new MFRotation(new double[] {1.0,0.0,0.0,0.0,-1.0,0.0,0.0,0.4,-1.0,0.0,0.0,0.8,-1.0,0.0,0.0,0.4,1.0,0.0,0.0,0.0})))
        .addChild(new Shape()
          .addComments(" BARREL ")
          .setGeometry(new IndexedFaceSet().setSolid(false).setCoordIndex(new int[] {0,3,2,1,-1}).setNormalIndex(new int[] {0,0,0,0,-1})
            .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {-3.55016,-80.9042,13.7209,-3.55016,-81.915,13.7209,-4.45993,-81.915,13.7209,-4.45993,-80.9042,13.7209})))
            .setNormal(new Normal().setVector(new MFVec3f(new double[] {0.0,0.0,1.0}))))
          .setAppearance(new Appearance().setUSE("App"))))
      .addChild(new OrientationInterpolator("Base_Phalanx_path").setKey(new double[] {0.0,0.25,0.50,0.75,1.0}).setKeyValue(new MFRotation(new double[] {0.0,0.0,1.0,0.0,0.0,0.0,1.0,2.2,0.0,0.0,1.0,0.0,0.0,0.0,-1.0,2.2,0.0,0.0,1.0,0.0})))
      .addChild(new Transform().setTranslation(-4.0,-81.5,12.1)
        .addComments(" BASE ADDITION (By Tranlator) ")
        .addChild(new Shape()
          .setAppearance(new Appearance().setUSE("App"))
          .setGeometry(new Box().setSize(2.2,2.1,0.2))))));
            }
            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




		/** Large attribute array: Coordinate point field, scene-graph level=6, element #13, 240 total numbers made up of 80 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 getCoordinate_6_13_point()
		{
			MFVec3f Coordinate_6_13_point = new MFVec3f(new double[] {-4.15667,-79.2924,12.1594,-4.15667,-79.2924,10.8016,-5.16752,-79.2924,10.8016,-5.16752,-79.2924,12.1594,-5.16752,-80.0,12.1594,-4.15667,-80.0,12.1594,-4.15667,-80.0,10.8292,-5.16752,-80.0,10.8292,-2.84257,-79.2924,12.1594,-2.84257,-79.2924,10.8016,-3.85342,-79.2924,10.8016,-3.85342,-79.2924,12.1594,-3.85342,-80.0,12.1594,-2.84257,-80.0,12.1594,-2.84257,-80.0,10.8292,-3.85342,-80.0,10.8292,-3.77294,-81.9547,13.0922,-3.73908,-81.9547,12.9659,-3.73909,-80.944,12.9659,-3.77294,-80.944,13.0922,-3.86544,-81.9547,13.1847,-3.86544,-80.944,13.1847,-3.99179,-81.9547,13.2186,-3.9918,-80.944,13.2186,-4.11815,-81.9547,13.1847,-4.11816,-80.944,13.1847,-4.21065,-81.9547,13.0922,-4.21065,-80.944,13.0922,-4.2445,-81.9547,12.9659,-4.24451,-80.944,12.9659,-4.21065,-80.944,12.8395,-4.21065,-81.9547,12.8395,-4.11815,-80.944,12.747,-4.11815,-81.9547,12.747,-3.9918,-80.944,12.7132,-3.99179,-81.9547,12.7132,-3.86544,-80.944,12.747,-3.86544,-81.9547,12.747,-3.77294,-80.944,12.8395,-3.77294,-81.9547,12.8395,-4.86427,-80.9177,12.6,-4.86427,-81.0726,13.7209,-4.45993,-81.0726,13.7209,-4.45993,-80.9177,12.6,-4.45993,-80.455,12.1372,-4.86427,-80.455,12.1372,-4.45993,-81.915,12.5865,-4.86427,-81.915,12.5865,-4.86427,-82.3643,12.1372,-4.45993,-82.3643,12.1372,-4.86427,-81.7465,13.7209,-4.45993,-81.7465,13.7209,-3.55016,-80.9177,12.6,-3.55016,-81.0726,13.7209,-3.14582,-81.0726,13.7209,-3.14582,-80.9177,12.6,-3.14582,-80.455,12.1372,-3.55016,-80.455,12.1372,-3.14582,-81.915,12.5865,-3.55016,-81.915,12.5865,-3.55016,-82.3643,12.1372,-3.14582,-82.3643,12.1372,-3.55016,-81.7465,13.7209,-3.14582,-81.7465,13.7209,-2.79763,-80.2022,12.0361,-2.79763,-82.617,12.0361,-2.79763,-82.617,10.8956,-2.79763,-80.2022,10.8384,-5.21245,-82.617,12.0361,-5.21245,-80.2022,12.0361,-5.21245,-82.617,10.8956,-5.21245,-80.2022,10.8384,-3.55016,-81.915,13.2209,-3.55016,-80.9042,13.2209,-3.55016,-80.9042,13.7209,-3.55016,-81.915,13.7209,-4.45993,-80.9042,13.2209,-4.45993,-81.915,13.2209,-4.45993,-81.915,13.7209,-4.45993,-80.9042,13.7209});
			return Coordinate_6_13_point;
		}
		/** Large attribute array: Normal vector field, scene-graph level=6, element #14, 126 total numbers made up of 42 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 getNormal_6_14_vector()
		{
			MFVec3f Normal_6_14_vector = new MFVec3f(new double[] {0,1,0,0,0,1,0,-1,0,1,0,0,-1,0,0,0.907073,5.56291e-006,0.420974,1,6.13282e-006,2.57628e-006,1,6.13282e-006,2.57628e-006,0.818111,5.01734e-006,0.575061,0.575062,3.52677e-006,0.81811,0.420975,2.5608e-006,0.907072,0.0889631,5.45598e-007,0.996035,-0.0889621,-5.45593e-007,0.996035,-0.420977,-2.56081e-006,0.907071,-0.575065,-3.5268e-006,0.818107,-0.818115,-5.01738e-006,0.575055,-0.907076,-5.56297e-006,0.420968,-1,-6.13286e-006,-6.23243e-006,-0.90707,-5.56294e-006,-0.420979,-0.818107,-5.01734e-006,-0.575065,-0.575059,-3.52676e-006,-0.818112,-0.420974,-2.58177e-006,-0.907073,-0.0889631,-5.45598e-007,-0.996035,0.0889631,5.45598e-007,-0.996035,0.420975,2.58178e-006,-0.907072,0.575062,3.52676e-006,-0.81811,0.818111,5.01734e-006,-0.57506,0.907074,5.56292e-006,-0.420971,-5.81007e-006,1,2.16833e-005,-1.66518e-005,1,2.18919e-005,-1.58734e-005,1,-1.13972e-006,-1.16201e-005,1,-3.1747e-005,0,1,-4.12405e-005,-5.81007e-006,1,-3.33038e-005,-1.66518e-005,1,-5.60162e-006,-1.58734e-005,1,-1.13974e-006,-1.16201e-005,1,2.32401e-005,0.0,0.99058,0.136938,0.0,0.707153,0.707061,0.0,-0.707105,0.707109,0.0,-0.989152,0.146895,0.0,0.0,-1.0});
			return Normal_6_14_vector;
		}
		/** Large attribute array: Coordinate point field, scene-graph level=7, element #31, 147 total numbers made up of 49 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 getCoordinate_7_31_point()
		{
			MFVec3f Coordinate_7_31_point = new MFVec3f(new double[] {-4.25774,-81.8473,13.7209,-4.25775,-81.8473,15.2147,-4.44275,-81.6623,15.2147,-4.44273,-81.6623,13.7209,-4.51047,-81.4096,15.2147,-4.51045,-81.4096,13.7209,-3.62599,-81.1907,15.4674,-3.56735,-81.4096,15.4674,-3.49963,-81.4096,15.2147,-3.56735,-81.1569,15.2147,-3.62599,-81.6284,15.4674,-3.56734,-81.6623,15.2147,-3.78621,-81.0305,15.4674,-3.75235,-80.9719,15.2147,-4.00506,-80.9719,15.4674,-4.00506,-80.9042,15.2147,-4.22391,-81.0305,15.4674,-4.25777,-80.9719,15.2147,-4.38412,-81.1907,15.4674,-4.44276,-81.1569,15.2147,-4.44276,-81.4096,15.4674,-4.38411,-81.6284,15.4674,-4.2239,-81.7886,15.4674,-4.00505,-81.8473,15.4674,-4.00504,-81.915,15.2147,-3.78619,-81.7886,15.4674,-3.75234,-81.8473,15.2147,-4.00506,-81.4096,15.7201,-3.7862,-81.5359,15.6524,-3.75234,-81.4096,15.6524,-3.87869,-81.6284,15.6524,-4.00505,-81.6623,15.6524,-4.1314,-81.6284,15.6524,-4.2239,-81.5359,15.6524,-4.25776,-81.4096,15.6524,-4.22391,-81.2832,15.6524,-4.13141,-81.1907,15.6524,-4.00506,-81.1569,15.6524,-3.8787,-81.1907,15.6524,-3.7862,-81.2832,15.6524,-3.56737,-81.1569,13.7209,-3.49966,-81.4096,13.7209,-3.75236,-80.9719,13.7209,-4.00506,-80.9042,13.7209,-4.25776,-80.9719,13.7209,-4.44274,-81.1569,13.7209,-4.00504,-81.915,13.7209,-3.75235,-81.8473,13.7209,-3.56736,-81.6623,13.7209});
			return Coordinate_7_31_point;
		}
		/** Large attribute array: Normal vector field, scene-graph level=7, element #32, 147 total numbers made up of 49 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 getNormal_7_32_vector()
		{
			MFVec3f Normal_7_32_vector = new MFVec3f(new double[] {-0.575048,-0.81812,-1.36365e-005,-0.417374,-0.899366,0.130155,-0.811144,-0.570181,0.130154,-0.907068,-0.420984,-1.503e-005,-0.993017,-0.0373234,0.111916,-1,-1.69849e-005,-1.40452e-005,0.750413,0.389503,0.534011,0.889423,-0.0531145,0.453989,0.987561,0.0882186,0.130155,0.828068,0.538342,0.156497,0.743404,-0.442343,0.50168,0.899362,-0.417381,0.130157,0.490712,0.743707,0.453985,0.496943,0.85789,0.130661,0.037882,0.844628,0.534011,0.00141647,0.991426,0.13066,-0.422634,0.754784,0.501679,-0.494481,0.859312,0.130661,-0.743401,0.442349,0.50168,-0.857889,0.496944,0.130661,-0.864978,0.011381,0.50168,-0.754782,-0.422634,0.501682,-0.442342,-0.743404,0.501682,-0.0113794,-0.864979,0.50168,0.0882152,-0.987561,0.13016,0.422631,-0.754783,0.501682,0.570184,-0.811141,0.130155,-7.12368e-006,1.19188e-005,1,0.451294,-0.305471,0.838464,0.573579,1.05536e-005,0.81915,0.238091,-0.490195,0.838464,-0.038903,-0.543566,0.838465,-0.305476,-0.45129,0.838464,-0.490195,-0.238099,0.838461,-0.543575,0.0389056,0.838459,-0.451299,0.305482,0.838457,-0.238104,0.490204,0.838455,-1.52583e-005,0.498236,0.867041,0.286784,0.496743,0.819147,0.431476,0.24912,0.867045,0.866017,0.500014,-1.31952e-005,0.996036,-0.0889491,-1.38079e-005,0.420957,0.907081,-1.32928e-005,-0.0889791,0.996033,-1.41903e-005,-0.575069,0.818105,-1.23952e-005,-0.907079,0.420961,-1.33343e-005,-0.0889491,-0.996036,-1.41903e-005,0.420985,-0.907067,-1.32927e-005,0.818119,-0.57505,-1.28607e-005});
			return Normal_7_32_vector;
		}

	/** 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 Phalanx 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 Phalanx().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.ShipsMilitary.DDG51FlightIIaUnitedStates.Phalanx\" 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.ShipsMilitary.DDG51FlightIIaUnitedStates.Phalanx self-validation test confirmation: ");
                if (!validationResults.equals("success"))
                    System.out.println();
                System.out.println(validationResults.trim());

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