private void LoadData(C3DFile file, Int32 cid)
        {
            if (file == null)
            {
                return;
            }

            C3DParameterCache cache = C3DParameterCache.CreateCache(file);

            C3DHeaderEvent[] events = file.Header.GetAllHeaderEvents();

            UInt16 firstFrameIndex = file.Header.FirstFrameIndex;
            UInt16 lastFrameIndex  = file.Header.LastFrameIndex;
            UInt16 samplePerFrame  = cache.AnalogSamplesPerFrame;

            this._points = new Dictionary <Single, Single>();
            this._status = new ChartScaleStatus(firstFrameIndex, lastFrameIndex, Single.MaxValue, Single.MinValue);

            for (Int32 i = 0; i < samplePerFrame; i++)
            {
                this.lvItems.Columns.Add(new ColumnHeader()
                {
                    Text = String.Format("SP {0}", (i + 1).ToString()), Width = 70
                });
            }

            for (Int32 i = 0; i < file.AllFrames.Count; i++)
            {
                Int32            index   = firstFrameIndex + i;
                C3DAnalogSamples point3D = file.AllFrames[i].AnalogSamples[cid];

                for (Int32 j = 0; j < point3D.SampleCount; j++)
                {
                    this._points[index + (Single)(j) / (Single)(point3D.SampleCount)] = point3D[j];
                    this._status.Mins[1] = Math.Min(this._status.Mins[1], point3D[j]);
                    this._status.Maxs[1] = Math.Max(this._status.Maxs[1], point3D[j]);
                }

                String[] item = new String[file.AllFrames[i].AnalogSamples[cid].SampleCount + 1];
                item[0] = (file.Header.FirstFrameIndex + i).ToString();

                for (Int32 j = 1; j < item.Length; j++)
                {
                    item[j] = point3D[j - 1].ToString("F3");
                }

                this.lvItems.Items.Add(new ListViewItem(item));
            }

            this._status.Maxs[0] = (this._status.Maxs[0] == this._status.Mins[0] ? this._status.Maxs[0] + 1 : this._status.Maxs[0]);
            this._status.Maxs[1] = (this._status.Maxs[1] == this._status.Mins[1] ? this._status.Maxs[1] + 1 : this._status.Maxs[1]);

            ChartBindingHelper.BindDataToChart <Single, Single>(this.chartView, this._points, this._status.Mins[0], this._status.Maxs[0], this._status.Mins[1], this._status.Maxs[1]);
            this.ShowStripLine(events, cache.FrameRate);
            this.SetMarker();
        }
Beispiel #2
0
        /// <summary>
        /// 缩放图表
        /// </summary>
        /// <param name="chart">图表控件</param>
        /// <param name="status">图表状态</param>
        /// <param name="type">轴类型(0为X轴,1为Y轴)</param>
        /// <param name="scale">缩放等级</param>
        internal static void ZoomChart(Chart chart, ChartScaleStatus status, Byte type, Int32 scale)
        {
            Axis  axis     = (type == 0 ? chart.ChartAreas[0].AxisX : chart.ChartAreas[0].AxisY);
            Int32 newScale = status.Scales[type] + scale;

            if (scale == 0 || newScale == 0)//重置
            {
                axis.Maximum = status.Maxs[type];
                axis.Minimum = status.Mins[type];
                axis.ScaleView.ZoomReset(0);

                status.Scales[type] = 0;
            }
            else
            {
                if (newScale > 0)//图表区域小于显示区域
                {
                    Double diff = status.Maxs[type] - status.Mins[type];

                    axis.Maximum = status.Maxs[type] + diff * 0.1 * Math.Pow(1.5, newScale);
                    axis.Minimum = status.Mins[type] - diff * 0.1 * Math.Pow(1.5, newScale);
                }
                else if (newScale < 0 && scale < 0)//图表区域大于显示区域 放大
                {
                    Double diff = axis.ScaleView.ViewMaximum - axis.ScaleView.ViewMinimum;

                    Double vMin = axis.ScaleView.ViewMinimum + diff * 0.1 * (1.0 + Math.Pow(1.5, newScale));
                    Double vMax = axis.ScaleView.ViewMaximum - diff * 0.1 * (1.0 + Math.Pow(1.5, newScale));

                    if (vMin >= vMax)
                    {
                        return;
                    }

                    axis.ScaleView.Zoom(vMin, vMax - vMin, DateTimeIntervalType.Number, true);
                }
                else if (newScale < 0 && scale > 0)//图表区域大于显示区域 缩小
                {
                    axis.ScaleView.ZoomReset();
                }

                status.Scales[type] = newScale;
            }
        }