mirror of
https://github.com/XCharts-Team/XCharts.git
synced 2026-05-14 20:00:09 +00:00
[feature][axis] support minor tick and minor split line
This commit is contained in:
@@ -57,6 +57,9 @@
|
||||
|
||||
## master
|
||||
|
||||
* (2022.07.19) 增加`Axis`的`MinorSplitLine`设置坐标轴次分割线
|
||||
* (2022.07.19) 增加`Axis`的`MinorTick`设置坐标轴次刻度
|
||||
* (2022.07.17) 增加`Radar`的`smooth`参数设置平滑曲线
|
||||
* (2022.07.15) 增加`DataZoom`对`Time`时间轴的支持
|
||||
|
||||
## 3.1.0
|
||||
|
||||
@@ -130,11 +130,14 @@ Inherits or Implemented: [MainComponentHandler](#MainComponentHandler)
|
||||
| `GetAxisValueDistance()` |public static float GetAxisValueDistance(GridCoord grid, Axis axis, float scaleWidth, double value)</br>获得数值value在坐标轴上相对起点的距离 |
|
||||
| `GetAxisValueLength()` |public static float GetAxisValueLength(GridCoord grid, Axis axis, float scaleWidth, double value)</br>获得数值value在坐标轴上对应的长度 |
|
||||
| `GetAxisValuePosition()` |public static float GetAxisValuePosition(GridCoord grid, Axis axis, float scaleWidth, double value)</br>获得数值value在坐标轴上的坐标位置 |
|
||||
| `GetAxisXOrY()` |public static float GetAxisXOrY(GridCoord grid, Axis axis, Axis relativedAxis)</br> |
|
||||
| `GetDataWidth()` |public static float GetDataWidth(Axis axis, float coordinateWidth, int dataCount, DataZoom dataZoom)</br>获得一个类目数据在坐标系中代表的宽度 |
|
||||
| `GetEachWidth()` |public static float GetEachWidth(Axis axis, float coordinateWidth, DataZoom dataZoom = null)</br> |
|
||||
| `GetScaleNumber()` |public static int GetScaleNumber(Axis axis, float coordinateWidth, DataZoom dataZoom = null)</br>获得分割线条数 |
|
||||
| `GetScaleWidth()` |public static float GetScaleWidth(Axis axis, float coordinateWidth, int index, DataZoom dataZoom = null)</br>获得分割段宽度 |
|
||||
| `GetSplitNumber()` |public static int GetSplitNumber(Axis axis, float coordinateWid, DataZoom dataZoom)</br>获得分割段数 |
|
||||
| `GetXAxisXOrY()` |public static float GetXAxisXOrY(GridCoord grid, Axis xAxis, Axis relativedAxis)</br> |
|
||||
| `GetYAxisXOrY()` |public static float GetYAxisXOrY(GridCoord grid, Axis yAxis, Axis relativedAxis)</br> |
|
||||
| `NeedShowSplit()` |public static bool NeedShowSplit(Axis axis)</br> |
|
||||
|
||||
## `BarChart`
|
||||
|
||||
@@ -130,11 +130,14 @@ Inherits or Implemented: [MainComponentHandler](#MainComponentHandler)
|
||||
| `GetAxisValueDistance()` |public static float GetAxisValueDistance(GridCoord grid, Axis axis, float scaleWidth, double value)</br>获得数值value在坐标轴上相对起点的距离 |
|
||||
| `GetAxisValueLength()` |public static float GetAxisValueLength(GridCoord grid, Axis axis, float scaleWidth, double value)</br>获得数值value在坐标轴上对应的长度 |
|
||||
| `GetAxisValuePosition()` |public static float GetAxisValuePosition(GridCoord grid, Axis axis, float scaleWidth, double value)</br>获得数值value在坐标轴上的坐标位置 |
|
||||
| `GetAxisXOrY()` |public static float GetAxisXOrY(GridCoord grid, Axis axis, Axis relativedAxis)</br> |
|
||||
| `GetDataWidth()` |public static float GetDataWidth(Axis axis, float coordinateWidth, int dataCount, DataZoom dataZoom)</br>获得一个类目数据在坐标系中代表的宽度 |
|
||||
| `GetEachWidth()` |public static float GetEachWidth(Axis axis, float coordinateWidth, DataZoom dataZoom = null)</br> |
|
||||
| `GetScaleNumber()` |public static int GetScaleNumber(Axis axis, float coordinateWidth, DataZoom dataZoom = null)</br>获得分割线条数 |
|
||||
| `GetScaleWidth()` |public static float GetScaleWidth(Axis axis, float coordinateWidth, int index, DataZoom dataZoom = null)</br>获得分割段宽度 |
|
||||
| `GetSplitNumber()` |public static int GetSplitNumber(Axis axis, float coordinateWid, DataZoom dataZoom)</br>获得分割段数 |
|
||||
| `GetXAxisXOrY()` |public static float GetXAxisXOrY(GridCoord grid, Axis xAxis, Axis relativedAxis)</br> |
|
||||
| `GetYAxisXOrY()` |public static float GetYAxisXOrY(GridCoord grid, Axis yAxis, Axis relativedAxis)</br> |
|
||||
| `NeedShowSplit()` |public static bool NeedShowSplit(Axis axis)</br> |
|
||||
|
||||
## `BarChart`
|
||||
|
||||
@@ -76,6 +76,8 @@
|
||||
- [ArrowStyle](#ArrowStyle)
|
||||
- [AxisLabel](#AxisLabel)
|
||||
- [AxisLine](#AxisLine)
|
||||
- [AxisMinorSplitLine](#AxisMinorSplitLine)
|
||||
- [AxisMinorTick](#AxisMinorTick)
|
||||
- [AxisName](#AxisName)
|
||||
- [AxisSplitArea](#AxisSplitArea)
|
||||
- [AxisSplitLine](#AxisSplitLine)
|
||||
@@ -263,8 +265,10 @@ The axis in rectangular coordinate.
|
||||
|`axisLine`|||axis Line. [AxisLine](#AxisLine)|
|
||||
|`axisName`|||axis name. [AxisName](#AxisName)|
|
||||
|`axisTick`|||axis tick. [AxisTick](#AxisTick)|
|
||||
|`minorTick`|||axis minor tick. [AxisMinorTick](#AxisMinorTick)|
|
||||
|`axisLabel`|||axis label. [AxisLabel](#AxisLabel)|
|
||||
|`splitLine`|||axis split line. [AxisSplitLine](#AxisSplitLine)|
|
||||
|`minorSplitLine`|||axis minor split line. [AxisMinorSplitLine](#AxisMinorSplitLine)|
|
||||
|`splitArea`|||axis split area. [AxisSplitArea](#AxisSplitArea)|
|
||||
|
||||
## `AxisLabel`
|
||||
@@ -295,6 +299,28 @@ Settings related to axis line.
|
||||
|`showArrow`|||Whether to show the arrow symbol of axis.
|
||||
|`arrow`|||the arrow of line. [ArrowStyle](#ArrowStyle)|
|
||||
|
||||
## `AxisMinorSplitLine`
|
||||
|
||||
Inherits or Implemented: [BaseLine](#BaseLine)
|
||||
|
||||
Minor split line of axis in grid area.
|
||||
|
||||
|field|default|since|comment|
|
||||
|--|--|--|--|
|
||||
|`distance`|||The distance between the split line and axis line.
|
||||
|`autoColor`|||auto color.
|
||||
|
||||
## `AxisMinorTick`
|
||||
|
||||
Inherits or Implemented: [BaseLine](#BaseLine)
|
||||
|
||||
Settings related to axis minor tick.
|
||||
|
||||
|field|default|since|comment|
|
||||
|--|--|--|--|
|
||||
|`splitNumber`|5||Number of segments that the axis is split into.
|
||||
|`autoColor`|||
|
||||
|
||||
## `AxisName`
|
||||
|
||||
Inherits or Implemented: [ChildComponent](#ChildComponent)
|
||||
@@ -384,7 +410,8 @@ Inherits or Implemented: [ComponentTheme](#ComponentTheme)
|
||||
|`splitLineType`|||the type of split line.</br>`LineStyle.Type`:</br>- `Solid`: 实线</br>- `Dashed`: 虚线</br>- `Dotted`: 点线</br>- `DashDot`: 点划线</br>- `DashDotDot`: 双点划线</br>- `None`: 双点划线</br>|
|
||||
|`splitLineWidth`|1f||the width of split line.
|
||||
|`splitLineLength`|0f||the length of split line.
|
||||
|`splitLineColor`|||the color of line.
|
||||
|`splitLineColor`|||the color of split line.
|
||||
|`minorSplitLineColor`|||the color of minor split line.
|
||||
|`tickWidth`|1f||the width of tick.
|
||||
|`tickLength`|5f||the length of tick.
|
||||
|`tickColor`|||the color of tick.
|
||||
@@ -994,6 +1021,9 @@ Polar coordinate can be used in scatter and line chart. Every polar coordinate h
|
||||
|
||||
Inherits or Implemented: [Serie](#Serie),[INeedSerieContainer](#INeedSerieContainer)
|
||||
|
||||
|field|default|since|comment|
|
||||
|--|--|--|--|
|
||||
|`smooth`|false|3.2.0|Whether use smooth curve.
|
||||
|
||||
## `RadarAxisTheme`
|
||||
|
||||
|
||||
@@ -76,6 +76,8 @@
|
||||
- [ArrowStyle](#ArrowStyle)
|
||||
- [AxisLabel](#AxisLabel)
|
||||
- [AxisLine](#AxisLine)
|
||||
- [AxisMinorSplitLine](#AxisMinorSplitLine)
|
||||
- [AxisMinorTick](#AxisMinorTick)
|
||||
- [AxisName](#AxisName)
|
||||
- [AxisSplitArea](#AxisSplitArea)
|
||||
- [AxisSplitLine](#AxisSplitLine)
|
||||
@@ -263,8 +265,10 @@ Inherits or Implemented: [MainComponent](#MainComponent)
|
||||
|`axisLine`|||坐标轴轴线。 [AxisLine](#AxisLine)|
|
||||
|`axisName`|||坐标轴名称。 [AxisName](#AxisName)|
|
||||
|`axisTick`|||坐标轴刻度。 [AxisTick](#AxisTick)|
|
||||
|`minorTick`|||坐标轴次刻度。 [AxisMinorTick](#AxisMinorTick)|
|
||||
|`axisLabel`|||坐标轴刻度标签。 [AxisLabel](#AxisLabel)|
|
||||
|`splitLine`|||坐标轴分割线。 [AxisSplitLine](#AxisSplitLine)|
|
||||
|`minorSplitLine`|||坐标轴次分割线。 [AxisMinorSplitLine](#AxisMinorSplitLine)|
|
||||
|`splitArea`|||坐标轴分割区域。 [AxisSplitArea](#AxisSplitArea)|
|
||||
|
||||
## `AxisLabel`
|
||||
@@ -295,6 +299,28 @@ Inherits or Implemented: [BaseLine](#BaseLine)
|
||||
|`showArrow`|||是否显示箭头。
|
||||
|`arrow`|||轴线箭头。 [ArrowStyle](#ArrowStyle)|
|
||||
|
||||
## `AxisMinorSplitLine`
|
||||
|
||||
Inherits or Implemented: [BaseLine](#BaseLine)
|
||||
|
||||
坐标轴在 grid 区域中的次分隔线。次分割线会对齐次刻度线 minorTick。
|
||||
|
||||
|field|default|since|comment|
|
||||
|--|--|--|--|
|
||||
|`distance`|||刻度线与轴线的距离。
|
||||
|`autoColor`|||自动设置颜色。
|
||||
|
||||
## `AxisMinorTick`
|
||||
|
||||
Inherits or Implemented: [BaseLine](#BaseLine)
|
||||
|
||||
坐标轴次刻度相关设置。注意:次刻度无法再类目轴中使用。
|
||||
|
||||
|field|default|since|comment|
|
||||
|--|--|--|--|
|
||||
|`splitNumber`|5||分隔线之间分割的刻度数。
|
||||
|`autoColor`|||
|
||||
|
||||
## `AxisName`
|
||||
|
||||
Inherits or Implemented: [ChildComponent](#ChildComponent)
|
||||
@@ -385,6 +411,7 @@ Inherits or Implemented: [ComponentTheme](#ComponentTheme)
|
||||
|`splitLineWidth`|1f||分割线线宽。
|
||||
|`splitLineLength`|0f||分割线线长。
|
||||
|`splitLineColor`|||分割线线颜色。
|
||||
|`minorSplitLineColor`|||次分割线线颜色。
|
||||
|`tickWidth`|1f||刻度线线宽。
|
||||
|`tickLength`|5f||刻度线线长。
|
||||
|`tickColor`|||坐标轴线颜色。
|
||||
@@ -994,6 +1021,9 @@ Inherits or Implemented: [CoordSystem](#CoordSystem),[ISerieContainer](#ISerieCo
|
||||
|
||||
Inherits or Implemented: [Serie](#Serie),[INeedSerieContainer](#INeedSerieContainer)
|
||||
|
||||
|field|default|since|comment|
|
||||
|--|--|--|--|
|
||||
|`smooth`|false|3.2.0|是否平滑曲线。平滑曲线时不支持区域填充颜色。
|
||||
|
||||
## `RadarAxisTheme`
|
||||
|
||||
|
||||
@@ -47,6 +47,18 @@ namespace XCharts.Editor
|
||||
}
|
||||
}
|
||||
|
||||
[CustomPropertyDrawer(typeof(AxisMinorSplitLine), true)]
|
||||
public class AxisMinorSplitLineDrawer : BaseLineDrawer
|
||||
{
|
||||
public override string ClassName { get { return "MinorSplitLine"; } }
|
||||
protected override void DrawExtendeds(SerializedProperty prop)
|
||||
{
|
||||
base.DrawExtendeds(prop);
|
||||
//PropertyField(prop, "m_Distance");
|
||||
//PropertyField(prop, "m_AutoColor");
|
||||
}
|
||||
}
|
||||
|
||||
[CustomPropertyDrawer(typeof(AxisTick), true)]
|
||||
public class AxisTickDrawer : BaseLineDrawer
|
||||
{
|
||||
@@ -63,4 +75,16 @@ namespace XCharts.Editor
|
||||
PropertyField(prop, "m_AutoColor");
|
||||
}
|
||||
}
|
||||
|
||||
[CustomPropertyDrawer(typeof(AxisMinorTick), true)]
|
||||
public class AxisMinorTickDrawer : BaseLineDrawer
|
||||
{
|
||||
public override string ClassName { get { return "MinorTick"; } }
|
||||
protected override void DrawExtendeds(SerializedProperty prop)
|
||||
{
|
||||
base.DrawExtendeds(prop);
|
||||
PropertyField(prop, "m_SplitNumber");
|
||||
//PropertyField(prop, "m_AutoColor");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -70,7 +70,6 @@ namespace XCharts.Editor
|
||||
else
|
||||
{
|
||||
PropertyField("m_Interval");
|
||||
PropertyField("m_BoundaryGap");
|
||||
}
|
||||
DrawExtendeds();
|
||||
PropertyField("m_AxisLine");
|
||||
@@ -79,6 +78,11 @@ namespace XCharts.Editor
|
||||
PropertyField("m_AxisLabel");
|
||||
PropertyField("m_SplitLine");
|
||||
PropertyField("m_SplitArea");
|
||||
if (type != Axis.AxisType.Category)
|
||||
{
|
||||
PropertyField("m_MinorTick");
|
||||
PropertyField("m_MinorSplitLine");
|
||||
}
|
||||
PropertyListField("m_Icons", true);
|
||||
if (type == Axis.AxisType.Category)
|
||||
{
|
||||
@@ -93,12 +97,10 @@ namespace XCharts.Editor
|
||||
}
|
||||
|
||||
[ComponentEditor(typeof(XAxis))]
|
||||
public class XAxisEditor : AxisEditor
|
||||
{ }
|
||||
public class XAxisEditor : AxisEditor { }
|
||||
|
||||
[ComponentEditor(typeof(YAxis))]
|
||||
public class YAxisEditor : AxisEditor
|
||||
{ }
|
||||
public class YAxisEditor : AxisEditor { }
|
||||
|
||||
[ComponentEditor(typeof(SingleAxis))]
|
||||
public class SingleAxisEditor : AxisEditor
|
||||
@@ -128,12 +130,10 @@ namespace XCharts.Editor
|
||||
}
|
||||
|
||||
[ComponentEditor(typeof(RadiusAxis))]
|
||||
public class RadiusAxisEditor : AxisEditor
|
||||
{ }
|
||||
public class RadiusAxisEditor : AxisEditor { }
|
||||
|
||||
[ComponentEditor(typeof(ParallelAxis))]
|
||||
public class ParallelAxisEditor : AxisEditor
|
||||
{ }
|
||||
public class ParallelAxisEditor : AxisEditor { }
|
||||
|
||||
[CustomPropertyDrawer(typeof(AxisLabel), true)]
|
||||
public class AxisLabelDrawer : BasePropertyDrawer
|
||||
|
||||
@@ -98,8 +98,10 @@ namespace XCharts.Runtime
|
||||
[SerializeField] protected AxisLine m_AxisLine = AxisLine.defaultAxisLine;
|
||||
[SerializeField] protected AxisName m_AxisName = AxisName.defaultAxisName;
|
||||
[SerializeField] protected AxisTick m_AxisTick = AxisTick.defaultTick;
|
||||
[SerializeField] protected AxisMinorTick m_MinorTick = AxisMinorTick.defaultMinorTick;
|
||||
[SerializeField] protected AxisLabel m_AxisLabel = AxisLabel.defaultAxisLabel;
|
||||
[SerializeField] protected AxisSplitLine m_SplitLine = AxisSplitLine.defaultSplitLine;
|
||||
[SerializeField] protected AxisMinorSplitLine m_MinorSplitLine = AxisMinorSplitLine.defaultMinorSplitLine;
|
||||
[SerializeField] protected AxisSplitArea m_SplitArea = AxisSplitArea.defaultSplitArea;
|
||||
|
||||
public AxisContext context = new AxisContext();
|
||||
@@ -352,6 +354,24 @@ namespace XCharts.Runtime
|
||||
set { if (value != null) { m_SplitArea = value; SetVerticesDirty(); } }
|
||||
}
|
||||
/// <summary>
|
||||
/// axis minor tick.
|
||||
/// |坐标轴次刻度。
|
||||
/// </summary>
|
||||
public AxisMinorTick minorTick
|
||||
{
|
||||
get { return m_MinorTick; }
|
||||
set { if (value != null) { m_MinorTick = value; SetVerticesDirty(); } }
|
||||
}
|
||||
/// <summary>
|
||||
/// axis minor split line.
|
||||
/// |坐标轴次分割线。
|
||||
/// </summary>
|
||||
public AxisMinorSplitLine minorSplitLine
|
||||
{
|
||||
get { return m_MinorSplitLine; }
|
||||
set { if (value != null) { m_MinorSplitLine = value; SetVerticesDirty(); } }
|
||||
}
|
||||
/// <summary>
|
||||
/// Whether to add new data at the head or at the end of the list.
|
||||
/// |添加新数据时是在列表的头部还是尾部加入。
|
||||
/// </summary>
|
||||
@@ -369,7 +389,9 @@ namespace XCharts.Runtime
|
||||
axisLine.anyDirty ||
|
||||
axisTick.anyDirty ||
|
||||
splitLine.anyDirty ||
|
||||
splitArea.anyDirty;
|
||||
splitArea.anyDirty ||
|
||||
minorTick.anyDirty ||
|
||||
minorSplitLine.anyDirty;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -398,6 +420,8 @@ namespace XCharts.Runtime
|
||||
axisTick.ClearVerticesDirty();
|
||||
splitLine.ClearVerticesDirty();
|
||||
splitArea.ClearVerticesDirty();
|
||||
minorTick.ClearVerticesDirty();
|
||||
minorSplitLine.ClearVerticesDirty();
|
||||
}
|
||||
|
||||
public override void SetComponentDirty()
|
||||
@@ -429,6 +453,8 @@ namespace XCharts.Runtime
|
||||
axis.axisLabel = axisLabel.Clone();
|
||||
axis.splitLine = splitLine.Clone();
|
||||
axis.splitArea = splitArea.Clone();
|
||||
axis.minorTick = minorTick.Clone();
|
||||
axis.minorSplitLine = minorSplitLine.Clone();
|
||||
axis.icons = new List<Sprite>();
|
||||
axis.data = new List<string>();
|
||||
ChartHelper.CopyList(axis.data, data);
|
||||
@@ -457,6 +483,8 @@ namespace XCharts.Runtime
|
||||
axisLabel.Copy(axis.axisLabel);
|
||||
splitLine.Copy(axis.splitLine);
|
||||
splitArea.Copy(axis.splitArea);
|
||||
minorTick.Copy(axis.minorTick);
|
||||
minorSplitLine.Copy(axis.minorSplitLine);
|
||||
ChartHelper.CopyList(data, axis.data);
|
||||
ChartHelper.CopyList<Sprite>(icons, axis.icons);
|
||||
}
|
||||
@@ -664,6 +692,18 @@ namespace XCharts.Runtime
|
||||
}
|
||||
}
|
||||
|
||||
public float GetValueLength(double value, float axisLength)
|
||||
{
|
||||
if (context.minMaxRange > 0)
|
||||
{
|
||||
return axisLength * ((float) (value / context.minMaxRange));
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获得指定区域缩放的类目数据列表
|
||||
/// </summary>
|
||||
@@ -788,5 +828,16 @@ namespace XCharts.Runtime
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
public void UpdateZeroOffset(float axisLength)
|
||||
{
|
||||
context.offset = context.minValue > 0 || context.minMaxRange == 0?
|
||||
0 :
|
||||
(context.maxValue < 0 ?
|
||||
axisLength :
|
||||
(float) (Math.Abs(context.minValue) * (axisLength /
|
||||
(Math.Abs(context.minValue) + Math.Abs(context.maxValue))))
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -7,9 +7,21 @@ namespace XCharts.Runtime
|
||||
public class AxisContext : MainComponentContext
|
||||
{
|
||||
public Orient orient;
|
||||
/// <summary>
|
||||
/// 坐标轴的起点X
|
||||
/// </summary>
|
||||
public float x;
|
||||
/// <summary>
|
||||
/// 坐标轴的起点Y
|
||||
/// </summary>
|
||||
public float y;
|
||||
/// <summary>
|
||||
/// 坐标轴原点X
|
||||
/// </summary>
|
||||
public float zeroX;
|
||||
/// <summary>
|
||||
/// 坐标轴原点Y
|
||||
/// </summary>
|
||||
public float zeroY;
|
||||
public float width;
|
||||
public float height;
|
||||
@@ -34,6 +46,11 @@ namespace XCharts.Runtime
|
||||
/// </summary>
|
||||
public float offset;
|
||||
public double minMaxRange;
|
||||
/// <summary>
|
||||
/// the tick value of value axis.
|
||||
/// |数值轴时每个tick的数值。
|
||||
/// </summary>
|
||||
public double tickValue;
|
||||
public float scaleWidth;
|
||||
public float startAngle;
|
||||
public double pointerValue;
|
||||
|
||||
@@ -24,7 +24,7 @@ namespace XCharts
|
||||
return Vector3.zero;
|
||||
}
|
||||
|
||||
protected virtual float GetAxisLineXOrY()
|
||||
internal virtual float GetAxisLineXOrY()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
@@ -38,7 +38,7 @@ namespace XCharts
|
||||
return;
|
||||
if (!grid.context.isPointerEnter)
|
||||
{
|
||||
axis.context.pointerValue = double.PositiveInfinity;
|
||||
axis.context.pointerValue = double.NaN;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -171,31 +171,11 @@ namespace XCharts
|
||||
var grid = chart.GetChartComponent<GridCoord>(axis.gridIndex);
|
||||
if (grid != null && axis is XAxis && axis.IsValue())
|
||||
{
|
||||
axis.context.offset = axis.context.minValue > 0 ?
|
||||
0 :
|
||||
(axis.context.maxValue < 0 ?
|
||||
grid.context.width :
|
||||
(float) (Math.Abs(axis.context.minValue) * (grid.context.width /
|
||||
(Math.Abs(axis.context.minValue) + Math.Abs(axis.context.maxValue))))
|
||||
);
|
||||
axis.context.x = grid.context.x;
|
||||
axis.context.y = GetAxisLineXOrY();
|
||||
axis.context.zeroY = grid.context.y;
|
||||
axis.context.zeroX = grid.context.x - (float) (axis.context.minValue * grid.context.width / axis.context.minMaxRange);
|
||||
axis.UpdateZeroOffset(grid.context.width);
|
||||
}
|
||||
if (grid != null && axis is YAxis && axis.IsValue())
|
||||
{
|
||||
axis.context.offset = axis.context.minValue > 0 ?
|
||||
0 :
|
||||
(axis.context.maxValue < 0 ?
|
||||
grid.context.height :
|
||||
(float) (Math.Abs(axis.context.minValue) * (grid.context.height /
|
||||
(Math.Abs(axis.context.minValue) + Math.Abs(axis.context.maxValue))))
|
||||
);
|
||||
axis.context.x = GetAxisLineXOrY();
|
||||
axis.context.y = grid.context.y;
|
||||
axis.context.zeroX = grid.context.x;
|
||||
axis.context.zeroY = grid.context.y - (float) (axis.context.minValue * grid.context.height / axis.context.minMaxRange);
|
||||
axis.UpdateZeroOffset(grid.context.height);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -260,6 +240,7 @@ namespace XCharts
|
||||
}
|
||||
}
|
||||
var value = 0d;
|
||||
axis.context.tickValue = tick;
|
||||
if (Mathf.Approximately((float) (axis.context.minValue % tick), 0))
|
||||
{
|
||||
value = axis.context.minValue;
|
||||
@@ -581,24 +562,21 @@ namespace XCharts
|
||||
if (AxisHelper.NeedShowSplit(axis))
|
||||
{
|
||||
var size = AxisHelper.GetScaleNumber(axis, axisLength, dataZoom);
|
||||
|
||||
var current = orient == Orient.Horizonal ?
|
||||
startX :
|
||||
startY;
|
||||
|
||||
var tickWidth = axis.axisTick.GetWidth(theme.tickWidth);
|
||||
var tickColor = axis.axisTick.GetColor(theme.tickColor);
|
||||
var current = orient == Orient.Horizonal ? startX : startY;
|
||||
var lastTickX = 0f;
|
||||
var lastTickY = 0f;
|
||||
var minorTickSplitNumber = axis.minorTick.splitNumber <= 0 ? 5 : axis.minorTick.splitNumber;
|
||||
var minorTickDistance = axis.GetValueLength(axis.context.tickValue / minorTickSplitNumber, axisLength);
|
||||
var minorTickColor = axis.minorTick.GetColor(theme.tickColor);
|
||||
var minorTickWidth = axis.minorTick.GetWidth(theme.tickWidth);
|
||||
var minorTickLength = axis.minorTick.GetLength(theme.tickLength * 0.6f);
|
||||
for (int i = 0; i < size; i++)
|
||||
{
|
||||
var scaleWidth = AxisHelper.GetScaleWidth(axis, axisLength, i + 1, dataZoom);
|
||||
if (i == 0 && (!axis.axisTick.showStartTick || axis.axisTick.alignWithLabel))
|
||||
{
|
||||
current += scaleWidth;
|
||||
continue;
|
||||
}
|
||||
if (i == size - 1 && !axis.axisTick.showEndTick)
|
||||
{
|
||||
current += scaleWidth;
|
||||
continue;
|
||||
}
|
||||
var hideTick = (i == 0 && (!axis.axisTick.showStartTick || axis.axisTick.alignWithLabel)) ||
|
||||
(i == size - 1 && !axis.axisTick.showEndTick);
|
||||
if (axis.axisTick.show)
|
||||
{
|
||||
if (orient == Orient.Horizonal)
|
||||
@@ -612,21 +590,44 @@ namespace XCharts
|
||||
|
||||
var sY = 0f;
|
||||
var eY = 0f;
|
||||
var mY = 0f;
|
||||
if ((axis.axisTick.inside && axis.IsBottom()) ||
|
||||
(!axis.axisTick.inside && axis.IsTop()))
|
||||
{
|
||||
sY = startY + lineWidth;
|
||||
eY = sY + tickLength;
|
||||
mY = sY + minorTickLength;
|
||||
}
|
||||
else
|
||||
{
|
||||
sY = startY - lineWidth;
|
||||
eY = sY - tickLength;
|
||||
mY = sY - minorTickLength;
|
||||
}
|
||||
|
||||
UGL.DrawLine(vh, new Vector3(pX, sY), new Vector3(pX, eY),
|
||||
axis.axisTick.GetWidth(theme.tickWidth),
|
||||
axis.axisTick.GetColor(theme.tickColor));
|
||||
if (!hideTick)
|
||||
UGL.DrawLine(vh, new Vector3(pX, sY), new Vector3(pX, eY), tickWidth, tickColor);
|
||||
if (axis.minorTick.show && i > 0 && minorTickDistance > 0)
|
||||
{
|
||||
if (lastTickX <= axis.context.zeroX || (i == 1 && pX > axis.context.zeroX))
|
||||
{
|
||||
var tickTotal = pX - minorTickDistance;
|
||||
while (tickTotal > lastTickX)
|
||||
{
|
||||
UGL.DrawLine(vh, new Vector3(tickTotal, sY), new Vector3(tickTotal, mY), minorTickWidth, minorTickColor);
|
||||
tickTotal -= minorTickDistance;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var tickTotal = lastTickX + minorTickDistance;
|
||||
while (tickTotal < pX)
|
||||
{
|
||||
UGL.DrawLine(vh, new Vector3(tickTotal, sY), new Vector3(tickTotal, mY), minorTickWidth, minorTickColor);
|
||||
tickTotal += minorTickDistance;
|
||||
}
|
||||
}
|
||||
}
|
||||
lastTickX = pX;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -639,21 +640,46 @@ namespace XCharts
|
||||
|
||||
var sX = 0f;
|
||||
var eX = 0f;
|
||||
var mX = 0f;
|
||||
if ((axis.axisTick.inside && axis.IsLeft()) ||
|
||||
(!axis.axisTick.inside && axis.IsRight()))
|
||||
{
|
||||
sX = startX + lineWidth;
|
||||
eX = sX + tickLength;
|
||||
mX = sX + minorTickLength;
|
||||
}
|
||||
else
|
||||
{
|
||||
sX = startX - lineWidth;
|
||||
eX = sX - tickLength;
|
||||
mX = sX - minorTickLength;
|
||||
}
|
||||
if (!hideTick)
|
||||
UGL.DrawLine(vh, new Vector3(sX, pY), new Vector3(eX, pY), tickWidth, tickColor);
|
||||
if (axis.minorTick.show && i > 0 && minorTickDistance > 0)
|
||||
{
|
||||
if (lastTickY <= axis.context.zeroY || (i == 1 && pY > axis.context.zeroY))
|
||||
{
|
||||
var tickTotal = pY - minorTickDistance;
|
||||
while (tickTotal > lastTickY)
|
||||
{
|
||||
|
||||
UGL.DrawLine(vh, new Vector3(sX, pY), new Vector3(eX, pY),
|
||||
axis.axisTick.GetWidth(theme.tickWidth),
|
||||
axis.axisTick.GetColor(theme.tickColor));
|
||||
UGL.DrawLine(vh, new Vector3(sX, tickTotal), new Vector3(mX, tickTotal), minorTickWidth, minorTickColor);
|
||||
tickTotal -= minorTickDistance;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var tickTotal = lastTickY + minorTickDistance;
|
||||
while (tickTotal < pY)
|
||||
{
|
||||
|
||||
UGL.DrawLine(vh, new Vector3(sX, tickTotal), new Vector3(mX, tickTotal), minorTickWidth, minorTickColor);
|
||||
tickTotal += minorTickDistance;
|
||||
}
|
||||
}
|
||||
}
|
||||
lastTickY = pY;
|
||||
}
|
||||
}
|
||||
current += scaleWidth;
|
||||
@@ -707,9 +733,12 @@ namespace XCharts
|
||||
}
|
||||
|
||||
protected void DrawAxisSplit(VertexHelper vh, AxisTheme theme, DataZoom dataZoom,
|
||||
Orient orient, float startX, float startY, float axisLength, float splitLength, Axis relativedAxis = null)
|
||||
Orient orient, float startX, float startY, float axisLength, float splitLength,
|
||||
Axis relativedAxis = null)
|
||||
{
|
||||
Axis axis = component;
|
||||
var axisLineWidth = axis.axisLine.GetWidth(theme.lineWidth);
|
||||
splitLength -= axisLineWidth;
|
||||
var lineColor = axis.splitLine.GetColor(theme.splitLineColor);
|
||||
var lineWidth = axis.splitLine.GetWidth(theme.lineWidth);
|
||||
var lineType = axis.splitLine.GetType(theme.splitLineType);
|
||||
@@ -725,6 +754,14 @@ namespace XCharts
|
||||
var current = orient == Orient.Horizonal ?
|
||||
startX :
|
||||
startY;
|
||||
|
||||
var lastSplitX = 0f;
|
||||
var lastSplitY = 0f;
|
||||
var minorTickSplitNumber = axis.minorTick.splitNumber <= 0 ? 5 : axis.minorTick.splitNumber;
|
||||
var minorTickDistance = axis.GetValueLength(axis.context.tickValue / minorTickSplitNumber, axisLength);
|
||||
var minorSplitLineColor = axis.minorSplitLine.GetColor(theme.minorSplitLineColor);
|
||||
var minorLineWidth = axis.minorSplitLine.GetWidth(theme.lineWidth);
|
||||
var minorLineType = axis.minorSplitLine.GetType(theme.splitLineType);
|
||||
for (int i = 0; i < size; i++)
|
||||
{
|
||||
var scaleWidth = AxisHelper.GetScaleWidth(axis, axisLength, axis.IsTime() ? i : i + 1, dataZoom);
|
||||
@@ -760,23 +797,99 @@ namespace XCharts
|
||||
{
|
||||
if (orient == Orient.Horizonal)
|
||||
{
|
||||
if (relativedAxis == null || !MathUtil.Approximately(current, GetAxisLineXOrY()))
|
||||
if (relativedAxis == null || !MathUtil.Approximately(current, relativedAxis.context.x))
|
||||
{
|
||||
ChartDrawer.DrawLineStyle(vh,
|
||||
lineType,
|
||||
lineWidth,
|
||||
new Vector3(current, startY),
|
||||
new Vector3(current, startY + splitLength),
|
||||
lineColor);
|
||||
}
|
||||
if (axis.minorSplitLine.show && i > 0 && minorTickDistance > 0)
|
||||
{
|
||||
if (lastSplitX <= axis.context.zeroX || (i == 1 && current > axis.context.zeroX))
|
||||
{
|
||||
var tickTotal = current - minorTickDistance;
|
||||
var count = 0;
|
||||
while (tickTotal > lastSplitX && count < minorTickSplitNumber - 1)
|
||||
{
|
||||
ChartDrawer.DrawLineStyle(vh,
|
||||
minorLineType,
|
||||
minorLineWidth,
|
||||
new Vector3(tickTotal, startY),
|
||||
new Vector3(tickTotal, startY + splitLength),
|
||||
minorSplitLineColor);
|
||||
count++;
|
||||
tickTotal -= minorTickDistance;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var tickTotal = lastSplitX + minorTickDistance;
|
||||
var count = 0;
|
||||
while (tickTotal < current && count < minorTickSplitNumber - 1)
|
||||
{
|
||||
ChartDrawer.DrawLineStyle(vh,
|
||||
minorLineType,
|
||||
minorLineWidth,
|
||||
new Vector3(tickTotal, startY),
|
||||
new Vector3(tickTotal, startY + splitLength),
|
||||
minorSplitLineColor);
|
||||
count++;
|
||||
tickTotal += minorTickDistance;
|
||||
}
|
||||
}
|
||||
}
|
||||
lastSplitX = current;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (relativedAxis == null || !MathUtil.Approximately(current, GetAxisLineXOrY()))
|
||||
if (relativedAxis == null || !MathUtil.Approximately(current, relativedAxis.context.y))
|
||||
{
|
||||
ChartDrawer.DrawLineStyle(vh,
|
||||
lineType,
|
||||
lineWidth,
|
||||
new Vector3(startX, current),
|
||||
new Vector3(startX + splitLength, current),
|
||||
lineColor);
|
||||
}
|
||||
if (axis.minorSplitLine.show && i > 0 && minorTickDistance > 0)
|
||||
{
|
||||
if (lastSplitY <= axis.context.zeroY || (i == 1 && current > axis.context.zeroY))
|
||||
{
|
||||
var tickTotal = current - minorTickDistance;
|
||||
var count = 0;
|
||||
while (tickTotal > lastSplitY && count < minorTickSplitNumber - 1)
|
||||
{
|
||||
ChartDrawer.DrawLineStyle(vh,
|
||||
minorLineType,
|
||||
minorLineWidth,
|
||||
new Vector3(startX, tickTotal),
|
||||
new Vector3(startX + splitLength, tickTotal),
|
||||
minorSplitLineColor);
|
||||
count++;
|
||||
tickTotal -= minorTickDistance;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var tickTotal = lastSplitY + minorTickDistance;
|
||||
var count = 0;
|
||||
while (tickTotal < current && count < minorTickSplitNumber - 1)
|
||||
{
|
||||
ChartDrawer.DrawLineStyle(vh,
|
||||
minorLineType,
|
||||
minorLineWidth,
|
||||
new Vector3(startX, tickTotal),
|
||||
new Vector3(startX + splitLength, tickTotal),
|
||||
minorSplitLineColor);
|
||||
count++;
|
||||
tickTotal += minorTickDistance;
|
||||
}
|
||||
}
|
||||
}
|
||||
lastSplitY = current;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -338,8 +338,7 @@ namespace XCharts.Runtime
|
||||
axis.splitNumber = (minSplit > 0 && maxSplit > 0) ? (maxSplit + minSplit - 1) : (maxSplit + minSplit);
|
||||
return;
|
||||
}
|
||||
if (axis.type == Axis.AxisType.Time)
|
||||
{ }
|
||||
if (axis.type == Axis.AxisType.Time) { }
|
||||
else if (axis.minMaxType == Axis.AxisMinMaxType.Custom)
|
||||
{
|
||||
if (axis.min != 0 || axis.max != 0)
|
||||
@@ -363,8 +362,7 @@ namespace XCharts.Runtime
|
||||
{
|
||||
case Axis.AxisMinMaxType.Default:
|
||||
|
||||
if (minValue == 0 && maxValue == 0)
|
||||
{ }
|
||||
if (minValue == 0 && maxValue == 0) { }
|
||||
else if (minValue > 0 && maxValue > 0)
|
||||
{
|
||||
minValue = 0;
|
||||
@@ -557,5 +555,43 @@ namespace XCharts.Runtime
|
||||
yDataHig;
|
||||
}
|
||||
}
|
||||
|
||||
public static float GetAxisXOrY(GridCoord grid, Axis axis, Axis relativedAxis)
|
||||
{
|
||||
if (axis is XAxis)
|
||||
return GetXAxisXOrY(grid, axis, relativedAxis);
|
||||
else if (axis is YAxis)
|
||||
return GetYAxisXOrY(grid, axis, relativedAxis);
|
||||
else if (axis is SingleAxis)
|
||||
return axis.context.y + axis.offset;
|
||||
else if (axis is ParallelAxis)
|
||||
return axis.context.y;
|
||||
else
|
||||
return axis.context.x;
|
||||
}
|
||||
|
||||
public static float GetXAxisXOrY(GridCoord grid, Axis xAxis, Axis relativedAxis)
|
||||
{
|
||||
var startY = grid.context.y + xAxis.offset;
|
||||
if (xAxis.IsTop())
|
||||
startY += grid.context.height;
|
||||
else if (xAxis.axisLine.onZero && relativedAxis.IsValue() && relativedAxis.gridIndex == xAxis.gridIndex)
|
||||
startY += relativedAxis.context.offset;
|
||||
return startY;
|
||||
}
|
||||
|
||||
public static float GetYAxisXOrY(GridCoord grid, Axis yAxis, Axis relativedAxis)
|
||||
{
|
||||
var startX = grid.context.x + yAxis.offset;
|
||||
if (yAxis.IsRight())
|
||||
startX += grid.context.width;
|
||||
else if (yAxis.axisLine.onZero && relativedAxis.IsValue() && relativedAxis.gridIndex == yAxis.gridIndex)
|
||||
startX += relativedAxis.context.offset;
|
||||
return startX;
|
||||
}
|
||||
|
||||
public static void UpdateAxisOffset(){
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
61
Runtime/Component/Axis/AxisMinorSplitLine.cs
Normal file
61
Runtime/Component/Axis/AxisMinorSplitLine.cs
Normal file
@@ -0,0 +1,61 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
|
||||
namespace XCharts.Runtime
|
||||
{
|
||||
/// <summary>
|
||||
/// Minor split line of axis in grid area.
|
||||
/// |坐标轴在 grid 区域中的次分隔线。次分割线会对齐次刻度线 minorTick。
|
||||
/// </summary>
|
||||
[Serializable]
|
||||
public class AxisMinorSplitLine : BaseLine
|
||||
{
|
||||
[SerializeField] private float m_Distance;
|
||||
[SerializeField] private bool m_AutoColor;
|
||||
|
||||
/// <summary>
|
||||
/// The distance between the split line and axis line.
|
||||
/// |刻度线与轴线的距离。
|
||||
/// </summary>
|
||||
public float distance { get { return m_Distance; } set { m_Distance = value; } }
|
||||
/// <summary>
|
||||
/// auto color.
|
||||
/// |自动设置颜色。
|
||||
/// </summary>
|
||||
public bool autoColor { get { return m_AutoColor; } set { m_AutoColor = value; } }
|
||||
|
||||
public override bool vertsDirty { get { return m_VertsDirty || m_LineStyle.anyDirty; } }
|
||||
public override void ClearVerticesDirty()
|
||||
{
|
||||
base.ClearVerticesDirty();
|
||||
m_LineStyle.ClearVerticesDirty();
|
||||
}
|
||||
public static AxisMinorSplitLine defaultMinorSplitLine
|
||||
{
|
||||
get
|
||||
{
|
||||
return new AxisMinorSplitLine()
|
||||
{
|
||||
m_Show = false,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
public AxisMinorSplitLine Clone()
|
||||
{
|
||||
var axisSplitLine = new AxisMinorSplitLine();
|
||||
axisSplitLine.show = show;
|
||||
axisSplitLine.distance = distance;
|
||||
axisSplitLine.autoColor = autoColor;
|
||||
axisSplitLine.lineStyle = lineStyle.Clone();
|
||||
return axisSplitLine;
|
||||
}
|
||||
|
||||
public void Copy(AxisMinorSplitLine splitLine)
|
||||
{
|
||||
base.Copy(splitLine);
|
||||
distance = splitLine.distance;
|
||||
autoColor = splitLine.autoColor;
|
||||
}
|
||||
}
|
||||
}
|
||||
11
Runtime/Component/Axis/AxisMinorSplitLine.cs.meta
Normal file
11
Runtime/Component/Axis/AxisMinorSplitLine.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7be5a277811c64887a121d7711929aab
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
63
Runtime/Component/Axis/AxisMinorTick.cs
Normal file
63
Runtime/Component/Axis/AxisMinorTick.cs
Normal file
@@ -0,0 +1,63 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace XCharts.Runtime
|
||||
{
|
||||
/// <summary>
|
||||
/// Settings related to axis minor tick.
|
||||
/// |坐标轴次刻度相关设置。注意:次刻度无法再类目轴中使用。
|
||||
/// </summary>
|
||||
[System.Serializable]
|
||||
[Since("v3.2.0")]
|
||||
public class AxisMinorTick : BaseLine
|
||||
{
|
||||
[SerializeField] protected int m_SplitNumber = 5;
|
||||
[SerializeField] private bool m_AutoColor;
|
||||
|
||||
/// <summary>
|
||||
/// Number of segments that the axis is split into.
|
||||
/// |分隔线之间分割的刻度数。
|
||||
/// </summary>
|
||||
public int splitNumber
|
||||
{
|
||||
get { return m_SplitNumber; }
|
||||
set { if (PropertyUtil.SetStruct(ref m_SplitNumber, value)) SetAllDirty(); }
|
||||
}
|
||||
public bool autoColor { get { return m_AutoColor; } set { m_AutoColor = value; } }
|
||||
|
||||
public override bool vertsDirty { get { return m_VertsDirty || m_LineStyle.anyDirty; } }
|
||||
public override void ClearVerticesDirty()
|
||||
{
|
||||
base.ClearVerticesDirty();
|
||||
m_LineStyle.ClearVerticesDirty();
|
||||
}
|
||||
public static AxisMinorTick defaultMinorTick
|
||||
{
|
||||
get
|
||||
{
|
||||
var tick = new AxisMinorTick
|
||||
{
|
||||
m_Show = false
|
||||
};
|
||||
return tick;
|
||||
}
|
||||
}
|
||||
|
||||
public AxisMinorTick Clone()
|
||||
{
|
||||
var axisTick = new AxisMinorTick();
|
||||
axisTick.show = show;
|
||||
axisTick.splitNumber = splitNumber;
|
||||
axisTick.autoColor = autoColor;
|
||||
axisTick.lineStyle = lineStyle.Clone();
|
||||
return axisTick;
|
||||
}
|
||||
|
||||
public void Copy(AxisMinorTick axisTick)
|
||||
{
|
||||
show = axisTick.show;
|
||||
splitNumber = axisTick.splitNumber;
|
||||
autoColor = axisTick.autoColor;
|
||||
lineStyle.Copy(axisTick.lineStyle);
|
||||
}
|
||||
}
|
||||
}
|
||||
11
Runtime/Component/Axis/AxisMinorTick.cs.meta
Normal file
11
Runtime/Component/Axis/AxisMinorTick.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3bea237f1eccc409ba2635e6f4ca609c
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -116,7 +116,6 @@ namespace XCharts.Runtime
|
||||
return;
|
||||
|
||||
var dataZoom = chart.GetDataZoomOfAxis(axis);
|
||||
|
||||
DrawAxisSplit(vh, chart.theme.axis, dataZoom,
|
||||
m_Orient,
|
||||
axis.context.x,
|
||||
@@ -159,7 +158,7 @@ namespace XCharts.Runtime
|
||||
}
|
||||
}
|
||||
|
||||
protected override float GetAxisLineXOrY()
|
||||
internal override float GetAxisLineXOrY()
|
||||
{
|
||||
return component.context.y;
|
||||
}
|
||||
|
||||
@@ -117,7 +117,7 @@ namespace XCharts.Runtime
|
||||
}
|
||||
}
|
||||
|
||||
protected override float GetAxisLineXOrY()
|
||||
internal override float GetAxisLineXOrY()
|
||||
{
|
||||
return component.context.y + component.offset;
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
|
||||
@@ -15,17 +15,32 @@ namespace XCharts.Runtime
|
||||
|
||||
public override void Update()
|
||||
{
|
||||
|
||||
UpdateAxisMinMaxValue(component.index, component);
|
||||
UpdatePointerValue(component);
|
||||
}
|
||||
|
||||
public override void DrawBase(VertexHelper vh)
|
||||
{
|
||||
UpdatePosition(component);
|
||||
DrawXAxisSplit(vh, component);
|
||||
DrawXAxisLine(vh, component);
|
||||
DrawXAxisTick(vh, component);
|
||||
}
|
||||
|
||||
private void UpdatePosition(XAxis axis)
|
||||
{
|
||||
var grid = chart.GetChartComponent<GridCoord>(axis.gridIndex);
|
||||
if (grid != null && axis is XAxis && axis.IsValue())
|
||||
{
|
||||
var relativedAxis = chart.GetChartComponent<YAxis>(axis.gridIndex);
|
||||
axis.context.x = grid.context.x;
|
||||
axis.context.y = AxisHelper.GetXAxisXOrY(grid, axis, relativedAxis);
|
||||
axis.context.zeroY = grid.context.y;
|
||||
axis.context.zeroX = grid.context.x + axis.context.offset;
|
||||
}
|
||||
}
|
||||
|
||||
private void InitXAxis(XAxis xAxis)
|
||||
{
|
||||
var theme = chart.theme;
|
||||
@@ -137,16 +152,9 @@ namespace XCharts.Runtime
|
||||
}
|
||||
}
|
||||
|
||||
protected override float GetAxisLineXOrY()
|
||||
internal override float GetAxisLineXOrY()
|
||||
{
|
||||
var xAxis = component;
|
||||
var grid = chart.GetChartComponent<GridCoord>(xAxis.gridIndex);
|
||||
var startY = grid.context.y + xAxis.offset;
|
||||
if (xAxis.IsTop())
|
||||
startY += grid.context.height;
|
||||
else
|
||||
startY += ComponentHelper.GetXAxisOnZeroOffset(chart.components, xAxis);
|
||||
return startY;
|
||||
return component.context.y;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -21,11 +21,25 @@ namespace XCharts.Runtime
|
||||
|
||||
public override void DrawBase(VertexHelper vh)
|
||||
{
|
||||
UpdatePosition(component);
|
||||
DrawYAxisSplit(vh, component.index, component);
|
||||
DrawYAxisLine(vh, component.index, component);
|
||||
DrawYAxisTick(vh, component.index, component);
|
||||
}
|
||||
|
||||
private void UpdatePosition(YAxis axis)
|
||||
{
|
||||
var grid = chart.GetChartComponent<GridCoord>(axis.gridIndex);
|
||||
if (grid != null && axis.IsValue())
|
||||
{
|
||||
var relativedAxis = chart.GetChartComponent<XAxis>(axis.gridIndex);
|
||||
axis.context.x = AxisHelper.GetYAxisXOrY(grid, axis, relativedAxis);
|
||||
axis.context.y = grid.context.y;
|
||||
axis.context.zeroX = axis.context.x;
|
||||
axis.context.zeroY = axis.context.y + axis.context.offset;
|
||||
}
|
||||
}
|
||||
|
||||
private void InitYAxis(YAxis yAxis)
|
||||
{
|
||||
var theme = chart.theme;
|
||||
@@ -135,16 +149,9 @@ namespace XCharts.Runtime
|
||||
}
|
||||
}
|
||||
|
||||
protected override float GetAxisLineXOrY()
|
||||
internal override float GetAxisLineXOrY()
|
||||
{
|
||||
var yAxis = component;
|
||||
var grid = chart.GetChartComponent<GridCoord>(yAxis.gridIndex);
|
||||
var startX = grid.context.x + yAxis.offset;
|
||||
if (yAxis.IsRight())
|
||||
startX += grid.context.width;
|
||||
else
|
||||
startX += ComponentHelper.GetYAxisOnZeroOffset(chart.components, yAxis);
|
||||
return startX;
|
||||
return component.context.x;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -18,6 +18,7 @@ namespace XCharts.Runtime
|
||||
[SerializeField] protected float m_SplitLineWidth = 1f;
|
||||
[SerializeField] protected float m_SplitLineLength = 0f;
|
||||
[SerializeField] protected Color32 m_SplitLineColor;
|
||||
[SerializeField] protected Color32 m_MinorSplitLineColor;
|
||||
[SerializeField] protected float m_TickWidth = 1f;
|
||||
[SerializeField] protected float m_TickLength = 5f;
|
||||
[SerializeField] protected Color32 m_TickColor;
|
||||
@@ -87,7 +88,7 @@ namespace XCharts.Runtime
|
||||
set { if (PropertyUtil.SetStruct(ref m_SplitLineLength, value)) SetVerticesDirty(); }
|
||||
}
|
||||
/// <summary>
|
||||
/// the color of line.
|
||||
/// the color of split line.
|
||||
/// |分割线线颜色。
|
||||
/// </summary>
|
||||
public Color32 splitLineColor
|
||||
@@ -96,6 +97,15 @@ namespace XCharts.Runtime
|
||||
set { if (PropertyUtil.SetColor(ref m_SplitLineColor, value)) SetVerticesDirty(); }
|
||||
}
|
||||
/// <summary>
|
||||
/// the color of minor split line.
|
||||
/// |次分割线线颜色。
|
||||
/// </summary>
|
||||
public Color32 minorSplitLineColor
|
||||
{
|
||||
get { return ChartHelper.IsClearColor(m_MinorSplitLineColor) ? ColorUtil.GetColor("#F4F7FD") : m_MinorSplitLineColor; }
|
||||
set { if (PropertyUtil.SetColor(ref m_MinorSplitLineColor, value)) SetVerticesDirty(); }
|
||||
}
|
||||
/// <summary>
|
||||
/// the length of tick.
|
||||
/// |刻度线线长。
|
||||
/// </summary>
|
||||
@@ -146,33 +156,36 @@ namespace XCharts.Runtime
|
||||
switch (theme)
|
||||
{
|
||||
case ThemeType.Default:
|
||||
m_LineColor = ColorUtil.GetColor("#514D4D");
|
||||
m_TickColor = ColorUtil.GetColor("#514D4D");
|
||||
m_SplitLineColor = ColorUtil.GetColor("#51515120");
|
||||
m_LineColor = ColorUtil.GetColor("#6E7079");
|
||||
m_TickColor = ColorUtil.GetColor("#6E7079");
|
||||
m_SplitLineColor = ColorUtil.GetColor("#E0E6F1");
|
||||
m_MinorSplitLineColor = ColorUtil.GetColor("#F4F7FD");
|
||||
m_SplitAreaColors = new List<Color32>
|
||||
{
|
||||
new Color32(250, 250, 250, 77),
|
||||
new Color32(200, 200, 200, 77)
|
||||
new Color32(250, 250, 250, 51),
|
||||
new Color32(210, 219, 238, 51)
|
||||
};
|
||||
break;
|
||||
case ThemeType.Light:
|
||||
m_LineColor = ColorUtil.GetColor("#514D4D");
|
||||
m_TickColor = ColorUtil.GetColor("#514D4D");
|
||||
m_SplitLineColor = ColorUtil.GetColor("#51515120");
|
||||
m_LineColor = ColorUtil.GetColor("#6E7079");
|
||||
m_TickColor = ColorUtil.GetColor("#6E7079");
|
||||
m_SplitLineColor = ColorUtil.GetColor("#E0E6F1");
|
||||
m_MinorSplitLineColor = ColorUtil.GetColor("#F4F7FD");
|
||||
m_SplitAreaColors = new List<Color32>
|
||||
{
|
||||
new Color32(250, 250, 250, 77),
|
||||
new Color32(200, 200, 200, 77)
|
||||
new Color32(250, 250, 250, 51),
|
||||
new Color32(210, 219, 238, 51)
|
||||
};
|
||||
break;
|
||||
case ThemeType.Dark:
|
||||
m_LineColor = ColorUtil.GetColor("#B9B8CE");
|
||||
m_TickColor = ColorUtil.GetColor("#B9B8CE");
|
||||
m_SplitLineColor = ColorUtil.GetColor("#484753");
|
||||
m_LineColor = ColorUtil.GetColor("#6E7079");
|
||||
m_TickColor = ColorUtil.GetColor("#6E7079");
|
||||
m_SplitLineColor = ColorUtil.GetColor("#E0E6F1");
|
||||
m_MinorSplitLineColor = ColorUtil.GetColor("#F4F7FD");
|
||||
m_SplitAreaColors = new List<Color32>
|
||||
{
|
||||
new Color32(255, 255, 255, (byte) (0.02f * 255)),
|
||||
new Color32(255, 255, 255, (byte) (0.05f * 255))
|
||||
new Color32(210, 219, 238, (byte) (0.02f * 255))
|
||||
};
|
||||
break;
|
||||
}
|
||||
@@ -199,29 +212,25 @@ namespace XCharts.Runtime
|
||||
[Serializable]
|
||||
public class AxisTheme : BaseAxisTheme
|
||||
{
|
||||
public AxisTheme(ThemeType theme) : base(theme)
|
||||
{ }
|
||||
public AxisTheme(ThemeType theme) : base(theme) { }
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
public class RadiusAxisTheme : BaseAxisTheme
|
||||
{
|
||||
public RadiusAxisTheme(ThemeType theme) : base(theme)
|
||||
{ }
|
||||
public RadiusAxisTheme(ThemeType theme) : base(theme) { }
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
public class AngleAxisTheme : BaseAxisTheme
|
||||
{
|
||||
public AngleAxisTheme(ThemeType theme) : base(theme)
|
||||
{ }
|
||||
public AngleAxisTheme(ThemeType theme) : base(theme) { }
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
public class PolarAxisTheme : BaseAxisTheme
|
||||
{
|
||||
public PolarAxisTheme(ThemeType theme) : base(theme)
|
||||
{ }
|
||||
public PolarAxisTheme(ThemeType theme) : base(theme) { }
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
|
||||
@@ -1,11 +1,14 @@
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
namespace XCharts.Runtime
|
||||
{
|
||||
public static class ColorUtil
|
||||
{
|
||||
private static Dictionary<string, Color32> s_ColorCached = new Dictionary<string, Color32>();
|
||||
public static readonly Color32 clearColor32 = new Color32(0, 0, 0, 0);
|
||||
public static readonly Vector2 zeroVector2 = Vector2.zero;
|
||||
|
||||
/// <summary>
|
||||
/// Convert the html string to color.
|
||||
/// |将字符串颜色值转成Color。
|
||||
@@ -14,9 +17,14 @@ namespace XCharts.Runtime
|
||||
/// <returns></returns>
|
||||
public static Color32 GetColor(string hexColorStr)
|
||||
{
|
||||
if (s_ColorCached.ContainsKey(hexColorStr))
|
||||
{
|
||||
return s_ColorCached[hexColorStr];
|
||||
}
|
||||
Color color;
|
||||
ColorUtility.TryParseHtmlString(hexColorStr, out color);
|
||||
return (Color32) color;
|
||||
s_ColorCached[hexColorStr] = (Color32) color;
|
||||
return s_ColorCached[hexColorStr];
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user