<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.0//EN" "http://www.web3d.org/specifications/x3d-3.0.dtd">
<X3D profile='Immersiveversion='3.0xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation=' http://www.web3d.org/specifications/x3d-3.0.xsd '>
<head>
<meta name='titlecontent='EventUtilityExamples.x3d'/>
<meta name='descriptioncontent='Event utility node examples for boolean filtering and other event utility nodes.'/>
<meta name='creatorcontent='Don Brutzman'/>
<meta name='createdcontent='3 November 2002'/>
<meta name='modifiedcontent='6 September 2010'/>
<meta name='subjectcontent='BooleanFilter BooleanToggle BooleanTrigger IntegerTrigger TimeTrigger'/>
<meta name='identifiercontent=' http://www.web3d.org/x3d/content/examples/Basic/development/EventUtilityExamples.x3d '/>
<meta name='generatorcontent='X3D-Edit 3.2, https://savage.nps.edu/X3D-Edit'/>
<meta name='licensecontent=' ../license.html'/>
</head>
<!-- -->
<Scene>
<!-- ======================================== -->
<!-- ExternProtoDeclare definitions are used here only for language development - do not copy into other scenes! -->
<!-- ExternProtoDeclare node support is provided either by X3D-compliant browser or X3dToVrml97.xslt ExternProtoDeclare definitions. -->
<!-- ======================================== -->
<ExternProtoDeclare name='BooleanFilterappinfo='Selectively pass only true or false events.'
  url=' "EventUtilityPrototypes.wrl#BooleanFilter" "http://www.web3d.org/x3d/content/examples/Basic/development/EventUtilityPrototypes.wrl#BooleanFilter" "EventUtilityPrototypes.x3d#BooleanFilter" "http://www.web3d.org/x3d/content/examples/Basic/development/EventUtilityPrototypes.x3d#BooleanFilter" '>
<field name='set_booleantype='SFBoolaccessType='inputOnly'/>
<field name='inputTruetype='SFBoolaccessType='outputOnly'/>
<field name='inputFalsetype='SFBoolaccessType='outputOnly'/>
<field name='inputNegatetype='SFBoolaccessType='outputOnly'/>
</ExternProtoDeclare>
<!-- ======================================== -->
<ExternProtoDeclare name='BooleanToggleappinfo='Negate or reset prior boolean state output result.'
  url=' "EventUtilityPrototypes.wrl#BooleanToggle" "http://www.web3d.org/x3d/content/examples/Basic/development/EventUtilityPrototypes.wrl#BooleanToggle" "EventUtilityPrototypes.x3d#BooleanToggle" "http://www.web3d.org/x3d/content/examples/Basic/development/EventUtilityPrototypes.x3d#BooleanToggle" '>
<!-- warning: toggle depends on exposedField functionality in Script node, not compatible with VRML 97. implemented as inputOnly/initializeOnly/outputOnly triplet. -->
<field name='set_booleantype='SFBoolaccessType='inputOnly'/>
<field name='set_toggletype='SFBoolaccessType='inputOnly'/>
<field name='toggletype='SFBoolaccessType='inputOutput'/>
<field name='toggle_changedtype='SFBoolaccessType='outputOnly'/>
</ExternProtoDeclare>
<!-- ======================================== -->
<ExternProtoDeclare name='BooleanTriggerappinfo='Convert time events to boolean true events.'
  url=' "EventUtilityPrototypes.wrl#BooleanTrigger" "http://www.web3d.org/x3d/content/examples/Basic/development/EventUtilityPrototypes.wrl#BooleanTrigger" "EventUtilityPrototypes.x3d#BooleanTrigger" "http://www.web3d.org/x3d/content/examples/Basic/development/EventUtilityPrototypes.x3d#BooleanTrigger" '>
<field name='set_triggerTimetype='SFTimeaccessType='inputOnly'/>
<field name='triggerTruetype='SFBoolaccessType='outputOnly'/>
</ExternProtoDeclare>
<!-- ======================================== -->
<ExternProtoDeclare name='IntegerTriggerappinfo='Convert boolean true or time input events to integer value (suitable for Switch node).'
  url=' "EventUtilityPrototypes.wrl#IntegerTrigger" "http://www.web3d.org/x3d/content/examples/Basic/development/EventUtilityPrototypes.wrl#IntegerTrigger" "EventUtilityPrototypes.x3d#IntegerTrigger" "http://www.web3d.org/x3d/content/examples/Basic/development/EventUtilityPrototypes.x3d#IntegerTrigger" '>
<field name='set_booleantype='SFBoolaccessType='inputOnly'/>
<field name='set_integerKeytype='SFInt32accessType='inputOnly'/>
<field name='integerKeytype='SFInt32accessType='inputOutput'/>
<field name='integerKey_changedtype='SFInt32accessType='outputOnly'/>
<field name='triggerValuetype='SFInt32accessType='outputOnly'/>
</ExternProtoDeclare>
<!-- ======================================== -->
<ExternProtoDeclare name='TimeTriggerappinfo='Convert boolean true events to time events.'
  url=' "EventUtilityPrototypes.wrl#TimeTrigger" "http://www.web3d.org/x3d/content/examples/Basic/development/EventUtilityPrototypes.wrl#TimeTrigger" "EventUtilityPrototypes.x3d#TimeTrigger" "http://www.web3d.org/x3d/content/examples/Basic/development/EventUtilityPrototypes.x3d#TimeTrigger" '>
<field name='set_booleantype='SFBoolaccessType='inputOnly'/>
<field name='triggerTimetype='SFTimeaccessType='outputOnly'/>
</ExternProtoDeclare>
<!-- ======================================== -->
<Group>
<Transform translation='0 3 0'>
<Anchor description='Click for BooleanFilter exampleparameter='"target=_blank"'
  url=' "../../Savage/Tools/HeadsUpDisplays/CrossHairExample.x3d" "https://savage.nps.edu/Savage/Tools/HeadsUpDisplays/CrossHairExample.x3d" "../../Savage/Tools/HeadsUpDisplays/CrossHairExample.wrl" "https://savage.nps.edu/Savage/Tools/HeadsUpDisplays/CrossHairExample.wrl" '>
<Shape>
<Appearance>
<Material diffuseColor='0.6 0.6 0.2'/>
</Appearance>
<Text string='"BooleanFilter example"solid='false'>
<FontStyle DEF='TextFontjustify='"MIDDLE" "MIDDLE"size='0.8style='BOLD'/>
</Text>
</Shape>
</Anchor>
</Transform>
<Transform translation='0 1.5 0'>
<Anchor description='Click for BooleanToggle exampleparameter='"target=_blank"'
  url=' "../../Savage/Tools/HeadsUpDisplays/CrossHairExample.x3d" "https://savage.nps.edu/Savage/Tools/HeadsUpDisplays/CrossHairExample.x3d" "../../Savage/Tools/HeadsUpDisplays/CrossHairExample.wrl" "https://savage.nps.edu/Savage/Tools/HeadsUpDisplays/CrossHairExample.wrl" '>
<Shape>
<Appearance>
<Material diffuseColor='0.6 0.6 0.2'/>
</Appearance>
<Text string='"BooleanToggle example"solid='false'>
<FontStyle USE='TextFont'/>
</Text>
</Shape>
</Anchor>
</Transform>
<Transform>
<Anchor description='Click for BooleanTrigger exampleparameter='"target=_blank"'
  url=' "../../Savage/Tools/HeadsUpDisplays/CrossHairExample.x3d" "https://savage.nps.edu/Savage/Tools/HeadsUpDisplays/CrossHairExample.x3d" "../../Savage/Tools/HeadsUpDisplays/CrossHairExample.wrl" "https://savage.nps.edu/Savage/Tools/HeadsUpDisplays/CrossHairExample.wrl" '>
<Shape>
<Appearance>
<Material diffuseColor='0.6 0.6 0.2'/>
</Appearance>
<Text string='"BooleanTrigger example"solid='false'>
<FontStyle USE='TextFont'/>
</Text>
</Shape>
</Anchor>
</Transform>
<Transform translation='0 -1.5 0'>
<Anchor description='Click for IntegerTrigger exampleparameter='"target=_blank"'
  url=' "../../Savage/Tools/Animation/MaterialChoiceExample.x3d" "https://savage.nps.edu/Savage/Tools/Animation/MaterialChoiceExample.x3d" "../../Savage/Tools/Animation/MaterialChoiceExample.wrl" "https://savage.nps.edu/Savage/Tools/Animation/MaterialChoiceExample.wrl" '>
<Shape>
<Appearance>
<Material diffuseColor='0.6 0.6 0.2'/>
</Appearance>
<Text string='"IntegerTrigger example"solid='false'>
<FontStyle USE='TextFont'/>
</Text>
</Shape>
</Anchor>
</Transform>
<!-- TimeTriggerTransform ROUTE:  [from TimeTriggerOrientationInterpolator.value_changed to set_rotation ] -->
<Transform DEF='TimeTriggerTransformtranslation='0 -3 0'>
<!-- TimeTriggerTouchSensor ROUTE:  [from isActive to TimeTriggerNode.set_boolean ] -->
<TouchSensor DEF='TimeTriggerTouchSensordescription='Click forTimeTrigger example'/>
<Shape>
<Appearance>
<Material diffuseColor='0.6 0.6 0.2'/>
</Appearance>
<Text string='"TimeTrigger example"solid='false'>
<FontStyle USE='TextFont'/>
</Text>
</Shape>
</Transform>
<!-- TimeTriggerNode ROUTEs:  [from TimeTriggerTouchSensor.isActive to set_boolean ] [from triggerTime to TimeTriggerTimeSensor.startTime ] -->
<TimeTrigger DEF='TimeTriggerNodecontainerField='children'/>
<!-- TimeTriggerTimeSensor ROUTEs:  [from TimeTriggerNode.triggerTime to startTime ] [from fraction_changed to TimeTriggerOrientationInterpolator.set_fraction ] -->
<TimeSensor DEF='TimeTriggerTimeSensorcycleInterval='2'/>
<!-- TimeTriggerOrientationInterpolator ROUTEs:  [from TimeTriggerTimeSensor.fraction_changed to set_fraction ] [from value_changed to TimeTriggerTransform.set_rotation ] -->
<OrientationInterpolator DEF='TimeTriggerOrientationInterpolatorkey='0 0.5 1keyValue='0 1 0 0 0 1 0 3.14159 0 1 0 6.2432'/>
<ROUTE fromNode='TimeTriggerTouchSensorfromField='isActivetoNode='TimeTriggerNodetoField='set_boolean'/>
<ROUTE fromNode='TimeTriggerNodefromField='triggerTimetoNode='TimeTriggerTimeSensortoField='startTime'/>
<ROUTE fromNode='TimeTriggerTimeSensorfromField='fraction_changedtoNode='TimeTriggerOrientationInterpolatortoField='set_fraction'/>
<ROUTE fromNode='TimeTriggerOrientationInterpolatorfromField='value_changedtoNode='TimeTriggerTransformtoField='set_rotation'/>
</Group>
</Scene>
</X3D>
<!--

Index for ExternProtoDeclare definitions: BooleanFilter, BooleanToggle, BooleanTrigger, IntegerTrigger, TimeTrigger
Index for DEF nodes: TextFont, TimeTriggerNode, TimeTriggerOrientationInterpolator, TimeTriggerTimeSensor, TimeTriggerTouchSensor, TimeTriggerTransform
-->

<!-- Color key: <X3dNode DEF='idName' field='value'/> matches <XmlElement DEF='idName' attribute='value'/>     <Prototype name='ProtoName'> <field name='fieldName'/> </Prototype> -->