Hexagon.cs 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using SkiaSharp;
  6. namespace FlowChartV2.Libraries
  7. {
  8. public class Hexagon : Figure
  9. {
  10. public Hexagon(Point start, string text) : base(FigureTypes.Hexagon, text)
  11. {
  12. tsize = (int)new SKPaint().MeasureText(text) + 1;
  13. this.size = new Size(hfont + 10, Convert.ToInt32(tsize + 10));
  14. int hhsize = size.h / 2, hwsize = size.w / 2;
  15. this.start = new Point(start.x - hwsize, start.y);
  16. this.left = new Point(this.start.x - size.h, this.start.y + hhsize);
  17. this.bottom = new Point(this.start.x + hwsize, this.start.y + size.h);
  18. this.right = new Point(this.start.x + size.w + this.size.h, start.y + hhsize);
  19. this.top = new Point(this.start.x + hwsize, this.start.y);
  20. this.center = new Point(this.start.x + hwsize, this.start.y + hhsize);
  21. }
  22. public override void Draw(ref SKCanvas canvas, SKPaint paint)
  23. {
  24. SKPoint[] points =
  25. {
  26. new SKPoint(left.x,left.y),
  27. new SKPoint(start.x,start.y),
  28. new SKPoint(start.x,start.y),
  29. new SKPoint(start.x + size.w,start.y),
  30. new SKPoint(start.x + size.w,start.y),
  31. new SKPoint(right.x,right.y),
  32. new SKPoint(right.x,right.y),
  33. new SKPoint(start.x + size.w,start.y + size.h),
  34. new SKPoint(start.x + size.w,start.y + size.h),
  35. new SKPoint(start.x,start.y + size.h),
  36. new SKPoint(start.x,start.y + size.h),
  37. new SKPoint(left.x,left.y),
  38. };
  39. canvas.DrawPoints(SKPointMode.Lines, points, paint);
  40. }
  41. public override void DrawText(ref SKCanvas canvas, SKPaint paint)
  42. {
  43. int x = start.x + (size.w - tsize) / 2, y = (size.h + start.y) - size.h / 2 + 4;
  44. canvas.DrawText(text, x, y, paint);
  45. }
  46. }
  47. }