FastReport
91 строка · 3.0 Кб
1using System.Drawing;2using System.Drawing.Drawing2D;3using System.Linq;4using FastReport.Utils;5
6namespace FastReport7{
8/// <summary>9/// Represents a polygon object.10/// </summary>11/// <remarks>12/// Use the <b>Border.Width</b>, <b>Border.Style</b> and <b>Border.Color</b> properties to set13/// the line width, style and color.14///15/// </remarks>16public partial class PolygonObject : PolyLineObject17{18#region Protected Methods19
20/// <summary>21/// Calculate GraphicsPath for draw to page22/// </summary>23/// <param name="pen">Pen for lines</param>24/// <param name="scaleX">scale by width</param>25/// <param name="scaleY">scale by height</param>26/// <returns>Always returns a non-empty path</returns>27protected GraphicsPath getPolygonPath(Pen pen, float scaleX, float scaleY)28{29GraphicsPath gp = base.GetPath(pen, AbsLeft, AbsTop, AbsRight, AbsBottom, scaleX, scaleY);30gp.CloseAllFigures();31return gp;32}33
34/// <summary>35/// Draw polyline path to graphics36/// </summary>37/// <param name="e">Event arguments</param>38protected override void drawPoly(FRPaintEventArgs e)39{40float x = (AbsLeft + Border.Width / 2) * e.ScaleX;41float y = (AbsTop + Border.Width / 2) * e.ScaleY;42float dx = (Width - Border.Width) * e.ScaleX - 1;43float dy = (Height - Border.Width) * e.ScaleY - 1;44
45Pen pen;46if (polygonSelectionMode == PolygonSelectionMode.MoveAndScale)47{48pen = e.Cache.GetPen(Border.Color, Border.Width * e.ScaleX, Border.DashStyle);49}50else pen = e.Cache.GetPen(Border.Color, 1, DashStyle.Solid);51
52Brush brush = null;53if (Fill is SolidFill)54brush = e.Cache.GetBrush((Fill as SolidFill).Color);55else56brush = Fill.CreateBrush(new RectangleF(x, y, dx, dy), e.ScaleX, e.ScaleY);57
58DrawUtils.SetPenDashPatternOrStyle(DashPattern, pen, Border);59
60using (GraphicsPath path = getPolygonPath(pen, e.ScaleX, e.ScaleY))61{62if (polygonSelectionMode == PolygonSelectionMode.MoveAndScale)63e.Graphics.FillAndDrawPath(pen, brush, path);64else65e.Graphics.DrawPath(pen, path);66}67}68
69#endregion70
71#region Public Methods72/// <inheritdoc/>73public override void Serialize(FRWriter writer)74{75Border.SimpleBorder = true;76base.Serialize(writer);77PolygonObject c = writer.DiffObject as PolygonObject;78}79
80#endregion81
82/// <summary>83/// Initializes a new instance of the <see cref="LineObject"/> class with default settings.84/// </summary>85public PolygonObject() : base()86{87FlagSimpleBorder = true;88FlagUseFill = true;89}90}91}