阅读:1658回复:5
[求助]VB+AE下编辑时的扑捉如何实现?
<P>VB+AE下编辑时的扑捉如何实现?</P><br>
|
|
1楼#
发布于:2006-06-27 14:09
<P>响应鼠标移动的事件,然后使用hittest,然后移动鼠标位置</P>
|
|
2楼#
发布于:2006-06-27 14:19
<P>楼主</P>
<P>一个一个图元去扑捉,对整个图层没法不能去设置?</P> |
|
3楼#
发布于:2006-06-27 14:26
<P>楼主</P>
<P>一个一个图元去扑捉,对整个图层没法不能去设置?</P> |
|
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> |
|
5楼#
发布于:2008-04-02 14:14
总统先生的好文章。不过,使用该方法捕捉图形时候,把没有显示的图形也捕捉上了。我以为,一般来说,捕捉图形应该是当前能看见的部分,没有显示的部分应该不会被捕捉上才好。
|
|
|