Toggle navigation
Toggle navigation
This project
Loading...
Sign in
남윤형
/
flowchart_draw
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Snippets
Network
Create a new issue
Builds
Commits
Issue Boards
Authored by
남윤형
2021-05-19 09:44:09 +0900
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
be84fd56ff78ce8d9df85330e86b8f912990e2cd
be84fd56
1 parent
f9ddfed0
각 도형의 위치를 마우스로 클릭해서 이동하게 해줌
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
102 additions
and
24 deletions
CustomPanel.cs
FigBase.cs
FigRhombus.cs
MainForm.cs
CustomPanel.cs
View file @
be84fd5
using
System
;
using
System.Collections.Generic
;
using
System.Drawing
;
using
System.Linq
;
using
System.Text
;
using
System.Threading.Tasks
;
...
...
@@ -11,32 +12,97 @@ namespace flowchart
// 마우스 클릭을 놓으면 어떤 도형을 선택했는지 판단해서, 해당 자료구조를 생성하고, 페인트 함수를 통해 그린다.
class
CustomPanel
:
Panel
{
private
String
_selectName
;
private
List
<
FigBase
>
_shapes
=
new
List
<
FigBase
>();
private
String
_figName
;
// NONE, RECTANGLE, RHOMBUS
private
List
<
FigBase
>
_shapes
=
new
List
<
FigBase
>();
// 선택된 도형을 저장한 리스트 자료구조
private
String
_state
;
// NONE, DRAW, MOVE
private
Point
_dragStartPoint
=
new
Point
(-
1
,
-
1
);
// 도형을 움직일때 시작위치
private
FigBase
_findShape
=
null
;
// 자료구조에서 찾은 도형을 임시 저장하는 변수
public
string
SelectName
{
get
=>
_selectName
;
set
=>
_selectName
=
value
;
}
// 변수를 클래스 밖에서 읽고 쓰게 하는 함수
public
string
FigName
{
get
{
return
_figName
;
}
set
{
_figName
=
value
;
}
}
public
String
State
{
get
{
return
_state
;
}
set
{
_state
=
value
;
}
}
// 마우스를 판넬에서 움질일때 호출되는 이벤트
protected
override
void
OnMouseMove
(
MouseEventArgs
e
)
{
// System.Diagnostics.Trace.WriteLine("debug >>>" + e.Location);
// 마우스 버튼을 누르지 않은 상태일 경우
if
(
e
.
Button
==
MouseButtons
.
None
)
{
bool
find
=
false
;
foreach
(
FigBase
s
in
_shapes
)
{
// 현재 마우스 위치가 지금껏 그린 리스트 자료구조 안의 도형의 영역안에 있는지 확인
if
(
s
.
PointInRegion
(
e
.
Location
))
{
find
=
true
;
}
}
// 그려진 도형위에 마우스가 오면 마우스 모양을 변경
if
(
find
)
Cursor
=
Cursors
.
SizeAll
;
else
Cursor
=
Cursors
.
Default
;
}
// 마우스를 클릭했을때
else
if
(
e
.
Button
==
MouseButtons
.
Left
)
{
foreach
(
FigBase
s
in
_shapes
)
{
// 자료구조안의 위치와 동일할 경우 해당 자료구조를 다시 가져온다.
if
(
s
.
PointInRegion
(
e
.
Location
))
{
_findShape
=
s
;
break
;
}
}
// 도형을 찾았으면 움직이는 상태로 변경 후, 현재 마우스 위치를 저장함.
if
(
_findShape
!=
null
)
{
State
=
"MOVE"
;
_dragStartPoint
=
e
.
Location
;
}
}
base
.
OnMouseMove
(
e
);
}
// 실제 도형을 그리거나 이동하는 함수, 최종 OnPaint() 함수가 호출되어 실행됨
protected
override
void
OnMouseUp
(
MouseEventArgs
e
)
{
//MessageBox.Show("Added shape. " + SelectName + " " + e.Location.ToString());
// 그리기 상태
if
(
State
==
"DRAW"
)
{
if
(
Select
Name
==
"RECTANGLE"
)
if
(
Fig
Name
==
"RECTANGLE"
)
{
// 사각형에 대한 정보를 자료구조에 삽입한다.
FigRectangle
rectangle
=
new
FigRectangle
(
e
.
Location
,
new
System
.
Drawing
.
Size
(
100
,
100
));
_shapes
.
Add
(
rectangle
);
}
else
if
(
SelectName
==
"ELLIPSE
"
)
else
if
(
FigName
==
"RHOMBUS
"
)
{
// TODO : 원 그리기
FigRhombus
rhombus
=
new
FigRhombus
(
e
.
Location
,
new
System
.
Drawing
.
Size
(
100
,
100
));
_shapes
.
Add
(
rhombus
);
}
else
if
(
Select
Name
==
"TRIANGLE"
)
else
if
(
Fig
Name
==
"TRIANGLE"
)
{
// TODO : 삼각형 그리기
}
}
// 움직이는 상태
else
if
(
State
==
"MOVE"
)
{
if
(
_findShape
!=
null
)
{
_findShape
.
Location
=
e
.
Location
;
}
}
this
.
Cursor
=
Cursors
.
Default
;
this
.
Refresh
();
// 다시 그리기 요청
State
=
"NONE"
;
this
.
Refresh
();
// 다시 그리기 요청
: OnPaint()
base
.
OnMouseUp
(
e
);
}
...
...
FigBase.cs
View file @
be84fd5
...
...
@@ -31,5 +31,12 @@ namespace flowchart
}
// 현재 마우스의 위치가 해당 영역내에 있는지를 판단하는 함수
public
virtual
bool
PointInRegion
(
Point
mousePoint
)
{
Rectangle
rect
=
new
Rectangle
(
_location
,
_size
);
return
rect
.
Contains
(
mousePoint
);
}
}
}
...
...
FigRhombus.cs
View file @
be84fd5
...
...
@@ -7,8 +7,6 @@ using System.Threading.Tasks;
namespace
flowchart
{
// 프로세스 마름모를 그리는 클래스(FigureBase를 상속)
// Draw 함수에서 마름모를 그린다.
class
FigRhombus
:
FigBase
{
// 생성자도 상속해서 사용.
...
...
@@ -21,21 +19,19 @@ namespace flowchart
{
using
(
Pen
pen
=
new
Pen
(
Color
.
Red
,
1
))
{
System
.
Drawing
.
Rectangle
rect
=
new
System
.
Drawing
.
Rectangle
(
this
.
Location
,
this
.
Size
);
// 마름모 그리는 함수
//Rectangle rect = new Rectangle(this.Location, this.Size);
int
x1
,
x2
,
x3
,
y1
,
y2
,
y3
;
x1
=
Location
.
X
;
x2
=
x1
+
Size
.
Width
/
2
;
x3
=
x1
+
Size
.
Width
;
x2
=
Location
.
X
+
Size
.
Width
/
2
;
x3
=
Location
.
X
+
Size
.
Width
;
y1
=
Location
.
Y
;
y2
=
y1
-
Size
.
Height
/
2
;
y3
=
y1
-
Size
.
Height
;
y2
=
Location
.
Y
+
Size
.
Height
/
2
;
y3
=
Location
.
Y
+
Size
.
Height
;
g
.
DrawLine
(
pen
,
x1
,
y2
,
x2
,
y1
);
g
.
DrawLine
(
pen
,
x2
,
y1
,
x3
,
y2
);
g
.
DrawLine
(
pen
,
x3
,
y2
,
x2
,
y3
);
g
.
DrawLine
(
pen
,
x2
,
y3
,
x1
,
y2
);
}
base
.
Draw
(
g
);
...
...
MainForm.cs
View file @
be84fd5
...
...
@@ -17,16 +17,25 @@ namespace flowchart
InitializeComponent
();
}
private
void
btn_rec_Click
(
object
sender
,
EventArgs
e
)
private
void
btn_default_Click
(
object
sender
,
EventArgs
e
)
{
CustomPanel
.
State
=
"NONE"
;
CustomPanel
.
FigName
=
"NONE"
;
CustomPanel
.
Cursor
=
Cursors
.
Default
;
}
private
void
btn_rectangle_Click
(
object
sender
,
EventArgs
e
)
{
CustomPanel
.
SelectName
=
"RECTANGLE"
;
CustomPanel
.
State
=
"DRAW"
;
// 도형을 그리겠다고 선택
CustomPanel
.
FigName
=
"RECTANGLE"
;
// 사각형을 선택
CustomPanel
.
Cursor
=
Cursors
.
Hand
;
}
private
void
btn_
default
_Click
(
object
sender
,
EventArgs
e
)
private
void
btn_
rhombus
_Click
(
object
sender
,
EventArgs
e
)
{
CustomPanel
.
SelectName
=
"NONE"
;
CustomPanel
.
Cursor
=
Cursors
.
Default
;
CustomPanel
.
State
=
"DRAW"
;
CustomPanel
.
FigName
=
"RHOMBUS"
;
CustomPanel
.
Cursor
=
Cursors
.
Hand
;
}
}
}
...
...
Please
register
or
login
to post a comment