Exemplo n.º 1
0
        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;
            }
        }
Exemplo n.º 2
0
        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;
            }
        }