VTK安装与配置补充2

2023-10-27

本文参考自:(https://blog.csdn.net/sinat_25923849/article/details/78889674)

1. 原材料

 1.1 VTK 最新 Release 文件包 https://www.vtk.org/download/

 1.2 CMake 最新 Release 安装包 https://cmake.org/download/

 1.3 Visual Studio 2015 https://msdn.itellyou.cn/ (社区版足矣,还不用序列号)

 
 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5

2. 配置流程

2.1 打开 CMake !

CMAKE

2.2 选择文件路径 !

首先把下载好的源码解压放在你喜欢的目录下,这个 source code 就是你喜欢的目录,
注意一定要对应你有 CMakeLists.txt 文件的目录下,外面包了多少层没关系,你要让 CMake
看到这个文件他才知道要干什么。第二个 build 目录就是配置好的工程文件存放的地址,
自己找个喜欢的地方放都没问题。这里我就是自己建了新的文件夹。

2.3 Configure ,第一次点击该按钮 !

出现下面这个界面,选择你的编译器版本,我这里肯定是VS2015了。

这里写图片描述

完事后,你的 CMake 界面应该出现了一片红,不要害怕,继续 Configure。

CONFG

下面我要选择一些针对性的组件。这一步骤你可以根据自己项目的实际情况来进行勾选,我主要基于MFC开发程序,所以必须要包含MFC的库,我还想看看例子,所以直接把例子一起配置,最后,我想输出的库文件在我指定的文件夹下。

BUILD - EXAMPLES

这里写图片描述

Module - XXXMFC

这里写图片描述

CMake - INSTALL_PREFIX

这里写图片描述

2.4 Configure ,第二次点击该按钮,然后 Generate 吧!

配置完成后,就可以生成工程文件了。

这里写图片描述

2.5 Open Project !

这里写图片描述

打开工程,进入VS2015的界面。

这里写图片描述

在 ALL_BUILD 上右键点击重新生成,等一会让程序飞一会……
很幸运,一个错没有,全部顺利生成了,我是 WIN10 系统。

2.6 Install !

下面就是生成实际需要使用的库了

这里写图片描述

在 INSTALL 右键设为启动项目然后重新生成就好了,静静等待 lib 和 dll 的到来……

3. 测试一下例子

激动人心的时刻来了,看看例子能不能跑起来呢?
由于之前我们已经 BUILD 了例子,所以在 BIN 目录下已经有生成好的例子工程文件在等着我们了,我在这里选择了
Examples\Tutorial\Step6\ 的例子作为测试。
首先直接打开例子的工程运行一下,看看跑不跑的起来,结果蹦出这个。

这里写图片描述

不要紧,这个问题我们先放一放,看起来好像直接运行需要远程调试器,那么我们先试试新建一个工程能不能运行示例代码。
新建一个普通的 WIN32 控制台工程,把上面这个例子的代码拷贝进去。

/*=========================================================================

  Program:   Visualization Toolkit
  Module:    Cone6.cxx

  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
  All rights reserved.
  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.

     This software is distributed WITHOUT ANY WARRANTY; without even
     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
     PURPOSE.  See the above copyright notice for more information.

=========================================================================*/
//
// This example introduces 3D widgets. 3D widgets take advantage of the
// event/observer design pattern introduced previously. They typically
// have a particular representation in the scene which can be interactively
// selected and manipulated using the mouse and keyboard. As the widgets
// are manipulated, they in turn invoke events such as StartInteractionEvent,
// InteractionEvent, and EndInteractionEvent which can be used to manipulate
// the scene that the widget is embedded in. 3D widgets work in the context
// of the event loop which was set up in the previous example.
//
// Note: there are more 3D widget examples in VTK/Examples/GUI/.
//

// First include the required header files for the VTK classes we are using.
#include "vtkConeSource.h"
#include "vtkPolyDataMapper.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkCamera.h"
#include "vtkActor.h"
#include "vtkRenderer.h"
#include "vtkCommand.h"
#include "vtkBoxWidget.h"
#include "vtkTransform.h"
#include "vtkInteractorStyleTrackballCamera.h"

//
// Similar to Cone2.cxx, we define a callback for interaction.
//
class vtkMyCallback : public vtkCommand
{
public:
  static vtkMyCallback *New()
    { return new vtkMyCallback; }
  void Execute(vtkObject *caller, unsigned long, void*) VTK_OVERRIDE
  {
      vtkTransform *t = vtkTransform::New();
      vtkBoxWidget *widget = reinterpret_cast<vtkBoxWidget*>(caller);
      widget->GetTransform(t);
      widget->GetProp3D()->SetUserTransform(t);
      t->Delete();
  }
};

int main()
{
  //
  // Next we create an instance of vtkConeSource and set some of its
  // properties. The instance of vtkConeSource "cone" is part of a
  // visualization pipeline (it is a source process object); it produces data
  // (output type is vtkPolyData) which other filters may process.
  //
  vtkConeSource *cone = vtkConeSource::New();
  cone->SetHeight( 3.0 );
  cone->SetRadius( 1.0 );
  cone->SetResolution( 10 );

  //
  // In this example we terminate the pipeline with a mapper process object.
  // (Intermediate filters such as vtkShrinkPolyData could be inserted in
  // between the source and the mapper.)  We create an instance of
  // vtkPolyDataMapper to map the polygonal data into graphics primitives. We
  // connect the output of the cone souece to the input of this mapper.
  //
  vtkPolyDataMapper *coneMapper = vtkPolyDataMapper::New();
  coneMapper->SetInputConnection( cone->GetOutputPort() );

  //
  // Create an actor to represent the cone. The actor orchestrates rendering
  // of the mapper's graphics primitives. An actor also refers to properties
  // via a vtkProperty instance, and includes an internal transformation
  // matrix. We set this actor's mapper to be coneMapper which we created
  // above.
  //
  vtkActor *coneActor = vtkActor::New();
  coneActor->SetMapper( coneMapper );

  //
  // Create the Renderer and assign actors to it. A renderer is like a
  // viewport. It is part or all of a window on the screen and it is
  // responsible for drawing the actors it has.  We also set the background
  // color here.
  //
  vtkRenderer *ren1= vtkRenderer::New();
  ren1->AddActor( coneActor );


不用说,这时候程序肯定是一堆红线了,因为没有配置环境。
网上大多文章都是说 CMake 配置,这是有道理的,我也在这摔了一跤,好在我很快爬起来了,我相信很多人跟我一样是对 CMake 不那么熟练的,那么下面看看我们如何不用 CMake 也能跑起来这个例子吧。

建好工程随便起个名字建个CPP文件把上面的例子代码黏贴进去。
这时候我们还需要配置 .h .lib .dll 这三个东西,这三项已经在我们之前的 OUT 文件夹中了,只要在项目属性中配置路径。
项目属性-VC++目录-包含目录–找到你输出的 include 文件夹路径,添加进去,红线都没了,这时候还运行不了,链接器-常规-附加库目录–找到你之前的 lib 文件夹路径,添加进去,这一步你只是告诉系统,还有这些地方存放了一些额外的lib,但是系统并不知道你要用哪些,所以还得告诉系统,你要用哪些 lib。链接器-输入-附加依赖项–把你这个lib文件夹下的所有lib名字全输进去吧,一个一个输?当然没这么麻烦

在lib文件夹下新建一个文本文档,把下面的语句放进去,保存,改后缀名为 bat,双击,看看是不是多了一个 LIBLIST.txt 文件,把里面的内容全复制,拷贝到附加依赖项中。

DIR *.lib /B >LIBLIST.TXT
  
  
  
  

    这时候还需要把告诉程序 DLL 在哪里就可以,这里有三种解决方案:
    1、配置 path 系统环境变量
    2、配置 VS “调试” 变量
    3、直接拷贝 DLL 到工程目录下
    4、直接拷贝 DLL 到 SYSTEM32(64) 文件夹中
    那么3,4方法是最简单的,也是不太推荐的,因为在以后的过程中需要频繁的进行拷贝,但是没关系,我们就是想让VTK先跑起来,哪个简单用哪个,直接把BIN下的DLL全部拷贝到你新建的这个工程目录下,运行一下程序吧。

    这里有个注意,之前我们跳过的那个问题,64位远程调试的问题,这里再次出现,因为VTK我们用VS2015生成的64位库,所以必须用64位调试,找了一些网上的方法,发现关闭了防火墙就好了。

    现在运行程序,如果之前的配置没问题应该会报这个错。

    这里写图片描述

    这主要是因为我们没用CMake 配置工程,而是自己新建的,这就导致生成工程的时候少了几行代码,没关系我们把他加在最前面。

    关键的三行代码

    #include <vtkAutoInit.h>
    VTK_MODULE_INIT(vtkRenderingOpenGL2);
    VTK_MODULE_INIT(vtkInteractionStyle);
    
    

    好了,代码加上去了,再次运行,是不是可以了呢。

    这里写图片描述

    那么这里还遗留了几个小问题:
    1、每次要用VTK的时候都要复制一大堆LIB进去,很麻烦,怎么简化?
    2、DLL 配置的1、2方法怎么操作

    请看我的另外一篇关于VS项目配置的博客,谢谢。

    本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

    VTK安装与配置补充2 的相关文章

    • 重新思考语义分割范式:SETR

      点击上方 CVer 选择加 星标 置顶 重磅干货 第一时间送达 本文作者 湃森 来源 知乎 已授权 https zhuanlan zhihu com p 348418189 一 论文信息 标题 Rethinking Semantic Seg
    • 热修复框架研究之Robust原理

      热修复框架研究之Robust原理 2017 03 28 15 23 出处 清屏网 人气 127 评论 0 热修复框架研究之Robust原理 作者 Houskii 这是群里重邮的子沛同学的投稿哦 Robust是美团点评团队在2017年3月开源
    • 【SQL注入】数字型注入 & 字符型注入

      目录 一 简介 概述 示例 数据库中区别 二 数字型注入 简介 判断 三 字符型注入 需闭合 简介 判断 一 简介 概述 一般会对数据的类型会有一个限制 不管怎么去区分 常用的数据类型有数值和字符型 通常SQL 注入漏洞分类 按照数据类型
    • 渗透实验 - 并查集

      渗透实验 给定黑格数量 黑格随机分布 生成一个矩阵 黑格子表示不通 白格表示通 循环很多次 求在当前黑格数量下 从上到下矩阵通的概率 Eg 1 0 1 1 0 1 1 0 0 0 1 1 0 1 1 0 1 0 1 0 1 0 1 0 0
    • 在winds11系统中安装Java

      一 前言 如果你想要开发Java程序 你需要安装Java开发工具包 JDK 并配置JDK的环境变量 在本篇博客中 我将介绍如何在Winds11系统中安装JDK和配置JDK的环境变量 二 安装JDK 1 首先 访问Java官方网站 搜索Ora
    • 阿里Java代码规范 P3C插件

      1 阿里开发手册 1 1 说明 2017年年初 首次公开的阿里官方Java代码规范标准手册可以说是引起了全民 IT界 代码规范的热潮 相信这个手册很多行业内的朋友都比较熟悉 毕竟有 大厂光环 想低调都难 这个手册的主旨是 码出高效 码出质量
    • Linux 文件操作

      文章目录 一 task struct 和 file 的关系 二 文件操作的系统调用 三 进程默认打开的三个文件 四 文件重定向 五 Linux 下一切皆文件 六 缓冲区 文件是在磁盘上创建出来的 当我们想进行文件操作时 根据冯诺依曼体系结构
    • 【自学】记录Centos遇到的坑-网络连接失败

      Failed to start LSB Bring up down networking 问题 一 执行 service network restart 出现以下错误 Restarting network via systemctl Job

    随机推荐

    • 蚂蚁算法matlab,蚁群算法(ACA)及其Matlab实现

      1基本原理 本质上也是一种概率算法 通过大概率收敛到最佳值 和其他的智能算法很相似 蚁群分泌的信息素存在正反馈 使得较佳的解 具有大概率被选到 当全局都选用较佳的解 变可以得到整体的最优解 2几个关键点 1 概率选择 受信息素浓度和启发函数
    • NETSDK1045 当前 .NET SDK 不支持将 .NET 6.0 设置为目标。请将 .NET 5.0 或更低

      vs2019解决 NETSDK1045 错误 一 平台描述 二 问题描述 三 问题原因 四 解决办法 一 平台描述 系统 Windows 10 VS Visual Stdio 2019 二 问题描述 我在下载了 微软官网 的WPF示例代码运
    • matlab求分量平方和,Matlab经典复习试题

      A 是三条边构成三角形的条件 B 是三条边不构成三角形的条件 C 构成三角形时逻辑值为真 D 不构成三角形时逻辑值为假 二 程序阅读理解 1 数学实验程序如下 syms x f 3 x 2 6 x 1 g x 2 x 3 R f g ezp
    • STM32-内存管理实验

      一 内存管理简介 1 如何在LCD上实现SD卡文件浏览 需要读取所有文件名到内存 然后显示到LCD 一般的方法是定义一个数组来存储所有文件名 1 需要知道最大文件名的长度 比如255字节 2 需要知道文件的个数 如果没有内存管理 则需要定义
    • 差分进化算法(Differential Evolution,DE)实例详解

      差分进化算法是 differential evolution DE 是基于群体智能理论的优化算法 是通过群体内个体间的合作与竞争而产生的智能优化搜索算法 对比进化计算 它保留了基于种群的全局搜索策略 采用实数编码 基于差分的简单变异操作和
    • SAP PO上传异步接口(PO从对方中间表读取数据)

      导语 最近的项目上出现了一个奇奇怪怪的需求 上传接口居然不是外围系统给我传输 而是他数据丢到他的中间表 然后PO去取过来 真就他不动 我自己动 下面说一下需要怎么来实现吧 其实跟PO下传接口写入中间表一样 只不过方向变了 还有一些小变动 这
    • HBASE列族不能太多的真相 (一个table有几个列族就有几个 Store)

      HRegionServer内部管理了一系列HRegion对象 每个HRegion对 应了table中的一个region HRegion中由多 个HStore组成 每个HStore对应了Table中的一个column family的存储 可以
    • Mac 快速打开终端快捷键

      Mac下没有打开终端的快捷键 需要自己设置 主要是利用Mac的Automator来创建打开终端的服务 并设置快捷键 直接看图说话 找到Automator 创建打开终端的服务 编写打开终端的命令 其中的 Terminal 改成其他的应用名就能
    • mysql高级教程

      mysql高级教程 1 索引相关 1 创建索引 创建索引 ALTER TABLE test test ADD INDEX myindex name USING BTREE CREATE INDEX myindex ON test name
    • 算法课四

      算法报告四 Dijkstra算法 最短距离 16122020 钟顺源 一 题目大意 给出一张图 并给定起点和终点 问起点到终点的最短距离是多少 有两个特殊要求 1 如果从顶点i到顶点j有不止一条最短路径 那么输出路段数最少者 2 如果具有最
    • 使用frp配置内网穿透

      1 服务端配置 服务端即在公网环境下的服务器 需配置frps服务 1 1 下载frp 下载地址是https github com fatedier frp releases 要注意下载的版本 由你的服务器机型决定 我下载的是frp 0 34
    • Windows 网络凭证

      前言 单位内部 员工之间电脑免不了要相互访问 eg 访问共享文件夹 这就引出网络凭证的概念 即你用什么身份访问对端计算机 实验环境 创建共享文件夹 WinSrv 2008上新建的文件夹sharedata 共享给任何人 任何人都是参与者 即具
    • matlab 随机函数 基于,[转载](zz)Matlab 随机函数

      随机函数 包括rand rands randn 根据MATLAB中的相关解释 rands函数一般是用在神经网络的权值和阈值的初始化时 范围是 1到1 rand函数 产生均匀分布的伪随机数 randn函数 正态分布的均值为0 方差为1的随机数
    • 【多尺度密集递归融合网络:超分】

      A novel image super resolution algorithm based on multi scale dense recursive fusion network 基于多尺度密集递归融合网络的图像超分辨率算法 随着卷积
    • Activity劫持实例与防护手段

      原文地址 http blog chinaunix net uid 29170659 id 4930737 html 本文只用于学习技术 提高大家警觉 切勿用于非法用途 什么叫Activity劫持 这里举一个例子 用户打开安卓手机上的某一应用
    • postman如何进行更新呢?

      一般来说 postman我们要用最新的版本 最新版有些比较好的特性 如何更新呢 第一种 postman是自动更新的 什么都不用设置 就会自动更新 更新的界面表现是 第二种 手动设置 打开postman 在file里面选择setting up
    • (七)图像处理中常用算子Laplacian\Sobel\Roberts\Prewitt\Kirsch

      1 拉普拉斯 Laplacian 算子 1 1基础介绍 最简单的各向同性导数算子是拉普赖斯算子 其具有旋转不变性 对于两个变量的函数 f x y f x y f
    • java将一个文件或者目录复制到另一个文件下

      java将一个文件或者目录复制到另一个文件下 列如 把 F cc下的所有文件复制到 F home下面 如果是文件的话那就是 F JSON JSON jpg 和 F JSON JSON jpg import java io import ja
    • 如何计算归并排序算法的时间复杂度?

      如何计算归并排序算法的时间复杂度 什么是归并排序 计算时间复杂度 什么是归并排序 归并排序的概念十分简单 就是 分而治之 的思想 这里我直接从网上找了一份对归并排序算法的比较好的介绍排序算法 计算时间复杂度 关键是怎么计算时间复杂度 我们在
    • VTK安装与配置补充2

      本文参考自 https blog csdn net sinat 25923849 article details 78889674 1 原材料 1 1 VTK 最新 Release 文件包 https www vtk org downloa