xref: /petsc/src/sys/classes/draw/tests/ex7.c (revision b122ec5aa1bd4469eb4e0673542fb7de3f411254)
1c4762a1bSJed Brown 
2c4762a1bSJed Brown static char help[] = "Demonstrates drawing primitives in a window\n";
3c4762a1bSJed Brown 
4c4762a1bSJed Brown #include <petscdraw.h>
5c4762a1bSJed Brown 
6c4762a1bSJed Brown int main(int argc,char **argv)
7c4762a1bSJed Brown {
8c4762a1bSJed Brown   PetscDraw draw;
9c4762a1bSJed Brown 
10c4762a1bSJed Brown   int i,j,w,h;
11c4762a1bSJed Brown   int k  = PETSC_DRAW_BLACK;
12c4762a1bSJed Brown   int r  = PETSC_DRAW_RED;
13c4762a1bSJed Brown   int g  = PETSC_DRAW_GREEN;
14c4762a1bSJed Brown   int b  = PETSC_DRAW_BLUE;
15c4762a1bSJed Brown   int y  = PETSC_DRAW_YELLOW;
16c4762a1bSJed Brown   int c0 = PETSC_DRAW_BASIC_COLORS;
17c4762a1bSJed Brown   int c2 = 255;
18c4762a1bSJed Brown   int c1 = (c0+c2)/2;
19c4762a1bSJed Brown 
20*b122ec5aSJacob Faibussowitsch   CHKERRQ(PetscInitialize(&argc,&argv,NULL,help));
21c4762a1bSJed Brown 
225f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawCreate(PETSC_COMM_WORLD,0,"Draw Example",PETSC_DECIDE,PETSC_DECIDE,101,101,&draw));
235f80ce2aSJacob Faibussowitsch   /*CHKERRQ(PetscDrawSetPause(draw,2.0));*/
245f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawSetFromOptions(draw));
25c4762a1bSJed Brown 
265f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawCheckResizedWindow(draw));
275f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawGetWindowSize(draw,&w,&h));
285f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawSetCoordinates(draw,0,0,--w,--h));
295f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawClear(draw));
30c4762a1bSJed Brown   /* one-pixel lines in the window corners */
315f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawLine(draw,0,0,0,0,r));
325f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawLine(draw,w,0,w,0,r));
335f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawLine(draw,0,h,0,h,r));
345f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawLine(draw,w,h,w,h,r));
35c4762a1bSJed Brown   /* border lines with two pixels from  borders */
365f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawLine(draw,0+2,0,w-2,0,k));
375f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawLine(draw,0+2,h,w-2,h,k));
385f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawLine(draw,0,0+2,0,h-2,k));
395f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawLine(draw,w,0+2,w,h-2,k));
40c4762a1bSJed Brown   /* oblique lines */
415f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawLine(draw,0+2,h/2,w-2,h-2,b));
425f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawLine(draw,0+1,h-1,w-1,0+1,b));
43c4762a1bSJed Brown   /* vertical up and down arrow, two pixels from borders  */
445f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawArrow(draw,1*w/4,0+2,1*w/4,h-2,g));
455f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawArrow(draw,3*w/4,h-2,3*w/4,0+2,g));
46c4762a1bSJed Brown   /* horizontal right and left arrow, two pixels from borders  */
475f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawArrow(draw,0+2,3*h/4,w-2,3*h/4,g));
485f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawArrow(draw,w-2,1*h/4,0+2,1*h/4,g));
49c4762a1bSJed Brown   /* flush, save, and pause */
505f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawFlush(draw));
515f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawSave(draw));
525f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawPause(draw));
53c4762a1bSJed Brown 
545f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawCheckResizedWindow(draw));
555f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawGetWindowSize(draw,&w,&h));
565f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawSetCoordinates(draw,0,0,--w,--h));
575f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawClear(draw));
58c4762a1bSJed Brown   /* one-pixel rectangles in the window corners */
595f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawRectangle(draw,0,0,0,0,k,k,k,k));
605f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawRectangle(draw,w,0,w,0,k,k,k,k));
615f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawRectangle(draw,0,h,0,h,k,k,k,k));
625f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawRectangle(draw,w,h,w,h,k,k,k,k));
63c4762a1bSJed Brown   /* border rectangles with two pixels from  borders */
645f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawRectangle(draw,0+2,0,w-2,0,k,k,k,k));
655f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawRectangle(draw,0+2,h,w-2,h,k,k,k,k));
665f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawRectangle(draw,0,0+2,0,h-2,k,k,k,k));
675f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawRectangle(draw,w,0+2,w,h-2,k,k,k,k));
68c4762a1bSJed Brown   /* more rectangles */
695f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawRectangle(draw,0+2,0+2,w/2-1,h/2-1,b,b,b,b));
705f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawRectangle(draw,0+2,h/2+1,w/2-1,h-2,r,r,r,r));
715f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawRectangle(draw,w/2+1,h/2+1,w-2,h-2,g,g,g,g));
725f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawRectangle(draw,w/2+1,0+2,w-2,h/2-1,y,y,y,y));
73c4762a1bSJed Brown   /* flush, save, and pause */
745f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawFlush(draw));
755f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawSave(draw));
765f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawPause(draw));
77c4762a1bSJed Brown 
785f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawCheckResizedWindow(draw));
795f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawGetWindowSize(draw,&w,&h));
805f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawSetCoordinates(draw,0,0,--w,--h));
815f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawClear(draw));
82c4762a1bSJed Brown   /* interpolated triangles, one pixel from borders */
835f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawTriangle(draw,0+1,0+1,w-1,0+1,w-1,h-1,c0,c1,c2));
845f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawTriangle(draw,0+1,0+1,0+1,h-1,w-1,h-1,c0,c1,c2));
85c4762a1bSJed Brown   /* interpolated triangle, oblique, inside canvas */
865f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawTriangle(draw,w/4,h/4,w/2,3*h/4,3*w/4,h/2,c2,c1,c0));
87c4762a1bSJed Brown   /* flush, save, and pause */
885f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawFlush(draw));
895f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawSave(draw));
905f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawPause(draw));
91c4762a1bSJed Brown 
925f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawCheckResizedWindow(draw));
935f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawGetWindowSize(draw,&w,&h));
945f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawSetCoordinates(draw,0,0,--w,--h));
955f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawClear(draw));
96c4762a1bSJed Brown   /* circles and ellipses */
975f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawEllipse(draw,w/2,h/2,w-1,h-1,r));
985f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawEllipse(draw,w,h/2,w/2,h,g));
995f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawEllipse(draw,0,0,w,h/2,b));
1005f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawEllipse(draw,w/4,3*h/4,w/2,h/4,y));
1015f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawCoordinateToPixel(draw,w/2,h/2,&i,&j));
1025f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawPointPixel(draw,i,j,k));
103c4762a1bSJed Brown   /* flush, save, and pause */
1045f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawFlush(draw));
1055f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawSave(draw));
1065f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawPause(draw));
107c4762a1bSJed Brown 
1085f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDrawDestroy(&draw));
109*b122ec5aSJacob Faibussowitsch   CHKERRQ(PetscFinalize());
110*b122ec5aSJacob Faibussowitsch   return 0;
111c4762a1bSJed Brown }
112c4762a1bSJed Brown 
113c4762a1bSJed Brown /*TEST
114c4762a1bSJed Brown 
115c4762a1bSJed Brown    build:
116c4762a1bSJed Brown      requires: x
117c4762a1bSJed Brown 
118c4762a1bSJed Brown    test:
119c4762a1bSJed Brown      output_file: output/ex1_1.out
120c4762a1bSJed Brown 
121c4762a1bSJed Brown TEST*/
122