using FeMM.Grasshopper.Components.Models.MeCheck2;
using FeMM.Grasshopper.Components.Parameters;
using FeMM.Grasshopper.DataTypes.MeCheck2;
using FeMM.Grasshopper.Helpers;
using Grasshopper.Kernel;
using System;

namespace FeMM.Grasshopper.Components.MeCheck2
{
    public class CompositeSectionStiffenersComponent : GH_Component
    {
        public CompositeSectionStiffenersComponent()
            : base("Composite Section Stiffeners", "CSS", "Define the composite section stiffeners", CategoryNameConstants.CATEGORY_CHECKS, CategoryNameConstants.SUBCATEGORY_MECHECK2)
        {
        }

        protected override void RegisterInputParams(GH_InputParamManager pManager)
        {
            var idx = pManager.AddNumberParameter("Beam Length", "L", "The length of the beam", GH_ParamAccess.item, 10000);
            pManager[idx].Optional = true;
            pManager.AddNumberParameter("Stiffener Spacing", "SS", "Stiffener geometry, distance between two consecutive", GH_ParamAccess.item);
            pManager.AddNumberParameter("Stiffener Width", "SW", "Stiffener geometry, width", GH_ParamAccess.item);
            pManager.AddNumberParameter("Stiffener Thickness", "ST", "Stiffener geometry, thickness", GH_ParamAccess.item);
            idx = pManager.AddBooleanParameter("Symmetric", "S", "Stiffener geometry, consider symmetric stiffeners", GH_ParamAccess.item, false);
            pManager[idx].Optional = true;
            idx = pManager.AddBooleanParameter("Rigid", "R", "Stiffener behavior, consider rigid stiffeners (only for Symmetric stiffeners)", GH_ParamAccess.item, false);
            pManager[idx].Optional = true;
        }

        protected override void RegisterOutputParams(GH_OutputParamManager pManager)
        {
            pManager.AddParameter(new CompositeSectionStiffenersParameter());
        }

        protected override void SolveInstance(IGH_DataAccess DA)
        {
            // optional
            double beamLength = 10000;
            bool symmetric = false;
            bool rigid = false;

            // required
            double spacing = 0.0;        
            double width = 0.0;
            double thickness = 0.0;

            DA.GetData(0, ref beamLength);
            DA.GetData(4, ref symmetric);
            DA.GetData(5, ref rigid);

            if (!DA.GetData(1, ref spacing)) return;
            if (!DA.GetData(2, ref width)) return;
            if (!DA.GetData(3, ref thickness)) return;

            if (spacing <= 0)
            {
                AddRuntimeMessage(GH_RuntimeMessageLevel.Error,
                    "Stiffener Spacing must be greater than zero.");
                return;
            }

            if (width <= 0)
            {
                AddRuntimeMessage(GH_RuntimeMessageLevel.Error,
                    "Stiffener Width must be greater than zero.");
                return;
            }

            if (thickness <= 0)
            {
                AddRuntimeMessage(GH_RuntimeMessageLevel.Error,
                    "Stiffener Thickness must be greater than zero.");
                return;
            }

            var stiff = new CompositeSectionStiffeners(
                beamLength,
                spacing,
                width,
                thickness,
                symmetric,
                rigid
            );

            DA.SetData(0, new GH_CompositeSectionStiffeners(stiff));
        }

        protected override System.Drawing.Bitmap Icon => Properties.Resources.CompositeBeamStiffenersIcon;

        public override Guid ComponentGuid => new("cecc241b-da99-4b61-8d3c-b5926fe79c40");
    }
}
303 files24 directories