private void Form1_MouseDown(object sender, MouseEventArgs e) { Grafo g2; pm = e.Location; p = pm; switch (e.Button.ToString()) { case "Left": if (accion != 0 && accion != 1) { band = true; Form1_Paint(this, null); band = false; } break; case "Right": int total = grafo.Aristas.Count; for (int i = 0; i < total; i++) { arista = grafo.Aristas[i]; if (arista.toca(pm)) { MenuArista.Enabled = true; MenuArista.ClientSize = new Size(50, 50); MenuArista.Visible = true; MenuArista.Show(Cursor.Position); break; } } break; } }
private void Form1_Paint(object sender, PaintEventArgs e) { Graphics au; au = Graphics.FromImage(bmp1); au.Clear(BackColor); if (bandComplemento == 1) { Grafo aux = new Grafo(); aux = grafo; grafo = new Grafo(aux); bandComplemento = 0; } if (band) { //au.Clear(BackColor); switch (accion) { case 1: bool num; int iaux; if (grafo.Count > 0) { if ((int.TryParse(grafo[0].NOMBRE.ToString(), out iaux)) == true) { num = true; } else { num = false; } } else { num = false; } if (num == false) { nu = new NodoP(pm, nombre); nombre++; } else { nu = new NodoP(pm, nombre); nu.NOMBRE = numero.ToString(); numero++; } if (grafo.Count == 0) { // Dirigida.Enabled = NoDirigida.Enabled = true; } if (grafo.Count > 1) { nu.COLOR = grafo[0].COLOR; } grafo.AgregaNodo(nu); AgregaRelacion.Enabled = true; gactivo = true; nu = null; break; case 2: nu = (NodoP)grafo.Find(delegate(NodoP a) { if (pm.X > a.POS.X - 15 && pm.X < a.POS.X + 30 && pm.Y > a.POS.Y - 15 && pm.Y < a.POS.Y + 30) { return(true); } else { return(false); } }); break; case 3: nu = (NodoP)grafo.Find(delegate(NodoP a) { if (pm.X > a.POS.X - 15 && pm.X < a.POS.X + 30 && pm.Y > a.POS.Y - 15 && pm.Y < a.POS.Y + 30) { return(true); } else { return(false); } }); p = pm; break; case 5: Grafo aux = new Grafo(); aux = grafo; aux.Sort(delegate(NodoP a, NodoP b) { return(a.POS.X.CompareTo(b.POS.X)); }); if (pm.X > aux.ToArray()[0].POS.X && pm.X < aux.ToArray()[aux.Count - 1].POS.X) { aux.Sort(delegate(NodoP a, NodoP b) { return(a.POS.Y.CompareTo(b.POS.Y)); }); if (pm.Y > aux.ToArray()[0].POS.Y && pm.Y < aux.ToArray()[aux.Count - 1].POS.Y) { mov = true; } else { mov = false; } } else { mov = false; } break; case 6: int total = grafo.Aristas.Count; Arista arista; for (int i = 0; i < total; i++) { arista = grafo.Aristas[i]; if (arista.toca(pm)) { grafo.RemueveArista(arista); break; } } break; case 14: Arista ari; NodoP o, d; o = d = null; if (bandcam == true) { ari = new Arista();; grafo = new Grafo(g2); grafo.Aristas.Clear(); foreach (NodoP rel in grafo) { rel.relaciones.Clear(); } bandcam = false; au.Clear(BackColor); } if (tck == true) { accion = 0; tck = false; if (icam > 0) { grafo.Find(delegate(NodoP dx) { if (dx.NOMBRE == CCE[icam].NOMBRE) { return(true); } else { return(false); } }).insertaRelacion(grafo.Find(delegate(NodoP ox) { if (ox.NOMBRE == CCE[icam - 1].NOMBRE) { return(true); } else { return(false); } }), grafo.Aristas.Count); d = grafo.Find(delegate(NodoP dx) { if (dx.NOMBRE == CCE[icam].NOMBRE) { return(true); } else { return(false); } }); o = grafo.Find(delegate(NodoP ox) { if (ox.NOMBRE == CCE[icam - 1].NOMBRE) { return(true); } else { return(false); } }); d.COLOR = Color.Blue; o.COLOR = Color.Blue; Pen penn = new Pen(Brushes.Red); penn.Width = 4; g.DrawEllipse(penn, new Rectangle(d.POS.X - 16, d.POS.Y - 16, 30, 30)); ari = new Arista(1, d, o, "e" + (CCE.Count - icam).ToString()); grafo.AgregaArista(ari); } grafo.pinta(g); } break; } if (gis != null) { gis.pinta(au); g.DrawImage(bmp1, 0, 0); } grafo.pinta(au); g.DrawImage(bmp1, 0, 0); } else { switch (accion) { case 1: break; case 2: if (nu != null) { nu.POS = pm; au.Clear(BackColor); } break; case 3: au.Clear(BackColor); if (nu != null) { au.DrawLine(fl, p, pm); } break; case 5: if (mov) { Point po = new Point(pm.X - p.X, pm.Y - p.Y); foreach (NodoP n in grafo) { Point nue = new Point(n.POS.X + po.X, n.POS.Y + po.Y); n.POS = nue; } p = pm; au.Clear(BackColor); } break; } if (gis != null) { gis.pinta(au); g.DrawImage(bmp1, 0, 0); } grafo.pinta(au); g.DrawImage(bmp1, 0, 0); } }