码迷,mamicode.com
首页 > 其他好文 > 详细

VTK: VTK实体交互widget

时间:2016-05-13 02:25:42      阅读:936      评论:0      收藏:0      [点我收藏+]

标签:

    之前在 VTK交互 使用交互样式和添加监听事件两种方式拓展VTK交互。最近接触了VTK用来完成交互的widget 。因为提供了实体部件会使得交互更加人性化。VTK的Widget类是从VTk5.1之后重新设计完善。实现了交互和实体表达的分离。创建VTK widget需要完成如下步骤:

    1 实例化widget

    2 实例化合适的几何表达体 

    3 可以用添加监听事件方式为widge添加交互,(每个widget组件以有默认的事件及处理方法)

   4最后必须激活部件 否则部件就不会显示在窗口


在widget有自己的widget事件(vtkWidgetEvent.h)。这里列出部分widget事件 如下:

            

NoEvent   
Select   
EndSelect   
Delete   
Translate   
EndTranslate   
Scale   
EndScale   
Resize 

VTKEvent和WidgetEvent之间的转换要用到vtkWidgetEventTranslator类。该类可以通过GetEventTranslator函数获取。

  vtkWidgetEventTranslator类中有两个重要的函数:

 void SetTranslation (unsigned long VTKEvent, int modifier, char keyCode, int repeatCount, const char *keySym, unsigned long widgetEvent)
 int RemoveTranslation (unsigned long VTKEvent, int modifier, char keyCode, int repeatCount, char *keySym)

这两个函数一个是添加一个VTKEvent事件 并转化为Widget事件,另一个就是删除事件。 两个函数都有重载版本 这里只列出最长的。通过这两个函数可以完成:

1、删除VTK事件和widgwt事件对应关系 这样widget事件就不会被监听。  

2、更改vtk事件和widget事件的对应关系 比如:VTKEvent::LeftbuttionPressEvent对应WidgetWvwnt::Select  可以被更改为VTKEvent::KeyPressEvent对应WidgetWvwnt::Select


    widgetEvent事件的处理函数都是受保护静态函数。里面都已经实现了对应的处理。一般部件内部已经通过vtkWidgetCallbackMapper将WidgetEvent与处理函数关联起来

   例如:  Select -------SelectAction();

                 Delete -------DeleteAction();


widget->AddObserver(vtkCommand::InteractionEvent ,seedCallback);
使用该函数为部件添加新的事件及回调函数。

VTK: VTK实体交互widget

标签:

原文地址:http://blog.csdn.net/cfqcfqcfqcfqcfq/article/details/51346260

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!