private void Form1_MouseDown(object sender, MouseEventArgs e) { switch (TipoOperacion) { case -1: NodoMovimiento = BuscaNodo(e); if (NodoMovimiento != null) { M = true; } break; case 0: Identificador++; Nodo Aux = new Nodo(); Aux.AsignarCoordenadas(e.X, e.Y); Aux.Identificador = Identificador; grafo.AgregarNodo(Aux); Form1_Paint(this, null); break; case 1: Nodo aux = BuscaNodo(e); if (aux != null) { if (MessageBox.Show("Estas seguro de eliminar el nodo : " + aux.Identificador + " ?", "Eliminar nodo", MessageBoxButtons.YesNo) == DialogResult.Yes) { grafo.EliminarNodo(aux); Form1_Paint(this, null); Identificador--; } } break; case 2: // Agregar Relación NodoInicio = BuscaNodo(e); if (NodoInicio != null) { R = true; } break; case 3: // Mover Nodo NodoMovimiento = BuscaNodo(e); M = true; break; case 4: Arco Relacion = BuscaRelacion(e); if (Relacion != null) { if (grafo.Dirigido == true) { grafo.EliminaRelacion(BuscaNodoInt(Relacion.Origen), BuscaNodoInt(Relacion.Destino)); } else { if (Relacion.Origen != Relacion.Destino) { grafo.EliminaRelacion(BuscaNodoInt(Relacion.Origen), BuscaNodoInt(Relacion.Destino)); Arco RelAux = BuscaRelacionNodo(BuscaNodoInt(Relacion.Destino), Relacion.Origen); grafo.EliminaRelacion(BuscaNodoInt(RelAux.Origen), BuscaNodoInt(RelAux.Destino)); } else { grafo.EliminaRelacion(BuscaNodoInt(Relacion.Origen), BuscaNodoInt(Relacion.Destino)); } } Form1_Paint(this, null); } break; case 5: Arco RelacionPeso = BuscaRelacion(e); if (RelacionPeso != null) { int Peso = Convert.ToInt32(Interaction.InputBox("Ingresa el nuevo peso de la relación: " + RelacionPeso.Origen + " - " + RelacionPeso.Destino)); if (grafo.Dirigido == true) { RelacionPeso.Peso = Peso; } else { Arco RelacionAuxiliarPeso = BuscaRelacionNodo(BuscaNodoInt(RelacionPeso.Destino), RelacionPeso.Origen); RelacionPeso.Peso = Peso; RelacionAuxiliarPeso.Peso = Peso; } } break; case 6: Nodo NodoAux = BuscaNodo(e); if (NodoAux != null) { MessageBox.Show("El grado de salida del nodo es: " + NodoAux.ObtenGradoNodo().ToString() + "\n" + "El grado de entrada del nodo es: " + grafo.ObtenGradoEntradaNodo(NodoAux)); } break; case 7: if (!banderaCamino) { if (BuscaNodo(e) != null) { NodoCamino1 = BuscaNodo(e).Identificador; LB_NodosSeleccionados.Text = "Nodo Seleccionado:\n" + NodoCamino1; banderaCamino = true; break; } } if (banderaCamino) { if (BuscaNodo(e) != null) { NodoCamino2 = BuscaNodo(e).Identificador; banderaCamino = false; LB_NodosSeleccionados.Text = "Nodos Seleccionados:\n\t\t" + "{" + NodoCamino1 + " , " + NodoCamino2 + "}"; TipoOperacion = -1; break; } } break; } }
public void DibujaNodos() { double tg, atg; int a, b, x, y; Point p, p2; Pen PlumaFlecha = new Pen(Color.Black, 4); PlumaFlecha.StartCap = LineCap.RoundAnchor; PlumaFlecha.EndCap = LineCap.ArrowAnchor; List <Arco> AuxCaminos = new List <Arco>(); if (banderaCamino && Caminos.Count != 0 && IdentificadorCamino != -1) { for (int j = 0; j < Caminos[IdentificadorCamino].Count - 1; j++) { Arco arc = new Arco(); arc.Origen = Caminos[IdentificadorCamino][j]; arc.Destino = Caminos[IdentificadorCamino][j + 1]; AuxCaminos.Add(arc); } } foreach (Nodo nodo in grafo.Nodos) { Point PuntoMedioRecta = new Point(); String numero = Convert.ToString(nodo.Identificador); Font Fuente = new Font("Comic Sans", 16); Font FuentePesos = new Font("Arial", 12); SolidBrush ColorNumero = new SolidBrush(Color.Red); SolidBrush ColorPeso = new SolidBrush(Color.Blue); SolidBrush ColorNodo = new SolidBrush(Color.DarkGray); Rectangle RectanguloAuxiliar = new Rectangle(nodo.Coordenadas.X, nodo.Coordenadas.Y, 50, 50); Graficos.DrawEllipse(LineaNodo, RectanguloAuxiliar); Graficos.FillEllipse(ColorNodo, RectanguloAuxiliar); if (nodo.Identificador < 10) { Graficos.DrawString(numero, Fuente, ColorNumero, nodo.Coordenadas.X + 14, nodo.Coordenadas.Y + 14); } else { Graficos.DrawString(numero, Fuente, ColorNumero, nodo.Coordenadas.X + 9, nodo.Coordenadas.Y + 14); } foreach (Arco r in nodo.Relaciones) { Nodo aux = BuscaNodoInt(r.Destino); if (aux != null) { tg = (double)(BuscaNodoInt(r.Origen).Centro.Y - BuscaNodoInt(r.Destino).Centro.Y) / (BuscaNodoInt(r.Destino).Centro.X - BuscaNodoInt(r.Origen).Centro.X); atg = Math.Atan(tg); a = (int)((50 * .53) * Math.Cos(atg)); b = (int)((50 * .53) * Math.Sin(atg)); if (BuscaNodoInt(r.Origen).Centro.X < BuscaNodoInt(r.Destino).Centro.X) { a *= -1; b *= -1; } p = new Point(BuscaNodoInt(r.Destino).Centro.X + a, BuscaNodoInt(r.Destino).Centro.Y - b); p2 = new Point(BuscaNodoInt(r.Origen).Centro.X - a, BuscaNodoInt(r.Origen).Centro.Y + b); if (grafo.Dirigido == false) { if (aux.Identificador != r.Origen) { Graficos.DrawLine(LineaRelaciones, p2, p); PuntoMedioRecta.X = (nodo.Centro.X + aux.Centro.X) / 2; PuntoMedioRecta.Y = (nodo.Centro.Y + aux.Centro.Y) / 2; Graficos.DrawString(r.Peso.ToString(), FuentePesos, ColorPeso, PuntoMedioRecta); } else { Graficos.DrawArc(LineaRelaciones, aux.Coordenadas.X - 50 / 6, aux.Coordenadas.Y - 50 / 6, 50 / 2, 50 / 2, 100, 250); Graficos.DrawString(r.Peso.ToString(), FuentePesos, ColorPeso, aux.Centro.X - 30, aux.Centro.Y - 32); } } else { if (aux.Identificador != r.Origen) { Graficos.DrawLine(PlumaFlecha, p2, p); PuntoMedioRecta.X = (nodo.Centro.X + aux.Centro.X) / 2; PuntoMedioRecta.Y = (nodo.Centro.Y + aux.Centro.Y) / 2; Graficos.DrawString(r.Peso.ToString(), FuentePesos, ColorPeso, PuntoMedioRecta); } else { Graficos.DrawArc(PlumaFlecha, aux.Coordenadas.X - 50 / 6, aux.Coordenadas.Y - 50 / 6, 65 / 2, 65 / 2, 100, 250); Graficos.DrawString(r.Peso.ToString(), FuentePesos, ColorPeso, aux.Centro.X - 30, aux.Centro.Y - 32); } } } } } if (banderaCamino) { //MessageBox.Show("DIBUJANDO ARCO"); DibujaArco(ArcoADibujar); //DibujaCamino(GeneraListaRelacionesCamino(Caminos)); } /*if (CaminoCompleto) * { * DibujaCamino(GeneraListaRelacionesCamino(Caminos)); * }*/ }