private void Grafo_Clicked(object sender, ToolStripItemClickedEventArgs e) { IFormatter formater = new BinaryFormatter(); Stream stream; #region Grafo switch (e.ClickedItem.AccessibleName) { case "Abrir": #region Abrir Grafo openFileGrafo = new OpenFileDialog(); openFileGrafo.Filter = "(*.grafo) | *.grafo"; openFileGrafo.FilterIndex = 2; openFileGrafo.RestoreDirectory = true; openFileGrafo.InitialDirectory = directorio; if (openFileGrafo.ShowDialog() == DialogResult.OK) { stream = new FileStream(openFileGrafo.FileName, FileMode.Open, FileAccess.Read, FileShare.None); grafo = (Grafo)formater.Deserialize(stream); if (grafo.Count > 0) { nodo = grafo[0]; nombre = grafo[grafo.Count - 1].Nombre; try { numNodos = Int32.Parse(nombre); } catch (FormatException) { char aux = nombre[0]; numNodos = aux - 64; } numNodos++; nombre = ConvierteNombre(numNodos); /*this.pref.Dispose(); * if (grafo.buscaArista(ref arista)) * { * this.pref = new Preferencias(nodo.AnchoContorno, nodo.TamNodo, nodo.TamLetra, * arista.AnchoLinea, arista.ColorLinea, nodo.ColorFuera, * nodo.BrushRelleno, nodo.Brushnombre); * } * else * { * this.pref = new Preferencias(nodo.AnchoContorno, nodo.TamNodo, nodo.TamLetra, * 1, Color.Black, nodo.ColorFuera, * nodo.BrushRelleno, nodo.Brushnombre); * }*/ } /*else * { * this.pref = new Preferencias(anchoLineaN, tamNodo, altonombre, * anchoLineaA, colorLinea, colorContorno, * colorRelleno, colorLetra); * } * PreferenciasBack(pref);*/ stream.Close(); this.habilitaOpcionesGrafo(); if (typeof(GrafoDirigido).IsInstanceOfType(grafo)) { this.habilitaOpcionesGrafoDirigido(); } else { if (typeof(GrafoNoDirigido).IsInstanceOfType(grafo)) { this.habilitaOpcionesGrafoNoDirigido(); } } this.GrafoSecundario_Paint(this, null); } #endregion break; case "Guardar": #region Gurdar Grafo saveFileGrafo.Filter = "(*.grafo) | *.grafo"; saveFileGrafo.InitialDirectory = directorio; if (saveFileGrafo.ShowDialog() == DialogResult.OK) { stream = new FileStream(saveFileGrafo.FileName, FileMode.Create, FileAccess.Write, FileShare.None); formater.Serialize(stream, grafo); stream.Close(); } #endregion break; case "CrearNodo": this.opcion = 1; break; case "MoverNodo": this.opcion = 4; break; case "EliminarNodo": this.opcion = 3; break; case "AristaDirigida": this.opcion = 7; break; case "AristaNoDirigida": this.opcion = 2; break; case "EliminarArista": this.opcion = 6; break; case "MoverGrafo": this.opcion = 5; break; case "EliminarGrafo": if (MessageBox.Show("¿Seguro quiere eliminar el grafo?", "No me quiero ir señor usuario :'(", MessageBoxButtons.YesNo) == DialogResult.Yes) { grafo.borraGrafo(); grafo = new Grafo(); /*this.restauraConfiguracion(); * PreferenciasBack(pref); * numNodos = 1; * nombre = ConvierteNombre(numNodos); * this.deshabititaOpciones(); * this.EditorDeGrafos_Paint(this, null);*/ } break; } #endregion }
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_MouseDown(object sender, MouseEventArgs e) { switch (opcion) { case 1: //Insertar Nodo p1 = e.Location; pe.X = p1.X - (tamNodo / 2); pe.Y = p1.Y - (tamNodo / 2); nodo = new Nodo(nombre, pe, p1, penNodo.Color, brushRelleno.Color, brushName.Color, tamNodo, altoName, anchoLineaN, fuente); if (numNodos == 27) { bandNombre = true; grafo.Tipo = true; } grafo.Add(nodo); band = false; bandFinal = true; if (grafo.Count == 1) { if (typeof(GrafoDirigido).IsInstanceOfType(grafito)) { this.deshabititaOpciones(); this.habilitaOpcionesGrafo(); this.habilitaOpcionesGrafoDirigido(); } else if (typeof(GrafoNoDirigido).IsInstanceOfType(grafito)) { this.deshabititaOpciones(); this.habilitaOpcionesGrafo(); this.habilitaOpcionesGrafoNoDirigido(); } } this.GrafoSecundario_Paint(this, null); break; case 2: //AristaNoDirigida p1 = e.Location; if (grafo.BuscaNodo(ref p1)) { band = true; bandArista = true; } else { band = false; bandArista = false; } break; case 3: p1 = e.Location; if (grafo.BuscaNodo(ref nodo, p1)) { grafo.borraNodo(nodo); if (grafo.Count == 0) { this.grafo = new Grafo(this.grafo); this.deshabititaOpciones(); } this.GrafoSecundario_Paint(this, null); } break; case 4: //Mover Nodo p1 = e.Location; bandFinal = grafo.BuscaNodo(ref nodo, p1); break; case 5: //Mover Grafo p1 = e.Location; bandFinal = grafo.BuscaNodo(ref nodo, p1); break; case 6: //EliminaArista grafo.BorraArista(e.Location); if (grafo.Aristas == 0) { this.numAristas = 0; if (typeof(GrafoDirigido).IsInstanceOfType(grafito)) { this.deshabititaOpciones(); this.habilitaOpcionesGrafo(); this.habilitaOpcionesGrafoDirigido(); } else if (typeof(GrafoNoDirigido).IsInstanceOfType(grafito)) { this.deshabititaOpciones(); this.habilitaOpcionesGrafo(); this.habilitaOpcionesGrafoNoDirigido(); } } bandFinal = false; this.GrafoSecundario_Paint(this, null); break; case 7: //AristaDirigida p1 = e.Location; if (grafo.BuscaNodo(ref p1)) { band = true; bandArista = true; } else { band = false; bandArista = false; } break; } }
public override int BorraArista(Point p) { double m, b, y; double xp, yp, xn, yn, xarista, yarista; xp = p.X; yp = p.Y; int sensibilidad = 2; 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)) { Nodo nAux = BuscaNodo(p); if (nAux != null && nAux.Equals(n)) { n.Aristas.Remove(arista); this.actualizaId(); return(1); } } 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)) { arista.Arriba.Aristas.Remove(busca); break; } } n.Aristas.Remove(arista); this.actualizaId(); return(1); } } } 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)) { arista.Arriba.Aristas.Remove(busca); break; } } n.Aristas.Remove(arista); this.actualizaId(); return(1); } } } } return(0); }