source: trunk/third/libart_lgpl/testuta.c @ 20813

Revision 20813, 5.5 KB checked in by ghudson, 20 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r20812, which included commits to RCS files with non-trunk default branches.
Line 
1/* Libart_LGPL - library of basic graphic primitives
2 * Copyright (C) 1998 Raph Levien
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 * Library General Public License for more details.
13 *
14 * You should have received a copy of the GNU Library General Public
15 * License along with this library; if not, write to the
16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 * Boston, MA 02111-1307, USA.
18 */
19
20#include <stdio.h>
21#include <stdlib.h>
22#include <math.h>
23#include "art_misc.h"
24#include "art_uta.h"
25#include "art_vpath.h"
26#include "art_uta_vpath.h"
27#include "art_rect.h"
28#include "art_rect_uta.h"
29#include "art_uta_rect.h"
30
31#undef LIBART_COMPILATION
32#include "libart-features.h"
33
34#define TEST_UTA
35#define noTEST_UTA_SPEED
36
37#define XOFF 50
38#define YOFF 700
39
40static void
41print_uta_ps (ArtUta *uta)
42{
43  int x, y;
44  int x0, y0, x1, y1;
45  int width = uta->width;
46  ArtUtaBbox ub;
47
48  for (y = 0; y < uta->height; y++)
49    for (x = 0; x < width; x++)
50      {
51        ub = uta->utiles[y * width + x];
52        if (ub != 0)
53          {
54            x0 = (uta->x0 + x) * ART_UTILE_SIZE + ART_UTA_BBOX_X0(ub);
55            x1 = (uta->x0 + x) * ART_UTILE_SIZE + ART_UTA_BBOX_X1(ub);
56            y0 = (uta->y0 + y) * ART_UTILE_SIZE + ART_UTA_BBOX_Y0(ub);
57            y1 = (uta->y0 + y) * ART_UTILE_SIZE + ART_UTA_BBOX_Y1(ub);
58            printf ("%% tile %d, %d: %d %d %d %d\n",
59                    x, y,
60                    ART_UTA_BBOX_X0(ub),
61                    ART_UTA_BBOX_Y0(ub),
62                    ART_UTA_BBOX_X1(ub),
63                    ART_UTA_BBOX_Y1(ub));
64            printf ("%d %d moveto %d %d lineto %d %d lineto %d %d lineto closepath fill\n",
65                    XOFF + x0, YOFF - y0, XOFF + x1, YOFF - y0,
66                    XOFF + x1, YOFF - y1, XOFF + x0, YOFF - y1);
67          }
68      }
69}
70
71static void
72print_rbuf_ps (int *rbuf, int width, int height)
73{
74  int x, y;
75
76  for (y = 0; y < height; y++)
77    for (x = 0; x < width; x++)
78      if (1 && rbuf[y * width + x] != 0)
79        printf ("%d %d moveto (%d) show\n", x * ART_UTILE_SIZE, y * ART_UTILE_SIZE,
80                rbuf[y * width + x]);   
81}
82
83#if 0
84void
85randline (ArtUta *uta, int *rbuf, int rbuf_rowstride)
86{
87  double x0, y0, x1, y1;
88
89  x0 = rand () * (500.0 / RAND_MAX);
90  y0 = rand () * (500.0 / RAND_MAX);
91  x1 = rand () * (500.0 / RAND_MAX);
92  y1 = rand () * (500.0 / RAND_MAX);
93
94  printf ("%g %g moveto %g %g lineto stroke\n", x0, y0, x1, y1);
95  art_uta_add_line (uta, x0, y0, x1, y1, rbuf, rbuf_rowstride);
96}
97#endif
98
99static void
100print_ps_vpath (ArtVpath *vpath)
101{
102  int i;
103
104  for (i = 0; vpath[i].code != ART_END; i++)
105    {
106      switch (vpath[i].code)
107        {
108        case ART_MOVETO:
109          printf ("%g %g moveto\n", XOFF + vpath[i].x, YOFF - vpath[i].y);
110          break;
111        case ART_LINETO:
112          printf ("%g %g lineto\n", XOFF + vpath[i].x, YOFF - vpath[i].y);
113          break;
114        default:
115          break;
116        }
117    }
118  printf ("stroke\n");
119}
120
121static ArtVpath *
122randstar (int n)
123{
124  ArtVpath *vec;
125  int i;
126  double r, th;
127
128  vec = art_new (ArtVpath, n + 2);
129  for (i = 0; i < n; i++)
130    {
131      vec[i].code = i ? ART_LINETO : ART_MOVETO;
132      r = rand () * (250.0 / RAND_MAX);
133      th = i * 2 * M_PI / n;
134      vec[i].x = 250 + r * cos (th);
135      vec[i].y = 250 - r * sin (th);
136    }
137  vec[i].code = ART_LINETO;
138  vec[i].x = vec[0].x;
139  vec[i].y = vec[0].y;
140  i++;
141  vec[i].code = ART_END;
142  vec[i].x = 0;
143  vec[i].y = 0;
144  return vec;
145}
146
147int
148main (int argc, char **argv)
149{
150  ArtUta *uta;
151  int i;
152  int *rbuf;
153  ArtVpath *vec;
154  ArtIRect *rects;
155  int n_rects;
156
157  if (argc == 2)
158    srand (atoi (argv[1]));
159
160#ifdef TEST_UTA
161  printf ("%%!PS-Adobe\n");
162  printf ("%% libart version: %d.%d.%d\n",
163          libart_major_version, libart_minor_version, libart_micro_version);
164  printf ("/Helvetica findfont 12 scalefont setfont\n");
165  printf ("0.5 setlinewidth\n");
166
167  printf ("0.5 setgray\n");
168  for (i = 0; i < 500; i += ART_UTILE_SIZE)
169    {
170      printf ("%d %d moveto %d %d lineto stroke\n",
171              XOFF, YOFF - i, XOFF + 500, YOFF - i);
172      printf ("%d %d moveto %d %d lineto stroke\n",
173              XOFF + i, YOFF, XOFF + i, YOFF - 500);
174    }
175
176  printf ("/a {\n");
177
178#if 1
179  vec = randstar (50);
180  print_ps_vpath (vec);
181  uta = art_uta_from_vpath (vec);
182#ifdef TEST_UTA_RECT
183  {
184    ArtIRect bbox = {5, 5, 450, 450};
185    uta = art_uta_from_irect (&bbox);
186  }
187#endif
188  rbuf = 0;
189#else
190  uta = art_uta_new_coords (0, 0, 500, 500);
191
192  rbuf = malloc (sizeof(int) * (500 >> ART_UTILE_SHIFT) * (500 >> ART_UTILE_SHIFT));
193  for (i = 0; i < 10; i++)
194    randline (uta, rbuf, 500 >> ART_UTILE_SHIFT);
195#endif
196
197  printf ("} def 1 0.5 0.5 setrgbcolor\n");
198
199  print_uta_ps (uta);
200
201  printf ("0 0 0.5 setrgbcolor\n");
202
203  if (rbuf)
204    print_rbuf_ps (rbuf, 500 >> ART_UTILE_SHIFT, 500 >> ART_UTILE_SHIFT);
205
206  printf ("0 setgray a\n");
207
208  rects = art_rect_list_from_uta (uta, 256, 64, &n_rects);
209
210  printf ("%% %d rectangles:\n0 0 1 setrgbcolor\n", n_rects);
211
212  for (i = 0; i < n_rects; i++)
213    printf ("%d %d moveto %d %d lineto %d %d lineto %d %d lineto closepath stroke\n",
214            XOFF + rects[i].x0, YOFF - rects[i].y0,
215            XOFF + rects[i].x1, YOFF - rects[i].y0,
216            XOFF + rects[i].x1, YOFF - rects[i].y1,
217            XOFF + rects[i].x0, YOFF - rects[i].y1);
218
219  printf ("showpage\n");
220#endif
221
222#ifdef TEST_UTA_SPEED
223  for (i = 0; i < 1000; i++)
224    {
225      vec = randstar (50);
226      uta = art_uta_from_vpath (vec);
227      art_free (vec);
228      art_uta_free (uta);
229    }
230#endif
231
232  return 0;
233}
Note: See TracBrowser for help on using the repository browser.