waterblue
路人甲
路人甲
  • 注册日期2004-09-02
  • 发帖数72
  • QQ
  • 铜币387枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:5617回复:18

常见的节点显示,移动,编辑功能

楼主#
更多 发布于:2005-03-21 09:02
<P>常见的节点显示,移动,编辑功能</P>

[此贴子已经被作者于2005-3-21 12:37:02编辑过]
喜欢0 评分0
http://www.geostar.com.cn(吉奥 公司) http://www.waterblue.com.cn(水之灵,蓝之静 个人)
waterblue
路人甲
路人甲
  • 注册日期2004-09-02
  • 发帖数72
  • QQ
  • 铜币387枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2005-03-21 12:35
<P>   Set pElement = GetLocateElement(pPoint, pGraphicsContainer)'自定义函数,LocateElement函数实现
    If pElement Is Nothing Then Exit Sub
    Dim pEnvTracker As ISelectionTracker
    
     Set pEnvTracker = pElement.SelectionTracker</P>
<P>

.</P>
<P>怎么样将这些pEnvTracker的节点显示出来,</P>
<P>     Set pEnvTracker.Display = pActiveView.ScreenDisplay
    pEnvTracker.ShowHandles = True
    pActiveView.PartialRefresh esriViewGraphicSelection, Nothing, pElement.SelectionTracker.Bounds(pActiveView.ScreenDisplay)</P>
<P>这是我用的代码,没反应</P>
<P></P>
<P>
 </P>
[此贴子已经被作者于2005-3-23 9:03:27编辑过]
http://www.geostar.com.cn(吉奥 公司) http://www.waterblue.com.cn(水之灵,蓝之静 个人)
举报 回复(0) 喜欢(0)     评分
waterblue
路人甲
路人甲
  • 注册日期2004-09-02
  • 发帖数72
  • QQ
  • 铜币387枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2005-03-22 14:56
<P>自己顶一下,已经做出来了!</P><P>需要代码者联系</P>
[此贴子已经被作者于2005-3-22 14:56:49编辑过]
http://www.geostar.com.cn(吉奥 公司) http://www.waterblue.com.cn(水之灵,蓝之静 个人)
举报 回复(0) 喜欢(0)     评分
waterblue
路人甲
路人甲
  • 注册日期2004-09-02
  • 发帖数72
  • QQ
  • 铜币387枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2005-03-22 16:14
<P>编辑中很多地方都要用到</P><P>在布局视图里也会用到,移动,改变大小指南针,图例,比例尺等</P>
http://www.geostar.com.cn(吉奥 公司) http://www.waterblue.com.cn(水之灵,蓝之静 个人)
举报 回复(0) 喜欢(0)     评分
waterblue
路人甲
路人甲
  • 注册日期2004-09-02
  • 发帖数72
  • QQ
  • 铜币387枚
  • 威望0点
  • 贡献值0点
  • 银元0个
4楼#
发布于:2005-03-23 13:22
<P>Private Sub PageLayout1_OnMouseDown(ByVal button As Long, ByVal shift As Long, ByVal x As Long, ByVal y As Long, ByVal pageX As Double, ByVal pageY As Double)
  '选择元素
  Dim ClickPoint As IPoint
  Set ClickPoint = PageLayout1.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(x, y)
  '左键被按下
  If button = 1 Then
    '如果元素没有被移动
    If m_pMoveImageFeedback Is Nothing Then
      '如果一个元素被选择
      If Not m_pSelectionTracker Is Nothing Then
        Dim pPoint As IPoint
        Set pPoint = New point
        
        pPoint.x = pageX
        pPoint.y = pageY
          
        '在选择了元素情况下,再在tracker外点击
        
        If m_pSelectionTracker.HitTest(pPoint) = LocationNone Then
          '清空
          Set m_pElement = Nothing
          Set m_pSelectionTracker = Nothing
          '选择元素
          SelectElement ClickPoint
          PageLayout1.Refresh esriViewForeground
          PageLayout1.MousePointer = esriPointerDefault
        Else
            '如果在tracker里面
            If m_pSelectionTracker.HitTest(pPoint) = LocationInterior Then
                '创建一个新的 MoveImageFeedback
                
                Set m_pMoveImageFeedback = New MoveImageFeedback
                
                Dim pDisplayFeedback As IDisplayFeedback
                Set pDisplayFeedback = m_pMoveImageFeedback
                
                Set pDisplayFeedback.Display = PageLayout1.ActiveView.ScreenDisplay
                                                                                                                                                                                
                'Draw the element into the IMoveImageFeedbacks display
                m_pElement.Draw m_pMoveImageFeedback.Display, Nothing
                
                '设置开始点
                m_pMoveImageFeedback.Start pPoint
                Set m_pPointStart = pPoint
              Else
                '鼠标位于节点上面外面
                  Dim pPnt As IPoint
                  Dim DblSrchDis As Double
                  Dim pGraContSel As IGraphicsContainerSelect
                  
                  Dim pAV As IActiveView
                  Dim IntReszEdg As Integer
                
                  Set pAV = Me.PageLayout1.ActiveView
                  Set pGraContSel = pAV</P><P>                  
                  ' 得到当前光标下的点
                  Set pPnt = pAV.ScreenDisplay.DisplayTransformation.ToMapPoint(x, y)
                  
                  
                    ' Hit test元素
                    IntReszEdg = m_pSelectionTracker.HitTest(pPnt)
                    
                    ' 检查是否点击了节点
                    If IntReszEdg = 0 Or IntReszEdg = 1 Then
                      Set m_pSelectionTracker = Nothing
                      Set m_pElement = Nothing
                      Exit Sub
                    End If
                    
                    ' Decrement the value of the hitresult (Hit result constants are two less than the resize edge feedbacks
                    IntReszEdg = IntReszEdg - 2
                        
                    '创建一个新的ResizeEnvelopeFeedback
                    Set m_pResizeEnveFeedback = New ResizeEnvelopeFeedback
                    
                    '设置 feedback's display and resize edge
                    Set m_pResizeEnveFeedback.Display = pAV.ScreenDisplay
                    
                    m_pResizeEnveFeedback.ResizeEdge = IntReszEdg
                    
                    ' Apply constraints (only useful if ResizeEdge is one of the corners)
                    If button = 1 Then
                      ' 没有约束
                      m_pResizeEnveFeedback.Constraint = esriEnvelopeConstraintsNone
                    Else
                      ' 约束 to a square
                      m_pResizeEnveFeedback.Constraint = esriEnvelopeConstraintsSquare
                      
                    End If
                  
                    ' 开始 feedback并且移动 (避免返回空的矩形)
                    m_pResizeEnveFeedback.Start m_pElement.Geometry.Envelope, pPnt
                    m_pResizeEnveFeedback.MoveTo pPnt
                    
                  End If
            
        End If
      Else
        '没有选择到元素,就直接选择
        SelectElement ClickPoint
      End If
    End If
  ElseIf button = 2 Then
    'Zoom in
    PageLayout1.Extent = PageLayout1.TrackRectangle
  End If</P><P>End Sub</P>
http://www.geostar.com.cn(吉奥 公司) http://www.waterblue.com.cn(水之灵,蓝之静 个人)
举报 回复(0) 喜欢(0)     评分
waterblue
路人甲
路人甲
  • 注册日期2004-09-02
  • 发帖数72
  • QQ
  • 铜币387枚
  • 威望0点
  • 贡献值0点
  • 银元0个
5楼#
发布于:2005-04-06 16:08
<P>Mapcontrol下面的动态改变SYmbol的方法???</P><P>你是指实现自定义符号功能?我已经实现</P>
http://www.geostar.com.cn(吉奥 公司) http://www.waterblue.com.cn(水之灵,蓝之静 个人)
举报 回复(0) 喜欢(0)     评分
游客

返回顶部