/// <summary> /// Gets what direction to use in the next spinn /// </summary> /// <param name="left">Newly set left margin</param> /// <param name="previousDirection">What was the previous direction</param> /// <returns>FigureMoveDirection</returns> private FigureMoveDirection GetDirection(double left, FigureMoveDirection previousDirection) { if ((previousDirection == FigureMoveDirection.Left) && (left < (spinningObjectCanvas.Dispatcher.Invoke(() => spinningObjectCanvas.ActualWidth)))) { return(FigureMoveDirection.Left); } else if (left >= 0) { return(FigureMoveDirection.Right); } return(FigureMoveDirection.Left); }
/// <summary> /// Sets the position of the figure /// </summary> /// <param name="drawMode">Affects how the margin is applied</param> private void SetFigurePosition(FigureDrawMode drawMode) { Thickness marginOfShape = polygonOfClass.Dispatcher.Invoke(() => polygonOfClass.Margin); if (drawMode == FigureDrawMode.StartUp) { marginOfShape.Left = 20; } else { if (direction == FigureMoveDirection.Left) { marginOfShape.Left += 20; } else { marginOfShape.Left -= 20; } direction = GetDirection(marginOfShape.Left, direction == FigureMoveDirection.Left ? FigureMoveDirection.Left : direction); } polygonOfClass.Dispatcher.Invoke(() => polygonOfClass.Margin = marginOfShape); spinningObjectCanvas.Dispatcher.Invoke(() => spinningObjectCanvas.Children.Remove(polygonOfClass)); spinningObjectCanvas.Dispatcher.Invoke(() => spinningObjectCanvas.Children.Add(polygonOfClass)); }