Csharp/C#教程:VTK渲染成C#分享


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

(0)
上一篇 2021年11月13日
下一篇 2021年11月13日

精彩推荐