1

我正在尝试实现一个选择工具,例如 gimp 或 photoshop 等流行图形编辑器中的选择工具,如果您在选择时按 Shift,它会保持一个比例。下面的代码是它的主要部分,为了简单起见,我把它保持为一个正方形。代码是计算鼠标位置,移动 Block 类的 X,Y 位置,然后调整它的宽度和高度。如果按下 Shift,它会形成一个正方形。如果我从右下或左下方向移动,它几乎可以正常工作,但在其他情况下,它会改变整个块的位置。任何解决方案?

 private void ItemsControl_MouseMove(object sender, System.Windows.Input.MouseEventArgs     e)
{
    if (((ItemsControl)sender).IsMouseCaptured)
    {
    Block = new Block();

    Point mpi = GuidesSnap(e.GetPosition((ItemsControl)sender));

    double dx = mpi.X - mp.X;
    double dy = mpi.Y - mp.Y;

    switch (draggingState)
    {
        case 0:
        if (Math.Sqrt(dx * dx + dy * dy) > 2)
        draggingState = 1;
        break;
        case 1:
        block.X = (int)Math.Round(mp.X);
        block.Y = (int)Math.Round(mp.Y);
        block.Width = 3;
        block.Height = 3;
        draggingState = 2;
        break;
        case 2:
        if (dx < 0)
        {
            block.X = (int)Math.Round(mp.X + dx);
        }
        if (dy < 0)
        {
            block.Y = (int)Math.Round(mp.Y + dy);
        }
        block.Width = (int)Math.Abs(Math.Round(dx));
        block.Height = Keyboard.Modifiers == ModifierKeys.Shift ? block.Width : (int)Math.Abs(Math.Round(dy));
        break;
    }
    }
}
4

1 回答 1

0

如果您想保持某物的比例,那么您只需根据另一个坐标计算一个坐标。因此,随着 X 的变化,您将 Y 设置为等于 (AspectRatio * X)。或者,您可以使用勾股定理来计算距起点的距离,然后使用它来计算 X 和 Y - 但中心点是相同的:要保持纵横比,您需要至少一个基于值的变量另一个。

于 2013-02-05T19:54:55.200 回答