// Create a ValueRangePalette to present Heatmap's data.
        private ValueRangePalette CreatePalette(IntensityGridSeries series)
        {
            // 2. Creating palette for IntensityGridSeries.
            var palette = new ValueRangePalette(series);

            // 3. LightningChart has some preset values for palette steps.
            // Clear the preset values from palette before setting new ones.
            foreach (var step in palette.Steps)
            {
                step.Dispose();
            }
            palette.Steps.Clear();

            // 4. Adding steps into palette.
            // Palette is used for presenting data in Heat Map with different colors based on their value.
            palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(0, 0, 255), -25));
            palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(20, 150, 255), 0));
            palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(0, 255, 0), 25));
            palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(255, 255, 20), 50));
            palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(255, 150, 20), 75));
            palette.Steps.Add(new PaletteStep(palette, Color.FromRgb(255, 0, 0), 100));
            palette.Type     = PaletteType.Gradient;
            palette.MinValue = -50;

            // Return the created palette.
            return(palette);
        }
Пример #2
0
        /// <summary>
        /// 设置调色板的颜色区间
        /// </summary>
        /// <param name="ownerSeries"></param>
        /// <param name="valueMin"></param>
        /// <param name="valueMax"></param>
        /// <returns></returns>
        private ValueRangePalette CreatePalette(IntensityGridSeries ownerSeries, double valueMin, double valueMax)
        {
            ValueRangePalette palette = new ValueRangePalette(ownerSeries);

            palette.Steps.Clear();
            ExampleUtils.DisposeAllAndClear(palette.Steps);
            double valueStep = (valueMax - valueMin) / 20.0;

            palette.Steps.Add(new PaletteStep(palette, Color.FromArgb(0, 17, 190), valueMin));
            palette.Steps.Add(new PaletteStep(palette, Color.FromArgb(0, 17, 190), valueMin + valueStep * 2));
            palette.Steps.Add(new PaletteStep(palette, Color.FromArgb(0, 151, 255), valueMin + valueStep * 3));
            palette.Steps.Add(new PaletteStep(palette, Color.FromArgb(0, 221, 151), valueMin + valueStep * 4));
            palette.Steps.Add(new PaletteStep(palette, Color.FromArgb(34, 236, 85), valueMin + valueStep * 5));
            palette.Steps.Add(new PaletteStep(palette, Color.FromArgb(84, 255, 51), valueMin + valueStep * 6));
            palette.Steps.Add(new PaletteStep(palette, Color.FromArgb(135, 255, 17), valueMin + valueStep * 7));
            palette.Steps.Add(new PaletteStep(palette, Color.FromArgb(169, 255, 0), valueMin + valueStep * 8));
            palette.Steps.Add(new PaletteStep(palette, Color.FromArgb(204, 255, 0), valueMin + valueStep * 9));
            palette.Steps.Add(new PaletteStep(palette, Color.FromArgb(255, 255, 0), valueMin + valueStep * 10));
            palette.Steps.Add(new PaletteStep(palette, Color.FromArgb(255, 204, 0), valueMin + valueStep * 11));
            palette.Steps.Add(new PaletteStep(palette, Color.FromArgb(255, 170, 0), valueMin + valueStep * 12));
            palette.Steps.Add(new PaletteStep(palette, Color.FromArgb(255, 136, 0), valueMin + valueStep * 13));
            palette.Steps.Add(new PaletteStep(palette, Color.FromArgb(255, 92, 0), valueMin + valueStep * 14));
            palette.Steps.Add(new PaletteStep(palette, Color.FromArgb(255, 51, 0), valueMin + valueStep * 15));
            palette.Steps.Add(new PaletteStep(palette, Color.FromArgb(255, 36, 0), valueMin + valueStep * 16));
            palette.Steps.Add(new PaletteStep(palette, Color.FromArgb(255, 56, 56), valueMin + valueStep * 17));
            palette.Steps.Add(new PaletteStep(palette, Color.FromArgb(255, 115, 171), valueMin + valueStep * 18));
            palette.Steps.Add(new PaletteStep(palette, Color.FromArgb(255, 170, 238), valueMin + valueStep * 19));
            palette.Steps.Add(new PaletteStep(palette, Color.FromArgb(255, 220, 255), valueMin + valueStep * 20));
            palette.Type     = PaletteType.Gradient;
            palette.MinValue = valueMin;

            return(palette);
        }
Пример #3
0
        // Create chart.
        public void CreateChart()
        {
            // Create chart.
            _chart = new LightningChartUltimate();

            // Set chart control into the parent container.
            _chart.Parent = this;
            _chart.Dock   = DockStyle.Fill;

            // Disable rendering before updating chart properties to improve performance
            // and to prevent unnecessary chart redrawing while changing multiple properties.
            _chart.BeginUpdate();

            // Set a LegendBox into a chart with vertical layout.
            _chart.ViewXY.LegendBoxes[0].Layout = LegendBoxLayout.Vertical;

            // Configure X- and Y-axis.
            var axisX = _chart.ViewXY.XAxes[0];
            var axisY = _chart.ViewXY.YAxes[0];

            axisX.Title.Text = "X-Axis Position";
            axisX.SetRange(MinX, MaxX);
            axisY.Title.Text = "Y-Axis Position";
            axisY.SetRange(MinY, MaxY);

            // 1. Create a Heat Map instance as IntensityGridSeries.
            _heatMap = new IntensityGridSeries(_chart.ViewXY, axisX, axisY);

            // Set Heat Map's contents and properties.
            _heatMap.LegendBoxUnits   = "°C";
            _heatMap.Title.Text       = "Heat Map";
            _heatMap.MouseInteraction = false;
            _heatMap.PixelRendering   = false;
            _heatMap.SetRangesXY(MinX, MaxX, MinY, MaxY);
            _heatMap.SetSize(_columns, _rows);

            // Create a ValueRangePalette to present Heat Map's data.
            if (_heatMap.ValueRangePalette != null)
            {
                _heatMap.ValueRangePalette.Dispose();
            }
            _heatMap.ValueRangePalette = CreatePalette(_heatMap);

            // Add Heat Map to chart.
            _chart.ViewXY.IntensityGridSeries.Add(_heatMap);

            // Auto-scale X- and Y-axes.
            _chart.ViewXY.ZoomToFit();

            #region Hidden polishing
            // Customize chart.
            CustomizeChart(_chart);
            #endregion

            // Call EndUpdate to enable rendering again.
            _chart.EndUpdate();
        }
Пример #4
0
        // Safe disposal of LightningChart components when the window is closed.
        private void Window_Closed(object window_Closed, System.EventArgs e)
        {
            // Dispose Chart.
            _chart.Dispose();
            _chart = null;

            // Dispose Heat Map.
            _heatMap.Dispose();
            _heatMap = null;
        }
Пример #5
0
        // Safe disposal of LightningChart components when the form is closed.
        private void Form_Closed(Object sender, FormClosedEventArgs e)
        {
            // Dispose Chart.
            _chart.Dispose();
            _chart = null;

            // Dispose Heat Map.
            _heatMap.Dispose();
            _heatMap = null;
        }
Пример #6
0
        public void SetGraphs(LightningChartUltimate throughputGraph, LightningChartUltimate tfGraph,
                              LightningChartUltimate timeGraph, LightningChartUltimate freqGraph)
        {
            int    i, j;
            double fstart = _dataFileNode.fstart;
            double df     = _dataFileNode.fs / _dataFileNode.Nfft / 2;

            float[] maxfreq = _dbClientService.getMaxFrf(_dataFileNode.Id);
            flen = maxfreq.Length;

            _throughputGraph = throughputGraph;
            _tfGraph         = tfGraph;
            _timeGraph       = timeGraph;
            _freqGraph       = freqGraph;

            {
                _throughputGraph.BeginUpdate();
                _throughputGraph.Title.Visible = false;
                _throughputGraph.ViewXY.LegendBoxes[0].Position = LegendBoxPositionXY.TopRight;
                _throughputGraph.ViewXY.LegendBoxes[0].Layout   = LegendBoxLayout.Vertical;
                AxisX axisX = _throughputGraph.ViewXY.XAxes[0];
                axisX.Title.Text = "时间(s)";
                AxisY axisY0 = _throughputGraph.ViewXY.YAxes[0];
                axisY0.Title.Text = "声压(Pa)";
                AxisY axisY1 = new AxisY(_throughputGraph.ViewXY);
                axisY1.Title.Text = "总声压级(dBA)";
                _throughputGraph.ViewXY.YAxes.Add(axisY1);

                _maxrmsSeries                      = new SampleDataSeries(_throughputGraph.ViewXY, axisX, axisY1);
                _maxrmsSeries.Title.Text           = "最大总声压级";
                _maxrmsSeries.LineStyle.Color      = Colors.Red;
                _maxrmsSeries.SampleFormat         = SampleFormat.SingleFloat;
                _maxrmsSeries.FirstSampleTimeStamp = _dataFileNode.Nfft / _dataFileNode.fs / 2;
                _maxrmsSeries.SamplingFrequency    = _dataFileNode.fs / _dataFileNode.FrameDN;
                _throughputGraph.ViewXY.SampleDataSeries.Add(_maxrmsSeries);

                _rmsSeries                      = new SampleDataSeries(_throughputGraph.ViewXY, axisX, axisY1);
                _rmsSeries.Title.Text           = "总声压级";
                _rmsSeries.LineStyle.Color      = Colors.Blue;
                _rmsSeries.SampleFormat         = SampleFormat.SingleFloat;
                _rmsSeries.FirstSampleTimeStamp = _maxrmsSeries.FirstSampleTimeStamp;
                _rmsSeries.SamplingFrequency    = _maxrmsSeries.SamplingFrequency;
                _throughputGraph.ViewXY.SampleDataSeries.Add(_rmsSeries);

                _throughputgraph_verticalCursor                   = new LineSeriesCursor(_throughputGraph.ViewXY, axisX);
                _throughputgraph_verticalCursor.Style             = CursorStyle.VerticalNoTracking;
                _throughputgraph_verticalCursor.LineStyle.Color   = Colors.White;
                _throughputgraph_verticalCursor.LineStyle.Pattern = LinePattern.Dot;
                _throughputgraph_verticalCursor.LineStyle.Width   = 3;
                _throughputgraph_verticalCursor.ValueAtXAxis      = 10;
                _throughputgraph_verticalCursor.MouseHighlight    = MouseOverHighlight.None;
                _throughputGraph.ViewXY.LineSeriesCursors.Add(_throughputgraph_verticalCursor);

                _throughputSeries                      = new SampleDataSeries(_throughputGraph.ViewXY, axisX, axisY0);
                _throughputSeries.Title.Text           = "时域";
                _throughputSeries.LineStyle.Color      = Colors.Orange;
                _throughputSeries.SampleFormat         = SampleFormat.SingleFloat;
                _throughputSeries.FirstSampleTimeStamp = 0;
                _throughputSeries.SamplingFrequency    = _dataFileNode.fs;
                _throughputGraph.ViewXY.SampleDataSeries.Add(_throughputSeries);

                float[] _maxrmsData = new float[_dataFileNode.NFrame];
                _rmsData[0].CopyTo(_maxrmsData, 0);
                for (i = 1; i < _dataFileNode.NFrame; i++)
                {
                    for (j = 0; j < _dataFileNode.ChannelNum; j++)
                    {
                        if (_rmsData[j][i] > _maxrmsData[i])
                        {
                            _maxrmsData[i] = _rmsData[j][i];
                        }
                    }
                }
                _maxrmsSeries.SamplesSingle = _maxrmsData;

                _throughputGraph.EndUpdate();
            }

            {
                _tfGraph.BeginUpdate();
                _tfGraph.Title.Visible = false;
                //_tfGraph.ViewXY.LegendBoxes[0].Visible = false;
                _tfGraph.ViewXY.LegendBoxes[0].Position       = LegendBoxPositionXY.TopRight;
                _tfGraph.ViewXY.LegendBoxes[0].ShowCheckboxes = false;
                AxisX axisX = _tfGraph.ViewXY.XAxes[0];
                axisX.Title.Text = "时间(s)";
                AxisY axisY = _tfGraph.ViewXY.YAxes[0];
                axisY.Title.Text = "频率(Hz)";

                _tfSeries = new IntensityGridSeries(_throughputGraph.ViewXY, axisX, axisY);
                _tfSeries.PixelRendering    = true;
                _tfSeries.ContourLineType   = ContourLineTypeXY.None;
                _tfSeries.ValueRangePalette = CreatePalette(_tfSeries, 20, 100);
                _tfSeries.SetRangesXY(_dataFileNode.Nfft / _dataFileNode.fs / 2,
                                      _dataFileNode.Nfft / _dataFileNode.fs / 2 + (_dataFileNode.NFrame - 1) * _dataFileNode.FrameDN / _dataFileNode.fs,
                                      fstart, fstart + (flen - 1) * df);
                _tfSeries.MouseInteraction      = false;
                _tfSeries.LegendBoxUnits        = null;
                _tfSeries.LegendBoxValuesFormat = "0";
                //_tfSeries.Title.Visible = false;
                _tfSeries.Title.Text = "声压级(dBA)";
                _tfGraph.ViewXY.IntensityGridSeries.Add(_tfSeries);

                _tfgraph_verticalCursor                   = new LineSeriesCursor(_tfGraph.ViewXY, axisX);
                _tfgraph_verticalCursor.Style             = CursorStyle.VerticalNoTracking;
                _tfgraph_verticalCursor.LineStyle.Color   = Colors.White;
                _tfgraph_verticalCursor.LineStyle.Pattern = LinePattern.Dot;
                _tfgraph_verticalCursor.LineStyle.Width   = 3;
                _tfgraph_verticalCursor.ValueAtXAxis      = _throughputgraph_verticalCursor.ValueAtXAxis;
                _tfgraph_verticalCursor.MouseHighlight    = MouseOverHighlight.None;
                _tfGraph.ViewXY.LineSeriesCursors.Add(_tfgraph_verticalCursor);

                _tfgraph_horizontalCursor = new ConstantLine(_tfGraph.ViewXY, axisX, axisY);
                _tfgraph_horizontalCursor.LineStyle.Color   = Colors.White;
                _tfgraph_horizontalCursor.LineStyle.Width   = 3;
                _tfgraph_horizontalCursor.LineStyle.Pattern = LinePattern.Dot;
                _tfgraph_horizontalCursor.Value             = 2000;
                _tfgraph_horizontalCursor.ShowInLegendBox   = false;
                _tfgraph_horizontalCursor.MouseHighlight    = MouseOverHighlight.None;
                _tfGraph.ViewXY.ConstantLines.Add(_tfgraph_horizontalCursor);

                spectrumCalculator = new SpectrumCalculator();
                double[] _aweight = Weight.GetWeightData(FreqWeightType.AWeight, fstart, df, flen);
                _aweightdb = new double[_aweight.Length];

                for (i = 0; i < flen; i++)
                {
                    _aweightdb[i] = 20 * Math.Log10(_aweight[i] * Math.Sqrt(2) / _dataFileNode.Nfft) + 93.9794;//93.9794为2e-5Pa参考
                }
                fstarti = (int)(fstart / df);

                ////Configure legend
                _tfGraph.ViewXY.LegendBoxes[0].IntensityScales.ScaleSizeDim1 = 400;
                _tfGraph.ViewXY.LegendBoxes[0].Layout = LegendBoxLayout.Horizontal;
                //_tfGraph.ViewXY.LegendBoxes[0].Offset = new PointIntXY(-15, -70);
                _tfGraph.ViewXY.LegendBoxes[0].ResetLocation();

                _tfGraph.EndUpdate();
            }

            {
                _timeGraph.BeginUpdate();
                _timeGraph.Title.Visible = false;
                _timeGraph.ViewXY.LegendBoxes[0].Position = LegendBoxPositionXY.TopRight;
                _timeGraph.ViewXY.LegendBoxes[0].Visible  = false;
                AxisX axisX = _timeGraph.ViewXY.XAxes[0];
                axisX.Title.Text = "时间(s)";
                AxisY axisY = _timeGraph.ViewXY.YAxes[0];
                axisY.Title.Text = "声压(Pa)";

                _timegraph_verticalCursor                   = new LineSeriesCursor(_timeGraph.ViewXY, axisX);
                _timegraph_verticalCursor.Style             = CursorStyle.VerticalNoTracking;
                _timegraph_verticalCursor.LineStyle.Color   = Colors.White;
                _timegraph_verticalCursor.LineStyle.Pattern = LinePattern.Dot;
                _timegraph_verticalCursor.LineStyle.Width   = 3;
                _timegraph_verticalCursor.ValueAtXAxis      = _dataFileNode.Nfft / _dataFileNode.fs / 2;
                _timegraph_verticalCursor.MouseHighlight    = MouseOverHighlight.None;
                _timeGraph.ViewXY.LineSeriesCursors.Add(_timegraph_verticalCursor);

                _timeSeries                      = new SampleDataSeries(_timeGraph.ViewXY, axisX, axisY);
                _timeSeries.Title.Text           = "时域";
                _timeSeries.LineStyle.Color      = Colors.Orange;
                _timeSeries.SampleFormat         = SampleFormat.SingleFloat;
                _timeSeries.FirstSampleTimeStamp = 0;
                _timeSeries.SamplingFrequency    = _dataFileNode.fs;
                _timeGraph.ViewXY.SampleDataSeries.Add(_timeSeries);

                _timeGraph.ViewXY.ZoomToFit();

                _timeGraph.EndUpdate();
            }

            {
                _freqGraph.BeginUpdate();
                _freqGraph.Title.Visible = false;
                _freqGraph.ViewXY.LegendBoxes[0].Position = LegendBoxPositionXY.TopRight;
                _freqGraph.ViewXY.LegendBoxes[0].Layout   = LegendBoxLayout.Vertical;
                AxisX axisX = _freqGraph.ViewXY.XAxes[0];
                axisX.Title.Text = "频率(Hz)";
                AxisY axisY = _freqGraph.ViewXY.YAxes[0];
                axisY.Title.Text = "声压级(dBA)";

                _freqgraph_verticalCursor                   = new LineSeriesCursor(_freqGraph.ViewXY, axisX);
                _freqgraph_verticalCursor.Style             = CursorStyle.VerticalNoTracking;
                _freqgraph_verticalCursor.LineStyle.Color   = Colors.White;
                _freqgraph_verticalCursor.LineStyle.Pattern = LinePattern.Dot;
                _freqgraph_verticalCursor.LineStyle.Width   = 3;
                _freqgraph_verticalCursor.ValueAtXAxis      = _tfgraph_horizontalCursor.Value;
                _freqgraph_verticalCursor.MouseHighlight    = MouseOverHighlight.None;
                _freqGraph.ViewXY.LineSeriesCursors.Add(_freqgraph_verticalCursor);

                _maxfreqSeries                      = new SampleDataSeries(_freqGraph.ViewXY, axisX, axisY);
                _maxfreqSeries.Title.Text           = "最大值";
                _maxfreqSeries.LineStyle.Color      = Colors.Red;
                _maxfreqSeries.SampleFormat         = SampleFormat.SingleFloat;
                _maxfreqSeries.FirstSampleTimeStamp = fstart;
                _maxfreqSeries.SamplingFrequency    = 1 / df;
                _freqGraph.ViewXY.SampleDataSeries.Add(_maxfreqSeries);
                _maxfreqSeries.SamplesSingle = maxfreq;

                _freqSeries                      = new SampleDataSeries(_freqGraph.ViewXY, axisX, axisY);
                _freqSeries.Title.Text           = "频谱";
                _freqSeries.LineStyle.Color      = Colors.Orange;
                _freqSeries.SampleFormat         = SampleFormat.DoubleFloat;
                _freqSeries.FirstSampleTimeStamp = fstart;
                _freqSeries.SamplingFrequency    = 1 / df;
                _freqGraph.ViewXY.SampleDataSeries.Add(_freqSeries);

                _freqGraph.ViewXY.ZoomToFit();

                _freqGraph.EndUpdate();
            }

            _ShowTimer.Interval = _dataFileNode.FrameDN / _dataFileNode.fs * 1000 / 2;
            _ShowTimer.Elapsed += _ShowTimer_Elapsed;

            _tfgraph_verticalCursor.PositionChanged += verticalCursor_PositionChanged;
            _tfgraph_horizontalCursor.ValueChanged  += horizontalCursor_ValueChanged;

            UpdateChannel();
        }
        /// <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();
        }
Пример #8
0
        /// <summary>
        /// 温度云图的具体初始化细节
        /// </summary>
        private void CreateCloudChart()
        {
            _chartTempCloud = new LightningChartUltimate();

            // Disable rendering, strongly recommended before updating chart properties.
            _chartTempCloud.BeginUpdate();

            _chartTempCloud.ActiveView = ActiveView.ViewXY;
            _chartTempCloud.Parent     = lightningChartUltimate4;
            _chartTempCloud.Name       = "出铁口铁水温度分布云图";
            _chartTempCloud.Title.Text = "出铁口铁水温度分布云图";
            _chartTempCloud.Dock       = DockStyle.Fill;

            // Setup x-axis.
            _chartTempCloud.ViewXY.XAxes[0].ValueType  = AxisValueType.Number;
            _chartTempCloud.ViewXY.XAxes[0].ScrollMode = XAxisScrollMode.None;
            _chartTempCloud.ViewXY.XAxes[0].SetRange(0, 100);
            _chartTempCloud.ViewXY.XAxes[0].Visible = false;

            // Setup y-axis.
            _chartTempCloud.ViewXY.YAxes[0].SetRange(0, 100);
            _chartTempCloud.ViewXY.YAxes[0].Visible = false;

            // Setup custom style.
            ExampleUtils.SetDarkFlatStyle(_chartTempCloud);

            // Setup legend box.
            _chartTempCloud.ViewXY.LegendBoxes[0].Layout = LegendBoxLayout.Vertical;
            _chartTempCloud.ViewXY.LegendBoxes[0].Offset = new PointIntXY(-15, -70);

            // Prepare intensity series for data.
            _intensityGrid = new IntensityGridSeries(_chartTempCloud.ViewXY, _chartTempCloud.ViewXY.XAxes[0], _chartTempCloud.ViewXY.YAxes[0]);
            _intensityGrid.ContourLineType       = ContourLineTypeXY.None;
            _intensityGrid.Optimization          = IntensitySeriesOptimization.DynamicData;
            _intensityGrid.LegendBoxUnits        = "°C";
            _intensityGrid.LegendBoxValuesFormat = "0";
            _intensityGrid.Title.Text            = "Heat map";
            _intensityGrid.MouseInteraction      = false;


            _chartTempCloud.ViewXY.IntensityGridSeries.Add(_intensityGrid);

            //Create mouse tracking point label
            _mouseTrackAnnotation                       = new AnnotationXY(_chartTempCloud.ViewXY, _chartTempCloud.ViewXY.XAxes[0], _chartTempCloud.ViewXY.YAxes[0]);
            _mouseTrackAnnotation.Fill.Color            = Color.FromArgb(0, 30, 30, 30);
            _mouseTrackAnnotation.Fill.GradientFill     = GradientFill.Solid;
            _mouseTrackAnnotation.BorderLineStyle.Color = Color.FromArgb(10, Color.White);
            //_mouseTrackAnnotation.Style = AnnotationStyle.RoundedRectangle;


            _mouseTrackAnnotation.Shadow.Visible = false;
            //_mouseTrackAnnotation.TargetCoordinateSystem = AnnotationTargetCoordinates.AxisValues;
            //annotation.Visible = false; //Don't show before the data point has been found
            _mouseTrackAnnotation.TextStyle.Color = Color.White;
            _mouseTrackAnnotation.TextStyle.Font  = new Font("Segoe UI", 15f, FontStyle.Bold);
            _mouseTrackAnnotation.Style           = AnnotationStyle.Rectangle;

            _mouseTrackAnnotation.LocationCoordinateSystem = CoordinateSystem.RelativeCoordinatesToTarget;
            _mouseTrackAnnotation.LocationRelativeOffset.SetValues(10, 10);
            _mouseTrackAnnotation.Sizing = AnnotationXYSizing.Automatic;
            _mouseTrackAnnotation.Anchor.SetValues(0, 0); //Anchor to Top-left
            _mouseTrackAnnotation.Visible          = false;
            _mouseTrackAnnotation.MouseInteraction = false;
            _chartTempCloud.ViewXY.Annotations.Add(_mouseTrackAnnotation);

            _intensityGrid.MouseInteraction = true;

            // Allow chart rendering.
            _chartTempCloud.EndUpdate();
        }