gisleonzhouly
路人甲
路人甲
  • 注册日期2006-07-24
  • 发帖数15
  • QQ
  • 铜币157枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:1818回复:3

Vb+Engine的简单画线程序

楼主#
更多 发布于:2006-08-18 10:59
<P><IMG src="http://www.gisempire.com/bbs/Skins/Default/emot/em07.gif"> </P>
<P>VB+ENGINE的画线程序,缺少像素化,所以在加载的图层上会有问题,在空白的图上完全没有问题,像素化本人正在做……</P>
<P>由于考虑到mousemove的时候那条线其实是虚幻的,所以用mapcon.flashshape来做,可能会存在一定的问题,不过根据本人使用情况,还算满意。</P>
<P>该程序的优点是摆脱了trackline的起始点指定,而由使用者根据捕捉到的点来设定,多了一些方便,这个是简单的程序,代码也比较少,就大家看看而已</P>
<P>Dim pPrePoint As IPoint<BR>Dim pNextPoint As IPoint</P>
<P><BR>Dim pClickPoint As IPoint<BR>Dim pMovePoint As IPoint</P>
<P>Dim pTempPolyline As IPolyline '鼠标移动临时画线<BR>Dim pFinishPolyline As IPolyline '鼠标点击后画下的线</P>
<P>Dim pGeometryOld As IGeometry<BR>Dim pGeometryNew As IGeometry</P>
<P><BR>Dim ClickFlag As Boolean<BR>Dim SnapPointFlag As Boolean</P>
<P>Dim pTempCol As IPointCollection '只存2个点的collection<BR>Dim pFinishCol As IPointCollection '存所有点的collection</P>
<P><BR>Dim pSymbol As IMarkerLineSymbol</P>

<P>Private Sub Form_Load() '初始化变量<BR>    Set pActiveView = MapCon.ActiveView<BR>    Set pTempPolyline = New Polyline<BR>    Set pFinishPolyline = New Polyline<BR>    Set pTempCol = pTempPolyline<BR>    Set pFinishCol = pFinishPolyline<BR>        <BR>    ClickFlag = False<BR>    SnapPointFlag = False<BR>End Sub</P>
<P><BR>Private Sub MapCon_OnMouseDown(ByVal button As Long, ByVal shift As Long, ByVal x As Long, ByVal y As Long, ByVal mapX As Double, ByVal mapY As Double)<BR>If button = 1 Then<BR>    If pFinishCol.PointCount = 0 Then<BR>        If SnapPointFlag = False Then<BR>            Set pClickPoint = MapCon.ToMapPoint(x, y)<BR>            Set pPrePoint = pClickPoint<BR>            pFinishCol.AddPoint pPrePoint '加到完成点集中<BR>            pTempCol.AddPoint pPrePoint '加到临时点集中<BR>            ClickFlag = False<BR>        Else<BR>            <BR>        End If<BR>    Else<BR>        '加入捕捉<BR>        If SnapPointFlag = False Then<BR>            pTempCol.RemovePoints 0, 1<BR>            Set pClickPoint = MapCon.ToMapPoint(x, y)<BR>            Set pPrePoint = pClickPoint<BR>            pFinishCol.AddPoint pPrePoint<BR>            MapCon.DrawShape pFinishPolyline, pSymbol<BR>            pTempCol.AddPoint pPrePoint<BR>        Else<BR>            <BR>        End If<BR>    End If<BR>ElseIf button = 2 Then<BR>    MapCon.DrawShape pFinishPolyline<BR>    Do While pTempCol.PointCount <> 0<BR>        pTempCol.RemovePoints 0, 1<BR>    Loop<BR>    Do While pFinishCol.PointCount <> 0<BR>        pFinishCol.RemovePoints 0, 1<BR>    Loop<BR>    <BR>End If<BR>End Sub</P>
<P>Private Sub MapCon_OnMouseMove(ByVal button As Long, ByVal shift As Long, ByVal x As Long, ByVal y As Long, ByVal mapX As Double, ByVal mapY As Double)<BR>Set pMovePoint = New Point<BR>pMovePoint.x = mapX<BR>pMovePoint.y = mapY<BR>If pTempCol.PointCount = 0 Then<BR>    Exit Sub<BR>Else<BR>    Set pNextPoint = pMovePoint<BR>    If ClickFlag = False Then '如果前面的mousedown是第一次点击<BR>        pTempCol.AddPoint pNextPoint<BR>        MapCon.FlashShape pTempPolyline, 3, 3<BR>        pTempCol.RemovePoints 1, 1<BR>    End If<BR>End If</P>
<P>End Sub</P><img src="images/post/smile/dvbbs/em07.gif" /><img src="images/post/smile/dvbbs/em07.gif" /><img src="images/post/smile/dvbbs/em07.gif" />
喜欢0 评分0
hsghxm
路人甲
路人甲
  • 注册日期2004-10-27
  • 发帖数517
  • QQ4604052
  • 铜币1枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2006-08-18 11:14
<img src="images/post/smile/dvbbs/em01.gif" /><img src="images/post/smile/dvbbs/em02.gif" />
MSN:hsghxm@163.com QQ:4604052 (很少用,最好别加) Email:hsghxm@163.com 我的BOLG:http://www.gisempire.com/blog/user1/864/index.htm
举报 回复(0) 喜欢(0)     评分
gisleonzhouly
路人甲
路人甲
  • 注册日期2006-07-24
  • 发帖数15
  • QQ
  • 铜币157枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2006-08-18 11:27
像素化也没有问题了,经过调试,ok了,上面的程序不变,但是在清空点集的时候需要注意,必须要等创建完feature再清空,否则就不显示了:)
举报 回复(0) 喜欢(0)     评分
ienown
路人甲
路人甲
  • 注册日期2006-11-14
  • 发帖数23
  • QQ6805791
  • 铜币149枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2008-03-19 10:12
学习一下。。。。。。。。。。。
举报 回复(0) 喜欢(0)     评分
游客

返回顶部