小型矢量图形程序设计(c#.NET)

Download Report

Transcript 小型矢量图形程序设计(c#.NET)

小型矢量图形程序设计(c#.NET)




学习本部分内容的目的和方法
系统目标
系统整体功能设计
C#.Net的基本绘图(GDI+)
学习本部分目的和方法







理解GIS基本原理和方法
掌握基本矢量图形程序的设计和实现方法
理解GIS和矢量图形程序之间的关系
掌握GIS基本的图形处理、图层控制方法
掌握GIS基本图形图元的绘制理论和方法
理解计算机制图的基本过程和注意要点
查阅资料、大量练习、完成上机要求任务以
及课下对功能做必要的扩充。
系统目标
 实现GIS的基本操作诸如:放大、缩小、漫游、选
择等;
 实现GIS基本图元点、线、面的绘制和保存;
 实现GIS基本图元的选取、编辑等操作;
 了解GIS属性数据和图元数据的绑定和链接
 掌握C#.NET程序设计的方法,尤其是独立解决问
题的能力;
 如可能可实现某一具体的GIS功能如生成等高线、
空间差值等,也可以读取某种格式的GIS现有文件;
СÐÍʸÁ¿³Ì Ðò×ÜÌå Éè¼Æ
系统整体功能设计


Ⱦ
ä¯
ͼ
ͼ
Êý
ϵ
ͼ
ÀÀ
²ã
Ôª
¾Ý
ͳ
系统数据的保存和读取(即…)
²Ù
²Ù
¿Ø
Ñ¡
·Ã
²Î
系统的基本操作,以及交互操作方式的控制
×÷
×÷
ÖÆ
Ôñ
ÎÊ
Êý




(放大、缩小、漫游…);
´ò ±£ Æä
µã Ïß Ãæ
µã Ïß Ãæ
系统的图形图元绘制功能(点、线、面…)
¿ª ´æ Ëû
Ñ¡ Ñ¡ Ñ¡
图形图元的选取(选取方式…)
¿É ¿É
ini ×¢ Æä
·Å Ëõ Âþ ÊÓ
ÊÓ Ñ¡
ÎÄ ²á Ëû
´ó С ÓΠͼ
£¿ £¿
¼þ ±í ...
系统图层的控制和组织;
系统基本参数的设置;
¿ª
µ¥
´°
µã
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/DB
Click/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类的关系能否
简化??