/// <inheritdoc/>
        public override void StartInteraction(DiagramInteractionEventArguments interaction)
        {
            var diagram       = interaction.Diagram;
            var mousePosition = interaction.MousePosition;

            RiftStartDiagramPoint = diagram.GetDiagramPointFromViewPoint(mousePosition);
            Mode             = RiftMode.None;
            X                = mousePosition.X;
            Y                = mousePosition.Y;
            RiftWidth        = 0;
            RiftHeight       = 0;
            _undoRiftCommand = new MoveNodesToCurrentPositionCommand(_nodesBeingRifted);
        }
 private void CheckIfRiftShouldStart(double riftDeltaX, double riftDeltaY)
 {
     if (Math.Abs(riftDeltaX) > MinimimDistanceToStartRift)
     {
         Mode = riftDeltaX > 0
             ? RiftMode.Right
             : RiftMode.Left;
     }
     else if (Math.Abs(riftDeltaY) > MinimimDistanceToStartRift)
     {
         Mode = riftDeltaY > 0
             ? RiftMode.Down
             : RiftMode.Up;
     }
 }
        /// <inheritdoc/>
        public override void StopInteraction(DiagramInteractionEventArguments interaction)
        {
            Mode            = RiftMode.None;
            _lastRiftDeltaX = 0;
            _lastRiftDeltaY = 0;
            if (_nodesBeingRifted == null)
            {
                return;
            }

            if (!interaction.IsCtrlKeyPressed)
            {
                foreach (var node in _nodesBeingRifted)
                {
                    node.X = interaction.Diagram.SnapToGrid(node.X);
                    node.Y = interaction.Diagram.SnapToGrid(node.Y);
                }
            }

            var doRiftCommand = new MoveNodesToCurrentPositionCommand(_nodesBeingRifted);

            _transactor.Transact(doRiftCommand, _undoRiftCommand, null);
            _nodesBeingRifted = null;
        }