public float AporteRelacion_As_S_aEstacion(cEstacion estacion, List <cBloqueEstribos> bloqueEstribos)
        {
            float As_S = cDiccionarios.AceroBarras[noBarra] * NoRamas / (separacion * cConversiones.Dimension_m_to_cm);
            float x    = estacion.CoordX + estacion.SubTramoOrigen.Vistas.Perfil_AutoCAD.Reales.Min(y => y.X);

            var XCaraAp1 = estacion.SubTramoOrigen.TramoOrigen.Lista_SubTramos.First().Vistas.Perfil_AutoCAD.Reales.Min(y => y.X);
            var XCaraAp2 = estacion.SubTramoOrigen.TramoOrigen.Lista_SubTramos.Last().Vistas.Perfil_AutoCAD.Reales.Max(y => y.X);


            if (IsVisible(XI, XF, x) || ((float)Math.Round(Math.Abs(x - XCaraAp1), cVariables.CifrasDeciSepEstribos) <= cVariables.d_CaraApoyo && (float)Math.Round(Math.Abs(XI - XCaraAp1), cVariables.CifrasDeciSepEstribos) <= cVariables.d_CaraApoyo) ||
                ((float)Math.Round(Math.Abs(x - XCaraAp2), cVariables.CifrasDeciSepEstribos) <= cVariables.d_CaraApoyo && (float)Math.Round(Math.Abs(XF - XCaraAp2), cVariables.CifrasDeciSepEstribos) <= cVariables.d_CaraApoyo))
            {
                return(As_S);
            }
            else if (cantidad == 1 && IsVisible(XI - Separacion / 2f, XF + Separacion / 2F, x))
            {
                return(As_S);
            }
            else
            {
                foreach (cBloqueEstribos bloque in bloqueEstribos)
                {
                    float Xi = XI - Separacion;
                    float Xf = XF + Separacion;

                    if (bloque != this && bloque.IsVisible(Xi, Xf) && x >= bloque.XF && x <= XI && x <= XF)
                    {
                        return(As_S);
                    }
                }

                return(0f);
            }
        }
        public bool IsVisible(cEstacion estacion)
        {
            float x        = estacion.CoordX + estacion.SubTramoOrigen.Vistas.Perfil_AutoCAD.Reales.Min(y => y.X);
            var   XCaraAp1 = estacion.SubTramoOrigen.TramoOrigen.Lista_SubTramos.First().Vistas.Perfil_AutoCAD.Reales.Min(y => y.X);
            var   XCaraAp2 = estacion.SubTramoOrigen.TramoOrigen.Lista_SubTramos.Last().Vistas.Perfil_AutoCAD.Reales.Max(y => y.X);

            return(IsVisible(XI, XF, x) || ((float)Math.Round(Math.Abs(x - XCaraAp1), cVariables.CifrasDeciSepEstribos) <= cVariables.d_CaraApoyo && (float)Math.Round(Math.Abs(XI - XCaraAp1), cVariables.CifrasDeciSepEstribos) <= cVariables.d_CaraApoyo) ||
                   ((float)Math.Round(Math.Abs(x - XCaraAp2), cVariables.CifrasDeciSepEstribos) <= cVariables.d_CaraApoyo && (float)Math.Round(Math.Abs(XF - XCaraAp2), cVariables.CifrasDeciSepEstribos) <= cVariables.d_CaraApoyo));
        }
Пример #3
0
        public static cEstacion EstacionMasCercana(this List <cEstacion> estaciones, float X)
        {
            float MenorDistancia = 99999; cEstacion EstacionCercana = null;

            foreach (cEstacion Estacion in estaciones)
            {
                float Distancia = Math.Abs(Estacion.CoordX + Estacion.SubTramoOrigen.Vistas.Perfil_AutoCAD.Reales.First().X - X);

                if (Distancia < MenorDistancia)
                {
                    MenorDistancia  = Distancia;
                    EstacionCercana = Estacion;
                }
            }
            return(EstacionCercana);
        }