ldj
ldj
路人甲
路人甲
  • 注册日期2003-10-19
  • 发帖数161
  • QQ
  • 铜币737枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:1658回复:5

[求助]VB+AE下编辑时的扑捉如何实现?

楼主#
更多 发布于:2006-06-27 12:35
<P>VB+AE下编辑时的扑捉如何实现?</P><br>
喜欢0 评分0
nc8000
路人甲
路人甲
  • 注册日期2004-08-11
  • 发帖数42
  • QQ
  • 铜币237枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2006-06-27 14:09
<P>响应鼠标移动的事件,然后使用hittest,然后移动鼠标位置</P>
举报 回复(0) 喜欢(0)     评分
ldj
ldj
路人甲
路人甲
  • 注册日期2003-10-19
  • 发帖数161
  • QQ
  • 铜币737枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2006-06-27 14:19
<P>楼主</P>
<P>一个一个图元去扑捉,对整个图层没法不能去设置?</P>
举报 回复(0) 喜欢(0)     评分
ldj
ldj
路人甲
路人甲
  • 注册日期2003-10-19
  • 发帖数161
  • QQ
  • 铜币737枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2006-06-27 14:26
<P>楼主</P>
<P>一个一个图元去扑捉,对整个图层没法不能去设置?</P>
举报 回复(0) 喜欢(0)     评分
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15947
  • QQ554730525
  • 铜币25339枚
  • 威望15364点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
4楼#
发布于:2006-06-27 16:48
<P>这个问题太广泛,还是问题具体点吧;标题也只是“求助”两个字,已经帮你修改了</P>
<P>给出一个函数,希望对你有点启发了</P>
<P>'********************************************************************************<BR>'名称:     SnapPoint<BR>'功能描述: 对用户指定的点进行捕捉<BR>'输入:<BR>'      PixelTolerance:容忍距,传入的数据是以象素记的<BR>'      pQueryPoint:鼠标移动时所在的点(用来捕捉别个点的点)<BR>'      SnapType:捕捉类型,输入内容及所表达意义如下<BR>'         1     捕捉线或面的节点<BR>'         4     捕捉地物边界上的某点,并不是节点<BR>'         8     捕捉某个Segment的中点<BR>'         16    捕捉线的终点(仅对线有效)<BR>'         32    捕捉地物质心(对线和点都没有效)<BR>'       以上参数可以输入其和,如1+4表示节点和边界上的点都捕捉<BR>'      pMapCtl:MapControl对象<BR>'      Button:鼠标按键状态<BR>'输出:<BR>'      pFeature:捕捉到的点所在的Feature<BR>'      pHitPoint:所捕捉到的点<BR>'      hitDist:PHitPoint与QueryPoint的距离<BR>'      hitSegmentIndex:结点所在的segment部分<BR>'      vertexindex:结点续号<BR>'依赖关系: ConvertPixelsToMapUnits函数<BR>'作者:     gisempire<BR>'创建日期   2002.10.21               '最后更新日期<BR>'********************************************************************************<BR>Public Function SnapPoint(PixelTolerance As Double, _<BR>                            pQueryPoint As IPoint, _<BR>                            pFeature As IFeature, _<BR>                            pHitPoint As IPoint, _<BR>                            hitDist As Double, _<BR>                            hitSegmentIndex As Long, _<BR>                            vertexIndex As Long, _<BR>                            Snaptype As Integer, _<BR>                            pMapCtl As MapControl, _<BR>                            ByVal button As Long) As Boolean<BR>On Error GoTo err_Handle<BR>    SnapPoint = False<BR>    If button = 0 Then<BR>        Dim pGeom As IGeometry<BR>        Dim pPolyline As IPolyline<BR>        Dim pPolygon As IPolygon<BR>        Dim pHitTest As IHitTest<BR>        Dim pCurve As ICurve<BR>        Dim pPolyCurve As IPolycurve<BR>        Dim pFeatCache As IFeatureCache2<BR>        Dim CurX As Long, CurY As Long, DesX As Long, DexY As Long<BR>        Dim i As Integer<BR>        Dim Tolerance As Double<BR>        Tolerance = ConvertPixelsToMapUnits(pMapCtl.ActiveView, PixelTolerance)<BR>        pMapCtl.ActiveView.ScreenDisplay.displayTransformation.FromMapPoint pQueryPoint, CurX, CurY<BR>        Set pFeatCache = New FeatureCache<BR>        pFeatCache.Initialize pQueryPoint, ConvertPixelsToMapUnits(pMapCtl.ActiveView, 1)<BR>        pFeatCache.AddLayers pMapCtl.ActiveView.FocusMap.Layers, Nothing ' CreateEnvelope(pActiveview, CurX - 10, CurY - 10, CurX + 10, CurY + 10)<BR>        If Not pHitPoint Is Nothing Then<BR>            drawSnapSymbol pMapCtl, pHitPoint<BR>        Else<BR>            Set pHitPoint = pQueryPoint<BR>            <BR>        End If<BR>        For i = 0 To pFeatCache.Count - 1<BR>            Set pGeom = pFeatCache.Feature(i).Shape<BR>            <BR>            Set pHitTest = pGeom<BR>            If (pHitTest.HitTest(pQueryPoint, _<BR>                                 Tolerance, _<BR>                                 Snaptype, _<BR>                                 pHitPoint, _<BR>                                 hitDist, _<BR>                                 hitSegmentIndex, _<BR>                                 vertexIndex, _<BR>                                 True) = True) Then<BR>                Set pFeature = pFeatCache.Feature(i)<BR>                SnapPoint = True<BR>                <BR>                pMapCtl.ActiveView.ScreenDisplay.displayTransformation.FromMapPoint pHitPoint, DesX, DexY<BR>                Exit For<BR>            End If<BR>        Next i<BR>    <BR>    End If<BR>    If Not SnapPoint Then<BR>        Set pHitPoint = Nothing<BR>        Set pHitPoint = pQueryPoint<BR>    End If<BR>    If button = 0 Then<BR>        drawSnapSymbol pMapCtl, pHitPoint<BR>    End If<BR>    Exit Function<BR>err_Handle:<BR>    Err.Clear<BR>    Exit Function<BR>End Function</P>
举报 回复(0) 喜欢(0)     评分
gzstyxb
路人甲
路人甲
  • 注册日期2004-09-22
  • 发帖数358
  • QQ
  • 铜币1045枚
  • 威望0点
  • 贡献值0点
  • 银元0个
5楼#
发布于:2008-04-02 14:14
总统先生的好文章。不过,使用该方法捕捉图形时候,把没有显示的图形也捕捉上了。我以为,一般来说,捕捉图形应该是当前能看见的部分,没有显示的部分应该不会被捕捉上才好。
由爱故生忧, 由爱故生怖. 若离于爱者, 无忧亦无怖.
举报 回复(0) 喜欢(0)     评分
游客

返回顶部