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