[feature][datazoom] support time axis

This commit is contained in:
monitor1394
2022-07-15 08:37:14 +08:00
parent 96a49f2b11
commit aee49322b7
4 changed files with 69 additions and 47 deletions

View File

@@ -144,6 +144,15 @@ namespace XCharts
double tempMaxValue = 0;
chart.GetSeriesMinMaxValue(axis, axisIndex, out tempMinValue, out tempMaxValue);
var dataZoom = chart.GetDataZoomOfAxis(axis);
if (dataZoom != null && dataZoom.enable)
{
if (axis is XAxis)
dataZoom.SetXAxisIndexValueInfo(axisIndex, ref tempMinValue, ref tempMaxValue);
else
dataZoom.SetYAxisIndexValueInfo(axisIndex, ref tempMinValue, ref tempMaxValue);
}
if (tempMinValue != axis.context.minValue ||
tempMaxValue != axis.context.maxValue ||
m_LastInterval != axis.interval ||
@@ -189,14 +198,7 @@ namespace XCharts
axis.context.zeroY = grid.context.y - (float) (axis.context.minValue * grid.context.height / axis.context.minMaxRange);
}
}
var dataZoom = chart.GetDataZoomOfAxis(axis);
if (dataZoom != null && dataZoom.enable)
{
if (axis is XAxis)
dataZoom.SetXAxisIndexValueInfo(axisIndex, tempMinValue, tempMaxValue);
else
dataZoom.SetYAxisIndexValueInfo(axisIndex, tempMinValue, tempMaxValue);
}
if (updateChart)
{
UpdateAxisLabelText(axis);

View File

@@ -366,6 +366,8 @@ namespace XCharts.Runtime
class AxisIndexValueInfo
{
public double rawMin;
public double rawMax;
public double min;
public double max;
}
@@ -617,38 +619,36 @@ namespace XCharts.Runtime
context.height = chartHeight - runtimeTop - runtimeBottom;
}
internal void SetXAxisIndexValueInfo(int xAxisIndex, double min, double max)
internal void SetXAxisIndexValueInfo(int xAxisIndex, ref double min, ref double max)
{
if (!m_XAxisIndexInfos.ContainsKey(xAxisIndex))
AxisIndexValueInfo info;
if (!m_XAxisIndexInfos.TryGetValue(xAxisIndex, out info))
{
m_XAxisIndexInfos[xAxisIndex] = new AxisIndexValueInfo()
{
min = min,
max = max
};
}
else
{
m_XAxisIndexInfos[xAxisIndex].min = min;
m_XAxisIndexInfos[xAxisIndex].max = max;
info = new AxisIndexValueInfo();
m_XAxisIndexInfos[xAxisIndex] = info;
}
info.rawMin = min;
info.rawMax = max;
info.min = min + (max - min) * start / 100;
info.max = min + (max - min) * end / 100;
min = info.min;
max = info.max;
}
internal void SetYAxisIndexValueInfo(int yAxisIndex, double min, double max)
internal void SetYAxisIndexValueInfo(int yAxisIndex, ref double min, ref double max)
{
if (!m_YAxisIndexInfos.ContainsKey(yAxisIndex))
AxisIndexValueInfo info;
if (!m_YAxisIndexInfos.TryGetValue(yAxisIndex, out info))
{
m_YAxisIndexInfos[yAxisIndex] = new AxisIndexValueInfo()
{
min = min,
max = max
};
}
else
{
m_YAxisIndexInfos[yAxisIndex].min = min;
m_YAxisIndexInfos[yAxisIndex].max = max;
info = new AxisIndexValueInfo();
m_YAxisIndexInfos[yAxisIndex] = info;
}
info.rawMin = min;
info.rawMax = max;
info.min = min + (max - min) * start / 100;
info.max = min + (max - min) * end / 100;
min = info.min;
max = info.max;
}
internal bool IsXAxisIndexValue(int axisIndex)
@@ -663,24 +663,32 @@ namespace XCharts.Runtime
internal void GetXAxisIndexValue(int axisIndex, out double min, out double max)
{
min = 0;
max = 0;
if (m_XAxisIndexInfos.ContainsKey(axisIndex))
AxisIndexValueInfo info;
if (m_XAxisIndexInfos.TryGetValue(axisIndex, out info))
{
var info = m_XAxisIndexInfos[axisIndex];
min = info.min;
max = info.max;
var range = info.rawMax - info.rawMin;
min = info.rawMin + range * m_Start / 100;
max = info.rawMin + range * m_End / 100;
}
else
{
min = 0;
max = 0;
}
}
internal void GetYAxisIndexValue(int axisIndex, out double min, out double max)
{
min = 0;
max = 0;
if (m_YAxisIndexInfos.ContainsKey(axisIndex))
AxisIndexValueInfo info;
if (m_YAxisIndexInfos.TryGetValue(axisIndex, out info))
{
var info = m_YAxisIndexInfos[axisIndex];
min = info.min;
max = info.max;
var range = info.rawMax - info.rawMin;
min = info.rawMin + range * m_Start / 100;
max = info.rawMin + range * m_End / 100;
}
else
{
min = 0;
max = 0;
}
}
}