gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15951
  • QQ
  • 铜币25345枚
  • 威望15368点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
阅读:1439回复:4

MO编辑过程中Undo、Redo的实现方法(基于临时图层)

楼主#
更多 发布于:2004-09-16 09:05
<P><FONT color=#2a2af8>今天讲讲利用MO实现编辑过程中的Undo、Redo的一种思路,利用临时图层实现图层编辑过程中的Undo,Redo。今天举得例子比较简单,就是增添要素和删除要素的撤销和重做(假设编辑过程中点线面图层每类只有一个)。</FONT></P>
<P><FONT color=#444444><b>1. 建立临时图层</b></FONT></P>
<P><FONT color=#444444>临时图层是在每次程序加载的时候创建,利用shapefile文件,包含4个字段,分别表示操作标识,操作流水号,关键字段,字段内容,当然为了实现点线面各个图层的操作,需要创建3个shp。</FONT></P>
<P><FONT color=#444444><b>2.在添加和删除要素后</b></FONT></P>
<P><FONT color=#444444>系统中当前流水号增加1,向临时图层增加或者删除这一次操作影响的要素以及他们的字段信息,当然操作流水号也需要增添,操作标识标识这次的操作类型,也需要添加。</FONT></P>
<P><FONT color=#444444><b>3.在进行一些操作后Undo</b></FONT></P>
<P><FONT color=#444444>有了以上信息,在执行操作的过程中就可以Undo了,比如我在一次操作中增添了两个点、一条线,那么在Undo的时候就先从临时图层中通过当前操作流水号分别查询出添加的记录,这些记录的操作标识应该是“<EM>添加操作</EM>”,然后通过关键字段,在实际图层中查找,删除相应的要素。同时系统的操作流水号-1。</FONT></P>
<P><FONT color=#444444><b>4.我现在要Redo了</b></FONT></P>
<P><FONT color=#444444>如果上面的Undo错了,我需要恢复删除的要素,那么就需要首先将系统中当前流水号增加1,然后从临时图层中查询当前操作流水号所影响的记录,然后由于操作标识是“<EM>添加操作</EM>”,所以我们将这些要素和相应的字段信息进行分解,添加到对应的图层。</FONT></P>
<P><FONT color=#444444><b>5.我在Undo操作后执行添加和删除操作拉</b></FONT></P>
<P><FONT color=#444444>这个时候首先需要从流水表删除操作流水号>系统当前流水号的记录,然后同2进行操作。</FONT></P>
<P><FONT color=#444444><U><b></b></U></FONT> </P>
喜欢0 评分0
GIS麦田守望者,期待与您交流。
lixaokui
路人甲
路人甲
  • 注册日期2003-12-25
  • 发帖数768
  • QQ28796446
  • 铜币27枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2004-09-16 10:14
<img src="images/post/smile/dvbbs/em01.gif" /><img src="images/post/smile/dvbbs/em01.gif" /><img src="images/post/smile/dvbbs/em01.gif" /><img src="images/post/smile/dvbbs/em01.gif" /><img src="images/post/smile/dvbbs/em01.gif" />
西门吹血,有了鼓风机,就不用吹啦!
举报 回复(0) 喜欢(0)     评分
idealistt
路人甲
路人甲
  • 注册日期2004-11-23
  • 发帖数9
  • QQ
  • 铜币131枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2005-02-24 09:16
<img src="images/post/smile/dvbbs/em01.gif" /><img src="images/post/smile/dvbbs/em01.gif" /><img src="images/post/smile/dvbbs/em01.gif" /><img src="images/post/smile/dvbbs/em01.gif" /><img src="images/post/smile/dvbbs/em06.gif" /><img src="images/post/smile/dvbbs/em06.gif" />
举报 回复(0) 喜欢(0)     评分
lixaokui
路人甲
路人甲
  • 注册日期2003-12-25
  • 发帖数768
  • QQ28796446
  • 铜币27枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2005-02-24 16:17
<P>请问总统,当删除一个存在于已有图层的Shape元素怎么办!</P><P>如果不从原始层中删除这个元素,哪么这个元素就会显示在图中,如果从原始层中删了它,则原始层中的元素ID发生变动,以前一系列的操作就没法恢复?</P>
西门吹血,有了鼓风机,就不用吹啦!
举报 回复(0) 喜欢(0)     评分
南院
路人甲
路人甲
  • 注册日期2005-03-22
  • 发帖数46
  • QQ
  • 铜币217枚
  • 威望0点
  • 贡献值0点
  • 银元0个
4楼#
发布于:2005-04-25 12:20
<P>有没有源代码啊</P>
举报 回复(0) 喜欢(0)     评分
游客

返回顶部