1 #   include	"appUtilConfig.h"
2 
3 #   include	<limits.h>
4 #   include	"geo2DInteger.h"
5 
geoInitRectangle(DocumentRectangle * dr)6 void geoInitRectangle(	DocumentRectangle *		dr )
7     { dr->drX0= dr->drY0= dr->drX1= dr->drY1= 0; return; }
8 
geoInvalidateRectangle(DocumentRectangle * dr)9 void geoInvalidateRectangle(	DocumentRectangle *		dr )
10     {
11     dr->drX0= dr->drY0= INT_MAX;
12     dr->drX1= dr->drY1= INT_MIN;
13 
14     return;
15     }
16 
17 /************************************************************************/
18 /*									*/
19 /*  Remove the possible orientation of a rectangle: Make sure x0 <= x1	*/
20 /*  and y0 <= y1.							*/
21 /*									*/
22 /************************************************************************/
23 
geoNormalizeRectangle(DocumentRectangle * drTo,const DocumentRectangle * drFrom)24 void geoNormalizeRectangle(	DocumentRectangle *		drTo,
25 				const DocumentRectangle *	drFrom )
26     {
27     DocumentRectangle	dr;
28     int			swap;
29 
30     dr= *drFrom;
31 
32     if  ( dr.drX1 < dr.drX0 )
33 	{ swap= dr.drX1; dr.drX1= dr.drX0; dr.drX0= swap; }
34 
35     if  ( dr.drY1 < dr.drY0 )
36 	{ swap= dr.drY1; dr.drY1= dr.drY0; dr.drY0= swap; }
37 
38     *drTo= dr;
39 
40     return;
41     }
42 
geoUnionRectangle(DocumentRectangle * dr,const DocumentRectangle * dr1,const DocumentRectangle * dr2)43 void geoUnionRectangle(	DocumentRectangle *		dr,
44 			const DocumentRectangle *	dr1,
45 			const DocumentRectangle *	dr2 )
46     {
47     if  ( dr1->drX0 < dr2->drX0 )
48 	{ dr->drX0= dr1->drX0;	}
49     else{ dr->drX0= dr2->drX0;	}
50 
51     if  ( dr1->drY0 < dr2->drY0 )
52 	{ dr->drY0= dr1->drY0;	}
53     else{ dr->drY0= dr2->drY0;	}
54 
55     if  ( dr1->drX1 < dr2->drX1 )
56 	{ dr->drX1= dr2->drX1;	}
57     else{ dr->drX1= dr1->drX1;	}
58 
59     if  ( dr1->drY1 < dr2->drY1 )
60 	{ dr->drY1= dr2->drY1;	}
61     else{ dr->drY1= dr1->drY1;	}
62     }
63 
geoIntersectRectangle(DocumentRectangle * dr,const DocumentRectangle * dr1,const DocumentRectangle * dr2)64 int geoIntersectRectangle(	DocumentRectangle *		dr,
65 				const DocumentRectangle *	dr1,
66 				const DocumentRectangle *	dr2 )
67     {
68     DocumentRectangle	res= *dr1;
69 
70     if  ( dr1->drX1 < dr2->drX0 )
71 	{ return 0;	}
72 
73     if  ( dr2->drX1 < dr1->drX0 )
74 	{ return 0;	}
75 
76     if  ( dr1->drY1 < dr2->drY0 )
77 	{ return 0;	}
78 
79     if  ( dr2->drY1 < dr1->drY0 )
80 	{ return 0;	}
81 
82     if  ( ! dr )
83 	{ return 1;	}
84 
85     if  ( dr1->drX0 < dr2->drX0 )
86 	{ res.drX0= dr2->drX0;	}
87     else{ res.drX0= dr1->drX0;	}
88 
89     if  ( dr1->drY0 < dr2->drY0 )
90 	{ res.drY0= dr2->drY0;	}
91     else{ res.drY0= dr1->drY0;	}
92 
93     if  ( dr1->drX1 < dr2->drX1 )
94 	{ res.drX1= dr1->drX1;	}
95     else{ res.drX1= dr2->drX1;	}
96 
97     if  ( dr1->drY1 < dr2->drY1 )
98 	{ res.drY1= dr1->drY1;	}
99     else{ res.drY1= dr2->drY1;	}
100 
101     *dr= res; return 1;
102     }
103 
104