VTK+VS2019(或其他版本均可) 傻瓜式一站式 配置

  1. cmake 下載安裝
  2. 下載VTK
    在這裏插入圖片描述
  3. 打開cmake,將source code 處定位到VTK包解壓目錄中,含有CMakeList.txt文件的父目錄下。我的如下,除了放置位置的路徑不同,後面大家應該是一樣的。
    在這裏插入圖片描述
  4. 在Cmake的where to build the binaries 處,先填寫一個還不存在的文件夾的目錄,如在VTK存放目錄對應下,寫一個新文件夾名字 vtk_file
  5. source codebinaries都定位和寫好後,點擊configure; 此時CMake 會跳出來詢問:vtk_file是一個不存在的文件夾,是否應該新建? 點擊是後,Cmake會讓你選擇speficy the generator for the project, 選擇一個與自己windows安裝的VS版本一致的選項,注意!,一定要選擇與自己VS版本一致的選擇完成後,點擊finish退出
    在這裏插入圖片描述
  6. 點擊configure,等待,第一次configure結束後,會顯示一堆背景爲紅色的信息。 這時在vtk_file目錄下新建一個文件夾,位置也可以自定義,文件夾名稱爲vtk_prefix
    Attention !!!:
    在這裏插入圖片描述
  • 將cmake目錄下的CMAKE_INSTALL_PREFIX後面的目錄,改爲自己定義的文件夾的目錄,如我的如上圖;
  • VTK下面的vtk_use_cuda, vtk_use_large_data等都不要勾選,因爲我們並沒有下載這些包,所以點擊安裝就會報錯。
  1. 修改好後,再次點擊configure,結束後,點擊generate
  2. generate 結束後,點擊其旁邊的Open Project,(如果你不小心關閉了cmake,也可以進入自己定義的bineries對應的文件夾中找到VTK.sln打開,是一樣的) 你的VS 就會被調用打開,進入下一步。

  1. 打開後,選擇該文件右鍵-生成,然後需等待小10分鐘在這裏插入圖片描述
  2. 第一步完成後,往下翻,找到INSTALL,右鍵,生成,這個稍微快點
    在這裏插入圖片描述
  3. install完成後就可以關閉該sln文件了。到自己定義的vtk_prefix文件裏應該就可以找到以下幾個文件夾了。那麼說明,又一步驟完成了。接下來是在VS裏配置環境等。
    在這裏插入圖片描述
  4. 新建一個項目,然後在右側項目名右鍵—屬性後打開屬性頁面
    在這裏插入圖片描述
  5. 在[項目->屬性->配置屬性->VC++目錄->包含目錄] 裏添加vtk_prefix 文件下的include文件夾下的vtk-9.0目錄,注意,不是直接添加include目錄,一定是定位到有一堆子文件下後的那個目錄。
    在這裏插入圖片描述
    在這裏插入圖片描述
  6. 在[項目->屬性->配置屬性->鏈接器 附加庫目錄] 裏添加vtk_prefix的lib文件夾。
    在這裏插入圖片描述
  7. 在vtk_prefix的lib文件夾內新建一個txt文件,將如下內容複製到txt文件後保存,改後綴.txt爲.bat並運行。然後會生成了一個新的LIBLIST.txt文件,文件存有所有lib文件的名字。
DIR *.lib /B >LIBLIST.TXT
  1. [項目->屬性->配置屬性->鏈接器->輸入 附加依賴項] ,將上面生成的所有lib文件的名字粘貼進去。
  2. 在[項目->屬性->配置屬性->調試 環境] 寫入PATH=(vtk_prefix下的bin文件夾目錄)
    在這裏插入圖片描述
  3. 這樣.h,lib,dll文件都配置好了,可以寫代碼了

  1. 在項目裏新建一個cpp文件,在複製進測試文件時,需要先將以下代碼寫入,而且每次寫vtk文件都需要複製以下代碼,具體其他解決辦法還沒發現
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
  1. 複製以下測試代碼,運行
#include "vtkConeSource.h"
#include "vtkPolyDataMapper.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkCamera.h"
#include "vtkActor.h"
#include "vtkRenderer.h"
#include "vtkCommand.h"
#include "vtkBoxWidget.h"
#include "vtkTransform.h"
#include "vtkInteractorStyleTrackballCamera.h"


class vtkMyCallback : public vtkCommand
{
public:
	static vtkMyCallback* New()
	{
		return new vtkMyCallback;
	}
	void Execute(vtkObject* caller, unsigned long, void*) VTK_OVERRIDE
	{
		vtkTransform* t = vtkTransform::New();
		vtkBoxWidget* widget = reinterpret_cast<vtkBoxWidget*>(caller);
		widget->GetTransform(t);
		widget->GetProp3D()->SetUserTransform(t);
		t->Delete();
	}
};

int main()
{

	vtkConeSource* cone = vtkConeSource::New();
	cone->SetHeight(3.0);
	cone->SetRadius(1.0);
	cone->SetResolution(10);
	vtkPolyDataMapper* coneMapper = vtkPolyDataMapper::New();
	coneMapper->SetInputConnection(cone->GetOutputPort());


	vtkActor* coneActor = vtkActor::New();
	coneActor->SetMapper(coneMapper);


	vtkRenderer* ren1 = vtkRenderer::New();
	ren1->AddActor(coneActor);
	ren1->SetBackground(0.1, 0.2, 0.4);


	vtkRenderWindow* renWin = vtkRenderWindow::New();
	renWin->AddRenderer(ren1);
	renWin->SetSize(300, 300);


	vtkRenderWindowInteractor* iren = vtkRenderWindowInteractor::New();
	iren->SetRenderWindow(renWin);


	vtkInteractorStyleTrackballCamera* style =
		vtkInteractorStyleTrackballCamera::New();
	iren->SetInteractorStyle(style);

	vtkBoxWidget* boxWidget = vtkBoxWidget::New();
	boxWidget->SetInteractor(iren);
	boxWidget->SetPlaceFactor(1.25);
	boxWidget->SetProp3D(coneActor);
	boxWidget->PlaceWidget();
	vtkMyCallback* callback = vtkMyCallback::New();
	boxWidget->AddObserver(vtkCommand::InteractionEvent, callback);

	
	boxWidget->On();

	
	iren->Initialize();
	iren->Start();

	
	cone->Delete();
	coneMapper->Delete();
	coneActor->Delete();
	callback->Delete();
	boxWidget->Delete();
	ren1->Delete();
	renWin->Delete();
	iren->Delete();
	style->Delete();

	return 0;
}

在這裏插入圖片描述

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