二、vtkCommand的使用

一、概述

        vtkCommand是VTK中的一个重要的类,用于处理事件和回调机制。它允许用户在特定事件发生时执行自定义的操作,例如在交互操作、数据更新或渲染过程中触发某些功能。

二、主要功能

1、事件处理:vtkCommand用于监听和处理VTK管线中的各种事件

2、回调机制:通过回调函数,用户可以在事件发生时执行自定义代码

3、事件类型:VTK定义了多种事件类型,如StartEvent、EndEvent、ProgressEvent等。

三、常用事件类型

StartEvent某个过程开始时触发
EndEvent某个过程结束时触发
ProgressEvent过程进行中触发,常用于更新进度条
ModifiedEvent对象被修改时触发
PickEvent用户进行拾起操作时触发
InteractionEvent用户进行交互操作时触发

四、使用步骤 

1、创建一个类继承于vtkCommand,并重写Execute方法

class vtkMyCallback : public vtkCommand
{
public:static vtkMyCallback* New(){return new vtkMyCallback;}void Execute(vtkObject* caller, unsigned long, void*) override{auto renderer = reinterpret_cast<vtkRenderer*>(caller);std::cout << renderer->GetActiveCamera()->GetPosition()[0] << " "<< renderer->GetActiveCamera()->GetPosition()[1] << " "<< renderer->GetActiveCamera()->GetPosition()[2] << std::endl;}vtkMyCallback() = default;
};

2、创建vtkCommand对象 ,经对象添加到需要监听的对象中

//渲染器对象
vtkNew<vtkRenderer> ren1;vtkNew<vtkMyCallback> mo1;
ren1->AddObserver(vtkCommand::StartEvent, mo1);

五、完整示例

namespace {
class vtkMyCallback : public vtkCommand
{
public:static vtkMyCallback* New(){return new vtkMyCallback;}void Execute(vtkObject* caller, unsigned long, void*) override{auto renderer = reinterpret_cast<vtkRenderer*>(caller);std::cout << renderer->GetActiveCamera()->GetPosition()[0] << " "<< renderer->GetActiveCamera()->GetPosition()[1] << " "<< renderer->GetActiveCamera()->GetPosition()[2] << std::endl;}vtkMyCallback() = default;
};
}int main(int, char*[])
{//创建VTK命名颜色vtkNew<vtkNamedColors> colors;//创建多边形圆锥体vtkNew<vtkConeSource> cone;cone->SetHeight(3.0);cone->SetRadius(1.0);cone->SetResolution(10);//将多边形数据映射到圆形基于映射器vtkNew<vtkPolyDataMapper> coneMapper;coneMapper->SetInputConnection(cone->GetOutputPort());//创建渲染创建中的实体(几何体和属性)vtkNew<vtkActor> coneActor;coneActor->SetMapper(coneMapper);coneActor->GetProperty()->SetColor(colors->GetColor3d("MistyRose").GetData());//创建渲染器vtkNew<vtkRenderer> ren1;ren1->AddActor(coneActor);ren1->SetBackground(colors->GetColor3d("MidnightBlue").GetData());ren1->ResetCamera();//为渲染器创建绘制窗口vtkNew<vtkRenderWindow> renWin;renWin->AddRenderer(ren1);renWin->SetSize(300, 300);renWin->SetWindowName("Tutorial_Step2");//注册监听的事件及回调vtkNew<vtkMyCallback> mo1;ren1->AddObserver(vtkCommand::StartEvent, mo1);for (int i = 0; i < 360; ++i){renWin->Render();ren1->GetActiveCamera()->Azimuth(1);}return EXIT_SUCCESS;
}

运行结果,物体旋转的同时,打印数据:

15.2107 1 0
15.2084 1 -0.265464
15.2014 1 -0.530846
15.1899 1 -0.796067
15.1737 1 -1.06105
15.1528 1 -1.3257
15.1274 1 -1.58995
15.0973 1 -1.85372
15.0627 1 -2.11692
15.0234 1 -2.37948
14.9796 1 -2.64131
14.9312 1 -2.90234
14.8783 1 -3.16248
14.8209 1 -3.42167
14.7589 1 -3.6798
14.6924 1 -3.93682
14.6215 1 -4.19264
14.5461 1 -4.44718
14.4662 1 -4.70037
14.382 1 -4.95212
14.2934 1 -5.20237
14.2004 1 -5.45103

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

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

相关文章

配置集群-日志聚集操作

1.修改配置文件 <!-- 开启日志聚集功能 --> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <!-- 设置日志聚集服务器地址 --> <property> <name>yarn.log.server.url&…

Linux系统上后门程序的原理细节,请仔细解释一下

在Linux系统上&#xff0c;后门程序通常通过隐蔽的方式绕过正常的安全机制&#xff0c;允许攻击者未经授权访问系统。以下是其工作原理的详细解释&#xff1a; 1. 隐蔽性 隐藏进程&#xff1a;后门程序常通过修改进程列表或使用rootkit技术隐藏自身&#xff0c;避免被ps、top…

华为ipd流程华为流程体系管理华为数字化转型流程数字化管理解决方案介绍81页精品PPT

华为流程体系最佳实践主要包括构建完善的流程框架&#xff0c;明确各层级流程要素与职责&#xff0c;梳理涵盖研发、采购、营销、服务、资产管理等多领域的流程&#xff0c;通过梳理业务场景和核心能力搭建差异化流程框架&#xff0c;采用自上而下与自下而上相结合的建模方法&a…

QT国产化系统软件开发

一、国产操作系统 1、鸿蒙HarmonyOS NEXT ‌核心架构‌ 采用自研鸿蒙内核&#xff0c;完全脱离Linux与AOSP代码&#xff0c;基于分布式架构实现跨设备资源虚拟化整合&#xff0c;支持动态调度多终端硬件能力‌。通过分布式软总线技术&#xff08;D-Bus&#xff09;实现低时延…

Oracle常见系统函数

一、字符类函数 1&#xff0c;ASCII(c)和CHR(i)字符串和ascii码互转换 SQL> select ascii(Z) ,ascii(H),ascii( A) from dual;ASCII(Z) ASCII(H) ASCII(A) ---------- ---------- ----------90 72 32SQL> select chr(90),chr(72),chr(65) from dual;C…

python pytorch tensorflow transforms 模型培训脚本

环境准备 https://www.doubao.com/thread/w5e26d6401c003bb2 执行培训脚本 import torch from torch.utils.data import Dataset, DataLoader from transformers import DistilBertTokenizer, DistilBertForSequenceClassification, AdamW import numpy as np# 自定义数据集类…

request库基础学习

requests安装 Windows &#xff1a;pip install requests mac &#xff1a; python3 -m pip install requests requests模块常用方法 方法含义requests.get()发起get请求requests.post()发起post请求requests.put()发起put请求requests.delete()发起delete请求requests.sess…

Redis客户端Jedis、Lettuce 和 Redisson优缺点总结

https://developer.huawei.com/consumer/cn/blog/topic/03825550899620047 Redis 官方推荐的 Java 客户端有Jedis、Lettuce 和 Redisson。本文总结这些客服端的优缺点 1. Jedis Jedis 是老牌的 Redis 的 Java 实现客户端&#xff0c;提供了比较全面的 Redis 命令的支持&#…

在 Spring Boot 中调用 AnythingLLM 的发消息接口

整体逻辑: 自建系统的web UI界面调用接口: 1.SpringBoot接口&#xff1a;/anything/chatMessageAnything 2.调用anythingLLM - 调用知识库deepseek r1 . Windows Installation ~ AnythingLLMhttps://docs.anythingllm.com/installation-desktop/windows http://localhost:3…

kubectl describe pod 命令以及输出详情讲解

kubectl describe pod 命令格式 kubectl describe pod <pod-name> -n <namespace><pod-name>&#xff1a;Pod 的名称。 -n <namespace>&#xff1a;指定命名空间&#xff0c;默认是当前命名空间。 controlplane ~ ✖ kubectl describe pod newpods-d…

Python生成和安装requirements.txt

概述 看到别的大佬项目中&#xff0c;requirements.txt文件&#xff0c;里面包含了所需要的依赖及版本&#xff0c;方便项目管理和安装。 生成 requirements.txt 文件 pip3 freeze > requirements.txt生成的依赖包有点多&#xff0c;感觉可以根据自己需要整理。 安装req…

WebGL学习2

WebGL&#xff08;Web Graphics Library&#xff09;是一种基于 OpenGL ES 2.0 的 JavaScript API&#xff0c;用于在网页上实现高性能的 3D 图形渲染。 1. 初始化 WebGL 上下文 在使用 WebGL 之前&#xff0c;需要获取<canvas>元素并创建 WebGL 上下文。 // 获取canv…

零知识证明:区块链隐私保护的变革力量

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…

【java】集合的基本使用

集合是 Java 中用来存储一组对象的容器。与数组相比&#xff0c;集合更加灵活和强大&#xff0c;支持动态增删元素、自动扩容、多种数据结构等特性。下面我会用通俗易懂的语言解释集合的基本使用。 1. 什么是集合&#xff1f; 集合就像是一个“容器”&#xff0c;可以用来装很多…

WPF-实现按钮的动态变化

MVVM 模式基础 视图模型&#xff08;ViewModel&#xff09;&#xff1a;MainViewModel类作为视图模型&#xff0c;封装了与视图相关的属性和命令。它实现了INotifyPropertyChanged接口&#xff0c;当属性值发生改变时&#xff0c;通过OnPropertyChanged方法通知视图进行更新&am…

主流NoSQL数据库类型及选型分析

在数据库领域&#xff0c;不同类型的数据库针对不同场景设计&#xff0c;以下是四类主流NoSQL数据库的对比分析&#xff1a; 一、核心特性对比 键值数据库&#xff08;Key-Value&#xff09; 数据模型&#xff1a;简单键值对存储 特点&#xff1a;毫秒级读写、高并发、无固定…

西门子PLC

西门子PLC与C#通信全解析&#xff1a;从协议选型到实战开发 一、西门子PLC通信协议概述 西门子PLC支持多种通信协议&#xff0c;需根据设备型号及项目需求选择&#xff1a; S7协议 西门子私有协议&#xff0c;适用于S7-200/300/400/1200/1500系列PLC特点&#xff1a;直接访问…

Visual Studio(VS)的 Release 配置中生成程序数据库(PDB)文件

最近工作中的一个测试工具在测试多台设备上使用过程中闪退&#xff0c;存了dump&#xff0c;但因为是release版本&#xff0c;没有pdb&#xff0c;无法根据dump定位代码哪块出了问题&#xff0c;很苦恼&#xff0c;查了下怎么加pdb生成&#xff0c;记录一下。以下是具体的设置步…

★ Linux ★ 进程(上)

Ciallo&#xff5e;(∠・ω< )⌒☆ ~ 今天&#xff0c;我将和大家一起学习 linux 进程~ ​❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️ 澄岚主页&#xff1a;椎名澄嵐-CSDN博客 Linux专栏&#xff1a;https://blog.csdn.net/2302_80328146/category_12815302…

JAVA并发-volatile底层原理

volatile相当于是一个轻量级的synchronized&#xff0c;一般作用在变量上&#xff0c;它具有三个特性&#xff1a;可见性、有序性&#xff0c;相比于synchronized&#xff0c;他的执行成本更低。 先来说可见性&#xff0c;java存在共享变量不可见性的原因就是&#xff0c;线程…