Ejemplo n.º 1
0
 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);
 }
Ejemplo n.º 2
0
        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;
            }
        }
Ejemplo n.º 3
0
        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);
            }
        }
Ejemplo n.º 4
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;
            }
        }