2 // Sample application for region graphics functions using Rects implementation
5 // Jordi Mas, jordi@ximian.com
9 using System.Drawing.Imaging;
11 using System.Drawing.Drawing2D;
16 public static void DumpRegion (Region rgn)
18 Matrix matrix = new Matrix ();
19 RectangleF [] rects = rgn.GetRegionScans (matrix);
21 for (int i = 0; i < rects.Length; i++)
22 Console.WriteLine ( rects[i]);
25 public static void Main ()
27 Bitmap bmp = new Bitmap (600, 800);
28 Graphics dc = Graphics.FromImage (bmp);
29 Font fnt = new Font ("Arial", 8);
30 Font fnttitle = new Font("Arial", 8, FontStyle.Underline);
31 Matrix matrix = new Matrix ();
33 Rectangle rect1, rect2, rect3, rect4;
34 Region rgn1, rgn2, rgn3, rgn4;
36 bool complement = true, exclude = true, union = true, xor = true, intersect = true;
38 SolidBrush whiteBrush = new SolidBrush (Color.White);
40 dc.DrawString ("Region samples using two Rectangle classes", fnttitle, whiteBrush, 5, 5);
44 rect1 = new Rectangle (20, 30, 60, 80);
45 rect2 = new Rectangle (50, 40, 60, 80);
46 rgn1 = new Region (rect1);
47 rgn2 = new Region (rect2);
48 dc.DrawRectangle (Pens.Green, rect1);
49 dc.DrawRectangle (Pens.Red, rect2);
50 rgn1.Complement (rgn2);
51 dc.FillRegion (Brushes.Blue, rgn1);
52 dc.DrawString ("Complement (" + rgn1.GetRegionScans (matrix).Length +")", fnt, whiteBrush, 10, 130);
53 dc.DrawRectangles (Pens.Yellow, rgn1.GetRegionScans (matrix));
59 rect3 = new Rectangle (130, 30, 60, 80);
60 rect4 = new Rectangle (170, 40, 60, 80);
61 rgn3 = new Region (rect3);
62 rgn4 = new Region (rect4);
63 dc.DrawRectangle (Pens.Green, rect3);
64 dc.DrawRectangle (Pens.Red, rect4);
66 dc.FillRegion (Brushes.Blue, rgn3);
67 dc.DrawString ("Exclude (" + rgn3.GetRegionScans (matrix).Length +")", fnt, whiteBrush, 130, 130);
68 dc.DrawRectangles (Pens.Yellow, rgn3.GetRegionScans (matrix));
75 Rectangle rect5 = new Rectangle (260, 30, 60, 80);
76 Rectangle rect6 = new Rectangle (290, 40, 60, 80);
77 Region rgn5 = new Region (rect5);
78 Region rgn6 = new Region (rect6);
79 dc.DrawRectangle (Pens.Green, rect5);
80 dc.DrawRectangle (Pens.Red, rect6);
81 rgn5.Intersect (rgn6);
82 dc.FillRegion (Brushes.Blue, rgn5);
83 dc.DrawString ("Intersect (" + rgn5.GetRegionScans (matrix).Length +")", fnt, whiteBrush, 270, 130);
84 dc.DrawRectangles (Pens.Yellow, rgn5.GetRegionScans (matrix));
90 Rectangle rect7 = new Rectangle (380, 30, 60, 80);
91 Rectangle rect8 = new Rectangle (410, 40, 60, 80);
92 Region rgn7 = new Region (rect7);
93 Region rgn8 = new Region (rect8);
94 dc.DrawRectangle (Pens.Green, rect7);
95 dc.DrawRectangle (Pens.Red, rect8);
97 dc.FillRegion (Brushes.Blue, rgn7);
98 dc.DrawString ("Xor (" + rgn7.GetRegionScans (matrix).Length +")", fnt, whiteBrush, 400, 130);
99 dc.DrawRectangles (Pens.Yellow, rgn7.GetRegionScans (matrix));
105 Rectangle rect9 = new Rectangle (500, 30, 60, 80);
106 Rectangle rect10 = new Rectangle (520, 40, 60, 80);
107 Region rgn9 = new Region(rect9);
108 Region rgn10 = new Region(rect10);
109 dc.DrawRectangle (Pens.Green, rect9);
110 dc.DrawRectangle (Pens.Red, rect10);
112 dc.FillRegion (Brushes.Blue, rgn9);
113 dc.DrawString ("Union (" + rgn9.GetRegionScans (matrix).Length +")", fnt, whiteBrush, 530, 130);
114 dc.DrawRectangles (Pens.Yellow, rgn9.GetRegionScans (matrix));
118 dc.DrawString ("Region samples using three Rectangle class", fnttitle, whiteBrush, 5, 155);
124 rect1 = new Rectangle (20+x, 180, 40, 50);
125 rect2 = new Rectangle (50+x, 190, 40, 50);
126 rect3 = new Rectangle (70+x, 210, 30, 50);
127 rgn1 = new Region (rect1);
128 rgn2 = new Region (rect2);
129 rgn3 = new Region (rect3);
131 dc.DrawRectangle (Pens.Green, rect1);
132 dc.DrawRectangle (Pens.Red, rect2);
133 dc.DrawEllipse (Pens.Red, rect3);
135 rgn1.Complement (rgn2);
136 rgn1.Complement (rgn3);
137 dc.FillRegion (Brushes.Blue, rgn1);
138 dc.DrawString ("Complement (" + rgn1.GetRegionScans (matrix).Length +")", fnt, whiteBrush, 10, 275);
139 dc.DrawRectangles (Pens.Yellow, rgn1.GetRegionScans (matrix));
146 rect1 = new Rectangle (20+x, 180, 40, 50);
147 rect2 = new Rectangle (50+x, 190, 40, 50);
148 rect3 = new Rectangle (70+x, 210, 30, 50);
149 rgn1 = new Region (rect1);
150 rgn2 = new Region (rect2);
151 rgn3 = new Region (rect3);
153 dc.DrawRectangle (Pens.Green, rect1);
154 dc.DrawRectangle (Pens.Red, rect2);
155 dc.DrawEllipse (Pens.Red, rect3);
159 dc.FillRegion (Brushes.Blue, rgn1);
160 dc.DrawRectangles (Pens.Yellow, rgn1.GetRegionScans (matrix));
161 dc.DrawString ("Exclude (" + rgn1.GetRegionScans (matrix).Length +")", fnt, whiteBrush, 130, 275);
169 rect1 = new Rectangle (20+x, 180, 40, 50);
170 rect2 = new Rectangle (50+x, 190, 40, 50);
171 rect3 = new Rectangle (70+x, 210, 30, 50);
172 rgn1 = new Region (rect1);
173 rgn2 = new Region (rect2);
174 rgn3 = new Region (rect3);
176 dc.DrawRectangle (Pens.Green, rect1);
177 dc.DrawRectangle (Pens.Red, rect2);
178 dc.DrawEllipse (Pens.Red, rect3);
181 rgn1.Intersect (rgn3);
182 dc.FillRegion (Brushes.Blue, rgn1);
183 dc.DrawRectangles (Pens.Yellow, rgn1.GetRegionScans (matrix));
184 dc.DrawString ("Intersect (" + rgn1.GetRegionScans (matrix).Length +")", fnt, whiteBrush, 270, 275);
192 rect1 = new Rectangle (20+x, 180, 40, 50);
193 rect2 = new Rectangle (50+x, 190, 40, 50);
194 rect3 = new Rectangle (70+x, 210, 30, 50);
195 rgn1 = new Region (rect1);
196 rgn2 = new Region (rect2);
197 rgn3 = new Region (rect3);
199 dc.DrawRectangle (Pens.Green, rect1);
200 dc.DrawRectangle (Pens.Red, rect2);
201 dc.DrawEllipse (Pens.Red, rect3);
205 dc.FillRegion (Brushes.Blue, rgn1);
206 dc.DrawRectangles (Pens.Yellow, rgn1.GetRegionScans (matrix));
207 dc.DrawString ("Xor (" + rgn1.GetRegionScans (matrix).Length +")", fnt, whiteBrush, 380, 275);
214 rect1 = new Rectangle (20+x, 180, 40, 50);
215 rect2 = new Rectangle (50+x, 190, 40, 50);
216 rect3 = new Rectangle (70+x, 210, 30, 50);
217 rgn1 = new Region (rect1);
218 rgn2 = new Region (rect2);
219 rgn3 = new Region (rect3);
221 dc.DrawRectangle (Pens.Green, rect1);
222 dc.DrawRectangle (Pens.Red, rect2);
223 dc.DrawEllipse (Pens.Red, rect3);
227 dc.FillRegion (Brushes.Blue, rgn1);
228 dc.DrawString ("Union (" + rgn1.GetRegionScans (matrix).Length +")", fnt, whiteBrush, 500, 275);
229 dc.DrawRectangles (Pens.Yellow, rgn1.GetRegionScans (matrix));
234 dc.DrawString ("Region samples using four Rectangle class", fnttitle, whiteBrush, 5, 300);
240 rect1 = new Rectangle (20+x, 330, 40, 50);
241 rect2 = new Rectangle (50+x, 340, 40, 50);
242 rect3 = new Rectangle (70+x, 360, 30, 50);
243 rect4 = new Rectangle (80+x, 400, 30, 10);
244 rgn1 = new Region (rect1);
245 rgn2 = new Region (rect2);
246 rgn3 = new Region (rect3);
247 rgn4 = new Region (rect4);
249 dc.DrawRectangle (Pens.Green, rect1);
250 dc.DrawRectangle (Pens.Red, rect2);
251 dc.DrawEllipse (Pens.Red, rect3);
252 dc.DrawRectangle (Pens.Red, rect4);
254 rgn1.Complement (rgn2);
255 rgn1.Complement (rgn3);
256 rgn1.Complement (rgn4);
257 dc.FillRegion (Brushes.Blue, rgn1);
258 dc.DrawString ("Complement (" + rgn1.GetRegionScans (matrix).Length +")", fnt, whiteBrush, 10, 430);
259 dc.DrawRectangles (Pens.Yellow, rgn1.GetRegionScans (matrix));
266 rect1 = new Rectangle (20+x, 330, 40, 50);
267 rect2 = new Rectangle (50+x, 340, 40, 50);
268 rect3 = new Rectangle (70+x, 360, 30, 50);
269 rect4 = new Rectangle (80+x, 400, 30, 10);
270 rgn1 = new Region (rect1);
271 rgn2 = new Region (rect2);
272 rgn3 = new Region (rect3);
273 rgn4 = new Region (rect4);
275 dc.DrawRectangle (Pens.Green, rect1);
276 dc.DrawRectangle (Pens.Red, rect2);
277 dc.DrawEllipse (Pens.Red, rect3);
278 dc.DrawRectangle (Pens.Red, rect4);
283 dc.FillRegion (Brushes.Blue, rgn1);
284 dc.DrawRectangles (Pens.Yellow, rgn1.GetRegionScans (matrix));
285 dc.DrawString ("Exclude (" + rgn1.GetRegionScans (matrix).Length +")", fnt, whiteBrush, 130, 430);
292 rect1 = new Rectangle (20+x, 330, 40, 50);
293 rect2 = new Rectangle (50+x, 340, 40, 50);
294 rect3 = new Rectangle (70+x, 360, 30, 50);
295 rect4 = new Rectangle (80+x, 400, 30, 10);
296 rgn1 = new Region (rect1);
297 rgn2 = new Region (rect2);
298 rgn3 = new Region (rect3);
299 rgn4 = new Region (rect4);
301 dc.DrawRectangle (Pens.Green, rect1);
302 dc.DrawRectangle (Pens.Red, rect2);
303 dc.DrawEllipse (Pens.Red, rect3);
304 dc.DrawRectangle (Pens.Red, rect4);
308 rgn1.Intersect (rgn4);
309 dc.FillRegion (Brushes.Blue, rgn1);
310 dc.DrawRectangles (Pens.Yellow, rgn1.GetRegionScans (matrix));
311 dc.DrawString ("Intersect (" + rgn1.GetRegionScans (matrix).Length +")", fnt, whiteBrush, 250, 430);
318 rect1 = new Rectangle (20+x, 330, 40, 50);
319 rect2 = new Rectangle (50+x, 340, 40, 50);
320 rect3 = new Rectangle (70+x, 360, 30, 50);
321 rect4 = new Rectangle (80+x, 400, 30, 10);
322 rgn1 = new Region (rect1);
323 rgn2 = new Region (rect2);
324 rgn3 = new Region (rect3);
325 rgn4 = new Region (rect4);
327 dc.DrawRectangle (Pens.Green, rect1);
328 dc.DrawRectangle (Pens.Red, rect2);
329 dc.DrawEllipse (Pens.Red, rect3);
330 dc.DrawRectangle (Pens.Red, rect4);
336 dc.FillRegion(Brushes.Blue, rgn1);
337 dc.DrawRectangles (Pens.Yellow, rgn1.GetRegionScans (matrix));
338 dc.DrawString ("Xor (" + rgn1.GetRegionScans (matrix).Length +")", fnt, whiteBrush, 370, 430);
345 rect1 = new Rectangle (20+x, 330, 40, 50);
346 rect2 = new Rectangle (50+x, 340, 40, 50);
347 rect3 = new Rectangle (70+x, 360, 30, 50);
348 rect4 = new Rectangle (80+x, 400, 30, 10);
349 rgn1 = new Region (rect1);
350 rgn2 = new Region (rect2);
351 rgn3 = new Region (rect3);
352 rgn4 = new Region (rect4);
354 dc.DrawRectangle (Pens.Green, rect1);
355 dc.DrawRectangle (Pens.Red, rect2);
356 dc.DrawEllipse (Pens.Red, rect3);
357 dc.DrawRectangle (Pens.Red, rect4);
362 dc.FillRegion (Brushes.Blue, rgn1);
363 dc.DrawString ("Union (" + rgn1.GetRegionScans (matrix).Length +")", fnt, whiteBrush, 490, 430);
364 dc.DrawRectangles (Pens.Yellow, rgn1.GetRegionScans (matrix));
369 dc.DrawString ("Region samples using Regions with two Rectangles", fnttitle, whiteBrush, 5, 455);
374 rect1 = new Rectangle (20+x, 330+150, 40, 50);
375 rect2 = new Rectangle (50+x, 340+150, 40, 50);
376 rect3 = new Rectangle (70+x, 360+150, 30, 50);
377 rect4 = new Rectangle (80+x, 400+150, 30, 10);
378 rgn1 = new Region (rect1);
380 rgn2 = new Region (rect3);
383 dc.DrawRectangle (Pens.Red, rect1);
384 dc.DrawRectangle (Pens.Red, rect2);
385 dc.DrawRectangle (Pens.Green, rect3);
386 dc.DrawRectangle (Pens.Green, rect4);
388 rgn1.Complement (rgn2);
389 dc.FillRegion (Brushes.Blue, rgn1);
390 dc.DrawString ("Complement (" + rgn1.GetRegionScans (matrix).Length +")", fnt, whiteBrush, 10, 430+150);
391 dc.DrawRectangles (Pens.Yellow, rgn1.GetRegionScans (matrix));
396 rect1 = new Rectangle (1, 1, 4, 1);
397 dc.DrawRectangle (Pens.Pink, rect1);
400 bmp.Save("regionsrc.bmp", ImageFormat.Bmp);