IRotateTracker 的用法

This example implements a simple tool for rotating graphics.

Dim m_pRotateTracker As IRotateTracker
Dim m_pSelElem As IElement

Private Sub UIToolControl1_Select()
  Set m_pRotateTracker = New RotateTracker
End Sub

Private Function UIToolControl1_Deactivate() As Boolean
  If Not m_pRotateTracker Is Nothing Then
    Set m_pRotateTracker = Nothing
  End If
  Set m_pSelElem = Nothing
 
  UIToolControl1_Deactivate = True
End Function
Private Sub UIToolControl1_MouseDown(ByVal button As Long, ByVal shift As Long, ByVal x As Long, ByVal y As Long)
 
  Dim pMxDoc As IMxDocument
  Dim pGraContSel As IGraphicsContainerSelect
  Dim pElemVert As IElementEditVertices
  Dim iSelCount As Integer
 
  'Get the document's active Graphics Container
  Set pMxDoc = ThisDocument
  Set pGraContSel = pMxDoc.ActiveView.GraphicsContainer
  ' Check that there is at least one selected element
  iSelCount = pGraContSel.ElementSelectionCount
  If iSelCount = 1 Then
    Set m_pSelElem = pGraContSel.SelectedElement(0)
  Else
    Set m_pSelElem = pGraContSel.DominantElement
  End If
 
  If m_pSelElem Is Nothing Then
    Exit Sub
  End If
 
  '****** Set screen display of the tracker
  Dim pScreenDisplay As IScreenDisplay
  Set pScreenDisplay = pMxDoc.ActiveView.ScreenDisplay
  Set m_pRotateTracker.Display = pScreenDisplay
 
  '****** Set origin of the rotation, add geometry
  m_pRotateTracker.ClearGeometry
  Dim pGeom As IGeometry
  Set pGeom = GetElementGeometry(m_pSelElem, pScreenDisplay)
  m_pRotateTracker.Origin = pGeom.Envelope.LowerLeft
  m_pRotateTracker.AddGeometry pGeom
 
  If Not m_pRotateTracker Is Nothing Then
    m_pRotateTracker.OnMouseDown
  End If
End Sub

Private Sub UIToolControl1_MouseMove(ByVal button As Long, ByVal shift As Long, ByVal x As Long, ByVal y As Long)
 
  If Not m_pRotateTracker Is Nothing Then
 
    Dim pPoint As IPoint
    Dim pMxDoc As IMxDocument
    Dim pScreenDisplay As IScreenDisplay
    Set pMxDoc = ThisDocument
    Set pScreenDisplay = pMxDoc.ActiveView.ScreenDisplay
    Set pPoint = pScreenDisplay.DisplayTransformation.ToMapPoint(x, y)
    m_pRotateTracker.OnMouseMove pPoint
  End If
End Sub
Private Sub UIToolControl1_MouseUp(ByVal button As Long, ByVal shift As Long, ByVal x As Long, ByVal y As Long)
 
  If Not m_pRotateTracker Is Nothing Then
    Dim bChanged As Boolean
    bChanged = m_pRotateTracker.OnMouseUp
    If Not bChanged Then
      Exit Sub
    End If
 
    If Not TypeOf m_pSelElem Is ITransform2D Then
      MsgBox "cant transform element"
      Exit Sub
    End If
    Dim pTransform2D As ITransform2D
    Set pTransform2D = m_pSelElem
    pTransform2D.Rotate m_pRotateTracker.Origin, m_pRotateTracker.Angle
   
    Dim pMxDoc As IMxDocument
    Dim pGeom As IGeometry
    Dim pGraphicsContainer As IGraphicsContainer
    Set pMxDoc = ThisDocument
    Set pGraphicsContainer = pMxDoc.ActiveView
    pGraphicsContainer.UpdateElement m_pSelElem
    pMxDoc.ActiveView.PartialRefresh esriViewGraphics, Nothing, Nothing
  End If
End Sub
Public Function GetElementGeometry(pElement As IElement, _
                                   pScreenDisplay As IScreenDisplay)
  Set GetElementGeometry = pElement.Geometry
  If TypeOf pElement Is IBoundsProperties Then
    Dim pBoundsProps As IBoundsProperties
    Set pBoundsProps = pElement
    If pBoundsProps.FixedSize Then
      Dim pPolygon As IPolygon
      Set pPolygon = New Polygon
      pElement.QueryOutline pScreenDisplay, pPolygon
      Set GetElementGeometry = pPolygon
    End If
  End If
End Function

 

posted @ 2013-01-24 19:07  象牛  阅读(820)  评论(0编辑  收藏  举报