| 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://www.web3d.org/x3d/content/examples/Savage/CommunicationsAndSensors/SeaWeb/SeaWebBuoyPrototype.x3d '/> |
| 12 | <meta name='generator' content='X3D-Edit 3.2, https://www.web3d.org/x3d/tools/X3D-Edit'/> |
| 13 | <meta name='license' content='../../license.html'/> |
| 14 | </head> |
| 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://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='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://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='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://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='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://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='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://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='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 | |
| 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 |
<!-- ROUTE information for RepeaterBuoyControlScript node:
[from DelayTimer.delayCompleteTime to delayCompleted
]
[from activationTime to DelayTimer.startTime
]
[from activationTime to FlyingTextInstance.set_startTime
]
[from propagationDistance to AcousticTransmissionCylinderInstance.set_range
]
[from beamRotation to BeamCylinderRotation.set_rotation
]
[from activeDuration to BeamCylinderAnimation.cycleInterval
]
-->
<Script DEF='RepeaterBuoyControlScript' directOutput='true'> |
| 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://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 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 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.
| 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. |
|
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. |
<!--
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>
-->
<!--
For additional help information about X3D scenes, please see X3D Tooltips, X3D Resources, and X3D Scene Authoring Hints.
-->