No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ParallelAxisHander.cs 5.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. using UnityEngine;
  2. using UnityEngine.UI;
  3. namespace XCharts.Runtime
  4. {
  5. [UnityEngine.Scripting.Preserve]
  6. internal sealed class ParallelAxisHander : AxisHandler<ParallelAxis>
  7. {
  8. private Orient m_Orient;
  9. private ParallelCoord m_Parallel;
  10. protected override Orient orient { get { return m_Orient; } }
  11. public override void InitComponent()
  12. {
  13. InitParallelAxis(component);
  14. }
  15. public override void Update()
  16. {
  17. UpdateContext(component);
  18. }
  19. public override void DrawBase(VertexHelper vh)
  20. {
  21. UpdateContext(component);
  22. DrawParallelAxisSplit(vh, component);
  23. DrawParallelAxisLine(vh, component);
  24. DrawParallelAxisTick(vh, component);
  25. }
  26. private void UpdateContext(ParallelAxis axis)
  27. {
  28. var parallel = chart.GetChartComponent<ParallelCoord>(axis.parallelIndex);
  29. if (parallel == null)
  30. return;
  31. m_Orient = parallel.orient;
  32. m_Parallel = parallel;
  33. var axisCount = chart.GetChartComponentNum<ParallelAxis>();
  34. if (m_Orient == Orient.Horizonal)
  35. {
  36. var each = axisCount > 1 ? parallel.context.height / (axisCount - 1) : 0;
  37. axis.context.x = parallel.context.x;
  38. axis.context.y = parallel.context.y + (axis.index) * each;
  39. axis.context.width = parallel.context.width;
  40. }
  41. else
  42. {
  43. var each = axisCount > 1 ? parallel.context.width / (axisCount - 1) : 0;
  44. axis.context.x = parallel.context.x + (axis.index) * each;
  45. axis.context.y = parallel.context.y;
  46. axis.context.width = parallel.context.height;
  47. }
  48. axis.context.orient = m_Orient;
  49. axis.context.height = 0;
  50. axis.context.position = new Vector3(axis.context.x, axis.context.y);
  51. }
  52. private void InitParallelAxis(ParallelAxis axis)
  53. {
  54. var theme = chart.theme;
  55. var xAxisIndex = axis.index;
  56. axis.painter = chart.painter;
  57. axis.refreshComponent = delegate()
  58. {
  59. UpdateContext(axis);
  60. InitAxis(null,
  61. m_Orient,
  62. axis.context.x,
  63. axis.context.y,
  64. axis.context.width,
  65. axis.context.height);
  66. };
  67. axis.refreshComponent();
  68. }
  69. internal override void UpdateAxisLabelText(Axis axis)
  70. {
  71. base.UpdateAxisLabelText(axis);
  72. if (axis.IsTime() || axis.IsValue())
  73. {
  74. for (int i = 0; i < axis.context.labelObjectList.Count; i++)
  75. {
  76. var label = axis.context.labelObjectList[i];
  77. if (label != null)
  78. {
  79. var pos = GetLabelPosition(0, i);
  80. label.SetPosition(pos);
  81. CheckValueLabelActive(component, i, label, pos);
  82. }
  83. }
  84. }
  85. }
  86. protected override Vector3 GetLabelPosition(float scaleWid, int i)
  87. {
  88. if (m_Parallel == null)
  89. return Vector3.zero;
  90. return GetLabelPosition(i, m_Orient, component, null,
  91. chart.theme.axis,
  92. scaleWid,
  93. component.context.x,
  94. component.context.y,
  95. component.context.width,
  96. component.context.height);
  97. }
  98. private void DrawParallelAxisSplit(VertexHelper vh, ParallelAxis axis)
  99. {
  100. if (AxisHelper.NeedShowSplit(axis))
  101. {
  102. if (m_Parallel == null)
  103. return;
  104. var dataZoom = chart.GetDataZoomOfAxis(axis);
  105. DrawAxisSplit(vh, chart.theme.axis, dataZoom,
  106. m_Orient,
  107. axis.context.x,
  108. axis.context.y,
  109. axis.context.width,
  110. axis.context.height);
  111. }
  112. }
  113. private void DrawParallelAxisTick(VertexHelper vh, ParallelAxis axis)
  114. {
  115. if (AxisHelper.NeedShowSplit(axis))
  116. {
  117. if (m_Parallel == null)
  118. return;
  119. var dataZoom = chart.GetDataZoomOfAxis(axis);
  120. DrawAxisTick(vh, axis, chart.theme.axis, dataZoom,
  121. m_Orient,
  122. axis.context.x,
  123. axis.context.y,
  124. axis.context.width);
  125. }
  126. }
  127. private void DrawParallelAxisLine(VertexHelper vh, ParallelAxis axis)
  128. {
  129. if (axis.show && axis.axisLine.show)
  130. {
  131. if (m_Parallel == null)
  132. return;
  133. DrawAxisLine(vh, axis,
  134. chart.theme.axis,
  135. m_Orient,
  136. axis.context.x,
  137. axis.context.y,
  138. axis.context.width);
  139. }
  140. }
  141. internal override float GetAxisLineXOrY()
  142. {
  143. return component.context.x;
  144. }
  145. }
  146. }