【VTK】VTK8.2.0 + VS2015 + Win10 编译与配置

VTK8.2.0 + VS2015 + Win10 编译与配置

特别鸣谢 “熬一条味道鲜美的鱼”博主给予的技术支持 请参考:VTK8.2.0+ITK4.13.2+VS2015配置

这里只编译VTK库, 没有编译VTK其中的例子和其包含的数据。
由于项目需要 只能使用VS2015版本,而编译过程也适用于VS2017和VS2019;

1 下载源码

1.1 VTK源码在VTK官网下载

下载地址:https://vtk.org/download/
在这里插入图片描述
在8.2.0 release版本中 Source 选择一个压缩包下载即可。

1.2 CMake官网下载

下载地址:https://cmake.org/download/
在这里插入图片描述
选择最新的Release版本,根据你windows版本选择Platform,我是64位系统,所以选择 Windows win64-X64 Installer 的安装包,下载后直接安装即可,最好以管理员身份安装。

2. 利用CMake生成VTK 的VS2015的项目文件

解压VTK源码得到 VTK-8.2.0文件夹 ,打开看看如果还有一层VTK8.2.0 可以在当新建一个文件夹 VTK-8.2.0-build(生成的VS项目文件) 和 VTK-8.2.0-prefix(VS编译生成的 VTK库文件)
在这里插入图片描述

2.1 打开安装好的Cmake (cmake-gui)(请忽略我的版本不是最新版本)选则vtk的源码路径和vtk的生成路径 就是上一步的两个文件夹,点击configure。

在这里插入图片描述

2.2 选择VS环境 我是VS2015 64位版,点击finish 开始加载配置 等一会儿,直到出现 红色区域和Configuring done。

在这里插入图片描述
在这里插入图片描述

2.3 修改配置参数

2.3.1 勾选 BUILD下的 BUILD_SHARED_LIBS (例子测试我都没勾选 如果想用 勾选)

2.3.2 修改 CMAKE 下 CMAKE_INSTALL_PREFIX 选项的路径为之前新建的VTK-8.2.0-prefix路径

2.3.3 如果想支持MFC 勾选 Module下的Module_vtkGUISupportMFC 选项

2.3.4 点击Configure按钮 直至红色部分消失,点击Generate按钮 生成项目文件

2.3.5 这里参考LiveAn博主的 《VTK8.2.0编译安装与测试用例运行(win10 + VS2017 + Qt5,Release+Debug)》设置CMAKE_DEBUG_POSTFIX的值,该变量表示在Debug模式下输出的文件名的后面加上的字符,设置为”_d”,则最后Debug模式下编译生成的文件名后面都有"_d"后缀,从而区分Release模式与Debug模式所用文件(我没有设置 大家可以设置,这样在生成debug版后再生成release时不会覆盖之前生成的文件)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3 进入生成的VS2015项目文件,进行VTK库的编译

3.1 打开之前新建的VTK-8.2.0-build文件夹, 使用VS2015打开VTK.sln (最好以管理员身份打开 win10对于修改C盘数据很敏感,有可能导致编译失败,关闭360等防御软件,关闭没有必要的程序)在这里插入图片描述

3.2 默认属性为debug x64 ,右键ALL_BUILD 选择Build 进行编译 ,时间较长 慢慢等待 生成期间最好不要操作电脑,完成后看输出是否全部成功,如果成功右键INSTALL项目选择build编译,则VTK库成功生成,生成的文件存储在VTK-8.2.0-prefix下(Debug版)

在这里插入图片描述
在这里插入图片描述

3.3 将VTK-8.2.0-prefix下的include、bin、lib、share (share貌似没啥用) 拷贝到你自己建立的VTK库文件夹下,例如:新建VTK820,并在该文件夹下新建debug和release两个文件夹,因为include和share文件是debug和release版本共用的,将include和share文件夹存放在VTK820下即可,将生成的bin和lib文件拷贝到对应文件夹下 如debug环境下在VTK-8.2.0-prefix生成的bin和lib文件夹放在VTK820的debug文件夹下。

在这里插入图片描述

3.4 而后在VS2015中将Debug改为Release后重复3.2的操作会生成release版本的VTK库(注意:VTK-8.2.0-prefix下生成的bin和lib会被覆盖 提前拷出来)将库文件按3.3描述保存lib和bin到release中

在这里插入图片描述

4 VTK的使用

配置VTK库,包括(1)添加环境变量VTK820的bin文件夹目录(debug和release用到哪个填哪个就行)(配置完需要重启vs或重启电脑),新建控制台应用程序(2)修改项目属性包含目录和lib库目录,(3)并将使用的lib文件名添加到Link->Iput->Additional Dependencies 中 (这里有个方法获取所有lib名,在lib文件家下新建.txt文件,输入 dir /b *.lib > debug.txt 将改文件后缀名改为.bat 双击改文件 会生成debug.txt文件 里边包含了所有lib文件名)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

测试代码

#include <vtkActor.h>
#include <vtkCamera.h>
#include <vtkCylinderSource.h>
#include <vtkNamedColors.h>
#include <vtkPolyDataMapper.h>
#include <vtkProperty.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <vtkSmartPointer.h>

#include <array>

#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2); //未使用cmake生成的项目需要加
VTK_MODULE_INIT(vtkInteractionStyle);//未使用cmake生成的项目需要加

int main()
{//hello vtk程序

	vtkSmartPointer<vtkNamedColors> colors =
		vtkSmartPointer<vtkNamedColors>::New();

	std::array<unsigned char, 4> bkg{ { 26, 51, 102, 255 } };
	colors->SetColor("BkgColor", bkg.data());

	vtkSmartPointer<vtkCylinderSource> cylinder =
		vtkSmartPointer<vtkCylinderSource>::New();
	cylinder->SetResolution(8);

	vtkSmartPointer<vtkPolyDataMapper> cylinderMapper =
		vtkSmartPointer<vtkPolyDataMapper>::New();
	cylinderMapper->SetInputConnection(cylinder->GetOutputPort());

	vtkSmartPointer<vtkActor> cylinderActor = vtkSmartPointer<vtkActor>::New();
	cylinderActor->SetMapper(cylinderMapper);
	cylinderActor->GetProperty()->SetColor(
		colors->GetColor4d("Tomato").GetData());
	cylinderActor->RotateX(30.0);
	cylinderActor->RotateY(-45.0);

	vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
	renderer->AddActor(cylinderActor);
	renderer->SetBackground(colors->GetColor3d("BkgColor").GetData());

	renderer->ResetCamera();
	renderer->GetActiveCamera()->Zoom(1.5);

	vtkSmartPointer<vtkRenderWindow> renderWindow =
		vtkSmartPointer<vtkRenderWindow>::New();
	renderWindow->SetSize(300, 300);
	renderWindow->AddRenderer(renderer);
	renderWindow->SetWindowName("Cylinder");

	vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
		vtkSmartPointer<vtkRenderWindowInteractor>::New();
	renderWindowInteractor->SetRenderWindow(renderWindow);

	renderWindow->Render();
	renderWindowInteractor->Start();
	return 0;

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章