【问题标题】:VTK Render into C#VTK 渲染成 C#
【发布时间】:2015-05-18 10:42:59
【问题描述】:

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

【问题讨论】:

    标签: c# c++ wpf vtk


    【解决方案1】:

    这样做的主要思想是将 HWND 设置为 vtkRenderWindow 的父级

    这里是如何做到这一点: 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
    }
    

    创建 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);
    

    希望对您有所帮助。

    【讨论】:

    • HwndSource source = (HwndSource)HwndSource.FromVisual(this); IntPtr hWnd = source.Handle; 它没有返回任何句柄。如何获得手柄?
    • Loaded获取句柄事件处理程序确实给了non nullptrhndl
    猜你喜欢
    • 2019-11-10
    • 2021-04-22
    • 1970-01-01
    • 1970-01-01
    • 2016-08-15
    • 1970-01-01
    • 1970-01-01
    • 2013-08-10
    • 2018-05-11
    相关资源
    最近更新 更多