3D Slicer Modify Mouse Event 修改3D Slicer中的鼠标响应事件
在3D Slicer中,我们如果想在自己写的插件中来修改默认的鼠标响应事件的话,就需要先将原有的响应事件链接删除,然后建立自定义的响应事件链接,然后将自己要实现的功能写在响应事件函数中。
比如Slicer中默认的鼠标左键拖拽,是任意旋转视图中的Camera,默认中的滑轮操作是拉远和拉近视图摄像机,默认的鼠标右键操作也是拉远和拉近视图摄像机的操作。这样滑轮就和鼠标右键的功能重复了,我们可以让鼠标右键实现其他的功能。比如在模型的Pitch, Yaw, Roll三个旋转方向上(其实旋转的只是试图中的摄像机,我们看起来像是场景中3D模型在旋转)。方向键的上下键实现了对模型的Pitch旋转,左右键实现了对模型的Yaw旋转,唯独没有对模型的Roll方向旋转的操作。这样我们空余出来的右键可以实现Roll旋转的操作,我们也可以随意在键盘上找其他两个键来添加上Roll旋转的功能。
我们首先来看如何移除原有的鼠标事件响应链接,由于Slicer的核心是由VTK来实现的,所以我们参考VTK中的Observer的操作,参见这个帖子VTK/Examples/Python/Interaction/MouseEventsObserver,知道了我们一定要获得用户交互实例interactor才能进行响应事件的修改,但是我们不直接用例子中的代码,毕竟二者的实现细节上还有些差异。Slicer的用户界面是Qt写的,所以我们首先要获取slicer的层管理器,然后获得3D窗口的控件,然后获得3D窗口的View,从view中获得交互实例interator,才能进行修改。我们将原有的鼠标右键响应事件删除,链接上自定义的响应函数,参见代码如下:
# Interator
layoutManager = slicer.app.layoutManager()
threeDWidget = layoutManager.threeDWidget(0)
threeDView = threeDWidget.threeDView()
interactor = threeDView .interactorStyle().GetInteractor()
interactor.AddObserver(vtk.vtkCommand.RightButtonPressEvent, self.onRightButtonPressed) #
# Customized mouse right button pressed event
#
def onRightButtonPressed(self, obj, event=None):
print ('onRightButtonPressed...')
# Do something here
我们只要将需要实现的功能写在自定义的响应函数中即可,对于鼠标左键或者滑轮的修改也可以这样来做。下列各项事件均可自定义:
vtk.vtkCommand.KeyPressEvent
vtk.vtkCommand.KeyReleaseEvent
vtk.vtkCommand.LeftButtonPressEvent
vtk.vtkCommand.LeftButtonReleaseEvent
vtk.vtkCommand.MouseMoveEvent
vtk.vtkCommand.MouseWheelForwardEvent
vtk.vtkCommand.MouseWheelBackwardEvent
vtk.vtkCommand.RightButtonPressEvent
vtk.vtkCommand.RightButtonReleaseEvent
vtk.vtkCommand.MiddleButtonPressEvent
vtk.vtkCommand.MiddleButtonReleaseEvent
vtk.vtkCommand.CursorChangedEvent
参考资料:
http://www.vtk.org/Wiki/VTK/Examples/Python/Interaction/MouseEventsObserver
http://slicer-users.65878.n3.nabble.com/Capturing-mouse-events-td4029365.html
http://web.mit.edu/16.225/dv/VTK/Examples/ImageProcessing/Python/ImageSlicing.py
https://www.slicer.org/wiki/Documentation/Nightly/ScriptRepository#Customize_viewer_layout
3D Slicer Modify Mouse Event 修改3D Slicer中的鼠标响应事件的更多相关文章
- 3D场景中的鼠标响应事件
原文:3D场景中的鼠标响应事件 今天要讲的是3D场景中的鼠标响应事件的处理,首先Button的响应是大家熟知的,只要加上一个click事件,然后写一个响应的处理时间就行了.对于二维平面上的一些控件也很 ...
- 如何修改3D模型的原子属性
Chem3D是专门用于绘制化学三维模型和进行计算化学数据的ChemOffice组件,在三维模型中每个原子都有众多属性,比如原子类型.原子符号.原子编号以及原子颜色等等.掌握Chem 3D模型的原子属性 ...
- Direct3D 11 Tutorial 4: 3D Spaces_Direct3D 11 教程4:3D空间
概述 在上一个教程中,我们在应用程序窗口的中心成功渲染了一个三角形. 我们没有太注意我们在顶点缓冲区中拾取的顶点位置. 在本教程中,我们将深入研究3D位置和转换的细节. 本教程的结果将是渲染到屏幕的3 ...
- unity 3D物体使用EventSystem响应事件
在ugui中创建一个canvas 之后会自动创建一个EventSystem,用来处理UI上的时间响应.(可以通过UI>EventSystem创建EventSystem) EventSystem ...
- 使用webgl(three.js)搭建3D智慧园区、3D大屏,3D楼宇,智慧灯杆三维展示,3D灯杆,web版3D,bim管理系统——第六课
前言: 今年是建国70周年,爱国热情异常的高涨,为自己身在如此安全.蓬勃发展的国家深感自豪. 我们公司楼下为庆祝国庆,拉了这样的标语,每个人做好一件事,就组成了我们强大的祖国. 看到这句话,深有感触, ...
- [转]UiPath: How to Capture a Mouse Event on Hover Menus?
本文转自:https://www.uipath.com/kb-articles/how-to-capture-mouse-event-on-hover-menus he Knowledgebase a ...
- 修改MYSQL 表中的字段属性
1.登录数据库 >mysql -u root -p 数据库名称 2.查询所有数据表 >show tables; 3.查询表的字段信息 >desc 表名称; 4.1.修改某个表的字段类 ...
- 修改MySQL表中的字段属性
登录数据库 >mysql -u root -p 数据库名称 查询所有数据表 mysql>show tables; 查询表的字段信息 mysql>desc 表名称; 1.修改某个表的字 ...
- [DOM Event Learning] Section 2 概念梳理 什么是事件 DOM Event
[DOM Event Learning] Section 2 概念梳理 什么是事件 DOM Event 事件 事件(Event)是用来通知代码,一些有趣的事情发生了. 每一个Event都会被一个E ...
随机推荐
- 部署Bookinfo示例程序详细过程和步骤(基于Kubernetes集群+Istio v1.0)
部署Bookinfo示例程序详细过程和步骤(基于Kubernetes集群+Istio v1.0) 部署Bookinfo示例程序 在下载的Istio安装包的samples目录中包含了示例应用程序. ...
- java解决手机上传竖拍照片旋转90\180\270度问题
<dependency> <groupId>com.drewnoakes</groupId> <artifactId>metadata-extracto ...
- beego orm 忽略字段
忽略字段 设置 - 即可忽略 struct 中的字段 type User struct { ... AnyField string `orm:"-"` ... } beego or ...
- 1.3 java8新特性总结
java8中重要的4个新特性: Lambda Stream Optional 日期时间API 接口方法(default和static方法,jdk9可定义private方法) 一.Lambda impo ...
- Python的ctypes 和pyinstaller
这几天在学习python的爬虫, 无意中看到一篇博文 Python爬虫之自制英汉字典 发现里面的ctypes 和pyinstaller 还不了解,这边文章说白了就是你输入英文, python读取你的输 ...
- Docker搭建带有访问认证的私有仓库
2017年06月10日 17:30:26 阅读数:2581 以下步骤均为本人亲自踩坑,历经数次失败,最终搭建成功 一.环境信息: 操作系统:CentOS 7 Docker版本:1.12.5 (更高版本 ...
- 一步步教你轻松学支持向量机SVM算法之案例篇2
一步步教你轻松学支持向量机SVM算法之案例篇2 (白宁超 2018年10月22日10:09:07) 摘要:支持向量机即SVM(Support Vector Machine) ,是一种监督学习算法,属于 ...
- 使用MiniProfiler调试ASP.NET web api项目性能
本质上,集成Miniprofiler可以分解为三个问题: 怎样监测一个WebApi项目的性能. 将性能分析监测信息从后端发送到UI. 在UI显示分析监测结果. 首先安装Miniprofiler,Min ...
- linux 设备驱动概述
linux 设备驱动概述 目前,Linux软件工程师大致可分为两个层次: (1)Linux应用软件工程师(Application Software Engineer): 主要利用C库函数和 ...
- Flutter Android 真机调试指南
操作预览: 准备一条数据线,并连接电脑和手机: 使用 flutter devices 查看设备能否找到: 在 Android studio 中选择你的真机,然后点击 [debug]: 真机自动安装Ap ...