Actual source code: ex7.c
2: static char help[] = "Demonstrates drawing primitives in a window\n";
4: #include <petscdraw.h>
6: int main(int argc, char **argv)
7: {
8: PetscDraw draw;
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;
20: PetscFunctionBeginUser;
21: PetscCall(PetscInitialize(&argc, &argv, NULL, help));
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));
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));
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));
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));
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));
109: PetscCall(PetscDrawDestroy(&draw));
110: PetscCall(PetscFinalize());
111: return 0;
112: }
114: /*TEST
116: build:
117: requires: x
119: test:
120: output_file: output/ex1_1.out
122: TEST*/