2015-07-21 153 views
1

我创建了简单的窗体,现在我想在相对坐标中绘制单个对象(矩形,圆形,线..)。 这里的主要问题是在窗体中间创建二维笛卡尔坐标系。是否有可能以及如何做?创建笛卡尔坐标系c#窗体窗体绘图

主要问题是如何有效地将绝对坐标转换为相对?如何创建我自己的系统,所以我得到的结果数字(负面,积极取决于象限),而不是像素?

Idea

当前我制作了MouseMove事件以显示Cursor.Position.X,Cursor.Position.Y的鼠标当前位置,并将其显示在标签中。显示的坐标是像素,如何改变?我已经阅读了一些关于使用PointToClient方法进行转换的内容,但我不太了解它。

我被捆绑到windows窗体becouse我已经在win窗体中创建了一个程序,现在我只是想将此功能添加到它。

感谢

+0

您是否尝试过使用变量来抵消当前位置? I.E. var offsetX = control.Width/2; (请记住,你需要确定如何处理奇数大小) – Tebc

+0

,这对我没有任何帮助......我设法创建了面板大小1; 1并将它放在中间,然后我使用了' Point point = panel2.PointToClient(Cursor.Position); label1.Text =“当前坐标:”+ point.ToString();'这是新鲜的,并不是我的问题的清晰解决方案,我想找到更好的解决方案 – dodoria1992

+0

[绘图控制时翻转坐标可能重复]( http://stackoverflow.com/questions/1485745/flip-coordinates-when-drawing-to-control) – TaW

回答

0

你最有可能寻找的是Graphics.TranslateTransformGraphics.ScaleTransform

private void Transform(PaintEventArgs e) 
{ 
    e.Graphics.ScaleTransform(width, height); 
    e.Graphics.TranslateTransform(xOffset, yOffset); 
} 

您还需要确保,无论绘图方法你使用有两种PointF结构或Single秒的过载。

当然,你也可以在你的最后处理所有这些。通过表单的宽度和高度缩放输入/输出坐标,然后翻译一半即可获得相同的结果。

编辑 - 为了增加一些清晰度,Windows始终期望您的坐标以像素形式显示。您可以使用上述转换以不同规模完成您的工作,然后转换为Windows预期的格式。

设置翻译应该很简单。如果你想要表格的中间部分,你只需要翻译一半宽度和一半高度。如何选择缩放坐标将取决于您需要使用的范围(即-1.0到1.0,-0.5到0.5等)。