CurveForm.cs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. using DevExpress.XtraCharts;
  2. using DevExpress.XtraEditors;
  3. using GCAS.Dto;
  4. using Newtonsoft.Json;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Drawing;
  8. using System.Linq;
  9. using System.Windows.Forms;
  10. namespace GCAS.Record
  11. {
  12. public partial class CurveForm : XtraForm
  13. {
  14. public CurveForm(string jsonData, string effectData)
  15. {
  16. InitializeComponent();
  17. JsonData = jsonData;
  18. EffectData = effectData;
  19. }
  20. public string JsonData { get; private set; }
  21. public string EffectData { get; private set; }
  22. private void CurveForm_Load(object sender, EventArgs e)
  23. {
  24. List<WeightDto> weights = new List<WeightDto>();
  25. List<WeightDto> effectWeights = new List<WeightDto>();
  26. if (!string.IsNullOrEmpty(JsonData))
  27. {
  28. try
  29. {
  30. weights = JsonConvert.DeserializeObject<List<WeightDto>>(JsonData);
  31. effectWeights = JsonConvert.DeserializeObject<List<WeightDto>>(EffectData);
  32. if (weights == null || !weights.Any())
  33. {
  34. DialogResult = DialogResult.Abort;
  35. return;
  36. }
  37. }
  38. catch (Exception)
  39. {
  40. DialogResult = DialogResult.Abort;
  41. }
  42. // Create a Chart Control object and add it to the form.
  43. ChartControl chart = new ChartControl
  44. {
  45. Dock = DockStyle.Fill
  46. };
  47. Controls.Add(chart);
  48. // Create a line series, bind it to data and add to the chart.
  49. Series series = new Series("净重", ViewType.Line)
  50. {
  51. DataSource = weights.Select(c => new DataPointDto(c.Time, c.Weight / 1000F)),
  52. ArgumentDataMember = "Date"
  53. };
  54. series.ValueDataMembers.AddRange("Value");
  55. chart.Series.Add(series);
  56. // Enable series markers.
  57. LineSeriesView view = (LineSeriesView)series.View;
  58. view.MarkerVisibility = DevExpress.Utils.DefaultBoolean.True;
  59. // Display series labels and customize their text format.
  60. series.LabelsVisibility = DevExpress.Utils.DefaultBoolean.True;
  61. series.Label.ResolveOverlappingMode = ResolveOverlappingMode.HideOverlapped;
  62. series.Label.TextPattern = "{V:.###}T";
  63. // Create a chart title.
  64. ChartTitle chartTitle = new ChartTitle
  65. {
  66. Text = "称重曲线"
  67. };
  68. chart.Titles.Add(chartTitle);
  69. // Customize axes.
  70. XYDiagram diagram = chart.Diagram as XYDiagram;
  71. diagram.AxisX.Label.TextPattern = "{A:ss:fff}";
  72. diagram.AxisY.Label.TextPattern = "{V:.###}T";
  73. diagram.EnableAxisXScrolling = true;
  74. diagram.EnableAxisXZooming = true;
  75. series.CrosshairLabelPattern = @"时间:{A:ss:fff}
  76. 净重:{V:.###}T";
  77. diagram.AxisX.DateTimeScaleOptions.MeasureUnit = DateTimeMeasureUnit.Millisecond;
  78. diagram.AxisX.DateTimeScaleOptions.GridSpacing = 5;
  79. diagram.AxisX.WholeRange.SideMarginsValue = 2;
  80. diagram.AxisY.WholeRange.AlwaysShowZeroLevel = false;
  81. // Hide a legend if necessary.
  82. chart.Legend.Visibility = DevExpress.Utils.DefaultBoolean.False;
  83. var axisX = ((XYDiagram)chart.Diagram).AxisX;
  84. ConstantLine endline = new ConstantLine { Color = Color.Red, AxisValue = effectWeights.First().Time, Name = "结束" };
  85. ConstantLine startline = new ConstantLine { Color = Color.Red, AxisValue = effectWeights.Last().Time, Name = "开始" };
  86. startline.LineStyle.DashStyle = endline.LineStyle.DashStyle = DashStyle.Dash;
  87. axisX.ConstantLines.Add(startline);
  88. axisX.ConstantLines.Add(endline);
  89. }
  90. }
  91. }
  92. }