VTK交互功能-callback/observe模式-vtkCommand

news2024/10/5 20:23:22

前言:本博文为系列博文,尝试将vtk交互功能讲清楚,包括常用的接口分析、常用的交互逻辑以及常用的交互Widget。若各位小伙伴有需要请多多关注,也希望能给各位小伙伴有所帮助。vtkCommand作为callback/obseve交互模式的基类,提供了很多基础和可继承的方法,那么我们就从vtkCommand开始。

vtkCommand

 描述:

vtkCommand是callback/obseve交互模式的一个实现。这个设计模式下,可以“观察”到对象(任何vtkObject的实例)触发的任何事件。例如:vtkRenderer在开始渲染时触发StartEvent事件,在结束渲染时触发EndEvent事件。事件观察者是通过在vtkObject中找到的AddObserver()方法添加的。AddObserver()除了需要一个事件id或名称外,还需要一个vtkCommand的实例(或子类)。请注意,vtkCommand意味着子类化,因此您可以打包支持回调所需的信息。

所有事件的处理在priority list列表中组织,可以通过设置AbortFlag变量截断特定事件的处理。使用AddObserver()方法设置优先级。缺省情况下,优先级为0,优先级相同的事件按照后发先处的顺序进行顺序处理。对于像3DWidget这类窗口来说,事件的ordering/aborting很重要。如果小部件被选中,它将处理一个事件(然后中止对该事件的进一步处理)。否则。该事件被传递以进行进一步处理。

当vtkObject的实例调用事件时,它也传递一个可选的void指针给callData。这个callData大多数时候是null。callData不是特定于事件类型,而是特定于调用特定事件的vtkObject类型。例如,vtkCommand::PickEvent由vtkProp使用nullptr callData调用,但由vtkInteractorStyleImage使用指向vtkInteractorStyleImage对象本身的指针调用。

通过non-nullptr触发的事件列表

vtkCommand::ProgressEvent

-大多数对象返回一个指针,指向范围在0.0到1.0之间的双精度值

-Infovis/vtkFixedWidthTextReader返回一个指针,浮点值等于到目前为止读取的行数。

vtkCommand::ErrorEvent  - 返回const char*类型的错误信息。
vtkCommand::WarningEvent- 返回const char*类型的错误信息。
vtkCommand::StartAnimationCueEvent- 返回指向vtkAnimationCue::AnimationCueInfo的指针
vtkCommand::EndAnimationCueEvent- 返回指向vtkAnimationCue::AnimationCueInfo的指针
vtkCommand::AnimationCueTickEvent- 返回指向vtkAnimationCue::AnimationCueInfo的指针
vtkCommand::PickEvent

- Common/vtkProp返回nullptr

- Rendering/vtkInteractorStyleImage返回指向自身的指针

vtkCommand::StartPickEvent

- Common/vtkProp返回nullptr

- Rendering/vtkInteractorStyleImage返回指向自身的指针

vtkCommand::EndPickEvent

- Common/vtkProp返回nullptr

- Rendering/vtkInteractorStyleImage返回指向自身的指针

vtkCommand::WrongTagEvent- Parallel/vtkSocketCommunicator返回一个char* 类型的标签
vtkCommand::SelectionChangedEvent

- Views/vtkView返回空指针

- Views/vtkDataRepresentation返回一个指向vtkSelection的指针

- Rendering/

vtkInteractorStyleRubberBand2D在vtkInteractorStyleRubberBand2D

::SELECT_UNION或vtkInteractorStyleRubberBand2D

::SELECT_NORMAL时返回一个包含五个无符号的Int类型的矩阵

vtkCommand::AnnotationChangedEvent- GUISupport/Qt/vtkQtAnnotationView返回一个指向vtkAnnotationLayers的指针
vtkCommand::PlacePointEvent- Widgets/vtkSeedWidget返回一个指向int类型的指针,指向当前Handle的Number
vtkCommand::DeletePointEvent- Widgets/vtkSeedWidget返回一个指向int类型的指针,指向当前删除的Handle的Number
vtkCommand::ResetWindowLevelEvent

- Widgets/vtkImagePlaneWidget返回两个double值(window和level)

- Rendering/vtkInteractorStyleImage返回一个指向自身的指针

vtkCommand::StartWindowLevelEvent

- Widgets/vtkImagePlaneWidget返回两个double值(window和level)

- Rendering/vtkInteractorStyleImage返回一个指向自身的指针

vtkCommand::EndWindowLevelEvent

- Widgets/vtkImagePlaneWidget返回两个double值(window和level)

- Rendering/vtkInteractorStyleImage返回一个指向自身的指针

vtkCommand::WindowLevelEvent

- Widgets/vtkImagePlaneWidget返回两个double值(window和level)

- Rendering/vtkInteractorStyleImage返回一个指向自身的指针

vtkCommand::CharEvent

- 大多数对象返回空指针

- GUISupport/Qt/

QVTKOpenGLStereoWidget返回QKeyEvent*

vtkCommand::TimerEvent

- 大多数对象返回一个代表timer ID的Int类型

- Widgets/vtkHoverWidget返回nullptr

vtkCommand::CreateTimerEvent

- Rendering/

vtkGenericRenderWindowInteractor返回一个Interesting类型代表timer的ID

vtkCommand::DestroyTimerEvent

- Rendering/

vtkGenericRenderWindowInteractor返回一个Interesting类型代表timer的ID

vtkCommand::UserEvent

- 大多数对象返回空指针

- Infovis/vtkInteractorStyleTreeMapHover返回一个vtkIdType的指针,代表pedigree id

vtkCommand::KeyPressEvent

- 大多数对象返回空指针

- GUISupport/Qt/

QVTKOpenGLStereoWidget返回QKeyEvent*

vtkCommand::KeyReleaseEvent

- 大多数对象返回空指针

- GUISupport/Qt/

QVTKOpenGLStereoWidget返回QKeyEvent*

vtkCommand::LeftButtonPressEvent

- 大多数对象返回空指针

- GUISupport/Qt/

QVTKOpenGLStereoWidget返回QMouseEvent*

vtkCommand::LeftButtonReleaseEvent

- 大多数对象返回空指针

- GUISupport/Qt/

QVTKOpenGLStereoWidget返回QMouseEvent*

vtkCommand::MouseMoveEvent

- 大多数对象返回空指针

- GUISupport/Qt/

QVTKOpenGLStereoWidget返回QMouseEvent*

vtkCommand::MouseWheelForwardEvent

- 大多数对象返回空指针

- GUISupport/Qt/

QVTKOpenGLStereoWidget返回QWheelEvent*

vtkCommand::MouseWheelBackwardEvent

- 大多数对象返回空指针

- GUISupport/Qt/

QVTKOpenGLStereoWidget返回QWheelEvent*

vtkCommand::RightButtonPressEvent

- 大多数对象返回空指针

- GUISupport/Qt/

QVTKOpenGLStereoWidget返回QMouseEvent*

vtkCommand::RightButtonReleaseEvent

- 大多数对象返回空指针

- GUISupport/Qt/

QVTKOpenGLStereoWidget返回QMouseEvent*

vtkCommand::MiddleButtonPressEvent

- 大多数对象返回空指针

- GUISupport/Qt/

QVTKOpenGLStereoWidget返回QMouseEvent*

vtkCommand::MiddleButtonReleaseEvent

- 大多数对象返回空指针

- GUISupport/Qt/

QVTKOpenGLStereoWidget返回QMouseEvent*

vtkCommand::CursorChangedEvent

- 大多数对象返回一个指向表示形状的int型指针

- Rendering/vtkInteractorObserver 返回空指针

vtkCommand::ResetCameraEvent- Rendering/vtkRenderer返回指向自己的指针
vtkCommand::ResetCameraClippingRangeEvent- Rendering/vtkRenderer返回指向自己的指针
vtkCommand::ActiveCameraEvent- Rendering/vtkRenderer返回指向当前活动相机的指针
vtkCommand::CreateCameraEvent- Rendering/vtkRenderer返回指向新建相机的指针
vtkCommand::EnterEvent

- 大多数对象返回空指针

- GUISupport/Qt/

QVTKOpenGLStereoWidget

返回一个QEvent*

vtkCommand::LeaveEvent

- 大多数对象返回空指针

- GUISupport/Qt/

QVTKOpenGLStereoWidget

返回一个QEvent*

vtkCommand::RenderWindowMessageEvent

- Rendering/

vtkWin32OpenGLRenderWindow

返回一个指向UINT的信息

vtkCommand::ComputeVisiblePropBoundsEvent- Rendering/vtkRenderer返回指向自身的指针
QVTKOpenGLStereoWidget::ContextMenuEvent

- 返回GUISupport/Qt/

QVTKOpenGLStereoWidget的一个QDragEnterEvent*

QVTKOpenGLStereoWidget::DragEnterEvent

- 返回GUISupport/Qt/

QVTKOpenGLStereoWidget的一个QDragEnterEvent*

QVTKOpenGLStereoWidget::DragMoveEvent

- 返回GUISupport/Qt/

QVTKOpenGLStereoWidget的一个QDragMoveEvent*

QVTKOpenGLStereoWidget::DragLeaveEvent

- 返回GUISupport/Qt/

QVTKOpenGLStereoWidget的一个QDragLeaveEvent*

QVTKOpenGLStereoWidget::DropEvent

- 返回GUISupport/Qt/

QVTKOpenGLStereoWidget的一个QDropEvent*

vtkCommand::ViewProgressEvent- 返回View/vtkView的一个ViewProgressEventCallData*
vtkCommand::VolumeMapperRenderProgressEvent- 返回指向范围在0.0到1.0之间的double值
vtkCommand::VolumeMapperComputeGradientsProgressEvent- 返回指向范围在0.0到1.0之间的double值
vtkCommand::TDxMotionEvent (TDx=3DConnexion)vtkTDxMotionEventInfo*
vtkCommand::TDxButtonPressEvent

一个int*是按钮的编号

vtkCommand::TDxButtonReleaseEvent

一个int*是按钮的编号

vtkCommand::UpdateShaderEvent

当前正在使用的vtkOpenGLHelper*

vtkCommand::FourthButtonPressEvent- 大多数对象返回nullptr
vtkCommand::FourthButtonReleaseEvent- 大多数对象返回nullptr
vtkCommand::FifthButtonPressEvent- 大多数对象返回nullptr
vtkCommand::FifthButtonReleaseEvent- 大多数对象返回nullptr
vtkCommand::ErrorEventvtkoutputwwindow使用' char char* '为错误信息触发
vtkCommand::WarningEventvtkoutputwwindow使用' char char* '为警告信息触发
vtkCommand::MessageEventvtkoutputwwindow使用' char char* '为信息文本触发
vtkCommand::TextEventvtkoutputwwindow使用' char char* '为文本触发

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/467170.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

0201自动配置类的导入-自动装配原理-springboot2.7.x系列

1简介 Spring Boot是基于Spring框架的,它的原理也是基于Spring框架的。 Spring框架是一个非常强大的框架,它提供了一系列的模块来帮助开发人员构建企业级的应用程序。Spring框架的核心是控制反转(Inversion of Control,IoC&…

大数据技术之Spark Streaming概述

前言 数据处理延迟的长短 实时数据处理:毫秒级别离线数据处理:小时 or 天 数据处理的方式 流式(streaming)数据处理批量(batch)数据处理 spark Streaming也是基于sparkCore,所以底层的核心没有变…

FreeRTOS系统学习第一步:新建 FreeRTOS 工程—软件仿真

创建一个FreeRTOS系统工程 1.新建工程文件夹2.Keil新建工程2.1 New Project2.2 Select Device For Target2.3 Manage Run-Time Environment 3. 在 KEIL 工程里面新建文件组3.1在 KEIL 工程里面添加文件 4. 编写 main 函数5. 调试配置5.1 设置软件仿真5.2 修改时钟大小在时钟相关…

你是否线上有使用ThreadLocal,如果结合多线程,请慎用

随着业务的增加,数据量的增加,多线程的使用会越来越频繁,提升单机的处理能力。 前些日子我们线上出现了一个比较严重的故障,这个故障是多线程使用不当引起的,挺有代表性的,所以分享给大家,希望…

前端学习笔记:CSS的引入,元素选择器

这是本人学习的总结,主要学习资料如下 马士兵教育 目录 1、引入CSS1.1、引入CSS的方式1.2、优先级 2、元素选择器2.1、基本选择器2.1.1、选择器2.1.2、优先级 2.2、关系选择器2.2.1、优先级 2.3、属性选择器2.4、伪类选择器 1、引入CSS 1.1、引入CSS的方式 第一个…

互斥锁深度理解与使用

大家好,我是易安! 我们知道一个或者多个操作在CPU执行的过程中不被中断的特性,称为“原子性”。理解这个特性有助于你分析并发编程Bug出现的原因,例如利用它可以分析出long型变量在32位机器上读写可能出现的诡异Bug,明明已经把变量…

SpringCloud--gateway 网关

在Spring Cloud中,使用Gateway网关访问服务可以有多种好处,包括但不限于以下几点: 统一入口管理:Gateway作为统一的服务入口,可以对所有的请求进行统一管理和控制,实现微服务集中管理。 动态路由&#xff…

056:cesium 七种方法设置颜色

第056个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中设置颜色,这里用到了7种方法,查看API,还有很多种方法 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共115行)相关API参考:专栏目标示例效果 配置…

深入理解Go语言中的接口编程【17】

文章目录 接口接口接口类型为什么要使用接口接口的定义实现接口的条件接口类型变量值接收者和指针接收者实现接口的区别值接收者实现接口指针接收者实现接口下面的代码是一个比较好的面试题 类型与接口的关系一个类型实现多个接口多个类型实现同一接口接口嵌套 空接口空接口的定…

TCP教程:详解TCP连接过程

目录标题 一 、简述二 、TCP建立连接协议(三次握手)2.1 概述及目的2.2 第一次握手:客户端发送SYN报文2.3 第二次握手:服务器回应SYN-ACK报文2.4 第三次握手:客户端回应ACK报文2.5 顾客预定座位场景2.6底层原理2.7 TCP …

嵌入式之Samba服务器搭建

在嵌入式系统开发应用平台中,tftp、nfs和samba服务器是最常用的文件传输工具 tftp和nfs是在嵌入式Linux开发环境中经常使用的传输工具 samba则是Linux和Windows之间的文件传输工具。 下面演示在linux上搭建Samba服务器 sudo apt-get install samba chmod -R 77…

会场安排问题——算法实现(C实现)

问题描述:加入要在足够多的会场里安排一批活动,并希望使用尽可能少的会场。设计一个有效的贪心算法进行安排。(这个问题实际上是著名的图着色问题。若每个活动作为图的一个顶点,不相容活动之间用边相连。使相连顶点着有不同颜色的…

数据库原理容易出错的点

一个数据库只存在一个内模式和一个模式,可以存在多个外模式除了删除表或视图的使用的是DELETE以外其他数据库对象均是使用DROP遵守两段封锁的协议的并发事务一定是可串行化的哪些情况下不适合创建索引: 对于查询过程中很少使用或参考的列对于那些只有很少…

【无人车】用于无人地面车辆的路径跟踪算法(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

CMIP6数据处理:WRF模式动力降尺度、单点降尺度、统计方法区域降尺度、SWAT数据、Biome-BGC数据制备

查看原文>>>WRF模式、CMIP6数据处理、机器学习气象海洋水文应用、python地球科学 目录 CMIP6月数据、日数据、全球VIPPHEN物候数据、ERA5数据 一、CMIP6中的模式比较计划 二、数据下载 三、基础知识 四、单点降尺度 五、统计方法的区域降尺度 六、基于WRF模式…

助力低碳出行 | 基于ACM32 MCU的电动滑板车方案

前言 随着智能科技的快速发展,电动滑板车的驱动系统也得到了长足的发展。国内外的电动滑板车用电机驱动系统分为传统刷式电机和无刷电机两种类型。其中,传统的刷式电机已经逐渐被无刷电机所取代,无刷电机的性能和寿命都更出色,已…

STM32F4 HAL库使用DMA进行ADC采样实时发送波形到串口显示(包含傅里叶变换)

1.总体逻辑 按下STM32F4的KEY0按键,通过外部中断的方式对按键进行检测,然后开启一次带DMA的固定点数的ADC采集,采集完成后在DMA的中断发送采集到的数据,然后清空数据区准备下一次的按键中断。电脑接受到串口数据后对数据进行简单…

大厂齐出海:字节忙种草,网易爱社交

配图来自Canva可画 随着国内移动互联网红利逐渐触顶,互联网市场日趋饱和,国内各互联网企业之间的竞争便愈发激烈起来。在此背景下,广阔的海外市场就成为了腾讯、阿里、字节、京东、拼多多、百度、网易、快手、B站等互联网公司关注和争夺的重…

算法--前缀和技巧 (蓝桥杯123-灵能传输--求和)

文章目录 什么是前缀和用途什么时候用java的前缀和例题[蓝桥杯 2022 省 A] 求和题目描述思路代码 [蓝桥杯 2021 国 ABC] 123题目描述思路代码 [蓝桥杯 2019 省 B] 灵能传输(蓝桥杯96%,洛谷ac)题目描述思路代码 什么是前缀和 如果一个数组a的元素为 a 1 , a 2 , a 3…

Springboot +Flowable,详细解释啥叫流程实例(一)

一.简介 上一篇中学习了Flowable 中的流程模板(流程定义)的部署问题,这一篇来学习什么叫流程实例。 部署之后的流程模板,还不能直接运行,例如我们部署了一个请假流程,现在 张三想要请假,他就需…