<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:.5in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:1638955679;
        mso-list-type:hybrid;
        mso-list-template-ids:312082442 -1 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l0:level1
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Calibri",sans-serif;}
@list l0:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level3
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l0:level4
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level6
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l0:level7
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level9
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
ol
        {margin-bottom:0in;}
ul
        {margin-bottom:0in;}
--></style></head><body lang=EN-US link=blue vlink="#954F72"><div class=WordSection1><p class=MsoNormal><o:p> </o:p></p><ol style='margin-top:0in' start=1 type=1><li class=MsoListParagraph style='margin-left:0in;mso-list:l0 level1 lfo1'> Generated JSON from X3dToJson.xslt does not pass schema</li><li class=MsoListParagraph style='margin-left:0in;mso-list:l0 level1 lfo1'>Generated Java from X3dToJava.xslt does not compile</li><li class=MsoListParagraph style='margin-left:0in;mso-list:l0 level1 lfo1'>Serialized XML from JSON does not match original XML (see below)</li><li class=MsoListParagraph style='margin-left:0in;mso-list:l0 level1 lfo1'>Nashorn doesn’t run</li><li class=MsoListParagraph style='margin-left:0in;mso-list:l0 level1 lfo1'><MetadataString DEF='scene.addChildMetadataObject' name='test'/> doesn’t get transferred to JSON.</li><li class=MsoListParagraph style='margin-left:0in;mso-list:l0 level1 lfo1'><LayerSet DEF='scene.addChildLayerSetObjectTest' order='0'/>  order=’0’ doesn’t get transferred to JSON (may be default)</li></ol><p class=MsoListParagraph><o:p> </o:p></p><p class=MsoNormal>I can report errors if necessary.</p><p class=MsoListParagraph><o:p> </o:p></p><p class=MsoNormal>This is really strange, because this file comes from the Don’s X3DJSAIL test suite as output.   We should test all outputs.  Plus I thought that it already validated, yet it appears it has errors???</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Please put this file in X3D Resources Examples as a unit test.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Thanks,</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>John</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><?xml version="1.0" encoding="UTF-8"?></p><p class=MsoNormal><!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.3//EN" "http://www.web3d.org/specifications/x3d-3.3.dtd"></p><p class=MsoNormal><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'></p><p class=MsoNormal>    <head></p><p class=MsoNormal>        <component name='Navigation' level='3'/></p><p class=MsoNormal>        <component name='Layering' level='1'/></p><p class=MsoNormal>        <unit name='AngleUnitConversion' category='angle' conversionFactor='1.0'/></p><p class=MsoNormal>        <unit name='LengthUnitConversion' category='length' conversionFactor='1.0'/></p><p class=MsoNormal>        <meta name='title' content='HelloWorldProgramOutput.x3d'/></p><p class=MsoNormal>        <meta name='description' content='Example HelloWorldProgram creates an X3D model using the X3D Java Scene Access Interface (SAI) Library'/></p><p class=MsoNormal>        <meta name='reference' content='http://www.web3d.org/specifications/java/X3DJSAIL.html'/></p><p class=MsoNormal>        <meta name='generator' content='HelloWorldProgramOutput.java'/></p><p class=MsoNormal>        <meta name='created' content='6 September 2016'/></p><p class=MsoNormal>        <meta name='modified' content='9 December 2017'/></p><p class=MsoNormal>        <meta name='generator' content='X3D Java Scene Access Interface Library (X3DJSAIL)'/></p><p class=MsoNormal>        <meta name='generator' content='http://www.web3d.org/specifications/java/examples/HelloWorldProgram.java'/></p><p class=MsoNormal>        <meta name='generator' content='Netbeans http://www.netbeans.org'/></p><p class=MsoNormal>        <meta name='creator' content='Don Brutzman'/></p><p class=MsoNormal>        <meta name='reference' content='https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/stylesheets/java/examples/HelloWorldProgramOutput.x3d'/></p><p class=MsoNormal>        <meta name='reference' content='Console output, ClassicVRML encoding, VRML97 encoding and pretty-print documentation:'/></p><p class=MsoNormal>        <meta name='reference' content='HelloWorldProgramOutput.txt'/></p><p class=MsoNormal>        <meta name='reference' content='HelloWorldProgramOutput.x3dv'/></p><p class=MsoNormal>        <meta name='reference' content='HelloWorldProgramOutput.wrl'/></p><p class=MsoNormal>        <meta name='reference' content='HelloWorldProgramOutput.html'/></p><p class=MsoNormal>        <meta name='X3dValidator' content='https://savage.nps.edu/X3dValidator?url=http://www.web3d.org/specifications/java/examples/HelloWorldProgramOutput.x3d'/></p><p class=MsoNormal>        <meta name='identifier' content='http://www.web3d.org/specifications/java/examples/HelloWorldProgramOutput.x3d'/></p><p class=MsoNormal>        <meta name='license' content='../license.html'/></p><p class=MsoNormal>        <meta name='SpecialTest' content='tested sat: name value cannot contain embedded space character'/></p><p class=MsoNormal>        <!-- comment #1 --></p><p class=MsoNormal>        <!-- comment #2 --></p><p class=MsoNormal>        <!-- comment #3 --></p><p class=MsoNormal>        <!-- comment #4 --></p><p class=MsoNormal>    </head></p><p class=MsoNormal>    <Scene></p><p class=MsoNormal>        <ViewpointGroup description='Available viewpoints'></p><p class=MsoNormal>            <Viewpoint DEF='DefaultView' description='Hello X3DJSAIL'/></p><p class=MsoNormal>            <Viewpoint DEF='TopDownView' description='top-down view from above' orientation='1 0 0 -1.570796' position='0 100 0'/></p><p class=MsoNormal>        </ViewpointGroup></p><p class=MsoNormal>        <WorldInfo DEF='WorldInfoDEF' title='HelloWorldProgram produced by X3D Java SAI Library (X3DJSAIL)'/></p><p class=MsoNormal>        <WorldInfo USE='WorldInfoDEF'/></p><p class=MsoNormal>        <WorldInfo USE='WorldInfoDEF'/></p><p class=MsoNormal>        <MetadataString DEF='scene.addChildMetadataObject' name='test'/></p><p class=MsoNormal>        <LayerSet DEF='scene.addChildLayerSetObjectTest' order='0'/></p><p class=MsoNormal>        <Transform DEF='LogoGeometryTransform' translation='0 1.5 0'></p><p class=MsoNormal>            <Anchor description='select for X3D Java SAI Library (X3DJSAIL) description' url='"../X3DJSAIL.html" "http://www.web3d.org/specifications/java/X3DJSAIL.html"'></p><p class=MsoNormal>                <Shape DEF='BoxShape'></p><p class=MsoNormal>                    <Appearance></p><p class=MsoNormal>                        <Material DEF='GreenMaterial' diffuseColor='0 1 1' emissiveColor='0.8 0 0' transparency='0.1'/></p><p class=MsoNormal>                        <ImageTexture url='"images/X3dJavaSceneAccessInterfaceSaiLibrary.png" "http://www.web3d.org/specifications/java/examples/images/X3dJavaSceneAccessInterfaceSaiLibrary.png"'/></p><p class=MsoNormal>                    </Appearance></p><p class=MsoNormal>                    <Box DEF='test-NMTOKEN_regex.0123456789' class='textured'/></p><p class=MsoNormal>                </Shape></p><p class=MsoNormal>            </Anchor></p><p class=MsoNormal>        </Transform></p><p class=MsoNormal>        <Shape DEF='LineShape'></p><p class=MsoNormal>            <Appearance></p><p class=MsoNormal>                <Material emissiveColor='0.6 0.19607843 0.8'/></p><p class=MsoNormal>            </Appearance></p><p class=MsoNormal>            <IndexedLineSet coordIndex='0 1 2 3 4 0'></p><p class=MsoNormal>                <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'/></p><p class=MsoNormal>            </IndexedLineSet></p><p class=MsoNormal>        </Shape></p><p class=MsoNormal>        <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'/></p><p class=MsoNormal>        <TimeSensor DEF='OrbitClock' cycleInterval='8.0' loop='true'/></p><p class=MsoNormal>        <ROUTE fromField='fraction_changed' fromNode='OrbitClock' toField='set_fraction' toNode='BoxPathAnimator'/></p><p class=MsoNormal>        <ROUTE fromField='value_changed' fromNode='BoxPathAnimator' toField='set_translation' toNode='LogoGeometryTransform'/></p><p class=MsoNormal>        <Transform DEF='TextTransform' translation='0 -1.5 0'></p><p class=MsoNormal>            <Shape></p><p class=MsoNormal>                <Appearance></p><p class=MsoNormal>                    <Material USE='GreenMaterial'/></p><p class=MsoNormal>                </Appearance></p><p class=MsoNormal>                <Text string='"X3D Java" "SAI Library" "X3DJSAIL"'></p><p class=MsoNormal>                    <MetadataSet name='EscapedQuotationMarksMetadataSet'></p><p class=MsoNormal>                        <MetadataString name='escapedQuotesTest2' value='"escaped quotation marks example 2: He said, &amp;quot;Immel did it!&amp;quot;"'/></p><p class=MsoNormal>                    </MetadataSet></p><p class=MsoNormal>                    <FontStyle family='"SERIF"' justify='"MIDDLE" "MIDDLE"'/></p><p class=MsoNormal>                    <!-- escaped quotation marks example 3: He said, "Immel did it!" --></p><p class=MsoNormal>                    <!-- escaped quotation marks example 4: He said, &quot;Immel did it!&quot; --></p><p class=MsoNormal>                </Text></p><p class=MsoNormal>            </Shape></p><p class=MsoNormal>            <Collision></p><p class=MsoNormal>                <!-- test containerField='proxy' --></p><p class=MsoNormal>                <Shape DEF='ProxyShape'></p><p class=MsoNormal>                    <Text string='"One, Two, Three" "" "He said, \"Immel did it!\""'/></p><p class=MsoNormal>                    <!-- alternative XML encoding: Text string='"One, Two, Three" "" "He said, \&quot;Immel did it!\&quot;"' --></p><p class=MsoNormal>                    <!-- alternative Java source: .setString(new String [] {"One, Two, Three", "", "He said, \"Immel did it!\""}) --></p><p class=MsoNormal>                    <!-- reference: http://www.web3d.org/x3d/content/examples/Basic/X3dSpecifications/StringArrayEncodingExamplesIndex.html --></p><p class=MsoNormal>                </Shape></p><p class=MsoNormal>            </Collision></p><p class=MsoNormal>            <!-- It's a beautiful world --></p><p class=MsoNormal>            <!-- ... for you! --></p><p class=MsoNormal>            <!-- https://en.wikipedia.org/wiki/Beautiful_World_(Devo_song) --></p><p class=MsoNormal>        </Transform></p><p class=MsoNormal>        <!-- repeatedly spin 180 degrees as a readable special effect --></p><p class=MsoNormal>        <OrientationInterpolator DEF='SpinInterpolator' key='0 0.5 1' keyValue='0 1 0 4.712389 0 1 0 0 0 1 0 1.5707964'/></p><p class=MsoNormal>        <TimeSensor DEF='SpinClock' cycleInterval='5.0' loop='true'/></p><p class=MsoNormal>        <ROUTE fromField='fraction_changed' fromNode='SpinClock' toField='set_fraction' toNode='SpinInterpolator'/></p><p class=MsoNormal>        <ROUTE fromField='value_changed' fromNode='SpinInterpolator' toField='rotation' toNode='TextTransform'/></p><p class=MsoNormal>        <Group DEF='BackgroundGroup'></p><p class=MsoNormal>            <Background DEF='GradualBackground'/></p><p class=MsoNormal>            <Script DEF='colorTypeConversionScript'></p><p class=MsoNormal>                <field name='colorInput' accessType='inputOnly' type='SFColor'/></p><p class=MsoNormal>                <field name='colorsOutput' accessType='outputOnly' type='MFColor'/></p><p class=MsoNormal><![CDATA[</p><p class=MsoNormal>ecmascript:</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>function colorInput (eventValue) // Example source code</p><p class=MsoNormal>{</p><p class=MsoNormal>   colorsOutput = new MFColor(eventValue); // assigning value sends output event</p><p class=MsoNormal>// Browser.print('colorInput=' + eventValue + ', colorsOutput=' + colorsOutput + '\n');</p><p class=MsoNormal>}</p><p class=MsoNormal>]]></p><p class=MsoNormal>            </Script></p><p class=MsoNormal>            <ColorInterpolator DEF='ColorAnimator' key='0 0.5 1' keyValue='0.9411765 1 1 0.29411766 0 0.50980395 0.9411765 1 1'></p><p class=MsoNormal>                <!-- AZURE to INDIGO and back again --></p><p class=MsoNormal>            </ColorInterpolator></p><p class=MsoNormal>            <TimeSensor DEF='ColorClock' cycleInterval='60.0' loop='true'/></p><p class=MsoNormal>            <ROUTE fromField='colorsOutput' fromNode='colorTypeConversionScript' toField='skyColor' toNode='GradualBackground'/></p><p class=MsoNormal>            <ROUTE fromField='value_changed' fromNode='ColorAnimator' toField='colorInput' toNode='colorTypeConversionScript'/></p><p class=MsoNormal>            <ROUTE fromField='fraction_changed' fromNode='ColorClock' toField='set_fraction' toNode='ColorAnimator'/></p><p class=MsoNormal>        </Group></p><p class=MsoNormal>        <ProtoDeclare name='ArtDeco01Material' appinfo='tooltip: ArtDeco01 prototype is a Material node'></p><p class=MsoNormal>            <ProtoInterface></p><p class=MsoNormal>                <field name='description' accessType='inputOutput' appinfo='tooltip for descriptionField' type='SFString' value='ArtDeco01 prototype is a Material node'/></p><p class=MsoNormal>                <field name='enabled' accessType='inputOutput' type='SFBool' value='true'/></p><p class=MsoNormal>            </ProtoInterface></p><p class=MsoNormal>            <ProtoBody></p><p class=MsoNormal>                <!-- Initial node of ProtoBody determines prototype node type --></p><p class=MsoNormal>                <Material ambientIntensity='0.25' diffuseColor='0.282435 0.085159 0.134462' shininess='0.127273' specularColor='0.276305 0.11431 0.139857'/></p><p class=MsoNormal>                <!-- [HelloWorldProgram diagnostic] should be connected to scene graph: ArtDeco01ProtoDeclare.getNodeType()="Material" --></p><p class=MsoNormal>                <!-- presence of follow-on TouchSensor shows that additional nodes are allowed in ProtoBody after initial node, regardless of node types --></p><p class=MsoNormal>                <TouchSensor description='within ProtoBody'></p><p class=MsoNormal>                    <IS></p><p class=MsoNormal>                        <connect nodeField='description' protoField='description'/></p><p class=MsoNormal>                        <connect nodeField='enabled' protoField='enabled'/></p><p class=MsoNormal>                    </IS></p><p class=MsoNormal>                </TouchSensor></p><p class=MsoNormal>            </ProtoBody></p><p class=MsoNormal>        </ProtoDeclare></p><p class=MsoNormal>        <ExternProtoDeclare name='ArtDeco02Material' appinfo='this is a different Material node' url='"http://X3dGraphics.com/examples/X3dForWebAuthors/Chapter14Prototypes/ArtDecoPrototypesExcerpt.x3d#ArtDeco02" "http://X3dGraphics.com/examples/X3dForWebAuthors/Chapter14Prototypes/ArtDecoPrototypesExcerpt.x3dv#ArtDeco02"'></p><p class=MsoNormal>            <field name='description' accessType='inputOutput' appinfo='tooltip for descriptionField' type='SFString'/></p><p class=MsoNormal>            <!-- [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." --></p><p class=MsoNormal>        </ExternProtoDeclare></p><p class=MsoNormal>        <!-- Tested ArtDeco01ProtoInstance, ArtDeco02ProtoInstance for improper node type when ProtoInstance is added in wrong place --></p><p class=MsoNormal>        <Shape DEF='TestShape1'></p><p class=MsoNormal>            <Appearance DEF='TestAppearance1'></p><p class=MsoNormal>                <ProtoInstance name='ArtDeco01'></p><p class=MsoNormal>                    <fieldValue name='description' value='ArtDeco01 can substitute for a Material node'/></p><p class=MsoNormal>                    <!-- [HelloWorldProgram diagnostic] ArtDeco01ProtoInstance.getNodeType()="ERROR_UNKNOWN_PROTOINSTANCE_NODE_TYPE: ProtoInstance name='ArtDeco01' has no corresponding ProtoDeclareObject or ExternProtoDeclareObject to provide type." --></p><p class=MsoNormal>                </ProtoInstance></p><p class=MsoNormal>                <!-- ArtDeco01 Material prototype goes here... --></p><p class=MsoNormal>            </Appearance></p><p class=MsoNormal>            <Sphere radius='0.001'/></p><p class=MsoNormal>        </Shape></p><p class=MsoNormal>        <Shape DEF='TestShape2'></p><p class=MsoNormal>            <Appearance DEF='TestAppearance2'></p><p class=MsoNormal>                <ProtoInstance name='ArtDeco02'></p><p class=MsoNormal>                    <fieldValue name='description' value='ArtDeco02 can substitute for another Material node'/></p><p class=MsoNormal>                    <!-- [HelloWorldProgram diagnostic] ArtDeco02ProtoInstance.getNodeType()="ERROR_UNKNOWN_PROTOINSTANCE_NODE_TYPE: ProtoInstance name='ArtDeco02' has no corresponding ProtoDeclareObject or ExternProtoDeclareObject to provide type." --></p><p class=MsoNormal>                </ProtoInstance></p><p class=MsoNormal>                <!-- ArtDeco02 Material prototype goes here... --></p><p class=MsoNormal>            </Appearance></p><p class=MsoNormal>            <Cone bottomRadius='0.001' height='0.001'/></p><p class=MsoNormal>        </Shape></p><p class=MsoNormal>        <Inline DEF='inlineSceneDef' url='"someOtherScene.x3d"'/></p><p class=MsoNormal>        <IMPORT AS='WorldInfoDEF2' importedDEF='WorldInfoDEF' inlineDEF='inlineSceneDef'/></p><p class=MsoNormal>        <EXPORT AS='WorldInfoDEF3' localDEF='WorldInfoDEF'/></p><p class=MsoNormal>        <ProtoDeclare name='MaterialModulator' appinfo='mimic a Material node and modulate fields as an animation effect' documentation='http://x3dgraphics.com/examples/X3dForWebAuthors/Chapter14Prototypes/MaterialModulatorIndex.html'></p><p class=MsoNormal>            <ProtoInterface></p><p class=MsoNormal>                <field name='enabled' accessType='inputOutput' type='SFBool' value='true'/></p><p class=MsoNormal>                <field name='diffuseColor' accessType='inputOutput' type='SFColor' value='0 0 0'/></p><p class=MsoNormal>                <field name='emissiveColor' accessType='inputOutput' type='SFColor' value='0.05 0.05 0.5'/></p><p class=MsoNormal>                <field name='specularColor' accessType='inputOutput' type='SFColor' value='0 0 0'/></p><p class=MsoNormal>                <field name='transparency' accessType='inputOutput' type='SFFloat' value='0.0'/></p><p class=MsoNormal>                <field name='shininess' accessType='inputOutput' type='SFFloat' value='0.0'/></p><p class=MsoNormal>                <field name='ambientIntensity' accessType='inputOutput' type='SFFloat' value='0.0'/></p><p class=MsoNormal>            </ProtoInterface></p><p class=MsoNormal>            <ProtoBody></p><p class=MsoNormal>                <Material DEF='MaterialNode'></p><p class=MsoNormal>                    <IS></p><p class=MsoNormal>                        <connect nodeField='diffuseColor' protoField='diffuseColor'/></p><p class=MsoNormal>                        <connect nodeField='emissiveColor' protoField='emissiveColor'/></p><p class=MsoNormal>                        <connect nodeField='specularColor' protoField='specularColor'/></p><p class=MsoNormal>                        <connect nodeField='transparency' protoField='transparency'/></p><p class=MsoNormal>                        <connect nodeField='shininess' protoField='shininess'/></p><p class=MsoNormal>                        <connect nodeField='ambientIntensity' protoField='ambientIntensity'/></p><p class=MsoNormal>                    </IS></p><p class=MsoNormal>                </Material></p><p class=MsoNormal>                <!-- Only first node (the node type) is renderable, others are along for the ride --></p><p class=MsoNormal>                <Script DEF='MaterialModulatorScript'></p><p class=MsoNormal>                    <field name='enabled' accessType='inputOutput' type='SFBool'/></p><p class=MsoNormal>                    <field name='diffuseColor' accessType='inputOutput' type='SFColor'/></p><p class=MsoNormal>                    <field name='newColor' accessType='outputOnly' type='SFColor'/></p><p class=MsoNormal>                    <field name='clockTrigger' accessType='inputOnly' type='SFTime'/></p><p class=MsoNormal>                    <IS></p><p class=MsoNormal>                        <connect nodeField='enabled' protoField='enabled'/></p><p class=MsoNormal>                        <connect nodeField='diffuseColor' protoField='diffuseColor'/></p><p class=MsoNormal>                    </IS></p><p class=MsoNormal><![CDATA[</p><p class=MsoNormal>ecmascript:</p><p class=MsoNormal>function initialize ()</p><p class=MsoNormal>{</p><p class=MsoNormal>    newColor = diffuseColor; // start with correct color</p><p class=MsoNormal>}</p><p class=MsoNormal>function set_enabled (newValue)</p><p class=MsoNormal>{</p><p class=MsoNormal>                enabled = newValue;</p><p class=MsoNormal>}</p><p class=MsoNormal>function clockTrigger (timeValue)</p><p class=MsoNormal>{</p><p class=MsoNormal>    if (!enabled) return;</p><p class=MsoNormal>    red   = newColor.r;</p><p class=MsoNormal>    green = newColor.g;</p><p class=MsoNormal>    blue  = newColor.b;</p><p class=MsoNormal>    </p><p class=MsoNormal>    // note different modulation rates for each color component, % is modulus operator</p><p class=MsoNormal>    newColor = new SFColor ((red + 0.02) % 1, (green + 0.03) % 1, (blue + 0.04) % 1);</p><p class=MsoNormal>                if (enabled)</p><p class=MsoNormal>                {</p><p class=MsoNormal>                                Browser.print ('diffuseColor=(' + red + ',' + green + ',' + blue + ') newColor=' + newColor.toString() + '\n');</p><p class=MsoNormal>                }</p><p class=MsoNormal>}</p><p class=MsoNormal>]]></p><p class=MsoNormal>                </Script></p><p class=MsoNormal>            </ProtoBody></p><p class=MsoNormal>        </ProtoDeclare></p><p class=MsoNormal>        <!-- Test success: declarative statement createDeclarativeShapeTests() --></p><p class=MsoNormal>        <Group DEF='DeclarativeGroupExample'></p><p class=MsoNormal>            <Shape></p><p class=MsoNormal>                <MetadataString DEF='FindableMetadataStringTest' name='findThisNameValue' value='"test case"'/></p><p class=MsoNormal>                <Appearance DEF='DeclarativeAppearanceExample'></p><p class=MsoNormal>                    <ProtoInstance DEF='MyMaterialModulator' name='MaterialModulator'/></p><p class=MsoNormal>                    <!-- DeclarativeMaterialExample gets overridden by subsequently added MaterialModulator ProtoInstance --></p><p class=MsoNormal>                </Appearance></p><p class=MsoNormal>                <Cone bottom='false' bottomRadius='0.05' height='0.1'/></p><p class=MsoNormal>            </Shape></p><p class=MsoNormal>            <!-- Test success: declarativeGroup.addChild() singleton pipeline method --></p><p class=MsoNormal>        </Group></p><p class=MsoNormal>        <!-- Test success: declarative statement addChild() --></p><p class=MsoNormal>        <!-- Test success: x3dModel.findNodeByDEF(DeclarativeAppearanceExample) = <Appearance DEF='DeclarativeAppearanceExample'/> i.e.</p><p class=MsoNormal><Appearance DEF='DeclarativeAppearanceExample'></p><p class=MsoNormal>    <ProtoInstance DEF='MyMaterialModulator' name='MaterialModulator' containerField='material'/></p><p class=MsoNormal>    <!- - DeclarativeMaterialExample gets overridden by subsequently added MaterialModulator ProtoInstance - -></p><p class=MsoNormal></Appearance> --></p><p class=MsoNormal>        <!-- Test success: x3dModel.findElementByNameValue(findThisNameValue) = <MetadataString DEF='FindableMetadataStringTest' name='findThisNameValue' value='"test case"'/> --></p><p class=MsoNormal>        <!-- Test success: x3dModel.findElementByNameValue("ArtDeco01Material", "ProtoDeclare") found --></p><p class=MsoNormal>        <!-- Test success: x3dModel.findElementByNameValue("MaterialModulator", "ProtoDeclare")  found --></p><p class=MsoNormal>        <!-- Test success: x3dModel.findElementByNameValue("MaterialModulator", "ProtoInstance") found --></p><p class=MsoNormal>        <Group DEF='TestFieldObjectsGroup'></p><p class=MsoNormal>            <!-- testFieldObjects() results --></p><p class=MsoNormal>            <!-- SFBool default=true, true=true, false=false, negate()=true --></p><p class=MsoNormal>            <!-- MFBool default=, initial=true false true, negate()=false true false --></p><p class=MsoNormal>            <!-- SFFloat default=0.0, initial=1.0, setValue(2)=2.0, setValue(3.0f)=3.0, setValue(4.0)=4.0 --></p><p class=MsoNormal>            <!-- 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 --></p><p class=MsoNormal>            <!-- ... 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= --></p><p class=MsoNormal>            <!-- 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 --></p><p class=MsoNormal>        </Group></p><p class=MsoNormal>        <Sound></p><p class=MsoNormal>            <AudioClip url='"chimes.wav" "http://www.web3d.org/x3d/content/examples/ConformanceNist/Sounds/AudioClip/chimes.wav"'/></p><p class=MsoNormal>            <!-- Scene example fragment from http://www.web3d.org/x3d/content/examples/ConformanceNist/Sounds/AudioClip/default.x3d --></p><p class=MsoNormal>        </Sound></p><p class=MsoNormal>        <Sound></p><p class=MsoNormal>            <MovieTexture containerField='source' url='"mpgsys.mpg" "http://www.web3d.org/x3d/content/examples/ConformanceNist/Appearance/MovieTexture/mpgsys.mpg"'/></p><p class=MsoNormal>            <!-- Scene example fragment from http://www.web3d.org/x3d/content/examples/ConformanceNist/Appearance/MovieTexture/mpeg1-systems.x3d --></p><p class=MsoNormal>            <!-- Expected containerField='source', allowed containerField values="texture" "source" "back" "bottom" "front" "left" "right" "top" "backTexture" "bottomTexture" "frontTexture" "leftTexture" "rightTexture" "topTexture" --></p><p class=MsoNormal>        </Sound></p><p class=MsoNormal>        <!-- Test success:  AnchorObject.isNode()=true,              siteAnchor.isNode()=true --></p><p class=MsoNormal>        <!-- Test success:  AnchorObject.isStatement()=false,        siteAnchor.isStatement()=false --></p><p class=MsoNormal>        <!-- Test success:   ROUTEObject.isNode()=false,     orbitPositionROUTE.isNode()=false --></p><p class=MsoNormal>        <!-- Test success:   ROUTEObject.isStatement()=true, orbitPositionROUTE.isStatement()=true --></p><p class=MsoNormal>        <!-- Test success: CommentsBlock.isNode()=false,           testComments.isNode()=false --></p><p class=MsoNormal>        <!-- Test success: CommentsBlock.isStatement()=false,      testComments.isStatement()=false --></p><p class=MsoNormal>        <Shape DEF='ExtrusionShape'></p><p class=MsoNormal>            <Appearance DEF='TransparentAppearance'></p><p class=MsoNormal>                <Material transparency='1.0'/></p><p class=MsoNormal>            </Appearance></p><p class=MsoNormal>            <Extrusion DEF='ExampleExtrusion'/></p><p class=MsoNormal>            <!-- ExampleExtrusion isCrossSectionClosed()=true, crossSection='[1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0]' --></p><p class=MsoNormal>            <!-- ExampleExtrusion isSpineClosed()=false, spine='[0.0, 0.0, 0.0, 0.0, 1.0, 0.0]' --></p><p class=MsoNormal>        </Shape></p><p class=MsoNormal>    </Scene></p><p class=MsoNormal></X3D></p></div></body></html>