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