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