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