缩放后,“ Oxyplot WPF” LineSeries消失

时间:2019-01-10 19:00:05

标签: oxyplot

我使用'Oxyplot Wpf'绘制图,

  1. X轴是“ TimeSpanAxis”,y轴是“ LinearAxis”。
  2. X轴从0开始到无限远。
  3. Y轴也从0开始到1000结束。
  4. 在y轴上禁用缩放,所有y值始终可见。
  5. 在x轴上启用了缩放。
  6. 使用“ LineSeries”。
  7. 图形的值在x轴上很长。

问题是;如果缩放很多,在绘制“ LineSeries”后,lineseries正在消失。即使不缩放,但“ LineSeries”在x轴上的长度非常长,在某些点后也会消失。

当我调查此问题时,我发现了由WPF渲染引起的问题。如果绘制很长的完全水平或完全垂直的线,则在某个点后它将变得不可见。但是它应该完全水平或垂直,否则就可以保持可见状态。此声明对Oxyplot WPF图也有效。

我在Internet上进行了一些研究,发现这是一个已知问题。

First Link

Second Link

Third Link

'Oxyplot Wpf'是开放源代码库,因此我尝试自己解决此问题,但我做不到。当我研究源代码时,我看到“ Oxyplot”绘制了整条线,即使该部分线在屏幕上也不可见。因此,如果我以某种方式使这些较长的水平线部分地绘制(用户不应该注意到这一点),或者以某种方式使这些线不完全是水平的(用户也不应注意到这一点),则线不会变得不可见。但是我什么也做不了。

我发现一篇帖子提到了同样的问题,并且有一段代码可以解决该问题。

代码在Oxyplot Wpf库中更改了类“ CanvasRenderContext”的一小部分。

更改此行:

var p = aliased ? this.ToPixelAlignedPoint(points[i]) : this.ToPoint(points[i]);

对此:

var p = aliased ? ToPoint(points[i]) : ToPixelBoundaryPoint(points[i]);

并添加此功能:

 private Point ToPixelBoundaryPoint(ScreenPoint pt)
{
   double x; double y;
   if (pt.X >= 150000.0)
   {
    x = 150000.0;
   }

   else if (pt.X <= 0)
   {
    x = pt.X/10000;
   }

   else if (pt.X <= -1000000)
   {
    x = 150000.0;
   }
   else
    x = pt.X;
   if (pt.Y >= 150000.0)
   {
    y = 150000;
   }
   else
    y = pt.Y;
   return new Point(x, y);
}

这些更改之后,行不再消失了!但是“ LineSeries”有时会显示错误的值,这对我来说是不可接受的。

小注释:我正在使用.Net Framework 4.7.2

0 个答案:

没有答案