2013-11-15 1 views
3

나는 VB에서 WPF와 3D 게임을하고, 그리고 내가 http://3dtools.codeplex.com/releases/view/2058 발견 ScrennSpaceLines3D 개체를 사용하고 있지만이ViewPort에서 ScreenSpaceLines3D 개체를 제거 하시겠습니까?

mainViewport.Children.RemoveAt(i) 

를 사용하여 내가 뷰포트에 추가 행을 제거하려고 할 때 그것은을 제공합니다 NullExceptionError. 나는 이것이 렌더링 대기열에서 완전히 벗어나지 않았기 때문에 이것이라고 읽었습니다. C#에 대한 수정이 있었지만 아직 VB에서 작동하는 것을 찾지 못했습니다. 이 작업을하거나 3D 공간에서 선을 그릴 수있는 방법이 있습니까? 내가

+0

내가 말도 닷넷뿐만 아니라 괜찮은 차트 도구가 제공되지 않는 것을 발견을 ...하지만 많은 우리는 할 수 있습니다. C# 따기를 고려 했습니까? :). 또한,'ScrennSpaceLines3D'에 오타가 있습니다.'Screen'이어야합니다 ... 제가 사용하는 라이브러리가 2007 년 이래로 업데이트되지 않았던 것처럼 보입니다 ...] – Noctis

+0

글쎄, 왜 2 가지 이유가 있습니다. C# : 1.My 컴퓨터 클래스는 VB를 사용합니다. 2. C++보다는 C++을 사용하고 싶지만 사용할 수 없으므로 중요하지 않습니다. –

답변

0

제거 ... VB도 쉽게 3D 선을 그릴 수있는 방법이 없음을 꽤 말도 찾을 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; 
     } 
    } 
} 
관련 문제