/// <summary> /// Deletes a given output from a node properly. /// </summery> public void DeleteOutput(NodeOutput output) { Outputs.Remove(output); Outputs.TrimExcess(); output.Delete(); NodeGUI(); }
protected static void ReassignOutputType(ref NodeOutput output, Type newOutputType) { Node body = output.body; string name = output.name; IEnumerable <NodeInput> enumerable = from connection in output.connections where connection.typeData.Type.IsAssignableFrom(newOutputType) select connection; output.Delete(); NodeEditorCallbacks.IssueOnAddNodeKnob(NodeOutput.Create(body, name, newOutputType.AssemblyQualifiedName)); output = body.Outputs[body.Outputs.Count - 1]; foreach (NodeInput item in enumerable) { item.ApplyConnection(output); } }
/// <summary> /// Reassigns the type of the given output. This actually recreates it /// </summary> protected static void ReassignOutputType(ref NodeOutput output, Type newOutputType) { Node body = output.body; string outputName = output.name; // Store all valid connections that are not affected by the type change IEnumerable <NodeInput> validConnections = output.connections.Where((NodeInput connection) => connection.typeData.Type.IsAssignableFrom(newOutputType)); // Delete the output of the old type output.Delete(); // Create Output with new type NodeEditorCallbacks.IssueOnAddNodeKnob(NodeOutput.Create(body, outputName, newOutputType.AssemblyQualifiedName)); output = body.Outputs[body.Outputs.Count - 1]; // Restore the valid connections foreach (NodeInput input in validConnections) { input.ApplyConnection(output); } }