CSharpGL.Scene.Pick C# (CSharp) Method

Pick() public method

Get geometry at specified mousePosition with specified pickingGeometryType.

Returns null when mousePosition is out of this scene's area or there's no active(visible and enabled) viewport.

public Pick ( Point mousePosition, PickingGeometryType pickingGeometryType ) : PickedGeometry>>.List
mousePosition Point mouse position in Windows coordinate system.(Left Up is (0, 0))
pickingGeometryType PickingGeometryType target's geometry type.
return PickedGeometry>>.List
        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;
        }