package Savage.Weapons.CrewServedWeapons;

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

// Javadoc metadata annotations follow, see below for X3DJSAIL Java source code.
/**
 * <p> An M60 machine gun used on US Navy ships and RHIBs. </p>
 <p> Related links: Catalog page <a href="../../../../Weapons/CrewServedWeapons/M60Index.html" target="_blank">M60</a>,  source <a href="../../../../Weapons/CrewServedWeapons/M60.java">M60.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="../../../../Weapons/CrewServedWeapons/M60.x3d">M60.x3d</a> </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> description </i> </td>
			<td> An M60 machine gun used on US Navy ships and RHIBs </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> creator </i> </td>
			<td> LT Patrick Sullivan </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> created </i> </td>
			<td> 14 January 2005 </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> modified </i> </td>
			<td> 28 November 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/Weapons/CrewServedWeapons/M60.x3d" target="_blank">https://www.web3d.org/x3d/content/examples/Savage/Weapons/CrewServedWeapons/M60.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> generator </i> </td>
			<td> Wings3D, <a href="http://www.wings3d.com" target="_blank">http://www.wings3d.com</a> </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> license </i> </td>
			<td> <a href="../../../../Weapons/CrewServedWeapons/../../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 LT Patrick Sullivan
 */

public class M60
{
	/** Default constructor to create this object. */
	public M60 ()
	{
	  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_1)
  .setHead(new head()
    .addMeta(new meta().setName(meta.NAME_TITLE      ).setContent("M60.x3d"))
    .addMeta(new meta().setName(meta.NAME_DESCRIPTION).setContent("An M60 machine gun used on US Navy ships and RHIBs"))
    .addMeta(new meta().setName(meta.NAME_CREATOR    ).setContent("LT Patrick Sullivan"))
    .addMeta(new meta().setName(meta.NAME_CREATED    ).setContent("14 January 2005"))
    .addMeta(new meta().setName(meta.NAME_MODIFIED   ).setContent("28 November 2019"))
    .addMeta(new meta().setName(meta.NAME_IDENTIFIER ).setContent("https://www.web3d.org/x3d/content/examples/Savage/Weapons/CrewServedWeapons/M60.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_GENERATOR  ).setContent("Wings3D, http://www.wings3d.com"))
    .addMeta(new meta().setName(meta.NAME_LICENSE    ).setContent("../../license.html")))
  .setScene(new Scene()
    .addChild(new WorldInfo().setTitle("M60.x3d"))
    .addChild(new Transform("dad_M60").setScale(1.2,1.2,1.2).setTranslation(-2.752,-.59,0.0)
      .addChild(new Shape("M60")
        .setAppearance(new Appearance()
          .setMaterial(new Material("Black_mat").setDiffuseColor(0.0,0.0,0.0)))
        .setGeometry(new IndexedFaceSet().setCreaseAngle(0.524).setCoordIndex(getIndexedFaceSet_5_15_coordIndex())
          .setCoord(new Coordinate().setPoint(getCoordinate_6_15_point()))))));
            }
            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_5_15_coordIndex_1()
		{
			int[] value = {0,1,2,-1,0,2,3,-1,0,4,5,-1,0,5,6,-1,0,6,7,-1,0,7,8,-1,0,8,9,-1,0,9,10,-1,0,10,11,-1,0,11,12,-1,0,12,13,-1,0,13,14,-1,0,14,15,-1,0,15,16,-1,0,16,17,-1,0,17,1,-1,0,3,18,-1,0,18,4,-1,1,17,19,-1,1,19,2,-1,17,16,20,-1,17,20,19,-1,16,15,21,-1,16,21,20,-1,15,14,22,-1,15,22,21,-1,14,13,23,-1,14,23,22,-1,13,12,24,-1,13,24,23,-1,12,11,25,-1,12,25,24,-1,11,10,26,-1,11,26,25,-1,10,9,27,-1,10,27,26,-1,9,8,28,-1,9,28,27,-1,8,7,29,-1,8,29,28,-1,7,6,30,-1,7,30,29,-1,6,5,31,-1,6,31,30,-1,5,4,18,-1,5,18,31,-1,3,2,32,-1,3,32,33,-1,3,33,34,-1,3,34,18,-1,2,19,35,-1,2,35,32,-1,19,20,36,-1,19,36,35,-1,20,21,37,-1,20,37,36,-1,21,22,38,-1,21,38,37,-1,22,23,39,-1,22,39,38,-1,23,24,40,-1,23,40,39,-1,24,25,41,-1,24,41,40,-1,25,26,42,-1,25,42,41,-1,26,27,43,-1,26,43,42,-1,27,28,44,-1,27,44,43,-1,28,29,45,-1,28,45,44,-1,29,30,46,-1,29,46,45,-1,30,31,47,-1,30,47,46,-1,31,18,34,-1,31,34,47,-1,47,34,48,-1,47,48,49,-1,47,49,50,-1,47,50,46,-1,34,33,51,-1,34,51,48,-1,33,32,52,-1,33,52,51,-1,32,35,53,-1,32,53,52,-1,35,36,54,-1,35,54,53,-1,36,37,55,-1,36,55,54,-1,37,38,56,-1,37,56,55,-1,38,39,57,-1,38,57,56,-1,39,40,58,-1,39,58,57,-1,40,41,59,-1,40,59,58,-1,41,42,60,-1,41,60,59,-1,42,43,61,-1,42,61,60,-1,43,44,62,-1,43,62,61,-1,44,45,63,-1,44,63,62,-1,45,46,50,-1,45,50,63,-1,50,49,64,-1,50,64,65,-1,50,65,66,-1,50,66,63,-1,49,48,67,-1,49,67,64,-1,48,51,68,-1,48,68,67,-1,51,52,69,-1,51,69,68,-1,52,53,70,-1,52,70,69,-1,53,54,71,-1,53,71,70,-1,54,55,72,-1,54,72,71,-1,55,56,73,-1,55,73,72,-1,56,57,74,-1,56,74,73,-1,57,58,75,-1,57,75,74,-1,58,59,76,-1,58,76,75,-1,59,60,77,-1,59,77,76,-1,60,61,78,-1,60,78,77,-1,61,62,79,-1,61,79,78,-1,62,63,66,-1,62,66,79,-1,65,64,80,-1,65,80,81,-1,65,81,82,-1,65,82,66,-1,64,67,83,-1,64,83,80,-1,67,68,84,-1,67,84,83,-1,68,69,85,-1,68,85,84,-1,69,70,86,-1,69,86,85,-1,70,71,87,-1,70,87,86,-1,71,72,88,-1,71,88,87,-1,72,73,89,-1,72,89,88,-1,73,74,90,-1,73,90,89,-1,74,75,91,-1,74,91,90,-1,75,76,92,-1,75,92,91,-1,76,77,93,-1,76,93,92,-1,77,78,94,-1,77,94,93,-1,78,79,95,-1,78,95,94,-1,79,66,82,-1,79,82,95,-1,81,80,96,-1,81,96,97,-1,81,97,98,-1,81,98,82,-1,80,83,99,-1,80,99,96,-1,83,84,100,-1,83,100,99,-1,84,85,101,-1,84,101,100,-1,85,86,102,-1,85,102,101,-1,86,87,103,-1,86,103,102,-1,87,88,104,-1,87,104,103,-1,88,89,105,-1,88,105,104,-1,89,90,106,-1,89,106,105,-1,90,91,107,-1,90,107,106,-1,91,92,108,-1,91,108,107,-1,92,93,109,-1,92,109,108,-1,93,94,110,-1,93,110,109,-1,94,95,111,-1,94,111,110,-1,95,82,98,-1,95,98,111,-1,98,97,112,-1,98,112,113,-1,98,113,114,-1,98,114,111,-1,97,96,115,-1,97,115,112,-1,96,99,116,-1,96,116,115,-1,99,100,117,-1,99,117,116,-1,100,101,118,-1,100,118,117,-1,101,102,119,-1,101,119,118,-1,102,103,120,-1,102,120,119,-1,103,104,121,-1,103,121,120,-1,104,105,122,-1,104,122,121,-1,105,106,123,-1,105,123,122,-1,106,107,124,-1,106,124,123,-1,107,108,125,-1,107,125,124,-1,108,109,126,-1,108,126,125,-1,109,110,127,-1,109,127,126,-1,110,111,114,-1,110,114,127,-1,114,113,112,-1,114,112,115,-1,114,115,116,-1,114,116,117,-1,114,117,118,-1,114,118,119,-1,114,119,120,-1,114,120,121,-1,114,121,122,-1,114,122,123,-1,114,123,124,-1,114,124,125,-1};
			return value;
		}
		private int[] getIndexedFaceSet_5_15_coordIndex_2()
		{
			int[] value = {114,125,126,-1,114,126,127,-1,128,129,130,-1,128,130,131,-1,128,132,133,-1,128,133,134,-1,128,131,135,-1,128,135,132,-1,128,134,136,-1,128,136,129,-1,129,137,138,-1,129,138,130,-1,129,136,139,-1,129,139,137,-1,137,140,141,-1,137,141,138,-1,137,139,142,-1,137,142,140,-1,140,143,144,-1,140,144,141,-1,140,142,145,-1,140,145,143,-1,143,146,147,-1,143,147,144,-1,143,145,148,-1,143,148,146,-1,146,149,150,-1,146,150,147,-1,146,148,151,-1,146,151,149,-1,149,152,153,-1,149,153,150,-1,149,151,154,-1,149,154,152,-1,152,155,156,-1,152,156,153,-1,152,154,157,-1,152,157,155,-1,155,158,159,-1,155,159,156,-1,155,157,160,-1,155,160,158,-1,158,161,162,-1,158,162,159,-1,158,160,163,-1,158,163,161,-1,161,164,165,-1,161,165,162,-1,161,163,166,-1,161,166,164,-1,164,167,168,-1,164,168,165,-1,164,166,169,-1,164,169,167,-1,167,170,171,-1,167,171,168,-1,167,169,172,-1,167,172,170,-1,170,173,174,-1,170,174,171,-1,170,172,175,-1,170,175,173,-1,173,132,135,-1,173,135,174,-1,173,175,133,-1,173,133,132,-1,131,130,176,-1,131,176,177,-1,131,177,178,-1,131,178,135,-1,130,138,179,-1,130,179,176,-1,138,141,180,-1,138,180,179,-1,141,144,181,-1,141,181,180,-1,144,147,182,-1,144,182,181,-1,147,150,183,-1,147,183,182,-1,150,153,184,-1,150,184,183,-1,153,156,185,-1,153,185,184,-1,156,159,186,-1,156,186,185,-1,159,162,187,-1,159,187,186,-1,162,165,188,-1,162,188,187,-1,165,168,189,-1,165,189,188,-1,168,171,190,-1,168,190,189,-1,171,174,191,-1,171,191,190,-1,174,135,178,-1,174,178,191,-1,177,176,192,-1,177,192,193,-1,177,193,194,-1,177,194,178,-1,176,179,195,-1,176,195,192,-1,179,180,196,-1,179,196,195,-1,180,181,197,-1,180,197,196,-1,181,182,198,-1,181,198,197,-1,182,183,199,-1,182,199,198,-1,183,184,200,-1,183,200,199,-1,184,185,201,-1,184,201,200,-1,185,186,202,-1,185,202,201,-1,186,187,203,-1,186,203,202,-1,187,188,204,-1,187,204,203,-1,188,189,205,-1,188,205,204,-1,189,190,206,-1,189,206,205,-1,190,191,207,-1,190,207,206,-1,191,178,194,-1,191,194,207,-1,194,193,192,-1,194,192,195,-1,194,195,196,-1,194,196,197,-1,194,197,198,-1,194,198,199,-1,194,199,200,-1,194,200,201,-1,194,201,202,-1,194,202,203,-1,194,203,204,-1,194,204,205,-1,194,205,206,-1,194,206,207,-1,133,175,208,-1,133,208,209,-1,133,209,210,-1,133,210,134,-1,175,172,211,-1,175,211,208,-1,172,169,212,-1,172,212,211,-1,169,166,213,-1,169,213,212,-1,166,163,214,-1,166,214,213,-1,163,160,215,-1,163,215,214,-1,160,157,216,-1,160,216,215,-1,157,154,217,-1,157,217,216,-1,154,151,218,-1,154,218,217,-1,151,148,219,-1,151,219,218,-1,148,145,220,-1,148,220,219,-1,145,142,221,-1,145,221,220,-1,142,139,222,-1,142,222,221,-1,139,136,223,-1,139,223,222,-1,136,134,210,-1,136,210,223,-1,209,208,224,-1,209,224,225,-1,209,225,226,-1,209,226,210,-1,208,211,227,-1,208,227,224,-1,211,212,228,-1,211,228,227,-1,212,213,229,-1,212,229,228,-1,213,214,230,-1,213,230,229,-1,214,215,231,-1,214,231,230,-1,215,216,232,-1,215,232,231,-1,216,217,233,-1,216,233,232,-1,217,218,234,-1,217,234,233,-1,218,219,235,-1,218,235,234,-1,219,220,236,-1,219,236,235,-1,220,221,237,-1,220,237,236,-1,221,222,238,-1,221,238,237,-1,222,223,239,-1,222,239,238,-1,223,210,226,-1,223,226,239,-1,225,224,227,-1,225,227,228,-1,225,228,229,-1,225,229,230,-1,225,230,231,-1,225,231,232,-1,225,232,233,-1,225,233,234,-1,225,234,235,-1,225,235,236,-1,225,236,237,-1,225,237,238,-1,225,238,239,-1,225,239,226,-1,240,241,242,-1,240,242,243,-1,240,244,245,-1,240,245,246,-1,240,246,247,-1,240,247,248,-1,240,248,249,-1,240,249,250,-1,240,250,251,-1,240,251,252,-1,240,252,253,-1,240,253,254,-1,240,254,255,-1,240,255,256,-1,240,256,257,-1,240,257,241,-1,240,243,258,-1,240,258,244,-1,241,257,259,-1,241,259,242,-1,257,256,260,-1,257,260,259,-1,256,255,261,-1,256,261,260,-1,255,254,262,-1,255,262,261,-1,254,253,263,-1,254,263,262,-1};
			return value;
		}
		private int[] getIndexedFaceSet_5_15_coordIndex_3()
		{
			int[] value = {253,252,264,-1,253,264,263,-1,252,251,265,-1,252,265,264,-1,251,250,266,-1,251,266,265,-1,250,249,267,-1,250,267,266,-1,249,248,268,-1,249,268,267,-1,248,247,269,-1,248,269,268,-1,247,246,270,-1,247,270,269,-1,246,245,271,-1,246,271,270,-1,245,244,258,-1,245,258,271,-1,243,242,259,-1,243,259,260,-1,243,260,261,-1,243,261,262,-1,243,262,263,-1,243,263,264,-1,243,264,265,-1,243,265,266,-1,243,266,267,-1,243,267,268,-1,243,268,269,-1,243,269,270,-1,243,270,271,-1,243,271,258,-1,272,273,274,-1,272,274,275,-1,272,276,277,-1,272,277,278,-1,272,278,279,-1,272,279,280,-1,272,280,281,-1,272,281,282,-1,272,282,283,-1,272,283,284,-1,272,284,285,-1,272,285,286,-1,272,286,287,-1,272,287,288,-1,272,288,289,-1,272,289,273,-1,272,275,290,-1,272,290,276,-1,273,289,291,-1,273,291,274,-1,289,288,292,-1,289,292,291,-1,288,287,293,-1,288,293,292,-1,287,286,294,-1,287,294,293,-1,286,285,295,-1,286,295,294,-1,285,284,296,-1,285,296,295,-1,284,283,297,-1,284,297,296,-1,283,282,298,-1,283,298,297,-1,282,281,299,-1,282,299,298,-1,281,280,300,-1,281,300,299,-1,280,279,301,-1,280,301,300,-1,279,278,302,-1,279,302,301,-1,278,277,303,-1,278,303,302,-1,277,276,290,-1,277,290,303,-1,275,274,291,-1,275,291,292,-1,275,292,293,-1,275,293,294,-1,275,294,295,-1,275,295,296,-1,275,296,297,-1,275,297,298,-1,275,298,299,-1,275,299,300,-1,275,300,301,-1,275,301,302,-1,275,302,303,-1,275,303,290,-1,304,305,306,-1,304,306,307,-1,304,308,309,-1,304,309,310,-1,304,307,311,-1,304,311,308,-1,304,310,312,-1,304,312,305,-1,305,313,314,-1,305,314,306,-1,305,312,315,-1,305,315,313,-1,313,316,317,-1,313,317,314,-1,313,315,318,-1,313,318,316,-1,316,319,320,-1,316,320,317,-1,316,318,321,-1,316,321,319,-1,319,322,323,-1,319,323,320,-1,319,321,324,-1,319,324,322,-1,322,325,326,-1,322,326,323,-1,322,324,327,-1,322,327,325,-1,325,328,329,-1,325,329,326,-1,325,327,330,-1,325,330,328,-1,328,308,311,-1,328,311,329,-1,328,330,309,-1,328,309,308,-1,307,306,314,-1,307,314,317,-1,307,317,320,-1,307,320,323,-1,307,323,326,-1,307,326,329,-1,307,329,311,-1,310,309,330,-1,310,330,327,-1,310,327,324,-1,310,324,321,-1,310,321,318,-1,310,318,315,-1,310,315,312,-1,331,332,333,-1,331,333,334,-1,331,335,336,-1,331,336,334,-1,331,334,333,-1,331,333,332,-1,331,334,336,-1,331,336,335,-1,337,338,339,-1,337,339,340,-1,337,341,342,-1,337,342,338,-1,337,340,343,-1,337,343,341,-1,338,342,344,-1,338,344,339,-1,342,341,345,-1,342,345,346,-1,342,346,347,-1,342,347,344,-1,341,343,348,-1,341,348,345,-1,340,339,344,-1,340,344,343,-1,344,347,348,-1,344,348,343,-1,348,347,349,-1,348,349,350,-1,348,350,351,-1,348,351,352,-1,348,352,353,-1,348,353,345,-1,347,346,354,-1,347,354,355,-1,347,355,356,-1,347,356,357,-1,347,357,358,-1,347,358,359,-1,347,359,349,-1,346,345,360,-1,346,360,361,-1,346,362,363,-1,346,363,354,-1,346,361,364,-1,346,364,362,-1,345,365,366,-1,345,366,367,-1,345,367,368,-1,345,368,360,-1,345,353,369,-1,345,369,365,-1,365,350,370,-1,365,370,371,-1,365,362,364,-1,365,364,372,-1,365,371,373,-1,365,373,362,-1,365,372,374,-1,365,374,366,-1,365,369,351,-1,365,351,350,-1,350,349,375,-1,350,375,370,-1,349,362,376,-1,349,376,377,-1,349,377,378,-1,349,378,379,-1,349,379,380,-1,349,359,381,-1,349,381,382,-1,349,382,383,-1,349,383,363,-1,349,363,362,-1,349,380,384,-1,349,384,375,-1,362,373,385,-1,362,385,376,-1,371,370,386,-1,371,386,387,-1,371,387,388,-1,371,388,389,-1,371,389,390,-1,371,390,391,-1,371,391,373,-1,370,375,392,-1,370,392,386,-1,375,373,391,-1,375,391,393,-1,375,393,394,-1,375,394,395,-1,375,395,392,-1,375,384,396,-1,375,396,397,-1,375,397,398,-1,375,398,385,-1,375,385,373,-1,372,364,361,-1,372,361,360,-1,372,360,368,-1,372,368,374,-1,374,368,367,-1,374,367,366,-1,399,400,386,-1,399,386,401,-1,399,401,402,-1,399,402,403,-1,399,403,404,-1,386,400,387,-1};
			return value;
		}
		private int[] getIndexedFaceSet_5_15_coordIndex_4()
		{
			int[] value = {387,400,405,-1,387,405,388,-1,388,405,406,-1,388,406,389,-1,389,406,407,-1,389,407,408,-1,389,408,409,-1,389,409,410,-1,389,410,411,-1,389,411,390,-1,391,390,411,-1,391,411,410,-1,391,410,409,-1,391,409,408,-1,391,408,407,-1,391,407,412,-1,391,412,413,-1,391,413,414,-1,391,414,415,-1,391,415,416,-1,392,417,404,-1,392,404,403,-1,392,403,402,-1,392,402,401,-1,392,401,386,-1,404,417,418,-1,404,418,419,-1,404,419,420,-1,404,420,421,-1,404,421,399,-1,392,395,422,-1,392,422,417,-1,391,416,423,-1,391,423,393,-1,407,406,400,-1,407,400,399,-1,407,399,421,-1,407,421,420,-1,407,420,419,-1,407,419,418,-1,407,418,417,-1,407,417,422,-1,407,422,423,-1,407,423,416,-1,407,416,415,-1,407,415,414,-1,407,414,413,-1,407,413,412,-1,400,406,405,-1,423,424,394,-1,423,394,393,-1,423,422,424,-1,424,422,395,-1,424,395,394,-1,354,363,383,-1,354,383,355,-1,359,358,357,-1,359,357,381,-1,376,385,398,-1,376,398,377,-1,384,380,379,-1,384,379,396,-1,381,357,356,-1,381,356,382,-1,382,356,355,-1,382,355,383,-1,396,379,378,-1,396,378,397,-1,397,378,377,-1,397,377,398,-1,352,351,425,-1,352,425,426,-1,352,426,427,-1,352,427,428,-1,429,427,430,-1,430,427,426,-1,430,426,431,-1,431,426,432,-1,431,432,433,-1,429,430,434,-1,429,434,435,-1,435,436,429,-1,429,436,437,-1,429,437,427,-1,427,437,438,-1,427,438,428,-1,428,438,353,-1,428,353,352,-1,436,435,439,-1,440,432,441,-1,441,432,426,-1,441,426,442,-1,442,426,425,-1,442,425,443,-1,443,425,351,-1,443,351,369,-1,432,440,433,-1,439,444,436,-1,436,444,445,-1,436,445,437,-1,437,445,442,-1,437,442,353,-1,353,442,443,-1,353,443,369,-1,446,440,441,-1,446,441,442,-1,446,442,445,-1,437,353,438,-1,435,434,430,-1,435,430,431,-1,435,431,433,-1,435,433,440,-1,435,440,446,-1,435,446,445,-1,435,445,444,-1,435,444,439,-1};
			return value;
		}


		/** Define subarrays using type double[] */
		private double[] getCoordinate_6_15_point_1()
		{
			double[] value = {3.40094,.69648,-.03315,3.40094,.69619,-.0346,3.39484,.69633,-.03466,3.39484,.69663,-.03315,3.40094,.69619,-.03171,3.40094,.69537,-.03048,3.40094,.69415,-.02967,3.40094,.6927,-.02938,3.40094,.69126,-.02967,3.40094,.69003,-.03048,3.40094,.68922,-.03171,3.40094,.68893,-.03315,3.40094,.68922,-.0346,3.40094,.69003,-.03582,3.40094,.69126,-.03664,3.40094,.6927,-.03693,3.40094,.69415,-.03664,3.40094,.69537,-.03582,3.39484,.69633,-.03165,3.39484,.69548,-.03593,3.39484,.69421,-.03678,3.39484,.6927,-.03708,3.39484,.6912,-.03678,3.39484,.68993,-.03593,3.39484,.68908,-.03466,3.39484,.68878,-.03315,3.39484,.68908,-.03165,3.39484,.68993,-.03038,3.39484,.6912,-.02953,3.39484,.6927,-.02923,3.39484,.69421,-.02953,3.39484,.69548,-.03038,3.39477,.69798,-.03534,3.39477,.69841,-.03315,3.39477,.69798,-.03097,3.39477,.69674,-.03719,3.39477,.69489,-.03843,3.39477,.6927,-.03886,3.39477,.69052,-.03843,3.39477,.68867,-.03719,3.39477,.68743,-.03534,3.39477,.687,-.03315,3.39477,.68743,-.03097,3.39477,.68867,-.02912,3.39477,.69052,-.02788,3.39477,.6927,-.02744,3.39477,.69489,-.02788,3.39477,.69674,-.02912,3.36135,.69698,-.03138,3.36135,.69597,-.02988,3.36135,.69447,-.02888,3.36135,.69733,-.03315,3.36135,.69698,-.03492,3.36135,.69597,-.03642,3.36135,.69447,-.03743,3.36135,.6927,-.03778,3.36135,.69093,-.03743,3.36135,.68943,-.03642,3.36135,.68843,-.03492,3.36135,.68808,-.03315,3.36135,.68843,-.03138,3.36135,.68943,-.02988,3.36135,.69093,-.02888,3.36135,.6927,-.02853,3.36092,.69778,-.02807,3.36092,.69545,-.02651,3.36092,.6927,-.02597,3.36092,.69934,-.0304,3.36092,.69989,-.03315,3.36092,.69934,-.0359,3.36092,.69778,-.03823,3.36092,.69545,-.03979,3.36092,.6927,-.04034,3.36092,.68995,-.03979,3.36092,.68762,-.03823,3.36092,.68607,-.0359,3.36092,.68552,-.03315,3.36092,.68607,-.0304,3.36092,.68762,-.02807,3.36092,.68995,-.02651,3.24611,.69778,-.02807,3.24611,.69545,-.02651,3.24611,.6927,-.02597,3.24611,.69934,-.0304,3.24611,.69989,-.03315,3.24611,.69934,-.0359,3.24611,.69778,-.03823,3.24611,.69545,-.03979,3.24611,.6927,-.04034,3.24611,.68995,-.03979,3.24611,.68762,-.03823,3.24611,.68607,-.0359,3.24611,.68552,-.03315,3.24611,.68607,-.0304,3.24611,.68762,-.02807,3.24611,.68995,-.02651,3.05711,.69778,-.02807,3.05711,.69545,-.02651,3.05711,.6927,-.02597,3.05711,.69934,-.0304};
			return value;
		}
		private double[] getCoordinate_6_15_point_2()
		{
			double[] value = {3.05711,.69989,-.03315,3.05711,.69934,-.0359,3.05711,.69778,-.03823,3.05711,.69545,-.03979,3.05711,.6927,-.04034,3.05711,.68995,-.03979,3.05711,.68762,-.03823,3.05711,.68607,-.0359,3.05711,.68552,-.03315,3.05711,.68607,-.0304,3.05711,.68762,-.02807,3.05711,.68995,-.02651,3.00727,.69545,-.02651,3.00727,.6927,-.02597,3.00727,.68995,-.02651,3.00727,.69778,-.02807,3.00727,.69934,-.0304,3.00727,.69989,-.03315,3.00727,.69934,-.0359,3.00727,.69778,-.03823,3.00727,.69545,-.03979,3.00727,.6927,-.04034,3.00727,.68995,-.03979,3.00727,.68762,-.03823,3.00727,.68607,-.0359,3.00727,.68552,-.03315,3.00727,.68607,-.0304,3.00727,.68762,-.02807,3.30374,.66226,-.03315,3.30374,.66288,-.03626,3.31996,.66288,-.03626,3.31996,.66226,-.03315,3.30374,.66288,-.03005,3.27943,.66288,-.03005,3.27943,.66226,-.03315,3.31996,.66288,-.03005,3.27943,.66288,-.03626,3.30374,.66463,-.03889,3.31996,.66463,-.03889,3.27943,.66463,-.03889,3.30374,.66727,-.04065,3.31996,.66727,-.04065,3.27943,.66727,-.04065,3.30374,.67037,-.04127,3.31996,.67037,-.04127,3.27943,.67037,-.04127,3.30374,.67348,-.04065,3.31996,.67348,-.04065,3.27943,.67348,-.04065,3.30374,.67611,-.03889,3.31996,.67611,-.03889,3.27943,.67611,-.03889,3.30374,.67787,-.03626,3.31996,.67787,-.03626,3.27943,.67787,-.03626,3.30374,.67849,-.03315,3.31996,.67849,-.03315,3.27943,.67849,-.03315,3.30374,.67787,-.03005,3.31996,.67787,-.03005,3.27943,.67787,-.03005,3.30374,.67611,-.02742,3.31996,.67611,-.02742,3.27943,.67611,-.02742,3.30374,.67348,-.02566,3.31996,.67348,-.02566,3.27943,.67348,-.02566,3.30374,.67037,-.02504,3.31996,.67037,-.02504,3.27943,.67037,-.02504,3.30374,.66727,-.02566,3.31996,.66727,-.02566,3.27943,.66727,-.02566,3.30374,.66463,-.02742,3.31996,.66463,-.02742,3.27943,.66463,-.02742,3.32033,.66521,-.03529,3.32033,.66479,-.03315,3.32033,.66521,-.03102,3.32033,.66642,-.0371,3.32033,.66823,-.03831,3.32033,.67037,-.03874,3.32033,.67251,-.03831,3.32033,.67432,-.0371,3.32033,.67553,-.03529,3.32033,.67596,-.03315,3.32033,.67553,-.03102,3.32033,.67432,-.0292,3.32033,.67251,-.02799,3.32033,.67037,-.02757,3.32033,.66823,-.02799,3.32033,.66642,-.0292,3.32403,.66521,-.03529,3.32403,.66479,-.03315,3.32403,.66521,-.03102,3.32403,.66642,-.0371,3.32403,.66823,-.03831,3.32403,.67037,-.03874,3.32403,.67251,-.03831,3.32403,.67432,-.0371};
			return value;
		}
		private double[] getCoordinate_6_15_point_3()
		{
			double[] value = {3.32403,.67553,-.03529,3.32403,.67596,-.03315,3.32403,.67553,-.03102,3.32403,.67432,-.0292,3.32403,.67251,-.02799,3.32403,.67037,-.02757,3.32403,.66823,-.02799,3.32403,.66642,-.0292,3.27869,.66234,-.02512,3.27869,.65988,-.02881,3.27869,.65901,-.03315,3.27869,.66602,-.02266,3.27869,.67037,-.02179,3.27869,.67472,-.02266,3.27869,.6784,-.02512,3.27869,.68087,-.02881,3.27869,.68173,-.03315,3.27869,.68087,-.0375,3.27869,.6784,-.04118,3.27869,.67472,-.04365,3.27869,.67037,-.04451,3.27869,.66602,-.04365,3.27869,.66234,-.04118,3.27869,.65988,-.0375,3.00577,.66234,-.02512,3.00577,.65988,-.02881,3.00577,.65901,-.03315,3.00577,.66602,-.02266,3.00577,.67037,-.02179,3.00577,.67472,-.02266,3.00577,.6784,-.02512,3.00577,.68087,-.02881,3.00577,.68173,-.03315,3.00577,.68087,-.0375,3.00577,.6784,-.04118,3.00577,.67472,-.04365,3.00577,.67037,-.04451,3.00577,.66602,-.04365,3.00577,.66234,-.04118,3.00577,.65988,-.0375,3.19711,.70046,-.03315,3.19746,.70046,-.0349,3.19746,.6615,-.0349,3.19711,.6615,-.03315,3.19746,.70046,-.03141,3.19845,.70046,-.02993,3.19993,.70046,-.02894,3.20167,.70046,-.02859,3.20342,.70046,-.02894,3.2049,.70046,-.02993,3.20588,.70046,-.03141,3.20623,.70046,-.03315,3.20588,.70046,-.0349,3.2049,.70046,-.03638,3.20342,.70046,-.03737,3.20167,.70046,-.03771,3.19993,.70046,-.03737,3.19845,.70046,-.03638,3.19746,.6615,-.03141,3.19845,.6615,-.03638,3.19993,.6615,-.03737,3.20167,.6615,-.03771,3.20342,.6615,-.03737,3.2049,.6615,-.03638,3.20588,.6615,-.0349,3.20623,.6615,-.03315,3.20588,.6615,-.03141,3.2049,.6615,-.02993,3.20342,.6615,-.02894,3.20167,.6615,-.02859,3.19993,.6615,-.02894,3.19845,.6615,-.02993,3.14785,.70143,-.03315,3.14829,.70143,-.03538,3.14829,.65585,-.03538,3.14785,.65585,-.03315,3.14829,.70143,-.03092,3.14955,.70143,-.02903,3.15144,.70143,-.02777,3.15368,.70143,-.02732,3.15591,.70143,-.02777,3.1578,.70143,-.02903,3.15906,.70143,-.03092,3.1595,.70143,-.03315,3.15906,.70143,-.03538,3.1578,.70143,-.03728,3.15591,.70143,-.03854,3.15368,.70143,-.03898,3.15144,.70143,-.03854,3.14955,.70143,-.03728,3.14829,.65585,-.03092,3.14955,.65585,-.03728,3.15144,.65585,-.03854,3.15368,.65585,-.03898,3.15591,.65585,-.03854,3.1578,.65585,-.03728,3.15906,.65585,-.03538,3.1595,.65585,-.03315,3.15906,.65585,-.03092,3.1578,.65585,-.02903};
			return value;
		}
		private double[] getCoordinate_6_15_point_4()
		{
			double[] value = {3.15591,.65585,-.02777,3.15368,.65585,-.02732,3.15144,.65585,-.02777,3.14955,.65585,-.02903,3.02886,.69519,-.0496,3.02886,.70238,-.04962,3.0373,.7024,-.04962,3.0373,.69521,-.0496,3.02886,.69519,-.01663,2.70684,.69514,-.01663,2.70684,.69514,-.0496,3.0373,.69521,-.01662,2.70684,.70233,-.04962,3.02886,.70831,-.04525,3.0373,.70833,-.04525,2.70684,.70827,-.04525,3.02886,.71232,-.0397,3.0373,.71234,-.0397,2.70684,.71227,-.0397,3.02886,.71373,-.03315,3.0373,.71374,-.03315,2.70684,.71368,-.03315,3.02886,.71232,-.02661,3.0373,.71234,-.02661,2.70684,.71227,-.02661,3.02886,.70831,-.02105,3.0373,.70833,-.02105,2.70684,.70827,-.02105,3.02886,.70238,-.01676,3.0373,.7024,-.01676,2.70684,.70233,-.01676,3.02886,.67677,-.03315,3.02886,.67817,-.0397,3.0373,.67819,-.0397,3.0373,.67679,-.03315,3.02886,.67817,-.02661,3.0373,.67819,-.02661,3.0378,.64322,-.04994,3.0378,.69747,-.04994,3.0378,.69747,-.01636,3.0378,.64322,-.01636,3.02832,.64322,-.04994,3.02832,.69747,-.04994,3.02832,.64322,-.01636,3.02832,.69747,-.01636,2.7063,.64322,-.04994,2.7063,.69747,-.04994,2.7063,.69747,-.01636,2.7063,.64322,-.01636,2.6443,.69747,-.01636,2.6443,.65208,-.01636,2.61653,.65078,-.01636,2.67853,.64192,-.01636,2.67853,.64192,-.04994,2.7063,.71587,-.04994,2.7063,.71929,-.04155,2.7063,.71929,-.03315,2.7063,.71929,-.02476,2.7063,.71587,-.01636,2.6443,.70942,-.01636,2.7063,.64322,-.09757,2.7063,.69747,-.09757,2.6443,.69747,-.04994,2.6443,.70942,-.04994,2.6443,.69747,-.09757,2.6443,.65208,-.04994,2.6443,.61147,-.04994,2.7063,.61147,-.04994,2.7063,.61147,-.09757,2.61653,.65078,-.04994,2.5275,.65208,-.01636,2.5275,.65208,-.04994,2.6443,.64322,-.09757,2.5275,.69747,-.04994,2.6443,.61147,-.09757,2.5275,.69747,-.01636,2.6443,.70942,-.04994,2.6443,.71929,-.04155,2.6443,.71929,-.03315,2.6443,.71929,-.02476,2.6443,.70942,-.01636,2.6443,.71929,-.02476,2.6443,.71929,-.03315,2.6443,.71929,-.04155,2.5275,.69788,-.01636,2.5275,.69788,-.04994,2.52249,.63777,-.01636,2.52249,.63777,-.02476,2.52249,.63777,-.03315,2.52249,.63777,-.04155,2.52249,.63777,-.04994,2.52249,.69868,-.04994,2.52249,.69868,-.01636,2.52249,.69868,-.04155,2.52249,.69868,-.03315,2.52249,.69868,-.02476,2.5275,.69788,-.02476,2.5275,.69788,-.03315,2.5275,.69788,-.04155,2.44235,.60001,-.01636};
			return value;
		}
		private double[] getCoordinate_6_15_point_5()
		{
			double[] value = {2.44235,.59664,-.02476,2.50646,.63022,-.01636,2.49043,.62267,-.01636,2.4744,.60807,-.01636,2.45838,.59915,-.01636,2.44235,.59583,-.03315,2.44235,.59664,-.04155,2.44235,.60001,-.04994,2.45838,.59915,-.04994,2.4744,.60807,-.04994,2.49043,.62267,-.04994,2.50646,.63022,-.04994,2.44235,.62321,-.04994,2.44235,.64642,-.04994,2.44235,.66962,-.04994,2.44235,.69282,-.04994,2.44235,.71603,-.04994,2.44235,.71603,-.01636,2.44235,.69282,-.01636,2.44235,.66962,-.01636,2.44235,.64642,-.01636,2.44235,.62321,-.01636,2.44235,.71939,-.02476,2.44235,.71939,-.04155,2.44235,.7202,-.03315,2.62339,.63409,-.01636,2.62617,.6174,-.01636,2.65662,.60854,-.01636,2.67614,.62523,-.01636,2.6526,.59185,-.01636,2.63799,.57959,-.01636,2.62249,.58181,-.01636,2.61889,.60071,-.01636,2.61515,.58402,-.01636,2.65348,.57737,-.01636,2.65539,.58522,-.01636,2.6526,.59185,-.04994,2.65662,.60854,-.04994,2.67614,.62523,-.04994,2.65539,.58522,-.04994,2.61515,.58402,-.04994,2.61889,.60071,-.04994,2.62617,.6174,-.04994,2.62339,.63409,-.04994,2.65348,.57737,-.04994,2.63799,.57959,-.04994,2.62249,.58181,-.04994};
			return value;
		}

		/** Large attribute array: IndexedFaceSet coordIndex field, scene-graph level=5, element #15, 3464 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_5_15_coordIndex()
		{
			MFInt32 IndexedFaceSet_5_15_coordIndex = new MFInt32()/*2.finalize*/
				.append(new MFInt32(getIndexedFaceSet_5_15_coordIndex_1()))
				.append(new MFInt32(getIndexedFaceSet_5_15_coordIndex_2()))
				.append(new MFInt32(getIndexedFaceSet_5_15_coordIndex_3()))
				.append(new MFInt32(getIndexedFaceSet_5_15_coordIndex_4()));
			return IndexedFaceSet_5_15_coordIndex;
		}
		/** Large attribute array: Coordinate point field, scene-graph level=6, element #15, 1341 total numbers made up of 447 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_15_point()
		{
			MFVec3f Coordinate_6_15_point = new MFVec3f()/*2.finalize*/
				.append(new MFVec3f(getCoordinate_6_15_point_1()))
				.append(new MFVec3f(getCoordinate_6_15_point_2()))
				.append(new MFVec3f(getCoordinate_6_15_point_3()))
				.append(new MFVec3f(getCoordinate_6_15_point_4()))
				.append(new MFVec3f(getCoordinate_6_15_point_5()));
			return Coordinate_6_15_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 M60 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 M60().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.Weapons.CrewServedWeapons.M60\" 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.Weapons.CrewServedWeapons.M60 self-validation test confirmation: ");
                if (!validationResults.equals("success"))
                    System.out.println();
                System.out.println(validationResults.trim());

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