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.

AxisContext.cs 4.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. using System;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. namespace XCharts.Runtime
  5. {
  6. public class AxisContext : MainComponentContext
  7. {
  8. public Orient orient;
  9. /// <summary>
  10. /// 坐标轴的起点X
  11. /// </summary>
  12. public float x;
  13. /// <summary>
  14. /// 坐标轴的起点Y
  15. /// </summary>
  16. public float y;
  17. /// <summary>
  18. /// 坐标轴原点X
  19. /// </summary>
  20. public float zeroX;
  21. /// <summary>
  22. /// 坐标轴原点Y
  23. /// </summary>
  24. public float zeroY;
  25. public float width;
  26. public float height;
  27. public Vector3 position;
  28. public float left;
  29. public float right;
  30. public float bottom;
  31. public float top;
  32. /// <summary>
  33. /// the current minimun value.
  34. /// |当前最小值。
  35. /// </summary>
  36. public double minValue;
  37. /// <summary>
  38. /// the current maximum value.
  39. /// |当前最大值。
  40. /// </summary>
  41. public double maxValue;
  42. /// <summary>
  43. /// the offset of zero position.
  44. /// |坐标轴原点在坐标轴的偏移。
  45. /// </summary>
  46. public float offset;
  47. public double minMaxRange;
  48. /// <summary>
  49. /// the tick value of value axis.
  50. /// |数值轴时每个tick的数值。
  51. /// </summary>
  52. public double tickValue;
  53. public float scaleWidth;
  54. public float startAngle;
  55. public double pointerValue;
  56. public Vector3 pointerLabelPosition;
  57. public double axisTooltipValue;
  58. public TextAnchor aligment;
  59. public List<string> runtimeData { get { return m_RuntimeData; } }
  60. public List<double> labelValueList { get { return m_LabelValueList; } }
  61. public List<ChartLabel> labelObjectList { get { return m_AxisLabelList; } }
  62. public int dataZoomStartIndex;
  63. internal List<string> filterData;
  64. internal bool lastCheckInverse;
  65. internal bool isNeedUpdateFilterData;
  66. private int filterStart;
  67. private int filterEnd;
  68. private int filterMinShow;
  69. private List<ChartLabel> m_AxisLabelList = new List<ChartLabel>();
  70. private List<double> m_LabelValueList = new List<double>();
  71. private List<string> m_RuntimeData = new List<string>();
  72. internal void Clear()
  73. {
  74. m_RuntimeData.Clear();
  75. }
  76. private List<string> m_EmptyFliter = new List<string>();
  77. /// <summary>
  78. /// 更新dataZoom对应的类目数据列表
  79. /// </summary>
  80. /// <param name="dataZoom"></param>
  81. internal void UpdateFilterData(List<string> data, DataZoom dataZoom)
  82. {
  83. int start = 0, end = 0;
  84. var range = Mathf.RoundToInt(data.Count * (dataZoom.end - dataZoom.start) / 100);
  85. if (range <= 0)
  86. range = 1;
  87. if (dataZoom.context.invert)
  88. {
  89. end = Mathf.RoundToInt(data.Count * dataZoom.end / 100);
  90. start = end - range;
  91. if (start < 0) start = 0;
  92. }
  93. else
  94. {
  95. start = Mathf.RoundToInt(data.Count * dataZoom.start / 100);
  96. end = start + range;
  97. if (end > data.Count) end = data.Count;
  98. }
  99. if (start != filterStart ||
  100. end != filterEnd ||
  101. dataZoom.minShowNum != filterMinShow ||
  102. isNeedUpdateFilterData)
  103. {
  104. filterStart = start;
  105. filterEnd = end;
  106. filterMinShow = dataZoom.minShowNum;
  107. isNeedUpdateFilterData = false;
  108. if (data.Count > 0)
  109. {
  110. if (range < dataZoom.minShowNum)
  111. {
  112. if (dataZoom.minShowNum > data.Count)
  113. range = data.Count;
  114. else
  115. range = dataZoom.minShowNum;
  116. }
  117. if (range > data.Count - start)
  118. start = data.Count - range;
  119. if (start >= 0)
  120. {
  121. dataZoomStartIndex = start;
  122. filterData = data.GetRange(start, range);
  123. }
  124. else
  125. {
  126. dataZoomStartIndex = 0;
  127. filterData = data;
  128. }
  129. }
  130. else
  131. {
  132. dataZoomStartIndex = 0;
  133. filterData = data;
  134. }
  135. }
  136. else if (end == 0)
  137. {
  138. dataZoomStartIndex = 0;
  139. filterData = m_EmptyFliter;
  140. }
  141. }
  142. }
  143. }