增加AxismainAxis参数设置主轴可控制柱图的朝向 (#331)

This commit is contained in:
monitor1394
2026-02-26 08:47:51 +08:00
parent 90e9187808
commit 92abee1a6c
5 changed files with 88 additions and 11 deletions

View File

@@ -429,6 +429,19 @@ namespace XCharts.Runtime
return true;
}
public Axis GetMainAxis()
{
foreach (var component in m_Components)
{
if (component is Axis)
{
var axis = component as Axis;
if (axis.show && axis.mainAxis) return axis;
}
}
return null;
}
/// <summary>
/// 纯类目轴。
/// </summary>
@@ -483,7 +496,15 @@ namespace XCharts.Runtime
relativedAxis = null;
return false;
}
var isY = yAxis.IsCategory() && !xAxis.IsCategory();
bool isY;
if (xAxis.type == yAxis.type)
{
isY = yAxis.mainAxis;
}
else
{
isY = yAxis.IsCategory() && !xAxis.IsCategory();
}
if (isY)
{
axis = yAxis;

View File

@@ -11,33 +11,61 @@ namespace XCharts.Runtime
public virtual void GetSeriesMinMaxValue(Axis axis, int axisIndex, out double tempMinValue, out double tempMaxValue)
{
var needAnimationData = !axis.context.needAnimation;
bool isX = false, isY = false, isZ = false;
tempMinValue = 0;
tempMaxValue = 0;
if (axis is XAxis3D)
{
SeriesHelper.GetXMinMaxValue(this, axisIndex, axis.inverse, out tempMinValue, out tempMaxValue, false, false, needAnimationData);
}
isX = true;
else if (axis is ZAxis3D)
{
SeriesHelper.GetZMinMaxValue(this, axisIndex, axis.inverse, out tempMinValue, out tempMaxValue, false, false, needAnimationData);
isZ = true;
}
else if (axis is YAxis3D)
{
SeriesHelper.GetYMinMaxValue(this, axisIndex, axis.inverse, out tempMinValue, out tempMaxValue, false, false, needAnimationData);
isY = true;
}
else if (IsAllAxisValue())
{
if (axis is XAxis)
var mainAxis = GetMainAxis();
if (mainAxis == null)
{
SeriesHelper.GetXMinMaxValue(this, axisIndex, axis.inverse, out tempMinValue, out tempMaxValue, false, false, needAnimationData);
if (axis is XAxis)
{
isX = true;
}
else
{
isY = true;
}
}
else
{
SeriesHelper.GetYMinMaxValue(this, axisIndex, axis.inverse, out tempMinValue, out tempMaxValue, false, false, needAnimationData);
if (axis == mainAxis)
{
isX = true;
}
else
{
isY = true;
}
}
}
else
{
isY = true;
}
if (isX)
{
SeriesHelper.GetXMinMaxValue(this, axisIndex, axis.inverse, out tempMinValue, out tempMaxValue, false, false, needAnimationData);
}
else if (isY)
{
SeriesHelper.GetYMinMaxValue(this, axisIndex, axis.inverse, out tempMinValue, out tempMaxValue, false, false, needAnimationData);
}
else if(isZ)
{
SeriesHelper.GetZMinMaxValue(this, axisIndex, axis.inverse, out tempMinValue, out tempMaxValue, false, false, needAnimationData);
}
AxisHelper.AdjustMinMaxValue(axis, ref tempMinValue, ref tempMaxValue, true);
}
}