VTK 渲染到 C#
VTK Render into C#
我有一个使用 VTK 的 C++ 应用程序,我想要 vtkRenderWindow 并将其放入 C# WPF 项目而不使用 C# 包装器。
这里的主要思想是将HWND设置为vtkRenderWindow
的parent
操作方法如下:
C++ class:
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 class 来包装 C++ class,形式如下:
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(在创建渲染 window 之后):
HWND window = (HWND)_render->GetGenericWindowId();
LONG style = GetWindowLong(window, GWL_STYLE) & ~(WS_BORDER | WS_DLGFRAME | WS_THICKFRAME);
SetWindowLong(window,-16L, style);
希望对您有所帮助。
我有一个使用 VTK 的 C++ 应用程序,我想要 vtkRenderWindow 并将其放入 C# WPF 项目而不使用 C# 包装器。
这里的主要思想是将HWND设置为vtkRenderWindow
的parent操作方法如下: C++ class:
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 class 来包装 C++ class,形式如下:
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(在创建渲染 window 之后):
HWND window = (HWND)_render->GetGenericWindowId();
LONG style = GetWindowLong(window, GWL_STYLE) & ~(WS_BORDER | WS_DLGFRAME | WS_THICKFRAME);
SetWindowLong(window,-16L, style);
希望对您有所帮助。