private void CreateBand() { Band bandX = new Band(m_chart.ViewXY, m_chart.ViewXY.XAxes[0], m_chart.ViewXY.YAxes[0]); // bandX.Behind = true; bandX.Binding = AxisBinding.XAxis; Color cBandX = Colors.Lime; bandX.Fill.Color = Color.FromArgb(150, cBandX.R, cBandX.G, cBandX.B); bandX.Fill.GradientColor = ChartTools.CalcGradient(bandX.Fill.Color, Color.FromArgb(150, 0, 0, 0), 50); bandX.Fill.GradientDirection = 0; bandX.ValueBegin = 0; bandX.ValueEnd = 0; bandX.Title.Visible = true; bandX.Title.Text = string.Empty; // bandX.Title.Angle = 90; bandX.Title.Color = Colors.White; bandX.Visible = false; bandX.IncludeInAutoFit = true; bandX.UseLimits = true; bandX.ResizedByMouse += bandX_ResizedByMouse; bandX.MovedByMouse += bandX_MovedByMouse; bandX.ValuesChanged += bandX_ValuesChanged; m_chart.ViewXY.Bands.Add(bandX); }
private void InitCharts() { ChartTools ct2 = new ChartTools(this.chart1); this.chart1.BackColor = Color.Black; ct2.SetChartArea(Color.Transparent); ct2.SetAxisX(100, 900, 100, "排汽流量(t/h)", StringAlignment.Center, false, Color.LightGray, Color.LightGray, Color.LightGray, Color.LightGray, ChartDashStyle.Solid, AxisArrowStyle.None, ""); ct2.SetAxisY(400, 1300, 100, "主汽流量(t/h)", StringAlignment.Center, false, Color.LightGray, Color.LightGray, Color.LightGray, Color.LightGray, ChartDashStyle.Solid, AxisArrowStyle.None, ""); this.chart1.ChartAreas[0].AxisX.TitleFont = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.chart1.ChartAreas[0].AxisY.TitleFont = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); //点 从左到右 ct2.SetSeries("", new double[] { 270 }, new double[] { 1170 }, SeriesChartType.Point, ChartHatchStyle.None, Color.White, 0, "550"); ct2.SetSeries("", new double[] { 365 }, new double[] { 1170 }, SeriesChartType.Point, ChartHatchStyle.None, Color.White, 0, "450"); ct2.SetSeries("", new double[] { 410 }, new double[] { 1170 }, SeriesChartType.Point, ChartHatchStyle.None, Color.White, 0, "400"); ct2.SetSeries("", new double[] { 506 }, new double[] { 1170 }, SeriesChartType.Point, ChartHatchStyle.None, Color.White, 0, "300"); ct2.SetSeries("", new double[] { 598 }, new double[] { 1170 }, SeriesChartType.Point, ChartHatchStyle.None, Color.White, 0, "200"); ct2.SetSeries("", new double[] { 690 }, new double[] { 1170 }, SeriesChartType.Point, ChartHatchStyle.None, Color.White, 0, "100"); ct2.SetSeries("", new double[] { 787 }, new double[] { 1170 }, SeriesChartType.Point, ChartHatchStyle.None, Color.White, 0, "0"); //七条斜线 从左至右 ct2.SetSeries("", new double[] { 220, 270 }, new double[] { 1080, 1170 }, SeriesChartType.Line, ChartHatchStyle.None, Color.Yellow, 2, ""); ct2.SetSeries("", new double[] { 247, 365 }, new double[] { 960, 1170 }, SeriesChartType.Line, ChartHatchStyle.None, Color.LightGray, 2, ""); ct2.SetSeries("", new double[] { 267, 410 }, new double[] { 920, 1170 }, SeriesChartType.Line, ChartHatchStyle.None, Color.LightGray, 2, ""); ct2.SetSeries("", new double[] { 312, 506 }, new double[] { 830, 1170 }, SeriesChartType.Line, ChartHatchStyle.None, Color.LightGray, 2, ""); ct2.SetSeries("", new double[] { 355, 598 }, new double[] { 740, 1170 }, SeriesChartType.Line, ChartHatchStyle.None, Color.LightGray, 2, ""); ct2.SetSeries("", new double[] { 395, 690 }, new double[] { 660, 1170 }, SeriesChartType.Line, ChartHatchStyle.None, Color.LightGray, 2, ""); ct2.SetSeries("", new double[] { 430, 787 }, new double[] { 590, 1170 }, SeriesChartType.Line, ChartHatchStyle.None, Color.Yellow, 2, ""); //红点线 ct2.SetSeries("", new double[] { 220, 247 }, new double[] { 1080, 960 }, SeriesChartType.Spline, ChartHatchStyle.None, Color.Red, 2, ""); ct2.SetSeries("", new double[] { 247, 430 }, new double[] { 960, 590 }, SeriesChartType.Spline, ChartHatchStyle.None, Color.Red, 2, ""); //蓝点线 ct2.SetSeries("", new double[] { 330, 330 }, new double[] { 1170, 970 }, SeriesChartType.Spline, ChartHatchStyle.None, Color.Orange, 2, ""); ct2.SetSeries("", new double[] { 330, 510 }, new double[] { 970, 720 }, SeriesChartType.Spline, ChartHatchStyle.None, Color.Orange, 2, ""); //一条直线 ct2.SetSeries("", new double[] { 100, 787 }, new double[] { 1170, 1170 }, SeriesChartType.Line, ChartHatchStyle.None, Color.Yellow, 2, ""); ct2.SetLegend(false, StringAlignment.Far, StringAlignment.Far); Series series3 = new Series(); series3.Name = "chart3Series"; series3.LabelForeColor = Color.White; series3.ChartType = SeriesChartType.Point; series3.MarkerSize = 16; series3.MarkerStyle = MarkerStyle.Circle; series3.Label = "#VALX{N2} #VAL{N2}"; series3.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); series3.Color = Color.White; chart1.Series.Add(series3); }
/// <summary> /// 初始化左下角Chart图表 /// </summary> private void InitCharts() { //Chart2 绘抛物线图 ChartTools ct2 = new ChartTools(this.chart1); this.chart1.BackColor = Color.Black; ct2.SetChartArea(Color.Transparent); ct2.SetAxisX(0, 1.0, 0.1, "相对容积流量", StringAlignment.Far, false, Color.LightGray, Color.LightGray, Color.LightGray, Color.LightGray, ChartDashStyle.Solid, AxisArrowStyle.None, ""); ct2.SetAxisY(0, 1.4, 0.2, "叶片相对动应力", StringAlignment.Far, false, Color.LightGray, Color.LightGray, Color.LightGray, Color.LightGray, ChartDashStyle.Solid, AxisArrowStyle.None, ""); this.chart1.ChartAreas[0].AxisX.TitleFont = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.chart1.ChartAreas[0].AxisY.TitleFont = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); //绘制阴影 ct2.SetSeries("", new double[] { 0, 0.05 }, new double[] { 1.4, 1.4 }, SeriesChartType.Area, ChartHatchStyle.Percent50, Color.LightGreen, 0, ""); ct2.SetSeries("", new double[] { 0.05, 0.1 }, new double[] { 1.4, 1.4 }, SeriesChartType.Area, ChartHatchStyle.Percent50, Color.Orange, 0, ""); ct2.SetSeries("", new double[] { 0.1, 0.27 }, new double[] { 1.4, 1.4 }, SeriesChartType.Area, ChartHatchStyle.Percent50, Color.Red, 0, ""); ct2.SetSeries("", new double[] { 0.27, 0.3 }, new double[] { 1.4, 1.4 }, SeriesChartType.Area, ChartHatchStyle.Percent50, Color.Orange, 0, ""); ct2.SetSeries("", new double[] { 0.3, 0.4479 }, new double[] { 1.4, 1.4 }, SeriesChartType.Area, ChartHatchStyle.Percent50, Color.LightGreen, 0, ""); ct2.SetSeries("", new double[] { 0.4479, 1.0 }, new double[] { 1.4, 1.4 }, SeriesChartType.Area, ChartHatchStyle.Percent50, Color.LightGreen, 0, ""); //五条竖线 从左至右 ct2.SetSeries("", new double[] { 0.05, 0.05 }, new double[] { 0, 1.4 }, SeriesChartType.Line, ChartHatchStyle.None, Color.Blue, 2, ""); ct2.SetSeries("", new double[] { 0.1, 0.1 }, new double[] { 0, 1.4 }, SeriesChartType.Line, ChartHatchStyle.None, Color.Blue, 2, ""); ct2.SetSeries("", new double[] { 0.27, 0.27 }, new double[] { 0, 1.4 }, SeriesChartType.Line, ChartHatchStyle.None, Color.Blue, 2, ""); ct2.SetSeries("", new double[] { 0.3, 0.3 }, new double[] { 0, 1.4 }, SeriesChartType.Line, ChartHatchStyle.None, Color.Blue, 2, ""); //末级叶片零功率 //ct2.SetSeries("MJYPLGL", new double[] { 0.4479, 0.4479 }, new double[] { 0, 1.4 }, SeriesChartType.Line, ChartHatchStyle.None, Color.Blue, 2, ""); //this.chart1.Series["MJYPLGL"].Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); //this.chart1.Series["MJYPLGL"].Points[1].Label = "末级叶片零功率"; //横线 //ct2.SetSeries("", new double[] { 0.1, 0.3 }, new double[] { 1.35, 1.35 }, SeriesChartType.Line, ChartHatchStyle.None, Color.Blue, 2, ""); //画曲线 ct2.SetSeries("", new double[] { 0, 0.1, 0.156, 0.27 }, new double[] { 0, 0.45, 1.35, 0.45 }, SeriesChartType.Spline, ChartHatchStyle.None, Color.OrangeRed, 2, ""); ct2.SetSeries("", new double[] { 0.27, 0.3 }, new double[] { 0.45, 0.28 }, SeriesChartType.Line, ChartHatchStyle.None, Color.OrangeRed, 2, ""); ct2.SetSeries("", new double[] { 0.3, 0.33, 0.36, 0.38, 0.39, 0.4 }, new double[] { 0.28, 0.2, 0.16, 0.14, 0.13, 0.125 }, SeriesChartType.Spline, ChartHatchStyle.None, Color.OrangeRed, 2, ""); ct2.SetSeries("", new double[] { 0.4, 1.0 }, new double[] { 0.12, 0.225 }, SeriesChartType.Line, ChartHatchStyle.None, Color.OrangeRed, 2, ""); ct2.SetLegend(false, StringAlignment.Far, StringAlignment.Far); //Chart2 数据绑定Series Series series2 = new Series(); series2.Name = "chart2Series"; series2.LabelForeColor = Color.White; series2.ChartType = SeriesChartType.Line; series2.BorderWidth = 3; //series2.Label = "#VALX"; series2.Color = Color.Black; series2.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); chart1.Series.Add(series2); }
/// <summary> /// 初始化左下角Chart图表 /// </summary> private void InitCharts() { //Chart3 绘折线图 ChartTools ct3 = new ChartTools(this.chart1); this.chart1.BackColor = Color.Black; ct3.SetChartArea(Color.Transparent); ct3.SetAxisX(0, 800, 100, "低压缸排汽流量(t/h)", StringAlignment.Far, false, Color.DarkGray, Color.DarkGray, Color.DarkGray, Color.DarkGray, ChartDashStyle.Solid, AxisArrowStyle.None, ""); ct3.SetAxisY(0, 70, 10, "背压(绝对kPa)", StringAlignment.Far, false, Color.DarkGray, Color.DarkGray, Color.DarkGray, Color.DarkGray, ChartDashStyle.Solid, AxisArrowStyle.None, ""); ct3.SetAxisY2(24.5, 94.5, 10, "真空(kPa)", StringAlignment.Near, false, Color.DarkGray, Color.DarkGray, Color.DarkGray, Color.DarkGray, ChartDashStyle.Dash, AxisArrowStyle.None, true, ""); this.chart1.ChartAreas[0].AxisX.TitleFont = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.chart1.ChartAreas[0].AxisY.TitleFont = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.chart1.ChartAreas[0].AxisY2.TitleFont = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); //ct3.SetAxisX2(120, 190, 5, "低压缸排气流量(绝对)", StringAlignment.Far, false, Color.DarkGray, Color.DarkGray, Color.DarkGray, Color.DarkGray, ChartDashStyle.Solid, AxisArrowStyle.Triangle, ""); //阴影 ct3.SetSeries("", new double[] { 0, 800 }, new double[] { 70, 70 }, SeriesChartType.Area, ChartHatchStyle.Percent50, Color.Red, 0, ""); ct3.SetSeries("", new double[] { 0, 191, 556.5, 800 }, new double[] { 25, 25, 48, 48 }, SeriesChartType.Area, ChartHatchStyle.Percent50, Color.DarkOrange, 0, ""); ct3.SetSeries("", new double[] { 0, 191, 556.5, 800 }, new double[] { 20, 20, 43, 43 }, SeriesChartType.Area, ChartHatchStyle.Percent50, Color.Green, 0, ""); //两条直线 红色 粉色 ct3.SetSeries("TJD", new double[] { 0, 800 }, new double[] { 65, 65 }, SeriesChartType.Line, ChartHatchStyle.None, Color.Blue, 2, ""); ct3.SetSeries("", new double[] { 0, 800 }, new double[] { 33, 33 }, SeriesChartType.Line, ChartHatchStyle.None, Color.Yellow, 2, ""); this.chart1.Series["TJD"].Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.chart1.Series["TJD"].Points[0].Label = "跳机点:#VALY" + "KP "; //两条红色折线 ct3.SetSeries("", new double[] { 0, 191, 556.5, 800 }, new double[] { 20, 20, 43, 43 }, SeriesChartType.Line, ChartHatchStyle.None, Color.Blue, 2, ""); ct3.SetSeries("", new double[] { 0, 191, 556.5, 800 }, new double[] { 25, 25, 48, 48 }, SeriesChartType.Line, ChartHatchStyle.None, Color.Blue, 2, ""); ct3.SetLegend(false, StringAlignment.Far, StringAlignment.Far); //Chart3 数据绑定Series Series series3 = new Series(); series3.Name = "chart3Series"; series3.LabelForeColor = Color.White; series3.ChartType = SeriesChartType.Point; series3.MarkerSize = 16; series3.MarkerStyle = MarkerStyle.Circle; series3.Label = "#VALX{N2} #VAL{N2}"; series3.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); series3.Color = Color.White; chart1.Series.Add(series3); }
//初始化图表 private void InitChart() { ChartTools ct = new ChartTools(this.chart1); this.chart1.ChartAreas[0].BackColor = Color.Black; //X Y 轴 ct.SetAxisX(35, 95, 5, "热网出水温度(摄氏度)", StringAlignment.Far, false, Color.Gray, Color.Gray, Color.Gray, Color.Gray, ChartDashStyle.Dash, AxisArrowStyle.Lines, ""); ct.SetAxisY(-35, 35, 5, "环境温度(摄氏度)", StringAlignment.Far, false, Color.Gray, Color.Gray, Color.Gray, Color.Gray, ChartDashStyle.Dash, AxisArrowStyle.Lines, ""); //两条绿线 (上绿线 y = -0.8889x + 59.4545) // (下绿线 y = -0.8889x + 54.1025) ct.SetSeries("", new double[] { min, max }, new double[] { GetValues(k, greenB1, min), GetValues(k, greenB1, max) }, SeriesChartType.Line, ChartHatchStyle.None, Color.Green, 2, ""); ct.SetSeries("", new double[] { min, max }, new double[] { GetValues(k, greenB2, min), GetValues(k, greenB2, max) }, SeriesChartType.Line, ChartHatchStyle.None, Color.Green, 2, ""); //红线 (y = -0.8889x + 58.1165) ct.SetSeries("", new double[] { min, max }, new double[] { GetValues(k, redB1, min), GetValues(k, redB1, max) }, SeriesChartType.Line, ChartHatchStyle.None, Color.Red, 2, ""); chart1.ChartAreas[0].AxisX.TitleFont = Font; chart1.ChartAreas[0].AxisX.LabelStyle.Font = Font; chart1.ChartAreas[0].AxisY.TitleFont = Font; chart1.ChartAreas[0].AxisY.LabelStyle.Font = Font; Series series3 = new Series(); series3.Name = "chart3Series"; series3.LabelForeColor = Color.White; series3.ChartType = SeriesChartType.Point; series3.MarkerSize = 16; series3.MarkerStyle = MarkerStyle.Circle; series3.Label = "#VALX #VAL"; series3.Font = Font; series3.LabelForeColor = Color.Silver; //series3.BorderWidth = 2; series3.Color = Color.White; chart1.Series.Add(series3); ct.SetLegend(false, StringAlignment.Far, StringAlignment.Far); }
public void AddToChart(LightningChartUltimate chart) { Chart = chart; var xAxis = chart.ViewXY.XAxes[0]; var yAxis = chart.ViewXY.YAxes[0]; var color = Config.Color; // Initialize left cursor Left = new LineSeriesCursor(Chart.ViewXY, xAxis) { ValueAtXAxis = 1, LineStyle = { Width = Config.LineWidth } }; Left.LineStyle.Color = Color.FromArgb(180, color.R, color.G, color.B); Left.FullHeight = false; Left.SnapToPoints = false; Left.Style = CursorStyle.PointTracking; Left.TrackPoint.Color1 = Colors.Transparent; Left.TrackPoint.Color2 = Colors.Transparent; Left.TrackPoint.Shape = Shape.Circle; Chart.ViewXY.LineSeriesCursors.Add(Left); // Initialize right cursor Right = new LineSeriesCursor(Chart.ViewXY, xAxis) { ValueAtXAxis = 1, LineStyle = { Width = Config.LineWidth } }; Right.LineStyle.Color = Color.FromArgb(180, color.R, color.G, color.B); Right.FullHeight = false; Right.SnapToPoints = false; Right.Style = CursorStyle.PointTracking; Right.TrackPoint.Color1 = Colors.Transparent; Right.TrackPoint.Color2 = Colors.Transparent; Right.TrackPoint.Shape = Shape.Circle; Chart.ViewXY.LineSeriesCursors.Add(Right); // Initialize middle cursor Middle = new LineSeriesCursor(Chart.ViewXY, xAxis) { ValueAtXAxis = 1, LineStyle = { Width = Config.LineWidth } }; Middle.LineStyle.Color = Color.FromArgb(180, color.R, color.G, color.B); Middle.FullHeight = false; Middle.SnapToPoints = false; Middle.Style = CursorStyle.PointTracking; Middle.TrackPoint.Color1 = Colors.Transparent; Middle.TrackPoint.Color2 = Colors.Transparent; Middle.TrackPoint.Shape = Shape.Circle; Chart.ViewXY.LineSeriesCursors.Add(Middle); //Edit bands BandBar = new Band(Chart.ViewXY, xAxis, yAxis) { Title = { Text = string.Empty }, Behind = true, Binding = AxisBinding.XAxis }; var bandColor = Config.BandColor; BandBar.Fill.Color = Color.FromArgb(bandColor.A, bandColor.R, bandColor.G, bandColor.B); BandBar.Fill.GradientColor = ChartTools.CalcGradient(BandBar.Fill.Color, Color.FromArgb(150, 0, 0, 0), 50); BandBar.Fill.GradientDirection = 0; BandBar.Title.Visible = true; BandBar.Title.Color = Colors.White; BandBar.MouseResize = false; Chart.ViewXY.Bands.Add(BandBar); BandBar.MovedByMouse += (sender, args) => { if (_isChanging) { return; } _isChanging = true; var middle = (BandBar.ValueBegin + BandBar.ValueEnd) / 2; var diff = middle - Value; var left = Left.ValueAtXAxis + diff; var right = Right.ValueAtXAxis + diff; SetByValue(right, left, middle); // resize bandwidth //var middleDiff = Middle.ValueAtXAxis - BandBar.ValueBegin; //if (middleDiff >= 0) //{ // Range.Start = -middleDiff; // Range.End = middleDiff; //} //else //{ // Range.Start = 0; // Range.End = 0; //} //if (middleDiff > Config.BandwidthMaximum) //{ // Range.Start = -Config.BandwidthMaximum; // Range.End = Config.BandwidthMaximum; //} //var right = Middle.ValueAtXAxis + Range.End; //var left = Middle.ValueAtXAxis + Range.Start; //var middle = Middle.ValueAtXAxis; //SetByValue(right, left, middle); _isChanging = false; }; Right.PositionChanged += (LineSeriesCursor sender, double value, ref bool rendering) => { if (_isChanging) { return; } _isChanging = true; var middleDiff = Right.ValueAtXAxis - Middle.ValueAtXAxis; if (middleDiff >= 0) { Range.Start = -middleDiff; Range.End = middleDiff; } else { Range.Start = 0; Range.End = 0; } if (middleDiff > Config.BandwidthMaximum) { Range.Start = -Config.BandwidthMaximum; Range.End = Config.BandwidthMaximum; } var right = Middle.ValueAtXAxis + Range.End; var left = Middle.ValueAtXAxis + Range.Start; var middle = Middle.ValueAtXAxis; SetByValue(right, left, middle); _isChanging = false; }; Left.PositionChanged += (LineSeriesCursor sender, double value, ref bool rendering) => { if (_isChanging) { return; } _isChanging = true; var middleDiff = Middle.ValueAtXAxis - Left.ValueAtXAxis; if (middleDiff >= 0) { Range.Start = -middleDiff; Range.End = middleDiff; } else { Range.Start = 0; Range.End = 0; } if (middleDiff > Config.BandwidthMaximum) { Range.Start = -Config.BandwidthMaximum; Range.End = Config.BandwidthMaximum; } var right = Middle.ValueAtXAxis + Range.End; var left = Middle.ValueAtXAxis + Range.Start; var middle = Middle.ValueAtXAxis; SetByValue(right, left, middle); _isChanging = false; }; Middle.PositionChanged += (LineSeriesCursor sender, double value, ref bool rendering) => { if (_isChanging) { return; } _isChanging = true; var diff = value - Value; var left = Left.ValueAtXAxis + diff; var right = Right.ValueAtXAxis + diff; SetByValue(right, left, value); _isChanging = false; }; }
private void OnChannelAdded(ChannelToken token) { try { if (viewModel == null || !(token is VibrationChannelToken)) { return; } m_chart.BeginUpdate(); VibrationChannelToken vToken = token as VibrationChannelToken; AxisY axisY = new AxisY(m_chart.ViewXY); axisY.Tag = vToken; axisY.Title.Visible = false; axisY.AxisThickness = 2; axisY.AxisColor = Color.FromArgb(100, 135, 205, 238); m_chart.ViewXY.YAxes.Add(axisY); int count = m_chart.ViewXY.PointLineSeries.Count; while (count > 15) { count -= 15; } Color color = DefaultColors.SeriesForBlackBackgroundWPF[count]; PointLineSeries series = new PointLineSeries(m_chart.ViewXY, m_chart.ViewXY.XAxes[0], axisY); series.MouseInteraction = false; series.LineStyle.Color = color; series.LineStyle.AntiAliasing = LineAntialias.None; series.LineStyle.Width = 1; series.Tag = vToken; series.Title.Text = vToken.Channel.Name + vToken.Channel.MSSN; series.Title.Font = new WPFFont(System.Drawing.FontFamily.GenericSansSerif, 10f, System.Drawing.FontStyle.Bold); series.Title.Color = ChartTools.CalcGradient(Colors.White, Colors.White, 50); series.Title.HorizontalAlign = AlignmentHorizontal.Left; series.Title.VerticalAlign = AlignmentVertical.Top; series.Title.MoveByMouse = false; series.Title.MouseInteraction = false; series.Title.Offset = new PointIntXY(5, 5); series.Title.Visible = true; if (m_chart.ViewXY.Annotations.Count == 0) { CreateCalloutAnnotation(); CreateFAAnnotation(); } //Update Annotation AnnotationXY annotation = m_chart.ViewXY.Annotations[1]; string[] branches = annotation.Text.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); StringBuilder sb = new StringBuilder(); for (int i = 0; i < branches.Length; i++) { sb.AppendLine(branches[i]); } string freText = "F"; string ampText = "A"; if (vToken.VData != null) { int length = vToken.VData.FFTLength; SeriesPoint[] points = new SeriesPoint[length]; SeriesPoint[] phasePoints = new SeriesPoint[length]; for (int i = 0; i < length; i++) { points[i] = new SeriesPoint(vToken.VData.Frequency[i], vToken.VData.PowerSpectrum[i]); phasePoints[i] = new SeriesPoint(vToken.VData.Frequency[i], vToken.VData.Phase[i]); } series.Points = points; var fftValuesDict = vToken.VData.PowerSpectrum.Select((s, i) => new { Key = i, Value = s }).OrderByDescending(o => o.Value).Take(6); foreach (var item in fftValuesDict) { freText += string.Format("{0,6}|", vToken.VData.Frequency[item.Key].ToString("0.00")); ampText += string.Format("{0,6}|", item.Value.ToString("0.00")); } } sb.AppendLine(freText); sb.AppendLine(ampText); annotation.Text = sb.ToString(); m_chart.ViewXY.PointLineSeries.Add(series); m_chart.ViewXY.Annotations[0].AssignYAxisIndex = -1; m_chart.ViewXY.Annotations[0].AssignYAxisIndex = 0; m_chart.ViewXY.FitView(); m_chart.EndUpdate(); } catch (Exception ex) { m_chart.EndUpdate(); EventAggregatorService.Instance.EventAggregator.GetEvent <ThrowExceptionEvent>().Publish(Tuple.Create <string, Exception>("数据回放-功率谱-添加通道", ex)); } }
public WaveformMonitor(Color lineColor, string title = "") { SampleFrequency = 0.0; ContainerChart = new LightningChartUltimate { Name = "Chart1", ChartName = "Chart1", Title = { Text = title }, VerticalAlignment = VerticalAlignment.Stretch, HorizontalAlignment = HorizontalAlignment.Stretch }; ContainerChart.BeginUpdate(); ContainerChart.ViewXY.AxisLayout.AutoAdjustMargins = false; ContainerChart.ViewXY.DropOldSeriesData = false; _xAxis = ContainerChart.ViewXY.XAxes[0]; _xAxis.ValueType = AxisValueType.Number; _xAxis.SweepingGap = 2; _xAxis.ScrollMode = XAxisScrollMode.None; _xAxis.Title.Text = "Range"; _xAxis.Title.VerticalAlign = XAxisTitleAlignmentVertical.Top; _xAxis.Title.HorizontalAlign = XAxisTitleAlignmentHorizontal.Right; _xAxis.LabelsPosition = Alignment.Near; _xAxis.LabelsFont = new WPFFont("Tahoma", 9.0, "9", true, false); _xAxis.MajorDivTickStyle.Visible = false; _xAxis.MinorDivTickStyle.Visible = false; _xAxis.MajorGrid.Visible = false; _xAxis.MinorGrid.Visible = false; _xAxis.LabelsVisible = true; _xAxis.SteppingInterval = 1; _xAxis.MouseScaling = false; _xAxis.MouseScrolling = false; _xAxis.MouseInteraction = false; _xAxis.AxisThickness = 1; var axisY = ContainerChart.ViewXY.YAxes[0]; axisY.SetRange(0, 30000); axisY.Title.Visible = false; axisY.LabelsFont = new WPFFont("Tahoma", 9.0, "9", true, false); ContainerChart.ViewXY.GraphBackground.GradientDirection = 270; ContainerChart.ViewXY.GraphBackground.GradientFill = GradientFill.Cylindrical; var color = ContainerChart.ViewXY.GraphBackground.Color; ContainerChart.ViewXY.GraphBackground.Color = Color.FromArgb(150, color.R, color.G, color.B); ContainerChart.Title.Font = new WPFFont("Tahoma", 11.0, "11", true, false); ContainerChart.Title.Align = ChartTitleAlignment.TopCenter; ContainerChart.Title.Offset.SetValues(0, 25); ContainerChart.Title.Color = lineColor; ContainerChart.ViewXY.Margins = new Thickness(70, 10, 15, 10); ContainerChart.ViewXY.ZoomPanOptions.ZoomRectLine.Color = Colors.Lime; ContainerChart.ChartBackground.Color = ChartTools.CalcGradient(lineColor, Colors.Black, 65); ContainerChart.ChartBackground.GradientDirection = 0; ContainerChart.ChartBackground.GradientFill = GradientFill.Cylindrical; ContainerChart.ViewXY.LegendBox.Visible = false; var series = new SampleDataSeries(ContainerChart.ViewXY, _xAxis, axisY) { LineStyle = { Width = 1f, Color = lineColor, AntiAliasing = LineAntialias.None }, MouseInteraction = false }; ContainerChart.ViewXY.SampleDataSeries.Add(series); ContainerChart.EndUpdate(); }
/// <summary> /// 构造函数 /// </summary> /// <param name="parentControl">父容器</param> /// <param name="seriesNames">示波器各序列名</param> /// <param name="sampleFrequency">绘制曲线颜色</param> /// <param name="titleColor">绘制曲线颜色</param> /// <param name="chartManager"> 内置图表的的chartManager(可空)</param> public WaveformMonitor( Panel parentControl, string[] seriesNames, double sampleFrequency, Color titleColor, ChartManager chartManager ) { _samplingFrequency = sampleFrequency; _parentControl = parentControl; _chart = new LightningChartUltimate(); _chart.ChartName = "Waveform chart"; _chart.ViewXY.XAxes = ViewXY.CreateDefaultXAxes(); _chart.ViewXY.YAxes = ViewXY.CreateDefaultYAxes(); _chart.VerticalAlignment = VerticalAlignment.Top; _chart.HorizontalAlignment = HorizontalAlignment.Left; _chart.ViewXY.AxisLayout.YAxesLayout = YAxesLayout.Stacked; _chart.ViewXY.AxisLayout.SegmentsGap = 10; parentControl.Children.Add(_chart); _chart.BeginUpdate(); _chart.ChartManager = chartManager; _chart.ViewXY.AxisLayout.AutoAdjustMargins = false; _chart.ViewXY.DropOldSeriesData = true; _chart.ChartRenderOptions.AntiAliasLevel = 0; // Disable hw anti-aliasing. AxisX axisX = _chart.ViewXY.XAxes[0]; axisX.Maximum = 10; axisX.SweepingGap = 2; axisX.ScrollMode = XAxisScrollMode.Scrolling; axisX.Title.Text = "Range"; axisX.Title.VerticalAlign = XAxisTitleAlignmentVertical.Top; axisX.Title.HorizontalAlign = XAxisTitleAlignmentHorizontal.Right; axisX.LabelsPosition = Alignment.Near; axisX.LabelsFont = new WpfFont("Segoe UI", 11, true, false); axisX.MajorDivTickStyle.Visible = false; axisX.MinorDivTickStyle.Visible = false; axisX.MajorGrid.Visible = false; axisX.MinorGrid.Visible = false; axisX.LabelsVisible = false; axisX.SteppingInterval = 1; axisX.MouseScaling = false; axisX.MouseScrolling = false; axisX.AxisThickness = 1; //AxisY axisY = _chart.ViewXY.YAxes[0]; //axisY.SetRange(-30000, 30000); //axisY.Title.Visible = false; //axisY.LabelsFont = new WpfFont("Segoe UI", 11, true, false); _chart.ViewXY.GraphBackground.GradientDirection = 270; _chart.ViewXY.GraphBackground.GradientFill = GradientFill.Cylindrical; Color color = _chart.ViewXY.GraphBackground.Color; _chart.ViewXY.GraphBackground.Color = Color.FromArgb(150, color.R, color.G, color.B); _chart.Title.Font = new WpfFont("Segoe UI", 14, true, false); _chart.Title.Align = ChartTitleAlignment.TopCenter; _chart.Title.Offset.SetValues(0, 25); _chart.Title.Color = titleColor; _chart.ViewXY.Margins = new Thickness(70, 10, 15, 10); _chart.ViewXY.ZoomPanOptions.ZoomRectLine.Color = Colors.Lime; _chart.ChartBackground.Color = ChartTools.CalcGradient(titleColor, Colors.Black, 65); _chart.ChartBackground.GradientDirection = 0; _chart.ChartBackground.GradientFill = GradientFill.Cylindrical; //清除之前的y轴与数据序列 DisposeAllAndClear(_chart.ViewXY.YAxes); DisposeAllAndClear(_chart.ViewXY.SampleDataSeries); //添加多序列的y轴属性 for (int index = 0; index < seriesNames.Count(); index++) { AxisY axisY = new AxisY(_chart.ViewXY); axisY.SetRange(-30000, 30000); axisY.Title.Font = new WpfFont("Segoe UI", 10, false, false); axisY.Title.Text = string.Format(seriesNames[index]); axisY.Title.Angle = 0; axisY.Units.Visible = false; //axisY.Title.Visible = false; axisY.LabelsFont = new WpfFont("Segoe UI", 11, true, false); _chart.ViewXY.YAxes.Add(axisY); //Add SampleDataSeries SampleDataSeries sds = new SampleDataSeries(_chart.ViewXY, axisX, axisY); _chart.ViewXY.SampleDataSeries.Add(sds); sds.SampleFormat = SampleFormat.DoubleFloat; sds.LineStyle.Color = DefaultColors.SeriesForBlackBackgroundWpf[index % DefaultColors.SeriesForBlackBackgroundWpf.Length]; sds.SamplingFrequency = _samplingFrequency; sds.FirstSampleTimeStamp = 1.0 / _samplingFrequency; sds.LineStyle.Width = 1f; sds.LineStyle.AntiAliasing = LineAntialias.None; sds.ScrollModePointsKeepLevel = 1; sds.ScrollingStabilizing = true; sds.MouseInteraction = false; //Add the line as a zero level ConstantLine cls = new ConstantLine(_chart.ViewXY, axisX, axisY); cls.Title.Text = "Constant line"; cls.Title.Visible = false; cls.LineStyle.Color = Colors.BlueViolet; cls.Behind = true; cls.LineStyle.Width = 2; cls.MouseInteraction = false; cls.Value = 0; _chart.ViewXY.ConstantLines.Add(cls); } //LineSeriesCursor cursor1 = new LineSeriesCursor(_chart.ViewXY, axisX); //cursor1.ValueAtXAxis = 1; //cursor1.LineStyle.Width = 6; //color = Colors.OrangeRed; //cursor1.LineStyle.Color = Color.FromArgb(180, color.R, color.G, color.B); //cursor1.FullHeight = true; //cursor1.SnapToPoints = true; //cursor1.Style = CursorStyle.PointTracking; //cursor1.TrackPoint.Color1 = Colors.Yellow; //cursor1.TrackPoint.Color2 = Colors.Transparent; //cursor1.TrackPoint.Shape = Shape.Circle; //_chart.ViewXY.LineSeriesCursors.Add(cursor1); _chart.EndUpdate(); }
private void OnChannelAdded(ChannelToken token) { try { if (viewModel == null || !(token is VibrationChannelToken)) { return; } m_chart.BeginUpdate(); VibrationChannelToken vToken = token as VibrationChannelToken; AxisY axisY = new AxisY(m_chart.ViewXY); axisY.Tag = vToken; axisY.Title.Visible = false; axisY.AxisThickness = 2; axisY.AxisColor = Color.FromArgb(100, 135, 205, 238); m_chart.ViewXY.YAxes.Add(axisY); if (m_chart.ViewXY.Annotations.Count == 0) { CreateAnnotation(); } AnnotationXY annotation = m_chart.ViewXY.Annotations[0]; int count = m_chart.ViewXY.SampleDataSeries.Count; while (count > 15) { count -= 15; } Color color = DefaultColors.SeriesForBlackBackgroundWPF[count]; SampleDataSeries series = new SampleDataSeries(m_chart.ViewXY, m_chart.ViewXY.XAxes[0], axisY); series.SampleFormat = SampleFormat.DoubleFloat; series.MouseInteraction = false; series.LineStyle.Color = color; series.LineStyle.AntiAliasing = LineAntialias.None; series.LineStyle.Width = 1; series.Tag = vToken; series.Title.Text = vToken.Channel.Name + vToken.Channel.MSSN; series.Title.Font = new WPFFont(System.Drawing.FontFamily.GenericSansSerif, 10f, System.Drawing.FontStyle.Bold); series.Title.Color = ChartTools.CalcGradient(Colors.White, Colors.White, 50); series.Title.HorizontalAlign = AlignmentHorizontal.Left; series.Title.VerticalAlign = AlignmentVertical.Top; series.Title.MoveByMouse = false; series.Title.MouseInteraction = false; series.Title.Offset = new PointIntXY(5, 5); series.Title.Visible = true; //Update Annotation StringBuilder sb = new StringBuilder(); string[] branches = annotation.Text.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < branches.Length; i++) { sb.AppendLine(branches[i]); } string text = string.Format("{0}:", m_chart.ViewXY.YAxes.Count); if (vToken.VData != null) { series.SamplesDouble = vToken.VData.Waveform; axisY.Title.Text += "\r\n" + " (" + vToken.VData.Unit + ")"; text = string.Format("{0,6}|{1,6}|{2,6}|{3,7}|{4,6}|{5,9}|{6,9}|{7,9}|{8,9}|{9,9}|{10,9}", vToken.VData.AMS.ToString("0.00"), vToken.VData.PeakValue.ToString("0.00"), vToken.VData.PeakPeakValue.ToString("0.00"), vToken.VData.Slope.ToString("0.00"), vToken.VData.Kurtosis.ToString("0.00"), vToken.VData.KurtosisValue.ToString("0.00"), vToken.VData.WaveIndex.ToString("0.00"), vToken.VData.PeakIndex.ToString("0.00"), vToken.VData.ImpulsionIndex.ToString("0.00"), vToken.VData.RootAmplitude.ToString("0.00"), vToken.VData.ToleranceIndex.ToString("0.00")); } sb.Append(text); annotation.Text = sb.ToString().Trim(); m_chart.ViewXY.SampleDataSeries.Add(series); m_chart.ViewXY.FitView(); m_chart.EndUpdate(); } catch (Exception ex) { m_chart.EndUpdate(); EventAggregatorService.Instance.EventAggregator.GetEvent <ThrowExceptionEvent>().Publish(Tuple.Create <string, Exception>("数据回放-时域-添加通道", ex)); } }
public AreaSpectrumMonitor( Panel parentControl, Int32 resolution, Double xAxisMax, String title, Color lineColor ) { m_iResolution = resolution; _chart = new LightningChartUltimate(); _chart.ChartName = "Area spectrum chart"; _chart.ViewXY.XAxes = ViewXY.CreateDefaultXAxes(); _chart.ViewXY.YAxes = ViewXY.CreateDefaultYAxes(); _chart.VerticalAlignment = VerticalAlignment.Top; _chart.HorizontalAlignment = HorizontalAlignment.Left; _chart.BeginUpdate(); _chart.Title.Visible = true; _chart.Title.Text = title; _chart.Title.Color = lineColor; _chart.Title.Font = new WpfFont("Segoe UI", 13, true, false); _chart.Title.Offset.SetValues(0, 20); _chart.ChartBackground.Color = ChartTools.CalcGradient(lineColor, Colors.Black, 65); _chart.ChartBackground.GradientDirection = 0; _chart.ChartBackground.GradientFill = GradientFill.Cylindrical; _chart.ViewXY.GraphBackground.GradientDirection = 270; _chart.ViewXY.GraphBackground.GradientFill = GradientFill.Linear; _chart.ViewXY.ZoomPanOptions.ZoomRectLine.Color = Colors.White; _chart.ViewXY.GraphBordersOverSeries = false; _chart.ViewXY.AxisLayout.YAxesLayout = YAxesLayout.Layered; _chart.ViewXY.AxisLayout.AutoAdjustMargins = false; Color color = _chart.ViewXY.GraphBackground.Color; _chart.ViewXY.GraphBackground.Color = Color.FromArgb(150, color.R, color.G, color.B); AxisX axisX = _chart.ViewXY.XAxes[0]; axisX.SetRange(0, xAxisMax); axisX.Title.Font = new WpfFont("Segoe UI", 13, true, false); axisX.Title.Visible = true; axisX.Title.Text = "Frequency (Hz)"; axisX.Units.Visible = false; axisX.ValueType = AxisValueType.Number; axisX.Position = 100; axisX.LabelsPosition = Alignment.Far; axisX.MajorDivTickStyle.Alignment = Alignment.Far; axisX.MinorDivTickStyle.Alignment = Alignment.Far; axisX.MajorDivTickStyle.Color = Colors.Gray; axisX.MinorDivTickStyle.Color = Colors.DimGray; axisX.LabelsColor = Colors.White; axisX.LabelsFont = new WpfFont("Segoe UI", 11, true, false); axisX.ScrollMode = XAxisScrollMode.None; axisX.Title.Visible = false; AxisY axisY = _chart.ViewXY.YAxes[0]; axisY.MajorDivTickStyle.Color = Colors.Gray; axisY.MinorDivTickStyle.Color = Colors.DimGray; axisY.AutoFormatLabels = false; axisY.LabelsNumberFormat = "0"; axisY.SetRange(0, 7000000); axisY.Title.Visible = false; axisY.LabelsColor = Colors.White; axisY.LabelsFont = new WpfFont("Segoe UI", 11, true, false); axisY.Units.Visible = false; axisY.Visible = false; AreaSeries areaSeries = new AreaSeries(_chart.ViewXY, axisX, axisY); areaSeries.Title.Visible = false; areaSeries.LineStyle.Color = lineColor; areaSeries.LineStyle.Width = 1f; areaSeries.Fill.Color = ChartTools.CalcGradient(lineColor, Colors.Black, 50); areaSeries.Fill.GradientFill = GradientFill.Solid; areaSeries.MouseInteraction = false; areaSeries.PointsVisible = false; _chart.ViewXY.AreaSeries.Add(areaSeries); _chart.EndUpdate(); _chart.ViewXY.ZoomPanOptions.MouseWheelZooming = MouseWheelZooming.Off; parentControl.Children.Add(_chart); }
/// <summary> /// 构造 /// </summary> /// <param name="parentControl">父控件</param> /// <param name="verticalScrolling">是否可以垂直滚动</param> /// <param name="resolution">分辨率</param> /// <param name="timeStepMs"></param> /// <param name="timeRangeLengthSec"></param> /// <param name="freqMin">最小频率</param> /// <param name="freqMax">最大频率</param> /// <param name="title">频谱仪标题(未使用)</param> /// <param name="toneColor"></param> public SpectrogramViewXYIntensity(Panel parentControl, bool verticalScrolling, int resolution, double timeStepMs, double timeRangeLengthSec, double freqMin, double freqMax, string title, Color toneColor) { _parentControl = parentControl; double dDefaultYMax = 7000000; double dAxisTimeScaleMin = timeStepMs / 1000.0 - timeRangeLengthSec; double dAxisTimeScaleMax = 0; m_dStepTime = timeStepMs / 1000.0; m_dTimeRangeLengthSec = timeRangeLengthSec; //Create chart LightningChartUltimate chart = new LightningChartUltimate(); _chart = chart; _chart.VerticalAlignment = VerticalAlignment.Top; _chart.HorizontalAlignment = HorizontalAlignment.Left; m_bIsHorizontalScrolling = !verticalScrolling; chart.BeginUpdate(); parentControl.Children.Add(chart); _chart.ChartBackground.Color = ChartTools.CalcGradient(toneColor, Colors.Black, 65); _chart.ChartBackground.GradientDirection = 0; _chart.ChartBackground.GradientFill = GradientFill.Cylindrical; chart.ChartName = "Spectrogram chart"; chart.ViewXY.XAxes = ViewXY.CreateDefaultXAxes(); chart.ViewXY.YAxes = ViewXY.CreateDefaultYAxes(); chart.Title.Visible = false; chart.Title.Font = new WpfFont("Segoe UI", 13, true, false); chart.Title.Offset.SetValues(0, 20); chart.ViewXY.ZoomPanOptions.RightMouseButtonAction = MouseButtonAction.None; chart.ViewXY.ZoomPanOptions.LeftMouseButtonAction = MouseButtonAction.None; chart.ViewXY.ZoomPanOptions.MouseWheelZooming = MouseWheelZooming.Off; //Disable automatic axis layouts chart.ViewXY.AxisLayout.AutoAdjustMargins = false; chart.ViewXY.AxisLayout.XAxisAutoPlacement = XAxisAutoPlacement.Off; chart.ViewXY.AxisLayout.YAxisAutoPlacement = YAxisAutoPlacement.Off; chart.ViewXY.AxisLayout.XAxisTitleAutoPlacement = false; chart.ViewXY.AxisLayout.YAxisTitleAutoPlacement = false; chart.ViewXY.Margins = new Thickness(60, 10, 15, 50); if (m_bIsHorizontalScrolling) { chart.ViewXY.XAxes[0].ValueType = AxisValueType.Time; chart.ViewXY.XAxes[0].Title.Text = "Time"; chart.ViewXY.XAxes[0].SetRange(dAxisTimeScaleMin, dAxisTimeScaleMax); chart.ViewXY.YAxes[0].ValueType = AxisValueType.Number; chart.ViewXY.YAxes[0].Title.Text = "Frequency(Hz)"; chart.ViewXY.YAxes[0].SetRange(freqMin, freqMax); } else { chart.ViewXY.XAxes[0].ValueType = AxisValueType.Number; chart.ViewXY.XAxes[0].Title.Text = "Frequency(Hz)"; chart.ViewXY.XAxes[0].SetRange(freqMin, freqMax); chart.ViewXY.YAxes[0].ValueType = AxisValueType.Time; chart.ViewXY.YAxes[0].Title.Text = "Time"; chart.ViewXY.YAxes[0].SetRange(dAxisTimeScaleMin, dAxisTimeScaleMax); } m_dCurrentTime = dAxisTimeScaleMax; Color color = Colors.White; chart.ViewXY.XAxes[0].MinorDivTickStyle.Visible = false; chart.ViewXY.XAxes[0].LabelsColor = Color.FromArgb(200, color.R, color.G, color.B); chart.ViewXY.XAxes[0].MajorDivTickStyle.Color = Colors.Orange; chart.ViewXY.XAxes[0].Title.Shadow.Style = TextShadowStyle.Off; chart.ViewXY.XAxes[0].LabelsNumberFormat = "0"; chart.ViewXY.YAxes[0].MinorDivTickStyle.Visible = false; chart.ViewXY.YAxes[0].LabelsColor = Color.FromArgb(200, color.R, color.G, color.B); chart.ViewXY.YAxes[0].MajorDivTickStyle.Color = Colors.Orange; chart.ViewXY.YAxes[0].Title.Shadow.Style = TextShadowStyle.Off; chart.ViewXY.YAxes[0].LabelsNumberFormat = "0"; //Setup legend box chart.ViewXY.LegendBoxes = ViewXY.CreateDefaultLegendBoxes(); chart.ViewXY.LegendBoxes[0].SeriesTitleColor = toneColor; chart.ViewXY.LegendBoxes[0].ValueLabelColor = Colors.White; chart.ViewXY.LegendBoxes[0].IntensityScales.ScaleBorderColor = Colors.White; chart.ViewXY.LegendBoxes[0].Position = LegendBoxPositionXY.RightCenter; chart.ViewXY.LegendBoxes[0].Layout = LegendBoxLayout.Vertical; chart.ViewXY.LegendBoxes[0].Offset.SetValues(-20, 0); chart.ViewXY.LegendBoxes[0].Fill.Style = RectFillStyle.None; chart.ViewXY.LegendBoxes[0].Shadow.Visible = false; chart.ViewXY.LegendBoxes[0].BorderWidth = 0; chart.ViewXY.LegendBoxes[0].IntensityScales.ScaleSizeDim1 = 100; chart.ViewXY.LegendBoxes[0].IntensityScales.ScaleSizeDim2 = 15; chart.ViewXY.LegendBoxes[0].ShowCheckboxes = false; chart.ViewXY.LegendBoxes[0].UnitsColor = Colors.Transparent; chart.Name = "Spectrogram"; //Create grid _grid = new IntensityGridSeries(chart.ViewXY, chart.ViewXY.XAxes[0], chart.ViewXY.YAxes[0]); chart.ViewXY.IntensityGridSeries.Add(_grid); m_iSizeTimeSlots = (int)Math.Round(timeRangeLengthSec / (timeStepMs / 1000.0)); m_iSizeResolution = resolution; m_aFastData = new double[m_iSizeTimeSlots][]; for (int iTimeSlot = 0; iTimeSlot < m_iSizeTimeSlots; iTimeSlot++) { m_aFastData[iTimeSlot] = new double[m_iSizeResolution]; } if (m_bIsHorizontalScrolling) { _grid.SetValuesData(m_aFastData, IntensityGridValuesDataOrder.ColumnsRows); } else { _grid.SetValuesData(m_aFastData, IntensityGridValuesDataOrder.RowsColumns); } _grid.Data = null; _grid.SetRangesXY(chart.ViewXY.XAxes[0].Minimum, chart.ViewXY.XAxes[0].Maximum, chart.ViewXY.YAxes[0].Minimum, chart.ViewXY.YAxes[0].Maximum); _grid.ContourLineType = ContourLineTypeXY.None; _grid.WireframeType = SurfaceWireframeType.None; _grid.PixelRendering = true; _grid.MouseInteraction = false; _grid.ValueRangePalette = CreatePalette(_grid, dDefaultYMax); _grid.Title.Text = "P(f)"; chart.EndUpdate(); }
private void OnChannelAdded(ChannelToken token) { try { var samecount = m_chart.ViewXY.PointLineSeries.Where(o => o.Tag == token).Count(); if (samecount >= 2) //每次添加两个相同Tag { return; } if (ViewModel == null || !(token is BaseWaveChannelToken)) { return; } m_chart.BeginUpdate(); var axisYnone = m_chart.ViewXY.YAxes.Where(o => o.Units.Text == "none").SingleOrDefault(); m_chart.ViewXY.YAxes.Remove(axisYnone); BaseWaveChannelToken vToken = token as BaseWaveChannelToken; //Create new Y axis for each series AxisY axisY = new AxisY(m_chart.ViewXY); axisY.Tag = vToken; axisY.Title.Visible = false; axisY.AxisThickness = 2; axisY.AxisColor = Color.FromArgb(0xff, 0xff, 0xff, 0xff);//Color.FromArgb(100, 135, 205, 238); m_chart.ViewXY.YAxes.Add(axisY); //Create a point-line series int count = m_chart.ViewXY.PointLineSeries.Count / 2; while (count > 15) { count -= 15; } //Color color = DefaultColors.SeriesForBlackBackgroundWpf[count]; PointLineSeries series = new PointLineSeries(m_chart.ViewXY, m_chart.ViewXY.XAxes[0], axisY); series.MouseInteraction = false; series.LineStyle.Color = vToken.SolidColorBrush.Color; //color; series.LineStyle.AntiAliasing = LineAntialias.None; series.LineStyle.Width = 1; series.Tag = vToken; series.Title.Text = vToken.DisplayName;//htzk123 series.Title.Font = new WpfFont(System.Drawing.FontFamily.GenericSansSerif, 10f, System.Drawing.FontStyle.Bold); series.Title.Color = ChartTools.CalcGradient(Colors.White, Colors.White, 50); series.Title.HorizontalAlign = AlignmentHorizontal.Left; series.Title.VerticalAlign = AlignmentVertical.Top; series.Title.MoveByMouse = false; series.Title.MouseInteraction = false; series.Title.Offset = new PointIntXY(5, 5); series.Title.Visible = false; AxisY axisYPhase = new AxisY(m_chart.ViewXY); axisYPhase.Tag = vToken; axisYPhase.Title.Visible = false; axisYPhase.AxisThickness = 2; axisYPhase.AxisColor = Color.FromArgb(0xff, 0xff, 0xff, 0xff);//Color.FromArgb(100, 135, 205, 238); m_chart.ViewXY.YAxes.Add(axisYPhase); PointLineSeries phaseSeries = new PointLineSeries(m_chart.ViewXY, m_chart.ViewXY.XAxes[0], axisYPhase); phaseSeries.MouseInteraction = false; phaseSeries.LineStyle.Color = vToken.SolidColorBrush.Color; //color; phaseSeries.LineStyle.AntiAliasing = LineAntialias.None; phaseSeries.LineStyle.Width = 1; phaseSeries.Tag = vToken; phaseSeries.Title.Text = vToken.DisplayName + "相位";//htzk123 phaseSeries.Visible = false; if (m_chart.ViewXY.Annotations.Count == 0) { CreateCalloutAnnotation(); CreateFAAnnotation(); } //Update Annotation AnnotationXY annotation = m_chart.ViewXY.Annotations[1]; string[] branches = annotation.Text.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); StringBuilder sb = new StringBuilder(); for (int i = 0; i < branches.Length; i++) { sb.AppendLine(branches[i]); } string freText = "F"; string ampText = "A"; if (vToken.VData != null && vToken.VData.FFTLength != 0 && vToken.VData.Frequency != null && vToken.VData.Amplitude != null && vToken.VData.Phase != null) { int length = vToken.VData.FFTLength; SeriesPoint[] points = new SeriesPoint[length]; SeriesPoint[] phasePoints = new SeriesPoint[length]; for (int i = 0; i < length; i++) { points[i] = new SeriesPoint(vToken.VData.Frequency[i], vToken.VData.Amplitude[i]); phasePoints[i] = new SeriesPoint(vToken.VData.Frequency[i], vToken.VData.Phase[i]); } series.Points = points; phaseSeries.Points = phasePoints; var fftValuesDict = vToken.VData.Amplitude.Select((s, i) => new { Key = i, Value = s }).OrderByDescending(o => o.Value).Take(6); foreach (var item in fftValuesDict) { freText += string.Format("{0,6}|", vToken.VData.Frequency[item.Key].ToString("0.00")); ampText += string.Format("{0,6}|", item.Value.ToString("0.00")); } } sb.AppendLine(freText); sb.AppendLine(ampText); annotation.Text = sb.ToString(); m_chart.ViewXY.PointLineSeries.Add(series); m_chart.ViewXY.PointLineSeries.Add(phaseSeries); m_chart.ViewXY.AxisLayout.Segments.Add(new YAxisSegment(m_chart.ViewXY.AxisLayout)); axisY.SegmentIndex = m_chart.ViewXY.AxisLayout.Segments.Count - 1; axisYPhase.SegmentIndex = m_chart.ViewXY.AxisLayout.Segments.Count - 1; m_chart.ViewXY.Annotations[0].AssignYAxisIndex = -1; m_chart.ViewXY.Annotations[0].AssignYAxisIndex = 0; m_chart.ViewXY.ZoomToFit(); m_chart.EndUpdate(); } catch (Exception ex) { EventAggregatorService.Instance.EventAggregator.GetEvent <ThrowExceptionEvent>().Publish(Tuple.Create <string, Exception>("数据回放-频域-添加通道", ex)); } }
private void OnChannelAdded(ChannelToken token) { try { var sameseries = m_chart.ViewXY.FreeformPointLineSeries.Where(o => o.Tag == token).SingleOrDefault(); if (sameseries != null) { return; } m_chart.BeginUpdate(); #region if (token is BaseAlarmChannelToken) { var anToken = token as BaseAlarmChannelToken; string unit = (anToken.DataContracts[0].Unit == null) ? "" : anToken.DataContracts[0].Unit; FreeformPointLineSeries series = new FreeformPointLineSeries(m_chart.ViewXY, m_chart.ViewXY.XAxes[0], m_chart.ViewXY.YAxes[0]); //Make points visible series.PointsVisible = true; //Don't show line series.LineVisible = false; //Set indidividual point color series.IndividualPointColoring = PointColoringTarget.Color1; //Set other point style options series.PointStyle.Shape = Arction.Wpf.Charting.Shape.Circle; series.PointStyle.Height = series.PointStyle.Width = 1; series.PointStyle.BorderColor = anToken.SolidColorBrush.Color; series.PointStyle.Color1 = anToken.SolidColorBrush.Color; //color; series.PointStyle.Color2 = anToken.SolidColorBrush.Color; //color; series.PointStyle.Color3 = anToken.SolidColorBrush.Color; //color; series.PointStyle.BorderWidth = 0f; series.PointStyle.GradientFill = GradientFillPoint.Solid; //Disable mouse interaction from series series.MouseInteraction = false; series.Tag = token; //series.LineStyle.Color = anToken.SolidColorBrush.Color; //color; series.Title.Text = anToken.DisplayName;//htzk123 series.Title.Font = new WpfFont(System.Drawing.FontFamily.GenericSansSerif, 10f, System.Drawing.FontStyle.Bold); series.Title.Color = ChartTools.CalcGradient(Colors.White, Colors.White, 50); SeriesPoint[] points = new SeriesPoint[anToken.DataContracts.Count]; for (int i = 0; i < points.Length; i++) { if (anToken.DataContracts[i] is IBaseDivfreSlot) { points[i].X = (anToken.DataContracts[i] as IBaseDivfreSlot).RPM.Value; } else { points[i].X = 0; } points[i].Y = anToken.DataContracts[i].Result.Value; } series.Points = points; SeriesEventMarker marker = new SeriesEventMarker(); // Create marker for point size change illusion. marker.Symbol.Height = marker.Symbol.Width = 5; marker.Symbol.BorderColor = anToken.SolidColorBrush.Color; //Colors.Orange; marker.Symbol.BorderWidth = 0; marker.Symbol.Shape = Arction.Wpf.Charting.Shape.Circle; marker.Symbol.GradientFill = GradientFillPoint.Solid; marker.Symbol.Color1 = marker.Symbol.Color2 = marker.Symbol.Color3 = anToken.SolidColorBrush.Color; //Colors.Transparent; marker.MouseInteraction = false; marker.Label.Visible = false; marker.Visible = false; series.SeriesEventMarkers.Add(marker); m_chart.ViewXY.FreeformPointLineSeries.Add(series); double minX = m_chart.ViewXY.FreeformPointLineSeries.SelectMany(o => o.Points).Select(o => o.X).Min(); double maxX = m_chart.ViewXY.FreeformPointLineSeries.SelectMany(o => o.Points).Select(o => o.X).Max(); double minY = m_chart.ViewXY.FreeformPointLineSeries.SelectMany(o => o.Points).Select(o => o.Y).Min(); double maxY = m_chart.ViewXY.FreeformPointLineSeries.SelectMany(o => o.Points).Select(o => o.Y).Max(); m_chart.ViewXY.XAxes[0].SetRange(minX - 20, maxX + 20); m_chart.ViewXY.YAxes[0].SetRange(minY, maxY); } #endregion UpdateBox(); UpdatePointColors(); m_chart.EndUpdate(); } catch (Exception ex) { EventAggregatorService.Instance.EventAggregator.GetEvent <ThrowExceptionEvent>().Publish(Tuple.Create <string, Exception>("数据回放-分布图-添加通道", ex)); m_chart.EndUpdate(); } }