xref: /petsc/src/sys/classes/draw/impls/null/drawnull.c (revision 20f4b53cbb5e9bd9ef12b76a8697d60d197cda17)
145f3bb6eSLisandro Dalcin #include <petsc/private/drawimpl.h> /*I  "petscdraw.h" I*/
245f3bb6eSLisandro Dalcin 
3d71ae5a4SJacob Faibussowitsch static PetscErrorCode PetscDrawCoordinateToPixel_Null(PetscDraw draw, PetscReal x, PetscReal y, int *i, int *j)
4d71ae5a4SJacob Faibussowitsch {
545f3bb6eSLisandro Dalcin   PetscFunctionBegin;
645f3bb6eSLisandro Dalcin   *i = *j = 0;
73ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
845f3bb6eSLisandro Dalcin }
945f3bb6eSLisandro Dalcin 
10d71ae5a4SJacob Faibussowitsch static PetscErrorCode PetscDrawPixelToCoordinate_Null(PetscDraw draw, int i, int j, PetscReal *x, PetscReal *y)
11d71ae5a4SJacob Faibussowitsch {
1245f3bb6eSLisandro Dalcin   PetscFunctionBegin;
1345f3bb6eSLisandro Dalcin   *x = *y = 0;
143ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
1545f3bb6eSLisandro Dalcin }
1645f3bb6eSLisandro Dalcin 
17d71ae5a4SJacob Faibussowitsch static PetscErrorCode PetscDrawPoint_Null(PetscDraw draw, PetscReal x, PetscReal y, int c)
18d71ae5a4SJacob Faibussowitsch {
1945f3bb6eSLisandro Dalcin   PetscFunctionBegin;
203ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
2145f3bb6eSLisandro Dalcin }
2245f3bb6eSLisandro Dalcin 
23d71ae5a4SJacob Faibussowitsch static PetscErrorCode PetscDrawPointPixel_Null(PetscDraw draw, int x, int y, int c)
24d71ae5a4SJacob Faibussowitsch {
2545f3bb6eSLisandro Dalcin   PetscFunctionBegin;
263ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
2745f3bb6eSLisandro Dalcin }
2845f3bb6eSLisandro Dalcin 
29d71ae5a4SJacob Faibussowitsch static PetscErrorCode PetscDrawLineGetWidth_Null(PetscDraw draw, PetscReal *width)
30d71ae5a4SJacob Faibussowitsch {
3145f3bb6eSLisandro Dalcin   PetscFunctionBegin;
3245f3bb6eSLisandro Dalcin   if (width) *width = 0.01;
333ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
3445f3bb6eSLisandro Dalcin }
3545f3bb6eSLisandro Dalcin 
36d71ae5a4SJacob Faibussowitsch static PetscErrorCode PetscDrawLine_Null(PetscDraw draw, PetscReal xl, PetscReal yl, PetscReal xr, PetscReal yr, int cl)
37d71ae5a4SJacob Faibussowitsch {
3845f3bb6eSLisandro Dalcin   PetscFunctionBegin;
393ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
4045f3bb6eSLisandro Dalcin }
4145f3bb6eSLisandro Dalcin 
42d71ae5a4SJacob Faibussowitsch static PetscErrorCode PetscDrawArrow_Null(PetscDraw draw, PetscReal xl, PetscReal yl, PetscReal xr, PetscReal yr, int cl)
43d71ae5a4SJacob Faibussowitsch {
4445f3bb6eSLisandro Dalcin   PetscFunctionBegin;
453ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
4645f3bb6eSLisandro Dalcin }
4745f3bb6eSLisandro Dalcin 
48d71ae5a4SJacob Faibussowitsch static PetscErrorCode PetscDrawRectangle_Null(PetscDraw draw, PetscReal xl, PetscReal yl, PetscReal xr, PetscReal yr, int c1, int c2, int c3, int c4)
49d71ae5a4SJacob Faibussowitsch {
5045f3bb6eSLisandro Dalcin   PetscFunctionBegin;
513ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
5245f3bb6eSLisandro Dalcin }
5345f3bb6eSLisandro Dalcin 
54d71ae5a4SJacob Faibussowitsch static PetscErrorCode PetscDrawEllipse_Null(PetscDraw Win, PetscReal x, PetscReal y, PetscReal a, PetscReal b, int c)
55d71ae5a4SJacob Faibussowitsch {
5645f3bb6eSLisandro Dalcin   PetscFunctionBegin;
573ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
5845f3bb6eSLisandro Dalcin }
5945f3bb6eSLisandro Dalcin 
60d71ae5a4SJacob Faibussowitsch 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)
61d71ae5a4SJacob Faibussowitsch {
6245f3bb6eSLisandro Dalcin   PetscFunctionBegin;
633ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
6445f3bb6eSLisandro Dalcin }
6545f3bb6eSLisandro Dalcin 
66d71ae5a4SJacob Faibussowitsch static PetscErrorCode PetscDrawStringGetSize_Null(PetscDraw draw, PetscReal *x, PetscReal *y)
67d71ae5a4SJacob Faibussowitsch {
6845f3bb6eSLisandro Dalcin   PetscFunctionBegin;
6945f3bb6eSLisandro Dalcin   if (x) *x = 0.01;
7045f3bb6eSLisandro Dalcin   if (y) *y = 0.01;
713ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
7245f3bb6eSLisandro Dalcin }
7345f3bb6eSLisandro Dalcin 
74d71ae5a4SJacob Faibussowitsch static PetscErrorCode PetscDrawString_Null(PetscDraw draw, PetscReal x, PetscReal y, int c, const char chrs[])
75d71ae5a4SJacob Faibussowitsch {
7645f3bb6eSLisandro Dalcin   PetscFunctionBegin;
773ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
7845f3bb6eSLisandro Dalcin }
7945f3bb6eSLisandro Dalcin 
80d71ae5a4SJacob Faibussowitsch static PetscErrorCode PetscDrawStringVertical_Null(PetscDraw draw, PetscReal x, PetscReal y, int c, const char chrs[])
81d71ae5a4SJacob Faibussowitsch {
8245f3bb6eSLisandro Dalcin   PetscFunctionBegin;
833ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
8445f3bb6eSLisandro Dalcin }
8545f3bb6eSLisandro Dalcin 
86d71ae5a4SJacob Faibussowitsch static PetscErrorCode PetscDrawStringBoxed_Null(PetscDraw draw, PetscReal sxl, PetscReal syl, int sc, int bc, const char text[], PetscReal *w, PetscReal *h)
87d71ae5a4SJacob Faibussowitsch {
8845f3bb6eSLisandro Dalcin   PetscFunctionBegin;
8945f3bb6eSLisandro Dalcin   if (w) *w = 0.01;
9045f3bb6eSLisandro Dalcin   if (h) *h = 0.01;
913ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
9245f3bb6eSLisandro Dalcin }
9345f3bb6eSLisandro Dalcin 
94d71ae5a4SJacob Faibussowitsch static PetscErrorCode PetscDrawGetSingleton_Null(PetscDraw draw, PetscDraw *sdraw)
95d71ae5a4SJacob Faibussowitsch {
9645f3bb6eSLisandro Dalcin   PetscFunctionBegin;
979566063dSJacob Faibussowitsch   PetscCall(PetscDrawOpenNull(PETSC_COMM_SELF, sdraw));
983ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
9945f3bb6eSLisandro Dalcin }
10045f3bb6eSLisandro Dalcin 
101d71ae5a4SJacob Faibussowitsch static PetscErrorCode PetscDrawRestoreSingleton_Null(PetscDraw draw, PetscDraw *sdraw)
102d71ae5a4SJacob Faibussowitsch {
10345f3bb6eSLisandro Dalcin   PetscFunctionBegin;
1049566063dSJacob Faibussowitsch   PetscCall(PetscDrawDestroy(sdraw));
1053ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
10645f3bb6eSLisandro Dalcin }
10745f3bb6eSLisandro Dalcin 
10845f3bb6eSLisandro Dalcin static struct _PetscDrawOps DvOps = {NULL, /* PetscDrawSetDoubleBuffer_Null */
10945f3bb6eSLisandro Dalcin                                      NULL, /* PetscDrawFlush_Null */
11045f3bb6eSLisandro Dalcin                                      PetscDrawLine_Null,
11145f3bb6eSLisandro Dalcin                                      NULL, /* PetscDrawLineSetWidth_Null */
11245f3bb6eSLisandro Dalcin                                      PetscDrawLineGetWidth_Null,
11345f3bb6eSLisandro Dalcin                                      PetscDrawPoint_Null,
11445f3bb6eSLisandro Dalcin                                      NULL, /* PetscDrawPointSetSize_Null */
11545f3bb6eSLisandro Dalcin                                      PetscDrawString_Null,
11645f3bb6eSLisandro Dalcin                                      PetscDrawStringVertical_Null,
11745f3bb6eSLisandro Dalcin                                      NULL, /* PetscDrawStringSetSize_Null */
11845f3bb6eSLisandro Dalcin                                      PetscDrawStringGetSize_Null,
11945f3bb6eSLisandro Dalcin                                      NULL, /* PetscDrawSetViewport_Null */
12045f3bb6eSLisandro Dalcin                                      NULL, /* PetscDrawClear_Null */
12145f3bb6eSLisandro Dalcin                                      PetscDrawRectangle_Null,
12245f3bb6eSLisandro Dalcin                                      PetscDrawTriangle_Null,
12345f3bb6eSLisandro Dalcin                                      PetscDrawEllipse_Null,
12445f3bb6eSLisandro Dalcin                                      NULL, /* PetscDrawGetMouseButton_Null */
12545f3bb6eSLisandro Dalcin                                      NULL, /* PetscDrawPause_Null */
12645f3bb6eSLisandro Dalcin                                      NULL, /* PetscDrawBeginPage_Null */
12745f3bb6eSLisandro Dalcin                                      NULL, /* PetscDrawEndPage_Null */
12845f3bb6eSLisandro Dalcin                                      NULL, /* PetscDrawGetPopup_Null */
12945f3bb6eSLisandro Dalcin                                      NULL, /* PetscDrawSetTitle_Null */
13045f3bb6eSLisandro Dalcin                                      NULL, /* PetscDrawCheckResizedWindow_Null */
13145f3bb6eSLisandro Dalcin                                      NULL, /* PetscDrawResizeWindow_Null */
13245f3bb6eSLisandro Dalcin                                      NULL, /* PetscDrawDestroy_Null */
13345f3bb6eSLisandro Dalcin                                      NULL, /* PetscDrawView_Null */
13445f3bb6eSLisandro Dalcin                                      PetscDrawGetSingleton_Null,
13545f3bb6eSLisandro Dalcin                                      PetscDrawRestoreSingleton_Null,
13645f3bb6eSLisandro Dalcin                                      NULL, /* PetscDrawSave_Null */
13745f3bb6eSLisandro Dalcin                                      NULL, /* PetscDrawGetImage_Null */
13845f3bb6eSLisandro Dalcin                                      NULL, /* PetscDrawSetCoordinates_Null */
13945f3bb6eSLisandro Dalcin                                      PetscDrawArrow_Null,
14045f3bb6eSLisandro Dalcin                                      PetscDrawCoordinateToPixel_Null,
14145f3bb6eSLisandro Dalcin                                      PetscDrawPixelToCoordinate_Null,
14245f3bb6eSLisandro Dalcin                                      PetscDrawPointPixel_Null,
143bb09dc67SDuncan Campbell                                      PetscDrawStringBoxed_Null,
144bb09dc67SDuncan Campbell                                      NULL /* PetscDrawSetVisible_Null */};
14545f3bb6eSLisandro Dalcin 
14645f3bb6eSLisandro Dalcin /*MC
14745f3bb6eSLisandro Dalcin      PETSC_DRAW_NULL - PETSc graphics device that ignores all draw commands
14845f3bb6eSLisandro Dalcin 
14945f3bb6eSLisandro Dalcin    Level: beginner
15045f3bb6eSLisandro Dalcin 
151811af0c4SBarry Smith    Note:
152811af0c4SBarry Smith     A `PETSC_DRAW_NULL` is useful in places where `PetscDraw` routines are called but no graphics window, for example, is available.
153811af0c4SBarry Smith 
154811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawOpenNull()`, `PETSC_DRAW_X`, `PetscDrawOpenNull()`, `PetscDrawIsNull()`
15545f3bb6eSLisandro Dalcin M*/
15645f3bb6eSLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscDrawCreate_Null(PetscDraw);
15745f3bb6eSLisandro Dalcin 
158d71ae5a4SJacob Faibussowitsch PETSC_EXTERN PetscErrorCode PetscDrawCreate_Null(PetscDraw draw)
159d71ae5a4SJacob Faibussowitsch {
16045f3bb6eSLisandro Dalcin   PetscFunctionBegin;
16145f3bb6eSLisandro Dalcin   draw->pause   = 0;
1629371c9d4SSatish Balay   draw->coor_xl = 0;
1639371c9d4SSatish Balay   draw->coor_xr = 1;
1649371c9d4SSatish Balay   draw->coor_yl = 0;
1659371c9d4SSatish Balay   draw->coor_yr = 1;
1669371c9d4SSatish Balay   draw->port_xl = 0;
1679371c9d4SSatish Balay   draw->port_xr = 1;
1689371c9d4SSatish Balay   draw->port_yl = 0;
1699371c9d4SSatish Balay   draw->port_yr = 1;
1709566063dSJacob Faibussowitsch   PetscCall(PetscDrawDestroy(&draw->popup));
17145f3bb6eSLisandro Dalcin 
1729566063dSJacob Faibussowitsch   PetscCall(PetscMemcpy(draw->ops, &DvOps, sizeof(DvOps)));
17345f3bb6eSLisandro Dalcin   draw->data = NULL;
1743ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
17545f3bb6eSLisandro Dalcin }
17645f3bb6eSLisandro Dalcin 
17745f3bb6eSLisandro Dalcin /*@
17845f3bb6eSLisandro Dalcin    PetscDrawOpenNull - Opens a null drawing context. All draw commands to
17945f3bb6eSLisandro Dalcin    it are ignored.
18045f3bb6eSLisandro Dalcin 
1816b867d5aSJose E. Roman    Input Parameter:
1826b867d5aSJose E. Roman .  comm - MPI communicator
1836b867d5aSJose E. Roman 
18445f3bb6eSLisandro Dalcin    Output Parameter:
18545f3bb6eSLisandro Dalcin .  draw - the drawing context
18645f3bb6eSLisandro Dalcin 
18745f3bb6eSLisandro Dalcin    Level: advanced
188811af0c4SBarry Smith 
189811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawIsNull()`, `PETSC_DRAW_NULL`, `PetscDrawOpenX()`, `PetscDrawIsNull()`
19045f3bb6eSLisandro Dalcin @*/
191d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawOpenNull(MPI_Comm comm, PetscDraw *win)
192d71ae5a4SJacob Faibussowitsch {
19345f3bb6eSLisandro Dalcin   PetscFunctionBegin;
1949566063dSJacob Faibussowitsch   PetscCall(PetscDrawCreate(comm, NULL, NULL, 0, 0, 1, 1, win));
1959566063dSJacob Faibussowitsch   PetscCall(PetscDrawSetType(*win, PETSC_DRAW_NULL));
1963ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
19745f3bb6eSLisandro Dalcin }
19845f3bb6eSLisandro Dalcin 
19945f3bb6eSLisandro Dalcin /*@
200811af0c4SBarry Smith    PetscDrawIsNull - Returns `PETSC_TRUE` if draw is a null draw object.
20145f3bb6eSLisandro Dalcin 
202*20f4b53cSBarry Smith    Not Collective
20345f3bb6eSLisandro Dalcin 
20445f3bb6eSLisandro Dalcin    Input Parameter:
20545f3bb6eSLisandro Dalcin .  draw - the draw context
20645f3bb6eSLisandro Dalcin 
20745f3bb6eSLisandro Dalcin    Output Parameter:
208811af0c4SBarry Smith .  yes - `PETSC_TRUE` if it is a null draw object; otherwise `PETSC_FALSE`
20945f3bb6eSLisandro Dalcin 
21045f3bb6eSLisandro Dalcin    Level: advanced
211811af0c4SBarry Smith 
212811af0c4SBarry Smith .seealso: `PetscDraw`, `PETSC_DRAW_NULL`, `PetscDrawOpenX()`, `PetscDrawIsNull()`
21345f3bb6eSLisandro Dalcin @*/
214d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawIsNull(PetscDraw draw, PetscBool *yes)
215d71ae5a4SJacob Faibussowitsch {
21645f3bb6eSLisandro Dalcin   PetscFunctionBegin;
21745f3bb6eSLisandro Dalcin   PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
218064a246eSJacob Faibussowitsch   PetscValidBoolPointer(yes, 2);
2199566063dSJacob Faibussowitsch   PetscCall(PetscObjectTypeCompare((PetscObject)draw, PETSC_DRAW_NULL, yes));
2203ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
22145f3bb6eSLisandro Dalcin }
222