VS2019+cmake(3.15.3)+VTK(8.2.0)+配置完成后的demo演示


本文介绍的是Win10的VTK安装,利用cmake编译VTK,并在Visual Studio2019上的空项目使用安装好的VTK,在VS和机器上配置VTK的相关的环境。

1)文件需求

点击超链接即可跳转到下载页面

  • Visual Studio Community 2019
    注意需要在安装的时候勾选使用C++的桌面开发
    在这里插入图片描述
    如果安装时忘记选择,可以后期在Visual Studio Installer中选择修改即可看到相关信息
    在这里插入图片描述
  • cmake-3.15.3-win64-x64.msi
    在这里插入图片描述
    安装时正常一路next即可。
  • VTK-8.2.0
    在这里插入图片描述
  • VTK Data
    在这里插入图片描述
    下载完成后,新建文件夹。文件结构如下,我的目录是 D:\SoftWare\VTK
    VTK
    │    
    └───Data
    │
    └───Files
    │
    └───VTK-8.2.0
    │
    └───Install
    
    将下载的VTK源码(VTK-8.2.0.zip)解压到VTK-8.2.0文件夹下,将Data.tgz解压到Data文件夹下。

2)安装VTK

  1. 打开cmake,选择源码和源码被编译到的路径(此路径可以自己定义,在此我的是VTK下的Files)。
    在这里插入图片描述
  2. 点击Configure,注意2处选择你相应的VS版本,之后点击3处finish
    在这里插入图片描述
  3. 经过漫长的等待之后,会出现一些红色的参数,这里只修改两项,勾选BUILD_EXAMPLES,把CMAKE_INSTALL_PREFIX改为我们的Install文件夹,之后再点击Configure
    在这里插入图片描述
  4. 无红色参数之后点击Generate,完成后点击旁边的Open Project
    在这里插入图片描述
  5. 进入VS之后,右击ALL_BUILD,选择生成,同样右击INSTALL,选择生成
    生成
    在这里插入图片描述

3)运行demo

  1. 右击Cube,选择成为启动项目
    在这里插入图片描述
  2. 点击本地Windows调试器,注意选择x64,即可看到demo!
    在这里插入图片描述
    在这里插入图片描述

4)新建项目配置VTK

  1. VS创建一个新项目,选择空项目,我们命名为helloVtk
    在这里插入图片描述
  2. 源文件中添加新建项helloVtk.cxx
    在这里插入图片描述
    在这里插入图片描述
  3. 设置helloVtk项目属性:右击helloVtk,选择属性
  • 设置包含目录:为我们之前创建的Install文件夹中的include\vtk-8.2,在这里我的输入为 D:\SoftWare\VTK\Install\include\vtk-8.2
    在这里插入图片描述
  • 设置库目录Install下的lib文件夹,在这里我的输入为D:\SoftWare\VTK\Install\lib
    在这里插入图片描述
  • 配置链接器→ \to输入→ \to附加依赖项,应该为Install\lib下的所有.lib文件。
    在这里插入图片描述
    我的输入如下
    vtkChartsCore-8.2.lib
    vtkCommonColor-8.2.lib
    vtkCommonComputationalGeometry-8.2.lib
    vtkCommonCore-8.2.lib
    vtkCommonDataModel-8.2.lib
    vtkCommonExecutionModel-8.2.lib
    vtkCommonMath-8.2.lib
    vtkCommonMisc-8.2.lib
    vtkCommonSystem-8.2.lib
    vtkCommonTransforms-8.2.lib
    vtkDICOMParser-8.2.lib
    vtkDomainsChemistry-8.2.lib
    vtkDomainsChemistryOpenGL2-8.2.lib
    vtkdoubleconversion-8.2.lib
    vtkexodusII-8.2.lib
    vtkexpat-8.2.lib
    vtkFiltersAMR-8.2.lib
    vtkFiltersCore-8.2.lib
    vtkFiltersExtraction-8.2.lib
    vtkFiltersFlowPaths-8.2.lib
    vtkFiltersGeneral-8.2.lib
    vtkFiltersGeneric-8.2.lib
    vtkFiltersGeometry-8.2.lib
    vtkFiltersHybrid-8.2.lib
    vtkFiltersHyperTree-8.2.lib
    vtkFiltersImaging-8.2.lib
    vtkFiltersModeling-8.2.lib
    vtkFiltersParallel-8.2.lib
    vtkFiltersParallelImaging-8.2.lib
    vtkFiltersPoints-8.2.lib
    vtkFiltersProgrammable-8.2.lib
    vtkFiltersSelection-8.2.lib
    vtkFiltersSMP-8.2.lib
    vtkFiltersSources-8.2.lib
    vtkFiltersStatistics-8.2.lib
    vtkFiltersTexture-8.2.lib
    vtkFiltersTopology-8.2.lib
    vtkFiltersVerdict-8.2.lib
    vtkfreetype-8.2.lib
    vtkGeovisCore-8.2.lib
    vtkgl2ps-8.2.lib
    vtkglew-8.2.lib
    vtkhdf5-8.2.lib
    vtkhdf5_hl-8.2.lib
    vtkImagingColor-8.2.lib
    vtkImagingCore-8.2.lib
    vtkImagingFourier-8.2.lib
    vtkImagingGeneral-8.2.lib
    vtkImagingHybrid-8.2.lib
    vtkImagingMath-8.2.lib
    vtkImagingMorphological-8.2.lib
    vtkImagingSources-8.2.lib
    vtkImagingStatistics-8.2.lib
    vtkImagingStencil-8.2.lib
    vtkInfovisCore-8.2.lib
    vtkInfovisLayout-8.2.lib
    vtkInteractionImage-8.2.lib
    vtkInteractionStyle-8.2.lib
    vtkInteractionWidgets-8.2.lib
    vtkIOAMR-8.2.lib
    vtkIOAsynchronous-8.2.lib
    vtkIOCityGML-8.2.lib
    vtkIOCore-8.2.lib
    vtkIOEnSight-8.2.lib
    vtkIOExodus-8.2.lib
    vtkIOExport-8.2.lib
    vtkIOExportOpenGL2-8.2.lib
    vtkIOExportPDF-8.2.lib
    vtkIOGeometry-8.2.lib
    vtkIOImage-8.2.lib
    vtkIOImport-8.2.lib
    vtkIOInfovis-8.2.lib
    vtkIOLegacy-8.2.lib
    vtkIOLSDyna-8.2.lib
    vtkIOMINC-8.2.lib
    vtkIOMovie-8.2.lib
    vtkIONetCDF-8.2.lib
    vtkIOParallel-8.2.lib
    vtkIOParallelXML-8.2.lib
    vtkIOPLY-8.2.lib
    vtkIOSegY-8.2.lib
    vtkIOSQL-8.2.lib
    vtkIOTecplotTable-8.2.lib
    vtkIOVeraOut-8.2.lib
    vtkIOVideo-8.2.lib
    vtkIOXML-8.2.lib
    vtkIOXMLParser-8.2.lib
    vtkjpeg-8.2.lib
    vtkjsoncpp-8.2.lib
    vtklibharu-8.2.lib
    vtklibxml2-8.2.lib
    vtkLocalExample-8.2.lib
    vtklz4-8.2.lib
    vtklzma-8.2.lib
    vtkmetaio-8.2.lib
    vtkNetCDF-8.2.lib
    vtkogg-8.2.lib
    vtkParallelCore-8.2.lib
    vtkpng-8.2.lib
    vtkproj-8.2.lib
    vtkpugixml-8.2.lib
    vtkRenderingAnnotation-8.2.lib
    vtkRenderingContext2D-8.2.lib
    vtkRenderingContextOpenGL2-8.2.lib
    vtkRenderingCore-8.2.lib
    vtkRenderingFreeType-8.2.lib
    vtkRenderingGL2PSOpenGL2-8.2.lib
    vtkRenderingImage-8.2.lib
    vtkRenderingLabel-8.2.lib
    vtkRenderingLOD-8.2.lib
    vtkRenderingOpenGL2-8.2.lib
    vtkRenderingVolume-8.2.lib
    vtkRenderingVolumeOpenGL2-8.2.lib
    vtksqlite-8.2.lib
    vtksys-8.2.lib
    vtktheora-8.2.lib
    vtktiff-8.2.lib
    vtkverdict-8.2.lib
    vtkViewsContext2D-8.2.lib
    vtkViewsCore-8.2.lib
    vtkViewsInfovis-8.2.lib
    vtkzlib-8.2.lib
    
  1. 向系统环境变量中(Win10)的Path添加Install下的bin文件夹,我配置的为D:\SoftWare\VTK\Install\bin\
    在这里插入图片描述
  2. helloVtk.cxx中粘贴示例程序代码
/*=========================================================================

  Program:   Visualization Toolkit
  Module:    Cube.cxx

  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
  All rights reserved.
  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.

	 This software is distributed WITHOUT ANY WARRANTY; without even
	 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
	 PURPOSE.  See the above copyright notice for more information.

=========================================================================*/
// This example shows how to manually create vtkPolyData.

// For a python version, please see:
// [Cube](https://lorensen.github.io/VTKExamples/site/Python/DataManipulation/Cube/)

#include <vtkActor.h>
#include <vtkCamera.h>
#include <vtkCellArray.h>
#include <vtkFloatArray.h>
#include <vtkNamedColors.h>
#include <vtkNew.h>
#include <vtkPointData.h>
#include <vtkPoints.h>
#include <vtkPolyData.h>
#include <vtkPolyDataMapper.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <array>
int main()
{
	vtkNew<vtkNamedColors> colors;

	std::array<std::array<double, 3>, 8> pts = { {{{0, 0, 0}},
												 {{1, 0, 0}},
												 {{1, 1, 0}},
												 {{0, 1, 0}},
												 {{0, 0, 1}},
												 {{1, 0, 1}},
												 {{1, 1, 1}},
												 {{0, 1, 1}}} };
	// The ordering of the corner points on each face.
	std::array<std::array<vtkIdType, 4>, 6> ordering = { {{{0, 1, 2, 3}},
														 {{4, 5, 6, 7}},
														 {{0, 1, 5, 4}},
														 {{1, 2, 6, 5}},
														 {{2, 3, 7, 6}},
														 {{3, 0, 4, 7}}} };

	// We'll create the building blocks of polydata including data attributes.
	vtkNew<vtkPolyData> cube;
	vtkNew<vtkPoints> points;
	vtkNew<vtkCellArray> polys;
	vtkNew<vtkFloatArray> scalars;

	// Load the point, cell, and data attributes.
	for (auto i = 0ul; i < pts.size(); ++i)
	{
		points->InsertPoint(i, pts[i].data());
		scalars->InsertTuple1(i, i);
	}
	for (auto&& i : ordering)
	{
		polys->InsertNextCell(vtkIdType(i.size()), i.data());
	}

	// We now assign the pieces to the vtkPolyData.
	cube->SetPoints(points);
	cube->SetPolys(polys);
	cube->GetPointData()->SetScalars(scalars);

	// Now we'll look at it.
	vtkNew<vtkPolyDataMapper> cubeMapper;
	cubeMapper->SetInputData(cube);
	cubeMapper->SetScalarRange(cube->GetScalarRange());
	vtkNew<vtkActor> cubeActor;
	cubeActor->SetMapper(cubeMapper);

	// The usual rendering stuff.
	vtkNew<vtkCamera> camera;
	camera->SetPosition(1, 1, 1);
	camera->SetFocalPoint(0, 0, 0);

	vtkNew<vtkRenderer> renderer;
	vtkNew<vtkRenderWindow> renWin;
	renWin->AddRenderer(renderer);

	vtkNew<vtkRenderWindowInteractor> iren;
	iren->SetRenderWindow(renWin);

	renderer->AddActor(cubeActor);
	renderer->SetActiveCamera(camera);
	renderer->ResetCamera();
	renderer->SetBackground(colors->GetColor3d("Cornsilk").GetData());

	renWin->SetSize(600, 600);

	// interact with data
	renWin->Render();
	iren->Start();

	return EXIT_SUCCESS;
}

  1. 注意!有的示例程序不含下面的代码,会导致报错,这是由于未使用CMake进行配置,所以需要在源代码前面加上这些。
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
  1. 配置完成,依然是设置成x64,可以运行demo了。
    在这里插入图片描述
  2. 运行结果如图,大功告成!
    在这里插入图片描述

参考资料:
vtk的简单介绍和安装
vs2010+vtk源码编译,工程配置
VS2013编译VTK7.1.1


版权声明:本文为Pure_vv原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。