C# – How to do Hit testing in GDI+ for rotated shapes with real shape measurements (inches)

c++gdi+mathmousewinforms

Given I have a canvas that contains many shapes, lets say rectangles for now.

Each shape has a location (inches), size(inches) and rotation angle(degrees).

When a mouse click event happen inside the canvas for a location (x,y) in pixels.

I want to check if the clicked mouse position is inside/within a specific shape, considering the rotation angle and measurement unit conversion.

Can you help?

Best Solution

Your question is awfully short on details, I can only provide a generic answer. Do it mathematically is the fastest way. Rotation can make that difficult.

You can solve it slowly but easily by using a hit-test bitmap. Render the shapes to a Bitmap, using the same code you now use to render it to the screen. But now using a color that encodes the shape number. Hit testing is now simple and quick with GetPixel(). Be careful to turn off image enhancement settings, like anti-aliasing. Render it to the screen first and take a good look at the pixels with ZoomIt.