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;
}
}
}
我看到了,这就是我所做的,在示例中保留了1的比例,所以双方都是平等的,但可以是任何其他值,因为我将选区移动到该区域时不起作用。 –
那么,实际上毕达哥拉斯的提示是非常有帮助:) –
很高兴我能帮忙! – sircodesalot