【转】VTK + QT + VS 编译安装配置

VTK

Vtk,(visualization toolkit)是一个开源的免费软件系统,主要用于三维计算机图形学、图像处理和可视化。Vtk是在面向对象原理的基础上设计和实现的,它的内核是用C++构建的,包含有大约250,000行代码,2000多个类,还包含有几个转换界面,因此也可以自由的通过Java,Tcl/Tk和Python各种语言使用vtk。通过VTK将科学实验数据如建筑学、气象学、医学、生物学或者航空航天学,对体、面、光源等等的逼真渲染,从而帮助人们理解那些采取错综复杂而又往往规模庞大的数字呈现形式的科学概念或结果。

目的

本文目的是构建VTK+QT+VS的应用程序开发环境。

QT版本:5.7.0

VTK版本:7.1.1

VS版本:2013(VC12)

前置条件:Cmake在你的环境里已经安装好,QT5.7.0和VS2013已经安装配置好,安装配置很简单,如果配置有问题可以参考http://blog.csdn.net/goodtomsheng/article/details/45719205

VTK编译安装

1.   下载VTK7.1.1http://www.vtk.org/download/,目前官网上最新版本是VTK8.0.1,保守起见我选择了VTK7.1.1版本,下载的文件VTK-7.1.1.zip、VTKData-7.1.1.zip。

2.   创建一个叫vtk的目录(名字随便起),将CTK-7.1.1.zip、VTKData-7.1.1.zip解压压到vtk目录下,并创建一个vtk_bin_x64的目录存放CMake后面生成的vtk工程,解压之后目录结构如图。

 

 

 

3. 打开CMake-gui,Where is thesource code处选择VTK-7.1.1目录,Where to build the binaries处选择上面创建的vtk_bin_x64。点击Configure,在弹出的对话框中选择Visual Studio12 2013,点Finish。等Configue配置完成之后,有几个宏需要配置:

BUILD_SHARED_LIBS – 指示编译共享库还是静态库,默认是编译选上的状态,我们要编译共享库,所以保持默认状态;

BUILD_EXAMPLES – 指示编译示例工程,这里选上,方便学习使用。

CMAKE_INSTALL_PREFIX – VTK完成编译完成之后,安装目录,bin、lib、include等文件会被拷贝到它指定的目录下,x64编译默认安装目录是“C:/ProgramFiles /VTK”,但是VTK7.1.1貌似设置这个项不起作用,真正起作用的是设置这几个宏:INSTALL_BIN_DIR、INSTALL_INC_DIR、INSTALL_LIB_DIR、INSTALL_MAN_DIR、INSTALL_PKGCONFIG_DIR。我这里就按默认路径安装,如果你不是管理员账号,这里安装到默认目录下因为权限问题会失败。

VTK_Group_Qt – QT支持,默认不支持,我们要支持QT集成开发,所以勾选上这一项。同样为了支持QT将宏Module_vtkGUISupportQt、Module_vtkGUISupportQtOpenGL也勾选上。

VTK_QT_VERSION – QT版本,我使用的QT5所以设置为5,这个选项在Configure之后是没有的,没关系,等后面点击Generate之后会报告Qt版本失败,这时候就可以找到这个选项并设置之后重新Generate就没问题了。

VTK_DATA_STORE – Vtk数据存储位置,就是之前从VTK官网下下来的VTKData-7.1.1.zip,指定到解压的目录下两层,我这里是“E:\OpenSource\vtk\VTKData-7.1.1\VTK-7.1.1\.ExternalData”。

Module_vtkGUISupportMFC – 指定产生和MFC框架集成的库,我这里用不着,所以不勾选。

点击Add Entry,添加CacheEntry,CMAKE_PREFIX_PATH,Value设置为你的QT安装目录,我这里是“D:\Qt\Qt5.7.0\5.7\msvc2013_64”。

上面这些选项设置完成之后点击Generate,这里会因为Qt的版本问题失败一次,正确设置VTK_QT_VERSION之后重新生成就没问题了。CMake工作完成之后的界面如下图,这里CMake的工作也就结束了。

 

 

 

 

4.      等Generate完成之后点击OpenProject打开配置好的VS2013工程。点击菜单生成 ->批生成 ,选择ALL_BUILD生成Debug版本和Release版本。生成完成之后点击彩当生成->批生成,选择INSTALL生成 Debug,这会将Debug版本的lib、bin、inlcude等都拷贝到前面设置的“C:/Program Files /VTK”目录下。

5.      和Qt Designer结合,将Release版本生成的bin路径(的路径是E:\OpenSource\vtk\vtk_bin_x64\bin\Release)下的QVTKWidgetPlugin.dll和lib路径下的QVTKWidgetPlugin.lib、QVTKWidgetPlugin.exp拷贝到QT安装路径下的plugins\designer下(我的路径是D:\Qt\Qt5.7.0\5.7\msvc2013_64\plugins\designer),这里不要用Debug版本编译产生的文件,Qt Designer会读不出来。设置好之后再打开QtDesigner会看到QVTKWidget,如下图所示。

 

 

 

 

6.      VS工程配置(vtk官方文档都是建议用CMake来管理工程,这里会介绍到不用CMake管理有些特别注意的地方)

a)  新创建一个VS工程(可以是QT工程也可以是普通C++工程)

b)  配置Debug-平台X64,设置头文件路径,和普通C++工程一样,我这里的路径是“C:\Program Files\VTK\include\vtk-7.1”,在连接器里设置库路径,我这里是“C:\Program Files\VTK\lib”。连接器里添加输入库,要添加的项比较多,这里一个好的方法是打开Examples下的一个工程,将它的工程配置里输入库直接拷贝过来。

c)  这时候如果你把示例程序Cone的代码拷贝到当前工程下(Cone代码在下面给出),编译什么都通过了,运行的时候发现程序不能正常运行或者说是运行之后会直接挂掉,调试跟进之后发现vtkPolyDataMapper::New()返回的始终为NULL,而同样代码的Examples下的实例工程Cone就能正常运行和显示效果。分析Cone工程,发现它多了一些预处理指令,而这其中起关键作用的一个预处理指令就是:

vtkRenderingCore_INCLUDE="E:/OpenSource/vtk/vtk_bin_x64/CMakeFiles/vtkRenderingCore_AUTOINIT_vtkInteractionStyle_vtkRenderingOpenGL2.h"。

解决思路1:我们同样添加这个预处理指令,可以把vtkRenderingCore_AUTOINIT_vtkInteractionStyle_vtkRenderingOpenGL2.h拷贝到vtk的indluce目录下,再在自己的VS工程中添加预处理指令:

vtkRenderingCore_INCLUDE="vtkRenderingCore_AUTOINIT_vtkInteractionStyle_vtkRenderingOpenGL2.h"

解决思路2:看看这个预处理指令做了什么,打开.h文件发现它只定义了一条宏:

#define vtkRenderingCore_AUTOINIT2(vtkInteractionStyle,vtkRenderingOpenGL2),其实就是初始化VTK模块,按照官方说明,可以在所有包含文件之前定义这个宏:

#define vtkRenderingCore_AUTOINIT2(vtkInteractionStyle,vtkRenderingOpenGL2),这样也能解决问题。另外还可以,像下面这样,在代码最开始,所有头文件包含之前。

#include "vtkAutoInit.h"

VTK_MODULE_INIT(vtkRenderingOpenGL2);// VTK was built withvtkRenderingOpenGL2

VTK_MODULE_INIT(vtkInteractionStyle);

用上面的任何一种方法均能解决问题。更详细的解释可以参考http://www.vtk.org/Wiki/VTK/VTK_6_Migration/Factories_now_require_defines。Cone工程运行的结果如下,图中圆锥体旋转几秒钟之后窗口自动关闭。

编译好的库地址:https://pan.baidu.com/s/1pLMChzP wfd6

 

 

 

#include "vtkConeSource.h"
#include "vtkPolyDataMapper.h"
#include "vtkRenderWindow.h"
#include "vtkCamera.h"
#include "vtkActor.h"
#include "vtkRenderer.h"
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 );ren1->SetBackground( 0.1, 0.2, 0.4 );// Finally we create the render window which will show up on the screen.// We put our renderer into the render window using AddRenderer. We also// set the size to be 300 pixels by 300.vtkRenderWindow *renWin = vtkRenderWindow::New();renWin->AddRenderer( ren1 );renWin->SetSize( 300, 300 );// Now we loop over 360 degrees and render the cone each time.int i;for (i = 0; i < 360; ++i){// render the imagerenWin->Render();// rotate the active camera by one degreeren1->GetActiveCamera()->Azimuth( 1 );}//// Free up any objects we created. All instances in VTK are deleted by// using the Delete() method.//cone->Delete();coneMapper->Delete();coneActor->Delete();ren1->Delete();renWin->Delete();return 0;
}

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

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

相关文章

用Linq转换数据

Linq的好处不用多说。由于它能Linq TO XXX&#xff0c;所以用它进行XXX数据类型之间的转换也是非常惬意的事情。 转载于:https://www.cnblogs.com/think/archive/2007/10/26/Linq1.html

【转】我的CV之路第一篇:ITK是啥?

Itk篇 &#xff08;Insight Segmentation and Registration Toolkit&#xff09;ITK Itk篇前言一、ITK是什么&#xff1f;二、一些函数 1.读/写图片2.滤波器 前言 学习医疗图像分割过程中&#xff0c;遇到了很多困难&#xff0c;英文文献&#xff0c;数学基础&#xff0c;图像…

【转】二、VTK用于QT的安装

一、说明 本文的主要目的是在说明通过Cmake重新编译VTK,使得其能够与QT交互使用 二、VTK的安装 VTK版本&#xff1a;8.2.0 VS版本2019 电脑&#xff1a;win-64bit 需要软件&#xff1a;CMake(我使用的版本是3.16.0) 三、过程 大概过程分为以下几个步骤&#xff1a; 1、下载vt…

【转】一、用于VS2019的QT配置

转自&#xff1a;https://www.cnblogs.com/fantianliang/p/12355973.html 一、前言 本期间的主要目的是最后能够使用VS开发关于QT为界面的程序&#xff0c;同时能够使用VTK和ITK程序&#xff0c;这是第一部分。 因为之前查看的有关博客随着时间没有跟随版本变化&#xff0c;所…

IIS 7.0探索用于 Windows Vista 的 Web 服务器和更多内容

我经常听到 Microsoft 内部和外部的人将新的 IIS 7.0 Web 服务器称为 Microsoft 在过去几年中所进行的最重要的开发工作之一。考虑到 Microsoft 最近推出了一系列引人注意的技术&#xff0c;包括 Windows Vista™&#xff0c;这个评语具有重要意义&#xff01; IIS 7.0 的发布时…

【转】三、QT例子-打开一个图片并且显示

一、前言 本博客的主要目的在于对QT有进一步的了解&#xff0c;单纯只使用QT。 今天小例子主要是打开图片&#xff0c;然后显示出来&#xff0c;并且显示图片的路径。 二、工程建立 1、参考前面 博客一QT安装过程里面的例子&#xff0c; 建立一个QT GUI Application 2、打开.u…

【转】四、关于如何使用软件库的一个技巧-避免重复配置属性表

一、前言 我们需要使用各种函数库&#xff0c;比如Opencv,Itk, vtk,当不同的函数库使用的时候&#xff0c;在VS配置属性是一个很麻烦的问题&#xff0c;并且设计到不同函数库的交叉使用&#xff0c;所以这里提供一个小技巧。 那就是我们把每一个函数库的配置为属性表的形式&…

Ajax Extensions核心控件介绍

摘自:http://www.cnblogs.com/remember515/archive/2007/06/28/799030.html Ajax的核心组件包括ScriptManager、ScriptManagerProxy、UpdatePanel、Timer、UpdateProgress&#xff0c;其相关属性如下&#xff1a;updatePanel控件UpdatePanel主要属性 UpdateMode 内容模板的更…

【转】五、VTK读取图片,然后QT显示

一、前言 今天实现的主要功能是通过vtk读取jpg图片(只能够读取.jpg文件)&#xff0c;然后通过QT显示出来,整个程序的框架是QT GUIApplication 版本&#xff1a; VS2019VTK8.2.0QT5.13.1版本配置 VS 为release x64&#xff08;这个是工程建立的时候设置的解决方案属性&#xff…

用java查询excel表格_如何把java查询出的内容导入到excel表格

展开全部java查询出的内容导入到excel表格/**导出数据为XLS格式* param fos* param bo*/public void writeExcelBo(FileOutputStream fos, java.util.Vector ve){jxl.write.WritableWorkbook wwb;try{wwb Workbook.createWorkbook(fos);jxl.write.WritableSheet ws wwb.createS…

【转】C#开发奇技淫巧三:把dll放在不同的目录让你的程序更整洁

转自&#xff1a;https://www.cnblogs.com/marvin/p/PutDllToSpecificFolder.html?utm_sourcetuicool&utm_mediumreferral 系列文章 C#开发奇技淫巧一&#xff1a;调试windows系统服务C#开发奇技淫巧二&#xff1a;根据dll文件加载C或者Delphi插件C#开发奇技淫巧三&#…

【转】C#开发奇技淫巧二:根据dll文件加载C++或者Delphi插件

这两天忙着把框架改为支持加载C和Delphi的插件&#xff0c;来不及更新blog了。 原来的写的框架只支持c#插件&#xff0c;这个好做&#xff0c;直接用c#的反射功能便可。但是公司不是所有人都搞C#&#xff0c;也不是所有的程序C#都能很好的完成&#xff0c;又或者其他公司…

【转】一篇易懂的CAN通讯协议指南1

转自&#xff1a;https://zhuanlan.zhihu.com/p/162708070 本文力求以图文并茂来接好CAN通讯协议的基础知识&#xff0c;希望能给有兴趣的朋友带来一些收获。 为了便于大家理解与接受&#xff0c;请先看一幅图&#xff1a; 图1 电话会议 简单地讲CAN总线就如上图1中两根粗黄线…

【转】CAN协议深度解析-简单易懂协议详解

转自&#xff1a;https://zhuanlan.zhihu.com/p/343607068 CAN接口兼容规范2.0A和2.0B(主动)&#xff0c;位速率高达1兆位/秒。它可以接收和发送11位标识符的标准帧&#xff0c;也可以接收和发送29位标识符的扩展帧。 扩展帧的仲裁域有29位&#xff0c;可以出现2^29中报文&…

深度神经网络下的风格迁移模型(C#)

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 这个是C#版本的&#xff0c;这里就只放出代码。VB.Net版本请参看 深度神经网络下的风格迁移模型-CSDN博客 斯坦福大学李飞飞团队的…

使用 Visual Studio 2005 Team System 进行单元测试并生成用于 Unit Test Framework 的源代码...

PS&#xff1a;微软专家写的一往篇VSTS2005测试功能说明&#xff0c;非常详细。适合初学者查看。适用于&#xff1a;Microsoft Visual Studio 2005 Team System Beta 2Team Architect & Team Test EditionsMicrosoft Visual C# 2005摘要&#xff1a; Scott 详细介绍自动化单…

【转】C++ win32窗口创建详解

转自&#xff1a;https://my.oschina.net/u/4328928/blog/3315324 本篇所讲解的内容仅限于 Windows 操作系统且限于 win32程序设计 现在我们在Windows系统上用的软件, 早已不是控制台界面, 而是窗体应用程序 窗体与控制台的区别就是: 有了窗口的概念 由于C的语法复杂, 使得…

2.3 Factory Method(工厂方法)

【返回目录】 我们现在把场景从险象丛生的特工战切换到更为壮观的二战中来&#xff0c;很多人都看过《拯救大兵瑞恩》&#xff0c;这部电影最著名的两场战斗非首和尾莫属&#xff0c;我们就用最后一场战役来举例说明什么是工厂方法吧。 相比诺曼底登陆&#xff0c;最后一场战役…

[转] UML中关联、依赖、聚集等关系的异同

1. 关联&#xff1a;连接模型元素及链接实例&#xff0c;用一条实线来表示&#xff1b;2. 依赖&#xff1a;表示一个元素以某种方式依赖于另一个元素&#xff0c;用一条虚线加箭头来表示&#xff1b;3. 聚集&#xff1a;表示整体与部分的关系&#xff0c;用一条实线加空心菱…

不同职业的面试着装技巧。

美女姜培琳&#xff1a;传授独家心经 不同职业的面试着装技巧。 一般来说&#xff0c;职场中精英女性的装扮&#xff0c;首要应讲求端庄、稳重。人们对服饰过于花哨怪异者的工作能力、工作作风、敬业精神、生活态度等&#xff0c;都会持怀疑的态度。 其实&#x…