2010-10-26 39 views
2

我想绘制一个多边形的多个孔。我试过下面的代码,它不能正常工作。请指教。绘制具有多个孔的多边形?

PointF[] mypoly = new PointF[6 + 5 + 5]; 

    mypoly[0] = new PointF(0, 0); 
    mypoly[1] = new PointF(100, 0); 
    mypoly[2] = new PointF(100, 100); 
    mypoly[3] = new PointF(0, 100); 
    mypoly[4] = new PointF(10, 80); 
    mypoly[5] = new PointF(0, 0); 

    mypoly[6] = new PointF(10, 10); 
    mypoly[7] = new PointF(10, 20); 
    mypoly[8] = new PointF(20, 20); 
    mypoly[9] = new PointF(20, 10); 
    mypoly[10] = new PointF(10, 10); 

    mypoly[11] = new PointF(40, 10); 
    mypoly[12] = new PointF(40, 20); 
    mypoly[13] = new PointF(60, 20); 
    mypoly[14] = new PointF(60, 10); 
    mypoly[15] = new PointF(40, 10); 

    g.FillPolygon(new SolidBrush(Color.Red), mypoly, FillMode.Winding); 

第一部分是外部多边形。第二和第三部分是多边形内的两个孔。

+1

你得到了什么?有没有什么原因不能是3个单独的聚合物? – 2010-10-26 06:04:29

+0

您尝试过哪些FillMode?这控制着十字路口的呈现方式。 – 2010-10-26 06:28:35

+0

为什么不在一种颜色中绘制外部多边形而在内部绘制“背景”颜色? – 2010-10-27 10:02:55

回答

10

改为使用GraphicsPath。你可以用Graphics.FillPath来绘制,像这样:

using System.Drawing.Drawing2D; 
... 
    using (var gp = new GraphicsPath()) { 
     PointF[] outer = new PointF[] { new PointF(0, 0), new PointF(100, 0), 
      new PointF(100, 100), new PointF(0, 100), new PointF(10, 80),new PointF(0, 0) }; 
     gp.AddPolygon(outer); 
     PointF[] inner1 = new PointF[] { new PointF(10, 10), new PointF(10, 20), 
      new PointF(20, 20), new PointF(20, 10), new PointF(10, 10) }; 
     gp.AddPolygon(inner1); 
     PointF[] inner2 = new PointF[] { new PointF(40, 10), new PointF(40, 20), 
      new PointF(60, 20), new PointF(60, 10), new PointF(40, 10) }; 
     gp.AddPolygon(inner2); 
     e.Graphics.FillPath(Brushes.Black, gp); 
    } 
+0

在阅读您的答案之前,我已经找到了解决方案。它正好在Microsoft网站的FillPath参考页面上。他们和你的答案一样。 – 2010-10-27 22:42:01