Extensible 3D (X3D)
Part 1: Architecture and base components
30 Event Utilities component
事件工具组件
这部分组件的名称是 “EventUtilities” 。当在 COMPONENT 语句中引用这个组件时需要使用这个名称(参见 7.2.3.4 Component 语句)。
本条款描述了 ISO/IEC 19775 标准这部分中的 Event Utilities component(事件工具组件)。这其中包括触发器(Trigger)和过滤器(Sequencer)节点类型,作者通过这些节点,不需要使用 Script {} 节点就可以为一般的交互应用众多门功能、转换功能、序列化操作的功能。表 30.1 列出了这一条款的主要主题。
Event Utilities 组件由三个基本概念构成:给定类型的 SF 单个域(Single Field)事件的变化(Mutating),由其它类型事件导致的给定类型的 SF 单个域事件的触发(Triggering),沿时间线产生 SF 单个域事件的序列化(Sequencing)(作为离散值发生器)。这些节点结合 ROUTE 路由可以建立复杂交互行为,而不需要使用脚本节点。这在某些对交互有重要影响的 Profiles 概貌中很有用,例如这些概貌中不一定支持 Script 节点(6.17.3.2)。
事件工具节点在变换层级中的位置不会影响其运作效果。例如如果一个 BooleanSequencer 节点为一个 Switch 节点的子节点,即使 whichChoice 设置为 -1(忽略此子节点),BooleanSequencer 也会继续按指定的方式运作(接收和发送事件)。
变化节点允许内容作者改变给定类型的值。例如 BooleanFilter 节点接收单个 boolean 输入事件,并根据输入值产生 TRUE 或 FALSE 输出事件;同时还产生和输入事件相反的事件。这些事件允许建立条件化的行为,而不需要使用脚本。
触发节点在输入一个不同类型的事件时,产生一个给定类型的输入事件。例如当接收到一个 boolean 输入事件时,TimeTrigger 节点产生一个输出时间事件,以允许内容作者根据某个 boolean 事件来起动一个 TimeSensor,此时和改变其 isActive 域的效果相同。
所有触发节点衍生于 X3DTriggerNode 基本节点类型。
序列器节点设计用来让内容作者根据 TimeSensor 运行时的输出来产生离散事件系列中的一个指定序列。他们是由抽象节点类型 X3DSequencerNode 衍生而成,因而都有 set_fraction (SFFloat [in]) 和 key (MFFloat [in,out])。
set_fraction eventIn 接收一个 SFFloat 事件并用序列化函数求职,结果输出一个和 set_fraction 事件时间戳相同的 value_changed eventOut 事件。输出域和 keyValue 的用法依赖于序列器节点的类型。
BooleanSequencer 和 IntegerSequencer 输出一个单值域到 value_changed。每个 keyValue 域中的值按顺序对应 key 域中的参数值。如果序列器 key 域中的值的数目和 keyValue 域中的值的数目不等,则结果未定义。
指定的 X3D 序列器节点被设计用来沿时间线产生离散事件。每一个此类节点定义了在一定区间 (-infinity, +infinity) 中分段线型函数 f(t)。分段线型函数由 t 的称为 key(键)的 n 值定义,n 对应 f(t) 的值称为 keyValue(关键值)。键应为单一非渐减的值,否则结果未定义。键并不严格限制为一定间隔。
每一个此类节点按照以下方式计算给定 t 值(经由 fraction 域输入)的 f(t) 函数值:以 n 个键 t0, t1, t2, ..., tn-1 划分负无穷到正无穷 (-infinity, +infinity) 的区间为 n+1 个子区间 (-infinity, t0), [t0, t1), [t1, t2), ... , [tn-1, +infinity)。同时以 n 个值 v0, v1, v2, ..., vn-1 定为 f(t) 中对应的关键值。序列化函数的离散值 f(t) 定义为:
f(t) = vn, if tn ≤ t < tn-1
= v0, if t ≤ t0, = vn-1, if t ≥ tn-1
X3DSequencerNode : X3DChildNode { SFFloat [in] set_fraction (-∞,∞) MFFloat [in,out] key [] (-∞,∞) MF<type> [in,out] keyValue [] [S|M]F<type> [out] value_changed }
这个抽象类型是衍生所有序列器(Sequencer)节点的基本节点类型。30.2 概念中包含了序列器节点的详细讨论。
X3DTriggerNode : X3DChildNode { }
这个抽象类型是衍生所有触发器(Trigger)节点的基本节点类型。30.2 概念中包含了触发器节点的详细讨论。
BooleanFilter : X3DChildNode { SFBool [in] set_boolean SFBool [out] inputFalse SFBool [out] inputNegate SFBool [out] inputTrue }
BooleanFilter 过滤性地发送 boolean 事件,允许选择性的路由 TRUE 值、FALSE 值或相反值。
当接收到 set_boolean 事件时,BooleanFilter 节点生成两个事件:基于接收到的 boolean 值输出 inputTrue 事件(接收 True 时)或 inputFalse 事件(接收到 False 时)事件;输出包含和接收值相反值的 inputNegate 事件。
BooleanSequencer : X3DSequencerNode { SFFloat [in] set_fraction MFFloat [in,out] key [] (-∞,∞) MFBool [in,out] keyValue [] SFBool [out] value_changed }
BooleanSequencer 生成由某个 TimeSensor 时钟驱动的序列化的 SFBool 事件。它可以控制其它的动作,比如可以激活/禁止灯光或传感器,或通过 set_bind 绑定/解除绑定 Viewpoints 或其它 X3DBindableNodes 可绑定子节点。
keyValue 域由一个 FALSE 值和 TRUE 值的列表构成。
对每个节点的单独激活或被绑定,BooleanSequencer 应为每个节点单独实例化。
BooleanToggle : X3DChildNode { SFBool [in] set_boolean SFBool [in,out] toggle FALSE }
BooleanToggle 存储 boolean 值以触发开/关。
当接受到一个 set_boolean TRUE 事件时,BooleanToggle 反转 toggle 域的值并生成相应 toggle 域输出事件。set_boolean FALSE 事件将被忽略。
通过直接设置 inputOutput toggle 域的值,BooleanToggle 可以被复位到指定状态。
BooleanTrigger : X3DChildNode { SFTime [in] set_triggerTime SFBool [out] triggerTrue }
BooleanTrigger 是一个触发器节点,在接收到时间事件时生成 boolean 事件。
当 BooleanTrigger 接收到一个 set_triggerTime 事件时,生成 triggerTrue 事件。triggerTrue 的值应总为 TRUE。
IntegerSequencer : X3DSequencerNode { SFFloat [in] set_fraction MFFloat [in,out] key [] (-∞,∞) MFInt32 [in,out] keyValue [] -1|[1, ∞) SFInt32 [out] value_changed }
IntegerSequencer 是一个离散值生成器,它根据单一 TimeSensor 时钟生成序列化的 SFInt32 事件。这可以用来驱动 Switch 节点的 set_whichChoice 域。
IntegerTrigger : X3DChildNode { SFBool [in] set_boolean SFInt32 [in,out] integerKey -1|(-∞,∞) SFInt32 [out] triggerValue }
IntegerTrigger 处理单一域 Boolean 事件并设置一个 SFInt32 整数值输出事件。这对于连接环境化事件到 Switch 节点的 whichChoice 域这类情况很有用。
一旦接受到一个 set_boolean 事件,IntegerTrigger 节点将生成一个 triggerValue 事件,其事件值为当前的 integerKey 值。
TimeTrigger : X3DTriggerNode { SFBool [in] set_boolean SFTime [out] triggerTime }
TimeTrigger 是一个触发器节点,在接收到 boolean 事件时生成时间事件。
当 TimeTrigger 接收到一个 set_boolean 事件时,生成 triggerTime 事件。triggerTime 的值应为 set_boolean 事件接受的时间。set_boolean 的值应被忽略。
Event Utilities 组件提供
表 30.2 中规定的支持层(levels)。
Level 1 提供了以上定义所有节点的完全支持。
Table 30.2: Event utilities 组件支持层
层Level | 必备条件 | 节点 | 支持 |
---|---|---|---|
1 | Core 1; Grouping 1 | ||
X3DSequencerNode (抽象) | 所有域 | ||
X3DTriggerNode (抽象) | 所有域 | ||
BooleanFilter | 所有域 | ||
BooleanSequencer | 所有域 | ||
BooleanToggle | 所有域 | ||
BooleanTrigger | 所有域 | ||
IntegerSequencer | 所有域 | ||
IntegerTrigger | 所有域 | ||
NodeSequencer | 所有域 | ||
TimeTrigger | 所有域 |
翻译m17 保留版权 如需转载请联系 http://m17design.myetang.com/x3d