Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        /// <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);
        }
Exemple #4
0
        /// <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);
        }
Exemple #5
0
        //初始化图表
        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);
        }
Exemple #6
0
        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;
            };
        }
Exemple #7
0
        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));
            }
        }
Exemple #8
0
        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();
        }
Exemple #10
0
        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();
        }
Exemple #13
0
        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();
            }
        }