<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 4.0//EN" "https://www.web3d.org/specifications/x3d-4.0.dtd">
<X3D class='x3dModel.classid='x3dModel.idprofile='Full'  style='x3dModel.styleversion='4.0xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation=' https://www.web3d.org/specifications/x3d-4.0.xsd ' >
<!-- x3dVersionComparisonTest for this model: supportsX3dVersion(X3D.VERSION_3_0)=true here!!! -->
<head>
<!-- comment #1 here!!! -->
<!-- comment #2 here!!! -->
<!-- comment #3 here!!! -->
<!-- comment #4 here!!! -->
<component name='Navigationlevel='3'/>
<component name='Shaderslevel='1'/>
<component name='CADGeometrylevel='2'/>
<component name='DISlevel='2'/>
<component name='HAnimlevel='1'/>
<component name='Groupinglevel='1'/>
<component name='Layeringlevel='1'/>
<unit name='AngleUnitConversioncategory='angleconversionFactor='1.0'/>
<unit name='LengthUnitConversioncategory='lengthconversionFactor='1.0'/>
<unit name='ForceFromPoundsToNewtonscategory='forceconversionFactor='4.4482'/>
<meta name='titlecontent='HelloWorldProgramOutput.x3d'/>
<meta name='infocontent='continued development and testing in progress'/>
<meta name='descriptioncontent='Example HelloWorldProgram creates an X3D model using the X3D Java Scene Access Interface Library (X3DJSAIL)'/>
<meta name='referencecontent=' https://www.web3d.org/specifications/java/X3DJSAIL.html '/>
<meta name='generatorcontent='HelloWorldProgramOutput.java'/>
<meta name='createdcontent='6 September 2016'/>
<meta name='modifiedcontent='21 November 2023'/>
<meta name='generatorcontent='X3D Java Scene Access Interface Library (X3DJSAIL)'/>
<meta name='generatorcontent='https://www.web3d.org/specifications/java/examples/HelloWorldProgram.java'/>
<meta name='generatorcontent='Netbeans https://www.netbeans.org'/>
<meta name='creatorcontent='Don Brutzman'/>
<meta name='referencecontent=' https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/stylesheets/java/examples/HelloWorldProgramOutput.x3d '/>
<meta name='referencecontent='Console output, ClassicVRML encoding, VRML97 encoding and pretty-print documentation:'/>
<meta name='referencecontent='HelloWorldProgramOutput.txt'/>
<meta name='referencecontent='HelloWorldProgramOutput.x3dv'/>
<meta name='referencecontent='HelloWorldProgramOutput.wrl'/>
<meta name='referencecontent='HelloWorldProgramOutput.html'/>
<meta name='referencecontent=' https://savage.nps.edu/X3dValidator?url=https://www.web3d.org/specifications/java/examples/HelloWorldProgramOutput.x3d '/>
<meta name='identifiercontent=' https://www.web3d.org/specifications/java/examples/HelloWorldProgramOutput.x3d '/>
<meta name='licensecontent=' ../license.html'/>
</head>
<!-- -->
<Scene>
<MetadataSet name='topLevelSceneMetadata'/>
<ViewpointGroup description='Available viewpointscontainerField='children'>
<Viewpoint DEF='DefaultViewdescription='Hello X3DJSAIL'/>
<Viewpoint DEF='TopDownViewdescription='top-down view from aboveorientation='1 0 0 -1.570796position='0 100 0'/>
</ViewpointGroup>
<NavigationInfo type='"EXAMINE" "FLY" "ANY"'/>
<WorldInfo DEF='WorldInfoDEFclass='worldInfoNode.classid='worldInfoNode.idstyle='worldInfoNode.styletitle='HelloWorldProgram produced by X3D Java SAI Library (X3DJSAIL)'/>
<WorldInfo USE=' WorldInfoDEF'/>
<WorldInfo USE=' WorldInfoDEF'/>
<MetadataString DEF='scene.addChildMetadataname='testvalue='"Top-level root Metadata node beneath Scene needs to be one of '-children' in JSON encoding"'/>
<LayerSet DEF='scene.addChildLayerSetTestcontainerField='children'/>
<!-- ROUTE information for LogoGeometryTransform node:  [from BoxPathAnimator.value_changed to set_translation] -->
<Transform DEF='LogoGeometryTransformtranslation='0 1.5 0'>
<Anchor DEF='siteAnchordescription='select for X3D Java SAI Library (X3DJSAIL) description'
  url=' "../X3DJSAIL.html" "https://www.web3d.org/specifications/java/X3DJSAIL.html" ' >
<Shape DEF='BoxShapeid='BoxShapeID'>
<Appearance>
<Material DEF='GreenMaterialdiffuseColor='0 1 1emissiveColor='0.8 0 0transparency='0.1'/>
<ImageTexture
  url=' "images/X3dJavaSceneAccessInterfaceSaiLibrary.png" "https://www.web3d.org/specifications/java/examples/images/X3dJavaSceneAccessInterfaceSaiLibrary.png" ' />
</Appearance>
<Box DEF='test-NMTOKEN_regex.0123456789class='untextured'/>
</Shape>
</Anchor>
</Transform>
<Shape DEF='LineShape'>
<Appearance>
<Material emissiveColor='0.6 0.19607843 0.8'/>
</Appearance>
<IndexedLineSet coordIndex='0 1 2 3 4 0'>
<!-- Coordinate 3-tuple point count: 6 here!!! -->
<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='BoxPathAnimatorkey='0 0.125 0.375 0.625 0.875 1keyValue='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='OrbitClockcycleInterval='8.0loop='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='TextTransformtranslation='0 -1.5 0'>
<Shape>
<Appearance>
<Material USE=' GreenMaterial'/>
</Appearance>
<Text string='"X3D Java" "SAI Library" "X3DJSAIL"'>
<!-- Comment example A, plain quotation marks: He said, "Immel did it!"
here!!! -->

<!-- Comment example B, XML character entities: He said, &quot;Immel did it!&quot; here!!! -->
<MetadataSet name='EscapedQuotationMarksMetadataSetcontainerField='metadata'>
<MetadataString name='quotesTestCvalue='"MFString example C, backslash-escaped quotes: He said, \"Immel did it!\""'/>
<MetadataString name='extraChildTestvalue='"checks MetadataSet addValue() method"'/>
</MetadataSet>
<FontStyle justify='"MIDDLE" "MIDDLE"'/>
</Text>
</Shape>
<Collision>
<!-- test containerField='proxy' here!!! -->
<Shape DEF='ProxyShapecontainerField='proxy'>
<!-- alternative XML encoding: Text string='"One, Two, Comment"
""
"He said, \&quot;Immel did it!\&quot;"' here!!! -->

<!-- alternative XML encoding: Text string='"One, Two, Comment"
""
"He said, \&quot;Immel did it!\&quot;"
""' here!!! -->

<!-- alternative Java source: .setString(new String [] {"One, Two, Comment", "", "He said, \"Immel did it!\""}) here!!! -->
<!-- reference: https://www.web3d.org/x3d/content/examples/Basic/X3dSpecifications/StringArrayEncodingExamplesIndex.html here!!! -->
<Text string='"One, Two, Text" "" "He said, \"Immel did it!\" \"\""'/>
</Shape>
</Collision>
<!-- It's a beautiful world here!!! -->
<!-- ... for you! here!!! -->
<!-- https://en.wikipedia.org/wiki/Beautiful_World_(Devo_song) here!!! -->
</Transform>
<!-- repeatedly spin 180 degrees as a readable special effect here!!! -->
<!-- ROUTE information for SpinInterpolator node:  [from SpinClock.fraction_changed to set_fraction] [from value_changed to TextTransform.rotation] -->
<OrientationInterpolator DEF='SpinInterpolatorkey='0 0.5 1keyValue='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='SpinClockcycleInterval='5.0loop='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'>
<!-- ROUTE information for GradualBackground node:  [from colorTypeConversionScript.colorsOutput to skyColor] -->
<Background DEF='GradualBackground'/>

<!-- ROUTE information for colorTypeConversionScript node:  [from ColorAnimator.value_changed to colorInput] [from colorsOutput to GradualBackground.skyColor] -->
<Script DEF='colorTypeConversionScript'>
<field name='colorInputtype='SFColoraccessType='inputOnly'/>
<field name='colorsOutputtype='MFColoraccessType='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='ColorAnimatorkey='0 0.5 1keyValue='0.9411765 1 1 0.29411766 0 0.50980395 0.9411765 1 1'>
<!-- AZURE to INDIGO and back again here!!! -->
</ColorInterpolator>
<!-- ROUTE information for ColorClock node:  [from fraction_changed to ColorAnimator.set_fraction] -->
<TimeSensor DEF='ColorClockcycleInterval='60.0loop='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='ArtDeco01Materialappinfo='tooltip: ArtDeco01Material prototype is a Material node' >
<ProtoInterface>
<field name='descriptiontype='SFStringvalue='ArtDeco01Material prototype is a Material nodeaccessType='inputOutput'
 appinfo='tooltip for descriptionField' />

<field name='enabledtype='SFBoolvalue='trueaccessType='inputOutput'/>
</ProtoInterface>
<ProtoBody>
<!-- Initial node of ProtoBody determines prototype node type here!!! -->
<Material ambientIntensity='0.25diffuseColor='0.282435 0.085159 0.134462shininess='0.127273specularColor='0.276305 0.11431 0.139857'/>
<!-- [HelloWorldProgram diagnostic] should be connected to scene graph: artDeco01ProtoDeclare.getNodeType()="Material"
here!!! -->

<!-- presence of follow-on TouchSensor shows that additional nodes are allowed in ProtoBody after initial node, regardless of node types here!!! -->
<TouchSensor description='within ProtoBody'>
<IS>
<connect nodeField='descriptionprotoField='description'/>
<connect nodeField='enabledprotoField='enabled'/>
</IS>
</TouchSensor>
</ProtoBody>
</ProtoDeclare>
<ExternProtoDeclare name='ArtDeco02Materialappinfo='this is a different Material node'
  url=' "https://X3dGraphics.com/examples/X3dForWebAuthors/Chapter14Prototypes/ArtDecoPrototypesExcerpt.x3d#ArtDeco02Material" "https://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."
here!!! -->

<field name='descriptiontype='SFStringaccessType='inputOutput'
 appinfo='tooltip for descriptionField' />
</ExternProtoDeclare>
<!-- Tested ArtDeco01ProtoInstance, ArtDeco02ProtoInstance for improper node type when ProtoInstance is added in wrong place here!!! -->
<Shape DEF='TestShape1'>
<Appearance DEF='TestAppearance1'>
<!-- ArtDeco01Material prototype goes here... TODO ensure setContainerField is handled in exported Java here!!! -->
<ProtoInstance name='ArtDeco01MaterialcontainerField='material'>
<!-- [HelloWorldProgram diagnostic] ArtDeco01ProtoInstance.getNodeType()="Material"
here!!! -->

<fieldValue name='descriptionvalue='ArtDeco01Material can substitute for a Material node'/>
</ProtoInstance>
</Appearance>
<Sphere radius='0.001'/>
</Shape>
<Shape DEF='TestShape2'>
<Appearance DEF='TestAppearance2'>
<!-- ArtDeco02Material prototype goes here... TODO ensure setContainerField is handled in exported Java here!!! -->
<ProtoInstance name='ArtDeco02MaterialDEF='ArtDeco02MaterialDEFcontainerField='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."
here!!! -->

<fieldValue name='descriptionvalue='ArtDeco02Material can substitute for another Material node'/>
</ProtoInstance>
</Appearance>
<Cone bottomRadius='0.001height='0.001'/>
</Shape>
<Shape DEF='TestShape3'>
<Appearance DEF='TestAppearance3'>
<!-- ArtDeco02Material ProtoInstance USE goes here. Note that name field is NOT defined as part of ProtoInstance USE. here!!! -->
<ProtoInstance USE=' ArtDeco02MaterialDEFcontainerField='material'/>
</Appearance>
<Cylinder height='0.001radius='0.001'/>
</Shape>
<Inline DEF='inlineScene'
  url=' "someOtherScene.x3d" "https://www.web3d.org/specifications/java/examples/someOtherScene.x3d" ' />

<IMPORT inlineDEF='inlineSceneimportedDEF='WorldInfoDEFAS='WorldInfoDEF2'/>
<EXPORT localDEF='WorldInfoDEFAS='WorldInfoDEF3'/>
<ProtoDeclare name='MaterialModulatorappinfo='mimic a Material node and modulate fields as an animation effect'  documentation=' https://x3dgraphics.com/examples/X3dForWebAuthors/Chapter14Prototypes/MaterialModulatorIndex.html ' >
<ProtoInterface>
<field name='enabledtype='SFBoolvalue='trueaccessType='inputOutput'/>
<field name='diffuseColortype='SFColorvalue='0 0 0accessType='inputOutput'/>
<field name='emissiveColortype='SFColorvalue='0.05 0.05 0.5accessType='inputOutput'/>
<field name='specularColortype='SFColorvalue='0 0 0accessType='inputOutput'/>
<field name='transparencytype='SFFloatvalue='0.0accessType='inputOutput'/>
<field name='shininesstype='SFFloatvalue='0.0accessType='inputOutput'/>
<field name='ambientIntensitytype='SFFloatvalue='0.0accessType='inputOutput'/>
</ProtoInterface>
<ProtoBody>
<Material DEF='MaterialNode'>
<IS>
<connect nodeField='diffuseColorprotoField='diffuseColor'/>
<connect nodeField='emissiveColorprotoField='emissiveColor'/>
<connect nodeField='specularColorprotoField='specularColor'/>
<connect nodeField='transparencyprotoField='transparency'/>
<connect nodeField='shininessprotoField='shininess'/>
<connect nodeField='ambientIntensityprotoField='ambientIntensity'/>
</IS>
</Material>
<!-- Only first node (the node type) is renderable, others are along for the ride here!!! -->
<Script DEF='MaterialModulatorScript'>
<field name='enabledtype='SFBoolaccessType='inputOutput'/>
<field name='diffuseColortype='SFColoraccessType='inputOutput'/>
<field name='newColortype='SFColoraccessType='outputOnly'/>
<field name='clockTriggertype='SFTimeaccessType='inputOnly'/>
<IS>
<connect nodeField='enabledprotoField='enabled'/>
<connect nodeField='diffuseColorprotoField='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() here!!! -->
<Group DEF='DeclarativeGroupExample'>
<Shape>
<MetadataString DEF='FindableMetadataStringTestname='findThisNameValuevalue='"test case"'/>
<Appearance DEF='DeclarativeAppearanceExample'>
<!-- DeclarativeMaterialExample gets overridden by subsequently added MaterialModulator ProtoInstance here!!! -->
<ProtoInstance name='MaterialModulatorDEF='MyMaterialModulatorcontainerField='material'/>
</Appearance>
<Cone bottom='falsebottomRadius='0.05height='0.1'/>
</Shape>
<!-- Test success: declarativeGroup.addChild() singleton pipeline method here!!! -->
</Group>
<!-- Test success: declarative statement addChild() here!!! -->
<!-- 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> here!!! -->
<!-- Test success: x3dModel.findElementByNameValue(findThisNameValue) = <MetadataString DEF='FindableMetadataStringTest' name='findThisNameValue' value='"test case"'/> here!!! -->
<!-- Test success: x3dModel.findElementByNameValue("ArtDeco01Material", "ProtoDeclare") found here!!! -->
<!-- Test success: x3dModel.findElementByNameValue("MaterialModulator", "ProtoDeclare") found here!!! -->
<!-- Test success: x3dModel.findElementByNameValue("MaterialModulator", "ProtoInstance") found here!!! -->
<Group DEF='TestFieldObjectsGroup'>
<!-- testFieldObjects() results here!!! -->
<!-- SFBool default=false, true=true, false=false, negate()=true here!!! -->
<!-- MFBool default=, initial=true false true, negate()=false true false here!!! -->
<!-- SFFloat default=0.0, initial=1.0, setValue(2)=2.0, setValue(3.0f)=3.0, setValue(4.0)=4.0 here!!! -->
<!-- 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 here!!! -->
<!-- ... 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= here!!! -->
<!-- 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 here!!! -->
<!-- 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 here!!! -->
</Group>
<Sound location='0 1.6 0'>
<!-- set sound-ellipsoid location height at 1.6m to match typical avatar height here!!! -->
<AudioClip description='chimes'
  url=' "chimes.wav" "https://www.web3d.org/x3d/content/examples/ConformanceNist/Sounds/AudioClip/chimes.wav" ' >
</AudioClip>
</Sound>
<Sound location='0 1.6 0'>
<!-- set sound-ellipsoid location height at 1.6m to match typical avatar height here!!! -->
<MovieTexture containerField='sourcedescription='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 here!!! -->
<!-- Expected containerField='source', allowed containerField values="texture"
"source"
"back"
"bottom"
"front"
"left"
"right"
"top"
"backTexture"
"bottomTexture"
"frontTexture"
"leftTexture"
"rightTexture"
"topTexture"
"children"
here!!! -->
</MovieTexture>
</Sound>
<!-- Test success: Anchor.isNode()=true, siteAnchor.isNode()=true here!!! -->
<!-- Test success: Anchor.isStatement()=false, siteAnchor.isStatement()=false here!!! -->
<!-- Test success: ROUTE.isNode()=false, orbitPositionROUTE.isNode()=false here!!! -->
<!-- Test success: ROUTE.isStatement()=true, orbitPositionROUTE.isStatement()=true here!!! -->
<!-- Test success: CommentsBlock.isNode()=false, testComments.isNode()=false here!!! -->
<!-- Test failure: CommentsBlock.isStatement()=true, testComments.isStatement()=true here!!! -->
<Shape DEF='ExtrusionShape'>
<!-- ExampleExtrusion isCrossSectionClosed()=true, crossSection='[1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0]' here!!! -->
<!-- ExampleExtrusion isSpineClosed()=false, spine='[0.0, 0.0, 0.0, 0.0, 1.0, 0.0]' here!!! -->
<Appearance DEF='TransparentAppearance'>
<Material transparency='1.0'/>
</Appearance>
<Extrusion DEF='ExampleExtrusion'/>
</Shape>
<Group>
<!-- Test MFNode children array as an ordered list consisting of comments, statements, ProtoInstance and nodes here!!! -->
<ProtoDeclare name='NewWorldInfo'>
<ProtoInterface>
<field name='descriptiontype='SFStringaccessType='initializeOnly'/>
</ProtoInterface>
<ProtoBody>
<WorldInfo/>
</ProtoBody>
</ProtoDeclare>
<ProtoInstance name='NewWorldInfoDEF='Proto1'>
<fieldValue name='descriptionvalue='testing 1 2 3'/>
</ProtoInstance>
<Group DEF='Node2'>
<!-- intentionally empty here!!! -->
</Group>
<ProtoInstance name='NewWorldInfoDEF='Proto3'/>
<Transform DEF='Node4'>
<!-- intentionally empty here!!! -->
</Transform>
<!-- Test satisfactorily creates MFNode children array as an ordered list with mixed content here!!! -->
</Group>
<ProtoDeclare name='ShaderProto'>
<ProtoBody>
<ProgramShader containerField='shaders'/>
</ProtoBody>
</ProtoDeclare>
<Shape>
<Appearance>
<!-- Test MFNode shaders array as an ordered list consisting of comments, ProtoInstance and nodes here!!! -->
<!-- Test satisfactorily creates MFNode shaders array as an ordered list with mixed content here!!! -->
<ProgramShader DEF='TestShader1containerField='shaders'>
<ShaderProgram DEF='TestShader2containerField='programs'>
</ShaderProgram>
</ProgramShader>
<ProtoInstance name='ShaderProtoDEF='TestShader3containerField='shaders'/>
<ComposedShader DEF='TestShader4containerField='shaders'>
<ShaderPart DEF='TestShader5containerField='parts'>
</ShaderPart>
</ComposedShader>
</Appearance>
</Shape>
<Transform DEF='SpecialtyNodes'>
<CADLayer>
<CADAssembly>
<CADPart>
<CADFace/>
</CADPart>
</CADAssembly>
</CADLayer>
<EspduTransform containerField='children'/>
<ReceiverPdu receivedPower='0.0containerField='children'/>
<SignalPdu containerField='children'/>
<TransmitterPdu relativeAntennaLocation='0 0 0transmitFrequencyBandwidth='0.0containerField='children'/>
<DISEntityManager containerField='children'>
<DISEntityTypeMapping containerField='children'/>
</DISEntityManager>
</Transform>
<EspduTransform containerField='children'>
<WorldInfo/>
</EspduTransform>
<ReceiverPdu receivedPower='0.0containerField='children'/>
<SignalPdu containerField='children'/>
<TransmitterPdu relativeAntennaLocation='0 0 0transmitFrequencyBandwidth='0.0containerField='children'/>
<DISEntityManager containerField='children'>
<DISEntityTypeMapping containerField='children'/>
</DISEntityManager>
<LoadSensor>
<!-- Contained nodes typically must be USE references for nodes previously DEFined in the scene here!!! -->
<!-- The following nodes are test cases for all X3DUrlObject nodes here!!! -->
<Anchor USE=' siteAnchor'/>
<Inline USE=' inlineScene'/>
<DISEntityTypeMapping containerField='children'/>
<GeoMetadata containerField='children'/>
<AudioClip containerField='children'/>
<ImageCubeMapTexture containerField='children'/>
<ImageTexture3D containerField='children'/>
<ImageTexture containerField='children'/>
<MovieTexture containerField='children'/>
<Script>
</Script>
<PackagedShader containerField='children'/>
<ShaderPart containerField='children'>
</ShaderPart>
<ShaderProgram containerField='children'>
</ShaderProgram>
</LoadSensor>
</Scene>
</X3D>
<!-- -->

Event Graph ROUTE Table entries with 7 ROUTE connections total, showing event model relationships for this scene.


TransmitterPdu

(No ROUTE connection found for this node)


TransmitterPdu

(No ROUTE connection found for this node)


TouchSensor
within ProtoBody
(No ROUTE connection found for this node)

ColorClock
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
 
ColorAnimator
ColorInterpolator
set_fraction
SFFloat
then ColorAnimator
ColorInterpolator
value_changed
SFColor

ROUTE
event to
 
colorTypeConversionScript
Script
colorInput
SFColor
then colorTypeConversionScript
Script
colorsOutput
MFColor

ROUTE
event to
 
GradualBackground
Background
skyColor
MFColor

OrbitClock
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
 
BoxPathAnimator
PositionInterpolator
set_fraction
SFFloat
then BoxPathAnimator
PositionInterpolator
value_changed
SFVec3f

ROUTE
event to
 
LogoGeometryTransform
Transform
set_translation
SFVec3f

SpinClock
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
 
SpinInterpolator
OrientationInterpolator
set_fraction
SFFloat
then SpinInterpolator
OrientationInterpolator
value_changed
SFRotation

ROUTE
event to
 
TextTransform
Transform
rotation
SFRotation


SignalPdu

(No ROUTE connection found for this node)


SignalPdu

(No ROUTE connection found for this node)


Script

(No ROUTE connection found for this node)

MaterialModulatorScript
Script

(No ROUTE connection found for this node)


ReceiverPdu

(No ROUTE connection found for this node)


ReceiverPdu

(No ROUTE connection found for this node)


ProtoInstance

(No ROUTE connection found for this node)


ArtDeco02MaterialDEF
ProtoInstance

(No ROUTE connection found for this node)

MyMaterialModulator
ProtoInstance

(No ROUTE connection found for this node)

Proto1
ProtoInstance

(No ROUTE connection found for this node)

Proto3
ProtoInstance

(No ROUTE connection found for this node)

TestShader3
ProtoInstance

(No ROUTE connection found for this node)


LoadSensor

(No ROUTE connection found for this node)


EspduTransform

(No ROUTE connection found for this node)


EspduTransform

(No ROUTE connection found for this node)


AudioClip
chimes
(No ROUTE connection found for this node)


AudioClip

(No ROUTE connection found for this node)


-->

<!-- Color legend: X3D terminology <X3dNode DEF='idName' field='value'/> matches XML terminology <XmlElement DEF='idName' attribute='value'/>
(Light-blue background: event-based behavior node or statement) (Grey background inside box: inserted documentation) (Magenta background: X3D Extensibility)
    <ProtoInstance name='ProtoName'> <fieldname='fieldName'/> </ProtoInstance> -->

<!-- For additional help information about X3D scenes, please see X3D Tooltips, X3D Resources, and X3D Scene Authoring Hints. -->