package Savage.HarborEquipment.NavigationAids;

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> Lighted Buoy Prototype (Lateral Marker) with options for Green/Red, Light On/Off, and Light Glow Scale. </p>
 <p> Related links: Catalog page <a href="../../../../HarborEquipment/NavigationAids/LightedBuoyPrototypeIndex.html" target="_blank">LightedBuoyPrototype</a>,  source <a href="../../../../HarborEquipment/NavigationAids/LightedBuoyPrototype.java">LightedBuoyPrototype.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="../../../../HarborEquipment/NavigationAids/LightedBuoyPrototype.x3d">LightedBuoyPrototype.x3d</a> </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> description </i> </td>
			<td> Lighted Buoy Prototype (Lateral Marker) with options for Green/Red, Light On/Off, and Light Glow Scale. </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> creator </i> </td>
			<td> Planet 9 Studios, Inc., San Francisco, CA </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> producer </i> </td>
			<td> Christian Greuel, Director of Art and Production </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> modelers </i> </td>
			<td> Danny Lee, Christian Greuel </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> reference </i> </td>
			<td> <a href="http://www.planet9.com" target="_blank">http://www.planet9.com</a> </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> reference </i> </td>
			<td> IHO S-57: <a href="http://www.caris.com/s-57" target="_blank">http://www.caris.com/s-57</a> </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> translator </i> </td>
			<td> Xj3D Format Converter </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> created </i> </td>
			<td> 17 August 2006 </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> translated </i> </td>
			<td> 18 August 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/HarborEquipment/NavigationAids/LightedBuoyPrototype.x3d" target="_blank">https://www.web3d.org/x3d/content/examples/Savage/HarborEquipment/NavigationAids/LightedBuoyPrototype.x3d</a> </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> license </i> </td>
			<td> <a href="../../../../HarborEquipment/NavigationAids/../../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 Planet 9 Studios, Inc., San Francisco, CA
 */

public class LightedBuoyPrototype
{
	/** Default constructor to create this object. */
	public LightedBuoyPrototype ()
	{
	  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("LightedBuoyPrototype.x3d"))
    .addMeta(new meta().setName(meta.NAME_DESCRIPTION).setContent("Lighted Buoy Prototype (Lateral Marker) with options for Green/Red, Light On/Off, and Light Glow Scale."))
    .addMeta(new meta().setName(meta.NAME_CREATOR    ).setContent("Planet 9 Studios, Inc., San Francisco, CA"))
    .addMeta(new meta().setName("producer").setContent("Christian Greuel, Director of Art and Production"))
    .addMeta(new meta().setName("modelers").setContent("Danny Lee, Christian Greuel"))
    .addMeta(new meta().setName(meta.NAME_REFERENCE  ).setContent("http://www.planet9.com"))
    .addMeta(new meta().setName(meta.NAME_REFERENCE  ).setContent("IHO S-57: http://www.caris.com/s-57"))
    .addMeta(new meta().setName(meta.NAME_TRANSLATOR ).setContent("Xj3D Format Converter"))
    .addMeta(new meta().setName(meta.NAME_CREATED    ).setContent("17 August 2006"))
    .addMeta(new meta().setName(meta.NAME_TRANSLATED ).setContent("18 August 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/HarborEquipment/NavigationAids/LightedBuoyPrototype.x3d"))
    .addMeta(new meta().setName(meta.NAME_LICENSE    ).setContent("../../license.html")))
  .setScene(new Scene()
    .addChild(new WorldInfo().setTitle("LightedBuoyPrototype.x3d"))
    .addChild(new ProtoDeclare("LightedBuoy").setName("LightedBuoy")
      .setProtoInterface(new ProtoInterface()
        .addComments(" NOTE: CATLAM = Catagory of Lateral Marker (Reference: IHO S-57) ")
        .addField(new field().setName("Catlam").setType(field.TYPE_SFINT32).setAccessType(field.ACCESSTYPE_INPUTOUTPUT).setValue(1))
        .addComments(" 0=None(Unlikely), 1=Green(Port), 2=Red(Starboard), 3=NotImplemented, 4=NotImplemented ")
        .addField(new field().setName("LightType").setType(field.TYPE_SFINT32).setAccessType(field.ACCESSTYPE_INPUTOUTPUT).setValue(1))
        .addComments(" 0=LightOff, 1=LightOn, 2=LightFlashing(NotImplemented) ")
        .addField(new field().setName("LightGlow").setType(field.TYPE_SFVEC3F).setAccessType(field.ACCESSTYPE_INPUTOUTPUT).setValue(new SFVec3f(1.0,1.0,1.0)))
        .addComments(" XYZ Scale of Light Glow Effect (suggest Z=1.0) (Not Implemented) ")
        .addField(new field().setName("Number").setType(field.TYPE_SFINT32).setAccessType(field.ACCESSTYPE_INPUTOUTPUT).setValue(0)))
      .setProtoBody(new ProtoBody()
        .addChild(new Group("LightedBuoyGeometry")
          .addChild(new Switch("CatlamSwitch").setWhichChoice(-1)
            .setIS(new IS()
              .addConnect(new connect().setNodeField("whichChoice").setProtoField("Catlam")))
            .addChild(new Group("LightedBuoyNone"))
            .addChild(new Group("LightedBuoyGreen")
              .addChild(new Switch("BuoyLightGreenSwitch").setWhichChoice(-1)
                .setIS(new IS()
                  .addConnect(new connect().setNodeField("whichChoice").setProtoField("LightType")))
                .addChild(new Transform("BuoyLightOffGreen").setTranslation(-0.003122,0.513942,-0.00303)
                  .addChild(new Shape()
                    .setAppearance(new Appearance()
                      .setMaterial(new Material().setAmbientIntensity(0.0).setDiffuseColor(0.588235,0.588235,0.588235).setShininess(0.145))
                      .setTexture(new ImageTexture("BuoyGreen07").setUrl(new String[] {"Textures/BuoyGreen07.jpg","https://www.web3d.org/x3d/content/examples/Savage/HarborEquipment/NavigationAids/Textures/BuoyGreen07.jpg"})))
                    .setGeometry(new IndexedFaceSet("BuoyLightBulb-FACES").setDEF("BuoyLightBulb-FACES").setCoordIndex(new int[] {0,2,1,-1,0,3,2,-1,0,4,3,-1,0,5,4,-1,0,6,5,-1,0,1,6,-1,3,10,9,-1,3,4,10,-1,4,11,10,-1,4,5,11,-1,5,12,11,-1,5,6,12,-1,6,7,12,-1,6,1,7,-1,8,13,14,-1,8,14,15,-1,8,15,16,-1,8,16,17,-1,7,8,13,-1,14,13,8,-1,9,10,15,-1,15,14,9,-1,10,11,16,-1,16,15,10,-1,11,12,17,-1,17,16,11,-1,12,7,8,-1,8,17,12,-1,1,18,7,-1,1,2,18,-1,2,9,18,-1,2,3,9,-1,7,18,13,-1,13,8,7,-1,18,9,14,-1,14,13,18,-1}).setNormalIndex(new int[] {13,18,7,-1,13,2,18,-1,13,5,2,-1,13,17,5,-1,13,12,17,-1,13,7,12,-1,2,4,3,-1,2,5,4,-1,5,15,4,-1,5,17,15,-1,17,11,15,-1,17,12,11,-1,12,8,11,-1,12,7,8,-1,0,9,10,-1,0,10,16,-1,0,16,6,-1,0,6,1,-1,8,0,9,-1,10,9,0,-1,3,4,16,-1,16,10,3,-1,4,15,6,-1,6,16,4,-1,15,11,1,-1,1,6,15,-1,11,8,0,-1,0,1,11,-1,7,14,8,-1,7,18,14,-1,18,3,14,-1,18,2,3,-1,8,14,9,-1,9,0,8,-1,14,3,10,-1,10,9,14,-1}).setTexCoordIndex(new int[] {0,2,1,-1,0,3,19,-1,0,4,3,-1,0,5,4,-1,0,6,5,-1,0,1,6,-1,3,10,9,-1,3,4,10,-1,4,11,10,-1,4,5,11,-1,5,12,11,-1,5,6,12,-1,6,7,12,-1,6,1,7,-1,20,21,14,-1,20,14,15,-1,20,15,16,-1,8,16,17,-1,7,8,13,-1,14,21,20,-1,9,10,15,-1,15,14,9,-1,10,11,16,-1,16,15,10,-1,11,12,17,-1,17,16,11,-1,12,7,8,-1,8,17,12,-1,1,18,7,-1,1,2,18,-1,19,9,22,-1,19,3,9,-1,7,18,13,-1,13,8,7,-1,22,9,14,-1,14,21,22,-1})
                      .setCoord(new Coordinate("BuoyLightOffGreen-COORD").setPoint(new MFVec3f(new double[] {0.003149,2.41685,0.003059,0.06215,2.41685,0.00303,0.032623,2.41685,-0.048112,-0.026431,2.41685,-0.048112,-0.055905,2.41685,0.003059,-0.026378,2.41685,0.054202,0.032676,2.41685,0.054202,0.06215,2.53089,0.00303,0.03533,2.57828,0.00303,-0.026431,2.53089,-0.048112,-0.055905,2.53089,0.003059,-0.026378,2.53089,0.054202,0.032676,2.53089,0.054202,0.019213,2.57828,-0.024885,-0.013021,2.57828,-0.024885,-0.029085,2.57828,0.003059,-0.012968,2.57828,0.030975,0.019266,2.57828,0.030975,0.03257,2.53089,-0.048142})))
                      .setNormal(new Normal().setVector(new MFVec3f(new double[] {0.4913,0.8237,0.2827,0.3046,0.7938,0.5262,-0.3965,-0.6099,-0.686,-0.4864,0.2367,-0.841,-0.9715,0.2367,4.0E-4,-0.7923,-0.61,4.0E-4,-0.3039,0.7939,0.5264,0.7923,-0.61,-4.0E-4,0.9762,0.212,0.0453,0.2976,0.4869,-0.8211,-0.3336,0.7461,-0.5761,0.4862,0.2367,0.8411,0.3965,-0.6099,0.686,0.0,-1.0,0.0,0.4852,0.2366,-0.8417,-0.4857,0.2366,0.8414,-0.6078,0.794,5.0E-4,-0.3962,-0.6099,0.6862,0.3962,-0.6099,-0.6862})))
                      .setTexCoord(new TextureCoordinate("BuoyLightOffGreen-TEXCOORD").setPoint(new MFVec2f(new double[] {2.0,0.486349,3.00028,0.486349,3.62636,0.486349,0.374691,0.486349,1.0,0.486349,1.62567,0.486349,2.37433,0.486349,3.00028,0.84887,3.0005,0.9995,0.374691,0.84887,1.0,0.84887,1.62567,0.84887,2.37433,0.84887,3.62694,0.9995,0.374988,0.9995,1.0,0.9995,1.62567,0.9995,2.37433,0.9995,3.62706,0.84887,-0.373638,0.486349,-0.999495,0.9995,-0.373059,0.9995,-0.372942,0.84887}))))))
                .addChild(new Transform("BuoyLightOnGreen").setTranslation(0.0,3.045,0.0)
                  .addChild(new Transform("BuoyLightOnGreenBulb").setTranslation(-0.003122,-2.53106,-0.00303)
                    .addChild(new Shape()
                      .setAppearance(new Appearance()
                        .setMaterial(new Material().setAmbientIntensity(0.0).setDiffuseColor(0.113725,0.662745,0.254902).setEmissiveColor(0.113725,0.662745,0.254902).setShininess(0.145)))
                      .setGeometry(new IndexedFaceSet().setUSE("BuoyLightBulb-FACES"))))
                  .addChild(new Billboard().setAxisOfRotation(0.0,0.0,0.0)
                    .addChild(new Transform("BuoyLightOnGreenGlow").setRotation(-1.0,0.0,0.0,-1.57079)
                      .setIS(new IS()
                        .addConnect(new connect().setNodeField("scale").setProtoField("LightGlow")))
                      .addChild(new Collision().setEnabled(false)
                        .addChild(new Shape()
                          .setAppearance(new Appearance()
                            .setMaterial(new Material().setDiffuseColor(0.113725,0.662745,0.254902).setEmissiveColor(0.113725,0.662745,0.254902).setTransparency(0.1))
                            .setTexture(new ImageTexture().setUrl(new String[] {"Textures/LightOnGreenGlow.png","https://www.web3d.org/x3d/content/examples/Savage/HarborEquipment/NavigationAids/Textures/LightOnGreenGlow.png"})))
                          .setGeometry(new IndexedFaceSet().setCoordIndex(new int[] {2,0,3,-1,1,3,0,-1}).setNormalIndex(new int[] {0,0,0,-1,0,0,0,-1}).setTexCoordIndex(new int[] {2,0,3,-1,1,3,0,-1})
                            .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {-0.5,0.0,0.5,0.5,0.0,0.5,-0.5,0.0,-0.5,0.5,0.0,-0.5})))
                            .setNormal(new Normal().setVector(new MFVec3f(new double[] {0.0,1.0,0.0})))
                            .setTexCoord(new TextureCoordinate().setPoint(new MFVec2f(new double[] {0.0,0.0,1.0,0.0,0.0,1.0,1.0,1.0}))))))))))
              .addChild(new Group("BuoyBodyGreen")
                .addChild(new Transform("BuoyBaseGreen").setTranslation(0.0,0.513942,0.0)
                  .addChild(new Shape()
                    .setAppearance(new Appearance()
                      .setMaterial(new Material().setAmbientIntensity(0.0).setDiffuseColor(0.588235,0.588235,0.588235).setShininess(0.145))
                      .setTexture(new ImageTexture().setUrl(new String[] {"Textures/BuoyGreen01.jpg","https://www.web3d.org/x3d/content/examples/Savage/HarborEquipment/NavigationAids/Textures/BuoyGreen01.jpg"})))
                    .setGeometry(new IndexedFaceSet().setCoordIndex(new int[] {20,29,28,-1,20,21,29,-1,21,30,29,-1,21,22,30,-1,22,31,30,-1,22,23,31,-1,23,32,31,-1,23,24,32,-1,24,33,32,-1,24,25,33,-1,25,34,33,-1,25,26,34,-1,26,35,34,-1,26,27,35,-1,27,28,35,-1,27,20,28,-1}).setNormalIndex(new int[] {1,6,1,-1,1,6,6,-1,6,7,6,-1,6,7,7,-1,7,0,7,-1,7,0,0,-1,0,2,0,-1,0,2,2,-1,2,5,2,-1,2,5,5,-1,5,4,5,-1,5,4,4,-1,4,3,4,-1,4,3,3,-1,3,1,3,-1,3,1,1,-1}).setTexCoordIndex(new int[] {0,1,2,-1,0,3,1,-1,3,4,1,-1,3,5,4,-1,16,6,17,-1,16,7,6,-1,7,8,6,-1,7,9,8,-1,9,10,8,-1,9,11,10,-1,11,12,10,-1,11,13,12,-1,13,14,12,-1,13,15,14,-1,15,2,14,-1,15,0,2,-1})
                      .setCoord(new Coordinate("BuoyBase-COORD").setPoint(getBuoyBase_COORD_12_58_point()))
                      .setNormal(new Normal().setVector(new MFVec3f(new double[] {-0.7071,0.0,-0.7071,1.0,0.0,0.0,-1.0,0.0,0.0,0.7071,0.0,0.7071,0.0,0.0,1.0,-0.7071,0.0,0.7071,0.7071,0.0,-0.7071,0.0,0.0,-1.0})))
                      .setTexCoord(new TextureCoordinate("BuoyBase-TEXCOORD").setPoint(getBuoyBase_TEXCOORD_12_60_point()))))
                  .addChild(new Shape()
                    .setAppearance(new Appearance()
                      .setMaterial(new Material().setAmbientIntensity(0.0).setDiffuseColor(0.588235,0.588235,0.588235).setShininess(0.145))
                      .setTexture(new ImageTexture().setUrl(new String[] {"Textures/BuoyGreen02.jpg","https://www.web3d.org/x3d/content/examples/Savage/HarborEquipment/NavigationAids/Textures/BuoyGreen02.jpg"})))
                    .setGeometry(new IndexedFaceSet().setCoordIndex(new int[] {0,4,2,-1,1,3,4,-1,0,1,4,-1,3,2,4,-1,5,13,6,-1,9,14,11,-1,7,8,13,-1,10,12,14,-1,5,7,13,-1,9,10,14,-1,8,6,13,-1,12,11,14,-1,28,29,30,-1,28,30,31,-1,28,31,32,-1,28,32,33,-1,28,33,34,-1,28,34,35,-1}).setNormalIndex(new int[] {0,0,0,-1,0,0,0,-1,0,0,0,-1,0,0,0,-1,1,1,1,-1,0,0,0,-1,1,1,1,-1,0,0,0,-1,1,1,1,-1,0,0,0,-1,1,1,1,-1,0,0,0,-1,0,0,0,-1,0,0,0,-1,0,0,0,-1,0,0,0,-1,0,0,0,-1,0,0,0,-1}).setTexCoordIndex(new int[] {29,30,31,-1,27,26,30,-1,29,27,30,-1,26,31,30,-1,29,30,27,-1,29,30,31,-1,31,26,30,-1,27,26,30,-1,29,31,30,-1,29,27,30,-1,26,27,30,-1,26,31,30,-1,18,19,20,-1,18,20,21,-1,18,21,22,-1,18,22,23,-1,18,23,24,-1,18,24,25,-1})
                      .setCoord(new Coordinate().setUSE("BuoyBase-COORD"))
                      .setNormal(new Normal().setVector(new MFVec3f(new double[] {0.0,1.0,0.0,0.0,-1.0,0.0})))
                      .setTexCoord(new TextureCoordinate().setUSE("BuoyBase-TEXCOORD"))))
                  .addChild(new Shape()
                    .setAppearance(new Appearance()
                      .setMaterial(new Material().setAmbientIntensity(0.0).setDiffuseColor(0.588235,0.588235,0.588235).setShininess(0.145))
                      .setTexture(new ImageTexture().setUrl(new String[] {"Textures/BuoyGreen04.jpg","https://www.web3d.org/x3d/content/examples/Savage/HarborEquipment/NavigationAids/Textures/BuoyGreen04.jpg"})))
                    .setGeometry(new IndexedFaceSet().setCoordIndex(new int[] {2,4,13,-1,13,7,2,-1,4,0,5,-1,5,13,4,-1,1,4,13,-1,13,6,1,-1,4,3,8,-1,8,13,4,-1,15,16,14,-1,14,10,15,-1,16,17,9,-1,9,14,16,-1,18,16,14,-1,14,11,18,-1,16,19,12,-1,12,14,16,-1,16,15,14,-1,10,14,15,-1,17,16,9,-1,14,9,16,-1,16,18,14,-1,11,14,18,-1,19,16,12,-1,14,12,16,-1,4,2,13,-1,7,13,2,-1,0,4,5,-1,13,5,4,-1,4,1,13,-1,6,13,1,-1,3,4,8,-1,13,8,4,-1}).setNormalIndex(new int[] {2,2,2,-1,2,2,2,-1,0,0,0,-1,0,0,0,-1,3,3,3,-1,3,3,3,-1,1,1,1,-1,1,1,1,-1,2,2,2,-1,2,2,2,-1,1,1,1,-1,1,1,1,-1,3,3,3,-1,3,3,3,-1,0,0,0,-1,0,0,0,-1,3,3,3,-1,3,3,3,-1,0,0,0,-1,0,0,0,-1,2,2,2,-1,2,2,2,-1,1,1,1,-1,1,1,1,-1,3,3,3,-1,3,3,3,-1,1,1,1,-1,1,1,1,-1,2,2,2,-1,2,2,2,-1,0,0,0,-1,0,0,0,-1}).setTexCoordIndex(new int[] {50,44,51,-1,51,46,50,-1,48,49,28,-1,28,37,48,-1,44,45,46,-1,46,47,44,-1,32,33,26,-1,26,34,32,-1,28,37,42,-1,42,43,28,-1,26,40,41,-1,41,35,26,-1,34,37,38,-1,38,39,34,-1,34,26,35,-1,35,36,34,-1,37,28,42,-1,43,42,28,-1,40,26,41,-1,35,41,26,-1,37,34,38,-1,39,38,34,-1,26,34,35,-1,36,35,34,-1,44,50,51,-1,46,51,50,-1,49,48,28,-1,37,28,48,-1,45,44,46,-1,47,46,44,-1,33,32,26,-1,34,26,32,-1})
                      .setCoord(new Coordinate().setUSE("BuoyBase-COORD"))
                      .setNormal(new Normal().setVector(new MFVec3f(new double[] {-0.7069,0.0,-0.7072,0.7069,0.0,0.7072,-0.7069,0.0,0.7072,0.7069,0.0,-0.7072})))
                      .setTexCoord(new TextureCoordinate().setUSE("BuoyBase-TEXCOORD"))))
                  .addChild(new Shape()
                    .setAppearance(new Appearance()
                      .setMaterial(new Material().setAmbientIntensity(0.0).setDiffuseColor(0.588235,0.588235,0.588235).setShininess(0.145))
                      .setTexture(new ImageTexture().setUrl(new String[] {"Textures/BuoyGreen06.jpg","https://www.web3d.org/x3d/content/examples/Savage/HarborEquipment/NavigationAids/Textures/BuoyGreen06.jpg"})))
                    .setGeometry(new IndexedFaceSet().setCoordIndex(new int[] {10,9,5,-1,5,6,10,-1,12,10,6,-1,6,8,12,-1,11,12,8,-1,8,7,11,-1,9,11,7,-1,7,5,9,-1,54,59,58,-1,54,55,59,-1,55,60,59,-1,55,56,60,-1,56,61,60,-1,56,57,61,-1,57,58,61,-1,57,54,58,-1,58,63,62,-1,58,59,63,-1,59,64,63,-1,59,60,64,-1,60,65,64,-1,60,61,65,-1,61,62,65,-1,61,58,62,-1,62,67,66,-1,62,63,67,-1,63,68,67,-1,63,64,68,-1,64,69,68,-1,64,65,69,-1,65,66,69,-1,65,62,66,-1,66,71,70,-1,66,67,71,-1,67,72,71,-1,67,68,72,-1,68,73,72,-1,68,69,73,-1,69,70,73,-1,69,66,70,-1,70,75,74,-1,70,71,75,-1,71,76,75,-1,71,72,76,-1,72,77,76,-1,72,73,77,-1,73,74,77,-1,73,70,74,-1,74,79,78,-1,74,75,79,-1,75,80,79,-1,75,76,80,-1,76,81,80,-1,76,77,81,-1,77,78,81,-1,77,74,78,-1,78,83,82,-1,78,79,83,-1,79,84,83,-1,79,80,84,-1,80,85,84,-1,80,81,85,-1,81,82,85,-1,81,78,82,-1,82,55,54,-1,82,83,55,-1,83,56,55,-1,83,84,56,-1,84,57,56,-1,84,85,57,-1,85,54,57,-1,85,82,54,-1}).setNormalIndex(new int[] {5,5,5,-1,5,5,5,-1,1,1,1,-1,1,1,1,-1,9,9,9,-1,9,9,9,-1,2,2,2,-1,2,2,2,-1,9,8,8,-1,9,9,8,-1,3,3,3,-1,3,3,3,-1,5,7,7,-1,5,5,7,-1,6,6,6,-1,6,6,6,-1,8,1,1,-1,8,8,1,-1,3,3,3,-1,3,3,3,-1,7,2,2,-1,7,7,2,-1,6,6,6,-1,6,6,6,-1,1,4,4,-1,1,1,4,-1,3,3,3,-1,3,3,3,-1,2,0,0,-1,2,2,0,-1,6,6,6,-1,6,6,6,-1,4,5,5,-1,4,4,5,-1,3,3,3,-1,3,3,3,-1,0,9,9,-1,0,0,9,-1,6,6,6,-1,6,6,6,-1,5,7,7,-1,5,5,7,-1,3,3,3,-1,3,3,3,-1,9,8,8,-1,9,9,8,-1,6,6,6,-1,6,6,6,-1,7,2,2,-1,7,7,2,-1,3,3,3,-1,3,3,3,-1,8,1,1,-1,8,8,1,-1,6,6,6,-1,6,6,6,-1,2,0,0,-1,2,2,0,-1,3,3,3,-1,3,3,3,-1,1,4,4,-1,1,1,4,-1,6,6,6,-1,6,6,6,-1,0,9,9,-1,0,0,9,-1,3,3,3,-1,3,3,3,-1,4,5,5,-1,4,4,5,-1,6,6,6,-1,6,6,6,-1}).setTexCoordIndex(new int[] {94,92,93,-1,93,95,94,-1,89,88,91,-1,91,90,89,-1,94,92,93,-1,93,95,94,-1,89,88,91,-1,91,90,89,-1,73,76,75,-1,73,74,76,-1,74,76,76,-1,74,74,76,-1,74,75,76,-1,74,73,75,-1,73,75,75,-1,73,73,75,-1,75,4,77,-1,75,76,4,-1,76,4,4,-1,76,76,4,-1,76,77,4,-1,76,75,77,-1,75,77,77,-1,75,75,77,-1,77,79,78,-1,77,4,79,-1,4,79,79,-1,4,4,79,-1,4,78,79,-1,4,77,78,-1,77,78,78,-1,77,77,78,-1,78,81,80,-1,78,79,81,-1,79,81,81,-1,79,79,81,-1,79,80,81,-1,79,78,80,-1,78,80,80,-1,78,78,80,-1,80,12,82,-1,80,81,12,-1,81,12,12,-1,81,81,12,-1,81,82,12,-1,81,80,82,-1,80,82,82,-1,80,80,82,-1,82,84,83,-1,82,12,84,-1,12,84,84,-1,12,12,84,-1,12,83,84,-1,12,82,83,-1,82,83,83,-1,82,82,83,-1,83,86,85,-1,83,84,86,-1,84,86,86,-1,84,84,86,-1,84,85,86,-1,84,83,85,-1,83,85,85,-1,83,83,85,-1,85,17,87,-1,85,86,17,-1,86,17,17,-1,86,86,17,-1,86,87,17,-1,86,85,87,-1,85,87,87,-1,85,85,87,-1})
                      .setCoord(new Coordinate().setUSE("BuoyBase-COORD"))
                      .setNormal(new Normal().setVector(new MFVec3f(new double[] {-0.7071,0.0,-0.7071,1.0,0.0,0.0,-1.0,0.0,0.0,0.0,1.0,0.0,0.7071,0.0,0.7071,0.0,0.0,1.0,0.0,-1.0,0.0,-0.7071,0.0,0.7071,0.7071,0.0,-0.7071,0.0,0.0,-1.0})))
                      .setTexCoord(new TextureCoordinate().setUSE("BuoyBase-TEXCOORD"))))
                  .addChild(new Shape()
                    .setAppearance(new Appearance()
                      .setMaterial(new Material().setAmbientIntensity(0.0).setDiffuseColor(0.588235,0.588235,0.588235).setShininess(0.145))
                      .setTexture(new ImageTexture().setUSE("BuoyGreen07")))
                    .setGeometry(new IndexedFaceSet().setCoordIndex(new int[] {36,38,37,-1,36,39,38,-1,36,40,39,-1,36,41,40,-1,37,43,42,-1,37,38,43,-1,38,44,43,-1,38,39,44,-1,39,45,44,-1,39,40,45,-1,40,46,45,-1,40,41,46,-1,41,47,46,-1,41,36,47,-1,36,42,47,-1,36,37,42,-1,48,49,50,-1,48,50,51,-1,48,51,52,-1,48,52,53,-1,42,43,49,-1,49,48,42,-1,43,44,50,-1,50,49,43,-1,44,45,51,-1,51,50,44,-1,45,46,52,-1,52,51,45,-1,46,47,53,-1,53,52,46,-1,47,42,48,-1,48,53,47,-1}).setNormalIndex(new int[] {12,12,12,-1,12,12,12,-1,12,12,12,-1,12,12,12,-1,1,4,1,-1,1,3,4,-1,3,8,4,-1,3,8,8,-1,8,5,8,-1,8,5,5,-1,5,2,5,-1,5,2,2,-1,2,0,2,-1,2,0,0,-1,0,1,0,-1,0,1,1,-1,7,7,7,-1,7,7,7,-1,7,7,7,-1,7,7,7,-1,11,10,10,-1,10,11,11,-1,10,13,13,-1,13,10,10,-1,13,14,14,-1,14,13,13,-1,14,9,9,-1,9,14,14,-1,9,6,6,-1,6,9,9,-1,6,11,11,-1,11,6,6,-1}).setTexCoordIndex(new int[] {52,53,13,-1,52,54,69,-1,52,55,54,-1,52,56,55,-1,13,58,57,-1,13,53,58,-1,69,59,70,-1,69,54,59,-1,54,60,59,-1,54,55,60,-1,55,61,60,-1,55,56,61,-1,56,62,61,-1,56,52,62,-1,52,57,62,-1,52,13,57,-1,71,72,65,-1,71,65,66,-1,63,66,67,-1,63,67,68,-1,57,58,64,-1,64,63,57,-1,70,59,65,-1,65,72,70,-1,59,60,66,-1,66,65,59,-1,60,61,67,-1,67,66,60,-1,61,62,68,-1,68,67,61,-1,62,57,63,-1,63,68,62,-1})
                      .setCoord(new Coordinate().setUSE("BuoyBase-COORD"))
                      .setNormal(new Normal().setVector(new MFVec3f(new double[] {0.5,0.0,0.866,1.0,0.0,0.0,-0.4999,0.0,0.866,0.4999,0.0,-0.866,0.5,0.0,-0.866,-1.0,0.0,0.0,0.204,-0.9129,0.3534,0.0,1.0,0.0,-0.5,0.0,-0.866,-0.204,-0.9129,0.3534,0.204,-0.9129,-0.3534,0.4081,-0.9129,0.0,0.0,-1.0,0.0,-0.204,-0.9129,-0.3534,-0.4081,-0.9129,0.0})))
                      .setTexCoord(new TextureCoordinate().setUSE("BuoyBase-TEXCOORD")))))
                .addChild(new Transform("BuoyLegsOutsideGreen").setTranslation(0.0,0.513942,0.0)
                  .addChild(new Shape()
                    .setAppearance(new Appearance()
                      .setMaterial(new Material().setAmbientIntensity(0.0).setDiffuseColor(0.588235,0.588235,0.588235).setShininess(0.145))
                      .setTexture(new ImageTexture().setUrl(new String[] {"Textures/BuoyGreen03.png","https://www.web3d.org/x3d/content/examples/Savage/HarborEquipment/NavigationAids/Textures/BuoyGreen03.png"})))
                    .setGeometry(new IndexedFaceSet().setCoordIndex(new int[] {5,4,0,-1,0,1,5,-1,7,5,1,-1,1,3,7,-1,6,7,3,-1,3,2,6,-1,4,6,2,-1,2,0,4,-1}).setNormalIndex(new int[] {2,2,2,-1,2,2,2,-1,0,0,0,-1,0,0,0,-1,3,3,3,-1,3,3,3,-1,1,1,1,-1,1,1,1,-1}).setTexCoordIndex(new int[] {1,4,3,-1,3,2,1,-1,1,0,3,-1,3,2,1,-1,1,4,3,-1,3,2,1,-1,1,4,5,-1,5,2,1,-1})
                      .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {-0.332,-0.001942,0.33188,0.332,-0.001942,0.33188,-0.332,-0.001942,-0.331881,0.332,-0.001942,-0.331881,-0.332,1.14995,0.33188,0.332,1.14995,0.33188,-0.332,1.14995,-0.331881,0.332,1.14995,-0.331881})))
                      .setNormal(new Normal().setVector(new MFVec3f(new double[] {1.0,0.0,0.0,-1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,-1.0})))
                      .setTexCoord(new TextureCoordinate().setPoint(new MFVec2f(new double[] {4.99E-4,0.9995,0.9995,0.9995,0.9995,4.99E-4,4.99E-4,4.99E-4,4.99E-4,0.9995,4.99E-4,4.99E-4}))))))
                .addChild(new Transform("BuoyGuardOutsideGreen").setTranslation(0.0,0.513942,0.0)
                  .addChild(new Shape()
                    .setAppearance(new Appearance()
                      .setMaterial(new Material().setAmbientIntensity(0.0).setDiffuseColor(0.588235,0.588235,0.588235).setShininess(0.145))
                      .setTexture(new ImageTexture("BuoyGuard").setUrl(new String[] {"Textures/BuoyGuard.png","https://www.web3d.org/x3d/content/examples/Savage/HarborEquipment/NavigationAids/Textures/BuoyGuard.png"})))
                    .setGeometry(new IndexedFaceSet().setCoordIndex(new int[] {0,1,5,-1,5,4,0,-1,1,3,7,-1,7,5,1,-1,3,2,6,-1,6,7,3,-1,2,0,4,-1,4,6,2,-1}).setNormalIndex(new int[] {1,1,1,-1,1,1,1,-1,3,3,3,-1,3,3,3,-1,2,2,2,-1,2,2,2,-1,0,0,0,-1,0,0,0,-1}).setTexCoordIndex(new int[] {1,0,2,-1,2,6,1,-1,1,0,7,-1,7,3,1,-1,1,0,7,-1,7,5,1,-1,1,0,2,-1,2,4,1,-1})
                      .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {-0.107,2.21357,0.107,0.107,2.21357,0.107,-0.107,2.21357,-0.107,0.107,2.21357,-0.107,-0.288539,2.66455,0.28854,0.288539,2.66455,0.28854,-0.288539,2.66455,-0.288539,0.288539,2.66455,-0.288539})))
                      .setNormal(new Normal().setVector(new MFVec3f(new double[] {-0.9276,-0.3734,0.0,0.0,-0.3734,0.9276,0.0,-0.3734,-0.9276,0.9276,-0.3734,0.0})))
                      .setTexCoord(new TextureCoordinate().setPoint(new MFVec2f(new double[] {0.685231,4.99E-4,0.314769,4.99E-4,0.9995,0.9995,4.99E-4,0.9995,4.99E-4,0.999501,4.99E-4,0.999501,4.99E-4,0.9995,0.9995,0.999501}))))))
                .addChild(new Transform("BuoyGuardInsideGreen").setTranslation(0.0,0.513942,0.0)
                  .addChild(new Shape()
                    .setAppearance(new Appearance()
                      .setMaterial(new Material().setAmbientIntensity(0.0).setDiffuseColor(0.588235,0.588235,0.588235).setShininess(0.145)))
                    .setGeometry(new IndexedFaceSet().setCoordIndex(new int[] {1,0,5,-1,4,5,0,-1,3,1,7,-1,5,7,1,-1,2,3,6,-1,7,6,3,-1,0,2,4,-1,6,4,2,-1}).setNormalIndex(new int[] {1,1,1,-1,1,1,1,-1,3,3,3,-1,3,3,3,-1,0,0,0,-1,0,0,0,-1,2,2,2,-1,2,2,2,-1}).setTexCoordIndex(new int[] {0,1,2,-1,6,2,1,-1,0,1,7,-1,3,7,1,-1,0,1,7,-1,5,7,1,-1,0,1,2,-1,4,2,1,-1})
                      .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {-0.107,2.21357,0.107,0.107,2.21357,0.107,-0.107,2.21357,-0.107,0.107,2.21357,-0.107,-0.288539,2.66455,0.28854,0.288539,2.66455,0.28854,-0.288539,2.66455,-0.288539,0.288539,2.66455,-0.288539})))
                      .setNormal(new Normal().setVector(new MFVec3f(new double[] {0.0,0.3734,0.9276,0.0,0.3734,-0.9276,0.9276,0.3734,0.0,-0.9276,0.3734,0.0})))
                      .setTexCoord(new TextureCoordinate().setPoint(new MFVec2f(new double[] {0.685231,4.99E-4,0.314769,4.99E-4,0.9995,0.9995,4.99E-4,0.9995,4.99E-4,0.999501,4.99E-4,0.999501,4.99E-4,0.9995,0.9995,0.999501}))))))))
            .addChild(new Group("LightedBuoyRed")
              .addChild(new Switch("BuoyLightRedSwitch").setWhichChoice(-1)
                .setIS(new IS()
                  .addConnect(new connect().setNodeField("whichChoice").setProtoField("LightType")))
                .addChild(new Transform("BuoyLightOffRed").setTranslation(-0.003122,0.513942,-0.00303)
                  .addChild(new Shape()
                    .setAppearance(new Appearance()
                      .setMaterial(new Material().setAmbientIntensity(0.0).setDiffuseColor(0.588235,0.588235,0.588235).setShininess(0.145))
                      .setTexture(new ImageTexture("BuoyRed07").setUrl(new String[] {"Textures/BuoyRed07.jpg","https://www.web3d.org/x3d/content/examples/Savage/HarborEquipment/NavigationAids/Textures/BuoyRed07.jpg"})))
                    .setGeometry(new IndexedFaceSet().setUSE("BuoyLightBulb-FACES"))))
                .addChild(new Transform("BuoyLightOnRed").setTranslation(0.0,3.045,0.0)
                  .addChild(new Transform("BuoyLightOnRedBulb").setTranslation(-0.003122,-2.53106,-0.00303)
                    .addChild(new Shape()
                      .setAppearance(new Appearance()
                        .setMaterial(new Material().setAmbientIntensity(0.0).setDiffuseColor(0.662745,0.12549,0.133333).setEmissiveColor(0.662745,0.12549,0.133333).setShininess(0.145)))
                      .setGeometry(new IndexedFaceSet().setUSE("BuoyLightBulb-FACES"))))
                  .addChild(new Billboard().setAxisOfRotation(0.0,0.0,0.0)
                    .addChild(new Transform("BuoyLightOnRedGlow").setRotation(-1.0,0.0,0.0,-1.57079)
                      .setIS(new IS()
                        .addConnect(new connect().setNodeField("scale").setProtoField("LightGlow")))
                      .addChild(new Collision().setEnabled(false)
                        .addChild(new Shape()
                          .setAppearance(new Appearance()
                            .setMaterial(new Material().setDiffuseColor(0.662745,0.12549,0.133333).setEmissiveColor(0.662745,0.12549,0.133333).setTransparency(0.1))
                            .setTexture(new ImageTexture().setUrl(new String[] {"Textures/LightOnRedGlow.png","https://www.web3d.org/x3d/content/examples/Savage/HarborEquipment/NavigationAids/Textures/LightOnRedGlow.png"})))
                          .setGeometry(new IndexedFaceSet().setCoordIndex(new int[] {2,0,3,-1,1,3,0,-1}).setNormalIndex(new int[] {0,0,0,-1,0,0,0,-1}).setTexCoordIndex(new int[] {2,0,3,-1,1,3,0,-1})
                            .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {-0.5,0.0,0.5,0.5,0.0,0.5,-0.5,0.0,-0.5,0.5,0.0,-0.5})))
                            .setNormal(new Normal().setVector(new MFVec3f(new double[] {0.0,1.0,0.0})))
                            .setTexCoord(new TextureCoordinate().setPoint(new MFVec2f(new double[] {0.0,0.0,1.0,0.0,0.0,1.0,1.0,1.0}))))))))))
              .addChild(new Group("BuoyBodyRed")
                .addChild(new Transform("BuoyBaseRed").setTranslation(0.0,0.513942,0.0)
                  .addChild(new Shape()
                    .setAppearance(new Appearance()
                      .setMaterial(new Material().setAmbientIntensity(0.0).setDiffuseColor(0.588235,0.588235,0.588235).setShininess(0.145))
                      .setTexture(new ImageTexture().setUrl(new String[] {"Textures/BuoyRed01.jpg","https://www.web3d.org/x3d/content/examples/Savage/HarborEquipment/NavigationAids/Textures/BuoyRed01.jpg"})))
                    .setGeometry(new IndexedFaceSet().setCoordIndex(new int[] {20,29,28,-1,20,21,29,-1,21,30,29,-1,21,22,30,-1,22,31,30,-1,22,23,31,-1,23,32,31,-1,23,24,32,-1,24,33,32,-1,24,25,33,-1,25,34,33,-1,25,26,34,-1,26,35,34,-1,26,27,35,-1,27,28,35,-1,27,20,28,-1}).setNormalIndex(new int[] {1,6,1,-1,1,6,6,-1,6,7,6,-1,6,7,7,-1,7,0,7,-1,7,0,0,-1,0,2,0,-1,0,2,2,-1,2,5,2,-1,2,5,5,-1,5,4,5,-1,5,4,4,-1,4,3,4,-1,4,3,3,-1,3,1,3,-1,3,1,1,-1}).setTexCoordIndex(new int[] {0,1,2,-1,0,3,1,-1,3,4,1,-1,3,5,4,-1,16,6,17,-1,16,7,6,-1,7,8,6,-1,7,9,8,-1,9,10,8,-1,9,11,10,-1,11,12,10,-1,11,13,12,-1,13,14,12,-1,13,15,14,-1,15,2,14,-1,15,0,2,-1})
                      .setCoord(new Coordinate().setUSE("BuoyBase-COORD"))
                      .setNormal(new Normal().setVector(new MFVec3f(new double[] {-0.7071,0.0,-0.7071,1.0,0.0,0.0,-1.0,0.0,0.0,0.7071,0.0,0.7071,0.0,0.0,1.0,-0.7071,0.0,0.7071,0.7071,0.0,-0.7071,0.0,0.0,-1.0})))
                      .setTexCoord(new TextureCoordinate().setUSE("BuoyBase-TEXCOORD"))))
                  .addChild(new Shape()
                    .setAppearance(new Appearance()
                      .setMaterial(new Material().setAmbientIntensity(0.0).setDiffuseColor(0.588235,0.588235,0.588235).setShininess(0.145))
                      .setTexture(new ImageTexture().setUrl(new String[] {"Textures/BuoyRed02.jpg","https://www.web3d.org/x3d/content/examples/Savage/HarborEquipment/NavigationAids/Textures/BuoyRed02.jpg"})))
                    .setGeometry(new IndexedFaceSet().setCoordIndex(new int[] {0,4,2,-1,1,3,4,-1,0,1,4,-1,3,2,4,-1,5,13,6,-1,9,14,11,-1,7,8,13,-1,10,12,14,-1,5,7,13,-1,9,10,14,-1,8,6,13,-1,12,11,14,-1,28,29,30,-1,28,30,31,-1,28,31,32,-1,28,32,33,-1,28,33,34,-1,28,34,35,-1}).setNormalIndex(new int[] {0,0,0,-1,0,0,0,-1,0,0,0,-1,0,0,0,-1,1,1,1,-1,0,0,0,-1,1,1,1,-1,0,0,0,-1,1,1,1,-1,0,0,0,-1,1,1,1,-1,0,0,0,-1,0,0,0,-1,0,0,0,-1,0,0,0,-1,0,0,0,-1,0,0,0,-1,0,0,0,-1}).setTexCoordIndex(new int[] {29,30,31,-1,27,26,30,-1,29,27,30,-1,26,31,30,-1,29,30,27,-1,29,30,31,-1,31,26,30,-1,27,26,30,-1,29,31,30,-1,29,27,30,-1,26,27,30,-1,26,31,30,-1,18,19,20,-1,18,20,21,-1,18,21,22,-1,18,22,23,-1,18,23,24,-1,18,24,25,-1})
                      .setCoord(new Coordinate().setUSE("BuoyBase-COORD"))
                      .setNormal(new Normal().setVector(new MFVec3f(new double[] {0.0,1.0,0.0,0.0,-1.0,0.0})))
                      .setTexCoord(new TextureCoordinate().setUSE("BuoyBase-TEXCOORD"))))
                  .addChild(new Shape()
                    .setAppearance(new Appearance()
                      .setMaterial(new Material().setAmbientIntensity(0.0).setDiffuseColor(0.588235,0.588235,0.588235).setShininess(0.145))
                      .setTexture(new ImageTexture().setUrl(new String[] {"Textures/BuoyRed04.jpg","https://www.web3d.org/x3d/content/examples/Savage/HarborEquipment/NavigationAids/Textures/BuoyRed04.jpg"})))
                    .setGeometry(new IndexedFaceSet().setCoordIndex(new int[] {2,4,13,-1,13,7,2,-1,4,0,5,-1,5,13,4,-1,1,4,13,-1,13,6,1,-1,4,3,8,-1,8,13,4,-1,15,16,14,-1,14,10,15,-1,16,17,9,-1,9,14,16,-1,18,16,14,-1,14,11,18,-1,16,19,12,-1,12,14,16,-1,16,15,14,-1,10,14,15,-1,17,16,9,-1,14,9,16,-1,16,18,14,-1,11,14,18,-1,19,16,12,-1,14,12,16,-1,4,2,13,-1,7,13,2,-1,0,4,5,-1,13,5,4,-1,4,1,13,-1,6,13,1,-1,3,4,8,-1,13,8,4,-1}).setNormalIndex(new int[] {2,2,2,-1,2,2,2,-1,0,0,0,-1,0,0,0,-1,3,3,3,-1,3,3,3,-1,1,1,1,-1,1,1,1,-1,2,2,2,-1,2,2,2,-1,1,1,1,-1,1,1,1,-1,3,3,3,-1,3,3,3,-1,0,0,0,-1,0,0,0,-1,3,3,3,-1,3,3,3,-1,0,0,0,-1,0,0,0,-1,2,2,2,-1,2,2,2,-1,1,1,1,-1,1,1,1,-1,3,3,3,-1,3,3,3,-1,1,1,1,-1,1,1,1,-1,2,2,2,-1,2,2,2,-1,0,0,0,-1,0,0,0,-1}).setTexCoordIndex(new int[] {50,44,51,-1,51,46,50,-1,48,49,28,-1,28,37,48,-1,44,45,46,-1,46,47,44,-1,32,33,26,-1,26,34,32,-1,28,37,42,-1,42,43,28,-1,26,40,41,-1,41,35,26,-1,34,37,38,-1,38,39,34,-1,34,26,35,-1,35,36,34,-1,37,28,42,-1,43,42,28,-1,40,26,41,-1,35,41,26,-1,37,34,38,-1,39,38,34,-1,26,34,35,-1,36,35,34,-1,44,50,51,-1,46,51,50,-1,49,48,28,-1,37,28,48,-1,45,44,46,-1,47,46,44,-1,33,32,26,-1,34,26,32,-1})
                      .setCoord(new Coordinate().setUSE("BuoyBase-COORD"))
                      .setNormal(new Normal().setVector(new MFVec3f(new double[] {-0.7069,0.0,-0.7072,0.7069,0.0,0.7072,-0.7069,0.0,0.7072,0.7069,0.0,-0.7072})))
                      .setTexCoord(new TextureCoordinate().setUSE("BuoyBase-TEXCOORD"))))
                  .addChild(new Shape()
                    .setAppearance(new Appearance()
                      .setMaterial(new Material().setAmbientIntensity(0.0).setDiffuseColor(0.588235,0.588235,0.588235).setShininess(0.145))
                      .setTexture(new ImageTexture().setUrl(new String[] {"Textures/BuoyRed06.jpg","https://www.web3d.org/x3d/content/examples/Savage/HarborEquipment/NavigationAids/Textures/BuoyRed06.jpg"})))
                    .setGeometry(new IndexedFaceSet().setCoordIndex(new int[] {10,9,5,-1,5,6,10,-1,12,10,6,-1,6,8,12,-1,11,12,8,-1,8,7,11,-1,9,11,7,-1,7,5,9,-1,54,59,58,-1,54,55,59,-1,55,60,59,-1,55,56,60,-1,56,61,60,-1,56,57,61,-1,57,58,61,-1,57,54,58,-1,58,63,62,-1,58,59,63,-1,59,64,63,-1,59,60,64,-1,60,65,64,-1,60,61,65,-1,61,62,65,-1,61,58,62,-1,62,67,66,-1,62,63,67,-1,63,68,67,-1,63,64,68,-1,64,69,68,-1,64,65,69,-1,65,66,69,-1,65,62,66,-1,66,71,70,-1,66,67,71,-1,67,72,71,-1,67,68,72,-1,68,73,72,-1,68,69,73,-1,69,70,73,-1,69,66,70,-1,70,75,74,-1,70,71,75,-1,71,76,75,-1,71,72,76,-1,72,77,76,-1,72,73,77,-1,73,74,77,-1,73,70,74,-1,74,79,78,-1,74,75,79,-1,75,80,79,-1,75,76,80,-1,76,81,80,-1,76,77,81,-1,77,78,81,-1,77,74,78,-1,78,83,82,-1,78,79,83,-1,79,84,83,-1,79,80,84,-1,80,85,84,-1,80,81,85,-1,81,82,85,-1,81,78,82,-1,82,55,54,-1,82,83,55,-1,83,56,55,-1,83,84,56,-1,84,57,56,-1,84,85,57,-1,85,54,57,-1,85,82,54,-1}).setNormalIndex(new int[] {5,5,5,-1,5,5,5,-1,1,1,1,-1,1,1,1,-1,9,9,9,-1,9,9,9,-1,2,2,2,-1,2,2,2,-1,9,8,8,-1,9,9,8,-1,3,3,3,-1,3,3,3,-1,5,7,7,-1,5,5,7,-1,6,6,6,-1,6,6,6,-1,8,1,1,-1,8,8,1,-1,3,3,3,-1,3,3,3,-1,7,2,2,-1,7,7,2,-1,6,6,6,-1,6,6,6,-1,1,4,4,-1,1,1,4,-1,3,3,3,-1,3,3,3,-1,2,0,0,-1,2,2,0,-1,6,6,6,-1,6,6,6,-1,4,5,5,-1,4,4,5,-1,3,3,3,-1,3,3,3,-1,0,9,9,-1,0,0,9,-1,6,6,6,-1,6,6,6,-1,5,7,7,-1,5,5,7,-1,3,3,3,-1,3,3,3,-1,9,8,8,-1,9,9,8,-1,6,6,6,-1,6,6,6,-1,7,2,2,-1,7,7,2,-1,3,3,3,-1,3,3,3,-1,8,1,1,-1,8,8,1,-1,6,6,6,-1,6,6,6,-1,2,0,0,-1,2,2,0,-1,3,3,3,-1,3,3,3,-1,1,4,4,-1,1,1,4,-1,6,6,6,-1,6,6,6,-1,0,9,9,-1,0,0,9,-1,3,3,3,-1,3,3,3,-1,4,5,5,-1,4,4,5,-1,6,6,6,-1,6,6,6,-1}).setTexCoordIndex(new int[] {94,92,93,-1,93,95,94,-1,89,88,91,-1,91,90,89,-1,94,92,93,-1,93,95,94,-1,89,88,91,-1,91,90,89,-1,73,76,75,-1,73,74,76,-1,74,76,76,-1,74,74,76,-1,74,75,76,-1,74,73,75,-1,73,75,75,-1,73,73,75,-1,75,4,77,-1,75,76,4,-1,76,4,4,-1,76,76,4,-1,76,77,4,-1,76,75,77,-1,75,77,77,-1,75,75,77,-1,77,79,78,-1,77,4,79,-1,4,79,79,-1,4,4,79,-1,4,78,79,-1,4,77,78,-1,77,78,78,-1,77,77,78,-1,78,81,80,-1,78,79,81,-1,79,81,81,-1,79,79,81,-1,79,80,81,-1,79,78,80,-1,78,80,80,-1,78,78,80,-1,80,12,82,-1,80,81,12,-1,81,12,12,-1,81,81,12,-1,81,82,12,-1,81,80,82,-1,80,82,82,-1,80,80,82,-1,82,84,83,-1,82,12,84,-1,12,84,84,-1,12,12,84,-1,12,83,84,-1,12,82,83,-1,82,83,83,-1,82,82,83,-1,83,86,85,-1,83,84,86,-1,84,86,86,-1,84,84,86,-1,84,85,86,-1,84,83,85,-1,83,85,85,-1,83,83,85,-1,85,17,87,-1,85,86,17,-1,86,17,17,-1,86,86,17,-1,86,87,17,-1,86,85,87,-1,85,87,87,-1,85,85,87,-1})
                      .setCoord(new Coordinate().setUSE("BuoyBase-COORD"))
                      .setNormal(new Normal().setVector(new MFVec3f(new double[] {-0.7071,0.0,-0.7071,1.0,0.0,0.0,-1.0,0.0,0.0,0.0,1.0,0.0,0.7071,0.0,0.7071,0.0,0.0,1.0,0.0,-1.0,0.0,-0.7071,0.0,0.7071,0.7071,0.0,-0.7071,0.0,0.0,-1.0})))
                      .setTexCoord(new TextureCoordinate().setUSE("BuoyBase-TEXCOORD"))))
                  .addChild(new Shape()
                    .setAppearance(new Appearance()
                      .setMaterial(new Material().setAmbientIntensity(0.0).setDiffuseColor(0.588235,0.588235,0.588235).setShininess(0.145))
                      .setTexture(new ImageTexture().setUSE("BuoyRed07")))
                    .setGeometry(new IndexedFaceSet().setCoordIndex(new int[] {36,38,37,-1,36,39,38,-1,36,40,39,-1,36,41,40,-1,37,43,42,-1,37,38,43,-1,38,44,43,-1,38,39,44,-1,39,45,44,-1,39,40,45,-1,40,46,45,-1,40,41,46,-1,41,47,46,-1,41,36,47,-1,36,42,47,-1,36,37,42,-1,48,49,50,-1,48,50,51,-1,48,51,52,-1,48,52,53,-1,42,43,49,-1,49,48,42,-1,43,44,50,-1,50,49,43,-1,44,45,51,-1,51,50,44,-1,45,46,52,-1,52,51,45,-1,46,47,53,-1,53,52,46,-1,47,42,48,-1,48,53,47,-1}).setNormalIndex(new int[] {12,12,12,-1,12,12,12,-1,12,12,12,-1,12,12,12,-1,1,4,1,-1,1,3,4,-1,3,8,4,-1,3,8,8,-1,8,5,8,-1,8,5,5,-1,5,2,5,-1,5,2,2,-1,2,0,2,-1,2,0,0,-1,0,1,0,-1,0,1,1,-1,7,7,7,-1,7,7,7,-1,7,7,7,-1,7,7,7,-1,11,10,10,-1,10,11,11,-1,10,13,13,-1,13,10,10,-1,13,14,14,-1,14,13,13,-1,14,9,9,-1,9,14,14,-1,9,6,6,-1,6,9,9,-1,6,11,11,-1,11,6,6,-1}).setTexCoordIndex(new int[] {52,53,13,-1,52,54,69,-1,52,55,54,-1,52,56,55,-1,13,58,57,-1,13,53,58,-1,69,59,70,-1,69,54,59,-1,54,60,59,-1,54,55,60,-1,55,61,60,-1,55,56,61,-1,56,62,61,-1,56,52,62,-1,52,57,62,-1,52,13,57,-1,71,72,65,-1,71,65,66,-1,63,66,67,-1,63,67,68,-1,57,58,64,-1,64,63,57,-1,70,59,65,-1,65,72,70,-1,59,60,66,-1,66,65,59,-1,60,61,67,-1,67,66,60,-1,61,62,68,-1,68,67,61,-1,62,57,63,-1,63,68,62,-1})
                      .setCoord(new Coordinate().setUSE("BuoyBase-COORD"))
                      .setNormal(new Normal().setVector(new MFVec3f(new double[] {0.5,0.0,0.866,1.0,0.0,0.0,-0.4999,0.0,0.866,0.4999,0.0,-0.866,0.5,0.0,-0.866,-1.0,0.0,0.0,0.204,-0.9129,0.3534,0.0,1.0,0.0,-0.5,0.0,-0.866,-0.204,-0.9129,0.3534,0.204,-0.9129,-0.3534,0.4081,-0.9129,0.0,0.0,-1.0,0.0,-0.204,-0.9129,-0.3534,-0.4081,-0.9129,0.0})))
                      .setTexCoord(new TextureCoordinate().setUSE("BuoyBase-TEXCOORD")))))
                .addChild(new Transform("BuoyLegsOutsideRed").setTranslation(0.0,0.513942,0.0)
                  .addChild(new Shape()
                    .setAppearance(new Appearance()
                      .setMaterial(new Material().setAmbientIntensity(0.0).setDiffuseColor(0.588235,0.588235,0.588235).setShininess(0.145))
                      .setTexture(new ImageTexture().setUrl(new String[] {"Textures/BuoyRed03.png","https://www.web3d.org/x3d/content/examples/Savage/HarborEquipment/NavigationAids/Textures/BuoyRed03.png"})))
                    .setGeometry(new IndexedFaceSet().setCoordIndex(new int[] {5,4,0,-1,0,1,5,-1,7,5,1,-1,1,3,7,-1,6,7,3,-1,3,2,6,-1,4,6,2,-1,2,0,4,-1}).setNormalIndex(new int[] {2,2,2,-1,2,2,2,-1,0,0,0,-1,0,0,0,-1,3,3,3,-1,3,3,3,-1,1,1,1,-1,1,1,1,-1}).setTexCoordIndex(new int[] {1,4,3,-1,3,2,1,-1,1,0,3,-1,3,2,1,-1,1,4,3,-1,3,2,1,-1,1,4,5,-1,5,2,1,-1})
                      .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {-0.332,-0.001942,0.33188,0.332,-0.001942,0.33188,-0.332,-0.001942,-0.331881,0.332,-0.001942,-0.331881,-0.332,1.14995,0.33188,0.332,1.14995,0.33188,-0.332,1.14995,-0.331881,0.332,1.14995,-0.331881})))
                      .setNormal(new Normal().setVector(new MFVec3f(new double[] {1.0,0.0,0.0,-1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,-1.0})))
                      .setTexCoord(new TextureCoordinate().setPoint(new MFVec2f(new double[] {4.99E-4,0.9995,0.9995,0.9995,0.9995,4.99E-4,4.99E-4,4.99E-4,4.99E-4,0.9995,4.99E-4,4.99E-4}))))))
                .addChild(new Transform("BuoyGuardOutsideRed").setTranslation(0.0,0.513942,0.0)
                  .addChild(new Shape()
                    .setAppearance(new Appearance()
                      .setMaterial(new Material().setAmbientIntensity(0.0).setDiffuseColor(0.588235,0.588235,0.588235).setShininess(0.145))
                      .setTexture(new ImageTexture().setUSE("BuoyGuard")))
                    .setGeometry(new IndexedFaceSet().setCoordIndex(new int[] {0,1,5,-1,5,4,0,-1,1,3,7,-1,7,5,1,-1,3,2,6,-1,6,7,3,-1,2,0,4,-1,4,6,2,-1}).setNormalIndex(new int[] {1,1,1,-1,1,1,1,-1,3,3,3,-1,3,3,3,-1,2,2,2,-1,2,2,2,-1,0,0,0,-1,0,0,0,-1}).setTexCoordIndex(new int[] {1,0,2,-1,2,6,1,-1,1,0,7,-1,7,3,1,-1,1,0,7,-1,7,5,1,-1,1,0,2,-1,2,4,1,-1})
                      .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {-0.107,2.21357,0.107,0.107,2.21357,0.107,-0.107,2.21357,-0.107,0.107,2.21357,-0.107,-0.288539,2.66455,0.28854,0.288539,2.66455,0.28854,-0.288539,2.66455,-0.288539,0.288539,2.66455,-0.288539})))
                      .setNormal(new Normal().setVector(new MFVec3f(new double[] {-0.9276,-0.3734,0.0,0.0,-0.3734,0.9276,0.0,-0.3734,-0.9276,0.9276,-0.3734,0.0})))
                      .setTexCoord(new TextureCoordinate().setPoint(new MFVec2f(new double[] {0.685231,4.99E-4,0.314769,4.99E-4,0.9995,0.9995,4.99E-4,0.9995,4.99E-4,0.999501,4.99E-4,0.999501,4.99E-4,0.9995,0.9995,0.999501}))))))
                .addChild(new Transform("BuoyGuardInsideRed").setTranslation(0.0,0.513942,0.0)
                  .addChild(new Shape()
                    .setAppearance(new Appearance()
                      .setMaterial(new Material().setAmbientIntensity(0.0).setDiffuseColor(0.588235,0.588235,0.588235).setShininess(0.145))
                      .setTexture(new ImageTexture().setUSE("BuoyGuard")))
                    .setGeometry(new IndexedFaceSet().setCoordIndex(new int[] {1,0,5,-1,4,5,0,-1,3,1,7,-1,5,7,1,-1,2,3,6,-1,7,6,3,-1,0,2,4,-1,6,4,2,-1}).setNormalIndex(new int[] {1,1,1,-1,1,1,1,-1,3,3,3,-1,3,3,3,-1,0,0,0,-1,0,0,0,-1,2,2,2,-1,2,2,2,-1}).setTexCoordIndex(new int[] {0,1,2,-1,6,2,1,-1,0,1,7,-1,3,7,1,-1,0,1,7,-1,5,7,1,-1,0,1,2,-1,4,2,1,-1})
                      .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {-0.107,2.21357,0.107,0.107,2.21357,0.107,-0.107,2.21357,-0.107,0.107,2.21357,-0.107,-0.288539,2.66455,0.28854,0.288539,2.66455,0.28854,-0.288539,2.66455,-0.288539,0.288539,2.66455,-0.288539})))
                      .setNormal(new Normal().setVector(new MFVec3f(new double[] {0.0,0.3734,0.9276,0.0,0.3734,-0.9276,0.9276,0.3734,0.0,-0.9276,0.3734,0.0})))
                      .setTexCoord(new TextureCoordinate().setPoint(new MFVec2f(new double[] {0.685231,4.99E-4,0.314769,4.99E-4,0.9995,0.9995,4.99E-4,0.9995,4.99E-4,0.999501,4.99E-4,0.999501,4.99E-4,0.9995,0.9995,0.999501}))))))))))))
    .addChild(new ProtoInstance("LightedBuoy").setContainerField("children")));
            }
            catch (Exception ex)
            {       
                System.err.println ("*** Further hints on X3DJSAIL errors and exceptions at");
                System.err.println ("*** https://www.web3d.org/specifications/java/X3DJSAIL.html");
                throw (ex);
            }
	}
	// end of initialize() method


		/** Large attribute array: Coordinate DEF='BuoyBase-COORD' point field, scene-graph level=12, element #58, 258 total numbers made up of 86 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 getBuoyBase_COORD_12_58_point()
		{
			MFVec3f BuoyBase_COORD_12_58_point = new MFVec3f(new double[] {-0.332,1.14995,0.33188,0.332,1.14995,0.33188,-0.332,1.14995,-0.331881,0.332,1.14995,-0.331881,0.0,1.14995,0.0,-0.332,1.64948,0.33188,0.332,1.64948,0.33188,-0.332,1.64948,-0.331881,0.332,1.64948,-0.331881,-0.332,1.71231,0.33188,0.332,1.71231,0.33188,-0.332,1.71231,-0.331881,0.332,1.71231,-0.331881,0.0,1.64948,0.0,0.0,1.71231,0.0,0.332,2.21357,0.33188,0.0,2.21357,0.0,-0.332,2.21357,0.33188,-0.332,2.21357,-0.331881,0.332,2.21357,-0.331881,0.793007,-0.514149,0.0,0.56074,-0.514149,-0.56074,0.0,-0.514149,-0.793007,-0.56074,-0.514149,-0.56074,-0.793007,-0.514149,0.0,-0.56074,-0.514149,0.56074,0.0,-0.514149,0.793007,0.56074,-0.514149,0.56074,0.793007,-0.002116,0.0,0.56074,-0.002116,-0.56074,0.0,-0.002116,-0.793007,-0.56074,-0.002116,-0.56074,-0.793007,-0.002116,0.0,-0.56074,-0.002116,0.56074,0.0,-0.002116,0.793007,0.56074,-0.002116,0.56074,0.028183,2.21357,0.05061,0.057711,2.21357,-5.32E-4,0.028183,2.21357,-0.051675,-0.030871,2.21357,-0.051675,-0.060398,2.21357,-5.32E-4,-0.030871,2.21357,0.05061,0.057711,2.39864,-5.32E-4,0.028183,2.39864,-0.051675,-0.030871,2.39864,-0.051675,-0.060398,2.39864,-5.32E-4,-0.030871,2.39864,0.05061,0.028183,2.39864,0.05061,0.09812,2.41671,-5.32E-4,0.048388,2.41671,-0.086671,-0.051075,2.41671,-0.086671,-0.100808,2.41671,-5.32E-4,-0.051075,2.41671,0.085605,0.048388,2.41671,0.085605,0.0,2.21357,-0.484779,0.0,2.26357,-0.484779,0.0,2.26357,-0.470191,0.0,2.21357,-0.470191,0.34279,2.21357,-0.34279,0.34279,2.26357,-0.34279,0.332475,2.26357,-0.332475,0.332475,2.21357,-0.332475,0.484779,2.21357,0.0,0.484779,2.26357,0.0,0.470191,2.26357,0.0,0.470191,2.21357,0.0,0.34279,2.21357,0.34279,0.34279,2.26357,0.34279,0.332475,2.26357,0.332475,0.332475,2.21357,0.332475,0.0,2.21357,0.484779,0.0,2.26357,0.484779,0.0,2.26357,0.470191,0.0,2.21357,0.470191,-0.34279,2.21357,0.34279,-0.34279,2.26357,0.34279,-0.332475,2.26357,0.332475,-0.332475,2.21357,0.332475,-0.484779,2.21357,0.0,-0.484779,2.26357,0.0,-0.470191,2.26357,0.0,-0.470191,2.21357,0.0,-0.34279,2.21357,-0.34279,-0.34279,2.26357,-0.34279,-0.332475,2.26357,-0.332475,-0.332475,2.21357,-0.332475});
			return BuoyBase_COORD_12_58_point;
		}
		/** Large attribute array: TextureCoordinate DEF='BuoyBase-TEXCOORD' point field, scene-graph level=12, element #60, 192 total numbers made up of 96 2-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 MFVec2f getBuoyBase_TEXCOORD_12_60_point()
		{
			MFVec2f BuoyBase_TEXCOORD_12_60_point = new MFVec2f(new double[] {4.5,4.99E-4,5.25,0.999501,4.5,0.999501,5.25,4.99E-4,6.0,0.999501,6.0,4.99E-4,0.75,0.999501,0.75,4.99E-4,1.5,0.999501,1.5,4.99E-4,2.25,0.999501,2.25,4.99E-4,3.0,0.999501,3.0,4.99E-4,3.75,0.999501,3.75,4.99E-4,0.0,4.99E-4,0.0,0.999501,0.9995,0.5,0.8532,0.8532,0.5,0.9995,0.1468,0.8532,4.99E-4,0.5,0.1468,0.1468,0.5,4.99E-4,0.8532,0.1468,0.9995,0.9995,0.9995,4.99E-4,4.99E-4,0.9995,4.99E-4,4.99E-4,0.5,0.5,4.99E-4,0.9995,4.99E-4,4.99E-4,0.9995,4.99E-4,4.99E-4,0.9995,0.999501,4.99E-4,4.99E-4,4.99E-4,0.999501,0.9995,0.9995,4.99E-4,4.99E-4,4.99E-4,4.99E-4,0.9995,4.99E-4,4.99E-4,0.999501,4.99E-4,4.99E-4,4.99E-4,0.999501,4.99E-4,4.99E-4,4.99E-4,4.99E-4,0.999501,0.999501,0.999501,0.9995,4.99E-4,4.99E-4,4.99E-4,4.99E-4,4.99E-4,0.9995,0.999501,2.37433,4.99E-4,3.62567,4.99E-4,0.374334,4.99E-4,1.0,4.99E-4,1.62567,4.99E-4,3.0,0.428459,3.62567,0.428459,0.374334,0.428459,1.0,0.428459,1.62567,0.428459,2.37433,0.428459,3.0,0.485885,3.62567,0.485885,0.374334,0.485885,1.0,0.485885,1.62567,0.485885,2.37433,0.485885,-0.374334,4.99E-4,-0.374334,0.428459,-1.0,0.485885,-0.374334,0.485885,8.0,4.99E-4,8.0,0.999501,7.0,4.99E-4,7.0,0.999501,6.0,4.99E-4,5.0,4.99E-4,5.0,0.999501,4.0,4.99E-4,4.0,0.999501,3.0,4.99E-4,2.0,4.99E-4,2.0,0.999501,1.0,4.99E-4,1.0,0.999501,0.0,4.99E-4,-0.163761,1.02363,1.16376,1.02363,1.16376,-0.023634,-0.163761,-0.023634,-0.164,1.02363,-0.164,-0.023634,1.164,1.02363,1.164,-0.023634});
			return BuoyBase_TEXCOORD_12_60_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 LightedBuoyPrototype 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 LightedBuoyPrototype().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.HarborEquipment.NavigationAids.LightedBuoyPrototype\" 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.HarborEquipment.NavigationAids.LightedBuoyPrototype self-validation test confirmation: ");
                if (!validationResults.equals("success"))
                    System.out.println();
                System.out.println(validationResults.trim());

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