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, 143*bb09dc67SDuncan Campbell PetscDrawStringBoxed_Null, 144*bb09dc67SDuncan 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 20245f3bb6eSLisandro Dalcin 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