二、vtkCommand的使用

embedded/2025/3/21 5:51:32/

一、概述

        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.ppmy.cn/embedded/174346.html

相关文章

Android compose中的附带效应-人话

以下是这些 Compose API 的总结 API 名称作用典型使用场景注意事项LaunchedEffect在 Composable 中启动协程任务&#xff0c;协程生命周期与组件绑定。一次性异步操作&#xff08;如网络请求、动画&#xff09;、响应 key 变化重启任务。key 参数变化时会取消旧协程并启动新协…

Git——分布式版本控制工具使用教程

本文主要介绍两种版本控制工具——SVN和Git的概念&#xff0c;接着会讲到Git的安装&#xff0c;Git常用的命令&#xff0c;以及怎么在Vscode中使用Git。帮助新手小白快速上手Git。如果想直接上手用Vscode操作远程仓库则直接看7和9即可&#xff01; 目录 1. SVN和Git介绍 1.1 …

第一节:关于数组的算法(python版)

目录 一、存储方式 二、二分查找 三&#xff1a;数组的算法操作&#xff1a;双指针算法 四、数组操作&#xff1a;滑动窗口 视频讲解地址&#xff1a;动态-哔哩哔哩 一、存储方式 在python中的list本质是动态数组&#xff0c;支持自动扩容。还有一个numpy数组&#xff0c;…

电脑如何录屏

以下是电脑录屏的常用方法总结&#xff0c;涵盖系统自带工具、第三方软件及进阶功能&#xff0c;结合不同场景需求推荐最佳方案&#xff1a; 一、系统自带工具 Xbox Game Bar&#xff08;Windows 10/11&#xff09; 操作步骤&#xff1a;按 WinG 打开游戏栏 → 点击录制按钮&am…

内网安全-横向移动Kerberos 攻击SPN 扫描WinRMWinRSRDP

1.WinRM&WinRS 条件&#xff1a; 双方开启winrm winrs服务 2008版本以上默认开启&#xff0c;win 7默认关闭 检测使用cs内置端口扫描5985开放情况 进行连接 winrs -r:http://192.168.93.30:5985 -u:administrator -p:Whoami2021 whoami 2.内网-spn shell setspn -T …

“消失的中断“

“消失的中断” 1. 前言 在嵌入式开发过程中&#xff0c;中断必不可少。道友们想必也经常因为中断问题头疼不已&#xff0c;今天来说说一个很常见的问题&#xff0c;“消失的中断”。最近项目在使用第三方MCAL的时候&#xff0c;就遇到了I2C中断丢失的问题&#xff0c;排查起…

【sklearn 03】逻辑回归、决策树、支持向量机

逻辑回归、决策树、支持向量机 - 逻辑回归 logistics regression&#xff08;逻辑回归&#xff09;算法是经典的分类算法&#xff0c;基本思想是构造一个概率的拟合函数。 决策树 决策树的基本思想是根据样例去推断其背后的树形知识表征 支持向量机 支持向量机SVM(support…

奇瑞汽车智能化战略发布,开启“四大平权”新时代

3月18日&#xff0c;奇瑞汽车智能化战略发布会顺利召开。 据「TMT星球」了解&#xff0c;活动聚焦“油电同智 全球同行”&#xff0c;正式发布奇瑞集团智能化战略规划&#xff0c;并集中展示猎鹰智驾、人形机器人、智舱大模型等最新核心技术成果。 作为中国汽车智能化领域的先…