X3D Model Documentation: EventUtilityPrototypes.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='EventUtilityPrototypes.x3d'/>
  6            <meta name='descriptioncontent='Event utility node prototypes for boolean filtering and other event utility nodes.'/>
  7            <meta name='creatorcontent='Nick Polys, Tony Parisi, Don Brutzman, Justin Couch'/>
  8            <meta name='createdcontent='25 September 2002'/>
  9            <meta name='modifiedcontent='20 January 2020'/>
 10            <meta name=' warning content=' Under development, IntegerTrigger example needed. '/>
 11            <meta name='referencecontent='EventUtilityExamples.x3d'/>
 12            <meta name='subjectcontent='BooleanFilter BooleanToggle BooleanTrigger IntegerTrigger TimeTrigger'/>
 13            <meta name='identifiercontent='https://www.web3d.org/x3d/content/examples/Basic/development/EventUtilityPrototypes.x3d'/>
 14            <meta name='generatorcontent='X3D-Edit 3.3, https://savage.nps.edu/X3D-Edit'/>
 15            <meta name='licensecontent='../license.html'/>
 16       </head>
<!--

<!--
Event Graph ROUTE Table shows event connections.
-->
<!-- to top Index for DEF nodes: BooleanFilterScript, BooleanToggleScript, IntegerKeyHolder, TriggerBooleanScript, TriggerIntegerScript, TriggerTimeScript

Index for ProtoDeclare definitions: BooleanFilter, BooleanToggle, BooleanTrigger, IntegerTrigger, TimeTrigger
-->
 17       <Scene>
 18            <WorldInfo title='EventUtilityPrototypes.x3d'/>
 19            <ProtoDeclare name='BooleanFilterappinfo='BooleanFilter selectively passes true false or negated events.'>
 20                 <ProtoInterface>
 21                      <field name='set_booleantype='SFBoolaccessType='inputOnly'
                     appinfo='set_boolean is the input value to be filtered.'/>
 22                      <field name='inputTruetype='SFBoolaccessType='outputOnly'
                     appinfo='inputTrue only passes a true value when set_boolean input is true.'/>
 23                      <field name='inputFalsetype='SFBoolaccessType='outputOnly'
                     appinfo='inputFalse only passes a false value when set_boolean is false.'/>
 24                      <field name='inputNegatetype='SFBoolaccessType='outputOnly'
                     appinfo='inputNegate provides opposite value by negating set_boolean input.'/>
 25                 </ProtoInterface>
 26                 <ProtoBody>
 27                      <Script DEF='BooleanFilterScript'>
 28                           <field name='set_booleantype='SFBoolaccessType='inputOnly'/>
 29                           <field name='inputTruetype='SFBoolaccessType='outputOnly'/>
 30                           <field name='inputFalsetype='SFBoolaccessType='outputOnly'/>
 31                           <field name='inputNegatetype='SFBoolaccessType='outputOnly'/>
 32                           <IS>
 33                                <connect nodeField='set_booleanprotoField='set_boolean'/>
 34                                <connect nodeField='inputTrueprotoField='inputTrue'/>
 35                                <connect nodeField='inputFalseprotoField='inputFalse'/>
 36                                <connect nodeField='inputNegateprotoField='inputNegate'/>
 37                           </IS>
  <![CDATA[
          
ecmascript:

function set_boolean (value, timestamp)
{
	if (value) inputTrue  = value;
	else       inputFalse = value;
	inputNegate = !value;

//	if (value) Browser.println ('[BooleanFilter] set_boolean=' + value + ', inputTrue='  + inputTrue  + ', inputNegate=' + inputNegate);
//	else       Browser.println ('[BooleanFilter] set_boolean=' + value + ', inputFalse=' + inputFalse + ', inputNegate=' + inputNegate);
}

        
]]>
 39                      </Script>
 40                 </ProtoBody>
 41            </ProtoDeclare>
 42            <!-- ======================================== -->
 43            <ProtoDeclare name='BooleanToggleappinfo='BooleanToggle maintains state and negates output when a true input is provided.'>
 44                 <ProtoInterface>
 45                      <field name='set_booleantype='SFBoolaccessType='inputOnly'
                     appinfo='If set_boolean input is true toggle state.'/>
 46                      <field name='set_toggletype='SFBoolaccessType='inputOnly'
                     appinfo='Reset persistent state value.'/>
 47                      <field name='toggletype='SFBoolvalue='falseaccessType='initializeOnly'
                     appinfo='Persistent state value that gets toggled or reset.'/>
 48                      <field name='toggle_changedtype='SFBoolaccessType='outputOnly'
                     appinfo='Output toggled persistent state value.'/>
 49                      <!-- warning: toggle depends on exposedField functionality in Script node, not compatible with VRML 97. implemented as inputOnly/initializeOnly/outputOnly triplet. -->
 50                 </ProtoInterface>
 51                 <ProtoBody>
 52                      <Group>
 53                           <Script DEF='BooleanToggleScript'>
 54                                <field name='set_booleantype='SFBoolaccessType='inputOnly'/>
 55                                <field name='set_toggletype='SFBoolaccessType='inputOnly'/>
 56                                <field name='toggletype='SFBoolvalue='falseaccessType='initializeOnly'/>
 57                                <field name='toggle_changedtype='SFBoolaccessType='outputOnly'/>
 58                                <field name='traceEnabledtype='SFBoolvalue='falseaccessType='initializeOnly'/>
 59                                <IS>
 60                                     <connect nodeField='set_booleanprotoField='set_boolean'/>
 61                                     <connect nodeField='set_toggleprotoField='set_toggle'/>
 62                                     <connect nodeField='toggle_changedprotoField='toggle_changed'/>
 63                                </IS>
  <![CDATA[
            
ecmascript:

function initialize ()
{
	if (traceEnabled) Browser.println ('[BooleanToggle] toggle=' + toggle);

}
function set_boolean (value, timestamp)
{
	if (value == true)  // only toggle on true input
	{
		if (toggle == true) toggle = false;
		else                toggle = true;
	}
	toggle_changed = toggle;
//	Browser.println ('[BooleanToggle] traceEnabled=' + traceEnabled);
	if (traceEnabled) Browser.println ('[BooleanToggle] set_boolean=' + value + ', toggle=' + toggle);
}
function set_toggle (value, timestamp)
{
	toggle = value;
	toggle_changed = toggle;
	if (traceEnabled) Browser.println ('[BooleanToggle] set_toggle=' + set_toggle);
}

          
]]>
 65                           </Script>
 66                      </Group>
 67                 </ProtoBody>
 68            </ProtoDeclare>
 69            <!-- ======================================== -->
 70            <ProtoDeclare name='BooleanTriggerappinfo='BooleanTrigger converts time events to boolean true events.'>
 71                 <ProtoInterface>
 72                      <field name='set_triggerTimetype='SFTimeaccessType='inputOnly'
                     appinfo='set_triggerTime provides input time event typical event sent is TouchSensor touchTime.'/>
 73                      <field name='triggerTruetype='SFBoolaccessType='outputOnly'
                     appinfo='triggerTrue outputs a true value whenever a triggerTime event is received.'/>
 74                 </ProtoInterface>
 75                 <ProtoBody>
 76                      <Script DEF='TriggerBooleanScript'>
 77                           <field name='set_triggerTimetype='SFTimeaccessType='inputOnly'/>
 78                           <field name='triggerTruetype='SFBoolaccessType='outputOnly'/>
 79                           <IS>
 80                                <connect nodeField='set_triggerTimeprotoField='set_triggerTime'/>
 81                                <connect nodeField='triggerTrueprotoField='triggerTrue'/>
 82                           </IS>
  <![CDATA[
          
ecmascript:

function set_triggerTime (value, timestamp)
{
	triggerTrue = true;
//	Browser.println ('triggerTrue = true');
}

        
]]>
 84                      </Script>
 85                 </ProtoBody>
 86            </ProtoDeclare>
 87            <!-- ======================================== -->
 88            <ProtoDeclare name='IntegerTriggerappinfo='IntegerTrigger converts boolean true or time input events to integer value (suitable for Switch node).'>
 89                 <ProtoInterface>
 90                      <field name='set_booleantype='SFBoolaccessType='inputOnly'
                     appinfo='If set_boolean input is true trigger output of integer value.'/>
 91                      <field name='set_integerKeytype='SFInt32accessType='inputOnly'
                     appinfo='Resets value used for output when triggered later.'/>
 92                      <field name='integerKeytype='SFInt32value='-1accessType='inputOutput'
                     appinfo='integerKey is value for output when triggered.'/>
 93                      <field name='integerKey_changedtype='SFInt32accessType='outputOnly'
                     appinfo='Reports change in integerKey value.'/>
 94                      <field name='triggerValuetype='SFInt32accessType='outputOnly'
                     appinfo='triggerValue provides integer event output matching integerKey when true set_boolean received.'/>
 95                 </ProtoInterface>
 96                 <ProtoBody>
 97                      <Group>
 98 
                         <!-- Switch IntegerKeyHolder is a DEF node that has 1 USE node: USE_1 -->
                         <Switch DEF='IntegerKeyHolderwhichChoice='-1'>
 99                                <IS>
100                                     <connect nodeField='whichChoiceprotoField='integerKey'/>
101                                </IS>
102                           </Switch>
103                           <Script DEF='TriggerIntegerScriptdirectOutput='true'>
104                                <field name='set_booleantype='SFBoolaccessType='inputOnly'/>
105                                <field name='set_integerKeytype='SFInt32accessType='inputOnly'/>
106                                <field name='integerKeyHolderNodetype='SFNodeaccessType='initializeOnly'>
107                                     <Switch USE='IntegerKeyHolder'/>
108                                </field>
109                                <field name='integerKey_changedtype='SFInt32accessType='outputOnly'/>
110                                <field name='triggerValuetype='SFInt32accessType='outputOnly'/>
111                                <IS>
112                                     <connect nodeField='set_booleanprotoField='set_boolean'/>
113                                     <connect nodeField='set_integerKeyprotoField='set_integerKey'/>
114                                     <connect nodeField='integerKey_changedprotoField='integerKey_changed'/>
115                                     <connect nodeField='triggerValueprotoField='triggerValue'/>
116                                </IS>
  <![CDATA[
            
ecmascript:

function set_boolean (inputValue, timestamp)
{
	if (inputValue == true)
	{
		integerKey = integerKeyHolderNode.whichChoice;
		triggerValue = integerKey; // send output event
	}
}
function set_integerKey (inputValue, timestamp)
{
	integerKey = inputValue;
	integerKeyHolderNode.whichChoice = integerKey;
	integerKey_changed = integerKey; // send output event
}

          
]]>
118                           </Script>
119                      </Group>
120                 </ProtoBody>
121            </ProtoDeclare>
122            <!-- ======================================== -->
123            <ProtoDeclare name='TimeTriggerappinfo='TimeTrigger converts boolean true events to time events.'>
124                 <ProtoInterface>
125                      <field name='set_booleantype='SFBoolaccessType='inputOnly'
                     appinfo='If set_boolean input is true trigger output time value.'/>
126                      <field name='triggerTimetype='SFTimeaccessType='outputOnly'
                     appinfo='triggerTime is output time event sent when set_boolean input is true.'/>
127                 </ProtoInterface>
128                 <ProtoBody>
129                      <Script DEF='TriggerTimeScript'>
130                           <field name='set_booleantype='SFBoolaccessType='inputOnly'/>
131                           <field name='triggerTimetype='SFTimeaccessType='outputOnly'/>
132                           <IS>
133                                <connect nodeField='set_booleanprotoField='set_boolean'/>
134                                <connect nodeField='triggerTimeprotoField='triggerTime'/>
135                           </IS>
  <![CDATA[
          
ecmascript:

function set_boolean (value, timestamp)
{
	if (value) triggerTime = timestamp;
}

        
]]>
137                      </Script>
138                 </ProtoBody>
139            </ProtoDeclare>
140            <!-- ======================================== -->
141            <Anchor description='EventUtilityExamplesparameter='"target=_blank"'   url=' "EventUtilityExamples.x3d" "https://www.web3d.org/x3d/content/examples/Basic/development/EventUtilityExamples.x3d" "EventUtilityExamples.wrl" "https://www.web3d.org/x3d/content/examples/Basic/development/EventUtilityExamples.wrl" '>
142                 <Shape>
143                      <Text string='"EventUtilityPrototype" "defines prototypes" "" "Click text to see" "EventUtilityExamples"'>
144                           <FontStyle justify='"MIDDLE" "MIDDLE"size='0.9'/>
145                      </Text>
146                      <Appearance>
147                           <Material diffuseColor='1 1 0.2'/>
148                      </Appearance>
149                 </Shape>
150            </Anchor>
151       </Scene>
152  </X3D>
<!--

<!--
Event Graph ROUTE Table shows event connections.
-->
<!-- to top Index for DEF nodes: BooleanFilterScript, BooleanToggleScript, IntegerKeyHolder, TriggerBooleanScript, TriggerIntegerScript, TriggerTimeScript

Index for ProtoDeclare definitions: BooleanFilter, BooleanToggle, BooleanTrigger, IntegerTrigger, TimeTrigger
-->
X3D Tooltips element index: Anchor, Appearance, connect, field, FontStyle, Group, head, IS, Material, meta, ProtoBody, ProtoDeclare, ProtoInterface, Scene, Script, Shape, Switch, Text, WorldInfo, X3D, plus documentation for accessType definitions, type definitions, XML data types, and field types

-->
<!-- Online at
https://www.web3d.org/x3d/content/examples/Basic/development/EventUtilityPrototypesIndex.html -->
<!-- Version control at
https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/content/examples/Basic/development/EventUtilityPrototypes.x3d -->

<!-- Color-coding 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)
    <ProtoDeclare name='ProtoName'> <field name='fieldName'/> </ProtoDeclare> -->

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