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=' HeadsUpDisplayPrototype.x3d '/> |
6 | <meta name='description' content='Generic Heads Up Display (HUD) prototype to keep children on screen.'/> |
7 | <meta name='creator' content='Don Brutzman'/> |
8 | <meta name='created' content='9 November 2003'/> |
9 | <meta name='modified' content='28 November 2019'/> |
10 | <meta name='subject' content='HUD Heads Up Display'/> |
11 | <meta name='identifier' content=' https://www.web3d.org/x3d/content/examples/Savage/Tools/HeadsUpDisplays/HeadsUpDisplayPrototype.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 | <WorldInfo title='HeadsUpDisplayPrototype.x3d'/> |
17 | <ProtoDeclare name='HeadsUpDisplay' appinfo='HeadsUpDisplay positions child geometry in screen space, movable by the user'> |
18 | <ProtoInterface> |
19 |
<field name='children' type='MFNode' accessType='inputOutput'
appinfo='Displayed subscene positioned as a HUD.'> |
20 | <!-- default is null array of nodes --> |
21 | </field> |
22 |
<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.'> |
23 | <!-- default is null array of nodes --> |
24 | </field> |
25 |
<field name='locationOffset' type='SFVec3f' value='-2 -2 0' accessType='initializeOnly'
appinfo='Modified screen location and distance (for size).'/> |
26 |
<field name='traceEnabled' type='SFBool' value='false' accessType='initializeOnly'
appinfo='Enable/disable console output for troubleshooting.'/> |
27 | </ProtoInterface> |
28 | <ProtoBody> |
29 | <Group> |
30 |
<!-- ROUTE information for WhereSensor node:
[from position_changed to FixedLocation.set_translation
]
[from orientation_changed to FixedLocation.set_rotation
]
-->
<ProximitySensor DEF='WhereSensor' size='1000000000 1000000000 1000000000'> |
31 | <IS> |
32 | <connect nodeField='center' protoField='locationOffset'/> |
33 | </IS> |
34 | </ProximitySensor> |
35 |
<!-- ROUTE information for FixedLocation node:
[from WhereSensor.position_changed to set_translation
]
[from WhereSensor.orientation_changed to set_rotation
]
-->
<Transform DEF='FixedLocation'> |
36 |
<!-- ROUTE information for MovableLocation node:
[from PlaneMovementSensor.translation_changed to set_translation
]
[from VisibilityControlScript.translationChanged to set_translation
]
-->
<Transform DEF='MovableLocation'> |
37 | <Transform DEF='LocationOffset'> |
38 | <IS> |
39 | <connect nodeField='translation' protoField='locationOffset'/> |
40 | </IS> |
41 | <Transform translation='0 0 -10'> |
42 | <Group> |
43 | <IS> |
44 | <connect nodeField='children' protoField='children'/> |
45 | </IS> |
46 | </Group> |
47 | <Group DEF='PlaneMovementSensorGroup'> |
48 | <Group DEF='DragGeometry'> |
49 | <IS> |
50 | <connect nodeField='children' protoField='dragChildren'/> |
51 | </IS> |
52 | </Group> |
53 |
<!-- ROUTE information for PlaneMovementSensor node:
[from VisibilityControlScript.translationOffsetChanged to set_offset
]
[from isActive to VisibilityControlScript.setPlaneSensorIsActive
]
[from translation_changed to VisibilityControlScript.setPlaneSensorTranslation
]
[from translation_changed to MovableLocation.set_translation
]
-->
<PlaneSensor DEF='PlaneMovementSensor' description='click and drag to move interface'> |
54 | <IS> |
55 | <connect nodeField='offset' protoField='locationOffset'/> |
56 | </IS> |
57 | </PlaneSensor> |
58 |
<!-- ROUTE information for MovementVisibilitySensor node:
[from isActive to VisibilityControlScript.setIsVisible
]
-->
<VisibilitySensor DEF='MovementVisibilitySensor'/> |
59 |
<!-- ROUTE information for VisibilityControlScript node:
[from PlaneMovementSensor.isActive to setPlaneSensorIsActive
]
[from PlaneMovementSensor.translation_changed to setPlaneSensorTranslation
]
[from MovementVisibilitySensor.isActive to setIsVisible
]
[from translationChanged to MovableLocation.set_translation
]
[from translationOffsetChanged to PlaneMovementSensor.set_offset
]
-->
<Script DEF='VisibilityControlScript'> |
60 | <field name='traceEnabled' type='SFBool' accessType='initializeOnly'/> |
61 | <field name='isVisible' type='SFBool' value='true' accessType='initializeOnly'/> |
62 | <field name='planeSensorTranslation' type='SFVec3f' value='0 0 0' accessType='initializeOnly'/> |
63 | <field name='setIsVisible' type='SFBool' accessType='inputOnly'/> |
64 | <field name='setPlaneSensorIsActive' type='SFBool' accessType='inputOnly'/> |
65 | <field name='setPlaneSensorTranslation' type='SFVec3f' accessType='inputOnly'/> |
66 | <field name='translationChanged' type='SFVec3f' accessType='outputOnly'/> |
67 | <field name='translationOffsetChanged' type='SFVec3f' accessType='outputOnly'/> |
68 | <IS> |
69 | <connect nodeField='traceEnabled' protoField='traceEnabled'/> |
70 | </IS> |
<![CDATA[
ecmascript: function tracePrint (text) { if (traceEnabled) Browser.println ('[HeadsUpDisplayPrototype VisibilityControlScript] ' + text); } function setIsVisible (value, timeStamp) { isVisible = value; tracePrint('isVisible=' + value); } function setPlaneSensorIsActive (value, timeStamp) { tracePrint('PlaneSensor isActive=' + value); if (value == false) { tracePrint('planeSensorTranslation=' + planeSensorTranslation); if (isVisible) { translationChanged = planeSensorTranslation; } else { // fell off screen, reset to center translationChanged = new SFVec3f(0, 0, 0); translationOffsetChanged = new SFVec3f(0, 0, 0); } } } function setPlaneSensorTranslation (value, timeStamp) { planeSensorTranslation = value; tracePrint('planeSensorTranslation=' + value); }
]]>
|
|
72 | </Script> |
73 | < ROUTE fromNode='PlaneMovementSensor' fromField='isActive' toNode='VisibilityControlScript' toField='setPlaneSensorIsActive'/> |
74 | < ROUTE fromNode='PlaneMovementSensor' fromField='translation_changed' toNode='VisibilityControlScript' toField='setPlaneSensorTranslation'/> |
75 | < ROUTE fromNode='MovementVisibilitySensor' fromField='isActive' toNode='VisibilityControlScript' toField='setIsVisible'/> |
76 | </Group> |
77 | </Transform> |
78 | </Transform> |
79 | < ROUTE fromNode='PlaneMovementSensor' fromField='translation_changed' toNode='MovableLocation' toField='set_translation'/> |
80 | < ROUTE fromNode='VisibilityControlScript' fromField='translationChanged' toNode='MovableLocation' toField='set_translation'/> |
81 | < ROUTE fromNode='VisibilityControlScript' fromField='translationOffsetChanged' toNode='PlaneMovementSensor' toField='set_offset'/> |
82 | </Transform> |
83 | </Transform> |
84 | < ROUTE fromNode='WhereSensor' fromField='position_changed' toNode='FixedLocation' toField='set_translation'/> |
85 | < ROUTE fromNode='WhereSensor' fromField='orientation_changed' toNode='FixedLocation' toField='set_rotation'/> |
86 | </Group> |
87 | </ProtoBody> |
88 | </ProtoDeclare> |
89 | <!-- ==================== --> |
90 | <Background groundColor='0.1 0.1 0.3' skyColor='0.5 0.5 0.1'/> |
91 | <Anchor description='HeadsUpDisplayExample' parameter='"target=_blank"' url=' "HeadsUpDisplayExample.x3d" "https://www.web3d.org/x3d/content/examples/Savage/Tools/HeadsUpDisplays/HeadsUpDisplayrExample.x3d" "HeadsUpDisplayExample.wrl" "https://www.web3d.org/x3d/content/examples/Savage/Tools/HeadsUpDisplays/HeadsUpDisplayExample.wrl" '> |
92 | <Shape> |
93 | <Appearance> |
94 | <Material diffuseColor='0 1 1' emissiveColor='0 1 1'/> |
95 | </Appearance> |
96 | <Text string=' "../../../X3dForWebAuthors/Chapter14Prototypes/HeadsUpDisplayPrototype.x3d" "is a Prototype definition file." "" "To see an example scene using this node" "click this text to view" "HeadsUpDisplayExample.x3d"'> |
97 | <FontStyle justify='"MIDDLE" "MIDDLE"' size='0.8'/> |
98 | </Text> |
99 | </Shape> |
100 | </Anchor> |
101 | </Scene> |
102 | </X3D> |
Event Graph ROUTE Table entries with 8 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.
WhereSensor
ProximitySensor position_changed SFVec3f |
FixedLocation
Transform set_translation SFVec3f |
|
WhereSensor
ProximitySensor orientation_changed SFRotation |
FixedLocation
Transform set_rotation SFRotation |
line 91
Anchor |
description='HeadsUpDisplayExample' 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)
<ProtoDeclare name='ProtoName'>
<field
name='fieldName'/> </ProtoDeclare>
-->
<!--
For additional help information about X3D scenes, please see X3D Tooltips, X3D Resources, and X3D Scene Authoring Hints.
-->