陋室铭
永远也不要停下学习的脚步(大道至简至易)

posts - 2169,comments - 570,views - 413万
   GDI+技术已经给我们提供了很好的基本绘制封装,从画线,到画圆,画椭圆,画矩形,画各种曲线,等等。但是我们要利用这些基本技术来完成现实中需要的功能。坐标就是一个很好的例子。

    二维坐标的概念对于大家来说并不陌生。由坐标系和具体数据图形组成。我们分两个部分来完成这个坐标。

    首先,完成坐标系的显示。坐标系定下来之后,它定义的某些参数直接影响到后面数据图形的显示。我们定义坐标系类为BaseGraphics类,

属性:
x轴每格坐标间的实际象素  public int XScreenScale
y轴每格坐标间的实际象素 public int YScreenScale
坐标的起点,X值(图纸上显示) public float RealXOrigin
坐标的起点,Y值(图纸上显示)public float RealYOrigin
坐标的起点,右边Y轴(图纸上显示)public float RealRightYOrigin
X轴每格代表的数值public float RealXTickValue
Y轴每格代表的数值public float RealYTickValue
X坐标的标签public string LabelX
Y坐标的标签  public string LabelY
相隔显示X坐标刻度值public int XInterval
相隔显示Y坐标刻度值public int YInterval
X坐标值精度public string XVirtualValue
Y坐标值精度 public string YVirtualValue

方法:

绘制图形方法:

绘制X坐标
  protected void DrawXAxis(Graphics g)

绘制Y坐标
  protected void DrawYAxis(Graphics g)

绘制顶部X坐标,不带刻度
protected void DrawTopXAxisWithoutScale(Graphics g)
绘制右边Y坐标,不带刻度
protected void DrawRightYAxisWithoutScale(Graphics g)

绘制X坐标分隔线及背景线
 protected void DrawXCompartLine(Graphics g)
 绘制Y坐标分隔线及背景线
protected void DrawYCompartLine(Graphics g)

 绘制X坐标标签
  protected void DrawXlabel(Graphics g)

 绘制Y坐标标签
  protected void DrawYlabel(Graphics g)
 
绘制单一坐标,一个Y轴,一个X轴
public void DrawSingleCoordinate(Graphics g) 
 

数据转换方法:


将X坐标转换成对应计算机的象素点
 计算机屏幕上对应的象素点X坐标
  public int  TranslateX(float x)
 
 将Y坐标转换成对应计算机的象素点
计算机屏幕上对应的象素点Y坐标
  public int TranslateY(float y)

  开始使用BaseGraphics类的时候,可以先继承它,这样坐标系的显示就包括新类中了。扩展这个使用类只要把要显示的图形定义出所需的属性即可。

考虑到图形的重绘机制,每次重绘的时候,都要将图形从最初开始重绘,这样很费CPU的时间,可以先定义一个BITMAP,把图形绘制在BITMAP上,响应重绘消息时直接调用BITMAP即可。于是在该使用类中定义public Bitmap bitmap 这是该类向外界任何容器提供图形的唯一途径。

图形曲线类定义该曲线的相关的属性,及由一个内存表提供的数据,包括X值和Y值。

使用类中将图形曲线类逐个加载,逐个显示。因为图形曲线类中提供的数据是工程数据,我们要先将它转换为象素数据。这个转换公式,由基类里的TranslateX(float x)和TranslateY(float y)来完成。

经过上面的折腾,我们可以来写写这个方案了。demo

posted on   宏宇  阅读(480)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
历史上的今天:
2006-10-09 技巧:ArrayList的使用方法(转)
2006-10-09 HtmlEncode 以及HtmlDecode 方法(转)
< 2007年10月 >
30 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 1 2 3
4 5 6 7 8 9 10

点击右上角即可分享
微信分享提示