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)); }
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); }
public bool IsCompletelyInside(RectF rect) { return(rect.Contains(P1) && rect.Contains(P2) && rect.Contains(P3)); }