2013-11-15 64 views
3

我想提出一個3D遊戲與WPF在VB和我使用的是ScrennSpaceLines3D對象,我發現 http://3dtools.codeplex.com/releases/view/2058 但是當我嘗試使用從ViewPort中移除ScreenSpaceLines3D對象?

mainViewport.Children.RemoveAt(i) 

刪除線我加入視它給出了一個NullExceptionError。我讀過這是因爲它不會完全脫離渲染隊列。已經修復了c#,但我還沒有找到一個與VB一起工作的。有沒有辦法讓這項工作或可能在3D空間中畫一條線?我覺得挺可笑的是VB甚至沒有辦法輕鬆地繪製3D線條...

+0

我覺得可笑的是.NET沒有拿出一個像樣的繪圖工具,以及...但沒有太多可以做。你有沒有考慮收購C#? :)。另外,你在'ScrennSpaceLines3D'中有一個錯字,應該是'屏幕'我相信... [看起來像你使用的圖書館自2007年以來沒有更新...只是說...] – Noctis

+0

那麼,2個原因爲什麼我我不接受C#:1.我的計算機課程使用VB。 2.我寧願使用C++而不使用C#,但我不能使用,因此無關緊要。 –

回答

0

刪除ScreenSpaceLines3D:

  foreach (ScreenSpaceLines3D line3D in lines3DList) 
      { 
       lines3D.Points.Clear(); // Very importante 
       _viewport3D.Children.Remove(lines3D); 
      } 
0

我有點遲到了,但我有相同的問題。發生

訪問衝突,因爲每個實例寄存器的事件處理程序,以所述組合物的目標

public ScreenSpaceLines3D() 
{ 
    ... 

    CompositionTarget.Rendering += OnRender; // <-- this line 
} 

的渲染事件,但忘記當實例從現場移除以將其刪除。

因此,要解決這個問題,你需要觸摸的源代碼:

public ScreenSpaceLines3D() 
{ 
    ... 

    // event registration removed 
} 

private bool AttachedToCompositionTargetRendering { get; set; } 

protected override void OnVisualParentChanged(DependencyObject oldParent) 
{ 
    base.OnVisualParentChanged(oldParent); 

    var parent = VisualTreeHelper.GetParent(this); 

    if (parent == null) 
    { 
     if (AttachedToCompositionTargetRendering) 
     { 
      CompositionTarget.Rendering -= OnRender; 

      AttachedToCompositionTargetRendering = false; 
     } 
    } 
    else 
    { 
     if (!AttachedToCompositionTargetRendering) 
     { 
      CompositionTarget.Rendering += OnRender; 

      AttachedToCompositionTargetRendering = true; 
     } 
    } 
}