X3D Model Documentation: CrossHairExample.x3d

  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='titlecontent='CrossHairExample.x3d'/>
  6            <meta name='descriptioncontent='Example use of a heads-up display (HUD) crosshair showing center of screen, useful for assessing lookAt point.'/>
  7            <meta name='creatorcontent='Don Brutzman'/>
  8            <meta name='createdcontent='1 February 2003'/>
  9            <meta name='modifiedcontent='28 November 2019'/>
 10            <meta name='identifiercontent='https://savage.nps.edu/Savage/Tools/HeadsUpDisplays/CrossHairExample.x3d'/>
 11            <meta name='subjectcontent='crosshair display'/>
 12            <meta name='generatorcontent='X3D-Edit 3.2, https://savage.nps.edu/X3D-Edit'/>
 13            <meta name='licensecontent='../../license.html'/>
 14       </head>
<!--

<!--
Event Graph ROUTE Table shows event connections.
-->

<!-- to top Index for DEF nodes: CrossHairInstance, EnterProximityBox, ExitFilter, ExitProximityBox, ProximityBox, TouchBox, TouchToggle

Index for Viewpoint nodes: Viewpoint_1, Viewpoint_2

Index for ExternProtoDeclare definition: CrossHair
-->
 15       <Scene>
 16            <!-- ======================== -->
 17            <!-- Copy this ExternProtoDeclare and ProtoInstance for use in another scene -->
 18            <WorldInfo title='CrossHairExample.x3d'/>
 19            <ExternProtoDeclare name='CrossHairappinfo='CrossHair prototype provides a heads-up display (HUD) crosshair at the view center, which is useful for assessing NavigationInfo lookAt point'   url=' "../../../Savage/Tools/HeadsUpDisplays/CrossHairPrototype.x3d#CrossHair" "https://savage.nps.edu/Savage/Tools/HeadsUpDisplays/CrossHairPrototype.x3d#CrossHair" "../../../Savage/Tools/HeadsUpDisplays/CrossHairPrototype.wrl#CrossHair" "https://savage.nps.edu/Savage/Tools/HeadsUpDisplays/CrossHairPrototype.wrl#CrossHair" '>
 20                 <field name='enabledtype='SFBoolaccessType='initializeOnly'
                appinfo='whether CrossHair prototype is enabled or not'/>
 21                 <field name='set_enabledtype='SFBoolaccessType='inputOnly'
                appinfo='control whether enabled/disabled'/>
 22                 <field name='markerColortype='SFColoraccessType='inputOutput'
                appinfo='color of CrossHair marker'/>
 23                 <field name='scaletype='SFVec3faccessType='inputOutput'
                appinfo='size of CrossHair in meters'/>
 24                 <field name='positionOffsetFromCameratype='SFVec3faccessType='inputOutput'
                appinfo='distance in front of HUD viewpoint'/>
 25            </ExternProtoDeclare>
 26 
          <!-- ROUTE information for CrossHairInstance node:  [from TouchToggle.toggle_changed to set_enabled ] [from EnterProximityBox.triggerTrue to set_enabled ] [from ExitFilter.inputNegate to set_enabled ] -->
          <ProtoInstance name='CrossHairDEF='CrossHairInstance'>
 27                 <fieldValue name='enabledvalue='true'/>
 28                 <fieldValue name='markerColorvalue='1 0.5 0'/>
 29                 <fieldValue name='scalevalue='1 1 1'/>
 30                 <fieldValue name='positionOffsetFromCameravalue='0 0 -6'/>
 31            </ProtoInstance>
 32            <!-- ======================== -->
 33            <!-- Test scene and background, to see that HUD remains fixed relative to viewpoint. -->
 34            <Viewpoint description='walk and rotate to test heads-up display (HUD)'/>
 35            <Viewpoint description='outside proximity box turns crosshair offposition='0 0 20'/>
 36            <NavigationInfo speed='10type='"FLY" "ANY"'/>
 37            <Background skyColor='0.7 0.7 0.9'/>
 38            <Shape>
 39                 <Text string=' "Click text, zoom out/in," "or switch viewpoints to" "toggle CrossHair HUD" '>
 40                      <FontStyle justify='"MIDDLE" "MIDDLE"'/>
 41                 </Text>
 42                 <Appearance>
 43                      <Material diffuseColor='0.4 0.4 0.13'/>
 44                 </Appearance>
 45            </Shape>
 46            <!-- ======================== -->
 47            <!-- Turn CrossHair on/off depending on toggling Box touch -->
 48 
          <!-- ROUTE information for TouchBox node:  [from isActive to TouchToggle.set_boolean ] -->
          <TouchSensor DEF='TouchBoxdescription='touch to toggle CrossHair'/>
 49 
          <!-- ROUTE information for TouchToggle node:  [from TouchBox.isActive to set_boolean ] [from toggle_changed to CrossHairInstance.set_enabled ] -->
          <BooleanToggle DEF='TouchTogglecontainerField='children'/>
 50            < ROUTE  fromNode='TouchBox' fromField='isActive' toNode='TouchToggle' toField='set_boolean'/>
 51            <!-- TouchToggle toggle_changed should likely revert to TouchToggle toggle when inputOutput fields supported in Script, or native implementation provided. -->
 52            < ROUTE  fromNode='TouchToggle' fromField='toggle_changed' toNode='CrossHairInstance' toField='set_enabled'/>
 53            <!-- ======================== -->
 54            <!-- Turn CrossHair on/off depending on proximity to a target location -->
 55            <Group>
 56 
               <!-- ROUTE information for ProximityBox node:  [from enterTime to EnterProximityBox.set_triggerTime ] [from exitTime to ExitProximityBox.set_triggerTime ] -->
               <ProximitySensor DEF='ProximityBoxsize='21 21 21'/>
 57 
               <!-- ROUTE information for EnterProximityBox node:  [from ProximityBox.enterTime to set_triggerTime ] [from triggerTrue to CrossHairInstance.set_enabled ] -->
               <BooleanTrigger DEF='EnterProximityBox'/>
 58                 < ROUTE  fromNode='ProximityBox' fromField='enterTime' toNode='EnterProximityBox' toField='set_triggerTime'/>
 59                 < ROUTE  fromNode='EnterProximityBox' fromField='triggerTrue' toNode='CrossHairInstance' toField='set_enabled'/>
 60 
               <!-- ROUTE information for ExitProximityBox node:  [from ProximityBox.exitTime to set_triggerTime ] [from triggerTrue to ExitFilter.set_boolean ] -->
               <BooleanTrigger DEF='ExitProximityBox'/>
 61 
               <!-- ROUTE information for ExitFilter node:  [from ExitProximityBox.triggerTrue to set_boolean ] [from inputNegate to CrossHairInstance.set_enabled ] -->
               <BooleanFilter DEF='ExitFilter'/>
 62                 < ROUTE  fromNode='ProximityBox' fromField='exitTime' toNode='ExitProximityBox' toField='set_triggerTime'/>
 63                 < ROUTE  fromNode='ExitProximityBox' fromField='triggerTrue' toNode='ExitFilter' toField='set_boolean'/>
 64                 < ROUTE  fromNode='ExitFilter' fromField='inputNegate' toNode='CrossHairInstance' toField='set_enabled'/>
 65            </Group>
 66       </Scene>
 67  </X3D>
<!--

<!--
Event Graph ROUTE Table shows event connections.
-->

<!-- to top Index for DEF nodes: CrossHairInstance, EnterProximityBox, ExitFilter, ExitProximityBox, ProximityBox, TouchBox, TouchToggle

Index for Viewpoint nodes: Viewpoint_1, Viewpoint_2

Index for ExternProtoDeclare definition: CrossHair
-->
X3D Tooltips element index: Appearance, Background, BooleanFilter, BooleanToggle, BooleanTrigger, ExternProtoDeclare, field, fieldValue, FontStyle, Group, head, Material, meta, NavigationInfo, ProtoInstance, ProximitySensor, ROUTE, Scene, Shape, Text, TouchSensor, Viewpoint, WorldInfo, X3D, accessType and type, XML data types, field types

Event Graph ROUTE Table entries with 7 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.

TouchBox
TouchSensor
isActive
SFBool

ROUTE
event to
(1)
TouchToggle
BooleanToggle
set_boolean
SFBool
then
 
 
 
TouchToggle
BooleanToggle
toggle_changed
SFBool

ROUTE
event to
(2)
CrossHairInstance
ProtoInstance
set_enabled
SFBool

ProximityBox
ProximitySensor
enterTime
SFTime

ROUTE
event to
(1)
EnterProximityBox
BooleanTrigger
set_triggerTime
SFTime
then
 
 
 
EnterProximityBox
BooleanTrigger
triggerTrue
SFBool

ROUTE
event to
(2)
CrossHairInstance
ProtoInstance
set_enabled
SFBool
ProximityBox
ProximitySensor
exitTime
SFTime

ROUTE
event to
(1)
ExitProximityBox
BooleanTrigger
set_triggerTime
SFTime
then
 
 
 
ExitProximityBox
BooleanTrigger
triggerTrue
SFBool

ROUTE
event to
(2)
ExitFilter
BooleanFilter
set_boolean
SFBool
then
 
 
 
ExitFilter
BooleanFilter
inputNegate
SFBool

ROUTE
event to
(3)
CrossHairInstance
ProtoInstance
set_enabled
SFBool

Additional guidance on X3D animation can be found in the 10-Step Animation Design Process and Event Tracing hint sheets. Have fun with X3D! 😀

-->
<!-- Online at
https://savage.nps.edu/Savage/Tools/HeadsUpDisplays/CrossHairExampleIndex.html -->
<!-- Version control at
https://gitlab.nps.edu/Savage/Savage/Tools/HeadsUpDisplays/CrossHairExample.x3d -->

<!-- Color legend: X3D terminology <X3dNode  DEF='idNamefield='value'/> matches XML terminology <XmlElement  DEF='idNameattribute='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> -->

to top <!-- For additional help information about X3D scenes, please see X3D Tooltips, X3D Resources, and X3D Scene Authoring Hints. -->