我使用'Oxyplot Wpf'绘制图,
问题是;如果缩放很多,在绘制“ LineSeries”后,lineseries正在消失。即使不缩放,但“ LineSeries”在x轴上的长度非常长,在某些点后也会消失。
当我调查此问题时,我发现了由WPF渲染引起的问题。如果绘制很长的完全水平或完全垂直的线,则在某个点后它将变得不可见。但是它应该完全水平或垂直,否则就可以保持可见状态。此声明对Oxyplot WPF图也有效。
我在Internet上进行了一些研究,发现这是一个已知问题。
'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