| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 | using UnityEngine;using UnityEngine.UI;namespace XCharts.Runtime{    [UnityEngine.Scripting.Preserve]    internal sealed class ParallelAxisHander : AxisHandler<ParallelAxis>    {        private Orient m_Orient;        private ParallelCoord m_Parallel;        protected override Orient orient { get { return m_Orient; } }        public override void InitComponent()        {            InitParallelAxis(component);        }        public override void Update()        {            UpdateContext(component);        }        public override void DrawBase(VertexHelper vh)        {            UpdateContext(component);            DrawParallelAxisSplit(vh, component);            DrawParallelAxisLine(vh, component);            DrawParallelAxisTick(vh, component);        }        private void UpdateContext(ParallelAxis axis)        {            var parallel = chart.GetChartComponent<ParallelCoord>(axis.parallelIndex);            if (parallel == null)                return;            m_Orient = parallel.orient;            m_Parallel = parallel;            var axisCount = chart.GetChartComponentNum<ParallelAxis>();            if (m_Orient == Orient.Horizonal)            {                var each = axisCount > 1 ? parallel.context.height / (axisCount - 1) : 0;                axis.context.x = parallel.context.x;                axis.context.y = parallel.context.y + (axis.index) * each;                axis.context.width = parallel.context.width;            }            else            {                var each = axisCount > 1 ? parallel.context.width / (axisCount - 1) : 0;                axis.context.x = parallel.context.x + (axis.index) * each;                axis.context.y = parallel.context.y;                axis.context.width = parallel.context.height;            }            axis.context.orient = m_Orient;            axis.context.height = 0;            axis.context.position = new Vector3(axis.context.x, axis.context.y);        }        private void InitParallelAxis(ParallelAxis axis)        {            var theme = chart.theme;            var xAxisIndex = axis.index;            axis.painter = chart.painter;            axis.refreshComponent = delegate()            {                UpdateContext(axis);                InitAxis(null,                    m_Orient,                    axis.context.x,                    axis.context.y,                    axis.context.width,                    axis.context.height);            };            axis.refreshComponent();        }        internal override void UpdateAxisLabelText(Axis axis)        {            base.UpdateAxisLabelText(axis);            if (axis.IsTime() || axis.IsValue())            {                for (int i = 0; i < axis.context.labelObjectList.Count; i++)                {                    var label = axis.context.labelObjectList[i];                    if (label != null)                    {                        var pos = GetLabelPosition(0, i);                        label.SetPosition(pos);                        CheckValueLabelActive(component, i, label, pos);                    }                }            }        }        protected override Vector3 GetLabelPosition(float scaleWid, int i)        {            if (m_Parallel == null)                return Vector3.zero;            return GetLabelPosition(i, m_Orient, component, null,                chart.theme.axis,                scaleWid,                component.context.x,                component.context.y,                component.context.width,                component.context.height);        }        private void DrawParallelAxisSplit(VertexHelper vh, ParallelAxis axis)        {            if (AxisHelper.NeedShowSplit(axis))            {                if (m_Parallel == null)                    return;                var dataZoom = chart.GetDataZoomOfAxis(axis);                DrawAxisSplit(vh, chart.theme.axis, dataZoom,                    m_Orient,                    axis.context.x,                    axis.context.y,                    axis.context.width,                    axis.context.height);            }        }        private void DrawParallelAxisTick(VertexHelper vh, ParallelAxis axis)        {            if (AxisHelper.NeedShowSplit(axis))            {                if (m_Parallel == null)                    return;                var dataZoom = chart.GetDataZoomOfAxis(axis);                DrawAxisTick(vh, axis, chart.theme.axis, dataZoom,                    m_Orient,                    axis.context.x,                    axis.context.y,                    axis.context.width);            }        }        private void DrawParallelAxisLine(VertexHelper vh, ParallelAxis axis)        {            if (axis.show && axis.axisLine.show)            {                if (m_Parallel == null)                    return;                DrawAxisLine(vh, axis,                    chart.theme.axis,                    m_Orient,                    axis.context.x,                    axis.context.y,                    axis.context.width);            }        }        internal override float GetAxisLineXOrY()        {            return component.context.x;        }    }}
 |