protected override void SolveInstance(IGH_DataAccess DA) { List <string> headings = new List <string>(); List <int> alignment = new List <int>(); Grasshopper.Kernel.Data.GH_Structure <Grasshopper.Kernel.Types.GH_String> dataTree = new Grasshopper.Kernel.Data.GH_Structure <Grasshopper.Kernel.Types.GH_String>(); DA.GetDataList(0, headings); DA.GetDataList(1, alignment); DA.GetDataTree("Data Tree", out dataTree); int currentColumnHeight = 1; for (int i = 0; i < dataTree.Branches.Count; i++) //for each column check for highest { if (dataTree.get_Branch(i).Count > currentColumnHeight) { currentColumnHeight = dataTree.get_Branch(i).Count; } } string[,] dataTreeArray = new string[dataTree.Branches.Count, currentColumnHeight]; for (int i = 0; i < dataTree.Branches.Count; i++) //for each column { for (int j = 0; j < dataTree.get_Branch(i).Count; j++) { dataTreeArray[i, j] = dataTree.get_Branch(i)[j].ToString(); } } List <string> report; Table reportObject = new Table(headings, alignment, dataTreeArray); report = reportObject.Create(); DA.SetDataList(0, report); }
protected override void SolveInstance(IGH_DataAccess DA) { List <string> headings = new List <string>(); List <int> alignment = new List <int>(); Grasshopper.Kernel.Data.GH_Structure <Grasshopper.Kernel.Types.GH_String> dataTree = new Grasshopper.Kernel.Data.GH_Structure <Grasshopper.Kernel.Types.GH_String>(); DA.GetDataList(0, headings); DA.GetDataList(1, alignment); DA.GetDataTree("Data Tree", out dataTree); int columnHeight = dataTree.get_Branch(0).Count; for (int i = 1; i < dataTree.Branches.Count; i++) //check if columns have the same size { if (dataTree.get_Branch(i).Count != columnHeight) { throw new ArgumentException("Columns heights must be the same"); } } string[,] dataTreeArray = new string[dataTree.Branches.Count, columnHeight]; for (int i = 0; i < dataTree.Branches.Count; i++) //for each column { for (int j = 0; j < dataTree.get_Branch(i).Count; j++) { dataTreeArray[i, j] = dataTree.get_Branch(i)[j].ToString(); } } List <string> report; Table reportObject = new Table(headings, alignment, dataTreeArray); report = reportObject.Create(); DA.SetDataList(0, report); }
protected override void SolveInstance(IGH_DataAccess DA) { Grasshopper.Kernel.Data.GH_Structure <Grasshopper.Kernel.Types.GH_Number> xValuesTree = new Grasshopper.Kernel.Data.GH_Structure <Grasshopper.Kernel.Types.GH_Number>(); Grasshopper.Kernel.Data.GH_Structure <Grasshopper.Kernel.Types.GH_Number> yValuesTree = new Grasshopper.Kernel.Data.GH_Structure <Grasshopper.Kernel.Types.GH_Number>(); List <string> valuesNames = new List <string>(); List <DataType> dataTypes = new List <DataType>(); DA.GetDataTree("X Values", out xValuesTree); DA.GetDataTree("Y Values", out yValuesTree); DA.GetDataList(2, valuesNames); DA.GetDataList(3, dataTypes); List <List <double> > xValues = new List <List <double> >(); List <List <double> > yValues = new List <List <double> >(); for (int i = 0; i < xValuesTree.PathCount; i++) { List <double> currentBranchXValues = new List <double>(); for (int j = 0; j < xValuesTree.get_Branch(i).Count; j++) { currentBranchXValues.Add(Convert.ToDouble(xValuesTree.get_Branch(i)[j].ToString())); } xValues.Add(currentBranchXValues); List <double> currentBranchYValues = new List <double>(); for (int j = 0; j < yValuesTree.get_Branch(i).Count; j++) { currentBranchYValues.Add(Convert.ToDouble(yValuesTree.get_Branch(i)[j].ToString())); } yValues.Add(currentBranchYValues); } GraphData graphData = new GraphData(xValues, yValues, valuesNames, dataTypes); DA.SetData(0, graphData); }
protected override void SolveInstance(IGH_DataAccess DA) { this.JSONIsPopulated = false; this.JSONString = ""; Grasshopper.Kernel.Data.GH_Structure<Grasshopper.Kernel.Types.IGH_Goo> tree = new Grasshopper.Kernel.Data.GH_Structure<Grasshopper.Kernel.Types.IGH_Goo>(); if (!DA.GetDataTree(0, out tree)) { return; } String JSONOpen = ""; String JSONClose = ""; JSONOpen = @"""" + this.ComponentName + @""":{"; JSONClose = "}"; DataStructure dim; if (tree.PathCount == 1) { if (tree.DataCount == 1) dim = DataStructure.Singleton; // a singleton else dim = DataStructure.List; // a list } else dim = DataStructure.Tree; // a tree JSONOpen += @"""DataStructure"":""" + dim.ToString() + @""","; String UniformType = ""; bool IsUniform = JSONConverter.UniformDataType(tree, ref UniformType); if (IsUniform) JSONOpen += @"""Type"":""" + UniformType + @""","; if (dim == DataStructure.Singleton) { // SINGLETONS // String ObjString = ""; IGH_Goo obj = tree.get_FirstItem(false); if ((obj != null)&&(JSONConverter.ObjectToJSON(obj, ref ObjString,false))){ this.JSONString = JSONOpen + @"""Value"":"+ObjString + JSONClose; DA.SetData(0, "{" + this.JSONString + "}"); this.JSONIsPopulated = true; return; } else { // TODO: return failed item this.JSONIsPopulated = false; return; } } else if (dim == DataStructure.List) { // LISTS // JSONOpen += @"""Items"":{"; JSONClose += "}"; List<IGH_Goo> failures = new List<IGH_Goo>(); List<String> ObjStrings = JSONConverter.ObjectsToJSON(tree.get_Branch(tree.Paths[0]), ref failures, !IsUniform); if (failures.Count > 0) AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, "Some items failed to be converted to JSON."); if (ObjStrings.Count == 0) { AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Nothing was successfully converted to JSON."); this.JSONIsPopulated = false; return; } this.JSONString = JSONOpen + String.Join(",", ObjStrings.ToArray()) + JSONClose; DA.SetData(0, "{"+this.JSONString+"}"); this.JSONIsPopulated = true; // TODO: return failed items return; } else { // TREES // JSONOpen += @"""BranchCount"":" + tree.Branches.Count + @",""DataCount"":" + tree.DataCount + @", ""Paths"":{"; JSONClose += "}"; List<IGH_Goo> failures = new List<IGH_Goo>(); List<String> BranchStrings = new List<string>(); foreach (Grasshopper.Kernel.Data.GH_Path path in tree.Paths) { String BRANCHOpen = @"""" + path.ToString() + @""":{"; String BRANCHClose = "}"; List<String> ObjStrings = JSONConverter.ObjectsToJSON(tree.get_Branch(path), ref failures, !IsUniform); if (ObjStrings.Count >= 0) { BranchStrings.Add(BRANCHOpen + String.Join(",", ObjStrings.ToArray()) + BRANCHClose); } else { AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, "An entire branch failed to be converted to JSON."); } } if (failures.Count > 0) AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, "Some items failed to be converted to JSON."); this.JSONString = JSONOpen + String.Join(",", BranchStrings.ToArray()) + JSONClose; DA.SetData(0, "{" + this.JSONString + "}"); this.JSONIsPopulated = true; // TODO: return failed items return; } //if (JSONConverter.ObjectToJSON(obj, ref JSONString)) DA.SetData(0, JSONString); //DA.SetData(0, tree.PathCount.ToString()); }
protected override void SolveInstance(IGH_DataAccess DA) { List<DHr> dhrs = new List<DHr>(); string key_u = ""; string key_v = ""; Interval subdivs = new Interval(); if ((DA.GetDataList(0, dhrs)) && (DA.GetData(1, ref key_u)) && (DA.GetData(2, ref key_v)) && (DA.GetData(4, ref subdivs))) { int subdivs_u = (int) Math.Floor(subdivs.T0); int subdivs_v = (int) Math.Floor(subdivs.T1); Grasshopper.Kernel.Types.UVInterval ival_overall = new Grasshopper.Kernel.Types.UVInterval(); if (!DA.GetData(3, ref ival_overall)) { // go thru the given hours and find the max and min value for the given key Interval ival_temp_u = new Interval(MDHr.INVALID_VAL, MDHr.INVALID_VAL); Interval ival_temp_v = new Interval(MDHr.INVALID_VAL, MDHr.INVALID_VAL); foreach (DHr dhr in dhrs) { float val_u = dhr.val(key_u); float val_v = dhr.val(key_v); if ((ival_temp_u.T0 == MDHr.INVALID_VAL) || (val_u < ival_temp_u.T0)) ival_temp_u.T0 = val_u; if ((ival_temp_u.T1 == MDHr.INVALID_VAL) || (val_u > ival_temp_u.T1)) ival_temp_u.T1 = val_u; if ((ival_temp_v.T0 == MDHr.INVALID_VAL) || (val_v < ival_temp_v.T0)) ival_temp_v.T0 = val_v; if ((ival_temp_v.T1 == MDHr.INVALID_VAL) || (val_v > ival_temp_v.T1)) ival_temp_v.T1 = val_v; } } bool cull_outliers = false; DA.GetData(5, ref cull_outliers); Grasshopper.Kernel.Data.GH_Structure<DHr> hrsOut = new Grasshopper.Kernel.Data.GH_Structure<DHr>(); Grasshopper.Kernel.Data.GH_Structure<Grasshopper.Kernel.Types.GH_Integer> freqOut = new Grasshopper.Kernel.Data.GH_Structure<Grasshopper.Kernel.Types.GH_Integer>(); Grasshopper.Kernel.Data.GH_Structure<Grasshopper.Kernel.Types.GH_Interval2D> ivalsOut = new Grasshopper.Kernel.Data.GH_Structure<Grasshopper.Kernel.Types.GH_Interval2D>(); if (ival_overall.U.IsDecreasing) ival_overall.U.Swap(); if (ival_overall.V.IsDecreasing) ival_overall.V.Swap(); double delta_u = ival_overall.U.Length / subdivs_u; double delta_v = ival_overall.V.Length / subdivs_v; for (int u = 0; u < subdivs_u; u++) { for (int v = 0; v < subdivs_v; v++) { Grasshopper.Kernel.Data.GH_Path path = new Grasshopper.Kernel.Data.GH_Path(new int[] { u, v }); ivalsOut.EnsurePath(path); hrsOut.EnsurePath(path); Interval sub_u = new Interval(ival_overall.U.T0 + u * delta_u, ival_overall.U.T0 + ((u + 1) * delta_u)); Interval sub_v = new Interval(ival_overall.V.T0 + v * delta_v, ival_overall.V.T0 + ((v + 1) * delta_v)); Grasshopper.Kernel.Types.UVInterval sub_uv = new Grasshopper.Kernel.Types.UVInterval(sub_u, sub_v); Grasshopper.Kernel.Types.GH_Interval2D i2d = new Grasshopper.Kernel.Types.GH_Interval2D(); i2d.Value = sub_uv; ivalsOut.Append(i2d, path); } } foreach (DHr dhr in dhrs) { int[] address = new int[] { -1 , -1}; for (int u = 0; u < subdivs_u; u++) { Grasshopper.Kernel.Data.GH_Path path_u = new Grasshopper.Kernel.Data.GH_Path(new int[] { u, 0 }); Interval sub_u = ivalsOut.get_DataItem(path_u, 0).Value.U; double val = dhr.val(key_u); if ((sub_u.IncludesParameter(val)) || ((!cull_outliers) && (u == 0) && (val <= sub_u.Min)) || ((!cull_outliers) && (u == subdivs_u - 1) && (val >= sub_u.Max))) { address[0] = u; break; } } for (int v = 0; v < subdivs_v; v++) { Grasshopper.Kernel.Data.GH_Path path_v = new Grasshopper.Kernel.Data.GH_Path(new int[] { 0, v }); Interval sub_v = ivalsOut.get_DataItem(path_v, 0).Value.V; double val = dhr.val(key_v); if ((sub_v.IncludesParameter(val)) || ((!cull_outliers) && (v == 0) && (val <= sub_v.Min)) || ((!cull_outliers) && (v == subdivs_v - 1) && (val >= sub_v.Max))) { address[1] = v; break; } } if ((address[0] < 0) || (address[1] < 0)) { if (!cull_outliers) this.AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Crud. Could not place an outlier into any intervals. What gives?!"); } else { Grasshopper.Kernel.Data.GH_Path path = new Grasshopper.Kernel.Data.GH_Path(address); hrsOut.Append(dhr, path); } } foreach (Grasshopper.Kernel.Data.GH_Path path in hrsOut.Paths) { int n = hrsOut.get_Branch(path).Count; freqOut.Append(new Grasshopper.Kernel.Types.GH_Integer(n), path); } DA.SetDataTree(0, freqOut); DA.SetDataTree(1, ivalsOut); DA.SetDataTree(2, hrsOut); } }