남윤형

c# 스테이지 전체를 올렸음

도형간의 선을 그어주는 함수 추가
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
</configuration>
\ No newline at end of file
......@@ -9,60 +9,63 @@ using System.Windows.Forms;
namespace flowchart
{
// flowchart를 그리는 판넬에 필요한 기능을 삽입. (Panel 객체를 상속해서 사용했음)
// 마우스 클릭을 놓으면 어떤 도형을 선택했는지 판단해서, 해당 자료구조를 생성하고, 페인트 함수를 통해 그린다.
// 마우스 클릭을 놓으면 어떤 도형 또는 선을 선택했는지 판단해서, 해당 자료구조를 생성하고, 페인트 함수를 통해 그린다.
class CustomPanel : Panel
{
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; // 자료구조에서 찾은 도형을 임시 저장하는 변수
private String _state; // NONE, DRAW, MOVE
private String _figName; // NONE, RECTANGLE, RHOMBUS, LINKLINE, ETC
private List<FigBase> _shapes = new List<FigBase>(); // 도형을 저장한 리스트 자료구조
private List<FigLinkline> _linkLines = new List<FigLinkline>(); // 링크 선을 저장한 리스트 자료구조
// 변수를 클래스 밖에서 읽고 쓰게 하는 함수
private FigBase _linkStartShape = null; // 처음 선택한 도형을 저장하는 변수
private FigBase _movingShape = null; // 도형을 움직이겠다고 선택된 경우 해당 도형을 저장하는 변수
// private 변수를 클래스 밖에서 읽고 쓰게 하는 함수
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);
// System.Diagnostics.Trace.WriteLine("debug >>>" + _state); // 디버깅
// 마우스 버튼을 누르지 않은 상태일 경우
if (e.Button == MouseButtons.None )
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;
FigBase shape = FindShapeByLocation(e.Location);
if (shape != null)
Cursor = Cursors.SizeAll; // 도형 안에 마우스가 있을 경우
else
Cursor = Cursors.Default;
Cursor = Cursors.Default; // 도형 밖에 마우스 포인터가 있을 경우
if (shape != null && _figName == "LINKLINE") // 링크 라인을 그리겠다고 선택하고, 도형 안에 마우스가 있을 경우
Cursor = Cursors.Cross;
}
// 마우스를 클릭했을때
else if (e.Button == MouseButtons.Left)
// 마우스를 클릭한 상태에서 링크 라인을 그리지 않겠다고 선택된 경우
else if (e.Button == MouseButtons.Left && _figName != "LINKLINE")
{
foreach (FigBase s in _shapes)
FigBase shape = FindShapeByLocation(e.Location);
if (shape != null)
{
// 자료구조안의 위치와 동일할 경우 해당 자료구조를 다시 가져온다.
if (s.PointInRegion(e.Location))
{
_findShape = s;
break;
}
_state = "MOVE"; // 움직이는 상태로 바꿈
_movingShape = shape; // 해당 도형을 레퍼런스
}
// 도형을 찾았으면 움직이는 상태로 변경 후, 현재 마우스 위치를 저장함.
if (_findShape != null)
}
// 마우스를 클릭한 상태에서 링크 라인을 그리겠다고 선택한 경우
else if (e.Button == MouseButtons.Left && _figName == "LINKLINE")
{
if (_linkStartShape == null) // 처음 도형을 선택한것만 저장하기 위함. (다른 영역의 도형으로 넘어가도 실행안함)
{
State = "MOVE";
_dragStartPoint = e.Location;
_linkStartShape = FindShapeByLocation(e.Location);
if (_linkStartShape != null)
{
_state = "MOVE";
}
}
}
......@@ -72,36 +75,58 @@ namespace flowchart
// 실제 도형을 그리거나 이동하는 함수, 최종 OnPaint() 함수가 호출되어 실행됨
protected override void OnMouseUp(MouseEventArgs e)
{
//System.Diagnostics.Trace.WriteLine("debug >>>" + _state);
// 그리기 상태
if (State == "DRAW")
if (_state == "DRAW")
{
if (FigName == "RECTANGLE")
if (_figName == "RECTANGLE")
{
// 사각형에 대한 정보를 자료구조에 삽입한다.
FigRectangle rectangle = new FigRectangle(e.Location, new System.Drawing.Size(100, 100));
_shapes.Add(rectangle);
}
else if (FigName == "RHOMBUS")
else if (_figName == "RHOMBUS")
{
FigRhombus rhombus = new FigRhombus(e.Location, new System.Drawing.Size(100, 100));
_shapes.Add(rhombus);
}
else if (FigName == "TRIANGLE")
else if (_figName == "PARALLELOGRAM")
{
// TODO : 삼각형 그리기
FigParallelogram parallelogram = new FigParallelogram(e.Location, new System.Drawing.Size(100, 100));
_shapes.Add(parallelogram);
}
}
// 움직이는 상태
else if (State == "MOVE")
// 움직이는 상태이고 링크 라인을 그리지 않는 경우 (단순 도형 이동)
else if (_state == "MOVE" && _figName != "LINKLINE")
{
if (_findShape != null)
if (_movingShape != null)
{
_findShape.Location = e.Location;
_movingShape.Location = e.Location; // 찾은 도형의 위치값을 옮길위치로 수정
}
}
// 움직이는 상태이고 링크 라인을 그리는 경우 (링크 라인을 긋는 경우)
else if (_state == "MOVE" && _figName == "LINKLINE")
{
if (_linkStartShape != null)
{
FigBase shape = FindShapeByLocation(e.Location); // 마우스를 클릭을 놓은 위치에 도형이 있는지 확인
if (shape == null)
{
MessageBox.Show(this, "해당 위치에 연결대상 도형이 없습니다.", "알림",
MessageBoxButtons.OK, MessageBoxIcon.Information);
_linkStartShape = null; // mouse move 이벤트 함수에서 한번은 실행하게 처리
}
else
{
FigLinkline linkLine = new FigLinkline(_linkStartShape, shape); // 처음 선택한 도형과 현재 도형에 링크 라인을 연결 함
_linkLines.Add(linkLine);
_linkStartShape = null; // mouse move 이벤트 함수에서 한번은 실행하게 처리
}
}
}
State = "NONE";
_state = "NONE";
this.Refresh(); // 다시 그리기 요청: OnPaint()
base.OnMouseUp(e);
}
......@@ -109,12 +134,31 @@ namespace flowchart
// 실제 그리는 OnPaint를 통해 내가 작성한 Draw함수를 호출한다.
protected override void OnPaint(PaintEventArgs e)
{
// 자료구조에 저장된 도형을 다시 그림
foreach (FigBase s in _shapes)
{
s.Draw(e.Graphics);
}
// 자료구조에 저장된 링크라인을 다시 그림
foreach (FigLinkline l in _linkLines)
{
l.Draw(e.Graphics);
}
base.OnPaint(e);
}
// 현재 위치에 해당하는 도형을 자료구조에서 레퍼런스 함
private FigBase FindShapeByLocation(Point location)
{
foreach (FigBase s in _shapes)
{
if (s.PointInRegion(location))
{
return s;
}
}
return null;
}
}
}
......
......@@ -8,22 +8,41 @@ using System.Threading.Tasks;
namespace flowchart
{
// flowchart 도형을 그리는 클래스의 공통(부모 클래스)
// 변수: 위치(_location), 크기(_size)
// 함수: 그리기(Draw)
// 변수: 위치(_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; }
public Size Size { get => _size; set => _size = value; }
// 내부 변수를 외부에서 접근하는 함수
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)
......@@ -38,5 +57,14 @@ namespace flowchart
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
}
}
}
......
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace flowchart
{
class FigLinkline
{
private FigBase _startShape; // 링크 라인의 시작 위치
private FigBase _endShape; // 링크 라인의 종료 위치
public FigLinkline(FigBase startShape, FigBase endShape)
{
_startShape = startShape;
_endShape = endShape;
}
public void Draw(Graphics g)
{
using (Pen pen = new Pen(Color.Blue, 3f) { StartCap = LineCap.Round, EndCap = LineCap.Round })
{
Point[] pts = FindShortestLinkPoints(); // 두 도형의 최단거리를 계산하는 함수를 호출
g.DrawLine(pen, pts[0], pts[1]); // 실제 링크 라인을 처리
}
}
// 시작 도형의 4개 점과 종료 도형의 4개 점의 거리를 구해서 최단거리를 리턴한다.
private Point[] FindShortestLinkPoints()
{
double distance = Double.MaxValue;
Point[] results = new Point[] { Point.Empty, Point.Empty };
foreach (Point p1 in _startShape.LinkPoints)
{
foreach (Point p2 in _endShape.LinkPoints)
{
double newDistance = GetDistance(p1, p2); // 두점의 거리를 구하는 함수를 호출
if (newDistance < distance)
{
distance = newDistance;
results[0] = p1;
results[1] = p2;
}
}
}
return results;
}
// 주어진 두점의 거리만 구해서 리턴한다.
private double GetDistance(Point pt1, Point pt2)
{
double temp = Math.Pow(pt2.X - pt1.X, 2) + Math.Pow(pt2.Y - pt1.Y, 2);
return Math.Sqrt(temp);
}
}
}

namespace flowchart
{
partial class MainForm
{
/// <summary>
/// 필수 디자이너 변수입니다.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 사용 중인 모든 리소스를 정리합니다.
/// </summary>
/// <param name="disposing">관리되는 리소스를 삭제해야 하면 true이고, 그렇지 않으면 false입니다.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form 디자이너에서 생성한 코드
/// <summary>
/// 디자이너 지원에 필요한 메서드입니다.
/// 이 메서드의 내용을 코드 편집기로 수정하지 마세요.
/// </summary>
private void InitializeComponent()
{
this.btn_default = new System.Windows.Forms.Button();
this.btn_rectangle = new System.Windows.Forms.Button();
this.btn_rhombus = new System.Windows.Forms.Button();
this.btn_linkline = new System.Windows.Forms.Button();
this.CustomPanel = new flowchart.CustomPanel();
this.btn_parallelogram = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// btn_default
//
this.btn_default.Location = new System.Drawing.Point(34, 33);
this.btn_default.Name = "btn_default";
this.btn_default.Size = new System.Drawing.Size(105, 31);
this.btn_default.TabIndex = 0;
this.btn_default.Text = "default";
this.btn_default.UseVisualStyleBackColor = true;
this.btn_default.Click += new System.EventHandler(this.btn_default_Click_1);
//
// btn_rectangle
//
this.btn_rectangle.Location = new System.Drawing.Point(34, 155);
this.btn_rectangle.Name = "btn_rectangle";
this.btn_rectangle.Size = new System.Drawing.Size(105, 31);
this.btn_rectangle.TabIndex = 1;
this.btn_rectangle.Text = "process";
this.btn_rectangle.UseVisualStyleBackColor = true;
this.btn_rectangle.Click += new System.EventHandler(this.btn_rectangle_Click_1);
//
// btn_rhombus
//
this.btn_rhombus.Location = new System.Drawing.Point(34, 201);
this.btn_rhombus.Name = "btn_rhombus";
this.btn_rhombus.Size = new System.Drawing.Size(105, 31);
this.btn_rhombus.TabIndex = 2;
this.btn_rhombus.Text = "if";
this.btn_rhombus.UseVisualStyleBackColor = true;
this.btn_rhombus.Click += new System.EventHandler(this.btn_rhombus_Click_1);
//
// btn_linkline
//
this.btn_linkline.Location = new System.Drawing.Point(34, 256);
this.btn_linkline.Name = "btn_linkline";
this.btn_linkline.Size = new System.Drawing.Size(105, 31);
this.btn_linkline.TabIndex = 3;
this.btn_linkline.Text = "link line";
this.btn_linkline.UseVisualStyleBackColor = true;
this.btn_linkline.Click += new System.EventHandler(this.btn_linkline_Click);
//
// CustomPanel
//
this.CustomPanel.BackColor = System.Drawing.SystemColors.ActiveBorder;
this.CustomPanel.FigName = null;
this.CustomPanel.Location = new System.Drawing.Point(174, 10);
this.CustomPanel.Name = "CustomPanel";
this.CustomPanel.Size = new System.Drawing.Size(707, 533);
this.CustomPanel.State = null;
this.CustomPanel.TabIndex = 0;
//
// btn_parallelogram
//
this.btn_parallelogram.Location = new System.Drawing.Point(34, 105);
this.btn_parallelogram.Name = "btn_parallelogram";
this.btn_parallelogram.Size = new System.Drawing.Size(105, 31);
this.btn_parallelogram.TabIndex = 4;
this.btn_parallelogram.Text = "input";
this.btn_parallelogram.UseVisualStyleBackColor = true;
this.btn_parallelogram.Click += new System.EventHandler(this.btn_parallelogram_Click);
//
// MainForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(886, 547);
this.Controls.Add(this.btn_parallelogram);
this.Controls.Add(this.btn_linkline);
this.Controls.Add(this.btn_rhombus);
this.Controls.Add(this.btn_rectangle);
this.Controls.Add(this.btn_default);
this.Controls.Add(this.CustomPanel);
this.Name = "MainForm";
this.Text = "flowchart";
this.ResumeLayout(false);
}
#endregion
private CustomPanel CustomPanel;
private System.Windows.Forms.Button btn_default;
private System.Windows.Forms.Button btn_rectangle;
private System.Windows.Forms.Button btn_rhombus;
private System.Windows.Forms.Button btn_linkline;
private System.Windows.Forms.Button btn_parallelogram;
}
}
......@@ -17,25 +17,42 @@ namespace flowchart
InitializeComponent();
}
private void btn_default_Click(object sender, EventArgs e)
private void btn_default_Click_1(object sender, EventArgs e)
{
// 초기상태
CustomPanel.State = "NONE";
CustomPanel.FigName = "NONE";
CustomPanel.FigName = "NONE";
CustomPanel.Cursor = Cursors.Default;
}
private void btn_rectangle_Click(object sender, EventArgs e)
private void btn_rectangle_Click_1(object sender, EventArgs e)
{
CustomPanel.State = "DRAW"; // 도형을 그리겠다고 선택
CustomPanel.FigName = "RECTANGLE"; // 사각형을 선택
CustomPanel.Cursor = Cursors.Hand;
}
private void btn_rhombus_Click(object sender, EventArgs e)
private void btn_rhombus_Click_1(object sender, EventArgs e)
{
CustomPanel.State = "DRAW";
CustomPanel.FigName = "RHOMBUS";
CustomPanel.FigName = "RHOMBUS"; // 마름모를 선택
CustomPanel.Cursor = Cursors.Hand;
}
private void btn_parallelogram_Click(object sender, EventArgs e)
{
CustomPanel.State = "DRAW";
CustomPanel.FigName = "PARALLELOGRAM"; // 사각형을 선택
CustomPanel.Cursor = Cursors.Hand;
}
private void btn_linkline_Click(object sender, EventArgs e)
{
CustomPanel.State = "DRAW";
CustomPanel.FigName = "LINKLINE"; // 링크 라인을 선택
// CustomPanel.Cursor = Cursors.Hand;
}
}
}
......
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
\ No newline at end of file
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace flowchart
{
static class Program
{
/// <summary>
/// 해당 애플리케이션의 주 진입점입니다.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
}
}
No preview for this file type
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{F36248FE-508D-4E52-8992-8C170EC01E16}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>flowchart</RootNamespace>
<AssemblyName>flowchart</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="CustomPanel.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="FigBase.cs" />
<Compile Include="FigLinkline.cs" />
<Compile Include="FigParallelogram.cs" />
<Compile Include="FigRectangle.cs" />
<Compile Include="FigRhombus.cs" />
<Compile Include="MainForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="MainForm.Designer.cs">
<DependentUpon>MainForm.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="MainForm.resx">
<DependentUpon>MainForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
\ No newline at end of file

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.31313.79
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "flowchart", "flowchart.csproj", "{F36248FE-508D-4E52-8992-8C170EC01E16}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{F36248FE-508D-4E52-8992-8C170EC01E16}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F36248FE-508D-4E52-8992-8C170EC01E16}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F36248FE-508D-4E52-8992-8C170EC01E16}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F36248FE-508D-4E52-8992-8C170EC01E16}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {E647181D-3CFB-4ED2-9BA3-1BA9C663CD8D}
EndGlobalSection
EndGlobal