15c6c1daeSBarry Smith 25c6c1daeSBarry Smith /* 35c6c1daeSBarry Smith Provides the calling sequences for all the basic PetscDraw routines. 45c6c1daeSBarry Smith */ 5af0996ceSBarry Smith #include <petsc/private/drawimpl.h> /*I "petscdraw.h" I*/ 6665c2dedSJed Brown #include <petscviewer.h> 75c6c1daeSBarry Smith 85c6c1daeSBarry Smith PetscClassId PETSC_DRAW_CLASSID; 95c6c1daeSBarry Smith 105c6c1daeSBarry Smith static PetscBool PetscDrawPackageInitialized = PETSC_FALSE; 115c6c1daeSBarry Smith /*@C 125c6c1daeSBarry Smith PetscDrawFinalizePackage - This function destroys everything in the Petsc interface to the Draw package. It is 135c6c1daeSBarry Smith called from PetscFinalize(). 145c6c1daeSBarry Smith 155c6c1daeSBarry Smith Level: developer 165c6c1daeSBarry Smith 175c6c1daeSBarry Smith .keywords: Petsc, destroy, package, mathematica 185c6c1daeSBarry Smith .seealso: PetscFinalize() 195c6c1daeSBarry Smith @*/ 205c6c1daeSBarry Smith PetscErrorCode PetscDrawFinalizePackage(void) 215c6c1daeSBarry Smith { 2237e93019SBarry Smith PetscErrorCode ierr; 2337e93019SBarry Smith 245c6c1daeSBarry Smith PetscFunctionBegin; 2537e93019SBarry Smith ierr = PetscFunctionListDestroy(&PetscDrawList);CHKERRQ(ierr); 265c6c1daeSBarry Smith PetscDrawPackageInitialized = PETSC_FALSE; 270f51fdf8SToby Isaac PetscDrawRegisterAllCalled = PETSC_FALSE; 285c6c1daeSBarry Smith PetscFunctionReturn(0); 295c6c1daeSBarry Smith } 305c6c1daeSBarry Smith 315c6c1daeSBarry Smith /*@C 325c6c1daeSBarry Smith PetscInitializeDrawPackage - This function initializes everything in the PetscDraw package. It is called 335c6c1daeSBarry Smith from PetscDLLibraryRegister() when using dynamic libraries, and on the call to PetscInitialize() 345c6c1daeSBarry Smith when using static libraries. 355c6c1daeSBarry Smith 365c6c1daeSBarry Smith Level: developer 375c6c1daeSBarry Smith 385c6c1daeSBarry Smith .keywords: Petsc, initialize, package 395c6c1daeSBarry Smith .seealso: PetscInitialize() 405c6c1daeSBarry Smith @*/ 41607a6623SBarry Smith PetscErrorCode PetscDrawInitializePackage(void) 425c6c1daeSBarry Smith { 435c6c1daeSBarry Smith char logList[256]; 445c6c1daeSBarry Smith char *className; 455c6c1daeSBarry Smith PetscBool opt; 465c6c1daeSBarry Smith PetscErrorCode ierr; 475c6c1daeSBarry Smith 485c6c1daeSBarry Smith PetscFunctionBegin; 495c6c1daeSBarry Smith if (PetscDrawPackageInitialized) PetscFunctionReturn(0); 505c6c1daeSBarry Smith PetscDrawPackageInitialized = PETSC_TRUE; 515c6c1daeSBarry Smith /* Register Classes */ 525c6c1daeSBarry Smith ierr = PetscClassIdRegister("Draw",&PETSC_DRAW_CLASSID);CHKERRQ(ierr); 5371917b75SLisandro Dalcin ierr = PetscClassIdRegister("Draw Axis",&PETSC_DRAWAXIS_CLASSID);CHKERRQ(ierr); 545c6c1daeSBarry Smith ierr = PetscClassIdRegister("Line Graph",&PETSC_DRAWLG_CLASSID);CHKERRQ(ierr); 555c6c1daeSBarry Smith ierr = PetscClassIdRegister("Histogram",&PETSC_DRAWHG_CLASSID);CHKERRQ(ierr); 5671917b75SLisandro Dalcin ierr = PetscClassIdRegister("Bar Graph",&PETSC_DRAWBAR_CLASSID);CHKERRQ(ierr); 575c6c1daeSBarry Smith ierr = PetscClassIdRegister("Scatter Plot",&PETSC_DRAWSP_CLASSID);CHKERRQ(ierr); 585c6c1daeSBarry Smith /* Register Constructors */ 59607a6623SBarry Smith ierr = PetscDrawRegisterAll();CHKERRQ(ierr); 605c6c1daeSBarry Smith /* Process info exclusions */ 61c5929fdfSBarry Smith ierr = PetscOptionsGetString(NULL,NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr); 625c6c1daeSBarry Smith if (opt) { 635c6c1daeSBarry Smith ierr = PetscStrstr(logList, "draw", &className);CHKERRQ(ierr); 645c6c1daeSBarry Smith if (className) { 655c6c1daeSBarry Smith ierr = PetscInfoDeactivateClass(0);CHKERRQ(ierr); 665c6c1daeSBarry Smith } 675c6c1daeSBarry Smith } 685c6c1daeSBarry Smith /* Process summary exclusions */ 697bf5a629SBarry Smith ierr = PetscOptionsGetString(NULL,NULL, "-log_exclude", logList, 256, &opt);CHKERRQ(ierr); 705c6c1daeSBarry Smith if (opt) { 715c6c1daeSBarry Smith ierr = PetscStrstr(logList, "draw", &className);CHKERRQ(ierr); 725c6c1daeSBarry Smith if (className) { 735c6c1daeSBarry Smith ierr = PetscLogEventDeactivateClass(0);CHKERRQ(ierr); 745c6c1daeSBarry Smith } 755c6c1daeSBarry Smith } 765c6c1daeSBarry Smith ierr = PetscRegisterFinalize(PetscDrawFinalizePackage);CHKERRQ(ierr); 775c6c1daeSBarry Smith PetscFunctionReturn(0); 785c6c1daeSBarry Smith } 795c6c1daeSBarry Smith 805c6c1daeSBarry Smith /*@ 815c6c1daeSBarry Smith PetscDrawResizeWindow - Allows one to resize a window from a program. 825c6c1daeSBarry Smith 835c6c1daeSBarry Smith Collective on PetscDraw 845c6c1daeSBarry Smith 855c6c1daeSBarry Smith Input Parameter: 865c6c1daeSBarry Smith + draw - the window 875c6c1daeSBarry Smith - w,h - the new width and height of the window 885c6c1daeSBarry Smith 895c6c1daeSBarry Smith Level: intermediate 905c6c1daeSBarry Smith 915c6c1daeSBarry Smith .seealso: PetscDrawCheckResizedWindow() 925c6c1daeSBarry Smith @*/ 935c6c1daeSBarry Smith PetscErrorCode PetscDrawResizeWindow(PetscDraw draw,int w,int h) 945c6c1daeSBarry Smith { 955c6c1daeSBarry Smith PetscErrorCode ierr; 965fd66863SKarl Rupp 975c6c1daeSBarry Smith PetscFunctionBegin; 9873ecf448SLisandro Dalcin PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 9973ecf448SLisandro Dalcin PetscValidLogicalCollectiveInt(draw,w,2); 10073ecf448SLisandro Dalcin PetscValidLogicalCollectiveInt(draw,h,3); 1015c6c1daeSBarry Smith if (draw->ops->resizewindow) { 1025c6c1daeSBarry Smith ierr = (*draw->ops->resizewindow)(draw,w,h);CHKERRQ(ierr); 1035c6c1daeSBarry Smith } 1045c6c1daeSBarry Smith PetscFunctionReturn(0); 1055c6c1daeSBarry Smith } 1065c6c1daeSBarry Smith 10773ecf448SLisandro Dalcin /*@ 10873ecf448SLisandro Dalcin PetscDrawGetWindowSize - Gets the size of the window. 10973ecf448SLisandro Dalcin 11073ecf448SLisandro Dalcin Not collective 11173ecf448SLisandro Dalcin 11273ecf448SLisandro Dalcin Input Parameter: 11373ecf448SLisandro Dalcin . draw - the window 11473ecf448SLisandro Dalcin 11573ecf448SLisandro Dalcin Output Parameters: 11673ecf448SLisandro Dalcin . w,h - the window width and height 11773ecf448SLisandro Dalcin 11873ecf448SLisandro Dalcin Level: intermediate 11973ecf448SLisandro Dalcin 12073ecf448SLisandro Dalcin .seealso: PetscDrawResizeWindow(), PetscDrawCheckResizedWindow() 12173ecf448SLisandro Dalcin @*/ 12273ecf448SLisandro Dalcin PetscErrorCode PetscDrawGetWindowSize(PetscDraw draw,int *w,int *h) 12373ecf448SLisandro Dalcin { 12473ecf448SLisandro Dalcin PetscFunctionBegin; 12573ecf448SLisandro Dalcin PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 12673ecf448SLisandro Dalcin if (w) PetscValidPointer(w,2); 12773ecf448SLisandro Dalcin if (h) PetscValidPointer(h,3); 12873ecf448SLisandro Dalcin if (w) *w = draw->w; 12973ecf448SLisandro Dalcin if (h) *h = draw->h; 13073ecf448SLisandro Dalcin PetscFunctionReturn(0); 13173ecf448SLisandro Dalcin } 13273ecf448SLisandro Dalcin 1335c6c1daeSBarry Smith /*@ 1345c6c1daeSBarry Smith PetscDrawCheckResizedWindow - Checks if the user has resized the window. 1355c6c1daeSBarry Smith 1365c6c1daeSBarry Smith Collective on PetscDraw 1375c6c1daeSBarry Smith 1385c6c1daeSBarry Smith Input Parameter: 1395c6c1daeSBarry Smith . draw - the window 1405c6c1daeSBarry Smith 1415c6c1daeSBarry Smith Level: advanced 1425c6c1daeSBarry Smith 1435c6c1daeSBarry Smith .seealso: PetscDrawResizeWindow() 1445c6c1daeSBarry Smith 1455c6c1daeSBarry Smith @*/ 1465c6c1daeSBarry Smith PetscErrorCode PetscDrawCheckResizedWindow(PetscDraw draw) 1475c6c1daeSBarry Smith { 1485c6c1daeSBarry Smith PetscErrorCode ierr; 1495fd66863SKarl Rupp 1505c6c1daeSBarry Smith PetscFunctionBegin; 15173ecf448SLisandro Dalcin PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 1525c6c1daeSBarry Smith if (draw->ops->checkresizedwindow) { 1535c6c1daeSBarry Smith ierr = (*draw->ops->checkresizedwindow)(draw);CHKERRQ(ierr); 1545c6c1daeSBarry Smith } 1555c6c1daeSBarry Smith PetscFunctionReturn(0); 1565c6c1daeSBarry Smith } 1575c6c1daeSBarry Smith 1585c6c1daeSBarry Smith /*@C 1595c6c1daeSBarry Smith PetscDrawGetTitle - Gets pointer to title of a PetscDraw context. 1605c6c1daeSBarry Smith 1615c6c1daeSBarry Smith Not collective 1625c6c1daeSBarry Smith 1635c6c1daeSBarry Smith Input Parameter: 1645c6c1daeSBarry Smith . draw - the graphics context 1655c6c1daeSBarry Smith 1665c6c1daeSBarry Smith Output Parameter: 1675c6c1daeSBarry Smith . title - the title 1685c6c1daeSBarry Smith 1695c6c1daeSBarry Smith Level: intermediate 1705c6c1daeSBarry Smith 1715c6c1daeSBarry Smith .seealso: PetscDrawSetTitle() 1725c6c1daeSBarry Smith @*/ 1735c6c1daeSBarry Smith PetscErrorCode PetscDrawGetTitle(PetscDraw draw,char **title) 1745c6c1daeSBarry Smith { 1755c6c1daeSBarry Smith PetscFunctionBegin; 1765c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 1775c6c1daeSBarry Smith PetscValidPointer(title,2); 1785c6c1daeSBarry Smith *title = draw->title; 1795c6c1daeSBarry Smith PetscFunctionReturn(0); 1805c6c1daeSBarry Smith } 1815c6c1daeSBarry Smith 1825c6c1daeSBarry Smith /*@C 1835c6c1daeSBarry Smith PetscDrawSetTitle - Sets the title of a PetscDraw context. 1845c6c1daeSBarry Smith 1855b399a63SLisandro Dalcin Collective on PetscDraw 1865c6c1daeSBarry Smith 1875c6c1daeSBarry Smith Input Parameters: 1885c6c1daeSBarry Smith + draw - the graphics context 1895c6c1daeSBarry Smith - title - the title 1905c6c1daeSBarry Smith 1915c6c1daeSBarry Smith Level: intermediate 1925c6c1daeSBarry Smith 193231a95f8SBarry Smith Note: The title is positioned in the windowing system title bar for the window. Hence it will not be saved with -draw_save 194231a95f8SBarry Smith in the image. 195231a95f8SBarry Smith 1965c6c1daeSBarry Smith A copy of the string is made, so you may destroy the 1975c6c1daeSBarry Smith title string after calling this routine. 1985c6c1daeSBarry Smith 199231a95f8SBarry Smith You can use PetscDrawAxisSetLabels() to indicate a title within the window 200231a95f8SBarry Smith 2015c6c1daeSBarry Smith .seealso: PetscDrawGetTitle(), PetscDrawAppendTitle() 2025c6c1daeSBarry Smith @*/ 2035c6c1daeSBarry Smith PetscErrorCode PetscDrawSetTitle(PetscDraw draw,const char title[]) 2045c6c1daeSBarry Smith { 2055c6c1daeSBarry Smith PetscErrorCode ierr; 2065fd66863SKarl Rupp 2075c6c1daeSBarry Smith PetscFunctionBegin; 2085c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 2095c6c1daeSBarry Smith PetscValidCharPointer(title,2); 2105c6c1daeSBarry Smith ierr = PetscFree(draw->title);CHKERRQ(ierr); 2115c6c1daeSBarry Smith ierr = PetscStrallocpy(title,&draw->title);CHKERRQ(ierr); 2125c6c1daeSBarry Smith if (draw->ops->settitle) { 213815f00f0SLisandro Dalcin ierr = (*draw->ops->settitle)(draw,draw->title);CHKERRQ(ierr); 2145c6c1daeSBarry Smith } 2155c6c1daeSBarry Smith PetscFunctionReturn(0); 2165c6c1daeSBarry Smith } 2175c6c1daeSBarry Smith 2185c6c1daeSBarry Smith /*@C 2195c6c1daeSBarry Smith PetscDrawAppendTitle - Appends to the title of a PetscDraw context. 2205c6c1daeSBarry Smith 2215b399a63SLisandro Dalcin Collective on PetscDraw 2225c6c1daeSBarry Smith 2235c6c1daeSBarry Smith Input Parameters: 2245c6c1daeSBarry Smith + draw - the graphics context 2255c6c1daeSBarry Smith - title - the title 2265c6c1daeSBarry Smith 2275c6c1daeSBarry Smith Note: 2285c6c1daeSBarry Smith A copy of the string is made, so you may destroy the 2295c6c1daeSBarry Smith title string after calling this routine. 2305c6c1daeSBarry Smith 2315c6c1daeSBarry Smith Level: advanced 2325c6c1daeSBarry Smith 2335c6c1daeSBarry Smith .seealso: PetscDrawSetTitle(), PetscDrawGetTitle() 2345c6c1daeSBarry Smith @*/ 2355c6c1daeSBarry Smith PetscErrorCode PetscDrawAppendTitle(PetscDraw draw,const char title[]) 2365c6c1daeSBarry Smith { 2375c6c1daeSBarry Smith PetscErrorCode ierr; 2385c6c1daeSBarry Smith 2395c6c1daeSBarry Smith PetscFunctionBegin; 2405c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 2415b399a63SLisandro Dalcin if (title) PetscValidCharPointer(title,2); 2425b399a63SLisandro Dalcin if (!title || !title[0]) PetscFunctionReturn(0); 2435c6c1daeSBarry Smith 2445c6c1daeSBarry Smith if (draw->title) { 2455b399a63SLisandro Dalcin size_t len1,len2; 2465b399a63SLisandro Dalcin char *newtitle; 2475c6c1daeSBarry Smith ierr = PetscStrlen(title,&len1);CHKERRQ(ierr); 2485c6c1daeSBarry Smith ierr = PetscStrlen(draw->title,&len2);CHKERRQ(ierr); 2495b399a63SLisandro Dalcin ierr = PetscMalloc1(len1 + len2 + 1,&newtitle);CHKERRQ(ierr); 2505c6c1daeSBarry Smith ierr = PetscStrcpy(newtitle,draw->title);CHKERRQ(ierr); 2515c6c1daeSBarry Smith ierr = PetscStrcat(newtitle,title);CHKERRQ(ierr); 2525c6c1daeSBarry Smith ierr = PetscFree(draw->title);CHKERRQ(ierr); 2535c6c1daeSBarry Smith draw->title = newtitle; 2545c6c1daeSBarry Smith } else { 2555c6c1daeSBarry Smith ierr = PetscStrallocpy(title,&draw->title);CHKERRQ(ierr); 2565c6c1daeSBarry Smith } 2575c6c1daeSBarry Smith if (draw->ops->settitle) { 2585c6c1daeSBarry Smith ierr = (*draw->ops->settitle)(draw,draw->title);CHKERRQ(ierr); 2595c6c1daeSBarry Smith } 2605c6c1daeSBarry Smith PetscFunctionReturn(0); 2615c6c1daeSBarry Smith } 2625c6c1daeSBarry Smith 263e118a51fSLisandro Dalcin static PetscErrorCode PetscDrawDestroy_Private(PetscDraw draw) 264e118a51fSLisandro Dalcin { 265e118a51fSLisandro Dalcin PetscErrorCode ierr; 266e118a51fSLisandro Dalcin 267e118a51fSLisandro Dalcin PetscFunctionBegin; 2688067a7d5SLisandro Dalcin if (!draw->ops->save && !draw->ops->getimage) PetscFunctionReturn(0); 26949c04938SLisandro Dalcin ierr = PetscDrawSaveMovie(draw);CHKERRQ(ierr); 270e118a51fSLisandro Dalcin if (draw->savefinalfilename) { 271df8d4941SLisandro Dalcin draw->savesinglefile = PETSC_TRUE; 27249c04938SLisandro Dalcin ierr = PetscDrawSetSave(draw,draw->savefinalfilename);CHKERRQ(ierr); 273e118a51fSLisandro Dalcin ierr = PetscDrawSave(draw);CHKERRQ(ierr); 274e118a51fSLisandro Dalcin } 275e118a51fSLisandro Dalcin ierr = PetscBarrier((PetscObject)draw);CHKERRQ(ierr); 276e118a51fSLisandro Dalcin PetscFunctionReturn(0); 277e118a51fSLisandro Dalcin } 278e118a51fSLisandro Dalcin 2795c6c1daeSBarry Smith /*@ 2805c6c1daeSBarry Smith PetscDrawDestroy - Deletes a draw context. 2815c6c1daeSBarry Smith 2825c6c1daeSBarry Smith Collective on PetscDraw 2835c6c1daeSBarry Smith 2845c6c1daeSBarry Smith Input Parameters: 2855c6c1daeSBarry Smith . draw - the drawing context 2865c6c1daeSBarry Smith 2875c6c1daeSBarry Smith Level: beginner 2885c6c1daeSBarry Smith 2895c6c1daeSBarry Smith .seealso: PetscDrawCreate() 2905c6c1daeSBarry Smith 2915c6c1daeSBarry Smith @*/ 2925c6c1daeSBarry Smith PetscErrorCode PetscDrawDestroy(PetscDraw *draw) 2935c6c1daeSBarry Smith { 2945c6c1daeSBarry Smith PetscErrorCode ierr; 2955fd66863SKarl Rupp 2965c6c1daeSBarry Smith PetscFunctionBegin; 2975c6c1daeSBarry Smith if (!*draw) PetscFunctionReturn(0); 2985c6c1daeSBarry Smith PetscValidHeaderSpecific(*draw,PETSC_DRAW_CLASSID,1); 2995c6c1daeSBarry Smith if (--((PetscObject)(*draw))->refct > 0) PetscFunctionReturn(0); 3005c6c1daeSBarry Smith 3015c6c1daeSBarry Smith if ((*draw)->pause == -2) { 3025c6c1daeSBarry Smith (*draw)->pause = -1; 3035c6c1daeSBarry Smith ierr = PetscDrawPause(*draw);CHKERRQ(ierr); 3045c6c1daeSBarry Smith } 3055c6c1daeSBarry Smith 3065c6c1daeSBarry Smith /* if memory was published then destroy it */ 307e04113cfSBarry Smith ierr = PetscObjectSAWsViewOff((PetscObject)*draw);CHKERRQ(ierr); 3085c6c1daeSBarry Smith 309e118a51fSLisandro Dalcin ierr = PetscDrawDestroy_Private(*draw);CHKERRQ(ierr); 310e118a51fSLisandro Dalcin 3115c6c1daeSBarry Smith if ((*draw)->ops->destroy) { 3125c6c1daeSBarry Smith ierr = (*(*draw)->ops->destroy)(*draw);CHKERRQ(ierr); 3135c6c1daeSBarry Smith } 314e118a51fSLisandro Dalcin ierr = PetscDrawDestroy(&(*draw)->popup);CHKERRQ(ierr); 3155c6c1daeSBarry Smith ierr = PetscFree((*draw)->title);CHKERRQ(ierr); 3165c6c1daeSBarry Smith ierr = PetscFree((*draw)->display);CHKERRQ(ierr); 3175c6c1daeSBarry Smith ierr = PetscFree((*draw)->savefilename);CHKERRQ(ierr); 3188067a7d5SLisandro Dalcin ierr = PetscFree((*draw)->saveimageext);CHKERRQ(ierr); 3198067a7d5SLisandro Dalcin ierr = PetscFree((*draw)->savemovieext);CHKERRQ(ierr); 320287de1a7SBarry Smith ierr = PetscFree((*draw)->savefinalfilename);CHKERRQ(ierr); 3215c6c1daeSBarry Smith ierr = PetscHeaderDestroy(draw);CHKERRQ(ierr); 3225c6c1daeSBarry Smith PetscFunctionReturn(0); 3235c6c1daeSBarry Smith } 3245c6c1daeSBarry Smith 3255c6c1daeSBarry Smith /*@ 3265c6c1daeSBarry Smith PetscDrawGetPopup - Creates a popup window associated with a PetscDraw window. 3275c6c1daeSBarry Smith 3285c6c1daeSBarry Smith Collective on PetscDraw 3295c6c1daeSBarry Smith 3305c6c1daeSBarry Smith Input Parameter: 3315c6c1daeSBarry Smith . draw - the original window 3325c6c1daeSBarry Smith 3335c6c1daeSBarry Smith Output Parameter: 3345c6c1daeSBarry Smith . popup - the new popup window 3355c6c1daeSBarry Smith 3365c6c1daeSBarry Smith Level: advanced 3375c6c1daeSBarry Smith 338ba1e01c4SBarry Smith .seealso: PetscDrawScalePopup(), PetscDrawCreate() 339ba1e01c4SBarry Smith 3405c6c1daeSBarry Smith @*/ 3415c6c1daeSBarry Smith PetscErrorCode PetscDrawGetPopup(PetscDraw draw,PetscDraw *popup) 3425c6c1daeSBarry Smith { 3435c6c1daeSBarry Smith PetscErrorCode ierr; 3445fd66863SKarl Rupp 3455c6c1daeSBarry Smith PetscFunctionBegin; 3465c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 3475c6c1daeSBarry Smith PetscValidPointer(popup,2); 3485c6c1daeSBarry Smith 349a297a907SKarl Rupp if (draw->popup) *popup = draw->popup; 350a297a907SKarl Rupp else if (draw->ops->getpopup) { 3515c6c1daeSBarry Smith ierr = (*draw->ops->getpopup)(draw,popup);CHKERRQ(ierr); 3520b874712SBarry Smith if (*popup) { 3530b874712SBarry Smith ierr = PetscObjectSetOptionsPrefix((PetscObject)*popup,"popup_");CHKERRQ(ierr); 354e118a51fSLisandro Dalcin (*popup)->pause = 0.0; 3550b874712SBarry Smith ierr = PetscDrawSetFromOptions(*popup);CHKERRQ(ierr); 35661f59835SBarry Smith } 3570298fd71SBarry Smith } else *popup = NULL; 3585c6c1daeSBarry Smith PetscFunctionReturn(0); 3595c6c1daeSBarry Smith } 3605c6c1daeSBarry Smith 361*94ef8ddeSSatish Balay /*@C 3625c6c1daeSBarry Smith PetscDrawSetDisplay - Sets the display where a PetscDraw object will be displayed 3635c6c1daeSBarry Smith 3645c6c1daeSBarry Smith Input Parameter: 3655c6c1daeSBarry Smith + draw - the drawing context 3665c6c1daeSBarry Smith - display - the X windows display 3675c6c1daeSBarry Smith 3685c6c1daeSBarry Smith Level: advanced 3695c6c1daeSBarry Smith 370ba1e01c4SBarry Smith .seealso: PetscDrawCreate() 371ba1e01c4SBarry Smith 3725c6c1daeSBarry Smith @*/ 3735c6c1daeSBarry Smith PetscErrorCode PetscDrawSetDisplay(PetscDraw draw,const char display[]) 3745c6c1daeSBarry Smith { 3755c6c1daeSBarry Smith PetscErrorCode ierr; 3765c6c1daeSBarry Smith 3775c6c1daeSBarry Smith PetscFunctionBegin; 3785c6c1daeSBarry Smith ierr = PetscFree(draw->display);CHKERRQ(ierr); 3795c6c1daeSBarry Smith ierr = PetscStrallocpy(display,&draw->display);CHKERRQ(ierr); 3805c6c1daeSBarry Smith PetscFunctionReturn(0); 3815c6c1daeSBarry Smith } 3825c6c1daeSBarry Smith 38345f3bb6eSLisandro Dalcin 38445f3bb6eSLisandro Dalcin /*@ 38545f3bb6eSLisandro Dalcin PetscDrawSetDoubleBuffer - Sets a window to be double buffered. 38645f3bb6eSLisandro Dalcin 38745f3bb6eSLisandro Dalcin Logically Collective on PetscDraw 3885c6c1daeSBarry Smith 3895c6c1daeSBarry Smith Input Parameter: 39045f3bb6eSLisandro Dalcin . draw - the drawing context 39145f3bb6eSLisandro Dalcin 39245f3bb6eSLisandro Dalcin Level: intermediate 39345f3bb6eSLisandro Dalcin 39445f3bb6eSLisandro Dalcin Concepts: drawing^double buffer 39545f3bb6eSLisandro Dalcin Concepts: graphics^double buffer 39645f3bb6eSLisandro Dalcin Concepts: double buffer 39745f3bb6eSLisandro Dalcin 39845f3bb6eSLisandro Dalcin @*/ 39945f3bb6eSLisandro Dalcin PetscErrorCode PetscDrawSetDoubleBuffer(PetscDraw draw) 4005c6c1daeSBarry Smith { 4015c6c1daeSBarry Smith PetscErrorCode ierr; 4025c6c1daeSBarry Smith 4035c6c1daeSBarry Smith PetscFunctionBegin; 40445f3bb6eSLisandro Dalcin PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 40545f3bb6eSLisandro Dalcin if (draw->ops->setdoublebuffer) { 40645f3bb6eSLisandro Dalcin ierr = (*draw->ops->setdoublebuffer)(draw);CHKERRQ(ierr); 40745f3bb6eSLisandro Dalcin } 4085c6c1daeSBarry Smith PetscFunctionReturn(0); 4095c6c1daeSBarry Smith } 4105c6c1daeSBarry Smith 4115c6c1daeSBarry Smith /*@C 4125c6c1daeSBarry Smith PetscDrawGetSingleton - Gain access to a PetscDraw object as if it were owned 4135c6c1daeSBarry Smith by the one process. 4145c6c1daeSBarry Smith 4155c6c1daeSBarry Smith Collective on PetscDraw 4165c6c1daeSBarry Smith 4175c6c1daeSBarry Smith Input Parameter: 4185c6c1daeSBarry Smith . draw - the original window 4195c6c1daeSBarry Smith 4205c6c1daeSBarry Smith Output Parameter: 4215c6c1daeSBarry Smith . sdraw - the singleton window 4225c6c1daeSBarry Smith 4235c6c1daeSBarry Smith Level: advanced 4245c6c1daeSBarry Smith 4255c6c1daeSBarry Smith .seealso: PetscDrawRestoreSingleton(), PetscViewerGetSingleton(), PetscViewerRestoreSingleton() 4265c6c1daeSBarry Smith 4275c6c1daeSBarry Smith @*/ 4285c6c1daeSBarry Smith PetscErrorCode PetscDrawGetSingleton(PetscDraw draw,PetscDraw *sdraw) 4295c6c1daeSBarry Smith { 4305c6c1daeSBarry Smith PetscErrorCode ierr; 4315c6c1daeSBarry Smith PetscMPIInt size; 4325c6c1daeSBarry Smith 4335c6c1daeSBarry Smith PetscFunctionBegin; 4345c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 4355c6c1daeSBarry Smith PetscValidPointer(sdraw,2); 4365c6c1daeSBarry Smith 437ce94432eSBarry Smith ierr = MPI_Comm_size(PetscObjectComm((PetscObject)draw),&size);CHKERRQ(ierr); 438387ef4f7SLisandro Dalcin if (size == 1) { 439387ef4f7SLisandro Dalcin ierr = PetscObjectReference((PetscObject)draw);CHKERRQ(ierr); 440387ef4f7SLisandro Dalcin *sdraw = draw; 441387ef4f7SLisandro Dalcin } else { 4425c6c1daeSBarry Smith if (draw->ops->getsingleton) { 4435c6c1daeSBarry Smith ierr = (*draw->ops->getsingleton)(draw,sdraw);CHKERRQ(ierr); 4445c6c1daeSBarry Smith } else SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_SUP,"Cannot get singleton for this type %s of draw object",((PetscObject)draw)->type_name); 4455c6c1daeSBarry Smith } 4465c6c1daeSBarry Smith PetscFunctionReturn(0); 4475c6c1daeSBarry Smith } 4485c6c1daeSBarry Smith 4495c6c1daeSBarry Smith /*@C 4505c6c1daeSBarry Smith PetscDrawRestoreSingleton - Remove access to a PetscDraw object as if it were owned 4515c6c1daeSBarry Smith by the one process. 4525c6c1daeSBarry Smith 4535c6c1daeSBarry Smith Collective on PetscDraw 4545c6c1daeSBarry Smith 4555c6c1daeSBarry Smith Input Parameters: 4565c6c1daeSBarry Smith + draw - the original window 4575c6c1daeSBarry Smith - sdraw - the singleton window 4585c6c1daeSBarry Smith 4595c6c1daeSBarry Smith Level: advanced 4605c6c1daeSBarry Smith 4615c6c1daeSBarry Smith .seealso: PetscDrawGetSingleton(), PetscViewerGetSingleton(), PetscViewerRestoreSingleton() 4625c6c1daeSBarry Smith 4635c6c1daeSBarry Smith @*/ 4645c6c1daeSBarry Smith PetscErrorCode PetscDrawRestoreSingleton(PetscDraw draw,PetscDraw *sdraw) 4655c6c1daeSBarry Smith { 4665c6c1daeSBarry Smith PetscErrorCode ierr; 4675c6c1daeSBarry Smith PetscMPIInt size; 4685c6c1daeSBarry Smith 4695c6c1daeSBarry Smith PetscFunctionBegin; 4705c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 4715c6c1daeSBarry Smith PetscValidPointer(sdraw,2); 4725c6c1daeSBarry Smith PetscValidHeaderSpecific(*sdraw,PETSC_DRAW_CLASSID,2); 4735c6c1daeSBarry Smith 474ce94432eSBarry Smith ierr = MPI_Comm_size(PetscObjectComm((PetscObject)draw),&size);CHKERRQ(ierr); 475387ef4f7SLisandro Dalcin if (size == 1) { 476387ef4f7SLisandro Dalcin if (draw == *sdraw) { 477387ef4f7SLisandro Dalcin ierr = PetscObjectDereference((PetscObject)draw);CHKERRQ(ierr); 478387ef4f7SLisandro Dalcin *sdraw = NULL; 479387ef4f7SLisandro Dalcin } else SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Cannot restore singleton, it is not the parent draw"); 480387ef4f7SLisandro Dalcin } else { 4815c6c1daeSBarry Smith if (draw->ops->restoresingleton) { 4825c6c1daeSBarry Smith ierr = (*draw->ops->restoresingleton)(draw,sdraw);CHKERRQ(ierr); 4835c6c1daeSBarry Smith } else SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_SUP,"Cannot restore singleton for this type %s of draw object",((PetscObject)draw)->type_name); 4845c6c1daeSBarry Smith } 4855c6c1daeSBarry Smith PetscFunctionReturn(0); 4865c6c1daeSBarry Smith } 487