Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- namespace Graph
- {
- public partial class Form1 : Form
- {
- public string fileName;
- int vertexRadious = 10 + 50 / 5;
- int mouseX;
- int mouseY;
- Font mainFont;
- Brush mainBrush = new SolidBrush(Color.Black);
- Brush whiteBrush = new SolidBrush(Color.White);
- Pen mainPen = new Pen(Color.Black, 2);
- Pen redPen = new Pen(Color.Black, 3);
- Graph mainGraph = new Graph();
- Graphics graphics;
- Bitmap map;
- bool forButton3 = false;
- bool forButton4 = false;
- bool forButton5 = false;
- bool forButton7 = false;
- List<int> commonList = new List<int>();
- int selectedCount = 0;
- public Form1()
- {
- InitializeComponent();
- }
- private void Form1_Load(object sender, EventArgs e)
- {
- map = new Bitmap(pictureBox1.Width, pictureBox1.Height);
- graphics = Graphics.FromImage(map);
- }
- private void Button2_Click (object sender, EventArgs e)
- {
- setAllFalse();
- drawGraph();
- pictureBox1.Image = map;
- }
- private void drawGraph()
- {
- graphics.Clear(Color.White);
- if (mainGraph.getCount() < 5)
- vertexRadious = 10 + 50 / 5;
- else
- vertexRadious = 10 + 50 / mainGraph.getCount();
- mainFont = new Font ("Arial", vertexRadious / 2);
- int varForAngle = 0;
- int circleRadious = 200;
- int centerX = pictureBox1.Width / 2;
- int centerY = pictureBox1.Height / 2;
- int topLeftX;
- int topLeftY;
- Pen pen1 = new Pen(Color.Black, 1);
- for (int i = 0; i < mainGraph.getCount(); i++)
- {
- topLeftX = Convert.ToInt32 (centerX + circleRadious * Math.Cos (varForAngle * Math.PI / mainGraph.getCount()) - vertexRadious);
- topLeftY = Convert.ToInt32 (centerY + circleRadious * Math.Sin (varForAngle * Math.PI / mainGraph.getCount()) - vertexRadious);
- drawVertex(topLeftX, topLeftY, mainGraph.index(i).getNumber() - 1);
- varForAngle += 2;
- }
- for (int i = 0; i < mainGraph.getCount(); i++)
- {
- drawLinesBetweenVertexes(mainGraph.index(i));
- }
- for (int i = 0; i < mainGraph.getCount(); i++)
- {
- drawVertex(mainGraph.index(i).getX() - vertexRadious, mainGraph.index(i).getY() - vertexRadious, mainGraph.index(i).getNumber() - 1);
- }
- }
- private void drawVertex(int topLeftX, int topLeftY, int vertexNumber)
- {
- if (mainGraph.getCount() < 5)
- vertexRadious = 10 + 50 / 5;
- else
- vertexRadious = 10 + 50 / mainGraph.getCount();
- mainFont = new Font("Arial", vertexRadious / 2);
- mainGraph.index(vertexNumber).setCoordinates(topLeftX + vertexRadious, topLeftY + vertexRadious);
- graphics.DrawEllipse (mainPen, topLeftX, topLeftY, vertexRadious * 2, vertexRadious * 2);
- graphics.DrawString (Convert.ToString (mainGraph.index(vertexNumber).getNumber()), mainFont, mainBrush,
- topLeftX + vertexRadious - mainFont.GetHeight() / 2, topLeftY + vertexRadious - mainFont.GetHeight() / 2);
- }
- private void drawLinesBetweenVertexes(Vertex newVertex)
- {
- List <int> newList = newVertex.getList();
- for (int i = 0; i < newList.Count; i++)
- {
- if (newList[i] != 0)
- {
- graphics.DrawLine (mainPen, newVertex.getX(), newVertex.getY(), mainGraph.index(i).getX(), mainGraph.index(i).getY());
- graphics.FillEllipse (whiteBrush, newVertex.getX() - vertexRadious - 2, newVertex.getY() - vertexRadious - 2, (vertexRadious + 2) * 2, (vertexRadious + 2) * 2);
- graphics.FillEllipse (whiteBrush, mainGraph.index(i).getX() - vertexRadious, mainGraph.index(i).getY() - vertexRadious, vertexRadious * 2, vertexRadious * 2);
- graphics.DrawString (Convert.ToString(newVertex.getList()[i]), mainFont, mainBrush,
- (newVertex.getX() + mainGraph.index(i).getX()) / 2, (newVertex.getY() + mainGraph.index(i).getY()) / 2);
- }
- }
- }
- private void drawLineBetweenTwoNew(Vertex one, Vertex two, string distance)
- {redrawGraph();
- graphics.DrawLine(mainPen, one.getX(), one.getY(), two.getX(), two.getY());
- graphics.FillEllipse(whiteBrush, one.getX() - vertexRadious - 2, one.getY() - vertexRadious - 2, (vertexRadious + 2) * 2, (vertexRadious + 2) * 2);
- graphics.FillEllipse(whiteBrush, two.getX() - vertexRadious - 2, two.getY() - vertexRadious - 2, (vertexRadious + 2) * 2, (vertexRadious + 2) * 2);
- graphics.DrawString(distance, mainFont, mainBrush,
- (one.getX() + two.getX()) / 2, (one.getY() + two.getY()) / 2);
- drawVertex(one.getX() - vertexRadious, one.getY() - vertexRadious, one.getNumber() - 1);
- drawVertex(two.getX() - vertexRadious, two.getY() - vertexRadious, two.getNumber() - 1);
- mainGraph.addNewPath(mainGraph.index(one.getNumber() - 1), mainGraph.index(two.getNumber() - 1), Convert.ToInt32(distance));
- }
- private void drawSelectedVertex(Vertex chosenOne)
- {
- graphics.FillEllipse(whiteBrush, chosenOne.getX() - vertexRadious - 2, chosenOne.getY() - vertexRadious - 2, (vertexRadious + 2) * 2, (vertexRadious + 2) * 2);
- graphics.DrawEllipse(redPen, chosenOne.getX() - vertexRadious, chosenOne.getY() - vertexRadious, vertexRadious * 2, vertexRadious * 2);
- graphics.DrawString(Convert.ToString(chosenOne.getNumber()), mainFont, mainBrush,
- chosenOne.getX() - mainFont.GetHeight() / 2, chosenOne.getY() - mainFont.GetHeight() / 2);
- }
- private void drawLineBetweenSelected(Vertex one, Vertex two)
- {
- graphics.DrawLine(redPen, one.getX(), one.getY(), two.getX(), two.getY());
- graphics.FillEllipse(whiteBrush, one.getX() - vertexRadious - 2, one.getY() - vertexRadious - 2, (vertexRadious + 2) * 2, (vertexRadious + 2) * 2);
- graphics.FillEllipse(whiteBrush, two.getX() - vertexRadious - 2, two.getY() - vertexRadious - 2, (vertexRadious + 2) * 2, (vertexRadious + 2) * 2);
- drawSelectedVertex(one);
- drawSelectedVertex(two);
- }
- private void drawNeighbors(Vertex main)
- {
- drawSelectedVertex(main);
- List<int> tempList = main.getList();
- for (int i = 0; i < tempList.Count; i++)
- {
- if (tempList[i] != 0)
- {
- drawLineBetweenSelected(main, mainGraph.index(i));
- }
- }
- }
- private void redrawGraph()
- {
- graphics.Clear(Color.White);
- for (int i = 0; i < mainGraph.getCount(); i++)
- {
- drawLinesBetweenVertexes(mainGraph.index(i));
- }
- for (int i = 0; i < mainGraph.getCount(); i++)
- {
- drawVertex(mainGraph.index(i).getX() - vertexRadious, mainGraph.index(i).getY() - vertexRadious, mainGraph.index(i).getNumber() - 1);
- }
- }
- private void PictureBox1_MouseClick(object sender, MouseEventArgs e)
- {
- mouseX = e.X;
- mouseY = e.Y;
- if (forButton3 == true)
- {
- int tempInt = checkSelecting(mouseX, mouseY);
- if (tempInt == -1)
- {
- mainGraph.addNewVertex();
- mainGraph.index(mainGraph.getCount() - 1).setCoordinates(mouseX, mouseY);
- drawVertex(mouseX - vertexRadious, mouseY - vertexRadious, mainGraph.index(mainGraph.getCount() - 1).getNumber() - 1);
- }
- pictureBox1.Image = map;
- }
- else
- {
- if (forButton4 == true)
- {
- int tempInt = checkSelecting(mouseX, mouseY);
- if (tempInt != -1)
- {
- commonList.Add(tempInt);
- drawSelectedVertex(mainGraph.index(tempInt - 1));
- selectedCount++;
- }
- if (selectedCount == 2)
- {
- string tempString = Microsoft.VisualBasic.Interaction.InputBox("Введите число:");
- drawLineBetweenTwoNew(mainGraph.index(commonList[0] - 1), mainGraph.index(commonList[1] - 1), tempString);
- selectedCount = 0;
- commonList.Clear();
- }
- pictureBox1.Image = map;
- }
- else
- {
- if (forButton5 == true)
- {
- int tempInt = checkSelecting(mouseX, mouseY);
- if (tempInt != -1)
- {
- mainGraph.deleteVertex(tempInt - 1);
- redrawGraph();
- }
- pictureBox1.Image = map;
- }
- else
- {
- if (forButton7 == true)
- {
- int tempInt = checkSelecting(mouseX, mouseY);
- if (tempInt != -1)
- {
- redrawGraph();
- drawNeighbors(mainGraph.index(tempInt - 1));
- }
- else
- {
- redrawGraph();
- }
- pictureBox1.Image = map;
- }
- }
- }
- }
- }
- private int checkSelecting(int mouseX, int mouseY)
- {
- List <int> newList = new List<int>();
- for (int i = 0; i < mainGraph.getCount(); i++)
- {
- if (mouseX >= mainGraph.index(i).getX() - vertexRadious && mouseX <= mainGraph.index(i).getX() + vertexRadious
- && mouseY >= mainGraph.index(i).getY() - vertexRadious && mouseY <= mainGraph.index(i).getY() + vertexRadious)
- {
- return mainGraph.index(i).getNumber();
- }
- }
- return -1;
- }
- private void Button3_Click(object sender, EventArgs e)
- {
- redrawGraph();
- pictureBox1.Image = map;
- forButton3 = true;
- forButton4 = false;
- forButton5 = false;
- forButton7 = false;
- }
- private void Button4_Click(object sender, EventArgs e)
- {
- redrawGraph();
- pictureBox1.Image = map;
- forButton3 = false;
- forButton4 = true;
- forButton5 = false;
- forButton7 = false;
- }
- private void Button5_Click(object sender, EventArgs e)
- {
- redrawGraph();
- pictureBox1.Image = map;
- forButton3 = false;
- forButton4 = false;
- forButton5 = true;
- forButton7 = false;
- }
- private void Button6_Click(object sender, EventArgs e)
- {
- clearAll();
- }
- private void Button7_Click(object sender, EventArgs e)
- {
- forButton3 = false;
- forButton4 = false;
- forButton5 = false;
- forButton7 = true;
- }
- private void clearAll()
- {
- graphics.Clear(Color.White);
- mainGraph.deleteAll();
- pictureBox1.Image = map;
- }
- private void clearAllWithoutWarning()
- {
- graphics.Clear(Color.White);
- pictureBox1.Image = map;
- }
- private void setAllFalse()
- {
- forButton3 = false;
- forButton4 = false;
- forButton5 = false;
- forButton7 = false;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement