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 /*TEST 115 116 build: 117 requires: x 118 119 test: 120 output_file: output/ex1_1.out 121 122 TEST*/ 123