完整博客见:Win10-64位(或Win7)+VS2019+ITK4.13.2+VTK8.2+CMake3.16环境配置
目录:
4.6 手动新建项目配置VTK(不使用CMakeLists.txt构建),实现Cube立方体的显示与交互
4.8 手动配置的VTK项目进行.png图像读取与显示(在4.6节基础上)
4.6 手动新建项目配置VTK(不使用CMakeLists.txt构建)
4.6小节,本例程通过手动新建项目(不使用CMakeLists.txt构建)配置好的 VTK 可运行工程 vtk1 文件夹下载(实现Cube工程Demo(立方体)的显示和交互)
4.6.1 在 VTK8.2.0 文件下创建 vtk1 文件夹(用于存放手动新建的项目文件),VS2019——>创建新项目——>空项目——>下一步——>项目名称命名为 helloVtk
——> 位置自定义为 F:\Software\VTK8.2.0\vtk1
——>创建
4.6.2 在源文件中添加新建项 helloVtk.cxx ,更改 名称 和 位置 ,添加
4.6.3 设置包含目录:解决方案中 右键 helloVtk ——> 属性 ——> VC++目录 ——> 包含目录,添加 F:\Software\VTK8.2.0\Bin\include\vtk-8.2 (注意配置(Debug),平台为 x64)
4.6.4 设置库目录:解决方案中 右键 helloVtk ——> 属性 ——> VC++目录 ——> 库目录,添加 F:\Software\VTK8.2.0\Bin\lib
4.6.5 配置链接器:解决方案中 右键 helloVtk ——> 属性 ——> 链接器 ——> 输入 ——> 附加依赖项,添加 F:\Software\VTK8.2.0\Bin\lib 目录下的所有 .lib 文件
VTK8.2.0 的所有 .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
4.6.6 向 helloVtk.cxx 中粘贴 Cube 项目Demo代码
/*=========================================================================
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 <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
#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;
}
注意:有的示例程序在程序最前端不含下面的代码,会导致报错,这是由于未使用CMake进行配置,所以需要在源代码前面加上
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
4.6.7 配置完成,运行 本地Windows调试器
至此,手动新建项目配置VTK完成!!!
4.8 手动配置的VTK项目进行.png图像读取与显示(在4.6节基础上)
4.8小节,本例程通过手动新建项目(不使用CMakeLists.txt构建)配置好的 VTK 可运行工程 vtk1 文件夹下载(实现png图像读取与显示)
4.8.1 选择 F:\Software\VTK8.2.0\vtk1\helloVtk,将 vtk_demo.png 和 vtk_png_reader.cxx 两个文件拷贝到此目录(你也可以选择其它png格式的图片)
vtk_png_reader.cxx 的源码:
#include "vtkAutoInit.h"
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
#include <vtkPNGReader.h>//PNG读取类
#include <vtkImageViewer.h>//显示2D图像类
#include <vtkRenderWindowInteractor.h>//交互器类
int main()
{
//实例化一个对象pngReader
vtkPNGReader* pngReader = vtkPNGReader::New();
pngReader->SetFileName("vtk_demo.png");//读取图片
//实例化一个对象pngViewer
vtkImageViewer* bmpViewer = vtkImageViewer::New();
bmpViewer->SetInputConnection(pngReader->GetOutputPort());//读取的图像数据输出给显示对象输入
bmpViewer->SetColorLevel(128);//设置窗位
bmpViewer->SetColorWindow(256);//设置窗宽
bmpViewer->Render();//显示图像
//加入交互机制
//实例化一个交互器对象interactor
vtkRenderWindowInteractor* interactor = vtkRenderWindowInteractor::New();
bmpViewer->SetupInteractor(interactor);
interactor->Initialize();
interactor->Start();//使交互器处于等待状态
//getchar();
//释放内存
pngReader->Delete();
bmpViewer->Delete();
interactor->Delete();
return 0;
}
4.8.2 双击 F:\Software\VTK8.2.0\vtk1\helloVtk 目录下 helloVtk.sln 使用VS2019打开工程,选择 解决方案资源管理器 下的源文件下的 helloVtk.cxx 文件,然后 右键 选择栏下的 移除 选项(选择移除,如果以后要添加文件还存在,如果选择删除此文件将被删除不存在)
4.8.3 移除后,然后选中 源文件,然后 右键 选择栏下的 添加 ——现有项 选项,选中 F:\Software\VTK8.2.0\vtk1\helloVtk 目录下的 vtk_png_reader.cxx 进行添加
4.8.4 然后点击 本地Windows调试器 运行
按住鼠标左键在图片上左右或图片上下滑动可进行图片窗宽窗位的调节:
至此,手动配置的VTK项目进行.png图像读取与显示完成!!!