我目前有代码,当用户单击与以下区域相对应的多个锚点时,它会根据鼠标移动调整矩形的大小:Left、Top、Right、Bottom、TopLeft、TopRight、BottomLeft、BottomRight。
因此用户可以单击并拖动顶部锚点,它将根据鼠标的位置调整矩形的顶部坐标。所有其他锚点都一样。
事实上,我想通过根据动作捕捉矩形的适当边来强制执行固定比例(例如 2:3 或 5:7)。我已经为左、上、右和下锚做了这个,因为它很容易,如果我调整宽度,我只需要根据比例自动调整高度,反之亦然。
我遇到的困难是当用户拖动诸如右下角或左上角锚点之类的角时。我需要弄清楚如何选择拍摄哪一面。我有鼠标坐标和矩形的左、上、右和下。
这是我尝试过的代码:
case Anchor.BottomRight:
float maxRight = CursorPosition.X;
float maxBottom = CursorPosition.Y;
float newRight = Bounds.Left + (Bounds.Width * widthRatio);
float newBottom = Bounds.Top + (Bounds.Height * heightRatio);
if (newRight < maxRight)
{
Width = Height * widthRatio;
}
else
{
Height = Width * heightRatio;
}
break;
在 2:3 的固定比率示例中,widthRatio 为 0.666,heightRatio 为 1.5。
这段代码有一半的时间可以工作,但当然它基本上是 50/50 的工作机会。我必须确定一个合适的条件来捕捉宽度或高度。