MITK Concepts - Interaction/MITK中的交互概念
2016-11-28 20:21
302 查看
非完全翻译,如有错误,欢迎指正,个人劳动,转载请注明。
交互的核心基于被称为DataInteractors的实例,它们监听事先定义的事件,并在事件被触发时执行actions(行为)。
接下来解释了交互概念中不同的组件。首先总体描述了不同组件之间是如何互相作用的,然后更加细节地解释了一些模块。
一个用户事件被触发并将消息传递给MITK;
该层作为GUI toolkit(这里指Qt)到MITK内部事件(后面被称为InteractionEvents)的适配器;
事件一旦被适配,就被发往与渲染窗口连接的mitk::Dispatcher进行处理;
在mitk::Dispatcher层,所有能对外来事件(mitk::DataInteractor和mitk::InteractionEventObserver实例)做出响应的对象都能被发现;
一个mitk::DataInteractor被赋予一个事件,并检查自己的mitk::EventConfig对象,这将返回一个值看这个事件在这个DataInteractor中是否有定义;
如果这个事件在这个DataInteractor中有定义,则检查其状态机,看当前状态下能否做出响应;
此时,与状态变化(transition)相对应的行为将会被执行,事件被完整处理。
DataInteractors通过状态机模式完成事件处理,基本思路是每次交互都可以用states(状态)和transition(转换)来描述,并触发相应的行为。这些模式定义一个流程,且不同的状态机可以用于同一个mitk::DataInteractor,来执行不同的交互。
可以用一个例子来很好地说明:
States(状态) - 交互的当前状态
Transitions(转换) - 描述需要从一个状态转换到另一个状态的事件
Conditions(转换条件) - 在transitions发生前被执行
Actions(行为) - 当conditions通过,允许transitions发生转换时执行
每一个状态机都需要指定一个初始状态(StartState)作为状态机开始时的状态。
Example 1的状态机模式可以被描述为:
Example1:描述在相同位置添加点触发PointsMatch事件的状态机模式
类mitk::InteractionEventHandler提供一个接口,通过加载不同的configuration即可很容易地修改用户输入所触发的行为,这就使得可以在抽象层面实现软件中用户的特定行为并在运行时转换它们。
configuration用XML文件来描述,并可以被mitk::InteractionEventHandler加载,从而建立起从具体用户输入到config文件中抽象事件描述的内部映射。
这里需要区分specific event和event variant。specific event由它自己的事件类描述,这决定了事件的种类,如类mitk::MousePressEvent,它的参数决定了事件的唯一性,如LeftMouseButton按下并且没有辅助按键按下。event variant是赋予某个具体事件的名字,mitk::InteractionEventHandler监听这些名字。
这里给出两个不同configuration文件来作解释。我们假设mitk::InteractionEventHandler监听event variant“AddPoint”,给出两个config文件:
Example2:鼠标左键单击事件描述
Example3:按住shift键时鼠标左键单击事件描述
If the mitk::InteractionEventHandler is loaded with the first configuration the event variant ‘MousePress’ is triggered when the user performs a mouse click, while when the second configuration is loaded ‘MousePress’ is triggered when the user performs a right click while pressing the shift button. In this way all objects derived from mitk::InteractionEventHandler can be configured. For a detailed description about how to create the XML file see the Interaction Concept Implementation page.
http://docs.mitk.org/2016.03/DataInteractionPage.html
http://my.csdn.net/wobujianni
Introduction to Interaction in MITK
在医学图像处理软件中,交互是一个非常重要的概念。MITK提供一个特殊的交互概念,让用户交互可以独立于算法,这使得通用交互方案可以被重复用于不同的环境中。交互的核心基于被称为DataInteractors的实例,它们监听事先定义的事件,并在事件被触发时执行actions(行为)。
接下来解释了交互概念中不同的组件。首先总体描述了不同组件之间是如何互相作用的,然后更加细节地解释了一些模块。
Topics related to interaction - further information:
一些参考示例,移步官网查看Event Handling & GUI Toolkit Abstraction
下图给出了mitk::DataInteractor中,从创建事件到执行action的处理过程。该图的前提是使用Qt框架,同时也说明了MITK的交互概念是独立于任何具体的图形用户接口工具包的。一个用户事件被触发并将消息传递给MITK;
该层作为GUI toolkit(这里指Qt)到MITK内部事件(后面被称为InteractionEvents)的适配器;
事件一旦被适配,就被发往与渲染窗口连接的mitk::Dispatcher进行处理;
在mitk::Dispatcher层,所有能对外来事件(mitk::DataInteractor和mitk::InteractionEventObserver实例)做出响应的对象都能被发现;
一个mitk::DataInteractor被赋予一个事件,并检查自己的mitk::EventConfig对象,这将返回一个值看这个事件在这个DataInteractor中是否有定义;
如果这个事件在这个DataInteractor中有定义,则检查其状态机,看当前状态下能否做出响应;
此时,与状态变化(transition)相对应的行为将会被执行,事件被完整处理。
Events
事件可以是任何用户输入,例如键盘、鼠标或触摸手势等。这些事件从像Qt这样的UI框架被映射到MITK内部表示,然后被发送到mitk::Dispatcher做进一步消息分发。这些事件并不局限于传统的输入设备,还可以进行扩展,用户可以给比如追踪装置定义新的类来描述事件。InteractionEventHandler
描述能够处理事件的对象。这些对象可以被分为两组:DataInteractors和mitk::InteractionEventObserver。不同在于mitk::DataInteractor实例与一个mitk::DataNode连接并操纵他们,而mitk::InteractionEventObserver实例没有mitk::DataNode,所以不能处理任何数据。DataInteractors
DataInteractors继承自mitk::InteractionEventHandler,用于为具体的DataNode处理事件。它们通过状态机来实现。StateMachines
一个具体事件的行为取决于数据对象的内容和交互状态。比如用鼠标画一条直线,第一次双击应是添加一个点,第二次双击应是添加一个点并结束交互,后面的第三次双击就会被忽略。状态机提供了一个很好的途径来模型化这些交互:相同的用户交互事件可以根据当前状态的不同触发不同的行为。DataInteractors通过状态机模式完成事件处理,基本思路是每次交互都可以用states(状态)和transition(转换)来描述,并触发相应的行为。这些模式定义一个流程,且不同的状态机可以用于同一个mitk::DataInteractor,来执行不同的交互。
可以用一个例子来很好地说明:
假设mitk::DataInteractor有以下两个功能: 1. 在特定位置添加点并用线连接; 2. 检查两个点是否在同一个位置。 对于这个mitk::DataInteractor,可以使用不同的mitk::StateMachine模式/描述来让mitk::DataInteractor执行不同的交互方案。 状态机模式1:我们想让用户画一条直线。一个包含三种状态的状态机可以简单表示为: With each MousePress event the AddPoint function is called and adds a point at the mouse position, unless two points already exist. 状态机模式2:同样的mitk::DataInteractor也可以按如下状态机进行操作,这将使交互流程为一个闭合的等值线,mitk::DataInteractor将在已经存在的点上检测到AddPoint事件并触发PointsMatch事件。 In this way state machines provide both, a nice and structured way to represent interaction tasks and description of the interaction which is separated from the code. One DataInteractor can be re-used for different tasks by simply exchanging the state machine pattern. These patterns are described in XML files.
Definition of a State Machine
状态机以XML文件的形式存储,由四部分组成定义:States(状态) - 交互的当前状态
Transitions(转换) - 描述需要从一个状态转换到另一个状态的事件
Conditions(转换条件) - 在transitions发生前被执行
Actions(行为) - 当conditions通过,允许transitions发生转换时执行
每一个状态机都需要指定一个初始状态(StartState)作为状态机开始时的状态。
Example 1的状态机模式可以被描述为:
<statemachine> <state name="StartState" startstate="true" > <transition event_class="MousePressEvent" event_variant="MousePress" target="StartState"> <condition name="CheckPoint"/> <action name="AddPoint"/> </transition> <transition event_class="InternalEvent" event_variant="PointsMatch" target="ClosedContour"> <action name="AddPoint"/> </transition> </state> <state name="ClosedContour"/> </statemachine>
Example1:描述在相同位置添加点触发PointsMatch事件的状态机模式
InteractionEventObserver
mitk::InteractionEventObserver实例接收所有用户输入,且只用于观察,它们不修改任何DataNode。mitk::InteractionEventObserver可以选择使用或者不使用状态机,默认是不使用。如何使用状态机功能可参考文档mitk::InteractionEventObserver::Notify。Configuration
很多情况下,独立于具体事件(如左击鼠标)的交互更好,这样能够更加方便的更换(交互)。这需要通过InteractionEventhandlers的configuration来完成。它允许在运行过程中更换行为。类mitk::InteractionEventHandler提供一个接口,通过加载不同的configuration即可很容易地修改用户输入所触发的行为,这就使得可以在抽象层面实现软件中用户的特定行为并在运行时转换它们。
configuration用XML文件来描述,并可以被mitk::InteractionEventHandler加载,从而建立起从具体用户输入到config文件中抽象事件描述的内部映射。
这里需要区分specific event和event variant。specific event由它自己的事件类描述,这决定了事件的种类,如类mitk::MousePressEvent,它的参数决定了事件的唯一性,如LeftMouseButton按下并且没有辅助按键按下。event variant是赋予某个具体事件的名字,mitk::InteractionEventHandler监听这些名字。
这里给出两个不同configuration文件来作解释。我们假设mitk::InteractionEventHandler监听event variant“AddPoint”,给出两个config文件:
<config name="one"> <event_variant name="MousePress" class="MousePressEvent"> <attribute name="EventButton" value="LeftMouseButton"/> </event_variant> </config>
Example2:鼠标左键单击事件描述
<config name="two"> <event_variant name="MousePress" class="MousePressEvent"> <attribute name="EventButton" value="RightMouseButton"/> <attribute name="Modifiers" value="shift"/> </event_variant> </config>
Example3:按住shift键时鼠标左键单击事件描述
If the mitk::InteractionEventHandler is loaded with the first configuration the event variant ‘MousePress’ is triggered when the user performs a mouse click, while when the second configuration is loaded ‘MousePress’ is triggered when the user performs a right click while pressing the shift button. In this way all objects derived from mitk::InteractionEventHandler can be configured. For a detailed description about how to create the XML file see the Interaction Concept Implementation page.
Dispatcher
mitk::Dispatcher实例接收所有事件,并将这些事件分发给相关的mitk::DataInteractor实例。对DataInteractors根据相应mitk::DataNode层进行降序排列。然后事件被分发给第一个mitk::DataInteractor,由其检查自己能否处理该事件,然后按序遍历每一个mitk::DataInteractor,直到有DataInteractor能处理该事件,然后其它DataInteractors被跳过,且所有InteractionEventObservers都会被通知。Examples
Interaction Related Examples in MITKhttp://docs.mitk.org/2016.03/DataInteractionPage.html
http://my.csdn.net/wobujianni
相关文章推荐
- MITK交互概念
- [UI] Pull menu interaction concept - 下拉菜单交互
- UIDocumentInteractionController 文档交互控制器 pdf 游览
- Photon——Lite Lobby Concepts Lite Lobby概念
- Delegate 类 概念 与MVC模式不同,model/view结构没有用于与用户交互的完全独立的组件。一般来讲, view负责把数据展示给用户,也处理用户的输入。为了获得更多的灵性性,交互通过d
- CM和CMTS的概念和信令交互过程
- CM和CMTS的概念和信令交互过程
- Math concepts / 数学概念(转)
- 2.3 ROBOT ENVIRONMENT INTERACTION 机器人与环境交互
- 浙江大学软件学院三维动画与交互技术考试概念整理
- http服务器交互get,put,post,delete等概念
- 译:C#面向对象的基本概念 (Basic C# OOP Concept) 第三部分(多态,抽象类,虚方法,密封类,静态类,接口)
- (二)ROS系统架构及概念 ROS Architecture and Concepts 以Kinetic为主更新 附课件PPT
- UED、UCD、UE、UI、交互设计概念
- Kinect Interaction概念
- [译]Kinect for Windows SDK开发入门(十八):Kinect Interaction交互控件
- 网页交互设计基本概念
- 交互设计:基本概念与工具选择
- The Ten Principles of Interaction Design交互设计的十大原则
- 手机短信验证码交互概念