using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Drawing; using Rhino; using Grasshopper.Kernel; using Grasshopper.Kernel.Types; using Rhino.Geometry; namespace TEST { public class TrialComponent : GH_Component { //Constructor initializes component details public TrialComponent() : base("TEST", "TEST", "TEST", "TEST", "TEST") { } private void InputParam_ObjectChanged(Object sender, GH_ObjectChangedEventArgs e) { if (e.Type == GH_ObjectEventType.Sources) { int n = Params.Input.Count; if (Params.Input[n - 1] == sender) { if (Params.Input[n - 1].SourceCount > 0) { Grasshopper.Kernel.Parameters.Param_GenericObject temp = (Grasshopper.Kernel.Parameters.Param_GenericObject)sender; string data = temp.Sources.ElementAt(0).VolatileData.DataDescription(false, false); int number = Convert.ToInt32(data); //Assuming that input contains the number of additional input parameters required for (int i = 0; i < number; i++) { Grasshopper.Kernel.Parameters.Param_GenericObject paramIn = new Grasshopper.Kernel.Parameters.Param_GenericObject(); paramIn.Optional = true; paramIn.MutableNickName = true; paramIn.Access = GH_ParamAccess.tree; paramIn.Name = "Input " + (i+1).ToString(); paramIn.NickName = "I" + (i+1).ToString(); paramIn.Description = "Input #" + (i + 1).ToString(); Params.RegisterInputParam(paramIn); Params.OnParametersChanged(); } } } } } //Register input parameters of component protected override void RegisterInputParams(GH_Component.GH_InputParamManager pManager) { pManager.Register_GenericParam("Number", "No", "Number of additional inputs required", GH_ParamAccess.tree); pManager[0].Optional = true; pManager[0].MutableNickName = false; pManager[0].ObjectChanged += new IGH_DocumentObject.ObjectChangedEventHandler(InputParam_ObjectChanged); } //Register output parameters of component protected override void RegisterOutputParams(GH_Component.GH_OutputParamManager pManager) { pManager.Register_GenericParam("Output", "O", "Output"); } //Solver protected override void SolveInstance(IGH_DataAccess DA) { //Declare output variable List output = new List(); for (int i = 1; i < Params.Input.Count; i++) { //Declare input variables Grasshopper.Kernel.Data.GH_Structure data = null; //Get input data DA.GetDataTree(i, out data); if (data == null) continue; output.AddRange(data); } //Set output data DA.SetDataList(0, output); } //Guid of component public override Guid ComponentGuid { get { return new Guid("C98E5EA4-5715-47DD-A7CD-48192EA7F57B"); } } //Icon of component protected override Bitmap Icon { get { return new Bitmap(Tool.Properties.Resources.AdaptabilityRater); } } //Exposure of component public override GH_Exposure Exposure { get { return GH_Exposure.primary; } } } }