Ejemplo n.º 1
0
        /// <inheritdoc/>
        public override void ProcessInteraction(DiagramInteractionEventArguments interaction)
        {
            var selectedNodes = interaction.Diagram.Nodes.Where(n => n.IsSelected).ToList();

            selectedNodes.ForEach(n => n.IsSelected = false);
            if (interaction.Key == Key.C)
            {
                _copiedNodes = selectedNodes.Select(s => s.Model.Copy()).OfType <NodeModel>().ToList();
            }
            else
            {
                if (_copiedNodes == null)
                {
                    return;
                }
                var firstCopiedNodeX       = _copiedNodes.FirstOrDefault()?.X ?? 0;
                var firstCopiedNodeY       = _copiedNodes.FirstOrDefault()?.Y ?? 0;
                var nodesToInsertToDiagram = new List <Node>();
                foreach (var copiedNode in _copiedNodes)
                {
                    var node = _nodeProvider.CreateNodeFromModel((NodeModel)copiedNode.Copy());
                    node.IsSelected = true;
                    var diagramMousePoint = interaction.Diagram.GetDiagramPointFromViewPoint(interaction.MousePosition);
                    node.X         -= firstCopiedNodeX - diagramMousePoint.X;
                    node.Y         -= firstCopiedNodeY - diagramMousePoint.Y;
                    node.IsSelected = true;
                    nodesToInsertToDiagram.Add(node);
                    interaction.Diagram.AddNode(node);
                }
                _transactor.Transact(new UndoCommand(new MapCommand(new UnwireAndDeleteNodeCommand(interaction.Diagram))), nodesToInsertToDiagram);
            }
        }
Ejemplo n.º 2
0
 /// <summary>
 /// Creates a new instance of <see cref="Diagram"/>.
 /// </summary>
 /// <param name="diagram">The model.</param>
 /// <param name="nodeProvider">A node provider to create nodes.</param>
 /// <param name="diagramInteractors">A list of interactors to enable on this diagram.</param>
 public Diagram(
     DiagramModel diagram,
     INodeProvider nodeProvider,
     IEnumerable <DiagramInteractor> diagramInteractors)
 {
     DiagramInteractionManager = new DiagramInteractionManager(() => diagramInteractors);
     ExecuteWhenViewLoaded(() => Keyboard.Focus(View));
     DiagramModel = diagram;
     DiagramModel.PropertyChanged += DiagramOnPropertyChanged;
     if (diagram.Nodes != null)
     {
         foreach (var nodeModel in diagram.Nodes)
         {
             var viewModel = nodeProvider.CreateNodeFromModel(nodeModel);
             AddNodeViewModel(viewModel);
         }
     }
 }