VS2012编译VTK7.1.1库,使用VTK加载显示STL图像

⌚Time: 2023-06-05 23:16:48

👨‍💻Author: Jack Ge

VTK库下载地址,下载VTK源码

https://vtk.org/download/

需要工具

1.VS2012

2.CMAKE

官网

https://cmake.org/

cmake配置项目

下载后的vtk7.1.1库解压

安装好cmake,打开cmake-gui,在where is the source code 后面填入vtk解压后的源码目录。where to build the binaries后面是自己指定的编译目录。之后点击configure。

选择VS2012,finish

configure完成后,CMAKE_INSTALL_PREFIX填入指定的安装目录

再次点击configure,configure完成后,点击generate,在编译目录下生成vs2012项目

编译VTK库

使用vs2012打开VTK.sln

对于ALL_BUILD项目,右键,生成。等待十几分钟编译时间

生成结束后,对于INSTALL项目右键,生成,生成结束后,会在cmake指定的安装目录文件夹下生成库文件

代码测试

新建一个VS2012项目

编辑以下的代码,加载16.stl文件显示图像


#include <vtkSmartPointer.h>

#include <vtkSTLReader.h>

#include <vtkPolyDataMapper.h>

#include <vtkActor.h>

#include <vtkRenderer.h>

#include <vtkRenderWindow.h>

#include <vtkRenderWindowInteractor.h>

#include <vtkAutoInit.h>

VTK_MODULE_INIT(vtkRenderingOpenGL2); // 和你cmake时候选的opengl相匹配,如果是opengl那就是vtkRenderingOpenGL,而我选的是opengl2,所以这里的参数是vtkRenderingOpenGL2

VTK_MODULE_INIT(vtkInteractionStyle);

int main(int argc, char* argv[])

{

    // 创建STL文件读取器

    vtkSmartPointer<vtkSTLReader> reader = vtkSmartPointer<vtkSTLReader>::New();

    reader->SetFileName("16.stl");



    // 创建PolyDataMapper和Actor

    vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();

    mapper->SetInputConnection(reader->GetOutputPort());



    vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();

    actor->SetMapper(mapper);



    // 创建Renderer、RenderWindow和RenderWindowInteractor

    vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();

    renderer->AddActor(actor);



    vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();

    renderWindow->AddRenderer(renderer);



    vtkSmartPointer<vtkRenderWindowInteractor> interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New();

    interactor->SetRenderWindow(renderWindow);



    // 开始渲染和交互

    renderWindow->Render();

    interactor->Start();



    return 0;

}


点击项目,属性,设置附加包含目录,是你的VTK安装路径的include文件夹/VTK版本

D:\libs\VTK\include\vtk-7.1;

设置附加库目录,VTK安装路径的lib文件夹

D:\libs\VTK\lib;

设置附加依赖项,可以在库目录下使用cmd命令生成


DIR *.lib*/B>LIST.TXT


vtksys-7.1.lib

vtkCommonCore-7.1.lib

vtkCommonMath-7.1.lib

vtkCommonMisc-7.1.lib

vtkCommonSystem-7.1.lib

vtkCommonTransforms-7.1.lib

vtkCommonDataModel-7.1.lib

vtkCommonColor-7.1.lib

vtkCommonExecutionModel-7.1.lib

vtkCommonComputationalGeometry-7.1.lib

vtkFiltersCore-7.1.lib

vtkFiltersGeneral-7.1.lib

vtkImagingCore-7.1.lib

vtkImagingFourier-7.1.lib

vtkalglib-7.1.lib

vtkFiltersStatistics-7.1.lib

vtkFiltersExtraction-7.1.lib

vtkInfovisCore-7.1.lib

vtkFiltersGeometry-7.1.lib

vtkFiltersSources-7.1.lib

vtkRenderingCore-7.1.lib

vtkzlib-7.1.lib

vtkfreetype-7.1.lib

vtkRenderingFreeType-7.1.lib

vtkRenderingContext2D-7.1.lib

vtkChartsCore-7.1.lib

vtkDICOMParser-7.1.lib

vtkIOCore-7.1.lib

vtkIOLegacy-7.1.lib

vtkexpat-7.1.lib

vtkIOXMLParser-7.1.lib

vtkDomainsChemistry-7.1.lib

vtkmetaio-7.1.lib

vtkjpeg-7.1.lib

vtkpng-7.1.lib

vtktiff-7.1.lib

vtkIOImage-7.1.lib

vtkglew-7.1.lib

vtkRenderingOpenGL2-7.1.lib

vtkDomainsChemistryOpenGL2-7.1.lib

vtkIOXML-7.1.lib

vtkParallelCore-7.1.lib

vtkFiltersAMR-7.1.lib

vtkFiltersFlowPaths-7.1.lib

vtkFiltersGeneric-7.1.lib

vtkImagingSources-7.1.lib

vtkFiltersHybrid-7.1.lib

vtkFiltersHyperTree-7.1.lib

vtkImagingGeneral-7.1.lib

vtkFiltersImaging-7.1.lib

vtkFiltersModeling-7.1.lib

vtkFiltersParallel-7.1.lib

vtkFiltersParallelImaging-7.1.lib

vtkFiltersPoints-7.1.lib

vtkFiltersProgrammable-7.1.lib

vtkFiltersSMP-7.1.lib

vtkFiltersSelection-7.1.lib

vtkFiltersTexture-7.1.lib

vtkverdict-7.1.lib

vtkFiltersVerdict-7.1.lib

vtkImagingHybrid-7.1.lib

vtkInfovisLayout-7.1.lib

vtkInteractionStyle-7.1.lib

vtkImagingColor-7.1.lib

vtkRenderingAnnotation-7.1.lib

vtkRenderingVolume-7.1.lib

vtkInteractionWidgets-7.1.lib

vtkViewsCore-7.1.lib

vtkproj4-7.1_d.lib

vtkGeovisCore-7.1.lib

vtkhdf5-7.1.lib

vtkhdf5_hl-7.1.lib

vtkIOAMR-7.1.lib

vtkIOEnSight-7.1.lib

vtkNetCDF-7.1.lib

vtkNetCDF_cxx-7.1.lib

vtkexoIIc-7.1.lib

vtkIOExodus-7.1.lib

vtkgl2ps-7.1.lib

vtkRenderingGL2PSOpenGL2-7.1.lib

vtkIOExport-7.1.lib

vtkIOGeometry-7.1.lib

vtkIOImport-7.1.lib

vtklibxml2-7.1.lib

vtkIOInfovis-7.1.lib

vtkIOLSDyna-7.1.lib

vtkIOMINC-7.1.lib

vtkoggtheora-7.1.lib

vtkIOMovie-7.1.lib

vtkIONetCDF-7.1.lib

vtkIOPLY-7.1.lib

vtkjsoncpp-7.1.lib

vtkIOParallel-7.1.lib

vtkIOParallelXML-7.1.lib

vtksqlite-7.1.lib

vtkIOSQL-7.1.lib

vtkIOTecplotTable-7.1.lib

vtkIOVideo-7.1.lib

vtkImagingMath-7.1.lib

vtkImagingMorphological-7.1.lib

vtkImagingStatistics-7.1.lib

vtkImagingStencil-7.1.lib

vtkInteractionImage-7.1.lib

vtkRenderingContextOpenGL2-7.1.lib

vtkRenderingImage-7.1.lib

vtkRenderingLOD-7.1.lib

vtkRenderingLabel-7.1.lib

vtkRenderingVolumeOpenGL2-7.1.lib

vtkViewsContext2D-7.1.lib

vtkViewsInfovis-7.1.lib

之后编译运行

如果提示找不打xxx.dll文件,将VTK安装目录下的bin文件夹加入path环境变量,重启VS后运行

报错:no override found for vtkpolydata

运行时如果报错


no override found for vtkpolydata

cmake配置时,记住这里的是OPENGL2或者是OPENGL

代码中加入初始化


#include <vtkAutoInit.h>

VTK_MODULE_INIT(vtkRenderingOpenGL2); // 和你cmake时候选的opengl相匹配,如果是opengl那就是vtkRenderingOpenGL,而我选的是opengl2,所以这里的参数是vtkRenderingOpenGL2

VTK_MODULE_INIT(vtkInteractionStyle);