//Get list of materials and their corresponding gauge values protected override void BeforeSolveInstance() { Grasshopper.Kernel.Parameters.Param_Integer myMaterialParam = Params.Input[0] as Grasshopper.Kernel.Parameters.Param_Integer; myMaterialParam.ClearNamedValues(); Grasshopper.Kernel.Parameters.Param_Integer myGaugeParam = Params.Input[1] as Grasshopper.Kernel.Parameters.Param_Integer; myGaugeParam.ClearNamedValues(); ////////// Code for automatically loading Materials from XML when intance of class is initiated. IBIS_XML.Load("D:\\Dropbox\\_F13\\6338\\GH Plugin\\Ibis\\Ibis\\IBIS_XML.xml"); List <String> myMaterialNameList = new List <string>(); XmlNodeList myList = IBIS_XML.GetElementsByTagName("ThicknessMaterial"); foreach (XmlNode mx in myList) { XmlElement x = mx as XmlElement; string myXMLMaterial = x.GetAttribute("type"); myMaterialNameList.Add(myXMLMaterial); } for (int i = 0; i < myMaterialNameList.Count; i++) { myMaterialParam.AddNamedValue(myMaterialNameList[i], i + 1); } Grasshopper.Kernel.Data.GH_Structure <Grasshopper.Kernel.Types.GH_Integer> myMaterialValue = myMaterialParam.VolatileData as Grasshopper.Kernel.Data.GH_Structure <Grasshopper.Kernel.Types.GH_Integer>; if (myMaterialValue.IsEmpty) { return; } //Code to load the Gauge list depending on user Material input:- List <String> myGaugeList = new List <string>(); IBIS_XML.Load("D:\\Dropbox\\_F13\\6338\\GH Plugin\\Ibis\\Ibis\\IBIS_XML.xml"); foreach (Grasshopper.Kernel.Types.GH_Integer myThis in myMaterialValue.AllData(true)) { switch (myThis.Value) { case 1: //for standard steel //////////Gauge numbers XmlNodeList myNodeList1 = IBIS_XML.SelectNodes("IBIS/ThicknessGauge/ThicknessMaterial[@id=1]/Gauge"); foreach (XmlNode myNode in myNodeList1) { XmlElement myElement = myNode as XmlElement; String myXMLGauge = myElement.GetAttribute("type"); myGaugeList.Add(myXMLGauge); } for (int i = 0; i < myGaugeList.Count; i++) { myGaugeParam.AddNamedValue(myGaugeList[i], i + 1001); } break; } return; } }
public void SetComponentOutputs(Schema schema, IGH_DataAccess DA, List <IGH_Param> outputParams, GH_ActiveObject component) { foreach (var datatree in schema.Values) { string outputParamName = datatree.ParamName; if (outputParamName.StartsWith("RH_OUT:")) { var chunks = outputParamName.Split(new char[] { ':' }); outputParamName = chunks[chunks.Length - 1]; } int paramIndex = 0; for (int i = 0; i < outputParams.Count; i++) { if (outputParams[i].Name.Equals(outputParamName)) { paramIndex = i; break; } } var structure = new Grasshopper.Kernel.Data.GH_Structure <Grasshopper.Kernel.Types.IGH_Goo>(); Grasshopper.Kernel.Types.IGH_Goo goo = null; foreach (var kv in datatree.InnerTree) { var tokens = kv.Key.Trim(new char[] { '{', '}' }).Split(';'); List <int> elements = new List <int>(); foreach (var token in tokens) { if (!string.IsNullOrWhiteSpace(token)) { elements.Add(int.Parse(token)); } } var path = new Grasshopper.Kernel.Data.GH_Path(elements.ToArray()); var localBranch = structure.EnsurePath(path); for (int gooIndex = 0; gooIndex < kv.Value.Count; gooIndex++) { goo = GooFromReshopperObject(kv.Value[gooIndex]); localBranch.Add(goo); //structure.Insert(goo, path, gooIndex); } } if (structure.DataCount == 1) { DA.SetData(paramIndex, goo); } else if (structure.PathCount == 1) { DA.SetDataList(paramIndex, structure.AllData(false)); // let grasshopper handle paths } else { DA.SetDataTree(paramIndex, structure); } } foreach (var error in schema.Errors) { component.AddRuntimeMessage(GH_RuntimeMessageLevel.Error, error); } foreach (var warning in schema.Warnings) { component.AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, warning); } }
protected override void SolveInstance(IGH_DataAccess DA) { Grasshopper.Kernel.Data.GH_Structure<DHr> hourTreeIn = new Grasshopper.Kernel.Data.GH_Structure<DHr>(); string key = ""; int subdivs = 0; if ((DA.GetDataTree(0, out hourTreeIn)) && (DA.GetData(1, ref key)) && (DA.GetData(3, ref subdivs))) { Interval ival_overall = new Interval(); if (!DA.GetData(2, ref ival_overall)) { // go thru the given hours and find the max and min value for the given key ival_overall.T0 = MDHr.INVALID_VAL; ival_overall.T1 = MDHr.INVALID_VAL; foreach (DHr dhr in hourTreeIn.AllData(true)) { float val = dhr.val(key); if ((ival_overall.T0 == MDHr.INVALID_VAL) || (val < ival_overall.T0)) ival_overall.T0 = val; if ((ival_overall.T1 == MDHr.INVALID_VAL) || (val > ival_overall.T1)) ival_overall.T1 = val; } } Grasshopper.Kernel.Data.GH_Structure<DHr> hourTreeOut = new Grasshopper.Kernel.Data.GH_Structure<DHr>(); Grasshopper.Kernel.Data.GH_Structure<Grasshopper.Kernel.Types.GH_Integer> freqTreeOut = new Grasshopper.Kernel.Data.GH_Structure<Grasshopper.Kernel.Types.GH_Integer>(); Grasshopper.Kernel.Data.GH_Structure<Grasshopper.Kernel.Types.GH_Interval> ivalTreeOut = new Grasshopper.Kernel.Data.GH_Structure<Grasshopper.Kernel.Types.GH_Interval>(); List<Interval> ivalList = new List<Interval>(); if (ival_overall.IsDecreasing) ival_overall.Swap(); double delta = ival_overall.Length / subdivs; for (int n = 0; n < subdivs; n++) { ivalList.Add(new Interval(ival_overall.T0 + n * delta, ival_overall.T0 + ((n + 1) * delta))); } for (int b = 0; b < hourTreeIn.Branches.Count; b++) { Grasshopper.Kernel.Data.GH_Structure<DHr> hourBranch = new Grasshopper.Kernel.Data.GH_Structure<DHr>(); for (int n = 0; n < subdivs; n++) { hourBranch.EnsurePath(n); } List<int> freqOut = new List<int>(); List<DHr> hrsIn = hourTreeIn.Branches[b]; foreach (DHr dhr in hrsIn) { if (dhr.val(key) < ivalList[0].T0) { hourBranch.Append(dhr, new Grasshopper.Kernel.Data.GH_Path(0)); continue; } if (dhr.val(key) > ivalList[ivalList.Count - 1].T1) { hourBranch.Append(dhr, new Grasshopper.Kernel.Data.GH_Path(ivalList.Count - 1)); continue; } for (int n = 0; n < subdivs; n++) { if (ivalList[n].IncludesParameter(dhr.val(key))) { hourBranch.Append(dhr,new Grasshopper.Kernel.Data.GH_Path(n)); break; } } } for (int bb = 0; bb < hourBranch.Branches.Count; bb++) { Grasshopper.Kernel.Data.GH_Path branch_path = hourTreeIn.Paths[b].AppendElement(bb); hourTreeOut.AppendRange(hourBranch.Branches[bb], branch_path); Grasshopper.Kernel.Types.GH_Integer freq = new Grasshopper.Kernel.Types.GH_Integer(hourBranch.Branches[bb].Count); freqTreeOut.Append(freq, branch_path); Grasshopper.Kernel.Types.GH_Interval ival = new Grasshopper.Kernel.Types.GH_Interval(ivalList[bb]); ivalTreeOut.Append(ival, branch_path); } } hourTreeOut.Simplify(Grasshopper.Kernel.Data.GH_SimplificationMode.CollapseAllOverlaps); freqTreeOut.Simplify(Grasshopper.Kernel.Data.GH_SimplificationMode.CollapseAllOverlaps); ivalTreeOut.Simplify(Grasshopper.Kernel.Data.GH_SimplificationMode.CollapseAllOverlaps); DA.SetDataTree(0, freqTreeOut); DA.SetDataTree(1, ivalTreeOut); DA.SetDataTree(2, hourTreeOut); } }
protected override void BeforeSolveInstance() { Grasshopper.Kernel.Parameters.Param_Integer myMaterialParam = Params.Input[0] as Grasshopper.Kernel.Parameters.Param_Integer; myMaterialParam.ClearNamedValues(); ////////// Code for automatically loading Materials from XML when intance of class is initiated. IBIS_XML.Load("D:\\Dropbox\\_F13\\6338\\GH Plugin\\Ibis\\Ibis\\IBIS_XML.xml"); List <String> myMaterialNameList = new List <string>(); XmlNodeList myList = IBIS_XML.GetElementsByTagName("Material"); foreach (XmlNode mx in myList) { XmlElement x = mx as XmlElement; string myXMLMaterial = x.GetAttribute("type"); myMaterialNameList.Add(myXMLMaterial); } for (int i = 0; i < myMaterialNameList.Count; i++) { myMaterialParam.AddNamedValue(myMaterialNameList[i], i + 1); } Grasshopper.Kernel.Parameters.Param_Integer myGrainParam = Params.Input[2] as Grasshopper.Kernel.Parameters.Param_Integer; myGrainParam.ClearNamedValues(); Grasshopper.Kernel.Parameters.Param_Integer myThicknessParam = Params.Input[3] as Grasshopper.Kernel.Parameters.Param_Integer; myThicknessParam.ClearNamedValues(); Grasshopper.Kernel.Data.GH_Structure <Grasshopper.Kernel.Types.GH_Integer> myMaterialValue = myMaterialParam.VolatileData as Grasshopper.Kernel.Data.GH_Structure <Grasshopper.Kernel.Types.GH_Integer>; //GH_Structure<GH_Integer> data = param0.VolatileData as GH_Structure<GH_Integer>; if (myMaterialValue.IsEmpty) { return; } //Code to load the thickness list depending on user Material input:- List <String> myThicknessList = new List <string>(); List <String> myBendList = new List <string>(); IBIS_XML.Load("D:\\Dropbox\\_F13\\6338\\GH Plugin\\Ibis\\Ibis\\IBIS_XML.xml"); foreach (Grasshopper.Kernel.Types.GH_Integer myThis in myMaterialValue.AllData(true)) { switch (myThis.Value) { case 1: //////////for thickness: XmlNodeList myNodeList1 = IBIS_XML.SelectNodes("IBIS/DryBending/Material[@id=1]/BendDirection/Thickness"); foreach (XmlNode myNode in myNodeList1) { XmlElement myElement = myNode as XmlElement; String myXMLThickness = myElement.GetAttribute("type"); myThicknessList.Add(myXMLThickness); } for (int i = 0; i < 6; i++) //This needs to be changed!! { myThicknessParam.AddNamedValue(myThicknessList[i], i + 1001); } //////////for benddirection XmlNodeList myNodeList1b = IBIS_XML.SelectNodes("IBIS/DryBending/Material[@id=1]/BendDirection"); foreach (XmlNode myNode in myNodeList1b) { XmlElement myElement = myNode as XmlElement; String myXMLBend = myElement.GetAttribute("type"); myBendList.Add(myXMLBend); } for (int i = 0; i < myBendList.Count; i++) { myGrainParam.AddNamedValue(myBendList[i], i + 101); } break; case 2: //////////for thickness: XmlNodeList myNodeList2 = IBIS_XML.SelectNodes("IBIS/DryBending/Material[@id=2]/BendDirection/Thickness"); foreach (XmlNode myNode in myNodeList2) { XmlElement myElement = myNode as XmlElement; String myXMLThickness = myElement.GetAttribute("type"); myThicknessList.Add(myXMLThickness); } for (int i = 0; i < myThicknessList.Count; i++) { myThicknessParam.AddNamedValue(myThicknessList[i], i + 1001); } //////////for benddirection XmlNodeList myNodeList2b = IBIS_XML.SelectNodes("IBIS/DryBending/Material[@id=2]/BendDirection"); foreach (XmlNode myNode in myNodeList2b) { XmlElement myElement = myNode as XmlElement; String myXMLBend = myElement.GetAttribute("type"); myBendList.Add(myXMLBend); } for (int i = 0; i < myBendList.Count; i++) { myGrainParam.AddNamedValue(myBendList[i], i + 101); } break; case 3: XmlNodeList myNodeList3 = IBIS_XML.SelectNodes("IBIS/DryBending/Material[@id=3]/BendDirection/Thickness"); foreach (XmlNode myNode in myNodeList3) { XmlElement myElement = myNode as XmlElement; String myXMLThickness = myElement.GetAttribute("type"); myThicknessList.Add(myXMLThickness); } for (int i = 0; i < myThicknessList.Count; i++) { myThicknessParam.AddNamedValue(myThicknessList[i], i + 1001); } break; } return; } }