using FeMM.Common.Models;
using FeMM.Grasshopper.DataTypes.FeMM;
using FeMM.Grasshopper.Helpers;
using Grasshopper.Kernel;
using Grasshopper.Kernel.Parameters;
using System;
using System.Collections.Generic;
using System.Runtime.Versioning;
namespace FeMM.Grasshopper.Components.Design
{
#if NETCOREAPP
[SupportedOSPlatform("windows")]
#endif
public class AISC360BeamDesignOverrideComponent : GH_Component
{
protected Dictionary<int, string> _standardTypeOptions = new()
{
{ 1, "AISC360-10" },
{ 2, "AISC360-16" },
};
/// <summary>
/// Initializes a new instance of the MixedSectionComponent class.
/// </summary>
public AISC360BeamDesignOverrideComponent()
: base("AISC360 Beam Design Override", "AISC360", "Define beam overwrite to check the steel elements according to AISC360 with SAP2000",
CategoryNameConstants.CATEGORY_FEMM, CategoryNameConstants.SUBCATEGORY_DESIGN)
{
}
/// <summary>
/// Registers all the input parameters for this component.
/// </summary>
protected override void RegisterInputParams(GH_InputParamManager pManager)
{
pManager.AddGenericParameter("Beam", "B", "The beam where set the overwrite", GH_ParamAccess.item);
int d = pManager.AddIntegerParameter("Standard", "S", "The standard", GH_ParamAccess.item, 0);
Param_Integer mtParam = pManager[d] as Param_Integer;
foreach (KeyValuePair<int, string> v in _standardTypeOptions)
mtParam.AddNamedValue(v.Value, v.Key);
int[] idx =
[
pManager.AddNumberParameter("Unbraced length ratio, Major", "UL,Major", "Unbraced length ratio, Major", GH_ParamAccess.item, 0.0),
pManager.AddNumberParameter("Unbraced length ratio, Minor", "UL,Minor", "Unbraced length ratio, Minor", GH_ParamAccess.item, 0.0),
pManager.AddNumberParameter("Unbraced length ratio, Lateral Torsional Buckling", "UL,LTB", "Unbraced length ratio, Lateral Torsional Buckling", GH_ParamAccess.item, 0.0),
pManager.AddNumberParameter("Effective length factor, K1 Major", "K1,Major", "Effective length factor, K1 Major", GH_ParamAccess.item, 0.0),
pManager.AddNumberParameter("Effective length factor, K1 Minor", "K1,Minor", "Effective length factor, K1 Minor", GH_ParamAccess.item, 0.0),
pManager.AddNumberParameter("Effective length factor, K2 Major", "K2,Major", "Effective length factor, K2 Major", GH_ParamAccess.item, 0.0),
pManager.AddNumberParameter("Effective length factor, K2 Minor", "K2,Minor", "Effective length factor, K2 Minor", GH_ParamAccess.item, 0.0),
pManager.AddNumberParameter("Effective length factor, Lateral Torsional Buckling", "K2,LTB", "Effective length factor, Lateral Torsional Buckling", GH_ParamAccess.item, 0.0),
pManager.AddNumberParameter("Moment coefficient, Cm Major", "Cm Major", "Moment coefficient, Cm Major", GH_ParamAccess.item, 0.0),
pManager.AddNumberParameter("Moment coefficient, Cm Minor", "Cm Minor", "Moment coefficient, Cm Minor", GH_ParamAccess.item, 0.0),
pManager.AddNumberParameter("Bending coefficient, Cb", "Cb", "Bending coefficient, Cb", GH_ParamAccess.item, 0.0),
pManager.AddNumberParameter("Nonsway moment factor, B1 Major", "B1 Major", "Nonsway moment factor, B1 Major", GH_ParamAccess.item, 0.0),
pManager.AddNumberParameter("Nonsway moment factor, B1 Minor", "B1 Minor", "Nonsway moment factor, B1 Minor", GH_ParamAccess.item, 0.0),
pManager.AddNumberParameter("Sway moment factor, B2 Major", "B2 Major", "Nonsway moment factor, B2 Major", GH_ParamAccess.item, 0.0),
pManager.AddNumberParameter("Sway moment factor, B2 Minor", "B2 Minor", "Nonsway moment factor, B2 Minor", GH_ParamAccess.item, 0.0),
];
foreach (int i in idx)
pManager[i].Optional = true;
}
/// <summary>
/// Registers all the output parameters for this component.
/// </summary>
protected override void RegisterOutputParams(GH_OutputParamManager pManager)
{
pManager.AddGenericParameter("Beam", "B", "The modified beam", GH_ParamAccess.item);
}
/// <summary>
/// This is the method that actually does the work.
/// </summary>
/// <param name="DA">The DA object is used to retrieve from inputs and store in outputs.</param>
protected override void SolveInstance(IGH_DataAccess DA)
{
GH_Beam gH_Beam = null;
int standard = 0;
double ulrMajor = 0.0;
double ulrMinor = 0.0;
double ulrLTB = 0.0;
double k1Major = 0.0;
double k1Minor = 0.0;
double k2Major = 0.0;
double k2Minor = 0.0;
double k2LTB = 0.0;
double CmMajor = 0.0;
double CmMinor = 0.0;
double Cb = 0.0;
double B1Major = 0.0;
double B1Minor = 0.0;
double B2Major = 0.0;
double B2Minor = 0.0;
if (!DA.GetData(0, ref gH_Beam))
return;
if (!DA.GetData(1, ref standard))
return;
DA.GetData(2, ref ulrMajor);
DA.GetData(3, ref ulrMinor);
DA.GetData(4, ref ulrLTB);
DA.GetData(5, ref k1Major);
DA.GetData(6, ref k1Minor);
DA.GetData(7, ref k2Major);
DA.GetData(8, ref k2Minor);
DA.GetData(9, ref k2LTB);
DA.GetData(10, ref CmMajor);
DA.GetData(11, ref CmMinor);
DA.GetData(12, ref Cb);
DA.GetData(13, ref B1Major);
DA.GetData(14, ref B1Minor);
DA.GetData(15, ref B2Major);
DA.GetData(16, ref B2Minor);
var data = new BeamAISC360SteelAttributeModel.AttributeData()
{
Standard = (BeamAISC360SteelAttributeModel.Standards)standard,
UnbracedLengthRatioMajor = ulrMajor,
UnbracedLengthRatioMinor = ulrMinor,
UnbracedLengthRatioLTB = ulrLTB,
EffectiveLengthFactorK1Major = k1Major,
EffectiveLengthFactorK1Minor = k1Minor,
EffectiveLengthFactorK2Major = k2Major,
EffectiveLengthFactorK2Minor = k2Minor,
EffectiveLengthFactorKLTB = k2LTB,
MomentCoefficientCmMajor = CmMajor,
MomentCoefficientCmMinor = CmMinor,
BendingCoefficientCb = Cb,
NonswayMomentFactorB1Major = B1Major,
NonswayMomentFactorB1Minor = B1Minor,
SwayMomentFactorB2Major = B2Major,
SwayMomentFactorB2Minor = B2Minor,
};
var model = new BeamAISC360SteelAttributeModel(data);
var newBeam = new GH_Beam(gH_Beam);
newBeam.Value.Attributes.Add(model);
DA.SetData(0, newBeam);
}
public override GH_Exposure Exposure => GH_Exposure.tertiary;
/// <summary>
/// Provides an Icon for the component.
/// </summary>
protected override System.Drawing.Bitmap Icon => Properties.Resources.BeamAISC360SteelOverwriteIcon;
/// <summary>
/// Gets the unique ID for this component. Do not change this ID after release.
/// </summary>
public override Guid ComponentGuid => new("5f81b3ac-17d7-4f0d-b0fe-c54e53d5f548");
}
}