1 |
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.0//EN" "https://www.web3d.org/specifications/x3d-3.0.dtd">
|
3 | <X3D profile='Immersive' version='3.0' xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation='https://www.web3d.org/specifications/x3d-3.0.xsd'> |
4 | <head> |
5 | <meta name='title' content='Sail.x3d'/> |
6 | <meta name='description' content='Sail of 688 Submarine with masts up'/> |
7 | <meta name='creator' content='LT Ken Curtin'/> |
8 | <meta name='created' content='4 August 2003'/> |
9 | <meta name='modified' content='28 November 2019'/> |
10 | <meta name='reference' content='http://www.fas.org/man/dod-101/sys/ship/ssn-688.htm'/> |
11 | <meta name='reference' content='http://www.combatindex.com/store/3d/ssn688_model.html'/> |
12 | <meta name='subject' content='Submarine, 688, Sail'/> |
13 | <meta name='identifier' content='https://savage.nps.edu/Savage/Submarines/SsnLosAngelesUnitedStates/Sail.x3d'/> |
14 | <meta name='generator' content='X3D-Edit 3.2, https://savage.nps.edu/X3D-Edit'/> |
15 | <meta name='license' content='../../license.html'/> |
16 | </head> |
17 | <Scene> |
18 | <WorldInfo title='Sail.x3d'/> |
19 | <ExternProtoDeclare name='HeadsUpDisplay' url=' "../../../X3dForWebAuthors/Chapter14Prototypes/HeadsUpDisplayPrototype.x3d#HeadsUpDisplay" "https://savage.nps.edu/Savage/Tools/HeadsUpDisplays/HeadsUpDisplayPrototype.x3d#HeadsUpDisplay" "../../../X3dForWebAuthors/Chapter14Prototypes/HeadsUpDisplayPrototype.wrl#HeadsUpDisplay" "https://savage.nps.edu/Savage/Tools/HeadsUpDisplays/HeadsUpDisplayPrototype.wrl#HeadsUpDisplay" '> |
20 |
<field name='children' type='MFNode' accessType='inputOutput'
appinfo='Displayed subscene positioned as a HUD.'/> |
21 |
<field name='dragChildren' type='MFNode' accessType='inputOutput'
appinfo='Additional HUD geometry which can be touched and dragged for repositioning. If this geometry goes offscreen (perhaps due to screen resizing) then it snaps back to original position.'/> |
22 |
<field name='locationOffset' type='SFVec3f' accessType='initializeOnly'
appinfo='Modified screen location and distance (for size).'/> |
23 |
<field name='traceEnabled' type='SFBool' accessType='initializeOnly'
appinfo='Enable/disable console output for troubleshooting.'/> |
24 | </ExternProtoDeclare> |
25 |
<!-- ROUTE information for UpTimer node:
[from ClickToRaiseSensor.touchTime to set_startTime
]
[from fraction_changed to RadarUp.set_fraction
]
[from fraction_changed to Scope1Up.set_fraction
]
[from fraction_changed to Scope2Up.set_fraction
]
[from fraction_changed to SnorkelUp.set_fraction
]
[from fraction_changed to BRA-34Up.set_fraction
]
[from fraction_changed to BRA-342Up.set_fraction
]
[from fraction_changed to BRD7Up.set_fraction
]
[from fraction_changed to NavIDUp.set_fraction
]
-->
<TimeSensor DEF='UpTimer' cycleInterval='4'/> |
26 |
<!-- ROUTE information for DownTimer node:
[from ClickToLowerSensor.touchTime to set_startTime
]
[from fraction_changed to RadarDown.set_fraction
]
[from fraction_changed to Scope1Down.set_fraction
]
[from fraction_changed to Scope2Down.set_fraction
]
[from fraction_changed to SnorkelDown.set_fraction
]
[from fraction_changed to BRA-34Down.set_fraction
]
[from fraction_changed to BRA-342Down.set_fraction
]
[from fraction_changed to BRD7Down.set_fraction
]
[from fraction_changed to NavIDDown.set_fraction
]
-->
<TimeSensor DEF='DownTimer' cycleInterval='4'/> |
27 | <Viewpoint description='StbdSideSail' orientation='0.351 0.933 -0.077 0.2902' position='4.3 5.4 17.8'/> |
28 | <Transform> |
29 | <Transform DEF='Bridge' translation='2.62 5.52 0'> |
30 | <Shape> |
31 | <Box size='.966 .1 1.04'/> |
32 | |
33 | <Material diffuseColor='.8 .8 .8' shininess='.8'/> |
34 | </Appearance> |
35 | </Shape> |
36 | </Transform> |
37 | <Group DEF='RadarGroup'> |
38 |
<!-- ROUTE information for MoveRadar node:
[from RadarUpAndDown.value_changed to set_translation
]
[from RadarUp.value_changed to set_translation
]
[from RadarDown.value_changed to set_translation
]
-->
<Transform DEF='MoveRadar'> |
39 | <Transform DEF='RadarTop' translation='1.74 7.52 -.276'> |
40 | <Shape> |
41 | <Box size='.276 .25 1.104'/> |
42 | |
43 | <Material diffuseColor='.1 .1 .1'/> |
44 | </Appearance> |
45 | </Shape> |
46 | </Transform> |
47 | <Transform DEF='Radar' translation='1.74 6.52 -.276'> |
48 | <Shape> |
49 | <Cylinder radius='.1'/> |
50 | <Appearance USE='Gray'/> |
51 | </Shape> |
52 | </Transform> |
53 |
<!-- ROUTE information for MoveRadarTouch node:
[from touchTime to RadarTimer.set_startTime
]
-->
<TouchSensor DEF='MoveRadarTouch' description='Touch Sensor to cycle radar'/> |
54 | <Group DEF='MoveRadarUpAndDown'> |
55 |
<!-- ROUTE information for RadarTimer node:
[from MoveRadarTouch.touchTime to set_startTime
]
[from fraction_changed to RadarUpAndDown.set_fraction
]
-->
<TimeSensor DEF='RadarTimer' cycleInterval='8'/> |
56 | < ROUTE fromNode='MoveRadarTouch' fromField='touchTime' toNode='RadarTimer' toField='set_startTime'/> |
57 |
<!-- ROUTE information for RadarUpAndDown node:
[from RadarTimer.fraction_changed to set_fraction
]
[from value_changed to MoveRadar.set_translation
]
-->
<PositionInterpolator DEF='RadarUpAndDown' key='0 .5 1' keyValue='0 0 0 0 -2.5 0 0 0 0'/> |
58 | < ROUTE fromNode='RadarTimer' fromField='fraction_changed' toNode='RadarUpAndDown' toField='set_fraction'/> |
59 | < ROUTE fromNode='RadarUpAndDown' fromField='value_changed' toNode='MoveRadar' toField='set_translation'/> |
60 | </Group> |
61 | <Group DEF='MoveRadarUp'> |
62 |
<!-- ROUTE information for RadarUp node:
[from UpTimer.fraction_changed to set_fraction
]
[from value_changed to MoveRadar.set_translation
]
-->
<PositionInterpolator DEF='RadarUp' key='0 1' keyValue='0 -2.5 0 0 0 0'/> |
63 | < ROUTE fromNode='UpTimer' fromField='fraction_changed' toNode='RadarUp' toField='set_fraction'/> |
64 | < ROUTE fromNode='RadarUp' fromField='value_changed' toNode='MoveRadar' toField='set_translation'/> |
65 | </Group> |
66 | <Group DEF='MoveRadarDown'> |
67 |
<!-- ROUTE information for RadarDown node:
[from DownTimer.fraction_changed to set_fraction
]
[from value_changed to MoveRadar.set_translation
]
-->
<PositionInterpolator DEF='RadarDown' key='0 1' keyValue='0 0 0 0 -2.5 0'/> |
68 | < ROUTE fromNode='DownTimer' fromField='fraction_changed' toNode='RadarDown' toField='set_fraction'/> |
69 | < ROUTE fromNode='RadarDown' fromField='value_changed' toNode='MoveRadar' toField='set_translation'/> |
70 | </Group> |
71 | </Transform> |
72 | </Group> |
73 | <Group DEF='Periscopes'> |
74 |
<!-- ROUTE information for MoveScope1 node:
[from Scope1UpAndDown.value_changed to set_translation
]
[from Scope1Up.value_changed to set_translation
]
[from Scope1Down.value_changed to set_translation
]
-->
<Transform DEF='MoveScope1'> |
75 |
<!-- ROUTE information for MoveScope1Sensor node:
[from touchTime to Scope1Timer.set_startTime
]
-->
<TouchSensor DEF='MoveScope1Sensor' description='Sensor to cycle #1 Scope'/> |
76 |
<!-- ROUTE information for Scope1Timer node:
[from MoveScope1Sensor.touchTime to set_startTime
]
[from fraction_changed to Scope1UpAndDown.set_fraction
]
-->
<TimeSensor DEF='Scope1Timer' cycleInterval='4'/> |
77 | < ROUTE fromNode='MoveScope1Sensor' fromField='touchTime' toNode='Scope1Timer' toField='set_startTime'/> |
78 |
<!-- ROUTE information for Scope1UpAndDown node:
[from Scope1Timer.fraction_changed to set_fraction
]
[from value_changed to MoveScope1.set_translation
]
-->
<PositionInterpolator DEF='Scope1UpAndDown' key='0 .5 1' keyValue='0 0 0 0 -10 0 0 0 0'/> |
79 | < ROUTE fromNode='Scope1Timer' fromField='fraction_changed' toNode='Scope1UpAndDown' toField='set_fraction'/> |
80 | < ROUTE fromNode='Scope1UpAndDown' fromField='value_changed' toNode='MoveScope1' toField='set_translation'/> |
81 | <Transform DEF='No1Scope' translation='-.483 6.9 .414'> |
82 | |
83 | <Cylinder height='13.8' radius='.05'/> |
84 | <Appearance USE='Gray'/> |
85 | </Shape> |
86 | <Transform scale='1.5 1 1'> |
87 |
<!-- Shape
ScopeFairing is a DEF node that has 1 USE node: USE_1 -->
<Shape DEF='ScopeFairing'> |
88 | <Cylinder height='7' radius='.1'/> |
89 | <Appearance> |
90 |
<!-- Material
SeaFoamGreen is a DEF node that has 1 USE node: USE_1 --> <Material DEF='SeaFoamGreen' diffuseColor='.6 1 .8'/> |
91 | </Appearance> |
92 | </Shape> |
93 | </Transform> |
94 | </Transform> |
95 | <Group DEF='Move1ScopeUp'> |
96 |
<!-- ROUTE information for Scope1Up node:
[from UpTimer.fraction_changed to set_fraction
]
[from value_changed to MoveScope1.set_translation
]
-->
<PositionInterpolator DEF='Scope1Up' key='0 1' keyValue='0 -10 0 0 0 0'/> |
97 | < ROUTE fromNode='UpTimer' fromField='fraction_changed' toNode='Scope1Up' toField='set_fraction'/> |
98 | < ROUTE fromNode='Scope1Up' fromField='value_changed' toNode='MoveScope1' toField='set_translation'/> |
99 | </Group> |
100 | <Group DEF='Move1ScopeDown'> |
101 |
<!-- ROUTE information for Scope1Down node:
[from DownTimer.fraction_changed to set_fraction
]
[from value_changed to MoveScope1.set_translation
]
-->
<PositionInterpolator DEF='Scope1Down' key='0 1' keyValue='0 0 0 0 -10 0'/> |
102 | < ROUTE fromNode='DownTimer' fromField='fraction_changed' toNode='Scope1Down' toField='set_fraction'/> |
103 | < ROUTE fromNode='Scope1Down' fromField='value_changed' toNode='MoveScope1' toField='set_translation'/> |
104 | </Group> |
105 | </Transform> |
106 |
<!-- ROUTE information for MoveScope2 node:
[from Scope2UpAndDown.value_changed to set_translation
]
[from Scope2Down.value_changed to set_translation
]
[from Scope2Up.value_changed to set_translation
]
-->
<Transform DEF='MoveScope2'> |
107 |
<!-- ROUTE information for MoveScope2Touch node:
[from touchTime to Scope2Timer.set_startTime
]
-->
<TouchSensor DEF='MoveScope2Touch' description='Sensor to Cycle #2 Scope'/> |
108 |
<!-- ROUTE information for Scope2Timer node:
[from MoveScope2Touch.touchTime to set_startTime
]
[from fraction_changed to Scope2UpAndDown.set_fraction
]
-->
<TimeSensor DEF='Scope2Timer' cycleInterval='4'/> |
109 | < ROUTE fromNode='MoveScope2Touch' fromField='touchTime' toNode='Scope2Timer' toField='set_startTime'/> |
110 |
<!-- ROUTE information for Scope2UpAndDown node:
[from Scope2Timer.fraction_changed to set_fraction
]
[from value_changed to MoveScope2.set_translation
]
-->
<PositionInterpolator DEF='Scope2UpAndDown' key='0 .5 1' keyValue='0 0 0 0 -10 0 0 0 0'/> |
111 | < ROUTE fromNode='Scope2Timer' fromField='fraction_changed' toNode='Scope2UpAndDown' toField='set_fraction'/> |
112 | < ROUTE fromNode='Scope2UpAndDown' fromField='value_changed' toNode='MoveScope2' toField='set_translation'/> |
113 | <Transform DEF='No2Scope' translation='-.483 6.9 -.414'> |
114 | <Shape USE='Scope'/> |
115 | <Transform scale='1.5 1 1'> |
116 | <Shape USE='ScopeFairing'/> |
117 | </Transform> |
118 | </Transform> |
119 | <Group DEF='Move2ScopeDown'> |
120 |
<!-- ROUTE information for Scope2Down node:
[from DownTimer.fraction_changed to set_fraction
]
[from value_changed to MoveScope2.set_translation
]
-->
<PositionInterpolator DEF='Scope2Down' key='0 1' keyValue='0 0 0 0 -10 0'/> |
121 | < ROUTE fromNode='DownTimer' fromField='fraction_changed' toNode='Scope2Down' toField='set_fraction'/> |
122 | < ROUTE fromNode='Scope2Down' fromField='value_changed' toNode='MoveScope2' toField='set_translation'/> |
123 | </Group> |
124 | <Group DEF='Move2ScopeUp'> |
125 |
<!-- ROUTE information for Scope2Up node:
[from UpTimer.fraction_changed to set_fraction
]
[from value_changed to MoveScope2.set_translation
]
-->
<PositionInterpolator DEF='Scope2Up' key='0 1' keyValue='0 -10 0 0 0 0'/> |
126 | < ROUTE fromNode='UpTimer' fromField='fraction_changed' toNode='Scope2Up' toField='set_fraction'/> |
127 | < ROUTE fromNode='Scope2Up' fromField='value_changed' toNode='MoveScope2' toField='set_translation'/> |
128 | </Group> |
129 | </Transform> |
130 | </Group> |
131 | <Group DEF='SnorkelMast'> |
132 |
<!-- ROUTE information for MoveSnorkel node:
[from UpAndDown.value_changed to set_translation
]
[from SnorkelUp.value_changed to set_translation
]
[from SnorkelDown.value_changed to set_translation
]
-->
<Transform DEF='MoveSnorkel'> |
133 |
<!-- ROUTE information for MoveSnorkelTouch node:
[from touchTime to Timer.set_startTime
]
-->
<TouchSensor DEF='MoveSnorkelTouch' description='Sensor to Cycle Snorkel Mast'/> |
134 |
<!-- ROUTE information for Timer node:
[from MoveSnorkelTouch.touchTime to set_startTime
]
[from fraction_changed to UpAndDown.set_fraction
]
-->
<TimeSensor DEF='Timer' cycleInterval='4'/> |
135 | < ROUTE fromNode='MoveSnorkelTouch' fromField='touchTime' toNode='Timer' toField='set_startTime'/> |
136 |
<!-- ROUTE information for UpAndDown node:
[from Timer.fraction_changed to set_fraction
]
[from value_changed to MoveSnorkel.set_translation
]
-->
<PositionInterpolator DEF='UpAndDown' key='0 .5 1' keyValue='0 0 0 0 -5 0 0 0 0'/> |
137 | < ROUTE fromNode='Timer' fromField='fraction_changed' toNode='UpAndDown' toField='set_fraction'/> |
138 | < ROUTE fromNode='UpAndDown' fromField='value_changed' toNode='MoveSnorkel' toField='set_translation'/> |
139 | <Transform DEF='Snorkel' scale='1.3 1 1' translation='-2.484 7.52 0'> |
140 | <Shape> |
141 | <Cylinder height='4' radius='.3'/> |
142 | <Appearance> |
143 | <Material diffuseColor='.6 .6 .6'/> |
144 | </Appearance> |
145 | </Shape> |
146 | </Transform> |
147 | <Transform DEF='SnorkelCap' scale='1.4 1.1 1.1' translation='-2.484 9.52 0'> |
148 | <Shape> |
149 | <Cylinder height='.6' radius='.5'/> |
150 | <Appearance USE='Black'/> |
151 | </Shape> |
152 | </Transform> |
153 | <Group DEF='MoveSnorkelUp'> |
154 |
<!-- ROUTE information for SnorkelUp node:
[from UpTimer.fraction_changed to set_fraction
]
[from value_changed to MoveSnorkel.set_translation
]
-->
<PositionInterpolator DEF='SnorkelUp' key='0 1' keyValue='0 -5 0 0 0 0'/> |
155 | < ROUTE fromNode='UpTimer' fromField='fraction_changed' toNode='SnorkelUp' toField='set_fraction'/> |
156 | < ROUTE fromNode='SnorkelUp' fromField='value_changed' toNode='MoveSnorkel' toField='set_translation'/> |
157 | </Group> |
158 | <Group DEF='MoveSnorkelDown'> |
159 |
<!-- ROUTE information for SnorkelDown node:
[from DownTimer.fraction_changed to set_fraction
]
[from value_changed to MoveSnorkel.set_translation
]
-->
<PositionInterpolator DEF='SnorkelDown' key='0 1' keyValue='0 0 0 0 -5 0'/> |
160 | < ROUTE fromNode='DownTimer' fromField='fraction_changed' toNode='SnorkelDown' toField='set_fraction'/> |
161 | < ROUTE fromNode='SnorkelDown' fromField='value_changed' toNode='MoveSnorkel' toField='set_translation'/> |
162 | </Group> |
163 | </Transform> |
164 | </Group> |
165 | <Group DEF='ANBRA-34'> |
166 |
<!-- ROUTE information for MoveBRA-34 node:
[from BRA-34UpAndDown.value_changed to set_translation
]
[from BRA-34Up.value_changed to set_translation
]
[from BRA-34Down.value_changed to set_translation
]
-->
<Transform DEF='MoveBRA-34'> |
167 |
<!-- ROUTE information for MoveBRA-34Touch node:
[from touchTime to BRA-34Timer.set_startTime
]
-->
<TouchSensor DEF='MoveBRA-34Touch' description='Cycles #1 Bra-34'/> |
168 |
<!-- ROUTE information for BRA-34Timer node:
[from MoveBRA-34Touch.touchTime to set_startTime
]
[from fraction_changed to BRA-34UpAndDown.set_fraction
]
-->
<TimeSensor DEF='BRA-34Timer' cycleInterval='4'/> |
169 |
<!-- ROUTE information for BRA-34UpAndDown node:
[from BRA-34Timer.fraction_changed to set_fraction
]
[from value_changed to MoveBRA-34.set_translation
]
-->
<PositionInterpolator DEF='BRA-34UpAndDown' key='0 .5 1' keyValue='0 0 0 0 -10 0 0 0 0'/> |
170 | < ROUTE fromNode='BRA-34Timer' fromField='fraction_changed' toNode='BRA-34UpAndDown' toField='set_fraction'/> |
171 | < ROUTE fromNode='BRA-34UpAndDown' fromField='value_changed' toNode='MoveBRA-34' toField='set_translation'/> |
172 | < ROUTE fromNode='MoveBRA-34Touch' fromField='touchTime' toNode='BRA-34Timer' toField='set_startTime'/> |
173 | <Transform DEF='No1BRA34' translation='.552 7.4 .414'> |
174 | <Transform DEF='BRA34Fairing' scale='1.8 1 1'> |
175 |
<!-- Shape
BRA34FairingShape is a DEF node that has 1 USE node: USE_1 -->
<Shape DEF='BRA34FairingShape'> |
176 | <Cylinder height='7' radius='.13'/> |
177 | <Appearance USE='Gray'/> |
178 | </Shape> |
179 | </Transform> |
180 | <Transform DEF='BRA34Cap' translation='0 6.95 0'> |
181 | |
182 | <Cylinder height='.1' radius='.08'/> |
183 | <Appearance USE='Black'/> |
184 | </Shape> |
185 | </Transform> |
186 | <Transform translation='0 3 0'> |
187 |
<!-- Shape
BRA34Shape is a DEF node that has 1 USE node: USE_1 -->
<Shape DEF='BRA34Shape'> |
188 | <Cylinder DEF='BRA34' height='7.8' radius='.08'/> |
189 | <Appearance> |
190 | <Material USE='SeaFoamGreen'/> |
191 | </Appearance> |
192 | </Shape> |
193 | </Transform> |
194 | </Transform> |
195 | <Group DEF='Move1Bra34Up'> |
196 |
<!-- ROUTE information for BRA-34Up node:
[from UpTimer.fraction_changed to set_fraction
]
[from value_changed to MoveBRA-34.set_translation
]
-->
<PositionInterpolator DEF='BRA-34Up' key='0 1' keyValue='0 -10 0 0 0 0'/> |
197 | < ROUTE fromNode='UpTimer' fromField='fraction_changed' toNode='BRA-34Up' toField='set_fraction'/> |
198 | < ROUTE fromNode='BRA-34Up' fromField='value_changed' toNode='MoveBRA-34' toField='set_translation'/> |
199 | </Group> |
200 | <Group DEF='Move1BRA-34lDown'> |
201 |
<!-- ROUTE information for BRA-34Down node:
[from DownTimer.fraction_changed to set_fraction
]
[from value_changed to MoveBRA-34.set_translation
]
-->
<PositionInterpolator DEF='BRA-34Down' key='0 1' keyValue='0 0 0 0 -10 0'/> |
202 | < ROUTE fromNode='DownTimer' fromField='fraction_changed' toNode='BRA-34Down' toField='set_fraction'/> |
203 | < ROUTE fromNode='BRA-34Down' fromField='value_changed' toNode='MoveBRA-34' toField='set_translation'/> |
204 | </Group> |
205 | </Transform> |
206 |
<!-- ROUTE information for MoveBRA-34No2 node:
[from No2BRA-34UpAndDown.value_changed to set_translation
]
[from BRA-342Up.value_changed to set_translation
]
[from BRA-342Down.value_changed to set_translation
]
-->
<Transform DEF='MoveBRA-34No2'> |
207 |
<!-- ROUTE information for Move2BRA-34Touch node:
[from touchTime to No2BRA-34Timer.set_startTime
]
-->
<TouchSensor DEF='Move2BRA-34Touch' description='Cycles #2 Bra-34'/> |
208 |
<!-- ROUTE information for No2BRA-34Timer node:
[from Move2BRA-34Touch.touchTime to set_startTime
]
[from fraction_changed to No2BRA-34UpAndDown.set_fraction
]
-->
<TimeSensor DEF='No2BRA-34Timer' cycleInterval='4'/> |
209 |
<!-- ROUTE information for No2BRA-34UpAndDown node:
[from No2BRA-34Timer.fraction_changed to set_fraction
]
[from value_changed to MoveBRA-34No2.set_translation
]
-->
<PositionInterpolator DEF='No2BRA-34UpAndDown' key='0 .5 1' keyValue='0 0 0 0 -10 0 0 0 0'/> |
210 | < ROUTE fromNode='No2BRA-34Timer' fromField='fraction_changed' toNode='No2BRA-34UpAndDown' toField='set_fraction'/> |
211 | < ROUTE fromNode='No2BRA-34UpAndDown' fromField='value_changed' toNode='MoveBRA-34No2' toField='set_translation'/> |
212 | < ROUTE fromNode='Move2BRA-34Touch' fromField='touchTime' toNode='No2BRA-34Timer' toField='set_startTime'/> |
213 | <Transform DEF='No2BRA34' translation='.552 7.4 -.414'> |
214 | <Transform scale='1.8 1 1'> |
215 | <Shape USE='BRA34FairingShape'/> |
216 | </Transform> |
217 | <Transform translation='0 6.95 0'> |
218 | <Shape USE='Cap'/> |
219 | </Transform> |
220 | <Transform translation='0 3 0'> |
221 | <Shape USE='BRA34Shape'/> |
222 | </Transform> |
223 | </Transform> |
224 | <Group DEF='Move2Bra34Up'> |
225 |
<!-- ROUTE information for BRA-342Up node:
[from UpTimer.fraction_changed to set_fraction
]
[from value_changed to MoveBRA-34No2.set_translation
]
-->
<PositionInterpolator DEF='BRA-342Up' key='0 1' keyValue='0 -10 0 0 0 0'/> |
226 | < ROUTE fromNode='UpTimer' fromField='fraction_changed' toNode='BRA-342Up' toField='set_fraction'/> |
227 | < ROUTE fromNode='BRA-342Up' fromField='value_changed' toNode='MoveBRA-34No2' toField='set_translation'/> |
228 | </Group> |
229 | <Group DEF='Move2BRA-34lDown'> |
230 |
<!-- ROUTE information for BRA-342Down node:
[from DownTimer.fraction_changed to set_fraction
]
[from value_changed to MoveBRA-34No2.set_translation
]
-->
<PositionInterpolator DEF='BRA-342Down' key='0 1' keyValue='0 0 0 0 -10 0'/> |
231 | < ROUTE fromNode='DownTimer' fromField='fraction_changed' toNode='BRA-342Down' toField='set_fraction'/> |
232 | < ROUTE fromNode='BRA-342Down' fromField='value_changed' toNode='MoveBRA-34No2' toField='set_translation'/> |
233 | </Group> |
234 | </Transform> |
235 | </Group> |
236 | <Transform DEF='Sail'> |
237 | <Shape> |
238 | <Appearance USE='Black'/> |
239 | <Extrusion creaseAngle='3' crossSection='-5.382 0 -4.41 .414 -2.76 .69 -1.38 .828 0 .966 1.38 .966 2.76 .759 3.312 .69 3.726 .552 4.002 .207 4.14 0 4.002 -.207 3.726 -.552 3.312 -.69 2.76 -.759 1.38 -.966 0 -.966 -1.38 -.828 -2.76 -.69 -4.14 -.414 -5.382 0' spine='0 0 0 0 5.52 0'/> |
240 | </Shape> |
241 | </Transform> |
242 | <Transform DEF='BRD-7' translation='-1.449 7.52 0'> |
243 |
<!-- ROUTE information for MoveBRD7 node:
[from BRD7UpAndDown.value_changed to set_translation
]
[from BRD7Up.value_changed to set_translation
]
[from BRD7Down.value_changed to set_translation
]
-->
<Transform DEF='MoveBRD7'> |
244 |
<!-- ROUTE information for MoveBRD7Touch node:
[from touchTime to BRD7Timer.set_startTime
]
-->
<TouchSensor DEF='MoveBRD7Touch' description='Cycles BRD-7'/> |
245 |
<!-- ROUTE information for BRD7Timer node:
[from MoveBRD7Touch.touchTime to set_startTime
]
[from fraction_changed to BRD7UpAndDown.set_fraction
]
-->
<TimeSensor DEF='BRD7Timer' cycleInterval='4'/> |
246 | < ROUTE fromNode='MoveBRD7Touch' fromField='touchTime' toNode='BRD7Timer' toField='set_startTime'/> |
247 |
<!-- ROUTE information for BRD7UpAndDown node:
[from BRD7Timer.fraction_changed to set_fraction
]
[from value_changed to MoveBRD7.set_translation
]
-->
<PositionInterpolator DEF='BRD7UpAndDown' key='0 .5 1' keyValue='0 0 0 0 -5.5 0 0 0 0'/> |
248 | < ROUTE fromNode='BRD7Timer' fromField='fraction_changed' toNode='BRD7UpAndDown' toField='set_fraction'/> |
249 | < ROUTE fromNode='BRD7UpAndDown' fromField='value_changed' toNode='MoveBRD7' toField='set_translation'/> |
250 | <Transform DEF='BRD-7Pole'> |
251 | <Shape> |
252 | <Cylinder height='6' radius='.1'/> |
253 | <Appearance USE='Black'/> |
254 | </Shape> |
255 | </Transform> |
256 | <Transform DEF='BRD-7TopHat' translation='0 3 0'> |
257 | <Shape> |
258 | <Cylinder height='.8' radius='.5'/> |
259 | <Appearance USE='Black'/> |
260 | </Shape> |
261 | </Transform> |
262 | <Group DEF='MoveBRD-7Up'> |
263 |
<!-- ROUTE information for BRD7Up node:
[from UpTimer.fraction_changed to set_fraction
]
[from value_changed to MoveBRD7.set_translation
]
-->
<PositionInterpolator DEF='BRD7Up' key='0 1' keyValue='0 -5.5 0 0 0 0'/> |
264 | < ROUTE fromNode='UpTimer' fromField='fraction_changed' toNode='BRD7Up' toField='set_fraction'/> |
265 | < ROUTE fromNode='BRD7Up' fromField='value_changed' toNode='MoveBRD7' toField='set_translation'/> |
266 | </Group> |
267 | <Group DEF='MoveBRD-7lDown'> |
268 |
<!-- ROUTE information for BRD7Down node:
[from DownTimer.fraction_changed to set_fraction
]
[from value_changed to MoveBRD7.set_translation
]
-->
<PositionInterpolator DEF='BRD7Down' key='0 1' keyValue='0 0 0 0 -5.5 0'/> |
269 | < ROUTE fromNode='DownTimer' fromField='fraction_changed' toNode='BRD7Down' toField='set_fraction'/> |
270 | < ROUTE fromNode='BRD7Down' fromField='value_changed' toNode='MoveBRD7' toField='set_translation'/> |
271 | </Group> |
272 | </Transform> |
273 | </Transform> |
274 | <Transform DEF='NavID' translation='1.449 5.52 .552'> |
275 |
<!-- ROUTE information for MoveNavID node:
[from NavIDUpAndDown.value_changed to set_translation
]
[from NavIDUp.value_changed to set_translation
]
[from NavIDDown.value_changed to set_translation
]
-->
<Transform DEF='MoveNavID'> |
276 |
<!-- ROUTE information for NavIDTouch node:
[from touchTime to NavIDTimer.set_startTime
]
-->
<TouchSensor DEF='NavIDTouch' description='Cycles NAV ID'/> |
277 |
<!-- ROUTE information for NavIDTimer node:
[from NavIDTouch.touchTime to set_startTime
]
[from fraction_changed to NavIDUpAndDown.set_fraction
]
-->
<TimeSensor DEF='NavIDTimer' cycleInterval='4'/> |
278 | < ROUTE fromNode='NavIDTouch' fromField='touchTime' toNode='NavIDTimer' toField='set_startTime'/> |
279 |
<!-- ROUTE information for NavIDUpAndDown node:
[from NavIDTimer.fraction_changed to set_fraction
]
[from value_changed to MoveNavID.set_translation
]
-->
<PositionInterpolator DEF='NavIDUpAndDown' key='0 .5 1' keyValue='0 0 0 0 -4.2 0 0 0 0'/> |
280 | < ROUTE fromNode='NavIDTimer' fromField='fraction_changed' toNode='NavIDUpAndDown' toField='set_fraction'/> |
281 | < ROUTE fromNode='NavIDUpAndDown' fromField='value_changed' toNode='MoveNavID' toField='set_translation'/> |
282 | <Transform DEF='NavIDPole' translation='0 2 0'> |
283 | <Shape> |
284 | <Cylinder height='4' radius='.05'/> |
285 | <Appearance USE='Gray'/> |
286 | </Shape> |
287 | </Transform> |
288 | <Transform DEF='NavIDLight' translation='0 4 0'> |
289 | <Shape> |
290 | <Cylinder height='.3' radius='.1'/> |
291 | <Appearance> |
292 |
<!-- ROUTE information for NavIDColor node:
[from ColorPath.value_changed to set_emissiveColor
]
-->
<Material DEF='NavIDColor' ambientIntensity='0'/> |
293 | </Appearance> |
294 | </Shape> |
295 |
<!-- ROUTE information for ColorPath node:
[from AnimationClock.fraction_changed to set_fraction
]
[from value_changed to NavIDColor.set_emissiveColor
]
-->
<ColorInterpolator DEF='ColorPath' key='0.0 .2 .250 .450 .5 .7 .750 .875 1' keyValue='.996 .598 0 .879 .988 .996 .996 .598 0 .879 .988 .996 .996 .598 0 .879 .988 .996 .879 .988 .996 .879 .988 .996 .879 .988 .996'/> |
296 | < ROUTE fromNode='ColorPath' fromField='value_changed' toNode='NavIDColor' toField='set_emissiveColor'/> |
297 |
<!-- ROUTE information for AnimationClock node:
[from fraction_changed to ColorPath.set_fraction
]
-->
<TimeSensor DEF='AnimationClock' cycleInterval='9' loop='true'/> |
298 | < ROUTE fromNode='AnimationClock' fromField='fraction_changed' toNode='ColorPath' toField='set_fraction'/> |
299 | </Transform> |
300 | <Group DEF='MoveNavIDUp'> |
301 |
<!-- ROUTE information for NavIDUp node:
[from UpTimer.fraction_changed to set_fraction
]
[from value_changed to MoveNavID.set_translation
]
-->
<PositionInterpolator DEF='NavIDUp' key='0 1' keyValue='0 -4.2 0 0 0 0'/> |
302 | < ROUTE fromNode='UpTimer' fromField='fraction_changed' toNode='NavIDUp' toField='set_fraction'/> |
303 | < ROUTE fromNode='NavIDUp' fromField='value_changed' toNode='MoveNavID' toField='set_translation'/> |
304 | </Group> |
305 | <Group DEF='MoveNavIDlDown'> |
306 |
<!-- ROUTE information for NavIDDown node:
[from DownTimer.fraction_changed to set_fraction
]
[from value_changed to MoveNavID.set_translation
]
-->
<PositionInterpolator DEF='NavIDDown' key='0 1' keyValue='0 0 0 0 -4.2 0'/> |
307 | < ROUTE fromNode='DownTimer' fromField='fraction_changed' toNode='NavIDDown' toField='set_fraction'/> |
308 | < ROUTE fromNode='NavIDDown' fromField='value_changed' toNode='MoveNavID' toField='set_translation'/> |
309 | </Group> |
310 | </Transform> |
311 | </Transform> |
312 | <Transform DEF='FairwaterPlanesMain' rotation='1 0 0 -1.57' translation='-1.85 3.54 6'> |
313 |
<!-- ROUTE information for FairwaterPlanes node:
[from RotateFWPlanes.value_changed to set_rotation
]
-->
<Transform DEF='FairwaterPlanes' center='3 0 0'> |
314 | <Inline url=' "Planes.x3d" "https://savage.nps.edu/Savage/Submarines/SsnLosAngelesUnitedStates/Planes.x3d" "Planes.wrl" "https://savage.nps.edu/Savage/Submarines/SsnLosAngelesUnitedStates/Planes.wrl" '/> |
315 |
<!-- ROUTE information for MoveFWPlanes node:
[from touchTime to FWPlaneTimer.set_startTime
]
-->
<TouchSensor DEF='MoveFWPlanes' description='Cycles FW Planes'/> |
316 |
<!-- ROUTE information for FWPlaneTimer node:
[from MoveFWPlanes.touchTime to set_startTime
]
[from fraction_changed to RotateFWPlanes.set_fraction
]
-->
<TimeSensor DEF='FWPlaneTimer' cycleInterval='5'/> |
317 | < ROUTE fromNode='MoveFWPlanes' fromField='touchTime' toNode='FWPlaneTimer' toField='set_startTime'/> |
318 |
<!-- ROUTE information for RotateFWPlanes node:
[from FWPlaneTimer.fraction_changed to set_fraction
]
[from value_changed to FairwaterPlanes.set_rotation
]
-->
<OrientationInterpolator DEF='RotateFWPlanes' key='0 .25 .50 .75 1.0' keyValue='0 1 0 0.0 0 1 0 0.52 0 1 0 0.00 0 1 0 -0.52 0 1 0 0.00'/> |
319 | < ROUTE fromNode='FWPlaneTimer' fromField='fraction_changed' toNode='RotateFWPlanes' toField='set_fraction'/> |
320 | < ROUTE fromNode='RotateFWPlanes' fromField='value_changed' toNode='FairwaterPlanes' toField='set_rotation'/> |
321 | </Transform> |
322 | </Transform> |
323 | </Transform> |
324 | <ProtoInstance name='HeadsUpDisplay'> |
325 | <fieldValue name='dragChildren'> |
326 | <Transform translation='0 0 -0.2'> |
327 | <Shape> |
328 | <Box size='5 2 0.001'/> |
329 | <Appearance> |
330 | <Material diffuseColor='1 1 1' transparency='1'/> |
331 | </Appearance> |
332 | </Shape> |
333 | </Transform> |
334 | </fieldValue> |
335 | <fieldValue name='locationOffset' value='4 2 0'/> |
336 | <fieldValue name='children'> |
337 | <Transform> |
338 | <Group DEF='SwitchGroup'> |
339 |
<!-- ROUTE information for RaiseOrLowerButton node:
[from AreMastsUp.setSwitch to whichChoice
]
-->
<Switch DEF='RaiseOrLowerButton' whichChoice='0'> |
340 | <Group DEF='LowerMasts'> |
341 |
<!-- ROUTE information for ClickToLowerSensor node:
[from touchTime to DownTimer.set_startTime
]
[from isActive to AreMastsUp.down
]
-->
<TouchSensor DEF='ClickToLowerSensor' description='Lower All Masts'/> |
342 | <Shape> |
343 | <Text string='"Click To Lower All Masts"'> |
344 | |
345 | </Text> |
346 | <Appearance> |
347 | <Material diffuseColor='0 .8 0'/> |
348 | </Appearance> |
349 | </Shape> |
350 | </Group> |
351 | <Group DEF='RaiseMasts'> |
352 |
<!-- ROUTE information for ClickToRaiseSensor node:
[from touchTime to UpTimer.set_startTime
]
[from isActive to AreMastsUp.up
]
-->
<TouchSensor DEF='ClickToRaiseSensor' description='Raise ALl Masts'/> |
353 | <Shape> |
354 | <Text string='"Click To Raise All Masts"'> |
355 | <FontStyle USE='HudText'/> |
356 | </Text> |
357 | <Appearance> |
358 | <Material diffuseColor='1 0 0'/> |
359 | </Appearance> |
360 | </Shape> |
361 | </Group> |
362 | </Switch> |
363 |
<!-- ROUTE information for AreMastsUp node:
[from ClickToLowerSensor.isActive to down
]
[from ClickToRaiseSensor.isActive to up
]
[from setSwitch to RaiseOrLowerButton.whichChoice
]
-->
<Script DEF='AreMastsUp'> |
364 | <field name='up' type='SFBool' accessType='inputOnly'/> |
365 | <field name='down' type='SFBool' accessType='inputOnly'/> |
366 | <field name='setSwitch' type='SFInt32' accessType='outputOnly'/> |
<![CDATA[
ecmascript: function up (value, timestamp) { setSwitch = 0; } function down (value, timestamp) { setSwitch = 1; }
]]>
|
|
368 | </Script> |
369 | </Group> |
370 | <Group DEF='LowerOrRaiseRouteGroup'> |
371 | < ROUTE fromNode='ClickToLowerSensor' fromField='touchTime' toNode='DownTimer' toField='set_startTime'/> |
372 | < ROUTE fromNode='ClickToRaiseSensor' fromField='touchTime' toNode='UpTimer' toField='set_startTime'/> |
373 | < ROUTE fromNode='ClickToLowerSensor' fromField='isActive' toNode='AreMastsUp' toField='down'/> |
374 | < ROUTE fromNode='ClickToRaiseSensor' fromField='isActive' toNode='AreMastsUp' toField='up'/> |
375 | < ROUTE fromNode='AreMastsUp' fromField='setSwitch' toNode='RaiseOrLowerButton' toField='whichChoice'/> |
376 | </Group> |
377 | </Transform> |
378 | </fieldValue> |
379 | </ProtoInstance> |
380 | </Scene> |
381 | </X3D> |
Event Graph ROUTE Table entries with 66 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.
Move2BRA-34Touch
TouchSensor touchTime SFTime |
No2BRA-34Timer
TimeSensor set_startTime SFTime |
then
|
No2BRA-34Timer
TimeSensor fraction_changed SFFloat |
No2BRA-34UpAndDown
PositionInterpolator set_fraction SFFloat |
then
|
No2BRA-34UpAndDown
PositionInterpolator value_changed SFVec3f |
MoveBRA-34No2
Transform set_translation SFVec3f |
MoveBRA-34Touch
TouchSensor touchTime SFTime |
BRA-34Timer
TimeSensor set_startTime SFTime |
then
|
BRA-34Timer
TimeSensor fraction_changed SFFloat |
BRA-34UpAndDown
PositionInterpolator set_fraction SFFloat |
then
|
BRA-34UpAndDown
PositionInterpolator value_changed SFVec3f |
MoveBRA-34
Transform set_translation SFVec3f |
MoveBRD7Touch
TouchSensor touchTime SFTime |
BRD7Timer
TimeSensor set_startTime SFTime |
then
|
BRD7Timer
TimeSensor fraction_changed SFFloat |
BRD7UpAndDown
PositionInterpolator set_fraction SFFloat |
then
|
BRD7UpAndDown
PositionInterpolator value_changed SFVec3f |
MoveBRD7
Transform set_translation SFVec3f |
MoveFWPlanes
TouchSensor touchTime SFTime |
FWPlaneTimer
TimeSensor set_startTime SFTime |
then
|
FWPlaneTimer
TimeSensor fraction_changed SFFloat |
RotateFWPlanes
OrientationInterpolator set_fraction SFFloat |
then
|
RotateFWPlanes
OrientationInterpolator value_changed SFRotation |
FairwaterPlanes
Transform set_rotation SFRotation |
MoveRadarTouch
TouchSensor touchTime SFTime |
RadarTimer
TimeSensor set_startTime SFTime |
then
|
RadarTimer
TimeSensor fraction_changed SFFloat |
RadarUpAndDown
PositionInterpolator set_fraction SFFloat |
then
|
RadarUpAndDown
PositionInterpolator value_changed SFVec3f |
MoveRadar
Transform set_translation SFVec3f |
MoveScope1Sensor
TouchSensor touchTime SFTime |
Scope1Timer
TimeSensor set_startTime SFTime |
then
|
Scope1Timer
TimeSensor fraction_changed SFFloat |
Scope1UpAndDown
PositionInterpolator set_fraction SFFloat |
then
|
Scope1UpAndDown
PositionInterpolator value_changed SFVec3f |
MoveScope1
Transform set_translation SFVec3f |
MoveScope2Touch
TouchSensor touchTime SFTime |
Scope2Timer
TimeSensor set_startTime SFTime |
then
|
Scope2Timer
TimeSensor fraction_changed SFFloat |
Scope2UpAndDown
PositionInterpolator set_fraction SFFloat |
then
|
Scope2UpAndDown
PositionInterpolator value_changed SFVec3f |
MoveScope2
Transform set_translation SFVec3f |
MoveSnorkelTouch
TouchSensor touchTime SFTime |
Timer
TimeSensor set_startTime SFTime |
then
|
Timer
TimeSensor fraction_changed SFFloat |
UpAndDown
PositionInterpolator set_fraction SFFloat |
then
|
UpAndDown
PositionInterpolator value_changed SFVec3f |
MoveSnorkel
Transform set_translation SFVec3f |
NavIDTouch
TouchSensor touchTime SFTime |
NavIDTimer
TimeSensor set_startTime SFTime |
then
|
NavIDTimer
TimeSensor fraction_changed SFFloat |
NavIDUpAndDown
PositionInterpolator set_fraction SFFloat |
then
|
NavIDUpAndDown
PositionInterpolator value_changed SFVec3f |
MoveNavID
Transform set_translation SFVec3f |
AnimationClock
TimeSensor fraction_changed SFFloat |
ColorPath
ColorInterpolator set_fraction SFFloat |
then
|
ColorPath
ColorInterpolator value_changed SFColor |
NavIDColor
Material set_emissiveColor SFColor |
ProtoInstance HeadsUpDisplay |
No ROUTE connection found for output events from this node. This ProtoInstance contains SFNode/MFNode fieldValue declarations with direct access to other nodes, and thus has potential to produce run-time animation. |
<!--
Color 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. -->