我已经花了大约一个小时来解决这个问题。
我有一个支持平移和缩放的视口,平移是通过存储X和Y轴的偏移量来处理的。缩放只是一个从0.2到14的浮点数。
我的问题是,当我缩放和平移时,需要能够在用户单击视口的位置放置物品,但鼠标坐标不正确。我一直没有能够弄清楚如何正确计算鼠标坐标。
这里有一张图片展示了我目前所拥有的:http://i.imgur.com/WQSXKJ2.png 正如您所看到的,鼠标原点始终位于视口组件的左上角。您可以在图像的左下角看到平移X和Y偏移以及缩放值。我还添加了一个关于鼠标坐标与视口左上角的示例。
现在,由于在该图像中它当前被缩放,因此我放置的对象将会被偏移。
感谢您的时间! 使用适用于我的情况的解决方案进行编辑:
这个计算出正确的“屏幕空间”鼠标位置,同时考虑了平移和缩放。我通过调整TaWs的答案得到了这个解决方案。感谢您的帮助! :)
我有一个支持平移和缩放的视口,平移是通过存储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的答案得到了这个解决方案。感谢您的帮助! :)