/// <summary>
        /// Выполняет шаги в обратном порядке для перемещения к заданной точке из траектории.
        /// </summary>
        /// <param name="scriptPosition">Точка в траектории движения к которой необходимо вернуться</param>
        public void BackTo(LeverScriptPosition scriptPosition)
        {
            if (!leverPositions.Contains(scriptPosition))
            {
                throw new ArgumentException("Не найдена заданная точка");
            }

            var startIndex = Path.IndexOf(scriptPosition);
            var count      = Path.Count - startIndex;

            if (count == 0)
            {
                return;
            }

            var movePositions = new List <LeverPosition>();

            for (int i = startIndex; i < Path.Count; i++)
            {
                var pos = leverPositions[i];
                movePositions.Add(new LeverPosition(pos.LeverType, pos.From));
            }

            movePositions.Reverse();

            leverPositions.RemoveRange(startIndex, count);

            IsMoving = true;

            movement.MoveRobotByPath(movePositions, new Action(Continue));
        }
        private void View_InvokeMoveToEndScript(object sender, MovementScript e)
        {
            try
            {
                if (e == null)
                {
                    return;
                }

                if (messageService.ShowExclamation("Переместить манипулятор в конечную точку сценария  «" + e.Name + "»") == UserResponse.OK)
                {
                    var action = new Action(() => messageService.ShowMessage("Робот перемещен в конечную точку сценария «" + e.Name + "»"));

                    movement.MoveRobotByPath(e.End, action);
                }
            }
            catch (Exception ex)
            {
                messageService.ShowError(ex.Message);
            }
        }