安装与运行 VTK9.3.1+Vs2022+qt 5.11.3 (2024/7)

前言

vtk installing and runing is absolutely a nightmare for newcommers.

一方面网上信息良莠不齐,实际按照某一个来做的,最后总会碰到一些奇怪的问题。另一方面,vtk本身也在快速迭代,之前能跑通的code,现在已经不能用了。结果就是尽管网上有这么多参考资料,新手(就是笔者了)还是陷入迷茫,并且每个能踩得坑都踩下去了。

我觉得这种情形很像Harry Potter and Half Blood Prince里的魔药课,新手只知其然,而不知其所以然,教条的按照步骤做,反而做得满头大汗并且效果不好。希望本文能像Potter手中那本带批注的魔药书,以最快的方式得到minimum runnable code(MRC).(笔者也是在调通程序后,以此为基础,去伪存真,将那些无效的操作去除,复杂的操作简化)


CMAKE (Why)

CMake解决一个问题,如果只有一套source code,如何方便的供不同开发环境(windows or linux)的开发者使用。CMake会根据CMakeLists.txt中的设置,将source code转化成不同平台相对应的项目文件。在visual studio的环境下,就是生成对应的solution。每一个有CmakeList文件的工程目录,都可以通过cmake来生成一个对应的solution. 

1. 用Cmake将vtk源代码转化成VStudio Solution并编译

a. 生成项目文件

创建3个文件夹,分别vtk-source, vtk-install, vtk-prefix.

vtk-source用来存放下载的vtk源文件(解压后)。

vtk-install用来放Cmake生成的solution project。

vtk-prefix用来存放将来include的头文件.h,二进制库lib,动态库dll文件。 

下面就是Configure Cmake:

这个填vtk-prefix的路径

设置qt,以及对应的path,我的是E:\ProgramFiles\Qt\5.11.3\msvc2017_64

不需要build example,vtk官网上有,浏览器运行看效果。据说是要额外下载vtk data, example才能build.

examples.vtk.org/site/Cxx/icon-default.png?t=N7T8https://examples.vtk.org/site/Cxx/Configure结束后,generate项目文件,点Open Project打开vtk solution。

也可以在vtk-install文件夹下,手动打开vtk solution

b. vtk编译

在debug模式下,编译All_Build,这个过程大概半个小时。

在debug模式下,编译install,用来生成vtk-prefix里的内容。

release模式同样来一遍,可以先不用,不影响开发。

这样就完成了vtk的安装.

c. 添加环境变量

搜索环境变量,将E:\ProgramFiles\vtk-prefix\bin加入到系统变量Path里,这样程序在运行时就不会报dll找不到的错误.

dll这个文件属于动态链接库,需要在执行时加载

环境变量的作用就是指定某些文件,如.h,lib,dll等的位置。当编译器进行编译时,需要调用某些文件时,就会按照环境变量指定的路径来寻找所需文件。其寻找顺序是:

① 当前工程目录下

② VS环境变量提供的目录

③ 系统环境变量提供的目录

当然也可以将项目所用的dll都copy到当前工程目录debug下,但这样一方面会污染项目目录,另一方面在新建一个项目的时候还要再重新copy一遍。

改完后要重启计算机


2. 编写第一个vtk+qt程序

a. 新建Qt Widgets Application

1. 加入OpenGL Module

2. include header and lib

Project Property/VC++ Directories/include directories后面加入prefix/include文件夹

(E:\ProgramFiles\vtk-prefix\include\vtk-9.3)

Library Directories后加入prefix/lib 文件夹 (E:\ProgramFiles\vtk-prefix\lib)

这样做加入了vtk头文件和库文件。引用的时候就不会有红色波浪线。

3. 将vtk lib的名字加入linker的input,如果不加的话,会报symbol unrecognized

linker链接器的作用是将编译好的.obj文件,和.lib,.res 文件链接成可执行程序,这里不能出现.cpp,.h,.dll文件。

E:\ProgramFiles\vtk-prefix\lib\*d.lib

注意到lib folder下面名字后缀带d的是debug用的,没有则是release用。

如果是build debug 用*d.lib来filter,

如果是release,要将configure改成release, 用*3.lib来filter

b. Property Manager 重复使用设置

可以将上面的设置保持下来,在创建新项目的时候直接导入就可以。

visual studio 通过 Property Manager 来创建新的项目属性,供其它项目使用。

点击【View】-【Other Windows】-【Property Manager】

添加新的Property Sheet, 将之前这些设置重新做在这个上面

  将生成的PropertySheet保持在公共目录下

在创建新的vtk项目的时候,可以直接导入之前保持的PropertySheet,可以避免前面繁琐的设置。

c. 生成一个简单的cone程序

#include "vtkTest1.h"
#include <vtkActor.h>
#include <vtkNew.h>
#include <vtkPolyDataMapper.h>
#include <vtkProperty.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <vtkConeSource.h>
#include <QVTKOpenGLNativeWidget.h>

vtkTest1::vtkTest1(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);

    QVTKOpenGLNativeWidget* pVTKWidget = new QVTKOpenGLNativeWidget();
    this->setCentralWidget(pVTKWidget);

    vtkNew<vtkConeSource> cone;
    vtkNew<vtkPolyDataMapper> mapper;
    vtkNew<vtkActor> actor;
    vtkNew<vtkRenderer> renderer;
    renderer->SetBackground(.3, .6, .3);

    // Connect   
    mapper->SetInputConnection(cone->GetOutputPort());
    actor->SetMapper(mapper);
    renderer->AddActor(actor);

    pVTKWidget->renderWindow()->AddRenderer(renderer);
}

vtkTest1::~vtkTest1()
{}

参考文献

VTK和Cmake的安装并运行一个vtk的案例_cmakevtk-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/qq_42277704/article/details/127807374

详细的VTK VS QT配置 vtk8.2.0 + vs2017 + QT5.9.2_vtk+vs+qt-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/wilsonass/article/details/89192007

  • 15
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值