1c4762a1bSJed Brown static char help[] = "Demonstrates drawing primitives in a window\n"; 2c4762a1bSJed Brown 3c4762a1bSJed Brown #include <petscdraw.h> 4c4762a1bSJed Brown 5d71ae5a4SJacob Faibussowitsch int main(int argc, char **argv) 6d71ae5a4SJacob Faibussowitsch { 7c4762a1bSJed Brown PetscDraw draw; 8c4762a1bSJed Brown 9c4762a1bSJed Brown int i, j, w, h; 10c4762a1bSJed Brown int k = PETSC_DRAW_BLACK; 11c4762a1bSJed Brown int r = PETSC_DRAW_RED; 12c4762a1bSJed Brown int g = PETSC_DRAW_GREEN; 13c4762a1bSJed Brown int b = PETSC_DRAW_BLUE; 14c4762a1bSJed Brown int y = PETSC_DRAW_YELLOW; 15c4762a1bSJed Brown int c0 = PETSC_DRAW_BASIC_COLORS; 16c4762a1bSJed Brown int c2 = 255; 17c4762a1bSJed Brown int c1 = (c0 + c2) / 2; 18c4762a1bSJed Brown 19327415f7SBarry Smith PetscFunctionBeginUser; 209566063dSJacob Faibussowitsch PetscCall(PetscInitialize(&argc, &argv, NULL, help)); 21c4762a1bSJed Brown 229566063dSJacob Faibussowitsch PetscCall(PetscDrawCreate(PETSC_COMM_WORLD, 0, "Draw Example", PETSC_DECIDE, PETSC_DECIDE, 101, 101, &draw)); 239566063dSJacob Faibussowitsch /* PetscCall(PetscDrawSetPause(draw,2.0)); */ 249566063dSJacob Faibussowitsch PetscCall(PetscDrawSetFromOptions(draw)); 25c4762a1bSJed Brown 269566063dSJacob Faibussowitsch PetscCall(PetscDrawCheckResizedWindow(draw)); 279566063dSJacob Faibussowitsch PetscCall(PetscDrawGetWindowSize(draw, &w, &h)); 289566063dSJacob Faibussowitsch PetscCall(PetscDrawSetCoordinates(draw, 0, 0, --w, --h)); 299566063dSJacob Faibussowitsch PetscCall(PetscDrawClear(draw)); 30c4762a1bSJed Brown /* one-pixel lines in the window corners */ 319566063dSJacob Faibussowitsch PetscCall(PetscDrawLine(draw, 0, 0, 0, 0, r)); 329566063dSJacob Faibussowitsch PetscCall(PetscDrawLine(draw, w, 0, w, 0, r)); 339566063dSJacob Faibussowitsch PetscCall(PetscDrawLine(draw, 0, h, 0, h, r)); 349566063dSJacob Faibussowitsch PetscCall(PetscDrawLine(draw, w, h, w, h, r)); 35c4762a1bSJed Brown /* border lines with two pixels from borders */ 369566063dSJacob Faibussowitsch PetscCall(PetscDrawLine(draw, 0 + 2, 0, w - 2, 0, k)); 379566063dSJacob Faibussowitsch PetscCall(PetscDrawLine(draw, 0 + 2, h, w - 2, h, k)); 389566063dSJacob Faibussowitsch PetscCall(PetscDrawLine(draw, 0, 0 + 2, 0, h - 2, k)); 399566063dSJacob Faibussowitsch PetscCall(PetscDrawLine(draw, w, 0 + 2, w, h - 2, k)); 40c4762a1bSJed Brown /* oblique lines */ 419566063dSJacob Faibussowitsch PetscCall(PetscDrawLine(draw, 0 + 2, h / 2, w - 2, h - 2, b)); 429566063dSJacob Faibussowitsch PetscCall(PetscDrawLine(draw, 0 + 1, h - 1, w - 1, 0 + 1, b)); 43c4762a1bSJed Brown /* vertical up and down arrow, two pixels from borders */ 449566063dSJacob Faibussowitsch PetscCall(PetscDrawArrow(draw, 1 * w / 4, 0 + 2, 1 * w / 4, h - 2, g)); 459566063dSJacob Faibussowitsch PetscCall(PetscDrawArrow(draw, 3 * w / 4, h - 2, 3 * w / 4, 0 + 2, g)); 46c4762a1bSJed Brown /* horizontal right and left arrow, two pixels from borders */ 479566063dSJacob Faibussowitsch PetscCall(PetscDrawArrow(draw, 0 + 2, 3 * h / 4, w - 2, 3 * h / 4, g)); 489566063dSJacob Faibussowitsch PetscCall(PetscDrawArrow(draw, w - 2, 1 * h / 4, 0 + 2, 1 * h / 4, g)); 49c4762a1bSJed Brown /* flush, save, and pause */ 509566063dSJacob Faibussowitsch PetscCall(PetscDrawFlush(draw)); 519566063dSJacob Faibussowitsch PetscCall(PetscDrawSave(draw)); 529566063dSJacob Faibussowitsch PetscCall(PetscDrawPause(draw)); 53c4762a1bSJed Brown 549566063dSJacob Faibussowitsch PetscCall(PetscDrawCheckResizedWindow(draw)); 559566063dSJacob Faibussowitsch PetscCall(PetscDrawGetWindowSize(draw, &w, &h)); 569566063dSJacob Faibussowitsch PetscCall(PetscDrawSetCoordinates(draw, 0, 0, --w, --h)); 579566063dSJacob Faibussowitsch PetscCall(PetscDrawClear(draw)); 58c4762a1bSJed Brown /* one-pixel rectangles in the window corners */ 599566063dSJacob Faibussowitsch PetscCall(PetscDrawRectangle(draw, 0, 0, 0, 0, k, k, k, k)); 609566063dSJacob Faibussowitsch PetscCall(PetscDrawRectangle(draw, w, 0, w, 0, k, k, k, k)); 619566063dSJacob Faibussowitsch PetscCall(PetscDrawRectangle(draw, 0, h, 0, h, k, k, k, k)); 629566063dSJacob Faibussowitsch PetscCall(PetscDrawRectangle(draw, w, h, w, h, k, k, k, k)); 63c4762a1bSJed Brown /* border rectangles with two pixels from borders */ 649566063dSJacob Faibussowitsch PetscCall(PetscDrawRectangle(draw, 0 + 2, 0, w - 2, 0, k, k, k, k)); 659566063dSJacob Faibussowitsch PetscCall(PetscDrawRectangle(draw, 0 + 2, h, w - 2, h, k, k, k, k)); 669566063dSJacob Faibussowitsch PetscCall(PetscDrawRectangle(draw, 0, 0 + 2, 0, h - 2, k, k, k, k)); 679566063dSJacob Faibussowitsch PetscCall(PetscDrawRectangle(draw, w, 0 + 2, w, h - 2, k, k, k, k)); 68c4762a1bSJed Brown /* more rectangles */ 699566063dSJacob Faibussowitsch PetscCall(PetscDrawRectangle(draw, 0 + 2, 0 + 2, w / 2 - 1, h / 2 - 1, b, b, b, b)); 709566063dSJacob Faibussowitsch PetscCall(PetscDrawRectangle(draw, 0 + 2, h / 2 + 1, w / 2 - 1, h - 2, r, r, r, r)); 719566063dSJacob Faibussowitsch PetscCall(PetscDrawRectangle(draw, w / 2 + 1, h / 2 + 1, w - 2, h - 2, g, g, g, g)); 729566063dSJacob Faibussowitsch PetscCall(PetscDrawRectangle(draw, w / 2 + 1, 0 + 2, w - 2, h / 2 - 1, y, y, y, y)); 73c4762a1bSJed Brown /* flush, save, and pause */ 749566063dSJacob Faibussowitsch PetscCall(PetscDrawFlush(draw)); 759566063dSJacob Faibussowitsch PetscCall(PetscDrawSave(draw)); 769566063dSJacob Faibussowitsch PetscCall(PetscDrawPause(draw)); 77c4762a1bSJed Brown 789566063dSJacob Faibussowitsch PetscCall(PetscDrawCheckResizedWindow(draw)); 799566063dSJacob Faibussowitsch PetscCall(PetscDrawGetWindowSize(draw, &w, &h)); 809566063dSJacob Faibussowitsch PetscCall(PetscDrawSetCoordinates(draw, 0, 0, --w, --h)); 819566063dSJacob Faibussowitsch PetscCall(PetscDrawClear(draw)); 82c4762a1bSJed Brown /* interpolated triangles, one pixel from borders */ 839566063dSJacob Faibussowitsch PetscCall(PetscDrawTriangle(draw, 0 + 1, 0 + 1, w - 1, 0 + 1, w - 1, h - 1, c0, c1, c2)); 849566063dSJacob Faibussowitsch PetscCall(PetscDrawTriangle(draw, 0 + 1, 0 + 1, 0 + 1, h - 1, w - 1, h - 1, c0, c1, c2)); 85c4762a1bSJed Brown /* interpolated triangle, oblique, inside canvas */ 869566063dSJacob Faibussowitsch PetscCall(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 */ 889566063dSJacob Faibussowitsch PetscCall(PetscDrawFlush(draw)); 899566063dSJacob Faibussowitsch PetscCall(PetscDrawSave(draw)); 909566063dSJacob Faibussowitsch PetscCall(PetscDrawPause(draw)); 91c4762a1bSJed Brown 929566063dSJacob Faibussowitsch PetscCall(PetscDrawCheckResizedWindow(draw)); 939566063dSJacob Faibussowitsch PetscCall(PetscDrawGetWindowSize(draw, &w, &h)); 949566063dSJacob Faibussowitsch PetscCall(PetscDrawSetCoordinates(draw, 0, 0, --w, --h)); 959566063dSJacob Faibussowitsch PetscCall(PetscDrawClear(draw)); 96c4762a1bSJed Brown /* circles and ellipses */ 979566063dSJacob Faibussowitsch PetscCall(PetscDrawEllipse(draw, w / 2, h / 2, w - 1, h - 1, r)); 989566063dSJacob Faibussowitsch PetscCall(PetscDrawEllipse(draw, w, h / 2, w / 2, h, g)); 999566063dSJacob Faibussowitsch PetscCall(PetscDrawEllipse(draw, 0, 0, w, h / 2, b)); 1009566063dSJacob Faibussowitsch PetscCall(PetscDrawEllipse(draw, w / 4, 3 * h / 4, w / 2, h / 4, y)); 1019566063dSJacob Faibussowitsch PetscCall(PetscDrawCoordinateToPixel(draw, w / 2, h / 2, &i, &j)); 1029566063dSJacob Faibussowitsch PetscCall(PetscDrawPointPixel(draw, i, j, k)); 103c4762a1bSJed Brown /* flush, save, and pause */ 1049566063dSJacob Faibussowitsch PetscCall(PetscDrawFlush(draw)); 1059566063dSJacob Faibussowitsch PetscCall(PetscDrawSave(draw)); 1069566063dSJacob Faibussowitsch PetscCall(PetscDrawPause(draw)); 107c4762a1bSJed Brown 1089566063dSJacob Faibussowitsch PetscCall(PetscDrawDestroy(&draw)); 1099566063dSJacob Faibussowitsch PetscCall(PetscFinalize()); 110b122ec5aSJacob Faibussowitsch return 0; 111c4762a1bSJed Brown } 112c4762a1bSJed Brown 113c4762a1bSJed Brown /*TEST 114c4762a1bSJed Brown 115c4762a1bSJed Brown build: 116c4762a1bSJed Brown requires: x 117c4762a1bSJed Brown 118c4762a1bSJed Brown test: 119*3886731fSPierre Jolivet output_file: output/empty.out 120c4762a1bSJed Brown 121c4762a1bSJed Brown TEST*/ 122