private void ResolveScriptNodeConnections(IEnumerable <CNode> nodes, Dictionary <CNode, CScriptNodeViewmodel> nodeToViewModel) { foreach (CNode graphNode in nodes) { CScriptNodeViewmodel sourceViewModel = nodeToViewModel[graphNode]; for (int i = 0; i < graphNode.OutExecutionPins.Count; i++) { CExecutionPin inExecutionPin = graphNode.OutExecutionPins[i]; if (inExecutionPin.TargetNode == null) { continue; } CScriptNodeViewmodel targetViewModel = nodeToViewModel[inExecutionPin.TargetNode]; if (targetViewModel.InExecutionPins.Count > 0) { CNodeConnectionViewModel newConnection = new CNodeConnectionViewModel(sourceViewModel.OutExecutionPins[i], targetViewModel.InExecutionPins[inExecutionPin.TargetPinIndex], this); newConnection.Connect(); } else { inExecutionPin.TargetNode = null; LogUtility.Log("[ScriptLoadError] node {0} tried to connect to {1} but the target does not have an in execution pin", sourceViewModel.Name, targetViewModel.Name); } } for (int i = 0; i < graphNode.InputPins.Count; i++) { CInputPin inputPin = graphNode.InputPins[i]; if (inputPin.SourceNode == null) { continue; } CScriptNodeViewmodel inputSourceVm = nodeToViewModel[inputPin.SourceNode]; if (inputSourceVm.OutputPins.Count > inputPin.SourceParameterIndex) { COutputPinViewModel sourcePinVM = inputSourceVm.OutputPins[inputPin.SourceParameterIndex]; if (inputPin.Type.IsAssignableFrom(sourcePinVM.ValueType)) { CNodeConnectionViewModel newConnection = new CNodeConnectionViewModel(sourcePinVM, sourceViewModel.InputPins[i], this); newConnection.Connect(); } else { inputPin.SourceNode = null; inputPin.SourceParameterIndex = -1; LogUtility.Log("[ScriptLoadWarning] Node {0} tried to connect to {1} at output pin index {2} but the pin types are not compatible, connection removed", sourceViewModel.Name, inputSourceVm.Name, inputPin.SourceParameterIndex); } } else { inputPin.SourceNode = null; inputPin.SourceParameterIndex = -1; LogUtility.Log("[ScriptLoadError] node {0} tried to connect to {1} at output pin index {2} but there are not enough pins", sourceViewModel.Name, inputSourceVm.Name, inputPin.SourceParameterIndex); } } } }
public virtual void RemoveConnection(CNodeConnectionViewModel removedConnection, CPinViewModel otherPin) { Connections.Remove(removedConnection); if (Connections.Count == 0) { RaisePropertyChanged("PinInnerColor"); RaisePropertyChanged("IsConnected"); } }
public virtual void AddConnection(CNodeConnectionViewModel newConnection, CPinViewModel otherPin) { int prevConnectionCount = Connections.Count; Connections.Add(newConnection); if (prevConnectionCount == 0) { RaisePropertyChanged("PinInnerColor"); RaisePropertyChanged("IsConnected"); } }
public override void RemoveConnection(CNodeConnectionViewModel removedConnection, CPinViewModel otherPin) { m_pin.SourceNode = null; m_pin.SourceParameterIndex = -1; if (otherPin is COutputPinViewModel outputVm) { CNodeChangeContext context = new CNodeChangeContext(); m_nodeViewmodel.ScriptNode.OnInputConnectionChanged(context, m_pin, null); foreach (var action in context.Actions) { m_nodeViewmodel.ExecuteNodeAction(action); } } base.RemoveConnection(removedConnection, otherPin); }
private void ConnectPins(CPinViewModel source, CPinViewModel target) { CNodeConnectionViewModel newConnection = new CNodeConnectionViewModel(source, target, this); void Redo() { newConnection.Connect(); } void Undo() { newConnection.Disconnect(); } Redo(); UndoRedoUtility.Record(new CRelayUndoItem(Undo, Redo)); }
public override void AddConnection(CNodeConnectionViewModel newConnection, CPinViewModel otherPin) { if (!IsIn) { if (otherPin is CExecutionPinViewModel otherExecution && otherExecution.IsIn) { // Out Execution pins can only be connected to a single node if (Connections.Count > 0) { if (Connections.Count > 1) { List <CNodeConnectionViewModel> oldConnections = new List <CNodeConnectionViewModel>(); foreach (CNodeConnectionViewModel connection in Connections) { oldConnections.Add(connection); } foreach (CNodeConnectionViewModel connection in oldConnections) { connection.Disconnect(); } } Connections[0].Disconnect(); } m_pin.TargetNode = otherPin.NodeViewModel.ScriptNode; m_pin.TargetPin = otherPin.NodeViewModel.ScriptNode.InExecutionPins[otherPin.PinIndex]; m_pin.TargetPinIndex = otherPin.PinIndex; base.AddConnection(newConnection, otherPin); } } else { base.AddConnection(newConnection, otherPin); } }
public override void AddConnection(CNodeConnectionViewModel newConnection, CPinViewModel otherPin) { if (otherPin is COutputPinViewModel outputPin) { // Input pin can only be connected to a single node if (Connections.Count > 0) { if (Connections.Count > 1) { List <CNodeConnectionViewModel> oldConnections = new List <CNodeConnectionViewModel>(); foreach (CNodeConnectionViewModel connection in Connections) { oldConnections.Add(connection); } foreach (CNodeConnectionViewModel connection in oldConnections) { connection.Disconnect(); } } Connections[0].Disconnect(); } m_pin.SourceNode = outputPin.NodeViewModel.ScriptNode; m_pin.SourceParameterIndex = outputPin.PinIndex; CNodeChangeContext context = new CNodeChangeContext(); m_nodeViewmodel.ScriptNode.OnInputConnectionChanged(context, m_pin, outputPin.Pin); foreach (var action in context.Actions) { m_nodeViewmodel.ExecuteNodeAction(action); } base.AddConnection(newConnection, otherPin); } }
public override void RemoveConnection(CNodeConnectionViewModel removedConnection, CPinViewModel otherPin) { m_pin.TargetNode = null; base.RemoveConnection(removedConnection, otherPin); }
public void RemoveConnection(CNodeConnectionViewModel connection) { Connections.Remove(connection); }