/// TODO: Get and Set for clipboard compatible data. Use a JSONObject with iotype and table only...? public GdsFMJson.JSONObject JsonMetadata() { var output = new GdsFMJson.JSONObject(); var v = new GdsFMJson.JSONArray(); if (typeof(T) == typeof(float) || typeof(T) == typeof(double)) { for (int i = 0; i < values.Length; i++) { v.AddPrim((float)Convert.ChangeType(values[i], typeof(float))); } } else if (typeof(T) == typeof(int) || typeof(T) == typeof(byte) || typeof(T) == typeof(short)) { for (int i = 0; i < values.Length; i++) { v.AddPrim((int)Convert.ChangeType(values[i], typeof(int))); } } output.AddItem("values", v); output.AddPrim("floor", floor); output.AddPrim("ceiling", ceiling); output.AddPrim("use_log", use_log); return(output); }
//Input from a serialized source, value's coming in from 0-1. public static void SetValues(this RTable <double> instance, GdsFMJson.JSONObject input, bool tableOnly = false) { // GD.Print("attempting to assign RTable......."); //Structure of dict: {values=[PoolRealArray tbl], floor=0, ceiling=100, use_log=false...} if (!tableOnly) { instance.floor = input.GetItem("floor", (float)instance.floor); instance.ceiling = input.GetItem("ceiling", (float)instance.ceiling); instance.use_log = input.GetItem("use_log", instance.use_log); } //Convert values to our maximum. var vals = (GdsFMJson.JSONArray)input.GetItem("values"); for (int i = 0; i < vals.Length; i++) { instance.values[i] = vals[i].ToFloat(); } instance.RecalcValues(); }