Keine Beschreibung
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

SerieHandler.cs 26KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616
  1. using System.Collections.Generic;
  2. using System.Text;
  3. using UnityEngine;
  4. using UnityEngine.EventSystems;
  5. using UnityEngine.UI;
  6. namespace XCharts.Runtime
  7. {
  8. public abstract class SerieHandler
  9. {
  10. public BaseChart chart { get; internal set; }
  11. public SerieHandlerAttribute attribute { get; internal set; }
  12. public virtual int defaultDimension { get; internal set; }
  13. public virtual void InitComponent() { }
  14. public virtual void RemoveComponent() { }
  15. public virtual void CheckComponent(StringBuilder sb) { }
  16. public virtual void Update() { }
  17. public virtual void DrawBase(VertexHelper vh) { }
  18. public virtual void DrawSerie(VertexHelper vh) { }
  19. public virtual void DrawUpper(VertexHelper vh) { }
  20. public virtual void DrawTop(VertexHelper vh) { }
  21. public virtual void OnPointerClick(PointerEventData eventData) { }
  22. public virtual void OnPointerDown(PointerEventData eventData) { }
  23. public virtual void OnPointerUp(PointerEventData eventData) { }
  24. public virtual void OnPointerEnter(PointerEventData eventData) { }
  25. public virtual void OnPointerExit(PointerEventData eventData) { }
  26. public virtual void OnDrag(PointerEventData eventData) { }
  27. public virtual void OnBeginDrag(PointerEventData eventData) { }
  28. public virtual void OnEndDrag(PointerEventData eventData) { }
  29. public virtual void OnScroll(PointerEventData eventData) { }
  30. public virtual void RefreshLabelNextFrame() { }
  31. public virtual void RefreshLabelInternal() { }
  32. public virtual void UpdateTooltipSerieParams(int dataIndex, bool showCategory,
  33. string category, string marker,
  34. string itemFormatter, string numericFormatter, string ignoreDataDefaultContent,
  35. ref List<SerieParams> paramList, ref string title) { }
  36. public virtual void OnLegendButtonClick(int index, string legendName, bool show) { }
  37. public virtual void OnLegendButtonEnter(int index, string legendName) { }
  38. public virtual void OnLegendButtonExit(int index, string legendName) { }
  39. internal abstract void SetSerie(Serie serie);
  40. }
  41. public abstract class SerieHandler<T> : SerieHandler where T : Serie
  42. {
  43. private static readonly string s_SerieLabelObjectName = "label";
  44. private static readonly string s_SerieTitleObjectName = "title";
  45. private static readonly string s_SerieRootObjectName = "serie";
  46. private static readonly string s_SerieEndLabelObjectName = "end_label";
  47. protected GameObject m_SerieRoot;
  48. protected GameObject m_SerieLabelRoot;
  49. protected bool m_InitedLabel;
  50. protected bool m_NeedInitComponent;
  51. protected bool m_RefreshLabel;
  52. protected bool m_LastCheckContextFlag = false;
  53. protected bool m_LegendEnter = false;
  54. protected int m_LegendEnterIndex;
  55. protected ChartLabel m_EndLabel;
  56. public T serie { get; internal set; }
  57. public GameObject labelObject { get { return m_SerieLabelRoot; } }
  58. internal override void SetSerie(Serie serie)
  59. {
  60. this.serie = (T) serie;
  61. this.serie.context.param.serieType = typeof(T);
  62. m_NeedInitComponent = true;
  63. AnimationStyleHelper.UpdateSerieAnimation(serie);
  64. }
  65. public override void Update()
  66. {
  67. if (m_NeedInitComponent)
  68. {
  69. m_NeedInitComponent = false;
  70. InitComponent();
  71. }
  72. if (m_RefreshLabel)
  73. {
  74. m_RefreshLabel = false;
  75. RefreshLabelInternal();
  76. RefreshEndLabelInternal();
  77. }
  78. if (serie.dataDirty)
  79. {
  80. SeriesHelper.UpdateSerieNameList(chart, ref chart.m_LegendRealShowName);
  81. serie.OnDataUpdate();
  82. serie.dataDirty = false;
  83. }
  84. if (serie.label != null && (serie.labelDirty || serie.label.componentDirty))
  85. {
  86. serie.labelDirty = false;
  87. serie.label.ClearComponentDirty();
  88. InitSerieLabel();
  89. InitSerieEndLabel();
  90. }
  91. if (serie.endLabel != null && serie.endLabel.componentDirty)
  92. {
  93. serie.endLabel.ClearComponentDirty();
  94. InitSerieEndLabel();
  95. }
  96. if (serie.titleStyle != null && (serie.titleDirty || serie.titleStyle.componentDirty))
  97. {
  98. serie.titleDirty = false;
  99. serie.titleStyle.ClearComponentDirty();
  100. InitSerieTitle();
  101. }
  102. if (serie.nameDirty)
  103. {
  104. foreach (var component in chart.components)
  105. {
  106. if (component is Legend)
  107. component.SetAllDirty();
  108. }
  109. chart.RefreshChart();
  110. serie.ClearSerieNameDirty();
  111. }
  112. if (serie.vertsDirty)
  113. {
  114. chart.RefreshPainter(serie);
  115. serie.ResetInteract();
  116. serie.ClearVerticesDirty();
  117. }
  118. }
  119. public override void RefreshLabelNextFrame()
  120. {
  121. m_RefreshLabel = true;
  122. }
  123. public override void InitComponent()
  124. {
  125. m_InitedLabel = false;
  126. InitRoot();
  127. InitSerieLabel();
  128. InitSerieTitle();
  129. InitSerieEndLabel();
  130. }
  131. public override void RemoveComponent()
  132. {
  133. ChartHelper.SetActive(m_SerieRoot, false);
  134. }
  135. public override void OnLegendButtonClick(int index, string legendName, bool show)
  136. {
  137. if (serie.colorByData && serie.IsSerieDataLegendName(legendName))
  138. {
  139. LegendHelper.CheckDataShow(serie, legendName, show);
  140. chart.UpdateLegendColor(legendName, show);
  141. chart.RefreshPainter(serie);
  142. }
  143. else if (serie.IsLegendName(legendName))
  144. {
  145. chart.SetSerieActive(serie, show);
  146. chart.RefreshPainter(serie);
  147. }
  148. }
  149. public override void OnLegendButtonEnter(int index, string legendName)
  150. {
  151. if (serie.colorByData && serie.IsSerieDataLegendName(legendName))
  152. {
  153. LegendHelper.CheckDataHighlighted(serie, legendName, true);
  154. chart.RefreshPainter(serie);
  155. }
  156. else if (serie.IsLegendName(legendName))
  157. {
  158. m_LegendEnter = true;
  159. chart.RefreshPainter(serie);
  160. }
  161. }
  162. public override void OnLegendButtonExit(int index, string legendName)
  163. {
  164. if (serie.colorByData && serie.IsSerieDataLegendName(legendName))
  165. {
  166. LegendHelper.CheckDataHighlighted(serie, legendName, false);
  167. chart.RefreshPainter(serie);
  168. }
  169. else if (serie.IsLegendName(legendName))
  170. {
  171. m_LegendEnter = false;
  172. chart.RefreshPainter(serie);
  173. }
  174. }
  175. private void InitRoot()
  176. {
  177. if (m_SerieRoot != null)
  178. {
  179. var rect = ChartHelper.GetOrAddComponent<RectTransform>(m_SerieRoot);
  180. rect.localPosition = Vector3.zero;
  181. rect.sizeDelta = chart.chartSizeDelta;
  182. rect.anchorMin = chart.chartMinAnchor;
  183. rect.anchorMax = chart.chartMaxAnchor;
  184. rect.pivot = chart.chartPivot;
  185. return;
  186. }
  187. var objName = s_SerieRootObjectName + "_" + serie.index;
  188. m_SerieRoot = ChartHelper.AddObject(objName, chart.transform, chart.chartMinAnchor,
  189. chart.chartMaxAnchor, chart.chartPivot, chart.chartSizeDelta);
  190. m_SerieRoot.hideFlags = chart.chartHideFlags;
  191. ChartHelper.SetActive(m_SerieRoot, true);
  192. ChartHelper.HideAllObject(m_SerieRoot);
  193. }
  194. private void InitSerieLabel()
  195. {
  196. InitRoot();
  197. m_SerieLabelRoot = ChartHelper.AddObject(s_SerieLabelObjectName, m_SerieRoot.transform,
  198. chart.chartMinAnchor, chart.chartMaxAnchor, chart.chartPivot, chart.chartSizeDelta);
  199. m_SerieLabelRoot.hideFlags = chart.chartHideFlags;
  200. SerieLabelPool.ReleaseAll(m_SerieLabelRoot.transform);
  201. int count = 0;
  202. SerieHelper.UpdateCenter(serie, chart.chartPosition, chart.chartWidth, chart.chartHeight);
  203. for (int j = 0; j < serie.data.Count; j++)
  204. {
  205. var serieData = serie.data[j];
  206. serieData.index = j;
  207. serieData.labelObject = null;
  208. if (AddSerieLabel(m_SerieLabelRoot, serieData, ref count))
  209. {
  210. m_InitedLabel = true;
  211. count++;
  212. }
  213. }
  214. RefreshLabelInternal();
  215. }
  216. protected bool AddSerieLabel(GameObject serieLabelRoot, SerieData serieData, ref int count)
  217. {
  218. if (serieData == null)
  219. return false;
  220. if (serieLabelRoot == null)
  221. return false;
  222. if (serie.IsPerformanceMode())
  223. return false;
  224. if (count == -1) count = serie.dataCount;
  225. var serieLabel = SerieHelper.GetSerieLabel(serie, serieData);
  226. if (serieLabel == null)
  227. {
  228. return false;
  229. }
  230. var dataAutoColor = GetSerieDataAutoColor(serieData);
  231. serieData.context.dataLabels.Clear();
  232. if (serie.multiDimensionLabel)
  233. {
  234. for (int i = 0; i < serieData.data.Count; i++)
  235. {
  236. var textName = string.Format("{0}_{1}_{2}_{3}", s_SerieLabelObjectName, serie.index, serieData.index, i);
  237. var label = ChartHelper.AddChartLabel(textName, serieLabelRoot.transform, serieLabel, chart.theme.common,
  238. "", dataAutoColor, TextAnchor.MiddleCenter);
  239. label.SetActive(serieLabel.show);
  240. serieData.context.dataLabels.Add(label);
  241. }
  242. }
  243. else
  244. {
  245. var textName = ChartCached.GetSerieLabelName(s_SerieLabelObjectName, serie.index, serieData.index);
  246. var label = ChartHelper.AddChartLabel(textName, serieLabelRoot.transform, serieLabel, chart.theme.common,
  247. "", dataAutoColor, TextAnchor.MiddleCenter);
  248. label.SetActive(serieLabel.show);
  249. serieData.labelObject = label;
  250. }
  251. if (serieData.context.children.Count > 0)
  252. {
  253. foreach (var childSerieData in serieData.context.children)
  254. {
  255. AddSerieLabel(serieLabelRoot, childSerieData, ref count);
  256. count++;
  257. }
  258. }
  259. return true;
  260. }
  261. private void InitSerieEndLabel()
  262. {
  263. if (serie.endLabel == null)
  264. {
  265. if (m_EndLabel != null)
  266. {
  267. m_EndLabel.SetActive(false);
  268. m_EndLabel = null;
  269. }
  270. return;
  271. }
  272. InitRoot();
  273. var dataAutoColor = (Color) chart.GetLegendRealShowNameColor(serie.legendName);
  274. m_EndLabel = ChartHelper.AddChartLabel(s_SerieEndLabelObjectName, m_SerieRoot.transform, serie.endLabel,
  275. chart.theme.common, "", dataAutoColor, TextAnchor.MiddleLeft);
  276. m_EndLabel.SetActive(serie.endLabel.show);
  277. RefreshEndLabelInternal();
  278. }
  279. private void InitSerieTitle()
  280. {
  281. InitRoot();
  282. var serieTitleRoot = ChartHelper.AddObject(s_SerieTitleObjectName, m_SerieRoot.transform,
  283. chart.chartMinAnchor, chart.chartMaxAnchor, chart.chartPivot, chart.chartSizeDelta);
  284. serieTitleRoot.hideFlags = chart.chartHideFlags;
  285. SerieLabelPool.ReleaseAll(serieTitleRoot.transform);
  286. ChartHelper.RemoveComponent<Text>(serieTitleRoot);
  287. SerieHelper.UpdateCenter(serie, chart.chartPosition, chart.chartWidth, chart.chartHeight);
  288. if (serie.titleJustForSerie)
  289. {
  290. var titleStyle = SerieHelper.GetTitleStyle(serie, null);
  291. if (titleStyle != null)
  292. {
  293. var color = chart.GetItemColor(serie, null);
  294. var content = string.Empty;
  295. if (string.IsNullOrEmpty(titleStyle.formatter))
  296. {
  297. content = serie.serieName;
  298. }
  299. else
  300. {
  301. content = titleStyle.formatter;
  302. FormatterHelper.ReplaceContent(ref content, 0, titleStyle.numericFormatter, serie, chart);
  303. }
  304. var label = ChartHelper.AddChartLabel("title_" + 0, serieTitleRoot.transform, titleStyle, chart.theme.common,
  305. content, color, TextAnchor.MiddleCenter);
  306. serie.context.titleObject = label;
  307. label.SetActive(titleStyle.show);
  308. var labelPosition = GetSerieDataTitlePosition(null, titleStyle);
  309. var offset = titleStyle.GetOffset(serie.context.insideRadius);
  310. label.SetPosition(labelPosition + offset);
  311. }
  312. }
  313. else
  314. {
  315. for (int i = 0; i < serie.dataCount; i++)
  316. {
  317. var serieData = serie.data[i];
  318. var titleStyle = SerieHelper.GetTitleStyle(serie, serieData);
  319. if (titleStyle == null) continue;
  320. var color = chart.GetItemColor(serie, serieData);
  321. var content = string.Empty;
  322. if (string.IsNullOrEmpty(titleStyle.formatter))
  323. {
  324. content = serieData.name;
  325. }
  326. else
  327. {
  328. content = titleStyle.formatter;
  329. FormatterHelper.ReplaceContent(ref content, 0, titleStyle.numericFormatter, serie, chart);
  330. }
  331. FormatterHelper.ReplaceContent(ref content, i, titleStyle.numericFormatter, serie, chart);
  332. var label = ChartHelper.AddChartLabel("title_" + i, serieTitleRoot.transform, titleStyle, chart.theme.common,
  333. content, color, TextAnchor.MiddleCenter);
  334. serieData.titleObject = label;
  335. label.SetActive(titleStyle.show);
  336. var labelPosition = GetSerieDataTitlePosition(serieData, titleStyle);
  337. var offset = titleStyle.GetOffset(serie.context.insideRadius);
  338. label.SetPosition(labelPosition + offset);
  339. }
  340. }
  341. }
  342. public override void RefreshLabelInternal()
  343. {
  344. if (!m_InitedLabel)
  345. return;
  346. var dataChangeDuration = serie.animation.GetUpdateAnimationDuration();
  347. var unscaledTime = serie.animation.unscaledTime;
  348. var needCheck = serie.context.dataIndexs.Count > 0;
  349. foreach (var serieData in serie.data)
  350. {
  351. if (serieData.labelObject == null && serieData.context.dataLabels.Count <= 0)
  352. {
  353. continue;
  354. }
  355. if (needCheck && !serie.context.dataIndexs.Contains(serieData.index))
  356. {
  357. serieData.SetLabelActive(false);
  358. continue;
  359. };
  360. var currLabel = SerieHelper.GetSerieLabel(serie, serieData);
  361. var isIgnore = serie.IsIgnoreIndex(serieData.index, defaultDimension);
  362. if (serie.show &&
  363. currLabel != null &&
  364. serieData.context.canShowLabel &&
  365. !isIgnore)
  366. {
  367. if (serie.multiDimensionLabel)
  368. {
  369. var total = serieData.GetTotalData();
  370. var color = chart.GetItemColor(serie, serieData);
  371. for (int i = 0; i < serieData.context.dataLabels.Count; i++)
  372. {
  373. if (i >= serieData.context.dataPoints.Count) continue;
  374. var labelObject = serieData.context.dataLabels[i];
  375. var value = serieData.GetCurrData(i, dataChangeDuration, unscaledTime);
  376. var content = string.IsNullOrEmpty(currLabel.formatter) ?
  377. ChartCached.NumberToStr(value, currLabel.numericFormatter) :
  378. SerieLabelHelper.GetFormatterContent(serie, serieData, value, total,
  379. currLabel, color);
  380. var offset = GetSerieDataLabelOffset(serieData, currLabel);
  381. labelObject.SetActive(currLabel.show && !isIgnore);
  382. labelObject.SetText(content);
  383. labelObject.SetPosition(serieData.context.dataPoints[i] + offset);
  384. labelObject.UpdateIcon(currLabel.icon);
  385. if (currLabel.textStyle.autoColor)
  386. {
  387. var dataAutoColor = GetSerieDataAutoColor(serieData);
  388. if (!ChartHelper.IsClearColor(dataAutoColor))
  389. labelObject.SetTextColor(dataAutoColor);
  390. }
  391. }
  392. }
  393. else
  394. {
  395. var value = serieData.GetCurrData(defaultDimension, dataChangeDuration, unscaledTime);
  396. var total = serie.GetDataTotal(defaultDimension, serieData);
  397. var color = chart.GetItemColor(serie, serieData);
  398. var content = string.IsNullOrEmpty(currLabel.formatter) ?
  399. ChartCached.NumberToStr(value, currLabel.numericFormatter) :
  400. SerieLabelHelper.GetFormatterContent(serie, serieData, value, total,
  401. currLabel, color);
  402. serieData.SetLabelActive(currLabel.show && !isIgnore);
  403. serieData.labelObject.UpdateIcon(currLabel.icon);
  404. serieData.labelObject.SetText(content);
  405. UpdateLabelPosition(serieData, currLabel);
  406. if (currLabel.textStyle.autoColor)
  407. {
  408. var dataAutoColor = GetSerieDataAutoColor(serieData);
  409. if (!ChartHelper.IsClearColor(dataAutoColor))
  410. serieData.labelObject.SetTextColor(dataAutoColor);
  411. }
  412. }
  413. }
  414. else
  415. {
  416. serieData.SetLabelActive(false);
  417. }
  418. }
  419. }
  420. public virtual void RefreshEndLabelInternal()
  421. {
  422. if (m_EndLabel == null)
  423. return;
  424. var endLabelStyle = serie.endLabel;
  425. if (endLabelStyle == null)
  426. return;
  427. var dataCount = serie.context.dataPoints.Count;
  428. var active = endLabelStyle.show && dataCount > 0;
  429. m_EndLabel.SetActive(active);
  430. if (active)
  431. {
  432. var value = serie.context.lineEndValue;
  433. var content = SerieLabelHelper.GetFormatterContent(serie, null, value, 0,
  434. endLabelStyle, Color.clear);
  435. m_EndLabel.SetText(content);
  436. m_EndLabel.SetPosition(serie.context.lineEndPostion + endLabelStyle.offset);
  437. }
  438. m_EndLabel.isAnimationEnd = serie.animation.IsFinish();
  439. }
  440. private void UpdateLabelPosition(SerieData serieData, LabelStyle currLabel)
  441. {
  442. var labelPosition = GetSerieDataLabelPosition(serieData, currLabel);
  443. var offset = GetSerieDataLabelOffset(serieData, currLabel);
  444. serieData.labelObject.SetPosition(labelPosition + offset);
  445. }
  446. public virtual Vector3 GetSerieDataLabelPosition(SerieData serieData, LabelStyle label)
  447. {
  448. return ChartHelper.IsZeroVector(serieData.context.labelPosition) ?
  449. serieData.context.position :
  450. serieData.context.labelPosition;
  451. }
  452. public virtual Vector3 GetSerieDataLabelOffset(SerieData serieData, LabelStyle label)
  453. {
  454. return label.GetOffset(serie.context.insideRadius);
  455. }
  456. public virtual Vector3 GetSerieDataTitlePosition(SerieData serieData, TitleStyle titleStyle)
  457. {
  458. return serieData.context.position;
  459. }
  460. public virtual Color GetSerieDataAutoColor(SerieData serieData)
  461. {
  462. var colorIndex = serie.colorByData ? serieData.index : serie.index;
  463. Color32 color, toColor;
  464. SerieHelper.GetItemColor(out color, out toColor, serie, serieData, chart.theme, colorIndex, SerieState.Normal, false);
  465. return (Color) color;
  466. }
  467. protected void UpdateCoordSerieParams(ref List<SerieParams> paramList, ref string title,
  468. int dataIndex, bool showCategory, string category, string marker,
  469. string itemFormatter, string numericFormatter, string ignoreDataDefaultContent)
  470. {
  471. var dimension = 1;
  472. if (dataIndex < 0)
  473. dataIndex = serie.context.pointerItemDataIndex;
  474. if (dataIndex < 0)
  475. return;
  476. var serieData = serie.GetSerieData(dataIndex);
  477. if (serieData == null)
  478. return;
  479. var ignore = serie.IsIgnoreValue(serieData, dimension);
  480. if (ignore && string.IsNullOrEmpty(ignoreDataDefaultContent))
  481. return;
  482. itemFormatter = SerieHelper.GetItemFormatter(serie, serieData, itemFormatter);
  483. if (serie.placeHolder || TooltipHelper.IsIgnoreFormatter(itemFormatter))
  484. return;
  485. var param = serie.context.param;
  486. param.serieName = serie.serieName;
  487. param.serieIndex = serie.index;
  488. param.category = category;
  489. param.dimension = dimension;
  490. param.serieData = serieData;
  491. param.dataCount = serie.dataCount;
  492. param.value = serieData.GetData(dimension);
  493. param.ignore = ignore;
  494. param.total = serie.yTotal;
  495. param.color = chart.GetMarkColor(serie, serieData);
  496. param.marker = SerieHelper.GetItemMarker(serie, serieData, marker);
  497. param.itemFormatter = itemFormatter;
  498. param.numericFormatter = SerieHelper.GetNumericFormatter(serie, serieData, numericFormatter);
  499. param.columns.Clear();
  500. param.columns.Add(param.marker);
  501. param.columns.Add(showCategory ? category : serie.serieName);
  502. param.columns.Add(ignore?ignoreDataDefaultContent : ChartCached.NumberToStr(param.value, param.numericFormatter));
  503. paramList.Add(param);
  504. }
  505. protected void UpdateItemSerieParams(ref List<SerieParams> paramList, ref string title,
  506. int dataIndex, string category, string marker,
  507. string itemFormatter, string numericFormatter, string ignoreDataDefaultContent,
  508. int dimension = 1, int colorIndex = -1)
  509. {
  510. if (dataIndex < 0)
  511. dataIndex = serie.context.pointerItemDataIndex;
  512. if (dataIndex < 0)
  513. return;
  514. var serieData = serie.GetSerieData(dataIndex);
  515. if (serieData == null)
  516. return;
  517. var ignore = serie.IsIgnoreValue(serieData, dimension);
  518. if (ignore && string.IsNullOrEmpty(ignoreDataDefaultContent))
  519. return;
  520. itemFormatter = SerieHelper.GetItemFormatter(serie, serieData, itemFormatter);
  521. if (serie.placeHolder || TooltipHelper.IsIgnoreFormatter(itemFormatter))
  522. return;
  523. if (colorIndex < 0)
  524. colorIndex = serie.colorByData?dataIndex : chart.GetLegendRealShowNameIndex(serieData.name);
  525. Color32 color, toColor;
  526. SerieHelper.GetItemColor(out color, out toColor, serie, serieData, chart.theme, colorIndex, SerieState.Normal);
  527. var param = serie.context.param;
  528. param.serieName = serie.serieName;
  529. param.serieIndex = serie.index;
  530. param.category = category;
  531. param.dimension = dimension;
  532. param.serieData = serieData;
  533. param.dataCount = serie.dataCount;
  534. param.value = serieData.GetData(param.dimension);
  535. param.ignore = ignore;
  536. param.total = serie.multiDimensionLabel? serieData.GetTotalData() : serie.GetDataTotal(defaultDimension);
  537. param.color = color;
  538. param.marker = SerieHelper.GetItemMarker(serie, serieData, marker);
  539. param.itemFormatter = itemFormatter;
  540. param.numericFormatter = SerieHelper.GetNumericFormatter(serie, serieData, numericFormatter);
  541. param.columns.Clear();
  542. param.columns.Add(param.marker);
  543. param.columns.Add(serieData.name);
  544. param.columns.Add(ignore?ignoreDataDefaultContent : ChartCached.NumberToStr(param.value, param.numericFormatter));
  545. paramList.Add(param);
  546. }
  547. public void DrawLabelLineSymbol(VertexHelper vh, LabelLine labelLine, Vector3 startPos, Vector3 endPos, Color32 defaultColor)
  548. {
  549. if (labelLine.startSymbol != null && labelLine.startSymbol.show)
  550. {
  551. DrawSymbol(vh, labelLine.startSymbol, startPos, defaultColor);
  552. }
  553. if (labelLine.endSymbol != null && labelLine.endSymbol.show)
  554. {
  555. DrawSymbol(vh, labelLine.endSymbol, endPos, defaultColor);
  556. }
  557. }
  558. private void DrawSymbol(VertexHelper vh, SymbolStyle symbol, Vector3 pos, Color32 defaultColor)
  559. {
  560. var color = symbol.GetColor(defaultColor);
  561. chart.DrawSymbol(vh, symbol.type, symbol.size, 1, pos,
  562. color, color, ColorUtil.clearColor32, color, symbol.gap, null);
  563. }
  564. }
  565. }