X3D Model Documentation: SeaWebBuoyPrototype.x3d

  1  <?xml version="1.0" encoding="UTF-8"?>
  2  <!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.3//EN" "https://www.web3d.org/specifications/x3d-3.3.dtd">
  3  <X3D profile='Immersive' version='3.3'  xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation='https://www.web3d.org/specifications/x3d-3.3.xsd'>
  4       <head>
  5            <meta name='title' content='SeaWebBuoyPrototype.x3d'/>
  6            <meta name='description' content='A prototype of a SeaWeb buoy.'/>
  7            <meta name='creator' content='Oliver Tan and Don Brutzman'/>
  8            <meta name='created' content='3 June 2004'/>
  9            <meta name='modified' content='2 January 2025'/>
 10            <meta name='subject' content='Buoy, SeaWeb'/>
 11            <meta name='identifier' content='https://savage.nps.edu/Savage/CommunicationsAndSensors/SeaWeb/SeaWebBuoyPrototype.x3d'/>
 12            <meta name='generator' content='X3D-Edit 3.2, https://savage.nps.edu/X3D-Edit'/>
 13            <meta name='license' content='../../license.html'/>
 14       </head>
<!--

<!--
Event Graph ROUTE Table shows event connections.
-->
<!-- to top Index for DEF nodes: AcousticTransmissionCylinderInstance, BeamCylinderAnimation, BeamCylinderInstance, BeamCylinderInterpolator, BeamCylinderRotation, BuoyGeometrySwitch, DelayTimer, FlyingTextInstance, FlyingTextTransform, RacomBuoy, RepeaterBuoyControlScript, RepeaterBuoyTransform, SeaWebBuoyViewpoint, TelesonarRepeater, TextLabel, TextLabelTransform, TransmissionGeometrySwitch

Index for Viewpoint nodes: Viewpoint_1, Viewpoint_2, SeaWebBuoyViewpoint

Index for ExternProtoDeclare definitions: AcousticTransmissionCylinder, BeamCylinder, FlyingText, TimeDelaySensor

Index for ProtoDeclare definition: SeaWebBuoy
-->
 15       <Scene>
 16            <ExternProtoDeclare name='AcousticTransmissionCylinder' appinfo='AcousticTransmissionCylinder visualizes the pulse width of cylindrical propagation with has a receding inner radius and a (maximum outer radius .'   url=' "AcousticTransmissionCylinderPrototype.x3d#AcousticTransmissionCylinder" "https://savage.nps.edu/Savage/CommunicationsAndSensors/SeaWeb/AcousticTransmissionCylinderPrototype.x3d#AcousticTransmissionCylinder" "AcousticTransmissionCylinderPrototype.wrl#AcousticTransmissionCylinder" "https://savage.nps.edu/Savage/CommunicationsAndSensors/SeaWeb/AcousticTransmissionCylinderPrototype.wrl#AcousticTransmissionCylinder" '>
 17                 <field name='startTransmission' type='SFBool' accessType='inputOnly'
                appinfo='Upon receipt of a boolean true event start a single (not continuous) transmission'/>
 18                 <field name='startContinuousTransmissions' type='SFBool' accessType='inputOnly'
                appinfo='Upon receipt of a boolean true event start continuous transmissions'/>
 19                 <field name='set_range' type='SFFloat' accessType='inputOnly'
                appinfo='Propagation range in meters'/>
 20                 <field name='defaultRange' type='SFFloat' accessType='initializeOnly'
                appinfo='Default propagation range in meters'/>
 21                 <field name='transmissionPropagationSpeed' type='SFFloat' accessType='initializeOnly'
                appinfo='Speed in meters / second'/>
 22                 <field name='set_transmissionDuration' type='SFFloat' accessType='inputOnly'
                appinfo='Duration in seconds'/>
 23                 <field name='transmissionDuration' type='SFFloat' accessType='initializeOnly'
                appinfo='Duration in seconds'/>
 24                 <field name='height' type='SFFloat' accessType='initializeOnly'
                appinfo='Height of cylinder in meters'/>
 25                 <field name='set_color' type='SFColor' accessType='inputOnly'
                appinfo='Color of cylinder'/>
 26                 <field name='color' type='SFColor' accessType='initializeOnly'
                appinfo='Default color of cylinder'/>
 27                 <field name='traceEnabled' type='SFBool' accessType='initializeOnly'/>
 28                 <field name='beamCount' type='SFInt32' accessType='initializeOnly'
                appinfo='number of segmented sections in 360-degree cylindrical beam'/>
 29                 <field name='set_beamCount' type='SFInt32' accessType='inputOnly'
                appinfo='Number of segmented sections in 360-degree cylindrical beam'/>
 30            </ExternProtoDeclare>
 31            <ExternProtoDeclare name='BeamCylinder' appinfo='Produce wireframe or transparent beam cylinders. Typical uses include propeller/thruster water flow or line-of-sight sonar/radar/light beams. Negative range values invert base and apex at same relative location. Default: beam with apex at (0 0 0) and base of radius 1 in x-z plane at (1 0 0).'   url=' "../../CommunicationsAndSensors/Beam/BeamCylinderPrototype.x3d#BeamCylinder" "https://savage.nps.edu/Savage/CommunicationsAndSensors/Beam/BeamCylinderPrototype.x3d#BeamCylinder" "../../CommunicationsAndSensors/Beam/BeamCylinderPrototype.wrl#BeamCylinder" "https://savage.nps.edu/Savage/CommunicationsAndSensors/Beam/BeamCylinderPrototype.wrl#BeamCylinder" '>
 32                 <field name='contact' type='SFBool' accessType='inputOnly'
                appinfo='(communications) is transmitted signal in contact with receiver or (sensor) is a target return detected?'/>
 33                 <field name='range' type='SFFloat' accessType='inputOnly'
                appinfo='distance in meters along x axis'/>
 34                 <field name='defaultRange' type='SFFloat' accessType='initializeOnly'
                appinfo='distance in meters used until eventIn range sent'/>
 35                 <field name='wireframe' type='SFBool' accessType='initializeOnly'
                appinfo='whether wireframe beam is drawn'/>
 36                 <field name='solid' type='SFBool' accessType='initializeOnly'
                appinfo='whether solid beam is drawn'/>
 37                 <field name='beamHeight' type='SFFloat' accessType='initializeOnly'
                appinfo='meters across vertical y axis'/>
 38                 <field name='beamWidth' type='SFFloat' accessType='initializeOnly'
                appinfo='meters across horizontal z axis'/>
 39                 <field name='contactColor' type='SFColor' accessType='initializeOnly'
                appinfo='rendering color when contact=true'/>
 40                 <field name='noContactColor' type='SFColor' accessType='initializeOnly'
                appinfo='rendering color when contact=false'/>
 41                 <field name='transparency' type='SFFloat' accessType='inputOutput'
                appinfo='1 = fully transparent wireframe only'/>
 42            </ExternProtoDeclare>
 43            <ExternProtoDeclare name='FlyingText' appinfo='Visualize message transfer between two points as flying text'   url=' "../../../Savage/Tools/Animation/FlyingTextPrototype.x3d#FlyingText" "https://savage.nps.edu/Savage/Tools/Animation/FlyingTextPrototype.x3d#FlyingText" "../../../Savage/Tools/Animation/FlyingTextPrototype.wrl#FlyingText" "https://savage.nps.edu/Savage/Tools/Animation/FlyingTextPrototype.wrl#FlyingText" '>
 44                 <field name='waypoints' type='MFVec3f' accessType='initializeOnly'/>
 45                 <field name='set_waypoints' type='MFVec3f' accessType='inputOnly'/>
 46                 <field name='timeIntervals' type='MFTime' accessType='initializeOnly'/>
 47                 <field name='set_timeIntervals' type='MFTime' accessType='inputOnly'/>
 48                 <field name='textMessage' type='MFString' accessType='initializeOnly'/>
 49                 <field name='set_textMessage' type='MFString' accessType='inputOnly'/>
 50                 <field name='visible' type='SFBool' accessType='initializeOnly'/>
 51                 <field name='set_visible' type='SFBool' accessType='inputOnly'/>
 52                 <field name='loop' type='SFBool' accessType='initializeOnly'/>
 53                 <field name='axisOfRotation' type='SFVec3f' accessType='initializeOnly'/>
 54                 <field name='timeSensorEnabled' type='SFBool' accessType='initializeOnly'/>
 55                 <field name='startTime' type='SFTime' accessType='inputOutput'/>
 56                 <field name='set_startTime' type='SFTime' accessType='inputOnly'/>
 57                 <field name='stopTime' type='SFTime' accessType='inputOutput'/>
 58                 <field name='set_stopTime' type='SFTime' accessType='inputOnly'/>
 59                 <field name='traceEnabled' type='SFBool' accessType='initializeOnly'/>
 60                 <field name='textDiffuseColor' type='SFColor' accessType='inputOutput'/>
 61                 <field name='fontStyle' type='SFNode' accessType='inputOutput'/>
 62            </ExternProtoDeclare>
 63            <ExternProtoDeclare name='TimeDelaySensor' appinfo='TimeSensor functionality commences after delayInterval pause'   url=' "../../../Savage/Tools/Animation/TimeDelaySensorPrototype.x3d#TimeDelaySensor" "https://savage.nps.edu/Savage/Tools/Animation/TimeDelaySensorPrototype.x3d#TimeDelaySensor" "../../../Savage/Tools/Animation/TimeDelaySensorPrototype.wrl#TimeDelaySensor" "https://savage.nps.edu/Savage/Tools/Animation/TimeDelaySensorPrototype.wrl#TimeDelaySensor" '>
 64                 <field name='startTime' type='SFTime' accessType='inputOutput'/>
 65                 <field name='enabled' type='SFBool' accessType='inputOutput'/>
 66                 <field name='delayInterval' type='SFTime' accessType='inputOutput'
                appinfo='seconds'/>
 67                 <field name='delayCompleteTime' type='SFTime' accessType='outputOnly'/>
 68                 <field name='traceEnabled' type='SFBool' accessType='initializeOnly'/>
 69            </ExternProtoDeclare>
 70            <ProtoDeclare name='SeaWebBuoy' appinfo='SeaWeb acoustic-radio gateway communications buoy'>
 71                 <ProtoInterface>
 72                      <field name='set_position' type='SFVec3f' accessType='inputOnly'
                     appinfo='Position of buoy.'/>
 73                      <field name='position' type='SFVec3f' value='0 0 0' accessType='initializeOnly'
                     appinfo='Position of buoy.'/>
 74                      <field name='set_targetPosition' type='SFVec3f' accessType='inputOnly'
                     appinfo='Position of target of transmission.'/>
 75                      <field name='targetPosition' type='SFVec3f' value='0 0 0' accessType='initializeOnly'
                     appinfo='Position of target of transmission.'/>
 76                      <field name='set_targetIdNumber' type='SFInt32' accessType='inputOnly'
                     appinfo='Id number of target.'/>
 77                      <field name='targetIdNumber' type='SFInt32' value='-1' accessType='initializeOnly'
                     appinfo='Id number of target.'/>
 78                      <field name='set_enabled' type='SFBool' accessType='inputOnly'
                     appinfo='Enable buoy for transmission.'/>
 79                      <field name='enabled' type='SFBool' value='true' accessType='initializeOnly'
                     appinfo='Enable buoy for transmission.'/>
 80                      <field name='set_activated' type='SFBool' accessType='inputOnly'
                     appinfo='Start transmission.'/>
 81                      <field name='activated' type='SFBool' value='false' accessType='initializeOnly'
                     appinfo='Start transmission.'/>
 82                      <field name='set_transmissionDuration' type='SFFloat' accessType='inputOnly'
                     appinfo='Duration in seconds needed to transmit message (does not include transmissionTimeDelay or propagation delay).'/>
 83                      <field name='transmissionDuration' type='SFFloat' value='5' accessType='initializeOnly'
                     appinfo='Duration in seconds needed to transmit message (does not include transmissionTimeDelay or propagation delay).'/>
 84                      <field name='set_transmissionTimeDelay' type='SFTime' accessType='inputOnly'
                     appinfo='Time delay before transmission begins.'/>
 85                      <field name='transmissionTimeDelay' type='SFTime' value='2' accessType='initializeOnly'
                     appinfo='Time delay before transmission begins.'/>
 86                      <field name='set_directionalTransmission' type='SFBool' accessType='inputOnly'
                     appinfo='Select between directional (true) or omni-directional (false) transmission.'/>
 87                      <field name='directionalTransmission' type='SFBool' value='false' accessType='initializeOnly'
                     appinfo='Select between directional (true) or omni-directional (false) transmission.'/>
 88                      <field name='set_buoyType' type='SFString' accessType='inputOnly'
                     appinfo='Determine which buoy type to use. "Racom" for Racom Buoy. "Telesonar" for Telesonar Repeater.'/>
 89                      <field name='buoyType' type='SFString' value='Racom' accessType='initializeOnly'
                     appinfo='Determine which buoy type to use. "Racom" for Racom Buoy. "Telesonar" for Telesonar Repeater.'/>
 90                      <field name='set_soundSpeedInWater' type='SFFloat' accessType='inputOnly'
                     appinfo='Sound speed in water default value 1500 m/s'/>
 91                      <field name='soundSpeedInWater' type='SFFloat' value='1500' accessType='initializeOnly'
                     appinfo='Sound speed in water default value 1500 m/s'/>
 92                      <field name='set_textMessage' type='MFString' accessType='inputOnly'/>
 93                      <field name='textMessage' type='MFString' accessType='initializeOnly'/>
 94                      <field name='textMessageColor' type='SFColor' value='0.1 0.7 0.7' accessType='inputOutput'/>
 95                      <field name='set_description' type='SFString' accessType='inputOnly'/>
 96                      <field name='description' type='SFString' value='SeaWeb Buoy' accessType='initializeOnly'/>
 97                      <field name='traceEnabled' type='SFBool' value='false' accessType='initializeOnly'/>
 98                 </ProtoInterface>
 99                 <ProtoBody>
100                      <Group>
101 
                         <!-- Viewpoint SeaWebBuoyViewpoint is a DEF node that has 1 USE node: USE_1 -->
                         <Viewpoint DEF='SeaWebBuoyViewpoint' description='SeaWeb Buoy' position='0 0 15'/>
102                           <Transform DEF='RepeaterBuoyTransform'>
103                                <IS>
104                                     <connect nodeField='set_translation' protoField='set_position'/>
105                                     <connect nodeField='translation' protoField='position'/>
106                                </IS>
107 
                              <!-- Switch BuoyGeometrySwitch is a DEF node that has 1 USE node: USE_1 -->
                              <Switch DEF='BuoyGeometrySwitch' whichChoice='0'>
108                                     <Inline DEF='RacomBuoy'   url=' "RacomBuoy.x3d" "../../../Savage/CommunicationsAndSensors/SeaWeb/RacomBuoy.x3d" "https://savage.nps.edu/Savage/CommunicationsAndSensors/SeaWeb/RacomBuoy.x3d" "RacomBuoy.wrl" "../../../Savage/CommunicationsAndSensors/SeaWeb/RacomBuoy.wrl" "https://savage.nps.edu/Savage/CommunicationsAndSensors/SeaWeb/RacomBuoy.wrl" '/>
109                                     <Transform translation='0 -7 0'>
110                                          <Inline DEF='TelesonarRepeater'   url=' "TelesonarRepeater.x3d" "../../../Savage/CommunicationsAndSensors/SeaWeb/TelesonarRepeater.x3d" "https://savage.nps.edu/Savage/CommunicationsAndSensors/SeaWeb/TelesonarRepeater.x3d" "TelesonarRepeater.wrl" "../../../Savage/CommunicationsAndSensors/SeaWeb/TelesonarRepeater.wrl" "https://savage.nps.edu/Savage/CommunicationsAndSensors/SeaWeb/TelesonarRepeater.wrl" '/>
111                                     </Transform>
112                                </Switch>
113 
                              <!-- Switch TransmissionGeometrySwitch is a DEF node that has 1 USE node: USE_1 -->
                              <Switch DEF='TransmissionGeometrySwitch' whichChoice='0'>
114 
                                   <!-- ProtoInstance AcousticTransmissionCylinderInstance is a DEF node that has 1 USE node: USE_1
                                   <!-- ROUTE information for AcousticTransmissionCylinderInstance node:  [from RepeaterBuoyControlScript.propagationDistance to set_range ] -->
                                   <ProtoInstance name='AcousticTransmissionCylinder' DEF='AcousticTransmissionCylinderInstance'>
115                                          <fieldValue name='defaultRange' value='1000'/>
116                                          <fieldValue name='transmissionPropagationSpeed' value='1500'/>
117                                          <fieldValue name='height' value='1'/>
118                                          <fieldValue name='color' value='1 1 0.2'/>
119                                          <IS>
120                                               <connect nodeField='transmissionDuration' protoField='transmissionDuration'/>
121                                               <connect nodeField='set_transmissionDuration' protoField='set_transmissionDuration'/>
122                                               <connect nodeField='traceEnabled' protoField='traceEnabled'/>
123                                          </IS>
124                                     </ProtoInstance>
125 
                                   <!-- ROUTE information for BeamCylinderRotation node:  [from RepeaterBuoyControlScript.beamRotation to set_rotation ] -->
                                   <Transform DEF='BeamCylinderRotation'>
126 
                                        <!-- ROUTE information for BeamCylinderInstance node:  [from BeamCylinderInterpolator.value_changed to range ] -->
                                        <ProtoInstance name='BeamCylinder' DEF='BeamCylinderInstance'>
127                                               <fieldValue name='defaultRange' value='0'/>
128                                               <fieldValue name='beamHeight' value='1'/>
129                                               <fieldValue name='beamWidth' value='0.5'/>
130                                               <fieldValue name='transparency' value='0.2'/>
131                                               <fieldValue name='wireframe' value='true'/>
132                                               <fieldValue name='solid' value='true'/>
133                                          </ProtoInstance>
134                                     </Transform>
135                                </Switch>
136                                <Transform DEF='FlyingTextTransform' translation='0 2 0'>
137 
                                   <!-- ProtoInstance FlyingTextInstance is a DEF node that has 1 USE node: USE_1
                                   <!-- ROUTE information for FlyingTextInstance node:  [from RepeaterBuoyControlScript.activationTime to set_startTime ] -->
                                   <ProtoInstance name='FlyingText' DEF='FlyingTextInstance'>
138                                          <fieldValue name='visible' value='false'/>
139                                          <IS>
140                                               <connect nodeField='set_textMessage' protoField='set_textMessage'/>
141                                               <connect nodeField='textMessage' protoField='textMessage'/>
142                                               <connect nodeField='textDiffuseColor' protoField='textMessageColor'/>
143                                               <connect nodeField='traceEnabled' protoField='traceEnabled'/>
144                                          </IS>
145                                     </ProtoInstance>
146                                </Transform>
147                                <Transform DEF='TextLabelTransform' translation='0 -2 0'>
148                                     <Billboard axisOfRotation='0 0 0'>
149                                          <Shape>
150                                               <Appearance>
151                                                    <Material>
152                                                         <IS>
153                                                              <connect nodeField='diffuseColor' protoField='textMessageColor'/>
154                                                         </IS>
155                                                    </Material>
156                                               </Appearance>
157 
                                             <!-- Text TextLabel is a DEF node that has 1 USE node: USE_1 -->
                                             <Text DEF='TextLabel'>
158                                                    <FontStyle justify='"MIDDLE" "MIDDLE"'/>
159                                               </Text>
160                                          </Shape>
161                                     </Billboard>
162                                </Transform>
163                           </Transform>
164 
                         <!-- ROUTE information for BeamCylinderAnimation node:  [from DelayTimer.delayCompleteTime to set_startTime ] [from RepeaterBuoyControlScript.activeDuration to cycleInterval ] [from fraction_changed to BeamCylinderInterpolator.set_fraction ] -->
                         <TimeSensor DEF='BeamCylinderAnimation'/>
165 
                         <!-- ScalarInterpolator BeamCylinderInterpolator is a DEF node that has 1 USE node: USE_1
                         <!-- ROUTE information for BeamCylinderInterpolator node:  [from BeamCylinderAnimation.fraction_changed to set_fraction ] [from value_changed to BeamCylinderInstance.range ] -->
                         <ScalarInterpolator DEF='BeamCylinderInterpolator' key='0 0.5 0.999 1' keyValue='0 10 10 0'/>
166                           < ROUTE  fromNode='BeamCylinderAnimation' fromField='fraction_changed' toNode='BeamCylinderInterpolator' toField='set_fraction'/>
167                           < ROUTE  fromNode='BeamCylinderInterpolator' fromField='value_changed' toNode='BeamCylinderInstance' toField='range'/>
168 
                         <!-- ProtoInstance DelayTimer is a DEF node that has 1 USE node: USE_1
                         <!-- ROUTE information for DelayTimer node:  [from RepeaterBuoyControlScript.activationTime to startTime ] [from delayCompleteTime to RepeaterBuoyControlScript.delayCompleted ] [from delayCompleteTime to BeamCylinderAnimation.set_startTime ] -->
                         <ProtoInstance name='TimeDelaySensor' DEF='DelayTimer'/>
169 
170                                <field name='set_position' type='SFVec3f' accessType='inputOnly'
                               appinfo='Position of buoy.'/>
171                                <field name='position' type='SFVec3f' accessType='initializeOnly'
                               appinfo='Position of buoy.'/>
172                                <field name='set_targetPosition' type='SFVec3f' accessType='inputOnly'
                               appinfo='Position of target of transmission.'/>
173                                <field name='targetPosition' type='SFVec3f' accessType='initializeOnly'
                               appinfo='Position of target of transmission.'/>
174                                <field name='targetIdNumber' type='SFInt32' accessType='initializeOnly'
                               appinfo='Id number of target.'/>
175                                <field name='set_targetIdNumber' type='SFInt32' accessType='inputOnly'
                               appinfo='Id number of target.'/>
176                                <field name='set_enabled' type='SFBool' accessType='inputOnly'
                               appinfo='Enable buoy for transmission.'/>
177                                <field name='enabled' type='SFBool' accessType='initializeOnly'
                               appinfo='Enable buoy for transmission.'/>
178                                <field name='set_activated' type='SFBool' accessType='inputOnly'
                               appinfo='Start transmission.'/>
179                                <field name='activated' type='SFBool' accessType='initializeOnly'
                               appinfo='Start transmission.'/>
180                                <field name='activationTime' type='SFTime' accessType='outputOnly'
                               appinfo='Start transmission.'/>
181                                <field name='set_transmissionDuration' type='SFFloat' accessType='inputOnly'
                               appinfo='Duration in seconds needed to transmit message'/>
182                                <field name='transmissionDuration' type='SFFloat' accessType='initializeOnly'
                               appinfo='Duration in seconds needed to transmit message'/>
183                                <field name='transmissionTimeDelay' type='SFTime' accessType='initializeOnly'
                               appinfo='Time delay before transmission begins.'/>
184                                <field name='set_transmissionTimeDelay' type='SFTime' accessType='inputOnly'
                               appinfo='Time delay before transmission begins.'/>
185                                <field name='directionalTransmission' type='SFBool' accessType='initializeOnly'
                               appinfo='Select between directional (true) or omni-directional (false) transmission.'/>
186                                <field name='set_directionalTransmission' type='SFBool' accessType='inputOnly'
                               appinfo='Select between directional (true) or omni-directional (false) transmission.'/>
187                                <field name='delayCompleted' type='SFTime' accessType='inputOnly'/>
188                                <field name='acousticTransmissionCylinder' type='SFNode' accessType='initializeOnly'>
189                                     <ProtoInstance USE='AcousticTransmissionCylinderInstance'/>
190                                </field>
191                                <field name='beamCylinderInterpolator' type='SFNode' accessType='initializeOnly'>
192                                     <ScalarInterpolator USE='BeamCylinderInterpolator'/>
193                                </field>
194                                <field name='flyingText' type='SFNode' accessType='initializeOnly'>
195                                     <ProtoInstance USE='FlyingTextInstance'/>
196                                </field>
197                                <field name='geometrySwitch' type='SFNode' accessType='initializeOnly'>
198                                     <Switch USE='BuoyGeometrySwitch'/>
199                                </field>
200                                <field name='transmissionGeometrySwitch' type='SFNode' accessType='initializeOnly'>
201                                     <Switch USE='TransmissionGeometrySwitch'/>
202                                </field>
203                                <field name='delayTimer' type='SFNode' accessType='initializeOnly'>
204                                     <ProtoInstance USE='DelayTimer'/>
205                                </field>
206                                <field name='set_buoyType' type='SFString' accessType='inputOnly'
                               appinfo='Determine which buoy type to use. "Racom" for Racom Buoy. "Telesonar" for Telesonar Repeater.'/>
207                                <field name='buoyType' type='SFString' accessType='initializeOnly'
                               appinfo='Determine which buoy type to use. "Racom" for Racom Buoy. "Telesonar" for Telesonar Repeater.'/>
208                                <field name='set_soundSpeedInWater' type='SFFloat' accessType='inputOnly'
                               appinfo='Sound speed in water default value 1500 m/s'/>
209                                <field name='soundSpeedInWater' type='SFFloat' accessType='initializeOnly'
                               appinfo='Sound speed in water default value 1500 m/s'/>
210                                <field name='set_description' type='SFString' accessType='inputOnly'/>
211                                <field name='description' type='SFString' accessType='initializeOnly'/>
212                                <field name='propagationDistance' type='SFFloat' accessType='outputOnly'/>
213                                <field name='propagationDuration' type='SFTime' accessType='outputOnly'/>
214                                <field name='activeDuration' type='SFTime' accessType='outputOnly'/>
215                                <field name='totalDuration' type='SFTime' accessType='outputOnly'/>
216                                <field name='beamRotation' type='SFRotation' accessType='outputOnly'/>
217                                <field name='TextLabelNode' type='SFNode' accessType='initializeOnly'>
218                                     <Text USE='TextLabel'/>
219                                </field>
220                                <field name='SeaWebBuoyViewpointNode' type='SFNode' accessType='initializeOnly'>
221                                     <Viewpoint USE='SeaWebBuoyViewpoint'/>
222                                </field>
223                                <field name='traceEnabled' type='SFBool' accessType='initializeOnly'/>
224                                <IS>
225                                     <connect nodeField='set_position' protoField='set_position'/>
226                                     <connect nodeField='position' protoField='position'/>
227                                     <connect nodeField='set_targetPosition' protoField='set_targetPosition'/>
228                                     <connect nodeField='targetPosition' protoField='targetPosition'/>
229                                     <connect nodeField='targetIdNumber' protoField='targetIdNumber'/>
230                                     <connect nodeField='set_targetIdNumber' protoField='set_targetIdNumber'/>
231                                     <connect nodeField='set_enabled' protoField='set_enabled'/>
232                                     <connect nodeField='enabled' protoField='enabled'/>
233                                     <connect nodeField='set_activated' protoField='set_activated'/>
234                                     <connect nodeField='activated' protoField='activated'/>
235                                     <connect nodeField='set_transmissionDuration' protoField='set_transmissionDuration'/>
236                                     <connect nodeField='transmissionDuration' protoField='transmissionDuration'/>
237                                     <connect nodeField='transmissionTimeDelay' protoField='transmissionTimeDelay'/>
238                                     <connect nodeField='set_transmissionTimeDelay' protoField='set_transmissionTimeDelay'/>
239                                     <connect nodeField='directionalTransmission' protoField='directionalTransmission'/>
240                                     <connect nodeField='set_directionalTransmission' protoField='set_directionalTransmission'/>
241                                     <connect nodeField='set_buoyType' protoField='set_buoyType'/>
242                                     <connect nodeField='buoyType' protoField='buoyType'/>
243                                     <connect nodeField='set_soundSpeedInWater' protoField='set_soundSpeedInWater'/>
244                                     <connect nodeField='soundSpeedInWater' protoField='soundSpeedInWater'/>
245                                     <connect nodeField='set_description' protoField='set_description'/>
246                                     <connect nodeField='description' protoField='description'/>
247                                     <connect nodeField='traceEnabled' protoField='traceEnabled'/>
248                                </IS>
  <![CDATA[
            
ecmascript:

function initialize()
{
	// invoke trace routines, if enabled
	set_buoyType (buoyType, timestamp);
	set_directionalTransmission (directionalTransmission);
	process_position_updates ();
	initializeTextLabel ();
	tracePrint('====================== initialize() complete ======================');
}
function initializeTextLabel ()
{
	TextLabelNode.string = new MFString (description, 'location (' + position + ')');
	tracePrint('TextLabelNode.string=' + TextLabelNode.string);
}
function set_buoyType(stringValue, timestamp)
{
	buoyType = stringValue;
	tracePrint ('buoyType = ' + buoyType);
	if      (buoyType=='Racom')
    {
		geometrySwitch.whichChoice = 0;
	}
	else if (buoyType== 'Telesonar')
    {
		geometrySwitch.whichChoice = 1;
	}
    else
    {
		alwaysPrint ('unrecognized buoyType=' + buoyType + ' [allowed choices:  Racom Telesonar]');
		geometrySwitch.whichChoice = -1; // none
	}
	updateSeaWebBuoyViewpointDescription ();
}
function updateSeaWebBuoyViewpointDescription ()
{
	SeaWebBuoyViewpointNode.description = description + ' (' + position + ')';
}
function set_soundSpeedInWater(value, timestamp)
{
	soundSpeedInWater = value;
	tracePrint('soundSpeedInWater = ' + soundSpeedInWater);
	process_position_updates ();
}
function set_position(positionValue, timestamp)
{
	position = positionValue;
	tracePrint('position = ' + position);
	process_position_updates();
	updateSeaWebBuoyViewpointDescription ();
}
function set_targetPosition(positionValue, timestamp)
{
	targetPosition = positionValue;
	tracePrint('targetPosition = ' + targetPosition);
	process_position_updates();
}
function set_transmissionDuration(value, timestamp)
{
	transmissionDuration = value;
	tracePrint('transmissionDuration     = ' + transmissionDuration);
	process_position_updates ();
}
function set_description(value, timestamp)
{
	tracePrint('new description = ' + value);
	description = value;
	updateSeaWebBuoyViewpointDescription ();
}
function process_position_updates(timestamp)
{
	tracePrint('process_position_updates()...');
	tracePrint('transmissionTimeDelay    = ' + transmissionTimeDelay);
	relativeTargetPosition = new SFVec3f();
	relativeTargetPosition.x = targetPosition.x - position.x;
	relativeTargetPosition.y = targetPosition.y - position.y;
	relativeTargetPosition.z = targetPosition.z - position.z;
	tracePrint('relativeTargetPosition = ' + relativeTargetPosition);

	// propagationDistance also sets range for AcousticTransmissionCylinderInstance
	propagationDistance = 	Math.sqrt(
				(relativeTargetPosition.x) * (relativeTargetPosition.x) +
				(relativeTargetPosition.y) * (relativeTargetPosition.y) +
				(relativeTargetPosition.z) * (relativeTargetPosition.z));
	tracePrint('propagationDistance = ' + propagationDistance);

	propagationDuration = propagationDistance / soundSpeedInWater;
	tracePrint('propagationDuration    = ' + propagationDuration);
	activeDuration = propagationDuration + transmissionDuration;
	totalDuration = transmissionTimeDelay + propagationDuration + transmissionDuration;
	tracePrint('totalDuration    = ' + totalDuration);

	beamCylinderInterpolator.key = new MFFloat (0, transmissionTimeDelay/totalDuration,
		(transmissionTimeDelay + propagationDuration)/totalDuration, 0.99, 1);
	beamCylinderInterpolator.keyValue = new MFFloat (0, 0, propagationDistance, propagationDistance, 0);
	tracePrint('beamCylinderInterpolator.key = ' + beamCylinderInterpolator.key);
	tracePrint('beamCylinderInterpolator.keyValue = ' + beamCylinderInterpolator.keyValue);
	beamRotation = new SFRotation (new SFVec3f (1, 0, 0), relativeTargetPosition.normalize());

	flyingText.timeIntervals = new MFTime(transmissionTimeDelay, propagationDuration + transmissionDuration);
	tracePrint('flyingText.timeIntervals = ' + flyingText.timeIntervals);
	// popup text without motion during transmissionTimeDelay
	flyingText.waypoints = new MFVec3f(new SFVec3f(0,0,0), new SFVec3f(0,0,0), relativeTargetPosition);
	tracePrint('flyingText.waypoints = ' + flyingText.waypoints);
	tracePrint('...process_position_updates() complete.');
}
function set_enabled(value, timestamp)
{
	enabled = value;
	tracePrint('enabled = ' + enabled);
}
function set_activated(value, timestamp)
{
	if (enabled)
	{
		process_position_updates(); // ensure up to date
		if (directionalTransmission)
		{
		//	beamCylinder.contact = true;
		}
		else
		{
			// start delay timer, which will later trigger acousticTransmissionCylinder
		//	acousticTransmissionCylinder.startTransmission = true;
		}

		if (value == true)
		{
			delayTimer.delayInterval = transmissionTimeDelay;
			tracePrint('delayTimer.delayInterval = ' + delayTimer.delayInterval);
			activationTime = timestamp; // start DelayTimer, BeamCylinderAnimation, FlyingText startTime
			tracePrint('activated at ' + activationTime);
		}
	}
}
function set_targetIdNumber(value, timestamp)
{
	targetIdNumber = value;
	tracePrint('targetIdNumber = ' + targetIdNumber);
}
function set_directionalTransmission(value, timestamp)
{
	directionalTransmission = value;
	tracePrint('directionalTransmission = ' + directionalTransmission);

	if (directionalTransmission)
	{
		transmissionGeometrySwitch.whichChoice = 1;
	}
	else
	{
		transmissionGeometrySwitch.whichChoice = 0;
	}
}
function set_transmissionTimeDelay(value, timestamp)
{
	if (value < 0.0)
	{
		alwaysPrint('error, illegal transmissionTimeDelay = ' + transmissionTimeDelay +
			', reset to 0');
		transmissionTimeDelay = 0.0;
	}
	else
	{
		transmissionTimeDelay = value;
	}
	tracePrint('transmissionTimeDelay = ' + transmissionTimeDelay);
	process_position_updates ();
}
function delayCompleted(value, timestamp)
{
	if (directionalTransmission)
	{
	//	beamCylinder.range = 0;
	}
	else
	{
		acousticTransmissionCylinder.startTransmission = true;
	}
	tracePrint('delayTimer delayCompleted at ' + timestamp);
}
function alwaysPrint(string)
{
	Browser.println ('[SeaWebBuoyPrototype ' + description + '] ' + string);
}
function tracePrint(string)
{
	if (traceEnabled)
		Browser.println ('[SeaWebBuoyPrototype ' + description + '] ' + string);
}

          
]]>
250                           </Script>
251                           < ROUTE  fromNode='RepeaterBuoyControlScript' fromField='activationTime' toNode='DelayTimer' toField='startTime'/>
252                           < ROUTE  fromNode='DelayTimer' fromField='delayCompleteTime' toNode='RepeaterBuoyControlScript' toField='delayCompleted'/>
253                           < ROUTE  fromNode='DelayTimer' fromField='delayCompleteTime' toNode='BeamCylinderAnimation' toField='set_startTime'/>
254                           < ROUTE  fromNode='RepeaterBuoyControlScript' fromField='activationTime' toNode='FlyingTextInstance' toField='set_startTime'/>
255                           < ROUTE  fromNode='RepeaterBuoyControlScript' fromField='propagationDistance' toNode='AcousticTransmissionCylinderInstance' toField='set_range'/>
256                           < ROUTE  fromNode='RepeaterBuoyControlScript' fromField='beamRotation' toNode='BeamCylinderRotation' toField='set_rotation'/>
257                           < ROUTE  fromNode='RepeaterBuoyControlScript' fromField='activeDuration' toNode='BeamCylinderAnimation' toField='cycleInterval'/>
258                      </Group>
259                 </ProtoBody>
260            </ProtoDeclare>
261            <!-- ==================== -->
262            <!-- Viewable geometry for this scene is anchored text that links to an example showing ExternProtoDeclare usage of a SeaWeb buoy. -->
263            <WorldInfo info='"A SeaWeb buoy."' title='SeaWebBuoyPrototype'/>
264            <Viewpoint description='SeaWebBuoy prototype definition' position='0 0 15'/>
265            <Transform translation='-3 0 0'>
266                 <Anchor description='SeaWeb buoy example'   url=' "SeaWebBuoyExample.x3d" "https://savage.nps.edu/Savage/CommunicationsAndSensors/SeaWeb/SeaWebBuoyExample.x3d" "SeaWebBuoyExample.wrl" "https://savage.nps.edu/Savage/CommunicationsAndSensors/SeaWeb/SeaWebBuoyExample.wrl" '>
267                      <Shape>
268                           <Appearance>
269                                <Material diffuseColor='0 1 1' emissiveColor='0 1 1'/>
270                           </Appearance>
271                           <Text string='"SeaWebBuoyPrototype" "is a Prototype definition file." "" "To see an example scene" "click this text and view" "SeaWebBuoyExample."'>
272                                <FontStyle justify='"MIDDLE" "MIDDLE"'/>
273                           </Text>
274                      </Shape>
275                 </Anchor>
276            </Transform>
277            <Transform translation='5 0 0'>
278                 <ProtoInstance name='SeaWebBuoy'>
279                      <fieldValue name='description' value='Example buoy'/>
280                 </ProtoInstance>
281            </Transform>
282       </Scene>
283  </X3D>
<!--

<!--
Event Graph ROUTE Table shows event connections.
-->
<!-- to top Index for DEF nodes: AcousticTransmissionCylinderInstance, BeamCylinderAnimation, BeamCylinderInstance, BeamCylinderInterpolator, BeamCylinderRotation, BuoyGeometrySwitch, DelayTimer, FlyingTextInstance, FlyingTextTransform, RacomBuoy, RepeaterBuoyControlScript, RepeaterBuoyTransform, SeaWebBuoyViewpoint, TelesonarRepeater, TextLabel, TextLabelTransform, TransmissionGeometrySwitch

Index for Viewpoint nodes: Viewpoint_1, Viewpoint_2, SeaWebBuoyViewpoint

Index for ExternProtoDeclare definitions: AcousticTransmissionCylinder, BeamCylinder, FlyingText, TimeDelaySensor

Index for ProtoDeclare definition: SeaWebBuoy
-->
X3D Tooltips element index: Anchor, Appearance, Billboard, connect, ExternProtoDeclare, field, fieldValue, FontStyle, Group, head, Inline, IS, Material, meta, ProtoBody, ProtoDeclare, ProtoInstance, ProtoInterface, ROUTE, ScalarInterpolator, Scene, Script, Shape, Switch, Text, TimeSensor, Transform, Viewpoint, WorldInfo, X3D, plus documentation for accessType definitions, type definitions, XML data types, and field types

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

     
The following ROUTE chain begins an event-routing loop! Loop occurs at nodeDepth=3.
 
ROUTE RepeaterBuoyControlScript.activationTime TO DelayTimer.startTime
RepeaterBuoyControlScript
Script
activationTime
SFTime
→
ROUTE
event to
(1)
DelayTimer
ProtoInstance
startTime
SFTime
then
 
 
 
DelayTimer
ProtoInstance
delayCompleteTime
SFTime
→
ROUTE
event to
(2)
RepeaterBuoyControlScript
Script
delayCompleted
SFTime
then
 
 
 
RepeaterBuoyControlScript
Script
activationTime
SFTime
→
ROUTE
event to
(3)
DelayTimer
ProtoInstance
startTime
SFTime
then
 
 
 
DelayTimer
ProtoInstance
delayCompleteTime
SFTime
→
ROUTE
event to
(4)
RepeaterBuoyControlScript
Script
delayCompleted
SFTime
then
 
 
 
RepeaterBuoyControlScript
Script
activationTime
SFTime
→
ROUTE
event to
(5)
DelayTimer
ProtoInstance
startTime
SFTime
then
 
 
 
DelayTimer
ProtoInstance
delayCompleteTime
SFTime
→
ROUTE
event to
(6)
RepeaterBuoyControlScript
Script
delayCompleted
SFTime
then
 
 
 
RepeaterBuoyControlScript
Script
activationTime
SFTime
→
ROUTE
event to
(7)
DelayTimer
ProtoInstance
startTime
SFTime
then
 
 
 
DelayTimer
ProtoInstance
delayCompleteTime
SFTime
→
ROUTE
event to
(8)
RepeaterBuoyControlScript
Script
delayCompleted
SFTime
  then
 
 
 
DelayTimer
ProtoInstance
delayCompleteTime
SFTime
→
ROUTE
event to
(8)
BeamCylinderAnimation
TimeSensor
set_startTime
SFTime
  then
 
 
 
RepeaterBuoyControlScript
Script
activationTime
SFTime
→
ROUTE
event to
(7)
FlyingTextInstance
ProtoInstance
set_startTime
SFTime
  then
 
 
 
RepeaterBuoyControlScript
Script
activeDuration
SFTime
→
ROUTE
event to
(7)
BeamCylinderAnimation
TimeSensor
cycleInterval
SFTime
then
 
 
 
BeamCylinderAnimation
TimeSensor
fraction_changed
SFFloat
→
ROUTE
event to
(8)
BeamCylinderInterpolator
ScalarInterpolator
set_fraction
SFFloat
  then
 
 
 
RepeaterBuoyControlScript
Script
beamRotation
SFRotation
→
ROUTE
event to
(7)
BeamCylinderRotation
Transform
set_rotation
SFRotation
  then
 
 
 
RepeaterBuoyControlScript
Script
propagationDistance
SFFloat
→
ROUTE
event to
(7)
AcousticTransmissionCylinderInstance
ProtoInstance
set_range
SFFloat
  then
 
 
 
DelayTimer
ProtoInstance
delayCompleteTime
SFTime
→
ROUTE
event to
(6)
BeamCylinderAnimation
TimeSensor
set_startTime
SFTime
then
 
 
 
BeamCylinderAnimation
TimeSensor
fraction_changed
SFFloat
→
ROUTE
event to
(7)
BeamCylinderInterpolator
ScalarInterpolator
set_fraction
SFFloat
then
 
 
 
BeamCylinderInterpolator
ScalarInterpolator
value_changed
SFFloat
→
ROUTE
event to
(8)
BeamCylinderInstance
ProtoInstance
range
SFFloat
  then
 
 
 
RepeaterBuoyControlScript
Script
activationTime
SFTime
→
ROUTE
event to
(5)
FlyingTextInstance
ProtoInstance
set_startTime
SFTime
  then
 
 
 
RepeaterBuoyControlScript
Script
activeDuration
SFTime
→
ROUTE
event to
(5)
BeamCylinderAnimation
TimeSensor
cycleInterval
SFTime
then
 
 
 
BeamCylinderAnimation
TimeSensor
fraction_changed
SFFloat
→
ROUTE
event to
(6)
BeamCylinderInterpolator
ScalarInterpolator
set_fraction
SFFloat
then
 
 
 
BeamCylinderInterpolator
ScalarInterpolator
value_changed
SFFloat
→
ROUTE
event to
(7)
BeamCylinderInstance
ProtoInstance
range
SFFloat
  then
 
 
 
RepeaterBuoyControlScript
Script
beamRotation
SFRotation
→
ROUTE
event to
(5)
BeamCylinderRotation
Transform
set_rotation
SFRotation
  then
 
 
 
RepeaterBuoyControlScript
Script
propagationDistance
SFFloat
→
ROUTE
event to
(5)
AcousticTransmissionCylinderInstance
ProtoInstance
set_range
SFFloat
  then
 
 
 
DelayTimer
ProtoInstance
delayCompleteTime
SFTime
→
ROUTE
event to
(4)
BeamCylinderAnimation
TimeSensor
set_startTime
SFTime
then
 
 
 
BeamCylinderAnimation
TimeSensor
fraction_changed
SFFloat
→
ROUTE
event to
(5)
BeamCylinderInterpolator
ScalarInterpolator
set_fraction
SFFloat
then
 
 
 
BeamCylinderInterpolator
ScalarInterpolator
value_changed
SFFloat
→
ROUTE
event to
(6)
BeamCylinderInstance
ProtoInstance
range
SFFloat
  then
 
 
 
RepeaterBuoyControlScript
Script
activationTime
SFTime
→
ROUTE
event to
(3)
FlyingTextInstance
ProtoInstance
set_startTime
SFTime
  then
 
 
 
RepeaterBuoyControlScript
Script
activeDuration
SFTime
→
ROUTE
event to
(3)
BeamCylinderAnimation
TimeSensor
cycleInterval
SFTime
then
 
 
 
BeamCylinderAnimation
TimeSensor
fraction_changed
SFFloat
→
ROUTE
event to
(4)
BeamCylinderInterpolator
ScalarInterpolator
set_fraction
SFFloat
then
 
 
 
BeamCylinderInterpolator
ScalarInterpolator
value_changed
SFFloat
→
ROUTE
event to
(5)
BeamCylinderInstance
ProtoInstance
range
SFFloat
  then
 
 
 
RepeaterBuoyControlScript
Script
beamRotation
SFRotation
→
ROUTE
event to
(3)
BeamCylinderRotation
Transform
set_rotation
SFRotation
  then
 
 
 
RepeaterBuoyControlScript
Script
propagationDistance
SFFloat
→
ROUTE
event to
(3)
AcousticTransmissionCylinderInstance
ProtoInstance
set_range
SFFloat
  then
 
 
 
DelayTimer
ProtoInstance
delayCompleteTime
SFTime
→
ROUTE
event to
(2)
BeamCylinderAnimation
TimeSensor
set_startTime
SFTime
then
 
 
 
BeamCylinderAnimation
TimeSensor
fraction_changed
SFFloat
→
ROUTE
event to
(3)
BeamCylinderInterpolator
ScalarInterpolator
set_fraction
SFFloat
then
 
 
 
BeamCylinderInterpolator
ScalarInterpolator
value_changed
SFFloat
→
ROUTE
event to
(4)
BeamCylinderInstance
ProtoInstance
range
SFFloat
RepeaterBuoyControlScript
Script
activationTime
SFTime
→
ROUTE
event to
(1)
FlyingTextInstance
ProtoInstance
set_startTime
SFTime
RepeaterBuoyControlScript
Script
propagationDistance
SFFloat
→
ROUTE
event to
(1)
AcousticTransmissionCylinderInstance
ProtoInstance
set_range
SFFloat
RepeaterBuoyControlScript
Script
beamRotation
SFRotation
→
ROUTE
event to
(1)
BeamCylinderRotation
Transform
set_rotation
SFRotation
RepeaterBuoyControlScript
Script
activeDuration
SFTime
→
ROUTE
event to
(1)
BeamCylinderAnimation
TimeSensor
cycleInterval
SFTime
then
 
 
 
BeamCylinderAnimation
TimeSensor
fraction_changed
SFFloat
→
ROUTE
event to
(2)
BeamCylinderInterpolator
ScalarInterpolator
set_fraction
SFFloat
then
 
 
 
BeamCylinderInterpolator
ScalarInterpolator
value_changed
SFFloat
→
ROUTE
event to
(3)
BeamCylinderInstance
ProtoInstance
range
SFFloat

line 278
ProtoInstance
SeaWebBuoy
No ROUTE connection found for output events from this node.
This ProtoInstance contains SFNode/MFNode fieldValue declarations with
direct access to other nodes, and thus has potential to produce run-time animation. 

      AcousticTransmissionCylinderInstance
ProtoInstance
AcousticTransmissionCylinder
No ROUTE connection found for output events from this node.
This ProtoInstance contains SFNode/MFNode fieldValue declarations with
direct access to other nodes, and thus has potential to produce run-time animation. 

      BeamCylinderInstance
ProtoInstance
BeamCylinder
No ROUTE connection found for output events from this node.
This ProtoInstance contains SFNode/MFNode fieldValue declarations with
direct access to other nodes, and thus has potential to produce run-time animation. 

     
The following ROUTE chain begins an event-routing loop! Loop occurs at nodeDepth=3.
 
ROUTE DelayTimer.delayCompleteTime TO RepeaterBuoyControlScript.delayCompleted
DelayTimer
ProtoInstance
delayCompleteTime
SFTime
→
ROUTE
event to
(1)
RepeaterBuoyControlScript
Script
delayCompleted
SFTime
then
 
 
 
RepeaterBuoyControlScript
Script
activationTime
SFTime
→
ROUTE
event to
(2)
DelayTimer
ProtoInstance
startTime
SFTime
then
 
 
 
DelayTimer
ProtoInstance
delayCompleteTime
SFTime
→
ROUTE
event to
(3)
RepeaterBuoyControlScript
Script
delayCompleted
SFTime
then
 
 
 
RepeaterBuoyControlScript
Script
activationTime
SFTime
→
ROUTE
event to
(4)
DelayTimer
ProtoInstance
startTime
SFTime
then
 
 
 
DelayTimer
ProtoInstance
delayCompleteTime
SFTime
→
ROUTE
event to
(5)
RepeaterBuoyControlScript
Script
delayCompleted
SFTime
then
 
 
 
RepeaterBuoyControlScript
Script
activationTime
SFTime
→
ROUTE
event to
(6)
DelayTimer
ProtoInstance
startTime
SFTime
then
 
 
 
DelayTimer
ProtoInstance
delayCompleteTime
SFTime
→
ROUTE
event to
(7)
RepeaterBuoyControlScript
Script
delayCompleted
SFTime
then
 
 
 
RepeaterBuoyControlScript
Script
activationTime
SFTime
→
ROUTE
event to
(8)
DelayTimer
ProtoInstance
startTime
SFTime
  then
 
 
 
RepeaterBuoyControlScript
Script
activationTime
SFTime
→
ROUTE
event to
(8)
FlyingTextInstance
ProtoInstance
set_startTime
SFTime
  then
 
 
 
RepeaterBuoyControlScript
Script
activeDuration
SFTime
→
ROUTE
event to
(8)
BeamCylinderAnimation
TimeSensor
cycleInterval
SFTime
  then
 
 
 
RepeaterBuoyControlScript
Script
beamRotation
SFRotation
→
ROUTE
event to
(8)
BeamCylinderRotation
Transform
set_rotation
SFRotation
  then
 
 
 
RepeaterBuoyControlScript
Script
propagationDistance
SFFloat
→
ROUTE
event to
(8)
AcousticTransmissionCylinderInstance
ProtoInstance
set_range
SFFloat
  then
 
 
 
DelayTimer
ProtoInstance
delayCompleteTime
SFTime
→
ROUTE
event to
(7)
BeamCylinderAnimation
TimeSensor
set_startTime
SFTime
then
 
 
 
BeamCylinderAnimation
TimeSensor
fraction_changed
SFFloat
→
ROUTE
event to
(8)
BeamCylinderInterpolator
ScalarInterpolator
set_fraction
SFFloat
  then
 
 
 
RepeaterBuoyControlScript
Script
activationTime
SFTime
→
ROUTE
event to
(6)
FlyingTextInstance
ProtoInstance
set_startTime
SFTime
  then
 
 
 
RepeaterBuoyControlScript
Script
activeDuration
SFTime
→
ROUTE
event to
(6)
BeamCylinderAnimation
TimeSensor
cycleInterval
SFTime
then
 
 
 
BeamCylinderAnimation
TimeSensor
fraction_changed
SFFloat
→
ROUTE
event to
(7)
BeamCylinderInterpolator
ScalarInterpolator
set_fraction
SFFloat
then
 
 
 
BeamCylinderInterpolator
ScalarInterpolator
value_changed
SFFloat
→
ROUTE
event to
(8)
BeamCylinderInstance
ProtoInstance
range
SFFloat
  then
 
 
 
RepeaterBuoyControlScript
Script
beamRotation
SFRotation
→
ROUTE
event to
(6)
BeamCylinderRotation
Transform
set_rotation
SFRotation
  then
 
 
 
RepeaterBuoyControlScript
Script
propagationDistance
SFFloat
→
ROUTE
event to
(6)
AcousticTransmissionCylinderInstance
ProtoInstance
set_range
SFFloat
  then
 
 
 
DelayTimer
ProtoInstance
delayCompleteTime
SFTime
→
ROUTE
event to
(5)
BeamCylinderAnimation
TimeSensor
set_startTime
SFTime
then
 
 
 
BeamCylinderAnimation
TimeSensor
fraction_changed
SFFloat
→
ROUTE
event to
(6)
BeamCylinderInterpolator
ScalarInterpolator
set_fraction
SFFloat
then
 
 
 
BeamCylinderInterpolator
ScalarInterpolator
value_changed
SFFloat
→
ROUTE
event to
(7)
BeamCylinderInstance
ProtoInstance
range
SFFloat
  then
 
 
 
RepeaterBuoyControlScript
Script
activationTime
SFTime
→
ROUTE
event to
(4)
FlyingTextInstance
ProtoInstance
set_startTime
SFTime
  then
 
 
 
RepeaterBuoyControlScript
Script
activeDuration
SFTime
→
ROUTE
event to
(4)
BeamCylinderAnimation
TimeSensor
cycleInterval
SFTime
then
 
 
 
BeamCylinderAnimation
TimeSensor
fraction_changed
SFFloat
→
ROUTE
event to
(5)
BeamCylinderInterpolator
ScalarInterpolator
set_fraction
SFFloat
then
 
 
 
BeamCylinderInterpolator
ScalarInterpolator
value_changed
SFFloat
→
ROUTE
event to
(6)
BeamCylinderInstance
ProtoInstance
range
SFFloat
  then
 
 
 
RepeaterBuoyControlScript
Script
beamRotation
SFRotation
→
ROUTE
event to
(4)
BeamCylinderRotation
Transform
set_rotation
SFRotation
  then
 
 
 
RepeaterBuoyControlScript
Script
propagationDistance
SFFloat
→
ROUTE
event to
(4)
AcousticTransmissionCylinderInstance
ProtoInstance
set_range
SFFloat
  then
 
 
 
DelayTimer
ProtoInstance
delayCompleteTime
SFTime
→
ROUTE
event to
(3)
BeamCylinderAnimation
TimeSensor
set_startTime
SFTime
then
 
 
 
BeamCylinderAnimation
TimeSensor
fraction_changed
SFFloat
→
ROUTE
event to
(4)
BeamCylinderInterpolator
ScalarInterpolator
set_fraction
SFFloat
then
 
 
 
BeamCylinderInterpolator
ScalarInterpolator
value_changed
SFFloat
→
ROUTE
event to
(5)
BeamCylinderInstance
ProtoInstance
range
SFFloat
  then
 
 
 
RepeaterBuoyControlScript
Script
activationTime
SFTime
→
ROUTE
event to
(2)
FlyingTextInstance
ProtoInstance
set_startTime
SFTime
  then
 
 
 
RepeaterBuoyControlScript
Script
activeDuration
SFTime
→
ROUTE
event to
(2)
BeamCylinderAnimation
TimeSensor
cycleInterval
SFTime
then
 
 
 
BeamCylinderAnimation
TimeSensor
fraction_changed
SFFloat
→
ROUTE
event to
(3)
BeamCylinderInterpolator
ScalarInterpolator
set_fraction
SFFloat
then
 
 
 
BeamCylinderInterpolator
ScalarInterpolator
value_changed
SFFloat
→
ROUTE
event to
(4)
BeamCylinderInstance
ProtoInstance
range
SFFloat
  then
 
 
 
RepeaterBuoyControlScript
Script
beamRotation
SFRotation
→
ROUTE
event to
(2)
BeamCylinderRotation
Transform
set_rotation
SFRotation
  then
 
 
 
RepeaterBuoyControlScript
Script
propagationDistance
SFFloat
→
ROUTE
event to
(2)
AcousticTransmissionCylinderInstance
ProtoInstance
set_range
SFFloat
DelayTimer
ProtoInstance
delayCompleteTime
SFTime
→
ROUTE
event to
(1)
BeamCylinderAnimation
TimeSensor
set_startTime
SFTime
then
 
 
 
BeamCylinderAnimation
TimeSensor
fraction_changed
SFFloat
→
ROUTE
event to
(2)
BeamCylinderInterpolator
ScalarInterpolator
set_fraction
SFFloat
then
 
 
 
BeamCylinderInterpolator
ScalarInterpolator
value_changed
SFFloat
→
ROUTE
event to
(3)
BeamCylinderInstance
ProtoInstance
range
SFFloat

      FlyingTextInstance
ProtoInstance
FlyingText
No ROUTE connection found for output events from this node.
This ProtoInstance contains SFNode/MFNode fieldValue declarations with
direct access to other nodes, and thus has potential to produce run-time animation. 

line 266
Anchor
description='SeaWeb buoy example' 
User-interaction hint for this node. 

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://savage.nps.edu/Savage/CommunicationsAndSensors/SeaWeb/SeaWebBuoyPrototypeIndex.html -->
<!-- Version control at
https://gitlab.nps.edu/Savage/Savage/CommunicationsAndSensors/SeaWeb/SeaWebBuoyPrototype.x3d -->

<!-- Color-coding 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. -->