<?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">
<!-- ENTITY, ELEMENT and ATTLIST definitions are listed in detail within the DOCTYPE declaration internal subset. -->
<!-- You must view full source of the DTD declarations (SpinGroupInternalSubsetDeclaration.x3d.txt) to fully understand this file. --> <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=' SpinGroupInternalSubsetDeclaration.x3d '/>
<meta name='creatorcontent='Don Brutzman'/>
<meta name='createdcontent='18 September 2000'/>
<meta name='modifiedcontent='20 October 2019'/>
<meta name='descriptioncontent='SpinGroup PROTO example content to test DTD modularization and extensibility - view XML source to see DTD internal-subset declarations.'/>
<meta name=' error content=' Test to demonstrate DOCTYPE extensibility, this X3D scene not valid and does not render. '/>
<meta name=' warning content=' You must view full source of the DTD declarations (SpinGroupInternalSubsetDeclaration.x3d.txt) to fully understand validation techniques in this file. '/>
<meta name='referencecontent=' SpinGroupInternalSubsetDeclaration.x3d.txt '/>
<meta name='identifiercontent=' https://www.web3d.org/x3d/content/examples/development/SpinGroupInternalSubsetDeclaration.x3d '/>
<meta name='generatorcontent=' X3D-Edit 3.1, https://www.web3d.org/x3d/content/README.X3D-Edit.html '/>
<meta name='licensecontent=' ../license.html'/>
</head>
<!-- -->
<Scene>
<!-- Declaring the SpinGroupTag PROTO, so that translations of internally defined SpinGroupTag to VRML can work: -->
<ProtoDeclare name='SpinGroupTag'>
<ProtoInterface>
<field name='translationtype='SFVec3fvalue='0 0 0accessType='inputOutput'/>
<field name='rotationtype='SFRotationvalue='0 0 1 0accessType='inputOutput'/>
<field name='centertype='SFVec3fvalue='0 0 0accessType='inputOutput'/>
<field name='cycleIntervaltype='SFTimevalue='1accessType='inputOutput'/>
<field name='childrentype='MFNodeaccessType='inputOutput'>
<WorldInfo info='"overridden at run time"'/>
</field>
</ProtoInterface>
<ProtoBody>
<!-- SpinGroupTransform is first node, which determines node type, and encloses children for instances. -->
<!-- ROUTE information for SpinGroupTransform-TagVersion node:  [from SpinGroupOrientationInterpolator-TagVersion.value_changed to set_rotation ] -->
<Transform DEF='SpinGroupTransform-TagVersionrotation='1 0 0 0'>
<IS>
<connect nodeField='translationprotoField='translation'/>
<connect nodeField='rotationprotoField='rotation'/>
<connect nodeField='centerprotoField='center'/>
<connect nodeField='childrenprotoField='children'/>
</IS>
<!-- ROUTE information for SpinGroupOrientationInterpolator-TagVersion node:  [from SpinGroupTimeSensor-TagVersion.fraction_changed to set_fraction ] [from value_changed to SpinGroupTransform-TagVersion.set_rotation ] -->
<OrientationInterpolator DEF='SpinGroupOrientationInterpolator-TagVersionkey='0.0 0.50 1.0keyValue='0 1 0 0.0 0 1 0 -3.14159 0 1 0 -6.28318'/>

<!-- ROUTE information for SpinGroupTimeSensor-TagVersion node:  [from fraction_changed to SpinGroupOrientationInterpolator-TagVersion.set_fraction ] -->
<TimeSensor DEF='SpinGroupTimeSensor-TagVersionloop='true'>
<IS>
<connect nodeField='cycleIntervalprotoField='cycleInterval'/>
</IS>
</TimeSensor>
< ROUTE  fromNode=' SpinGroupTimeSensor-TagVersion' fromField='fraction_changed' toNode=' SpinGroupOrientationInterpolator-TagVersion' toField='set_fraction'/>
< ROUTE  fromNode=' SpinGroupOrientationInterpolator-TagVersion' fromField='value_changed' toNode=' SpinGroupTransform-TagVersion' toField='set_rotation'/>
</Transform>
</ProtoBody>
</ProtoDeclare>
<ProtoDeclare name='SpinGroup'>
<ProtoInterface>
<field name='translationtype='SFVec3fvalue='0 0 0accessType='inputOutput'/>
<field name='rotationtype='SFRotationvalue='0 0 1 0accessType='inputOutput'/>
<field name='centertype='SFVec3fvalue='0 0 0accessType='inputOutput'/>
<field name='cycleIntervaltype='SFTimevalue='1accessType='inputOutput'/>
<field name='childrentype='MFNodeaccessType='inputOutput'>
<WorldInfo info='"overridden at run time"'/>
</field>
</ProtoInterface>
<ProtoBody>
<!-- SpinGroupTransform is first node, which determines node type, and encloses children for instances. -->
<!-- ROUTE information for SpinGroupTransform node:  [from SpinGroupOrientationInterpolator.value_changed to set_rotation ] -->
<Transform DEF='SpinGroupTransform'>
<IS>
<connect nodeField='translationprotoField='translation'/>
<connect nodeField='rotationprotoField='rotation'/>
<connect nodeField='centerprotoField='center'/>
<connect nodeField='childrenprotoField='children'/>
</IS>
<!-- ROUTE information for SpinGroupOrientationInterpolator node:  [from SpinGroupTimeSensor.fraction_changed to set_fraction ] [from value_changed to SpinGroupTransform.set_rotation ] -->
<OrientationInterpolator DEF='SpinGroupOrientationInterpolatorkey='0.0 0.50 1.0keyValue='0 1 0 0.0 0 1 0 -3.14159 0 1 0 -6.28318'/>

<!-- ROUTE information for SpinGroupTimeSensor node:  [from fraction_changed to SpinGroupOrientationInterpolator.set_fraction ] -->
<TimeSensor DEF='SpinGroupTimeSensorloop='true'>
<IS>
<connect nodeField='cycleIntervalprotoField='cycleInterval'/>
</IS>
</TimeSensor>
< ROUTE  fromNode=' SpinGroupTimeSensor' fromField='fraction_changed' toNode=' SpinGroupOrientationInterpolator' toField='set_fraction'/>
< ROUTE  fromNode=' SpinGroupOrientationInterpolator' fromField='value_changed' toNode=' SpinGroupTransform' toField='set_rotation'/>
</Transform>
</ProtoBody>
</ProtoDeclare>
<Viewpoint description='SpinGroup Examplesposition='0 0 15'/>
<NavigationInfo type='"EXAMINE"'/>
<!-- Instantiating the SpinGroupTag using a customized tag: -->
<SpinGroupTag DEF='instanceOnecenter='0 0 0cycleInterval='8nodeType='Grouprotation='0 0 1 0translation='0 4 0'>
<fieldValue name='children'>
<Shape>
<Appearance DEF='AQUAMARINE'>
<Material diffuseColor='0.1 0.8 0.8'/>
</Appearance>
<Text string='"SpinGroupTag example 1 single child"'>
<FontStyle DEF='CENTER_FONTjustify='"MIDDLE" "MIDDLE"style='BOLD'/>
</Text>
</Shape>
</fieldValue>
</SpinGroupTag>
<!-- Instantiating the SpinGroup PROTO using a ProtoInstance tag: -->
<ProtoInstance name='SpinGroupDEF='instanceTwo'>
<fieldValue name='translationvalue='0 1 0'/>
<fieldValue name='cycleIntervalvalue='12'/>
<fieldValue name='children'>
<Shape>
<Text string='"SpinGroup ProtoInstance example 2 single child"'>
<FontStyle USE=' CENTER_FONT'/>
</Text>
</Shape>
</fieldValue>
</ProtoInstance>
<!-- Instantiating the SpinGroup PROTO with multiple Node children: -->
<ProtoInstance name='SpinGroupDEF='instanceThree'>
<fieldValue name='translationvalue='0 -2 0'/>
<fieldValue name='cycleIntervalvalue='20'/>
<fieldValue name='children'>
<Shape>
<Appearance USE=' AQUAMARINE'/>
<Text string='"SpinGroup ProtoInstance" "example 3 first child"'>
<FontStyle USE=' CENTER_FONT'/>
</Text>
</Shape>
<Transform translation='0 -2 0'>
<Shape>
<Text string='"example 3 second child"'>
<FontStyle USE=' CENTER_FONT'/>
</Text>
</Shape>
</Transform>
</fieldValue>
</ProtoInstance>
</Scene>
</X3D>
<!--

to top <!-- Event Graph ROUTE Table shows event connections -->
 
<!-- Index for DEF nodes: AQUAMARINE, CENTER_FONT, instanceOne, instanceThree, instanceTwo, SpinGroupOrientationInterpolator, SpinGroupOrientationInterpolator-TagVersion, SpinGroupTimeSensor, SpinGroupTimeSensor-TagVersion, SpinGroupTransform, SpinGroupTransform-TagVersion

Index for Viewpoint node: Viewpoint_1

Index for ProtoDeclare definitions: SpinGroup, SpinGroupTag
-->

Event Graph ROUTE Table entries with 4 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.

SpinGroupTimeSensor
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(1)
SpinGroupOrientationInterpolator
OrientationInterpolator
set_fraction
SFFloat

 
 
then
SpinGroupOrientationInterpolator
OrientationInterpolator
value_changed
SFRotation

ROUTE
event to
(2)
SpinGroupTransform
Transform
set_rotation
SFRotation


SpinGroupTimeSensor-TagVersion
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(1)
SpinGroupOrientationInterpolator-TagVersion
OrientationInterpolator
set_fraction
SFFloat

 
 
then
SpinGroupOrientationInterpolator-TagVersion
OrientationInterpolator
value_changed
SFRotation

ROUTE
event to
(2)
SpinGroupTransform-TagVersion
Transform
set_rotation
SFRotation


instanceThree
ProtoInstance
SpinGroup
No ROUTE connection found for output from this node.
Contains SFNode/MFNode field with indirect access to other nodes. 


instanceTwo
ProtoInstance
SpinGroup
No ROUTE connection found for output from this node.
Contains SFNode/MFNode field with indirect access to other nodes. 


-->

<!-- Online at
https://www.web3d.org/x3d/content/examples/development/SpinGroupInternalSubsetDeclarationIndex.html -->
<!-- Version control at
https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/content/examples/development/SpinGroupInternalSubsetDeclaration.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. -->