2014-06-11 80 views
1

我試圖將Visualization ToolKit(VTK)庫創建的場景嵌入到VisualC++ 2012中創建的窗體窗體中,以便設計我的Windows本機GUI界面。如何在Windows窗體項目中創建VTK項目(VisualC++ 2012)

我想強調的是,所有使用控制檯應用程序的例子都配置了(Cmake),使用VC++ 2012進行編譯並按照官方VTK wiki頁面的指示完美工作。

問題是,如果我嘗試調用Win Form應用程序中的VTK函數和類初始化,即使我按預期方式正常添加所有內容,也會得到Error LNK1107: invalid or corrupt file: cannot read at 0x2E0 D:\.....\VTK_61_BUILD_VS2012\bin\Debug\vtkViewsCore-6.1.dll,這些包括頭文件和外部庫依賴項。

這讓我覺得我來自錯誤的Visual C++ 2012項目模板或明顯的東西我完全失蹤,否則編譯器會出現很多沒有找到文件或語法錯誤。

這是我嘗試調用VTK庫的第一行,即使是intellisense也提示vtk .....名爲proc,函數和結構,但應用程序無法編譯。

#pragma once 

#include <vtkSmartPointer.h> 
#include <vtkTriangle.h> 
#include <vtkCellArray.h> 
#include <vtkPolyData.h> 
#include <vtkRenderWindow.h> 

namespace CLR_Project1 { 
using namespace System; 
using namespace System::ComponentModel; 
using namespace System::Collections; 
using namespace System::Windows::Forms; 
using namespace System::Data; 
using namespace System::Drawing; 
... 
... 
vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New(); 

這裏有什麼問題?

+0

首先你必須創建一個CLR包裝VTK或使用C++/CLR混合模式。 –

回答

1

下面的鏈接(尤其bnsteel先生的回答)幫了我很多,當我有同樣的問題==>

http://vtk.1045678.n5.nabble.com/VTK-and-Winforms-integration-td5721086.html

您可以使用痛飲,因爲它是根據建議鏈接。但這不是必要的。使用類似的方法(傳遞窗體窗體面板句柄),可以按照jalal sadeghi的建議創建一個C++/CLI包裝器。您將通過包裝器將面板句柄傳遞到執行所有「VTK工作」的C++庫。這樣,您不必爲所有VTK類創建單獨的包裝器,所有「VTK工作」和VTK依賴關係都會隱藏在C++層中。

像這樣的東西==>

C++側

setImageRenderWindowParentID(void *theID){ 
     ... (init your vtk render window) 
     renWin->SetParentId(theID); 
} 

C++/CLI側

void setRenderWindowParentID(IntPtr parentID, .. also pass the panel size ..){ 
    void* p = parentID.ToPointer(); 
    myCPPVTK->setRenderWindowParentID(p, .. also pass the panel size ..); 
} 

C#側

VTKWrapper.setRenderWindowParentID(m_panel.Handle, .. also pass the panel size ..); 
相關問題