我有一个我想旋转和翻译的画布。我在 TransformGroup 中使用 RotateTransform 和 TranslateTransform。
我想对这些转换执行以下步骤:
- 以某个角度旋转画布。
- 将我的画布平移到一段距离
- 旋转画布。
步骤 1 和步骤 3 中的旋转中心相同。但是在执行第 2 步之后,我想将旋转中心更改为应该位于父级中心的新位置。但不知何故,这不起作用。
Canvas myCanvas = null; //Canvas to rotate and move
RotateTransform RotTransform = new RotateTransform();
TranslateTransform trans = new TranslateTransform();
TransformGroup tgroup = new TransformGroup();
double RotationAngle = 0;
double speed = .50;
//This center point should remain same on the screen during all the transformations
Point Center = new Point(200, 200);
Initialize()
{
tgroup.Children.Add(RotTransform);
tgroup.Children.Add(trans);
}
//This function moves the canvas in vertical direction by up or down arrow key
public void MoveCanvas(Key key)
{
double speed = 0;
if (key == Key.Up)
{
speed = 1;
}
else
{
speed = -1;
}
trans.Y += speed;
myCanvas.RenderTransform = tgroup;
}
//This is the function to rotate the canvas
public void RotateCanvas(Key key)
{
if (key == Key.Right)
{
RotationAngle += speed;
}
else if (key == Key.Left)
{
RotationAngle -= speed;
}
//Relocate the center point to the old center point i.e should be in the center of the container
Point inv = tgroup.Inverse.Transform(Center);
RotTransform.CenterX = inv.X;
RotTransform.CenterY = inv.Y;
RotTransform.Angle = RotationAngle;
myCanvas.RenderTransform = tgroup;
}
问题是中心点,我在每次旋转之前将其重置为旧点。但经过几次移动和旋转后,这个点就会移到容器或屏幕之外的某个地方。只是想帮助解决那个问题。
其中“C”是红色矩形的旋转中心,蓝色矩形是相同的红色矩形但已平移。现在我需要旋转蓝色矩形,但旋转中心应该是“C”。