/// <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 Movement_OnMovingStart(object sender, StepLever e) { if (!IsMoving) { scriptPosition = new LeverScriptPosition(e.Lever) { From = movement.GetLeverPosition(e.Lever) } } ; } }
private void Movement_OnMovingEnd(object sender, StepLever e) { if (IsMoving) { return; } if (scriptPosition.LeverType != e.Lever) { throw new Exception("Ошибка создания сценария"); } scriptPosition.To = movement.GetLeverPosition(e.Lever); leverPositions.Add(scriptPosition); OnPathChanged(this, EventArgs.Empty); scriptPosition = null; }
/// <summary> /// Выполняет шаги в прямом порядке для перемещения к заданной точке из траектории. /// </summary> /// <param name="scriptPosition">Точка в траектории движения к которой необходимо переместиться</param> public void MoveTo(LeverScriptPosition scriptPosition) { var currentPosition = movement.GetCurrentLeversPosition().OrderBy(i => i.LeverType); if (!StartPoint.OrderBy(i => i.LeverType).SequenceEqual(currentPosition)) { throw new Exception("Необходимо переместить робот в начальное положение"); } var startIndex = Path.IndexOf(scriptPosition); var movePositions = new List <LeverPosition>(); for (int i = 0; i < startIndex + 1; i++) { var pos = leverPositions[i]; movePositions.Add(new LeverPosition(pos.LeverType, pos.To)); } IsMoving = true; movement.MoveRobotByPath(movePositions, new Action(Continue)); }
private IEnumerable <LeverPosition> GetLeverPositions(LeverScriptPosition leverScriptPosition) { yield return(new LeverPosition(leverScriptPosition.LeverType, leverScriptPosition.From)); yield return(new LeverPosition(leverScriptPosition.LeverType, leverScriptPosition.To)); }