X3D Model Documentation: PropellerControlPanel.x3d

  1  <?xml version="1.0" encoding="UTF-8"?>
  2 
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.0//EN" "https://www.web3d.org/specifications/x3d-3.0.dtd">
  3  <X3D profile='Immersive' version='3.0 xmlns:xsd='https://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation='https://www.web3d.org/specifications/x3d-3.0.xsd'>
  4       <head>
  5            <meta name='titlecontent=' PropellerControlPanel.x3d '/>
  6            <meta name='descriptioncontent='Controller buttons and slider for a propeller.'/>
  7            <meta name='creatorcontent='Dan DeVos'/>
  8            <meta name='translatorcontent='*if manually translating VRML-to-X3D, enter name of person translating here*'/>
  9            <meta name='createdcontent='8 August 2002'/>
 10            <meta name='modifiedcontent='11 August 2024'/>
 11            <meta name=' warning content=' mismatched typing in some ROUTEs still needs fixing '/>
 12            <meta name='identifiercontent=' https://www.web3d.org/x3d/content/examples/Basic/StudentProjects/PropellerControlPanel.x3d '/>
 13            <meta name='generatorcontent='X3D-Edit 3.3, https://www.web3d.org/x3d/tools/X3D-Edit'/>
 14            <meta name='licensecontent='../license.html'/>
 15       </head>
<!--

Event Graph ROUTE Table shows event connections.

--> <!-- to top DEF nodes index: BlackText, ControlPanel, DarkBlueGreyMetal, Display, DisplayField, Fan, FanBlade, FanClock, FanHub, FanHubMiddle, FanHubTop, FanPath, GreenStatus, GtoRColorInerp, LeftFanBlade, LightGreyMetal, MaterialGroup, MotorAmp, MotorButtonActionOff, MotorButtonActionOn, MotorClockOff, MotorClockOn, MotorDisplayMaterial, MotorHousingGroup, MotorStatus, OffButton, OffButtonDownPath, OffButtonUpPath, OnButton, OnButtonDownPath, OnButtonUpPath, RedStatus, RemoteControl, RightFanBlade, RotatingFanGroup, RtoGColorInerp, SensorOffButton, SensorOnButton, SpeedDisplay, StatusDisplay, SwitchBack, SwitchGroup, SwitchNob, SwitchPlaneSensor, SwitchTouchSensor, SwitchTransform

Index for Viewpoint nodes: Viewpoint_1, Viewpoint_2, Viewpoint_3, Viewpoint_4

-->
 16       <Scene>
 17            <WorldInfo title='PropellerControlPanel.x3d'/>
 18            <Viewpoint description='Fanposition='1 0 10'/>
 19            <Viewpoint description='Control Panelposition='-1 0 5'/>
 20            <Viewpoint description='Watch Fan Spinorientation='0 1 0 1.571position='10 0 0'/>
 21            <Viewpoint description='Remote Controlorientation='1 0 0 -1.571position='0 3 20'/>
 22            <Background groundColor='.3 .6 .4skyColor='.6 .6 .9'/>
 23            <!-- Rotating Fan -->
 24            <Group DEF='MaterialGroup'>
 25                 <Shape>
 26                      <Sphere radius='.001'/>
 27 
                    <!-- Appearance DarkBlueGreyMetal is a DEF node that has 5 USE nodes: USE_1, USE_2, USE_3, USE_4, USE_5 -->
                    <Appearance DEF='DarkBlueGreyMetal'>
 28                           <Material diffuseColor='0.4 0.4 0.4specularColor='0.4 0.4 0.6'/>
 29                      </Appearance>
 30                 </Shape>
 31                 <Shape>
 32                      <Sphere radius='.001'/>
 33 
                    <!-- Appearance LightGreyMetal is a DEF node that has 2 USE nodes: USE_1, USE_2 -->
                    <Appearance DEF='LightGreyMetal'>
 34                           <Material diffuseColor='0.7 0.7 0.7shininess='0.1specularColor='0.9 0.9 0.9'/>
 35                      </Appearance>
 36                 </Shape>
 37            </Group>
 38            <Transform rotation='0 0 -1 1.571translation='2 0 0'>
 39                 <Group DEF='RotatingFanGroup'>
 40 
                    <!-- ROUTE information for Fan node:  [from FanPath.value_changed to set_rotation ] -->
                    <Transform DEF='Fan'>
 41                           <Transform DEF='FanHub'>
 42                                <Shape DEF='FanHubMiddle'>
 43                                     <Appearance USE='DarkBlueGreyMetal'/>
 44                                     <Cylinder height='.4radius='.25'/>
 45                                </Shape>
 46                                <Transform translation='0 .2 0'>
 47                                     <Shape DEF='FanHubTop'>
 48                                          <Sphere radius='.255'/>
 49                                          <Appearance USE='DarkBlueGreyMetal'/>
 50                                     </Shape>
 51                                </Transform>
 52                           </Transform>
 53                           <Transform DEF='RightFanBladerotation='1 0 0 -.2scale='2 .1 .5translation='1.8 0 0'>
 54 
                              <!-- Shape FanBlade is a DEF node that has 1 USE node: USE_1 -->
                              <Shape DEF='FanBlade'>
 55                                     <Sphere/>
 56                                     <Appearance USE='LightGreyMetal'/>
 57                                </Shape>
 58                           </Transform>
 59                           <Transform DEF='LeftFanBladerotation='1 0 0 .2scale='2 .1 .5translation='-1.8 0 0'>
 60                                <Shape USE='FanBlade'/>
 61                           </Transform>
 62                      </Transform>
 63 
                    <!-- ROUTE information for FanClock node:  [from MotorAmp.fanCycleTime to set_cycleInterval ] [from MotorButtonActionOn.fanOnButtonAction to set_cycleInterval ] [from fraction_changed to FanPath.set_fraction ] -->
                    <TimeSensor DEF='FanClockstartTime='10stopTime='0.1cycleInterval='1.0enabled='trueloop='false'/>
 64 
                    <!-- ROUTE information for FanPath node:  [from FanClock.fraction_changed to set_fraction ] [from value_changed to Fan.set_rotation ] -->
                    <OrientationInterpolator DEF='FanPathkey='0.0 0.50 1.0keyValue='0.0 1.0 0.0 0.0 0.0 1.0 0.0 3.14 0.0 1.0 0.0 6.28'/>
 65                 </Group>
 66            </Transform>
 67            <!-- This is where the motor goes. -->
 68            <Transform>
 69                 <Group DEF='MotorHousingGroup'>
 70                      <Transform>
 71                           <Shape>
 72                                <Box size='3.65 3.65 3.65'/>
 73                                <Appearance>
 74                                     <Material/>
 75                                </Appearance>
 76                           </Shape>
 77                      </Transform>
 78                 </Group>
 79            </Transform>
 80            <!-- -->
 81 
          <!-- Group ControlPanel is a DEF node that has 1 USE node: USE_1 -->
          <Group DEF='ControlPanel'>
 82                 <!-- This switch is used to control the fan -->
 83                 <Transform scale='.2 .2 .2translation='-1 -.3 1.825'>
 84                      <Group DEF='SwitchGroup'>
 85                           <Transform rotation='0 0 1 1.571'>
 86                                <Transform rotation='1 0 0 1.571'>
 87                                     <Shape>
 88                                          <Appearance USE='DarkBlueGreyMetal'/>
 89                                          <Extrusion crossSection='0 1.2 0 1.0 -2 1.0 -2 -1.0 2 -1.0 2 1.0 0 1.0 0 1.2 2.2 1.2 2.2 -1.2 -2.2 -1.2 -2.2 1.2 0 1.2spine='0 0 0 0 .5 0'/>
 90                                     </Shape>
 91                                </Transform>
 92                           </Transform>
 93                           <Transform translation='0 -1.5 .251'>
 94 
                              <!-- ROUTE information for SwitchTransform node:  [from SwitchPlaneSensor.translation_changed to set_translation ] -->
                              <Transform DEF='SwitchTransform'>
 95                                     <Shape DEF='SwitchNob'>
 96                                          <Box size='2 1 .499'/>
 97                                          <Appearance USE='LightGreyMetal'/>
 98                                     </Shape>
 99 
                                   <!-- ROUTE information for SwitchPlaneSensor node:  [from translation_changed to SwitchTransform.set_translation ] [from translation_changed to MotorAmp.switchPosition ] -->
                                   <PlaneSensor DEF='SwitchPlaneSensormaxPosition='0 3'/>
100 
                                   <!-- ROUTE information for SwitchTouchSensor node:  [no output ROUTE found] -->
                                   <TouchSensor DEF='SwitchTouchSensor'/>
101                                </Transform>
102                           </Transform>
103                           <Transform translation='0 0 .1'>
104                                <Shape DEF='SwitchBack'>
105                                     <Box size='2 4 .2'/>
106                                     <Appearance USE='DarkBlueGreyMetal'/>
107                                </Shape>
108                           </Transform>
109                      </Group>
110                 </Transform>
111                 <!-- Fan Status Display -->
112                 <Transform translation='.5 -.5 1.83'>
113                      <Group DEF='Display'>
114                           <Transform translation='0 0 .01'>
115                                <Shape>
116 
                                   <!-- ROUTE information for SpeedDisplay node:  [from MotorAmp.displayFanSpeed to set_string ] -->
                                   <Text DEF='SpeedDisplaystring='"OFF"'>
117                                          <FontStyle justify='"MIDDLE" "MIDDLE"size='0.5'/>
118                                     </Text>
119 
                                   <!-- Appearance BlackText is a DEF node that has 2 USE nodes: USE_1, USE_2 -->
                                   <Appearance DEF='BlackText'>
120                                          <Material diffuseColor='0 0 0'/>
121                                     </Appearance>
122                                </Shape>
123                           </Transform>
124 
                         <!-- Shape DisplayField is a DEF node that has 1 USE node: USE_1 -->
                         <Shape DEF='DisplayField'>
125                                <Appearance>
126                                     <Material emissiveColor='0 1 1transparency='.7'/>
127                                </Appearance>
128                                <Box size='2 .6 .01'/>
129                           </Shape>
130                           <Transform translation='0 .5 .01'>
131                                <Shape>
132                                     <Text string='"Fan Status:"'>
133                                          <FontStyle justify='"MIDDLE" "MIDDLE"size='0.5'/>
134                                     </Text>
135                                     <Appearance USE='BlackText'/>
136                                </Shape>
137                           </Transform>
138                      </Group>
139                 </Transform>
140 
               <!-- ROUTE information for MotorAmp node:  [from SwitchPlaneSensor.translation_changed to switchPosition ] [from fanCycleTime to FanClock.set_cycleInterval ] [from displayFanSpeed to SpeedDisplay.set_string ] -->
               <Script DEF='MotorAmp'>
141                      <field name='switchPositiontype='SFVec3faccessType='inputOnly'/>
142                      <field name='fanCycleTimetype='SFTimeaccessType='outputOnly'/>
143                      <field name='displayFanSpeedtype='MFStringaccessType='outputOnly'/>
  <![CDATA[
        
ecmascript:

function switchPosition(pos)
{
	if (switchPosition.pos.y == 0){
		fanCycleTime = switchPosition.pos.y;
		displayFanSpeed[0] ='OFF';
	}
	else{if (switchPosition.pos.y == 3){
		fanCycleTime = .01;
		displayFanSpeed[0] ='MAX';
	}
	else {
		fanCycleTime = (6 - (switchPosition.pos.y*2));
		displayFanSpeed[0] = (Math.round((1/fanCycleTime)*6000)/100) + ' RPM';
	}}
}

      
]]>
145                 </Script>
146                 <!-- Motor On/Off Buttons -->
147                 <Transform translation='-1 1 1.6'>
148                      <Transform rotation='1 0 0 1.571'>
149 
                         <!-- ROUTE information for OffButton node:  [from OffButtonDownPath.value_changed to set_translation ] [from OffButtonUpPath.value_changed to set_translation ] -->
                         <Transform DEF='OffButtontranslation='0 .1 .3'>
150                                <Group>
151                                     <Shape>
152                                          <Cylinder height='.45radius='.2'/>
153                                          <Appearance DEF='RedStatus'>
154                                               <Material diffuseColor='1 0.3 0.3'/>
155                                          </Appearance>
156                                     </Shape>
157 
                                   <!-- ROUTE information for SensorOffButton node:  [from touchTime to MotorClockOff.set_startTime ] [from isActive to MotorButtonActionOff.offButtonAction ] -->
                                   <TouchSensor DEF='SensorOffButton'/>
158 
                                   <!-- ROUTE information for OffButtonDownPath node:  [from MotorClockOff.fraction_changed to set_fraction ] [from value_changed to OffButton.set_translation ] -->
                                   <PositionInterpolator DEF='OffButtonDownPathkey='0.0 0.50 1.0keyValue='0.0 0.3 0.3 0.0 0.2 0.3 0.0 0.1 0.3'/>
159 
                                   <!-- ROUTE information for OffButtonUpPath node:  [from MotorClockOn.fraction_changed to set_fraction ] [from value_changed to OffButton.set_translation ] -->
                                   <PositionInterpolator DEF='OffButtonUpPathkey='0.0 0.50 1.0keyValue='0.0 0.1 0.3 0.0 0.2 0.3 0.0 0.3 0.3'/>
160                                </Group>
161                           </Transform>
162 
                         <!-- ROUTE information for OnButton node:  [from OnButtonDownPath.value_changed to set_translation ] [from OnButtonUpPath.value_changed to set_translation ] -->
                         <Transform DEF='OnButtontranslation='0 .3 -.3'>
163                                <Group>
164                                     <Shape>
165                                          <Cylinder height='.45radius='.2'/>
166                                          <Appearance DEF='GreenStatus'>
167                                               <Material diffuseColor='0.3 1 .3'/>
168                                          </Appearance>
169                                     </Shape>
170 
                                   <!-- ROUTE information for SensorOnButton node:  [from touchTime to MotorClockOn.set_startTime ] [from isActive to MotorButtonActionOn.onButtonAction ] -->
                                   <TouchSensor DEF='SensorOnButton'/>
171 
                                   <!-- ROUTE information for OnButtonDownPath node:  [from MotorClockOn.fraction_changed to set_fraction ] [from value_changed to OnButton.set_translation ] -->
                                   <PositionInterpolator DEF='OnButtonDownPathkey='0.0 0.50 1.0keyValue='0.0 0.3 -0.3 0.0 0.2 -0.3 0.0 0.1 -0.3'/>
172 
                                   <!-- ROUTE information for OnButtonUpPath node:  [from MotorClockOff.fraction_changed to set_fraction ] [from value_changed to OnButton.set_translation ] -->
                                   <PositionInterpolator DEF='OnButtonUpPathkey='0.0 0.50 1.0keyValue='0.0 0.1 -0.3 0.0 0.2 -0.3 0.0 0.3 -0.3'/>
173                                </Group>
174                           </Transform>
175 
                         <!-- ROUTE information for MotorClockOff node:  [from SensorOffButton.touchTime to set_startTime ] [from fraction_changed to OffButtonDownPath.set_fraction ] [from fraction_changed to OnButtonUpPath.set_fraction ] [from fraction_changed to GtoRColorInerp.set_fraction ] -->
                         <TimeSensor DEF='MotorClockOffcycleInterval='1.0enabled='trueloop='false'/>
176 
                         <!-- ROUTE information for MotorClockOn node:  [from SensorOnButton.touchTime to set_startTime ] [from fraction_changed to OnButtonDownPath.set_fraction ] [from fraction_changed to OffButtonUpPath.set_fraction ] [from fraction_changed to RtoGColorInerp.set_fraction ] -->
                         <TimeSensor DEF='MotorClockOncycleInterval='1.0enabled='trueloop='false'/>
177                      </Transform>
178                 </Transform>
179                 <!-- Motor Status Display -->
180                 <Transform translation='.5 .8 1.83'>
181                      <Group DEF='MotorStatus'>
182                           <Transform translation='0 .5 .01'>
183                                <Shape>
184                                     <Text string='"Motor Status:"'>
185                                          <FontStyle justify='"MIDDLE" "MIDDLE"size='0.5'/>
186                                     </Text>
187                                     <Appearance USE='BlackText'/>
188                                </Shape>
189                           </Transform>
190                           <Transform translation='0 0 .01'>
191                                <Shape>
192 
                                   <!-- ROUTE information for StatusDisplay node:  [from MotorButtonActionOn.displayMotorStatus to set_string ] [from MotorButtonActionOff.displayMotorStatus to set_string ] -->
                                   <Text DEF='StatusDisplaystring='"OFF"'>
193                                          <FontStyle justify='"MIDDLE" "MIDDLE"size='0.5'/>
194                                     </Text>
195                                     <Appearance>
196 
                                        <!-- ROUTE information for MotorDisplayMaterial node:  [from RtoGColorInerp.value_changed to set_diffuseColor ] [from GtoRColorInerp.value_changed to set_diffuseColor ] -->
                                        <Material DEF='MotorDisplayMaterialdiffuseColor='1 .3 .3'/>
197                                     </Appearance>
198                                </Shape>
199                           </Transform>
200                           <Shape USE='DisplayField'/>
201                      </Group>
202                 </Transform>
203 
               <!-- ROUTE information for MotorButtonActionOn node:  [from SensorOnButton.isActive to onButtonAction ] [from displayMotorStatus to StatusDisplay.set_string ] [from fanOnButtonAction to FanClock.set_cycleInterval ] -->
               <Script DEF='MotorButtonActionOn'>
204                      <field name='onButtonActiontype='SFBoolaccessType='inputOnly'/>
205                      <field name='displayMotorStatustype='MFStringaccessType='outputOnly'/>
206                      <field name='fanOnButtonActiontype='SFTimeaccessType='outputOnly'/>
  <![CDATA[
        
ecmascript:

function onButtonAction(bool)
{
	if (onButtonAction.bool == true)
	{
		displayMotorStatus[0] ='ON';
		fanOnButtonAction = 1;
	}
}

      
]]>
208                 </Script>
209 
               <!-- ROUTE information for MotorButtonActionOff node:  [from SensorOffButton.isActive to offButtonAction ] [from displayMotorStatus to StatusDisplay.set_string ] -->
               <Script DEF='MotorButtonActionOff'>
210                      <field name='offButtonActiontype='SFBoolaccessType='inputOnly'/>
211                      <field name='displayMotorStatustype='MFStringaccessType='outputOnly'/>
  <![CDATA[
        
ecmascript:

function offButtonAction(bool)
{
	if (offButtonAction.bool == true)
	{
		displayMotorStatus[0] ='OFF';
	}
}

      
]]>
213                 </Script>
214 
               <!-- ROUTE information for RtoGColorInerp node:  [from MotorClockOn.fraction_changed to set_fraction ] [from value_changed to MotorDisplayMaterial.set_diffuseColor ] -->
               <ColorInterpolator DEF='RtoGColorInerpkey='0 .1 .1 1keyValue='1 .3 .3 1 .3 .3 .3 1 .3 .3 1 .3'/>
215 
               <!-- ROUTE information for GtoRColorInerp node:  [from MotorClockOff.fraction_changed to set_fraction ] [from value_changed to MotorDisplayMaterial.set_diffuseColor ] -->
               <ColorInterpolator DEF='GtoRColorInerpkey='0 .1 .1 1keyValue='.3 1 .3 .3 1 .3 1 .3 .3 1 .3 .3'/>
216            </Group>
217            <Group DEF='RemoteControl'>
218                 <Transform rotation='1 0 0 -1.571'>
219                      <Transform scale='.2 .5 .5translation='0 -20 0'>
220                           <Group USE='ControlPanel'/>
221                           <Transform translation='0 0 1.325'>
222                                <Shape>
223                                     <Box size='3 3 1'/>
224                                     <Appearance USE='DarkBlueGreyMetal'/>
225                                </Shape>
226                           </Transform>
227                      </Transform>
228                 </Transform>
229            </Group>
230            <!-- Route for controling Switch movement -->
231            < ROUTE  fromNode='SwitchPlaneSensor' fromField='translation_changed' toNode='SwitchTransform' toField='set_translation'/>
232            <!-- Routes for controling Fan w/ Switch -->
233            < ROUTE  fromNode='SwitchPlaneSensor' fromField='translation_changed' toNode='MotorAmp' toField='switchPosition'/>
234            < ROUTE  fromNode='MotorAmp' fromField='fanCycleTime' toNode='FanClock' toField='set_cycleInterval'/>
235            < ROUTE  fromNode='FanClock' fromField='fraction_changed' toNode='FanPath' toField='set_fraction'/>
236            < ROUTE  fromNode='FanPath' fromField='value_changed' toNode='Fan' toField='set_rotation'/>
237            <!-- Button Movement Routes -->
238            < ROUTE  fromNode='SensorOffButton' fromField='touchTime' toNode='MotorClockOff' toField='set_startTime'/>
239            < ROUTE  fromNode='SensorOffButton' fromField='isActive' toNode='MotorButtonActionOff' toField='offButtonAction'/>
240            < ROUTE  fromNode='SensorOnButton' fromField='touchTime' toNode='MotorClockOn' toField='set_startTime'/>
241            < ROUTE  fromNode='SensorOnButton' fromField='isActive' toNode='MotorButtonActionOn' toField='onButtonAction'/>
242            < ROUTE  fromNode='MotorClockOn' fromField='fraction_changed' toNode='OnButtonDownPath' toField='set_fraction'/>
243            < ROUTE  fromNode='MotorClockOn' fromField='fraction_changed' toNode='OffButtonUpPath' toField='set_fraction'/>
244            < ROUTE  fromNode='MotorClockOff' fromField='fraction_changed' toNode='OffButtonDownPath' toField='set_fraction'/>
245            < ROUTE  fromNode='MotorClockOff' fromField='fraction_changed' toNode='OnButtonUpPath' toField='set_fraction'/>
246            < ROUTE  fromNode='OnButtonDownPath' fromField='value_changed' toNode='OnButton' toField='set_translation'/>
247            < ROUTE  fromNode='OffButtonDownPath' fromField='value_changed' toNode='OffButton' toField='set_translation'/>
248            < ROUTE  fromNode='OnButtonUpPath' fromField='value_changed' toNode='OnButton' toField='set_translation'/>
249            < ROUTE  fromNode='OffButtonUpPath' fromField='value_changed' toNode='OffButton' toField='set_translation'/>
250            <!-- Route for Fan display -->
251            < ROUTE  fromNode='MotorAmp' fromField='displayFanSpeed' toNode='SpeedDisplay' toField='set_string'/>
252            <!-- Route for Motor display -->
253            < ROUTE  fromNode='MotorClockOn' fromField='fraction_changed' toNode='RtoGColorInerp' toField='set_fraction'/>
254            < ROUTE  fromNode='MotorClockOff' fromField='fraction_changed' toNode='GtoRColorInerp' toField='set_fraction'/>
255            < ROUTE  fromNode='MotorButtonActionOn' fromField='displayMotorStatus' toNode='StatusDisplay' toField='set_string'/>
256            < ROUTE  fromNode='RtoGColorInerp' fromField='value_changed' toNode='MotorDisplayMaterial' toField='set_diffuseColor'/>
257            < ROUTE  fromNode='GtoRColorInerp' fromField='value_changed' toNode='MotorDisplayMaterial' toField='set_diffuseColor'/>
258            < ROUTE  fromNode='MotorButtonActionOff' fromField='displayMotorStatus' toNode='StatusDisplay' toField='set_string'/>
259            <!-- Buttons control Fan -->
260            < ROUTE  fromNode='MotorButtonActionOn' fromField='fanOnButtonAction' toNode='FanClock' toField='set_cycleInterval'/>
261            <!-- -->
262       </Scene>
263  </X3D>
<!--

Event Graph ROUTE Table shows event connections.

--> <!-- to top DEF nodes index: BlackText, ControlPanel, DarkBlueGreyMetal, Display, DisplayField, Fan, FanBlade, FanClock, FanHub, FanHubMiddle, FanHubTop, FanPath, GreenStatus, GtoRColorInerp, LeftFanBlade, LightGreyMetal, MaterialGroup, MotorAmp, MotorButtonActionOff, MotorButtonActionOn, MotorClockOff, MotorClockOn, MotorDisplayMaterial, MotorHousingGroup, MotorStatus, OffButton, OffButtonDownPath, OffButtonUpPath, OnButton, OnButtonDownPath, OnButtonUpPath, RedStatus, RemoteControl, RightFanBlade, RotatingFanGroup, RtoGColorInerp, SensorOffButton, SensorOnButton, SpeedDisplay, StatusDisplay, SwitchBack, SwitchGroup, SwitchNob, SwitchPlaneSensor, SwitchTouchSensor, SwitchTransform

Index for Viewpoint nodes: Viewpoint_1, Viewpoint_2, Viewpoint_3, Viewpoint_4

-->
X3D Tooltips element index: to top Appearance, Background, Box, ColorInterpolator, Cylinder, Extrusion, field, FontStyle, Group, head, Material, meta, OrientationInterpolator, PlaneSensor, PositionInterpolator, ROUTE, Scene, Script, Shape, Sphere, Text, TimeSensor, TouchSensor, Transform, Viewpoint, WorldInfo, X3D,
plus documentation for accessType definitions, type definitions, XML data types, and field types

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

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

FanClock
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(1)
FanPath
OrientationInterpolator
set_fraction
SFFloat
then
from
same
node
FanPath
OrientationInterpolator
value_changed
SFRotation

ROUTE
event to
(2)
Fan
Transform
set_rotation
SFRotation

SwitchPlaneSensor
PlaneSensor
translation_changed
SFVec3f

ROUTE
event to
(1)
SwitchTransform
Transform
set_translation
SFVec3f
SwitchPlaneSensor
PlaneSensor
translation_changed
SFVec3f

ROUTE
event to
(1)
MotorAmp
Script
switchPosition
SFVec3f
then
from
same
node
MotorAmp
Script
displayFanSpeed
MFString

ROUTE
event to
(2)
SpeedDisplay
Text
set_string
MFString
  then
from
same
node
MotorAmp
Script
fanCycleTime
SFTime

ROUTE
event to
(2)
FanClock
TimeSensor
set_cycleInterval
SFTime
then
from
same
node
FanClock
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(3)
FanPath
OrientationInterpolator
set_fraction
SFFloat
then
from
same
node
FanPath
OrientationInterpolator
value_changed
SFRotation

ROUTE
event to
(4)
Fan
Transform
set_rotation
SFRotation

SwitchTouchSensor
TouchSensor
No direct ROUTE connection found for events to/from this node. 

SensorOffButton
TouchSensor
touchTime
SFTime

ROUTE
event to
(1)
MotorClockOff
TimeSensor
set_startTime
SFTime
then
from
same
node
MotorClockOff
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(2)
OffButtonDownPath
PositionInterpolator
set_fraction
SFFloat
then
from
same
node
OffButtonDownPath
PositionInterpolator
value_changed
SFVec3f

ROUTE
event to
(3)
OffButton
Transform
set_translation
SFVec3f
  then
from
same
node
MotorClockOff
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(2)
OnButtonUpPath
PositionInterpolator
set_fraction
SFFloat
then
from
same
node
OnButtonUpPath
PositionInterpolator
value_changed
SFVec3f

ROUTE
event to
(3)
OnButton
Transform
set_translation
SFVec3f
  then
from
same
node
MotorClockOff
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(2)
GtoRColorInerp
ColorInterpolator
set_fraction
SFFloat
then
from
same
node
GtoRColorInerp
ColorInterpolator
value_changed
SFColor

ROUTE
event to
(3)
MotorDisplayMaterial
Material
set_diffuseColor
SFColor
SensorOffButton
TouchSensor
isActive
SFBool

ROUTE
event to
(1)
MotorButtonActionOff
Script
offButtonAction
SFBool
then
from
same
node
MotorButtonActionOff
Script
displayMotorStatus
MFString

ROUTE
event to
(2)
StatusDisplay
Text
set_string
MFString

SensorOnButton
TouchSensor
touchTime
SFTime

ROUTE
event to
(1)
MotorClockOn
TimeSensor
set_startTime
SFTime
then
from
same
node
MotorClockOn
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(2)
OnButtonDownPath
PositionInterpolator
set_fraction
SFFloat
then
from
same
node
OnButtonDownPath
PositionInterpolator
value_changed
SFVec3f

ROUTE
event to
(3)
OnButton
Transform
set_translation
SFVec3f
  then
from
same
node
MotorClockOn
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(2)
OffButtonUpPath
PositionInterpolator
set_fraction
SFFloat
then
from
same
node
OffButtonUpPath
PositionInterpolator
value_changed
SFVec3f

ROUTE
event to
(3)
OffButton
Transform
set_translation
SFVec3f
  then
from
same
node
MotorClockOn
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(2)
RtoGColorInerp
ColorInterpolator
set_fraction
SFFloat
then
from
same
node
RtoGColorInerp
ColorInterpolator
value_changed
SFColor

ROUTE
event to
(3)
MotorDisplayMaterial
Material
set_diffuseColor
SFColor
SensorOnButton
TouchSensor
isActive
SFBool

ROUTE
event to
(1)
MotorButtonActionOn
Script
onButtonAction
SFBool
then
from
same
node
MotorButtonActionOn
Script
displayMotorStatus
MFString

ROUTE
event to
(2)
StatusDisplay
Text
set_string
MFString
  then
from
same
node
MotorButtonActionOn
Script
fanOnButtonAction
SFTime

ROUTE
event to
(2)
FanClock
TimeSensor
set_cycleInterval
SFTime
then
from
same
node
FanClock
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(3)
FanPath
OrientationInterpolator
set_fraction
SFFloat
then
from
same
node
FanPath
OrientationInterpolator
value_changed
SFRotation

ROUTE
event to
(4)
Fan
Transform
set_rotation
SFRotation

MotorClockOff
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(1)
OffButtonDownPath
PositionInterpolator
set_fraction
SFFloat
then
from
same
node
OffButtonDownPath
PositionInterpolator
value_changed
SFVec3f

ROUTE
event to
(2)
OffButton
Transform
set_translation
SFVec3f
MotorClockOff
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(1)
OnButtonUpPath
PositionInterpolator
set_fraction
SFFloat
then
from
same
node
OnButtonUpPath
PositionInterpolator
value_changed
SFVec3f

ROUTE
event to
(2)
OnButton
Transform
set_translation
SFVec3f
MotorClockOff
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(1)
GtoRColorInerp
ColorInterpolator
set_fraction
SFFloat
then
from
same
node
GtoRColorInerp
ColorInterpolator
value_changed
SFColor

ROUTE
event to
(2)
MotorDisplayMaterial
Material
set_diffuseColor
SFColor

MotorClockOn
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(1)
OnButtonDownPath
PositionInterpolator
set_fraction
SFFloat
then
from
same
node
OnButtonDownPath
PositionInterpolator
value_changed
SFVec3f

ROUTE
event to
(2)
OnButton
Transform
set_translation
SFVec3f
MotorClockOn
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(1)
OffButtonUpPath
PositionInterpolator
set_fraction
SFFloat
then
from
same
node
OffButtonUpPath
PositionInterpolator
value_changed
SFVec3f

ROUTE
event to
(2)
OffButton
Transform
set_translation
SFVec3f
MotorClockOn
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(1)
RtoGColorInerp
ColorInterpolator
set_fraction
SFFloat
then
from
same
node
RtoGColorInerp
ColorInterpolator
value_changed
SFColor

ROUTE
event to
(2)
MotorDisplayMaterial
Material
set_diffuseColor
SFColor


Additional guidance on X3D animation can be found in the 10-Step Animation Design Process and Event Tracing hint sheets.
Have fun with X3D! 😀

-->
<!-- Online at
https://www.web3d.org/x3d/content/examples/Basic/StudentProjects/PropellerControlPanelIndex.html -->
<!-- SourceForge version control Version control at    
https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/content/examples/Basic/StudentProjects/PropellerControlPanel.x3d -->

<!-- Color-coding legend: X3D terminology <X3dNode DEF='idNamefield='value'/> matches XML terminology <XmlElement DEF='idNameattribute='value'/>
(Light-blue background: event-based behavior node or statement) (Grey background inside box: inserted documentation) (Magenta background: X3D Extensibility)
-->

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