2014-04-04 1 views
3

누구나 DrawingContext을 저장하거나 Geometry으로 변환 할 수 있는지 알고 있습니까?DrawingContext를 기하학으로 변환 하시겠습니까?

예. 이후

using (DrawingContext dc = RenderOpen()) 
{ 
    dc.DrawLine(penSelected, Data.MidTop, Data.MidTop + vertical); 
    dc.DrawLine(pen, Data.MidTop - horizontal, Data.MidTop + thickness); 
    dc.DrawLine(pen, Data.MidTop + vertical - thickness, Data.MidTop + horizontal + vertical); 
    dc.DrawText(new FormattedText(Data.Time2.ToString("0.0"), cultureinfo, FlowDirection.LeftToRight, typeface, 8, Brushes.Black), 
     Data.MidTop + 3 * thickness); 
    dc.DrawText(new FormattedText(Data.Time2.ToString("0.0"), cultureinfo, FlowDirection.LeftToRight, typeface, 8, Brushes.Black), 
     Data.MidTop + vertical - horizontal - 3 * thickness); 
} 

어떻게 든 지오메트리에 그려진 개체를 저장 하시겠습니까?

+2

질문 : 당신은 그냥이 방법에 DrawingVisual과의 Drawing 속성 값을 전달할 것

public static Geometry CreateGeometry(DrawingGroup drawingGroup) { var geometry = new GeometryGroup(); foreach (var drawing in drawingGroup.Children) { if (drawing is GeometryDrawing) { geometry.Children.Add(((GeometryDrawing)drawing).Geometry); } else if (drawing is GlyphRunDrawing) { geometry.Children.Add(((GlyphRunDrawing)drawing).GlyphRun.BuildGeometry()); } else if (drawing is DrawingGroup) { geometry.Children.Add(CreateGeometry((DrawingGroup)drawing)); } } geometry.Transform = drawingGroup.Transform; return geometry; } 

DrawingVisual의 모든 그려진 컨텐츠에서 하나의 기하학을 얻는 방법은 무엇입니까? – Clemens

답변

8

시각적 내용으로 DrawingVisual을 채우는 경우 효과적으로 DrawingVisual의 Drawing 속성 (DrawingGroup 유형)으로 액세스 할 수있는 Drawing 개체의 계층 적 컬렉션을 만듭니다.

  • ImageDrawing
  • VideoDrawing
  • DrawingGroup 이들의
  • 두를 GlyphRunDrawing이

  • 속성을 제공하거나

    • GeometryDrawing : 이러한 그리기 개체의 각 사실은 다음 유형 중 하나입니다 메서드를 사용하여 기하학을 가져옵니다. GeometryDrawing에는 Geometry 속성이 있고 GlyphRunDrawing에는 GlyphRun 속성이 있고 GlyphRun 개체를 반환하는 것은 분명히 BuildGeometry 메서드입니다. 이 메서드는 GlyphRun의 텍스트 윤곽선의 도형을 반환합니다.

      같이 보일 수있는 DrawingGroup에서 지오메트리를 생성하는 정적 도우미 메서드 :

      var geometry = CreateGeometry(visual.Drawing); 
      
  • +0

    O 물론 네, 얼마나 좋은지. – Gerard

    +0

    대단 하네, +1! 널이 아닌 경우 도형에 대한 도면 변환도 적용해야합니다. 또한 두 개의 추가 케이스 (이미지 및 비디오)를 다루기 위해 Rect 속성을 사용할 수 있습니다. 정확성은 기하학의 목적에 따라 다릅니다. – MaMazav

    +0

    @MaMazav 좋은 지적. 변환 부분을 추가했습니다. – Clemens

    관련 문제