2014-12-04 3 views
0

ActiViz.NET 및 Visual Studio 2013을 사용하여 WPF 프로젝트의 vtk 라이브러리에서 RenderWindowControl을로드하려고합니다. 새 프로젝트를 수행 한 이후로 라이브러리가 올바르게 작동하지만 나는 그것을 내 작업에 통합하려고 시도하지만 배우는 보여주지 않습니다.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) 나는 배우 (Sphere)를 가져 와서 WPF로 선언 된 렌더링에 추가하지만 그것은 표시되지 않습니다. 나는 배경 색상을 변경하고 단지의 경우 렌더링하기 위해 전화를 시도했지만 여전히 아직. 감사에게 :(많이 작동하지

답변

0

전화

RenderControl.RenderWindow.Render(); 

대신

renderer.Render(); 
+0

의 :(를 작동하지 않습니다 – Sierra

+0

내 솔루션에 코드를 추가하고 올바르게 작동합니다. – JohnnyQ

+0

예, 연습해야하는 proyect에서도 작동합니다. render()를 호출하지 않고도 작동하지만 사용하면 작동하지 않습니다. 내 솔루션에있는 동일한 코드. 사실과 관련이 있다고 생각합니다. 두 번째 xaml에서 호출하는 것이고 아마도이 패널은 해당 항목에 적합하지 않을 수도 있습니다. – Sierra

관련 문제