<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.3//EN" "http://www.web3d.org/specifications/x3d-3.3.dtd">
<X3D profile='Immersive' version='3.3' xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation=' http://www.web3d.org/specifications/x3d-3.3.xsd '>
<!-- x3dVersionComparisonTest for this model: supportsX3dVersion(X3D.VERSION_3_0)=true -->
<head>
<!-- comment #1 -->
<!-- comment #2 -->
<!-- comment #3 -->
<!-- comment #4 -->
<component name='Navigation' level='3'/>
<component name='Shaders' level='1'/>
<component name='CADGeometry' level='2'/>
<component name='DIS' level='2'/>
<component name='H-Anim' level='1'/>
<component name='Grouping' level='1'/>
<component name='Layering' level='1'/>
<unit name='AngleUnitConversion' category='angle' conversionFactor='1.0'/>
<unit name='LengthUnitConversion' category='length' conversionFactor='1.0'/>
<unit name='ForceFromPoundsToNewtons' category='force' conversionFactor='4.4482'/>
<meta name='title' content='HelloWorldProgramOutput.x3d'/>
<meta name='info' content='continued development and testing in progress'/>
<meta name='description' content='Example HelloWorldProgram creates an X3D model using the X3D Java Scene Access Interface Library (X3DJSAIL)'/>
<meta name='reference' content=' https://www.web3d.org/specifications/java/X3DJSAIL.html '/>
<meta name='generator' content='HelloWorldProgramOutput.java'/>
<meta name='created' content='6 September 2016'/>
<meta name='modified' content='9 June 2020'/>
<meta name='generator' content='X3D Java Scene Access Interface Library (X3DJSAIL)'/>
<meta name='generator' content='https://www.web3d.org/specifications/java/examples/HelloWorldProgram.java'/>
<meta name='generator' content='Netbeans http://www.netbeans.org'/>
<meta name='creator' content='Don Brutzman'/>
<meta name='reference' content=' https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/stylesheets/java/examples/HelloWorldProgramOutput.x3d '/>
<meta name='reference' content='Console output, ClassicVRML encoding, VRML97 encoding and pretty-print documentation:'/>
<meta name='reference' content='HelloWorldProgramOutput.txt'/>
<meta name='reference' content='HelloWorldProgramOutput.x3dv'/>
<meta name='reference' content='HelloWorldProgramOutput.wrl'/>
<meta name='reference' content='HelloWorldProgramOutput.html'/>
<meta name='reference' content=' https://savage.nps.edu/X3dValidator?url=https://www.web3d.org/specifications/java/examples/HelloWorldProgramOutput.x3d '/>
<meta name='identifier' content=' https://www.web3d.org/specifications/java/examples/HelloWorldProgramOutput.x3d '/>
<meta name='license' content=' ../license.html'/>
</head>
<!-- -->
<Scene>
<ViewpointGroup description='Available viewpoints' containerField='children'>
<Viewpoint DEF='DefaultView' description='Hello X3DJSAIL'/>
<Viewpoint DEF='TopDownView' description='top-down view from above' orientation='1 0 0 -1.570796' position='0 100 0'/>
</ViewpointGroup>
<NavigationInfo type='"EXAMINE" "FLY" "ANY"'/>
<WorldInfo DEF='WorldInfoDEF' title='HelloWorldProgram produced by X3D Java SAI Library (X3DJSAIL)'/>
<WorldInfo USE='WorldInfoDEF'/>
<WorldInfo USE='WorldInfoDEF'/>
<MetadataString DEF='scene.addChildMetadata' name='test' value='"Top-level root Metadata node beneath Scene needs to be one of '-children' in JSON encoding"' containerField='metadata'/>
<LayerSet DEF='scene.addChildLayerSetTest' containerField='children'/>
<!-- ROUTE information for LogoGeometryTransform node:  [from BoxPathAnimator.value_changed to set_translation] -->
<Transform DEF='LogoGeometryTransform' translation='0 1.5 0' bboxCenter='0 0 0' bboxSize='-1 -1 -1'>
<Anchor description='select for X3D Java SAI Library (X3DJSAIL) description' bboxCenter='0 0 0' bboxSize='-1 -1 -1'
  url=' "../X3DJSAIL.html" "https://www.web3d.org/specifications/java/X3DJSAIL.html" '>
<Shape DEF='BoxShape' bboxCenter='0 0 0' bboxSize='-1 -1 -1'>
<Appearance>
<Material DEF='GreenMaterial' diffuseColor='0 1 1' emissiveColor='0.8 0 0' transparency='0.1'/>
<ImageTexture
  url=' "images/X3dJavaSceneAccessInterfaceSaiLibrary.png" "https://www.web3d.org/specifications/java/examples/images/X3dJavaSceneAccessInterfaceSaiLibrary.png" '/>
</Appearance>
<Box DEF='test-NMTOKEN_regex.0123456789' class='untextured' size='2 2 2' solid='true'/>
</Shape>
</Anchor>
</Transform>
<Shape DEF='LineShape' bboxCenter='0 0 0' bboxSize='-1 -1 -1'>
<Appearance>
<Material emissiveColor='0.6 0.19607843 0.8'/>
</Appearance>
<IndexedLineSet coordIndex='0 1 2 3 4 0'>
<!-- Coordinate 3-tuple point count: 6 -->
<Coordinate point='0 1.5 0 2 1.5 0 2 1.5 -2 -2 1.5 -2 -2 1.5 0 0 1.5 0'/>
</IndexedLineSet>
</Shape>
<!-- ROUTE information for BoxPathAnimator node:  [from OrbitClock.fraction_changed to set_fraction] [from value_changed to LogoGeometryTransform.set_translation] -->
<PositionInterpolator DEF='BoxPathAnimator' key='0 0.125 0.375 0.625 0.875 1' keyValue='0 1.5 0 2 1.5 0 2 1.5 -2 -2 1.5 -2 -2 1.5 0 0 1.5 0'/>
<!-- ROUTE information for OrbitClock node:  [from fraction_changed to BoxPathAnimator.set_fraction] -->
<TimeSensor DEF='OrbitClock' cycleInterval='8.0' loop='true'/>
<ROUTE fromNode='OrbitClock' fromField='fraction_changed' toNode='BoxPathAnimator' toField='set_fraction'/>
<ROUTE fromNode='BoxPathAnimator' fromField='value_changed' toNode='LogoGeometryTransform' toField='set_translation'/>
<!-- ROUTE information for TextTransform node:  [from SpinInterpolator.value_changed to rotation] -->
<Transform DEF='TextTransform' translation='0 -1.5 0' bboxCenter='0 0 0' bboxSize='-1 -1 -1'>
<Shape bboxCenter='0 0 0' bboxSize='-1 -1 -1'>
<Appearance>
<Material USE='GreenMaterial'/>
</Appearance>
<Text string='"X3D Java" "SAI Library" "X3DJSAIL"'>
<!-- Comment example A, plain quotation marks: He said, "Immel did it!" -->
<!-- Comment example B, XML character entities: He said, &quot;Immel did it!&quot; -->
<MetadataSet name='EscapedQuotationMarksMetadataSet' containerField='metadata'>
<MetadataString name='quotesTestC' containerField='value' value='"MFString example C, backslash-escaped quotes: He said, \"Immel did it!\""'/>
<MetadataString name='extraChildTest' containerField='value' value='"checks MetadataSet addValue() method"'/>
</MetadataSet>
<FontStyle justify='"MIDDLE" "MIDDLE"'/>
</Text>
</Shape>
<Collision enabled='true' bboxCenter='0 0 0' bboxSize='-1 -1 -1'>
<!-- test containerField='proxy' -->
<Shape DEF='ProxyShape' containerField='proxy' bboxCenter='0 0 0' bboxSize='-1 -1 -1'>
<!-- alternative XML encoding: Text string='"One, Two, Comment" "" "He said, \&quot;Immel did it!\&quot;"' -->
<!-- alternative XML encoding: Text string='"One, Two, Comment" "" "He said, \&quot;Immel did it!\&quot;" ""' -->
<!-- alternative Java source: .setString(new String [] {"One, Two, Comment", "", "He said, \"Immel did it!\""}) -->
<!-- reference: https://www.web3d.org/x3d/content/examples/Basic/X3dSpecifications/StringArrayEncodingExamplesIndex.html -->
<Text string='"One, Two, Text" "" "He said, \"Immel did it!\" \"\""'/>
</Shape>
</Collision>
<!-- It's a beautiful world -->
<!-- ... for you! -->
<!-- https://en.wikipedia.org/wiki/Beautiful_World_(Devo_song) -->
</Transform>
<!-- repeatedly spin 180 degrees as a readable special effect -->
<!-- ROUTE information for SpinInterpolator node:  [from SpinClock.fraction_changed to set_fraction] [from value_changed to TextTransform.rotation] -->
<OrientationInterpolator DEF='SpinInterpolator' key='0 0.5 1' keyValue='0 1 0 4.712389 0 1 0 0 0 1 0 1.5707964'/>
<!-- ROUTE information for SpinClock node:  [from fraction_changed to SpinInterpolator.set_fraction] -->
<TimeSensor DEF='SpinClock' cycleInterval='5.0' loop='true'/>
<ROUTE fromNode='SpinClock' fromField='fraction_changed' toNode='SpinInterpolator' toField='set_fraction'/>
<ROUTE fromNode='SpinInterpolator' fromField='value_changed' toNode='TextTransform' toField='rotation'/>
<Group DEF='BackgroundGroup' bboxCenter='0 0 0' bboxSize='-1 -1 -1'>
<!-- ROUTE information for GradualBackground node:  [from colorTypeConversionScript.colorsOutput to skyColor] -->
<Background DEF='GradualBackground' skyColor='0 0 0' transparency='0'/>
<!-- ROUTE information for colorTypeConversionScript node:  [from ColorAnimator.value_changed to colorInput] [from colorsOutput to GradualBackground.skyColor] -->
<Script DEF='colorTypeConversionScript'>
<field name='colorInput' type='SFColor' accessType='inputOnly'/>
<field name='colorsOutput' type='MFColor' accessType='outputOnly'/>
<![CDATA[

ecmascript:

function colorInput (eventValue) // Example source code
{
   colorsOutput = new MFColor(eventValue); // assigning value sends output event
// Browser.print('colorInput=' + eventValue + ', colorsOutput=' + colorsOutput + '\n');
}

      
]]>
</Script>
<!-- ROUTE information for ColorAnimator node:  [from ColorClock.fraction_changed to set_fraction] [from value_changed to colorTypeConversionScript.colorInput] -->
<ColorInterpolator DEF='ColorAnimator' key='0 0.5 1' keyValue='0.9411765 1 1 0.29411766 0 0.50980395 0.9411765 1 1'>
<!-- AZURE to INDIGO and back again -->
</ColorInterpolator>
<!-- ROUTE information for ColorClock node:  [from fraction_changed to ColorAnimator.set_fraction] -->
<TimeSensor DEF='ColorClock' cycleInterval='60.0' loop='true'/>
<ROUTE fromNode='colorTypeConversionScript' fromField='colorsOutput' toNode='GradualBackground' toField='skyColor'/>
<ROUTE fromNode='ColorAnimator' fromField='value_changed' toNode='colorTypeConversionScript' toField='colorInput'/>
<ROUTE fromNode='ColorClock' fromField='fraction_changed' toNode='ColorAnimator' toField='set_fraction'/>
</Group>
<ProtoDeclare name='ArtDeco01Material' appinfo='tooltip: ArtDeco01Material prototype is a Material node'>
<ProtoInterface>
<field name='description' type='SFString' value='ArtDeco01Material prototype is a Material node' accessType='inputOutput'
 appinfo='tooltip for descriptionField'/>

<field name='enabled' type='SFBool' value='true' accessType='inputOutput'/>
</ProtoInterface>
<ProtoBody>
<!-- Initial node of ProtoBody determines prototype node type -->
<Material ambientIntensity='0.25' diffuseColor='0.282435 0.085159 0.134462' shininess='0.127273' specularColor='0.276305 0.11431 0.139857'/>
<!-- [HelloWorldProgram diagnostic] should be connected to scene graph: artDeco01ProtoDeclare.getNodeType()="Material" -->
<!-- presence of follow-on TouchSensor shows that additional nodes are allowed in ProtoBody after initial node, regardless of node types -->
<TouchSensor description='within ProtoBody'>
<IS>
<connect nodeField='description' protoField='description'/>
<connect nodeField='enabled' protoField='enabled'/>
</IS>
</TouchSensor>
</ProtoBody>
</ProtoDeclare>
<ExternProtoDeclare name='ArtDeco02Material' appinfo='this is a different Material node'
  url=' "http://X3dGraphics.com/examples/X3dForWebAuthors/Chapter14Prototypes/ArtDecoPrototypesExcerpt.x3d#ArtDeco02Material" "http://X3dGraphics.com/examples/X3dForWebAuthors/Chapter14Prototypes/ArtDecoPrototypesExcerpt.x3dv#ArtDeco02Material" '>
<!-- [HelloWorldProgram diagnostic] artDeco02ExternProtoDeclare.getNodeType()="ERROR_UNKNOWN_EXTERNPROTODECLARE_NODE_TYPE: ExternProtoDeclare name='ArtDeco02Material' type cannot be remotely accessed at run time. TODO X3DJSAIL needs to add further capability that retrieves the ExternProtoDeclare file." -->
<field name='description' type='SFString' accessType='inputOutput'
 appinfo='tooltip for descriptionField'/>
</ExternProtoDeclare>
<!-- Tested ArtDeco01ProtoInstance, ArtDeco02ProtoInstance for improper node type when ProtoInstance is added in wrong place -->
<Shape DEF='TestShape1' bboxCenter='0 0 0' bboxSize='-1 -1 -1'>
<Appearance DEF='TestAppearance1'>
<!-- ArtDeco01Material prototype goes here... TODO ensure setContainerField is handled in exported Java -->
<ProtoInstance name='ArtDeco01Material' containerField='material'>
<!-- [HelloWorldProgram diagnostic] ArtDeco01ProtoInstance.getNodeType()="Material" -->
<fieldValue name='description' value='ArtDeco01Material can substitute for a Material node'/>
</ProtoInstance>
</Appearance>
<Sphere radius='0.001'/>
</Shape>
<Shape DEF='TestShape2' bboxCenter='0 0 0' bboxSize='-1 -1 -1'>
<Appearance DEF='TestAppearance2'>
<!-- ArtDeco02Material prototype goes here... TODO ensure setContainerField is handled in exported Java -->
<ProtoInstance name='ArtDeco02Material' DEF='ArtDeco02MaterialDEF' containerField='material'>
<!-- [HelloWorldProgram diagnostic] ArtDeco02ProtoInstance.getNodeType()="ERROR_UNKNOWN_EXTERNPROTODECLARE_NODE_TYPE: ExternProtoDeclare name='ArtDeco02Material' type cannot be remotely accessed at run time. TODO X3DJSAIL needs to add further capability that retrieves the ExternProtoDeclare file." -->
<fieldValue name='description' value='ArtDeco02Material can substitute for another Material node'/>
</ProtoInstance>
</Appearance>
<Cone bottomRadius='0.001' height='0.001' side='true' bottom='true' solid='true'/>
</Shape>
<Shape DEF='TestShape3' bboxCenter='0 0 0' bboxSize='-1 -1 -1'>
<Appearance DEF='TestAppearance3'>
<!-- ArtDeco02Material ProtoInstance USE goes here. Note that name field is NOT defined as part of ProtoInstance USE. -->
<ProtoInstance USE='ArtDeco02MaterialDEF' containerField='material'/>
</Appearance>
<Cylinder height='0.001' radius='0.001'/>
</Shape>
<Inline DEF='inlineSceneDef' bboxCenter='0 0 0' bboxSize='-1 -1 -1'
  url=' "someOtherScene.x3d" "https://www.web3d.org/specifications/java/examples/someOtherScene.x3d" '/>

<IMPORT inlineDEF='inlineSceneDef' importedDEF='WorldInfoDEF' AS='WorldInfoDEF2'/>
<EXPORT localDEF='WorldInfoDEF' AS='WorldInfoDEF3'/>
<ProtoDeclare name='MaterialModulator' appinfo='mimic a Material node and modulate fields as an animation effect' documentation=' http://x3dgraphics.com/examples/X3dForWebAuthors/Chapter14Prototypes/MaterialModulatorIndex.html '>
<ProtoInterface>
<field name='enabled' type='SFBool' value='true' accessType='inputOutput'/>
<field name='diffuseColor' type='SFColor' value='0 0 0' accessType='inputOutput'/>
<field name='emissiveColor' type='SFColor' value='0.05 0.05 0.5' accessType='inputOutput'/>
<field name='specularColor' type='SFColor' value='0 0 0' accessType='inputOutput'/>
<field name='transparency' type='SFFloat' value='0.0' accessType='inputOutput'/>
<field name='shininess' type='SFFloat' value='0.0' accessType='inputOutput'/>
<field name='ambientIntensity' type='SFFloat' value='0.0' accessType='inputOutput'/>
</ProtoInterface>
<ProtoBody>
<Material DEF='MaterialNode'>
<IS>
<connect nodeField='diffuseColor' protoField='diffuseColor'/>
<connect nodeField='emissiveColor' protoField='emissiveColor'/>
<connect nodeField='specularColor' protoField='specularColor'/>
<connect nodeField='transparency' protoField='transparency'/>
<connect nodeField='shininess' protoField='shininess'/>
<connect nodeField='ambientIntensity' protoField='ambientIntensity'/>
</IS>
</Material>
<!-- Only first node (the node type) is renderable, others are along for the ride -->
<Script DEF='MaterialModulatorScript'>
<field name='enabled' type='SFBool' accessType='inputOutput'/>
<field name='diffuseColor' type='SFColor' accessType='inputOutput'/>
<field name='newColor' type='SFColor' accessType='outputOnly'/>
<field name='clockTrigger' type='SFTime' accessType='inputOnly'/>
<IS>
<connect nodeField='enabled' protoField='enabled'/>
<connect nodeField='diffuseColor' protoField='diffuseColor'/>
</IS>
<![CDATA[

ecmascript:
function initialize ()
{
    newColor = diffuseColor; // start with correct color
}
function set_enabled (newValue)
{
	enabled = newValue;
}
function clockTrigger (timeValue)
{
    if (!enabled) return;
    red   = newColor.r;
    green = newColor.g;
    blue  = newColor.b;
    
    // note different modulation rates for each color component, % is modulus operator
    newColor = new SFColor ((red + 0.02) % 1, (green + 0.03) % 1, (blue + 0.04) % 1);
	if (enabled)
	{
		Browser.print ('diffuseColor=(' + red + ',' + green + ',' + blue + ') newColor=' + newColor.toString() + '\n');
	}
}

        
]]>
</Script>
</ProtoBody>
</ProtoDeclare>
<!-- Test success: declarative statement createDeclarativeShapeTests() -->
<Group DEF='DeclarativeGroupExample' bboxCenter='0 0 0' bboxSize='-1 -1 -1'>
<Shape bboxCenter='0 0 0' bboxSize='-1 -1 -1'>
<MetadataString DEF='FindableMetadataStringTest' name='findThisNameValue' value='"test case"' containerField='metadata'/>
<Appearance DEF='DeclarativeAppearanceExample'>
<!-- DeclarativeMaterialExample gets overridden by subsequently added MaterialModulator ProtoInstance -->
<ProtoInstance name='MaterialModulator' DEF='MyMaterialModulator' containerField='material'/>
</Appearance>
<Cone bottom='false' bottomRadius='0.05' height='0.1' side='true' solid='true'/>
</Shape>
<!-- Test success: declarativeGroup.addChild() singleton pipeline method -->
</Group>
<!-- Test success: declarative statement addChild() -->
<!-- Test success: x3dModel.findNodeByDEF(DeclarativeAppearanceExample) = <Appearance DEF='DeclarativeAppearanceExample'/> i.e. <Appearance DEF='DeclarativeAppearanceExample'> <!- - DeclarativeMaterialExample gets overridden by subsequently added MaterialModulator ProtoInstance - -> <ProtoInstance DEF='MyMaterialModulator' name='MaterialModulator' containerField='material'/> </Appearance> -->
<!-- Test success: x3dModel.findElementByNameValue(findThisNameValue) = <MetadataString DEF='FindableMetadataStringTest' name='findThisNameValue' value='"test case"'/> -->
<!-- Test success: x3dModel.findElementByNameValue("ArtDeco01Material", "ProtoDeclare") found -->
<!-- Test success: x3dModel.findElementByNameValue("MaterialModulator", "ProtoDeclare") found -->
<!-- Test success: x3dModel.findElementByNameValue("MaterialModulator", "ProtoInstance") found -->
<Group DEF='TestFieldObjectsGroup' bboxCenter='0 0 0' bboxSize='-1 -1 -1'>
<!-- testFieldObjects() results -->
<!-- SFBool default=true, true=true, false=false, negate()=true -->
<!-- MFBool default=, initial=true false true, negate()=false true false -->
<!-- SFFloat default=0.0, initial=1.0, setValue(2)=2.0, setValue(3.0f)=3.0, setValue(4.0)=4.0 -->
<!-- MFFloat default=, initial=1 2 3, append(5)=1 2 3 5, inserts(3,4)(0,0)=0 1 2 3 4 5, append(6)=0 1 2 3 4 5 6, size()=7 -->
<!-- ... get1Value[3]=3.0, remove[1]=0 2 3 4 5 6, set1Value(0,10)=10 2 3 4 5 6, multiply(2)=20 4 6 8 10 12, clear= -->
<!-- SFVec3f default=0 0 0, initial=1 2 3, setValue=4 5 6, multiply(2)=8 10 12, normalize()=0.45584232 0.5698029 0.68376344, regex matches()=true -->
<!-- regex test SFVec3f().matches("1 2 3")=true, regex test SFVec3f().matches("1 2 3 4")=false, regex test (SFRotation.matches("0 0 0 0")=true, failure detecting illegal (zero axis) rotation value -->
</Group>
<Sound location='0 1.6 0'>
<!-- set sound-ellipsoid location height at 1.6m to match typical avatar height -->
<AudioClip description='chimes' loop='false' pitch='1.0' startTime='0' stopTime='0' pauseTime='0' resumeTime='0'
  url=' "chimes.wav" "https://www.web3d.org/x3d/content/examples/ConformanceNist/Sounds/AudioClip/chimes.wav" '>
<!-- Scene example fragment from https://www.web3d.org/x3d/content/examples/ConformanceNist/Sounds/AudioClip/default.x3d -->
</AudioClip>
</Sound>
<Sound location='0 1.6 0'>
<!-- set sound-ellipsoid location height at 1.6m to match typical avatar height -->
<MovieTexture containerField='source' description='mpgsys.mpg from ConformanceNist suite'
  url=' "mpgsys.mpg" "https://www.web3d.org/x3d/content/examples/ConformanceNist/Appearance/MovieTexture/mpgsys.mpg" '>
<!-- Scene example fragment from https://www.web3d.org/x3d/content/examples/ConformanceNist/Appearance/MovieTexture/mpeg1-systems.x3d -->
<!-- Expected containerField='source', allowed containerField values="texture" "source" "back" "bottom" "front" "left" "right" "top" "backTexture" "bottomTexture" "frontTexture" "leftTexture" "rightTexture" "topTexture" "watchList" -->
</MovieTexture>
</Sound>
<!-- Test success: Anchor.isNode()=true, siteAnchor.isNode()=true -->
<!-- Test success: Anchor.isStatement()=false, siteAnchor.isStatement()=false -->
<!-- Test success: ROUTE.isNode()=false, orbitPositionROUTE.isNode()=false -->
<!-- Test success: ROUTE.isStatement()=true, orbitPositionROUTE.isStatement()=true -->
<!-- Test success: CommentsBlock.isNode()=false, testComments.isNode()=false -->
<!-- Test failure: CommentsBlock.isStatement()=true, testComments.isStatement()=true -->
<Shape DEF='ExtrusionShape' bboxCenter='0 0 0' bboxSize='-1 -1 -1'>
<!-- ExampleExtrusion isCrossSectionClosed()=true, crossSection='[1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0]' -->
<!-- ExampleExtrusion isSpineClosed()=false, spine='[0.0, 0.0, 0.0, 0.0, 1.0, 0.0]' -->
<Appearance DEF='TransparentAppearance'>
<Material transparency='1.0'/>
</Appearance>
<Extrusion DEF='ExampleExtrusion'/>
</Shape>
<Group bboxCenter='0 0 0' bboxSize='-1 -1 -1'>
<!-- Test MFNode children array as an ordered list consisting of comments, statements, ProtoInstance and nodes -->
<ProtoDeclare name='NewWorldInfo'>
<ProtoInterface>
<field name='description' type='SFString' accessType='initializeOnly'/>
</ProtoInterface>
<ProtoBody>
<WorldInfo/>
</ProtoBody>
</ProtoDeclare>
<ProtoInstance name='NewWorldInfo' DEF='Proto1'>
<fieldValue name='description' value='testing 1 2 3'/>
</ProtoInstance>
<Group DEF='Node2' bboxCenter='0 0 0' bboxSize='-1 -1 -1'>
<!-- intentionally empty -->
</Group>
<ProtoInstance name='NewWorldInfo' DEF='Proto3'/>
<Transform DEF='Node4' bboxCenter='0 0 0' bboxSize='-1 -1 -1'>
<!-- intentionally empty -->
</Transform>
<!-- Test satisfactorily creates MFNode children array as an ordered list with mixed content -->
</Group>
<ProtoDeclare name='ShaderProto'>
<ProtoBody>
<ProgramShader containerField='shaders'/>
</ProtoBody>
</ProtoDeclare>
<Shape bboxCenter='0 0 0' bboxSize='-1 -1 -1'>
<Appearance>
<!-- Test MFNode shaders array as an ordered list consisting of comments, ProtoInstance and nodes -->
<!-- Test satisfactorily creates MFNode shaders array as an ordered list with mixed content -->
<ProgramShader DEF='TestShader1' containerField='shaders'>
<ShaderProgram DEF='TestShader2' type='VERTEX' containerField='programs'>
</ShaderProgram>
</ProgramShader>
<ProtoInstance name='ShaderProto' DEF='TestShader3' containerField='shaders'/>
<ComposedShader DEF='TestShader4' containerField='shaders'>
<ShaderPart DEF='TestShader5' type='VERTEX' containerField='parts'>
</ShaderPart>
</ComposedShader>
</Appearance>
</Shape>
<Transform DEF='SpecialtyNodes' bboxCenter='0 0 0' bboxSize='-1 -1 -1'>
<CADLayer>
<CADAssembly>
<CADPart>
<CADFace/>
</CADPart>
</CADAssembly>
</CADLayer>
<EspduTransform bboxCenter='0 0 0' bboxSize='-1 -1 -1' containerField='children'/>
<ReceiverPdu bboxCenter='0 0 0' bboxSize='-1 -1 -1' receivedPower='0.0' containerField='children'/>
<SignalPdu bboxCenter='0 0 0' bboxSize='-1 -1 -1' containerField='children'/>
<TransmitterPdu bboxCenter='0 0 0' bboxSize='-1 -1 -1' relativeAntennaLocation='0 0 0' transmitFrequencyBandwidth='0.0' containerField='children'/>
<DISEntityManager containerField='children'>
<DISEntityTypeMapping/>
</DISEntityManager>
</Transform>
</Scene>
</X3D>
<!--

Index for ExternProtoDeclare definition: ArtDeco02Material

Index for ProtoDeclare definitions: ArtDeco01Material, MaterialModulator, NewWorldInfo, ShaderProto

Index for DEF nodes: ArtDeco02MaterialDEF, BackgroundGroup, BoxPathAnimator, BoxShape, ColorAnimator, ColorClock, colorTypeConversionScript, DeclarativeAppearanceExample, DeclarativeGroupExample, DefaultView, ExampleExtrusion, ExtrusionShape, FindableMetadataStringTest, GradualBackground, GreenMaterial, inlineSceneDef, LineShape, LogoGeometryTransform, MaterialModulatorScript, MaterialNode, MyMaterialModulator, Node2, Node4, OrbitClock, Proto1, Proto3, ProxyShape, scene.addChildLayerSetTest, scene.addChildMetadata, SpecialtyNodes, SpinClock, SpinInterpolator, TestAppearance1, TestAppearance2, TestAppearance3, TestFieldObjectsGroup, test-NMTOKEN_regex.0123456789, TestShader1, TestShader2, TestShader3, TestShader4, TestShader5, TestShape1, TestShape2, TestShape3, TextTransform, TopDownView, TransparentAppearance, WorldInfoDEF
-->

<!-- Color key: <X3dNode DEF='idName' field='value'/> matches <XmlElement DEF='idName' attribute='value'/>

(Light blue background: behavior node) (Grey background: inserted documentation) (Magenta background: X3D Extensibility)

    <Prototype name='ProtoName'> <fieldname='fieldName'/> </Prototype> -->

<!-- Additional help information about X3D scenes: X3D Resources, X3D Scene Authoring Hints and X3D Tooltips -->