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