PLplot 5.15.0
Loading...
Searching...
No Matches
cdtest.c
Go to the documentation of this file.
1
2#include <stdio.h>
3#include <math.h>
4#include <string.h>
5#include <stdlib.h>
6#include "defines.h"
7#include "cd.h"
8
9// cdtest.c: test program for the cgmdraw module.
10//
11// Written by G. Edward Johnson <mailto:lorax@nist.gov>
12// Date: April 1996
13// Copyright: cd software produced by NIST, an agency of the
14// U.S. government, is by statute not subject to copyright
15// in the United States. Recipients of this software assume all
16// responsibilities associated with its operation, modification
17// and maintenance.
18//
19//
20
21
22int main()
23{
24 cdImagePtr myimage;
25
26 // Color indexes
27 int white;
28 int blue;
29 int red;
30 int green;
31 int black;
32 int lavender;
33 // points for polygons and polylines
34 cdPoint points[15];
35 // output file
36 FILE *outf;
37
38
39// create an image, 1000 by 1000 pixels
40 myimage = cdImageCreate( 1000, 1000 );
41
42// Allocate the background color
43 white = cdImageColorAllocate( myimage, 255, 255, 255 );
44 red = cdImageColorAllocate( myimage, 255, 0, 0 );
45 green = cdImageColorAllocate( myimage, 0, 255, 0 );
46 blue = cdImageColorAllocate( myimage, 0, 0, 255 );
47 black = cdImageColorAllocate( myimage, 0, 0, 0 );
48
49 if ( cdSetLineColor( myimage, blue ) )
50 {
51 fprintf( stderr, "cdSetLineColor Successful\n" );
52 }
53 else
54 {
55 fprintf( stderr, "cdSetLineColor Unsuccessful\n" );
56 }
57
58 if ( cdSetLineColor( myimage, blue ) )
59 {
60 fprintf( stderr, "cdSetLineColor Successful\n" );
61 }
62 else
63 {
64 fprintf( stderr, "cdSetLineColor Unsuccessful\n" );
65 }
66
67
68 if ( cdImageLine( myimage, 400, 8, 520, 8, green ) )
69 {
70 fprintf( stderr, "cdImageLine Successful\n" );
71 }
72 else
73 {
74 fprintf( stderr, "cdImageLine Unsuccessful\n" );
75 }
76
77 if ( cdImageLine( myimage, 50, 50, 500, 500, red ) )
78 {
79 fprintf( stderr, "cdImageLine Successful\n" );
80 }
81 else
82 {
83 fprintf( stderr, "cdImageLine Unsuccessful\n" );
84 }
85
86 if ( cdSetLineAttrib( myimage, 2, 3, red ) )
87 {
88 fprintf( stderr, "cdSetLineAttrib Successful\n" );
89 }
90 else
91 {
92 fprintf( stderr, "cdSetLineAttrib Unsuccessful\n" );
93 }
94
95 if ( cdLine( myimage, 500, 50, 50, 500 ) )
96 {
97 fprintf( stderr, "cdLine Successful\n" );
98 }
99 else
100 {
101 fprintf( stderr, "cdLine Unsuccessful\n" );
102 }
103
104// Now, build a rectangle
105 if ( cdSetShapeFillAttrib( myimage, 3, blue, 6 ) )
106 {
107 fprintf( stderr, "cdSetShapeFillAttrib Successful\n" );
108 }
109 else
110 {
111 fprintf( stderr, "cdSetShapeFillAttrib Unsuccessful\n" );
112 }
113
114 if ( cdSetShapeEdgeAttrib( myimage, 1, 2, green, 1 ) )
115 {
116 fprintf( stderr, "cdSetShapeEdgeAttrib Successful\n" );
117 }
118 else
119 {
120 fprintf( stderr, "cdSetShapeEdgeAttrib Unsuccessful\n" );
121 }
122
123 if ( cdRectangle( myimage, 100, 100, 250, 250 ) )
124 {
125 fprintf( stderr, "cdRectangle Successful\n" );
126 }
127 else
128 {
129 fprintf( stderr, "cdRectangle Unsuccessful\n" );
130 }
131
132
133
134// now check out each of the line styles in order
135
136 if ( cdSetLineAttrib( myimage, 5, 4, green ) )
137 {
138 fprintf( stderr, "cdSetLineAttrib Successful\n" );
139 }
140 else
141 {
142 fprintf( stderr, "cdSetLineAttrib Unsuccessful\n" );
143 }
144
145 if ( cdLine( myimage, 100, 600, 500, 600 ) )
146 {
147 fprintf( stderr, "cdLine Successful\n" );
148 }
149 else
150 {
151 fprintf( stderr, "cdLine Unsuccessful\n" );
152 }
153
154 if ( cdSetLineAttrib( myimage, 4, -1, -1 ) )
155 {
156 fprintf( stderr, "cdSetLineAttrib Successful\n" );
157 }
158 else
159 {
160 fprintf( stderr, "cdSetLineAttrib Unsuccessful\n" );
161 }
162 if ( cdLine( myimage, 100, 625, 500, 625 ) )
163 {
164 fprintf( stderr, "cdLine Successful\n" );
165 }
166 else
167 {
168 fprintf( stderr, "cdLine Unsuccessful\n" );
169 }
170
171 if ( cdSetLineAttrib( myimage, 3, -1, -1 ) )
172 {
173 fprintf( stderr, "cdSetLineAttrib Successful\n" );
174 }
175 else
176 {
177 fprintf( stderr, "cdSetLineAttrib Unsuccessful\n" );
178 }
179 if ( cdLine( myimage, 100, 650, 500, 650 ) )
180 {
181 fprintf( stderr, "cdLine Successful\n" );
182 }
183 else
184 {
185 fprintf( stderr, "cdLine Unsuccessful\n" );
186 }
187
188
189 if ( cdSetLineAttrib( myimage, 2, -1, -1 ) )
190 {
191 fprintf( stderr, "cdSetLineAttrib Successful\n" );
192 }
193 else
194 {
195 fprintf( stderr, "cdSetLineAttrib Unsuccessful\n" );
196 }
197 if ( cdLine( myimage, 100, 675, 500, 675 ) )
198 {
199 fprintf( stderr, "cdLine Successful\n" );
200 }
201 else
202 {
203 fprintf( stderr, "cdLine Unsuccessful\n" );
204 }
205
206 if ( cdSetLineAttrib( myimage, 1, -1, -1 ) )
207 {
208 fprintf( stderr, "cdSetLineAttrib Successful\n" );
209 }
210 else
211 {
212 fprintf( stderr, "cdSetLineAttrib Unsuccessful\n" );
213 }
214 if ( cdLine( myimage, 100, 700, 500, 700 ) )
215 {
216 fprintf( stderr, "cdLine Successful\n" );
217 }
218 else
219 {
220 fprintf( stderr, "cdLine Unsuccessful\n" );
221 }
222
223// now make a circle
224 if ( cdSetShapeFillAttrib( myimage, 1, -1, 6 ) )
225 {
226 fprintf( stderr, "cdSetShapeFillAttrib Successful\n" );
227 }
228 else
229 {
230 fprintf( stderr, "cdSetShapeFillAttrib Unsuccessful\n" );
231 }
232
233 if ( cdSetShapeEdgeAttrib( myimage, 1, 2, green, 0 ) )
234 {
235 fprintf( stderr, "cdSetShapeEdgeAttrib Successful\n" );
236 }
237 else
238 {
239 fprintf( stderr, "cdSetShapeEdgeAttrib Unsuccessful\n" );
240 }
241
242 if ( cdCircle( myimage, 500, 500, 25 ) )
243 {
244 fprintf( stderr, "cdCircle Successful\n" );
245 }
246 else
247 {
248 fprintf( stderr, "cdCircle Unsuccessful\n" );
249 }
250
251// how about a Circular Arc now
252 if ( cdArc3Pt( myimage, 550, 500, 600, 600, 650, 550 ) )
253 {
254 fprintf( stderr, "cdArc3Pt Successful\n" );
255 }
256 else
257 {
258 fprintf( stderr, "cdArc3Pt Unsuccessful\n" );
259 }
260
261// now draw a closed Circular Arc
262 if ( cdArc3PtClose( myimage, 550, 200, 600, 300, 650, 250, 0 ) )
263 {
264 fprintf( stderr, "cdArc3PtClose Successful\n" );
265 }
266 else
267 {
268 fprintf( stderr, "cdArc3PtClose Unsuccessful\n" );
269 }
270
271// and now for an ellipse
272 if ( cdSetShapeEdgeAttrib( myimage, 1, 2, green, 1 ) )
273 {
274 fprintf( stderr, "cdSetShapeEdgeAttrib Successful\n" );
275 }
276 else
277 {
278 fprintf( stderr, "cdSetShapeEdgeAttrib Unsuccessful\n" );
279 }
280
281 if ( cdEllipse( myimage, 750, 200, 800, 250, 750, 300 ) )
282 {
283 fprintf( stderr, "cdEllipse Successful\n" );
284 }
285 else
286 {
287 fprintf( stderr, "cdEllipse Unsuccessful\n" );
288 }
289
290
291// Now, the harder ones. First lets try the polygon stuff
292// a polygon with 7 or less points
293
294 points[0].x = 700;
295 points[0].y = 700;
296 points[1].x = 725;
297 points[1].y = 750;
298 points[2].x = 775;
299 points[2].y = 650;
300
301 if ( cdPolygon( myimage, points, 3 ) )
302 {
303 fprintf( stderr, "cdPolygon Successful\n" );
304 }
305 else
306 {
307 fprintf( stderr, "cdPolygon Unsuccessful\n" );
308 }
309
310// Here's a tough one, a polygon with more than seven points
311
312 points[0].x = 800;
313 points[0].y = 700;
314 points[1].x = 825;
315 points[1].y = 725;
316 points[2].x = 850;
317 points[2].y = 700;
318 points[3].x = 875;
319 points[3].y = 750;
320 points[4].x = 900;
321 points[4].y = 775;
322 points[5].x = 925;
323 points[5].y = 750;
324 points[6].x = 950;
325 points[6].y = 850;
326 points[7].x = 925;
327 points[7].y = 850;
328 points[8].x = 875;
329 points[8].y = 800;
330 points[9].x = 850;
331 points[9].y = 825;
332 points[10].x = 825;
333 points[10].y = 900;
334
335 if ( cdPolygon( myimage, points, 11 ) )
336 {
337 fprintf( stderr, "cdPolygon Successful\n" );
338 }
339 else
340 {
341 fprintf( stderr, "cdPolygon Unsuccessful\n" );
342 }
343
344// Now for a polygon set, two polygons (both triangles) the first one
345// with an invisible edge closing it.
346
347 points[0].x = 500; // start of first polygon
348 points[0].y = 350;
349 points[0].e = 1; // edge out is visible
350 points[1].x = 575;
351 points[1].y = 350;
352 points[1].e = 1;
353 points[2].x = 575;
354 points[2].y = 430;
355 points[2].e = 3; // close polygon with visible edge
356 points[3].x = 600; // start of second polygon
357 points[3].y = 350;
358 points[3].e = 0; // edge out is invisible
359 points[4].x = 700;
360 points[4].y = 350;
361 points[4].e = 1;
362 points[5].x = 650;
363 points[5].y = 475;
364 points[5].e = 2; // close polygone with an invisible edge
365
366// make the edges wider so it is easier to see if they are there
367 if ( cdSetEdgeWidth( myimage, 3 ) )
368 {
369 fprintf( stderr, "cdSetEdgeWidth Successful\n" );
370 }
371 else
372 {
373 fprintf( stderr, "cdSetEdgeWidth Unsuccessful\n" );
374 }
375 if ( cdPolygonSet( myimage, points, 6 ) ) // draw the polygonset
376 {
377 fprintf( stderr, "cdPolygonSet Successful\n" );
378 }
379 else
380 {
381 fprintf( stderr, "cdPolygonSet Unsuccessful\n" );
382 }
383
384// now for poly lines, just like polygons (except they're lines)
385
386 if ( cdSetLineAttrib( myimage, 1, 1, red ) )
387 {
388 fprintf( stderr, "cdSetLineAttrib Successful\n" );
389 }
390 else
391 {
392 fprintf( stderr, "cdSetLineAttrib Unsuccessful\n" );
393 }
394
395
396 points[0].x = 400;
397 points[0].y = 16;
398 points[1].x = 520;
399 points[1].y = 16;
400 if ( cdPolyLine( myimage, points, 2 ) )
401 {
402 fprintf( stderr, "cdPolyLine Successful\n" );
403 }
404 else
405 {
406 fprintf( stderr, "cdPolyLine Unsuccessful\n" );
407 }
408
409 points[0].x = 800;
410 points[0].y = 650;
411 points[1].x = 825;
412 points[1].y = 675;
413 points[2].x = 850;
414 points[2].y = 650;
415 points[3].x = 875;
416 points[3].y = 700;
417 if ( cdPolyLine( myimage, points, 4 ) )
418 {
419 fprintf( stderr, "cdPolyLine Successful\n" );
420 }
421 else
422 {
423 fprintf( stderr, "cdPolyLine Unsuccessful\n" );
424 }
425
426
427// Markers
428// set the attributes
429 if ( cdSetMarkerAttrib( myimage, 1, 1, green ) )
430 {
431 fprintf( stderr, "cdSetMarkerAttrib Successful\n" );
432 }
433 else
434 {
435 fprintf( stderr, "cdSetMarkerAttrib Unsuccessful\n" );
436 }
437
438// now plot the marker
439
440 if ( cdMarker( myimage, 900, 500 ) )
441 {
442 fprintf( stderr, "cdMarker Successful\n" );
443 }
444 else
445 {
446 fprintf( stderr, "cdMarker Unsuccessful\n" );
447 }
448
449
450 if ( cdSetMarkerAttrib( myimage, 5, 3, black ) )
451 {
452// set the marker type to cross
453 fprintf( stderr, "cdSetMarkerAttrib Successful\n" );
454 }
455 else
456 {
457 fprintf( stderr, "cdSetMarkerAttrib Unsuccessful\n" );
458 }
459
460// a Poly Marker, two markers in different places
461 points[0].x = 715;
462 points[0].y = 785;
463 points[1].x = 735;
464 points[1].y = 815;
465
466 if ( cdPolyMarker( myimage, points, 2 ) )
467 {
468 fprintf( stderr, "cdPolyMarker Successful\n" );
469 }
470 else
471 {
472 fprintf( stderr, "cdMarker Unsuccessful\n" );
473 }
474
475
476// Hey, things are going so well, lets do some text
477 lavender = cdImageColorAllocate( myimage, 204, 102, 255 );
478
479 if ( cdSetTextAttrib( myimage, 1, lavender, 50 ) )
480 {
481 fprintf( stderr, "cdSetTextAttrib Successful\n" );
482 }
483 else
484 {
485 fprintf( stderr, "cdSetTextAttrib Unsuccessful\n" );
486 }
487
488 if ( cdText( myimage, 50, 800, "CGM Draw Version 1.3" ) )
489 {
490 fprintf( stderr, "cdText Successful\n" );
491 }
492 else
493 {
494 fprintf( stderr, "cdText Unsuccessful\n" );
495 }
496
497// More text. This time test TextPath and TextOrient
498 if ( cdSetTextPath( myimage, 3 ) )
499 {
500 fprintf( stderr, "cdSetTextPath Successful\n" );
501 }
502 else
503 {
504 fprintf( stderr, "cdSetTextPath Unsuccessful\n" );
505 }
506
507 if ( cdText( myimage, 50, 800, "CGM Draw" ) )
508 {
509 fprintf( stderr, "cdText Successful\n" );
510 }
511 else
512 {
513 fprintf( stderr, "cdText Unsuccessful\n" );
514 }
515
516 if ( cdSetTextOrient( myimage, 1, 0, 0, -1 ) )
517 {
518 fprintf( stderr, "cdSetTextOrient Successful\n" );
519 }
520 else
521 {
522 fprintf( stderr, "cdSetTextOrient Unsuccessful\n" );
523 }
524
525 if ( cdSetTextPath( myimage, 0 ) )
526 {
527 fprintf( stderr, "cdSetTextPath Successful\n" );
528 }
529 else
530 {
531 fprintf( stderr, "cdSetTextPath Unsuccessful\n" );
532 }
533
534 if ( cdText( myimage, 950, 400, "CGM Draw" ) )
535 {
536 fprintf( stderr, "cdText Successful\n" );
537 }
538 else
539 {
540 fprintf( stderr, "cdText Unsuccessful\n" );
541 }
542
543
544 if ( cdSetTextOrient( myimage, 0, 1, 1, 0 ) )
545 {
546 fprintf( stderr, "cdSetTextOrient Successful\n" );
547 }
548 else
549 {
550 fprintf( stderr, "cdSetTextOrient Unsuccessful\n" );
551 }
552
553
554 if ( cdSetTextAttrib( myimage, 5, -1, 25 ) )
555 {
556 fprintf( stderr, "cdSetTextAttrib Successful\n" );
557 }
558 else
559 {
560 fprintf( stderr, "cdSetTextAttrib Unsuccessful\n" );
561 }
562
563 if ( cdText( myimage, 5, 5, "G. Edward Johnson" ) )
564 {
565 fprintf( stderr, "cdText Successful\n" );
566 }
567 else
568 {
569 fprintf( stderr, "cdText Unsuccessful\n" );
570 }
571
572
573
574
575 outf = fopen( "cdout.cgm", "wb" );
576 if ( !outf )
577 return 1;
578 cdImageCgm( myimage, outf );
579 fclose( outf );
580 outf = 0;
581
582 cdImageDestroy( myimage );
583
584
585 return 0;
586}
int cdPolygonSet(cdImagePtr im, cdPointPtr p, int n)
Definition cd.c:2675
int cdSetEdgeWidth(cdImagePtr im, int edwidth)
Definition cd.c:1010
int cdSetLineAttrib(cdImagePtr im, int lntype, int lnwidth, int lncolor)
Definition cd.c:1652
int cdPolyMarker(cdImagePtr im, cdPointPtr p, int n)
Definition cd.c:2859
int cdEllipse(cdImagePtr im, int cx, int cy, int d1x, int d1y, int d2x, int d2y)
Definition cd.c:2524
int cdImageCgm(cdImagePtr im, FILE *out)
Definition cd.c:560
int cdPolyLine(cdImagePtr im, cdPointPtr p, int n)
Definition cd.c:2772
int cdMarker(cdImagePtr im, int x, int y)
Definition cd.c:2188
int cdLine(cdImagePtr im, int x1, int y1, int x2, int y2)
Definition cd.c:2116
int cdSetTextAttrib(cdImagePtr im, int font, int color, int height)
Definition cd.c:1720
int cdCircle(cdImagePtr im, int cx, int cy, int r)
Definition cd.c:2309
int cdSetTextOrient(cdImagePtr im, int xup, int yup, int xbase, int ybase)
Definition cd.c:1409
int cdArc3Pt(cdImagePtr im, int sx, int sy, int ix, int iy, int ex, int ey)
Definition cd.c:2376
int cdSetMarkerAttrib(cdImagePtr im, int mtype, int msize, int mcolor)
Definition cd.c:1750
int cdPolygon(cdImagePtr im, cdPointPtr p, int n)
Definition cd.c:2581
int cdImageColorAllocate(cdImagePtr im, int r, int g, int b)
Definition cd.c:1966
int cdText(cdImagePtr im, int x, int y, const char *ts)
Definition cd.c:2945
int cdSetShapeFillAttrib(cdImagePtr im, int instyle, int incolor, int inhatch)
Definition cd.c:1668
int cdSetShapeEdgeAttrib(cdImagePtr im, int edtype, int edwidth, int edcolor, int edvis)
Definition cd.c:1693
int cdArc3PtClose(cdImagePtr im, int sx, int sy, int ix, int iy, int ex, int ey, int cl)
Definition cd.c:2458
int cdRectangle(cdImagePtr im, int x1, int y1, int x2, int y2)
Definition cd.c:2235
int cdSetLineColor(cdImagePtr im, int lncolor)
Definition cd.c:703
int cdImageDestroy(cdImagePtr im)
Definition cd.c:1766
int cdSetTextPath(cdImagePtr im, int tpath)
Definition cd.c:1357
int cdImageLine(cdImagePtr im, int x1, int y1, int x2, int y2, int color)
Definition cd.c:3034
cdImagePtr cdImageCreate(int sx, int sy)
Definition cd.c:31
struct cdPointStruct cdPoint
cdImage * cdImagePtr
Definition cd.h:123
int main()
Definition cdtest.c:22
int x
Definition cd.h:130
int e
Definition cd.h:130
int y
Definition cd.h:130