/// <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) { IGH_Goo trailData = null; IGH_Goo colorData = null; bool texture = new bool(); object displayMode = null; VisualData visualData = new VisualData(); if (!DA.GetData(0, ref trailData) || trailData == null) { AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "No Trail Data Detected, please connect Trail Data to enable the component"); return; } DA.GetData(1, ref colorData); string dataType = trailData.GetType().Name.ToString(); if (trailData.ToString() == "Culebra_GH.Data_Structures.TrailData") { TrailData td; bool worked = trailData.CastTo(out td); if (worked) { visualData.trailData = td; } else { AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Could not convert trail data, ensure you have the correct inputs"); return; } } else { AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Please input Trail Data Output value for Trail Data not a " + dataType); return; } if (colorData != null) { string colorType = colorData.GetType().Name.ToString(); if (colorData.ToString() == "Culebra_GH.Data_Structures.ColorData") { ColorData cd; bool worked = colorData.CastTo(out cd); if (worked) { visualData.colorData = cd; } else { AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Could not convert color data, ensure you have the correct inputs"); return; } } else { AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Please input Trail Data Output value for Trail Data not a " + colorType); return; } } else { ColorData color = new ColorData(); color.colorDataType = "Base"; visualData.colorData = color; } if (!DA.GetData(2, ref texture)) { return; } if (texture) { AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, "WARNING USING TEXTURE CAN MAKE THE SIMULATION VERY UNSTABLE AND MAY CRASH WITHOUT WARNING, I RECOMMEND USING THE GH BUILT IN CLOUD DISPLAY FOR THE CREEPERS OUTPUT"); } visualData.useTexture = texture; if (!DA.GetData(3, ref displayMode)) { return; } string type2 = displayMode.GetType().Name.ToString(); if (displayMode.GetType() != typeof(GH_Integer) && displayMode.GetType() != typeof(GH_Number)) { AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Please input a integer/float value for Display Mode not a " + type2); return; } else { if (displayMode.GetType() == typeof(GH_Integer)) { GH_Integer ghInt = (GH_Integer)displayMode; visualData.displayMode = ghInt.Value; } else { GH_Number ghNum = (GH_Number)displayMode; visualData.displayMode = Convert.ToInt32(ghNum.Value); } } IGH_VisualData igh_Viz = new IGH_VisualData(visualData); DA.SetData(0, igh_Viz); }
public static bool ObjectToJSON(IGH_Goo obj, ref String str, bool IncludeType = true, bool AllowNulls = true) { if (obj == null) { if (!AllowNulls) return false; str = @"{""Type"":""null""}"; return true; } if (obj.GetType() == typeof(GH_Boolean)){ String val = @"""" + ((GH_Boolean)obj).Value.ToString() + @""""; if (IncludeType) str = @"{""Type"":"""+TypeToString(obj)+@""",""Value"":" + val + @"}"; else str = val; return true; } if (obj.GetType() == typeof(GH_Number)){ String val = ((GH_Number)obj).Value.ToString(); if (IncludeType) str = @"{""Type"":""" + TypeToString(obj) + @""",""Value"":" + val + @"}"; else str = val; return true; } if (obj.GetType() == typeof(GH_Integer)) { String val = ((GH_Integer)obj).Value.ToString(); if (IncludeType) str = @"{""Type"":""" + TypeToString(obj) + @""",""Value"":" + val + @"}"; else str = val; return true; } if (obj.GetType() == typeof(GH_String)) { //TODO: escape bad string characters according to http://stackoverflow.com/questions/3020094/how-should-i-escape-strings-in-json String val = @"""" + ((GH_String)obj).Value.ToString().Replace(@"""",@"\""") + @""""; if (IncludeType) str = @"{""Type"":""" + TypeToString(obj) + @""",""Value"":" + val + @"}"; else str = val; return true; } if (obj.GetType() == typeof(GH_Guid)) { String val = @"""" + ((GH_Guid)obj).Value.ToString() + @""""; if (IncludeType) str = @"{""Type"":""" + TypeToString(obj) + @""",""Value"":" + val + @"}"; else str = val; return true; } if (obj.GetType() == typeof(GH_Time)) { String val = @"""" + ((GH_Time)obj).Value.ToString() + @""""; if (IncludeType) str = @"{""Type"":""" + TypeToString(obj) + @""",""Value"":" + val + @"}"; else str = val; return true; } if (obj.GetType() == typeof(GH_Colour)) { if (IncludeType) str = @"{""Type"":""" + TypeToString(obj) + @""","; else str = @"{"; GH_Colour clr = (GH_Colour)obj; str += @"""A"":" + clr.Value.A.ToString() + ","; str += @"""R"":" + clr.Value.R.ToString() + ","; str += @"""G"":" + clr.Value.G.ToString() + ","; str += @"""B"":" + clr.Value.B.ToString(); str += "}"; return true; } if (obj.GetType() == typeof(GH_Interval)) { if (IncludeType) str = @"{""Type"":""" + TypeToString(obj) + @""","; else str = @"{"; GH_Interval ival = (GH_Interval)obj; str += @"""T0"":" + ival.Value.T0.ToString() + ","; str += @"""T1"":" + ival.Value.T1.ToString(); str += "}"; return true; } if (obj.GetType() == typeof(GH_Interval2D)) { if (IncludeType) str = @"{""Type"":""" + TypeToString(obj) + @""","; else str = @"{"; GH_Interval2D ival = (GH_Interval2D)obj; str += @"""U0"":" + ival.Value.U0.ToString() + ","; str += @"""U1"":" + ival.Value.U1.ToString() + ","; str += @"""V0"":" + ival.Value.V0.ToString() + ","; str += @"""V1"":" + ival.Value.V1.ToString(); str += "}"; return true; } return false; }
public static String TypeToString(IGH_Goo obj) { String[] split = obj.GetType().ToString().Split('.'); return split[split.Length - 1]; }
private string getInputs(GH_Component ThisComponent, IGH_DataAccess DA, int i) { string datahere = ""; string paramType = ""; try { if (ThisComponent.Params.Input[i].Access == GH_ParamAccess.item) { convetToItem(ThisComponent, i, DA); IGH_Goo inputObject = null; DA.GetData(i, ref inputObject); paramType = inputObject.GetType().ToString(); if (paramType == "Grasshopper.Kernel.Types.GH_Line") { convetToItem(ThisComponent, i, DA); Rhino.Geometry.Line inputLine = Rhino.Geometry.Line.Unset; DA.GetData(i, ref inputLine); datahere = "\"gCPy.Line(" + inputLine.FromX.ToString() + ", " + inputLine.FromY.ToString() + ", " + inputLine.FromZ.ToString() + ", " + inputLine.ToX.ToString() + ", " + inputLine.ToY.ToString() + ", " + inputLine.ToZ.ToString() + ")\""; } else if (paramType == "Grasshopper.Kernel.Types.GH_Point") { convetToItem(ThisComponent, i, DA); Rhino.Geometry.Point3d inputPoint = Rhino.Geometry.Point3d.Unset; DA.GetData(i, ref inputPoint); datahere = "\"gCPy.Point(" + inputPoint.X.ToString() + ", " + inputPoint.Y.ToString() + ", " + inputPoint.Z.ToString() + ")\""; } else if (paramType == "Grasshopper.Kernel.Types.GH_Circle") { convetToItem(ThisComponent, i, DA); Rhino.Geometry.Circle inputCircle = Rhino.Geometry.Circle.Unset; DA.GetData(i, ref inputCircle); datahere = "\"gCPy.Circle(" + inputCircle.Center.X.ToString() + "," // xpos + inputCircle.Center.Y.ToString() + "," // ypos + inputCircle.Center.Z.ToString() + "," // zpos + inputCircle.Radius.ToString() + "," // radius + inputCircle.Plane.XAxis.ToString() + "," // x axis vector0 , x axis vector1 , x axis vector 2 + inputCircle.Plane.YAxis.ToString() + "," // y axis vector + inputCircle.Plane.ZAxis.ToString() + ")\""; // z axis vector } else if (paramType == "Grasshopper.Kernel.Types.GH_Curve") { datahere += "\"Ok This is a curve ... Take Care .. add all your things here\""; } else if (paramType == "Grasshopper.Kernel.Types.GH_String") { convetToItem(ThisComponent, i, DA); string inputString = string.Empty; DA.GetData(i, ref inputString); datahere = "\"" + inputString.Replace(Environment.NewLine, "\\n").Replace("'", @"\'").Replace("\"", "\\\\" + "\"").Replace("\\n", "\\\\n") + "\""; } else if (paramType == "Grasshopper.Kernel.Types.GH_Integer") { convetToItem(ThisComponent, i, DA); int inputInt = 0; DA.GetData(i, ref inputInt); datahere = inputInt.ToString(); } else if (paramType == "Grasshopper.Kernel.Types.GH_Number") { convetToItem(ThisComponent, i, DA); double inputNum = 0.0; DA.GetData(i, ref inputNum); datahere = inputNum.ToString(); } else if (paramType == "Grasshopper.Kernel.Types.GH_Boolean") { convetToItem(ThisComponent, i, DA); bool inputBool = false; DA.GetData(i, ref inputBool); datahere = inputBool ? "True" : "False"; } else { datahere = "None"; } } else { string thisInputString = ThisComponent.Params.Input[i].VolatileData.DataDescription(false, false).Trim().Replace(System.Environment.NewLine, ","); datahere = recomposeInputString(thisInputString); } } catch (Exception errf) { //MessageBox.Show(errf.ToString()); } return(datahere); }