private static void SerializeNode(BinaryWriter bw, NodeVisual node) { bw.Write(node.GUID); bw.Write(node.X); bw.Write(node.Y); bw.Write(node.Callable); bw.Write(node.ExecInit); bw.Write(node.Name); bw.Write(node.Order); if (node.CustomEditor == null) { bw.Write(""); bw.Write(""); } else { bw.Write(node.CustomEditor.GetType().Assembly.GetName().Name); bw.Write(node.CustomEditor.GetType().FullName); } bw.Write(node.Type.Name); var context = (node.GetNodeContext() as DynamicNodeContext).Serialize(); bw.Write(context.Length); bw.Write(context); bw.Write(8); //additional data size per node bw.Write(node.Int32Tag); bw.Write(node.NodeColor.ToArgb()); }
private NodeVisual DeserializeNode(BinaryReader br) { var nv = new NodeVisual(); nv.GUID = br.ReadString(); nv.X = br.ReadSingle(); nv.Y = br.ReadSingle(); nv.Callable = br.ReadBoolean(); nv.ExecInit = br.ReadBoolean(); nv.Name = br.ReadString(); nv.Order = br.ReadInt32(); var customEditorAssembly = br.ReadString(); var customEditor = br.ReadString(); nv.Type = Context.GetType().GetMethod(br.ReadString()); var attribute = nv.Type.GetCustomAttributes(typeof(NodeAttribute), false) .Cast <NodeAttribute>() .FirstOrDefault(); if (attribute != null) { nv.CustomWidth = attribute.Width; nv.CustomHeight = attribute.Height; } (nv.GetNodeContext() as DynamicNodeContext).Deserialize(br.ReadBytes(br.ReadInt32())); var additional = br.ReadInt32(); //read additional data if (additional >= 4) { nv.Int32Tag = br.ReadInt32(); if (additional >= 8) { nv.NodeColor = Color.FromArgb(br.ReadInt32()); } } if (additional > 8) { br.ReadBytes(additional - 8); } if (customEditor != "") { nv.CustomEditor = Activator.CreateInstance(AppDomain.CurrentDomain, customEditorAssembly, customEditor).Unwrap() as Control; Control ctrl = nv.CustomEditor; if (ctrl != null) { ctrl.Tag = nv; Controls.Add(ctrl); } nv.LayoutEditor(); } return(nv); }
/// <summary> /// Resolves given node, resolving it all dependencies recursively. /// </summary> /// <param name="node"></param> private void Resolve(NodeVisual node) { var icontext = (node.GetNodeContext() as DynamicNodeContext); foreach (var input in node.GetInputs()) { var connection = GetConnection(node.GUID + input.Name); //graph.Connections.FirstOrDefault(x => x.InputNode == node && x.InputSocketName == input.Name); if (connection != null) { Resolve(connection.OutputNode); if (!connection.OutputNode.Callable) { connection.OutputNode.Execute(Context); } var ocontext = (connection.OutputNode.GetNodeContext() as DynamicNodeContext); icontext[connection.InputSocketName] = ocontext[connection.OutputSocketName]; } } }
private void ExecuteResolvingInternal(NodeVisual node) { var icontext = (node.GetNodeContext() as DynamicNodeContext); foreach (var input in node.GetInputs()) { var connection = graph.Connections.FirstOrDefault(x => x.InputNode == node && x.InputSocketName == input.Name); if (connection != null) { Resolve(connection.OutputNode); connection.OutputNode.Execute(Context); ExecuteResolvingInternal(connection.OutputNode); var ocontext = (connection.OutputNode.GetNodeContext() as DynamicNodeContext); icontext[connection.InputSocketName] = ocontext[connection.OutputSocketName]; } } }