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

标签 c++ visual-studio-2012 vtk

我正在尝试将使用可视化工具包 (VTK) 库创建的场景嵌入到 VisualC++ 2012 创建的 Windows 窗体中,以便我可以设计我的 Windows native GUI 界面。

我想强调的是,所有带有控制台应用程序的示例都是使用 (Cmake) 配置的,使用 VC++2012 编译的,并且按照官方 VTK wiki 页面的说明完美运行。

问题是,如果我尝试在 Win Form 应用程序中调用那些 VTK 函数和类初始化,我会得到 错误 LNK1107:无效或损坏的文件:无法在 0x2E0 D:\.....\VTK_61_BUILD_VS2012\bin\Debug\vtkViewsCore-6.1.dll 即使我按预期正常添加所有内容,也包括 header 和外部库依赖项。

这让我觉得我源自错误的 Visual C++ 2012 项目模板或明显我完全缺失的东西,否则编译器会出现许多未找到的文件或语法错误。

这是我尝试调用 VTK 库的第一行,即使智能感知也建议 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();

这里有什么问题?

最佳答案

当我遇到同样的问题时,以下链接(特别是bnsteel先生的回答)对我帮助很大 ==>

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

您可以按照链接下的建议使用 Swig。但没有必要。使用类似的方式(传递 Windows 窗体面板句柄),您可以按照 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 ..);

关于c++ - 如何在 Windows 窗体项目中创建 VTK 项目 (VisualC++ 2012),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24161640/

相关文章:

C++ 覆盖成员变量 (std::vector)

c - 对静态函数运行单元测试

python - 如何从 tvtk PolyData 实例中提取顶点数据?

c++ - 使用 QVTK 在 Qt 中进行 PCL 可视化

c++ - 为什么 std::remove_const 不删除 const 限定符?

c++ - 从数组初始化 vector 出错

c++ - 套接字编程 C++ setsockopt()

c# - VS2012 + CRM 2011 : Microsoft. IdentityModel 引用错误

c# - 类型 "System.Net.Sockets.SocketException "的 Windows azure 异常

c# - VTK 中的大网格