⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ddrawbox.cs

📁 用C#写的USB数据采集程序
💻 CS
📖 第 1 页 / 共 4 页
字号:

        #region "刻度标签"
        /// <summary>
        /// 获取或设置刻度标签
        /// </summary>
        public string LabelCalibrate
        {
            set
            {
                if (_labelcalibrate != value)
                {
                    _labelcalibrate = value;
                    if (_showcalibrate)
                    {
                        Draw(false);
                    }
                }
            }
            get
            {
                return _labelcalibrate;
            }
        }
        #endregion

        #region "激活的感兴趣区"
        /// <summary>
        /// 获取或设置激活的感兴趣区
        /// </summary>
        public string ActivatedROI
        {
            set
            {
                if (_activatedroi != value)
                {
                    _activatedroi = value;
                    Draw(false);
                }
            }
            get
            {
                return _activatedroi;
            }
        }
        #endregion

        #region "激活的感兴趣区颜色"
        /// <summary>
        /// 获取或设置激活的感兴趣区颜色
        /// </summary>
        public Color ActivatedColor
        {
            set
            {
                if (_activatedcolor != value)
                {
                    _activatedcolor = value;
                    Draw(false);
                }
            }
            get
            {
                return _activatedcolor;
            }
        }
        #endregion

        #endregion

        #endregion

        #region "构造函数"
        /// <summary>
		/// 构造函数
		/// </summary>
		public DDrawBox()
		{
			_data = new int[0];
            _datastart = 1;
            _dataend = 0;
			//
            _calibratecoefficient = new double[0];
            _showcalibrate = false;
            //
			_databmp = new Bitmap(100, 50);
            _g = Graphics.FromImage(_databmp);
            Image = _databmp;
			//
			_pencoordinate = new Pen(Color.Lime);
			_pendata = new Pen(Color.White);
            _pengrid = new Pen(Color.LightGreen);
            _penselectline = new Pen(Color.LightGreen);
			//
			_brushcoordinate = new SolidBrush(Color.Lime);
			_brushdata = new SolidBrush(Color.White);
            _brushregion = new SolidBrush(Color.LightGreen);
            _brushfill = new SolidBrush(Color.Black);
			//
			_coordinate = MyCoordinate.Line;
			//
			_minX = 0;
            _minY = 0;
			_maxY = 256;
			_maxX = 1024;
            _p = new Point[2];
			//
			_selectedx = -1;
			_regionstartx = -1;
			_regionendx = -1;
			//
			_fillcolor = Color.Black;
			_coordinatecolor = Color.Lime;
            _datacolor = Color.White;
            _selectlinecolor = Color.LightGreen;
            _regioncolor = Color.LightGreen;
            _gridcolor = Color.LightGreen;
            _activatedcolor = Color.Red;
			//
			_fill = true;
            //
            _px = new ArrayList();
            _py = new ArrayList();
            //
            _paintgridx = false;
            _paintgridy = false;
            //
            _roi = new Hashtable();
            //
            _activatedroi = "";
            //
            this.Size = new Size(100, 50);
        }
        #endregion

        #region "方法"

        #region "受保护的方法"

        #region "在改变大小时改变绘制位图的大小"
        /// <summary>
		/// 在改变大小时要改变绘制位图的大小
		/// </summary>
		/// <param name="e"></param>
		protected override void OnResize(System.EventArgs e)
		{
            base.OnResize(e);
            //改变位图大小
            if ((Width > 0) && (Height > 0))
            {
                _databmp.Dispose();
                _databmp = new Bitmap(Width, Height);
                Image = _databmp;
                _g = Graphics.FromImage(_databmp);
                //重画
                Draw(true);
            }
        }
        #endregion

        #region "绘制背景和坐标"
        /// <summary>
		/// 绘制背景和坐标
		/// </summary>
        protected void PaintBG()
        {
            int height = _databmp.Height;
            int width = _databmp.Width;

            _g.Clear(_fillcolor);

            //画y坐标线
            _g.DrawLine(_pencoordinate, 25, 10, 25, height - 15);
            //画x坐标线
            _g.DrawLine(_pencoordinate, 25, height - 15, width - 25, height - 15);

            using (Font vf = new Font("Tahoma", 7, FontStyle.Regular), vf1 = new Font("Tahoma", 6, FontStyle.Regular))
            {
                int basecount;
                if (_maxX < 10000)
                {
                    basecount = (int)((width - 50) / _g.MeasureString(_maxX.ToString() + "9", vf).Width);
                }
                else
                {
                    basecount = (int)((width - 50) / _g.MeasureString("9.9E9", vf).Width);
                }
                int cbase = 1;

                //确定x坐标基数
                foreach (int n in nbase)
                {
                    cbase = n;
                    if ((_maxX - _minX) / n < basecount)
                    {
                        break;
                    }
                }

                //画x坐标点
                int tmpx;
                _px.Clear();
                for (int i = (int)(_minX / cbase) - 1; cbase * i <= _maxX; i++)
                {
                    if (cbase * i >= _minX)
                    {
                        tmpx = 25 + (int)((double)(cbase * i - _minX) * (width - 50) / (_maxX - _minX));
                        _g.DrawLine(_pencoordinate, tmpx, height - 15, tmpx, height - 10);
                        string s = Convert.ToString(cbase * i);
                        if (cbase * i >= 10000)
                        {
                            s = s[0] + "." + s[1] + "E" + Convert.ToString(s.Length - 1);
                        }
                        else
                        {
                            if (cbase * i <= -1000)
                            {
                                s = "-" + s[1] + "." + s[2] + "E" + Convert.ToString(s.Length - 2);
                            }
                        }
                        _g.DrawString(s, vf, _brushcoordinate, tmpx + 1 - _g.MeasureString(s, vf).Width / 2, height - 10);
                        _px.Add(tmpx);
                    }
                }

                basecount = (int)((height - 30) / _g.MeasureString("1", vf).Height) + 1;
                cbase = 1;

                //确定y坐标基数
                foreach (int n in nbase)
                {
                    cbase = n;
                    if ((_maxY - _minY)/ n < basecount)
                    {
                        break;
                    }
                }

                //画y坐标点
                int tmpy;
                _py.Clear();
                for (int i = (int)(_minY / cbase) - 1; cbase * i <= _maxY; i++)
                {
                    if (cbase * i >= _minY)
                    {
                        tmpy = height - 15 - (int)((double)(cbase * i - _minY) * (height - 30) / (_maxY - _minY));
                        _g.DrawLine(_pencoordinate, 20, tmpy, 25, tmpy);
                        string s = Convert.ToString(cbase * i);
                        if (cbase * i >= 10000)
                        {
                            s = s[0] + "." + s[1] + "E" + Convert.ToString(s.Length - 1);
                            _g.DrawString(s, vf, _brushcoordinate, (25 - _g.MeasureString(s, vf).Width) / 2, tmpy - _g.MeasureString(s, vf).Height + 1);
                        }
                        else
                        {
                            if (cbase * i <= -1000)
                            {
                                s = "-" + s[1] + "." + s[2] + "E" + Convert.ToString(s.Length - 2);
                                _g.DrawString(s, vf1, _brushcoordinate, (25 - _g.MeasureString(s, vf1).Width) / 2, tmpy - _g.MeasureString(s, vf1).Height + 1);
                            }
                            else
                            {
                                _g.DrawString(s, vf, _brushcoordinate, (25 - _g.MeasureString(s, vf).Width) / 2, tmpy - _g.MeasureString(s, vf).Height + 1);
                            }
                        }
                        _py.Add(tmpy);
                    }
                }
            }//using font
        }
        #endregion

        #region "把数据转换为要绘制的点的坐标"
        /// <summary>
		/// 绘制数据
		/// </summary>
        protected void BuildDataPoint()
        {
            // 绘画区域超过了数据区
            if ((_dataend < _minX) || (_datastart > _maxX))
            {
                return;
            }

            int maxy = _databmp.Height - 30;
            float dy = (float)maxy / (_maxY - _minY);
            int maxx = _databmp.Width - 49;
            float dx = (float)maxx / (_maxX - _minX);
            int maxdrawx = Math.Min(_dataend, _maxX);
            int mindrawx = Math.Max(_datastart, _minX);
            //绘画点数
            int n = maxdrawx - mindrawx + 1;

            int x;
            int y;
            maxy += 15;
            //左下角的点
            _p[0].X = (int)((mindrawx - _minX) * dx) + 25;
            _p[0].Y = maxy;
            //右下角的点
            _p[_p.GetUpperBound(0)].X = (int)((maxdrawx - _minX) * dx) + 25;
            _p[_p.GetUpperBound(0)].Y = maxy;

            int datax;
            if (_datastart >= _minX)
            {
                datax = 0;
            }
            else
            {
                datax = _minX - _datastart;
            }

            //根据不同的数据坐标来绘画
            if (_coordinate == MyCoordinate.Line)
            {
                for (int i = 0; i < n; i++)
                {
                    x = _p[0].X + (int)(i * dx);
                    y = (int)(maxy - (_data[i + datax] - _minY) * dy);
                    if (y < 15)
                    {
                        y = 15;
                    } if (y > maxy)
                    {
                        y = maxy;
                    }
                    _p[i + 1].X = x;
                    _p[i + 1].Y = y;
                }
            }
            else
            {
                int k;
                k = (int)(_maxY / Math.Log10(_maxY));
                for (int i = 0; i < n; i++)
                {
                    x = _p[0].X + (int)(i * dx);
                    y = (int)(maxy - k * Math.Log10(_data[i + datax] - _minY) * dy);
                    if (y < 15)
                    {
                        y = 15;
                    } if (y > maxy)
                    {
                        y = maxy;
                    }
                    _p[i + 1].X = x;
                    _p[i + 1].Y = y;
                }
            }
        }
        #endregion

        #region "绘制网格、选择线和选择区域"
        /// <summary>
        /// 绘制网格、选择线和选择区域
		/// </summary>
        protected void PaintSelected()
        {
            int maxx = _databmp.Width - 49;
            float dx = (float)maxx / (_maxX - _minX);

            //清除显示区
            _g.FillRectangle(_brushfill, 26, 0, maxx, Height - 15);

            //显示选择区域
            if ((_regionstartx >= _minX) && (_regionendx <= _maxX) && (_regionstartx < _regionendx))
            {
                _g.FillRectangle(_brushregion, 25 + (int)((_regionstartx - _minX) * dx), 15, (int)((_regionendx - _regionstartx) * dx), Height - 30);
            }

            //显示x网格
            if (_paintgridx)
            {
                foreach (int x in _px)
                {
                    _g.DrawLine(_pengrid, x, 15, x, Height - 15);
                }
            }

            //显示y网格
            if (_paintgridy)
            {
                foreach (int y in _py)
                {
                    _g.DrawLine(_pengrid, 25, y, Width - 25, y);
                }
            }
            //显示数据
            if (_fill)
            {
                _p[0].Y = Height - 15;
                _p[_p.GetUpperBound(0)].Y = Height - 15;
                _g.FillPolygon(_brushdata, _p);
            }
            _p[0].Y = _p[1].Y;
            _p[_p.GetUpperBound(0)].Y = _p[_p.GetUpperBound(0) - 1].Y;
            _g.DrawLines(_pendata, _p);

            //显示道址及其计数
            if ((_selectedx >= _minX) && (_selectedx <= _maxX))
            {
                using (Font font = new Font(FontFamily.GenericSerif, 9, FontStyle.Regular))
                {
                    string info;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -