Xref: utzoo comp.windows.x:34546 alt.toolkits.xview:161 Path: utzoo!utgpu!news-server.csri.toronto.edu!rpi!uwm.edu!linac!att!cbfsb!cbnewsb.cb.att.com!afielden From: afielden@cbnewsb.cb.att.com (andrew.j.fielden) Newsgroups: comp.windows.x,alt.toolkits.xview Subject: Xlib regions Keywords: regions graphics Message-ID: <1991Mar28.094108.4281@cbfsb.att.com> Date: 28 Mar 91 09:41:08 GMT Sender: news@cbfsb.att.com Followup-To: comp.windows.x Organization: AT&T Bell Laboratories Lines: 64 I'm writing an xview program that uses Xlib graphics primitives. I have found a problem when trying to use Regions. What I am trying to do is detect whether one region is contained within another region. I wrote a small program to illustrate the problem. I create a region with co-ordinates (5,5),(80,5),(80,80),(5,80) - call this region b. Now I try to determine if the following regions are contained within the above region :- region a = (10,20),(30,20),(70,70),(50,70) region A = (10,20),(30,20),(70,50),(50,50) So what I do is calculate the intersection of the regions (region [aA] and region b) If region a is contained in region b, then this intersected region should be exactly equal to region a. Problem is, this method works for region 'a', but does not work for region 'A' ! I am a newcomer to X-Windows, so maybe I am overlooking something, but I would appreciate any help anyone could offer. Thanks in advance Andrew. ============================== CUT ======================================= #include "/usr/openwin/include/X11/Intrinsic.h" #include "/usr/openwin/include/X11/Xutil.h" main() { XPoint pt_a[4], pt_b[4]; Region region_a, region_b, region_c; /* (doesn't work) */ pt_a[0].x = 10; pt_a[0].y = 20; pt_a[1].x = 30; pt_a[1].y = 20; pt_a[2].x = 70; pt_a[2].y = 70; pt_a[3].x = 50; pt_a[3].y = 70; /* (works) */ /* pt_a[0].x = 10; pt_a[0].y = 20; pt_a[1].x = 30; pt_a[1].y = 20; pt_a[2].x = 70; pt_a[2].y = 50; pt_a[3].x = 50; pt_a[3].y = 50; */ pt_b[0].x = 5; pt_b[0].y = 5; pt_b[1].x = 80; pt_b[1].y = 5; pt_b[2].x = 80; pt_b[2].y = 80; pt_b[3].x = 5; pt_b[3].y = 80; region_a = XPolygonRegion(pt_a, 4, EvenOddRule); region_b = XPolygonRegion(pt_b, 4, EvenOddRule); region_c = XCreateRegion(); XIntersectRegion(region_b, region_a, region_c); if (XEqualRegion(region_a, region_c)) printf("region a is in region b\n"); else printf("region a is NOT in region b\n"); } -- Andrew Fielden. AT&T Network Systems UK. afielden@hvmpa.att.com