【Visual Studio】在 Windows 上使用 Visual Studio 构建 VTK

知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。

编号内容
1【Visual Studio】在 Windows 上使用 Visual Studio 构建 VTK
2【Visual Studio】在 Windows 上使用 Visual Studio 配合 Qt 构建 VTK
3【VTK】VTK 显示小球例子,在 Windows 上使用 Visual Studio 配合 Qt 构建 VTK
4【VTK】官方示例,移植到自己的 Qt 工程,含代码

这一篇在 Windows 上完成了使用 Visual Studio 构建 VTK,还有一篇是结合 Qt 实现在 Windows 上使用 Visual Studio 配合 Qt 构建 VTK。另一篇文章链接为:【Visual Studio】在 Windows 上使用 Visual Studio 配合 Qt 构建 VTK。

文章目录

  • 1 版本环境
  • 2 构建步骤
    • 1 准备文件夹结构
    • 2 运行 CMake
    • 3 在 Visual Studio 中构建
    • 4 安装 VTK
    • 5 再次在 Visual Studio 中构建
    • 6 添加环境变量
  • 3 测试是否成功
    • 文件结构
    • CMakeLists.txt 代码
    • HighlightPickedActor.cxx 代码
  • Ref.

1 版本环境

  • win11
  • visual studio 2022
  • VTK-9.2.6
  • CMake 3.26.3

2 构建步骤

建议全程打开 CMake 和 Visual Studio 时均使用管理员身份,防止不必要的麻烦。

1 准备文件夹结构

我是在 C 盘创建了一个 VTKFolders 来保存所有需要的文件。

在这里插入图片描述

2 运行 CMake

使用 CMake 生成一个 visual studio 解决方案。首先以管理员身份打开 CMake-GUI。

配置好资源文件夹和 build 文件夹。

在这里插入图片描述

然后点击 Configure。会弹出一个选择框,选择适合自己的配置,然后 Finish。

在这里插入图片描述

我们现在有几个选项,可以根据需要打开或关闭。对于本指南所做的唯一更改是

  • Check the box after CMAKE_CXX_MP_FLAG. 这允许使用多核进行构建。

在这里插入图片描述

再点击一次 Configure 应用刚才的更改。

单击 Generate。这将填充 build 子文件夹。

最后,单击 Open Project 在 Visual Studio 中打开生成的解决方案。
不过这时候建议退出一下 Visual Studio,因为默认打开不是以管理员身份的。可以退出重新以管理员身份打开,而且已打开过的工程也是有记录的,直接点击就行了。

在这里插入图片描述

3 在 Visual Studio 中构建

选择 Release 和 Win32。

然后选择 生成 -> 生成 ALL_BUILD。

在这里插入图片描述

根据电脑性能不同,花费时间也不同。我电脑用了 3 分钟,报告显示成功 263,有 2 个失败。我继续往下进行了,目前问题不大。

在这里插入图片描述

另外,也可以再切换 Release 成 Debug 再生成一遍,这样之后在其他工程的 Debug 环境也可以使用 VTK。

4 安装 VTK

为了能够在其他项目中使用 VTK,它首先需要安装。
再次打开 CMake。
点击一下 Configure 看一下配置。
修改 PREFIX 的文件夹。
再次点击 Configure。
然后点击 Generate。
最后点击 Open Project。

在这里插入图片描述

5 再次在 Visual Studio 中构建

这里与第 2 步在 Visual Studio 中构建操作完全一样,不再放过程图,仅放置一下结果图。

下边是 Release 的生成结果。

在这里插入图片描述
下边是 Debug 的生成结果。
在这里插入图片描述

然后我们就可以在文件夹中看到很多 .dll 文件。
放一下我自己的文件夹路径仅供参考 C:\VTKFolders\VTK-build\bin\Release

6 添加环境变量

然后就是根据自己的文件夹路径,添加环境变量。
不知道怎么打开系统环境变量的可以根据以下提示:
[start -> Edit the system environment variables -> Advanced -> Environment Variables -> Path -> Edit -> New]

在这里插入图片描述

3 测试是否成功

如果一切顺利,那么现在应该可以编译并运行 C++ 示例之一了。
我用的例子是 HighlightPickedActor,直接下载解压到一个文件夹就行了。如果没办法下载也可以去文章末尾复制一下代码,保存为指定文件名也行。

在这里插入图片描述

打开 CMake,并选择如下图所示的文件夹配置。

在这里插入图片描述

点击 Configure,应该能自动找寻到 VTK_DIR 的路径,如果找不到,那就是环境变量没有配置好,重新配置一下就行了。
然后点击 Generate,Open Project。

在这里插入图片描述

然后就是得到了一个可以打开的 Visual Studio 工程。右键 HighlightPickedActor 工程,选择 “设为启动项目”。在这里插入图片描述

然后启动工程,如果得到如下程序运行结果,那么就证明已经安装成功了。之后在其他工程中调用即可。

在这里插入图片描述

文件结构

--- HighlightPickedActor
------ build <--empty
------ CMakeLists.txt
------ HighlightPickedActor.cxx

CMakeLists.txt 代码

cmake_minimum_required(VERSION 3.12 FATAL_ERROR)project(HighlightPickedActor)find_package(VTK COMPONENTS CommonColorCommonCoreFiltersSourcesInteractionStyleRenderingContextOpenGL2RenderingCoreRenderingFreeTypeRenderingGL2PSOpenGL2RenderingOpenGL2
)if (NOT VTK_FOUND)message(FATAL_ERROR "HighlightPickedActor: Unable to find the VTK build folder.")
endif()# Prevent a "command line is too long" failure in Windows.
set(CMAKE_NINJA_FORCE_RESPONSE_FILE "ON" CACHE BOOL "Force Ninja to use response files.")
add_executable(HighlightPickedActor MACOSX_BUNDLE HighlightPickedActor.cxx )target_link_libraries(HighlightPickedActor PRIVATE ${VTK_LIBRARIES}
)
# vtk_module_autoinit is needed
vtk_module_autoinit(TARGETS HighlightPickedActorMODULES ${VTK_LIBRARIES}
)

HighlightPickedActor.cxx 代码

#include <vtkActor.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkMinimalStandardRandomSequence.h>
#include <vtkNamedColors.h>
#include <vtkNew.h>
#include <vtkObjectFactory.h>
#include <vtkPolyDataMapper.h>
#include <vtkPropPicker.h>
#include <vtkProperty.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <vtkSphereSource.h>namespace {
// Handle mouse events
class MouseInteractorHighLightActor : public vtkInteractorStyleTrackballCamera
{
public:static MouseInteractorHighLightActor* New();vtkTypeMacro(MouseInteractorHighLightActor,vtkInteractorStyleTrackballCamera);MouseInteractorHighLightActor(){LastPickedActor = NULL;LastPickedProperty = vtkProperty::New();}virtual ~MouseInteractorHighLightActor(){LastPickedProperty->Delete();}virtual void OnLeftButtonDown() override{vtkNew<vtkNamedColors> colors;int* clickPos = this->GetInteractor()->GetEventPosition();// Pick from this location.vtkNew<vtkPropPicker> picker;picker->Pick(clickPos[0], clickPos[1], 0, this->GetDefaultRenderer());// If we picked something before, reset its propertyif (this->LastPickedActor){this->LastPickedActor->GetProperty()->DeepCopy(this->LastPickedProperty);}this->LastPickedActor = picker->GetActor();if (this->LastPickedActor){// Save the property of the picked actor so that we can// restore it next timethis->LastPickedProperty->DeepCopy(this->LastPickedActor->GetProperty());// Highlight the picked actor by changing its propertiesthis->LastPickedActor->GetProperty()->SetColor(colors->GetColor3d("Red").GetData());this->LastPickedActor->GetProperty()->SetDiffuse(1.0);this->LastPickedActor->GetProperty()->SetSpecular(0.0);this->LastPickedActor->GetProperty()->EdgeVisibilityOn();}// Forward eventsvtkInteractorStyleTrackballCamera::OnLeftButtonDown();}private:vtkActor* LastPickedActor;vtkProperty* LastPickedProperty;
};vtkStandardNewMacro(MouseInteractorHighLightActor);
} // namespace// Execute application.
int main(int argc, char* argv[])
{vtkNew<vtkNamedColors> colors;int numberOfSpheres = 10;if (argc > 1){numberOfSpheres = atoi(argv[1]);}// A renderer and render windowvtkNew<vtkRenderer> renderer;vtkNew<vtkRenderWindow> renderWindow;renderWindow->SetSize(640, 480);renderWindow->AddRenderer(renderer);renderWindow->SetWindowName("HighlightPickedActor");// An interactorvtkNew<vtkRenderWindowInteractor> renderWindowInteractor;renderWindowInteractor->SetRenderWindow(renderWindow);// Set the custom type to use for interaction.vtkNew<MouseInteractorHighLightActor> style;style->SetDefaultRenderer(renderer);renderWindowInteractor->SetInteractorStyle(style);vtkNew<vtkMinimalStandardRandomSequence> randomSequence;randomSequence->SetSeed(8775070);for (int i = 0; i < numberOfSpheres; ++i){vtkNew<vtkSphereSource> source;double x, y, z, radius;// random position and radiusx = randomSequence->GetRangeValue(-5.0, 5.0);randomSequence->Next();y = randomSequence->GetRangeValue(-5.0, 5.0);randomSequence->Next();z = randomSequence->GetRangeValue(-5.0, 5.0);randomSequence->Next();radius = randomSequence->GetRangeValue(0.5, 1.0);randomSequence->Next();source->SetRadius(radius);source->SetCenter(x, y, z);source->SetPhiResolution(11);source->SetThetaResolution(21);vtkNew<vtkPolyDataMapper> mapper;mapper->SetInputConnection(source->GetOutputPort());vtkNew<vtkActor> actor;actor->SetMapper(mapper);double r, g, b;r = randomSequence->GetRangeValue(0.4, 1.0);randomSequence->Next();g = randomSequence->GetRangeValue(0.4, 1.0);randomSequence->Next();b = randomSequence->GetRangeValue(0.4, 1.0);randomSequence->Next();actor->GetProperty()->SetDiffuseColor(r, g, b);actor->GetProperty()->SetDiffuse(0.8);actor->GetProperty()->SetSpecular(0.5);actor->GetProperty()->SetSpecularColor(colors->GetColor3d("White").GetData());actor->GetProperty()->SetSpecularPower(30.0);renderer->AddActor(actor);}renderer->SetBackground(colors->GetColor3d("SteelBlue").GetData());// Render and interactrenderWindow->Render();renderWindowInteractor->Initialize();renderWindowInteractor->Start();return EXIT_SUCCESS;
}

Ref.

  1. 在 Windows 上使用 Visual Studio 构建 VTK
  2. 八、VTK安装并运行一个例子
  3. Qt VTK ITK安装与测试(二)VTK的安装与测试
  4. 【转】二、VTK用于QT的安装

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/23117.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3中通过vue-i18n实现国际化

效果图 前言 突然想在vue3项目中使用国际化功能&#xff0c;查阅相关资料后发现和vue2的用法有些出入&#xff0c;记录一下 使用 下载vue-i18n npm i vue-i18n2、准备语言文件 目前我的项目只支持中英文切换&#xff0c;故准备一份中文文件和一份对应的英译文件 创建langur…

Kubernetes 组件介绍

Kubernetes 组件 部署完 Kubernetes&#xff0c;便拥有了一个完整的集群 一组工作机器&#xff0c;称为节点&#xff0c; 会运行容器化应用程序。每个集群至少有一个工作节点 工作节点会托管 Pod &#xff0c;而 Pod 就是作为应用负载的组件。 控制平面管理集群中的工作节点…

[QT编程系列-13]:QT快速学习 - 1- 初识

目录 第1章 QT的介绍 1.1 QT VS MFC 1.2 QT历史 1.3 QT的应用 1.4 QT学习方法 1.5 QT对象树 1.6 2-8定律 1.7 QT优势&#xff1a; 1.8 QT支持的平台 第2章 QT UI是各种控件对象的堆积 第3章 QT UI是各种控件的堆积 第4章 控件窗口的控制 第1章 QT的介绍 1.1 QT V…

天翎MyApps低代码平台案例分享—阿米检测设备管理系统

项目背景&#xff1a;阿米检测技术有限公司&#xff08;以下简称为“阿米检测”&#xff09;隶属于中国航天科技集团&#xff0c;是北京航天计量测试技术研究所下属全资公司&#xff0c;2018年由国家财政部正式发文批准成立。司转化航天高端技术&#xff0c;开展测量方法应用、…

PyTorch翻译官网教程6-AUTOMATIC DIFFERENTIATION WITH TORCH.AUTOGRAD

官网链接 Automatic Differentiation with torch.autograd — PyTorch Tutorials 2.0.1cu117 documentation 使用TORCH.AUTOGRAD 自动微分 当训练神经网络时&#xff0c;最常用的算法是方向传播算法。在该算法中&#xff0c;根据损失函数与给定参数的梯度来调整模型参数&…

979. 在二叉树中分配硬币(力扣)

在二叉树中分配硬币 题目一题一解&#xff1a;DFS(java)思路步骤解析测试代码复杂度分析运行结果 优化代码思路测试代码运行结果复杂度分析 题目 给你一个有 n 个结点的二叉树的根结点 root &#xff0c;其中树中每个结点 node 都对应有 node.val 枚硬币。整棵树上一共有 n 枚…

【阅读笔记】Rapid, Detail-Preserving Image Downscaling

Rapid, Detail-Preserving Image Downscaling&#xff08;快速的图像缩放技术&#xff09; 该论文提出了一种基于卷积滤波器的算法&#xff0c;并确定滤波器的权值&#xff0c;使重要的细节保留在缩小比例的图像。更具体地说&#xff0c;它为更偏离局部图像邻域的像素分配更大…

IEEE WCCI-2020电动汽车路由问题进化计算竞赛的基准集

引言 交通一直是二氧化碳排放的主要贡献者。由于全球变暖、污染和气候变化&#xff0c;联邦快递、UPS、DHL和TNT等物流公司对环境变得更加敏感&#xff0c;他们正在投资于减少作为其日常运作的一部分而产生的二氧化碳排放的方法。毫无疑问&#xff0c;使用电动汽车&#xff08;…

X86架构的Linux(Ubuntu版本)上离线安装CUnit来解决Could not find CUnit(missing:CUNIT_LIBRARY)问题

前言1 下载cunit压缩安装包&#xff1a;CUint-2.1-3.tar.bz2&#xff08;为了安装成功请下载对应版本&#xff09;2 解压安装压缩包3 sudo ./bootstrap --prefix/usr/local/cunit 生成可执行文件configure*4 sudo ./configure --prefix/usr/local/cunit5 sudo make . 编译 &…

记录--你知道Vue中的Scoped css原理么?

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 追忆Scoped 偶然想起了一次面试&#xff0c;二面整体都聊完了&#xff0c;该做的算法题都做出来了&#xff0c;该背的八股文也背的差不多了&#xff0c;面试官频频点头&#xff0c;似乎对我的基础和项…

常见的bug---4、在DataGrip上跑本地模式报return 2异常

文章目录 问题描述原因分析&#xff1a;解决方案&#xff1a; 问题描述 FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask 在DataGrip上设置了Hive的本地模式。虽然可以建表、但是无法对表进行插入数据 原因分析&#xff1a; 在插…

概率论的学习和整理15: 超几何分布,二项分布,泊松分布是如何趋近收敛的?

目录 1 问题&#xff1a; 2 结论 3 实验1 4 实验2 5 实验3 6 实验4 5 各种规律总结 5.1 1 5.2 2 5.3 3 5.4 4 6 超几何分布&#xff0c;二项分布&#xff0c;泊松分布&#xff0c;三者用EXCEL模拟 6.1 简单的扩展到泊松分布 6.2 比较整体的动态过程&…