【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;

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