public void SeleccionaNodos() { if (orig == null || destin == null) { if (orig == null) { orig = (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); } }); if (orig != null) { orig.SELECCIONADO = true; } } else if (destin == null) { destin = (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); } }); if (destin != null) { destin.SELECCIONADO = true; } } } else { 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); } }); if (nu != null) { nu.SELECCIONADO = false; if (nu == orig) { orig = null; } if (nu == destin) { destin = null; } nu = null; } } grafo.pinta(g); }
private void toolStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e) { switch (e.ClickedItem.Name) { case "Agrega": case "AgregaNodo": pm = new Point(); accion = 1; grafo.desseleccionar(); break; case "Mueve": case "MueveNodo": band = true; accion = 2; grafo.desseleccionar(); break; case "EliminaNodo": case "EliminaNod": accion = 4; grafo.desseleccionar(); break; case "MueveGrafo": case "MueveGraf": accion = 5; grafo.desseleccionar(); break; case "EliminaArista": // accion = 6; // grafo.desseleccionar(); break; case "PropiedadesGrafo": Form f; if (AristaDirigida.Enabled == false) { f = new Form3(grafo, 2); } else { f = new Form3(grafo, 1); } f.Activate(); f.Show(); grafo.desseleccionar(); break; case "intercambio": case "intercambioTool": int cont = 0; char name = 'A'; bool num; int aux; if ((int.TryParse(grafo[0].NOMBRE.ToString(), out aux)) == true) { num = true; } else { num = false; } if (num == true) { foreach (NodoP cambio in grafo) { cambio.NOMBRE = name.ToString(); name++; } nombre = 'A'; for (int i = 0; i < grafo.Count; i++) { nombre++; } } else { numero = grafo.Count; foreach (NodoP cambio in grafo) { cambio.NOMBRE = cont.ToString(); cont++; } } break; case "cierraEuler": time.Stop(); grafo.desColorea(resp); if (g2.Count > 1) { grafo = new Grafo(g2); g2 = new Grafo(); } if (gis != null) { gis = null; } grafo.bosque = false; foreach (Arista qt in grafo.Aristas) { qt.bosqueT = 0; } band = false; grafo.pinta(g); orig = null; destin = null; pm = new Point(); accion = 0; break; case "Dirigida": accion = 3; band = true; AgregaRelacion.Checked = true; fl.EndCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor; fl.StartCap = LineCap.RoundAnchor; fl.Width = 4; tipoarista = 1; grafo.desseleccionar(); break; case "NoDirigida": accion = 3; band = true; AgregaRelacion.Checked = true; fl.EndCap = System.Drawing.Drawing2D.LineCap.NoAnchor; fl.StartCap = LineCap.NoAnchor; fl.Width = 4; tipoarista = 2; grafo.desseleccionar(); 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); } }
private void Form1_MouseUp(object sender, MouseEventArgs e) { NodoP des; Graphics au; au = Graphics.FromImage(bmp1); au.Clear(BackColor); switch (accion) { case 1: p = pm; pm = e.Location; band = true; Form1_Paint(this, null); band = false; break; case 2: nu = null; break; case 3: des = (NodoP)grafo.Find(delegate(NodoP a) { if (e.Location.X > a.POS.X - 15 && e.Location.X < a.POS.X + 30 && e.Location.Y > a.POS.Y - 15 && e.Location.Y < a.POS.Y + 30) { return(true); } else { return(false); } }); if (des != null && nu != null) { if (nu.insertaRelacion(des, grafo.Aristas.Count)) { a = new Arista(tipoarista, nu, des, "e" + grafo.Aristas.Count.ToString()); grafo.AgregaArista(a); nu.GRADO++; des.GRADO++; nu.GradoExterno++; des.GradoInterno++; } if (tipoarista == 2 && a.Destino.NOMBRE != a.Origen.NOMBRE) { des.insertaRelacion(nu, grafo.Aristas.Count - 1); des.GradoExterno++; nu.GradoInterno++; } grafo.pinta(au); band = false; nu = null; } else { grafo.pinta(au); } g.DrawImage(bmp1, 0, 0); break; case 4: nu = (NodoP)grafo.Find(delegate(NodoP a) { if (e.Location.X > a.POS.X - 15 && e.Location.X < a.POS.X + 30 && e.Location.Y > a.POS.Y - 15 && e.Location.Y < a.POS.Y + 30) { return(true); } else { return(false); } }); if (nu != null) { grafo.RemueveNodo(nu); band = true; if (grafo.Count == 0) { nombre = 'A'; gactivo = false; } Form1_Paint(this, null); band = false; } break; case 7: case 9: case 8: SeleccionaNodos(); break; } }