I see that Region.IsVisible (rectangle) does not work as I expect.
So, to me , who does not expect that it should not, or is it a method that does not what it should ?!
I have the following situation:
alt text http://lh4.ggpht.com/_1TPOP7DzY1E/TCmxn6Tzn2I/AAAAAAAADRc/GJhbStCvabQ/s800/Capture3.gif alt text http://lh5.ggpht.com/_1TPOP7DzY1E/TCmuVyrgPAAAA/AAA/AAA/AJAA .gif
And the following code:
private void Form1_Paint(object sender, PaintEventArgs e) { Point[] points1 = new Point[] { new Point(50, 30), new Point(70, 30), new Point(40, 40), new Point(60, 70), new Point(30, 50) }; Point[] points2 = new Point[] { new Point(70, 150), new Point(50, 110 ), new Point(60, 80), new Point(90, 80), new Point(140, 60) }; Point[] points3 = new Point[] { new Point(100, 10), new Point(130, 40) }; GraphicsPath path1 = new GraphicsPath(); GraphicsPath path2 = new GraphicsPath(); GraphicsPath path3 = new GraphicsPath(); path1.AddLines(points1); path2.AddLines(points2); path3.AddLines(points3); e.Graphics.DrawPath(Pens.DarkBlue, path1); e.Graphics.DrawPath(Pens.DarkGreen, path2); e.Graphics.DrawPath(Pens.DarkOrange, path3); Region r1 = new Region(path1); Region r2 = new Region(path2); Region r3 = new Region(path3); // Create the first rectangle and draw it to the screen in blue. Rectangle blueRect = new Rectangle(20, 20, 100, 100); e.Graphics.DrawRectangle(Pens.Blue, blueRect); bool contained; // Display the result. ControlPaint.DrawGrid(e.Graphics, this.ClientRectangle, new Size(10, 10), Color.Red); contained = r1.IsVisible(blueRect); e.Graphics.DrawString("Path blue contained = " + contained.ToString(), Font, myBrush, new PointF(20, 160)); contained = r2.IsVisible(blueRect); e.Graphics.DrawString("Path green contained = " + contained.ToString(), Font, Brushes.Black, new PointF(20, 180)); contained = r3.IsVisible(blueRect); e.Graphics.DrawString("Path orange contained = " + contained.ToString(), Font, Brushes.Black, new PointF(20, 200)); }
In addition, a path that is not in the region may be “visible”:
Point[] points3 = new Point[] { new Point(15, 35), new Point(15, 130), new Point(60 ,130) };
EDIT:
Even Intersect does not work for the second L path:
Point[] points3 = new Point[] { new Point(10, 40), new Point(10, 130), new Point(50 ,130) }; r3.Intersect(blueRect); bool contained = !(r1.IsEmpty(e.Graphics)); e.Graphics.DrawString("Path orange contained = " + contained.ToString(), Font, Brushes.Black, new PointF(20, 200));