public void PaintTraslapos(Graphics e, float Zoom)
        {
            try
            {
                float Hpixeles = 30;
                Barras.ForEach(B =>
                {
                    if (B.TraslpaoDerecha)
                    {
                        cBarra B2 = Barras.Find(y => y.TraslapoIzquierda && XiPerteneceaX0X1(B.XI, B.XF, y.XI) && y != B);

                        if (B2 != null)
                        {
                            PaintCotaHorizontal(e, new PointF(B2.C_Barra.Escaladas.Min(y => y.X), B2.C_Barra.Escaladas.Max(y => y.Y)),
                                                new PointF(B.C_Barra.Escaladas.Max(y => y.X), B.C_Barra.Escaladas.Max(y => y.Y)),
                                                new PointF(B2.C_Barra.Reales.Min(y => y.X), B2.C_Barra.Reales.Max(y => y.Y)),
                                                new PointF(B.C_Barra.Reales.Max(y => y.X), B.C_Barra.Reales.Max(y => y.Y)),
                                                Hpixeles, UbicacionRefuerzo == eUbicacionRefuerzo.Inferior, Zoom);
                        }
                    }
                });
            }
            catch
            {
            }
        }
 public cBarra EncontrarBarraConentedora(cBarra BarraMadre)
 {
     foreach (cBarra barra in Barras)
     {
         if (BarraMadre != barra)
         {
             if (Barra1ContieneBarra2(BarraMadre, barra))
             {
                 return(barra);
             }
         }
     }
     return(null);
 }
        private void EliminarBarra()
        {
            cBarra BarraSelect = F_Base.Proyecto.Edificio.PisoSelect.NervioSelect.Tendencia_Refuerzos.TInfeSelect.Barras.Find(x => x.C_Barra.IsSelect | x.C_Barra.IsSelectArrastre);

            if (BarraSelect == null)
            {
                BarraSelect = F_Base.Proyecto.Edificio.PisoSelect.NervioSelect.Tendencia_Refuerzos.TSupeSelect.Barras.Find(x => x.C_Barra.IsSelect | x.C_Barra.IsSelectArrastre);
            }

            if (BarraSelect != null)
            {
                F_Base.EnviarEstado_Nervio(F_Base.Proyecto.Edificio.PisoSelect.NervioSelect);
                if (BarraSelect.UbicacionRefuerzo == eUbicacionRefuerzo.Inferior)
                {
                    F_Base.Proyecto.Edificio.PisoSelect.NervioSelect.Tendencia_Refuerzos.TInfeSelect.EliminarBarra(BarraSelect);
                }
                else
                {
                    F_Base.Proyecto.Edificio.PisoSelect.NervioSelect.Tendencia_Refuerzos.TSupeSelect.EliminarBarra(BarraSelect);
                }

                F_Base.Proyecto.Edificio.PisoSelect.NervioSelect.SimilitudNervioCompleto.NerviosSimilares.ForEach(N =>
                {
                    cBarra BarraEliminar;
                    BarraEliminar = BarraSelect.UbicacionRefuerzo == eUbicacionRefuerzo.Inferior ?
                                    N.Tendencia_Refuerzos.TInfeSelect.Barras.Find(y => y.ID == BarraSelect.ID) :
                                    N.Tendencia_Refuerzos.TSupeSelect.Barras.Find(y => y.ID == BarraSelect.ID);
                    if (BarraEliminar != null)
                    {
                        if (BarraEliminar.UbicacionRefuerzo == eUbicacionRefuerzo.Inferior)
                        {
                            N.Tendencia_Refuerzos.TInfeSelect.EliminarBarra(BarraEliminar);
                        }
                        else
                        {
                            N.Tendencia_Refuerzos.TSupeSelect.EliminarBarra(BarraEliminar);
                        }
                    }
                });


                PB_VistaPerfilLongitudinalDiseno.Invalidate();
            }
        }
        private void CopiarBarra()
        {
            cBarra BarraSelect = F_Base.Proyecto.Edificio.PisoSelect.NervioSelect.Tendencia_Refuerzos.TInfeSelect.Barras.Find(x => x.C_Barra.IsSelect | x.C_Barra.IsSelectArrastre);

            if (BarraSelect == null)
            {
                BarraSelect = F_Base.Proyecto.Edificio.PisoSelect.NervioSelect.Tendencia_Refuerzos.TSupeSelect.Barras.Find(x => x.C_Barra.IsSelect | x.C_Barra.IsSelectArrastre);
            }

            if (BarraSelect != null)
            {
                F_Base.EnviarEstado_Nervio(F_Base.Proyecto.Edificio.PisoSelect.NervioSelect);
                cBarra BarraClonada = cFunctionsProgram.DeepCloneFast(BarraSelect);
                if (BarraSelect.UbicacionRefuerzo == eUbicacionRefuerzo.Inferior)
                {
                    int IDMax = F_Base.Proyecto.Edificio.PisoSelect.NervioSelect.Tendencia_Refuerzos.TInfeSelect.Barras.Max(y => y.ID);
                    BarraClonada.ID = IDMax + 1;
                    BarraClonada.TendenciaOrigen = F_Base.Proyecto.Edificio.PisoSelect.NervioSelect.Tendencia_Refuerzos.TInfeSelect.Barras.Last().TendenciaOrigen;
                    F_Base.Proyecto.Edificio.PisoSelect.NervioSelect.Tendencia_Refuerzos.TInfeSelect.AgregarBarra(BarraClonada);


                    F_Base.Proyecto.Edificio.PisoSelect.NervioSelect.SimilitudNervioCompleto.NerviosSimilares.ForEach(N =>
                    {
                        cBarra BarraClonar2          = cFunctionsProgram.DeepCloneFast(BarraClonada);
                        BarraClonar2.TendenciaOrigen = N.Tendencia_Refuerzos.TInfeSelect;
                        N.Tendencia_Refuerzos.TInfeSelect.AgregarBarra(BarraClonar2);
                    });
                }
                else
                {
                    int IDMax = F_Base.Proyecto.Edificio.PisoSelect.NervioSelect.Tendencia_Refuerzos.TSupeSelect.Barras.Max(y => y.ID);
                    BarraClonada.ID = IDMax + 1;
                    BarraClonada.TendenciaOrigen = F_Base.Proyecto.Edificio.PisoSelect.NervioSelect.Tendencia_Refuerzos.TSupeSelect.Barras.Last().TendenciaOrigen;
                    F_Base.Proyecto.Edificio.PisoSelect.NervioSelect.Tendencia_Refuerzos.TSupeSelect.AgregarBarra(BarraClonada);
                }



                PB_VistaPerfilLongitudinalDiseno.Invalidate();
            }
        }
        private void PB_VistaPerfilLongitudinalDiseno_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                F_Base.Proyecto.Edificio.PisoSelect.NervioSelect.Tendencia_Refuerzos.TInfeSelect.Barras.ForEach(x => x.MouseDown(e.Location));
                F_Base.Proyecto.Edificio.PisoSelect.NervioSelect.Tendencia_Refuerzos.TSupeSelect.Barras.ForEach(x => x.MouseDown(e.Location));
                F_Base.Proyecto.Edificio.PisoSelect.NervioSelect.Tendencia_Refuerzos.TEstriboSelect.BloqueEstribos.ForEach(y => y.MouseDown(e.Location));
                BarraSelect = F_Base.Proyecto.Edificio.PisoSelect.NervioSelect.Tendencia_Refuerzos.TInfeSelect.Barras.Find(x => x.C_Barra.IsSelect);
                if (BarraSelect == null)
                {
                    BarraSelect = F_Base.Proyecto.Edificio.PisoSelect.NervioSelect.Tendencia_Refuerzos.TSupeSelect.Barras.Find(x => x.C_Barra.IsSelect);
                }
                F_Base.F_ModificadorDeRefuerzos.BarraSelect = BarraSelect;
                BloqueEstribos = F_Base.Proyecto.Edificio.PisoSelect.NervioSelect.Tendencia_Refuerzos.TEstriboSelect.BloqueEstribos.Find(y => y.Recuadro_ModoEdicion.IsSelect);
                F_Base.F_ModificadorDeRefuerzos.BloqueEstribosSelect = BloqueEstribos;
                PB_VistaPerfilLongitudinalDiseno.Invalidate();
            }

            // PB_VistaPerfilLongitudinalDiseno.Focus();
            // Activate();
        }
 private void AgregarBarraInferior()
 {
     F_Base.EnviarEstado_Nervio(F_Base.Proyecto.Edificio.PisoSelect.NervioSelect);
     if (F_Base.Proyecto.Edificio.PisoSelect.NervioSelect.Tendencia_Refuerzos.TInfeSelect.Barras.Count == 0)
     {
         F_Base.Proyecto.Edificio.PisoSelect.NervioSelect.Tendencia_Refuerzos.TInfeSelect.AgregarBarra(cFunctionsProgram.CrearBarraDefault(F_Base.Proyecto.Edificio.PisoSelect.NervioSelect.Tendencia_Refuerzos.TInfeSelect, eUbicacionRefuerzo.Inferior));
     }
     else
     {
         int    IDMax        = F_Base.Proyecto.Edificio.PisoSelect.NervioSelect.Tendencia_Refuerzos.TInfeSelect.Barras.Max(y => y.ID);
         cBarra BarraClonada = cFunctionsProgram.DeepCloneFast(F_Base.Proyecto.Edificio.PisoSelect.NervioSelect.Tendencia_Refuerzos.TInfeSelect.Barras.Last(x => x.ID == IDMax));
         BarraClonada.ID += 1;
         BarraClonada.TendenciaOrigen = F_Base.Proyecto.Edificio.PisoSelect.NervioSelect.Tendencia_Refuerzos.TInfeSelect.Barras.Last().TendenciaOrigen;
         F_Base.Proyecto.Edificio.PisoSelect.NervioSelect.Tendencia_Refuerzos.TInfeSelect.AgregarBarra(BarraClonada);
         F_Base.Proyecto.Edificio.PisoSelect.NervioSelect.SimilitudNervioCompleto.NerviosSimilares.ForEach(N =>
         {
             cBarra BarraClonada1          = cFunctionsProgram.DeepCloneFast(BarraClonada);
             BarraClonada1.TendenciaOrigen = N.Tendencia_Refuerzos.TInfeSelect;
             N.Tendencia_Refuerzos.TInfeSelect.AgregarBarra(BarraClonada1);
         });
     }
     PB_VistaPerfilLongitudinalDiseno.Invalidate();
 }
 public void EliminarBarra(cBarra Barra)
 {
     Barras.Remove(Barra);
     AsignarNivelABarras();
 }
 public bool Barra1ContieneBarra2(cBarra Barra1, cBarra Barra2)
 {
     return(Barra1.C_Barra.Reales.Min(y => y.X) <= Barra2.C_Barra.Reales.Min(y => y.X) && Barra1.C_Barra.Reales.Max(y => y.X) >= Barra2.C_Barra.Reales.Max(y => y.X));
 }
        public void Paint_AutoCAD(float X, float Y)
        {
            Barras.ForEach(x => x.Paint_AutoCAD(X, Y));

            //Agregar Cotas
            try
            {
                if (UbicacionRefuerzo == eUbicacionRefuerzo.Inferior)
                {
                    Barras.ForEach(Barra =>
                    {
                        if (!Barra.TraslpaoDerecha && !Barra.TraslapoIzquierda)
                        {
                            cSubTramo SubTramo = (cSubTramo)Tendencia_Refuerzo_Origen.NervioOrigen.Lista_Elementos.Find(x => x.IsVisibleCoordAutoCAD(Barra.XF) && x is cSubTramo);

                            if (SubTramo != null)
                            {
                                float Ymax = Barra.C_Barra.Reales.Max(x => x.Y);

                                PointF P1 = B_Operaciones_Matricialesl.Operaciones.Traslacion(new PointF(Barra.XF, Ymax), X, Y);
                                PointF P2 = B_Operaciones_Matricialesl.Operaciones.Traslacion(new PointF(SubTramo.Vistas.Perfil_AutoCAD.Reales[2].X, Ymax), X, Y);
                                FunctionsAutoCAD.AddCota(P1, P2, cVariables.C_Cotas, cVariables.Estilo_Cotas, cVariables.Desplazamiento_Cotas_RefuerzoInferior,
                                                         DeplazaTextY: cVariables.DesplazamientoTexto_Cotas);
                            }
                        }
                    });
                }
                else
                {
                    void AgregarCotaBarrasIndependietes(cBarra Barra, IElemento ElementoXF)
                    {
                        float  Ymax = Barra.C_Barra.Reales.Max(x => x.Y);
                        PointF P1   = B_Operaciones_Matricialesl.Operaciones.Traslacion(new PointF(ElementoXF.Vistas.Perfil_AutoCAD.Reales[0].X, Ymax), X, Y);
                        PointF P2   = B_Operaciones_Matricialesl.Operaciones.Traslacion(new PointF(Barra.C_Barra.Reales.Max(y => y.X), Ymax), X, Y);

                        FunctionsAutoCAD.AddCota(P1, P2, cVariables.C_Cotas, cVariables.Estilo_Cotas, -cVariables.Desplazamiento_Cotas_RefuerzoSuperior,
                                                 DeplazaTextY: cVariables.DesplazamientoTexto_Cotas);
                    }

                    int MaximoNivelBarras = Barras.Max(x => x.Nivel);
                    Barras.ForEach(Barra =>
                    {
                        IElemento ElementoXI = Tendencia_Refuerzo_Origen.NervioOrigen.Lista_Elementos.Find(x => x.IsVisibleCoordAutoCAD(Barra.C_Barra.Reales.Min(y => y.X)));
                        IElemento ElementoXF = Tendencia_Refuerzo_Origen.NervioOrigen.Lista_Elementos.Find(x => x.IsVisibleCoordAutoCAD(Barra.C_Barra.Reales.Max(y => y.X)));

                        if (!(ElementoXI is cApoyo) && !(ElementoXF is cApoyo) && Barra.GanchoDerecha == eTipoGancho.None && Barra.GanchoIzquierda == eTipoGancho.None)
                        {
                            if (Barra.Nivel == MaximoNivelBarras)
                            {
                                AgregarCotaBarrasIndependietes(Barra, ElementoXF);
                            }
                            else
                            {
                                cBarra BarraNivelPosterior = EncontrarBarraConentedora(Barra);
                                if (BarraNivelPosterior == null)
                                {
                                    AgregarCotaBarrasIndependietes(Barra, ElementoXF);
                                }
                                else
                                {
                                    float Ymax     = BarraNivelPosterior.C_Barra.Reales.Max(x => x.Y);
                                    float DespCota = Barra.C_Barra.Reales.Min(x => x.Y) - Ymax;
                                    PointF P1      = B_Operaciones_Matricialesl.Operaciones.Traslacion(new PointF(BarraNivelPosterior.C_Barra.Reales.Max(y => y.X), Ymax), X, Y);
                                    PointF P2      = B_Operaciones_Matricialesl.Operaciones.Traslacion(new PointF(Barra.C_Barra.Reales.Max(y => y.X), Barra.C_Barra.Reales.Min(x => x.Y)), X, Y);
                                    FunctionsAutoCAD.AddCota(P1, P2, cVariables.C_Cotas, cVariables.Estilo_Cotas, -DespCota - 0.13f,
                                                             DeplazaTextY: cVariables.DesplazamientoTexto_Cotas, RA: false);
                                }
                            }
                        }
                    });
                }

                Barras.ForEach(x => { x.CotaParaAutoCADIzquierda = false; x.CotaParaAutoCADDerecha = false; });
                Barras.ForEach(Barra =>
                {
                    if (Barra.TraslpaoDerecha && !Barra.CotaParaAutoCADDerecha)
                    {
                        List <cBarra> Barras1 = Barras.FindAll(x => x.TraslapoIzquierda);
                        foreach (cBarra barra in Barras1)
                        {
                            if (barra != Barra && XiPerteneceaX0X1(Barra.C_Barra.Reales.Min(y => y.X), Barra.C_Barra.Reales.Max(y => y.X), barra.XI))
                            {
                                Barra.CotaParaAutoCADDerecha   = true;
                                barra.CotaParaAutoCADIzquierda = true;
                                cBarra BarraPredominante       = barra.C_Barra.Reales.Max(x => x.Y) > Barra.C_Barra.Reales.Max(x => x.Y) ? barra : Barra;
                                float Ymax     = BarraPredominante.C_Barra.Reales.Min(x => x.Y);
                                float DespCota = cVariables.Desplazamiento_Cotas_RefuerzoInferior;
                                if (UbicacionRefuerzo == eUbicacionRefuerzo.Superior)
                                {
                                    DespCota = -cVariables.Desplazamiento_Cotas_RefuerzoSuperior;
                                }
                                PointF P1 = B_Operaciones_Matricialesl.Operaciones.Traslacion(new PointF(barra.C_Barra.Reales.Min(y => y.X), Ymax), X, Y);
                                PointF P2 = B_Operaciones_Matricialesl.Operaciones.Traslacion(new PointF(Barra.C_Barra.Reales.Max(y => y.X), Ymax), X, Y);
                                FunctionsAutoCAD.AddCota(P1, P2, cVariables.C_Cotas, cVariables.Estilo_Cotas, DespCota,
                                                         DeplazaTextY: cVariables.DesplazamientoTexto_Cotas, RA: false);
                            }
                        }
                    }
                });
            }
            catch
            {
            }
        }
        private void CompararBarras(cBarra Barra0, List <cBarra> Barras)
        {
            Barras.ForEach(Barra1 => {
                if (Barra0 != Barra1 && Barra0.Nivel == Barra1.Nivel)
                {
                    if (XiPerteneceaX0X1(Barra0.XI, Barra0.XF, Barra1.XI) && XiPerteneceaX0X1(Barra0.XI, Barra0.XF, Barra1.XF)) // Barra 0 Cotiene Barra 1
                    {
                        Barra1.Nivel = Barra0.Nivel + 1;
                    }
                    else
                    {
                        float DistanciaLongitud;
                        if (XiPerteneceaX0X1(Barra0.XI, Barra0.XF, Barra1.XI))
                        {
                            DistanciaLongitud = DeterminarLongBarraRecta(Barra1.XI, Barra0.XF);

                            if (DistanciaLongitud > Barra0.Traslapo + cVariables.ToleranciaTraslapo)
                            {
                                Barra1.Nivel = Barra0.Nivel + 1;
                                CompararBarras(Barra1, Barras);
                            }
                            else if (!Barra0.TraslpaoDerecha | !Barra1.TraslapoIzquierda)
                            {
                                Barra0.TraslpaoDerecha = true; Barra1.TraslapoIzquierda = true;
                                CompararBarras(Barra1, Barras);
                            }
                        }
                        else if (XiPerteneceaX0X1(Barra0.XI, Barra0.XF, Barra1.XF))
                        {
                            DistanciaLongitud = DeterminarLongBarraRecta(Barra0.XI, Barra1.XF);

                            if (DistanciaLongitud > Barra0.Traslapo + cVariables.ToleranciaTraslapo)
                            {
                                Barra1.Nivel = Barra0.Nivel + 1;
                                CompararBarras(Barra1, Barras);
                            }
                            else if (!Barra0.TraslapoIzquierda | !Barra1.TraslpaoDerecha)
                            {
                                Barra0.TraslapoIzquierda = true; Barra1.TraslpaoDerecha = true;
                                CompararBarras(Barra1, Barras);
                            }
                        }

                        else if (XiPerteneceaX0X1(Barra1.XI, Barra1.XF, Barra0.XF))
                        {
                            DistanciaLongitud = DeterminarLongBarraRecta(Barra0.XI, Barra1.XF);

                            if (DistanciaLongitud > Barra0.Traslapo + cVariables.ToleranciaTraslapo)
                            {
                                Barra0.Nivel = Barra1.Nivel + 1;
                                CompararBarras(Barra0, Barras);
                            }
                            else if (!Barra1.TraslapoIzquierda | !Barra0.TraslpaoDerecha)
                            {
                                Barra1.TraslapoIzquierda = true; Barra0.TraslpaoDerecha = true;
                                CompararBarras(Barra0, Barras);
                            }
                        }
                        else if (XiPerteneceaX0X1(Barra1.XI, Barra1.XF, Barra0.XI))
                        {
                            DistanciaLongitud = DeterminarLongBarraRecta(Barra0.XI, Barra1.XF);

                            if (DistanciaLongitud > Barra0.Traslapo + cVariables.ToleranciaTraslapo)
                            {
                                Barra0.Nivel = Barra1.Nivel + 1;
                                CompararBarras(Barra0, Barras);
                            }
                            else if (!Barra1.TraslpaoDerecha | !Barra0.TraslapoIzquierda)
                            {
                                Barra1.TraslpaoDerecha = true; Barra0.TraslapoIzquierda = true;
                                CompararBarras(Barra0, Barras);
                            }
                        }
                    }
                }
            });
        }
 public void AgregarBarra(cBarra Barra)
 {
     Barras.Add(Barra);
     AsignarNivelABarras();
 }