C#Windows窗体 - 图形 - 绘制X,Y点,+ Y

时间:2017-06-16 19:34:13

标签: c# .net forms winforms graphics

这个问题已得到部分回答(Make +y UP, Move Origin C# System.Drawing.Graphics),如果我还没有能够在SO上找到一个简单的解决方案,我道歉。

我需要绘制来自标准图形的X,Y图形点,其中原点(0,0)位于表格的中心,+ Y坐标沿垂直方向移动。请参见标准X,Y图表的附图。

如何重新配置​​表单,以使原点(0,0)位于表格的中心而不是左上角,+ Y坐标以垂直方式绘制?注意:我真的尝试进行多边形命中测试,但是在标准的X,Y图表中,原点位于中心,而不是像.Net Windows Forms那样的左上角。这就是我的意思我想:

  1. 命中测试 - 我真的想在这里进行点击测试,而不是创建图表,所以我不认为我可以使用第三方图形库。
  2. 积分 - 我将使用PointF积分,我不想要"翻转"或者转换各个点,我宁愿在表单加载上重新配置表单
  3. Windows窗体设置 - 我想要一个解决方案,使用ScaleTransform重新配置窗体或容器,而不是像上面提到的那样翻转Points
  4. Windows窗体大小 - 我不需要知道窗体的像素宽度,在窗体启动时,应该处理
  5. Windows窗体调整大小 - 调整大小对我来说并不重要,它可以在应用启动后保持静态
  6. 谢谢你的帮助, 蒂姆 enter image description here

1 个答案:

答案 0 :(得分:1)

要绘制图表,请使用TranslateTransform:

protected override void OnPaint(PaintEventArgs e) {
  e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
  e.Graphics.TranslateTransform(this.ClientSize.Width / 2, this.ClientSize.Height / 2);
  e.Graphics.FillEllipse(Brushes.Red, new Rectangle(-3, -3, 6, 6));
}

对于命中测试,您还可以使用TranslateTransform和TransformPoints调用:

protected override void OnMouseDown(MouseEventArgs e) {
  using (Graphics g = this.CreateGraphics()) {
    g.TranslateTransform(this.ClientSize.Width / 2, this.ClientSize.Height / 2);
    Point[] points = new Point[] { e.Location };
    g.TransformPoints(CoordinateSpace.World, CoordinateSpace.Device, points);
    MessageBox.Show(points[0].ToString());
  }      
}
相关问题