VTK呈现到C# [英] VTK Render into C#

查看:1794
本文介绍了VTK呈现到C#的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个使用VTK的c ++应用程序,我想有vtkRenderWindow并将其放入C#WPF项目,而不使用C#wrapper。

I have a c++ application that uses VTK, I want to have vtkRenderWindow and put it into C# WPF project without using C# wrapper.

推荐答案

这里的主要想法是将HWND设置为vtkRenderWindow的父节点

The main idea of this is to set the HWND as parent of the vtkRenderWindow

这是如何做的:
C ++ class:

Here is how to do that: 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类来包装C ++类,形式如下:

Create the CLR class to wrap the C++ class, in this form:

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窗体面板的位置:

How to use it from C#: Here is how to put on the place of Windows Forms panel:

window = new RenderWindows_CLR.RenderWindows_CLR(this.panel.Handle);
window.Render()

这里是如何穿上WPF:

Here is how to put on WPF:

HwndSource source = (HwndSource)HwndSource.FromVisual(this);
IntPtr hWnd = source.Handle;
window = new RenderWindows_CLR.RenderWindows_CLR(hWnd);

要删除标题栏,只需添加到C ++ DLL中(创建渲染窗口后) :

To delete the title bar, just add to the C++ DLL this (after the render window be created):

HWND window = (HWND)_render->GetGenericWindowId();
LONG style = GetWindowLong(window, GWL_STYLE) & ~(WS_BORDER | WS_DLGFRAME | WS_THICKFRAME);
SetWindowLong(window,-16L, style);

希望有帮助。

这篇关于VTK呈现到C#的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆