FastReport

Форк
0
/
PolygonObject.cs 
91 строка · 3.0 Кб
1
using System.Drawing;
2
using System.Drawing.Drawing2D;
3
using System.Linq;
4
using FastReport.Utils;
5

6
namespace FastReport
7
{
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 set 
13
    /// the line width, style and color.
14
    /// 
15
    /// </remarks>
16
    public partial class PolygonObject : PolyLineObject
17
    {
18
        #region Protected Methods
19

20
        /// <summary>
21
        /// Calculate GraphicsPath for draw to page
22
        /// </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>
27
        protected GraphicsPath getPolygonPath(Pen pen, float scaleX, float scaleY)
28
        {
29
            GraphicsPath gp = base.GetPath(pen, AbsLeft, AbsTop, AbsRight, AbsBottom, scaleX, scaleY);
30
            gp.CloseAllFigures();
31
            return gp;
32
        }
33

34
        /// <summary>
35
        /// Draw polyline path to graphics
36
        /// </summary>
37
        /// <param name="e">Event arguments</param>
38
        protected override void drawPoly(FRPaintEventArgs e)
39
        {
40
            float x = (AbsLeft + Border.Width / 2) * e.ScaleX;
41
            float y = (AbsTop + Border.Width / 2) * e.ScaleY;
42
            float dx = (Width - Border.Width) * e.ScaleX - 1;
43
            float dy = (Height - Border.Width) * e.ScaleY - 1;
44

45
            Pen pen;
46
            if (polygonSelectionMode == PolygonSelectionMode.MoveAndScale)
47
            {
48
                pen = e.Cache.GetPen(Border.Color, Border.Width * e.ScaleX, Border.DashStyle);
49
            }
50
            else pen = e.Cache.GetPen(Border.Color, 1, DashStyle.Solid);
51

52
            Brush brush = null;
53
            if (Fill is SolidFill)
54
                brush = e.Cache.GetBrush((Fill as SolidFill).Color);
55
            else
56
                brush = Fill.CreateBrush(new RectangleF(x, y, dx, dy), e.ScaleX, e.ScaleY);
57

58
            DrawUtils.SetPenDashPatternOrStyle(DashPattern, pen, Border);
59

60
            using (GraphicsPath path = getPolygonPath(pen, e.ScaleX, e.ScaleY))
61
            {
62
                if (polygonSelectionMode == PolygonSelectionMode.MoveAndScale)
63
                    e.Graphics.FillAndDrawPath(pen, brush, path);
64
                else
65
                    e.Graphics.DrawPath(pen, path);
66
            }
67
        }
68

69
        #endregion
70

71
        #region Public Methods
72
        /// <inheritdoc/>
73
        public override void Serialize(FRWriter writer)
74
        {
75
            Border.SimpleBorder = true;
76
            base.Serialize(writer);
77
            PolygonObject c = writer.DiffObject as PolygonObject;
78
        }
79

80
        #endregion
81

82
        /// <summary>
83
        /// Initializes a new instance of the <see cref="LineObject"/> class with default settings.
84
        /// </summary>
85
        public PolygonObject() : base()
86
        {
87
            FlagSimpleBorder = true;
88
            FlagUseFill = true;
89
        }
90
    }
91
}

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.