public void SetParameterValue(string id, string parameter, object v) { string cid = id + "." + parameter; GraphParameterValue p = null; if (Parameters.TryGetValue(cid, out p)) { if (p.IsFunction()) { FunctionGraph g = p.Value as FunctionGraph; g.OnGraphUpdated -= Graph_OnGraphUpdated; g.Dispose(); } p.Value = v; } else { Parameters[cid] = new GraphParameterValue(parameter, v); } if (v is FunctionGraph) { (v as FunctionGraph).OnGraphUpdated += Graph_OnGraphUpdated; } Updated(); }
public T GetParameterValue <T>(string id, string parameter) { string cid = id + "." + parameter; GraphParameterValue p = null; if (Parameters.TryGetValue(cid, out p)) { if (p.IsFunction()) { FunctionGraph g = p.Value as FunctionGraph; g.TryAndProcess(); if (g.Result == null) { return(default(T)); } return((T)g.Result); } else { return((T)p.Value); } } return(default(T)); }
protected void BuildShaderFunctionValue(GraphParameterValue param, StringBuilder builder) { FunctionGraph fn = param.Value as FunctionGraph; fn.TryAndProcess(); object value = fn.Result; if (param.Type == NodeType.Bool) { builder.Append(Convert.ToBoolean(param.Value).ToString().ToLower() + ";\r\n"); } else if (param.Type == NodeType.Float) { builder.Append(Convert.ToSingle(value).ToString() + ";\r\n"); } else if (param.Type == NodeType.Float4 || param.Type == NodeType.Gray || param.Type == NodeType.Color) { MVector vec = new MVector(); if (value is MVector) { vec = (MVector)value; } builder.Append("vec4(" + vec.X + "," + vec.Y + "," + vec.Z + "," + vec.W + ");\r\n"); } else if (param.Type == NodeType.Float2) { MVector vec = new MVector(); if (value is MVector) { vec = (MVector)value; } builder.Append("vec2(" + vec.X + "," + vec.Y + ");\r\n"); } else if (param.Type == NodeType.Float3) { MVector vec = new MVector(); if (value is MVector) { vec = (MVector)value; } builder.Append("vec3(" + vec.X + "," + vec.Y + "," + vec.Z + ");\r\n"); } else if (param.Type == NodeType.Matrix && value is Matrix4) { Matrix4 m4 = (Matrix4)value; //glsl matrices are column major order builder.Append("mat3(" + m4.Column0.X + ", " + m4.Column0.Y + ", " + m4.Column0.Z + ", " + m4.Column0.W + ", " + m4.Column1.X + ", " + m4.Column1.Y + ", " + m4.Column1.Z + ", " + m4.Column1.W + ", " + m4.Column2.X + ", " + m4.Column2.Y + ", " + m4.Column2.Z + ", " + m4.Column2.W + "," + m4.Column3.X + ", " + m4.Column3.Y + ", " + m4.Column3.Z + ", " + m4.Column3.W + ");\r\n"); } }
public GraphParameterValue GetParameterRaw(string id, string parameter) { GraphParameterValue p = null; string cid = id + "." + parameter; Parameters.TryGetValue(cid, out p); return(p); }
public static GraphParameterValue FromJson(string data, Node n) { GraphParameterValueData d = JsonConvert.DeserializeObject <GraphParameterValueData>(data); //create a dummy graph parameter var g = new GraphParameterValue(d.name, 0); //load real data g.SetJson(d, n); return(g); }
public void SetParameterValue(string id, string parameter, object v) { string cid = id + "." + parameter; GraphParameterValue p = null; if (Parameters.TryGetValue(cid, out p)) { if (p.IsFunction()) { FunctionGraph g = p.Value as FunctionGraph; g.OnGraphUpdated -= Graph_OnGraphUpdated; g.Dispose(); } if (v is float || v is int || v is double) { p.Type = NodeType.Float; } else if (v is bool) { p.Type = NodeType.Bool; } else if (v is MVector) { p.Type = NodeType.Float4; } p.Value = v; } else { p = Parameters[cid] = new GraphParameterValue(parameter, v); if (v is float || v is int || v is double) { p.Type = NodeType.Float; } else if (v is bool) { p.Type = NodeType.Bool; } else if (v is MVector) { p.Type = NodeType.Float4; } } if (v is FunctionGraph) { (v as FunctionGraph).OnGraphUpdated += Graph_OnGraphUpdated; } Updated(); }
public virtual void SetJsonReadyCustomParameters(List <string> parameters) { if (parameters != null) { CustomParameters.Clear(); foreach (var k in parameters) { CustomParameters.Add(GraphParameterValue.FromJson(k, null)); } } }
public bool IsParameterValueFunction(string id, string parameter) { string cid = id + "." + parameter; GraphParameterValue v = null; if (Parameters.TryGetValue(cid, out v)) { return(v.IsFunction()); } return(false); }
protected void BuildShaderParam(GraphParameterValue param, StringBuilder builder, bool useMinMaxValue = false) { string type = ""; if (param.Type == NodeType.Bool) { type = "bool "; } else if (param.Type == NodeType.Float) { type = "float "; } else if (param.Type == NodeType.Color || param.Type == NodeType.Float4 || param.Type == NodeType.Gray) { type = "vec4 "; } else if (param.Type == NodeType.Float2) { type = "vec2 "; } else if (param.Type == NodeType.Float3) { type = "vec3 "; } else if (param.Type == NodeType.Matrix) { type = "mat4 "; } else { return; } string prefix = "p_"; string s1 = prefix + param.Name.Replace(" ", "").Replace("-", "") + " = "; builder.Append(type); builder.Append(s1); if (param.IsFunction()) { BuildShaderFunctionValue(param, builder); } else { BuildShaderParamValue(param, builder, useMinMaxValue); } }
protected void SetParentGraphVars(Graph g) { if (g == null) { return; } try { var p = g; if (p != null) { foreach (var k in p.Parameters.Keys) { var param = p.Parameters[k]; if (!param.IsFunction()) { SetVar("p_" + param.Name.Replace(" ", "").Replace("-", ""), param.Value, param.Type); } } int count = p.CustomParameters.Count; for (int i = 0; i < count; i++) { GraphParameterValue param = p.CustomParameters[i]; if (!param.IsFunction()) { SetVar("p_" + param.Name.Replace(" ", "").Replace("-", ""), param.Value, param.Type); } } } } catch (StackOverflowException e) { //possible Log.Error(e); Log.Error("There is an infinite function reference loop in promoted graph parameters."); } }
public void RemoveParameterValue(string id, string parameter) { string cid = id + "." + parameter; GraphParameterValue p = null; if (Parameters.TryGetValue(cid, out p)) { if (p.IsFunction()) { FunctionGraph g = p.Value as FunctionGraph; g.OnGraphUpdated -= Graph_OnGraphUpdated; g.Dispose(); } } Parameters.Remove(cid); Updated(); }
public virtual void SetJsonReadyParameters(Dictionary <string, string> parameters) { if (parameters != null) { Parameters = new Dictionary <string, GraphParameterValue>(); foreach (var k in parameters.Keys) { string[] split = k.Split('.'); Node n = null; NodeLookup.TryGetValue(split[0], out n); Parameters[k] = GraphParameterValue.FromJson(parameters[k], n); if (Parameters[k].IsFunction()) { var f = Parameters[k].Value as FunctionGraph; f.OnGraphUpdated += Graph_OnGraphUpdated; } } } }
protected string GetParentGraphShaderParams() { StringBuilder builder = new StringBuilder(); try { var p = TopGraph(); if (p != null) { foreach (var param in p.Parameters.Values) { BuildShaderParam(param, builder); } int count = p.CustomParameters.Count; for (int i = 0; i < count; i++) { GraphParameterValue param = p.CustomParameters[i]; if (param.IsFunction()) { continue; } BuildShaderParam(param, builder, true); } } } catch (StackOverflowException e) { Log.Error(e); Log.Error("There is an infinite function reference loop in promoted graph parameters."); return(""); } return(builder.ToString()); }
public object GetParameterValue(string id, string parameter) { string cid = id + "." + parameter; GraphParameterValue p = null; if (Parameters.TryGetValue(cid, out p)) { if (p.IsFunction()) { FunctionGraph g = p.Value as FunctionGraph; g.TryAndProcess(); return(g.Result); } else { return(p.Value); } } return(null); }
protected void BuildShaderParamValue(GraphParameterValue param, StringBuilder builder, bool useMinMaxValue = false) { if (param.Type == NodeType.Bool) { builder.Append(Convert.ToBoolean(param.Value).ToString().ToLower() + ";\r\n"); } else if (param.Type == NodeType.Float) { builder.Append(Convert.ToSingle(param.Value).ToString() + ";\r\n"); } else if (param.Type == NodeType.Float4 || param.Type == NodeType.Gray || param.Type == NodeType.Color) { MVector vec = new MVector(); if (param.Value is MVector) { if (!useMinMaxValue) { vec = (MVector)param.Value; } else { vec = param.VectorValue; } } builder.Append("vec4(" + vec.X + "," + vec.Y + "," + vec.Z + "," + vec.W + ");\r\n"); } else if (param.Type == NodeType.Float2) { MVector vec = new MVector(); if (param.Value is MVector) { if (!useMinMaxValue) { vec = (MVector)param.Value; } else { vec = param.VectorValue; } } builder.Append("vec2(" + vec.X + "," + vec.Y + ");\r\n"); } else if (param.Type == NodeType.Float3) { MVector vec = new MVector(); if (param.Value is MVector) { if (!useMinMaxValue) { vec = (MVector)param.Value; } else { vec = param.VectorValue; } } builder.Append("vec3(" + vec.X + "," + vec.Y + "," + vec.Z + ");\r\n"); } }
protected void BuildShaderParamValue(GraphParameterValue param, StringBuilder builder, bool useMinMaxValue = false) { if (param.Type == NodeType.Bool) { builder.Append(Convert.ToBoolean(param.Value).ToString().ToLower() + ";\r\n"); } else if (param.Type == NodeType.Float) { builder.Append(param.FloatValue.ToString() + ";\r\n"); } else if (param.Type == NodeType.Float4 || param.Type == NodeType.Gray || param.Type == NodeType.Color) { MVector vec = new MVector(); if (param.Value is MVector) { if (!useMinMaxValue) { vec = (MVector)param.Value; } else { vec = param.VectorValue; } } builder.Append("vec4(" + vec.X + "," + vec.Y + "," + vec.Z + "," + vec.W + ");\r\n"); } else if (param.Type == NodeType.Float2) { MVector vec = new MVector(); if (param.Value is MVector) { if (!useMinMaxValue) { vec = (MVector)param.Value; } else { vec = param.VectorValue; } } builder.Append("vec2(" + vec.X + "," + vec.Y + ");\r\n"); } else if (param.Type == NodeType.Float3) { MVector vec = new MVector(); if (param.Value is MVector) { if (!useMinMaxValue) { vec = (MVector)param.Value; } else { vec = param.VectorValue; } } builder.Append("vec3(" + vec.X + "," + vec.Y + "," + vec.Z + ");\r\n"); } else if (param.Type == NodeType.Matrix) { Matrix4 m4 = param.Matrix4Value; //glsl matrices are column major order builder.Append("mat3(" + m4.Column0.X + ", " + m4.Column0.Y + ", " + m4.Column0.Z + ", " + m4.Column0.W + ", " + m4.Column1.X + ", " + m4.Column1.Y + ", " + m4.Column1.Z + ", " + m4.Column1.W + ", " + m4.Column2.X + ", " + m4.Column2.Y + ", " + m4.Column2.Z + ", " + m4.Column2.W + "," + m4.Column3.X + ", " + m4.Column3.Y + ", " + m4.Column3.Z + ", " + m4.Column3.W + ");\r\n"); } }
public virtual void FromJson(string data) { GraphData d = JsonConvert.DeserializeObject <GraphData>(data); if (d != null) { Dictionary <string, Node> lookup = new Dictionary <string, Node>(); Dictionary <string, string> nodeData = new Dictionary <string, string>(); Name = d.name; OutputNodes = d.outputs; InputNodes = d.inputs; defaultTextureType = d.defaultTextureType; ShiftX = d.shiftX; ShiftY = d.shiftY; Zoom = d.zoom; Parameters = new Dictionary <string, GraphParameterValue>(); foreach (var k in d.parameters.Keys) { Parameters[k] = GraphParameterValue.FromJson(d.parameters[k]); } //parse node data //setup initial object instances foreach (string s in d.nodes) { Node.NodeData nd = JsonConvert.DeserializeObject <Node.NodeData>(s); if (nd != null) { string type = nd.type; if (!string.IsNullOrEmpty(type)) { try { Type t = Type.GetType(type); if (t != null) { //special case to handle output nodes if (t.Equals(typeof(OutputNode))) { OutputNode n = new OutputNode(defaultTextureType); n.ParentGraph = this; n.Id = nd.id; lookup[nd.id] = n; Nodes.Add(n); nodeData[nd.id] = s; } else if (t.Equals(typeof(InputNode))) { InputNode n = new InputNode(defaultTextureType); n.ParentGraph = this; n.Id = nd.id; lookup[nd.id] = n; Nodes.Add(n); nodeData[nd.id] = s; } else { Node n = (Node)Activator.CreateInstance(t, nd.width, nd.height, defaultTextureType); if (n != null) { n.ParentGraph = this; n.Id = nd.id; lookup[nd.id] = n; Nodes.Add(n); nodeData[nd.id] = s; } } } else { //log we could not load graph node } } catch { //log we could not load graph node } } } } NodeLookup = lookup; //apply data to nodes foreach (Node n in Nodes) { string ndata = null; nodeData.TryGetValue(n.Id, out ndata); if (!string.IsNullOrEmpty(ndata)) { n.FromJson(lookup, ndata); n.OnUpdate += N_OnUpdate; //origin sizes are only for graph instances //not actually used in the current one being edited //it is used in the ResizeWith OriginSizes[n.Id] = new Point(n.Width, n.Height); } } } }
protected void BuildShaderParamValue(GraphParameterValue param, StringBuilder builder, bool useMinMaxValue = false) { if (param.Type == NodeType.Bool) { try { builder.Append(Convert.ToBoolean(param.Value).ToString().ToLower() + ";\r\n"); } catch (Exception e) { Log.Error(e); Log.Info("Defaulting to false for parameter " + param.Name); builder.Append("false;\r\n"); } } else if (param.Type == NodeType.Float) { try { if (useMinMaxValue) { builder.Append(param.FloatValue.ToCodeString() + ";\r\n"); } else { builder.Append(Convert.ToSingle(param.Value).ToCodeString() + ";\r\n"); } } catch (Exception e) { Log.Error(e); Log.Info("Defaulting to 0 for parameter " + param.Name); builder.Append("0;\r\n"); } } else if (param.Type == NodeType.Float4 || param.Type == NodeType.Gray || param.Type == NodeType.Color) { MVector vec = new MVector(); if (param.Value is MVector) { if (!useMinMaxValue) { vec = (MVector)param.Value; } else { vec = param.VectorValue; } } builder.Append("vec4(" + vec.X.ToCodeString() + "," + vec.Y.ToCodeString() + "," + vec.Z.ToCodeString() + "," + vec.W.ToCodeString() + ");\r\n"); } else if (param.Type == NodeType.Float2) { MVector vec = new MVector(); if (param.Value is MVector) { if (!useMinMaxValue) { vec = (MVector)param.Value; } else { vec = param.VectorValue; } } builder.Append("vec2(" + vec.X.ToCodeString() + "," + vec.Y.ToCodeString() + ");\r\n"); } else if (param.Type == NodeType.Float3) { MVector vec = new MVector(); if (param.Value is MVector) { if (!useMinMaxValue) { vec = (MVector)param.Value; } else { vec = param.VectorValue; } } builder.Append("vec3(" + vec.X.ToCodeString() + "," + vec.Y.ToCodeString() + "," + vec.Z.ToCodeString() + ");\r\n"); } else if (param.Type == NodeType.Matrix) { Matrix4 m4 = param.Matrix4Value; //glsl matrices are column major order builder.Append("mat3(" + m4.Column0.X.ToCodeString() + ", " + m4.Column0.Y.ToCodeString() + ", " + m4.Column0.Z.ToCodeString() + ", " + m4.Column0.W.ToCodeString() + ", " + m4.Column1.X.ToCodeString() + ", " + m4.Column1.Y.ToCodeString() + ", " + m4.Column1.Z.ToCodeString() + ", " + m4.Column1.W.ToCodeString() + ", " + m4.Column2.X.ToCodeString() + ", " + m4.Column2.Y.ToCodeString() + ", " + m4.Column2.Z.ToCodeString() + ", " + m4.Column2.W.ToCodeString() + "," + m4.Column3.X.ToCodeString() + ", " + m4.Column3.Y.ToCodeString() + ", " + m4.Column3.Z.ToCodeString() + ", " + m4.Column3.W.ToCodeString() + ");\r\n"); } }
protected void BuildShaderFunctionValue(GraphParameterValue param, StringBuilder builder) { FunctionGraph fn = param.Value as FunctionGraph; fn.TryAndProcess(); object value = fn.Result; if (param.Type == NodeType.Bool) { try { builder.Append(Convert.ToBoolean(value).ToString().ToLower() + ";\r\n"); } catch (Exception e) { Log.Error(e); Log.Info("Defaulting to false for value of parameter " + param.Name); builder.Append("false;\r\n"); } } else if (param.Type == NodeType.Float) { try { builder.Append(Convert.ToSingle(value).ToCodeString() + ";\r\n"); } catch (Exception e) { Log.Error(e); Log.Info("Defaulting to 0 for value of parameter " + param.Name); builder.Append("0;\r\n"); } } else if (param.Type == NodeType.Float4 || param.Type == NodeType.Gray || param.Type == NodeType.Color) { MVector vec = new MVector(); if (value is MVector) { vec = (MVector)value; } builder.Append("vec4(" + vec.X.ToCodeString() + "," + vec.Y.ToCodeString() + "," + vec.Z.ToCodeString() + "," + vec.W.ToCodeString() + ");\r\n"); } else if (param.Type == NodeType.Float2) { MVector vec = new MVector(); if (value is MVector) { vec = (MVector)value; } builder.Append("vec2(" + vec.X.ToCodeString() + "," + vec.Y.ToCodeString() + ");\r\n"); } else if (param.Type == NodeType.Float3) { MVector vec = new MVector(); if (value is MVector) { vec = (MVector)value; } builder.Append("vec3(" + vec.X.ToCodeString() + "," + vec.Y.ToCodeString() + "," + vec.Z.ToCodeString() + ");\r\n"); } else if (param.Type == NodeType.Matrix && value is Matrix4) { Matrix4 m4 = (Matrix4)value; //glsl matrices are column major order builder.Append("mat3(" + m4.Column0.X.ToCodeString() + ", " + m4.Column0.Y.ToCodeString() + ", " + m4.Column0.Z.ToCodeString() + ", " + m4.Column0.W.ToCodeString() + ", " + m4.Column1.X.ToCodeString() + ", " + m4.Column1.Y.ToCodeString() + ", " + m4.Column1.Z.ToCodeString() + ", " + m4.Column1.W.ToCodeString() + ", " + m4.Column2.X.ToCodeString() + ", " + m4.Column2.Y.ToCodeString() + ", " + m4.Column2.Z.ToCodeString() + ", " + m4.Column2.W.ToCodeString() + "," + m4.Column3.X.ToCodeString() + ", " + m4.Column3.Y.ToCodeString() + ", " + m4.Column3.Z.ToCodeString() + ", " + m4.Column3.W.ToCodeString() + ");\r\n"); } }