VTK渲染成C#
我有一个使用VTK的c ++应用程序,我想拥有vtkRenderWindow并将其放入C#WPF项目而不使用C#包装器。
这样做的主要思想是将HWND设置为vtkRenderWindow的父级
以下是如何做到这一点:C ++类:
class MyRender { //attributes .... MyRender(HWND parent) { renderer = vtkSmartPointer::New(); _render = vtkSmartPointer::New(); _render->AddRenderer(renderer); interactor = vtkSmartPointer::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);
希望这有帮助。
上述就是C#学习教程:VTK渲染成C#分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/942834.html