xref: /petsc/src/sys/classes/draw/tests/ex7.c (revision f97672e55eacc8688507b9471cd7ec2664d7f203)
1 
2 static char help[] = "Demonstrates drawing primitives in a window\n";
3 
4 #include <petscdraw.h>
5 
6 int main(int argc,char **argv)
7 {
8   PetscDraw draw;
9 
10   int i,j,w,h;
11   int k  = PETSC_DRAW_BLACK;
12   int r  = PETSC_DRAW_RED;
13   int g  = PETSC_DRAW_GREEN;
14   int b  = PETSC_DRAW_BLUE;
15   int y  = PETSC_DRAW_YELLOW;
16   int c0 = PETSC_DRAW_BASIC_COLORS;
17   int c2 = 255;
18   int c1 = (c0+c2)/2;
19 
20   PetscCall(PetscInitialize(&argc,&argv,NULL,help));
21 
22   PetscCall(PetscDrawCreate(PETSC_COMM_WORLD,0,"Draw Example",PETSC_DECIDE,PETSC_DECIDE,101,101,&draw));
23   /*PetscCall(PetscDrawSetPause(draw,2.0));*/
24   PetscCall(PetscDrawSetFromOptions(draw));
25 
26   PetscCall(PetscDrawCheckResizedWindow(draw));
27   PetscCall(PetscDrawGetWindowSize(draw,&w,&h));
28   PetscCall(PetscDrawSetCoordinates(draw,0,0,--w,--h));
29   PetscCall(PetscDrawClear(draw));
30   /* one-pixel lines in the window corners */
31   PetscCall(PetscDrawLine(draw,0,0,0,0,r));
32   PetscCall(PetscDrawLine(draw,w,0,w,0,r));
33   PetscCall(PetscDrawLine(draw,0,h,0,h,r));
34   PetscCall(PetscDrawLine(draw,w,h,w,h,r));
35   /* border lines with two pixels from  borders */
36   PetscCall(PetscDrawLine(draw,0+2,0,w-2,0,k));
37   PetscCall(PetscDrawLine(draw,0+2,h,w-2,h,k));
38   PetscCall(PetscDrawLine(draw,0,0+2,0,h-2,k));
39   PetscCall(PetscDrawLine(draw,w,0+2,w,h-2,k));
40   /* oblique lines */
41   PetscCall(PetscDrawLine(draw,0+2,h/2,w-2,h-2,b));
42   PetscCall(PetscDrawLine(draw,0+1,h-1,w-1,0+1,b));
43   /* vertical up and down arrow, two pixels from borders  */
44   PetscCall(PetscDrawArrow(draw,1*w/4,0+2,1*w/4,h-2,g));
45   PetscCall(PetscDrawArrow(draw,3*w/4,h-2,3*w/4,0+2,g));
46   /* horizontal right and left arrow, two pixels from borders  */
47   PetscCall(PetscDrawArrow(draw,0+2,3*h/4,w-2,3*h/4,g));
48   PetscCall(PetscDrawArrow(draw,w-2,1*h/4,0+2,1*h/4,g));
49   /* flush, save, and pause */
50   PetscCall(PetscDrawFlush(draw));
51   PetscCall(PetscDrawSave(draw));
52   PetscCall(PetscDrawPause(draw));
53 
54   PetscCall(PetscDrawCheckResizedWindow(draw));
55   PetscCall(PetscDrawGetWindowSize(draw,&w,&h));
56   PetscCall(PetscDrawSetCoordinates(draw,0,0,--w,--h));
57   PetscCall(PetscDrawClear(draw));
58   /* one-pixel rectangles in the window corners */
59   PetscCall(PetscDrawRectangle(draw,0,0,0,0,k,k,k,k));
60   PetscCall(PetscDrawRectangle(draw,w,0,w,0,k,k,k,k));
61   PetscCall(PetscDrawRectangle(draw,0,h,0,h,k,k,k,k));
62   PetscCall(PetscDrawRectangle(draw,w,h,w,h,k,k,k,k));
63   /* border rectangles with two pixels from  borders */
64   PetscCall(PetscDrawRectangle(draw,0+2,0,w-2,0,k,k,k,k));
65   PetscCall(PetscDrawRectangle(draw,0+2,h,w-2,h,k,k,k,k));
66   PetscCall(PetscDrawRectangle(draw,0,0+2,0,h-2,k,k,k,k));
67   PetscCall(PetscDrawRectangle(draw,w,0+2,w,h-2,k,k,k,k));
68   /* more rectangles */
69   PetscCall(PetscDrawRectangle(draw,0+2,0+2,w/2-1,h/2-1,b,b,b,b));
70   PetscCall(PetscDrawRectangle(draw,0+2,h/2+1,w/2-1,h-2,r,r,r,r));
71   PetscCall(PetscDrawRectangle(draw,w/2+1,h/2+1,w-2,h-2,g,g,g,g));
72   PetscCall(PetscDrawRectangle(draw,w/2+1,0+2,w-2,h/2-1,y,y,y,y));
73   /* flush, save, and pause */
74   PetscCall(PetscDrawFlush(draw));
75   PetscCall(PetscDrawSave(draw));
76   PetscCall(PetscDrawPause(draw));
77 
78   PetscCall(PetscDrawCheckResizedWindow(draw));
79   PetscCall(PetscDrawGetWindowSize(draw,&w,&h));
80   PetscCall(PetscDrawSetCoordinates(draw,0,0,--w,--h));
81   PetscCall(PetscDrawClear(draw));
82   /* interpolated triangles, one pixel from borders */
83   PetscCall(PetscDrawTriangle(draw,0+1,0+1,w-1,0+1,w-1,h-1,c0,c1,c2));
84   PetscCall(PetscDrawTriangle(draw,0+1,0+1,0+1,h-1,w-1,h-1,c0,c1,c2));
85   /* interpolated triangle, oblique, inside canvas */
86   PetscCall(PetscDrawTriangle(draw,w/4,h/4,w/2,3*h/4,3*w/4,h/2,c2,c1,c0));
87   /* flush, save, and pause */
88   PetscCall(PetscDrawFlush(draw));
89   PetscCall(PetscDrawSave(draw));
90   PetscCall(PetscDrawPause(draw));
91 
92   PetscCall(PetscDrawCheckResizedWindow(draw));
93   PetscCall(PetscDrawGetWindowSize(draw,&w,&h));
94   PetscCall(PetscDrawSetCoordinates(draw,0,0,--w,--h));
95   PetscCall(PetscDrawClear(draw));
96   /* circles and ellipses */
97   PetscCall(PetscDrawEllipse(draw,w/2,h/2,w-1,h-1,r));
98   PetscCall(PetscDrawEllipse(draw,w,h/2,w/2,h,g));
99   PetscCall(PetscDrawEllipse(draw,0,0,w,h/2,b));
100   PetscCall(PetscDrawEllipse(draw,w/4,3*h/4,w/2,h/4,y));
101   PetscCall(PetscDrawCoordinateToPixel(draw,w/2,h/2,&i,&j));
102   PetscCall(PetscDrawPointPixel(draw,i,j,k));
103   /* flush, save, and pause */
104   PetscCall(PetscDrawFlush(draw));
105   PetscCall(PetscDrawSave(draw));
106   PetscCall(PetscDrawPause(draw));
107 
108   PetscCall(PetscDrawDestroy(&draw));
109   PetscCall(PetscFinalize());
110   return 0;
111 }
112 
113 /*TEST
114 
115    build:
116      requires: x
117 
118    test:
119      output_file: output/ex1_1.out
120 
121 TEST*/
122