コード例 #1
0
 public cCalculos(cSubTramo SubtramoOrigen, cEstacion EstacionOrigen)
 {
     this.SubtramoOrigen            = SubtramoOrigen;
     Solicitacion_Asignado_Momentos = new cSolicitacion_Asignado_Momentos(this);
     Solicitacion_Asignado_Cortante = new c_Solicitacion_Asignado_Cortante(this);
     this.EstacionOrigen            = EstacionOrigen;
 }
コード例 #2
0
        private void CrearEnvolventeConSimilitud()
        {
            cNervio   NervioOrigen   = CalculosOrigen.SubtramoOrigen.TramoOrigen.NervioOrigen;
            cEstacion EstacionOrigen = CalculosOrigen.EstacionOrigen;


            List <cSolicitacion> Lista_Solici2 = new List <cSolicitacion>();

            Lista_Solici2.AddRange(lista_solicitaciones);

            if (NervioOrigen.SimilitudNervioCompleto.IsMaestro)
            {
                foreach (cNervio N in NervioOrigen.SimilitudNervioCompleto.NerviosSimilares)
                {
                    cSubTramo SubTramo = (cSubTramo)N.Lista_Elementos.Find(y => y.Indice == CalculosOrigen.SubtramoOrigen.Indice);

                    cEstacion EstacionFind = EstacionOrigen.EstacionMasCercana(SubTramo.Estaciones);
                    Lista_Solici2.AddRange(EstacionFind.Lista_Solicitaciones);
                }
            }
            else if (NervioOrigen.SimilitudNervioCompleto.BoolSoySimiarA)
            {
                cNervio       NervioQueEs    = NervioOrigen.SimilitudNervioCompleto.SoySimiarA.FindNervio();
                cSubTramo     SubTramo       = (cSubTramo)NervioQueEs.Lista_Elementos.Find(y => y.Indice == CalculosOrigen.SubtramoOrigen.Indice);
                cEstacion     EstacionFind   = EstacionOrigen.EstacionMasCercana(SubTramo.Estaciones);
                cSolicitacion cSolicitacion1 = new cSolicitacion("ENV", 0, -EstacionFind.Calculos.Envolvente.V2[0], 0, 0, EstacionFind.Calculos.Envolvente.M3[0], 0);
                cSolicitacion cSolicitacion2 = new cSolicitacion("ENV2", 0, -EstacionFind.Calculos.Envolvente.V2[1], 0, 0, EstacionFind.Calculos.Envolvente.M3[1], 0);
                Lista_Solici2.Add(cSolicitacion1); Lista_Solici2.Add(cSolicitacion2);
            }

            float M3MaxPositivo = Lista_Solici2.FindAll(x => x.SelectEnvolvente).Max(x => x.M3);
            float M3MaxNegativo = Lista_Solici2.FindAll(x => x.SelectEnvolvente).Min(x => x.M3);
            float V2MaxPositivo = Lista_Solici2.FindAll(x => x.SelectEnvolvente).Max(x => x.V2);
            float V2MaxNegativo = Lista_Solici2.FindAll(x => x.SelectEnvolvente).Min(x => x.V2);


            if (M3MaxPositivo < 0)
            {
                M3MaxPositivo = 0;
            }
            if (M3MaxNegativo > 0)
            {
                M3MaxNegativo = 0;
            }
            if (V2MaxPositivo < 0)
            {
                V2MaxPositivo = 0;
            }
            if (V2MaxNegativo > 0)
            {
                V2MaxNegativo = 0;
            }
            M3 = new float[] { M3MaxPositivo, M3MaxNegativo };
            V2 = new float[] { -V2MaxPositivo, -V2MaxNegativo };
            Envolvente_CambioCrearEnvolvente();
        }
コード例 #3
0
        public float AporteMomentoAEstacion(cEstacion Estacion, cSubTramo SubTramo)
        {
            float B = SubTramo.Seccion.B; float H = SubTramo.Seccion.H; float fc = SubTramo.Seccion.Material.fc;
            float d1 = SubTramo.TramoOrigen.NervioOrigen.r1 + cDiccionarios.DiametrosBarras[noBarra] / 2; float d2 = SubTramo.TramoOrigen.NervioOrigen.r2 + cDiccionarios.DiametrosBarras[noBarra] / 2;
            float fy = SubTramo.Seccion.Material.fy;

            return(ubicacionRefuerzo == eUbicacionRefuerzo.Inferior
                ? B_FC_DiseñoVigas.DiseñoYRevisonVigasRectangulares.Revision(B, H, d2, d1, fc, fy, AporteAceroAEstacion(Estacion, SubTramo), 0f)[0] * cConversiones.Momento__kgf_cm_to_Ton_m
                : B_FC_DiseñoVigas.DiseñoYRevisonVigasRectangulares.Revision(B, H, d1, d2, fc, fy, AporteAceroAEstacion(Estacion, SubTramo), 0f)[0] * cConversiones.Momento__kgf_cm_to_Ton_m);
        }
コード例 #4
0
        public override bool Equals(object obj)
        {
            if (obj is cEstacion)
            {
                cEstacion temp = (cEstacion)obj;

                if (temp.StoryLinea == StoryLinea & temp.NombreLinea == NombreLinea & temp.Localizacion == Localizacion)
                {
                    return(true);
                }
            }

            return(false);
        }
コード例 #5
0
        public cEstacion EstacionMasCercana(List <cEstacion> Estaciones)
        {
            float MenorDistancia = 99999; cEstacion EstacionCercana = null;

            foreach (cEstacion Estacion in Estaciones)
            {
                float Distancia = Math.Abs(Estacion.CoordX - CoordX);

                if (Distancia < MenorDistancia)
                {
                    MenorDistancia  = Distancia;
                    EstacionCercana = Estacion;
                }
            }
            return(EstacionCercana);
        }
コード例 #6
0
        public float AporteAceroAEstacion(cEstacion Estacion, cSubTramo Subtramo)
        {
            float XE = (float)Math.Round(Subtramo.Vistas.Perfil_Original.Reales.Min(X => X.X) + Estacion.CoordX, cVariables.CifrasDeciLongBarra);
            float Ld = traslapo;
            float xiL = xi; float xfL = xf;

            if (Subtramo.Indice == 0)
            {
                xiL = (float)Math.Floor((xiL - cVariables.RExtremoIzquierdo) * 100f) / 100f;
            }
            else if (Subtramo.Indice == TendenciaOrigen.Tendencia_Refuerzo_Origen.NervioOrigen.Lista_Elementos.Last().Indice)
            {
                xfL = (float)Math.Ceiling((xfL + cVariables.RExtremoDerecho) * 100f) / 100f;
            }

            if (xiL <= XE && XE <= xiL + Ld)
            {
                if (!traslapoIzquieda && ganchoIzquierdo == eTipoGancho.None)
                {
                    return(cFunctionsProgram.InterpolacionY(xiL, 0f, xiL + Ld, AreaTotal, XE));
                }
                else
                {
                    return(AreaTotal);
                }
            }

            else if (xfL - Ld <= XE && XE <= xfL)
            {
                if (!traslapoDerecha && ganchoDerecha == eTipoGancho.None)
                {
                    return(cFunctionsProgram.InterpolacionY(xfL - Ld, AreaTotal, xfL, 0f, XE));
                }
                else
                {
                    return(AreaTotal);
                }
            }
            else if (xiL <= XE && XE <= xfL)
            {
                return(AreaTotal);
            }
            else
            {
                return(0f);
            }
        }
コード例 #7
0
 public bool EstacionEnBarra(cEstacion Estacion, cSubTramo Subtramo)
 {
     if (AreaTotal != 0)
     {
         float xiL = xi; float xfL = xf;
         if (Subtramo.Indice == 0)
         {
             xiL -= cVariables.RExtremoIzquierdo;
         }
         else if (Subtramo.Indice == TendenciaOrigen.Tendencia_Refuerzo_Origen.NervioOrigen.Lista_Elementos.Last().Indice)
         {
             xfL += cVariables.RExtremoDerecho;
             xfL  = (float)Math.Ceiling(xfL * 100f) / 100f;
         }
         float CoordenaXMenor = Subtramo.Vistas.Perfil_Original.Reales.Min(X => X.X); float A = (float)Math.Ceiling(xfL * 100f) / 100f;
         float XE = (float)Math.Round(CoordenaXMenor + Estacion.CoordX, cVariables.CifrasDeciLongBarra);
         return(Math.Floor(xiL * 100f) / 100f <= CoordenaXMenor + Estacion.CoordX && XE <= xfL);
     }
     else
     {
         return(false);
     }
 }
コード例 #8
0
 public cPuntoInfelxion(cEstacion Estacion)
 {
     SubTramo = Estacion.SubTramoOrigen;
     CoordX   = Estacion.CoordX + SubTramo.Vistas.Perfil_Original.Reales.Min(x => x.X);
 }