180 likes | 324 Vues
小型矢量图形程序设计( c#.NET ). 学习本部分内容的目的和方法 系统目标 系统整体功能设计 C#.Net 的基本绘图( GDI+ ). 学习本部分目的和方法. 理解 GIS 基本原理和方法 掌握基本矢量图形程序的设计和实现方法 理解 GIS 和矢量图形程序之间的关系 掌握 GIS 基本的图形处理、图层控制方法 掌握 GIS 基本图形图元的绘制理论和方法 理解计算机制图的基本过程和注意要点 查阅资料、大量练习、完成上机要求任务以及课下对功能做必要的扩充。. 系统目标. 实现 GIS 的基本操作诸如:放大、缩小、漫游、选择等;
E N D
小型矢量图形程序设计(c#.NET) • 学习本部分内容的目的和方法 • 系统目标 • 系统整体功能设计 • C#.Net的基本绘图(GDI+)
学习本部分目的和方法 • 理解GIS基本原理和方法 • 掌握基本矢量图形程序的设计和实现方法 • 理解GIS和矢量图形程序之间的关系 • 掌握GIS基本的图形处理、图层控制方法 • 掌握GIS基本图形图元的绘制理论和方法 • 理解计算机制图的基本过程和注意要点 • 查阅资料、大量练习、完成上机要求任务以及课下对功能做必要的扩充。
系统目标 • 实现GIS的基本操作诸如:放大、缩小、漫游、选择等; • 实现GIS基本图元点、线、面的绘制和保存; • 实现GIS基本图元的选取、编辑等操作; • 了解GIS属性数据和图元数据的绑定和链接 • 掌握C#.NET程序设计的方法,尤其是独立解决问题的能力; • 如可能可实现某一具体的GIS功能如生成等高线、空间差值等,也可以读取某种格式的GIS现有文件;
系统整体功能设计 • 系统数据的保存和读取(即…) • 系统的基本操作,以及交互操作方式的控制(放大、缩小、漫游…); • 系统的图形图元绘制功能(点、线、面…) • 图形图元的选取(选取方式…) • 系统图层的控制和组织; • 系统基本参数的设置;
C#的基本绘图 • 传统的windows绘图(GDI)Windows GDI(Graphics Device Interface,图形装置界面) • .NET下的绘图(GDI+)随着开发技术的进步,GDI从某种意义上已经不能满足需求,于是微软把GDI进一步封装抽象,形成新的GDI+,并在性能和功能上进一步完善。 • 二者区别与GDI相比,GDI+提供了一些新特性:Alpha混合技术、反锯齿处理技术、渐变色和纹理填充、宽线条、基本几何曲线样式、可缩放区域、浮点数坐 标、嵌入画笔、高质量过滤和缩放、多种线条样式和端点选项等。 http://cfg1014.blog.163.com/blog/static/66343992009824102219103/
C#的基本绘图 • GDI+的坐标系统和笛卡尔坐标系 • GDI+的颜色RGBA/HSB/CMYK(最佳打印模式) • 像素、位图(BMP/GIF/TIF/JPEG/PNG/EXIF)
.NET对绘图的支持 • using System.Drawing • 常用绘图对象颜色Color:Color结构表示一种ARGB颜色Point和PointF:两种点结构; Pen:Pen对象通常称为画笔,用于绘制样式丰富的直线或曲线;Brush:Brush通常被称为,用于定义填充图形形状(如矩形、椭圆、饼形、多边形和封闭路径)的内部对象;字体和Image;
.NET对绘图的支持 • 基本绘图 在.NET中图形包括以下两个步骤。 第一,创建Graphics对象。 第二,使用Graphics对象绘制线条和形状,呈现文本或显示操作图像。 • Graphics对象
GIS坐标和屏幕坐标 • 两种坐标系的转换两个方法:屏幕坐标到实际坐标Screen2World();实际坐标到屏幕坐标World2Screen(); • 坐标转换公式
GIS坐标和屏幕坐标 • C#实现 //世界坐标转换到屏幕坐标 public void World2Screen(double x1, double y1, out int x2, out int y2) { x2 = Convert.ToInt32((x1 - dGeoMinX) * sScale) + iScreenLeft; y2 = Convert.ToInt32((dGeoMaxY - y1) * sScale) + iScreenTop; } //屏幕坐标转换到世界坐标 public void Screen2World(int x1, int y1, out double x2, out double y2) { x2 = (x1-iScreenLeft)/sScale + dGeoMinX; y2 = dGeoMaxY - (y1-iScreenTop)/sScale; }
程序的结构 • 传统程序 • Windos程序 • 单文档结构程序 • 多文档结构程序 • 基于对话框的窗体程序 • 视图文档结构程序
小型矢量图形系统结构 • GIS特点 • 系统的几个基本类视图(管理图层等)文档(系统文件存取)视图驱动(坐标转换等)图层类(图层组织)图元类(点线面等)
视图驱动类设计 • 视图驱动类功能坐标转换、放大、缩小、漫游等 • 视图驱动类方法初始化视图坐标范围(InitCoord)放大、缩小、漫游(ZoomIn、ZoomOut、Pan…)地图比例尺(MapScale)坐标转换(World2Screen/Screen2World)设置地图显示范围(SetMapExtend)
视图工具类设计 • 视图工具类主要功能完成各种视图交互操作 • 视图工具类的分类窗口工具类(缩小等)、绘图工具类、视图工具命令类 • 视图工具类的主要方法MouseDown/MouseMove/MouseUp/DBClick/Draw
基本图元类的设计 • 基本图元类的功能完成点、线、面基本图元对象的创建和优化 • 主要方法Draw/Move/GetRect • 点类Draw/Move/GetRect/SetCoord/GetCoord • 线类Draw/Move/GetRect/SetCoords/GetCoords • 面类Draw/Move/GetRect/SetCoords/GetCoords
视图驱动类、视图类、基本图元类的使用 • 界面交互部分的控制程序启动顺序和事件响应顺序:类构造、窗体创建、窗体大小变化、窗体显示、窗体激活、窗体关闭、窗体销毁菜单响应/工具条/命令按钮绘图区域 Paint、Resize、Mouse • 状态控制枚举状态、状态标志检查、各项相关控制 • 代码实现部分在各自对应的实现部分输入相关控制代码
图层类的设计 • 图层类的功能管理图层图元、画图层、读取/保存图层文件 • 主要方法和属性名称、图层ID、是否可视、是否激活图层、图元列表、全图范围、画全图、添加/删除图元等 • 图层类的关联使用GeoDrive的关系??思考一下这样设计合理与否??
文档类的设计 • 文档类的主要功能管理工程图层、读取/保存文档文件等 • 文档类的主要属性和方法文档名称、图层个数、图层列表、添加/移除图层、获取当前激活图层、保存/读取文档文件功能等 • 文档类和图层类的关系 • 文档类和图层类和GeoDrive类的关系能否简化??