xref: /petsc/src/sys/classes/draw/tests/ex7.c (revision d71ae5a4db6382e7f06317b8d368875286fe9008)
1c4762a1bSJed Brown 
2c4762a1bSJed Brown static char help[] = "Demonstrates drawing primitives in a window\n";
3c4762a1bSJed Brown 
4c4762a1bSJed Brown #include <petscdraw.h>
5c4762a1bSJed Brown 
6*d71ae5a4SJacob Faibussowitsch int main(int argc, char **argv)
7*d71ae5a4SJacob Faibussowitsch {
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 
20327415f7SBarry 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