FreeMicaps开发---图层管理

原创 2008年10月03日 21:14:00

最近,已有几位朋友在问关于图形绘制中的图层管理的问题,语言表达能力有限,电话里解释半天,对方可能让我搅得更糊涂了。整理一下思路,写出来可能会更清楚一些。

 

在Gis软件和一些图像处理软件中经常会有图层这个概念,如PhotoShop。使用图层的好处是可以将绘制的图像图形分层,对某层的操作不会影响其他层,并能增加删除隐藏图层,给人的感觉好像是在一层一层的玻璃上绘图,然后将这些玻璃叠起来形成一副完整的图像。

 

但在各类编程语言中并没有图层这个概念,图层只是程序员脑中虚拟的东西。最简单的,将每类图形的绘制过程单独写成一个过程,增删等图层管理就是对这些绘图过程进行控制,如画一副天气图写成伪代码就是这样子:

  1. 绘图
  2. {
  3.     清屏();
  4.     if(显示地图)   画地图();
  5.     if(显示填图)   填图();
  6.     if(显示等高线) 画等高线();
  7.     if(显示等温线) 画等温线();
  8. }

主程序里就可以控制绘制条件来画需要的图层了.是不是很简单,呵呵

 

但是,有问题出来了,如果我改变了绘图条件,如将"显示填图"由"True"变为了"False",也就是隐藏了填图图层,怎么才能擦除填图层呢?擦掉已画出来的图是不可能的了,就像我们手工画天气图一样,本想用橡皮擦掉等温线,但一擦连下面的等高线也擦掉了,计算机绘图更不允许出现这样的情况.解决的办法很简单,重绘!你可能会说,"我只想去掉一层,你却将所有图层都重画一遍,多麻烦呀!",其实计算机最擅长做的就是这种麻烦而且重复的工作,重绘一次仅花费不到1秒的时间.就像老板说你的等温线画的难看,与其擦掉等温线,还不如重拿一张空图再画一遍.

 

再就是图层管理问题了,上面的办法只能解决有限个图层的情况,图层不能增删,只能隐藏,如果我需要不断在上面添加新图层,像再加一层云图.这就要用到面向对象了.我们可以将绘图过程封装成一个个类,如"地图图层类"/"填图图层类"/"等值线图层类",主程序里用一个列表或动态数组,要添加那种图层就向这个列表里加上这个类的对象,在绘图过程中遍历列表中的图层对象,调用它们的绘图方法,增删图层只是对图层列表中的对象进行增删.写成伪代码:

 

  1. 绘图
  2. {
  3.     for(int i=0;i<图层列表.count;i++)
  4.     {
  5.         图层列表[i].绘图;
  6.     }
  7. }

这个是不是更简单?没学过面向对象的朋友可能还是不太理解,我还是用手工画天气图作为例子:老板给我们一张白纸说:“把今天的地面图画好给我!”,我则先来找来地球仪,描出东亚地图,再找到地面资料,一站一站填好要素,再画等压线,三小时变压,天气区、槽线、锋面...画好后拿给老板一看,老板说:“谁让你分析槽线和锋面了(水平不够),拿去重画!”晕倒!现实中这样肯定是不科学的,于是,我们定了一个预报流程,将工作分给了多个人,首先,印刷厂工人给我们印好天气图底图,然后我们用填图机填好要素,预报员分析好等高线,槽线和锋面可让首席给我们定,于是一张天气图很快就画好了。程序中,印刷厂/填图机/预报员/首席就是一个个图层对象,预报流程就是列表,我们可以在列表中增删对象以满足不通需要。面向对象博大精深,还需要在实际中多实践...

 

FreeMicaps使用面向对象技术,不仅将读数据和绘图封装成类,还将他们用插件方式实现,这样增加一种数据类型只需要实现给定的接口并挂入主程序即可,道理和上面类似。

 

FreeMicaps开发计划

开放式气象信息综合分析处理系统计划-――FreeMicaps        是否有同行和我一样,梦想过能编写一套自己的Micaps系统?       数年来,我一直关注这方面的东西,逐步实现Micap...
  • HZGJF
  • HZGJF
  • 2008年05月21日 18:14
  • 7128

关于FreeMicaps源码

最近很多人问FreeMicaps源码问题,现做一声明:FreeMicaps0.1源码在去年已在去年9月在http://bbs.soft666.com上发布,众所周知,国内开源环境太差,代码仅在气象系统...
  • HZGJF
  • HZGJF
  • 2009年05月27日 16:17
  • 2766

FreeMicapsV0.2.3-免费且实用的气象数据分析系统

  • 2015年09月05日 19:42
  • 4.48MB
  • 下载

Micaps3.2二次开发实例教程-9

第九节        实例四:换掉Micaps的数据检索插件 上面几节的例子实现了给Micaps增加菜单、工具条按钮、浮动窗口等,但仅仅是给Micaps的界面上增加元素(除了全屏功能),却无具体功能...
  • HZGJF
  • HZGJF
  • 2013年08月07日 09:22
  • 2510

FreeMicaps开发讲解一: GIS(地图)部分

FreeMicaps为一套气象数据分析系统,需要从面上来展示气象数据的分布情况,以地图方式进行快速数据浏览和检索可以极大地提高工作效率。从界面上看,它包含一个可以缩放平移的地图,具有图层方式管...
  • HZGJF
  • HZGJF
  • 2010年11月26日 14:14
  • 13083

FreeMicaps--定时生成天气图

定时生成图像格式的天气图在做网站时很有用,以前用Micaps2.0试过,效果一般,FreeMicaps也应该有这个功能,用了一上午时间实现了.   本来应该像Micaps2.0那样以带参数运行的方式来...
  • HZGJF
  • HZGJF
  • 2008年10月10日 16:48
  • 2400

小升级, FreeMicaps V0.2.1已发布

FreeMicaps V0.2.1发布, 修正部分BUG,功能上进行小修改,代码31000余行
  • HZGJF
  • HZGJF
  • 2010年06月08日 17:19
  • 2995

FreeMicaps

  • 2012年07月15日 00:18
  • 6.07MB
  • 下载

FreeMicaps

  • 2016年01月25日 15:09
  • 393KB
  • 下载

micaps软件

  • 2013年05月15日 15:35
  • 243KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:FreeMicaps开发---图层管理
举报原因:
原因补充:

(最多只允许输入30个字)