using FeMM.Common.Helpers;
using FeMM.Common.Models;
using FeMM.Grasshopper.DataTypes.FeMM;
using FeMM.Grasshopper.Helpers;
using Grasshopper.Kernel;
using System;

namespace FeMM.Grasshopper.Components.Sections
{
    public class BeamProperty2RevitGeometricComponent : GH_Component
    {
        /// <summary>
        /// Initializes a new instance of the BeamPropertyComponent class.
        /// </summary>
        public BeamProperty2RevitGeometricComponent()
          : base("Beam Property 2 Revit Geometry v2.0", "SG", "Section geometries", CategoryNameConstants.CATEGORY_FEMM, CategoryNameConstants.SUBCATEGORY_SECTIONS)
        {

        }

        /// <summary>
        /// Registers all the input parameters for this component.
        /// </summary>
        protected override void RegisterInputParams(GH_InputParamManager pManager)
        {
            pManager.AddGenericParameter("Beam Property", "BP", "Beam Property", GH_ParamAccess.item);
        }

        /// <summary>
        /// Registers all the output parameters for this component.
        /// </summary>
        protected override void RegisterOutputParams(GH_OutputParamManager pManager)
        {
            pManager.AddTextParameter("Name", "N", "Section section name", GH_ParamAccess.item);
            pManager.AddTextParameter("Maffeis Name", "MN", "Maffeis section name", GH_ParamAccess.item);
            pManager.AddTextParameter("Material Family", "MF", "Material type", GH_ParamAccess.item);
            pManager.AddTextParameter("Profile Family", "PF", "Section type", GH_ParamAccess.item);
            pManager.AddNumberParameter("ME_H", "ME_H", "Height Beam (Main)​", GH_ParamAccess.item);
            pManager.AddNumberParameter("ME_B", "ME_B", "Width Beam (Main/Bottom)​", GH_ParamAccess.item);
            pManager.AddNumberParameter("ME_Bb", "ME_Bb", "Width Bottom Base​", GH_ParamAccess.item);
            pManager.AddNumberParameter("ME_Bt", "ME_Bt", "Width Top Base​", GH_ParamAccess.item);
            pManager.AddNumberParameter("ME_Tfb", "ME_Tfb", "Thickness flange bottom​", GH_ParamAccess.item);
            pManager.AddNumberParameter("ME_Tft", "ME_Tft", "Thickness flange Top​", GH_ParamAccess.item);
            pManager.AddNumberParameter("ME_Tf", "ME_Tf", "Thickness flange​", GH_ParamAccess.item);
            pManager.AddNumberParameter("ME_Tw", "ME_Tw", "Thickness web", GH_ParamAccess.item);
            pManager.AddNumberParameter("ME_Twb", "ME_Twb", "Secondary thickness web", GH_ParamAccess.item);
            pManager.AddNumberParameter("ME_R1", "ME_R1", "Radius 1", GH_ParamAccess.item);
            pManager.AddNumberParameter("ME_R2", "ME_R2", "Radius 2", GH_ParamAccess.item);
            pManager.AddNumberParameter("ME_Iw", "ME_Iw", "Flange Distance", GH_ParamAccess.item);
            pManager.AddNumberParameter("ME_Hsa", "ME_Hsa", "Secondary Height support (sym.supports)​", GH_ParamAccess.item);
            pManager.AddNumberParameter("ME_Hsb", "ME_Hsb", "Secondary Height support (not sym. supports)​", GH_ParamAccess.item);
            pManager.AddNumberParameter("ME_Bsa", "ME_Bsa", "Secondary base support (sym.supports)​", GH_ParamAccess.item);
            pManager.AddNumberParameter("ME_Bsb", "ME_Bsb", "Secondary base support (not sym.supports)​", 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_FunctionDefinition gH_BeamProperty = null;

            if (!DA.GetData(0, ref gH_BeamProperty))
                return;

            var revitTable = new NamingConventionHelper.RevitTable();

            if (gH_BeamProperty.Value is BeamPropertyModel beamProp)
            {
                revitTable = NamingConventionHelper.GetRevitTable(beamProp);
            }

            int item = 0;
            DA.SetData(item++, revitTable.Name);
            DA.SetData(item++, revitTable.MaffeisName);
            DA.SetData(item++, revitTable.MaterialType);
            DA.SetData(item++, revitTable.FamilyType);
            DA.SetData(item++, revitTable.ME_H);
            DA.SetData(item++, revitTable.ME_B);
            DA.SetData(item++, revitTable.ME_Bb);
            DA.SetData(item++, revitTable.ME_Bt);
            DA.SetData(item++, revitTable.ME_Tfb);
            DA.SetData(item++, revitTable.ME_Tft);
            DA.SetData(item++, revitTable.ME_Tf);
            DA.SetData(item++, revitTable.ME_Tw);
            DA.SetData(item++, revitTable.ME_Twb);
            DA.SetData(item++, revitTable.ME_R1);
            DA.SetData(item++, revitTable.ME_R2);
            DA.SetData(item++, revitTable.ME_Iw);
            DA.SetData(item++, revitTable.ME_Hsa);
            DA.SetData(item++, revitTable.ME_Hsb);
            DA.SetData(item++, revitTable.ME_Bsa);
            DA.SetData(item++, revitTable.ME_Bsb);
        }

        /// <summary>
        /// Provides an Icon for the component.
        /// </summary>
        protected override System.Drawing.Bitmap Icon => Properties.Resources.SectionRevit2GeometricIcon;

        public override GH_Exposure Exposure => GH_Exposure.tertiary;

        /// <summary>
        /// Gets the unique ID for this component. Do not change this ID after release.
        /// </summary>
        public override Guid ComponentGuid => new("22a94621-76c8-4e04-a6aa-f454e9aec81e");
    }
}
303 files24 directories