[英]VTK Render into C#
我有一个使用VTK的C ++应用程序,我想拥有vtkRenderWindow并将其放入C#WPF项目而不使用C#包装器。
The main idea of this is to set the HWND as parent of the vtkRenderWindow 其主要思想是将HWND设置为vtkRenderWindow的父级
Here is how to do that: C++ class: 这是这样做的方法: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
}
Create the CLR class to wrap the C++ class, in this form: 创建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();
}
}
How to use it from C#: Here is how to put on the place of Windows Forms panel: 如何从C#使用它:这是如何放置Windows窗体面板的位置:
window = new RenderWindows_CLR.RenderWindows_CLR(this.panel.Handle);
window.Render()
Here is how to put on WPF: 这是穿上WPF的方法:
HwndSource source = (HwndSource)HwndSource.FromVisual(this);
IntPtr hWnd = source.Handle;
window = new RenderWindows_CLR.RenderWindows_CLR(hWnd);
To delete the title bar, just add to the C++ DLL this (after the render window be created): 要删除标题栏,只需将其添加到C ++ DLL中(在创建渲染窗口之后):
HWND window = (HWND)_render->GetGenericWindowId();
LONG style = GetWindowLong(window, GWL_STYLE) & ~(WS_BORDER | WS_DLGFRAME | WS_THICKFRAME);
SetWindowLong(window,-16L, style);
Hope this help. 希望对您有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.