About the RubberBand zoom Sample
[C#]
RubberBandZoom.cs
using System;
using System.Drawing;
using System.Runtime.InteropServices;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.SystemUI;
using System.Windows.Forms;
namespace RubberBandZoom
{
public class RubberBandZoom : ESRI.ArcGIS.Desktop.AddIns.Tool
{
private IRubberBand m_RubberBand = null;
private IGeometry docGeometry = null;
public RubberBandZoom()
{
}
protected override void OnUpdate()
{
Enabled = ArcMap.Application != null;
}
protected override void OnActivate()
{
//initialize variables.
docGeometry = null;
m_RubberBand = null;
base.OnActivate();
}
protected override bool OnContextMenu(int Button, int Shift)
{
//returning true for this function overrides the default context menus - we don't want them to come up.
return true;
}
protected override void OnMouseDown(MouseEventArgs Args)//int Button, int Shift, int X, int Y)
{
m_RubberBand = new RubberRectangularPolygonClass();
if (Args.Button.ToString() == "Left") //left click
{
//create a new rubberband polygon.
docGeometry = m_RubberBand.TrackNew(ArcMap.Document.ActiveView.ScreenDisplay, null);
//zoom to the selected envelope as long as it is not zero.
if (!docGeometry.IsEmpty)
{
if (docGeometry.Envelope.Height != 0 && docGeometry.Envelope.Width != 0)
{
ArcMap.Document.ActiveView.Extent = docGeometry.Envelope;
//refresh to show changes.
ArcMap.Document.ActiveView.Refresh();
}
}
}
else if (Args.Button.ToString() == "Right") //right click
{
//zoom out either to previous extent, or to the full extent of the active view.
if (ArcMap.Document.ActiveView.ExtentStack.CanUndo())
{
//if we can, go to a previous zoom extent.
ArcMap.Document.ActiveView.ExtentStack.Undo();
ArcMap.Document.ActiveView.Refresh();
}
else
{
//or if no previous extents exist, go to the full extent of the active view.
ArcMap.Document.ActiveView.Extent = ArcMap.Document.ActiveView.FullExtent.Envelope;
ArcMap.Document.ActiveView.Refresh();
}
}
}
}
}
[Visual Basic .NET]
RubberBandZoom.vb
Imports System.Runtime.InteropServices
Imports System.Drawing
Imports ESRI.ArcGIS.Carto
Imports ESRI.ArcGIS.Display
Imports ESRI.ArcGIS.esriSystem
Imports ESRI.ArcGIS.Geometry
Imports ESRI.ArcGIS.SystemUI
Public Class RubberBandZoom
Inherits ESRI.ArcGIS.Desktop.AddIns.Tool
Private m_RubberBand As IRubberBand
Private docGeometry As IGeometry
Public Sub New()
End Sub
Protected Overrides Sub OnUpdate()
Enabled = My.ArcMap.Application IsNot Nothing
End Sub
Protected Overrides Sub OnActivate()
docGeometry = Nothing
m_RubberBand = Nothing
End Sub
Protected Overrides Sub OnMouseDown(ByVal Args As MouseEventArgs)
m_RubberBand = New RubberRectangularPolygon()
If (Args.Button.ToString = "Left") Then
'on a left-click, create a new rubber polygon and zoom to its' final extent
docGeometry = m_RubberBand.TrackNew(My.ArcMap.Document.ActiveView.ScreenDisplay, Nothing)
'if it is non-zero, zoom to the envelope just captured
If (docGeometry.IsEmpty = False) Then
My.ArcMap.Document.ActiveView.Extent = docGeometry.Envelope
End If
'and refresh
My.ArcMap.Document.ActiveView.Refresh()
ElseIf (Args.Button.ToString = "Right") Then
'on a right-click, zoom out to the previous extent, or to full extent if no previous extent exists
If (My.ArcMap.Document.ActiveView.ExtentStack.CanUndo) Then
'if possible, go back to the previous extent
My.ArcMap.Document.ActiveView.ExtentStack.Undo()
Else
'otherwise, zoom to the active view's full extent
My.ArcMap.Document.ActiveView.Extent = My.ArcMap.Document.ActiveView.FullExtent.Envelope
End If
'and refresh
My.ArcMap.Document.ActiveView.Refresh()
End If
End Sub
Protected Overrides Function OnContextMenu(ByVal X As Integer, ByVal Y As Integer) As Boolean
'return true so that the context menu does not come up.
Return True
End Function
End Class