简体   繁体   English

在DrawingContext中绘制一个填充三角形

[英]Draw a filled triangle in DrawingContext

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 我试图使用DrawingContext绘制一个填充三角形,它在DrawingVisual渲染

Currently, I have managed to draw the outline of a triangle using the following C# code: 目前,我已设法使用以下C#代码绘制三角形的轮廓:

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: 我明白了:

未填充的三角形

How do I draw a triangle that, in addition to th border I have drawn also has a red fill? 如何绘制一个三角形,除了我绘制的边框还有红色填充?

填充三角形

Use dc.DrawGeometry to create filled-in shapes. 使用dc.DrawGeometry创建填充形状。

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. 另外,如果您必须创建PathGeometry并且使用DrawGeometry您也可以使用它, DrawGeometry您不需要原始的线条图。

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

Maybe a bit old but it might help somebody else. 也许有点旧,但它可能会帮助别人。 Instead of using PathGeometry it uses Stream geometry. 它不使用PathGeometry,而是使用Stream几何。 " This geometry is light-weight alternative to PathGeometry " 这种几何形状是PathGeometry的轻量级替代品

Point p1 = new Point(0, 50);
Point p2 = new Point(50, 0);
Point p3 = new Point(50, 100);
StreamGeometry streamGeometry = new StreamGeometry();
using (StreamGeometryContext geometryContext = streamGeometry.Open())   
{
    geometryContext.BeginFigure(p1, true, true);
    PointCollection points = new PointCollection{ p2, p3 };
    geometryContext.PolyLineTo(points, true, true);
}

streamGeometry.Freeze();
context.DrawGeometry(Brushes.Red, new Pen(Brushes.Black,3), streamGeometry);

More info about StreamGeometry here: https://msdn.microsoft.com/en-us/library/system.windows.media.streamgeometry.aspx 有关StreamGeometry的更多信息,请访问: https ://msdn.microsoft.com/en-us/library/system.windows.media.streamgeometry.aspx

Regards. 问候。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM