当前位置: 代码迷 >> 综合 >> vs2010+cmake3.2.1+VTK搭建(内附四种VTK版本)
  详细解决方案

vs2010+cmake3.2.1+VTK搭建(内附四种VTK版本)

热度:96   发布时间:2023-11-25 07:11:23.0

在我自己搭建这个环境的时候发现了很多问题,其中一个就是VTK版本问题,大部分教程都是VTK5,而现在很少能找到这个版本的安装包,所以我想把我自己遇到的一些问题和大家分享一下,因为是第一次写博客,不知道如何把文件加进来,所以需要的朋友可以直接在下面评论,我看到了一定会回复给你发过去,我有的安装包列表如下:
cmake3.2.1;
VTK5.10.1;
VTK6.0.0;
VTK6.3.0;
VTK7.1.1

一.cmake的安装
这个点进去后直接next就行,注意最后选一下在桌面创建图标就行

二.VTK的安装
先说一下总体步骤,各个版本有区别的地方我会单独指出来,这里用VTK6.0.0为例

步骤一:     
我首先在E盘创建了VTK文件夹,将vtk-6.0.0.zip 和vtkdata-6.0.0.zip在VTK文件夹内解压,得到E:\VTK\VTK6.0.0和 E:\VTK\VTKData 6.0.0,在VTK目录下创建VTK_bin,即 E:\VTK\VTK_bin。

       打开cmake,将where is the source code的路径设置为原始资源的路径,我的是E:\VTK\VTK6.0.0;将where tobuild the binaries的路径设置为目标存放路径,我的是:E:\VTK\VTK_bin

点击configure,进度条走完后会出现一片红色的结果,点击Advanced”,勾选:
(1) BUILD_SHARED_LIBS(ITK 生成的库文件编译成 DLL 动态链接库形式)
(2)更改CMAKE_INSTALL_PREFIX目录: E:\VTK。(安装完成后,该文件夹下会出现include、lib、bin等文件夹)
(3)更改vtk_data_root目录: E:\VTK\VTKData6.0.0(告诉cmake,vtk需要的数据都在哪里)
(4)vtk_use_guisupport,这个我要好好提一下,一般网上教程都有这个,我试了好久才发现,VTK5版本的才有,这是支持mfc混合编程的,我试了好几个版本,发现从VTK6.0.0后就没有这个啦,所以如果你选择低版本的,就勾选这个,config完之后会出现一个新的选项vtk_use_mfc,把它也设置为on就行了,因为在cmake中,有些选项是依赖于另一些选项的,比如vtk_use_guisupport和vtk_use_mfc,当我们禁用vtk_use_guisupport,vtk_use_mfc是看不到的。如果你选择的是高版本的,为了保险起见,勾选一下那个什么module_guisupport_mfc就行
(5)vtk_use_parallel: 对于想用vtk做并行计算的朋友,要把这个选上,对于只想学学vtk的,保持默认off
   
  不要勾选:BUILD TESTING 和BUILD EXAMPLES是为了测试用的,一般不勾选,勾选的后果就是,下一步配置需要1个多小时。其他的可以保持默认值

  再按一次configure,直至都变成灰色,表示配置成功, 点击 Generate确认。

步骤二:编译VTK.sln

打开E:\VTK\VTK_bin里面的VTK.sln文件,点击:生成->生成解决方案。
下面继续介绍不同版本之间的差异
选择一:高版本
直接 生成,如果没有错误,在解决方案里面找到Install文件,选中点击右键->仅用于项目->仅生成INSTALL。如果编译过程中有错误,应该删除E:\VTK\VTK_bin里面的文件,重新安装。
完成后会在 E:\VTK 目录生成 lib、include、bin 等文件夹

编译完成

选择二:低版本(VTK5.10.1)

这部分参考了https://blog.csdn.net/fjsd155/article/details/52779420
编译时可能会出现错误:atlcore.h(35): fatalerror C1189: #error :  This file requires_WIN32_WINNT to be #defined at least to 0x0403. Value 0x0501 or higher is recommended。这个时候,需要修改如下:

找到vtkMFCwindow.cpp,将前面的宏定义修改为:

  #ifndef WINVER

  #define WINVER0x0501//你可改为更高版本

  #endif

#ifndef _WIN32_WINNT

#define _WIN32_WINNT 0x0501 // 这是我改的

#endif

直接 生成,如果没有错误,在解决方案里面找到Install文件,选中点击右键->仅用于项目->仅生成INSTALL。如果编译过程中有错误,应该删除E:\VTK\VTK_bin里面的文件,重新安装。
完成后会在 E:\VTK 目录生成 lib、include、bin 等文件夹

编译完成

步骤三:修改环境变量,修改编译器链接

环境变量设置:我的电脑->属性->高级->环境变量->添加:E:\VTK\VTK_bin

将E:\VTK\bin中的.dll文件拷贝到C:\WINDOWS\system32中(注意:64位系统的为了保险起见,可能还需同时拷贝到C:\WINDOWS\sysWOW64中)。

找一个测试用例,新建一个cpp源代码文件,将以下代码拷入:

   

#include "stdafx.h"

#include "stdafx.h"

#include "vtkConeSource.h"
#include "vtkPolyDataMapper.h"
#include "vtkRenderWindow.h"
#include "vtkCamera.h"
#include "vtkActor.h"
#include "vtkRenderer.h"
#include "vtkProperty.h"
#include "windows.h"

int _tmain(int argc, _TCHAR* argv[])
{

 vtkConeSource *cone = vtkConeSource::New();
 cone->SetHeight( 3.0 );
 cone->SetRadius( 1.0 );
 cone->SetResolution( 10 );

 vtkPolyDataMapper *coneMapper = vtkPolyDataMapper::New();
 coneMapper->SetInputConnection( cone->GetOutputPort() );
 vtkActor *coneActor = vtkActor::New();
 coneActor->SetMapper( coneMapper );
 vtkRenderer *ren1= vtkRenderer::New();
 ren1->AddActor( coneActor );
 ren1->SetBackground( 0.1, 0.2, 0.4 );     
 vtkRenderWindow *renWin = vtkRenderWindow::New();
 renWin->AddRenderer( ren1 );
 renWin->SetSize( 300, 300 );
 for (int i = 0; i < 360; ++i)  
 {
  renWin->Render();
  ren1->GetActiveCamera()->Azimuth( i );
  Sleep(200);
 }        
 cone->Delete(); 
 coneMapper->Delete(); 
 coneActor->Delete();
 ren1->Delete();
 renWin->Delete();
 return 0;
}

#include "vtkConeSource.h"
#include "vtkPolyDataMapper.h"
#include "vtkRenderWindow.h"
#include "vtkCamera.h"
#include "vtkActor.h"
#include "vtkRenderer.h"
#include "vtkProperty.h"
#include "windows.h"

int _tmain(int argc, _TCHAR* argv[])
{

 vtkConeSource *cone = vtkConeSource::New();
 cone->SetHeight( 3.0 );
 cone->SetRadius( 1.0 );
 cone->SetResolution( 10 );

 vtkPolyDataMapper *coneMapper = vtkPolyDataMapper::New();
 coneMapper->SetInputConnection( cone->GetOutputPort() );
 vtkActor *coneActor = vtkActor::New();
 coneActor->SetMapper( coneMapper );
 vtkRenderer *ren1= vtkRenderer::New();
 ren1->AddActor( coneActor );
 ren1->SetBackground( 0.1, 0.2, 0.4 );     
 vtkRenderWindow *renWin = vtkRenderWindow::New();
 renWin->AddRenderer( ren1 );
 renWin->SetSize( 300, 300 );
 for (int i = 0; i < 360; ++i)  
 {
  renWin->Render();
  ren1->GetActiveCamera()->Azimuth( i );
  Sleep(200);
 }        
 cone->Delete(); 
 coneMapper->Delete(); 
 coneActor->Delete();
 ren1->Delete();
 renWin->Delete();
 return 0;
}

打开属性面板property manager(view-other windows- property manager),点击Debug|Win32里的Microsoft.Cpp.Win32.user,修改include、lib目录,以及链接器的输入值。具体方法如下:点击VC++Directories,找到General里的Include Directories,添加链接E:\ VTK\include:\vtk-6.0.0,点击Library Directories,添加链接E:\VTK\lib\vtk-6.0.0,找到linker里的input,在第一行的Additional Dependencies里添加所有你在E:\VTK:\lib里的库,举例我的VTK6.0.0添加的就是:
kernel32.lib
user32.lib
gdi32.lib
winspool.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib
comdlg32.lib
advapi32.lib
E:\VTKITK\VTK\lib\vtkalglib-6.0.lib
ws2_32.lib
E:\VTKITK\VTK\lib\vtkChartsCore-6.0.lib
E:\VTKITK\VTK\lib\vtkCommonColor-6.0.lib
E:\VTKITK\VTK\lib\vtkCommonComputationalGeometry-6.0.lib
E:\VTKITK\VTK\lib\vtkCommonCore-6.0.lib
E:\VTKITK\VTK\lib\vtkCommonDataModel-6.0.lib
E:\VTKITK\VTK\lib\vtkCommonExecutionModel-6.0.lib
E:\VTKITK\VTK\lib\vtkCommonMath-6.0.lib
E:\VTKITK\VTK\lib\vtkCommonMisc-6.0.lib
E:\VTKITK\VTK\lib\vtkCommonSystem-6.0.lib
E:\VTKITK\VTK\lib\vtkCommonTransforms-6.0.lib
E:\VTKITK\VTK\lib\vtkDICOMParser-6.0.lib
E:\VTKITK\VTK\lib\vtkDomainsChemistry-6.0.lib
E:\VTKITK\VTK\lib\vtkexpat-6.0.lib
E:\VTKITK\VTK\lib\vtkFiltersAMR-6.0.lib
E:\VTKITK\VTK\lib\vtkFiltersCore-6.0.lib
E:\VTKITK\VTK\lib\vtkFiltersExtraction-6.0.lib
E:\VTKITK\VTK\lib\vtkFiltersFlowPaths-6.0.lib
E:\VTKITK\VTK\lib\vtkFiltersGeneral-6.0.lib
E:\VTKITK\VTK\lib\vtkFiltersGeneric-6.0.lib
E:\VTKITK\VTK\lib\vtkFiltersGeometry-6.0.lib
E:\VTKITK\VTK\lib\vtkFiltersHybrid-6.0.lib
E:\VTKITK\VTK\lib\vtkFiltersHyperTree-6.0.lib
E:\VTKITK\VTK\lib\vtkFiltersImaging-6.0.lib
E:\VTKITK\VTK\lib\vtkFiltersModeling-6.0.lib
E:\VTKITK\VTK\lib\vtkFiltersParallel-6.0.lib
E:\VTKITK\VTK\lib\vtkFiltersParallelImaging-6.0.lib
E:\VTKITK\VTK\lib\vtkFiltersProgrammable-6.0.lib
E:\VTKITK\VTK\lib\vtkFiltersSelection-6.0.lib
E:\VTKITK\VTK\lib\vtkFiltersSources-6.0.lib
E:\VTKITK\VTK\lib\vtkFiltersStatistics-6.0.lib
E:\VTKITK\VTK\lib\vtkFiltersTexture-6.0.lib
E:\VTKITK\VTK\lib\vtkFiltersVerdict-6.0.lib
E:\VTKITK\VTK\lib\vtkfreetype-6.0.lib
E:\VTKITK\VTK\lib\vtkftgl-6.0.lib
E:\VTKITK\VTK\lib\vtkGeovisCore-6.0.lib
E:\VTKITK\VTK\lib\vtkgl2ps-6.0.lib
E:\VTKITK\VTK\lib\vtkhdf5_hl-6.0.lib
E:\VTKITK\VTK\lib\vtkGUISupportMFC-6.0.lib
E:\VTKITK\VTK\lib\vtkhdf5-6.0.lib
E:\VTKITK\VTK\lib\vtkImagingColor-6.0.lib
E:\VTKITK\VTK\lib\vtkImagingCore-6.0.lib
E:\VTKITK\VTK\lib\vtkImagingFourier-6.0.lib
E:\VTKITK\VTK\lib\vtkImagingGeneral-6.0.lib
E:\VTKITK\VTK\lib\vtkImagingHybrid-6.0.lib
E:\VTKITK\VTK\lib\vtkImagingMath-6.0.lib
E:\VTKITK\VTK\lib\vtkImagingMorphological-6.0.lib
E:\VTKITK\VTK\lib\vtkImagingSources-6.0.lib
E:\VTKITK\VTK\lib\vtkImagingStatistics-6.0.lib
E:\VTKITK\VTK\lib\vtkImagingStencil-6.0.lib
E:\VTKITK\VTK\lib\vtkInfovisCore-6.0.lib
E:\VTKITK\VTK\lib\vtkInfovisLayout-6.0.lib
E:\VTKITK\VTK\lib\vtkInteractionImage-6.0.lib
E:\VTKITK\VTK\lib\vtkInteractionStyle-6.0.lib
E:\VTKITK\VTK\lib\vtkInteractionWidgets-6.0.lib
E:\VTKITK\VTK\lib\vtkIOAMR-6.0.lib
E:\VTKITK\VTK\lib\vtkIOCore-6.0.lib
E:\VTKITK\VTK\lib\vtkIOEnSight-6.0.lib
E:\VTKITK\VTK\lib\vtkIOExodus-6.0.lib
E:\VTKITK\VTK\lib\vtkIOExport-6.0.lib
E:\VTKITK\VTK\lib\vtkIOGeometry-6.0.lib
E:\VTKITK\VTK\lib\vtkIOImage-6.0.lib
E:\VTKITK\VTK\lib\vtkIOImport-6.0.lib
E:\VTKITK\VTK\lib\vtkIOInfovis-6.0.lib
E:\VTKITK\VTK\lib\vtkIOLegacy-6.0.lib
E:\VTKITK\VTK\lib\vtkIOLSDyna-6.0.lib
E:\VTKITK\VTK\lib\vtkIOMovie-6.0.lib
E:\VTKITK\VTK\lib\vtkIONetCDF-6.0.lib
E:\VTKITK\VTK\lib\vtkIOParallel-6.0.lib
E:\VTKITK\VTK\lib\vtkIOPLY-6.0.lib
E:\VTKITK\VTK\lib\vtkIOSQL-6.0.lib
E:\VTKITK\VTK\lib\vtkIOXML-6.0.lib
E:\VTKITK\VTK\lib\vtkIOXMLParser-6.0.lib
E:\VTKITK\VTK\lib\vtkjpeg-6.0.lib
E:\VTKITK\VTK\lib\vtkjsoncpp-6.0.lib
E:\VTKITK\VTK\lib\vtklibxml2-6.0.lib
E:\VTKITK\VTK\lib\vtkLocalExample-6.0.lib
E:\VTKITK\VTK\lib\vtkmetaio-6.0.lib
E:\VTKITK\VTK\lib\vtkNetCDF_cxx-6.0.lib
E:\VTKITK\VTK\lib\vtkNetCDF-6.0.lib
E:\VTKITK\VTK\lib\vtkoggtheora-6.0.lib
E:\VTKITK\VTK\lib\vtkParallelCore-6.0.lib
E:\VTKITK\VTK\lib\vtkpng-6.0.lib
E:\VTKITK\VTK\lib\vtkproj4-6.0.lib
E:\VTKITK\VTK\lib\vtkRenderingAnnotation-6.0.lib
E:\VTKITK\VTK\lib\vtkRenderingContext2D-6.0.lib
E:\VTKITK\VTK\lib\vtkRenderingCore-6.0.lib
E:\VTKITK\VTK\lib\vtkRenderingFreeType-6.0.lib
E:\VTKITK\VTK\lib\vtkRenderingFreeTypeOpenGL-6.0.lib
E:\VTKITK\VTK\lib\vtkRenderingGL2PS-6.0.lib
E:\VTKITK\VTK\lib\vtkRenderingHybridOpenGL-6.0.lib
E:\VTKITK\VTK\lib\vtkRenderingImage-6.0.lib
E:\VTKITK\VTK\lib\vtkRenderingLabel-6.0.lib
E:\VTKITK\VTK\lib\vtkRenderingLOD-6.0.lib
E:\VTKITK\VTK\lib\vtkRenderingOpenGL-6.0.lib
E:\VTKITK\VTK\lib\vtkRenderingVolume-6.0.lib
E:\VTKITK\VTK\lib\vtkRenderingVolumeAMR-6.0.lib
E:\VTKITK\VTK\lib\vtkRenderingVolumeOpenGL-6.0.lib
E:\VTKITK\VTK\lib\vtksqlite-6.0.lib
E:\VTKITK\VTK\lib\vtksys-6.0.lib
E:\VTKITK\VTK\lib\vtkTestingGenericBridge-6.0.lib
E:\VTKITK\VTK\lib\vtkTestingIOSQL-6.0.lib
E:\VTKITK\VTK\lib\vtkTestingRendering-6.0.lib
E:\VTKITK\VTK\lib\vtktiff-6.0.lib
E:\VTKITK\VTK\lib\vtkverdict-6.0.lib
E:\VTKITK\VTK\lib\vtkViewsContext2D-6.0.lib
E:\VTKITK\VTK\lib\vtkViewsCore-6.0.lib
E:\VTKITK\VTK\lib\vtkViewsGeovis-6.0.lib
E:\VTKITK\VTK\lib\vtkViewsInfovis-6.0.lib
E:\VTKITK\VTK\lib\vtkzlib-6.0.lib

结束啦!祝你成功

  相关解决方案