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; 7*3ba16761SJacob 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; 14*3ba16761SJacob 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; 20*3ba16761SJacob 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; 26*3ba16761SJacob 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; 33*3ba16761SJacob 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; 39*3ba16761SJacob 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; 45*3ba16761SJacob 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; 51*3ba16761SJacob 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; 57*3ba16761SJacob 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; 63*3ba16761SJacob 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; 71*3ba16761SJacob 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; 77*3ba16761SJacob 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; 83*3ba16761SJacob 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; 91*3ba16761SJacob 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)); 98*3ba16761SJacob 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)); 105*3ba16761SJacob 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, 14345f3bb6eSLisandro Dalcin PetscDrawStringBoxed_Null}; 14445f3bb6eSLisandro Dalcin 14545f3bb6eSLisandro Dalcin /*MC 14645f3bb6eSLisandro Dalcin PETSC_DRAW_NULL - PETSc graphics device that ignores all draw commands 14745f3bb6eSLisandro Dalcin 14845f3bb6eSLisandro Dalcin Level: beginner 14945f3bb6eSLisandro Dalcin 150811af0c4SBarry Smith Note: 151811af0c4SBarry Smith A `PETSC_DRAW_NULL` is useful in places where `PetscDraw` routines are called but no graphics window, for example, is available. 152811af0c4SBarry Smith 153811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawOpenNull()`, `PETSC_DRAW_X`, `PetscDrawOpenNull()`, `PetscDrawIsNull()` 15445f3bb6eSLisandro Dalcin M*/ 15545f3bb6eSLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscDrawCreate_Null(PetscDraw); 15645f3bb6eSLisandro Dalcin 157d71ae5a4SJacob Faibussowitsch PETSC_EXTERN PetscErrorCode PetscDrawCreate_Null(PetscDraw draw) 158d71ae5a4SJacob Faibussowitsch { 15945f3bb6eSLisandro Dalcin PetscFunctionBegin; 16045f3bb6eSLisandro Dalcin draw->pause = 0; 1619371c9d4SSatish Balay draw->coor_xl = 0; 1629371c9d4SSatish Balay draw->coor_xr = 1; 1639371c9d4SSatish Balay draw->coor_yl = 0; 1649371c9d4SSatish Balay draw->coor_yr = 1; 1659371c9d4SSatish Balay draw->port_xl = 0; 1669371c9d4SSatish Balay draw->port_xr = 1; 1679371c9d4SSatish Balay draw->port_yl = 0; 1689371c9d4SSatish Balay draw->port_yr = 1; 1699566063dSJacob Faibussowitsch PetscCall(PetscDrawDestroy(&draw->popup)); 17045f3bb6eSLisandro Dalcin 1719566063dSJacob Faibussowitsch PetscCall(PetscMemcpy(draw->ops, &DvOps, sizeof(DvOps))); 17245f3bb6eSLisandro Dalcin draw->data = NULL; 173*3ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 17445f3bb6eSLisandro Dalcin } 17545f3bb6eSLisandro Dalcin 17645f3bb6eSLisandro Dalcin /*@ 17745f3bb6eSLisandro Dalcin PetscDrawOpenNull - Opens a null drawing context. All draw commands to 17845f3bb6eSLisandro Dalcin it are ignored. 17945f3bb6eSLisandro Dalcin 1806b867d5aSJose E. Roman Input Parameter: 1816b867d5aSJose E. Roman . comm - MPI communicator 1826b867d5aSJose E. Roman 18345f3bb6eSLisandro Dalcin Output Parameter: 18445f3bb6eSLisandro Dalcin . draw - the drawing context 18545f3bb6eSLisandro Dalcin 18645f3bb6eSLisandro Dalcin Level: advanced 187811af0c4SBarry Smith 188811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawIsNull()`, `PETSC_DRAW_NULL`, `PetscDrawOpenX()`, `PetscDrawIsNull()` 18945f3bb6eSLisandro Dalcin @*/ 190d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawOpenNull(MPI_Comm comm, PetscDraw *win) 191d71ae5a4SJacob Faibussowitsch { 19245f3bb6eSLisandro Dalcin PetscFunctionBegin; 1939566063dSJacob Faibussowitsch PetscCall(PetscDrawCreate(comm, NULL, NULL, 0, 0, 1, 1, win)); 1949566063dSJacob Faibussowitsch PetscCall(PetscDrawSetType(*win, PETSC_DRAW_NULL)); 195*3ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 19645f3bb6eSLisandro Dalcin } 19745f3bb6eSLisandro Dalcin 19845f3bb6eSLisandro Dalcin /*@ 199811af0c4SBarry Smith PetscDrawIsNull - Returns `PETSC_TRUE` if draw is a null draw object. 20045f3bb6eSLisandro Dalcin 20145f3bb6eSLisandro Dalcin Not collective 20245f3bb6eSLisandro Dalcin 20345f3bb6eSLisandro Dalcin Input Parameter: 20445f3bb6eSLisandro Dalcin . draw - the draw context 20545f3bb6eSLisandro Dalcin 20645f3bb6eSLisandro Dalcin Output Parameter: 207811af0c4SBarry Smith . yes - `PETSC_TRUE` if it is a null draw object; otherwise `PETSC_FALSE` 20845f3bb6eSLisandro Dalcin 20945f3bb6eSLisandro Dalcin Level: advanced 210811af0c4SBarry Smith 211811af0c4SBarry Smith .seealso: `PetscDraw`, `PETSC_DRAW_NULL`, `PetscDrawOpenX()`, `PetscDrawIsNull()` 21245f3bb6eSLisandro Dalcin @*/ 213d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawIsNull(PetscDraw draw, PetscBool *yes) 214d71ae5a4SJacob Faibussowitsch { 21545f3bb6eSLisandro Dalcin PetscFunctionBegin; 21645f3bb6eSLisandro Dalcin PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1); 217064a246eSJacob Faibussowitsch PetscValidBoolPointer(yes, 2); 2189566063dSJacob Faibussowitsch PetscCall(PetscObjectTypeCompare((PetscObject)draw, PETSC_DRAW_NULL, yes)); 219*3ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 22045f3bb6eSLisandro Dalcin } 221