ImageGear for .NET
ZoomToRectangle Method
See Also  Example Send Feedback
ImageGear21.Core Assembly > ImageGear.Display Namespace > ImGearPageDisplay Class : ZoomToRectangle Method




pageView
ImGearZoomInfo object with new zoom attributes.
rect
Specified device rectangle.

Glossary Item Box

Performs zooming to specified device rectangle and returns new zoom information.

Syntax

 
Visual Basic
C#
Managed Extensions for C++
C++/CLI
 
 

Parameters

pageView
ImGearZoomInfo object with new zoom attributes.
rect
Specified device rectangle.

Remarks

This method calculates the zoom and scroll values, so that the specified rectangle is fitted to ClipRect and zoom image is fitted to the rectangle calculated. For both horizontal and vertical zoom attributes, it sets ImGearZoomComponentInfo.Fixed field to true, calculates and modifies ImGearZoomComponentInfo.Value field, the horizontal and vertical scroll positions, and returns new instance of ImGearZoomInfo object with new zoom attributes.

Example

C#Copy Code
// Variable to toggle if user is currently selecting an area.
private bool m_bZoomToRectSelect = false;
// Set of points defining the selected area.
private ImGearPoint[] igPointsZoomToRect;
// Color of selection box.
private Color m_SelectorColor = Color.White;

// Method to return appropriate height for a specific width 
// based upon the size of a scrollable view.
private int GetHeight(IImGearScrollableView igScrollableView, int Width)
{
    return Width * igScrollableView.ClientRectangle.Height / igScrollableView.ClientRectangle.Width;
}

private void menuZoomToRect_Click(object sender, EventArgs e)
{
    // Menu item used to toggle if Zoom to Rectangle is on or not.
    menuZoomToRect.Checked = !menuZoomToRect.Checked;
}

private void imGearPageView1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
    if (menuZoomToRect.Checked)
    {
        // Enter Zoom to Rectangle selection mode.
        m_bZoomToRectSelect = true;
        // Create a new pair of points to define the rectangle, 
        // setting the first point to the current position.
        igPointsZoomToRect = new ImGearPoint[2];
        igPointsZoomToRect[0].X = e.X;
        igPointsZoomToRect[0].Y = e.Y;
        // Register method to draw the selection rectangle.
        imGearPageView.RegisterAfterDraw(
            new ImGearPageView.AfterDraw(DrawSelector));
    }
}

private void imGearPageView1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
    if (m_bZoomToRectSelect)
    {
        // Leave Zoom to Rectangle selection mode.
        imGearPageView.RegisterAfterDraw(null);
        m_bZoomToRectSelect = false;
        // Record the second point of the zoom rectangle,
        // normalizing it to the view's aspect ratio.
        igPointsZoomToRect[1].X = e.X;
        igPointsZoomToRect[1].Y = igPointsZoomToRect[0].Y +
            GetHeight(imGearPageView, Math.Abs(igPointsZoomToRect[1].X - igPointsZoomToRect[0].X) + 1) - 1;
        // Create a rectangle based upon the 2 points.
        ImGearRectangle igRectangle = new ImGearRectangle(igPointsZoomToRect[0], igPointsZoomToRect[1]);
        // Cancel the zoom if it would be for a 0x0 or 1x1 rectangle.
        if (igRectangle.Width <= 1 || igRectangle.Height <= 1)
            return;
        // Zoom to the selected rectangle
        imGearPageView.Display.ZoomToRectangle(imGearPageView, igRectangle);
        imGearPageView.Invalidate();
        // Disable Zoom to Rectangle.
        menuZoomToRect.Checked = false;
    }
}

private void imGearPageView1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
    if (m_bZoomToRectSelect)
    {
        // Record the second point of the zoom rectangle,
        // normalizing it to the view's aspect ratio.
        igPointsZoomToRect[1].X = e.X;
        igPointsZoomToRect[1].Y = igPointsZoomToRect[0].Y +
            GetHeight(imGearPageView, Math.Abs(igPointsZoomToRect[1].X - igPointsZoomToRect[0].X) + 1) - 1;
        // Cause a redraw which will update the zoom selection rectangle.
        imGearPageView.Invalidate();
    }
}

private void DrawSelector(System.Drawing.Graphics gr)
{
    if (m_bZoomToRectSelect)
    {
        // Create a new pen to draw dotted lines.
        Pen pen = new Pen(m_SelectorColor);
        pen.DashStyle = DashStyle.Dot;
        // Define the currently selected zoom rectangle.
        ImGearRectangle igRectangleZoom = new ImGearRectangle(igPointsZoomToRect[0], igPointsZoomToRect[1]);
        // Draw the selection box.
        gr.DrawRectangle(pen, igRectangleZoom.Left, igRectangleZoom.Top,
            igRectangleZoom.Width, igRectangleZoom.Height);
    }
}
Visual BasicCopy Code
'Variable to toggle if user is currently selecting an area.
Private m_bZoomToRectSelect As Boolean = False
'Set of points defining the selected area.
Private igPointsZoomToRect() As ImGearPoint
'Color of selection box.
Private m_SelectorColor As Color = Color.White

'Function to return appropriate height for a specific width 
' based upon the size of a scrollable view.
Private Function GetHeight(ByVal igScrollableView As IImGearScrollableView, ByVal Width As Integer) As Integer
    GetHeight = Width * igScrollableView.ClientRectangle.Height / igScrollableView.ClientRectangle.Width
End Function


Private Sub menuZoomtoRect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
                Handles menuZoomtoRect.Click
    menuZoomtoRect.Checked = Not menuZoomtoRect.Checked
End Sub

Private Sub ImGearPageView1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) _
                Handles ImGearPageView1.MouseDown
    If (menuZoomtoRect.Checked) Then
        'Enter Zoom to Rectangle selection mode.
        m_bZoomToRectSelect = True
        'Create a new pair of points to define the rectangle, 
        ' setting the first point to the current position.
        ReDim igPointsZoomToRect(2)
        igPointsZoomToRect(0).X = e.X
        igPointsZoomToRect(0).Y = e.Y
        'Register function to draw the selection rectangle.
        ImGearPageView1.RegisterAfterDraw( _
            New ImGearPageView.AfterDraw(AddressOf DrawSelector))
    End If
End Sub

Private Sub ImGearPageView1_MouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) _
                Handles ImGearPageView1.MouseUp
    If (m_bZoomToRectSelect) Then
        'Leave Zoom to Rectangle selection mode.
        ImGearPageView1.RegisterAfterDraw(Nothing)
        m_bZoomToRectSelect = False
        'Record the second point of the zoom rectangle,
        ' normalizing it to the view's aspect ratio.
        igPointsZoomToRect(1).X = e.X
        igPointsZoomToRect(1).Y = igPointsZoomToRect(0).Y + _
            GetHeight(ImGearPageView1, Math.Abs(igPointsZoomToRect(1).X - igPointsZoomToRect(0).X) + 1) - 1
        'Create a rectangle based upon the 2 points.
        Dim igRectangle As ImGearRectangle = New ImGearRectangle(igPointsZoomToRect(0), igPointsZoomToRect(1))
        'Cancel the zoom if it would be for a 0x0 or 1x1 rectangle.
        If (igRectangle.Width <= 1 Or igRectangle.Height <= 1) Then
            Return
        End If
        'Zoom to the selected rectangle
        ImGearPageView1.Display.ZoomToRectangle(ImGearPageView1, igRectangle)
        ImGearPageView1.Invalidate()
        'Disable Zoom to Rectangle.
        menuZoomtoRect.Checked = False
    End If
End Sub

Private Sub ImGearPageView1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) _
                Handles ImGearPageView1.MouseMove
    If (m_bZoomToRectSelect) Then
        'Record the second point of the zoom rectangle,
        ' normalizing it to the view's aspect ratio.
        igPointsZoomToRect(1).X = e.X
        igPointsZoomToRect(1).Y = igPointsZoomToRect(0).Y + _
            GetHeight(ImGearPageView1, Math.Abs(igPointsZoomToRect(1).X - igPointsZoomToRect(0).X) + 1) - 1
        'Cause a redraw which will update the zoom selection rectangle.
        ImGearPageView1.Invalidate()
    End If
End Sub

Private Sub DrawSelector(ByVal gr As System.Drawing.Graphics)
    If (m_bZoomToRectSelect) Then
        'Create a new pen to draw dotted lines.
        Dim pen As Pen = New Pen(m_SelectorColor)
        Pen.DashStyle = DashStyle.Dot
        'Define the currently selected zoom rectangle.
        Dim igRectangleZoom As ImGearRectangle = New ImGearRectangle(igPointsZoomToRect(0), igPointsZoomToRect(1))
        'Draw the selection box.
        gr.DrawRectangle(pen, igRectangleZoom.Left, igRectangleZoom.Top, igRectangleZoom.Width, igRectangleZoom.Height)
    End If
End Sub

See Also

©2013. Accusoft Corporation. All Rights Reserved.