Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

This is a follow up from this question.

Question:

I am trying to draw a filled triangle using DrawingContext, which is rendered on a DrawingVisual

Currently, I have managed to draw the outline of a triangle using the following C# code:

private DrawingVisual CreateTriangle()
  {
     DrawingVisual triangle = new DrawingVisual();
     using ( DrawingContext dc = triangle.RenderOpen() )
     {
         Pen drawingPen = new Pen(Brushes.Black,3);
         dc.DrawLine(drawingPen, new Point(0, 50), new Point(50, 0));
         dc.DrawLine(drawingPen, new Point(50, 0), new Point(50, 100));
         dc.DrawLine(drawingPen, new Point(50, 100), new Point(0, 50));

     }
     return triangle;
  }

I get this:

Unfilled Triangle

How do I draw a triangle that, in addition to th border I have drawn also has a red fill?

Filled Triangle

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
622 views
Welcome To Ask or Share your Answers For Others

1 Answer

Use dc.DrawGeometry to create filled-in shapes.

Edit: This:

private DrawingVisual CreateTriangle()
{
    var triangle = new DrawingVisual();
    using (DrawingContext dc = triangle.RenderOpen())
    {
       var start = new Point(0, 50);

       var segments = new []
       { 
          new LineSegment(new Point(50,0), true), 
          new LineSegment(new Point(50, 100), true)
       };

       var figure = new PathFigure(start, segments, true);
       var geo = new PathGeometry(new [] { figure });
       dc.DrawGeometry(Brushes.Red, null, geo);

       var drawingPen = new Pen(Brushes.Black, 3);
       dc.DrawLine(drawingPen, new Point(0, 50), new Point(50, 0));
       dc.DrawLine(drawingPen, new Point(50, 0), new Point(50, 100));
       dc.DrawLine(drawingPen, new Point(50, 100), new Point(0, 50));   
    }

    return triangle;
}

On a side note, if you have to create the PathGeometry anyway and you use DrawGeometry you might as well stroke it too, then you don't need your original line drawings.

dc.DrawGeometry(Brushes.Red, new Pen(Brushes.Black, 3), geo);

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share

548k questions

547k answers

4 comments

86.3k users

...