ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/meta/mqdraw.c
Revision: 1.1
Committed: Sat Feb 22 02:07:26 2003 UTC (21 years, 2 months ago) by greg
Content type: text/plain
Branch: MAIN
CVS Tags: rad3R6P1, rad3R5, rad3R6
Log Message:
Changes and check-in for 3.5 release
Includes new source files and modifications not recorded for many years
See ray/doc/notes/ReleaseNotes for notes between 3.1 and 3.5 release

File Contents

# User Rev Content
1 greg 1.1 #ifndef lint
2     static const char RCSid[] = "$Id$";
3     #endif
4     /*
5     * Interface to MacIntosh QuickDraw routines
6     *
7     * 6/5/85
8     */
9    
10    
11     #include "meta.h"
12    
13     #include "macplot.h"
14    
15    
16     static short curpat = -1; /* current line drawing pattern */
17    
18     static short curpsiz = -1; /* current pen size */
19    
20     static short curpmod = -1; /* current pen mode */
21    
22     static int xpos = -1, /* current position */
23     ypos = -1;
24    
25    
26    
27     printstr(p) /* output a string */
28    
29     register PRIMITIVE *p;
30    
31     {
32     char *ctop(), *ptoc();
33    
34     MoveTo(mapx(p->xy[XMN]), mapy(p->xy[YMN]));
35     DrawString(ctop(p->args));
36     ptoc(p->args);
37     xpos = -1;
38     ypos = -1;
39    
40     }
41    
42    
43    
44    
45    
46     plotlseg(p) /* plot a line segment */
47    
48     register PRIMITIVE *p;
49    
50     {
51     static short right = FALSE;
52     int x1, x2, y1, y2;
53     short pp, ps;
54    
55     pp = (p->arg0 >> 4) & 03;
56     if (p->arg0 & 0100 && pp != 0)
57     pp += 03;
58     if (pp != curpat) {
59     PenPat(macpat[pp]);
60     curpat = pp;
61     }
62    
63     ps = WIDTH((p->arg0 >> 2) & 03);
64     if (ps != curpsiz) {
65     PenSize(CONV(ps, dxsize) + 1, CONV(ps, dysize) + 1);
66     curpsiz = ps;
67     }
68    
69     if (curpmod != patOr) {
70     PenMode(patOr);
71     curpmod = patOr;
72     }
73    
74     x1 = mapx(p->xy[XMN]);
75     x2 = mapx(p->xy[XMX]);
76    
77     if (p->arg0 & 0100) {
78     y1 = mapy(p->xy[YMX]);
79     y2 = mapy(p->xy[YMN]);
80     } else {
81     y1 = mapy(p->xy[YMN]);
82     y2 = mapy(p->xy[YMX]);
83     }
84    
85     if (x1 == xpos && y1 == ypos) {
86     LineTo(x2, y2);
87     xpos = x2;
88     ypos = y2;
89     } else if (x2 == xpos && y2 == ypos) {
90     LineTo(x1, y1);
91     xpos = x1;
92     ypos = y1;
93     } else if (right = !right) {
94     MoveTo(x1, y1);
95     LineTo(x2, y2);
96     xpos = x2;
97     ypos = y2;
98     } else {
99     MoveTo(x2, y2);
100     LineTo(x1, y1);
101     xpos = x1;
102     ypos = y1;
103     }
104    
105     }
106    
107    
108    
109    
110     setfill(a0) /* set filling mode */
111    
112     register int a0;
113    
114     {
115     short pp, pm;
116    
117     pp = pati[(a0 >> 2) & 03];
118     if (pp != curpat) {
119     PenPat(macpat[pp]);
120     curpat = pp;
121     }
122    
123     if (a0 & 0100)
124     pm = patXor;
125     else
126     pm = patOr;
127     if (pm != curpmod) {
128     PenMode(pm);
129     curpmod = pm;
130     }
131    
132     }
133    
134    
135    
136    
137     fillrect(p) /* fill a rectangle */
138    
139     register PRIMITIVE *p;
140    
141     {
142     static Rect r;
143    
144     r.left = mapx(p->xy[XMN]);
145     r.right = mapx(p->xy[XMX]);
146     r.top = mapy(p->xy[YMX]);
147     r.bottom = mapy(p->xy[YMN]);
148    
149     setfill(p->arg0);
150     PaintRect(&r);
151    
152     }
153    
154    
155    
156     filltri(p) /* fill a triangle */
157    
158     register PRIMITIVE *p;
159    
160     {
161     PolyHandle polyh;
162     int x[4], y[4];
163     int skipv;
164     register int i;
165    
166     polyh = OpenPoly();
167    
168     x[0] = x[1] = mapx(p->xy[XMN]);
169     x[2] = x[3] = mapx(p->xy[XMX]);
170     y[1] = y[2] = mapy(p->xy[YMN]);
171     y[0] = y[3] = mapy(p->xy[YMX]);
172    
173     skipv = (p->arg0 >> 4) & 03;
174     if (skipv == 3)
175     MoveTo(x[2], y[2]);
176     else
177     MoveTo(x[3], y[3]);
178    
179     for (i = 0; i < 4; i++)
180     if (i != skipv)
181     LineTo(x[i], y[i]);
182    
183     ClosePoly();
184     setfill(p->arg0);
185     PaintPoly(polyh);
186     KillPoly(polyh);
187     xpos = -1;
188     ypos = -1;
189    
190     }
191    
192    
193    
194    
195     xform(xp, yp, p) /* transform a point according to p */
196    
197     register int *xp, *yp;
198     register PRIMITIVE *p;
199    
200     {
201     int x, y;
202    
203     switch (p->arg0 & 060) {
204     case 0: /* right */
205     x = *xp;
206     y = *yp;
207     break;
208     case 020: /* up */
209     x = (XYSIZE-1) - *yp;
210     y = *xp;
211     break;
212     case 040: /* left */
213     x = (XYSIZE-1) - *xp;
214     y = (XYSIZE-1) - *yp;
215     break;
216     case 060: /* down */
217     x = *yp;
218     y = (XYSIZE-1) - *xp;
219     break;
220     }
221    
222     *xp = CONV(x, p->xy[XMX] - p->xy[XMN]) + p->xy[XMN];
223     *yp = CONV(y, p->xy[YMX] - p->xy[YMN]) + p->xy[YMN];
224    
225     }
226    
227    
228    
229     fillpoly(p) /* fill a polygon */
230    
231     register PRIMITIVE *p;
232    
233     {
234     int x0, y0, curx, cury;
235     PolyHandle polyh;
236     char *nextscan();
237     register char *s;
238    
239     polyh = OpenPoly();
240    
241     if ((s = nextscan(nextscan(p->args, "%d", &x0), "%d", &y0)) == NULL)
242     error(USER, "illegal polygon spec in fillpoly");
243    
244     xform(&x0, &y0, p);
245     x0 = mapx(x0); y0 = mapy(y0);
246     MoveTo(x0, y0);
247    
248     while ((s = nextscan(nextscan(s, "%d", &curx), "%d", &cury)) != NULL) {
249     xform(&curx, &cury, p);
250     curx = mapx(curx); cury = mapy(cury);
251     LineTo(curx, cury);
252     }
253     LineTo(x0, y0);
254    
255     ClosePoly();
256    
257     if (p->arg0 & 0100) { /* draw border */
258     if (curpat != 0) {
259     PenPat(macpat[0]);
260     curpat = 0;
261     }
262     if (curpsiz != 1) {
263     PenSize(1, 1);
264     curpsiz = 1;
265     }
266     if (curpmod != patOr) {
267     PenMode(patOr);
268     curpmod = patOr;
269     }
270     FramePoly(polyh);
271     }
272    
273     setfill(p->arg0 & 077);
274     PaintPoly(polyh);
275     KillPoly(polyh);
276     xpos = -1;
277     ypos = -1;
278    
279     }