Example #1
0
        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);
            }
        }
Example #2
0
        /// <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);
        }
Example #3
0
        /// <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;
        }
Example #7
0
        /// <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);
        }
Example #10
0
        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);
        }
Example #14
0
        /// <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);
        }
Example #15
0
        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;
        }
Example #16
0
        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);
        }
Example #17
0
        /// <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;
        }
Example #19
0
        /// <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);
        }
Example #20
0
        /// <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);
        }
Example #21
0
        /// <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);
        }
Example #22
0
        /// <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;
        }
Example #23
0
        /// <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;
        }
Example #24
0
        /// <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);
        }
Example #27
0
        /// <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;
        }