2

我有一个我想旋转和翻译的画布。我在 TransformGroup 中使用 RotateTransform 和 TranslateTransform。

我想对这些转换执行以下步骤:

  1. 以某个角度旋转画布。
  2. 将我的画布平移到一段距离
  3. 旋转画布。

步骤 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”。

4

0 回答 0