当前位置: 首页 > news >正文

(1)VTK环境配置

文章目录

    • 1 概述
    • 2 环境
    • 3 下载VTK源码
    • 4 ubuntu编译VTK
    • 5 windows编译VTK
    • 6 Qt使用VTK(CMake)
    • 7 Qt使用VTK(QMake)
    • 8 问题记录
    • 9 相关链接


更多精彩内容
👉内容导航 👈
👉VTK开发 👈

1 概述

VTK(Visualization Toolkit,可视化工具包)是一个开源的软件系统,主要用于三维计算机图形学的显示和处理。它提供了一个广泛的数据结构和算法集合,用于处理各种类型的数据,并将其可视化为图形图像。VTK可以处理图像、结构化和非结构化数据,并提供多种可视化技术,包括但不限于体绘制、表面绘制、体积渲染、流线绘制等。

VTK的主要特点包括:

  1. 跨平台性:VTK可以在多种操作系统上运行,包括Windows、Mac OS X和Linux等。
  2. 扩展性:VTK的架构设计使得它非常容易扩展。开发者可以根据需要添加新的数据处理和可视化模块。
  3. 强大的数据处理能力:VTK不仅支持基本的数据处理操作,还提供了高级的数据分析工具,如滤波器、几何操作等。
  4. 丰富的可视化功能:VTK支持多种可视化技术,能够生成各种高质量的图形图像。
  5. 与其他软件集成:VTK可以通过多种方式与其他软件集成,比如通过Python、C++等编程语言调用VTK的库函数来实现数据处理和可视化。
  • windows下在使用vs2022编译时一直报错,无法编译,改为使用vs2017编译就可以;
  • 使用vs2022编译时部分dll无法生成,并且安装后没有lib/cmake文件夹。
  • 使用cmake3.32/25版本都会有一些警告信息,改为使用cmake3.22没有。

2 环境

环境说明
系统ubuntu22.04、windows11
cmake3.22、3.25
Qt5.14.2
编译器g++11.4、msvc2017
VTK9.4.1

3 下载VTK源码

  • 进入下载 |VTK地址下载;
  • 或者使用git clone https://github.com/Kitware/VTK.git命令下载。

4 ubuntu编译VTK

  • 使用sudo apt install cmake-gui命令安装cmake;

  • 安装完g++和Qt;

  • 使用cmake-gui打开VTK文件夹中的CMakelists.txt文件夹;

  • 设置CMAKE_INSTALL_PREFIX安装路径;

  • 将VTK_GROUP_ENABLE_QT设置为YES;

  • 将QT5_DIR设置路径/opt/Qt5.14.2/5.14.2/gcc_64/lib/cmake/Qt5,如果使用的是QT6就设置的QT6_DIR;

  • 将VTK_QT_VERSION设置使用的Qt版本;

  • 然后点击【Configure】【Generate】;

  • 打开终端,进入VTK/build文件夹中,执行make -j8开始编译;

  • 编译完成后执行sudo make install安装。

  • 编译完成后安装在/opt/VTK路径下,在VTK/lib文件夹中除了有动态库还有cmake文件夹;

  • 使用Qt打开VTK/Examples/GUI/Qt路径下的工程中的CMakeLists.txt文件;

  • 然后设置VTK路径,如下所示;

    在这里插入图片描述

  • 设置完成之后编译运行;

    在这里插入图片描述

5 windows编译VTK

注意:这里我使用vs2022编译一直无法成功,不知道是环境问题还是什么,最后使用的是VS2017编译成功;

  • 打开CMake3.22;

  • 将VTK文件夹中CMakeLists.txt文件拖进CMake中;

    在这里插入图片描述

  • 点击【Configure】,选择VS2017-64编译器,点击【Finish】;

    在这里插入图片描述

  • 搜索CMAKE_INSTALL_PREFIX项,设置编译后的安装路径,不要放在C盘,C盘需要使用管理员权限;

    在这里插入图片描述

  • 搜索QT,将下列几项改为YES

    在这里插入图片描述

  • 搜索/INCREMENTAL,将/INCREMENTAL改为/INCREMENTAL:NO,否则在vs2017中编译会失败;

    在这里插入图片描述

    改为:

    在这里插入图片描述

  • 然后再点击【Configure】;

  • VTK_QT_VERSION设置为Qt5,如果使用的是Qt6则设置为6;

    在这里插入图片描述

  • 然后再点击【Configure】;

  • 这时候会出现错误弹窗,这是找不到Qt5的cmake路径;

    在这里插入图片描述

  • 如下图所示,设置QT5_DIR路径;

    在这里插入图片描述

  • 然后点击【Configure】【Generate】;

  • 就会在VTK/build文件夹中生成VTK.sln文件,如果只安装了一个版本的VS,之间点击【Open Project】就可以打开;

  • 如果安装了多个版本的VS,则进入VTK/build文件夹,鼠标选中VTK.sln,选择使用vs2017打开;

    在这里插入图片描述

  • 选择【Debug】模式(编译完成后再选择【Release】模式),选择【ALL_BUILD】,生成;

    在这里插入图片描述

  • 编译完成后,没有错误信息,选择【INSTALL】,生成;

    在这里插入图片描述

  • 安装完成后就在设置的E:/VTK路径下如下图所示;

    在这里插入图片描述

    在这里插入图片描述

6 Qt使用VTK(CMake)

  • 创建一个Qt工程,构建工具使用CMake;

  • 在CMakeLists.txt文件中添加下列两端代码,引入CMake;

    find_package(VTK
      COMPONENTS
        CommonCore
        GUISupportQt
        InfovisCore
        RenderingFreeType
        ViewsQt)
    if (NOT VTK_FOUND)
      message("Skipping example: ${VTK_NOT_FOUND_MESSAGE}")
      return ()
    endif ()
    
    target_link_libraries(untitled10
      PRIVATE
        ${VTK_LIBRARIES}
        "Qt${VTK_QT_VERSION}::Gui"
        "Qt${VTK_QT_VERSION}::Widgets")
    

    在这里插入图片描述

  • 然后编译,如果VTK没添加进环境变量,CMake编译时是找不到VTK路径的;

  • 如下图所示,设置VTK_DIR路径;

    在这里插入图片描述

  • 然后进入UI文件,添加一个OpenGLWidget控件,提升为QVTKRenderWidget或者QVTKOpenGLNativeWidget都可以;

    ![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-

  • 进入main.cpp添加下列代码,否则VTK不能正常显示;

    // 统一 Qt 和 VTK 的 OpenGL 上下文配置,解决因 OpenGL 参数不匹配导致的渲染问题。
    // 通过 QVTKOpenGLNativeWidget::defaultFormat() 获取 VTK 推荐的 OpenGL 配置
    // 用 QSurfaceFormat::setDefaultFormat() 将其设为 Qt 全局默认格式
    QSurfaceFormat::setDefaultFormat(QVTKOpenGLNativeWidget::defaultFormat());
    

    在这里插入图片描述

  • 进入widget.cpp文件,添加下列代码;

    #include "widget.h"
    #include "./ui_widget.h"
    #include "QVTKOpenGLNativeWidget.h"
    #include "vtkConeSource.h"
    #include "vtkPolyDataMapper.h"
    #include <vtkActor.h>
    #include <vtkRenderWindow.h>
    #include <vtkRenderer.h>
    
    Widget::Widget(QWidget* parent)
        : QWidget(parent)
        , ui(new Ui::Widget)
    {
        ui->setupUi(this);
    }
    
    Widget::~Widget()
    {
        delete ui;
    }
    
    void Widget::on_pushButton_clicked()
    {
        vtkNew<vtkConeSource> cone;
        vtkNew<vtkPolyDataMapper> mapper;
        vtkNew<vtkActor> actor;
        vtkNew<vtkRenderer> renderer;
    
        mapper->SetInputConnection(cone->GetOutputPort());
    
        actor->SetMapper(mapper);
    
        renderer->AddActor(actor);
        renderer->SetBackground(0.2, 0.3, 0.4);
    
        ui->openGLWidget->renderWindow()->AddRenderer(renderer);
    }
    
    
  • 编译运行后效果如下所示;

    在这里插入图片描述

7 Qt使用VTK(QMake)

  • 创建一个Qmake工程;

  • 打开pro文件,添加下列代码,链接VTK库,下面代码中有3中链接库的方法,任选一种就可以(推荐3)

    #----------------------------------------------------------------方法1:手动链接每一个库文件,比较复杂
    # win32:CONFIG(release, debug|release): LIBS += -LE:/lib/VTK/lib/ -lvtkCommonCore-9.4 -lvtkGUISupportQt-9.4 -lvtkInfovisCore-9.4 -lvtkRenderingFreeType-9.4 -lvtkViewsQt-9.4
    # else:win32:CONFIG(debug, debug|release): LIBS += -LE:/lib/VTK/lib/ -lvtkCommonCore-9.4d -lvtkGUISupportQt-9.4d -lvtkInfovisCore-9.4d -lvtkRenderingFreeType-9.4d -lvtkViewsQt-9.4d
    
    #----------------------------------------------------------------方法2:自动链接所有库文件
    # 获取所有库文件名(自动处理路径)
    CONFIG(release, debug|release):{
        LIB_FILES = $$files(E:/lib/VTK/lib/*-9.4.lib)
    }else:CONFIG(debug, debug|release):{
        LIB_FILES = $$files(E:/lib/VTK/lib/*-9.4d.lib)
    }
    LIBS += $$join(LIB_FILES, " -L", "-L")  # 添加库路径
    LIBS += $$LIB_FILES  # 直接链接库文件
    
    
    #----------------------------------------------------------------方法3:自动链接所有库文件(标准链接方法)
    LIB_PATH = E:/lib/VTK/lib/  # 指定VTK库路径
    CONFIG(release, debug|release):{
        LIB_FILES = $$files($$LIB_PATH/*-9.4.lib)   # 自动获取路径下所有-9.4.lib结尾的库文件路径
    }else:CONFIG(debug, debug|release):{
        LIB_FILES = $$files($$LIB_PATH/*-9.4d.lib)
    }
    LIBS += -L$$LIB_PATH   # 添加链接路径
    for(lib_file, LIB_FILES) {
        lib_Name = $$basename(lib_file)      # 获取文件名E:/lib/VTK/lib/vtkIOInfovis-9.4d.lib  --> vtkIOInfovis-9.4d.lib
        LIBS += -l$$section(lib_Name, ., 0, 1) # 去除后缀 vtkIOInfovis-9.4d.lib  --> vtkIOInfovis-9.4d,并链接库
    }
    #----------------------------------------------------------------
    
    # 添加头文件
    INCLUDEPATH += E:/lib/VTK/include/vtk-9.4
    DEPENDPATH += E:/lib/VTK/include/vtk-9.4
    
    

8 问题记录

  • cmake构建出现X11::Xcursor not found; custom cursors will be ignored.

    sudo apt-get install libxcursor-dev
    
  • 错误信息:

    CMake Error at D:/Qt/Qt5.14.2/5.14.2/mingw73_64/lib/cmake/Qt5Sql/Qt5SqlConfig. cmake:15 (message):
    The imported target "Qt5::Sql" references the file
    
    "D:/Qt/Qt5.14.2/5.14.2/mingw73_64/plugins/sqldrivers/qsqlmysql.dll"
    

    需要编译安装mysql插件才可以解决。

  • 错误信息:vs中编译安装时出现。

    严重性	代码	说明	项目	文件	行	禁止显示状态
    错误	MSB3073	命令“setlocal
    C:\Users\MHF\Downloads\cmake-3.22.4-windows-x86_64\bin\cmake.exe -DBUILD_TYPE=Release -P cmake_install.cmake
    if %errorlevel% neq 0 goto :cmEnd
    :cmEnd
    endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
    :cmErrorLevel
    exit /b %1
    :cmDone
    if %errorlevel% neq 0 goto :VCEnd
    :VCEnd”已退出,代码为 1。	 INSTALL	D:\VS\2017\Common7\IDE\VC\VCTargets\Microsoft.CppCommon. targets	138
    

    安装路径在C盘,需要修改安装路径或者使用管理员打开vs。

  • 错误信息:

    vs2017: fatal error LNK1210: 已超过内部 ILK 大小限制
    

    vs中设置使用链接时使用 /INCREMENTAL:NO

    或者在CMake中将/INCREMENTAL改为/INCREMENTAL:NO。

    在这里插入图片描述

9 相关链接

  • VTK / VTK · GitLab
  • Releases · Kitware/VTK
  • 下载 |VTK
  • 构建 - VTK documentation
  • 构建设置 - VTK documentation
  • VTK:VTK 9.4.20250308 文档
  • VTK示例

相关文章:

  • Unity 基于navMesh的怪物追踪惯性系统
  • CAP理论 与 BASE理论
  • RAG文献阅读——用于知识密集型自然语言处理任务的检索增强生成
  • 数据库删除表数据
  • 在C盘新建文本文档
  • Go环境变量配置
  • Qt报错dependent ‘..\..\..\..\..\..\xxxx\QMainWindow‘ 或者 QtCore\QObject not exist
  • QEMU学习之路(7)— ARM64 启动Linux
  • 每天学一个 Linux 命令(16):mkdir
  • 【寻找Linux的奥秘】第四章:基础开发工具(下)
  • 信息学奥赛一本通 1498:Roadblocks | 洛谷 P2865 [USACO06NOV] Roadblocks G
  • Ubuntu 各个常见长期支持历史版本与代号
  • 低资源需求的大模型训练项目---3、综合对比与选型建议
  • 计算机基础复习资料整理
  • AI数字消费第一股,重构商业版图的新物种
  • oracle怎么查看是否走了索引
  • 系统设计面试总结:高性能相关:CDN(内容分发网络)、什么是静态资源、负载均衡(Nginx)、canal、主从复制
  • MPC控制基础解析与代码示例:赛车控制
  • 深度学习总结(10)
  • 开源实时语音交互大模型Ultravox-cn
  • 企业网站设计制作教程/免费正规大数据查询平台
  • 深圳网络营销培训/seo是什么技术
  • 网站开发款计入什么科目/百度产品大全首页
  • 抖音运营/seo教程之关键词是什么
  • 广州 企业网站建设/线上引流的八种推广方式
  • 做手机网站哪家好/百度搜索推广和信息流推广