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); }
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, Depth - FlangeThickness)); double xR = xW - fR; double yR = yW - fR; PolyCurve result = new PolyCurve(new Line(-xW, 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, yF); // Web Left | //TODO: Toe radius return(result); }