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='titlecontent=' SeaWebBuoyPrototype.x3d '/>
  6            <meta name='descriptioncontent='A prototype of a SeaWeb buoy.'/>
  7            <meta name='creatorcontent='Oliver Tan and Don Brutzman'/>
  8            <meta name='createdcontent='3 June 2004'/>
  9            <meta name='modifiedcontent='2 January 2025'/>
 10            <meta name='subjectcontent='Buoy, SeaWeb'/>
 11            <meta name='identifiercontent=' https://www.web3d.org/x3d/content/examples/Savage/CommunicationsAndSensors/SeaWeb/SeaWebBuoyPrototype.x3d '/>
 12            <meta name='generatorcontent='X3D-Edit 3.2, https://www.web3d.org/x3d/tools/X3D-Edit'/>
 13            <meta name='licensecontent='../../license.html'/>
 14       </head>
<!--

<!--
Event Graph ROUTE Table shows event connections.
-->
<!-- to top DEF nodes index: 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='AcousticTransmissionCylinderappinfo='AcousticTransmissionCylinder visualizes the pulse width of cylindrical propagation with has a receding inner radius and a (maximum outer radius .'   url=' "AcousticTransmissionCylinderPrototype.x3d#AcousticTransmissionCylinder" "https://www.web3d.org/x3d/content/examples/Savage/CommunicationsAndSensors/SeaWeb/AcousticTransmissionCylinderPrototype.x3d#AcousticTransmissionCylinder" "AcousticTransmissionCylinderPrototype.wrl#AcousticTransmissionCylinder" "https://www.web3d.org/x3d/content/examples/Savage/CommunicationsAndSensors/SeaWeb/AcousticTransmissionCylinderPrototype.wrl#AcousticTransmissionCylinder" '>
 17                 <field name='startTransmissiontype='SFBoolaccessType='inputOnly'
                appinfo='Upon receipt of a boolean true event start a single (not continuous) transmission'/>
 18                 <field name='startContinuousTransmissionstype='SFBoolaccessType='inputOnly'
                appinfo='Upon receipt of a boolean true event start continuous transmissions'/>
 19                 <field name='set_rangetype='SFFloataccessType='inputOnly'
                appinfo='Propagation range in meters'/>
 20                 <field name='defaultRangetype='SFFloataccessType='initializeOnly'
                appinfo='Default propagation range in meters'/>
 21                 <field name='transmissionPropagationSpeedtype='SFFloataccessType='initializeOnly'
                appinfo='Speed in meters / second'/>
 22                 <field name='set_transmissionDurationtype='SFFloataccessType='inputOnly'
                appinfo='Duration in seconds'/>
 23                 <field name='transmissionDurationtype='SFFloataccessType='initializeOnly'
                appinfo='Duration in seconds'/>
 24                 <field name='heighttype='SFFloataccessType='initializeOnly'
                appinfo='Height of cylinder in meters'/>
 25                 <field name='set_colortype='SFColoraccessType='inputOnly'
                appinfo='Color of cylinder'/>
 26                 <field name='colortype='SFColoraccessType='initializeOnly'
                appinfo='Default color of cylinder'/>
 27                 <field name='traceEnabledtype='SFBoolaccessType='initializeOnly'/>
 28                 <field name='beamCounttype='SFInt32accessType='initializeOnly'
                appinfo='number of segmented sections in 360-degree cylindrical beam'/>
 29                 <field name='set_beamCounttype='SFInt32accessType='inputOnly'
                appinfo='Number of segmented sections in 360-degree cylindrical beam'/>
 30            </ExternProtoDeclare>
 31            <ExternProtoDeclare name='BeamCylinderappinfo='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://www.web3d.org/x3d/content/examples/Savage/CommunicationsAndSensors/Beam/BeamCylinderPrototype.x3d#BeamCylinder" "../../CommunicationsAndSensors/Beam/BeamCylinderPrototype.wrl#BeamCylinder" "https://www.web3d.org/x3d/content/examples/Savage/CommunicationsAndSensors/Beam/BeamCylinderPrototype.wrl#BeamCylinder" '>
 32                 <field name='contacttype='SFBoolaccessType='inputOnly'
                appinfo='(communications) is transmitted signal in contact with receiver or (sensor) is a target return detected?'/>
 33                 <field name='rangetype='SFFloataccessType='inputOnly'
                appinfo='distance in meters along x axis'/>
 34                 <field name='defaultRangetype='SFFloataccessType='initializeOnly'
                appinfo='distance in meters used until eventIn range sent'/>
 35                 <field name='wireframetype='SFBoolaccessType='initializeOnly'
                appinfo='whether wireframe beam is drawn'/>
 36                 <field name='solidtype='SFBoolaccessType='initializeOnly'
                appinfo='whether solid beam is drawn'/>
 37                 <field name='beamHeighttype='SFFloataccessType='initializeOnly'
                appinfo='meters across vertical y axis'/>
 38                 <field name='beamWidthtype='SFFloataccessType='initializeOnly'
                appinfo='meters across horizontal z axis'/>
 39                 <field name='contactColortype='SFColoraccessType='initializeOnly'
                appinfo='rendering color when contact=true'/>
 40                 <field name='noContactColortype='SFColoraccessType='initializeOnly'
                appinfo='rendering color when contact=false'/>
 41                 <field name='transparencytype='SFFloataccessType='inputOutput'
                appinfo='1 = fully transparent wireframe only'/>
 42            </ExternProtoDeclare>
 43            <ExternProtoDeclare name='FlyingTextappinfo='Visualize message transfer between two points as flying text'   url=' "../../../Savage/Tools/Animation/FlyingTextPrototype.x3d#FlyingText" "https://www.web3d.org/x3d/content/examples/Savage/Tools/Animation/FlyingTextPrototype.x3d#FlyingText" "../../../Savage/Tools/Animation/FlyingTextPrototype.wrl#FlyingText" "https://www.web3d.org/x3d/content/examples/Savage/Tools/Animation/FlyingTextPrototype.wrl#FlyingText" '>
 44                 <field name='waypointstype='MFVec3faccessType='initializeOnly'/>
 45                 <field name='set_waypointstype='MFVec3faccessType='inputOnly'/>
 46                 <field name='timeIntervalstype='MFTimeaccessType='initializeOnly'/>
 47                 <field name='set_timeIntervalstype='MFTimeaccessType='inputOnly'/>
 48                 <field name='textMessagetype='MFStringaccessType='initializeOnly'/>
 49                 <field name='set_textMessagetype='MFStringaccessType='inputOnly'/>
 50                 <field name='visibletype='SFBoolaccessType='initializeOnly'/>
 51                 <field name='set_visibletype='SFBoolaccessType='inputOnly'/>
 52                 <field name='looptype='SFBoolaccessType='initializeOnly'/>
 53                 <field name='axisOfRotationtype='SFVec3faccessType='initializeOnly'/>
 54                 <field name='timeSensorEnabledtype='SFBoolaccessType='initializeOnly'/>
 55                 <field name='startTimetype='SFTimeaccessType='inputOutput'/>
 56                 <field name='set_startTimetype='SFTimeaccessType='inputOnly'/>
 57                 <field name='stopTimetype='SFTimeaccessType='inputOutput'/>
 58                 <field name='set_stopTimetype='SFTimeaccessType='inputOnly'/>
 59                 <field name='traceEnabledtype='SFBoolaccessType='initializeOnly'/>
 60                 <field name='textDiffuseColortype='SFColoraccessType='inputOutput'/>
 61                 <field name='fontStyletype='SFNodeaccessType='inputOutput'/>
 62            </ExternProtoDeclare>
 63            <ExternProtoDeclare name='TimeDelaySensorappinfo='TimeSensor functionality commences after delayInterval pause'   url=' "../../../Savage/Tools/Animation/TimeDelaySensorPrototype.x3d#TimeDelaySensor" "https://www.web3d.org/x3d/content/examples/Savage/Tools/Animation/TimeDelaySensorPrototype.x3d#TimeDelaySensor" "../../../Savage/Tools/Animation/TimeDelaySensorPrototype.wrl#TimeDelaySensor" "https://www.web3d.org/x3d/content/examples/Savage/Tools/Animation/TimeDelaySensorPrototype.wrl#TimeDelaySensor" '>
 64                 <field name='startTimetype='SFTimeaccessType='inputOutput'/>
 65                 <field name='enabledtype='SFBoolaccessType='inputOutput'/>
 66                 <field name='delayIntervaltype='SFTimeaccessType='inputOutput'
                appinfo='seconds'/>
 67                 <field name='delayCompleteTimetype='SFTimeaccessType='outputOnly'/>
 68                 <field name='traceEnabledtype='SFBoolaccessType='initializeOnly'/>
 69            </ExternProtoDeclare>
 70            <ProtoDeclare name='SeaWebBuoyappinfo='SeaWeb acoustic-radio gateway communications buoy'>
 71                 <ProtoInterface>
 72                      <field name='set_positiontype='SFVec3faccessType='inputOnly'
                     appinfo='Position of buoy.'/>
 73                      <field name='positiontype='SFVec3fvalue='0 0 0accessType='initializeOnly'
                     appinfo='Position of buoy.'/>
 74                      <field name='set_targetPositiontype='SFVec3faccessType='inputOnly'
                     appinfo='Position of target of transmission.'/>
 75                      <field name='targetPositiontype='SFVec3fvalue='0 0 0accessType='initializeOnly'
                     appinfo='Position of target of transmission.'/>
 76                      <field name='set_targetIdNumbertype='SFInt32accessType='inputOnly'
                     appinfo='Id number of target.'/>
 77                      <field name='targetIdNumbertype='SFInt32value='-1accessType='initializeOnly'
                     appinfo='Id number of target.'/>
 78                      <field name='set_enabledtype='SFBoolaccessType='inputOnly'
                     appinfo='Enable buoy for transmission.'/>
 79                      <field name='enabledtype='SFBoolvalue='trueaccessType='initializeOnly'
                     appinfo='Enable buoy for transmission.'/>
 80                      <field name='set_activatedtype='SFBoolaccessType='inputOnly'
                     appinfo='Start transmission.'/>
 81                      <field name='activatedtype='SFBoolvalue='falseaccessType='initializeOnly'
                     appinfo='Start transmission.'/>
 82                      <field name='set_transmissionDurationtype='SFFloataccessType='inputOnly'
                     appinfo='Duration in seconds needed to transmit message (does not include transmissionTimeDelay or propagation delay).'/>
 83                      <field name='transmissionDurationtype='SFFloatvalue='5accessType='initializeOnly'
                     appinfo='Duration in seconds needed to transmit message (does not include transmissionTimeDelay or propagation delay).'/>
 84                      <field name='set_transmissionTimeDelaytype='SFTimeaccessType='inputOnly'
                     appinfo='Time delay before transmission begins.'/>
 85                      <field name='transmissionTimeDelaytype='SFTimevalue='2accessType='initializeOnly'
                     appinfo='Time delay before transmission begins.'/>
 86                      <field name='set_directionalTransmissiontype='SFBoolaccessType='inputOnly'
                     appinfo='Select between directional (true) or omni-directional (false) transmission.'/>
 87                      <field name='directionalTransmissiontype='SFBoolvalue='falseaccessType='initializeOnly'
                     appinfo='Select between directional (true) or omni-directional (false) transmission.'/>
 88                      <field name='set_buoyTypetype='SFStringaccessType='inputOnly'
                     appinfo='Determine which buoy type to use. "Racom" for Racom Buoy. "Telesonar" for Telesonar Repeater.'/>
 89                      <field name='buoyTypetype='SFStringvalue='RacomaccessType='initializeOnly'
                     appinfo='Determine which buoy type to use. "Racom" for Racom Buoy. "Telesonar" for Telesonar Repeater.'/>
 90                      <field name='set_soundSpeedInWatertype='SFFloataccessType='inputOnly'
                     appinfo='Sound speed in water default value 1500 m/s'/>
 91                      <field name='soundSpeedInWatertype='SFFloatvalue='1500accessType='initializeOnly'
                     appinfo='Sound speed in water default value 1500 m/s'/>
 92                      <field name='set_textMessagetype='MFStringaccessType='inputOnly'/>
 93                      <field name='textMessagetype='MFStringaccessType='initializeOnly'/>
 94                      <field name='textMessageColortype='SFColorvalue='0.1 0.7 0.7accessType='inputOutput'/>
 95                      <field name='set_descriptiontype='SFStringaccessType='inputOnly'/>
 96                      <field name='descriptiontype='SFStringvalue='SeaWeb BuoyaccessType='initializeOnly'/>
 97                      <field name='traceEnabledtype='SFBoolvalue='falseaccessType='initializeOnly'/>
 98                 </ProtoInterface>
 99                 <ProtoBody>
100                      <Group>
101 
                         <!-- Viewpoint SeaWebBuoyViewpoint is a DEF node that has 1 USE node: USE_1 -->
                         <Viewpoint DEF='SeaWebBuoyViewpointdescription='SeaWeb Buoyposition='0 0 15'/>
102                           <Transform DEF='RepeaterBuoyTransform'>
103                                <IS>
104                                     <connect nodeField='set_translationprotoField='set_position'/>
105                                     <connect nodeField='translationprotoField='position'/>
106                                </IS>
107 
                              <!-- Switch BuoyGeometrySwitch is a DEF node that has 1 USE node: USE_1 -->
                              <Switch DEF='BuoyGeometrySwitchwhichChoice='0'>
108                                     <Inline DEF='RacomBuoy'   url=' "RacomBuoy.x3d" "../../../Savage/CommunicationsAndSensors/SeaWeb/RacomBuoy.x3d" "https://www.web3d.org/x3d/content/examples/Savage/CommunicationsAndSensors/SeaWeb/RacomBuoy.x3d" "RacomBuoy.wrl" "../../../Savage/CommunicationsAndSensors/SeaWeb/RacomBuoy.wrl" "https://www.web3d.org/x3d/content/examples/Savage/CommunicationsAndSensors/SeaWeb/RacomBuoy.wrl" '/>
109                                     <Transform translation='0 -7 0'>
110                                          <Inline DEF='TelesonarRepeater'   url=' "TelesonarRepeater.x3d" "../../../Savage/CommunicationsAndSensors/SeaWeb/TelesonarRepeater.x3d" "https://www.web3d.org/x3d/content/examples/Savage/CommunicationsAndSensors/SeaWeb/TelesonarRepeater.x3d" "TelesonarRepeater.wrl" "../../../Savage/CommunicationsAndSensors/SeaWeb/TelesonarRepeater.wrl" "https://www.web3d.org/x3d/content/examples/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='TransmissionGeometrySwitchwhichChoice='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='AcousticTransmissionCylinderDEF='AcousticTransmissionCylinderInstance'>
115                                          <fieldValue name='defaultRangevalue='1000'/>
116                                          <fieldValue name='transmissionPropagationSpeedvalue='1500'/>
117                                          <fieldValue name='heightvalue='1'/>
118                                          <fieldValue name='colorvalue='1 1 0.2'/>
119                                          <IS>
120                                               <connect nodeField='transmissionDurationprotoField='transmissionDuration'/>
121                                               <connect nodeField='set_transmissionDurationprotoField='set_transmissionDuration'/>
122                                               <connect nodeField='traceEnabledprotoField='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='BeamCylinderDEF='BeamCylinderInstance'>
127                                               <fieldValue name='defaultRangevalue='0'/>
128                                               <fieldValue name='beamHeightvalue='1'/>
129                                               <fieldValue name='beamWidthvalue='0.5'/>
130                                               <fieldValue name='transparencyvalue='0.2'/>
131                                               <fieldValue name='wireframevalue='true'/>
132                                               <fieldValue name='solidvalue='true'/>
133                                          </ProtoInstance>
134                                     </Transform>
135                                </Switch>
136                                <Transform DEF='FlyingTextTransformtranslation='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='FlyingTextDEF='FlyingTextInstance'>
138                                          <fieldValue name='visiblevalue='false'/>
139                                          <IS>
140                                               <connect nodeField='set_textMessageprotoField='set_textMessage'/>
141                                               <connect nodeField='textMessageprotoField='textMessage'/>
142                                               <connect nodeField='textDiffuseColorprotoField='textMessageColor'/>
143                                               <connect nodeField='traceEnabledprotoField='traceEnabled'/>
144                                          </IS>
145                                     </ProtoInstance>
146                                </Transform>
147                                <Transform DEF='TextLabelTransformtranslation='0 -2 0'>
148                                     <Billboard axisOfRotation='0 0 0'>
149                                          <Shape>
150                                               <Appearance>
151                                                    <Material>
152                                                         <IS>
153                                                              <connect nodeField='diffuseColorprotoField='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='BeamCylinderInterpolatorkey='0 0.5 0.999 1keyValue='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='TimeDelaySensorDEF='DelayTimer'/>
169 
170                                <field name='set_positiontype='SFVec3faccessType='inputOnly'
                               appinfo='Position of buoy.'/>
171                                <field name='positiontype='SFVec3faccessType='initializeOnly'
                               appinfo='Position of buoy.'/>
172                                <field name='set_targetPositiontype='SFVec3faccessType='inputOnly'
                               appinfo='Position of target of transmission.'/>
173                                <field name='targetPositiontype='SFVec3faccessType='initializeOnly'
                               appinfo='Position of target of transmission.'/>
174                                <field name='targetIdNumbertype='SFInt32accessType='initializeOnly'
                               appinfo='Id number of target.'/>
175                                <field name='set_targetIdNumbertype='SFInt32accessType='inputOnly'
                               appinfo='Id number of target.'/>
176                                <field name='set_enabledtype='SFBoolaccessType='inputOnly'
                               appinfo='Enable buoy for transmission.'/>
177                                <field name='enabledtype='SFBoolaccessType='initializeOnly'
                               appinfo='Enable buoy for transmission.'/>
178                                <field name='set_activatedtype='SFBoolaccessType='inputOnly'
                               appinfo='Start transmission.'/>
179                                <field name='activatedtype='SFBoolaccessType='initializeOnly'
                               appinfo='Start transmission.'/>
180                                <field name='activationTimetype='SFTimeaccessType='outputOnly'
                               appinfo='Start transmission.'/>
181                                <field name='set_transmissionDurationtype='SFFloataccessType='inputOnly'
                               appinfo='Duration in seconds needed to transmit message'/>
182                                <field name='transmissionDurationtype='SFFloataccessType='initializeOnly'
                               appinfo='Duration in seconds needed to transmit message'/>
183                                <field name='transmissionTimeDelaytype='SFTimeaccessType='initializeOnly'
                               appinfo='Time delay before transmission begins.'/>
184                                <field name='set_transmissionTimeDelaytype='SFTimeaccessType='inputOnly'
                               appinfo='Time delay before transmission begins.'/>
185                                <field name='directionalTransmissiontype='SFBoolaccessType='initializeOnly'
                               appinfo='Select between directional (true) or omni-directional (false) transmission.'/>
186                                <field name='set_directionalTransmissiontype='SFBoolaccessType='inputOnly'
                               appinfo='Select between directional (true) or omni-directional (false) transmission.'/>
187                                <field name='delayCompletedtype='SFTimeaccessType='inputOnly'/>
188                                <field name='acousticTransmissionCylindertype='SFNodeaccessType='initializeOnly'>
189                                     <ProtoInstance USE='AcousticTransmissionCylinderInstance'/>
190                                </field>
191                                <field name='beamCylinderInterpolatortype='SFNodeaccessType='initializeOnly'>
192                                     <ScalarInterpolator USE='BeamCylinderInterpolator'/>
193                                </field>
194                                <field name='flyingTexttype='SFNodeaccessType='initializeOnly'>
195                                     <ProtoInstance USE='FlyingTextInstance'/>
196                                </field>
197                                <field name='geometrySwitchtype='SFNodeaccessType='initializeOnly'>
198                                     <Switch USE='BuoyGeometrySwitch'/>
199                                </field>
200                                <field name='transmissionGeometrySwitchtype='SFNodeaccessType='initializeOnly'>
201                                     <Switch USE='TransmissionGeometrySwitch'/>
202                                </field>
203                                <field name='delayTimertype='SFNodeaccessType='initializeOnly'>
204                                     <ProtoInstance USE='DelayTimer'/>
205                                </field>
206                                <field name='set_buoyTypetype='SFStringaccessType='inputOnly'
                               appinfo='Determine which buoy type to use. "Racom" for Racom Buoy. "Telesonar" for Telesonar Repeater.'/>
207                                <field name='buoyTypetype='SFStringaccessType='initializeOnly'
                               appinfo='Determine which buoy type to use. "Racom" for Racom Buoy. "Telesonar" for Telesonar Repeater.'/>
208                                <field name='set_soundSpeedInWatertype='SFFloataccessType='inputOnly'
                               appinfo='Sound speed in water default value 1500 m/s'/>
209                                <field name='soundSpeedInWatertype='SFFloataccessType='initializeOnly'
                               appinfo='Sound speed in water default value 1500 m/s'/>
210                                <field name='set_descriptiontype='SFStringaccessType='inputOnly'/>
211                                <field name='descriptiontype='SFStringaccessType='initializeOnly'/>
212                                <field name='propagationDistancetype='SFFloataccessType='outputOnly'/>
213                                <field name='propagationDurationtype='SFTimeaccessType='outputOnly'/>
214                                <field name='activeDurationtype='SFTimeaccessType='outputOnly'/>
215                                <field name='totalDurationtype='SFTimeaccessType='outputOnly'/>
216                                <field name='beamRotationtype='SFRotationaccessType='outputOnly'/>
217                                <field name='TextLabelNodetype='SFNodeaccessType='initializeOnly'>
218                                     <Text USE='TextLabel'/>
219                                </field>
220                                <field name='SeaWebBuoyViewpointNodetype='SFNodeaccessType='initializeOnly'>
221                                     <Viewpoint USE='SeaWebBuoyViewpoint'/>
222                                </field>
223                                <field name='traceEnabledtype='SFBoolaccessType='initializeOnly'/>
224                                <IS>
225                                     <connect nodeField='set_positionprotoField='set_position'/>
226                                     <connect nodeField='positionprotoField='position'/>
227                                     <connect nodeField='set_targetPositionprotoField='set_targetPosition'/>
228                                     <connect nodeField='targetPositionprotoField='targetPosition'/>
229                                     <connect nodeField='targetIdNumberprotoField='targetIdNumber'/>
230                                     <connect nodeField='set_targetIdNumberprotoField='set_targetIdNumber'/>
231                                     <connect nodeField='set_enabledprotoField='set_enabled'/>
232                                     <connect nodeField='enabledprotoField='enabled'/>
233                                     <connect nodeField='set_activatedprotoField='set_activated'/>
234                                     <connect nodeField='activatedprotoField='activated'/>
235                                     <connect nodeField='set_transmissionDurationprotoField='set_transmissionDuration'/>
236                                     <connect nodeField='transmissionDurationprotoField='transmissionDuration'/>
237                                     <connect nodeField='transmissionTimeDelayprotoField='transmissionTimeDelay'/>
238                                     <connect nodeField='set_transmissionTimeDelayprotoField='set_transmissionTimeDelay'/>
239                                     <connect nodeField='directionalTransmissionprotoField='directionalTransmission'/>
240                                     <connect nodeField='set_directionalTransmissionprotoField='set_directionalTransmission'/>
241                                     <connect nodeField='set_buoyTypeprotoField='set_buoyType'/>
242                                     <connect nodeField='buoyTypeprotoField='buoyType'/>
243                                     <connect nodeField='set_soundSpeedInWaterprotoField='set_soundSpeedInWater'/>
244                                     <connect nodeField='soundSpeedInWaterprotoField='soundSpeedInWater'/>
245                                     <connect nodeField='set_descriptionprotoField='set_description'/>
246                                     <connect nodeField='descriptionprotoField='description'/>
247                                     <connect nodeField='traceEnabledprotoField='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 definitionposition='0 0 15'/>
265            <Transform translation='-3 0 0'>
266                 <Anchor description='SeaWeb buoy example'   url=' "SeaWebBuoyExample.x3d" "https://www.web3d.org/x3d/content/examples/Savage/CommunicationsAndSensors/SeaWeb/SeaWebBuoyExample.x3d" "SeaWebBuoyExample.wrl" "https://www.web3d.org/x3d/content/examples/Savage/CommunicationsAndSensors/SeaWeb/SeaWebBuoyExample.wrl" '>
267                      <Shape>
268                           <Appearance>
269                                <Material diffuseColor='0 1 1emissiveColor='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='descriptionvalue='Example buoy'/>
280                 </ProtoInstance>
281            </Transform>
282       </Scene>
283  </X3D>
<!--

<!--
Event Graph ROUTE Table shows event connections.
-->
<!-- to top DEF nodes index: 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 direct ROUTE connection found for events to/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 direct ROUTE connection found for events to/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 direct ROUTE connection found for events to/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 direct ROUTE connection found for events to/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://www.web3d.org/x3d/content/examples/Savage/CommunicationsAndSensors/SeaWeb/SeaWebBuoyPrototypeIndex.html -->
<!-- Version control at
https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/content/examples/Savage/CommunicationsAndSensors/SeaWeb/SeaWebBuoyPrototype.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)
    <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. -->