我目前的代码可以在用户单击对应于以下区域的多个锚点时根据鼠标移动调整矩形大小:左、上、右、下、左上、右上、左下、右下。
因此,用户可以单击并拖动顶部锚点,它将根据鼠标所在的位置调整矩形的顶部坐标。对于所有其他锚点也是如此。
之后,我想通过根据操作捕捉矩形的适当边来强制执行固定比例(例如 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 的工作机会。我必须确定一个适当的条件来捕捉宽度或高度。
我想到了。
if (Height * widthRatio <= Width)
Width = Height * widthRatio;
else if (Width * heightRatio <= Height)
Height = Width * heightRatio;
这将以固定比例模拟 Photoshop 中的功能。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)