Example #1
0
        public bool HitTest(RectF rect, float scale)
        {
            if (_height == 0 || _width == 0)
            {
                return(false);
            }

            var height = _height / scale;
            var hwidth = _width / (2 * scale);
            var b      = _origin + _direction * height;
            var hdir   = new VectorF(_direction.Y, -_direction.X);
            var wl     = hdir * hwidth;
            var p1     = b + wl;
            var p2     = b - wl;
            var line1  = new Line(_origin, b);
            var line2  = new Line(p1, p2);

            if (_Contains(line1, line2, rect.BottomLeft, hwidth, height) ||
                _Contains(line1, line2, rect.BottomRight, hwidth, height) ||
                _Contains(line1, line2, rect.TopLeft, hwidth, height) ||
                _Contains(line1, line2, rect.TopRight, hwidth, height))
            {
                return(true);
            }

            return(rect.Contains(_origin) || rect.Contains(p1) || rect.Contains(p2));
        }
Example #2
0
        internal bool HitTest(RectF rect, bool isFullContain = false)
        {
            var ret = rect.Contains(_bounds);

            if (!ret && !isFullContain)
            {
                var scale = _panel.ScaleX;
                foreach (var primitive in CurrentContext.Primitives)
                {
                    if (primitive.GetBounds(scale).IntersectsWith(rect) && primitive.HitTest(rect, scale))
                    {
                        return(true);
                    }
                }
            }
            return(ret);
        }
Example #3
0
 public bool IsCompletelyInside(RectF rect)
 {
     return(rect.Contains(P1) && rect.Contains(P2) && rect.Contains(P3));
 }