VS下VTK工程的配置

Vtk,(visualization toolkit)是一个开源的免费软件系统,主要用于三维计算机图形学、图像处理和可视化。Vtk是在面向对象原理的基础上设计和实现的,它的内核是用C++构建的,包含有大约250,000行代码,2000多个类,还包含有几个转换界面,因此也可以自由的通过Java,Tcl/Tk和Python各种语言使用vtk。

下面介绍VTK工程的配置:

配置VTK工程,打开调试->属性->VC++目录,设置:

包含目录:D:\Program Files (x86)\VTK_ITK\VTK\include\vtk-8.0

库目录:D:\Program Files (x86)\VTK_ITK\VTK\lib\vtk-8.0

接下来开始设置环境变量:我的电脑->属性->高级系统设置->环境变量

在PATH后添加VTKbin的路径和CMakebin的路径:D:\Program Setup\VTK2008\bin,D:\ProgramSetup\CMake2.8\bin非win10系统要注意每一个路径间使用分号隔开。

将编译生成的.dll文件复制到C:\WINDOWS\system32中

注意,如果没有设置包含目录、库目录、系统环境变量的话,运行程序时会显示找不到头文件或找不到.lib文件,不复制.dll文件的话,即使编译成功也会弹出找不到vtkIO.dll或vtkCommon.dll等错误

添加依赖项:

2、 配置lib库目录

1、 添加依赖项

把项目中需要VTK模块可能用到的lib添加到:“附加依赖项”

这里存在一个技巧,由于VTK的.lib文件太多,一个个手动输入太慢,我们启动命令行CMD,并进入到D:\Program Files (x86)\VTK_ITK\VTK\lib目录下,输入dir *.lib /w 命令,就可以查看所有的lib文件,进一步,我们把结果保存到一个文本文件中,输入dir *.lib /w > D:\Program Files (x86)\VTK_ITK\VTK \vtk-libs.txt命令就可以了,之后打开这个文本文件,把lib文件的名称复制一下,

将.lib文件名都复制去依赖项中即可

vtkalglib-8.0.lib

vtkChartsCore-8.0.lib

vtkCommonColor-8.0.lib

vtkCommonComputationalGeometry-8.0.lib

vtkCommonCore-8.0.lib

vtkCommonDataModel-8.0.lib

vtkCommonExecutionModel-8.0.lib

vtkCommonMath-8.0.lib

vtkCommonMisc-8.0.lib

vtkCommonSystem-8.0.lib

vtkCommonTransforms-8.0.lib

vtkDICOMParser-8.0.lib

vtkDomainsChemistry-8.0.lib

vtkDomainsChemistryOpenGL2-8.0.lib

vtkexoIIc-8.0.lib

vtkexpat-8.0.lib

vtkFiltersAMR-8.0.lib

vtkFiltersCore-8.0.lib

vtkFiltersExtraction-8.0.lib

vtkFiltersFlowPaths-8.0.lib

vtkFiltersGeneral-8.0.lib

vtkFiltersGeneric-8.0.lib

vtkFiltersGeometry-8.0.lib

vtkFiltersHybrid-8.0.lib

vtkFiltersHyperTree-8.0.lib

vtkFiltersImaging-8.0.lib

vtkFiltersModeling-8.0.lib

vtkFiltersParallel-8.0.lib

vtkFiltersParallelImaging-8.0.lib

vtkFiltersPoints-8.0.lib

vtkFiltersProgrammable-8.0.lib

vtkFiltersSelection-8.0.lib

vtkFiltersSMP-8.0.lib

vtkFiltersSources-8.0.lib

vtkFiltersStatistics-8.0.lib

vtkFiltersTexture-8.0.lib

vtkFiltersTopology-8.0.lib

vtkFiltersVerdict-8.0.lib

vtkfreetype-8.0.lib

vtkGeovisCore-8.0.lib

vtkgl2ps-8.0.lib

vtkglew-8.0.lib

vtkhdf5-8.0.lib

vtkhdf5_hl-8.0.lib

vtkImagingColor-8.0.lib

vtkImagingCore-8.0.lib

vtkImagingFourier-8.0.lib

vtkImagingGeneral-8.0.lib

vtkImagingHybrid-8.0.lib

vtkImagingMath-8.0.lib

vtkImagingMorphological-8.0.lib

vtkImagingSources-8.0.lib

vtkImagingStatistics-8.0.lib

vtkImagingStencil-8.0.lib

vtkInfovisCore-8.0.lib

vtkInfovisLayout-8.0.lib

vtkInteractionImage-8.0.lib

vtkInteractionStyle-8.0.lib

vtkInteractionWidgets-8.0.lib

vtkIOAMR-8.0.lib

vtkIOCore-8.0.lib

vtkIOEnSight-8.0.lib

vtkIOExodus-8.0.lib

vtkIOExport-8.0.lib

vtkIOExportOpenGL2-8.0.lib

vtkIOGeometry-8.0.lib

vtkIOImage-8.0.lib

vtkIOImport-8.0.lib

vtkIOInfovis-8.0.lib

vtkIOLegacy-8.0.lib

vtkIOLSDyna-8.0.lib

vtkIOMINC-8.0.lib

vtkIOMovie-8.0.lib

vtkIONetCDF-8.0.lib

vtkIOParallel-8.0.lib

vtkIOParallelXML-8.0.lib

vtkIOPLY-8.0.lib

vtkIOSQL-8.0.lib

vtkIOTecplotTable-8.0.lib

vtkIOVideo-8.0.lib

vtkIOXML-8.0.lib

vtkIOXMLParser-8.0.lib

vtkjpeg-8.0.lib

vtkjsoncpp-8.0.lib

vtklibharu-8.0.lib

vtklibxml2-8.0.lib

vtklz4-8.0.lib

vtkmetaio-8.0.lib

vtkNetCDF-8.0.lib

vtknetcdf_c++.lib

vtkoggtheora-8.0.lib

vtkParallelCore-8.0.lib

vtkpng-8.0.lib

vtkproj4-8.0.lib

vtkRenderingAnnotation-8.0.lib

vtkRenderingContext2D-8.0.lib

vtkRenderingContextOpenGL2-8.0.lib

vtkRenderingCore-8.0.lib

vtkRenderingFreeType-8.0.lib

vtkRenderingGL2PSOpenGL2-8.0.lib

vtkRenderingImage-8.0.lib

vtkRenderingLabel-8.0.lib

vtkRenderingLOD-8.0.lib

vtkRenderingOpenGL2-8.0.lib

vtkRenderingVolume-8.0.lib

vtkRenderingVolumeOpenGL2-8.0.lib

vtksqlite-8.0.lib

vtksys-8.0.lib

vtktiff-8.0.lib

vtkverdict-8.0.lib

vtkViewsContext2D-8.0.lib

vtkViewsCore-8.0.lib

vtkViewsInfovis-8.0.lib

vtkzlib-8.0.lib

新建一个控制台程序,对VTK进行测试

测试用代码:

#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 main()  
{  
     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 );  
      int i;  
     for (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;  
} 

如发生读取异常,可修改堆栈保留大小,项目属性->链接器->系统->堆栈保留大小

如出现nooverride found for vtkpolydatamapper问题,添加

#include "vtkAutoInit.h"

VTK_MODULE_INIT(vtkRenderingOpenGL2); // VTK was built with vtkRenderingOpenGL2

VTK_MODULE_INIT(vtkInteractionStyle);

这是由于没有用Cmake编译所以缺少了一些头文件和宏定义。

成功测试结果如下

接下来的一篇文章将是关于ITK的相关分享!

ITK( Insight Segmentation and Registration Toolkit)是美国国家卫生院下属的国立医学图书馆开发的一款医学图像处理软件包,是一个开源的、跨平台的影像分析扩展软件工具。

ITK的开发过程中采用了先进的多模态数据分割配准算法,用于处理图像配准和分割的问题。 ITK是用C++实现的,能够跨平台,并用CMake来管理编译过程来保证编译过程独立于平台。除此以外,它还使用一种叫做卷的处理过程,来产生C++和 其他其他解释程序之间的接口,从而使得开发者能用各种不同的程序语言来开发。

感谢四四十六道友的分享,同时也鼓励大家一起分享!由于代码不宜编辑后期将会把文档上传百度云盘中

联系邮箱或者QQ:920177957@qq.com,亦可以加入QQ群一起交流学习。把你的遇到的问题和解决的办法分享吧!

原文发布于微信公众号 - 点云PCL(dianyunPCL)

原文发表时间:2017-11-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券