public static CompositeGeometry Layout(this PerimeterReinforcement reinforcement, CircleProfile dimensions, ConcreteSection property) { double d = dimensions.Diameter; List <Point> location = new List <Point>(); double angle = Math.PI * 2 / reinforcement.BarCount; double startAngle = 0; double radius = d / 2 - property.MinimumCover - reinforcement.Diameter / 2; switch (reinforcement.Pattern) { case ReinforcementPattern.Horizontal: startAngle = angle / 2; break; } for (int i = 0; i < reinforcement.BarCount; i++) { double x = Math.Cos(startAngle + angle * i) * radius; double y = Math.Sin(startAngle + angle * i) * radius; location.Add(new Point { X = x, Y = y, Z = 0 }); } return(new CompositeGeometry { Elements = location.ToList <IGeometry>() }); }
public static CompositeGeometry Layout(this PerimeterReinforcement reinforcement, RectangleProfile dimensions, ConcreteSection property) { double h = dimensions.Height; double w = dimensions.Width; double tieDiameter = property.TieDiameter(); List <Point> location = new List <Point>(); int topCount = 0; int sideCount = 0; double tieOffset = tieDiameter + Math.Cos(Math.PI / 4) * (2 * tieDiameter * (Math.Sqrt(2) - 1) + reinforcement.Diameter / 2) - reinforcement.Diameter / 2; switch (reinforcement.Pattern) { case ReinforcementPattern.Equispaced: topCount = (int)(reinforcement.BarCount * w / (2 * w + 2 * h) + 1); sideCount = (reinforcement.BarCount - 2 * topCount) / 2 + 2; break; case ReinforcementPattern.Horizontal: topCount = reinforcement.BarCount / 2; sideCount = 2; break; case ReinforcementPattern.Vertical: topCount = 2; sideCount = reinforcement.BarCount / 2; break; } double verticalSpacing = (h - 2 * property.MinimumCover - reinforcement.Diameter - 2 * tieOffset) / (sideCount - 1); double depth = property.MinimumCover + reinforcement.Diameter / 2 + tieOffset; for (int i = 0; i < sideCount; i++) { int count = topCount; double currentDepth = depth + i * verticalSpacing; if (i > 0 && i < sideCount - 1) { count = 2; } List <IGeometry> layout = ((CompositeGeometry) new LayerReinforcement { Diameter = reinforcement.Diameter, Depth = currentDepth, BarCount = count }.Layout(property)).Elements; foreach (IGeometry geom in layout) { location.Add(geom as Point); } } return(new CompositeGeometry { Elements = location.ToList <IGeometry>() }); }
/***************************************************/ public static bool IsLongitudinal(this PerimeterReinforcement reinforcement) { return(true); }
public static CompositeGeometry Layout(this PerimeterReinforcement reinforcement, IProfile dimensions, ConcreteSection property) { //TODO: Implement for various cross section types return(new CompositeGeometry()); }
public static CompositeGeometry Layout(this PerimeterReinforcement reinforcement, ConcreteSection property, bool extrude = false) { return(Layout(reinforcement, property.SectionProfile as dynamic, property)); }
public static bool IsLongitudinal(this PerimeterReinforcement reinforcement) { return(reinforcement.IsNull() ? false : true); }