之前写交互器在调试代码时发现,如果交互器所设置的mitk::DataNode为不可见的话,交互器会不起作用。今天翻交互器源码时,在基类mitk::EventStateMachine中发现了原因。原来在mitk::EventStateMachine中有个成员函数FilterEvents()把不可见的mitk::DataNode给过滤了。代码如下:
bool mitk::EventStateMachine::FilterEvents(InteractionEvent *interactionEvent, DataNode *dataNode)
{
if (dataNode == nullptr)
{
MITK_WARN << "EventStateMachine: Empty DataNode received along with this Event " << interactionEvent;
return false;
}
bool visible = false;
if (dataNode->GetBoolProperty("visible", visible, interactionEvent->GetSender()) == false)
{ // property doesn't exist
return false;
}
return visible;
}
好嘛,回头可以把自定义交互器FilterEvents()给重写了,事件交互也不一定非得依赖一个可见的节点数据啊;