public override float Snap(Canguro.View.GraphicView activeView, Point mousePoint)
{
Vector3 mousePosition;
// Project points
Vector3 p = position, p2 = position + direction;
activeView.Project(ref p);
activeView.Project(ref p2);
Vector3 v = p2 - p;
p.Z = 0.1f;
mousePosition = new Vector3((float)mousePoint.X, (float)mousePoint.Y, 0.1f);
float r = Vector3.Dot(v, mousePosition - p) / Vector3.Dot(v, v);
Vector3 snapPoint = p + Vector3.Scale(v, r);
snapPosition = position + Vector3.Scale(direction, r);
Vector3 d = mousePosition - snapPoint;
return lastSnapFitness = Vector3.Dot(d, d);
}