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*327415f7SBarry Smith PetscFunctionBeginUser; 219566063dSJacob Faibussowitsch PetscCall(PetscInitialize(&argc,&argv,NULL,help)); 22c4762a1bSJed Brown 239566063dSJacob Faibussowitsch PetscCall(PetscDrawCreate(PETSC_COMM_WORLD,0,"Draw Example",PETSC_DECIDE,PETSC_DECIDE,101,101,&draw)); 249566063dSJacob Faibussowitsch /*PetscCall(PetscDrawSetPause(draw,2.0));*/ 259566063dSJacob Faibussowitsch PetscCall(PetscDrawSetFromOptions(draw)); 26c4762a1bSJed Brown 279566063dSJacob Faibussowitsch PetscCall(PetscDrawCheckResizedWindow(draw)); 289566063dSJacob Faibussowitsch PetscCall(PetscDrawGetWindowSize(draw,&w,&h)); 299566063dSJacob Faibussowitsch PetscCall(PetscDrawSetCoordinates(draw,0,0,--w,--h)); 309566063dSJacob Faibussowitsch PetscCall(PetscDrawClear(draw)); 31c4762a1bSJed Brown /* one-pixel lines in the window corners */ 329566063dSJacob Faibussowitsch PetscCall(PetscDrawLine(draw,0,0,0,0,r)); 339566063dSJacob Faibussowitsch PetscCall(PetscDrawLine(draw,w,0,w,0,r)); 349566063dSJacob Faibussowitsch PetscCall(PetscDrawLine(draw,0,h,0,h,r)); 359566063dSJacob Faibussowitsch PetscCall(PetscDrawLine(draw,w,h,w,h,r)); 36c4762a1bSJed Brown /* border lines with two pixels from borders */ 379566063dSJacob Faibussowitsch PetscCall(PetscDrawLine(draw,0+2,0,w-2,0,k)); 389566063dSJacob Faibussowitsch PetscCall(PetscDrawLine(draw,0+2,h,w-2,h,k)); 399566063dSJacob Faibussowitsch PetscCall(PetscDrawLine(draw,0,0+2,0,h-2,k)); 409566063dSJacob Faibussowitsch PetscCall(PetscDrawLine(draw,w,0+2,w,h-2,k)); 41c4762a1bSJed Brown /* oblique lines */ 429566063dSJacob Faibussowitsch PetscCall(PetscDrawLine(draw,0+2,h/2,w-2,h-2,b)); 439566063dSJacob Faibussowitsch PetscCall(PetscDrawLine(draw,0+1,h-1,w-1,0+1,b)); 44c4762a1bSJed Brown /* vertical up and down arrow, two pixels from borders */ 459566063dSJacob Faibussowitsch PetscCall(PetscDrawArrow(draw,1*w/4,0+2,1*w/4,h-2,g)); 469566063dSJacob Faibussowitsch PetscCall(PetscDrawArrow(draw,3*w/4,h-2,3*w/4,0+2,g)); 47c4762a1bSJed Brown /* horizontal right and left arrow, two pixels from borders */ 489566063dSJacob Faibussowitsch PetscCall(PetscDrawArrow(draw,0+2,3*h/4,w-2,3*h/4,g)); 499566063dSJacob Faibussowitsch PetscCall(PetscDrawArrow(draw,w-2,1*h/4,0+2,1*h/4,g)); 50c4762a1bSJed Brown /* flush, save, and pause */ 519566063dSJacob Faibussowitsch PetscCall(PetscDrawFlush(draw)); 529566063dSJacob Faibussowitsch PetscCall(PetscDrawSave(draw)); 539566063dSJacob Faibussowitsch PetscCall(PetscDrawPause(draw)); 54c4762a1bSJed Brown 559566063dSJacob Faibussowitsch PetscCall(PetscDrawCheckResizedWindow(draw)); 569566063dSJacob Faibussowitsch PetscCall(PetscDrawGetWindowSize(draw,&w,&h)); 579566063dSJacob Faibussowitsch PetscCall(PetscDrawSetCoordinates(draw,0,0,--w,--h)); 589566063dSJacob Faibussowitsch PetscCall(PetscDrawClear(draw)); 59c4762a1bSJed Brown /* one-pixel rectangles in the window corners */ 609566063dSJacob Faibussowitsch PetscCall(PetscDrawRectangle(draw,0,0,0,0,k,k,k,k)); 619566063dSJacob Faibussowitsch PetscCall(PetscDrawRectangle(draw,w,0,w,0,k,k,k,k)); 629566063dSJacob Faibussowitsch PetscCall(PetscDrawRectangle(draw,0,h,0,h,k,k,k,k)); 639566063dSJacob Faibussowitsch PetscCall(PetscDrawRectangle(draw,w,h,w,h,k,k,k,k)); 64c4762a1bSJed Brown /* border rectangles with two pixels from borders */ 659566063dSJacob Faibussowitsch PetscCall(PetscDrawRectangle(draw,0+2,0,w-2,0,k,k,k,k)); 669566063dSJacob Faibussowitsch PetscCall(PetscDrawRectangle(draw,0+2,h,w-2,h,k,k,k,k)); 679566063dSJacob Faibussowitsch PetscCall(PetscDrawRectangle(draw,0,0+2,0,h-2,k,k,k,k)); 689566063dSJacob Faibussowitsch PetscCall(PetscDrawRectangle(draw,w,0+2,w,h-2,k,k,k,k)); 69c4762a1bSJed Brown /* more rectangles */ 709566063dSJacob Faibussowitsch PetscCall(PetscDrawRectangle(draw,0+2,0+2,w/2-1,h/2-1,b,b,b,b)); 719566063dSJacob Faibussowitsch PetscCall(PetscDrawRectangle(draw,0+2,h/2+1,w/2-1,h-2,r,r,r,r)); 729566063dSJacob Faibussowitsch PetscCall(PetscDrawRectangle(draw,w/2+1,h/2+1,w-2,h-2,g,g,g,g)); 739566063dSJacob Faibussowitsch PetscCall(PetscDrawRectangle(draw,w/2+1,0+2,w-2,h/2-1,y,y,y,y)); 74c4762a1bSJed Brown /* flush, save, and pause */ 759566063dSJacob Faibussowitsch PetscCall(PetscDrawFlush(draw)); 769566063dSJacob Faibussowitsch PetscCall(PetscDrawSave(draw)); 779566063dSJacob Faibussowitsch PetscCall(PetscDrawPause(draw)); 78c4762a1bSJed Brown 799566063dSJacob Faibussowitsch PetscCall(PetscDrawCheckResizedWindow(draw)); 809566063dSJacob Faibussowitsch PetscCall(PetscDrawGetWindowSize(draw,&w,&h)); 819566063dSJacob Faibussowitsch PetscCall(PetscDrawSetCoordinates(draw,0,0,--w,--h)); 829566063dSJacob Faibussowitsch PetscCall(PetscDrawClear(draw)); 83c4762a1bSJed Brown /* interpolated triangles, one pixel from borders */ 849566063dSJacob Faibussowitsch PetscCall(PetscDrawTriangle(draw,0+1,0+1,w-1,0+1,w-1,h-1,c0,c1,c2)); 859566063dSJacob Faibussowitsch PetscCall(PetscDrawTriangle(draw,0+1,0+1,0+1,h-1,w-1,h-1,c0,c1,c2)); 86c4762a1bSJed Brown /* interpolated triangle, oblique, inside canvas */ 879566063dSJacob Faibussowitsch PetscCall(PetscDrawTriangle(draw,w/4,h/4,w/2,3*h/4,3*w/4,h/2,c2,c1,c0)); 88c4762a1bSJed Brown /* flush, save, and pause */ 899566063dSJacob Faibussowitsch PetscCall(PetscDrawFlush(draw)); 909566063dSJacob Faibussowitsch PetscCall(PetscDrawSave(draw)); 919566063dSJacob Faibussowitsch PetscCall(PetscDrawPause(draw)); 92c4762a1bSJed Brown 939566063dSJacob Faibussowitsch PetscCall(PetscDrawCheckResizedWindow(draw)); 949566063dSJacob Faibussowitsch PetscCall(PetscDrawGetWindowSize(draw,&w,&h)); 959566063dSJacob Faibussowitsch PetscCall(PetscDrawSetCoordinates(draw,0,0,--w,--h)); 969566063dSJacob Faibussowitsch PetscCall(PetscDrawClear(draw)); 97c4762a1bSJed Brown /* circles and ellipses */ 989566063dSJacob Faibussowitsch PetscCall(PetscDrawEllipse(draw,w/2,h/2,w-1,h-1,r)); 999566063dSJacob Faibussowitsch PetscCall(PetscDrawEllipse(draw,w,h/2,w/2,h,g)); 1009566063dSJacob Faibussowitsch PetscCall(PetscDrawEllipse(draw,0,0,w,h/2,b)); 1019566063dSJacob Faibussowitsch PetscCall(PetscDrawEllipse(draw,w/4,3*h/4,w/2,h/4,y)); 1029566063dSJacob Faibussowitsch PetscCall(PetscDrawCoordinateToPixel(draw,w/2,h/2,&i,&j)); 1039566063dSJacob Faibussowitsch PetscCall(PetscDrawPointPixel(draw,i,j,k)); 104c4762a1bSJed Brown /* flush, save, and pause */ 1059566063dSJacob Faibussowitsch PetscCall(PetscDrawFlush(draw)); 1069566063dSJacob Faibussowitsch PetscCall(PetscDrawSave(draw)); 1079566063dSJacob Faibussowitsch PetscCall(PetscDrawPause(draw)); 108c4762a1bSJed Brown 1099566063dSJacob Faibussowitsch PetscCall(PetscDrawDestroy(&draw)); 1109566063dSJacob Faibussowitsch PetscCall(PetscFinalize()); 111b122ec5aSJacob Faibussowitsch return 0; 112c4762a1bSJed Brown } 113c4762a1bSJed Brown 114c4762a1bSJed Brown /*TEST 115c4762a1bSJed Brown 116c4762a1bSJed Brown build: 117c4762a1bSJed Brown requires: x 118c4762a1bSJed Brown 119c4762a1bSJed Brown test: 120c4762a1bSJed Brown output_file: output/ex1_1.out 121c4762a1bSJed Brown 122c4762a1bSJed Brown TEST*/ 123