private void GrafoSecundario_Paint(object sender, PaintEventArgs e) { Graphics gAux = CreateGraphics(); gAux = Graphics.FromImage(bmp); gAux.Clear(this.BackColor); if (band) { Pen p = new Pen(Color.Black, penArista.Width + 1); switch (opcion) { case 2: //AristaNoDirigida pI1 = MetodosAuxiliares.PuntoInterseccion(p1, p2, tamNodo / 2); gAux.DrawLine(p, pI1, p2); break; case 7: //AristaDirigida p.CustomEndCap = new AdjustableArrowCap(5, 5); pI1 = MetodosAuxiliares.PuntoInterseccion(p1, p2, tamNodo / 2); gAux.DrawLine(p, pI1, p2); break; } } else { //BanderaFinal if (bandFinal) { switch (opcion) { case 1: // Nodo gAux.FillEllipse(this.brushRelleno, pe.X, pe.Y, tamNodo, tamNodo); gAux.DrawEllipse(this.penNodo, pe.X + (anchoLineaN / 2), pe.Y + (anchoLineaN / 2), tamNodo - (anchoLineaN / 2), tamNodo - (anchoLineaN / 2)); gAux.DrawString(this.nombre.ToString(), font, brushName, pe.X + (tamNodo / 2) - tamName, pe.Y + (tamNodo / 2) - tamName); numNodos++; this.nombre = ConvierteNombre(numNodos); if (bandNombre) { grafo.CambiaNombre(); gAux.Clear(BackColor); grafo.DibujaGrafo(gAux); bandNombre = false; } bandFinal = false; break; case 2: //AristaNoDirigida gAux.DrawLine(penArista, pI1, pI2); bandFinal = false; break; case 7: //AristaDirigida gAux.DrawLine(penArista, pI1, pI2); bandFinal = false; break; } } } grafo.DibujaGrafo(gAux); g.DrawImage(bmp, 0, 0); }
public override bool AddKuratoswki(Nodo nodo, Point p) { double m, b, y; double xp, yp, xn, yn, xarista, yarista; xp = p.X; yp = p.Y; int sensibilidad = 3; Arista arista2; foreach (Nodo n in this) { foreach (Arista arista in n.Aristas) { xn = n.Pc.X; yn = n.Pc.Y; xarista = arista.Arriba.Pc.X; yarista = arista.Arriba.Pc.Y; if (n.Equals(arista.Arriba)) { return(false); } if ((xarista - xn) == 0) { if ((yp < yn && yp > yarista) || (yp > yn && yp < yarista)) { if ((xp < xarista + sensibilidad && xp > xn - sensibilidad) || (xp > xarista - sensibilidad && xp < xn + sensibilidad)) { foreach (Arista busca in arista.Arriba.Aristas) { if (busca.Arriba.Equals(n)) { arista2 = new Arista(0, MetodosAuxiliares.PuntoInterseccion(nodo.Pc, arista.Arriba.Pc, nodo.TamNodo / 2), MetodosAuxiliares.PuntoInterseccion(arista.Arriba.Pc, nodo.Pc, nodo.TamNodo / 2), arista.AnchoLinea, arista.ColorLinea, arista.Arriba, 0); nodo.Aristas.Add(arista2); arista2 = new Arista(0, MetodosAuxiliares.PuntoInterseccion(arista.Arriba.Pc, nodo.Pc, nodo.TamNodo / 2), MetodosAuxiliares.PuntoInterseccion(nodo.Pc, arista.Arriba.Pc, nodo.TamNodo / 2), arista.AnchoLinea, arista.ColorLinea, nodo, 0); arista.Arriba.Aristas.Add(arista2); arista.Arriba.Aristas.Remove(busca); break; } } arista2 = new Arista(0, MetodosAuxiliares.PuntoInterseccion(nodo.Pc, n.Pc, nodo.TamNodo / 2), MetodosAuxiliares.PuntoInterseccion(n.Pc, nodo.Pc, nodo.TamNodo / 2), arista.AnchoLinea, arista.ColorLinea, n, 0); nodo.Aristas.Add(arista2); arista2 = new Arista(0, MetodosAuxiliares.PuntoInterseccion(n.Pc, nodo.Pc, nodo.TamNodo / 2), MetodosAuxiliares.PuntoInterseccion(nodo.Pc, n.Pc, nodo.TamNodo / 2), arista.AnchoLinea, arista.ColorLinea, nodo, 0); arista.Arriba.Aristas.Add(arista2); n.Aristas.Remove(arista); this.Add(nodo); return(true); } } } m = (yarista - yn) / (xarista - xn); b = yn - (m * xn); y = m * xp + b; if (yp >= y - sensibilidad && yp <= y + sensibilidad) { if ((xp < xarista + sensibilidad && xp > xn - sensibilidad) || (xp > xarista - sensibilidad && xp < xn + sensibilidad)) { foreach (Arista busca in arista.Arriba.Aristas) { if (busca.Arriba.Equals(n)) { arista2 = new Arista(0, MetodosAuxiliares.PuntoInterseccion(nodo.Pc, arista.Arriba.Pc, nodo.TamNodo / 2), MetodosAuxiliares.PuntoInterseccion(arista.Arriba.Pc, nodo.Pc, nodo.TamNodo / 2), arista.AnchoLinea, arista.ColorLinea, arista.Arriba, 0); nodo.Aristas.Add(arista2); arista2 = new Arista(0, MetodosAuxiliares.PuntoInterseccion(arista.Arriba.Pc, nodo.Pc, nodo.TamNodo / 2), MetodosAuxiliares.PuntoInterseccion(nodo.Pc, arista.Arriba.Pc, nodo.TamNodo / 2), arista.AnchoLinea, arista.ColorLinea, nodo, 0); arista.Arriba.Aristas.Add(arista2); arista.Arriba.Aristas.Remove(busca); break; } } arista2 = new Arista(0, MetodosAuxiliares.PuntoInterseccion(nodo.Pc, n.Pc, nodo.TamNodo / 2), MetodosAuxiliares.PuntoInterseccion(n.Pc, nodo.Pc, nodo.TamNodo / 2), arista.AnchoLinea, arista.ColorLinea, n, 0); nodo.Aristas.Add(arista2); arista2 = new Arista(0, MetodosAuxiliares.PuntoInterseccion(n.Pc, nodo.Pc, nodo.TamNodo / 2), MetodosAuxiliares.PuntoInterseccion(nodo.Pc, n.Pc, nodo.TamNodo / 2), arista.AnchoLinea, arista.ColorLinea, nodo, 0); n.Aristas.Add(arista2); n.Aristas.Remove(arista); this.Add(nodo); return(true); } } } } return(false); }
private void GrafoSecundario_MouseUp(object sender, MouseEventArgs e) { switch (opcion) { case 2: //AristaNoDirigida #region Arista no Dirigida if (grafo.BuscaNodo(ref p2) && bandArista && band) { if (!typeof(GrafoNoDirigido).IsInstanceOfType(grafo)) { grafo = new GrafoNoDirigido(grafo); this.habilitaOpcionesGrafoNoDirigido(); } if (!p1.Equals(p2)) { numAristas++; this.pI2 = MetodosAuxiliares.PuntoInterseccion(this.p2, this.p1, tamNodo / 2); this.grafo.InsertaArista(this.p1, this.p2, 0, this.anchoLineaA, this.penArista.Color, numAristas); this.grafo.InsertaArista(this.p2, this.p1, 0, this.anchoLineaA, this.penArista.Color, numAristas); band = false; bandFinal = true; bandArista = false; } else { numAristas++; this.pI2 = MetodosAuxiliares.PuntoInterseccion(this.p2, this.p1, tamNodo / 2); this.grafo.InsertaArista(this.p1, this.p2, 0, this.anchoLineaA, this.penArista.Color, numAristas); band = false; bandFinal = true; bandArista = false; } } else { bandFinal = false; band = false; } this.GrafoSecundario_Paint(this, null); #endregion break; case 4: //MueveNodo #region Mueve Nodo bandFinal = false; #endregion break; case 7: //AristaDirigida #region AristaDirigida if (grafo.BuscaNodo(ref p2) && bandArista && band) { if (!typeof(GrafoDirigido).IsInstanceOfType(grafo)) { grafo = new GrafoDirigido(grafo); this.habilitaOpcionesGrafoDirigido(); } if (!p1.Equals(p2)) { numAristas++; this.pI2 = MetodosAuxiliares.PuntoInterseccion(this.p2, this.p1, tamNodo / 2); this.grafo.InsertaArista(this.p1, this.p2, 0, this.anchoLineaA, this.penArista.Color, numAristas); band = false; bandFinal = true; bandArista = false; } else { numAristas++; this.pI2 = MetodosAuxiliares.PuntoInterseccion(this.p2, this.p1, tamNodo / 2); this.grafo.InsertaArista(this.p1, this.p2, 0, this.anchoLineaA, this.penArista.Color, numAristas); band = false; bandFinal = true; bandArista = false; bandFinal = false; band = false; } } else { bandFinal = false; band = false; } this.GrafoSecundario_Paint(this, null); #endregion break; } this.GrafoSecundario_Paint(this, null); }
public void complemento(Color color, int ancho) { Arista aux; List <Nodo> complementos = new List <Nodo>(); Point pi1, pi2; Nodo n; bool band = false; int id; id = 0; foreach (Nodo busca in this) { if (busca.Aristas.Count > 0) { foreach (Nodo buscando in this) { band = false; foreach (Arista encuentra in busca.Aristas) { if (buscando.Equals(encuentra.Arriba)) { band = true; break; } } if (!band) { n = buscando; complementos.Add(n); } } busca.Aristas.Clear(); foreach (Nodo buscando in complementos) { if (!busca.Equals(buscando)) { pi1 = MetodosAuxiliares.PuntoInterseccion(busca.Pc, buscando.Pc, this[0].TamNodo / 2); pi2 = MetodosAuxiliares.PuntoInterseccion(buscando.Pc, busca.Pc, this[0].TamNodo / 2); id++; aux = new Arista(0, pi1, pi2, ancho, color, buscando, id); busca.Aristas.Add(aux); } } complementos.Clear(); } else { foreach (Nodo buscando in this) { if (!busca.Equals(buscando)) { pi1 = MetodosAuxiliares.PuntoInterseccion(busca.Pc, buscando.Pc, this[0].TamNodo / 2); pi2 = MetodosAuxiliares.PuntoInterseccion(buscando.Pc, busca.Pc, this[0].TamNodo / 2); id++; aux = new Arista(0, pi1, pi2, ancho, color, buscando, id); busca.Aristas.Add(aux); } } } } }