private void InscribePolygon(PaintGraphics graphics, PaintRectangleF rectangle, int numSides) { float Radius = (float)((double)Math.Min(rectangle.Width, rectangle.Height) / 2.0); ShapePointF Center = new ShapePointF( (float)(rectangle.Location.X + rectangle.Width / 2.0), (float)(rectangle.Location.Y + rectangle.Height / 2.0)); PaintRectangleF rectangleF = new PaintRectangleF(Center, new ShaipSizeF(1, 1)); rectangleF.Inflate(Radius, Radius); float Sides = (float)numSides; float ExteriorAngle = (float)360 / Sides; float InteriorAngle = (Sides - (float)2) / Sides * (float)180; float SideLength = (float)2 * Radius * (float)Math.Sin(Math.PI / (double)Sides); for (int i = 1; i <= Sides; i++) { graphics.ResetTransform(); graphics.TranslateTransform(Center.X, Center.Y); graphics.RotateTransform((i - 1) * ExteriorAngle); graphics.TranslateTransform(0, -Radius); graphics.RotateTransform(180 - InteriorAngle / 2); graphics.MySmoothingMode = EPaintSmoothingMode.AntiAlias; PaintPen pen = new PaintPen(Color, Thickness); pen.StartCap = EPaintLineCap.Round; pen.EndCap = EPaintLineCap.Round; graphics.DrawLine( pen, new ShapePointF(0, 0).ToPointF(), new ShapePointF(0, -SideLength).ToPointF()); } }
public override void Draw(PaintGraphics graphics) { (int x, int y, int width, int height) = CalculateHexagon(); if (width == 0 || height == 0) { return; } if (Cornes == 0) { Cornes = _cornes; } width += Thickness; height += Thickness; int Radius = (int)((double)Math.Min(width, height) / (double)2.0 * (double)0.8); ShapePointF Center = new ShapePointF((int)((double)width / (double)2.0), (int)((double)height / (double)2.0)); PaintRectangleF rectangle = new PaintRectangleF(Center, new ShaipSizeF(1, 1)); rectangle.Inflate(Radius, Radius); PaintImage img = new PaintBitmap(Size.Width, Size.Height); PaintGraphics tmpGraphics = PaintGraphics.FromImage(img); InscribePolygon(tmpGraphics, rectangle, _cornes); graphics.DrawImage(img, x, y); }