waterblue
路人甲
路人甲
  • 注册日期2004-09-02
  • 发帖数72
  • QQ
  • 铜币387枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:5606回复: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)     评分
万里云
路人甲
路人甲
  • 注册日期2005-01-14
  • 发帖数114
  • QQ
  • 铜币414枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2005-03-22 15:46
<P>还没用到这个接口,是用来实现什么功能的?</P>
女口果人尔能看日月白这段言舌,那言兑日月人尔白勺目艮目青有严重白勺散光 
举报 回复(0) 喜欢(0)     评分
waterblue
路人甲
路人甲
  • 注册日期2004-09-02
  • 发帖数72
  • QQ
  • 铜币387枚
  • 威望0点
  • 贡献值0点
  • 银元0个
4楼#
发布于:2005-03-22 16:14
<P>编辑中很多地方都要用到</P><P>在布局视图里也会用到,移动,改变大小指南针,图例,比例尺等</P>
http://www.geostar.com.cn(吉奥 公司) http://www.waterblue.com.cn(水之灵,蓝之静 个人)
举报 回复(0) 喜欢(0)     评分
万里云
路人甲
路人甲
  • 注册日期2005-01-14
  • 发帖数114
  • QQ
  • 铜币414枚
  • 威望0点
  • 贡献值0点
  • 银元0个
5楼#
发布于:2005-03-22 17:10
<P>哦 有这么好的接口我还没发现呢</P><P>回去研究一下。。</P><P>谢谢啦</P>
女口果人尔能看日月白这段言舌,那言兑日月人尔白勺目艮目青有严重白勺散光 
举报 回复(0) 喜欢(0)     评分
kilojin
路人甲
路人甲
  • 注册日期2005-03-10
  • 发帖数22
  • QQ
  • 铜币188枚
  • 威望0点
  • 贡献值0点
  • 银元0个
6楼#
发布于:2005-03-23 09:06
<P>贴出来么,如何联系你呀?</P><P>要不email给我;</P><P><a href="mailtsea_door@163.net" target="_blank" >sea_door@163.net</A></P><P>谢谢</P>
举报 回复(0) 喜欢(0)     评分
normanlai
路人甲
路人甲
  • 注册日期2005-03-09
  • 发帖数7
  • QQ
  • 铜币129枚
  • 威望0点
  • 贡献值0点
  • 银元0个
7楼#
发布于:2005-03-23 11:18
暂时还没用到,以后要用时再联系了。
举报 回复(0) 喜欢(0)     评分
waterblue
路人甲
路人甲
  • 注册日期2004-09-02
  • 发帖数72
  • QQ
  • 铜币387枚
  • 威望0点
  • 贡献值0点
  • 银元0个
8楼#
发布于: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)     评分
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15945
  • QQ554730525
  • 铜币25337枚
  • 威望15352点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
9楼#
发布于:2005-03-23 15:21
<P>已经给楼上滴加分,希望能看到更多好贴!</P><img src="images/post/smile/dvbbs/em01.gif" />
举报 回复(0) 喜欢(0)     评分
上一页
游客

返回顶部