public ISteelCompressionMember GetCompressionMember(ISection Shape, double L_ex, double L_ey, double L_ez, double F_y, double E, bool IsRolledShape = true)
        {
            string DEFAULT_EXCEPTION_STRING = "Selected shape is not supported. Select a different shape.";
            ISteelCompressionMember col     = null;
            CalcLog       log      = new CalcLog();
            SteelMaterial Material = new SteelMaterial(F_y, E);

            if (Shape == null)
            {
                return(new ColumnGeneral(null, L_ex, L_ey, L_ez));
            }

            if (Shape is ISectionI)
            {
                ISectionI     IShape        = Shape as ISectionI;
                SteelSectionI SectionI      = new SteelSectionI(IShape, Material);
                IShapeFactory IShapeFactory = new IShapeFactory();
                return(IShapeFactory.GetIshape(SectionI, IsRolledShape, L_ex, L_ey, L_ez));
            }


            else if (Shape is ISectionChannel)
            {
                ISectionChannel     ChannelShape   = Shape as ISectionChannel;
                SteelChannelSection ChannelSection = new SteelChannelSection(ChannelShape, Material);
                throw new Exception(DEFAULT_EXCEPTION_STRING);
            }


            else if (Shape is ISectionPipe)
            {
                ISectionPipe     SectionPipe = Shape as ISectionPipe;
                SteelPipeSection PipeSection = new SteelPipeSection(SectionPipe, Material);
                ChsShapeFactory  ChsFactory  = new ChsShapeFactory();
                return(ChsFactory.GetChsShape(PipeSection, L_ex, L_ey, L_ez, log));
            }

            else if (Shape is ISectionTube)
            {
                ISectionTube    TubeShape       = Shape as ISectionTube;
                SteelRhsSection RectHSS_Section = new SteelRhsSection(TubeShape, Material);
                RhsShapeFactory RhsFactory      = new RhsShapeFactory();
                return(RhsFactory.GetRhsShape(RectHSS_Section, L_ex, L_ey, L_ez));
            }


            else if (Shape is ISectionBox)
            {
                ISectionBox     BoxShape   = Shape as ISectionBox;
                SteelBoxSection BoxSection = new SteelBoxSection(BoxShape, Material);

                RhsShapeFactory RhsFactory = new RhsShapeFactory();
                return(RhsFactory.GetRhsShape(BoxSection, L_ex, L_ey, L_ez));
            }

            else if (Shape is ISectionRectangular || Shape is ISectionRound)
            {
                ISteelSection solidSec;
                if (Shape is ISectionRectangular)
                {
                    ISectionRectangular RectangleShape = Shape as ISectionRectangular;
                    solidSec = new SteelRectangleSection(RectangleShape, Material);
                }
                else
                {
                    ISectionRound rnd = Shape as ISectionRound;
                    solidSec = new SteelRoundSection(rnd, Material);
                }


                CompressionMemberRectangle SolidShapeSection = new CompressionMemberRectangle(solidSec, L_ex, L_ey, L_ez);
                return(SolidShapeSection);
            }

            else if (Shape is ISectionTee)
            {
                ISectionTee     TeeShape   = Shape as ISectionTee;
                SteelTeeSection TeeSection = new SteelTeeSection(TeeShape, Material);


                IShapeCompactness compactnessTee = new ShapeCompactness.TeeMember(TeeSection);
                CompactnessClassAxialCompression flangeCompactness = compactnessTee.GetFlangeCompactnessCompression();
                CompactnessClassAxialCompression stemCompactness   = compactnessTee.GetWebCompactnessCompression();

                if (flangeCompactness == CompactnessClassAxialCompression.NonSlender && stemCompactness == CompactnessClassAxialCompression.NonSlender)
                {
                    return(new ColumnTee(TeeSection, IsRolledShape, L_ex, L_ey, L_ez));
                }
                else
                {
                    throw new Exception(DEFAULT_EXCEPTION_STRING);
                }
            }

            else
            {
                throw new Exception(DEFAULT_EXCEPTION_STRING);
            }
        }
Example #2
0
        public double GetPureTorsionStressForClosedSection(ISection section, double T_u)
        {
            double tau;
            double b, h, t, J, R;

            if (section is ISolidShape)
            {
                if (section is ISectionRectangular)
                {
                    ISectionRectangular sr = section as ISectionRectangular;
                    J = sr.J;
                    R = Math.Min(sr.B, sr.H);
                }
                else if (section is ISectionRound)
                {
                    ISectionRound srou = section as ISectionRound;
                    J = srou.J;
                    R = srou.D / 2.0;
                }
                else
                {
                    throw new Exception("Section type is not applicable for closed section analysis");
                }
                tau = T_u * R / J;
            }
            else if (section is ISectionHollow)
            {
                if (section is ISectionTube || section is ISectionBox)
                {
                    if (section is ISectionBox)
                    {
                        ISectionBox sb = section as ISectionBox;
                        b = sb.B;
                        h = sb.H;
                        t = Math.Min(sb.t_f, sb.t_w);
                    }
                    else if (section is ISectionTube)
                    {
                        ISectionTube sT = section as ISectionTube;
                        b = sT.B;
                        h = sT.H;
                        t = sT.t_des;
                    }

                    else
                    {
                        throw new Exception("Section type is not applicable for closed section analysis");
                    }
                    tau = GetBoxShearStress(T_u, b, h, t);
                }
                else if (section is ISectionPipe)
                {
                    ISectionPipe pipe = section as ISectionPipe;
                    R   = pipe.D / 2.0;
                    J   = pipe.J;
                    tau = GetPipeStress(T_u, R, J);
                }
                else
                {
                    throw new Exception("Section type is not applicable for closed section analysis");
                }
            }
            else
            {
                throw new Exception("Section type is not applicable for closed section analysis");
            }
            return(tau);
        }
 public SteelRoundSection(ISectionRound Section, ISteelMaterial Material)
     : base(Material)
 {
     this.section = Section;
 }