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