当前位置: 首页 > 知识库问答 >
问题:

视口内图形相对于鼠标坐标的实际坐标

夔波
2023-03-14

正如我在标题中指出的,我已经开始开发一个简单的应用程序,它包含在主框架窗口中,一个双缓冲面板。在这个面板中可以绘制一些图形,让我们把这个面板看作是一个简单的视窗,用来显示在里面绘制的元素。

这里添加了两个功能,平移和缩放可以缩放变换,并使用MouseDown和Move事件上更新的增量在paint事件内平移变换,OnMouseWheel用于更新缩放变换。

当缩放大于1(比例100%)时,尝试添加支持在视口内创建节点(图形元素)到精确位置的功能后,真正的问题出现了。

情景1-

场景 2 -

测试场景-

我真的很感激任何种类的输入,甚至是与改变OXY图方法有关的想法(因为翻译功能使用相对坐标)。

共有1个答案

胡飞舟
2023-03-14

也许这将有所帮助:

PointF ScaleUnscale(PointF p, float offX, float offY, float sX, float sY, bool scale)
{
    PointF pf = p;

    if (scale)
    {
        pf = new PointF( ( p.X  - offX )/ sX, (p.Y - offY)/ sY) ;
    }
    else
    {
        pf = new PointF( p.X * sX + offX, p.Y * sY + offY);
    }
    return pf;
}

这会将鼠标点缩放到画布点或向后缩放:

cPoints.Add(ScaleUnscale(e.Location, .., true));

使用已平移和缩放的图形对象进行测试:

g.TranslateTransform(offX, offY);
g.ScaleTransform(scaleX, scaleY);
 类似资料:
  • 我正在尝试使用Surfaceview和canvas drawing在Android中创建自定义组件。这些组件可以通过触摸来调整大小和旋转。考虑创建一个图像视图,它的上、右、下和左边缘可通过触摸和拖动所需的边缘来缩放。我使用< code>RectF来保持组件的边界,对于旋转,我使用< code>canvas.rotate(angle,bounds.centerX()、bounds.centerY()

  • 问题内容: 我在Android应用程序中向用户显示图像。 我希望能够告诉他们“触摸”图像的位置。 我可以通过实现OnTouchListener轻松获取屏幕坐标 但是,这些是绝对坐标。我真正需要的是一个将其转换为相对于View的坐标的函数。 我做了一些挖掘工作,但是除了尝试自己实现ScreenToClient方法之外,我似乎什么也没做。 有谁知道一个好的解决方案,还是我只需要自己动手? 似乎可以使用

  • 我对WPF中相对坐标的工作方式有些困惑,尤其是在使用DrawingBrush的场景中。 假设我想画一个正方形区域的背景,它的大小是灵活的。我想用一种特殊的“形状”来绘制背景,比如说在侧面画一种“T”,垂直笔划穿过区域的中间。使用相对坐标(区域的大小是灵活的),我得出了以下XAML: 但我得到的结果是这样的: 垂直笔划是否应该穿过中间(X坐标为0.5)?还有,如何在相对模式下将笔的厚度设置为1或2像

  • 问题内容: JFreeChart中是否有一种方法可以从ChartMouseEvent中确定鼠标悬停在绘图空间中的x,y坐标?我尝试使用域十字线值,但这似乎不准确并且滞后于实际的鼠标事件。 谢谢, 杰夫 问题答案: 鼠标坐标相对于ChartPanel,因此您需要对其进行转换:

  • 我正在尝试将鼠标点击坐标转换为画布坐标。画布可以动态缩放。我实现了缩放功能,缩放转换整个画布。画布本身有一个图像作为窗口的背景。当用户使用鼠标滚轮时,背景会放大和缩小。如何转换鼠标点击坐标以反映图像上的缩放位置? 缩放地图图像代码: 将图标添加到地图图像: 我基本上是想用鼠标左键在地图上添加一个新的图标图像。但是,如果在我尝试添加图标时放大了地图,则图像的位置与单击的地图位置不相关。它会转到离鼠标

  • 本文向大家介绍使用js获取鼠标坐标相关面试题,主要包含被问及使用js获取鼠标坐标时的应答技巧和注意事项,需要的朋友参考一下