我的第一个 VTK 程序

我的第一个 VTK 程序

环境:

  1. Visual Studio 2022 Commumity
  2. Qt 6.2.3 MSVC2019 64位
  3. VTK 9.3.0

不会Cmake编译VTK库?看这个:使用 Cmake 对 VTK-9.3.0 进行编译

不会在 VS2022里配置 VTK?看这个:VS2022+QT使用VTK教程

不会 VS2022 里配置 Qt?看这个:Visual Studio 2022 中 Qt 开发环境的搭建

VTK 可视化流程

在这里插入图片描述

源程序

中间遇到程序闪退,解决方法:VTK程序运行闪退解决方案

#include <vtkSmartPointer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkCylinderSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkProperty.h>
#include "vtkAutoInit.h"

VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);

int main()
{
	// 新建一个 Source 数据源对象
	vtkSmartPointer<vtkCylinderSource> cylinder = nullptr;
	cylinder = vtkSmartPointer<vtkCylinderSource>::New();
	// 设置属性
	cylinder->SetHeight(3.0); // 柱体高度
	cylinder->SetRadius(1.0); // 柱体半径
	cylinder->SetResolution(200); // 柱体横截面的边数
	// 新建一个 Mapper 映射器对象
	vtkSmartPointer<vtkPolyDataMapper> cylinderMapper = nullptr;
	cylinderMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
	// 接受 cylinder 的输出,将数据映射为几何元素
	cylinderMapper->SetInputConnection(cylinder->GetOutputPort());
	// 新建一个 Actor 演示对象
	vtkSmartPointer<vtkActor> cylinderActor = nullptr;
	cylinderActor = vtkSmartPointer<vtkActor>::New();
	// vtkActor 派生自 vtkProp 类,渲染场景中数据的可视化表达是通过 vtkProp 的子类负责的
	// vtkProp 子类负责确定渲染场景中对象的位置、大小和方向信息
	cylinderActor->SetMapper(cylinderMapper);
	cylinderActor->GetProperty()->SetColor(0.0, 0.0, 1.0);
	// 创建一个 Renderer 渲染器对象,负责管理场景的渲染过程
	vtkSmartPointer<vtkRenderer> renderer = nullptr;
	renderer = vtkSmartPointer<vtkRenderer>::New();
	// 添加 vtkProp 类型的对象到渲染场景中
	renderer->AddActor(cylinderActor);
	// 设置渲染场景的背景颜色
	renderer->SetBackground(1.0, 1.0, 1.0);
	// 创建一个 Window 窗口对象,负责本地计算机系统中窗口创建和渲染过程管理
	vtkSmartPointer<vtkRenderWindow> window = nullptr;
	window = vtkSmartPointer<vtkRenderWindow>::New();
	window->AddRenderer(renderer);
	window->SetSize(600, 480); // 设置窗口大小
	window->Render();
	window->SetWindowName("Cylinder"); // 设置窗口标题
	// 新建一个 Interactor 交互器对象,提供平台独立的响应鼠标、键盘和时钟事件的交互机制
	vtkSmartPointer<vtkRenderWindowInteractor> interactor = nullptr;
	interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
	// 设置渲染窗口,消息是通过渲染窗口捕获到的,所以必须要给交互器对象设置渲染窗口
	interactor->SetRenderWindow(window);
	// 新建一个交互器样式对象,该样式下,用户通过控制相机对物体作旋转、放大、缩小等操作
	vtkSmartPointer<vtkInteractorStyleTrackballCamera> style = nullptr;
	style = vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();
	// 定义交互器样式,默认的交互样式为 vtkInteractorStyleSwitch
	interactor->SetInteractorStyle(style);

	interactor->Initialize();
	interactor->Start();
	// 使用了智能指针,不需要手动释放内存
	return EXIT_SUCCESS;
}

运行结果

其显示的一个多边形棱柱,其中可以通过cylinder->SetResolution(200)设置该柱体的边数,将这个值设置较大时,图中的轮廓已经看不清了。

在这里插入图片描述

在得到这个图像后,将鼠标左键放置在窗口内,长按并移动鼠标时能够旋转该柱体;滚动鼠标滚轮,可以缩放柱体;长按并按住shift时,可以通过鼠标拖动图像;另外,可以按P键观察到图中的红框。

相关推荐

  1. 第一python web 网站

    2024-03-31 20:32:07       24 阅读
  2. 写你第一Vue程序

    2024-03-31 20:32:07       42 阅读
  3. 创建你第一Windows程序

    2024-03-31 20:32:07       7 阅读
  4. 第一Rust程序

    2024-03-31 20:32:07       12 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-31 20:32:07       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-31 20:32:07       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-31 20:32:07       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-31 20:32:07       20 阅读

热门阅读

  1. List转Map

    2024-03-31 20:32:07       19 阅读
  2. 学习Python渗透第14天:用python实现sql注入

    2024-03-31 20:32:07       16 阅读
  3. git 查看文件夹结构树

    2024-03-31 20:32:07       15 阅读
  4. map net收集

    2024-03-31 20:32:07       15 阅读
  5. MongoDB聚合运算符:$literal

    2024-03-31 20:32:07       15 阅读
  6. Qt之创建向导用户界面QWizard

    2024-03-31 20:32:07       17 阅读
  7. ubuntu22.04安装Fcitx5的步骤

    2024-03-31 20:32:07       16 阅读
  8. python中的re库 ,正则表达式模块

    2024-03-31 20:32:07       17 阅读
  9. 3.30蓝桥杯备赛写题心得

    2024-03-31 20:32:07       18 阅读