package Savage.ShipsCivilian.SmallCraft;

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

// Javadoc metadata annotations follow, see below for X3DJSAIL Java source code.
/**
 * <p> Cigarette Boat for terrorist platform. </p>
 <p> Related links: Catalog page <a href="../../../../ShipsCivilian/SmallCraft/CigaretteBoatIndex.html" target="_blank">CigaretteBoat</a>,  source <a href="../../../../ShipsCivilian/SmallCraft/CigaretteBoat.java">CigaretteBoat.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="../../../../ShipsCivilian/SmallCraft/CigaretteBoat.x3d">CigaretteBoat.x3d</a> </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> description </i> </td>
			<td> Cigarette Boat for terrorist platform </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> creator </i> </td>
			<td> Donated to the MOVES Institute (Delta 3D Group) by Naval Education and Training Command. Translated from the Delta3D open asset library. </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> translator </i> </td>
			<td> Patrick Sullivan </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> created </i> </td>
			<td> 23 March 2005 </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> translated </i> </td>
			<td> 24 January 2006 </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> identifier </i> </td>
			<td> <a href="https://www.web3d.org/x3d/content/examples/Savage/ShipsCivilian/SmallCraft/CigaretteBoat.x3d" target="_blank">https://www.web3d.org/x3d/content/examples/Savage/ShipsCivilian/SmallCraft/CigaretteBoat.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> generator </i> </td>
			<td> VizX3D, <a href="http://www.vivaty.com/downloads/studio" target="_blank">http://www.vivaty.com/downloads/studio</a> </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> license </i> </td>
			<td> <a href="../../../../ShipsCivilian/SmallCraft/../../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 Donated to the MOVES Institute (Delta 3D Group) by Naval Education and Training Command. Translated from the Delta3D open asset library.
 */

public class CigaretteBoat
{
	/** Default constructor to create this object. */
	public CigaretteBoat ()
	{
	  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_0)
  .setHead(new head()
    .addMeta(new meta().setName(meta.NAME_TITLE      ).setContent("CigaretteBoat.x3d"))
    .addMeta(new meta().setName(meta.NAME_DESCRIPTION).setContent("Cigarette Boat for terrorist platform"))
    .addMeta(new meta().setName(meta.NAME_CREATOR    ).setContent("Donated to the MOVES Institute (Delta 3D Group) by Naval Education and Training Command. Translated from the Delta3D open asset library."))
    .addMeta(new meta().setName(meta.NAME_TRANSLATOR ).setContent("Patrick Sullivan"))
    .addMeta(new meta().setName(meta.NAME_CREATED    ).setContent("23 March 2005"))
    .addMeta(new meta().setName(meta.NAME_TRANSLATED ).setContent("24 January 2006"))
    .addMeta(new meta().setName(meta.NAME_MODIFIED   ).setContent("20 October 2019"))
    .addMeta(new meta().setName(meta.NAME_IDENTIFIER ).setContent("https://www.web3d.org/x3d/content/examples/Savage/ShipsCivilian/SmallCraft/CigaretteBoat.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_GENERATOR  ).setContent("VizX3D, http://www.vivaty.com/downloads/studio"))
    .addMeta(new meta().setName(meta.NAME_LICENSE    ).setContent("../../license.html")))
  .setScene(new Scene()
    .addChild(new WorldInfo().setTitle("CigaretteBoat.x3d"))
    .addChild(new Transform("CigaretteBoat")
      .addChild(new Group("GROUND")
        .addChild(new Transform("dad_Import_Base").setRotation(1.0,0.0,0.0,1.571)
          .addChild(new Group("Import_Base")
            .addChild(new NavigationInfo("NavInfo1").setAvatarSize(new double[] {.25,1.6,.75}))
            .addChild(new Viewpoint("VP5_vp").setDescription("Side").setOrientation(1.0,0.0,0.0,-1.571).setPosition(3.71207,73.74403,-1.80019))
            .addChild(new Viewpoint("VP1_vp").setDescription("Bottom").setPosition(3.71207,.02399,71.91985))
            .addChild(new Viewpoint("VP2_vp").setDescription("Front").setOrientation(0.0,1.0,0.0,1.571).setPosition(77.43211,.02399,-1.80019))
            .addChild(new Viewpoint("VP3_vp").setDescription("Top").setOrientation(0.0,1.0,0.0,3.142).setPosition(3.71207,.02399,-75.52022))
            .addChild(new Viewpoint("VP4_vp").setDescription("Back").setOrientation(0.0,1.0,0.0,-1.571).setPosition(-70.00797,.02399,-1.80019))
            .addChild(new Viewpoint("VP6_vp").setDescription("OppSide").setOrientation(1.0,0.0,0.0,1.571).setPosition(3.71207,-73.69605,-1.80019))
            .addChild(new Transform("dad_Group1")
              .addChild(new Group("Group1")
                .addChild(new Transform("dad_Object01")
                  .addChild(new Shape("Object01")
                    .setAppearance(new Appearance()
                      .setMaterial(new Material("material3_mat").setAmbientIntensity(0.067).setDiffuseColor(.15686,.15686,.15686).setShininess(0.130).setSpecularColor(.09804,.09804,.09804)))
                    .setGeometry(new IndexedFaceSet().setCreaseAngle(0.000).setCoordIndex(new int[] {0,1,2,-1,2,3,0,-1})
                      .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {13.74967,-.54715,-4.0368,14.74967,-.54715,-4.0368,14.74967,.45285,-4.0368,13.74967,.45285,-4.0368}))))))
                .addChild(new Transform("dad_Object01_1")
                  .addChild(new Shape("Object01_1")
                    .setAppearance(new Appearance()
                      .setMaterial(new Material("material4_mat").setAmbientIntensity(0).setDiffuseColor(.1451,.1451,.1451).setShininess(0.130).setSpecularColor(.09804,.09804,.09804)))
                    .setGeometry(new IndexedFaceSet().setCreaseAngle(0.000).setCoordIndex(new int[] {0,1,2,-1,2,3,0,-1,0,3,4,-1,4,5,0,-1,3,2,6,-1,6,4,3,-1,2,1,7,-1,7,6,2,-1,1,0,5,-1,5,7,1,-1,8,9,10,-1,10,11,8,-1,8,11,12,-1,12,13,8,-1,11,10,14,-1,14,12,11,-1,10,9,15,-1,15,14,10,-1,9,8,13,-1,13,15,9,-1})
                      .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {18.42037,-.54715,-4.12442,18.42037,.45285,-4.12442,19.42037,.45285,-4.12442,19.42037,-.54715,-4.12442,19.42037,-.54715,-3.98989,18.42037,-.54715,-3.98989,19.42037,.45285,-3.98989,18.42037,.45285,-3.98989,13.74967,-.54715,-4.17134,13.74967,.45285,-4.17134,14.74967,.45285,-4.17134,14.74967,-.54715,-4.17134,14.74967,-.54715,-4.0368,13.74967,-.54715,-4.0368,14.74967,.45285,-4.0368,13.74967,.45285,-4.0368}))))))
                .addChild(new Transform("dad_Sqcabw01")
                  .addChild(new Shape("Sqcabw01")
                    .setAppearance(new Appearance()
                      .setMaterial(new Material("material5_mat").setAmbientIntensity(0).setDiffuseColor(.67843,.67843,.67843).setShininess(0.130).setSpecularColor(.09804,.09804,.09804).setTransparency(0.470)))
                    .setGeometry(new IndexedFaceSet().setCreaseAngle(0.000).setCoordIndex(new int[] {0,1,2,-1,0,2,3,-1,4,5,6,-1,4,6,7,-1,5,8,9,-1,5,9,6,-1,8,10,9,-1,8,1,2,-1,8,2,10,-1,1,0,3,-1,1,3,2,-1,0,11,12,-1,0,12,3,-1,11,13,14,-1,11,14,15,-1,13,16,17,-1,13,17,14,-1,11,0,3,-1,11,3,12,-1,11,12,15,-1,13,11,15,-1,13,15,14,-1,16,13,14,-1,16,14,17,-1,1,8,10,-1,1,10,2,-1,8,5,6,-1,8,6,9,-1,5,4,7,-1,5,7,6,-1})
                      .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {-1.19508,-.81889,-5.18129,-1.20802,.66428,-5.16835,.48629,.71662,-4.55319,.49998,-.85238,-4.56688,-8.0754,1.85625,-4.41721,-5.72181,1.719,-4.67252,-5.73431,2.42484,-3.94091,-9.23841,2.52739,-3.60279,-1.89545,1.45618,-5.10893,-1.81225,2.31008,-4.31936,-.3964,1.86526,-4.45915,-1.86857,-1.62358,-5.13581,-.36251,-2.01772,-4.49304,-5.6897,-1.96072,-4.70463,-5.68976,-2.67933,-3.98546,-1.77036,-2.48955,-4.36124,-8.0405,-2.14345,-4.45211,-9.19149,-2.84889,-3.64971}))))))
                .addChild(new Transform("dad_Sqwht01")
                  .addChild(new Shape("Sqwht01")
                    .setAppearance(new Appearance()
                      .setTexture(new ImageTexture().setUrl(new String[] {"CIGRT.jpg","https://www.web3d.org/x3d/content/examples/Savage/ShipsCivilian/SmallCraft/CIGRT.jpg"}))
                      .setMaterial(new Material("material6_mat").setAmbientIntensity(1).setDiffuseColor(1.0,1.0,1.0).setShininess(0.130).setSpecularColor(.09804,.09804,.09804)))
                    .setGeometry(new IndexedFaceSet().setCoordIndex(getIndexedFaceSet_11_42_coordIndex()).setTexCoordIndex(getIndexedFaceSet_11_42_texCoordIndex())
                      .setCoord(new Coordinate().setPoint(getCoordinate_12_42_point()))
                      .setTexCoord(new TextureCoordinate().setPoint(new MFVec2f(new double[] {1.639,1.688,1.706,1.686,1.705,1.659,1.639,1.651,1.787,1.646,1.788,1.672,1.862,1.635,1.788,1.688,1.862,1.665,1.936,1.625,1.936,1.633,2.0,1.615,1.639,1.702,1.707,1.702,1.447,1.66,1.447,1.629,1.448,1.7,1.448,1.733,1.427,1.753,1.41,1.8,1.42,1.721,1.391,1.793,1.361,1.636,1.361,1.609,1.277,1.617,1.277,1.591,1.278,1.75,1.361,1.781,1.203,1.592,1.203,1.574,1.203,1.722,1.395,1.693,1.043,1.586,1.03,1.517,1.026,1.494,1.0,1.482,1.057,1.597,1.057,1.528,2.0,1.577,1.702,1.62,1.639,1.613,1.447,1.591,1.277,1.552,1.203,1.535,1.0,1.444,1.936,1.586,1.787,1.608,1.765,1.228,1.679,1.204,1.989,1.578,1.956,1.513,1.918,1.398,1.862,1.597,1.827,1.266,1.637,1.192,1.445,1.18,1.276,1.208,1.201,1.22,1.275,1.126,1.201,1.138,1.445,1.098,1.275,1.076,1.201,1.089,1.445,1.049,1.636,1.092,1.636,1.017,1.852,1.174,1.806,1.075,1.753,1.034,1.671,1.074,1.668,1.012,1.006,1.446,1.005,1.419,1.037,1.307,1.042,1.224,1.069,1.165,1.08,1.108,1.391,1.616}))))))
                .addChild(new Transform("dad_Sqwht01_1")
                  .addChild(new Shape("Sqwht01_1")
                    .setAppearance(new Appearance()
                      .setTexture(new ImageTexture().setUrl(new String[] {"CIGRT.jpg","https://www.web3d.org/x3d/content/examples/Savage/ShipsCivilian/SmallCraft/CIGRT.jpg"}))
                      .setMaterial(new Material("material7_mat").setAmbientIntensity(0.067).setDiffuseColor(.15686,.15686,.15686).setShininess(0.130).setSpecularColor(.09804,.09804,.09804)))
                    .setGeometry(new IndexedFaceSet().setCoordIndex(new int[] {0,1,2,-1,2,3,0,-1}).setTexCoordIndex(new int[] {0,1,2,-1,2,3,0,-1})
                      .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {18.42037,-.54715,-3.98989,19.42037,-.54715,-3.98989,19.42037,.45285,-3.98989,18.42037,.45285,-3.98989})))
                      .setTexCoord(new TextureCoordinate().setPoint(new MFVec2f(new double[] {.5,.5,1.5,.5,1.5,1.5,.5,1.5})))))))))))));
            }
            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 int[] */
		private int[] getIndexedFaceSet_11_42_coordIndex_1()
		{
			int[] value = {0,1,2,-1,0,2,3,-1,4,5,6,-1,4,6,7,-1,8,9,10,-1,11,12,9,-1,11,9,8,-1,13,14,12,-1,13,12,11,-1,6,15,14,-1,6,14,13,-1,5,15,6,-1,15,16,17,-1,15,17,14,-1,18,19,20,-1,17,21,19,-1,17,19,18,-1,16,21,17,-1,22,23,1,-1,22,1,0,-1,24,0,3,-1,24,3,25,-1,22,0,26,-1,27,28,22,-1,27,22,29,-1,30,28,27,-1,31,32,33,-1,31,33,34,-1,26,0,24,-1,30,32,31,-1,35,36,27,-1,35,27,29,-1,37,38,36,-1,37,36,35,-1,39,35,29,-1,39,29,26,-1,28,40,23,-1,28,23,22,-1,37,35,41,-1,41,35,39,-1,36,42,30,-1,36,30,27,-1,43,42,36,-1,38,43,36,-1,44,24,25,-1,44,25,45,-1,46,44,45,-1,46,45,47,-1,48,49,44,-1,48,44,46,-1,50,46,47,-1,50,47,51,-1,52,48,46,-1,52,46,50,-1,31,7,40,-1,31,40,28,-1,49,53,44,-1,53,39,24,-1,53,24,44,-1,41,53,49,-1,29,22,26,-1,39,26,24,-1,42,32,30,-1,54,55,56,-1,57,58,59,-1,57,59,60,-1,32,55,61,-1,32,61,33,-1,34,4,7,-1,34,7,31,-1,55,57,60,-1,55,60,61,-1,62,63,58,-1,62,58,57,-1,54,62,57,-1,54,57,55,-1,43,56,42,-1,56,55,32,-1,43,54,56,-1,30,31,28,-1,12,18,20,-1,12,20,9,-1,14,17,18,-1,14,18,12,-1,64,52,50,-1,64,50,65,-1,1,8,10,-1,1,10,2,-1,65,50,51,-1,65,51,66,-1,63,67,68,-1,63,68,58,-1,58,68,69,-1,58,69,59,-1,68,65,70,-1,68,70,71,-1,65,66,70,-1,68,71,69,-1,72,63,52,-1,72,52,73,-1,74,64,65,-1,74,65,75,-1,67,76,77,-1,67,77,68,-1,78,79,80,-1,78,80,81,-1,23,11,8,-1,23,8,1,-1,67,72,78,-1,67,78,76,-1,74,79,73,-1,74,73,64,-1,76,78,81,-1,76,81,77,-1,79,74,75,-1,79,75,80,-1,81,80,75,-1,81,75,77,-1,38,37,41,-1,38,41,43,-1,41,39,53,-1,42,56,32,-1,40,13,11,-1,40,11,23,-1,7,6,13,-1,7,13,40,-1,19,21,82,-1,19,82,83,-1,3,2,84,-1,3,84,85,-1,4,34,86,-1,4,86,87,-1,25,3,85,-1,25,85,88,-1,34,33,89,-1,34,89,86,-1,47,25,88,-1,47,88,90,-1,33,60,91,-1,33,91,89,-1,51,47,90,-1,51,90,92,-1,60,59,93,-1,60,93,91,-1,70,51,92,-1,70,92,94,-1,59,71,95,-1,59,95,93,-1,20,19,83,-1,20,83,96,-1,84,97,98,-1,84,98,99,-1,100,101,102,-1,100,102,103,-1,97,104,105,-1,97,105,98,-1,71,70,94,-1,71,94,95,-1,88,85,106,-1,88,106,107,-1,90,88,107,-1,90,107,108,-1,92,90,108,-1,92,108,109,-1,85,84,99,-1,85,99,106,-1,109,108,110,-1,109,110,111,-1,21,16,112,-1,21,112,82,-1,108,107,113,-1,108,113,110,-1,111,110,114,-1,111,114,115,-1,110,113,116,-1,110,116,114,-1,107,106,117,-1,107,117,113,-1,117,118,116,-1,113,117,116,-1,100,103,105,-1,104,100,105,-1,105,103,119,-1,105,119,120,-1,9,20,96,-1,9,96,121,-1,105,120,122,-1,98,105,122,-1,123,124,118,-1,106,99,123,-1,106,123,117,-1,117,123,118,-1,123,122,124,-1,99,98,122,-1,99,122,123,-1,125,92,109,-1,125,109,126,-1,127,109,128,-1,126,109,127,-1,16,15,129,-1,16,129,112,-1,128,109,111,-1,128,111,130,-1,111,115,131,-1,130,111,131,-1,132,133,134,-1,132,134,135,-1,136,132,135,-1,136,135,137,-1,138,136,137,-1,138,137,139,-1,140,138,139,-1,140,139,141,-1,142,140,141,-1,142,141,143,-1,143,141,144,-1,144,141,145,-1,10,9,121,-1,10,121,146,-1,93,147,145,-1,93,145,141,-1,140,131,115,-1,142,131,140,-1,138,140,115,-1,138,115,114,-1,91,93,141,-1,91,141,139,-1,136,138,114,-1,136,114,116,-1,89,91,139,-1,89,139,137,-1,132,116,118,-1,136,116,132,-1,86,89,137,-1,86,137,135,-1,15,5,148,-1,15,148,129,-1,133,118,124,-1,132,118,133,-1,87,86,135,-1,87,135,134,-1,149,150,151,-1,149,151,152,-1,150,153,151,-1,152,87,134,-1,152,134,149,-1,149,134,133,-1,149,133,122,-1,133,124,122,-1,150,122,120,-1};
			return value;
		}
		private int[] getIndexedFaceSet_11_42_coordIndex_2()
		{
			int[] value = {149,122,150,-1,2,10,146,-1,2,146,84,-1,150,120,119,-1,150,119,103,-1,153,150,103,-1,153,103,102,-1,153,102,101,-1,147,125,126,-1,147,126,145,-1,145,126,127,-1,145,127,144,-1,144,127,128,-1,144,128,143,-1,143,128,130,-1,143,130,142,-1,142,130,131,-1,5,4,87,-1,5,87,148,-1,93,95,94,-1,93,94,92,-1,83,82,112,-1,83,112,96,-1,96,112,129,-1,96,129,121,-1,121,129,148,-1,121,148,146,-1,146,148,87,-1,146,87,84,-1,52,63,154,-1,52,154,155,-1,63,54,156,-1,63,156,154,-1,49,52,155,-1,49,155,157,-1,41,49,157,-1,41,157,158,-1,54,43,159,-1,54,159,156,-1,43,41,158,-1,43,158,159,-1,155,154,160,-1,155,160,161,-1};
			return value;
		}


		/** Define subarrays using type int[] */
		private int[] getIndexedFaceSet_11_42_texCoordIndex_1()
		{
			int[] value = {0,1,2,-1,0,2,3,-1,2,4,5,-1,2,5,1,-1,5,6,4,-1,7,8,6,-1,7,6,5,-1,7,8,8,-1,7,8,7,-1,5,6,8,-1,5,8,7,-1,4,6,5,-1,6,9,10,-1,6,10,8,-1,10,11,9,-1,10,11,11,-1,10,11,10,-1,9,11,10,-1,12,13,1,-1,12,1,0,-1,14,0,3,-1,14,3,15,-1,12,0,16,-1,17,12,12,-1,17,12,17,-1,16,12,17,-1,0,14,15,-1,0,15,3,-1,16,0,14,-1,16,14,0,-1,18,18,17,-1,18,17,17,-1,19,19,18,-1,19,18,18,-1,20,18,17,-1,20,17,16,-1,12,13,13,-1,12,13,12,-1,19,18,21,-1,21,18,20,-1,18,20,16,-1,18,16,17,-1,21,20,18,-1,19,21,18,-1,22,14,15,-1,22,15,23,-1,24,22,23,-1,24,23,25,-1,26,27,22,-1,26,22,24,-1,28,24,25,-1,28,25,29,-1,30,26,24,-1,30,24,28,-1,0,1,13,-1,0,13,12,-1,27,31,22,-1,31,20,14,-1,31,14,22,-1,21,31,27,-1,17,12,16,-1,20,16,14,-1,20,14,16,-1,27,22,31,-1,24,28,29,-1,24,29,25,-1,14,22,23,-1,14,23,15,-1,3,2,1,-1,3,1,0,-1,22,24,25,-1,22,25,23,-1,26,30,28,-1,26,28,24,-1,27,26,24,-1,27,24,22,-1,21,31,20,-1,31,22,14,-1,21,27,31,-1,16,0,12,-1,8,10,9,-1,8,9,6,-1,8,10,10,-1,8,10,8,-1,32,30,28,-1,32,28,33,-1,1,5,4,-1,1,4,2,-1,33,28,29,-1,33,29,34,-1,30,32,33,-1,30,33,28,-1,28,33,34,-1,28,34,29,-1,33,33,35,-1,33,35,35,-1,33,34,35,-1,33,35,34,-1,36,30,30,-1,36,30,36,-1,32,32,33,-1,32,33,33,-1,32,32,33,-1,32,33,33,-1,36,36,37,-1,36,37,37,-1,13,7,5,-1,13,5,1,-1,32,36,36,-1,32,36,32,-1,32,36,36,-1,32,36,32,-1,32,36,37,-1,32,37,33,-1,36,32,33,-1,36,33,37,-1,37,37,33,-1,37,33,33,-1,19,19,21,-1,19,21,21,-1,21,20,31,-1,20,31,14,-1,13,7,7,-1,13,7,13,-1,1,5,7,-1,1,7,13,-1,11,11,38,-1,11,38,38,-1,3,2,39,-1,3,39,40,-1,2,3,40,-1,2,40,39,-1,15,3,40,-1,15,40,41,-1,3,15,41,-1,3,41,40,-1,25,15,41,-1,25,41,42,-1,15,25,42,-1,15,42,41,-1,29,25,42,-1,29,42,43,-1,25,29,43,-1,25,43,42,-1,35,29,43,-1,35,43,44,-1,29,35,44,-1,29,44,43,-1,9,11,38,-1,9,38,45,-1,39,46,47,-1,39,47,48,-1,45,49,50,-1,45,50,51,-1,46,52,53,-1,46,53,47,-1,35,35,44,-1,35,44,44,-1,41,40,54,-1,41,54,55,-1,42,41,55,-1,42,55,56,-1,43,42,56,-1,43,56,57,-1,40,39,48,-1,40,48,54,-1,57,56,58,-1,57,58,59,-1,11,9,45,-1,11,45,38,-1,56,55,60,-1,56,60,58,-1,59,58,61,-1,59,61,62,-1,58,60,63,-1,58,63,61,-1,55,54,64,-1,55,64,60,-1,64,65,63,-1,60,64,63,-1,45,51,53,-1,52,45,53,-1,53,51,66,-1,53,66,67,-1,6,9,45,-1,6,45,52,-1,53,67,68,-1,47,53,68,-1,69,70,65,-1,54,48,69,-1,54,69,64,-1,64,69,65,-1,69,68,70,-1,48,47,68,-1,48,68,69,-1,71,43,57,-1,71,57,72,-1,73,57,74,-1,72,57,73,-1,9,6,52,-1,9,52,45,-1,74,57,59,-1,74,59,75,-1,59,62,76,-1,75,59,76,-1,64,69,48,-1,64,48,54,-1,60,64,54,-1,60,54,55,-1,58,60,55,-1,58,55,56,-1,59,58,56,-1,59,56,57,-1,75,59,57,-1,75,57,74,-1,74,57,73,-1,73,57,72,-1,4,6,52,-1,4,52,46,-1,43,71,72,-1,43,72,57,-1,59,76,62,-1,75,76,59,-1,58,59,62,-1,58,62,61,-1,42,43,57,-1,42,57,56,-1,60,58,61,-1,60,61,63,-1,41,42,56,-1,41,56,55,-1,64,63,65,-1,60,63,64,-1,40,41,55,-1,40,55,54,-1,6,4,46,-1,6,46,52,-1,69,65,70,-1,64,65,69,-1,39,40,54,-1,39,54,48,-1,47,53,52,-1,47,52,46,-1,53,45,52,-1,46,39,48,-1,46,48,47,-1,47,48,69,-1,47,69,68,-1,69,70,68,-1,53,68,67,-1};
			return value;
		}
		private int[] getIndexedFaceSet_11_42_texCoordIndex_2()
		{
			int[] value = {47,68,53,-1,2,4,46,-1,2,46,39,-1,53,67,66,-1,53,66,51,-1,45,53,51,-1,45,51,50,-1,45,50,49,-1,71,71,72,-1,71,72,72,-1,72,72,73,-1,72,73,73,-1,73,73,74,-1,73,74,74,-1,74,74,75,-1,74,75,75,-1,75,75,76,-1,4,2,39,-1,4,39,46,-1,43,44,44,-1,43,44,43,-1,38,38,45,-1,38,45,45,-1,45,45,52,-1,45,52,52,-1,52,52,46,-1,52,46,46,-1,46,46,39,-1,46,39,39,-1,30,30,29,-1,30,29,29,-1,30,27,23,-1,30,23,29,-1,27,30,29,-1,27,29,23,-1,21,27,23,-1,21,23,77,-1,27,21,77,-1,27,77,23,-1,21,21,77,-1,21,77,77,-1,29,29,77,-1,29,77,77,-1};
			return value;
		}


		/** Define subarrays using type double[] */
		private double[] getCoordinate_12_42_point_1()
		{
			double[] value = {11.30816,-2.47026,-3.80757,14.47051,-2.44217,-3.8643,14.41565,-4.05322,-3.62975,11.31977,-4.13306,-3.48958,14.34413,4.14297,-3.55822,18.25166,3.84844,-3.53617,18.26486,2.57062,-3.78302,14.42706,2.53746,-3.82084,18.30832,-2.409,-3.82648,21.81058,-2.89065,-3.57719,18.31745,-3.69098,-3.60196,18.29514,-.74781,-3.96199,21.79401,-.71842,-3.83145,18.28065,.91206,-3.9475,21.77952,.94146,-3.81697,21.75822,3.10889,-3.52483,25.26915,1.86937,-3.51788,25.2777,.97015,-3.60643,25.29218,-.68972,-3.62092,28.28541,.01556,-3.51881,25.29934,-1.59037,-3.54807,28.2828,.31554,-3.51619,11.29481,-.80924,-3.92308,14.49818,-.7806,-4.00188,2.30863,-3.06282,-3.3506,2.31623,-4.2152,-3.08065,2.30259,-2.00129,-3.71134,2.281,.77279,-3.98713,11.28032,.85063,-3.90859,2.29548,-.88709,-4.00161,2.2687,1.8817,-3.67745,11.2647,2.50936,-3.76411,2.25627,2.93672,-3.29824,2.24381,4.08417,-3.00822,11.24735,4.16631,-3.41715,1.29663,-.86917,-4.1601,1.28259,.74021,-4.14605,.49998,-.85238,-4.56688,.48629,.71662,-4.55319,.98457,-2.01138,-3.87283,14.48369,.87928,-3.98739,-.36251,-2.01772,-4.49304,.95068,1.87161,-3.83894,-.3964,1.86526,-4.45915,-1.77489,-3.3012,-3.038,-1.76889,-4.22771,-2.80723,-5.69397,-3.41321,-2.77649,-5.68884,-4.23973,-2.54485,-5.68976,-2.67933,-3.98546,-1.77036,-2.48955,-4.36124,-9.19557,-3.56195,-2.47505,-9.19191,-4.15234,-2.30959,-9.19149,-2.84889,-3.64971,-.19234,-2.73254,-3.58934,-1.81225,2.31008,-4.31936,-1.83074,3.09831,-2.98215,-.23859,2.56706,-3.54309,-5.75113,3.13733,-2.71932,-9.25475,3.21966,-2.41586,-9.26136,3.80705,-2.24012,-5.76039,3.95965,-2.47329,-1.84087,4.02062,-2.73524,-5.73431,2.42484,-3.94091,-9.23841,2.52739,-3.60279,-16.70363,-2.93846,-2.23387,-17.3066,-3.24869,-1.59177,-17.50181,-4.01014,-1.38721,-16.75075,2.46113,-2.18675,-17.35895,2.74953,-1.53942,-17.56739,3.50378,-1.32163,-18.70324,-3.98958,-1.25385,-18.76826,3.45993,-1.18883,-16.09968,2.46687,-2.30947,-16.05258,-2.9307,-2.35658,-16.70538,-2.73848,-2.23212,-17.31096,-2.74939,-1.58741,-16.74901,2.26114,-2.18849,-17.35459,2.25023,-1.54378,-16.09795,2.2679,-2.31121,-16.05432,-2.73172,-2.35484,-16.05978,-2.73728,-1.72319,-16.10342,2.26234,-1.67956,28.27978,.31245,-3.16623,28.28239,.01248,-3.16885,14.31749,-4.05876,-3.27548,11.31674,-4.13614,-3.13961,11.24432,4.16323,-3.06717,14.24593,4.14061,-3.20392,2.3132,-4.21828,-2.73068,2.24078,4.08109,-2.65825,-5.69186,-4.24281,-2.19488,-5.76341,3.95657,-2.12332,-9.19493,-4.15542,-1.95961,-9.26439,3.80397,-1.89015,-18.70628,-3.99266,-.90388,-18.77129,3.45685,-.83886,25.29631,-1.59345,-3.1981,18.31355,-3.59407,-3.25112,17.27978,-2.49356,.25029,13.24739,-3.00149,.56048};
			return value;
		}
		private double[] getCoordinate_12_42_point_2()
		{
			double[] value = {25.29343,-1.26347,-3.19522,27.7811,.15812,-3.17011,26.22561,.13901,-2.53547,24.46623,.11419,-1.45083,21.8058,-2.69375,-3.22548,20.18855,-1.80452,-.16297,11.27438,-3.12,.70676,2.27161,-3.20137,1.0282,-5.72604,-3.47055,.95664,-9.22665,-3.40083,.92697,-5.74431,-2.12726,1.71837,-9.24448,-2.10753,1.68826,25.26612,1.86629,-3.1679,2.25378,-1.90807,1.78948,-5.76522,-.18137,2.18535,-9.26496,-.21164,2.15481,2.23418,-.11217,2.25516,11.25378,-1.6782,1.63935,11.23349,-.03432,2.33369,21.39787,.06889,.6724,19.23964,.04175,1.62356,21.80755,-2.89373,-3.22723,16.73594,.01616,2.05171,12.90207,-1.13487,1.76365,12.73338,-.02134,2.34679,-18.45821,-3.74025,-.92942,-18.46097,-3.67475,-.67885,-16.97392,-3.16305,.312,-16.73655,-2.46754,1.07024,21.75519,3.10581,-3.17487,-15.44829,-1.62077,1.58888,-14.96452,-.26094,2.10507,11.22498,1.62154,1.66815,12.88252,1.10496,1.7832,13.19503,2.99805,.61284,11.22028,3.07953,.76087,2.22236,1.69166,1.82089,2.2175,2.99816,1.0823,-5.77834,1.77245,1.7524,-5.78363,3.12895,1.01424,-9.27764,1.69218,1.72142,-9.2825,2.99868,.98282,-15.47203,1.09903,1.61262,-16.77494,1.93212,1.10864,-17.02454,2.63651,.36262,-18.52043,3.13939,-.61938,18.31443,-3.69406,-3.25199,-18.51886,3.2093,-.86877,18.24863,3.84536,-3.18619,17.23562,2.56605,.29445,20.15591,1.9352,-.13034,21.75694,2.90582,-3.17661,18.2495,3.74537,-3.18706,25.269,1.53632,-3.17078,-9.25009,2.51549,-2.25139,-9.20318,-2.86078,-2.29832,-1.82582,2.29627,-2.75029,-1.78394,-2.50336,-2.79218,-.37644,-2.0319,-2.88258,-.41033,1.85109,-2.84869,-.41385,2.25458,-2.84516,-.37292,-2.43539,-2.88609};
			return value;
		}

		/** Large attribute array: IndexedFaceSet coordIndex field, scene-graph level=11, element #42, 1172 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 MFInt32 getIndexedFaceSet_11_42_coordIndex()
		{
			MFInt32 IndexedFaceSet_11_42_coordIndex = new MFInt32()/*2.finalize*/
				.append(new MFInt32(getIndexedFaceSet_11_42_coordIndex_1()))
				.append(new MFInt32(getIndexedFaceSet_11_42_coordIndex_2()));
			return IndexedFaceSet_11_42_coordIndex;
		}
		/** Large attribute array: IndexedFaceSet texCoordIndex field, scene-graph level=11, element #42, 1172 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 MFInt32 getIndexedFaceSet_11_42_texCoordIndex()
		{
			MFInt32 IndexedFaceSet_11_42_texCoordIndex = new MFInt32()/*2.finalize*/
				.append(new MFInt32(getIndexedFaceSet_11_42_texCoordIndex_1()))
				.append(new MFInt32(getIndexedFaceSet_11_42_texCoordIndex_2()));
			return IndexedFaceSet_11_42_texCoordIndex;
		}
		/** Large attribute array: Coordinate point field, scene-graph level=12, element #42, 486 total numbers made up of 162 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_12_42_point()
		{
			MFVec3f Coordinate_12_42_point = new MFVec3f()/*2.finalize*/
				.append(new MFVec3f(getCoordinate_12_42_point_1()))
				.append(new MFVec3f(getCoordinate_12_42_point_2()));
			return Coordinate_12_42_point;
		}

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

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