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.
-->