145f3bb6eSLisandro Dalcin #include <petsc/private/drawimpl.h> /*I "petscdraw.h" I*/
245f3bb6eSLisandro Dalcin
PetscDrawCoordinateToPixel_Null(PetscDraw draw,PetscReal x,PetscReal y,int * i,int * j)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
PetscDrawPixelToCoordinate_Null(PetscDraw draw,int i,int j,PetscReal * x,PetscReal * y)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
PetscDrawPoint_Null(PetscDraw draw,PetscReal x,PetscReal y,int c)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
PetscDrawPointPixel_Null(PetscDraw draw,int x,int y,int c)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
PetscDrawLineGetWidth_Null(PetscDraw draw,PetscReal * width)29d71ae5a4SJacob Faibussowitsch static PetscErrorCode PetscDrawLineGetWidth_Null(PetscDraw draw, PetscReal *width)
30d71ae5a4SJacob Faibussowitsch {
3145f3bb6eSLisandro Dalcin PetscFunctionBegin;
32*6497c311SBarry Smith if (width) *width = (PetscReal)0.01;
333ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
3445f3bb6eSLisandro Dalcin }
3545f3bb6eSLisandro Dalcin
PetscDrawLine_Null(PetscDraw draw,PetscReal xl,PetscReal yl,PetscReal xr,PetscReal yr,int cl)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
PetscDrawArrow_Null(PetscDraw draw,PetscReal xl,PetscReal yl,PetscReal xr,PetscReal yr,int cl)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
PetscDrawRectangle_Null(PetscDraw draw,PetscReal xl,PetscReal yl,PetscReal xr,PetscReal yr,int c1,int c2,int c3,int c4)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
PetscDrawEllipse_Null(PetscDraw Win,PetscReal x,PetscReal y,PetscReal a,PetscReal b,int c)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
PetscDrawTriangle_Null(PetscDraw draw,PetscReal X1,PetscReal Y_1,PetscReal X2,PetscReal Y2,PetscReal X3,PetscReal Y3,int c1,int c2,int c3)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
PetscDrawStringGetSize_Null(PetscDraw draw,PetscReal * x,PetscReal * y)66d71ae5a4SJacob Faibussowitsch static PetscErrorCode PetscDrawStringGetSize_Null(PetscDraw draw, PetscReal *x, PetscReal *y)
67d71ae5a4SJacob Faibussowitsch {
6845f3bb6eSLisandro Dalcin PetscFunctionBegin;
69*6497c311SBarry Smith if (x) *x = (PetscReal)0.01;
70*6497c311SBarry Smith if (y) *y = (PetscReal)0.01;
713ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
7245f3bb6eSLisandro Dalcin }
7345f3bb6eSLisandro Dalcin
PetscDrawString_Null(PetscDraw draw,PetscReal x,PetscReal y,int c,const char chrs[])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
PetscDrawStringVertical_Null(PetscDraw draw,PetscReal x,PetscReal y,int c,const char chrs[])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
PetscDrawStringBoxed_Null(PetscDraw draw,PetscReal sxl,PetscReal syl,int sc,int bc,const char text[],PetscReal * w,PetscReal * h)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
PetscDrawGetSingleton_Null(PetscDraw draw,PetscDraw * sdraw)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
PetscDrawRestoreSingleton_Null(PetscDraw draw,PetscDraw * sdraw)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
PetscDrawCreate_Null(PetscDraw draw)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
172aea10558SJacob Faibussowitsch draw->ops[0] = 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:
185aec76313SJacob Faibussowitsch . win - the drawing context
18645f3bb6eSLisandro Dalcin
18745f3bb6eSLisandro Dalcin Level: advanced
188811af0c4SBarry Smith
189aec76313SJacob Faibussowitsch .seealso: `PetscDraw`, `PetscDrawIsNull()`, `PETSC_DRAW_NULL`, `PetscDrawOpenX()`
19045f3bb6eSLisandro Dalcin @*/
PetscDrawOpenNull(MPI_Comm comm,PetscDraw * win)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
20220f4b53cSBarry 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
21242747ad1SJacob Faibussowitsch .seealso: `PetscDraw`, `PETSC_DRAW_NULL`, `PetscDrawOpenX()`
21345f3bb6eSLisandro Dalcin @*/
PetscDrawIsNull(PetscDraw draw,PetscBool * yes)214d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawIsNull(PetscDraw draw, PetscBool *yes)
215d71ae5a4SJacob Faibussowitsch {
21645f3bb6eSLisandro Dalcin PetscFunctionBegin;
21745f3bb6eSLisandro Dalcin PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
2184f572ea9SToby Isaac PetscAssertPointer(yes, 2);
2199566063dSJacob Faibussowitsch PetscCall(PetscObjectTypeCompare((PetscObject)draw, PETSC_DRAW_NULL, yes));
2203ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
22145f3bb6eSLisandro Dalcin }
222