代码之家  ›  专栏  ›  技术社区  ›  Héctor M.

如何绘制平行四边形集合线

  •  1
  • Héctor M.  · 技术社区  · 8 年前

    出于美观考虑,我想创建一条由平行四边形组成的直线,如下所示:

    enter image description here

    但事实证明,OnPaint覆盖事件只允许您绘制矩形:

    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);
    
        Rectangle[] rectangles = new Rectangle[]
        {
             new Rectangle(0, 0, 100, 30),
             new Rectangle(100, 0, 100, 30),
             new Rectangle(200, 0, 100, 30),
             new Rectangle(300, 0, 100, 30),
             new Rectangle(400, 0, 100, 30),
        };
    
        e.Graphics.DrawRectangles(new Pen(Brushes.Black), rectangles);
    }
    

    我的问题是,我需要将矩形转换为平行四边形,并为每个矩形赋予不同的颜色。

    1 回复  |  直到 8 年前
        1
  •  1
  •   LarsTech    8 年前

    FillPolygon可以执行以下操作:

    protected override void OnPaint(PaintEventArgs e) {
      base.OnPaint(e);
      e.Graphics.Clear(Color.White);
    
      int x = 10;
      int y = 10;
      int width = 148;
      int height = 64;
      int lean = 36;
      Color[] colors = new[] { Color.FromArgb(169, 198, 254),
                               Color.FromArgb(226, 112, 112),
                               Color.FromArgb(255, 226, 112),
                               Color.FromArgb(112, 226, 112),
                               Color.FromArgb(165, 142, 170)};
    
      e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
      for (int i = 0; i < colors.Length; ++i) {
        using (SolidBrush br = new SolidBrush(colors[i])) {
          e.Graphics.FillPolygon(br, new Point[] { new Point(x, y),
                                                   new Point(x + lean, y + height),
                                                   new Point(x + lean + width, y + height),
                                                   new Point(x + width, y)});
          x += width;
        }
      }
    }