一步穷
路人甲
路人甲
  • 注册日期2003-12-15
  • 发帖数107
  • QQ
  • 铜币221枚
  • 威望0点
  • 贡献值0点
  • 银元0个
10楼#
发布于:2004-08-09 14:45
版主是论坛上屈指可数的好版主之列的版主.能讲一下大概思路吗?你的属标操作的信息是如何记录的?如果撤消以后又后悔了或者又后悔了咋办呀?如果我也写这么多代码的话,头儿早把我扔垃圾篓了.版主救我!<img src="images/post/smile/dvbbs/em02.gif" />
[此贴子已经被作者于2004-8-9 15:04:53编辑过]
举报 回复(0) 喜欢(0)     评分
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15951
  • QQ
  • 铜币25345枚
  • 威望15368点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
11楼#
发布于:2004-08-09 15:26
<P>不写代码好象是不行的,需要定义很多变量来记录操作次数和状态等</P><P>Function Redo(map As MapObjects2.map, times As Long)
    If undoNow >= undoTimes Then
    MsgBox "Too big"
    ElseIf undoNow < 0 Then
    MsgBox "Less than zero"
    Else
   Select Case undoType(undoNow)
   Case utMovePoint
    URMovePoint map
   Case utMovePoints
    URMovePoints map
   Case utAddPoint
    URAddPoint map
   Case utAddShape
    URAddShape map
   Case utLineDelPoint
    URLineDelPoint map
   Case utPolygonDelPoint
    URPolygonDelPoint map
   Case utAddLine
    URAddLine map
   Case utMoveLinePoint
    URMoveLinePoint map
   Case utMovePolygonPoint
    URMovePolygonPoint map
   Case utMoveLine
    URMoveLine map
   Case utMovePolygon
    URMovePolygon map
   Case utDelShape
    URDelShape map
   Case utZoom
    URZoom map
   Case utChangeShape
    URChangeShape map
   Case Else
   End Select
    End If
End Function</P>
GIS麦田守望者,期待与您交流。
举报 回复(0) 喜欢(0)     评分
goodwang
路人甲
路人甲
  • 注册日期2004-08-12
  • 发帖数16
  • QQ
  • 铜币113枚
  • 威望0点
  • 贡献值0点
  • 银元0个
12楼#
发布于:2004-08-12 11:32
有点思路,谢谢
举报 回复(0) 喜欢(0)     评分
sharkkyan
路人甲
路人甲
  • 注册日期2003-09-19
  • 发帖数58
  • QQ
  • 铜币210枚
  • 威望0点
  • 贡献值0点
  • 银元0个
13楼#
发布于:2004-08-12 12:25
<img src="images/post/smile/dvbbs/em05.gif" /><img src="images/post/smile/dvbbs/em05.gif" />
http://geoexplore.blog.hexun.com/ qq: 657824310 电子邮箱:jayon@126.com
举报 回复(0) 喜欢(0)     评分
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15951
  • QQ
  • 铜币25345枚
  • 威望15368点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
14楼#
发布于:2004-08-12 12:37
<TABLE fixed; WORD-BREAK: break-all" cellSpacing=0 cellPadding=0 width="90%" border=0><TR><TD class=oblog_t_4><FONT color=#2a2af8 size=3>今天讲讲利用MO实现编辑过程中的Undo、Redo的一种思路,利用临时图层实现图层编辑过程中的Undo,Redo。今天举得例子比较简单,就是增添要素和删除要素的撤销和重做(假设编辑过程中点线面图层每类只有一个)。</FONT></TD></TR><TR><TD><TABLE cellSpacing=0 cellPadding=0 width="100%" border=0><TR><TD><DIV align=right></DIV></TD></TR></TABLE><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></TD></TR></TABLE>
GIS麦田守望者,期待与您交流。
举报 回复(0) 喜欢(0)     评分
一步穷
路人甲
路人甲
  • 注册日期2003-12-15
  • 发帖数107
  • QQ
  • 铜币221枚
  • 威望0点
  • 贡献值0点
  • 银元0个
15楼#
发布于:2004-08-13 08:30
得到很大的启发,多谢GIS.
举报 回复(0) 喜欢(0)     评分
上一页 下一页
游客

返回顶部