Advertisement
Guest User

Untitled

a guest
Nov 18th, 2019
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 12.71 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10.  
  11. namespace Graph
  12. {
  13.     public partial class Form1 : Form
  14.     {
  15.         public string fileName;
  16.         int vertexRadious = 10 + 50 / 5;
  17.         int mouseX;
  18.         int mouseY;
  19.         Font mainFont;
  20.         Brush mainBrush = new SolidBrush(Color.Black);
  21.         Brush whiteBrush = new SolidBrush(Color.White);
  22.         Pen mainPen = new Pen(Color.Black, 2);
  23.         Pen redPen = new Pen(Color.Black, 3);
  24.         Graph mainGraph = new Graph();
  25.         Graphics graphics;
  26.         Bitmap map;
  27.         bool forButton3 = false;
  28.         bool forButton4 = false;
  29.         bool forButton5 = false;
  30.         bool forButton7 = false;
  31.         List<int> commonList = new List<int>();
  32.         int selectedCount = 0;
  33.  
  34.         public Form1()
  35.         {
  36.             InitializeComponent();
  37.         }
  38.  
  39.         private void Form1_Load(object sender, EventArgs e)
  40.         {
  41.             map = new Bitmap(pictureBox1.Width, pictureBox1.Height);
  42.             graphics = Graphics.FromImage(map);
  43.         }
  44.  
  45.         private void Button2_Click (object sender, EventArgs e)
  46.         {
  47.             setAllFalse();
  48.             drawGraph();
  49.             pictureBox1.Image = map;
  50.         }
  51.  
  52.         private void drawGraph()
  53.         {
  54.             graphics.Clear(Color.White);
  55.             if (mainGraph.getCount() < 5)
  56.                 vertexRadious = 10 + 50 / 5;
  57.             else
  58.                 vertexRadious = 10 + 50 / mainGraph.getCount();
  59.  
  60.             mainFont = new Font ("Arial", vertexRadious / 2);
  61.             int varForAngle = 0;
  62.             int circleRadious = 200;
  63.             int centerX = pictureBox1.Width / 2;
  64.             int centerY = pictureBox1.Height / 2;
  65.             int topLeftX;
  66.             int topLeftY;
  67.  
  68.             Pen pen1 = new Pen(Color.Black, 1);
  69.  
  70.             for (int i = 0; i < mainGraph.getCount(); i++)
  71.             {
  72.                 topLeftX = Convert.ToInt32 (centerX + circleRadious * Math.Cos (varForAngle * Math.PI / mainGraph.getCount()) - vertexRadious);
  73.                 topLeftY = Convert.ToInt32 (centerY + circleRadious * Math.Sin (varForAngle * Math.PI / mainGraph.getCount()) - vertexRadious);
  74.  
  75.                 drawVertex(topLeftX, topLeftY, mainGraph.index(i).getNumber() - 1);
  76.                 varForAngle += 2;
  77.             }
  78.  
  79.             for (int i = 0; i < mainGraph.getCount(); i++)
  80.             {
  81.                 drawLinesBetweenVertexes(mainGraph.index(i));
  82.             }
  83.             for (int i = 0; i < mainGraph.getCount(); i++)
  84.             {
  85.                 drawVertex(mainGraph.index(i).getX() - vertexRadious, mainGraph.index(i).getY() - vertexRadious, mainGraph.index(i).getNumber() - 1);
  86.             }
  87.         }
  88.  
  89.         private void drawVertex(int topLeftX, int topLeftY, int vertexNumber)
  90.         {
  91.             if (mainGraph.getCount() < 5)
  92.                 vertexRadious = 10 + 50 / 5;
  93.             else
  94.                 vertexRadious = 10 + 50 / mainGraph.getCount();
  95.  
  96.             mainFont = new Font("Arial", vertexRadious / 2);
  97.             mainGraph.index(vertexNumber).setCoordinates(topLeftX + vertexRadious, topLeftY + vertexRadious);
  98.  
  99.             graphics.DrawEllipse (mainPen, topLeftX, topLeftY, vertexRadious * 2, vertexRadious * 2);
  100.             graphics.DrawString (Convert.ToString (mainGraph.index(vertexNumber).getNumber()), mainFont, mainBrush,
  101.                 topLeftX + vertexRadious - mainFont.GetHeight() / 2, topLeftY + vertexRadious - mainFont.GetHeight() / 2);
  102.         }
  103.  
  104.         private void drawLinesBetweenVertexes(Vertex newVertex)
  105.         {
  106.             List <int> newList = newVertex.getList();
  107.             for (int i = 0; i < newList.Count; i++)
  108.             {
  109.                 if (newList[i] != 0)
  110.                 {
  111.                     graphics.DrawLine (mainPen, newVertex.getX(), newVertex.getY(), mainGraph.index(i).getX(), mainGraph.index(i).getY());
  112.                     graphics.FillEllipse (whiteBrush, newVertex.getX() - vertexRadious - 2, newVertex.getY() - vertexRadious - 2, (vertexRadious + 2) * 2, (vertexRadious + 2) * 2);
  113.                     graphics.FillEllipse (whiteBrush, mainGraph.index(i).getX() - vertexRadious, mainGraph.index(i).getY() - vertexRadious, vertexRadious * 2, vertexRadious * 2);
  114.                     graphics.DrawString (Convert.ToString(newVertex.getList()[i]), mainFont, mainBrush,
  115.                         (newVertex.getX() + mainGraph.index(i).getX()) / 2, (newVertex.getY() + mainGraph.index(i).getY()) / 2);
  116.                 }
  117.             }
  118.         }
  119.  
  120.         private void drawLineBetweenTwoNew(Vertex one, Vertex two, string distance)
  121.         {redrawGraph();
  122.             graphics.DrawLine(mainPen, one.getX(), one.getY(), two.getX(), two.getY());
  123.             graphics.FillEllipse(whiteBrush, one.getX() - vertexRadious - 2, one.getY() - vertexRadious - 2, (vertexRadious + 2) * 2, (vertexRadious + 2) * 2);
  124.             graphics.FillEllipse(whiteBrush, two.getX() - vertexRadious - 2, two.getY() - vertexRadious - 2, (vertexRadious + 2) * 2, (vertexRadious + 2) * 2);
  125.             graphics.DrawString(distance, mainFont, mainBrush,
  126.                         (one.getX() + two.getX()) / 2, (one.getY() + two.getY()) / 2);
  127.  
  128.             drawVertex(one.getX() - vertexRadious, one.getY() - vertexRadious, one.getNumber() - 1);
  129.             drawVertex(two.getX() - vertexRadious, two.getY() - vertexRadious, two.getNumber() - 1);
  130.             mainGraph.addNewPath(mainGraph.index(one.getNumber() - 1), mainGraph.index(two.getNumber() - 1), Convert.ToInt32(distance));
  131.         }
  132.  
  133.         private void drawSelectedVertex(Vertex chosenOne)
  134.         {
  135.             graphics.FillEllipse(whiteBrush, chosenOne.getX() - vertexRadious - 2, chosenOne.getY() - vertexRadious - 2, (vertexRadious + 2) * 2, (vertexRadious + 2) * 2);
  136.             graphics.DrawEllipse(redPen, chosenOne.getX() - vertexRadious, chosenOne.getY() - vertexRadious, vertexRadious * 2, vertexRadious * 2);
  137.             graphics.DrawString(Convert.ToString(chosenOne.getNumber()), mainFont, mainBrush,
  138.                 chosenOne.getX() - mainFont.GetHeight() / 2, chosenOne.getY() - mainFont.GetHeight() / 2);
  139.         }
  140.  
  141.         private void drawLineBetweenSelected(Vertex one, Vertex two)
  142.         {
  143.             graphics.DrawLine(redPen, one.getX(), one.getY(), two.getX(), two.getY());
  144.             graphics.FillEllipse(whiteBrush, one.getX() - vertexRadious - 2, one.getY() - vertexRadious - 2, (vertexRadious + 2) * 2, (vertexRadious + 2) * 2);
  145.             graphics.FillEllipse(whiteBrush, two.getX() - vertexRadious - 2, two.getY() - vertexRadious - 2, (vertexRadious + 2) * 2, (vertexRadious + 2) * 2);
  146.             drawSelectedVertex(one);
  147.             drawSelectedVertex(two);
  148.         }
  149.  
  150.         private void drawNeighbors(Vertex main)
  151.         {
  152.             drawSelectedVertex(main);
  153.             List<int> tempList = main.getList();
  154.             for (int i = 0; i < tempList.Count; i++)
  155.             {
  156.                 if (tempList[i] != 0)
  157.                 {
  158.                     drawLineBetweenSelected(main, mainGraph.index(i));
  159.                 }
  160.             }
  161.         }
  162.  
  163.         private void redrawGraph()
  164.         {
  165.             graphics.Clear(Color.White);
  166.             for (int i = 0; i < mainGraph.getCount(); i++)
  167.             {
  168.                 drawLinesBetweenVertexes(mainGraph.index(i));
  169.             }
  170.  
  171.             for (int i = 0; i < mainGraph.getCount(); i++)
  172.             {
  173.                 drawVertex(mainGraph.index(i).getX() - vertexRadious, mainGraph.index(i).getY() - vertexRadious, mainGraph.index(i).getNumber() - 1);
  174.             }
  175.         }
  176.  
  177.         private void PictureBox1_MouseClick(object sender, MouseEventArgs e)
  178.         {
  179.             mouseX = e.X;
  180.             mouseY = e.Y;
  181.             if (forButton3 == true)
  182.             {
  183.                 int tempInt = checkSelecting(mouseX, mouseY);
  184.                 if (tempInt == -1)
  185.                 {
  186.                     mainGraph.addNewVertex();
  187.                     mainGraph.index(mainGraph.getCount() - 1).setCoordinates(mouseX, mouseY);
  188.                     drawVertex(mouseX - vertexRadious, mouseY - vertexRadious, mainGraph.index(mainGraph.getCount() - 1).getNumber() - 1);
  189.                 }
  190.                
  191.                 pictureBox1.Image = map;
  192.             }
  193.             else
  194.             {
  195.                 if (forButton4 == true)
  196.                 {
  197.                     int tempInt = checkSelecting(mouseX, mouseY);
  198.                     if (tempInt != -1)
  199.                     {
  200.                         commonList.Add(tempInt);
  201.                         drawSelectedVertex(mainGraph.index(tempInt - 1));
  202.                         selectedCount++;
  203.                     }
  204.  
  205.                     if (selectedCount == 2)
  206.                     {
  207.                         string tempString = Microsoft.VisualBasic.Interaction.InputBox("Введите число:");
  208.                         drawLineBetweenTwoNew(mainGraph.index(commonList[0] - 1), mainGraph.index(commonList[1] - 1), tempString);
  209.                         selectedCount = 0;
  210.                         commonList.Clear();
  211.                     }
  212.  
  213.                     pictureBox1.Image = map;
  214.                 }
  215.                 else
  216.                 {
  217.                     if (forButton5 == true)
  218.                     {
  219.                         int tempInt = checkSelecting(mouseX, mouseY);
  220.                         if (tempInt != -1)
  221.                         {
  222.                             mainGraph.deleteVertex(tempInt - 1);
  223.                             redrawGraph();
  224.                         }
  225.  
  226.                         pictureBox1.Image = map;
  227.                     }
  228.                     else
  229.                     {
  230.                         if (forButton7 == true)
  231.                         {
  232.                             int tempInt = checkSelecting(mouseX, mouseY);
  233.                             if (tempInt != -1)
  234.                             {
  235.                                 redrawGraph();
  236.                                 drawNeighbors(mainGraph.index(tempInt - 1));
  237.                             }
  238.                             else
  239.                             {
  240.                                 redrawGraph();
  241.                             }
  242.  
  243.                             pictureBox1.Image = map;
  244.                         }
  245.                     }
  246.                 }
  247.             }
  248.         }
  249.  
  250.         private int checkSelecting(int mouseX, int mouseY)
  251.         {
  252.             List <int> newList = new List<int>();
  253.             for (int i = 0; i < mainGraph.getCount(); i++)
  254.             {
  255.                 if (mouseX >= mainGraph.index(i).getX() - vertexRadious && mouseX <= mainGraph.index(i).getX() + vertexRadious
  256.                     && mouseY >= mainGraph.index(i).getY() - vertexRadious && mouseY <= mainGraph.index(i).getY() + vertexRadious)
  257.                 {
  258.                     return mainGraph.index(i).getNumber();
  259.                 }
  260.             }
  261.  
  262.             return -1;
  263.         }
  264.  
  265.         private void Button3_Click(object sender, EventArgs e)
  266.         {
  267.             redrawGraph();
  268.             pictureBox1.Image = map;
  269.             forButton3 = true;
  270.             forButton4 = false;
  271.             forButton5 = false;
  272.             forButton7 = false;
  273.         }
  274.  
  275.         private void Button4_Click(object sender, EventArgs e)
  276.         {
  277.             redrawGraph();
  278.             pictureBox1.Image = map;
  279.             forButton3 = false;
  280.             forButton4 = true;
  281.             forButton5 = false;
  282.             forButton7 = false;
  283.         }
  284.         private void Button5_Click(object sender, EventArgs e)
  285.         {
  286.             redrawGraph();
  287.             pictureBox1.Image = map;
  288.             forButton3 = false;
  289.             forButton4 = false;
  290.             forButton5 = true;
  291.             forButton7 = false;
  292.         }
  293.  
  294.         private void Button6_Click(object sender, EventArgs e)
  295.         {
  296.             clearAll();
  297.         }
  298.  
  299.         private void Button7_Click(object sender, EventArgs e)
  300.         {
  301.             forButton3 = false;
  302.             forButton4 = false;
  303.             forButton5 = false;
  304.             forButton7 = true;
  305.         }
  306.  
  307.         private void clearAll()
  308.         {
  309.                 graphics.Clear(Color.White);
  310.                 mainGraph.deleteAll();
  311.                 pictureBox1.Image = map;
  312.         }
  313.  
  314.         private void clearAllWithoutWarning()
  315.         {
  316.             graphics.Clear(Color.White);
  317.             pictureBox1.Image = map;
  318.         }
  319.  
  320.         private void setAllFalse()
  321.         {
  322.             forButton3 = false;
  323.             forButton4 = false;
  324.             forButton5 = false;
  325.             forButton7 = false;
  326.         }
  327.     }
  328. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement