145f3bb6eSLisandro Dalcin #include <petsc/private/drawimpl.h> /*I "petscdraw.h" I*/ 245f3bb6eSLisandro Dalcin 3a7e8706aSLisandro Dalcin static PetscErrorCode PetscDrawCoordinateToPixel_Null(PetscDraw draw,PetscReal x,PetscReal y,int *i,int *j) 445f3bb6eSLisandro Dalcin { 545f3bb6eSLisandro Dalcin PetscFunctionBegin; 645f3bb6eSLisandro Dalcin *i = *j = 0; 745f3bb6eSLisandro Dalcin PetscFunctionReturn(0); 845f3bb6eSLisandro Dalcin } 945f3bb6eSLisandro Dalcin 10a7e8706aSLisandro Dalcin static PetscErrorCode PetscDrawPixelToCoordinate_Null(PetscDraw draw,int i,int j,PetscReal *x,PetscReal *y) 1145f3bb6eSLisandro Dalcin { 1245f3bb6eSLisandro Dalcin PetscFunctionBegin; 1345f3bb6eSLisandro Dalcin *x = *y = 0; 1445f3bb6eSLisandro Dalcin PetscFunctionReturn(0); 1545f3bb6eSLisandro Dalcin } 1645f3bb6eSLisandro Dalcin 1745f3bb6eSLisandro Dalcin static PetscErrorCode PetscDrawPoint_Null(PetscDraw draw,PetscReal x,PetscReal y,int c) 1845f3bb6eSLisandro Dalcin { 1945f3bb6eSLisandro Dalcin PetscFunctionBegin; 2045f3bb6eSLisandro Dalcin PetscFunctionReturn(0); 2145f3bb6eSLisandro Dalcin } 2245f3bb6eSLisandro Dalcin 23a7e8706aSLisandro Dalcin static PetscErrorCode PetscDrawPointPixel_Null(PetscDraw draw,int x,int y,int c) 2445f3bb6eSLisandro Dalcin { 2545f3bb6eSLisandro Dalcin PetscFunctionBegin; 2645f3bb6eSLisandro Dalcin PetscFunctionReturn(0); 2745f3bb6eSLisandro Dalcin } 2845f3bb6eSLisandro Dalcin 2945f3bb6eSLisandro Dalcin static PetscErrorCode PetscDrawLineGetWidth_Null(PetscDraw draw,PetscReal *width) 3045f3bb6eSLisandro Dalcin { 3145f3bb6eSLisandro Dalcin PetscFunctionBegin; 3245f3bb6eSLisandro Dalcin if (width) *width = 0.01; 3345f3bb6eSLisandro Dalcin PetscFunctionReturn(0); 3445f3bb6eSLisandro Dalcin } 3545f3bb6eSLisandro Dalcin 3645f3bb6eSLisandro Dalcin static PetscErrorCode PetscDrawLine_Null(PetscDraw draw,PetscReal xl,PetscReal yl,PetscReal xr,PetscReal yr,int cl) 3745f3bb6eSLisandro Dalcin { 3845f3bb6eSLisandro Dalcin PetscFunctionBegin; 3945f3bb6eSLisandro Dalcin PetscFunctionReturn(0); 4045f3bb6eSLisandro Dalcin } 4145f3bb6eSLisandro Dalcin 4245f3bb6eSLisandro Dalcin static PetscErrorCode PetscDrawArrow_Null(PetscDraw draw,PetscReal xl,PetscReal yl,PetscReal xr,PetscReal yr,int cl) 4345f3bb6eSLisandro Dalcin { 4445f3bb6eSLisandro Dalcin PetscFunctionBegin; 4545f3bb6eSLisandro Dalcin PetscFunctionReturn(0); 4645f3bb6eSLisandro Dalcin } 4745f3bb6eSLisandro Dalcin 4845f3bb6eSLisandro Dalcin static PetscErrorCode PetscDrawRectangle_Null(PetscDraw draw,PetscReal xl,PetscReal yl,PetscReal xr,PetscReal yr,int c1,int c2,int c3,int c4) 4945f3bb6eSLisandro Dalcin { 5045f3bb6eSLisandro Dalcin PetscFunctionBegin; 5145f3bb6eSLisandro Dalcin PetscFunctionReturn(0); 5245f3bb6eSLisandro Dalcin } 5345f3bb6eSLisandro Dalcin 5445f3bb6eSLisandro Dalcin static PetscErrorCode PetscDrawEllipse_Null(PetscDraw Win,PetscReal x,PetscReal y,PetscReal a,PetscReal b,int c) 5545f3bb6eSLisandro Dalcin { 5645f3bb6eSLisandro Dalcin PetscFunctionBegin; 5745f3bb6eSLisandro Dalcin PetscFunctionReturn(0); 5845f3bb6eSLisandro Dalcin } 5945f3bb6eSLisandro Dalcin 6045f3bb6eSLisandro Dalcin 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) 6145f3bb6eSLisandro Dalcin { 6245f3bb6eSLisandro Dalcin PetscFunctionBegin; 6345f3bb6eSLisandro Dalcin PetscFunctionReturn(0); 6445f3bb6eSLisandro Dalcin } 6545f3bb6eSLisandro Dalcin 6645f3bb6eSLisandro Dalcin static PetscErrorCode PetscDrawStringGetSize_Null(PetscDraw draw,PetscReal *x,PetscReal *y) 6745f3bb6eSLisandro Dalcin { 6845f3bb6eSLisandro Dalcin PetscFunctionBegin; 6945f3bb6eSLisandro Dalcin if (x) *x = 0.01; 7045f3bb6eSLisandro Dalcin if (y) *y = 0.01; 7145f3bb6eSLisandro Dalcin PetscFunctionReturn(0); 7245f3bb6eSLisandro Dalcin } 7345f3bb6eSLisandro Dalcin 7445f3bb6eSLisandro Dalcin static PetscErrorCode PetscDrawString_Null(PetscDraw draw,PetscReal x,PetscReal y,int c,const char chrs[]) 7545f3bb6eSLisandro Dalcin { 7645f3bb6eSLisandro Dalcin PetscFunctionBegin; 7745f3bb6eSLisandro Dalcin PetscFunctionReturn(0); 7845f3bb6eSLisandro Dalcin } 7945f3bb6eSLisandro Dalcin 8045f3bb6eSLisandro Dalcin static PetscErrorCode PetscDrawStringVertical_Null(PetscDraw draw,PetscReal x,PetscReal y,int c,const char chrs[]) 8145f3bb6eSLisandro Dalcin { 8245f3bb6eSLisandro Dalcin PetscFunctionBegin; 8345f3bb6eSLisandro Dalcin PetscFunctionReturn(0); 8445f3bb6eSLisandro Dalcin } 8545f3bb6eSLisandro Dalcin 8645f3bb6eSLisandro Dalcin static PetscErrorCode PetscDrawStringBoxed_Null(PetscDraw draw,PetscReal sxl,PetscReal syl,int sc,int bc,const char text[],PetscReal *w,PetscReal *h) 8745f3bb6eSLisandro Dalcin { 8845f3bb6eSLisandro Dalcin PetscFunctionBegin; 8945f3bb6eSLisandro Dalcin if (w) *w = 0.01; 9045f3bb6eSLisandro Dalcin if (h) *h = 0.01; 9145f3bb6eSLisandro Dalcin PetscFunctionReturn(0); 9245f3bb6eSLisandro Dalcin } 9345f3bb6eSLisandro Dalcin 9445f3bb6eSLisandro Dalcin static PetscErrorCode PetscDrawGetSingleton_Null(PetscDraw draw,PetscDraw *sdraw) 9545f3bb6eSLisandro Dalcin { 9645f3bb6eSLisandro Dalcin PetscErrorCode ierr; 9745f3bb6eSLisandro Dalcin PetscFunctionBegin; 9845f3bb6eSLisandro Dalcin ierr = PetscDrawOpenNull(PETSC_COMM_SELF,sdraw);CHKERRQ(ierr); 9945f3bb6eSLisandro Dalcin PetscFunctionReturn(0); 10045f3bb6eSLisandro Dalcin } 10145f3bb6eSLisandro Dalcin 10245f3bb6eSLisandro Dalcin static PetscErrorCode PetscDrawRestoreSingleton_Null(PetscDraw draw,PetscDraw *sdraw) 10345f3bb6eSLisandro Dalcin { 10445f3bb6eSLisandro Dalcin PetscErrorCode ierr; 10545f3bb6eSLisandro Dalcin PetscFunctionBegin; 10645f3bb6eSLisandro Dalcin ierr = PetscDrawDestroy(sdraw);CHKERRQ(ierr); 10745f3bb6eSLisandro Dalcin PetscFunctionReturn(0); 10845f3bb6eSLisandro Dalcin } 10945f3bb6eSLisandro Dalcin 11045f3bb6eSLisandro Dalcin static struct _PetscDrawOps DvOps = { NULL,/* PetscDrawSetDoubleBuffer_Null */ 11145f3bb6eSLisandro Dalcin NULL,/* PetscDrawFlush_Null */ 11245f3bb6eSLisandro Dalcin PetscDrawLine_Null, 11345f3bb6eSLisandro Dalcin NULL,/* PetscDrawLineSetWidth_Null */ 11445f3bb6eSLisandro Dalcin PetscDrawLineGetWidth_Null, 11545f3bb6eSLisandro Dalcin PetscDrawPoint_Null, 11645f3bb6eSLisandro Dalcin NULL,/* PetscDrawPointSetSize_Null */ 11745f3bb6eSLisandro Dalcin PetscDrawString_Null, 11845f3bb6eSLisandro Dalcin PetscDrawStringVertical_Null, 11945f3bb6eSLisandro Dalcin NULL,/* PetscDrawStringSetSize_Null */ 12045f3bb6eSLisandro Dalcin PetscDrawStringGetSize_Null, 12145f3bb6eSLisandro Dalcin NULL,/* PetscDrawSetViewport_Null */ 12245f3bb6eSLisandro Dalcin NULL,/* PetscDrawClear_Null */ 12345f3bb6eSLisandro Dalcin PetscDrawRectangle_Null, 12445f3bb6eSLisandro Dalcin PetscDrawTriangle_Null, 12545f3bb6eSLisandro Dalcin PetscDrawEllipse_Null, 12645f3bb6eSLisandro Dalcin NULL,/* PetscDrawGetMouseButton_Null */ 12745f3bb6eSLisandro Dalcin NULL,/* PetscDrawPause_Null */ 12845f3bb6eSLisandro Dalcin NULL,/* PetscDrawBeginPage_Null */ 12945f3bb6eSLisandro Dalcin NULL,/* PetscDrawEndPage_Null */ 13045f3bb6eSLisandro Dalcin NULL,/* PetscDrawGetPopup_Null */ 13145f3bb6eSLisandro Dalcin NULL,/* PetscDrawSetTitle_Null */ 13245f3bb6eSLisandro Dalcin NULL,/* PetscDrawCheckResizedWindow_Null */ 13345f3bb6eSLisandro Dalcin NULL,/* PetscDrawResizeWindow_Null */ 13445f3bb6eSLisandro Dalcin NULL,/* PetscDrawDestroy_Null */ 13545f3bb6eSLisandro Dalcin NULL,/* PetscDrawView_Null */ 13645f3bb6eSLisandro Dalcin PetscDrawGetSingleton_Null, 13745f3bb6eSLisandro Dalcin PetscDrawRestoreSingleton_Null, 13845f3bb6eSLisandro Dalcin NULL,/* PetscDrawSave_Null */ 13945f3bb6eSLisandro Dalcin NULL,/* PetscDrawGetImage_Null */ 14045f3bb6eSLisandro Dalcin NULL,/* PetscDrawSetCoordinates_Null */ 14145f3bb6eSLisandro Dalcin PetscDrawArrow_Null, 14245f3bb6eSLisandro Dalcin PetscDrawCoordinateToPixel_Null, 14345f3bb6eSLisandro Dalcin PetscDrawPixelToCoordinate_Null, 14445f3bb6eSLisandro Dalcin PetscDrawPointPixel_Null, 14545f3bb6eSLisandro Dalcin PetscDrawStringBoxed_Null}; 14645f3bb6eSLisandro Dalcin 14745f3bb6eSLisandro Dalcin /*MC 14845f3bb6eSLisandro Dalcin PETSC_DRAW_NULL - PETSc graphics device that ignores all draw commands 14945f3bb6eSLisandro Dalcin 15045f3bb6eSLisandro Dalcin Level: beginner 15145f3bb6eSLisandro Dalcin 15245f3bb6eSLisandro Dalcin .seealso: PetscDrawOpenNull(), PetscDrawIsNull() 15345f3bb6eSLisandro Dalcin M*/ 15445f3bb6eSLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscDrawCreate_Null(PetscDraw); 15545f3bb6eSLisandro Dalcin 15645f3bb6eSLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscDrawCreate_Null(PetscDraw draw) 15745f3bb6eSLisandro Dalcin { 15845f3bb6eSLisandro Dalcin PetscErrorCode ierr; 15945f3bb6eSLisandro Dalcin PetscFunctionBegin; 16045f3bb6eSLisandro Dalcin draw->pause = 0; 16145f3bb6eSLisandro Dalcin draw->coor_xl = 0; draw->coor_xr = 1; 16245f3bb6eSLisandro Dalcin draw->coor_yl = 0; draw->coor_yr = 1; 16345f3bb6eSLisandro Dalcin draw->port_xl = 0; draw->port_xr = 1; 16445f3bb6eSLisandro Dalcin draw->port_yl = 0; draw->port_yr = 1; 16545f3bb6eSLisandro Dalcin ierr = PetscDrawDestroy(&draw->popup);CHKERRQ(ierr); 16645f3bb6eSLisandro Dalcin 16745f3bb6eSLisandro Dalcin ierr = PetscMemcpy(draw->ops,&DvOps,sizeof(DvOps));CHKERRQ(ierr); 16845f3bb6eSLisandro Dalcin draw->data = NULL; 16945f3bb6eSLisandro Dalcin PetscFunctionReturn(0); 17045f3bb6eSLisandro Dalcin } 17145f3bb6eSLisandro Dalcin 17245f3bb6eSLisandro Dalcin /*@ 17345f3bb6eSLisandro Dalcin PetscDrawOpenNull - Opens a null drawing context. All draw commands to 17445f3bb6eSLisandro Dalcin it are ignored. 17545f3bb6eSLisandro Dalcin 176*6b867d5aSJose E. Roman Input Parameter: 177*6b867d5aSJose E. Roman . comm - MPI communicator 178*6b867d5aSJose E. Roman 17945f3bb6eSLisandro Dalcin Output Parameter: 18045f3bb6eSLisandro Dalcin . draw - the drawing context 18145f3bb6eSLisandro Dalcin 18245f3bb6eSLisandro Dalcin Level: advanced 18345f3bb6eSLisandro Dalcin @*/ 18445f3bb6eSLisandro Dalcin PetscErrorCode PetscDrawOpenNull(MPI_Comm comm,PetscDraw *win) 18545f3bb6eSLisandro Dalcin { 18645f3bb6eSLisandro Dalcin PetscErrorCode ierr; 18745f3bb6eSLisandro Dalcin 18845f3bb6eSLisandro Dalcin PetscFunctionBegin; 18945f3bb6eSLisandro Dalcin ierr = PetscDrawCreate(comm,NULL,NULL,0,0,1,1,win);CHKERRQ(ierr); 19045f3bb6eSLisandro Dalcin ierr = PetscDrawSetType(*win,PETSC_DRAW_NULL);CHKERRQ(ierr); 19145f3bb6eSLisandro Dalcin PetscFunctionReturn(0); 19245f3bb6eSLisandro Dalcin } 19345f3bb6eSLisandro Dalcin 19445f3bb6eSLisandro Dalcin /*@ 19545f3bb6eSLisandro Dalcin PetscDrawIsNull - Returns PETSC_TRUE if draw is a null draw object. 19645f3bb6eSLisandro Dalcin 19745f3bb6eSLisandro Dalcin Not collective 19845f3bb6eSLisandro Dalcin 19945f3bb6eSLisandro Dalcin Input Parameter: 20045f3bb6eSLisandro Dalcin . draw - the draw context 20145f3bb6eSLisandro Dalcin 20245f3bb6eSLisandro Dalcin Output Parameter: 20345f3bb6eSLisandro Dalcin . yes - PETSC_TRUE if it is a null draw object; otherwise PETSC_FALSE 20445f3bb6eSLisandro Dalcin 20545f3bb6eSLisandro Dalcin Level: advanced 20645f3bb6eSLisandro Dalcin @*/ 20745f3bb6eSLisandro Dalcin PetscErrorCode PetscDrawIsNull(PetscDraw draw,PetscBool *yes) 20845f3bb6eSLisandro Dalcin { 20945f3bb6eSLisandro Dalcin PetscErrorCode ierr; 21045f3bb6eSLisandro Dalcin 21145f3bb6eSLisandro Dalcin PetscFunctionBegin; 21245f3bb6eSLisandro Dalcin PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 213064a246eSJacob Faibussowitsch PetscValidBoolPointer(yes,2); 21445f3bb6eSLisandro Dalcin ierr = PetscObjectTypeCompare((PetscObject)draw,PETSC_DRAW_NULL,yes);CHKERRQ(ierr); 21545f3bb6eSLisandro Dalcin PetscFunctionReturn(0); 21645f3bb6eSLisandro Dalcin } 217