Actual source code: drawnull.c

  1: #include <petsc/private/drawimpl.h>

  3: static PetscErrorCode PetscDrawCoordinateToPixel_Null(PetscDraw draw, PetscReal x, PetscReal y, int *i, int *j)
  4: {
  5:   PetscFunctionBegin;
  6:   *i = *j = 0;
  7:   PetscFunctionReturn(PETSC_SUCCESS);
  8: }

 10: static PetscErrorCode PetscDrawPixelToCoordinate_Null(PetscDraw draw, int i, int j, PetscReal *x, PetscReal *y)
 11: {
 12:   PetscFunctionBegin;
 13:   *x = *y = 0;
 14:   PetscFunctionReturn(PETSC_SUCCESS);
 15: }

 17: static PetscErrorCode PetscDrawPoint_Null(PetscDraw draw, PetscReal x, PetscReal y, int c)
 18: {
 19:   PetscFunctionBegin;
 20:   PetscFunctionReturn(PETSC_SUCCESS);
 21: }

 23: static PetscErrorCode PetscDrawPointPixel_Null(PetscDraw draw, int x, int y, int c)
 24: {
 25:   PetscFunctionBegin;
 26:   PetscFunctionReturn(PETSC_SUCCESS);
 27: }

 29: static PetscErrorCode PetscDrawLineGetWidth_Null(PetscDraw draw, PetscReal *width)
 30: {
 31:   PetscFunctionBegin;
 32:   if (width) *width = 0.01;
 33:   PetscFunctionReturn(PETSC_SUCCESS);
 34: }

 36: static PetscErrorCode PetscDrawLine_Null(PetscDraw draw, PetscReal xl, PetscReal yl, PetscReal xr, PetscReal yr, int cl)
 37: {
 38:   PetscFunctionBegin;
 39:   PetscFunctionReturn(PETSC_SUCCESS);
 40: }

 42: static PetscErrorCode PetscDrawArrow_Null(PetscDraw draw, PetscReal xl, PetscReal yl, PetscReal xr, PetscReal yr, int cl)
 43: {
 44:   PetscFunctionBegin;
 45:   PetscFunctionReturn(PETSC_SUCCESS);
 46: }

 48: static PetscErrorCode PetscDrawRectangle_Null(PetscDraw draw, PetscReal xl, PetscReal yl, PetscReal xr, PetscReal yr, int c1, int c2, int c3, int c4)
 49: {
 50:   PetscFunctionBegin;
 51:   PetscFunctionReturn(PETSC_SUCCESS);
 52: }

 54: static PetscErrorCode PetscDrawEllipse_Null(PetscDraw Win, PetscReal x, PetscReal y, PetscReal a, PetscReal b, int c)
 55: {
 56:   PetscFunctionBegin;
 57:   PetscFunctionReturn(PETSC_SUCCESS);
 58: }

 60: static PetscErrorCode PetscDrawTriangle_Null(PetscDraw draw, PetscReal X1, PetscReal Y_1, PetscReal X2, PetscReal Y2, PetscReal X3, PetscReal Y3, int c1, int c2, int c3)
 61: {
 62:   PetscFunctionBegin;
 63:   PetscFunctionReturn(PETSC_SUCCESS);
 64: }

 66: static PetscErrorCode PetscDrawStringGetSize_Null(PetscDraw draw, PetscReal *x, PetscReal *y)
 67: {
 68:   PetscFunctionBegin;
 69:   if (x) *x = 0.01;
 70:   if (y) *y = 0.01;
 71:   PetscFunctionReturn(PETSC_SUCCESS);
 72: }

 74: static PetscErrorCode PetscDrawString_Null(PetscDraw draw, PetscReal x, PetscReal y, int c, const char chrs[])
 75: {
 76:   PetscFunctionBegin;
 77:   PetscFunctionReturn(PETSC_SUCCESS);
 78: }

 80: static PetscErrorCode PetscDrawStringVertical_Null(PetscDraw draw, PetscReal x, PetscReal y, int c, const char chrs[])
 81: {
 82:   PetscFunctionBegin;
 83:   PetscFunctionReturn(PETSC_SUCCESS);
 84: }

 86: static PetscErrorCode PetscDrawStringBoxed_Null(PetscDraw draw, PetscReal sxl, PetscReal syl, int sc, int bc, const char text[], PetscReal *w, PetscReal *h)
 87: {
 88:   PetscFunctionBegin;
 89:   if (w) *w = 0.01;
 90:   if (h) *h = 0.01;
 91:   PetscFunctionReturn(PETSC_SUCCESS);
 92: }

 94: static PetscErrorCode PetscDrawGetSingleton_Null(PetscDraw draw, PetscDraw *sdraw)
 95: {
 96:   PetscFunctionBegin;
 97:   PetscCall(PetscDrawOpenNull(PETSC_COMM_SELF, sdraw));
 98:   PetscFunctionReturn(PETSC_SUCCESS);
 99: }

101: static PetscErrorCode PetscDrawRestoreSingleton_Null(PetscDraw draw, PetscDraw *sdraw)
102: {
103:   PetscFunctionBegin;
104:   PetscCall(PetscDrawDestroy(sdraw));
105:   PetscFunctionReturn(PETSC_SUCCESS);
106: }

108: static struct _PetscDrawOps DvOps = {NULL, /* PetscDrawSetDoubleBuffer_Null */
109:                                      NULL, /* PetscDrawFlush_Null */
110:                                      PetscDrawLine_Null,
111:                                      NULL, /* PetscDrawLineSetWidth_Null */
112:                                      PetscDrawLineGetWidth_Null,
113:                                      PetscDrawPoint_Null,
114:                                      NULL, /* PetscDrawPointSetSize_Null */
115:                                      PetscDrawString_Null,
116:                                      PetscDrawStringVertical_Null,
117:                                      NULL, /* PetscDrawStringSetSize_Null */
118:                                      PetscDrawStringGetSize_Null,
119:                                      NULL, /* PetscDrawSetViewport_Null */
120:                                      NULL, /* PetscDrawClear_Null */
121:                                      PetscDrawRectangle_Null,
122:                                      PetscDrawTriangle_Null,
123:                                      PetscDrawEllipse_Null,
124:                                      NULL, /* PetscDrawGetMouseButton_Null */
125:                                      NULL, /* PetscDrawPause_Null */
126:                                      NULL, /* PetscDrawBeginPage_Null */
127:                                      NULL, /* PetscDrawEndPage_Null */
128:                                      NULL, /* PetscDrawGetPopup_Null */
129:                                      NULL, /* PetscDrawSetTitle_Null */
130:                                      NULL, /* PetscDrawCheckResizedWindow_Null */
131:                                      NULL, /* PetscDrawResizeWindow_Null */
132:                                      NULL, /* PetscDrawDestroy_Null */
133:                                      NULL, /* PetscDrawView_Null */
134:                                      PetscDrawGetSingleton_Null,
135:                                      PetscDrawRestoreSingleton_Null,
136:                                      NULL, /* PetscDrawSave_Null */
137:                                      NULL, /* PetscDrawGetImage_Null */
138:                                      NULL, /* PetscDrawSetCoordinates_Null */
139:                                      PetscDrawArrow_Null,
140:                                      PetscDrawCoordinateToPixel_Null,
141:                                      PetscDrawPixelToCoordinate_Null,
142:                                      PetscDrawPointPixel_Null,
143:                                      PetscDrawStringBoxed_Null,
144:                                      NULL /* PetscDrawSetVisible_Null */};

146: /*MC
147:      PETSC_DRAW_NULL - PETSc graphics device that ignores all draw commands

149:    Level: beginner

151:    Note:
152:     A `PETSC_DRAW_NULL` is useful in places where `PetscDraw` routines are called but no graphics window, for example, is available.

154: .seealso: `PetscDraw`, `PetscDrawOpenNull()`, `PETSC_DRAW_X`, `PetscDrawOpenNull()`, `PetscDrawIsNull()`
155: M*/
156: PETSC_EXTERN PetscErrorCode PetscDrawCreate_Null(PetscDraw);

158: PETSC_EXTERN PetscErrorCode PetscDrawCreate_Null(PetscDraw draw)
159: {
160:   PetscFunctionBegin;
161:   draw->pause   = 0;
162:   draw->coor_xl = 0;
163:   draw->coor_xr = 1;
164:   draw->coor_yl = 0;
165:   draw->coor_yr = 1;
166:   draw->port_xl = 0;
167:   draw->port_xr = 1;
168:   draw->port_yl = 0;
169:   draw->port_yr = 1;
170:   PetscCall(PetscDrawDestroy(&draw->popup));

172:   draw->ops[0] = DvOps;
173:   draw->data   = NULL;
174:   PetscFunctionReturn(PETSC_SUCCESS);
175: }

177: /*@
178:   PetscDrawOpenNull - Opens a null drawing context. All draw commands to
179:   it are ignored.

181:   Input Parameter:
182: . comm - MPI communicator

184:   Output Parameter:
185: . win - the drawing context

187:   Level: advanced

189: .seealso: `PetscDraw`, `PetscDrawIsNull()`, `PETSC_DRAW_NULL`, `PetscDrawOpenX()`
190: @*/
191: PetscErrorCode PetscDrawOpenNull(MPI_Comm comm, PetscDraw *win)
192: {
193:   PetscFunctionBegin;
194:   PetscCall(PetscDrawCreate(comm, NULL, NULL, 0, 0, 1, 1, win));
195:   PetscCall(PetscDrawSetType(*win, PETSC_DRAW_NULL));
196:   PetscFunctionReturn(PETSC_SUCCESS);
197: }

199: /*@
200:   PetscDrawIsNull - Returns `PETSC_TRUE` if draw is a null draw object.

202:   Not Collective

204:   Input Parameter:
205: . draw - the draw context

207:   Output Parameter:
208: . yes - `PETSC_TRUE` if it is a null draw object; otherwise `PETSC_FALSE`

210:   Level: advanced

212: .seealso: `PetscDraw`, `PETSC_DRAW_NULL`, `PetscDrawOpenX()`
213: @*/
214: PetscErrorCode PetscDrawIsNull(PetscDraw draw, PetscBool *yes)
215: {
216:   PetscFunctionBegin;
218:   PetscAssertPointer(yes, 2);
219:   PetscCall(PetscObjectTypeCompare((PetscObject)draw, PETSC_DRAW_NULL, yes));
220:   PetscFunctionReturn(PETSC_SUCCESS);
221: }