NoDataPlot.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Drawing;
  4. using System.Numerics;
  5. using System.Text;
  6. using Veldrid.Common.Tools;
  7. using Veldrid.Common.VeldridRender;
  8. namespace Veldrid.Common.Plot
  9. {
  10. internal class NoDataPlot : BaseRender
  11. {
  12. private VeldridRender.TextRender.VeldridText veldridText;
  13. private VeldridRender.LineRender.DataRender dataRender;
  14. private Vector2[] _Points = new Vector2[4];
  15. public NoDataPlot(IVeldridContent control) : base(control)
  16. {
  17. veldridText = new VeldridRender.TextRender.VeldridText(control,true);
  18. veldridText.CreateResources();
  19. veldridText.Local = new PointF((LineRange.MaxX + LineRange.MinX) / 2, 0);
  20. veldridText.FontStyle = "Semibold";
  21. veldridText.FontSize = 16;
  22. veldridText.VerticalAlignment = VeldridRender.TextRender.VerticalAlignment.Center;
  23. veldridText.HorizontalAlignment = VeldridRender.TextRender.HorizontalAlignment.Center;
  24. veldridText.Text = "No Data";
  25. dataRender = new VeldridRender.LineRender.DataRender(control, 4);
  26. dataRender.DataRenderConfigs = new VeldridRender.LineRender.DataRenderConfig[]
  27. {
  28. new VeldridRender.LineRender.DataRenderConfig()
  29. {
  30. PointConfigs = new VeldridRender.LineRender.PointConfig[]
  31. {
  32. new VeldridRender.LineRender.PointConfig()
  33. {
  34. Brightness = 100,
  35. PointCounts = new VeldridRender.LineRender.PointVisibily[1]{4 },
  36. }
  37. },
  38. DataLenght =4,
  39. FixedDataLenght =4,
  40. Primitive = PrimitiveTopology.LineList,
  41. }
  42. };
  43. dataRender.Visibily = true;
  44. dataRender.CreateResources();
  45. (this as IRender).Children.Add(dataRender);
  46. CalcPoints();
  47. }
  48. private protected override BaseVeldridRender Renderer => veldridText;
  49. public String Text
  50. {
  51. get => veldridText.Text;
  52. set
  53. {
  54. if (veldridText.Text != value && !String.IsNullOrEmpty(value))
  55. {
  56. veldridText.Text = value;
  57. CalcPoints();
  58. }
  59. }
  60. }
  61. public String FontStyle { get => veldridText.FontStyle; set => veldridText.FontStyle = value; }
  62. public String FontName { get => veldridText.FontName;set=> veldridText.FontName = value; }
  63. public Single FontSize { get => veldridText.FontSize; set => veldridText.FontSize = value; }
  64. public Color Color
  65. {
  66. get => veldridText.Color;
  67. set
  68. {
  69. veldridText.Color = value;
  70. dataRender.DataRenderConfigs[0].PointConfigs[0].Color = value;
  71. }
  72. }
  73. private Single _Local = 0;
  74. public float Local
  75. {
  76. get => _Local;
  77. set
  78. {
  79. if(_Local!=value)
  80. {
  81. float temp = value;
  82. if(value > LineRange.MaxY)
  83. {
  84. temp = LineRange.MaxY;
  85. }
  86. if(value < LineRange.MinY)
  87. {
  88. temp = LineRange.MinY;
  89. }
  90. veldridText.Local = new PointF((LineRange.MaxX + LineRange.MinX) / 2, temp);
  91. for(Int32 index = 0; index < _Points.Length;index++)
  92. {
  93. _Points[index].Y = temp;
  94. }
  95. dataRender.WriteData(0, _Points);
  96. _Local = temp;
  97. }
  98. }
  99. }
  100. private void CalcPoints()
  101. {
  102. var nodatasize = this.LocalSizeToVirtualSize(veldridText.MeasureSize(veldridText.Text));
  103. _Points[0] = new Vector2(LineRange.MinX, Local);
  104. _Points[1] = new Vector2(LineRange.MinX + (LineRange.XLenght - nodatasize.X - 100) / 2, Local);
  105. _Points[2] = new Vector2(_Points[1].X + 100 + nodatasize.X, Local);
  106. _Points[3] = new Vector2(LineRange.MaxX, Local);
  107. dataRender.WriteData(0, _Points);
  108. }
  109. }
  110. }