The R Project SVN R

Rev

Rev 42521 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 42521 Rev 45017
Line 24... Line 24...
24
 
24
 
25
#include "graphapp.h"
25
#include "graphapp.h"
26
 
26
 
27
point newpoint(int x, int y)
27
point newpoint(int x, int y)
28
{
28
{
29
	point p;
29
    point p;
30
 
30
 
31
	p.x = x;
31
    p.x = x;
32
	p.y = y;
32
    p.y = y;
33
	return p;
33
    return p;
34
}
34
}
35
 
35
 
36
rect newrect(int x, int y, int width, int height)
36
rect newrect(int x, int y, int width, int height)
37
{
37
{
38
	rect r;
38
    rect r;
39
 
39
 
40
	r.x = x;
40
    r.x = x;
41
	r.y = y;
41
    r.y = y;
42
	r.width = width;
42
    r.width = width;
43
	r.height = height;
43
    r.height = height;
44
	return r;
44
    return r;
45
}
45
}
46
 
46
 
47
rect rpt(point min, point max)
47
rect rpt(point min, point max)
48
{
48
{
49
	rect r;
49
    rect r;
50
 
50
 
51
	r.x = min.x;
51
    r.x = min.x;
52
	r.y  = min.y;
52
    r.y  = min.y;
53
	r.width = max.x - min.x;
53
    r.width = max.x - min.x;
54
	r.height = max.y - min.y;
54
    r.height = max.y - min.y;
55
	return r;
55
    return r;
56
}
56
}
57
 
57
 
58
point topleft(rect r)
58
point topleft(rect r)
59
{
59
{
60
	point p;
60
    point p;
61
 
61
 
62
	p.x = r.x;
62
    p.x = r.x;
63
	p.y = r.y;
63
    p.y = r.y;
64
 
64
 
65
	return p;
65
    return p;
66
}
66
}
67
 
67
 
68
point topright(rect r)
68
point topright(rect r)
69
{
69
{
70
	point p;
70
    point p;
71
 
71
 
72
	p.x = r.x + r.width - 1;
72
    p.x = r.x + r.width - 1;
73
	p.y = r.y;
73
    p.y = r.y;
74
 
74
 
75
	return p;
75
    return p;
76
}
76
}
77
 
77
 
78
point bottomright(rect r)
78
point bottomright(rect r)
79
{
79
{
80
	point p;
80
    point p;
81
 
81
 
82
	p.x = r.x + r.width - 1;
82
    p.x = r.x + r.width - 1;
83
	p.y = r.y + r.height - 1;
83
    p.y = r.y + r.height - 1;
84
 
84
 
85
	return p;
85
    return p;
86
}
86
}
87
 
87
 
88
point bottomleft(rect r)
88
point bottomleft(rect r)
89
{
89
{
90
	point p;
90
	point p;
Line 95... Line 95...
95
	return p;
95
	return p;
96
}
96
}
97
 
97
 
98
point addpt(point p1, point p2)
98
point addpt(point p1, point p2)
99
{
99
{
100
	p1.x += p2.x;
100
    p1.x += p2.x;
101
	p1.y += p2.y;
101
    p1.y += p2.y;
102
	return p1;
102
    return p1;
103
}
103
}
104
 
104
 
105
point subpt(point p1, point p2)
105
point subpt(point p1, point p2)
106
{
106
{
107
	p1.x -= p2.x;
107
    p1.x -= p2.x;
108
	p1.y -= p2.y;
108
    p1.y -= p2.y;
109
	return p1;
109
    return p1;
110
}
110
}
111
 
111
 
112
point midpt(point p1, point p2)
112
point midpt(point p1, point p2)
113
{
113
{
114
	point p;
114
    point p;
115
 
115
 
116
	p.x = (p1.x + p2.x)/2;
116
    p.x = (p1.x + p2.x)/2;
117
	p.y = (p1.y + p2.y)/2;
117
    p.y = (p1.y + p2.y)/2;
118
	return p;
118
    return p;
119
}
119
}
120
 
120
 
121
point mulpt(point p, int i)
121
point mulpt(point p, int i)
122
{
122
{
123
	p.x *= i;
123
    p.x *= i;
124
	p.y *= i;
124
    p.y *= i;
125
	return p;
125
    return p;
126
}
126
}
127
 
127
 
128
point divpt(point p, int i)
128
point divpt(point p, int i)
129
{
129
{
130
	p.x /= i;
130
    p.x /= i;
131
	p.y /= i;
131
    p.y /= i;
132
	return p;
132
    return p;
133
}
133
}
134
 
134
 
135
rect rmove(rect r, point p)
135
rect rmove(rect r, point p)
136
{
136
{
137
	r.x = p.x;
137
    r.x = p.x;
138
	r.y  = p.y;
138
    r.y  = p.y;
139
	return r;
139
    return r;
140
}
140
}
141
 
141
 
142
rect raddpt(rect r, point p)
142
rect raddpt(rect r, point p)
143
{
143
{
144
	r.x += p.x;
144
    r.x += p.x;
145
	r.y += p.y;
145
    r.y += p.y;
146
	return r;
146
    return r;
147
}
147
}
148
 
148
 
149
rect rsubpt(rect r, point p)
149
rect rsubpt(rect r, point p)
150
{
150
{
151
	r.x -= p.x;
151
    r.x -= p.x;
152
	r.y  -= p.y;
152
    r.y  -= p.y;
153
	return r;
153
    return r;
154
}
154
}
155
 
155
 
156
rect rmul(rect r, int i)
156
rect rmul(rect r, int i)
157
{
157
{
158
	if (i != 1) {
158
    if (i != 1) {
159
		r.x *= i;
159
	r.x *= i;
160
		r.y  *= i;
160
	r.y  *= i;
161
		r.width *= i;
161
	r.width *= i;
162
		r.height *= i;
162
	r.height *= i;
163
	}
163
    }
164
	return r;
164
    return r;
165
}
165
}
166
 
166
 
167
rect rdiv(rect r, int i)
167
rect rdiv(rect r, int i)
168
{
168
{
169
	if (i != 1) {
169
    if (i != 1) {
170
		r.x /= i;
170
	r.x /= i;
171
		r.y  /= i;
171
	r.y  /= i;
172
		r.width /= i;
172
	r.width /= i;
173
		r.height /= i;
173
	r.height /= i;
174
	}
174
    }
175
	return r;
175
    return r;
176
}
176
}
177
 
177
 
178
rect growr(rect r, int w, int h)
178
rect growr(rect r, int w, int h)
179
{
179
{
180
	r.x -= w;
180
    r.x -= w;
181
	r.y  -= h;
181
    r.y  -= h;
182
	r.width += 2*w;
182
    r.width += 2*w;
183
	r.height += 2*h;
183
    r.height += 2*h;
184
	return r;
184
    return r;
185
}
185
}
186
 
186
 
187
rect insetr(rect r, int i)
187
rect insetr(rect r, int i)
188
{
188
{
189
	r.x += i;
189
    r.x += i;
190
	r.y  += i;
190
    r.y  += i;
191
	r.width -= 2*i;
191
    r.width -= 2*i;
192
	r.height -= 2*i;
192
    r.height -= 2*i;
193
	return r;
193
    return r;
194
}
194
}
195
 
195
 
196
rect rcenter(rect r1, rect r2) /* center r1 on r2 */
196
rect rcenter(rect r1, rect r2) /* center r1 on r2 */
197
{
197
{
198
	rect r;
198
    rect r;
199
 
199
 
200
	r.x = r2.x + (r2.width-r1.width)/2;
200
    r.x = r2.x + (r2.width-r1.width)/2;
201
	r.y  = r2.y + (r2.height-r1.height)/2;
201
    r.y  = r2.y + (r2.height-r1.height)/2;
202
	r.width = r1.width;
202
    r.width = r1.width;
203
	r.height = r1.height;
203
    r.height = r1.height;
204
 
204
 
205
	return r;
205
    return r;
206
}
206
}
207
 
207
 
208
int ptinr(point p, rect r)
208
int ptinr(point p, rect r)
209
{
209
{
210
	if ((p.x>=r.x) && (p.x<r.x+r.width) &&
210
    if ((p.x>=r.x) && (p.x<r.x+r.width) &&
211
			(p.y>=r.y) && (p.y<r.y+r.height))
211
	(p.y>=r.y) && (p.y<r.y+r.height))
212
		return 1;
212
	return 1;
213
	else
213
    else
214
		return 0;
214
	return 0;
215
}
215
}
216
 
216
 
217
int rinr(rect r1, rect r2)
217
int rinr(rect r1, rect r2)
218
{
218
{
219
	if ((r1.x>=r2.x) && (r1.y>=r2.y) &&
219
    if ((r1.x>=r2.x) && (r1.y>=r2.y) &&
220
		(r1.x+r1.width<=r2.x+r2.width) &&
220
	(r1.x+r1.width<=r2.x+r2.width) &&
221
		(r1.y+r1.height<=r2.y+r2.height))
221
	(r1.y+r1.height<=r2.y+r2.height))
222
		return 1;
222
	return 1;
223
	else
223
    else
224
		return 0;
224
	return 0;
225
}
225
}
226
 
226
 
227
int rxr(rect r1, rect r2)
227
int rxr(rect r1, rect r2)
228
{
228
{
229
	if ((r1.x<r2.x+r2.width) &&
229
    if ((r1.x<r2.x+r2.width) &&
230
		(r2.x<r1.x+r1.width) &&
230
	(r2.x<r1.x+r1.width) &&
231
		(r1.y<r2.y+r2.height) &&
231
	(r1.y<r2.y+r2.height) &&
232
		(r2.y<r1.y+r1.height))
232
	(r2.y<r1.y+r1.height))
233
		return 1;
233
	return 1;
234
	else
234
    else
235
		return 0;
235
	return 0;
236
}
236
}
237
 
237
 
238
int equalpt(point p1, point p2)
238
int equalpt(point p1, point p2)
239
{
239
{
240
	if ((p1.x==p2.x) && (p1.y==p2.y))
240
    if ((p1.x==p2.x) && (p1.y==p2.y))
241
		return 1;
241
	return 1;
242
	else
242
    else
243
		return 0;
243
	return 0;
244
}
244
}
245
 
245
 
246
int equalr(rect r1, rect r2)
246
int equalr(rect r1, rect r2)
247
{
247
{
248
	if ((r1.x==r2.x) && (r1.width==r2.width) &&
248
    if ((r1.x==r2.x) && (r1.width==r2.width) &&
249
		(r1.y==r2.y) && (r1.height==r2.height))
249
	(r1.y==r2.y) && (r1.height==r2.height))
250
		return 1;
250
	return 1;
251
	else
251
    else
252
		return 0;
252
	return 0;
253
}
253
}
254
 
254
 
255
rect clipr(rect r1, rect r2)
255
rect clipr(rect r1, rect r2)
256
{
256
{
257
	if (rxr(r1,r2) == 0)
257
    if (rxr(r1,r2) == 0)
258
		return rect(0,0,0,0); /* they don't overlap */
258
	return rect(0,0,0,0); /* they don't overlap */
259
 
259
 
260
	if (r1.x < r2.x) {
260
    if (r1.x < r2.x) {
261
		r1.width -= (r2.x - r1.x);
261
	r1.width -= (r2.x - r1.x);
262
		r1.x = r2.x;
262
	r1.x = r2.x;
263
	}
263
    }
264
	if (r1.y < r2.y) {
264
    if (r1.y < r2.y) {
265
		r1.height -= (r2.y - r1.y);
265
	r1.height -= (r2.y - r1.y);
266
		r1.y = r2.y;
266
	r1.y = r2.y;
267
	}
267
    }
268
	if (r1.x + r1.width > r2.x + r2.width)
268
    if (r1.x + r1.width > r2.x + r2.width)
269
		r1.width = r2.x + r2.width - r1.x;
269
	r1.width = r2.x + r2.width - r1.x;
270
	if (r1.y + r1.height > r2.y + r2.height)
270
    if (r1.y + r1.height > r2.y + r2.height)
271
		r1.height = r2.y + r2.height - r1.y;
271
	r1.height = r2.y + r2.height - r1.y;
272
	return r1; /* they do overlap */
272
    return r1; /* they do overlap */
273
}
273
}
274
 
274
 
275
rect rcanon(rect r)
275
rect rcanon(rect r)
276
{
276
{
277
	if (r.width < 0) {
277
    if (r.width < 0) {
278
		r.x += r.width;
278
	r.x += r.width;
279
		r.width = -r.width;
279
	r.width = -r.width;
280
	}
280
    }
281
	if (r.height < 0) {
281
    if (r.height < 0) {
282
		r.y += r.height;
282
	r.y += r.height;
283
		r.height = -r.height;
283
	r.height = -r.height;
284
	}
284
    }
285
	return r;
285
    return r;
286
}
286
}