VTK模块学习(一)

文章目录

  • VTK模块学习(一)
    • 1、仅依赖于cmake编译好的VTK
    • 2、基于OpenCV编译下的VTK

1、仅依赖于cmake编译好的VTK

推荐一篇博客:《VTK基础及应用开发教程》,版权归 @东灵工作室所有。
    对于仅需cmake编译好的VTK实现可视化的人群,可参考此博客进行学习(干货多多)✨✨✨。

在此,演示如何创建一个简单的VTK程序 + 显示一个简单的VTK-3D实例。
    流程如下:
        ①:新建一个文件夹名为Examples,然后在新建的文件夹下面再创一个文件夹名为TestVTKInstall。


        ②:在文件夹TestVTKInstall下创建一个bin文件夹、CMakeLists.txt以及TestVTKInstall.cpp文件。


        ③:在CMakeLists.txt文件里插入以下代码:

CMAKE_MINIMUM_REQUIRED(VERSION 3.13)
PROJECT(TestVTKInstall)
FIND_PACKAGE(VTK REQUIRED)
INCLUDE(${VTK_USE_FILE})
ADD_EXECUTABLE(TestVTKInstall TestVTKInstall.cpp)
TARGET_LINK_LIBRARIES(TestVTKInstall ${VTK_LIBRARIES})

在此详细说明一下这几行代码实现的功能,如下:

1、CMAKE_MINIMUM_REQUIRED 该命令用于指定构建工程时所需要的cmake版本要求。我自己的cmake版本时3.13.0,即VERSION后面所跟的版本号为3.13.0,第三个参数是可选的,0可不写。

2、PROJECT 该命令指定工程名称。可指定工程支持的语言,默认C\C++。存在两个隐含的cmake变量 <projectName>_BINARY_DIR<projectName>_SOURCE_DIR,在这个例子里就是 TestVTKInstall_BINARY_DIR 以及 TestVTKInstall_SOURCE_DIR。同时cmake也预定义了 PROJECT_BINARY_DIRPROJECT_SOURCE_DIR 变量,他们的值分别跟 <projectname>_BINARY_DIR<projectname>_SOURCE_DIR一致。为了统一起见,以后直接使用 PROJECT_BINARY_DIRPROJECT_SOURCE_DIR 分别表示工程的编译路径和源码路径,即这个例子里的 “F:\VTK\Examples\TestVTKInstall\bin”“F:\VTK\Examples\TestVTKInstall”,因为这样即使修改了工程名称,也不会影响这两个变量。

3、FIND_PACKAGE 该命令用于搜索并加载外部工程。隐含的变量为 <package>_FOUND,用于标示是否搜索到所需的工程。参数 [REQUIRED] 表示所要搜索的外部工程对本工程来说是必须的,如果没有搜索到,cmake会终止整个工程构建过程。对VTK为例,FIND_PACKAGE命令搜索的就是VTK的配置文件 VTKConfig.cmake

4、INCLUDE 指定载入一个文件或者模块,如果指定的是模块,那么将在CMAKE_MODULE_PATH中搜索这个模块并载入,在本例中,指定的是VTK模块,则会在CMAKE_MODULE_PATH中搜索VTK模块并载入,变量CMAKE_MODULE_PATH指的是搜索cmake模块的目录。本人的cmake模块目录为 “D:\cmake-3.13.0-rc1-win64-x64\share\cmake-3.13\Modules”,在该目录下,有FindVTK.cmake文件。在这个文件里我们发现就有变量VTK_USE_FILE的说明信息。

5、ADD_EXECUTABLE 定义这个工程会生成一个文件名为 <name> 的可执行文件。

6、TARGET_LINK_LIBRARIES 指定生成可执行文件时需要链接哪些文件。采用 ${VTK_LIBRARIES} 来获取需要的lib库名称。

④:在TestVTKInstall.cpp文件里插入以下代码:

#include "vtkRenderWindow.h"
#include "vtkSmartPointer.h"int main()
{//定义一个类型为vtkRenderWindow的对象vtkRenderWindow *renWin = vtkRenderWindow::New();//调用vtkRenderWindow里的方法显示并渲染VTK窗口renWin->Render();//使程序暂停下来,等待用户的输入std::cin.get();return 0;
}

⑤:打开cmake程序,在cmake的“Where is the source code”一栏输入路径:F:/VTK/Examples/TestVTKInstall,在“Where to build the binaries”一栏输入路径:F:/VTK/Examples/TestVTKInstall/bin,接着按“Configure”按钮。


        ⑥:点击Finish后,会出现如下错误提示窗口(原因:由于在编译生成的VTK的时候,修改了VTK_Install的默认路径)。


        ⑦:点击OK后,修改VTK_DIR


        ⑧:点击Configure。


        ⑨:点击Generate。


        ⑩:在TestVTKInstall点击右键,设置为启动项目。


        ⑪:点击运行,系统错误(找不到有关vtk相关的dll文件)。


        ⑫:解决方法:右键项目->属性->调试,将环境设置为如下路径,并保存。

PATH=F:\VTK\VTK_Install\bin;%PATH%


        ⑬:点击运行(发现并没有VTK效果图展示出来),如图所示:


        ⑭:解决方法:添加如下代码,运行,如图所示:

#include "vtkAutoInit.h"//VTK是用vtkRenderingOpenGL2构建的(用于显示VTK窗体)
VTK_MODULE_INIT(vtkRenderingOpenGL2);
//Warning: Link to vtkInteractionStyle for default style selection(警示)
VTK_MODULE_INIT(vtkInteractionStyle);

⑮:举例上述推荐博客中 03-VTK基础概念(1) 的代码,运行,如图所示:

/********************************************************************/
/*
运行的效果图可以使用鼠标与其进行交互
1、 用鼠标滚轮可以对柱体放大、缩小
2、 按下鼠标左键不放,然后移动鼠标,可以转动柱体
3、 按下鼠标左键,同时按下Shift键,移动鼠标,可以移动整个柱体
4、 按下Ctrl键时再按鼠标左键 只可旋转柱体……………………
*/
/********************************************************************/
#include "vtkSmartPointer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderer.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkInteractorStyleTrackballCamera.h"
#include "vtkCylinderSource.h"
#include "vtkPolyDataMapper.h"
#include "vtkActor.h"
#include "vtkBMPReader.h"
#include "vtkTexture.h"#include "vtkAutoInit.h"//VTK是用vtkRenderingOpenGL2构建的(用于显示VTK窗体)
VTK_MODULE_INIT(vtkRenderingOpenGL2);
//Warning: Link to vtkInteractionStyle for default style selection(警示)
VTK_MODULE_INIT(vtkInteractionStyle);int main()
{//读取图片数据vtkSmartPointer<vtkBMPReader> bmpReader = vtkSmartPointer<vtkBMPReader>::New();bmpReader->SetFileName("ganxie.bmp");//将读入的图片传入texturevtkSmartPointer<vtkTexture> texture = vtkSmartPointer<vtkTexture>::New();texture->SetInputConnection(bmpReader->GetOutputPort());texture->InterpolateOn();//vtkCylinderSource派生自vtkPolyDataAlgorithm//生成一个中心在渲染场景原点的柱体,柱体的长轴沿着Y轴,柱体的高度、截面半径等都可以任意指vtkSmartPointer<vtkCylinderSource> cylinder = vtkSmartPointer<vtkCylinderSource>::New();//设置柱体的高cylinder->SetHeight(3.0);//设置柱体截面的半径cylinder->SetRadius(1.0);//设置柱体横截面的等边多边形的边数cylinder->SetResolution(10);//vtkPolyDataMapper派生自类vtkMapper,将输入的数据转换为几何图元(点、线、多边形)进行渲染。vtkSmartPointer<vtkPolyDataMapper> cylinderMapper = vtkSmartPointer<vtkPolyDataMapper>::New();//VTK可视化管线的输入数据接口(功能暂时未知)cylinderMapper->SetInputConnection(cylinder->GetOutputPort());//vtkActor派生自vtkProp类,作用:渲染场景中数据的可视化表达(具体参考提供博客详解)vtkSmartPointer<vtkActor> cylinderActor = vtkSmartPointer<vtkActor>::New();//设置生成几何图元的Mapper。即连接一个Actor到可视化管线的末端(可视化管线的末端就是Mapper)。cylinderActor->SetMapper(cylinderMapper);cylinderActor->SetTexture(texture);//vtkRenderer派生自vtkViewport类,作用:负责管理场景的渲染过程。一个vtkRenderWindow中可以有多个vtkRenderer对象,而这些vtkRenderer可以渲染在窗口中不同的矩形区域中(即视口),或者覆盖整个窗口区域。vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();//添加vtkProp类型的对象到渲染场景中renderer->AddActor(cylinderActor);//用于设置渲染场景的背景颜色,用R、G、B的格式设置,三个分量的取值为0.0~ 1.0。(0.0,0.0, 0.0)为黑色,(1.0,1.0, 1.0)为白色。renderer->SetBackground(0.1, 0.2, 0.4);//vtkRenderWindow派生自vtkViewport类,作用:将操作系统与VTK渲染引擎连接到一起。vtkSmartPointer<vtkRenderWindow> renWin = vtkSmartPointer<vtkRenderWindow>::New();//加入vtkRenderer对象renWin->AddRenderer(renderer);//用于设置窗口的大小,以像素为单位renWin->SetSize(300, 300);//vtkRenderWindowInteractor派生自vtkObject类,作用:提供平台独立的响应鼠标、键盘和时钟事件的交互机制。vtkSmartPointer<vtkRenderWindowInteractor> iren = vtkSmartPointer<vtkRenderWindowInteractor>::New();//设置渲染窗口,消息是通过渲染窗口捕获到的,所以必须要给交互器对象设置渲染窗口。iren->SetRenderWindow(renWin);//vtkInteractorStyleTrackballCamera派生自vtkInteractorStyle类,交互器样式的一种,该样式下,用户是通过控制相机对物体作旋转、放大、缩小等操作。vtkSmartPointer<vtkInteractorStyleTrackballCamera> style = vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();//设置交互器样式iren->SetInteractorStyle(style);//初始化交互窗口iren->Initialize();//启动窗口事件循环iren->Start();return 0;
}

2、基于OpenCV编译下的VTK

由于没有找到具体的参考文献(渴求:如果谁有整系列的(前提是免费的)可以告诉我,我会整理出来给大家分享哦,感谢

VTK模块学习(一)相关推荐

  1. python 的日志logging模块学习

    2019独角兽企业重金招聘Python工程师标准>>> python 的日志logging模块学习 分类: python 2011-08-02 23:51 8338人阅读 评论(0) ...

  2. python中configparser_python中confIgparser模块学习

    python中configparser模块学习 ConfigParser模块在python中用来读取配置文件,配置文件的格式跟windows下的ini配置文件相似,可以包含一个或多个节(section ...

  3. python textwrap_python2.7.3编译python模块学习- textwrap 文本包装和填充

    python模块学习- textwrap 文本包装和填充 代码实例: sample_text = ''' The textwrap module can beused to format text f ...

  4. android fm模块学习,AndroidFM模块学习之5关闭FM流程

    AndroidFM模块学习之五关闭FM流程 前一阵子简单描述了一些关于FM开启.录音和搜索的流程,浅析了一下各个类的源码,接下来就是关闭FM了,FM模块的学习就告一段落了,希望这阵子的整理能对大家在F ...

  5. python中的glob 模块学习文件路径查找

    glob glob.glob(pathname), 返回所有匹配的文件路径列表.它只有一个参数pathname,定义了文件路径匹配规则,这里可以是绝对路径,也可以是相对路径. import glob ...

  6. pythontemp_python 临时文件夹 的 tempfile模块学习

    python的临时文件夹的tempfile模块学习 应用程序经常要保存一些临时的信息,这些信息不是特别重要,没有必要写在配置文件 里,但又不能没有,这时候就可以把这些信息写到临时文件里.其实很 多程序 ...

  7. python logging模块学习

    python 的日志logging模块学习 1.简单的将日志打印到屏幕 import logging logging.debug('This is debug message') logging.in ...

  8. Python模块学习 - 用tinify模块压缩和优化图片

    Python模块学习 - 用tinify模块压缩和优化图片 tinify模块 功能描述:TinyPNG和TinyJPG网站提供了压缩和优化.png和.jpg格式图片的功能.虽然可以很轻松地使用网页版进 ...

  9. nodejs的mysql模块_Nodejs的mysql模块学习(一)

    介绍 mysql npm包 是一个nodejs的模块,由JavaScript编写 安装 npm install mysql 建立连接 var mysql = require('mysql');//引用 ...

最新文章

  1. MySQL 5.6 手册 第三章 目录
  2. 阅读与html阅读的区别,w3c School读书笔记(一):HTML基础
  3. linux vim debugger,Vim 调试:termdebug 入门
  4. Magento搬家、换域名、重新安装教程
  5. 行政区村界线_市政府批复!崇川区部分行政区划调整
  6. docker mysql5.7.19_Docker19.03.13下安装Mysql57
  7. Google 字体在前端开发中的使用
  8. VMware Workstation v14.1.3 精简特别版本
  9. lua luarocks_通过Luarocks使Lua开发变得容易
  10. BZOJ3772精神污染——可持久化线段树+出栈入栈序
  11. Java实现Zip压缩包解压
  12. USB 为什么一般选择48MHz
  13. 雷军在北京大学的演讲
  14. Windows系统错误提示:缺少词库文件winabc.cwd缺少基础表文件winabc.ovl
  15. mysql索引linke和等于_10分钟让你明白MySQL是如何利用索引的
  16. 计算机组成原理指令系统的设计,计算机组成原理与系统设计
  17. 新零售全能商城多商户拼团砍价秒杀周期购分销论坛投票收银台点餐外卖小程序公众号
  18. 普冉PY32系列(三) PY32F002A 资源实测 - 这个型号不简单
  19. Ubuntu卸载python(慎重)
  20. Stone的宝剑 个人赛1C

热门文章

  1. python独立图形_在networkx中查找图形对象中的独立图形
  2. 【script】python3中的docx、win32com和openpyxl模块
  3. 世界人口钟实时数据_全球人口将达80亿 2019年世界人口总数统计数据
  4. oracle打开文件模式无效,oracle expdp导入时 提示“ORA-39002: 操作无效 ORA-39070: 无法打开日志文件 ”...
  5. python把数字逐一存入列表_python实现将range()函数生成的数字存储在一个列表中...
  6. 大学 C语言程序设计第一讲,c语言程序设计1第一讲(第一章上).ppt
  7. java joda 获取utc时间_java – JodaTime – 如何获取UTC的当前时间
  8. 迁移桌面程序到MS Store(8)——通过APPX下载Win32Component
  9. 漫谈ElasticSearch关于ES性能调优几件必须知道的事(转)
  10. 题解 POJ 2559-SP1805 【HISTOGRA - Largest Rectangle in a Histogram】