【问题标题】:C# Windows Forms - Graphics - Plot X,Y Points, with +YC# Windows 窗体 - 图形 - 用 +Y 绘制 X、Y 点
【发布时间】:2017-06-16 19:34:12
【问题描述】:

这个问题已经部分回答(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. 命中测试 - 我真的想在这里进行命中测试,而不是创建图表,所以我认为我不能使用 3rd 方图形库。
  2. 点 - 我将使用 PointF 点,我不想“翻转”或转换单个点,我宁愿在表单加载时重新配置表单
  3. Windows 窗体设置 - 我想要一个使用 ScaleTransform 之类的东西重新配置窗体或容器的解决方案,而不是如上所述的翻转点
  4. Windows 窗体大小 - 我不需要知道窗体的像素宽度,在窗体启动时,应该处理这个
  5. Windows 窗体调整大小 - 调整大小对我来说并不重要,它可以在应用启动后保持静态

谢谢你的帮助, 蒂姆

【问题讨论】:

  • 考虑使用现有的图形库。除非您有非常独特的需求,否则您最好只获取一份 ZedGraph 的副本,而不是自己尝试这样做。
  • e.Graphics.TranslateTransform(this.ClientSize.Width / 2, this.ClientSize.Height / 2); 然后画出你的观点。点 0, 0 会在中间。
  • 请注意,链接帖子中接受的答案实际上并未显示使用 TranslateTransform,尽管这是 key

标签: c# .net forms winforms graphics


【解决方案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());
  }      
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-07
    • 2016-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多