Пример #1
0
        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;
            }
        }
Пример #2
0
        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));
             * }*/
        }