阅读:3695回复:13
用AO或者AE做地物编辑的时候...........
请问用AO或者AE做地物编辑的时候,想让选中的目标线条上的节点vertex用小方框高亮显示出来怎么做啊?请教了 谢谢啊
[此贴子已经被作者于2005-3-8 9:58:05编辑过]
|
|
1楼#
发布于:2005-03-08 10:41
<P>'功能:显示地物节点
Public Sub ShowAllVertex() On Error GoTo errHandle: Dim ff_t_FeatureCursor As IFeatureCursor Dim ff_t_pFeature As IFeature If ff_m_CurLayer Is Nothing Then Exit Sub '获取选中的地物 Set ff_t_FeatureCursor = GetSelectedFeatures If ff_t_FeatureCursor Is Nothing Then Exit Sub '得到要显示节点的地物 Set ff_t_pFeature = ff_t_FeatureCursor.NextFeature If ff_t_pFeature Is Nothing Then Exit Sub '只选中一个地物进行节点移动 ff_m_Map.ClearSelection ff_m_Map.SelectFeature ff_m_CurLayer, ff_t_pFeature Set ff_m_ActiveView = ff_m_Map ff_m_ActiveView.Refresh '如果为点状地物,不显示节点 If ff_t_pFeature.Shape.GeometryType = esriGeometryPoint Then Exit Sub Dim pFeatureArray As IArray Set pFeatureArray = New esriSystem.Array pFeatureArray.Add ff_t_pFeature '符号初始化 Call SymbolInit Dim pFeature As IFeature Dim pPointCol As IPointCollection Dim pPoint As IPoint Dim i As Long, j As Long Set m_VertexGeoBag = New GeometryBag For i = 0 To pFeatureArray.Count - 1 Set pFeature = pFeatureArray.Element(i) Set pPointCol = pFeature.ShapeCopy For j = 0 To pPointCol.PointCount - 1 Set pPoint = pPointCol.Point(j) If j = 0 Or j = pPointCol.PointCount - 1 Then displayGraphic pPoint, , m_EndPointSym pPoint.ID = 10 Else displayGraphic pPoint, , m_VertexSym pPoint.ID = 100 End If m_VertexGeoBag.AddGeometry pPoint Next j Next i '显示节点鼠标状态 m_blnShowVertexStatus = True Exit Sub errHandle: MsgBox Err.Description, vbOKOnly, "错误"</P><P>End Sub</P> |
|
|
2楼#
发布于:2005-03-08 12:52
谢谢哈 谢谢老大 我试试 <img src="images/post/smile/dvbbs/em05.gif" />
|
|
3楼#
发布于:2005-03-08 14:28
示意代码中关键的显示部分没有贴出来哦 老大 SymbolInit, displayGraphic这两个函数蛮关键呀 主要就是看节点如何显示出来的呀 谢谢了 <img src="images/post/smile/dvbbs/em02.gif" />
|
|
4楼#
发布于:2005-03-08 14:37
'功能:符号初始化
Private Sub SymbolInit() Dim pFcolor As IColor Dim pOcolor As IColor Dim pTrackcolor As IColor Dim pVcolor As IColor Set pFcolor = New RgbColor Set pOcolor = New RgbColor Set pTrackcolor = New RgbColor Set pVcolor = New RgbColor pFcolor.RGB = RGB(255, 0, 0) pOcolor.RGB = RGB(0, 0, 255) pTrackcolor.RGB = RGB(0, 255, 255) pVcolor.RGB = RGB(0, 255, 0) Set m_MarkerSym = New SimpleMarkerSymbol m_MarkerSym.Style = esriSMSCircle m_MarkerSym.Color = pFcolor m_MarkerSym.Outline = True m_MarkerSym.OutlineColor = pOcolor m_MarkerSym.OutlineSize = 1 Set m_VertexSym = New SimpleMarkerSymbol m_VertexSym.Style = esriSMSSquare m_VertexSym.Color = pVcolor m_VertexSym.Size = 4 Set m_EndPointSym = New SimpleMarkerSymbol m_EndPointSym.Style = esriSMSSquare m_EndPointSym.Color = pFcolor m_EndPointSym.Size = 4 Set m_LineSym = New SimpleLineSymbol m_LineSym.Color = pFcolor m_LineSym.Width = 1 Set m_TracklineSym = New SimpleLineSymbol m_TracklineSym.Color = pTrackcolor m_TracklineSym.Width = 1 Dim pOsym As ISimpleLineSymbol Set pOsym = New SimpleLineSymbol pOsym.Color = pOcolor pOsym.Width = 1 Set m_FillSym = New SimpleFillSymbol m_FillSym.Color = pFcolor m_FillSym.Style = esriSFSVertical m_FillSym.Outline = pOsym End Sub |
|
|
5楼#
发布于:2005-03-08 14:37
<P>'功能:在地图上显示所画图形
Public Sub displayGraphic(pGeometry As IGeometry, Optional pColor As IColor = Nothing, _ Optional pSymbol As ISymbol = Nothing) On Error GoTo errHandle: Dim pActiveView As IActiveView Set pActiveView = ff_m_Map</P><P> If Not pColor Is Nothing Then Dim pMSym As ISimpleMarkerSymbol Set pMSym = New SimpleMarkerSymbol pMSym.Style = esriSMSCircle pMSym.Color = pColor Dim pLSym As ISimpleLineSymbol Set pLSym = New SimpleLineSymbol pLSym.Color = pColor Dim pSFSym As ISimpleFillSymbol Set pSFSym = New SimpleFillSymbol pSFSym.Color = pColor pSFSym.Style = esriSFSSolid End If pActiveView.ScreenDisplay.StartDrawing pActiveView.ScreenDisplay.hDC, -1 Select Case pGeometry.GeometryType Case 1 If Not pColor Is Nothing Then pActiveView.ScreenDisplay.SetSymbol pMSym ElseIf Not pSymbol Is Nothing Then pActiveView.ScreenDisplay.SetSymbol pSymbol Else pActiveView.ScreenDisplay.SetSymbol m_MarkerSym End If pActiveView.ScreenDisplay.DrawPoint pGeometry Case 3 If Not pColor Is Nothing Then pActiveView.ScreenDisplay.SetSymbol pLSym ElseIf Not pSymbol Is Nothing Then pActiveView.ScreenDisplay.SetSymbol pSymbol Else pActiveView.ScreenDisplay.SetSymbol m_LineSym End If pActiveView.ScreenDisplay.DrawPolyline pGeometry Case 4 If Not pColor Is Nothing Then pActiveView.ScreenDisplay.SetSymbol pSFSym ElseIf Not pSymbol Is Nothing Then pActiveView.ScreenDisplay.SetSymbol pSymbol Else pActiveView.ScreenDisplay.SetSymbol m_FillSym End If pActiveView.ScreenDisplay.DrawPolygon pGeometry End Select pActiveView.ScreenDisplay.FinishDrawing Exit Sub errHandle: MsgBox Err.Description, vbOKOnly, "错误"</P><P>End Sub</P> |
|
|
6楼#
发布于:2005-03-08 14:38
<P>这个只能是给你一些帮助</P><P>具体还需要你自己改,AO的接口比较多,关键是要你对接口了解了</P>
|
|
|
7楼#
发布于:2005-03-08 15:10
谢谢老大啊 的确是很多接口还没有熟悉 也多谢指点<img src="images/post/smile/dvbbs/em02.gif" />
|
|
8楼#
发布于:2005-03-08 15:51
修改之后 测试了一下 发现选中某Polyline之后,其vertex and endpoints确实能够draw出来 但是只是一闪而过了 之后又回复了简单的选择状态 如何能够保持这些节点的突出显示状态呢?
|
|
9楼#
发布于:2005-03-08 17:17
<P>老大就是老大,我冥思苦想一下午也没思路</P><P>总算有了思路方向哈</P>
|
|
|
上一页
下一页