如何在Windows窗体项目中创建VTK项目(VisualC ++ 2012)

时间:2014-06-11 11:20:37

标签: c++ visual-studio-2012 vtk

我正在尝试将使用Visualization ToolKit(VTK)库创建的场景嵌入到VisualC ++ 2012创建的窗体中,以便我可以设计我的Windows本机GUI界面。

我想强调的是,所有带有控制台应用程序的示例都配置了(Cmake),使用VC ++ 2012编译并且完美无瑕,正如官方VTK维基页面所指示的那样。

问题是,如果我尝试在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();

这是什么问题?

1 个答案:

答案 0 :(得分:1)

以下链接(特别是bnsteel先生的答案)对我非常有帮助,当我遇到同样的问题==&gt;

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

您可以根据链接建议使用Swig。但这没有必要。使用类似的方法(传递Windows窗体面板句柄),您可以像jalal sadeghi建议的那样创建C ++ / CLI包装器。您将通过包装器将面板句柄传递给执行所有“VTK工作”的C ++库。这样您就不必为所有VTK类创建单独的包装器,VTK上的所有“VTK工作”和依赖关系都隐藏在C ++层中。

像这样的东西==&gt;

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#side

 VTKWrapper.setRenderWindowParentID(m_panel.Handle, .. also pass the panel size ..);