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 PetscFunctionBeginUser; 21 PetscCall(PetscInitialize(&argc, &argv, NULL, help)); 22 23 PetscCall(PetscDrawCreate(PETSC_COMM_WORLD, 0, "Draw Example", PETSC_DECIDE, PETSC_DECIDE, 101, 101, &draw)); 24 /* PetscCall(PetscDrawSetPause(draw,2.0)); */ 25 PetscCall(PetscDrawSetFromOptions(draw)); 26 27 PetscCall(PetscDrawCheckResizedWindow(draw)); 28 PetscCall(PetscDrawGetWindowSize(draw, &w, &h)); 29 PetscCall(PetscDrawSetCoordinates(draw, 0, 0, --w, --h)); 30 PetscCall(PetscDrawClear(draw)); 31 /* one-pixel lines in the window corners */ 32 PetscCall(PetscDrawLine(draw, 0, 0, 0, 0, r)); 33 PetscCall(PetscDrawLine(draw, w, 0, w, 0, r)); 34 PetscCall(PetscDrawLine(draw, 0, h, 0, h, r)); 35 PetscCall(PetscDrawLine(draw, w, h, w, h, r)); 36 /* border lines with two pixels from borders */ 37 PetscCall(PetscDrawLine(draw, 0 + 2, 0, w - 2, 0, k)); 38 PetscCall(PetscDrawLine(draw, 0 + 2, h, w - 2, h, k)); 39 PetscCall(PetscDrawLine(draw, 0, 0 + 2, 0, h - 2, k)); 40 PetscCall(PetscDrawLine(draw, w, 0 + 2, w, h - 2, k)); 41 /* oblique lines */ 42 PetscCall(PetscDrawLine(draw, 0 + 2, h / 2, w - 2, h - 2, b)); 43 PetscCall(PetscDrawLine(draw, 0 + 1, h - 1, w - 1, 0 + 1, b)); 44 /* vertical up and down arrow, two pixels from borders */ 45 PetscCall(PetscDrawArrow(draw, 1 * w / 4, 0 + 2, 1 * w / 4, h - 2, g)); 46 PetscCall(PetscDrawArrow(draw, 3 * w / 4, h - 2, 3 * w / 4, 0 + 2, g)); 47 /* horizontal right and left arrow, two pixels from borders */ 48 PetscCall(PetscDrawArrow(draw, 0 + 2, 3 * h / 4, w - 2, 3 * h / 4, g)); 49 PetscCall(PetscDrawArrow(draw, w - 2, 1 * h / 4, 0 + 2, 1 * h / 4, g)); 50 /* flush, save, and pause */ 51 PetscCall(PetscDrawFlush(draw)); 52 PetscCall(PetscDrawSave(draw)); 53 PetscCall(PetscDrawPause(draw)); 54 55 PetscCall(PetscDrawCheckResizedWindow(draw)); 56 PetscCall(PetscDrawGetWindowSize(draw, &w, &h)); 57 PetscCall(PetscDrawSetCoordinates(draw, 0, 0, --w, --h)); 58 PetscCall(PetscDrawClear(draw)); 59 /* one-pixel rectangles in the window corners */ 60 PetscCall(PetscDrawRectangle(draw, 0, 0, 0, 0, k, k, k, k)); 61 PetscCall(PetscDrawRectangle(draw, w, 0, w, 0, k, k, k, k)); 62 PetscCall(PetscDrawRectangle(draw, 0, h, 0, h, k, k, k, k)); 63 PetscCall(PetscDrawRectangle(draw, w, h, w, h, k, k, k, k)); 64 /* border rectangles with two pixels from borders */ 65 PetscCall(PetscDrawRectangle(draw, 0 + 2, 0, w - 2, 0, k, k, k, k)); 66 PetscCall(PetscDrawRectangle(draw, 0 + 2, h, w - 2, h, k, k, k, k)); 67 PetscCall(PetscDrawRectangle(draw, 0, 0 + 2, 0, h - 2, k, k, k, k)); 68 PetscCall(PetscDrawRectangle(draw, w, 0 + 2, w, h - 2, k, k, k, k)); 69 /* more rectangles */ 70 PetscCall(PetscDrawRectangle(draw, 0 + 2, 0 + 2, w / 2 - 1, h / 2 - 1, b, b, b, b)); 71 PetscCall(PetscDrawRectangle(draw, 0 + 2, h / 2 + 1, w / 2 - 1, h - 2, r, r, r, r)); 72 PetscCall(PetscDrawRectangle(draw, w / 2 + 1, h / 2 + 1, w - 2, h - 2, g, g, g, g)); 73 PetscCall(PetscDrawRectangle(draw, w / 2 + 1, 0 + 2, w - 2, h / 2 - 1, y, y, y, y)); 74 /* flush, save, and pause */ 75 PetscCall(PetscDrawFlush(draw)); 76 PetscCall(PetscDrawSave(draw)); 77 PetscCall(PetscDrawPause(draw)); 78 79 PetscCall(PetscDrawCheckResizedWindow(draw)); 80 PetscCall(PetscDrawGetWindowSize(draw, &w, &h)); 81 PetscCall(PetscDrawSetCoordinates(draw, 0, 0, --w, --h)); 82 PetscCall(PetscDrawClear(draw)); 83 /* interpolated triangles, one pixel from borders */ 84 PetscCall(PetscDrawTriangle(draw, 0 + 1, 0 + 1, w - 1, 0 + 1, w - 1, h - 1, c0, c1, c2)); 85 PetscCall(PetscDrawTriangle(draw, 0 + 1, 0 + 1, 0 + 1, h - 1, w - 1, h - 1, c0, c1, c2)); 86 /* interpolated triangle, oblique, inside canvas */ 87 PetscCall(PetscDrawTriangle(draw, w / 4, h / 4, w / 2, 3 * h / 4, 3 * w / 4, h / 2, c2, c1, c0)); 88 /* flush, save, and pause */ 89 PetscCall(PetscDrawFlush(draw)); 90 PetscCall(PetscDrawSave(draw)); 91 PetscCall(PetscDrawPause(draw)); 92 93 PetscCall(PetscDrawCheckResizedWindow(draw)); 94 PetscCall(PetscDrawGetWindowSize(draw, &w, &h)); 95 PetscCall(PetscDrawSetCoordinates(draw, 0, 0, --w, --h)); 96 PetscCall(PetscDrawClear(draw)); 97 /* circles and ellipses */ 98 PetscCall(PetscDrawEllipse(draw, w / 2, h / 2, w - 1, h - 1, r)); 99 PetscCall(PetscDrawEllipse(draw, w, h / 2, w / 2, h, g)); 100 PetscCall(PetscDrawEllipse(draw, 0, 0, w, h / 2, b)); 101 PetscCall(PetscDrawEllipse(draw, w / 4, 3 * h / 4, w / 2, h / 4, y)); 102 PetscCall(PetscDrawCoordinateToPixel(draw, w / 2, h / 2, &i, &j)); 103 PetscCall(PetscDrawPointPixel(draw, i, j, k)); 104 /* flush, save, and pause */ 105 PetscCall(PetscDrawFlush(draw)); 106 PetscCall(PetscDrawSave(draw)); 107 PetscCall(PetscDrawPause(draw)); 108 109 PetscCall(PetscDrawDestroy(&draw)); 110 PetscCall(PetscFinalize()); 111 return 0; 112 } 113 114 /*TEST 115 116 build: 117 requires: x 118 119 test: 120 output_file: output/ex1_1.out 121 122 TEST*/ 123