<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.0//EN" "https://www.web3d.org/specifications/x3d-3.0.dtd">
<X3D profile='Immersive'  version='3.0 xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation =' https://www.web3d.org/specifications/x3d-3.0.xsd ' >
<head>
<meta name='titlecontent=' SceneNodePrototype.x3d '/>
<meta name='creatorcontent='Don Brutzman'/>
<meta name='createdcontent='19 December 2000'/>
<meta name='modifiedcontent='20 October 2019'/>
<meta name='descriptioncontent='Expose functionality of Browser class in Java/ECMAscript annexes of VRML 97 specification. Consider promotion to a native node in X3D/VRML 200x scenes.'/>
<meta name=' warning content=' Under development, many of these exposed attributes will be eliminated. Scene node will not be used in X3D proper, but may become a valuable prototype via SAI scripting. '/>
<meta name='identifiercontent=' https://www.web3d.org/x3d/content/examples/Basic/development/SceneNodePrototype.x3d '/>
<meta name='generatorcontent='X3D-Edit 3.3, https://savage.nps.edu/X3D-Edit'/>
<meta name='licensecontent=' ../license.html'/>
</head>
<!--

to top <!-- Event Graph ROUTE Table shows event connections -->
 
<!-- Index for DEF nodes: AssembleBrowserOutputText, BrowserScript, ClickTextSensor, Output3dText, SceneNode

Index for ProtoDeclare definition: Scene
-->
<Scene>
<WorldInfo title='SceneNodePrototype.x3d'/>
<ProtoDeclare name='Scene'>
<ProtoInterface>
<!-- Standard browser attributes exposed via VRML 97 Script annexes -->
<field name='createVrmlFromStringtype='SFStringaccessType='inputOnly'/>
<field name='createVrmlFromURLtype='SFStringaccessType='inputOnly'/>
<field name='createdVrmlNodestype='MFNodeaccessType='outputOnly'/>
<field name='currentFrameRatetype='SFFloataccessType='outputOnly'/>
<field name='currentSpeedtype='SFFloataccessType='outputOnly'/>
<field name='descriptiontype='SFStringaccessType='inputOnly'/>
<field name='evaluatetype='SFBoolaccessType='inputOnly'/>
<field name='loadUrltype='SFStringaccessType='inputOnly'/>
<field name='loadUrlParametertype='SFStringaccessType='inputOnly'/>
<field name='nametype='SFStringaccessType='outputOnly'/>
<field name='replaceWorldtype='MFNodeaccessType='inputOnly'/>
<field name='versiontype='SFStringaccessType='outputOnly'/>
<field name='worldUrltype='SFStringaccessType='outputOnly'/>
<field name='addRoutetype='SFBoolaccessType='inputOnly'/>
<field name='deleteRoutetype='SFBoolaccessType='inputOnly'/>
<field name='fromNodetype='SFNodeaccessType='inputOnly'/>
<field name='fromEventOuttype='SFStringaccessType='inputOnly'/>
<field name='toNodetype='SFNodeaccessType='inputOnly'/>
<field name='toEventIntype='SFStringaccessType='inputOnly'/>
<!-- Candidate additions -->
<field name='boundBackgroundtype='SFNodeaccessType='outputOnly'/>
<field name='boundFogtype='SFNodeaccessType='outputOnly'/>
<field name='boundGeoViewpointtype='SFNodeaccessType='outputOnly'/>
<field name='boundNavigationInfotype='SFNodeaccessType='outputOnly'/>
<field name='boundViewpointtype='SFNodeaccessType='outputOnly'/>
<field name='responsetype='MFStringaccessType='outputOnly'/>
<field name='dashboardVisibletype='SFBoolvalue='trueaccessType='inputOutput'/>
<field name='pixelWidthtype='SFInt32value='-1accessType='inputOutput'/>
<field name='pixelHeighttype='SFInt32value='-1accessType='inputOutput'/>
</ProtoInterface>
<ProtoBody>
<Script DEF='BrowserScriptdirectOutput='true'>
<field name='createVrmlFromStringtype='SFStringaccessType='inputOnly'/>
<field name='createVrmlFromURLtype='SFStringaccessType='inputOnly'/>
<field name='createdVrmlNodestype='MFNodeaccessType='outputOnly'/>
<field name='currentFrameRatetype='SFFloataccessType='outputOnly'/>
<field name='currentSpeedtype='SFFloataccessType='outputOnly'/>
<field name='descriptiontype='SFStringaccessType='inputOnly'/>
<field name='evaluatetype='SFBoolaccessType='inputOnly'/>
<field name='loadUrltype='SFStringaccessType='inputOnly'/>
<field name='loadUrlParametertype='SFStringaccessType='inputOnly'/>
<field name='nametype='SFStringaccessType='outputOnly'/>
<field name='replaceWorldtype='MFNodeaccessType='inputOnly'/>
<field name='versiontype='SFStringaccessType='outputOnly'/>
<field name='worldUrltype='SFStringaccessType='outputOnly'/>
<field name='addRoutetype='SFBoolaccessType='inputOnly'/>
<field name='deleteRoutetype='SFBoolaccessType='inputOnly'/>
<field name='fromNodetype='SFNodeaccessType='inputOnly'/>
<field name='fromEventOuttype='SFStringaccessType='inputOnly'/>
<field name='toNodetype='SFNodeaccessType='inputOnly'/>
<field name='toEventIntype='SFStringaccessType='inputOnly'/>
<field name='responsetype='MFStringaccessType='outputOnly'/>
<IS>
<connect nodeField='createVrmlFromStringprotoField='createVrmlFromString'/>
<connect nodeField='createVrmlFromURLprotoField='createVrmlFromURL'/>
<connect nodeField='createdVrmlNodesprotoField='createdVrmlNodes'/>
<connect nodeField='currentFrameRateprotoField='currentFrameRate'/>
<connect nodeField='currentSpeedprotoField='currentSpeed'/>
<connect nodeField='descriptionprotoField='description'/>
<connect nodeField='evaluateprotoField='evaluate'/>
<connect nodeField='loadUrlprotoField='loadUrl'/>
<connect nodeField='loadUrlParameterprotoField='loadUrlParameter'/>
<connect nodeField='nameprotoField='name'/>
<connect nodeField='replaceWorldprotoField='replaceWorld'/>
<connect nodeField='versionprotoField='version'/>
<connect nodeField='worldUrlprotoField='worldUrl'/>
<connect nodeField='addRouteprotoField='addRoute'/>
<connect nodeField='deleteRouteprotoField='deleteRoute'/>
<connect nodeField='fromNodeprotoField='fromNode'/>
<connect nodeField='fromEventOutprotoField='fromEventOut'/>
<connect nodeField='toNodeprotoField='toNode'/>
<connect nodeField='toEventInprotoField='toEventIn'/>
<connect nodeField='responseprotoField='response'/>
</IS>
<![CDATA[
          
ecmascript:

function evaluate (inputValue, timeStamp)
{
	if (inputValue)  // Boolean
	{
		currentFrameRate = Browser.getCurrentFrameRate ();
		currentSpeed = Browser.getCurrentSpeed ();
		version = Browser.getVersion ();
		name = Browser.getName ();
		worldUrl = Browser.getWorldURL ();

		Browser.println ('currentFrameRate = ' + currentFrameRate);
		Browser.println ('currentSpeed = ' + currentSpeed);
		Browser.println ('version = ' + version);
		Browser.println ('name = ' + name);
		Browser.println ('worldUrl = ' + worldUrl);
	}
}

function createVrmlFromString (inputValue, timeStamp)
{
	// note VRML 97 method name didn't follow capitalization convention
	createdVrmlNodes = Browser.createVrmlFromString (inputValue);
}

function createVrmlFromUrl (inputValue, timeStamp)
{
	// note VRML 97 method name didn't follow capitalization convention
	createdVrmlNodes = Browser.createVrmlFromURL (inputValue);
}

function description (inputValue, timeStamp)
{
	Browser.println ('description = ' + inputValue);
	Browser.setDescription (inputValue);
}

function replaceWorld (inputValue, timeStamp)
{
	Browser.replaceWorld (inputValue);
}

function addRoute (inputValue, timeStamp)
{
	if (inputValue)  // Boolean
	{
		Browser.addRoute (fromNode, fromEventOut, toNode, toEventIn);
	}
}

function deleteRoute (inputValue, timeStamp)
{
	if (inputValue)  // Boolean
	{
		Browser.deleteRoute (fromNode, fromEventOut, toNode, toEventIn);
	}
}

function loadURL (inputValue, timeStamp)
{
	Browser.println ('loadURL = ' + inputValue);
	Browser.println ('loadUrlParameter = ' + loadUrlParameter);
	Browser.loadURL (inputValue, loadUrlParameter);
}
function createVrmlFromURL (SFStringValue, timestamp)
{

}

function loadUrl (SFStringValue, timestamp)
{

}

function loadUrlParameter (SFStringValue, timestamp)
{

}

function fromNode (SFNodeValue, timestamp)
{

}

function fromEventOut (SFStringValue, timestamp)
{

}

function toNode (SFNodeValue, timestamp)
{

}

function toEventIn (SFStringValue, timestamp)
{

}

        
]]>
</Script>
</ProtoBody>
</ProtoDeclare>
<!-- Example invocation -->

<Shape>
<!-- ROUTE information for Output3dText node:  [from AssembleBrowserOutputText.evaluatedResult to string ] -->
<Text DEF='Output3dTextstring='"Click text for partial Scene node test"'>
<FontStyle justify='"MIDDLE" "MIDDLE"size='0.5'/>
</Text>
<Appearance>
<Material diffuseColor='0 0.6 0.6'/>
</Appearance>
</Shape>
<!-- ROUTE information for ClickTextSensor node:  [from isActive to SceneNode.evaluate ] -->
<TouchSensor DEF='ClickTextSensordescription='Click text for partial Scene node test'/>

<field name='currentFrameRatetype='SFFloataccessType='inputOnly'/>
<field name='currentSpeedtype='SFFloataccessType='inputOnly'/>
<field name='nametype='SFStringaccessType='inputOnly'/>
<field name='versiontype='SFStringaccessType='inputOnly'/>
<field name='worldUrltype='SFStringaccessType='inputOnly'/>
<field name='evaluatedResulttype='MFStringaccessType='outputOnly'/>
<![CDATA[
      
ecmascript:

function initialize ()
{
	evaluatedResult = new MFString (
		'Click for partial Scene node test:',
		' ', ' ', ' ', ' ', ' ', ' ', ' ');
}
function currentFrameRate (inputValue, timeStamp)
{
	evaluatedResult [2] = 'currentFrameRate=' + inputValue;
}
function currentSpeed (inputValue, timeStamp)
{
	evaluatedResult [3] = 'currentSpeed=' + inputValue;
}
function version (inputValue, timeStamp)
{
	evaluatedResult [4] = 'version=' + inputValue;
}
function name (inputValue, timeStamp)
{
	evaluatedResult [5] = 'name=' + inputValue;
}
function worldUrl (inputValue, timeStamp)
{
	evaluatedResult [6] = 'worldUrl=';
	evaluatedResult [7] = inputValue;
}

    
]]>
</Script>
< ROUTE  fromNode=' ClickTextSensor' fromField='isActive' toNode=' SceneNode' toField='evaluate'/>
< ROUTE  fromNode=' SceneNode' fromField='currentFrameRate' toNode=' AssembleBrowserOutputText' toField='currentFrameRate'/>
< ROUTE  fromNode=' SceneNode' fromField='currentSpeed' toNode=' AssembleBrowserOutputText' toField='currentSpeed'/>
< ROUTE  fromNode=' SceneNode' fromField='version' toNode=' AssembleBrowserOutputText' toField='version'/>
< ROUTE  fromNode=' SceneNode' fromField='name' toNode=' AssembleBrowserOutputText' toField='name'/>
< ROUTE  fromNode=' SceneNode' fromField='worldUrl' toNode=' AssembleBrowserOutputText' toField='worldUrl'/>
< ROUTE  fromNode=' AssembleBrowserOutputText' fromField='evaluatedResult' toNode=' Output3dText' toField='string'/>
</Scene>
</X3D>
<!--

to top <!-- Event Graph ROUTE Table shows event connections -->
 
<!-- Index for DEF nodes: AssembleBrowserOutputText, BrowserScript, ClickTextSensor, Output3dText, SceneNode

Index for ProtoDeclare definition: Scene
-->

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

Each row shows an event cascade that may occur during a single timestamp interval between frame renderings, as part of the X3D execution model.

ClickTextSensor
TouchSensor
isActive
SFBool

ROUTE
event to
(1)
SceneNode
ProtoInstance
evaluate
SFBool

 
 
then
SceneNode
ProtoInstance
currentFrameRate
SFFloat

ROUTE
event to
(2)
AssembleBrowserOutputText
Script
currentFrameRate
SFFloat

 
 
then
AssembleBrowserOutputText
Script
evaluatedResult
MFString

ROUTE
event to
(3)
Output3dText
Text
string
MFString
 
 
 
then
SceneNode
ProtoInstance
currentSpeed
SFFloat

ROUTE
event to
(2)
AssembleBrowserOutputText
Script
currentSpeed
SFFloat

 
 
then
AssembleBrowserOutputText
Script
evaluatedResult
MFString

ROUTE
event to
(3)
Output3dText
Text
string
MFString
 
 
 
then
SceneNode
ProtoInstance
name
SFString

ROUTE
event to
(2)
AssembleBrowserOutputText
Script
name
SFString

 
 
then
AssembleBrowserOutputText
Script
evaluatedResult
MFString

ROUTE
event to
(3)
Output3dText
Text
string
MFString
 
 
 
then
SceneNode
ProtoInstance
version
SFString

ROUTE
event to
(2)
AssembleBrowserOutputText
Script
version
SFString

 
 
then
AssembleBrowserOutputText
Script
evaluatedResult
MFString

ROUTE
event to
(3)
Output3dText
Text
string
MFString
 
 
 
then
SceneNode
ProtoInstance
worldUrl
SFString

ROUTE
event to
(2)
AssembleBrowserOutputText
Script
worldUrl
SFString

 
 
then
AssembleBrowserOutputText
Script
evaluatedResult
MFString

ROUTE
event to
(3)
Output3dText
Text
string
MFString


      AssembleBrowserOutputText
Script
evaluatedResult
MFString

ROUTE
event to
(1)
Output3dText
Text
string
MFString


      SceneNode
ProtoInstance
currentFrameRate
SFFloat

ROUTE
event to
(1)
AssembleBrowserOutputText
Script
currentFrameRate
SFFloat

 
 
then
AssembleBrowserOutputText
Script
evaluatedResult
MFString

ROUTE
event to
(2)
Output3dText
Text
string
MFString
SceneNode
ProtoInstance
currentSpeed
SFFloat

ROUTE
event to
(1)
AssembleBrowserOutputText
Script
currentSpeed
SFFloat

 
 
then
AssembleBrowserOutputText
Script
evaluatedResult
MFString

ROUTE
event to
(2)
Output3dText
Text
string
MFString
SceneNode
ProtoInstance
version
SFString

ROUTE
event to
(1)
AssembleBrowserOutputText
Script
version
SFString

 
 
then
AssembleBrowserOutputText
Script
evaluatedResult
MFString

ROUTE
event to
(2)
Output3dText
Text
string
MFString
SceneNode
ProtoInstance
name
SFString

ROUTE
event to
(1)
AssembleBrowserOutputText
Script
name
SFString

 
 
then
AssembleBrowserOutputText
Script
evaluatedResult
MFString

ROUTE
event to
(2)
Output3dText
Text
string
MFString
SceneNode
ProtoInstance
worldUrl
SFString

ROUTE
event to
(1)
AssembleBrowserOutputText
Script
worldUrl
SFString

 
 
then
AssembleBrowserOutputText
Script
evaluatedResult
MFString

ROUTE
event to
(2)
Output3dText
Text
string
MFString


-->

<!-- Online at
https://www.web3d.org/x3d/content/examples/Basic/development/SceneNodePrototypeIndex.html -->
<!-- Version control at
https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/content/examples/Basic/development/SceneNodePrototype.x3d -->

<!-- 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'> <field name='fieldName'/> </ProtoInstance> -->

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