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