10楼#
发布于:2004-08-09 14:45
版主是论坛上屈指可数的好版主之列的版主.能讲一下大概思路吗?你的属标操作的信息是如何记录的?如果撤消以后又后悔了或者又后悔了咋办呀?如果我也写这么多代码的话,头儿早把我扔垃圾篓了.版主救我!<img src="images/post/smile/dvbbs/em02.gif" />
[此贴子已经被作者于2004-8-9 15:04:53编辑过]
|
|
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> |
|
|
12楼#
发布于:2004-08-12 11:32
有点思路,谢谢
|
|
13楼#
发布于:2004-08-12 12:25
<img src="images/post/smile/dvbbs/em05.gif" /><img src="images/post/smile/dvbbs/em05.gif" />
|
|
|
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>
|
|
|
15楼#
发布于:2004-08-13 08:30
得到很大的启发,多谢GIS.
|
|
上一页
下一页