mtInertia.Picture.HitTest C# (CSharp) Method

HitTest() public method

public HitTest ( PointF point ) : bool
point System.Drawing.PointF
return bool
        public bool HitTest(PointF point)
        {
            Matrix matrix = GetTrasformationMatrix();

            PointF[] points = GetBitmapBoundary(matrix);

            float minX = FindMinX(points);
            float minY = FindMinY(points);
            
            Matrix translateMatrix = new Matrix();
            translateMatrix.Translate(-minX + Translate.Width - Width * ScalingFactor.Width / 2, -minY + Translate.Height - ScalingFactor.Height * Height / 2);
            translateMatrix.TransformPoints(points);

            PointF[] ptRect = new PointF[5];
            Array.Copy(points, ptRect, 4);
            ptRect[4] = ptRect[0];
            
            bool isIn = false;

            for (int j = 0, i = 1; i < 5; ++i, ++j)
            {
                if ((((ptRect[i].Y < point.Y) && (point.Y < ptRect[j].Y)) || ((ptRect[j].Y < point.Y)
                    && (point.Y < ptRect[i].Y))) &&
                    (point.X < (ptRect[j].X - ptRect[i].X) * (point.Y - ptRect[i].Y) / (ptRect[j].Y -ptRect[i].Y) +ptRect[i].X))
                {
                    isIn = !isIn;
                }
            }

            return isIn;        
        }