Extensible 3D (X3D)
Part 1: Architecture and base components

21 Key device sensor component

键设备传感器组件

--- X3D separator bar ---

cube 21.1 介绍

21.1.1 名称

这部分组件的名称是 “KeyDeviceSensor”。当在 COMPONENT 语句中引用这个组件时需要使用这个名称(参见 7.2.3.4 Component 语句)。

21.1.2 概述

条款描述了 ISO/IEC 19775 标准这部分中的 Key Device Sensor component(键设备传感器组件)。其中包括如何把单个击键或一系列击键输入到 X3D 场景中。表 21.1 列出了这一条款的主要主题。

表 21.1 — 本条款的主题

cube 21.2 概念

以下节点类型是键设备keydevice)传感器:

当 KeySensor 活动时,只要物理键盘设备上的相关键的状态改变,KeySensors 就会产生事件。将由一个事件返回以识别是那一个键的状态发生改变。

当 StringSensor 中指定的终止字符被识别到时,StringSensors 产生一个事件。这个事件将返回终止字符前的 UTF-8 字符。StringSensors 对字符串建立时的变化,也将产生中间事件。这就允许在字符串建立时做出相应的提示。

只要支持这个传感器组件,就假定存在一个可用的键盘类型的键设备,而不管是实际物理设备还是通过模拟的设备。如果希望一个键设备可以产生事件并输入到键设备传感器,则这个键设备需要被激活。键设备在以下情况时 被激活:

  1. 场景取得支持的用户界面的焦点;
  2. 键设备传感器的 isActive 域被设置为 TRUE。

isActive 域的状态改变时,会产生 isActive 事件以作相应提示。

当一个键设备传感器的 enabled 域设置为 TRUE 时,此键设备传感器被激活。这同时也导致此键设备传感器的 isActive 域被设置为 TRUE。同时,应向其它的可能活动的键设备传感器发送 enabled FALSE 事件。同一时刻激活的键设备传感器只能有一个。

cube 21.3 抽象类型

21.3.1 X3DKeyDeviceSensorNode

X3DKeyDeviceSensorNode : X3DSensorNode {
  SFBool   [in,out] enabled          TRUE
  SFBool   [out]    isActive         
}

这个抽象节点类型是所有使用键设备运作的传感器节点类型的的基本节点类型。

cube 21.4 节点参考

21.4.1 KeySensor

KeySensor : X3DKeyDeviceSensorNode {
  SFBool   [in,out] enabled          TRUE
  SFInt32  [out]    actionKeyPress   
  SFInt32  [out]    actionKeyRelease 
  SFBool   [out]    altKey           
  SFBool   [out]    controlKey       
  SFBool   [out]    isActive         
  SFString [out]    keyPress         
  SFString [out]    keyRelease       
  SFBool   [out]    shiftKey         
}

当用户在键盘上按键时,KeySensor 节点产生事件。通过向 KeySensor 节点发送 TRUE 值或 FALSE 值的 enabled 事件,可以激活或禁止 KeySensor 节点。如果 KeySensor 节点被禁止,它将不会再追踪键盘输入或产生事件。

在按下或松开键盘上的字符键时会产生 keyPress 事件和 keyRelease 事件。这些事件的值是一个长度为 1 的包含单个 UTF-8 字符的和相应击键相关字符串。产生的相应的 UTF-8 字符集能对应不同的键盘和不同的执行模式。

在按下或松开键盘上的动作键('action' key)时会产生 actionKeyPress 事件和 actionKeyRelease 事件。这些事件的值由 表 21.2 列出:

表 21.2动作键的值

HOME 13 END 14 PGUP 15
PGDN 16 UP 17 DOWN 18
LEFT 19 RIGHT 20 F1-F12 1-12

在按下或松开键盘上的 shift、alt、control 键被时会产生 shiftKey_depressedaltKey_depressed、controlKey_depressed 事件。当键按下时值为 TRUE,当键松开时值为 FALSE

当按下一个键时,KeySensor 节点产生一个 isActive TRUE 事件。一旦松开这个键,KeySensor 将发送 isActive FALSE 事件。

KeySensor 不受自己在变换层级中位置的影响。

21.4.2 StringSensor

StringSensor  : X3DKeyDeviceSensorNode {
  SFBool   [in,out] deletionAllowed      TRUE
  SFBool   [in,out] enabled              TRUE
  SFString [out]    enteredText       
  SFString [out]    finalText         
  SFBool   [out]    isActive          
}

当用户在键盘上按键时,StringSensor 节点产生一个事件。通过向 StringSensor 节点发送 TRUE 值或 FALSE 值的 enabled 事件,可以激活或禁止 StringSensor 节点。如果 StringSensor 节点被禁止,它将不会再追踪键盘输入或产生事件。

当按下键盘上的字符键时产生 enteredText 事件。事件的值为输入的 UTF-8 字符串,包括最后键入的字符。产生的相应的 UTF-8 字符集能对应不同的键盘和不同的执行模式。

如果 deletionAllowed 值为 TRUE,当输入浏览器用来识别删除前一个字符的字符值时,enteredText 中以前输入的字符可以被删除。一般这个值由本地操作系统定义。如果 deletionAllowed 值为 FALSE,则只可以增加字符串中的字符;而不允许删除字符。当输入浏览器用来识别删除前一个字符的字符值时,输入被忽略。

当输入浏览器用来识别终止字符串的值时,产生 finalText 事件。一般这个值由本地操作系统定义。当此输入被识别时,finalText 域产生的事件的值等于 enteredText。当 finalText 域事件产生后,enteredText 域被设置为空字符串,但此时不产生事件。

当用户开始键入时,StringSensor 发送一个 isActive TRUE 事件。当字符串结束时,StringSensor 发送一个 isActive  FALSE 事件。

StringSensor 不受自己在变换层级中位置的影响。

cube 21.5 支持层

Key Device Sensor 组件提供 表 21.3 中规定的两个支持层(levels)。

表 21.3Key device sensor 组件支持层

层Level 必备条件 节点/特性 支持
1 Core 1

X3DKeyDeviceSensorNode (abstract) n/a
KeySensor 所有域
2 Core 1
Level 1 中的所有 Key Device Sensor 节点 Level 1 中支持的所有域。
StringSensor 所有域
--- X3D separator bar ---