پیاده سازی پروژه نقاشی شی گرا *قسمت پنجم*
سه شنبه, ۱۹ خرداد ۱۳۹۴، ۰۸:۱۳ ب.ظ
مطالب قبل:
پیاده سازی پروژه نقاشی شی گرا *قسمت اول*
پیاده سازی پروژه نقاشی شی گرا *قسمت دوم*
پیاده سازی پروژه نقاشی شی گرا *قسمت سوم*
پیاده سازی پروژه نقاشی شی گرا *قسمت چهارم*
در این پست به شرح کلاس Rectangle جهت رسم مستطیل و Square جهت رسم مربع میپردازیم
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
using System.Drawing;
namespace PWS.ObjectOrientedPaint.Models
{ /// <summary>
/// Rectangle
/// </summary>
public class Rectangle : Shape
{
#region Constructors (2)
/// <summary>
/// Initializes a new instance of the <see cref="Rectangle" /> class.
/// </summary>
/// <param name="startPoint">The start point.</param>
/// <param name="endPoint">The end point.</param>
/// <param name="zIndex">Index of the z.</param>
/// <param name="foreColor">Color of the fore.</param>
/// <param name="thickness">The thickness.</param>
/// <param name="isFill">if set to <c>true</c> [is fill].</param>
/// <param name="backgroundColor">Color of the background.</param>
public Rectangle(PointF startPoint, PointF endPoint, int zIndex, Color foreColor, byte thickness, bool isFill, Color backgroundColor)
: base (startPoint, endPoint, zIndex, foreColor, thickness, isFill, backgroundColor)
{
ShapeType = ShapeType.Rectangle;
}
/// <summary>
/// Initializes a new instance of the <see cref="Rectangle" /> class.
/// </summary>
public Rectangle()
{
ShapeType = ShapeType.Rectangle;
}
#endregion Constructors
#region Methods (1)
// Public Methods (1)
/// <summary>
/// Draws the specified g.
/// </summary>
/// <param name="g">The g.</param>
public override void Draw(Graphics g)
{
if (IsFill)
g.FillRectangle(BackgroundBrush, StartPoint.X, StartPoint.Y, Width, Height);
g.DrawRectangle(Pen, StartPoint.X, StartPoint.Y, Width, Height);
base .Draw(g);
}
#endregion Methods
}
} |
کلاس Rectangle از کلاس پایه طراحی شده در ^ ارث بری دارد. این کلاس ساده بوده و تنها شامل یک سازنده و متد ترسیم شی مستطیل میباشد.
کلاس بعدی کلاس Square میباشد، که از کلاس بالا (Rectangle) ارث بری داشته است، کدهای این کلاس را در زیر مشاهده میکنید.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
using System;
using System.Drawing;
namespace PWS.ObjectOrientedPaint.Models
{ /// <summary>
/// Square
/// </summary>
public class Square : Rectangle
{
#region Constructors (2) /// <summary>
/// Initializes a new instance of the <see cref="Square" /> class.
/// </summary>
/// <param name="startPoint">The start point.</param>
/// <param name="endPoint">The end point.</param>
/// <param name="zIndex">Index of the z.</param>
/// <param name="foreColor">Color of the fore.</param>
/// <param name="thickness">The thickness.</param>
/// <param name="isFill">if set to <c>true</c> [is fill].</param>
/// <param name="backgroundColor">Color of the background.</param>
public Square(PointF startPoint, PointF endPoint, int zIndex, Color foreColor, byte thickness, bool isFill, Color backgroundColor)
{
float x = 0, y = 0;
float width = Math.Abs(endPoint.X - startPoint.X);
float height = Math.Abs(endPoint.Y - startPoint.Y);
if (startPoint.X <= endPoint.X && startPoint.Y <= endPoint.Y)
{
x = startPoint.X;
y = startPoint.Y;
}
else if (startPoint.X >= endPoint.X && startPoint.Y >= endPoint.Y)
{
x = endPoint.X;
y = endPoint.Y;
}
else if (startPoint.X >= endPoint.X && startPoint.Y <= endPoint.Y)
{
x = endPoint.X;
y = startPoint.Y;
}
else if (startPoint.X <= endPoint.X && startPoint.Y >= endPoint.Y)
{
x = startPoint.X;
y = endPoint.Y;
}
StartPoint = new PointF(x, y);
var side = Math.Max(width, height);
EndPoint = new PointF(x+side, y+side);
ShapeType = ShapeType.Square;
Zindex = zIndex;
ForeColor = foreColor;
Thickness = thickness;
BackgroundColor = backgroundColor;
IsFill = isFill;
}
/// <summary>
/// Initializes a new instance of the <see cref="Square" /> class.
/// </summary>
public Square()
{
ShapeType = ShapeType.Square;
}
#endregion Constructors }
} |
این کلاس شامل دو سازنده میباشد که سازنده دوم فقط نوع شی را تعیین میکند و بقیه کارهای آن مانند مستطیل است، در واقع میتوان از یک دیدگاه گفت که مربع یک مستطیل است که اندازه طول و عرض آن یکسان است. در سازنده اول (نحوه ترسیم شکل) ابتدا نقاط ابتدا و انتهای رسم شکل تعیین شده و سپس با توجه به پارامترهای محاسبه شده نوع شی جهت ترسیم و دیگر خصوصیات کلاس مقدار دهی میشود، با این تفاوت که در نقطه EndPoint طول و عرض مربع برابر با بزرگترین مقدار طول و عرض وارد شده در سازنده کلاس تعیین شده و مربع شکل میگیرد. مابقی متدهای ترسیم و ... طبق کلاس پایه مستطیل و Shape تعیین میشود.