VTK 渲染成 C#
Posted
技术标签:
【中文标题】VTK 渲染成 C#【英文标题】:VTK Render into C# 【发布时间】:2015-05-18 10:42:59 【问题描述】:我有一个使用 VTK 的 c++ 应用程序,我想拥有 vtkRenderWindow 并将其放入 C# WPF 项目中,而不使用 C# 包装器。
【问题讨论】:
【参考方案1】:这样做的主要思想是将 HWND 设置为 vtkRenderWindow 的父级
这里是如何做到这一点: C++类:
class MyRender
//attributes
....
MyRender(HWND parent)
renderer = vtkSmartPointer<vtkRenderer>::New();
_render = vtkSmartPointer<vtkRenderWindow>::New();
_render->AddRenderer(renderer);
interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
interactor->SetRenderWindow(_render);
//setting background
renderer->SetBackground(0.1, 0.2, 0.4);
_render->SetParentId(parent);
void Render()
interactor->Initialize();
_render->Render();
//...more methods
创建 CLR 类以包装 C++ 类,格式如下:
class RenderWindows_CLR
//attributes
MyRender* renderWindow;
RenderWindows_CLR::RenderWindows_CLR::RenderWindows_CLR(IntPtr parent)
renderWindow = new MyRender((HWND)parent.ToPointer());
void RenderWindows_CLR::RenderWindows_CLR::Render(IntPtr parent)
renderWindow->Render();
如何在 C# 中使用它: 下面是如何放置 Windows 窗体面板的位置:
window = new RenderWindows_CLR.RenderWindows_CLR(this.panel.Handle);
window.Render()
以下是 WPF 的安装方法:
HwndSource source = (HwndSource)HwndSource.FromVisual(this);
IntPtr hWnd = source.Handle;
window = new RenderWindows_CLR.RenderWindows_CLR(hWnd);
要删除标题栏,只需在 C++ DLL 中添加这个(在创建渲染窗口之后):
HWND window = (HWND)_render->GetGenericWindowId();
LONG style = GetWindowLong(window, GWL_STYLE) & ~(WS_BORDER | WS_DLGFRAME | WS_THICKFRAME);
SetWindowLong(window,-16L, style);
希望对您有所帮助。
【讨论】:
HwndSource source = (HwndSource)HwndSource.FromVisual(this); IntPtr hWnd = source.Handle;
它没有返回任何句柄。如何获得手柄?
从Loaded
获取句柄事件处理程序确实给了non nullptr
hndl
以上是关于VTK 渲染成 C#的主要内容,如果未能解决你的问题,请参考以下文章
将文件BMP链读入VTK并通过Python+QT渲染体积3d