VTK使用

news/2024/11/18 11:44:06/

入门参考的这篇(修改了很多):QT加载显示DICOM文件浏览
但还是必须在main()中先读文件再show,先show了再打开文件是黑的显示不出来(后续再查)。

//.h中要加入
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingFreeType);
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL);//.cpp中 
#include "vtkCamera.h"
#include "vtkImageData.h"void TestQtGui::SetFileName(const std::string& file)
{m_fileName = file;m_reader->SetFileName(m_fileName.c_str());m_reader->Update();m_actor->InterpolateOn();// 使用差值平滑处理,更有利于用户看清楚m_actor->SetInputData(m_reader->GetOutput());m_actor->SetOrientation(0, 1, 0);m_actor->Update();m_renderer->AddActor(m_actor);m_renderWindow->AddRenderer(m_renderer); ui->openGLWidget->SetRenderWindow(m_renderWindow);  //QVTKOpenGLWidget//	QVTKInteractor* interactor = ui.openGLWidget->GetInteractor();vtkRenderWindowInteractor *interactor = ui->openGLWidget->GetInteractor();interactor->SetInteractorStyle(m_interactorStyle);interactor->SetRenderWindow(m_renderWindow);//下面两个都能实现重新打开文件的渲染
//	interactor->GetRenderWindow->Render();ui->openGLWidget->GetRenderWindow->Render();interactor->Start();
}

VTK 多平面重建(MPR)及三维切片显示
BestMPRBaseVtk-005-翻车加修车
VTK教程系列:VTK基础及应用开发教程

一、基本流程

VTK 的可视化流程将需要处理的数据视作流动介质在管道中流动,因此可视化的不同阶段的数据将会有不同的处理方式,图形模型与可视化模型的结合构成了 VTK的可视化管线。
可视化模型主要用来对拟合后的数据进行处理,生成可被VTK绘制的几何形体,它包括处理对象(vtkProcessObject)与数据对象(vtkDataObject)。数据对象用于表达各种类型的数据,处理对象作用于过滤器(Filter),被用来对数据对象进行相关操作并产生新的数据对象;图形模型主要对生成的几何体进行绘制,包括相机(vtkCamera)、映射器(vtkMapper)、对象属性(vtkProperty)、灯光(vtkLight)、渲染器(vtkRenderer)、演示对象(vtkActor)及渲染窗口(vtkRenderWindows)。
在 VTK 管线中的数据流两个基本的对象[44]:流程对象(Process Object)与数据对象(Data Object)。数据对象的数据类型有许多,其父类为 vtkDataSet 类,数据结构有标准的格式。VTK 支持的数据类型有:结构网格(vtkStructureGrid)、结构点(vtkStructurePoint)、多边形数据(vtkPolyData)、非结构网格(vtkUnStructureGrid)及非结构点(vtkUnStructurePoint)等。流程对象运用数据的系统级运算法则对数据对象进行操作用来生成新的数据对象。流程对象根据其作用可分为映射对象(Mapper)、过滤器对象(Filter)以及源对象(Source)。

#include <vtkSphereSource.h>
#include <vtkPolyData.h>
#include <vtkSmartPointer.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>int main()
{//sourcevtkSmartPointer<vtkSphereSource> sphereSource =	vtkSmartPointer<vtkSphereSource>::New();sphereSource->Update();//mapvtkSmartPointer<vtkPolyDataMapper> mapper =	vtkSmartPointer<vtkPolyDataMapper>::New();mapper->SetInputConnection(sphereSource->GetOutputPort());//actorvtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();actor->SetMapper(mapper);//renderervtkSmartPointer<vtkRenderer> renderer =	vtkSmartPointer<vtkRenderer>::New();//renderWindowvtkSmartPointer<vtkRenderWindow> renderWindow =	vtkSmartPointer<vtkRenderWindow>::New();renderWindow->SetWindowName("Sphere");renderWindow->AddRenderer(renderer);  //window加入render//interactorvtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =	vtkSmartPointer<vtkRenderWindowInteractor>::New();renderWindowInteractor->SetRenderWindow(renderWindow);renderer->AddActor(actor);renderWindow->Render();      //这是关键的渲染render,否则不出图renderWindowInteractor->Start();return 0;
}
vtkConeSource     *cone       = vtkConeSource::New();     //source
vtkPolyDataMapper *coneMapper = vtkPolyDataMapper::New(); //map
vtkActor          *coneActor  = vtkActor::New();          //actor
vtkRenderer       *ren1       = vtkRenderer::New();       //renderer
vtkRenderWindow   *renWin     = vtkRenderWindow::New();   //renderWindow
renWin->AddRenderer( ren1 );
vtkConeSource *cone = vtkConeSource::New();cone->SetHeight( 3.0 );cone->SetRadius( 1.0 );cone->SetResolution( 10 );   //准备需要渲染的数据vtkPolyDataMapper *coneMapper = vtkPolyDataMapper::New();  //创建映射器coneMapper->SetInputConnection( cone->GetOutputPort() );   //将准备的数据连接到映射器vtkActor *coneActor = vtkActor::New();coneActor->SetMapper( coneMapper );  //创建一个演员来代表数据vtkRenderer *ren1= vtkRenderer::New();ren1->AddActor( coneActor );  //创建一个渲染器添加演员ren1->SetBackground( 0.1, 0.2, 0.4 );  //设置背景色// 创建渲染窗口来显示数据vtkRenderWindow *renWin = vtkRenderWindow::New();renWin->AddRenderer( ren1 );renWin->SetSize( 300, 300 );  //设置渲染窗口的大小// 接下来将actor逐渐旋转,每次旋转1°int i;for (i = 0; i < 360; ++i){renWin->Render();// 每次旋转1°ren1->GetActiveCamera()->Azimuth( 1 );}

http://www.ppmy.cn/news/372545.html

相关文章

vtk介绍

VTK&#xff08;visualization toolkit&#xff09;是一个开源的免费软件系统&#xff0c;主要用于三维计算机图形学、图像处理和科学计算可视化。VTK是在三维函数库OpenGL 的基础上采用面向对象的设计方法发展起来的&#xff0c;它将我们在可视化开发过程中会经常遇到的细节屏…

关于VTK

什么是VTK&#xff1f; Vtk&#xff08;visualization toolkit&#xff09;是一个开源的免费软件系统&#xff0c;主要用于三维计算机图形学、图像处理和可视化。Vtk是在面向对象原理的基础上设计和实现的&#xff0c;它的内核是用C构建的&#xff0c;包含有大约250,000行代码…

vtkPropPicker拾取功能

拾取一个对象,拾取的是这个对象所在的actor,所以如果想让不同的对象分开被拾取,一个对象就要创建一个actor。 vtkPropPicker 硬件拾取,只能返回位置信息 vtkAreaPicker 实现框选功能,拾取函数需要XMIN XMAX YMIN YMAX vtkPicker 通过物体的bounding box 拾取:相机和点之间…

VTK配置

提示&#xff1a;对编译过程迷糊的小白——VTK安装记录 文章目录 前言一、准备工作 1.下载最新版VTK&#xff08;尽可能用最新版&#xff0c;我试过其他的&#xff0c;在cmake过程中选择64位&#xff0c;出现了一些问题&#xff09;2.下载与本机匹配的cmake(我是Windows 64)二、…

ICP in VTK

提要 今天要研究的是关于图像配准的问题&#xff0c;图像配准是图像处理研究领域中的一个典型问题和技术难点&#xff0c;其目的在于比较或融合针对同一对象在不同条件下获取的图像&#xff0c;例如图像会来自不同的采集设备&#xff0c;取自不同的时间&#xff0c;不同的拍摄视…

VTK -SurfaceReconstruction

链接&#xff1a; 1.https://blog.csdn.net/hw140701/article/details/52796290 2.https://blog.csdn.net/HopefulLight/article/details/79157144?utm_sourceblogxgwz6 经典的Signed Distance Function重建算法主要流程如下&#xff1a; 1、对每个数据点&#xff0c;搜索其邻…

VTK-vtkPointInterpolator/vtkInterpolatorKernel

欢迎大家加入社区&#xff0c;雪易VTK社区-CSDN社区云 前言&#xff1a;目前在做模型的ReMesh&#xff0c;在研究这个接口&#xff0c;希望能有所帮助。 vtkPointInterpolator 描述&#xff1a; 变量&#xff1a; Strategy&#xff1a;MASK_POINTS, NULL_VALUE, CLOSEST_POI…

VTK(The Visualization Toolkit)编译

VTK系列文章目录 文章目录 VTK系列文章目录前言一、准备工作二、VTK编译1.使用CMake生成vs工程2.编译vtk.sln 总结 前言 可视化工具包&#xff08;VTK&#xff09;是用于操作和显示科学数据的开源软件。它配有最先进的三维渲染工具、一套用于三维交互的小部件和广泛的二维绘图…