private void Thumb_DragDelta(object sender, DragDeltaEventArgs e) { if (IsCreatingConnection) { return; } Thumb thumb = (Thumb)sender; var node = (VisualGraphComponentViewModel)thumb.DataContext; node.X += e.HorizontalChange; node.Y += e.VerticalChange; VisualNodeViewModel visualNode = node as VisualNodeViewModel; if (visualNode != null) { foreach (var input in visualNode.Inputs) { input.Pin.ParentMoved(); } foreach (var output in visualNode.Outputs) { output.Pin.ParentMoved(); } foreach (var executionInput in visualNode.ExecutionInputs) { executionInput.Pin.ParentMoved(); } foreach (var executionOutput in visualNode.ExecutionOutputs) { executionOutput.Pin.ParentMoved(); } return; } VisualConstantNodeViewModel constantNode = node as VisualConstantNodeViewModel; if (constantNode != null) { constantNode.OutputPin.Pin.ParentMoved(); return; } }
private void Editor_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { // If we are creating a connection... if (IsCreatingConnection) { ConnectionBuilderViewModel connectionBuilder = (ConnectionBuilderViewModel)NewConnectionLine.DataContext; NodePinViewModel connectionRootPin = (NodePinViewModel)connectionBuilder.OutputPin.DataContext; // Check if we are clicking from an input pin // If we are, try to automatically place a constant node connecting to the input pin if (connectionRootPin.IsOutputPin == false && connectionRootPin.IsExecutionPin == false) { GraphEditorViewModel viewModel = (GraphEditorViewModel)this.DataContext; VisualConstantNodeViewModel autoConstantNode = new VisualConstantNodeViewModel(connectionRootPin.DataType) { X = viewModel.MousePoint.X, Y = viewModel.MousePoint.Y }; viewModel.VisualNodes.Add(autoConstantNode); // Generates the view for the NodePin in the constant node before we add it Dispatcher.Invoke(new Action(() => { }), DispatcherPriority.ContextIdle, null); viewModel.Connections.Add(new ConnectionViewModel(autoConstantNode.OutputPin.Pin, connectionRootPin.Pin)); } IsCreatingConnection = false; return; } // If we aren't creating a connection just deselect any nodes foreach (VisualGraphComponentViewModel node in ((GraphEditorViewModel)DataContext).VisualNodes) { node.IsSelected = false; } }