public List<Tuple<Point, PickedGeometry>> Pick(Point mousePosition, PickingGeometryType pickingGeometryType)
{
Rectangle clientRectangle = this.Canvas.ClientRectangle;
// if mouse is out of window's area, nothing picked.
if (mousePosition.X < 0 || clientRectangle.Width <= mousePosition.X || mousePosition.Y < 0 || clientRectangle.Height <= mousePosition.Y) { return null; }
int x = mousePosition.X;
int y = clientRectangle.Height - mousePosition.Y - 1;
// now (x, y) is in OpenGL's window cooridnate system.
Point position = new Point(x, y);
var pickingRect = new Rectangle(x, y, 1, 1);
List<Tuple<Point, PickedGeometry>> allPickedGeometrys = null;
foreach (ViewPort viewPort in this.rootViewPort.Traverse(TraverseOrder.Post))
{
if (viewPort.Visiable && viewPort.Enabled && viewPort.Contains(position))
{
allPickedGeometrys = ColorCodedPicking(viewPort, pickingRect, clientRectangle, pickingGeometryType);
break;
}
}
return allPickedGeometrys;
}