这个算法其实很简单,核心原理是在一个timer_tick事件中不断改变一个markerElement的geometry。而我们关注的目标也是这些符合条件的geometry如何得到。
1.polyline上的节点
我们我们要取一条polyline上的节点,这个方法是非常简单的,使用ipointcollection接口对象ppts,我们通过QI一条polyline,可以获取这些点集合。
dim ppts as ipointcollection
ppts=ppolyline
其中的点从ppts.point(i)中取得
2.获取均匀点
如果一条线很长,但是只有一个segment,那么点将很快移动完毕,这样肯定我们也不满意,我们希望能够不管线的长度是多少,一定要让点移动10次,我们就必须找出一条线上等距离的11个点的位置出来,算法如下:
Dim pGeometryCollection As IGeometryCollection
If TypeOf pGeometry Is IPolyline Then
' return a multipoint containing nPoints equally
' distributed on the Polyline
Dim pConstructGeometryCollection As IConstructGeometryCollection
pConstructGeometryCollection = New GeometryBag
pConstructGeometryCollection.ConstructDivideEqual(pGeometry, nPoints - 1, esriConstructDivideEnum.esriDivideIntoPolylines)
Dim pEnumGeometry As IEnumGeometry
pEnumGeometry = pConstructGeometryCollection
pGeometryCollection = New Multipoint
Dim pPolyline As IPolyline
pPolyline = pEnumGeometry.Next
pGeometryCollection.AddGeometry(pPolyline.FromPoint)
Do While Not pPolyline Is Nothing
pGeometryCollection.AddGeometry(pPolyline.ToPoint)
pPolyline = pEnumGeometry.Next
Loop
End If
MakeMultiPoint = pGeometryCollection
pGeometryCollection = Nothing
End Function