In Depth Banner
Skip Navigation Links

Select your preferred language

The GridSnap class

using System;

using System.ComponentModel;

using System.Drawing;

using System.Windows.Forms;

 

namespace WellFormed

{

  /// <summary>

  /// Summary description for GridSnap.

  /// </summary>

  public class GridSnap : ScrollableControl

  {

    int _snapX=8;

    public int SnapX

    {

      get{return _snapX;}

      set{_snapX=value;}

    }

 

    int _snapY=8;

    public int SnapY

    {

      get{return _snapY;}

      set{_snapY=value;}

    }

 

    bool _snap;

    public bool Snap

    {

      get{return _snap;}

      set{_snap=value;}

    }

 

 

 

    public GridSnap()

    {

    }

 

    protected MouseEventArgs MouseSnap(MouseEventArgs e)

    {

      int px, py;

 

      if(_snap)

      {

        px=(int)(((float)e.X/_snapX)+0.5f)*_snapX;

        py=(int)(((float)e.Y/_snapY)+0.5f)*_snapY;

      }

      else

      {

        px=e.X;

        py=e.Y;

      }

 

      MouseEventArgs t=new MouseEventArgs(e.Button,e.Clicks,px,py,e.Delta);

 

      return t;

    }

 

    protected override void OnMouseMove(MouseEventArgs e)

    {

      base.OnMouseMove(this.MouseSnap(e));

    }

 

    protected override void OnMouseDown(MouseEventArgs e)

    {

      base.OnMouseDown(this.MouseSnap(e));

    }

 

    protected override void OnMouseUp(MouseEventArgs e)

    {

      base.OnMouseUp(this.MouseSnap(e));

    }

 

  }

}

 

Return to the article.

Copyright © Bob Powell 2003-2009. All rights reserved