lemon_nj
路人甲
路人甲
  • 注册日期2004-02-29
  • 发帖数57
  • QQ
  • 铜币122枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:2211回复:4

一个MO图形编辑中有趣的现象

楼主#
更多 发布于:2004-05-17 11:06
 
<P >图形编辑中,给要素添加点后,要素的FeatureId变为同层中的最后一个。</P>
<P ><p> </p></P>
<P >我写了个MO图形修改编辑的程序,思路步骤如下: </P>
<P >1。 先取得选中的要素的记录selRec(依类型赋给面selPoly,线selLine,点selPoint,他们再把所有的点赋给点集pts)。</P>
<P >    Set Loc = frmMain.mapDisp.ToMapPoint(X, Y)</P>
<P >    theTol = frmMain.mapDisp.ToMapDistance(SEARCHTOLPIXELS * Screen.TwipsPerPixelX)</P>
<P >   For Each aLayer In frmMain.mapDisp.Layers</P>
<P >    If aLayer.Visible And aLayer.LayerType = moMapLayer Then</P>
<P >      Set selRec = aLayer.SearchByDistance(Loc, theTol, "")      </P>
<P >      If selRec.Count >= 1 Then</P>
<P >      selected = True</P>
<P >      selRec.MoveFirst</P>
<P >       Exit For</P>
<P >      Else</P>
<P >      Set selRec = Nothing</P>
<P >      selected = False</P>
<P >      End If</P>
<P >    End If</P>
<P >  Next aLayer</P>
<P >2。对图形进行修改的过程为: 先修改(增加,删除,移动)点集pts中的点,然后依类型赋给面selPoly,线selLine,点selPoint赋值,以给多边形添加一点为例:</P>
<P >           shortDist = 999999999</P>
<P >           Set pt = mapDisp.ToMapPoint(X, Y)</P>
<P >            For i = 0 To pts.Count - 2</P>
<P >                thisDist = pt.DistanceToSegment(pts(i), pts(i + 1))</P>
<P >                If thisDist < shortDist Then</P>
<P >                   shortDist = thisDist</P>
<P >                 shortDistPtIndex = i + 1</P>
<P >                End If</P>
<P >             Next i</P>
<P >            thisDist = pt.DistanceToSegment(pts(pts.Count - 1), pts(0))</P>
<P >            If thisDist < shortDist Then</P>
<P >               pts.Add pt</P>
<P >            Else</P>
<P >               pts.Insert shortDistPtIndex, pt</P>
<P >            End If</P>
<P >          Set selPoly = Nothing</P>
<P > selPoly.Parts.Add pts)</P>
<P >3.对选中的要素记录selRec进行修改:</P>
<P >        selRec.Edit</P>
<P >        selRec("shape").value = selPoly</P>
<P >        selRec.Update</P>
<P >        selRec.StopEditing</P>
<P ><p> </p></P>
<P >照理修改后的要素的FeatureId和修改前的应该一样,但是实际上修改后要素的FeatureId变为了最后一个(也就是同层中它的FeatureId最大,它以前后边的要素的FeatureId依次向前移了一位)。 然而更奇怪的是,删除,移动选中的要素的点,或移动选中的整个要素,这些操作思路步骤虽然和上面一样,但是它的FeatureId就是没有改变!也就是要素多出点时,就它的FeatureId变了!</P>
<P >我又实验了一下(先给pts加点,然后删点),最后发现只要修改后pts的点数大于原来未做修改时pts的点数时,执行步骤3 代码后,修改后要素的FeatureId就会变为最大!不知道大侠们能否解释一下为什么会出现这样的现象呢?</P>
喜欢0 评分0
sirc_lizheng
伴读书童
伴读书童
  • 注册日期2004-07-09
  • 发帖数148
  • QQ
  • 铜币495枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2004-07-11 20:53
<P>老大,<B><FONT color=blue>图强商城的光碟怎么样,我想买第一期的mo开发光碟,不知道内容好不好,</FONT></B></P><P><FONT color=#0000ff><b>请老大指点.</b></FONT></P><P><FONT color=#0000ff><b>内容谈到一个GIS系统,是不是讲是一个完全开放代码的GIS系统.</b></FONT></P><P><b><FONT color=#0000ff>请老大指点</FONT></b></P>
举报 回复(0) 喜欢(0)     评分
aying
路人甲
路人甲
  • 注册日期2003-10-05
  • 发帖数60
  • QQ
  • 铜币275枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2004-06-01 10:14
我也学习一下
举报 回复(0) 喜欢(0)     评分
lemon_nj
路人甲
路人甲
  • 注册日期2004-02-29
  • 发帖数57
  • QQ
  • 铜币122枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2004-05-18 08:38
   那我上面的代码,思路有错误吗,恳请指教!
举报 回复(0) 喜欢(0)     评分
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15951
  • QQ
  • 铜币25345枚
  • 威望15368点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
4楼#
发布于:2004-05-17 23:22
<P>倒,没注意这个问题,不过应该不会啊,如果这样的话,根据FeatureId来查询的话,那问题不就有了</P>
GIS麦田守望者,期待与您交流。
举报 回复(0) 喜欢(0)     评分
游客

返回顶部