FigBase.cs
2.5 KB
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
70
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace flowchart
{
// flowchart 도형을 그리는 클래스의 공통(부모 클래스)
// 변수: 위치(_location), 크기(_size). 링크선 위치(_linkPoints)
// 함수: 그리기(Draw), 영역내에 있는지 확인(PointInRegion)
class FigBase
{
private Point _location; // 위치 변수
private Size _size; // 크기 변수
private Point[] _linkPoints = new Point[] { Point.Empty, Point.Empty, Point.Empty, Point.Empty }; // Top, Left, Bottom, Right
protected FigBase(Point location, Size size) // 생성자 (위치와 크기를 저장)
{
_location = location;
_size = size;
CalculateLinkPoint();
}
// 내부 변수를 외부에서 접근하는 함수
public Point Location
{
get => _location;
set
{
_location = value;
CalculateLinkPoint(); // 선을 연결하기 위해 도형 주위의 4개의 위치값을 재계산
}
}
public Size Size
{
get => _size;
set
{
_size = value;
CalculateLinkPoint(); // 선을 연결하기 위해 도형 주위의 4개의 위치값을 재계산
}
}
public Point[] LinkPoints { get => _linkPoints; set => _linkPoints = value; }
// 자식 클래스에 필요한 공통 함수
public virtual void Draw(Graphics g)
{
}
// 현재 마우스의 위치가 해당 영역내에 있는지를 판단하는 함수
public virtual bool PointInRegion(Point mousePoint)
{
Rectangle rect = new Rectangle(_location, _size);
return rect.Contains(mousePoint);
}
// 도형의 주위의 4군데 위치를 저장
private void CalculateLinkPoint()
{
_linkPoints[0] = new Point(_location.X + (int)(((float)_size.Width) / 2), _location.Y); // Top
_linkPoints[1] = new Point(_location.X, _location.Y + (int)(((float)_size.Height) / 2)); // Left
_linkPoints[2] = new Point(_location.X + (int)(((float)_size.Width) / 2), _location.Y + _size.Height); // Bottom
_linkPoints[3] = new Point(_location.X + _size.Width, _location.Y + (int)(((float)_size.Height) / 2)); // Right
}
}
}