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)); }
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); }