private void sheet_MouseClick(object sender, MouseEventArgs e) { //hledani stupne vrcholu if (selectButton.Enabled == false) { for (int i = 0; i < V.Count; i++) { if (Math.Pow((V[i].x - e.X), 2) + Math.Pow((V[i].y - e.Y), 2) <= G.R * G.R) { if (selected1 != -1) { selected1 = -1; G.clearSheet(); G.drawALLGraph(V, E); sheet.Image = G.GetBitmap(); } if (selected1 == -1) { G.drawSelectedVrchol(V[i].x, V[i].y); selected1 = i; sheet.Image = G.GetBitmap(); //createAdjAndOut(); listBoxMatrix.Items.Clear(); int degree = 0; for (int j = 0; j < V.Count; j++) { degree += AMatrix[selected1, j]; } listBoxMatrix.Items.Add("Stupen vrcholu №" + (selected1 + 1) + " je rovna " + degree); break; } } } } //je stisknuto tlacitko "kreslit vrchol" if (drawVrcholButton.Enabled == false) { V.Add(new Vrchol(e.X, e.Y)); G.drawVrchol(e.X, e.Y, V.Count.ToString()); sheet.Image = G.GetBitmap(); } //je stisknuto tlacitko "kreslit hranu" if (drawHranaButton.Enabled == false) { if (e.Button == MouseButtons.Left) { for (int i = 0; i < V.Count; i++) { if (Math.Pow((V[i].x - e.X), 2) + Math.Pow((V[i].y - e.Y), 2) <= G.R * G.R) { if (selected1 == -1) { G.drawSelectedVrchol(V[i].x, V[i].y); selected1 = i; sheet.Image = G.GetBitmap(); break; } if (selected2 == -1) { G.drawSelectedVrchol(V[i].x, V[i].y); selected2 = i; int per1 = 0; bool per2 = false; Form2 _Hrana = new Form2(); if (_Hrana.ShowDialog(this) == DialogResult.OK) { per1 = Int32.Parse(_Hrana.v_v3.Text); if (_Hrana.v_v4.Checked == true) { per2 = true; } ; } _Hrana.Dispose(); E.Add(new Hrana(selected1, selected2, per1, per2)); G.drawHrana(V[selected1], V[selected2], E[E.Count - 1], E.Count - 1); listBoxHrany_hrane(); selected1 = -1; selected2 = -1; sheet.Image = G.GetBitmap(); break; } } } } if (e.Button == MouseButtons.Right) { if ((selected1 != -1) && (Math.Pow((V[selected1].x - e.X), 2) + Math.Pow((V[selected1].y - e.Y), 2) <= G.R * G.R)) { G.drawVrchol(V[selected1].x, V[selected1].y, (selected1 + 1).ToString()); selected1 = -1; sheet.Image = G.GetBitmap(); } } } //je stisknuto tlacitko "smazat prvek" if (deleteButton.Enabled == false) { bool flag = false; //удалили ли что-нибудь по ЭТОМУ клику //hledame, zda li bylo stisknuto tlacitko vrchol for (int i = 0; i < V.Count; i++) { if (Math.Pow((V[i].x - e.X), 2) + Math.Pow((V[i].y - e.Y), 2) <= G.R * G.R) { for (int j = 0; j < E.Count; j++) { if ((E[j].v1 == i) || (E[j].v2 == i)) { E.RemoveAt(j); j--; } else { if (E[j].v1 > i) { E[j].v1--; } if (E[j].v2 > i) { E[j].v2--; } } } listBoxHrany.Items.Clear(); listBoxHrany_hrane(); V.RemoveAt(i); flag = true; break; } } //hledame, zda li bylo stisknuto tlacitko hrana if (!flag) { for (int i = 0; i < E.Count; i++) { if (E[i].v1 == E[i].v2) //zda-li je to smycka { if ((Math.Pow((V[E[i].v1].x - G.R - e.X), 2) + Math.Pow((V[E[i].v1].y - G.R - e.Y), 2) <= ((G.R + 2) * (G.R + 2))) && (Math.Pow((V[E[i].v1].x - G.R - e.X), 2) + Math.Pow((V[E[i].v1].y - G.R - e.Y), 2) >= ((G.R - 2) * (G.R - 2)))) { E.RemoveAt(i); listBoxHrany.Items.Clear(); listBoxHrany_hrane(); flag = true; break; } } else //neni smycka { if (((e.X - V[E[i].v1].x) * (V[E[i].v2].y - V[E[i].v1].y) / (V[E[i].v2].x - V[E[i].v1].x) + V[E[i].v1].y) <= (e.Y + 4) && ((e.X - V[E[i].v1].x) * (V[E[i].v2].y - V[E[i].v1].y) / (V[E[i].v2].x - V[E[i].v1].x) + V[E[i].v1].y) >= (e.Y - 4)) { if ((V[E[i].v1].x <= V[E[i].v2].x && V[E[i].v1].x <= e.X && e.X <= V[E[i].v2].x) || (V[E[i].v1].x >= V[E[i].v2].x && V[E[i].v1].x >= e.X && e.X >= V[E[i].v2].x)) { E.RemoveAt(i); listBoxHrany.Items.Clear(); listBoxHrany_hrane(); flag = true; break; } } } } } // Jest-li neco bylo vyskrtnuto, aktualizujeme graf if (flag) { G.clearSheet(); G.drawALLGraph(V, E); sheet.Image = G.GetBitmap(); } } }