【问题标题】:How to keep ratio of a rectangular tool如何保持矩形工具的比例
【发布时间】:2013-02-06 03:54:55
【问题描述】:

我正在尝试实现一个选择工具,例如 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;
    }
    }
}

【问题讨论】:

    标签: c# wpf geometry


    【解决方案1】:

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

    【讨论】:

    • 我明白了,这就是我所做的,在示例中保持了 1 的比率,所以两边是相等的,但可以是任何其他值,当我移动选择时它不起作用该地区。
    • 嗯,实际上毕达哥拉斯的提示很有帮助:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-25
    • 2020-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-25
    相关资源
    最近更新 更多