<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">package X3dForAdvancedModeling.Scanning;

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

// Javadoc metadata annotations follow, see below for X3DJSAIL Java source code.
/**
 * &lt;p&gt; Original Cyber Banana model by Mark Pesce and Tony Parisi, SIGGRAPH 1994, used for proposing the Virtual Reality Markup Language (VRML). &lt;/p&gt;
 &lt;p&gt; Related links: Catalog page &lt;a href="../../../Scanning/VirtualBananaOriginalIndex.html" target="_blank"&gt;VirtualBananaOriginal&lt;/a&gt;,  source &lt;a href="../../../Scanning/VirtualBananaOriginal.java"&gt;VirtualBananaOriginal.java&lt;/a&gt;, &lt;a href="https://www.web3d.org/x3d/content/examples/X3dResources.html" target="_blank"&gt;X3D Resources&lt;/a&gt;, &lt;a href="https://www.web3d.org/x3d/content/examples/X3dSceneAuthoringHints.html" target="_blank"&gt;X3D Scene Authoring Hints&lt;/a&gt;, and &lt;a href="https://www.web3d.org/x3d/content/X3dTooltips.html" target="_blank"&gt;X3D Tooltips&lt;/a&gt;. &lt;/p&gt;
	&lt;table style="color:black; border:0px solid; border-spacing:10px 0px;"&gt;
        &lt;caption&gt;Scene Meta Information&lt;/caption&gt;
		&lt;tr style="background-color:silver; border-color:silver;"&gt;
			&lt;td style="text-align:center; padding:10px 0px;"&gt;&lt;i&gt;meta tags&lt;/i&gt;&lt;/td&gt;
			&lt;td style="text-align:left;   padding:10px 0px;"&gt;&amp;nbsp; Document Metadata &lt;/td&gt;
		&lt;/tr&gt;

		&lt;tr&gt;
			&lt;td style="text-align:right; vertical-align: text-top;"&gt; &lt;i&gt; title &lt;/i&gt; &lt;/td&gt;
			&lt;td&gt; &lt;a href="../../../Scanning/VirtualBananaOriginal.x3d"&gt;VirtualBananaOriginal.x3d&lt;/a&gt; &lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td style="text-align:right; vertical-align: text-top;"&gt; &lt;i&gt; description &lt;/i&gt; &lt;/td&gt;
			&lt;td&gt; Original Cyber Banana model by Mark Pesce and Tony Parisi, SIGGRAPH 1994, used for proposing the Virtual Reality Markup Language (VRML). &lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td style="text-align:right; vertical-align: text-top;"&gt; &lt;i&gt; created &lt;/i&gt; &lt;/td&gt;
			&lt;td&gt; 1 June 1994 &lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td style="text-align:right; vertical-align: text-top;"&gt; &lt;i&gt; modified &lt;/i&gt; &lt;/td&gt;
			&lt;td&gt; 9 January 2022 &lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td style="text-align:right; vertical-align: text-top;"&gt; &lt;i&gt; creator &lt;/i&gt; &lt;/td&gt;
			&lt;td&gt; Mark Pesce and Tony Parisi &lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td style="text-align:right; vertical-align: text-top;"&gt; &lt;i&gt; TODO &lt;/i&gt; &lt;/td&gt;
			&lt;td&gt; Tell story of original production, display and influence &lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td style="text-align:right; vertical-align: text-top;"&gt; &lt;i&gt; translator &lt;/i&gt; &lt;/td&gt;
			&lt;td&gt; Roy Walmsley and Don Brutzman &lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td style="text-align:right; vertical-align: text-top;"&gt; &lt;i&gt; reference &lt;/i&gt; &lt;/td&gt;
			&lt;td&gt; originals/bananaVRML1.wrl &lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td style="text-align:right; vertical-align: text-top;"&gt; &lt;i&gt; reference &lt;/i&gt; &lt;/td&gt;
			&lt;td&gt; originals/bananaVRML2.wrl &lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td style="text-align:right; vertical-align: text-top;"&gt; &lt;i&gt; reference &lt;/i&gt; &lt;/td&gt;
			&lt;td&gt; originals/CyberBanana.xhtml &lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td style="text-align:right; vertical-align: text-top;"&gt; &lt;i&gt; reference &lt;/i&gt; &lt;/td&gt;
			&lt;td&gt; &lt;a href="../../../Scanning/originals/CyberBanana.x3d"&gt;originals/CyberBanana.x3d&lt;/a&gt; &lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td style="text-align:right; vertical-align: text-top;"&gt; &lt;i&gt; reference &lt;/i&gt; &lt;/td&gt;
			&lt;td&gt; originals/ios8-cyberbanana.png &lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td style="text-align:right; vertical-align: text-top;"&gt; &lt;i&gt; reference &lt;/i&gt; &lt;/td&gt;
			&lt;td&gt; &lt;a href="../../../Scanning/VirtualBananaScanned.x3d"&gt;VirtualBananaScanned.x3d&lt;/a&gt; &lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td style="text-align:right; vertical-align: text-top;"&gt; &lt;i&gt; reference &lt;/i&gt; &lt;/td&gt;
			&lt;td&gt; &lt;a href="../../../Scanning/VirtualBananaReduced.x3d"&gt;VirtualBananaReduced.x3d&lt;/a&gt; &lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td style="text-align:right; vertical-align: text-top;"&gt; &lt;i&gt; accessRights &lt;/i&gt; &lt;/td&gt;
			&lt;td&gt; Original model: Copyright (c) Ohio State University, ok to distribute if copyright appears &lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td style="text-align:right; vertical-align: text-top;"&gt; &lt;i&gt; reference &lt;/i&gt; &lt;/td&gt;
			&lt;td&gt; &lt;a href="http://vrml20.org/banana.xhtml" target="_blank"&gt;http://vrml20.org/banana.xhtml&lt;/a&gt; &lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td style="text-align:right; vertical-align: text-top;"&gt; &lt;i&gt; reference &lt;/i&gt; &lt;/td&gt;
			&lt;td&gt; &lt;a href="http://vrml20.org/2014/06/ios-8-20-years-later" target="_blank"&gt;http://vrml20.org/2014/06/ios-8-20-years-later&lt;/a&gt; &lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td style="text-align:right; vertical-align: text-top;"&gt; &lt;i&gt; reference &lt;/i&gt; &lt;/td&gt;
			&lt;td&gt; Clay Graham @claytantor &lt;a href="https://twitter.com/claytantor/status/1426368960090415114" target="_blank"&gt;https://twitter.com/claytantor/status/1426368960090415114&lt;/a&gt; &lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td style="text-align:right; vertical-align: text-top;"&gt; &lt;i&gt; reference &lt;/i&gt; &lt;/td&gt;
			&lt;td&gt; Mark Pesce "The web was done right the first time" in The Register &lt;a href="https://www.theregister.com/2021/08/11/column_cyberbanana_windows" target="_blank"&gt;https://www.theregister.com/2021/08/11/column_cyberbanana_windows&lt;/a&gt; &lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td style="text-align:right; vertical-align: text-top;"&gt; &lt;i&gt; generator &lt;/i&gt; &lt;/td&gt;
			&lt;td&gt; AccuTrans 3D, &lt;a href="http://www.micromouse.ca" target="_blank"&gt;http://www.micromouse.ca&lt;/a&gt; &lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td style="text-align:right; vertical-align: text-top;"&gt; &lt;i&gt; generator &lt;/i&gt; &lt;/td&gt;
			&lt;td&gt; X3D-Edit 3.3, &lt;a href="https://savage.nps.edu/X3D-Edit" target="_blank"&gt;https://savage.nps.edu/X3D-Edit&lt;/a&gt; &lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td style="text-align:right; vertical-align: text-top;"&gt; &lt;i&gt; identifier &lt;/i&gt; &lt;/td&gt;
			&lt;td&gt; &lt;a href="https://www.web3d.org/x3d/content/examples/X3dForAdvancedModeling/Scanning/VirtualBananaOriginal.x3d" target="_blank"&gt;https://www.web3d.org/x3d/content/examples/X3dForAdvancedModeling/Scanning/VirtualBananaOriginal.x3d&lt;/a&gt; &lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td style="text-align:right; vertical-align: text-top;"&gt; &lt;i&gt; license &lt;/i&gt; &lt;/td&gt;
			&lt;td&gt; &lt;a href="../../../Scanning/../license.html"&gt;../license.html&lt;/a&gt; &lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr style="background-color:silver; border-color:silver;"&gt;
			&lt;td style="text-align:center;" colspan="2"&gt;  &amp;nbsp; &lt;/td&gt;
		&lt;/tr&gt;
	&lt;/table&gt;

	&lt;p&gt;
		This program uses the
		&lt;a href="https://www.web3d.org/specifications/java/X3DJSAIL.html" target="_blank"&gt;X3D Java Scene Access Interface Library (X3DJSAIL)&lt;/a&gt;.
		It has been produced using the 
		&lt;a href="https://www.web3d.org/x3d/stylesheets/X3dToJava.xslt" target="_blank"&gt;X3dToJava.xslt&lt;/a&gt;
		stylesheet
	       (&lt;a href="https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/stylesheets/X3dToJava.xslt" target="_blank"&gt;version control&lt;/a&gt;)
                which is used to create Java source code from an original &lt;code&gt;.x3d&lt;/code&gt; model.
	&lt;/p&gt;

	* @author Mark Pesce and Tony Parisi
 */

public class VirtualBananaOriginal
{
	/** Default constructor to create this object. */
	public VirtualBananaOriginal ()
	{
	  initialize();
	}

	/** Create and initialize the X3D model for this object. */
	public final void initialize()
	{
            try { // catch-all
  x3dModel = new X3D().setProfile(X3D.PROFILE_INTERACTIVE).setVersion(X3D.VERSION_3_3)
  .setHead(new head()
    .addMeta(new meta().setName(meta.NAME_TITLE      ).setContent("VirtualBananaOriginal.x3d"))
    .addMeta(new meta().setName(meta.NAME_DESCRIPTION).setContent("Original Cyber Banana model by Mark Pesce and Tony Parisi, SIGGRAPH 1994, used for proposing the Virtual Reality Markup Language (VRML)."))
    .addMeta(new meta().setName(meta.NAME_CREATED    ).setContent("1 June 1994"))
    .addMeta(new meta().setName(meta.NAME_MODIFIED   ).setContent("9 January 2022"))
    .addMeta(new meta().setName(meta.NAME_CREATOR    ).setContent("Mark Pesce and Tony Parisi"))
    .addMeta(new meta().setName(meta.NAME_TODO       ).setContent("Tell story of original production, display and influence"))
    .addMeta(new meta().setName(meta.NAME_TRANSLATOR ).setContent("Roy Walmsley and Don Brutzman"))
    .addMeta(new meta().setName(meta.NAME_REFERENCE  ).setContent("originals/bananaVRML1.wrl"))
    .addMeta(new meta().setName(meta.NAME_REFERENCE  ).setContent("originals/bananaVRML2.wrl"))
    .addMeta(new meta().setName(meta.NAME_REFERENCE  ).setContent("originals/CyberBanana.xhtml"))
    .addMeta(new meta().setName(meta.NAME_REFERENCE  ).setContent("originals/CyberBanana.x3d"))
    .addMeta(new meta().setName(meta.NAME_REFERENCE  ).setContent("originals/ios8-cyberbanana.png"))
    .addMeta(new meta().setName(meta.NAME_REFERENCE  ).setContent("VirtualBananaScanned.x3d"))
    .addMeta(new meta().setName(meta.NAME_REFERENCE  ).setContent("VirtualBananaReduced.x3d"))
    .addMeta(new meta().setName(meta.NAME_ACCESSRIGHTS).setContent("Original model: Copyright (c) Ohio State University, ok to distribute if copyright appears"))
    .addMeta(new meta().setName(meta.NAME_REFERENCE  ).setContent("http://vrml20.org/banana.xhtml"))
    .addMeta(new meta().setName(meta.NAME_REFERENCE  ).setContent("http://vrml20.org/2014/06/ios-8-20-years-later"))
    .addMeta(new meta().setName(meta.NAME_REFERENCE  ).setContent("Clay Graham @claytantor https://twitter.com/claytantor/status/1426368960090415114"))
    .addMeta(new meta().setName(meta.NAME_REFERENCE  ).setContent("Mark Pesce \"The web was done right the first time\" in The Register https://www.theregister.com/2021/08/11/column_cyberbanana_windows"))
    .addMeta(new meta().setName(meta.NAME_GENERATOR  ).setContent("AccuTrans 3D, http://www.micromouse.ca"))
    .addMeta(new meta().setName(meta.NAME_GENERATOR  ).setContent("X3D-Edit 3.3, https://savage.nps.edu/X3D-Edit"))
    .addMeta(new meta().setName(meta.NAME_IDENTIFIER ).setContent("https://www.web3d.org/x3d/content/examples/X3dForAdvancedModeling/Scanning/VirtualBananaOriginal.x3d"))
    .addMeta(new meta().setName(meta.NAME_LICENSE    ).setContent("../license.html")))
  .setScene(new Scene()
    .addChild(new WorldInfo().setInfo(new String[] {"File produced by AccuTrans 3D and faked up completely by Mark Pesce"}).setTitle("banana"))
    .addChild(new NavigationInfo())
    .addChild(new Viewpoint("VP1").setDescription("Front").setPosition(0.0,0.0,0.27))
    .addChild(new Viewpoint("VP2").setDescription("Right").setOrientation(0.0,1.0,0.0,1.570796).setPosition(0.27,0.0,0.0))
    .addChild(new Viewpoint("VP3").setDescription("Back").setOrientation(0.0,1.0,0.0,3.141592).setPosition(0.0,0.0,-0.27))
    .addChild(new Viewpoint("VP4").setDescription("Left").setOrientation(0.0,1.0,0.0,-1.570796).setPosition(-0.27,0.0,0.0))
    .addChild(new Viewpoint("VP5").setDescription("Top").setOrientation(1.0,0.0,0.0,-1.570796).setPosition(0.0,0.27,0.0))
    .addChild(new Viewpoint("VP6").setDescription("Bottom").setOrientation(1.0,0.0,0.0,1.570796).setPosition(0.0,-0.27,0.0))
    .addChild(new Background().setGroundAngle(new double[] {1.309,1.5707}).setGroundColor(new MFColor(new double[] {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0})).setSkyAngle(new double[] {1.309,1.5707}).setSkyColor(new MFColor(new double[] {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0})))
    .addChild(new Transform()
      .addChild(new Anchor().setDescription("Original VRML Banana by Mark Pesce and Tony Parisi").setUrl(new String[] {"originals/ios8-cyberbanana.png","https://www.web3d.org/x3d/content/examples/X3dForAdvancedModeling/Scanning/originals/ios8-cyberbanana.png"})
        .addChild(new Shape("Object")
          .setAppearance(new Appearance()
            .setMaterial(new Material().setDiffuseColor(1.0,0.8,0.0)))
          .setGeometry(new IndexedFaceSet().setCoordIndex(getIndexedFaceSet_6_36_coordIndex())
            .setCoord(new Coordinate().setPoint(getCoordinate_7_36_point())))))));
            }
            catch (Exception ex)
            {       
                System.err.println ("*** Further hints on X3DJSAIL errors and exceptions at");
                System.err.println ("*** https://www.web3d.org/specifications/java/X3DJSAIL.html");
                throw (ex);
            }
	}
	// end of initialize() method

		/** Define subarrays using type int[] */
		private int[] getIndexedFaceSet_6_36_coordIndex_1()
		{
			int[] value = {1,17,2,-1,18,2,17,-1,18,3,2,-1,18,19,3,-1,3,19,4,-1,20,4,19,-1,20,5,4,-1,20,21,5,-1,6,5,21,-1,6,21,22,-1,6,22,7,-1,23,7,22,-1,7,23,8,-1,24,8,23,-1,24,9,8,-1,24,25,9,-1,10,9,25,-1,10,25,26,-1,10,26,11,-1,27,11,26,-1,11,27,12,-1,28,12,27,-1,28,13,12,-1,28,29,13,-1,13,29,14,-1,30,14,29,-1,14,30,15,-1,31,15,30,-1,31,0,15,-1,31,16,0,-1,1,0,16,-1,1,16,17,-1,34,18,33,-1,17,33,18,-1,18,34,19,-1,35,19,34,-1,19,35,20,-1,36,20,35,-1,36,21,20,-1,36,37,21,-1,22,21,37,-1,22,37,38,-1,22,38,23,-1,39,23,38,-1,23,39,24,-1,40,24,39,-1,40,25,24,-1,40,41,25,-1,26,25,41,-1,26,41,42,-1,26,42,27,-1,43,27,42,-1,27,43,28,-1,44,28,43,-1,44,29,28,-1,44,45,29,-1,29,45,30,-1,46,30,45,-1,30,46,31,-1,47,31,46,-1,47,16,31,-1,47,32,16,-1,17,16,32,-1,17,32,33,-1,50,34,49,-1,33,49,34,-1,34,50,35,-1,51,35,50,-1,35,51,36,-1,52,36,51,-1,52,37,36,-1,52,53,37,-1,38,37,53,-1,38,53,54,-1,38,54,39,-1,55,39,54,-1,55,40,39,-1,55,56,40,-1,41,40,56,-1,41,56,57,-1,41,57,42,-1,58,42,57,-1,59,43,58,-1,42,58,43,-1,43,59,44,-1,60,44,59,-1,60,45,44,-1,60,61,45,-1,45,61,46,-1,62,46,61,-1,46,62,47,-1,63,47,62,-1,63,32,47,-1,63,48,32,-1,33,32,48,-1,33,48,49,-1,67,51,66,-1,50,66,51,-1,51,67,52,-1,68,52,67,-1,68,53,52,-1,68,69,53,-1,53,69,54,-1,70,54,69,-1,54,70,55,-1,71,55,70,-1,71,56,55,-1,71,72,56,-1,57,56,72,-1,57,72,73,-1,57,73,58,-1,74,58,73,-1,58,74,59,-1,75,59,74,-1,75,60,59,-1,75,76,60,-1,61,60,76,-1,61,76,77,-1,61,77,62,-1,78,62,77,-1,62,78,63,-1,79,63,78,-1,79,48,63,-1,79,64,48,-1,49,48,64,-1,49,64,65,-1,49,65,50,-1,66,50,65,-1,66,82,67,-1,83,67,82,-1,83,68,67,-1,83,84,68,-1,69,68,84,-1,69,84,85,-1,69,85,70,-1,86,70,85,-1,70,86,71,-1,87,71,86,-1,87,72,71,-1,87,88,72,-1,73,72,88,-1,73,88,89,-1,90,74,89,-1,73,89,74,-1,74,90,75,-1,91,75,90,-1,91,76,75,-1,91,92,76,-1,77,76,92,-1,77,92,93,-1,77,93,78,-1,94,78,93,-1,78,94,79,-1,95,79,94,-1,95,64,79,-1,95,80,64,-1,65,64,80,-1,65,80,81,-1,65,81,66,-1,82,66,81,-1,82,98,83,-1,99,83,98,-1,99,84,83,-1,99,100,84,-1,85,84,100,-1,85,100,101,-1,85,101,86,-1,102,86,101,-1,86,102,87,-1,103,87,102,-1,103,88,87,-1,103,104,88,-1,89,88,104,-1,89,104,105,-1,106,90,105,-1,89,105,90,-1,90,106,91,-1,107,91,106,-1,107,92,91,-1,107,108,92,-1,93,92,108,-1,93,108,109,-1,93,109,94,-1,110,94,109,-1,94,110,95,-1,111,95,110,-1,111,80,95,-1,111,96,80,-1,81,80,96,-1,81,96,97,-1,81,97,82,-1,98,82,97,-1,98,114,99,-1,115,99,114,-1,115,100,99,-1,115,116,100,-1,101,100,116,-1,101,116,117,-1,101,117,102,-1,118,102,117,-1,102,118,103,-1,119,103,118,-1,119,104,103,-1,119,120,104,-1,105,104,120,-1,105,120,121,-1,105,121,106,-1,122,106,121,-1,106,122,107,-1,123,107,122,-1,123,108,107,-1,123,124,108,-1,109,108,124,-1,109,124,125,-1,109,125,110,-1,126,110,125,-1,110,126,111,-1,127,111,126,-1,127,96,111,-1,127,112,96,-1,97,96,112,-1,97,112,113,-1,97,113,98,-1,114,98,113,-1,114,130,115,-1,131,115,130,-1,131,116,115,-1,131,132,116,-1,117,116,132,-1,117,132,133,-1,117,133,118,-1,134,118,133,-1,118,134,119,-1,135,119,134,-1,135,120,119,-1,135,136,120,-1,121,120,136,-1,121,136,137,-1,121,137,122,-1,138,122,137,-1,122,138,123,-1,139,123,138,-1,139,124,123,-1,139,140,124,-1,125,124,140,-1,125,140,141,-1,125,141,126,-1,142,126,141,-1,126,142,127,-1,143,127,142,-1};
			return value;
		}
		private int[] getIndexedFaceSet_6_36_coordIndex_2()
		{
			int[] value = {143,112,127,-1,143,128,112,-1,113,112,128,-1,113,128,129,-1,113,129,114,-1,130,114,129,-1,130,146,131,-1,147,131,146,-1,147,132,131,-1,147,148,132,-1,133,132,148,-1,133,148,149,-1,133,149,134,-1,150,134,149,-1,134,150,135,-1,151,135,150,-1,151,136,135,-1,151,152,136,-1,137,136,152,-1,137,152,153,-1,137,153,138,-1,154,138,153,-1,138,154,139,-1,155,139,154,-1,155,140,139,-1,155,156,140,-1,141,140,156,-1,141,156,157,-1,141,157,142,-1,158,142,157,-1,142,158,143,-1,159,143,158,-1,159,128,143,-1,159,144,128,-1,129,128,144,-1,129,144,145,-1,129,145,130,-1,146,130,145,-1,146,162,147,-1,163,147,162,-1,163,148,147,-1,163,164,148,-1,149,148,164,-1,149,164,165,-1,149,165,150,-1,166,150,165,-1,150,166,151,-1,167,151,166,-1,167,152,151,-1,167,168,152,-1,153,152,168,-1,153,168,169,-1,153,169,154,-1,170,154,169,-1,154,170,155,-1,171,155,170,-1,171,156,155,-1,171,172,156,-1,157,156,172,-1,157,172,173,-1,157,173,158,-1,174,158,173,-1,158,174,159,-1,175,159,174,-1,175,144,159,-1,175,160,144,-1,145,144,160,-1,145,160,161,-1,145,161,146,-1,162,146,161,-1,162,178,163,-1,179,163,178,-1,179,164,163,-1,179,180,164,-1,165,164,180,-1,165,180,181,-1,165,181,166,-1,182,166,181,-1,166,182,167,-1,183,167,182,-1,183,168,167,-1,183,184,168,-1,169,168,184,-1,169,184,185,-1,169,185,170,-1,186,170,185,-1,170,186,171,-1,187,171,186,-1,187,172,171,-1,187,188,172,-1,173,172,188,-1,173,188,189,-1,173,189,174,-1,190,174,189,-1,174,190,175,-1,191,175,190,-1,191,160,175,-1,191,176,160,-1,161,160,176,-1,161,176,177,-1,161,177,162,-1,178,162,177,-1,178,194,179,-1,195,179,194,-1,195,180,179,-1,195,196,180,-1,181,180,196,-1,181,196,197,-1,181,197,182,-1,198,182,197,-1,182,198,183,-1,199,183,198,-1,199,184,183,-1,199,200,184,-1,185,184,200,-1,185,200,201,-1,185,201,186,-1,202,186,201,-1,186,202,187,-1,203,187,202,-1,203,188,187,-1,203,204,188,-1,189,188,204,-1,189,204,205,-1,189,205,190,-1,206,190,205,-1,190,206,191,-1,207,191,206,-1,207,176,191,-1,207,192,176,-1,177,176,192,-1,177,192,193,-1,177,193,178,-1,194,178,193,-1,210,194,209,-1,193,209,194,-1,193,208,209,-1,193,192,208,-1,223,208,192,-1,223,192,207,-1,223,207,222,-1,206,222,207,-1,194,210,195,-1,211,195,210,-1,211,196,195,-1,211,212,196,-1,197,196,212,-1,197,212,213,-1,197,213,198,-1,214,198,213,-1,198,214,199,-1,215,199,214,-1,215,200,199,-1,215,216,200,-1,201,200,216,-1,201,216,217,-1,201,217,202,-1,218,202,217,-1,202,218,203,-1,219,203,218,-1,219,204,203,-1,219,220,204,-1,205,204,220,-1,205,220,221,-1,222,206,221,-1,205,221,206,-1,225,209,224,-1,208,224,209,-1,208,239,224,-1,208,223,239,-1,238,239,223,-1,238,223,222,-1,209,225,210,-1,226,210,225,-1,226,211,210,-1,226,227,211,-1,212,211,227,-1,212,227,228,-1,212,228,213,-1,229,213,228,-1,229,214,213,-1,229,230,214,-1,214,230,215,-1,231,215,230,-1,231,216,215,-1,231,232,216,-1,217,216,232,-1,217,232,233,-1,217,233,218,-1,234,218,233,-1,218,234,219,-1,235,219,234,-1,235,220,219,-1,235,236,220,-1,221,220,236,-1,221,236,237,-1,221,237,222,-1,238,222,237,-1,242,226,241,-1,225,241,226,-1,243,227,242,-1,226,242,227,-1,227,243,228,-1,244,228,243,-1,244,229,228,-1,244,245,229,-1,246,230,245,-1,229,245,230,-1,230,246,231,-1,247,231,246,-1,247,232,231,-1,247,248,232,-1,233,232,248,-1,233,248,249,-1,233,249,234,-1,250,234,249,-1,250,235,234,-1,250,251,235,-1,236,235,251,-1,236,251,252,-1,236,252,237,-1,253,237,252,-1,253,238,237,-1,253,254,238,-1,238,254,239,-1,255,239,254,-1,255,224,239,-1,255,240,224,-1,225,224,240,-1,225,240,241,-1,257,241,256,-1,240,256,241,-1,241,257,242,-1,258,242,257,-1,258,243,242,-1,258,259,243,-1,243,259,244,-1,260,244,259,-1,260,245,244,-1,260,261,245,-1,245,261,246,-1,262,246,261,-1,262,247,246,-1,262,263,247,-1,248,247,263,-1,248,263,264,-1,248,264,249,-1,265,249,264,-1,265,250,249,-1,265,266,250,-1};
			return value;
		}
		private int[] getIndexedFaceSet_6_36_coordIndex_3()
		{
			int[] value = {250,266,251,-1,267,251,266,-1,267,252,251,-1,267,268,252,-1,253,252,268,-1,253,268,269,-1,253,269,254,-1,270,254,269,-1,270,255,254,-1,270,271,255,-1,240,255,271,-1,240,271,256,-1};
			return value;
		}


		/** Define subarrays using type double[] */
		private double[] getCoordinate_7_36_point_1()
		{
			double[] value = {0.023603,-0.08654,-0.001533,0.024349,-0.083877,-0.001454,0.025004,-0.08369,-0.001829,0.025562,-0.083877,-0.001857,0.0261,-0.083877,0.00009,0.025965,-0.083877,0.002574,0.025479,-0.083645,0.003398,0.024754,-0.083877,0.003782,0.023803,-0.086402,0.004013,0.022734,-0.089184,0.003782,0.021834,-0.089893,0.003838,0.021118,-0.09,0.00338,0.020656,-0.089441,0.000429,0.021118,-0.088775,-0.00226,0.021857,-0.089164,-0.002318,0.022734,-0.089184,-0.001857,0.02304,-0.085682,-0.001704,0.023743,-0.083094,-0.001606,0.024429,-0.082921,-0.001917,0.025006,-0.083121,-0.00188,0.025448,-0.083105,0.000104,0.025241,-0.083069,0.002478,0.024834,-0.08285,0.003154,0.02423,-0.083033,0.00347,0.023263,-0.085499,0.003819,0.022142,-0.088287,0.003774,0.021308,-0.088993,0.003859,0.020642,-0.089128,0.003423,0.020087,-0.088595,0.000472,0.020463,-0.087921,-0.002297,0.021255,-0.088295,-0.002408,0.022198,-0.088285,-0.001982,0.021327,-0.08268,-0.002321,0.022025,-0.080293,-0.00216,0.022829,-0.080152,-0.002281,0.023473,-0.080399,-0.002019,0.023682,-0.080322,0.000195,0.023295,-0.080192,0.002385,0.023045,-0.080018,0.002754,0.022684,-0.080095,0.002917,0.021589,-0.082392,0.003521,0.020246,-0.085162,0.003895,0.019553,-0.085866,0.004014,0.019004,-0.086076,0.003595,0.018229,-0.0856,0.000559,0.018396,-0.084899,-0.002491,0.019331,-0.085239,-0.002776,0.020461,-0.085154,-0.002458,0.018437,-0.076906,-0.003524,0.019349,-0.074794,-0.003267,0.020406,-0.074691,-0.003083,0.021167,-0.075028,-0.002379,0.021082,-0.074828,0.000413,0.020461,-0.074565,0.002588,0.020334,-0.074457,0.002684,0.020154,-0.074456,0.002695,0.01869,-0.0765,0.003563,0.016869,-0.079149,0.004362,0.016304,-0.079876,0.004448,0.0159,-0.08019,0.003962,0.014847,-0.079771,0.000623,0.014762,-0.079019,-0.002974,0.0159,-0.079313,-0.003575,0.017338,-0.079141,-0.003439,0.014344,-0.067695,-0.005441,0.015869,-0.065919,-0.00508,0.017361,-0.065894,-0.004491,0.018292,-0.066326,-0.003065,0.018004,-0.06593,0.000734,0.01708,-0.06551,0.00338,0.016917,-0.065457,0.003427,0.016676,-0.06551,0.00338,0.014432,-0.067258,0.004453,0.01183,-0.069592,0.005394,0.011298,-0.070385,0.005327,0.011021,-0.070817,0.004588,0.00969,-0.070425,0.00059,0.009406,-0.069592,-0.003871,0.010764,-0.069813,-0.004955,0.012637,-0.069592,-0.00508,0.008227,-0.055803,-0.008753,0.011327,-0.054383,-0.00818,0.013596,-0.054408,-0.006999,0.014793,-0.054797,-0.004381,0.014708,-0.054329,0.001364,0.013291,-0.053852,0.005801,0.012627,-0.053761,0.006544,0.011513,-0.053961,0.006734,0.007542,-0.055425,0.007686,0.00366,-0.057276,0.007813,0.002813,-0.058088,0.007297,0.002522,-0.058559,0.005871,0.001073,-0.058235,0.000399,0.000989,-0.05744,-0.005573,0.002535,-0.057535,-0.007429,0.005026,-0.057314,-0.007975,0.000721,-0.041507,-0.013198,0.006242,-0.040473,-0.012273,0.00952,-0.040446,-0.010345,0.01108,-0.040666,-0.006226};
			return value;
		}
		private double[] getCoordinate_7_36_point_2()
		{
			double[] value = {0.011525,-0.04032,0.002263,0.009579,-0.039974,0.00956,0.007979,-0.039857,0.011816,0.005264,-0.040074,0.012441,-0.001112,-0.041177,0.012788,-0.006751,-0.042515,0.011365,-0.0083,-0.043188,0.01013,-0.008771,-0.043579,0.007667,-0.010128,-0.043403,0.000051,-0.009599,-0.042835,-0.007932,-0.007866,-0.042818,-0.010757,-0.004701,-0.042601,-0.011855,-0.00597,-0.023435,-0.017453,0.001932,-0.022856,-0.016194,0.00613,-0.022776,-0.013583,0.008044,-0.022835,-0.008102,0.009094,-0.022676,0.002931,0.00679,-0.022538,0.012947,0.004268,-0.022456,0.016836,-0.000024,-0.022578,0.017948,-0.00865,-0.023199,0.017614,-0.016051,-0.023946,0.014651,-0.018415,-0.024336,0.012695,-0.019156,-0.024565,0.009234,-0.020358,-0.024534,-0.00043,-0.019167,-0.024261,-0.010275,-0.017264,-0.024205,-0.013969,-0.013533,-0.024036,-0.015568,-0.009622,-0.000204,-0.020194,-0.000287,-0.000204,-0.018775,0.004439,-0.000204,-0.015764,0.006579,-0.000204,-0.00951,0.008096,-0.000204,0.002805,0.005772,-0.000204,0.014255,0.002837,-0.000204,0.019176,-0.002306,-0.000204,0.0207,-0.012267,-0.000204,0.020077,-0.020885,-0.000204,0.016269,-0.023897,-0.000204,0.013898,-0.024924,-0.000204,0.009824,-0.0261,-0.000204,-0.001039,-0.02452,-0.000204,-0.011927,-0.022517,-0.000204,-0.016093,-0.018462,-0.000204,-0.017969,-0.008881,0.023684,-0.0207,0.000517,0.023025,-0.019365,0.005234,0.022727,-0.016417,0.007446,0.022612,-0.010336,0.009233,0.022544,0.001308,0.007404,0.022583,0.012245,0.004945,0.022483,0.017242,0.000139,0.022592,0.019111,-0.009909,0.023306,0.018995,-0.019091,0.024213,0.015544,-0.022532,0.024719,0.013291,-0.023899,0.02505,0.00918,-0.025268,0.025221,-0.001741,-0.023704,0.024994,-0.012582,-0.021747,0.024755,-0.016643,-0.017738,0.024373,-0.01846,-0.004847,0.043277,-0.01943,0.003667,0.042044,-0.018324,0.007963,0.041353,-0.015792,0.010112,0.041023,-0.010603,0.01204,0.040942,-0.001021,0.011053,0.041113,0.008088,0.009609,0.040946,0.012537,0.005926,0.041129,0.014663,-0.003293,0.042466,0.015529,-0.012532,0.044248,0.013245,-0.016236,0.045287,0.011498,-0.017948,0.045995,0.007749,-0.019564,0.046454,-0.002407,-0.018246,0.046045,-0.01239,-0.016483,0.045455,-0.015932,-0.012843,0.044586,-0.017447,0.001026,0.059283,-0.016846,0.008071,0.057694,-0.015997,0.011633,0.056691,-0.014014,0.013538,0.056168,-0.010021,0.015441,0.05607,-0.003048,0.015291,0.056332,0.003692,0.014836,0.056139,0.00728,0.012443,0.056347,0.009407,0.004703,0.058053,0.011106,-0.003889,0.060424,0.010142,-0.007546,0.06184,0.009008,-0.009427,0.06282,0.005845,-0.011154,0.063537,-0.002884,-0.010169,0.063054,-0.011362,-0.008689,0.062202,-0.014182,-0.005608,0.060976,-0.015286,0.007277,0.072411,-0.013422,0.012637,0.070817,-0.012733,0.015244,0.069768,-0.011203,0.016676,0.069184,-0.008302,0.01837,0.068999,-0.003613,0.018696,0.069184,0.000962,0.01866,0.068987,0.003615,0.01708,0.069184,0.005394};
			return value;
		}
		private double[] getCoordinate_7_36_point_3()
		{
			double[] value = {0.011157,0.070865,0.007211,0.004156,0.073265,0.007005,0.001011,0.074709,0.006286,-0.00069,0.075714,0.003782,-0.002214,0.076512,-0.003009,-0.001499,0.076123,-0.00951,-0.000313,0.075299,-0.011599,0.002137,0.074082,-0.01233,0.013051,0.081867,-0.009643,0.01675,0.080641,-0.008999,0.018312,0.079844,-0.007767,0.019112,0.079372,-0.005702,0.020461,0.079133,-0.002682,0.020866,0.079177,0.000191,0.020655,0.079005,0.001937,0.0193,0.079162,0.003115,0.015251,0.080437,0.004372,0.010534,0.082264,0.004241,0.008278,0.083365,0.003664,0.00706,0.08413,0.001818,0.006016,0.084768,-0.002778,0.006574,0.084553,-0.007106,0.007495,0.083998,-0.008546,0.009321,0.083119,-0.009001,0.018009,0.087167,-0.00612,0.02023,0.086476,-0.005486,0.020841,0.086029,-0.004481,0.021029,0.085757,-0.003083,0.022,0.085594,-0.00137,0.022375,0.085584,0.000131,0.021866,0.085461,0.001078,0.020513,0.08557,0.001623,0.01813,0.086297,0.002179,0.01566,0.087307,0.00193,0.014323,0.08793,0.001395,0.013637,0.088354,0.000145,0.013107,0.088713,-0.002414,0.013553,0.088628,-0.004755,0.014244,0.088348,-0.005642,0.015523,0.087863,-0.00588,0.021451,0.089488,-0.003507,0.022641,0.089278,-0.002878,0.022564,0.08914,-0.002015,0.022284,0.08906,-0.001058,0.022911,0.089008,-0.000219,0.023256,0.088995,0.000386,0.022449,0.088933,0.000793,0.021018,0.088989,0.000807,0.019907,0.089226,0.000748,0.019072,0.089513,0.000344,0.01845,0.089708,-0.000212,0.018199,0.089829,-0.001018,0.018092,0.08993,-0.002075,0.018458,0.089919,-0.002969,0.018985,0.089846,-0.003465,0.019878,0.089696,-0.003567,0.022727,0.09,-0.002485,0.023542,0.09,-0.001857,0.023193,0.09,-0.001028,0.022734,0.09,-0.000246,0.023215,0.09,0.000264,0.023542,0.09,0.00056,0.022536,0.09,0.000765,0.021118,0.09,0.00056,0.020582,0.09,0.000241,0.020311,0.09,-0.000246,0.01998,0.09,-0.000854,0.019907,0.09,-0.001454,0.019984,0.09,-0.00192,0.020311,0.09,-0.00226,0.020772,0.09,-0.002589,0.021523,0.09,-0.002663};
			return value;
		}

		/** Large attribute array: IndexedFaceSet coordIndex field, scene-graph level=6, element #36, 2048 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_6_36_coordIndex()
		{
			MFInt32 IndexedFaceSet_6_36_coordIndex = new MFInt32()/*2.finalize*/
				.append(new MFInt32(getIndexedFaceSet_6_36_coordIndex_1()))
				.append(new MFInt32(getIndexedFaceSet_6_36_coordIndex_2()))
				.append(new MFInt32(getIndexedFaceSet_6_36_coordIndex_3()));
			return IndexedFaceSet_6_36_coordIndex;
		}
		/** Large attribute array: Coordinate point field, scene-graph level=7, element #36, 816 total numbers made up of 272 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_7_36_point()
		{
			MFVec3f Coordinate_7_36_point = new MFVec3f()/*2.finalize*/
				.append(new MFVec3f(getCoordinate_7_36_point_1()))
				.append(new MFVec3f(getCoordinate_7_36_point_2()))
				.append(new MFVec3f(getCoordinate_7_36_point_3()));
			return Coordinate_7_36_point;
		}

	/** The initialized model object, created within initialize() method. */
	private X3D x3dModel;

	/** 
	 * Provide a 
	 * &lt;a href="https://dzone.com/articles/java-copy-shallow-vs-deep-in-which-you-will-swim" target="_blank"&gt;shallow copy&lt;/a&gt;
	 * of the X3D model.
	 * @see &lt;a href="https://www.web3d.org/specifications/java/javadoc/org/web3d/x3d/jsail/Core/X3D.html"&gt;X3D&lt;/a&gt;
	 * @return VirtualBananaOriginal 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 &lt;a href="https://www.web3d.org/specifications/java/javadoc/org/web3d/x3d/jsail/Core/X3D.html#handleArguments-java.lang.String:A-"&gt;X3D.handleArguments(args)&lt;/a&gt;
     * @see &lt;a href="https://www.web3d.org/specifications/java/javadoc/org/web3d/x3d/jsail/Core/X3D.html#validationReport--"&gt;X3D.validationReport()&lt;/a&gt;
     * @see &lt;a href="https://www.web3d.org/specifications/java/javadoc/org/web3d/x3d/jsail/CommandLine.html"&gt;CommandLine&lt;/a&gt;
     * @see &lt;a href="https://www.web3d.org/specifications/java/javadoc/org/web3d/x3d/jsail/CommandLine.html#USAGE"&gt;CommandLine.USAGE&lt;/a&gt;
     * @see &lt;a href="https://www.web3d.org/specifications/java/javadoc/org/web3d/x3d/jsail/ConfigurationProperties.html"&gt;ConfigurationProperties&lt;/a&gt;
     */
    public static void main(String args[])
    {
        System.out.println("Build this X3D model, showing validation diagnostics...");
        X3D thisExampleX3dModel = new VirtualBananaOriginal().getX3dModel();
//      System.out.println("X3D model construction complete.");
	
        // next handle command line arguments
        boolean hasArguments = (args != null) &amp;&amp; (args.length &gt; 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: \"X3dForAdvancedModeling.Scanning.VirtualBananaOriginal\" 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("X3dForAdvancedModeling.Scanning.VirtualBananaOriginal self-validation test confirmation: ");
                if (!validationResults.equals("success"))
                    System.out.println();
                System.out.println(validationResults.trim());

                // experimental: test X3DJSAIL output files
                // Scanning/VirtualBananaOriginal_JavaExport.* file validation is checked when building X3D Example Archives
                String filenameX3D  = "Scanning/VirtualBananaOriginal_JavaExport.x3d"; 
                String filenameX3DV = "Scanning/VirtualBananaOriginal_JavaExport.x3dv"; 
                String filenameJSON = "Scanning/VirtualBananaOriginal_JavaExport.json";
                thisExampleX3dModel.toFileX3D        (filenameX3D);
                thisExampleX3dModel.toFileClassicVRML(filenameX3DV);
// TODO         thisExampleX3dModel.toFileJSON       (filenameJSON);
        }
    }
}
</pre></body></html>