VtkActor 不显示在 WPF 项目中

本文关键字:项目 WPF 显示 VtkActor | 更新日期: 2023-09-27 18:33:02

我正在尝试使用 ActiViz.NET 和Visual Studio 2013从WPF项目的vtk库中加载RenderWindowControl。该库运行良好,因为我做了一个新项目只是为了练习它,但是当我尝试将其集成到我的作品中时,没有显示演员。这是我的代码:

MainWindow.xaml:

<Window x:Class="myProject.Views.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:VtkTab="clr-namespace:myProject.Views.UITabs.VtkTab"
    x:Name="Mainwindow"
    MinHeight="600"
    MinWidth="800"
    Title="{Binding Title}"
    Height="720"
    Width="1280"
    Icon="{StaticResource ApplicationIcon}"
    Loaded="OnLoaded"
    DataContext="{Binding Main, Source={StaticResource ViewModelLocator}}"
    Style="{StaticResource WindowStyle}"
    mc:Ignorable="d">
    <DockPanel>
        <TabControl>
        ....
        ....
        <VtkTab:VtkTabView />
        ....
        .... 
        </TabControl>
    </DockPanel>
</Window>

VtkTabView.xaml:

<UserControl x:Class="myProject.Views.UITabs.VtkTab.VtkTabView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:vtk="clr-namespace:Kitware.VTK;assembly=Kitware.VTK"
        Height="480" Width="640">
        <WindowsFormsHost Name="Wfh">
            <vtk:RenderWindowControl x:Name="RenderControl" />
        </WindowsFormsHost>
</UserControl>

VtkTabView.xaml.cs:

public partial class UITabView
{
    protected static Random _random = new Random();
    vtkActor actor = vtkActor.New();
    public VtkTabView()
    {
        InitializeComponent();
        var sphere = vtkSphereSource.New();
        sphere.SetThetaResolution(8);
        sphere.SetPhiResolution(16);
        var shrink = vtkShrinkPolyData.New();
        shrink.SetInputConnection(sphere.GetOutputPort());
        shrink.SetShrinkFactor(0.9);
        var move = vtkTransform.New();
        move.Translate(_random.NextDouble(), _random.NextDouble(), _random.NextDouble());
        var moveFilter = vtkTransformPolyDataFilter.New();
        moveFilter.SetTransform(move);
        moveFilter.SetInputConnection(shrink.GetOutputPort());
        var mapper = vtkPolyDataMapper.New();
        mapper.SetInputConnection(moveFilter.GetOutputPort());
        // The actor links the data pipeline to the rendering subsystem 
        actor.SetMapper(mapper);
        actor.GetProperty().SetColor(1, 0, 0);
        RenderControl.Load += RenderWindowControlOnLoad;
    }
    void RenderWindowControlOnLoad(object sender, EventArgs e)
    {
        var renderer = RenderControl.RenderWindow.GetRenderers().GetFirstRenderer();
        renderer.AddActor(actor);
        renderer.SetBackground(0, 1, 0);
        renderer.Render();
    }
}

如您所见,在方法RenderWindowControlOnLoad (VtkTabView.xaml.cs)中,我获取actor(一个球体)并将其添加到声明到WPF中的呈现中,但它没有显示。我试图更改背景颜色并调用渲染以防万一,但它仍然无法正常工作:(

VtkActor 不显示在 WPF 项目中

调用

RenderControl.RenderWindow.Render();

而不是

renderer.Render();