Exemple #1
0
        protected override Curve GeneratePerimeter()
        {
            double xF = Width / 2;
            double xW = WebThickness / 2;
            double yF = Depth / 2;
            double yW = yF - FlangeThickness;
            double fR = RootRadius.Limit(0, Math.Min(xF - xW, Depth - WebThickness));
            double xR = xW + fR;
            double yR = yW - fR;

            PolyCurve result = new PolyCurve(new Line(xF, yF, -xF, yF)); //Top ---

            result.AddLine(-xF, yW);                                     //Top flange left |
            result.AddLine(-xR, yW);                                     //Top left fillet start _
            if (fR > 0)
            {
                result.AddArcTangent(Vector.UnitX, new Vector(-xW, yR)); //Top left fillet end ¬
            }
            result.AddLine(-xW, -yF);                                    //Web left |
            result.AddLine(xW, -yF);                                     //Web bottom _
            result.AddLine(xW, yR);                                      //Web right |
            if (fR > 0)
            {
                result.AddArcTangent(Vector.UnitY, new Vector(xR, yW)); //Top Right Fillet r
            }
            result.AddLine(xF, yW);                                     //Top flange bottom right -
            result.AddLine(xF, yF);                                     //Top flange right |

            return(result);
        }
Exemple #2
0
        protected override Curve GeneratePerimeter()
        {
            double xF = Width / 2;
            double xW = xF - WebThickness;
            double yF = Depth / 2;
            double yW = yF - FlangeThickness;
            double fR = RootRadius.Limit(0, Math.Min(Width - WebThickness, yW));
            double xR = xW - fR;
            double yR = yW - fR;

            PolyCurve result = new PolyCurve(new Line(xF, yF, -xF, yF)); //Top ---

            result.AddLine(-xF, -yF);                                    // Left |
            result.AddLine(xF, -yF);                                     // Bottom ---
            result.AddLine(xF, -yW);                                     // Bottom flange right |
            //TODO: Toe Radius?
            result.AddLine(-xR, -yW);                                    // Bottom flange top ---
            if (fR > 0)
            {
                result.AddArcTangent(-Vector.UnitX, -xW, -yR); // Bottom fillet
            }
            result.AddLine(-xW, yR);                           // Web Left |
            if (fR > 0)
            {
                result.AddArcTangent(Vector.UnitY, -xR, yW); // Top fillet
            }
            result.AddLine(xF, yW);                          // Top flange bottom
            result.AddLine(xF, yF);                          // Top flange right

            return(result);
        }