package Savage.ShipsMilitary.PatrolCraftNavalAcademyBrazil;

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

// Javadoc metadata annotations follow, see below for X3DJSAIL Java source code.
/**
 * <p> Brazilian Naval Academy Training Ship. </p>
 <p> Related links: Catalog page <a href="../../../../ShipsMilitary/PatrolCraftNavalAcademyBrazil/HornIndex.html" target="_blank">Horn</a>,  source <a href="../../../../ShipsMilitary/PatrolCraftNavalAcademyBrazil/Horn.java">Horn.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/PatrolCraftNavalAcademyBrazil/Horn.x3d">Horn.x3d</a> </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> description </i> </td>
			<td> Brazilian Naval Academy Training Ship </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> creator </i> </td>
			<td> Claudio Coreixas </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> created </i> </td>
			<td> 20 October 2009 </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> modified </i> </td>
			<td> 20 October 2019 </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> reference </i> </td>
			<td> <a href="http://www.en.mar.mil.br" target="_blank">http://www.en.mar.mil.br</a> </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> subject </i> </td>
			<td> ships </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/PatrolCraftNavalAcademyBrazil/Horn.x3d" target="_blank">https://www.web3d.org/x3d/content/examples/Savage/ShipsMilitary/PatrolCraftNavalAcademyBrazil/Horn.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/PatrolCraftNavalAcademyBrazil/../../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 Claudio Coreixas
 */

public class Horn
{
	/** Default constructor to create this object. */
	public Horn ()
	{
	  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("Horn.x3d"))
    .addMeta(new meta().setName(meta.NAME_DESCRIPTION).setContent("Brazilian Naval Academy Training Ship"))
    .addMeta(new meta().setName(meta.NAME_CREATOR    ).setContent("Claudio Coreixas"))
    .addMeta(new meta().setName(meta.NAME_CREATED    ).setContent("20 October 2009"))
    .addMeta(new meta().setName(meta.NAME_MODIFIED   ).setContent("20 October 2019"))
    .addMeta(new meta().setName(meta.NAME_REFERENCE  ).setContent("http://www.en.mar.mil.br"))
    .addMeta(new meta().setName(meta.NAME_SUBJECT    ).setContent("ships"))
    .addMeta(new meta().setName(meta.NAME_IDENTIFIER ).setContent("https://www.web3d.org/x3d/content/examples/Savage/ShipsMilitary/PatrolCraftNavalAcademyBrazil/Horn.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("Horn.x3d"))
    .addChild(new Sound().setMaxBack(100).setMaxFront(100)
      .setSource(new AudioClip("hornBlast").setDescription("horn").setUrl(new String[] {"horn2.wav","https://www.web3d.org/x3d/content/examples/Savage/ShipsMilitary/PatrolCraftNavalAcademyBrazil/horn2.wav"})))
    .addChild(new Transform().setTranslation(5.3,3.56,0.15)
      .addChild(new Transform().setRotation(0.0,1.0,0.0,-1.57)
        .addChild(new Transform().setScale(0.06,0.06,0.06)
          .addChild(new Transform("Tube01").setRotation(-1.0,0.0,0.0,-1.571).setScale(0.01838,0.01838,0.01838).setTranslation(0.0,0.03984,0.4117)
            .addChild(new Shape()
              .setAppearance(new Appearance()
                .setMaterial(new Material().setDiffuseColor(0.8392,0.898,0.651)))
              .setGeometry(new IndexedFaceSet("Tube01-FACES").setDEF("Tube01-FACES").setCoordIndex(getTube01_FACES_8_17_coordIndex())
                .setCoord(new Coordinate("Tube01-COORD").setPoint(getTube01_COORD_9_17_point()))))
            .addChild(new TouchSensor("blastHorn").setDescription("Touch to Blast the Horn!!!!"))))))
    .addChild(new ROUTE().setFromNode("blastHorn").setFromField("isActive").setToNode("hornBlast").setToField("loop")));
            }
            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[] getTube01_FACES_8_17_coordIndex_1()
		{
			int[] value = {0,1,13,-1,13,12,0,-1,1,2,14,-1,14,13,1,-1,2,3,15,-1,15,14,2,-1,3,4,16,-1,16,15,3,-1,4,5,17,-1,17,16,4,-1,5,6,18,-1,18,17,5,-1,6,7,19,-1,19,18,6,-1,7,8,20,-1,20,19,7,-1,8,9,21,-1,21,20,8,-1,9,10,22,-1,22,21,9,-1,10,11,23,-1,23,22,10,-1,11,0,12,-1,12,23,11,-1,12,13,25,-1,25,24,12,-1,13,14,26,-1,26,25,13,-1,14,15,27,-1,27,26,14,-1,15,16,28,-1,28,27,15,-1,16,17,29,-1,29,28,16,-1,17,18,30,-1,30,29,17,-1,18,19,31,-1,31,30,18,-1,19,20,32,-1,32,31,19,-1,20,21,33,-1,33,32,20,-1,21,22,34,-1,34,33,21,-1,22,23,35,-1,35,34,22,-1,23,12,24,-1,24,35,23,-1,24,25,37,-1,37,36,24,-1,25,26,38,-1,38,37,25,-1,26,27,39,-1,39,38,26,-1,27,28,40,-1,40,39,27,-1,28,29,41,-1,41,40,28,-1,29,30,42,-1,42,41,29,-1,30,31,43,-1,43,42,30,-1,31,32,44,-1,44,43,31,-1,32,33,45,-1,45,44,32,-1,33,34,46,-1,46,45,33,-1,34,35,47,-1,47,46,34,-1,35,24,36,-1,36,47,35,-1,36,37,49,-1,49,48,36,-1,37,38,50,-1,50,49,37,-1,38,39,51,-1,51,50,38,-1,39,40,52,-1,52,51,39,-1,40,41,53,-1,53,52,40,-1,41,42,54,-1,54,53,41,-1,42,43,55,-1,55,54,42,-1,43,44,56,-1,56,55,43,-1,44,45,57,-1,57,56,44,-1,45,46,58,-1,58,57,45,-1,46,47,59,-1,59,58,46,-1,47,36,48,-1,48,59,47,-1,48,49,61,-1,61,60,48,-1,49,50,62,-1,62,61,49,-1,50,51,63,-1,63,62,50,-1,51,52,64,-1,64,63,51,-1,52,53,65,-1,65,64,52,-1,53,54,66,-1,66,65,53,-1,54,55,67,-1,67,66,54,-1,55,56,68,-1,68,67,55,-1,56,57,69,-1,69,68,56,-1,57,58,70,-1,70,69,57,-1,58,59,71,-1,71,70,58,-1,59,48,60,-1,60,71,59,-1,60,61,73,-1,73,72,60,-1,61,62,74,-1,74,73,61,-1,62,63,75,-1,75,74,62,-1,63,64,76,-1,76,75,63,-1,64,65,77,-1,77,76,64,-1,65,66,78,-1,78,77,65,-1,66,67,79,-1,79,78,66,-1,67,68,80,-1,80,79,67,-1,68,69,81,-1,81,80,68,-1,69,70,82,-1,82,81,69,-1,70,71,83,-1,83,82,70,-1,71,60,72,-1,72,83,71,-1,72,73,85,-1,85,84,72,-1,73,74,86,-1,86,85,73,-1,74,75,87,-1,87,86,74,-1,75,76,88,-1,88,87,75,-1,76,77,89,-1,89,88,76,-1,77,78,90,-1,90,89,77,-1,78,79,91,-1,91,90,78,-1,79,80,92,-1,92,91,79,-1,80,81,93,-1,93,92,80,-1,81,82,94,-1,94,93,81,-1,82,83,95,-1,95,94,82,-1,83,72,84,-1,84,95,83,-1,84,85,97,-1,97,96,84,-1,85,86,98,-1,98,97,85,-1,86,87,99,-1,99,98,86,-1,87,88,100,-1,100,99,87,-1,88,89,101,-1,101,100,88,-1,89,90,102,-1,102,101,89,-1,90,91,103,-1,103,102,90,-1,91,92,104,-1,104,103,91,-1,92,93,105,-1,105,104,92,-1,93,94,106,-1,106,105,93,-1,94,95,107,-1,107,106,94,-1,95,84,96,-1,96,107,95,-1,96,97,109,-1,109,108,96,-1,97,98,110,-1,110,109,97,-1,98,99,111,-1,111,110,98,-1,99,100,112,-1,112,111,99,-1,100,101,113,-1,113,112,100,-1,101,102,114,-1,114,113,101,-1,102,103,115,-1,115,114,102,-1,103,104,116,-1,116,115,103,-1,104,105,117,-1,117,116,104,-1,105,106,118,-1,118,117,105,-1,106,107,119,-1,119,118,106,-1,107,96,108,-1,108,119,107,-1,108,109,121,-1,121,120,108,-1,109,110,122,-1,122,121,109,-1,110,111,123,-1,123,122,110,-1,111,112,124,-1,124,123,111,-1,112,113,125,-1,125,124,112,-1,113,114,126,-1,126,125,113,-1,114,115,127,-1,127,126,114,-1,115,116,128,-1,128,127,115,-1,116,117,129,-1,129,128,116,-1,117,118,130,-1,130,129,117,-1,118,119,131,-1,131,130,118,-1,119,108,120,-1,120,131,119,-1,120,121,133,-1,133,132,120,-1,121,122,134,-1,134,133,121,-1,122,123,135,-1,135,134,122,-1,123,124,136,-1,136,135,123,-1,124,125,137,-1,137,136,124,-1};
			return value;
		}
		private int[] getTube01_FACES_8_17_coordIndex_2()
		{
			int[] value = {125,126,138,-1,138,137,125,-1,126,127,139,-1,139,138,126,-1,127,128,140,-1,140,139,127,-1,128,129,141,-1,141,140,128,-1,129,130,142,-1,142,141,129,-1,130,131,143,-1,143,142,130,-1,131,120,132,-1,132,143,131,-1,132,133,145,-1,145,144,132,-1,133,134,146,-1,146,145,133,-1,134,135,147,-1,147,146,134,-1,135,136,148,-1,148,147,135,-1,136,137,149,-1,149,148,136,-1,137,138,150,-1,150,149,137,-1,138,139,151,-1,151,150,138,-1,139,140,152,-1,152,151,139,-1,140,141,153,-1,153,152,140,-1,141,142,154,-1,154,153,141,-1,142,143,155,-1,155,154,142,-1,143,132,144,-1,144,155,143,-1,144,145,157,-1,157,156,144,-1,145,146,158,-1,158,157,145,-1,146,147,159,-1,159,158,146,-1,147,148,160,-1,160,159,147,-1,148,149,161,-1,161,160,148,-1,149,150,162,-1,162,161,149,-1,150,151,163,-1,163,162,150,-1,151,152,164,-1,164,163,151,-1,152,153,165,-1,165,164,152,-1,153,154,166,-1,166,165,153,-1,154,155,167,-1,167,166,154,-1,155,144,156,-1,156,167,155,-1,156,157,169,-1,169,168,156,-1,157,158,170,-1,170,169,157,-1,158,159,171,-1,171,170,158,-1,159,160,172,-1,172,171,159,-1,160,161,173,-1,173,172,160,-1,161,162,174,-1,174,173,161,-1,162,163,175,-1,175,174,162,-1,163,164,176,-1,176,175,163,-1,164,165,177,-1,177,176,164,-1,165,166,178,-1,178,177,165,-1,166,167,179,-1,179,178,166,-1,167,156,168,-1,168,179,167,-1,168,169,181,-1,181,180,168,-1,169,170,182,-1,182,181,169,-1,170,171,183,-1,183,182,170,-1,171,172,184,-1,184,183,171,-1,172,173,185,-1,185,184,172,-1,173,174,186,-1,186,185,173,-1,174,175,187,-1,187,186,174,-1,175,176,188,-1,188,187,175,-1,176,177,189,-1,189,188,176,-1,177,178,190,-1,190,189,177,-1,178,179,191,-1,191,190,178,-1,179,168,180,-1,180,191,179,-1,180,181,193,-1,193,192,180,-1,181,182,194,-1,194,193,181,-1,182,183,195,-1,195,194,182,-1,183,184,196,-1,196,195,183,-1,184,185,197,-1,197,196,184,-1,185,186,198,-1,198,197,185,-1,186,187,199,-1,199,198,186,-1,187,188,200,-1,200,199,187,-1,188,189,201,-1,201,200,188,-1,189,190,202,-1,202,201,189,-1,190,191,203,-1,203,202,190,-1,191,180,192,-1,192,203,191,-1,192,193,205,-1,205,204,192,-1,193,194,206,-1,206,205,193,-1,194,195,207,-1,207,206,194,-1,195,196,208,-1,208,207,195,-1,196,197,209,-1,209,208,196,-1,197,198,210,-1,210,209,197,-1,198,199,211,-1,211,210,198,-1,199,200,212,-1,212,211,199,-1,200,201,213,-1,213,212,200,-1,201,202,214,-1,214,213,201,-1,202,203,215,-1,215,214,202,-1,203,192,204,-1,204,215,203,-1,204,205,1,-1,1,0,204,-1,205,206,2,-1,2,1,205,-1,206,207,3,-1,3,2,206,-1,207,208,4,-1,4,3,207,-1,208,209,5,-1,5,4,208,-1,209,210,6,-1,6,5,209,-1,210,211,7,-1,7,6,210,-1,211,212,8,-1,8,7,211,-1,212,213,9,-1,9,8,212,-1,213,214,10,-1,10,9,213,-1,214,215,11,-1,11,10,214,-1,215,204,0,-1,0,11,215,-1,216,217,235,-1,235,234,216,-1,217,218,236,-1,236,235,217,-1,218,219,237,-1,237,236,218,-1,219,220,238,-1,238,237,219,-1,220,221,239,-1,239,238,220,-1,221,222,240,-1,240,239,221,-1,222,223,241,-1,241,240,222,-1,223,224,242,-1,242,241,223,-1,224,225,243,-1,243,242,224,-1,225,226,244,-1,244,243,225,-1,226,227,245,-1,245,244,226,-1,227,228,246,-1,246,245,227,-1,228,229,247,-1,247,246,228,-1,229,230,248,-1,248,247,229,-1,230,231,249,-1,249,248,230,-1,231,232,250,-1,250,249,231,-1,232,233,251,-1,251,250,232,-1,233,216,234,-1,234,251,233,-1,234,235,253,-1,253,252,234,-1,235,236,254,-1,254,253,235,-1,236,237,255,-1,255,254,236,-1,237,238,256,-1,256,255,237,-1,238,239,257,-1,257,256,238,-1,239,240,258,-1,258,257,239,-1,240,241,259,-1,259,258,240,-1,241,242,260,-1,260,259,241,-1,242,243,261,-1,261,260,242,-1,243,244,262,-1,262,261,243,-1,244,245,263,-1,263,262,244,-1,245,246,264,-1,264,263,245,-1,246,247,265,-1,265,264,246,-1,247,248,266,-1,266,265,247,-1,248,249,267,-1,267,266,248,-1,249,250,268,-1,268,267,249,-1};
			return value;
		}
		private int[] getTube01_FACES_8_17_coordIndex_3()
		{
			int[] value = {250,251,269,-1,269,268,250,-1,251,234,252,-1,252,269,251,-1,252,253,271,-1,271,270,252,-1,253,254,272,-1,272,271,253,-1,254,255,273,-1,273,272,254,-1,255,256,274,-1,274,273,255,-1,256,257,275,-1,275,274,256,-1,257,258,276,-1,276,275,257,-1,258,259,277,-1,277,276,258,-1,259,260,278,-1,278,277,259,-1,260,261,279,-1,279,278,260,-1,261,262,280,-1,280,279,261,-1,262,263,281,-1,281,280,262,-1,263,264,282,-1,282,281,263,-1,264,265,283,-1,283,282,264,-1,265,266,284,-1,284,283,265,-1,266,267,285,-1,285,284,266,-1,267,268,286,-1,286,285,267,-1,268,269,287,-1,287,286,268,-1,269,252,270,-1,270,287,269,-1,270,271,289,-1,289,288,270,-1,271,272,290,-1,290,289,271,-1,272,273,291,-1,291,290,272,-1,273,274,292,-1,292,291,273,-1,274,275,293,-1,293,292,274,-1,275,276,294,-1,294,293,275,-1,276,277,295,-1,295,294,276,-1,277,278,296,-1,296,295,277,-1,278,279,297,-1,297,296,278,-1,279,280,298,-1,298,297,279,-1,280,281,299,-1,299,298,280,-1,281,282,300,-1,300,299,281,-1,282,283,301,-1,301,300,282,-1,283,284,302,-1,302,301,283,-1,284,285,303,-1,303,302,284,-1,285,286,304,-1,304,303,285,-1,286,287,305,-1,305,304,286,-1,287,270,288,-1,288,305,287,-1,288,289,307,-1,307,306,288,-1,289,290,308,-1,308,307,289,-1,290,291,309,-1,309,308,290,-1,291,292,310,-1,310,309,291,-1,292,293,311,-1,311,310,292,-1,293,294,312,-1,312,311,293,-1,294,295,313,-1,313,312,294,-1,295,296,314,-1,314,313,295,-1,296,297,315,-1,315,314,296,-1,297,298,316,-1,316,315,297,-1,298,299,317,-1,317,316,298,-1,299,300,318,-1,318,317,299,-1,300,301,319,-1,319,318,300,-1,301,302,320,-1,320,319,301,-1,302,303,321,-1,321,320,302,-1,303,304,322,-1,322,321,303,-1,304,305,323,-1,323,322,304,-1,305,288,306,-1,306,323,305,-1,232,231,230,-1,230,229,228,-1,228,227,226,-1,230,228,226,-1,226,225,224,-1,224,223,222,-1,226,224,222,-1,222,221,220,-1,220,219,218,-1,222,220,218,-1,226,222,218,-1,230,226,218,-1,218,217,216,-1,230,218,216,-1,232,230,216,-1,233,232,216,-1,307,308,309,-1,309,310,311,-1,311,312,313,-1,309,311,313,-1,313,314,315,-1,315,316,317,-1,313,315,317,-1,317,318,319,-1,319,320,321,-1,317,319,321,-1,313,317,321,-1,309,313,321,-1,321,322,323,-1,309,321,323,-1,307,309,323,-1,306,307,323,-1};
			return value;
		}


		/** Define subarrays using type double[] */
		private double[] getTube01_COORD_9_17_point_1()
		{
			double[] value = {0.0,-48.9,-38.2,0.0,15.34,-26.5,0.0,79.57,-17.7,0.0,143.8,-11.8,0.0,208.0,-8.812,0.0,272.3,-8.725,0.0,272.3,-8.061,0.0,208.0,-8.142,0.0,143.8,-10.91,0.0,79.57,-16.35,0.0,15.34,-24.48,0.0,-48.9,-35.3,13.07,-48.9,-35.9,9.063,15.34,-24.9,6.054,79.57,-16.63,4.037,143.8,-11.09,3.014,208.0,-8.281,2.984,272.3,-8.199,2.757,272.3,-7.575,2.785,208.0,-7.651,3.73,143.8,-10.25,5.593,79.57,-15.37,8.374,15.34,-23.01,12.07,-48.9,-33.17,24.56,-48.9,-29.27,17.03,15.34,-20.3,11.38,79.57,-13.56,7.587,143.8,-9.042,5.664,208.0,-6.75,5.608,272.3,-6.684,5.182,272.3,-6.175,5.233,208.0,-6.237,7.01,143.8,-8.354,10.51,79.57,-12.53,15.74,15.34,-18.76,22.69,-48.9,-27.04,33.09,-48.9,-19.1,22.95,15.34,-13.25,15.33,79.57,-8.85,10.22,143.8,-5.902,7.631,208.0,-4.406,7.556,272.3,-4.362,6.981,272.3,-4.031,7.051,208.0,-4.071,9.444,143.8,-5.453,14.16,79.57,-8.176,21.2,15.34,-12.24,30.57,-48.9,-17.65,37.62,-48.9,-6.634,26.1,15.34,-4.602,17.43,79.57,-3.073,11.62,143.8,-2.05,8.678,208.0,-1.53,8.592,272.3,-1.515,7.939,272.3,-1.4,8.018,208.0,-1.414,10.74,143.8,-1.894,16.1,79.57,-2.84,24.11,15.34,-4.252,34.76,-48.9,-6.129,37.62,-48.9,6.634,26.1,15.34,4.602,17.43,79.57,3.073,11.62,143.8,2.05,8.678,208.0,1.53,8.592,272.3,1.515,7.939,272.3,1.4,8.018,208.0,1.414,10.74,143.8,1.894,16.1,79.57,2.84,24.11,15.34,4.252,34.76,-48.9,6.129,33.09,-48.9,19.1,22.95,15.34,13.25,15.33,79.57,8.85,10.22,143.8,5.902,7.631,208.0,4.406,7.556,272.3,4.362,6.981,272.3,4.031,7.051,208.0,4.071,9.444,143.8,5.453,14.16,79.57,8.176,21.2,15.34,12.24,30.57,-48.9,17.65,24.56,-48.9,29.27,17.03,15.34,20.3,11.38,79.57,13.56,7.587,143.8,9.042,5.664,208.0,6.75,5.608,272.3,6.684,5.182,272.3,6.175,5.233,208.0,6.237,7.01,143.8,8.354,10.51,79.57,12.53,15.74,15.34,18.76,22.69,-48.9,27.04,13.07,-48.9,35.9,9.063,15.34,24.9,6.054,79.57,16.63,4.037,143.8,11.09};
			return value;
		}
		private double[] getTube01_COORD_9_17_point_2()
		{
			double[] value = {3.014,208.0,8.281,2.984,272.3,8.199,2.757,272.3,7.575,2.785,208.0,7.651,3.73,143.8,10.25,5.593,79.57,15.37,8.374,15.34,23.01,12.07,-48.9,33.17,0.0,-48.9,38.2,0.0,15.34,26.5,0.0,79.57,17.7,0.0,143.8,11.8,0.0,208.0,8.812,0.0,272.3,8.725,0.0,272.3,8.061,0.0,208.0,8.142,0.0,143.8,10.91,0.0,79.57,16.35,0.0,15.34,24.48,0.0,-48.9,35.3,-13.07,-48.9,35.9,-9.063,15.34,24.9,-6.054,79.57,16.63,-4.037,143.8,11.09,-3.014,208.0,8.281,-2.984,272.3,8.199,-2.757,272.3,7.575,-2.785,208.0,7.651,-3.73,143.8,10.25,-5.593,79.57,15.37,-8.374,15.34,23.01,-12.07,-48.9,33.17,-24.56,-48.9,29.27,-17.03,15.34,20.3,-11.38,79.57,13.56,-7.587,143.8,9.042,-5.664,208.0,6.75,-5.608,272.3,6.684,-5.182,272.3,6.175,-5.233,208.0,6.237,-7.01,143.8,8.354,-10.51,79.57,12.53,-15.74,15.34,18.76,-22.69,-48.9,27.04,-33.09,-48.9,19.1,-22.95,15.34,13.25,-15.33,79.57,8.85,-10.22,143.8,5.902,-7.631,208.0,4.406,-7.556,272.3,4.362,-6.981,272.3,4.031,-7.051,208.0,4.071,-9.444,143.8,5.453,-14.16,79.57,8.176,-21.2,15.34,12.24,-30.57,-48.9,17.65,-37.62,-48.9,6.634,-26.1,15.34,4.602,-17.43,79.57,3.073,-11.62,143.8,2.05,-8.678,208.0,1.53,-8.592,272.3,1.515,-7.939,272.3,1.4,-8.018,208.0,1.414,-10.74,143.8,1.894,-16.1,79.57,2.84,-24.11,15.34,4.252,-34.76,-48.9,6.129,-37.62,-48.9,-6.634,-26.1,15.34,-4.602,-17.43,79.57,-3.073,-11.62,143.8,-2.05,-8.678,208.0,-1.53,-8.592,272.3,-1.515,-7.939,272.3,-1.4,-8.018,208.0,-1.414,-10.74,143.8,-1.894,-16.1,79.57,-2.84,-24.11,15.34,-4.252,-34.76,-48.9,-6.129,-33.09,-48.9,-19.1,-22.95,15.34,-13.25,-15.33,79.57,-8.85,-10.22,143.8,-5.902,-7.631,208.0,-4.406,-7.556,272.3,-4.362,-6.981,272.3,-4.031,-7.051,208.0,-4.071,-9.444,143.8,-5.453,-14.16,79.57,-8.176,-21.2,15.34,-12.24,-30.57,-48.9,-17.65,-24.56,-48.9,-29.27,-17.03,15.34,-20.3,-11.38,79.57,-13.56,-7.587,143.8,-9.042,-5.664,208.0,-6.75,-5.608,272.3,-6.684,-5.182,272.3,-6.175,-5.233,208.0,-6.237};
			return value;
		}
		private double[] getTube01_COORD_9_17_point_3()
		{
			double[] value = {-7.01,143.8,-8.354,-10.51,79.57,-12.53,-15.74,15.34,-18.76,-22.69,-48.9,-27.04,-13.07,-48.9,-35.9,-9.063,15.34,-24.9,-6.054,79.57,-16.63,-4.037,143.8,-11.09,-3.014,208.0,-8.281,-2.984,272.3,-8.199,-2.757,272.3,-7.575,-2.785,208.0,-7.651,-3.73,143.8,-10.25,-5.593,79.57,-15.37,-8.374,15.34,-23.01,-12.07,-48.9,-33.17,26.87,267.6,-0.2755,25.27,267.6,-9.339,20.67,267.6,-17.31,13.62,267.6,-23.22,4.968,267.6,-26.37,-4.235,267.6,-26.37,-12.88,267.6,-23.22,-19.93,267.6,-17.31,-24.53,267.6,-9.339,-26.13,267.6,-0.2754,-24.53,267.6,8.788,-19.93,267.6,16.76,-12.88,267.6,22.67,-4.235,267.6,25.82,4.968,267.6,25.82,13.62,267.6,22.67,20.67,267.6,16.76,25.27,267.6,8.788,26.87,270.4,-0.2755,25.27,270.4,-9.339,20.67,270.4,-17.31,13.62,270.4,-23.22,4.968,270.4,-26.37,-4.235,270.4,-26.37,-12.88,270.4,-23.22,-19.93,270.4,-17.31,-24.53,270.4,-9.339,-26.13,270.4,-0.2754,-24.53,270.4,8.788,-19.93,270.4,16.76,-12.88,270.4,22.67,-4.235,270.4,25.82,4.968,270.4,25.82,13.62,270.4,22.67,20.67,270.4,16.76,25.27,270.4,8.788,26.87,273.2,-0.2755,25.27,273.2,-9.339,20.67,273.2,-17.31,13.62,273.2,-23.22,4.968,273.2,-26.37,-4.235,273.2,-26.37,-12.88,273.2,-23.22,-19.93,273.2,-17.31,-24.53,273.2,-9.339,-26.13,273.2,-0.2754,-24.53,273.2,8.788,-19.93,273.2,16.76,-12.88,273.2,22.67,-4.235,273.2,25.82,4.968,273.2,25.82,13.62,273.2,22.67,20.67,273.2,16.76,25.27,273.2,8.788,26.87,276.0,-0.2755,25.27,276.0,-9.339,20.67,276.0,-17.31,13.62,276.0,-23.22,4.968,276.0,-26.37,-4.235,276.0,-26.37,-12.88,276.0,-23.22,-19.93,276.0,-17.31,-24.53,276.0,-9.339,-26.13,276.0,-0.2754,-24.53,276.0,8.788,-19.93,276.0,16.76,-12.88,276.0,22.67,-4.235,276.0,25.82,4.968,276.0,25.82,13.62,276.0,22.67,20.67,276.0,16.76,25.27,276.0,8.788,26.87,278.8,-0.2755,25.27,278.8,-9.339,20.67,278.8,-17.31,13.62,278.8,-23.22,4.968,278.8,-26.37,-4.235,278.8,-26.37,-12.88,278.8,-23.22,-19.93,278.8,-17.31,-24.53,278.8,-9.339,-26.13,278.8,-0.2754,-24.53,278.8,8.788,-19.93,278.8,16.76};
			return value;
		}
		private double[] getTube01_COORD_9_17_point_4()
		{
			double[] value = {-12.88,278.8,22.67,-4.235,278.8,25.82,4.968,278.8,25.82,13.62,278.8,22.67,20.67,278.8,16.76,25.27,278.8,8.788,26.87,281.6,-0.2755,25.27,281.6,-9.339,20.67,281.6,-17.31,13.62,281.6,-23.22,4.968,281.6,-26.37,-4.235,281.6,-26.37,-12.88,281.6,-23.22,-19.93,281.6,-17.31,-24.53,281.6,-9.339,-26.13,281.6,-0.2754,-24.53,281.6,8.788,-19.93,281.6,16.76,-12.88,281.6,22.67,-4.235,281.6,25.82,4.968,281.6,25.82,13.62,281.6,22.67,20.67,281.6,16.76,25.27,281.6,8.788};
			return value;
		}

		/** Large attribute array: IndexedFaceSet DEF='Tube01-FACES' coordIndex field, scene-graph level=8, element #17, 2576 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 getTube01_FACES_8_17_coordIndex()
		{
			MFInt32 Tube01_FACES_8_17_coordIndex = new MFInt32()/*2.finalize*/
				.append(new MFInt32(getTube01_FACES_8_17_coordIndex_1()))
				.append(new MFInt32(getTube01_FACES_8_17_coordIndex_2()))
				.append(new MFInt32(getTube01_FACES_8_17_coordIndex_3()));
			return Tube01_FACES_8_17_coordIndex;
		}
		/** Large attribute array: Coordinate DEF='Tube01-COORD' point field, scene-graph level=9, element #17, 972 total numbers made up of 324 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 getTube01_COORD_9_17_point()
		{
			MFVec3f Tube01_COORD_9_17_point = new MFVec3f()/*2.finalize*/
				.append(new MFVec3f(getTube01_COORD_9_17_point_1()))
				.append(new MFVec3f(getTube01_COORD_9_17_point_2()))
				.append(new MFVec3f(getTube01_COORD_9_17_point_3()))
				.append(new MFVec3f(getTube01_COORD_9_17_point_4()));
			return Tube01_COORD_9_17_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 Horn 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 Horn().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.PatrolCraftNavalAcademyBrazil.Horn\" 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.PatrolCraftNavalAcademyBrazil.Horn self-validation test confirmation: ");
                if (!validationResults.equals("success"))
                    System.out.println();
                System.out.println(validationResults.trim());

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