1*5c6c1daeSBarry Smith 2*5c6c1daeSBarry Smith /* 3*5c6c1daeSBarry Smith Provides the calling sequences for all the basic PetscDraw routines. 4*5c6c1daeSBarry Smith */ 5*5c6c1daeSBarry Smith #include <petsc-private/drawimpl.h> /*I "petscdraw.h" I*/ 6*5c6c1daeSBarry Smith 7*5c6c1daeSBarry Smith PetscClassId PETSC_DRAW_CLASSID; 8*5c6c1daeSBarry Smith 9*5c6c1daeSBarry Smith static PetscBool PetscDrawPackageInitialized = PETSC_FALSE; 10*5c6c1daeSBarry Smith #undef __FUNCT__ 11*5c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawFinalizePackage" 12*5c6c1daeSBarry Smith /*@C 13*5c6c1daeSBarry Smith PetscDrawFinalizePackage - This function destroys everything in the Petsc interface to the Draw package. It is 14*5c6c1daeSBarry Smith called from PetscFinalize(). 15*5c6c1daeSBarry Smith 16*5c6c1daeSBarry Smith Level: developer 17*5c6c1daeSBarry Smith 18*5c6c1daeSBarry Smith .keywords: Petsc, destroy, package, mathematica 19*5c6c1daeSBarry Smith .seealso: PetscFinalize() 20*5c6c1daeSBarry Smith @*/ 21*5c6c1daeSBarry Smith PetscErrorCode PetscDrawFinalizePackage(void) 22*5c6c1daeSBarry Smith { 23*5c6c1daeSBarry Smith PetscFunctionBegin; 24*5c6c1daeSBarry Smith PetscDrawPackageInitialized = PETSC_FALSE; 25*5c6c1daeSBarry Smith PetscDrawList = 0; 26*5c6c1daeSBarry Smith PetscFunctionReturn(0); 27*5c6c1daeSBarry Smith } 28*5c6c1daeSBarry Smith 29*5c6c1daeSBarry Smith #undef __FUNCT__ 30*5c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawInitializePackage" 31*5c6c1daeSBarry Smith /*@C 32*5c6c1daeSBarry Smith PetscInitializeDrawPackage - This function initializes everything in the PetscDraw package. It is called 33*5c6c1daeSBarry Smith from PetscDLLibraryRegister() when using dynamic libraries, and on the call to PetscInitialize() 34*5c6c1daeSBarry Smith when using static libraries. 35*5c6c1daeSBarry Smith 36*5c6c1daeSBarry Smith Input Parameter: 37*5c6c1daeSBarry Smith path - The dynamic library path, or PETSC_NULL 38*5c6c1daeSBarry Smith 39*5c6c1daeSBarry Smith Level: developer 40*5c6c1daeSBarry Smith 41*5c6c1daeSBarry Smith .keywords: Petsc, initialize, package 42*5c6c1daeSBarry Smith .seealso: PetscInitialize() 43*5c6c1daeSBarry Smith @*/ 44*5c6c1daeSBarry Smith PetscErrorCode PetscDrawInitializePackage(const char path[]) 45*5c6c1daeSBarry Smith { 46*5c6c1daeSBarry Smith char logList[256]; 47*5c6c1daeSBarry Smith char *className; 48*5c6c1daeSBarry Smith PetscBool opt; 49*5c6c1daeSBarry Smith PetscErrorCode ierr; 50*5c6c1daeSBarry Smith 51*5c6c1daeSBarry Smith PetscFunctionBegin; 52*5c6c1daeSBarry Smith if (PetscDrawPackageInitialized) PetscFunctionReturn(0); 53*5c6c1daeSBarry Smith PetscDrawPackageInitialized = PETSC_TRUE; 54*5c6c1daeSBarry Smith /* Register Classes */ 55*5c6c1daeSBarry Smith ierr = PetscClassIdRegister("Draw",&PETSC_DRAW_CLASSID);CHKERRQ(ierr); 56*5c6c1daeSBarry Smith ierr = PetscClassIdRegister("Axis",&PETSC_DRAWAXIS_CLASSID);CHKERRQ(ierr); 57*5c6c1daeSBarry Smith ierr = PetscClassIdRegister("Line Graph",&PETSC_DRAWLG_CLASSID);CHKERRQ(ierr); 58*5c6c1daeSBarry Smith ierr = PetscClassIdRegister("Histogram",&PETSC_DRAWHG_CLASSID);CHKERRQ(ierr); 59*5c6c1daeSBarry Smith ierr = PetscClassIdRegister("Scatter Plot",&PETSC_DRAWSP_CLASSID);CHKERRQ(ierr); 60*5c6c1daeSBarry Smith /* Register Constructors */ 61*5c6c1daeSBarry Smith ierr = PetscDrawRegisterAll(path);CHKERRQ(ierr); 62*5c6c1daeSBarry Smith /* Process info exclusions */ 63*5c6c1daeSBarry Smith ierr = PetscOptionsGetString(PETSC_NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr); 64*5c6c1daeSBarry Smith if (opt) { 65*5c6c1daeSBarry Smith ierr = PetscStrstr(logList, "draw", &className);CHKERRQ(ierr); 66*5c6c1daeSBarry Smith if (className) { 67*5c6c1daeSBarry Smith ierr = PetscInfoDeactivateClass(0);CHKERRQ(ierr); 68*5c6c1daeSBarry Smith } 69*5c6c1daeSBarry Smith } 70*5c6c1daeSBarry Smith /* Process summary exclusions */ 71*5c6c1daeSBarry Smith ierr = PetscOptionsGetString(PETSC_NULL, "-log_summary_exclude", logList, 256, &opt);CHKERRQ(ierr); 72*5c6c1daeSBarry Smith if (opt) { 73*5c6c1daeSBarry Smith ierr = PetscStrstr(logList, "draw", &className);CHKERRQ(ierr); 74*5c6c1daeSBarry Smith if (className) { 75*5c6c1daeSBarry Smith ierr = PetscLogEventDeactivateClass(0);CHKERRQ(ierr); 76*5c6c1daeSBarry Smith } 77*5c6c1daeSBarry Smith } 78*5c6c1daeSBarry Smith ierr = PetscRegisterFinalize(PetscDrawFinalizePackage);CHKERRQ(ierr); 79*5c6c1daeSBarry Smith PetscFunctionReturn(0); 80*5c6c1daeSBarry Smith } 81*5c6c1daeSBarry Smith 82*5c6c1daeSBarry Smith #undef __FUNCT__ 83*5c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawResizeWindow" 84*5c6c1daeSBarry Smith /*@ 85*5c6c1daeSBarry Smith PetscDrawResizeWindow - Allows one to resize a window from a program. 86*5c6c1daeSBarry Smith 87*5c6c1daeSBarry Smith Collective on PetscDraw 88*5c6c1daeSBarry Smith 89*5c6c1daeSBarry Smith Input Parameter: 90*5c6c1daeSBarry Smith + draw - the window 91*5c6c1daeSBarry Smith - w,h - the new width and height of the window 92*5c6c1daeSBarry Smith 93*5c6c1daeSBarry Smith Level: intermediate 94*5c6c1daeSBarry Smith 95*5c6c1daeSBarry Smith .seealso: PetscDrawCheckResizedWindow() 96*5c6c1daeSBarry Smith @*/ 97*5c6c1daeSBarry Smith PetscErrorCode PetscDrawResizeWindow(PetscDraw draw,int w,int h) 98*5c6c1daeSBarry Smith { 99*5c6c1daeSBarry Smith PetscErrorCode ierr; 100*5c6c1daeSBarry Smith PetscFunctionBegin; 101*5c6c1daeSBarry Smith if (draw->ops->resizewindow) { 102*5c6c1daeSBarry Smith ierr = (*draw->ops->resizewindow)(draw,w,h);CHKERRQ(ierr); 103*5c6c1daeSBarry Smith } 104*5c6c1daeSBarry Smith PetscFunctionReturn(0); 105*5c6c1daeSBarry Smith } 106*5c6c1daeSBarry Smith 107*5c6c1daeSBarry Smith #undef __FUNCT__ 108*5c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawCheckResizedWindow" 109*5c6c1daeSBarry Smith /*@ 110*5c6c1daeSBarry Smith PetscDrawCheckResizedWindow - Checks if the user has resized the window. 111*5c6c1daeSBarry Smith 112*5c6c1daeSBarry Smith Collective on PetscDraw 113*5c6c1daeSBarry Smith 114*5c6c1daeSBarry Smith Input Parameter: 115*5c6c1daeSBarry Smith . draw - the window 116*5c6c1daeSBarry Smith 117*5c6c1daeSBarry Smith Level: advanced 118*5c6c1daeSBarry Smith 119*5c6c1daeSBarry Smith .seealso: PetscDrawResizeWindow() 120*5c6c1daeSBarry Smith 121*5c6c1daeSBarry Smith @*/ 122*5c6c1daeSBarry Smith PetscErrorCode PetscDrawCheckResizedWindow(PetscDraw draw) 123*5c6c1daeSBarry Smith { 124*5c6c1daeSBarry Smith PetscErrorCode ierr; 125*5c6c1daeSBarry Smith PetscFunctionBegin; 126*5c6c1daeSBarry Smith if (draw->ops->checkresizedwindow) { 127*5c6c1daeSBarry Smith ierr = (*draw->ops->checkresizedwindow)(draw);CHKERRQ(ierr); 128*5c6c1daeSBarry Smith } 129*5c6c1daeSBarry Smith PetscFunctionReturn(0); 130*5c6c1daeSBarry Smith } 131*5c6c1daeSBarry Smith 132*5c6c1daeSBarry Smith #undef __FUNCT__ 133*5c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawGetTitle" 134*5c6c1daeSBarry Smith /*@C 135*5c6c1daeSBarry Smith PetscDrawGetTitle - Gets pointer to title of a PetscDraw context. 136*5c6c1daeSBarry Smith 137*5c6c1daeSBarry Smith Not collective 138*5c6c1daeSBarry Smith 139*5c6c1daeSBarry Smith Input Parameter: 140*5c6c1daeSBarry Smith . draw - the graphics context 141*5c6c1daeSBarry Smith 142*5c6c1daeSBarry Smith Output Parameter: 143*5c6c1daeSBarry Smith . title - the title 144*5c6c1daeSBarry Smith 145*5c6c1daeSBarry Smith Level: intermediate 146*5c6c1daeSBarry Smith 147*5c6c1daeSBarry Smith .seealso: PetscDrawSetTitle() 148*5c6c1daeSBarry Smith @*/ 149*5c6c1daeSBarry Smith PetscErrorCode PetscDrawGetTitle(PetscDraw draw,char **title) 150*5c6c1daeSBarry Smith { 151*5c6c1daeSBarry Smith PetscFunctionBegin; 152*5c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 153*5c6c1daeSBarry Smith PetscValidPointer(title,2); 154*5c6c1daeSBarry Smith *title = draw->title; 155*5c6c1daeSBarry Smith PetscFunctionReturn(0); 156*5c6c1daeSBarry Smith } 157*5c6c1daeSBarry Smith 158*5c6c1daeSBarry Smith #undef __FUNCT__ 159*5c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawSetTitle" 160*5c6c1daeSBarry Smith /*@C 161*5c6c1daeSBarry Smith PetscDrawSetTitle - Sets the title of a PetscDraw context. 162*5c6c1daeSBarry Smith 163*5c6c1daeSBarry Smith Not collective (any processor or all may call this) 164*5c6c1daeSBarry Smith 165*5c6c1daeSBarry Smith Input Parameters: 166*5c6c1daeSBarry Smith + draw - the graphics context 167*5c6c1daeSBarry Smith - title - the title 168*5c6c1daeSBarry Smith 169*5c6c1daeSBarry Smith Level: intermediate 170*5c6c1daeSBarry Smith 171*5c6c1daeSBarry Smith Note: 172*5c6c1daeSBarry Smith A copy of the string is made, so you may destroy the 173*5c6c1daeSBarry Smith title string after calling this routine. 174*5c6c1daeSBarry Smith 175*5c6c1daeSBarry Smith .seealso: PetscDrawGetTitle(), PetscDrawAppendTitle() 176*5c6c1daeSBarry Smith @*/ 177*5c6c1daeSBarry Smith PetscErrorCode PetscDrawSetTitle(PetscDraw draw,const char title[]) 178*5c6c1daeSBarry Smith { 179*5c6c1daeSBarry Smith PetscErrorCode ierr; 180*5c6c1daeSBarry Smith PetscFunctionBegin; 181*5c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 182*5c6c1daeSBarry Smith PetscValidCharPointer(title,2); 183*5c6c1daeSBarry Smith ierr = PetscFree(draw->title);CHKERRQ(ierr); 184*5c6c1daeSBarry Smith ierr = PetscStrallocpy(title,&draw->title);CHKERRQ(ierr); 185*5c6c1daeSBarry Smith if (draw->ops->settitle) { 186*5c6c1daeSBarry Smith ierr = (*draw->ops->settitle)(draw,title);CHKERRQ(ierr); 187*5c6c1daeSBarry Smith } 188*5c6c1daeSBarry Smith PetscFunctionReturn(0); 189*5c6c1daeSBarry Smith } 190*5c6c1daeSBarry Smith 191*5c6c1daeSBarry Smith #undef __FUNCT__ 192*5c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawAppendTitle" 193*5c6c1daeSBarry Smith /*@C 194*5c6c1daeSBarry Smith PetscDrawAppendTitle - Appends to the title of a PetscDraw context. 195*5c6c1daeSBarry Smith 196*5c6c1daeSBarry Smith Not collective (any processor or all can call this) 197*5c6c1daeSBarry Smith 198*5c6c1daeSBarry Smith Input Parameters: 199*5c6c1daeSBarry Smith + draw - the graphics context 200*5c6c1daeSBarry Smith - title - the title 201*5c6c1daeSBarry Smith 202*5c6c1daeSBarry Smith Note: 203*5c6c1daeSBarry Smith A copy of the string is made, so you may destroy the 204*5c6c1daeSBarry Smith title string after calling this routine. 205*5c6c1daeSBarry Smith 206*5c6c1daeSBarry Smith Level: advanced 207*5c6c1daeSBarry Smith 208*5c6c1daeSBarry Smith .seealso: PetscDrawSetTitle(), PetscDrawGetTitle() 209*5c6c1daeSBarry Smith @*/ 210*5c6c1daeSBarry Smith PetscErrorCode PetscDrawAppendTitle(PetscDraw draw,const char title[]) 211*5c6c1daeSBarry Smith { 212*5c6c1daeSBarry Smith PetscErrorCode ierr; 213*5c6c1daeSBarry Smith size_t len1,len2,len; 214*5c6c1daeSBarry Smith char *newtitle; 215*5c6c1daeSBarry Smith 216*5c6c1daeSBarry Smith PetscFunctionBegin; 217*5c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 218*5c6c1daeSBarry Smith if (!title) PetscFunctionReturn(0); 219*5c6c1daeSBarry Smith 220*5c6c1daeSBarry Smith if (draw->title) { 221*5c6c1daeSBarry Smith ierr = PetscStrlen(title,&len1);CHKERRQ(ierr); 222*5c6c1daeSBarry Smith ierr = PetscStrlen(draw->title,&len2);CHKERRQ(ierr); 223*5c6c1daeSBarry Smith len = len1 + len2; 224*5c6c1daeSBarry Smith ierr = PetscMalloc((len + 1)*sizeof(char*),&newtitle);CHKERRQ(ierr); 225*5c6c1daeSBarry Smith ierr = PetscStrcpy(newtitle,draw->title);CHKERRQ(ierr); 226*5c6c1daeSBarry Smith ierr = PetscStrcat(newtitle,title);CHKERRQ(ierr); 227*5c6c1daeSBarry Smith ierr = PetscFree(draw->title);CHKERRQ(ierr); 228*5c6c1daeSBarry Smith draw->title = newtitle; 229*5c6c1daeSBarry Smith } else { 230*5c6c1daeSBarry Smith ierr = PetscStrallocpy(title,&draw->title);CHKERRQ(ierr); 231*5c6c1daeSBarry Smith } 232*5c6c1daeSBarry Smith if (draw->ops->settitle) { 233*5c6c1daeSBarry Smith ierr = (*draw->ops->settitle)(draw,draw->title);CHKERRQ(ierr); 234*5c6c1daeSBarry Smith } 235*5c6c1daeSBarry Smith PetscFunctionReturn(0); 236*5c6c1daeSBarry Smith } 237*5c6c1daeSBarry Smith 238*5c6c1daeSBarry Smith #undef __FUNCT__ 239*5c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawDestroy" 240*5c6c1daeSBarry Smith /*@ 241*5c6c1daeSBarry Smith PetscDrawDestroy - Deletes a draw context. 242*5c6c1daeSBarry Smith 243*5c6c1daeSBarry Smith Collective on PetscDraw 244*5c6c1daeSBarry Smith 245*5c6c1daeSBarry Smith Input Parameters: 246*5c6c1daeSBarry Smith . draw - the drawing context 247*5c6c1daeSBarry Smith 248*5c6c1daeSBarry Smith Level: beginner 249*5c6c1daeSBarry Smith 250*5c6c1daeSBarry Smith .seealso: PetscDrawCreate() 251*5c6c1daeSBarry Smith 252*5c6c1daeSBarry Smith @*/ 253*5c6c1daeSBarry Smith PetscErrorCode PetscDrawDestroy(PetscDraw *draw) 254*5c6c1daeSBarry Smith { 255*5c6c1daeSBarry Smith PetscErrorCode ierr; 256*5c6c1daeSBarry Smith PetscFunctionBegin; 257*5c6c1daeSBarry Smith if (!*draw) PetscFunctionReturn(0); 258*5c6c1daeSBarry Smith PetscValidHeaderSpecific(*draw,PETSC_DRAW_CLASSID,1); 259*5c6c1daeSBarry Smith if (--((PetscObject)(*draw))->refct > 0) PetscFunctionReturn(0); 260*5c6c1daeSBarry Smith 261*5c6c1daeSBarry Smith if ((*draw)->pause == -2) { 262*5c6c1daeSBarry Smith (*draw)->pause = -1; 263*5c6c1daeSBarry Smith ierr = PetscDrawPause(*draw);CHKERRQ(ierr); 264*5c6c1daeSBarry Smith } 265*5c6c1daeSBarry Smith 266*5c6c1daeSBarry Smith /* if memory was published then destroy it */ 267*5c6c1daeSBarry Smith ierr = PetscObjectDepublish(*draw);CHKERRQ(ierr); 268*5c6c1daeSBarry Smith 269*5c6c1daeSBarry Smith if ((*draw)->ops->destroy) { 270*5c6c1daeSBarry Smith ierr = (*(*draw)->ops->destroy)(*draw);CHKERRQ(ierr); 271*5c6c1daeSBarry Smith } 272*5c6c1daeSBarry Smith ierr = PetscFree((*draw)->title);CHKERRQ(ierr); 273*5c6c1daeSBarry Smith ierr = PetscFree((*draw)->display);CHKERRQ(ierr); 274*5c6c1daeSBarry Smith ierr = PetscFree((*draw)->savefilename);CHKERRQ(ierr); 275*5c6c1daeSBarry Smith ierr = PetscHeaderDestroy(draw);CHKERRQ(ierr); 276*5c6c1daeSBarry Smith PetscFunctionReturn(0); 277*5c6c1daeSBarry Smith } 278*5c6c1daeSBarry Smith 279*5c6c1daeSBarry Smith #undef __FUNCT__ 280*5c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawGetPopup" 281*5c6c1daeSBarry Smith /*@ 282*5c6c1daeSBarry Smith PetscDrawGetPopup - Creates a popup window associated with a PetscDraw window. 283*5c6c1daeSBarry Smith 284*5c6c1daeSBarry Smith Collective on PetscDraw 285*5c6c1daeSBarry Smith 286*5c6c1daeSBarry Smith Input Parameter: 287*5c6c1daeSBarry Smith . draw - the original window 288*5c6c1daeSBarry Smith 289*5c6c1daeSBarry Smith Output Parameter: 290*5c6c1daeSBarry Smith . popup - the new popup window 291*5c6c1daeSBarry Smith 292*5c6c1daeSBarry Smith Level: advanced 293*5c6c1daeSBarry Smith 294*5c6c1daeSBarry Smith @*/ 295*5c6c1daeSBarry Smith PetscErrorCode PetscDrawGetPopup(PetscDraw draw,PetscDraw *popup) 296*5c6c1daeSBarry Smith { 297*5c6c1daeSBarry Smith PetscErrorCode ierr; 298*5c6c1daeSBarry Smith PetscFunctionBegin; 299*5c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 300*5c6c1daeSBarry Smith PetscValidPointer(popup,2); 301*5c6c1daeSBarry Smith 302*5c6c1daeSBarry Smith if (draw->popup) { 303*5c6c1daeSBarry Smith *popup = draw->popup; 304*5c6c1daeSBarry Smith } else if (draw->ops->getpopup) { 305*5c6c1daeSBarry Smith ierr = (*draw->ops->getpopup)(draw,popup);CHKERRQ(ierr); 306*5c6c1daeSBarry Smith } else { 307*5c6c1daeSBarry Smith *popup = PETSC_NULL; 308*5c6c1daeSBarry Smith } 309*5c6c1daeSBarry Smith PetscFunctionReturn(0); 310*5c6c1daeSBarry Smith } 311*5c6c1daeSBarry Smith 312*5c6c1daeSBarry Smith #undef __FUNCT__ 313*5c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawDestroy_Null" 314*5c6c1daeSBarry Smith PetscErrorCode PetscDrawDestroy_Null(PetscDraw draw) 315*5c6c1daeSBarry Smith { 316*5c6c1daeSBarry Smith PetscFunctionBegin; 317*5c6c1daeSBarry Smith PetscFunctionReturn(0); 318*5c6c1daeSBarry Smith } 319*5c6c1daeSBarry Smith 320*5c6c1daeSBarry Smith #undef __FUNCT__ 321*5c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawOpenNull" 322*5c6c1daeSBarry Smith /* 323*5c6c1daeSBarry Smith PetscDrawOpenNull - Opens a null drawing context. All draw commands to 324*5c6c1daeSBarry Smith it are ignored. 325*5c6c1daeSBarry Smith 326*5c6c1daeSBarry Smith Output Parameter: 327*5c6c1daeSBarry Smith . win - the drawing context 328*5c6c1daeSBarry Smith 329*5c6c1daeSBarry Smith Level: advanced 330*5c6c1daeSBarry Smith 331*5c6c1daeSBarry Smith */ 332*5c6c1daeSBarry Smith PetscErrorCode PetscDrawOpenNull(MPI_Comm comm,PetscDraw *win) 333*5c6c1daeSBarry Smith { 334*5c6c1daeSBarry Smith PetscErrorCode ierr; 335*5c6c1daeSBarry Smith 336*5c6c1daeSBarry Smith PetscFunctionBegin; 337*5c6c1daeSBarry Smith ierr = PetscDrawCreate(comm,PETSC_NULL,PETSC_NULL,0,0,1,1,win);CHKERRQ(ierr); 338*5c6c1daeSBarry Smith ierr = PetscDrawSetType(*win,PETSC_DRAW_NULL);CHKERRQ(ierr); 339*5c6c1daeSBarry Smith PetscFunctionReturn(0); 340*5c6c1daeSBarry Smith } 341*5c6c1daeSBarry Smith 342*5c6c1daeSBarry Smith #undef __FUNCT__ 343*5c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawSetDisplay" 344*5c6c1daeSBarry Smith /*@ 345*5c6c1daeSBarry Smith PetscDrawSetDisplay - Sets the display where a PetscDraw object will be displayed 346*5c6c1daeSBarry Smith 347*5c6c1daeSBarry Smith Input Parameter: 348*5c6c1daeSBarry Smith + draw - the drawing context 349*5c6c1daeSBarry Smith - display - the X windows display 350*5c6c1daeSBarry Smith 351*5c6c1daeSBarry Smith Level: advanced 352*5c6c1daeSBarry Smith 353*5c6c1daeSBarry Smith @*/ 354*5c6c1daeSBarry Smith PetscErrorCode PetscDrawSetDisplay(PetscDraw draw,const char display[]) 355*5c6c1daeSBarry Smith { 356*5c6c1daeSBarry Smith PetscErrorCode ierr; 357*5c6c1daeSBarry Smith 358*5c6c1daeSBarry Smith PetscFunctionBegin; 359*5c6c1daeSBarry Smith ierr = PetscFree(draw->display);CHKERRQ(ierr); 360*5c6c1daeSBarry Smith ierr = PetscStrallocpy(display,&draw->display);CHKERRQ(ierr); 361*5c6c1daeSBarry Smith PetscFunctionReturn(0); 362*5c6c1daeSBarry Smith } 363*5c6c1daeSBarry Smith 364*5c6c1daeSBarry Smith EXTERN_C_BEGIN 365*5c6c1daeSBarry Smith #undef __FUNCT__ 366*5c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawCreate_Null" 367*5c6c1daeSBarry Smith /* 368*5c6c1daeSBarry Smith PetscDrawCreate_Null - Opens a null drawing context. All draw commands to 369*5c6c1daeSBarry Smith it are ignored. 370*5c6c1daeSBarry Smith 371*5c6c1daeSBarry Smith Input Parameter: 372*5c6c1daeSBarry Smith . win - the drawing context 373*5c6c1daeSBarry Smith */ 374*5c6c1daeSBarry Smith PetscErrorCode PetscDrawCreate_Null(PetscDraw draw) 375*5c6c1daeSBarry Smith { 376*5c6c1daeSBarry Smith PetscErrorCode ierr; 377*5c6c1daeSBarry Smith 378*5c6c1daeSBarry Smith PetscFunctionBegin; 379*5c6c1daeSBarry Smith ierr = PetscMemzero(draw->ops,sizeof(struct _PetscDrawOps));CHKERRQ(ierr); 380*5c6c1daeSBarry Smith draw->ops->destroy = PetscDrawDestroy_Null; 381*5c6c1daeSBarry Smith draw->ops->view = 0; 382*5c6c1daeSBarry Smith draw->pause = 0.0; 383*5c6c1daeSBarry Smith draw->coor_xl = 0.0; draw->coor_xr = 1.0; 384*5c6c1daeSBarry Smith draw->coor_yl = 0.0; draw->coor_yr = 1.0; 385*5c6c1daeSBarry Smith draw->port_xl = 0.0; draw->port_xr = 1.0; 386*5c6c1daeSBarry Smith draw->port_yl = 0.0; draw->port_yr = 1.0; 387*5c6c1daeSBarry Smith draw->popup = 0; 388*5c6c1daeSBarry Smith 389*5c6c1daeSBarry Smith PetscFunctionReturn(0); 390*5c6c1daeSBarry Smith } 391*5c6c1daeSBarry Smith EXTERN_C_END 392*5c6c1daeSBarry Smith 393*5c6c1daeSBarry Smith #undef __FUNCT__ 394*5c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawGetSingleton" 395*5c6c1daeSBarry Smith /*@C 396*5c6c1daeSBarry Smith PetscDrawGetSingleton - Gain access to a PetscDraw object as if it were owned 397*5c6c1daeSBarry Smith by the one process. 398*5c6c1daeSBarry Smith 399*5c6c1daeSBarry Smith Collective on PetscDraw 400*5c6c1daeSBarry Smith 401*5c6c1daeSBarry Smith Input Parameter: 402*5c6c1daeSBarry Smith . draw - the original window 403*5c6c1daeSBarry Smith 404*5c6c1daeSBarry Smith Output Parameter: 405*5c6c1daeSBarry Smith . sdraw - the singleton window 406*5c6c1daeSBarry Smith 407*5c6c1daeSBarry Smith Level: advanced 408*5c6c1daeSBarry Smith 409*5c6c1daeSBarry Smith .seealso: PetscDrawRestoreSingleton(), PetscViewerGetSingleton(), PetscViewerRestoreSingleton() 410*5c6c1daeSBarry Smith 411*5c6c1daeSBarry Smith @*/ 412*5c6c1daeSBarry Smith PetscErrorCode PetscDrawGetSingleton(PetscDraw draw,PetscDraw *sdraw) 413*5c6c1daeSBarry Smith { 414*5c6c1daeSBarry Smith PetscErrorCode ierr; 415*5c6c1daeSBarry Smith PetscMPIInt size; 416*5c6c1daeSBarry Smith 417*5c6c1daeSBarry Smith PetscFunctionBegin; 418*5c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 419*5c6c1daeSBarry Smith PetscValidPointer(sdraw,2); 420*5c6c1daeSBarry Smith 421*5c6c1daeSBarry Smith ierr = MPI_Comm_size(((PetscObject)draw)->comm,&size);CHKERRQ(ierr); 422*5c6c1daeSBarry Smith if (size == 1) { 423*5c6c1daeSBarry Smith *sdraw = draw; 424*5c6c1daeSBarry Smith } else { 425*5c6c1daeSBarry Smith if (draw->ops->getsingleton) { 426*5c6c1daeSBarry Smith ierr = (*draw->ops->getsingleton)(draw,sdraw);CHKERRQ(ierr); 427*5c6c1daeSBarry Smith } else SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_SUP,"Cannot get singleton for this type %s of draw object",((PetscObject)draw)->type_name); 428*5c6c1daeSBarry Smith } 429*5c6c1daeSBarry Smith PetscFunctionReturn(0); 430*5c6c1daeSBarry Smith } 431*5c6c1daeSBarry Smith 432*5c6c1daeSBarry Smith #undef __FUNCT__ 433*5c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawRestoreSingleton" 434*5c6c1daeSBarry Smith /*@C 435*5c6c1daeSBarry Smith PetscDrawRestoreSingleton - Remove access to a PetscDraw object as if it were owned 436*5c6c1daeSBarry Smith by the one process. 437*5c6c1daeSBarry Smith 438*5c6c1daeSBarry Smith Collective on PetscDraw 439*5c6c1daeSBarry Smith 440*5c6c1daeSBarry Smith Input Parameters: 441*5c6c1daeSBarry Smith + draw - the original window 442*5c6c1daeSBarry Smith - sdraw - the singleton window 443*5c6c1daeSBarry Smith 444*5c6c1daeSBarry Smith Level: advanced 445*5c6c1daeSBarry Smith 446*5c6c1daeSBarry Smith .seealso: PetscDrawGetSingleton(), PetscViewerGetSingleton(), PetscViewerRestoreSingleton() 447*5c6c1daeSBarry Smith 448*5c6c1daeSBarry Smith @*/ 449*5c6c1daeSBarry Smith PetscErrorCode PetscDrawRestoreSingleton(PetscDraw draw,PetscDraw *sdraw) 450*5c6c1daeSBarry Smith { 451*5c6c1daeSBarry Smith PetscErrorCode ierr; 452*5c6c1daeSBarry Smith PetscMPIInt size; 453*5c6c1daeSBarry Smith 454*5c6c1daeSBarry Smith PetscFunctionBegin; 455*5c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 456*5c6c1daeSBarry Smith PetscValidPointer(sdraw,2); 457*5c6c1daeSBarry Smith PetscValidHeaderSpecific(*sdraw,PETSC_DRAW_CLASSID,2); 458*5c6c1daeSBarry Smith 459*5c6c1daeSBarry Smith ierr = MPI_Comm_size(((PetscObject)draw)->comm,&size);CHKERRQ(ierr); 460*5c6c1daeSBarry Smith if (size != 1) { 461*5c6c1daeSBarry Smith if (draw->ops->restoresingleton) { 462*5c6c1daeSBarry Smith ierr = (*draw->ops->restoresingleton)(draw,sdraw);CHKERRQ(ierr); 463*5c6c1daeSBarry Smith } else SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_SUP,"Cannot restore singleton for this type %s of draw object",((PetscObject)draw)->type_name); 464*5c6c1daeSBarry Smith } 465*5c6c1daeSBarry Smith PetscFunctionReturn(0); 466*5c6c1daeSBarry Smith } 467*5c6c1daeSBarry Smith 468*5c6c1daeSBarry Smith 469*5c6c1daeSBarry Smith 470*5c6c1daeSBarry Smith 471*5c6c1daeSBarry Smith 472*5c6c1daeSBarry Smith 473*5c6c1daeSBarry Smith 474