VTK安装与项目实例
所需软件的安装
本文中VTK项目的开发所用语言为C++,使用Vs+Qt进行开发,另需要CMake进行编译安装。
Vs+Qt安装与配置
具体步骤见:Vs+Qt下载与配置
CMake安装
下载地址
常规软件安装步骤。
VTK的下载安装
下载地址
解压后得到源码文件,开始用cmake进行编译
路径选择如下图所示,第一项为源码位置(CMakeLists.txt所在),第二项为生成项目的位置,这里简单设置了子文件夹,如果没有该路径会有提示框提醒创建。
Grouped选项勾选后让各条目分组
Advanced选项勾选后给出更多可供修改的条目
点击Configure按钮,弹出对话框,第一项需要选择IDE,选择之前安装的版本即可,如VS2019,第二项选x64,第三项可空
IDE选择后,需要处理出现的红色条目,这里主要注意的有四个选项:(没去测试后面两项按照默认选项是什么结果,这里均选择了WANT)
BUILD_EXAMPLES: 如果想学习官方示例程序,那么就勾选上
CMAKE_INSTALL_PREFIX: 这个表示vtk最后生成的链接库的位置,默认是C:/ProgramFiles/VTK,值得一提的是最后生成的库并不大,只有约200MB,如果C盘不紧张,可以不作修改,但是放在C盘要注意创立文件夹的权限,第一次安装时,我即使用管理员权限进行操作,也出现了权限错误相关的问题,所以这里建议别放在C盘,在其他盘准备一个位置即可。
VTK_Group_Imaging: 勾选上
VTK_Group_Qt: 勾选上
如果电脑上有多个Qt,比如有专门官网下载安装的,还有一些软件携带的,又或者python环境中自带的,所以建议检查一下Qt的路径是否是想要的版本,如果不是可以逐一更改相关路径,或者在Configure前就在系统环境中把Qt的路径设置好。
以上设置好后就可以继续Configure,只要红色条目全部变白,就可以点击Generate,消息框提示Generating done以后说明工程生成成功。
找到新生成的VS项目文件位置,也就是上面第二项所选路径,打开VTK.sln(如果之前CMAKE_INSTALL_PREFIX选择的非系统盘,就可以直接打开,如果是系统盘,就需要以管理员权限打开)
打开项目后,找到INSTALL,右键选择生成
生成结束提示没有错误后,就可以在CMAKE_INSTALL_PREFIX所选路径找到所需文件
VTK项目的开发实例与配置
因为这里举的实例是在VS中操作,需要Qt插件,所以 Vs+Qt安装与配置中的插件要配置好。
这里的实例项目将进行一个网格模型的表面积以及体积计算和模型展示。
创建Qt项目
打开VS,选择创建新项目
这里选择哪一种应该影响不大,主要是为了在项目中可以正常使用Qt的库,这里选择了红框内的选项
下一步项目名称、路径自行选择,然后创建。
弹出对话框,Next,这里均是默认选择
创建完成后,有这些内容:
复制以下测试代码放入main.cpp,路径要记得改,部分代码出自实例
#include <iostream>
#include <QApplication>
#include <QFileDialog>
#include <qDebug>
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
#include"vtkSmartPointer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkInteractorStyleTrackballCamera.h"
#include "vtkCylinderSource.h"
#include "vtkPolyDataMapper.h"
#include "vtkActor.h"
#include "vtkRenderer.h"
#include "vtkOBJReader.h"
#include "vtkTriangleFilter.h"
#include "vtkMassProperties.h"
int main(int argc, char* argv[])
{
QApplication a(argc, argv);
//读取stl的文件
//vtkSTLReader* part = vtkSTLReader::New();
vtkOBJReader* part = vtkOBJReader::New();
QString file_path = QFileDialog::getOpenFileName(NULL, QObject::tr("Select OBJ File"), // 标题
QObject::tr("C:\\Users"), // 初始路径
"Text(*.obj);;All(*.*)"); // 目标文件类型
if (file_path.isEmpty() == true) return 1;
QByteArray ba = file_path.toLocal8Bit();
const char* file_path_str = ba.data();
part->SetFileName(file_path_str);
part->Update();
//vtkPolyDataMapper 渲染多边形几何数据(vtkPolyData)
//派生自类vtkMapper,将输入的数据转换为几何图元(点、线、多边形)进行渲染
vtkPolyDataMapper* partMapper = vtkPolyDataMapper::New();
partMapper->SetInputConnection(part->GetOutputPort());
vtkSmartPointer< vtkTriangleFilter > triangleFilter = vtkSmartPointer< vtkTriangleFilter >::New();
triangleFilter->SetInputData(part->GetOutput());
triangleFilter->Update();
vtkSmartPointer< vtkMassProperties > polygonProperties = vtkSmartPointer< vtkMassProperties >::New();
polygonProperties->SetInputData(triangleFilter->GetOutput());
polygonProperties->Update();
double area = polygonProperties->GetSurfaceArea();
double vol = polygonProperties->GetVolume();
qDebug() << "Data area is:" << QString::number(area) << "Data volume is: " << QString::number(vol);
vtkSmartPointer<vtkActor> cylinderActor = vtkSmartPointer<vtkActor>::New();
cylinderActor->SetMapper(partMapper);
//vtkRenderer 负责管理场景的渲染过程:包括Prop,照相机(Camera)和光照(Light)都被集中在一个vtkRenderer对象中
//一个vtkRenderWindow中可以有多个vtkRenderer对象
//vtkRenderer可以渲染在窗口中不同的矩形区域中(即视口)
vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
renderer->AddActor(cylinderActor); //添加vtkProp类型的对象到渲染场景中
//还有许多SetBackground的细节知识点,我跳过了
renderer->SetBackground(0.1, 0.2, 0.4); //设置渲染场景的背景颜色(R、G、B),取值范围0.0-1.0
//vtkRenderWindow 将操作系统(windows , linux等)与VTK渲染引擎连接到一起,
vtkSmartPointer<vtkRenderWindow> renWin = vtkSmartPointer<vtkRenderWindow>::New();
renWin->AddRenderer(renderer); //加入vtkRenderer对象
renWin->SetSize(300, 300); //用于设置VTK窗口的大小,以像素为单位。 可以试试(500,500)(1000,500)等
//vtkRenderWindowInteractor 提供平台独立的响应鼠标、键盘和时钟事件的交互机制
vtkSmartPointer<vtkRenderWindowInteractor> iren = vtkSmartPointer<vtkRenderWindowInteractor>::New();
iren->SetRenderWindow(renWin); //SetRenderWindow(renWin)设置渲染窗口,消息是通过渲染窗口捕获到的,所以必须要给交互器对象设置渲染窗口
//交互器样式的一种,该样式下,用户是通过控制相机对物体作旋转、放大、缩小等操作
vtkSmartPointer<vtkInteractorStyleTrackballCamera> style = vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();
iren->SetInteractorStyle(style); //定义交互器样式,默认的交互样式为vtkInteractorStyleSwitch
iren->Initialize(); //为处理窗口事件做准备,交互器工作之前必须先调用这个方法进行初始化。
iren->Start(); //开始进入事件响应循环,交互器处于等待状态,等待用户交互事件的发生。
//进入事件响应循环之前必须先调用Initialize()方法。
return 0;
}
项目环境配置
bin目录
在系统环境PATH目录中加入VTK的bin目录
include目录
在在项目属性->C/C+±>常规->附加包含目录 中加入VTK的include目录
lib目录
在在项目属性->链接器->常规->附加库目录 中加入VTK的lib目录
lib文件
在在项目属性->链接器->输入->附加依赖项 中加入VTK的lib,这里尽力选择了所有lib文件 D:***\VTK9.2.2\lib*.lib
设置完成后,红色提示将全部消失
运行代码,在弹出提示框中选择OBJ文件,得出计算结果,以及模型显示。
参考文章
VTK安装 win10+VS2017+VTK8.1.2+QT5.12编译安装
VTK教程1--------VTK在win10下的安装
02-VTK编译安装
VTK简单实例学习(1)
VTK体积&表面积测量