增加AxisLine配置坐标轴轴线和箭头

This commit is contained in:
monitor1394
2019-07-09 22:20:50 +08:00
parent 530b0228a7
commit d3f7980a6d
5 changed files with 150 additions and 26 deletions

View File

@@ -59,6 +59,41 @@ namespace XCharts
}
}
[System.Serializable]
public class AxisLine
{
[SerializeField] private bool m_Show;
[SerializeField] private bool m_Symbol;
[SerializeField] private float m_SymbolWidth;
[SerializeField] private float m_SymbolHeight;
[SerializeField] private float m_SymbolOffset;
[SerializeField] private float m_SymbolDent;
public bool show { get { return m_Show; } set { m_Show = value; } }
public bool symbol { get { return m_Symbol; } set { m_Symbol = value; } }
public float symbolWidth { get { return m_SymbolWidth; } set { m_SymbolWidth = value; } }
public float symbolHeight { get { return m_SymbolHeight; } set { m_SymbolHeight = value; } }
public float symbolOffset { get { return m_SymbolOffset; } set { m_SymbolOffset = value; } }
public float symbolDent { get { return m_SymbolDent; } set { m_SymbolDent = value; } }
public static AxisLine defaultAxisLine
{
get
{
var axisLine = new AxisLine
{
m_Show = true,
m_Symbol = false,
m_SymbolWidth = 10,
m_SymbolHeight = 15,
m_SymbolOffset = 0,
m_SymbolDent = 3,
};
return axisLine;
}
}
}
[Serializable]
public class AxisName
{
@@ -267,6 +302,7 @@ namespace XCharts
[SerializeField] protected SplitLineType m_SplitLineType = SplitLineType.Dashed;
[SerializeField] protected bool m_BoundaryGap = true;
[SerializeField] protected List<string> m_Data = new List<string>();
[SerializeField] protected AxisLine m_AxisLine = AxisLine.defaultAxisLine;
[SerializeField] protected AxisName m_AxisName = AxisName.defaultAxisName;
[SerializeField] protected AxisTick m_AxisTick = AxisTick.defaultTick;
[SerializeField] protected AxisLabel m_AxisLabel = AxisLabel.defaultAxisLabel;
@@ -283,6 +319,7 @@ namespace XCharts
public bool boundaryGap { get { return m_BoundaryGap; } set { m_BoundaryGap = value; } }
public List<string> data { get { return m_Data; } }
public AxisLine axisLine { get { return m_AxisLine; } set { m_AxisLine = value; } }
public AxisName axisName { get { return m_AxisName; } set { m_AxisName = value; } }
public AxisTick axisTick { get { return m_AxisTick; } set { m_AxisTick = value; } }
public AxisLabel axisLabel { get { return m_AxisLabel; } set { m_AxisLabel = value; } }

View File

@@ -639,39 +639,58 @@ namespace XCharts
}
#endregion
#region draw x,y axis
if (m_YAxis.show)
{
if (m_YAxis.type == Axis.AxisType.Value)
{
ChartHelper.DrawLine(vh, new Vector3(coordinateX, coordinateY - m_Coordinate.tickness),
new Vector3(coordinateX, coordinateY + coordinateHig + m_Coordinate.tickness),
m_Coordinate.tickness, m_ThemeInfo.axisLineColor);
}
else
{
ChartHelper.DrawLine(vh, new Vector3(zeroX, coordinateY - m_Coordinate.tickness),
new Vector3(zeroX, coordinateY + coordinateHig + m_Coordinate.tickness),
m_Coordinate.tickness, m_ThemeInfo.axisLineColor);
}
DrawXAxisLine(vh);
DrawYAxisLine(vh);
}
}
if (m_XAxis.show)
private void DrawXAxisLine(VertexHelper vh)
{
if (m_XAxis.show && m_XAxis.axisLine.show)
{
var lineY = zeroY;
if (m_XAxis.type == Axis.AxisType.Value)
{
ChartHelper.DrawLine(vh, new Vector3(coordinateX - m_Coordinate.tickness, coordinateY),
new Vector3(coordinateX + coordinateWid + m_Coordinate.tickness, coordinateY),
m_Coordinate.tickness, m_ThemeInfo.axisLineColor);
lineY = coordinateY;
}
else
var top = new Vector3(coordinateX + coordinateWid + m_Coordinate.tickness, lineY);
ChartHelper.DrawLine(vh, new Vector3(coordinateX - m_Coordinate.tickness, lineY),
top, m_Coordinate.tickness, m_ThemeInfo.axisLineColor);
if (m_XAxis.axisLine.symbol)
{
ChartHelper.DrawLine(vh, new Vector3(coordinateX - m_Coordinate.tickness, zeroY),
new Vector3(coordinateX + coordinateWid + m_Coordinate.tickness, zeroY),
m_Coordinate.tickness, m_ThemeInfo.axisLineColor);
var axisLine = m_XAxis.axisLine;
top.x += m_XAxis.axisLine.symbolOffset;
var middle = new Vector3(top.x - axisLine.symbolHeight + axisLine.symbolDent, lineY);
var left = new Vector3(top.x - axisLine.symbolHeight, lineY - axisLine.symbolWidth / 2);
var right = new Vector3(top.x - axisLine.symbolHeight, lineY + axisLine.symbolWidth / 2);
ChartHelper.DrawTriangle(vh, middle, top, left, m_ThemeInfo.axisLineColor);
ChartHelper.DrawTriangle(vh, middle, top, right, m_ThemeInfo.axisLineColor);
}
}
}
private void DrawYAxisLine(VertexHelper vh)
{
if (m_YAxis.show && m_YAxis.axisLine.show)
{
var lineX = zeroX;
if (m_YAxis.type == Axis.AxisType.Value)
{
lineX = coordinateX;
}
var top = new Vector3(lineX, coordinateY + coordinateHig + m_Coordinate.tickness);
ChartHelper.DrawLine(vh, new Vector3(lineX, coordinateY - m_Coordinate.tickness),
top, m_Coordinate.tickness, m_ThemeInfo.axisLineColor);
if (m_YAxis.axisLine.symbol)
{
var axisLine = m_YAxis.axisLine;
top.y += m_YAxis.axisLine.symbolOffset;
var middle = new Vector3(lineX, top.y - axisLine.symbolHeight + axisLine.symbolDent);
var left = new Vector3(lineX - axisLine.symbolWidth / 2, top.y - axisLine.symbolHeight);
var right = new Vector3(lineX + axisLine.symbolWidth / 2, top.y - axisLine.symbolHeight);
ChartHelper.DrawTriangle(vh, middle, top, left, m_ThemeInfo.axisLineColor);
ChartHelper.DrawTriangle(vh, middle, top, right, m_ThemeInfo.axisLineColor);
}
}
#endregion
}
private void DrawDataZoom(VertexHelper vh)