package Savage.GroundVehicles.Truck;

import org.web3d.x3d.jsail.Core.*;
import org.web3d.x3d.jsail.fields.*;
import org.web3d.x3d.jsail.Geometry3D.*;
import org.web3d.x3d.jsail.Grouping.*;
import org.web3d.x3d.jsail.Interpolation.*;
import org.web3d.x3d.jsail.PointingDeviceSensor.*;
import org.web3d.x3d.jsail.Rendering.*;
import org.web3d.x3d.jsail.Shape.*;
import org.web3d.x3d.jsail.Time.*;

// Javadoc metadata annotations follow, see below for X3DJSAIL Java source code.
/**
 * <p> Doors and windows to the cab of the midsize black pickup truck. </p>
 <p> Related links: Catalog page <a href="../../../../GroundVehicles/Truck/DoorsIndex.html" target="_blank">Doors</a>,  source <a href="../../../../GroundVehicles/Truck/Doors.java">Doors.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="../../../../GroundVehicles/Truck/Doors.x3d">Doors.x3d</a> </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> description </i> </td>
			<td> Doors and windows to the cab of the midsize black pickup truck </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> creator </i> </td>
			<td> Donald Coomes </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> created </i> </td>
			<td> 1 September 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> reference </i> </td>
			<td> Geometry created with Wings3d and partially animated with Flux Studio </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> subject </i> </td>
			<td> ground vehicles </td>
		</tr>
		<tr style="color:burntorange">
			<td style="text-align:right; vertical-align: text-top;"> <i> warning </i> </td>
			<td> none </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> generator </i> </td>
			<td> X3D-Edit, Wings3d, and Flux Studio </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/GroundVehicles/Truck/Doors.x3d" target="_blank">https://www.web3d.org/x3d/content/examples/Savage/GroundVehicles/Truck/Doors.x3d</a> </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> license </i> </td>
			<td> <a href="../../../../GroundVehicles/Truck/../../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 Donald Coomes
 */

public class Doors
{
	/** Default constructor to create this object. */
	public Doors ()
	{
	  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("Doors.x3d"))
    .addMeta(new meta().setName(meta.NAME_DESCRIPTION).setContent("Doors and windows to the cab of the midsize black pickup truck"))
    .addMeta(new meta().setName(meta.NAME_CREATOR    ).setContent("Donald Coomes"))
    .addMeta(new meta().setName(meta.NAME_CREATED    ).setContent("1 September 2006"))
    .addMeta(new meta().setName(meta.NAME_MODIFIED   ).setContent("20 October 2019"))
    .addMeta(new meta().setName(meta.NAME_REFERENCE  ).setContent("Geometry created with Wings3d and partially animated with Flux Studio"))
    .addMeta(new meta().setName(meta.NAME_SUBJECT    ).setContent("ground vehicles"))
    .addMeta(new meta().setName(meta.NAME_WARNING    ).setContent("none"))
    .addMeta(new meta().setName(meta.NAME_GENERATOR  ).setContent("X3D-Edit, Wings3d, and Flux Studio"))
    .addMeta(new meta().setName(meta.NAME_IDENTIFIER ).setContent("https://www.web3d.org/x3d/content/examples/Savage/GroundVehicles/Truck/Doors.x3d"))
    .addMeta(new meta().setName(meta.NAME_LICENSE    ).setContent("../../license.html")))
  .setScene(new Scene()
    .addChild(new WorldInfo().setTitle("Doors.x3d"))
    .addChild(new Group("Doors")
      .addChild(new Transform()
        .addChild(new Transform("CompleteRtDoor").setCenter(-2.0,0.0,1.0)
          .addChild(new Transform()
            .addChild(new Shape("RtDoor")
              .setAppearance(new Appearance()
                .setMaterial(new Material("Black1").setDiffuseColor(.05,.05,.05).setShininess(.1)))
              .setGeometry(new IndexedFaceSet().setCreaseAngle(0.524).setColorIndex(getIndexedFaceSet_8_16_colorIndex()).setCoordIndex(getIndexedFaceSet_8_16_coordIndex())
                .setCoord(new Coordinate().setPoint(getCoordinate_9_16_point())))))
          .addChild(new Group()
            .addChild(new Transform("RtWindow")
              .addChild(new Shape()
                .setAppearance(new Appearance()
                  .setMaterial(new Material("ClearGlass").setDiffuseColor(0.0,0.0,.25).setTransparency(.5)))
                .setGeometry(new IndexedFaceSet().setCreaseAngle(0.524).setColorIndex(new int[] {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,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,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,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,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,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,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,0,0,0,-1,0,0,0,-1,0,0,0,-1}).setCoordIndex(new int[] {0,1,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,5,-1,0,5,4,-1,0,4,26,-1,0,3,2,-1,0,2,1,-1,0,26,27,-1,0,27,3,-1,1,2,17,-1,1,17,8,-1,3,27,7,-1,3,7,21,-1,3,21,20,-1,3,20,19,-1,3,19,18,-1,3,18,17,-1,3,17,2,-1,21,7,6,-1,21,6,25,-1,21,25,24,-1,21,24,23,-1,21,23,22,-1,4,5,6,-1,4,6,7,-1,4,7,27,-1,4,27,26,-1,5,16,25,-1,5,25,6,-1,8,17,18,-1,8,18,9,-1,9,18,19,-1,9,19,10,-1,10,19,20,-1,10,20,11,-1,11,20,21,-1,11,21,12,-1,12,21,22,-1,12,22,13,-1,13,22,23,-1,13,23,14,-1,14,23,24,-1,14,24,15,-1,15,24,25,-1,15,25,16,-1})
                  .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {-1.99157,.89132,.58861,-1.99156,.64851,.58859,-2.00837,.64851,.59712,-2.00838,.89132,.59714,-1.99152,1.69664,-.81842,-1.99147,.64851,-.81844,-2.00827,.64851,-.82679,-2.00833,1.69664,-.82677,-1.99155,.64851,.44789,-1.99154,.64851,.30718,-1.99153,.64851,.16648,-1.99152,.64851,.02578,-1.99151,.64851,-.11493,-1.9915,.64851,-.25563,-1.99149,.64851,-.39633,-1.99149,.64851,-.53704,-1.99148,.64851,-.67774,-2.00836,.64851,.45473,-2.00835,.64851,.31234,-2.00834,.64851,.16995,-2.00833,.64851,.02755,-2.00832,.64851,-.11484,-2.00831,.64851,-.25723,-2.0083,.64851,-.39962,-2.00829,.64851,-.54201,-2.00828,.64851,-.6844,-1.99156,1.69664,-.22095,-2.00837,1.69664,-.22214}))))))
            .addChild(new TimeSensor("RtWindowClock").setCycleInterval(8.000))
            .addChild(new TouchSensor("RtWindowSensor").setDescription("Touch to roll down passenger window"))))
        .addChild(new TimeSensor("RtDoorClock").setCycleInterval(8.000))
        .addChild(new TouchSensor("RtDoorSensor").setDescription("Touch to open passenger door")))
      .addChild(new Transform()
        .addChild(new Transform("CompleteLftDoor").setCenter(2.0,0.0,1.0)
          .addChild(new Group()
            .addChild(new Transform("LftWindow")
              .addChild(new Shape()
                .setAppearance(new Appearance()
                  .setMaterial(new Material().setUSE("ClearGlass")))
                .setGeometry(new IndexedFaceSet().setCreaseAngle(0.524).setColorIndex(new int[] {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,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,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,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,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,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,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,0,0,0,-1,0,0,0,-1,0,0,0,-1}).setCoordIndex(new int[] {0,1,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,5,-1,0,5,4,-1,0,4,26,-1,0,3,2,-1,0,2,1,-1,0,26,27,-1,0,27,3,-1,1,2,17,-1,1,17,8,-1,3,27,7,-1,3,7,21,-1,3,21,20,-1,3,20,19,-1,3,19,18,-1,3,18,17,-1,3,17,2,-1,21,7,6,-1,21,6,25,-1,21,25,24,-1,21,24,23,-1,21,23,22,-1,4,5,6,-1,4,6,7,-1,4,7,27,-1,4,27,26,-1,5,16,25,-1,5,25,6,-1,8,17,18,-1,8,18,9,-1,9,18,19,-1,9,19,10,-1,10,19,20,-1,10,20,11,-1,11,20,21,-1,11,21,12,-1,12,21,22,-1,12,22,13,-1,13,22,23,-1,13,23,14,-1,14,23,24,-1,14,24,15,-1,15,24,25,-1,15,25,16,-1})
                  .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {2.00832,.89132,.60292,2.00833,.64851,.6029,1.99152,.64851,.6029,1.99151,.89132,.60292,2.00837,1.69664,-.83702,2.00842,.64851,-.83704,1.99161,.64851,-.83705,1.99156,1.69664,-.83702,2.00834,.64851,.45891,2.00835,.64851,.31491,2.00836,.64851,.17092,2.00837,.64851,.02692,2.00837,.64851,-.11707,2.00838,.64851,-.26107,2.00839,.64851,-.40506,2.0084,.64851,-.54906,2.00841,.64851,-.69305,1.99153,.64851,.4589,1.99154,.64851,.31491,1.99155,.64851,.17092,1.99156,.64851,.02692,1.99157,.64851,-.11707,1.99157,.64851,-.26107,1.99158,.64851,-.40506,1.99159,.64851,-.54906,1.9916,.64851,-.69305,2.00833,1.69664,-.22558,1.99152,1.69664,-.22558}))))))
            .addChild(new TimeSensor("LftWindowClock").setCycleInterval(8.000))
            .addChild(new TouchSensor("LftWindowSensor").setDescription("Touch to roll down driver side window")))
          .addChild(new Transform()
            .addChild(new Shape("LftDoor")
              .setAppearance(new Appearance()
                .setMaterial(new Material().setUSE("Black1")))
              .setGeometry(new IndexedFaceSet().setCreaseAngle(0.524).setColorIndex(getIndexedFaceSet_8_44_colorIndex()).setCoordIndex(getIndexedFaceSet_8_44_coordIndex())
                .setCoord(new Coordinate().setPoint(getCoordinate_9_44_point()))))))
        .addChild(new TouchSensor("LftDoorSensor").setDescription("Touch to open driver side door"))
        .addChild(new TimeSensor("LftDoorClock").setCycleInterval(6.000))))
    .addChild(new OrientationInterpolator("LftDoorOI").setKey(new double[] {0.0,.24998,.49997,.75,1.0}).setKeyValue(new MFRotation(new double[] {0.0,1.0,0.0,0.0,0.0,1.0,0.0,-.262,0.0,1.0,0.0,-.524,0.0,1.0,0.0,-.785,0.0,1.0,0.0,-1.222})))
    .addChild(new PositionInterpolator("LftWindowPI").setKey(new double[] {0.0,.5,1.0}).setKeyValue(new MFVec3f(new double[] {0.0,0.0,0.0,0.0,-1.0,0.0,0.0,0.0,0.0})))
    .addChild(new OrientationInterpolator("RtDoorOI").setKey(new double[] {0.0,.24998,.49998,.75,1.0}).setKeyValue(new MFRotation(new double[] {0.0,1.0,0.0,0.0,0.0,1.0,0.0,.524,0.0,1.0,0.0,1.134,0.0,1.0,0.0,.524,0.0,1.0,0.0,0.0})))
    .addChild(new PositionInterpolator("RtWindowPI").setKey(new double[] {0.0,.5,1.0}).setKeyValue(new MFVec3f(new double[] {0.0,0.0,0.0,0.0,-1.0,0.0,0.0,0.0,0.0})))
    .addChild(new ROUTE().setFromNode("LftDoorSensor").setFromField("touchTime").setToNode("LftDoorClock").setToField("startTime"))
    .addChild(new ROUTE().setFromNode("LftDoorClock").setFromField("fraction_changed").setToNode("LftDoorOI").setToField("set_fraction"))
    .addChild(new ROUTE().setFromNode("LftDoorOI").setFromField("value_changed").setToNode("CompleteLftDoor").setToField("set_rotation"))
    .addChild(new ROUTE().setFromNode("LftWindowClock").setFromField("fraction_changed").setToNode("LftWindowPI").setToField("set_fraction"))
    .addChild(new ROUTE().setFromNode("LftWindowPI").setFromField("value_changed").setToNode("LftWindow").setToField("set_translation"))
    .addChild(new ROUTE().setFromNode("LftWindowSensor").setFromField("touchTime").setToNode("LftWindowClock").setToField("startTime"))
    .addChild(new ROUTE().setFromNode("RtDoorClock").setFromField("fraction_changed").setToNode("RtDoorOI").setToField("set_fraction"))
    .addChild(new ROUTE().setFromNode("RtDoorOI").setFromField("value_changed").setToNode("CompleteRtDoor").setToField("set_rotation"))
    .addChild(new ROUTE().setFromNode("RtDoorSensor").setFromField("touchTime").setToNode("RtDoorClock").setToField("startTime"))
    .addChild(new ROUTE().setFromNode("RtWindowClock").setFromField("fraction_changed").setToNode("RtWindowPI").setToField("set_fraction"))
    .addChild(new ROUTE().setFromNode("RtWindowPI").setFromField("value_changed").setToNode("RtWindow").setToField("set_translation"))
    .addChild(new ROUTE().setFromNode("RtWindowSensor").setFromField("touchTime").setToNode("RtWindowClock").setToField("startTime")));
            }
            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_8_16_colorIndex_1()
		{
			int[] value = {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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,0,0,0,-1,0,0,0,-1,0,0,0,-1,0,0,0,-1,0,0,0,-1};
			return value;
		}
		private int[] getIndexedFaceSet_8_16_colorIndex_2()
		{
			int[] value = {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,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};
			return value;
		}


		/** Define subarrays using type int[] */
		private int[] getIndexedFaceSet_8_16_coordIndex_1()
		{
			int[] value = {0,1,8,-1,0,8,111,-1,0,111,113,-1,0,113,5,-1,0,5,4,-1,0,3,2,-1,0,2,1,-1,0,4,7,-1,0,7,3,-1,1,2,16,-1,1,16,17,-1,1,17,126,-1,1,126,130,-1,1,130,8,-1,2,3,7,-1,2,7,6,-1,2,6,117,-1,2,117,114,-1,2,114,9,-1,2,9,132,-1,2,132,127,-1,2,127,16,-1,4,5,6,-1,4,6,7,-1,5,11,10,-1,5,10,6,-1,5,113,120,-1,5,120,11,-1,6,10,123,-1,6,123,117,-1,8,9,20,-1,8,20,19,-1,8,18,34,-1,8,34,25,-1,8,19,18,-1,8,25,43,-1,8,43,110,-1,8,110,111,-1,8,130,129,-1,8,129,131,-1,8,131,132,-1,8,132,9,-1,9,21,20,-1,9,114,115,-1,9,115,21,-1,10,11,15,-1,10,15,14,-1,10,14,13,-1,10,13,122,-1,10,122,123,-1,11,120,121,-1,11,121,12,-1,11,12,15,-1,12,13,14,-1,12,14,15,-1,12,17,16,-1,12,16,13,-1,12,121,126,-1,12,126,17,-1,13,16,127,-1,13,127,122,-1,18,19,20,-1,18,20,21,-1,18,21,115,-1,18,115,116,-1,18,116,97,-1,18,97,96,-1,18,96,108,-1,18,108,109,-1,18,109,110,-1,18,110,43,-1,18,43,34,-1,22,24,51,-1,22,51,33,-1,22,33,59,-1,22,59,55,-1,22,55,54,-1,22,54,53,-1,22,53,52,-1,22,52,23,-1,22,23,24,-1,23,42,51,-1,23,51,24,-1,23,52,56,-1,23,56,42,-1,25,26,92,-1,25,92,93,-1,25,93,94,-1,25,94,95,-1,25,95,44,-1,25,44,43,-1,25,34,35,-1,25,35,84,-1,25,84,85,-1,25,85,86,-1,25,86,87,-1,25,87,26,-1,26,27,45,-1,26,45,44,-1,26,44,95,-1,26,95,94,-1,26,94,93,-1,26,93,92,-1,27,28,46,-1,27,46,45,-1,27,83,79,-1,27,79,28,-1,28,29,47,-1,28,47,46,-1,28,79,75,-1,28,75,29,-1,29,30,48,-1,29,48,47,-1,29,75,71,-1,29,71,30,-1,30,31,49,-1,30,49,48,-1,30,71,67,-1,30,67,31,-1,31,32,50,-1,31,50,49,-1,31,67,63,-1,31,63,32,-1,32,33,51,-1,32,51,50,-1,32,63,59,-1,32,59,33,-1,34,43,44,-1,34,44,88,-1,34,88,89,-1,34,89,90,-1,34,90,91,-1,34,91,35,-1,35,36,80,-1,35,80,84,-1,35,91,90,-1,35,90,89,-1,35,89,88,-1,35,88,44,-1,35,44,45,-1,35,45,36,-1,36,37,76,-1,36,76,80,-1,36,45,46,-1,36,46,37,-1,37,38,72,-1,37,72,76,-1,37,46,47,-1,37,47,38,-1,38,39,68,-1,38,68,72,-1,38,47,48,-1,38,48,39,-1,39,40,64,-1,39,64,68,-1,39,48,49,-1,39,49,40,-1,40,41,60,-1,40,60,64,-1,40,49,50,-1,40,50,41,-1,41,42,56,-1,41,56,60,-1,41,50,51,-1,41,51,42,-1,52,53,57,-1,52,57,56,-1,53,54,58,-1,53,58,57,-1,54,55,59,-1,54,59,58,-1,56,57,61,-1,56,61,60,-1,57,58,62,-1,57,62,61,-1,58,59,63,-1,58,63,62,-1,60,61,65,-1,60,65,64,-1,61,62,66,-1,61,66,65,-1,62,63,67,-1,62,67,66,-1,64,65,69,-1,64,69,68,-1,65,66,70,-1,65,70,69,-1,66,67,71,-1,66,71,70,-1,68,69,73,-1,68,73,72,-1,69,70,74,-1,69,74,73,-1,70,71,75,-1,70,75,74,-1,72,73,77,-1,72,77,76,-1,73,74,78,-1,73,78,77,-1,74,75,79,-1,74,79,78,-1,76,77,81,-1,76,81,80,-1,77,78,82,-1,77,82,81,-1,78,79,83,-1,78,83,82,-1,80,81,85,-1,80,85,84,-1,81,82,86,-1,81,86,85,-1,82,83,87,-1,82,87,86,-1,96,97,100,-1,96,100,103,-1,96,98,112,-1,96,112,108,-1,96,103,102,-1,96,102,98,-1,97,99,101,-1,97,101,100,-1,97,116,118,-1,97,118,99,-1,98,99,118,-1,98,118,124,-1,98,124,119,-1,98,119,112,-1,98,102,101,-1,98,101,99,-1,100,101,105,-1,100,105,104,-1,100,104,107,-1,100,107,103,-1,101,102,106,-1,101,106,105,-1,102,103,107,-1,102,107,106,-1,104,105,106,-1,104,106,107,-1,108,111,110,-1,108,110,109,-1,108,112,113,-1,108,113,111,-1,112,119,120,-1,112,120,113,-1,114,116,115,-1,114,117,118,-1,114,118,116,-1,117,123,124,-1,117,124,118,-1};
			return value;
		}
		private int[] getIndexedFaceSet_8_16_coordIndex_2()
		{
			int[] value = {119,121,120,-1,119,124,128,-1,119,128,125,-1,119,125,126,-1,119,126,121,-1,122,124,123,-1,122,127,128,-1,122,128,124,-1,125,128,131,-1,125,131,129,-1,125,129,130,-1,125,130,126,-1,127,132,131,-1,127,131,128,-1};
			return value;
		}


		/** Define subarrays using type double[] */
		private double[] getCoordinate_9_16_point_1()
		{
			double[] value = {-2.05975,-.636,1.0,-2.05975,.636,1.0,-1.94015,.636,1.0,-1.94015,-.636,1.0,-2.05975,-.636,-1.0,-2.05975,.636,-1.0,-1.94015,.636,-1.0,-1.94015,-.636,-1.0,-2.05975,.636,.8,-1.94015,.636,.8,-1.94015,1.69664,-1.0,-2.05975,1.69664,-1.0,-2.05975,1.80231,-.8,-1.94015,1.80231,-.8,-1.94015,1.80231,-1.0,-2.05975,1.80231,-1.0,-1.94015,1.80231,-.22389,-2.05975,1.80231,-.22389,-2.05975,.85284,.6,-2.05975,.8161,.71587,-1.94015,.8161,.71587,-1.94015,.85284,.6,-2.46024,.636,.67203,-2.46024,.85284,.6,-2.46024,.636,.6,-2.0998,.65985,.756,-2.13984,.67738,.72367,-2.17989,.636,.67203,-2.21994,.636,.67203,-2.25999,.636,.67203,-2.30004,.636,.67203,-2.34009,.636,.67203,-2.38014,.636,.67203,-2.42019,.636,.67203,-2.0998,.80513,.622,-2.13984,.77008,.63817,-2.17989,.85284,.6,-2.21994,.85284,.6,-2.25999,.85284,.6,-2.30004,.85284,.6,-2.34009,.85284,.6,-2.38014,.85284,.6,-2.42019,.85284,.6,-2.0998,.65985,.622,-2.13984,.67738,.63817,-2.17989,.636,.6,-2.21994,.636,.6,-2.25999,.636,.6,-2.30004,.636,.6,-2.34009,.636,.6,-2.38014,.636,.6,-2.42019,.636,.6,-2.44734,.82606,.64948,-2.44174,.7898,.7037,-2.42596,.75236,.74962,-2.43563,.66633,.72564,-2.41098,.82606,.64948,-2.40698,.7898,.7037,-2.39571,.75236,.74962,-2.40262,.66633,.72564,-2.37461,.82606,.64948,-2.37221,.7898,.7037,-2.36545,.75236,.74962,-2.3696,.66633,.72564,-2.33825,.82606,.64948,-2.33745,.7898,.7037,-2.33519,.75236,.74962,-2.33658,.66633,.72564,-2.30188,.82606,.64948,-2.30268,.7898,.7037,-2.30494,.75236,.74962,-2.30356,.66633,.72564,-2.26552,.82606,.64948,-2.26792,.7898,.7037,-2.27468,.75236,.74962,-2.27054,.66633,.72564,-2.22916,.82606,.64948,-2.23316,.7898,.7037,-2.24443,.75236,.74962,-2.23752,.66633,.72564,-2.19279,.82606,.64948,-2.19839,.7898,.7037,-2.21417,.75236,.74962,-2.2045,.66633,.72564,-2.13984,.75154,.65527,-2.13984,.733,.67237,-2.13984,.71446,.68947,-2.13984,.69592,.70657,-2.13984,.69592,.63817,-2.13984,.71446,.63817,-2.13984,.733,.63817,-2.13984,.75154,.63817,-2.13984,.67738,.70657,-2.13984,.67738,.68947,-2.13984,.67738,.67237,-2.13984,.67738,.65527,-2.01988,.636,.6,-1.98001,.636,.6,-2.01988,.636,-.8,-1.98001,.636,-.8};
			return value;
		}
		private double[] getCoordinate_9_16_point_2()
		{
			double[] value = {-1.98001,.64091,.6,-1.98001,.64091,-.8,-2.01988,.64091,-.8,-2.01988,.64091,.6,-1.99312,.65402,.5869,-1.99312,.65402,-.7869,-2.00678,.65402,-.7869,-2.00678,.65402,.5869,-2.03849,.636,.6,-2.05975,.65726,.6,-2.07626,.64584,.60907,-2.05975,.636,.62126,-2.03849,.636,-.8,-2.05975,.636,-.82125,-1.94015,.636,.62126,-1.94015,.65726,.6,-1.9614,.636,.6,-1.94015,.636,-.82125,-1.9614,.636,-.8,-2.03849,1.69664,-.8,-2.05975,1.69664,-.82125,-2.05975,1.71789,-.8,-1.94015,1.71789,-.8,-1.94015,1.69664,-.82125,-1.9614,1.69664,-.8,-2.03849,1.69664,-.22389,-2.05975,1.71789,-.22389,-1.94015,1.71789,-.22389,-1.9614,1.69664,-.22389,-2.03849,.84813,.59522,-2.05975,.83283,.60998,-1.9614,.84813,.59522,-1.94015,.83283,.60998};
			return value;
		}


		/** Define subarrays using type int[] */
		private int[] getIndexedFaceSet_8_44_colorIndex_1()
		{
			int[] value = {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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,0,0,0,-1,0,0,0,-1,0,0,0,-1,0,0,0,-1,0,0,0,-1};
			return value;
		}
		private int[] getIndexedFaceSet_8_44_colorIndex_2()
		{
			int[] value = {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,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,0,0,0,-1,0,0,0,-1,0,0,0,-1,0,0,0,-1,0,0,0,-1,0,0,0,-1};
			return value;
		}


		/** Define subarrays using type int[] */
		private int[] getIndexedFaceSet_8_44_coordIndex_1()
		{
			int[] value = {0,1,8,-1,0,8,106,-1,0,106,109,-1,0,109,5,-1,0,5,4,-1,0,3,2,-1,0,2,1,-1,0,4,7,-1,0,7,3,-1,1,2,16,-1,1,16,17,-1,1,17,122,-1,1,122,126,-1,1,126,8,-1,2,3,7,-1,2,7,6,-1,2,6,113,-1,2,113,111,-1,2,111,9,-1,2,9,128,-1,2,128,123,-1,2,123,16,-1,4,5,6,-1,4,6,7,-1,5,11,10,-1,5,10,6,-1,5,109,116,-1,5,116,11,-1,6,10,119,-1,6,119,113,-1,8,9,19,-1,8,19,18,-1,8,18,130,-1,8,130,129,-1,8,126,125,-1,8,125,127,-1,8,127,128,-1,8,128,9,-1,8,129,106,-1,9,32,23,-1,9,23,135,-1,9,135,134,-1,9,111,112,-1,9,112,41,-1,9,41,32,-1,9,134,133,-1,9,133,19,-1,10,11,15,-1,10,15,14,-1,10,14,13,-1,10,13,118,-1,10,118,119,-1,11,116,117,-1,11,117,12,-1,11,12,15,-1,12,13,14,-1,12,14,15,-1,12,17,16,-1,12,16,13,-1,12,117,122,-1,12,122,17,-1,13,16,123,-1,13,123,118,-1,18,19,133,-1,18,133,132,-1,18,132,131,-1,18,131,130,-1,20,22,49,-1,20,49,31,-1,20,31,57,-1,20,57,53,-1,20,22,21,-1,20,21,50,-1,20,50,51,-1,20,51,52,-1,20,52,53,-1,21,40,49,-1,21,49,22,-1,21,50,54,-1,21,54,40,-1,23,24,90,-1,23,90,91,-1,23,91,92,-1,23,92,93,-1,23,93,42,-1,23,42,41,-1,23,32,33,-1,23,33,82,-1,23,82,83,-1,23,83,84,-1,23,84,85,-1,23,85,24,-1,23,41,112,-1,23,112,135,-1,24,25,43,-1,24,43,42,-1,24,42,93,-1,24,93,92,-1,24,92,91,-1,24,91,90,-1,24,85,81,-1,24,81,25,-1,25,26,44,-1,25,44,43,-1,25,81,77,-1,25,77,26,-1,26,27,45,-1,26,45,44,-1,26,77,73,-1,26,73,27,-1,27,28,46,-1,27,46,45,-1,27,73,69,-1,27,69,28,-1,28,29,47,-1,28,47,46,-1,28,69,65,-1,28,65,29,-1,29,30,48,-1,29,48,47,-1,29,65,61,-1,29,61,30,-1,30,31,49,-1,30,49,48,-1,30,61,57,-1,30,57,31,-1,32,41,42,-1,32,42,86,-1,32,86,87,-1,32,87,88,-1,32,88,89,-1,32,89,33,-1,33,89,88,-1,33,88,87,-1,33,87,86,-1,33,86,42,-1,33,42,43,-1,33,43,34,-1,34,35,74,-1,34,74,78,-1,34,43,44,-1,34,44,35,-1,35,36,70,-1,35,70,74,-1,35,44,45,-1,35,45,36,-1,36,37,66,-1,36,66,70,-1,36,45,46,-1,36,46,37,-1,37,38,62,-1,37,62,66,-1,37,46,47,-1,37,47,38,-1,38,39,58,-1,38,58,62,-1,38,47,48,-1,38,48,39,-1,39,40,54,-1,39,54,58,-1,39,48,49,-1,39,49,40,-1,50,51,55,-1,50,55,54,-1,51,52,56,-1,51,56,55,-1,52,53,57,-1,52,57,56,-1,54,55,59,-1,54,59,58,-1,55,56,60,-1,55,60,59,-1,56,57,61,-1,56,61,60,-1,58,59,63,-1,58,63,62,-1,59,60,64,-1,59,64,63,-1,60,61,65,-1,60,65,64,-1,62,63,67,-1,62,67,66,-1,63,64,68,-1,63,68,67,-1,64,65,69,-1,64,69,68,-1,66,67,71,-1,66,71,70,-1,67,68,72,-1,67,72,71,-1,68,69,73,-1,68,73,72,-1,70,71,75,-1,70,75,74,-1,71,72,76,-1,71,76,75,-1,72,73,77,-1,72,77,76,-1,74,75,79,-1,74,79,78,-1,75,76,80,-1,75,80,79,-1,76,77,81,-1,76,81,80,-1,78,79,83,-1,78,83,82,-1,79,80,84,-1,79,84,83,-1,80,81,85,-1,80,85,84,-1,94,95,98,-1,94,98,101,-1,94,96,108,-1,94,108,107,-1,94,101,100,-1,94,100,96,-1,94,107,131,-1,94,131,132,-1,94,132,110,-1,94,110,95,-1,95,97,99,-1,95,99,98,-1,95,110,114,-1,95,114,97,-1,96,97,114,-1,96,114,120,-1,96,120,115,-1,96,115,108,-1,96,100,99,-1,96,99,97,-1,98,99,103,-1,98,103,102,-1,98,102,105,-1,98,105,101,-1,99,100,104,-1,99,104,103,-1,100,101,105,-1,100,105,104,-1,102,103,104,-1,102,104,105,-1,106,107,108,-1,106,108,109,-1,106,129,131,-1,106,131,107,-1,108,115,116,-1,108,116,109,-1,110,111,113,-1,110,113,114,-1,110,112,111,-1,110,132,135,-1};
			return value;
		}
		private int[] getIndexedFaceSet_8_44_coordIndex_2()
		{
			int[] value = {110,135,112,-1,113,119,120,-1,113,120,114,-1,115,117,116,-1,115,120,124,-1,115,124,121,-1,115,121,122,-1,115,122,117,-1,118,120,119,-1,118,123,124,-1,118,124,120,-1,121,124,127,-1,121,127,125,-1,121,125,126,-1,121,126,122,-1,123,128,127,-1,123,127,124,-1,129,130,131,-1,132,133,134,-1,132,134,135,-1};
			return value;
		}


		/** Define subarrays using type double[] */
		private double[] getCoordinate_9_44_point_1()
		{
			double[] value = {1.94015,-.636,1.0,1.94015,.636,1.0,2.05975,.636,1.0,2.05975,-.636,1.0,1.94015,-.636,-1.0,1.94015,.636,-1.0,2.05975,.636,-1.0,2.05975,-.636,-1.0,1.94015,.636,.8,2.05975,.636,.8,2.05975,1.69664,-1.0,1.94015,1.69664,-1.0,1.94015,1.80231,-.8,2.05975,1.80231,-.8,2.05975,1.80231,-1.0,1.94015,1.80231,-1.0,2.05975,1.80231,-.22389,1.94015,1.80231,-.22389,1.94015,.8161,.71587,2.05975,.8161,.71587,2.46024,.85284,.6,2.46024,.636,.67203,2.46024,.636,.6,2.0998,.80513,.622,2.13984,.77008,.63817,2.17989,.85284,.6,2.21994,.85284,.6,2.25999,.85284,.6,2.30004,.85284,.6,2.34009,.85284,.6,2.38014,.85284,.6,2.42019,.85284,.6,2.0998,.65985,.756,2.13984,.67738,.72367,2.17989,.636,.67203,2.21994,.636,.67203,2.25999,.636,.67203,2.30004,.636,.67203,2.34009,.636,.67203,2.38014,.636,.67203,2.42019,.636,.67203,2.0998,.65985,.622,2.13984,.67738,.63817,2.17989,.636,.6,2.21994,.636,.6,2.25999,.636,.6,2.30004,.636,.6,2.34009,.636,.6,2.38014,.636,.6,2.42019,.636,.6,2.43563,.66633,.72564,2.42596,.75236,.74962,2.44174,.7898,.7037,2.44734,.82606,.64948,2.40262,.66633,.72564,2.39571,.75236,.74962,2.40698,.7898,.7037,2.41098,.82606,.64948,2.3696,.66633,.72564,2.36545,.75236,.74962,2.37221,.7898,.7037,2.37461,.82606,.64948,2.33658,.66633,.72564,2.33519,.75236,.74962,2.33745,.7898,.7037,2.33825,.82606,.64948,2.30356,.66633,.72564,2.30494,.75236,.74962,2.30268,.7898,.7037,2.30188,.82606,.64948,2.27054,.66633,.72564,2.27468,.75236,.74962,2.26792,.7898,.7037,2.26552,.82606,.64948,2.23752,.66633,.72564,2.24443,.75236,.74962,2.23316,.7898,.7037,2.22916,.82606,.64948,2.2045,.66633,.72564,2.21417,.75236,.74962,2.19839,.7898,.7037,2.19279,.82606,.64948,2.13984,.69592,.70657,2.13984,.71446,.68947,2.13984,.733,.67237,2.13984,.75154,.65527,2.13984,.67738,.65527,2.13984,.67738,.67237,2.13984,.67738,.68947,2.13984,.67738,.70657,2.13984,.75154,.63817,2.13984,.733,.63817,2.13984,.71446,.63817,2.13984,.69592,.63817,1.98001,.636,.6,2.01988,.636,.6,1.98001,.636,-.8,2.01988,.636,-.8,2.01988,.64091,.6,2.01988,.64091,-.8};
			return value;
		}
		private double[] getCoordinate_9_44_point_2()
		{
			double[] value = {1.98001,.64091,-.8,1.98001,.64091,.6,2.00678,.65402,.5869,2.00678,.65402,-.7869,1.99312,.65402,-.7869,1.99312,.65402,.5869,1.94015,.636,.62126,1.9614,.636,.6,1.9614,.636,-.8,1.94015,.636,-.82125,2.03849,.636,.6,2.05975,.636,.62126,2.07626,.64584,.60907,2.05975,.636,-.82125,2.03849,.636,-.8,1.9614,1.69664,-.8,1.94015,1.69664,-.82125,1.94015,1.71789,-.8,2.05975,1.71789,-.8,2.05975,1.69664,-.82125,2.03849,1.69664,-.8,1.9614,1.69664,-.22389,1.94015,1.71789,-.22389,2.05975,1.71789,-.22389,2.03849,1.69664,-.22389,1.9614,.84813,.59522,1.94015,.83283,.60998,2.03849,.84813,.59522,2.05975,.83283,.60998,1.94015,.83721,.61441,1.94015,.84641,.62026,1.9614,.85284,.6,2.03849,.85284,.6,2.05975,.84641,.62026,2.05975,.83721,.61441,2.07263,.83749,.60708};
			return value;
		}

		/** Large attribute array: IndexedFaceSet colorIndex field, scene-graph level=8, element #16, 1056 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_8_16_colorIndex()
		{
			MFInt32 IndexedFaceSet_8_16_colorIndex = new MFInt32()/*2.finalize*/
				.append(new MFInt32(getIndexedFaceSet_8_16_colorIndex_1()))
				.append(new MFInt32(getIndexedFaceSet_8_16_colorIndex_2()));
			return IndexedFaceSet_8_16_colorIndex;
		}
		/** Large attribute array: IndexedFaceSet coordIndex field, scene-graph level=8, element #16, 1056 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_8_16_coordIndex()
		{
			MFInt32 IndexedFaceSet_8_16_coordIndex = new MFInt32()/*2.finalize*/
				.append(new MFInt32(getIndexedFaceSet_8_16_coordIndex_1()))
				.append(new MFInt32(getIndexedFaceSet_8_16_coordIndex_2()));
			return IndexedFaceSet_8_16_coordIndex;
		}
		/** Large attribute array: Coordinate point field, scene-graph level=9, element #16, 399 total numbers made up of 133 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_9_16_point()
		{
			MFVec3f Coordinate_9_16_point = new MFVec3f()/*2.finalize*/
				.append(new MFVec3f(getCoordinate_9_16_point_1()))
				.append(new MFVec3f(getCoordinate_9_16_point_2()));
			return Coordinate_9_16_point;
		}
		/** Large attribute array: IndexedFaceSet colorIndex field, scene-graph level=8, element #44, 1080 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_8_44_colorIndex()
		{
			MFInt32 IndexedFaceSet_8_44_colorIndex = new MFInt32()/*2.finalize*/
				.append(new MFInt32(getIndexedFaceSet_8_44_colorIndex_1()))
				.append(new MFInt32(getIndexedFaceSet_8_44_colorIndex_2()));
			return IndexedFaceSet_8_44_colorIndex;
		}
		/** Large attribute array: IndexedFaceSet coordIndex field, scene-graph level=8, element #44, 1080 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_8_44_coordIndex()
		{
			MFInt32 IndexedFaceSet_8_44_coordIndex = new MFInt32()/*2.finalize*/
				.append(new MFInt32(getIndexedFaceSet_8_44_coordIndex_1()))
				.append(new MFInt32(getIndexedFaceSet_8_44_coordIndex_2()));
			return IndexedFaceSet_8_44_coordIndex;
		}
		/** Large attribute array: Coordinate point field, scene-graph level=9, element #44, 408 total numbers made up of 136 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_9_44_point()
		{
			MFVec3f Coordinate_9_44_point = new MFVec3f()/*2.finalize*/
				.append(new MFVec3f(getCoordinate_9_44_point_1()))
				.append(new MFVec3f(getCoordinate_9_44_point_2()));
			return Coordinate_9_44_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 Doors 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 Doors().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.GroundVehicles.Truck.Doors\" 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.GroundVehicles.Truck.Doors self-validation test confirmation: ");
                if (!validationResults.equals("success"))
                    System.out.println();
                System.out.println(validationResults.trim());

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