【发布时间】:2014-09-05 02:58:50
【问题描述】:
我已经在这个问题上纠结了大约一个小时。
我有一个支持平移和缩放的视口,平移是通过存储 X 和 Y 轴的偏移量来处理的。缩放只是一个从 0.2 到 14 的浮点数。
我的问题是我需要能够将东西放置在用户在视口中单击的位置,但是当我缩放和平移时,鼠标坐标不正确。我一直无法弄清楚如何正确计算鼠标坐标。
这是我目前所拥有的图片:http://i.imgur.com/WQSXKJ2.png
如您所见,鼠标原点始终位于视口组件的左上角。您可以在图像的左下角看到平移 X 和 Y 偏移以及缩放值。我还添加了一个相对于视口左上角的鼠标坐标示例。
现在由于在该图像中它当前放大了我放置的对象将被偏移。
感谢您的宝贵时间!
使用适合我的情况的解决方案进行编辑:
void Viewport_MouseClick(object sender, MouseEventArgs e){
Point mousePosition = new Point((int)((e.X - Pan.X) / Zoom),
(int)((e.Y - Pan.Y) / Zoom));
}
这会在考虑平移和缩放的同时计算正确的“屏幕空间”鼠标位置。 我通过玩 TaWs 的答案得到了这个解决方案。感谢您的帮助! :)
【问题讨论】:
-
您使用的是哪个平台? WPF,Winform..??您正在使用什么控件以及如何实现缩放?
-
这是一个winform,我的控件派生自“UserControl”类。缩放只是一个浮点数,它传递给“OnPaint”方法中的“ScaleTransform”方法。
标签: c# zooming mouse coordinates pan