| 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=' https://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://www.web3d.org/x3d/content/examples/Savage/Submarines/SsnLosAngelesUnitedStates/Sail.x3d '/> |
| 14 | <meta name='generator' content='X3D-Edit 3.2, https://www.web3d.org/x3d/tools/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://www.web3d.org/x3d/content/examples/Savage/Tools/HeadsUpDisplays/HeadsUpDisplayPrototype.x3d#HeadsUpDisplay" "../../../X3dForWebAuthors/Chapter14Prototypes/HeadsUpDisplayPrototype.wrl#HeadsUpDisplay" "https://www.web3d.org/x3d/content/examples/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://www.web3d.org/x3d/content/examples/Savage/Submarines/SsnLosAngelesUnitedStates/Planes.x3d" "Planes.wrl" "https://www.web3d.org/x3d/content/examples/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 |
| line 324
ProtoInstance HeadsUpDisplay |
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. |
<!--
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.
-->