I have an UserControl that needs to rotate and translate according to external infomration that I receive (X,Y and Angle in degrees) inside a canvas where I dinamically add usercontrols.
I use doubleanimations and a trasnformgroup to do it.
The problem I am experiencing is that when the objects needs to update its position from an angle > 0 to and angle < 360, for example rotating from 5° to 355°, the animation prefers the counterclockwise rotation instead to the clockwise, which I need.
this is a part of the code, where body is my UserControl added to the canvas:
var bodymove = new TranslateTransform();
var bodygrp = new TransformGroup();
bodygrp.Children.Add(bodyrot);
bodygrp.Children.Add(bodymove);
body.RenderTransform = bodygrp;
private void RotateBody(AgvStatus status, Duration duration, double newx, double newy)
{
// correct bouncing around zero degrees
if (-lastangle[status.Agv - 1] >= 0 && status.Angle < 360 && status.Angle > 355)
{
status.Angle = -lastangle[status.Agv - 1];
}
// Set and begin AGV bodyrot
DoubleAnimation animrot = new DoubleAnimation(lastangle[status.Agv - 1], -status.Angle, duration);
bodyrot.BeginAnimation(RotateTransform.AngleProperty, animrot);
lastangle[status.Agv - 1] = -status.Angle;
}
I managed to correct if I receive angles that bounces around zero, so the control stops rotating back and forward, for example if I receve 0 then 360 then 0 then 360 etc...
What I can't correct is if the object starts from a position greater than zero and goes to a posisition less that 360 (it is rotating clockwise), in the program it rotates counterclockwise.
I have no storyboard for this animation.