修复Serie添加double.MaxValue时坐标绘制失败的问题

This commit is contained in:
monitor1394
2023-12-11 13:43:03 +08:00
parent a50bda5344
commit 53c7ddf9d4
3 changed files with 15 additions and 12 deletions

View File

@@ -267,7 +267,11 @@ namespace XCharts
if (axis.interval == 0)
{
if (axis.splitNumber > 0)
if (range >= double.MaxValue / 2)
{
tick = range / 4;
}
else if (axis.splitNumber > 0)
{
tick = range / axis.splitNumber;
}
@@ -865,7 +869,6 @@ namespace XCharts
for (int i = 0; i < size; i++)
{
var scaleWidth = AxisHelper.GetScaleWidth(axis, axisLength, axis.IsTime() ? i : i + 1, dataZoom);
if (axis.boundaryGap && axis.axisTick.alignWithLabel)
current -= scaleWidth / 2;

View File

@@ -245,21 +245,20 @@ namespace XCharts.Runtime
{
if (index < 0)
return 0;
int num = GetScaleNumber(axis, coordinateWidth, dataZoom);
int splitNum = GetSplitNumber(axis, coordinateWidth, dataZoom);
if (num <= 0)
num = 1;
if (axis.IsTime() || axis.IsValue())
{
var value = axis.GetLabelValue(index);
var lastValue = axis.GetLabelValue(index - 1);
return axis.context.minMaxRange == 0 ? 0 :
(float)(coordinateWidth * (value - lastValue) / axis.context.minMaxRange);
var width = axis.context.minMaxRange == 0 ? 0 :
(float)(coordinateWidth * ((value - lastValue) / axis.context.minMaxRange));
return width;
}
else
{
int num = GetScaleNumber(axis, coordinateWidth, dataZoom);
int splitNum = GetSplitNumber(axis, coordinateWidth, dataZoom);
if (num <= 0)
num = 1;
var data = axis.GetDataList(dataZoom);
if (axis.IsCategory() && data.Count > 0 && splitNum > 0)
{
@@ -344,7 +343,7 @@ namespace XCharts.Runtime
int maxSplit = 0;
maxValue = ChartHelper.GetMaxLogValue(maxValue, axis.logBase, axis.logBaseE, out maxSplit);
minValue = ChartHelper.GetMinLogValue(minValue, axis.logBase, axis.logBaseE, out minSplit);
var splitNumber = maxSplit + minSplit;
if (splitNumber > 15)
splitNumber = 15;
@@ -633,7 +632,7 @@ namespace XCharts.Runtime
var startX = grid.context.x + yAxis.offset;
if (yAxis.IsRight())
startX += grid.context.width;
else if (yAxis.axisLine.onZero && relativedAxis != null && relativedAxis.IsValue()
else if (yAxis.axisLine.onZero && relativedAxis != null && relativedAxis.IsValue()
&& relativedAxis.gridIndex == yAxis.gridIndex)
startX += relativedAxis.context.offset;
return startX;