2014-12-04 3 views
0

Я пытаюсь загрузить RenderWindowControl из библиотек vtk в свой проект WPF с использованием ActiViz.NET и Visual Studio 2013. Библиотека отлично работает, так как я сделал новый проект, чтобы практиковать на нем, но когда Я пытаюсь интегрировать его в свою работу, актер не показан. Это мой код:VtkActor не отображается в проекте WPF

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) Я принимаю актера (сферу), и я добавляю его в рендер, объявленный в WPF, но он не отображается. Я пытался изменить цвет фона и вызвать, чтобы сделать только в том случае, но это все еще не работает :(

ответ

0

Вызов

RenderControl.RenderWindow.Render(); 

вместо

renderer.Render(); 
+0

все еще не работает :(. Большое спасибо для справки. – Sierra

+0

Я добавил ваш код в мое решение и его работоспособность – JohnnyQ

+0

Да, он также работает на proyect, который мне приходится практиковать, он работает даже без вызова функции render(), но это не происходит, когда я использую тот же код на моем решении. Я думаю, что это имеет какое-то отношение к факту что я вызываю его со второго xaml и, возможно, панель не подходит для элемента. – Sierra

Смежные вопросы