private ISliceableSection CalculateTransformedSection() { var TransformedRebarShapes = GetTransformedRebarShapes(Section.SliceableShape.YMax, Section.SliceableShape.YMin); CompoundShape compoundShape = this.Section.SliceableShape as CompoundShape; if (compoundShape != null) { List <CompoundShapePart> parts = compoundShape.RectanglesXAxis.Select(cs => cs).ToList(); var UniqueYPointsForBars = this.LongitudinalBars.Select(b => b.Coordinate.Y).Distinct(); foreach (var YPoint in UniqueYPointsForBars) { var pointsAtThisY = TransformedRebarShapes.Where(b => b.GetElasticCentroidCoordinate().Y == YPoint); if (pointsAtThisY != null) { double A_total = pointsAtThisY.Sum(p => p.A); double b_total = pointsAtThisY.Sum(p => p.XMax - p.XMin); double h_average = A_total / b_total; CompoundShapePart part = new CompoundShapePart(b_total, h_average, new Point2D(0, YPoint)); parts.Add(part); } } ArbitraryCompoundShape combinedShape = new ArbitraryCompoundShape(parts, null); return(combinedShape); } else { return(Section.SliceableShape as ISliceableSection); } }
/// <summary> /// Defines a set of rectangles for analysis with respect to /// y-axis, each occupying full height of section. The rectangles are rotated 90 deg., /// because internally the properties are calculated with respect to x-axis. /// </summary> /// <returns>List of analysis rectangles</returns> public override List <CompoundShapePart> GetCompoundRectangleYAxisList() { double FlangeThickness = this.t_f; double FlangeWidth = this.b_f; r = k - t_f; double FlangeOverhang = (FlangeWidth - t_w - 2.0 * r) / 2.0; CompoundShapePart LeftFlange = new CompoundShapePart(2 * FlangeThickness, FlangeOverhang, new Point2D(0, b_f - FlangeOverhang / 2.0)); CompoundShapePart RightFlange = new CompoundShapePart(2 * FlangeThickness, FlangeOverhang, new Point2D(0, FlangeOverhang / 2.0)); PartWithDoubleFillet LeftFillet = new PartWithDoubleFillet(r, 2 * FlangeThickness, new Point2D(0, b_f - FlangeOverhang), false); PartWithDoubleFillet RightFillet = new PartWithDoubleFillet(r, 2 * FlangeThickness, new Point2D(0, FlangeOverhang), true); CompoundShapePart Web = new CompoundShapePart(d, t_w, new Point2D(0, b_f / 2)); List <CompoundShapePart> rectY = new List <CompoundShapePart>() { LeftFlange, LeftFillet, Web, RightFillet, RightFlange }; return(rectY); }
/// <summary> /// Defines a set of rectangles for analysis with respect to /// x-axis, each occupying full width of section. /// </summary> /// <returns>List of analysis rectangles</returns> public override List <CompoundShapePart> GetCompoundRectangleXAxisList() { CompoundShapePart TopFlange = null; CompoundShapePart BottomFlange = null; if (N_holes == 2) { TopFlange = new CompoundShapePart(b_f - 2.0 * b_hole, t_f, new Point2D(0, d - t_f / 2.0)); BottomFlange = new CompoundShapePart(b_f - 2.0 * b_hole, t_f, new Point2D(0, t_f / 2.0)); } else if (N_holes == 4) { TopFlange = new CompoundShapePart(b_f - 4.0 * b_hole, t_f, new Point2D(0, d - t_f / 2.0)); BottomFlange = new CompoundShapePart(b_f - 4.0 * b_hole, t_f, new Point2D(0, t_f / 2.0)); } else { throw new Exception("Only section with 2 or 4 holes per flange are supported."); } CompoundShapePart Web = new CompoundShapePart(t_w, d - 2 * t_f, new Point2D(0, d / 2.0)); List <CompoundShapePart> rectX = new List <CompoundShapePart>() { TopFlange, Web, BottomFlange }; return(rectX); }
public void CompoundShapeReturnsPNA_W() { //Properties double d = 17.7; double b_f = 6.00; double t_w = 0.300; double t_f = 0.425; double k = 0.827; double refValue = d / 2; CompoundShapePart TopFlange = new CompoundShapePart(b_f, t_f, new Point2D(0, d - t_f / 2)); CompoundShapePart BottomFlange = new CompoundShapePart(b_f, t_f, new Point2D(0, t_f / 2)); CompoundShapePart Web = new CompoundShapePart(t_w, d - 2 * (t_f + k), new Point2D(0, d / 2)); PartWithDoubleFillet TopFillet = new PartWithDoubleFillet(k, t_w, new Point2D(0, d - t_f), true); PartWithDoubleFillet BottomFillet = new PartWithDoubleFillet(k, t_w, new Point2D(0, t_f), false); List <CompoundShapePart> Ishape = new List <CompoundShapePart>() { BottomFlange, BottomFillet, Web, TopFillet, TopFlange, }; ArbitraryCompoundShape shape = new ArbitraryCompoundShape(Ishape, null); double y_pCalculated = shape.y_pBar; double actualTolerance = EvaluateActualTolerance(y_pCalculated, refValue); Assert.LessOrEqual(actualTolerance, tolerance); }
private List <CompoundShapePart> GetProjectedYRectangles(List <ThinWallSegment> crossingSegments) { List <CompoundShapePart> ProjectedSegments = new List <CompoundShapePart>(); foreach (var s in crossingSegments) { CompoundShapePart p; double dy = s.Line.YMax - s.Line.YMin; double dx = s.Line.XMax - s.Line.XMin; double L = s.Line.Length; if (dy / dx < 0.05) { //HORIZONTAL LINE p = new CompoundShapePart(dx, s.WallThickness, new Point2D(0, s.Line.YMax)); } else { //VERTICAL LINE if (dx / dy < 0.05) { p = new CompoundShapePart(s.WallThickness, dy, new Point2D(0, (s.Line.YMax + s.Line.YMin) / 2.0)); } else { //SLOPED LINE double angleFromHorizontal = Math.Atan(dy / dx); double t_eff = s.WallThickness / Math.Sin(angleFromHorizontal); p = new CompoundShapePart(t_eff, dy, new Point2D(0, (s.Line.YMax + s.Line.YMin) / 2.0)); } } ProjectedSegments.Add(p); } return(ProjectedSegments.OrderBy(r => r.InsertionPoint.Y).ToList()); }
public override List<CompoundShapePart> GetCompoundRectangleXAxisList() { Point2D cg = Centroid; List<CompoundShapePart> rectangles = new List<CompoundShapePart>(); double s = (d_p - (l_edgeTop + l_edgeBottom)) / (N_rows - 1); double a_cTop = l_edgeTop - d_hole / 2.0; double a_cBot = l_edgeBottom - d_hole / 2.0; double l_clear = s - d_hole; CompoundShapePart rb = new CompoundShapePart(t_p, a_cBot, new Point2D(0, cg.Y+a_cBot / 2)); double y_bot = a_cBot; rectangles.Add(rb); for (int i = 0; i < (N_rows-1); i++) { CompoundShapePart hole = new CompoundShapePart(0, d_hole, new Point2D(0,cg.Y+ y_bot + d_hole / 2)); y_bot = y_bot + d_hole; rectangles.Add(hole); CompoundShapePart solid = new CompoundShapePart(t_p, l_clear, new Point2D(0,cg.Y+ y_bot + l_clear / 2)); y_bot = y_bot + l_clear; rectangles.Add(solid); } CompoundShapePart lasthole = new CompoundShapePart(0, d_hole, new Point2D(0, cg.Y+y_bot + d_hole / 2)); y_bot = y_bot + d_hole; rectangles.Add(lasthole); CompoundShapePart rt = new CompoundShapePart(t_p, a_cTop, new Point2D(0, cg.Y + y_bot+a_cTop / 2)); rectangles.Add(rt); return rectangles; }
/// <summary> /// Defines a set of rectangles for analysis with respect to /// y-axis, each occupying full height of section. The rectangles are rotated 90 deg., /// because internally the properties are calculated with respect to x-axis. /// </summary> /// <returns>List of analysis rectangles</returns> public override List <CompoundShapePart> GetCompoundRectangleYAxisList() { double FlangeThickness = this.t_f; double FlangeWidth = this.b_fTop; double ShiftX = 0; if (InsertAtMidHeight == true) { ShiftX = b_f / 2.0; } // I-shape converted to X-shape double FlangeOverhang = (b_f - t_w) / 2.0; CompoundShapePart LeftFlange = new CompoundShapePart(2 * t_f, FlangeOverhang, new Point2D(0, b_f - FlangeOverhang / 2.0 - ShiftX)); CompoundShapePart RightFlange = new CompoundShapePart(2 * t_f, FlangeOverhang, new Point2D(0, FlangeOverhang / 2.0 - ShiftX)); CompoundShapePart Web = new CompoundShapePart(d, t_w, new Point2D(0, b_f / 2.0)); List <CompoundShapePart> rectY = new List <CompoundShapePart>() { LeftFlange, Web, RightFlange }; return(rectY); }
public void CompoundShapeReturnsPNA_SymmetricIShape() { //Properties double d = 10; double b_f = 8; double t_w = 1; double t_f = 1; double refValue = d / 2; CompoundShapePart TopFlange = new CompoundShapePart(b_f, t_f, new Point2D(0, d - t_f / 2)); CompoundShapePart BottomFlange = new CompoundShapePart(b_f, t_f, new Point2D(0, t_f / 2)); CompoundShapePart Web = new CompoundShapePart(t_w, d - 2 * t_f, new Point2D(0, d / 2)); List <CompoundShapePart> Ishape = new List <CompoundShapePart>() { BottomFlange, Web, TopFlange }; ArbitraryCompoundShape shape = new ArbitraryCompoundShape(Ishape, null); double y_pCalculated = shape.y_pBar; double actualTolerance = EvaluateActualTolerance(y_pCalculated, refValue); Assert.LessOrEqual(actualTolerance, tolerance); }
public void CompoundShapeReturnsPNA_WT() { //Properties double d = 8.49; double b_f = 10.4; double t_w = 0.585; double t_f = 0.985; double k = 1.39; double y_p = 0.706; double refValue = d - y_p; CompoundShapePart TopFlange = new CompoundShapePart(b_f, t_f, new Point2D(0, d - t_f / 2)); PartWithDoubleFillet TopFillet = new PartWithDoubleFillet(k, t_w, new Point2D(0, d - t_f), true); CompoundShapePart Web = new CompoundShapePart(t_w, d - t_f - k, new Point2D(0, d / 2)); List <CompoundShapePart> tee = new List <CompoundShapePart>() { TopFlange, TopFillet, Web, }; ArbitraryCompoundShape shape = new ArbitraryCompoundShape(tee, null); double y_pCalculated = shape.y_pBar; double actualTolerance = EvaluateActualTolerance(y_pCalculated, refValue); Assert.LessOrEqual(actualTolerance, tolerance); }
public override List <CompoundShapePart> GetCompoundRectangleXAxisList() { Point2D cg = Centroid; List <CompoundShapePart> rectangles = new List <CompoundShapePart>(); double s = (d_p - (l_edgeTop + l_edgeBottom)) / (N_rows - 1); double a_cTop = l_edgeTop - d_hole / 2.0; double a_cBot = l_edgeBottom - d_hole / 2.0; double l_clear = s - d_hole; CompoundShapePart rb = new CompoundShapePart(t_p, a_cBot, new Point2D(0, cg.Y + a_cBot / 2)); double y_bot = a_cBot; rectangles.Add(rb); for (int i = 0; i < (N_rows - 1); i++) { CompoundShapePart hole = new CompoundShapePart(0, d_hole, new Point2D(0, cg.Y + y_bot + d_hole / 2)); y_bot = y_bot + d_hole; rectangles.Add(hole); CompoundShapePart solid = new CompoundShapePart(t_p, l_clear, new Point2D(0, cg.Y + y_bot + l_clear / 2)); y_bot = y_bot + l_clear; rectangles.Add(solid); } CompoundShapePart lasthole = new CompoundShapePart(0, d_hole, new Point2D(0, cg.Y + y_bot + d_hole / 2)); y_bot = y_bot + d_hole; rectangles.Add(lasthole); CompoundShapePart rt = new CompoundShapePart(t_p, a_cTop, new Point2D(0, cg.Y + y_bot + a_cTop / 2)); rectangles.Add(rt); return(rectangles); }
/// <summary> /// Defines a set of rectangles for analysis with respect to /// x-axis, each occupying full width of section. /// </summary> /// <returns>List of analysis rectangles</returns> public override List <CompoundShapePart> GetCompoundRectangleXAxisList() { double t_f = this.t_f; double b_f = this.b_fTop; CompoundShapePart TopFlange = new CompoundShapePart(b_f, t_f, new Point2D(0, d - t_f / 2.0)); CompoundShapePart BottomFlange = new CompoundShapePart(b_f, t_f, new Point2D(0, t_f / 2.0)); double h_webUpper = (d - 2.0 * t_f) / 2.0 - (e + h_o / 2.0 + t_r); double y_WebUpper = d - t_f - h_webUpper / 2.0; CompoundShapePart WebUpper = new CompoundShapePart(t_w, h_webUpper, new Point2D(0, y_WebUpper)); double h_webLower = (d - 2.0 * t_f) / 2.0 - (-e + h_o / 2.0 + t_r); double y_WebLower = t_f + h_webLower / 2.0; CompoundShapePart WebLower = new CompoundShapePart(t_w, h_webLower, new Point2D(0, y_WebLower)); double y_ReinfUpper = d - t_f - h_webUpper - t_r / 2.0;; CompoundShapePart ReinfUpper; if (IsOneSidedReinforcement == true) { ReinfUpper = new CompoundShapePart(b_r + t_w, t_r, new Point2D(0, y_ReinfUpper)); } else { ReinfUpper = new CompoundShapePart(2.0 * b_r + t_w, t_r, new Point2D(0, y_ReinfUpper)); } double y_ReinfLower = t_f + h_webLower + t_r / 2.0;; CompoundShapePart ReinfLower; if (IsOneSidedReinforcement == true) { ReinfLower = new CompoundShapePart(b_r + t_w, t_r, new Point2D(0, y_ReinfLower)); } else { ReinfLower = new CompoundShapePart(2.0 * b_r + t_w, t_r, new Point2D(0, y_ReinfLower)); } CompoundShapePart Hole = new CompoundShapePart(0, h_o, new Point2D(0, d / 2.0 + e)); List <CompoundShapePart> rectX = new List <CompoundShapePart>() { TopFlange, WebUpper, ReinfUpper, Hole, ReinfLower, WebLower, BottomFlange }; return(rectX); }
/// <summary> /// Defines a set of rectangles for analysis with respect to /// x-axis, each occupying full width of section. /// </summary> /// <returns>List of analysis rectangles</returns> public override List<CompoundShapePart> GetCompoundRectangleXAxisList() { double t_f = this.t_f; double b_f = this.b_fTop; CompoundShapePart TopFlange = new CompoundShapePart(b_f, t_f, new Point2D(0, d - t_f / 2.0)); CompoundShapePart BottomFlange = new CompoundShapePart(b_f, t_f, new Point2D(0, t_f / 2.0)); double h_webUpper = (d - 2.0 * t_f)/2.0 -(e+h_o/2.0+t_r); double y_WebUpper = d - t_f - h_webUpper / 2.0; CompoundShapePart WebUpper = new CompoundShapePart(t_w, h_webUpper, new Point2D(0, y_WebUpper)); double h_webLower = (d - 2.0 * t_f) / 2.0 - (-e + h_o / 2.0 + t_r); double y_WebLower = t_f + h_webLower / 2.0; CompoundShapePart WebLower = new CompoundShapePart(t_w, h_webLower, new Point2D(0, y_WebLower)); double y_ReinfUpper = d - t_f - h_webUpper - t_r / 2.0; ; CompoundShapePart ReinfUpper; if (IsOneSidedReinforcement == true) { ReinfUpper = new CompoundShapePart(b_r+t_w, t_r, new Point2D(0, y_ReinfUpper)); } else { ReinfUpper = new CompoundShapePart(2.0*b_r + t_w, t_r, new Point2D(0, y_ReinfUpper)); } double y_ReinfLower = t_f + h_webLower + t_r / 2.0; ; CompoundShapePart ReinfLower; if (IsOneSidedReinforcement == true) { ReinfLower = new CompoundShapePart(b_r+t_w, t_r, new Point2D(0, y_ReinfLower)); } else { ReinfLower = new CompoundShapePart(2.0*b_r + t_w, t_r, new Point2D(0, y_ReinfLower)); } CompoundShapePart Hole = new CompoundShapePart(0, h_o, new Point2D(0, d / 2.0 + e)); List<CompoundShapePart> rectX = new List<CompoundShapePart>() { TopFlange, WebUpper, ReinfUpper, Hole, ReinfLower, WebLower, BottomFlange }; return rectX; }
public override List <CompoundShapePart> GetCompoundRectangleYAxisList() { List <CompoundShapePart> allParts = new List <CompoundShapePart>(); var UniqueWidths = rectangles.Select(r => r.B).Distinct().OrderByDescending(n => n).ToList(); List <CompoundShapePart> halfOfParts = new List <CompoundShapePart>(); double YCoord = 0; double HPrev = 0; double BPrev = 0; for (int i = 0; i < UniqueWidths.Count(); i++) { double thisSegmentHeight = 0; if (i < UniqueWidths.Count() - 1) { thisSegmentHeight = (UniqueWidths[i] - UniqueWidths[i + 1]) / 2.0; } else { thisSegmentHeight = UniqueWidths[i] / 2.0; } double thisSegmentWidth = BPrev + rectangles.Where(r => r.B == UniqueWidths[i]).Sum(rect => rect.H); YCoord = HPrev + thisSegmentHeight / 2.0; CompoundShapePart thisPart = new CompoundShapePart(thisSegmentWidth, thisSegmentHeight, new Mathematics.Point2D(0, YCoord)); halfOfParts.Add(thisPart); //save height and width for previous iterations HPrev = HPrev + thisSegmentHeight; BPrev = thisSegmentWidth; } //mirror rectangles double LeftFaceOffset = halfOfParts.Select(p => p.Ymax).Max(); foreach (var part in halfOfParts) { allParts.Add(new CompoundShapePart(part.b, part.h, new Mathematics.Point2D(0, LeftFaceOffset - part.InsertionPoint.Y))); allParts.Add(new CompoundShapePart(part.b, part.h, new Mathematics.Point2D(0, -(LeftFaceOffset - part.InsertionPoint.Y)))); } return(allParts); }
/// <summary> /// Defines a set of rectangles for analysis with respect to /// x-axis, each occupying full width of section. /// </summary> /// <returns>List of analysis rectangles</returns> public override List <CompoundShapePart> GetCompoundRectangleXAxisList() { double t_f = this.t_f; double b_f = this.b_fTop; CompoundShapePart TopFlange = new CompoundShapePart(b_f, t_f, new Point2D(0, d - t_f / 2)); CompoundShapePart BottomFlange = new CompoundShapePart(b_f, t_f, new Point2D(0, t_f / 2)); CompoundShapePart Web = new CompoundShapePart(t_w, d - 2 * t_f, new Point2D(0, d / 2)); List <CompoundShapePart> rectX = new List <CompoundShapePart>() { TopFlange, Web, BottomFlange }; return(rectX); }
double r; //fillet radius /// <summary> /// Defines a set of rectangles for analysis with respect to /// x-axis, each occupying full width of section. /// </summary> /// <returns>List of analysis rectangles</returns> public override List<CompoundShapePart> GetCompoundRectangleXAxisList() { double t_f = this.t_f; double b_f = this.b_f; r = k - t_f; CompoundShapePart TopFlange = new CompoundShapePart(b_f, t_f, new Point2D(0, d - t_f / 2)); CompoundShapePart Web = new CompoundShapePart(t_w, d - (t_f + r), new Point2D(0, (d -t_f-r)/ 2)); PartWithDoubleFillet TopFillet = new PartWithDoubleFillet(r, t_w, new Point2D(0, d - t_f), true); List<CompoundShapePart> Ishape = new List<CompoundShapePart>() { TopFlange, TopFillet, Web }; return Ishape; }
double r; //fillet radius /// <summary> /// Defines a set of rectangles for analysis with respect to /// x-axis, each occupying full width of section. /// </summary> /// <returns>List of analysis rectangles</returns> public override List <CompoundShapePart> GetCompoundRectangleXAxisList() { double t_f = this.t_f; double b_f = this.b_f; r = k - t_f; CompoundShapePart TopFlange = new CompoundShapePart(b_f, t_f, new Point2D(0, d - t_f / 2)); CompoundShapePart Web = new CompoundShapePart(t_w, d - (t_f + r), new Point2D(0, (d - t_f - r) / 2)); PartWithDoubleFillet TopFillet = new PartWithDoubleFillet(r, t_w, new Point2D(0, d - t_f), true); List <CompoundShapePart> Ishape = new List <CompoundShapePart>() { TopFlange, TopFillet, Web }; return(Ishape); }
/// <summary> /// Defines a set of rectangles for analysis with respect to /// y-axis, each occupying full d of section. The rectangles are rotated 90 deg., /// because internally the properties are calculated with respect to x-axis. /// </summary> /// <returns>List of analysis rtangles</returns> public override List <CompoundShapePart> GetCompoundRectangleYAxisList() { //double t_f = this.t_fTop; //double b_f = this.b_fTop; //Note: all insertion points are calculated from the left side of the shape CompoundShapePart Web = new CompoundShapePart(d, t_w, new Point2D(0, t_w / 2.0)); PartWithDoubleFillet Fillet = new PartWithDoubleFillet(k, 2 * t_f, new Point2D(0, t_w), true); CompoundShapePart Flange = new CompoundShapePart(2 * t_f, b_f - t_w - k, new Point2D(0, (t_w + k + (b_f - t_w - k) / 2.0))); List <CompoundShapePart> rectY = new List <CompoundShapePart>() { Web, Fillet, Flange }; return(rectY); }
/// <summary> /// Defines a set of rectangles for analysis with respect to /// x-axis, each occupying full width of section. /// </summary> /// <returns>List of analysis rectangles</returns> public override List<CompoundShapePart> GetCompoundRectangleXAxisList() { //double FlangeThickness = this.t_fTop; //double FlangeWidth = this.b_fTop; CompoundShapePart TopFlange = new CompoundShapePart(b_f, t_f, new Point2D(0, d / 2 - t_f / 2)); CompoundShapePart BottomFlange = new CompoundShapePart(b_f, t_f, new Point2D(0, -(d / 2 - t_f / 2))); PartWithDoubleFillet TopFillet = new PartWithSingleFillet(k, t_w, new Point2D(0, d / 2 - t_f), true); PartWithDoubleFillet BottomFillet = new PartWithSingleFillet(k, t_w, new Point2D(0, -(d / 2 - t_f)), false); CompoundShapePart Web = new CompoundShapePart(t_w, d - 2 * t_f - 2 * k, new Point2D(0, 0)); List<CompoundShapePart> rectX = new List<CompoundShapePart>() { TopFlange, TopFillet, Web, BottomFillet, BottomFlange }; return rectX; }
/// <summary> /// Defines a set of rectangles for analysis with respect to /// y-axis, each occupying full height of section. The rectangles are rotated 90 deg., /// because internally the properties are calculated with respect to x-axis. /// </summary> /// <returns>List of analysis rectangles</returns> public override List <CompoundShapePart> GetCompoundRectangleYAxisList() { double FlangeThickness = this.tf; double FlangeWidth = this.b_fTop; //review this .... // I-shape converted to X-shape double FlangeOverhang = (b_f - t_w) / 2.0; CompoundShapePart LeftFlange = new CompoundShapePart(2 * tf, FlangeOverhang, new Point2D(0, b_f - FlangeOverhang / 2)); CompoundShapePart RightFlange = new CompoundShapePart(2 * tf, FlangeOverhang, new Point2D(0, FlangeOverhang / 2)); CompoundShapePart Web = new CompoundShapePart(d, t_w, new Point2D(0, b_f / 2)); List <CompoundShapePart> rectY = new List <CompoundShapePart>() { LeftFlange, Web, RightFlange }; return(rectY); }
/// <summary> /// Defines a set of rectangles for analysis with respect to /// x-axis, each occupying full width of section. /// </summary> /// <returns>List of analysis rectangles</returns> public override List <CompoundShapePart> GetCompoundRectangleXAxisList() { //double FlangeThickness = this.t_fTop; //double FlangeWidth = this.b_fTop; CompoundShapePart TopFlange = new CompoundShapePart(b_f, t_f, new Point2D(0, d / 2 - t_f / 2)); CompoundShapePart BottomFlange = new CompoundShapePart(b_f, t_f, new Point2D(0, -(d / 2 - t_f / 2))); PartWithDoubleFillet TopFillet = new PartWithSingleFillet(k, t_w, new Point2D(0, d / 2 - t_f), true); PartWithDoubleFillet BottomFillet = new PartWithSingleFillet(k, t_w, new Point2D(0, -(d / 2 - t_f)), false); CompoundShapePart Web = new CompoundShapePart(t_w, d - 2 * t_f - 2 * k, new Point2D(0, 0)); List <CompoundShapePart> rectX = new List <CompoundShapePart>() { TopFlange, TopFillet, Web, BottomFillet, BottomFlange }; return(rectX); }
/// <summary> /// Defines a set of rectangles for analysis with respect to /// x-axis, each occupying full width of section. /// </summary> /// <returns>List of analysis rectangles</returns> public override List <CompoundShapePart> GetCompoundRectangleXAxisList() { double t_f = this.t_f; double b_f = this.b_fTop; double ShiftY = 0; if (InsertAtMidHeight == true) { ShiftY = d / 2.0; } CompoundShapePart TopFlange = new CompoundShapePart(b_f, t_f, new Point2D(0, d - t_f / 2.0 - ShiftY)); CompoundShapePart BottomFlange = new CompoundShapePart(b_f, t_f, new Point2D(0, t_f / 2.0 - ShiftY)); CompoundShapePart Web = new CompoundShapePart(t_w, d - 2 * t_f, new Point2D(0, d / 2.0 - ShiftY)); List <CompoundShapePart> rectX = new List <CompoundShapePart>() { TopFlange, Web, BottomFlange }; return(rectX); }
/// <summary> /// Defines a set of rectangles for analysis with respect to /// y-axis, each occupying full height of section. The rectangles are rotated 90 deg., /// because internally the properties are calculated with respect to x-axis. /// </summary> /// <returns>List of analysis rectangles</returns> public override List<CompoundShapePart> GetCompoundRectangleYAxisList() { double FlangeThickness = this.t_f; double FlangeWidth = this.b_f; r = k - t_f; double FlangeOverhang = (FlangeWidth - t_w - 2.0 * r) / 2.0; CompoundShapePart LeftFlange = new CompoundShapePart(2 * FlangeThickness, FlangeOverhang, new Point2D(0,b_f-FlangeOverhang/2.0)); CompoundShapePart RightFlange = new CompoundShapePart(2 * FlangeThickness, FlangeOverhang, new Point2D(0, FlangeOverhang/2.0)); PartWithDoubleFillet LeftFillet = new PartWithDoubleFillet(r, 2 * FlangeThickness, new Point2D(0, b_f - FlangeOverhang), false); PartWithDoubleFillet RightFillet = new PartWithDoubleFillet(r, 2 * FlangeThickness, new Point2D(0, FlangeOverhang), true); CompoundShapePart Web = new CompoundShapePart(d, t_w, new Point2D(0, b_f / 2)); List<CompoundShapePart> rectY = new List<CompoundShapePart>() { LeftFlange, LeftFillet, Web, RightFillet, RightFlange }; return rectY; }
/// <summary> /// Defines a set of rectangles for analysis with respect to /// y-axis, each occupying full height of section. The rectangles are rotated 90 deg., /// because internally the properties are calculated with respect to x-axis. /// </summary> /// <returns>List of analysis rectangles</returns> public override List<CompoundShapePart> GetCompoundRectangleYAxisList() { double FlangeThickness = this.t_f; double FlangeWidth = this.b_fTop; // I-shape converted to X-shape double FlangeOverhang = (b_f - t_w) / 2.0; CompoundShapePart LeftFlange = new CompoundShapePart(2* t_f, FlangeOverhang, new Point2D(0, b_f - FlangeOverhang/2)); CompoundShapePart RightFlange = new CompoundShapePart(2*t_f, FlangeOverhang, new Point2D(0, FlangeOverhang/2)); CompoundShapePart Web = new CompoundShapePart(d, t_w, new Point2D(0, b_f / 2)); List<CompoundShapePart> rectY = new List<CompoundShapePart>() { LeftFlange, Web, RightFlange }; return rectY; }
/// <summary> /// Defines a set of rectangles for analysis with respect to /// x-axis, each occupying full width of section. /// </summary> /// <returns>List of analysis rectangles</returns> public override List<CompoundShapePart> GetCompoundRectangleXAxisList() { double t_f = this.t_f; double b_f = this.b_fTop; CompoundShapePart TopFlange = new CompoundShapePart(b_f, t_f, new Point2D(0, d - t_f / 2)); CompoundShapePart BottomFlange = new CompoundShapePart(b_f, t_f, new Point2D(0, t_f / 2)); CompoundShapePart Web = new CompoundShapePart(t_w, d - 2 * t_f, new Point2D(0, d / 2)); List<CompoundShapePart> rectX = new List<CompoundShapePart>() { TopFlange, Web, BottomFlange }; return rectX; }
/// <summary> /// Defines a set of rectangles for analysis with respect to /// y-axis, each occupying full height of section. The rectangles are rotated 90 deg., /// because internally the properties are calculated with respect to x-axis. /// </summary> /// <returns>List of analysis rectangles</returns> public override List<CompoundShapePart> GetCompoundRectangleYAxisList() { double FlangeThickness = this.t_f; double FlangeWidth = this.b_fTop; List<CompoundShapePart> rectY; double FlangeOverhang = (b_f - t_w) / 2.0; if (b_r > FlangeOverhang) { if (IsOneSidedReinforcement ==true) { CompoundShapePart Segment1 = new CompoundShapePart(2 * t_r, b_r - FlangeOverhang, new Point2D(0, b_f + (b_r - FlangeOverhang)/2.0)); CompoundShapePart Segment2 = new CompoundShapePart(2 * t_f+2*t_r, FlangeOverhang, new Point2D(0, b_f-FlangeOverhang / 2.0)); CompoundShapePart Web = new CompoundShapePart(d-h_o, t_w, new Point2D(0, b_f / 2.0)); CompoundShapePart Segment3 = new CompoundShapePart(2 * t_f, FlangeOverhang, new Point2D(0, FlangeOverhang / 2.0)); rectY = new List<CompoundShapePart>() { Segment1, Segment2, Web, Segment3 }; } else { CompoundShapePart Segment1 = new CompoundShapePart(2 * t_r, b_r - FlangeOverhang, new Point2D(0, b_f + (b_r - FlangeOverhang) + (b_r - FlangeOverhang) / 2.0)); CompoundShapePart Segment2 = new CompoundShapePart(2 * t_f + 2 * t_r, FlangeOverhang, new Point2D(0, b_f+ (b_r - FlangeOverhang)- (FlangeOverhang / 2.0))); CompoundShapePart Web = new CompoundShapePart(d - h_o, t_w, new Point2D(0, (b_r - FlangeOverhang)+ b_f / 2.0)); CompoundShapePart Segment3 = new CompoundShapePart(2 * t_f + 2 * t_r, b_r - FlangeOverhang, new Point2D(0, (b_r - FlangeOverhang)+(FlangeOverhang / 2.0))); CompoundShapePart Segment4 = new CompoundShapePart(2 * t_r, b_r - FlangeOverhang, new Point2D(0, (b_r - FlangeOverhang) / 2.0)); rectY = new List<CompoundShapePart>() { Segment1, Segment2, Web, Segment3, Segment4 }; } } else { if (IsOneSidedReinforcement == true) { CompoundShapePart Segment1 = new CompoundShapePart(2 * t_f, FlangeOverhang - b_r, new Point2D(0, b_f - (FlangeOverhang - b_r) / 2.0)); CompoundShapePart Segment2 = new CompoundShapePart(2 * t_f + 2 * t_r, FlangeOverhang, new Point2D(0, b_f - (FlangeOverhang - b_r) - (FlangeOverhang - b_r) / 2.0)); CompoundShapePart Web = new CompoundShapePart(d - h_o, t_w, new Point2D(0, b_f / 2.0)); CompoundShapePart Segment3 = new CompoundShapePart(2 * t_f, FlangeOverhang, new Point2D(0, FlangeOverhang / 2.0)); rectY = new List<CompoundShapePart>() { Segment1, Segment2, Web, Segment3 }; } else { CompoundShapePart Segment1 = new CompoundShapePart(2 * t_f, FlangeOverhang - b_r, new Point2D(0, b_f - (FlangeOverhang - b_r) / 2.0)); CompoundShapePart Segment2 = new CompoundShapePart(2 * t_f + 2 * t_r, b_r, new Point2D(0, b_f - (FlangeOverhang - b_r) - ( b_r) / 2.0)); CompoundShapePart Web = new CompoundShapePart(d - h_o, t_w, new Point2D(0, b_f / 2.0)); CompoundShapePart Segment3 = new CompoundShapePart(2 * t_f+ 2 * t_r, b_r, new Point2D(0, (FlangeOverhang - b_r) + (b_r) / 2.0)); CompoundShapePart Segment4 = new CompoundShapePart(2 * t_f, FlangeOverhang - b_r, new Point2D(0, (FlangeOverhang - b_r) / 2.0)); rectY = new List<CompoundShapePart>() { Segment1, Segment2, Web, Segment3, Segment4 }; } } return rectY; }
/// <summary> /// Defines a set of rectangles for analysis with respect to /// y-axis, each occupying full height of section. The rectangles are rotated 90 deg., /// because internally the properties are calculated with respect to x-axis. /// </summary> /// <returns>List of analysis rectangles</returns> public override List <CompoundShapePart> GetCompoundRectangleYAxisList() { double FlangeThickness = this.t_f; double FlangeWidth = this.b_fTop; List <CompoundShapePart> rectY; double FlangeOverhang = (b_f - t_w) / 2.0; if (b_r > FlangeOverhang) { if (IsOneSidedReinforcement == true) { CompoundShapePart Segment1 = new CompoundShapePart(2 * t_r, b_r - FlangeOverhang, new Point2D(0, b_f + (b_r - FlangeOverhang) / 2.0)); CompoundShapePart Segment2 = new CompoundShapePart(2 * t_f + 2 * t_r, FlangeOverhang, new Point2D(0, b_f - FlangeOverhang / 2.0)); CompoundShapePart Web = new CompoundShapePart(d - h_o, t_w, new Point2D(0, b_f / 2.0)); CompoundShapePart Segment3 = new CompoundShapePart(2 * t_f, FlangeOverhang, new Point2D(0, FlangeOverhang / 2.0)); rectY = new List <CompoundShapePart>() { Segment1, Segment2, Web, Segment3 }; } else { CompoundShapePart Segment1 = new CompoundShapePart(2 * t_r, b_r - FlangeOverhang, new Point2D(0, b_f + (b_r - FlangeOverhang) + (b_r - FlangeOverhang) / 2.0)); CompoundShapePart Segment2 = new CompoundShapePart(2 * t_f + 2 * t_r, FlangeOverhang, new Point2D(0, b_f + (b_r - FlangeOverhang) - (FlangeOverhang / 2.0))); CompoundShapePart Web = new CompoundShapePart(d - h_o, t_w, new Point2D(0, (b_r - FlangeOverhang) + b_f / 2.0)); CompoundShapePart Segment3 = new CompoundShapePart(2 * t_f + 2 * t_r, b_r - FlangeOverhang, new Point2D(0, (b_r - FlangeOverhang) + (FlangeOverhang / 2.0))); CompoundShapePart Segment4 = new CompoundShapePart(2 * t_r, b_r - FlangeOverhang, new Point2D(0, (b_r - FlangeOverhang) / 2.0)); rectY = new List <CompoundShapePart>() { Segment1, Segment2, Web, Segment3, Segment4 }; } } else { if (IsOneSidedReinforcement == true) { CompoundShapePart Segment1 = new CompoundShapePart(2 * t_f, FlangeOverhang - b_r, new Point2D(0, b_f - (FlangeOverhang - b_r) / 2.0)); CompoundShapePart Segment2 = new CompoundShapePart(2 * t_f + 2 * t_r, FlangeOverhang, new Point2D(0, b_f - (FlangeOverhang - b_r) - (FlangeOverhang - b_r) / 2.0)); CompoundShapePart Web = new CompoundShapePart(d - h_o, t_w, new Point2D(0, b_f / 2.0)); CompoundShapePart Segment3 = new CompoundShapePart(2 * t_f, FlangeOverhang, new Point2D(0, FlangeOverhang / 2.0)); rectY = new List <CompoundShapePart>() { Segment1, Segment2, Web, Segment3 }; } else { CompoundShapePart Segment1 = new CompoundShapePart(2 * t_f, FlangeOverhang - b_r, new Point2D(0, b_f - (FlangeOverhang - b_r) / 2.0)); CompoundShapePart Segment2 = new CompoundShapePart(2 * t_f + 2 * t_r, b_r, new Point2D(0, b_f - (FlangeOverhang - b_r) - (b_r) / 2.0)); CompoundShapePart Web = new CompoundShapePart(d - h_o, t_w, new Point2D(0, b_f / 2.0)); CompoundShapePart Segment3 = new CompoundShapePart(2 * t_f + 2 * t_r, b_r, new Point2D(0, (FlangeOverhang - b_r) + (b_r) / 2.0)); CompoundShapePart Segment4 = new CompoundShapePart(2 * t_f, FlangeOverhang - b_r, new Point2D(0, (FlangeOverhang - b_r) / 2.0)); rectY = new List <CompoundShapePart>() { Segment1, Segment2, Web, Segment3, Segment4 }; } } return(rectY); }
/// <summary> /// Defines a set of rectangles for analysis with respect to /// y-axis, each occupying full height of section. The rectangles are rotated 90 deg., /// because internally the properties are calculated with respect to x-axis. /// </summary> /// <returns>List of analysis rectangles</returns> public override List <CompoundShapePart> GetCompoundRectangleYAxisList() { // I-shape converted to X-shape List <CompoundShapePart> rectY; double FlangeThickness = this.t_f; double FlangeWidth = this.b_fTop; double overHang = (b_f - t_w) / 2.0; if (N_holes == 2) { double h_tip = overHang / 2.0 - b_hole; CompoundShapePart LeftFlangeTip = new CompoundShapePart(2 * t_f, h_tip, new Point2D(0, b_f - h_tip / 2.0)); CompoundShapePart LeftHoles = new CompoundShapePart(0, b_hole, new Point2D(0, (b_f - h_tip) - b_hole / 2.0)); CompoundShapePart LeftFlange = new CompoundShapePart(2 * t_f, h_tip, new Point2D(0, (b_f - h_tip - b_hole) - h_tip / 2.0)); CompoundShapePart RightFlangeTip = new CompoundShapePart(2 * t_f, h_tip, new Point2D(0, h_tip / 2.0)); CompoundShapePart RightHoles = new CompoundShapePart(0, b_hole, new Point2D(0, (h_tip) + b_hole / 2.0)); CompoundShapePart RightFlange = new CompoundShapePart(2 * t_f, h_tip, new Point2D(0, (h_tip + b_hole) + h_tip / 2.0)); rectY = new List <CompoundShapePart>() { LeftFlangeTip, LeftHoles, LeftFlange, RightFlangeTip, RightHoles, RightFlange, }; } else if (N_holes == 4) { double h_tip = (overHang - 2.0 * b_hole) / 3.0; CompoundShapePart LeftFlangeTip = new CompoundShapePart(2 * t_f, h_tip, new Point2D(0, b_f - h_tip / 2.0)); CompoundShapePart LeftHoles1 = new CompoundShapePart(0, b_hole, new Point2D(0, (b_f - h_tip) - b_hole / 2.0)); CompoundShapePart LeftFlange1 = new CompoundShapePart(2 * t_f, h_tip, new Point2D(0, (b_f - h_tip - b_hole) - h_tip / 2.0)); CompoundShapePart LeftHoles2 = new CompoundShapePart(0, b_hole, new Point2D(0, (b_f - 2.0 * h_tip - b_hole) - b_hole / 2.0)); CompoundShapePart LeftFlange2 = new CompoundShapePart(2 * t_f, h_tip, new Point2D(0, (b_f - 2.0 * h_tip - 2.0 * b_hole) - h_tip / 2.0)); CompoundShapePart RightFlangeTip = new CompoundShapePart(2 * t_f, h_tip, new Point2D(0, h_tip / 2.0)); CompoundShapePart RightHoles1 = new CompoundShapePart(0, b_hole, new Point2D(0, (h_tip) + b_hole / 2.0)); CompoundShapePart RightFlange1 = new CompoundShapePart(2 * t_f, h_tip, new Point2D(0, (h_tip + b_hole) + h_tip / 2.0)); CompoundShapePart RightHoles2 = new CompoundShapePart(0, b_hole, new Point2D(0, (2.0 * h_tip + b_hole) + b_hole / 2.0)); CompoundShapePart RigthFlange2 = new CompoundShapePart(2 * t_f, h_tip, new Point2D(0, (2.0 * h_tip + 2.0 * b_hole) + h_tip / 2.0)); rectY = new List <CompoundShapePart>() { LeftFlangeTip, LeftHoles1, LeftFlange1, LeftHoles2, LeftFlange2, RightFlangeTip, RightHoles1, RightFlange1, RightHoles2, RigthFlange2 }; } else { throw new Exception("Only section with 2 or 4 holes per flange are supported."); } return(rectY); }
/// <summary> /// Defines a set of rectangles for analysis with respect to /// y-axis, each occupying full d of section. The rectangles are rotated 90 deg., /// because internally the properties are calculated with respect to x-axis. /// </summary> /// <returns>List of analysis rtangles</returns> public override List<CompoundShapePart> GetCompoundRectangleYAxisList() { //double t_f = this.t_fTop; //double b_f = this.b_fTop; //Note: all insertion points are calculated from the left side of the shape CompoundShapePart Web = new CompoundShapePart(d, t_w, new Point2D(0, t_w / 2.0)); PartWithDoubleFillet Fillet = new PartWithDoubleFillet(k, 2 * t_f, new Point2D(0, t_w), true); CompoundShapePart Flange = new CompoundShapePart(2 * t_f, b_f - t_w - k, new Point2D(0, (t_w + k + (b_f - t_w - k) / 2.0))); List<CompoundShapePart> rectY = new List<CompoundShapePart>() { Web, Fillet, Flange }; return rectY; }