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 33*8a690491SBarry Smith from PetscDLLibraryRegister_petsc() when using dynamic libraries, and on the call to PetscInitialize() 34*8a690491SBarry Smith when using shared or 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]; 448e81d068SLisandro Dalcin PetscBool opt,pkg; 455c6c1daeSBarry Smith PetscErrorCode ierr; 465c6c1daeSBarry Smith 475c6c1daeSBarry Smith PetscFunctionBegin; 485c6c1daeSBarry Smith if (PetscDrawPackageInitialized) PetscFunctionReturn(0); 495c6c1daeSBarry Smith PetscDrawPackageInitialized = PETSC_TRUE; 505c6c1daeSBarry Smith /* Register Classes */ 515c6c1daeSBarry Smith ierr = PetscClassIdRegister("Draw",&PETSC_DRAW_CLASSID);CHKERRQ(ierr); 5271917b75SLisandro Dalcin ierr = PetscClassIdRegister("Draw Axis",&PETSC_DRAWAXIS_CLASSID);CHKERRQ(ierr); 535c6c1daeSBarry Smith ierr = PetscClassIdRegister("Line Graph",&PETSC_DRAWLG_CLASSID);CHKERRQ(ierr); 545c6c1daeSBarry Smith ierr = PetscClassIdRegister("Histogram",&PETSC_DRAWHG_CLASSID);CHKERRQ(ierr); 5571917b75SLisandro Dalcin ierr = PetscClassIdRegister("Bar Graph",&PETSC_DRAWBAR_CLASSID);CHKERRQ(ierr); 565c6c1daeSBarry Smith ierr = PetscClassIdRegister("Scatter Plot",&PETSC_DRAWSP_CLASSID);CHKERRQ(ierr); 575c6c1daeSBarry Smith /* Register Constructors */ 58607a6623SBarry Smith ierr = PetscDrawRegisterAll();CHKERRQ(ierr); 595c6c1daeSBarry Smith /* Process info exclusions */ 608e81d068SLisandro Dalcin ierr = PetscOptionsGetString(NULL,NULL,"-info_exclude",logList,sizeof(logList),&opt);CHKERRQ(ierr); 615c6c1daeSBarry Smith if (opt) { 628e81d068SLisandro Dalcin ierr = PetscStrInList("draw",logList,',',&pkg);CHKERRQ(ierr); 638e81d068SLisandro Dalcin if (pkg) { 648e81d068SLisandro Dalcin ierr = PetscInfoDeactivateClass(PETSC_DRAW_CLASSID);CHKERRQ(ierr); 658e81d068SLisandro Dalcin ierr = PetscInfoDeactivateClass(PETSC_DRAWAXIS_CLASSID);CHKERRQ(ierr); 668e81d068SLisandro Dalcin ierr = PetscInfoDeactivateClass(PETSC_DRAWLG_CLASSID);CHKERRQ(ierr); 678e81d068SLisandro Dalcin ierr = PetscInfoDeactivateClass(PETSC_DRAWHG_CLASSID);CHKERRQ(ierr); 688e81d068SLisandro Dalcin ierr = PetscInfoDeactivateClass(PETSC_DRAWBAR_CLASSID);CHKERRQ(ierr); 698e81d068SLisandro Dalcin ierr = PetscInfoDeactivateClass(PETSC_DRAWSP_CLASSID);CHKERRQ(ierr); 705c6c1daeSBarry Smith } 715c6c1daeSBarry Smith } 725c6c1daeSBarry Smith /* Process summary exclusions */ 738e81d068SLisandro Dalcin ierr = PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt);CHKERRQ(ierr); 745c6c1daeSBarry Smith if (opt) { 758e81d068SLisandro Dalcin ierr = PetscStrInList("draw",logList,',',&pkg);CHKERRQ(ierr); 768e81d068SLisandro Dalcin if (pkg) { 77fa2bb9feSLisandro Dalcin ierr = PetscLogEventExcludeClass(PETSC_DRAW_CLASSID);CHKERRQ(ierr); 78fa2bb9feSLisandro Dalcin ierr = PetscLogEventExcludeClass(PETSC_DRAWAXIS_CLASSID);CHKERRQ(ierr); 79fa2bb9feSLisandro Dalcin ierr = PetscLogEventExcludeClass(PETSC_DRAWLG_CLASSID);CHKERRQ(ierr); 80fa2bb9feSLisandro Dalcin ierr = PetscLogEventExcludeClass(PETSC_DRAWHG_CLASSID);CHKERRQ(ierr); 81fa2bb9feSLisandro Dalcin ierr = PetscLogEventExcludeClass(PETSC_DRAWBAR_CLASSID);CHKERRQ(ierr); 82fa2bb9feSLisandro Dalcin ierr = PetscLogEventExcludeClass(PETSC_DRAWSP_CLASSID);CHKERRQ(ierr); 835c6c1daeSBarry Smith } 845c6c1daeSBarry Smith } 858e81d068SLisandro Dalcin /* Register package finalizer */ 865c6c1daeSBarry Smith ierr = PetscRegisterFinalize(PetscDrawFinalizePackage);CHKERRQ(ierr); 875c6c1daeSBarry Smith PetscFunctionReturn(0); 885c6c1daeSBarry Smith } 895c6c1daeSBarry Smith 905c6c1daeSBarry Smith /*@ 915c6c1daeSBarry Smith PetscDrawResizeWindow - Allows one to resize a window from a program. 925c6c1daeSBarry Smith 935c6c1daeSBarry Smith Collective on PetscDraw 945c6c1daeSBarry Smith 955c6c1daeSBarry Smith Input Parameter: 965c6c1daeSBarry Smith + draw - the window 975c6c1daeSBarry Smith - w,h - the new width and height of the window 985c6c1daeSBarry Smith 995c6c1daeSBarry Smith Level: intermediate 1005c6c1daeSBarry Smith 1015c6c1daeSBarry Smith .seealso: PetscDrawCheckResizedWindow() 1025c6c1daeSBarry Smith @*/ 1035c6c1daeSBarry Smith PetscErrorCode PetscDrawResizeWindow(PetscDraw draw,int w,int h) 1045c6c1daeSBarry Smith { 1055c6c1daeSBarry Smith PetscErrorCode ierr; 1065fd66863SKarl Rupp 1075c6c1daeSBarry Smith PetscFunctionBegin; 10873ecf448SLisandro Dalcin PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 10973ecf448SLisandro Dalcin PetscValidLogicalCollectiveInt(draw,w,2); 11073ecf448SLisandro Dalcin PetscValidLogicalCollectiveInt(draw,h,3); 1115c6c1daeSBarry Smith if (draw->ops->resizewindow) { 1125c6c1daeSBarry Smith ierr = (*draw->ops->resizewindow)(draw,w,h);CHKERRQ(ierr); 1135c6c1daeSBarry Smith } 1145c6c1daeSBarry Smith PetscFunctionReturn(0); 1155c6c1daeSBarry Smith } 1165c6c1daeSBarry Smith 11773ecf448SLisandro Dalcin /*@ 11873ecf448SLisandro Dalcin PetscDrawGetWindowSize - Gets the size of the window. 11973ecf448SLisandro Dalcin 12073ecf448SLisandro Dalcin Not collective 12173ecf448SLisandro Dalcin 12273ecf448SLisandro Dalcin Input Parameter: 12373ecf448SLisandro Dalcin . draw - the window 12473ecf448SLisandro Dalcin 12573ecf448SLisandro Dalcin Output Parameters: 12673ecf448SLisandro Dalcin . w,h - the window width and height 12773ecf448SLisandro Dalcin 12873ecf448SLisandro Dalcin Level: intermediate 12973ecf448SLisandro Dalcin 13073ecf448SLisandro Dalcin .seealso: PetscDrawResizeWindow(), PetscDrawCheckResizedWindow() 13173ecf448SLisandro Dalcin @*/ 13273ecf448SLisandro Dalcin PetscErrorCode PetscDrawGetWindowSize(PetscDraw draw,int *w,int *h) 13373ecf448SLisandro Dalcin { 13473ecf448SLisandro Dalcin PetscFunctionBegin; 13573ecf448SLisandro Dalcin PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 13673ecf448SLisandro Dalcin if (w) PetscValidPointer(w,2); 13773ecf448SLisandro Dalcin if (h) PetscValidPointer(h,3); 13873ecf448SLisandro Dalcin if (w) *w = draw->w; 13973ecf448SLisandro Dalcin if (h) *h = draw->h; 14073ecf448SLisandro Dalcin PetscFunctionReturn(0); 14173ecf448SLisandro Dalcin } 14273ecf448SLisandro Dalcin 1435c6c1daeSBarry Smith /*@ 1445c6c1daeSBarry Smith PetscDrawCheckResizedWindow - Checks if the user has resized the window. 1455c6c1daeSBarry Smith 1465c6c1daeSBarry Smith Collective on PetscDraw 1475c6c1daeSBarry Smith 1485c6c1daeSBarry Smith Input Parameter: 1495c6c1daeSBarry Smith . draw - the window 1505c6c1daeSBarry Smith 1515c6c1daeSBarry Smith Level: advanced 1525c6c1daeSBarry Smith 1535c6c1daeSBarry Smith .seealso: PetscDrawResizeWindow() 1545c6c1daeSBarry Smith 1555c6c1daeSBarry Smith @*/ 1565c6c1daeSBarry Smith PetscErrorCode PetscDrawCheckResizedWindow(PetscDraw draw) 1575c6c1daeSBarry Smith { 1585c6c1daeSBarry Smith PetscErrorCode ierr; 1595fd66863SKarl Rupp 1605c6c1daeSBarry Smith PetscFunctionBegin; 16173ecf448SLisandro Dalcin PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 1625c6c1daeSBarry Smith if (draw->ops->checkresizedwindow) { 1635c6c1daeSBarry Smith ierr = (*draw->ops->checkresizedwindow)(draw);CHKERRQ(ierr); 1645c6c1daeSBarry Smith } 1655c6c1daeSBarry Smith PetscFunctionReturn(0); 1665c6c1daeSBarry Smith } 1675c6c1daeSBarry Smith 1685c6c1daeSBarry Smith /*@C 1695c6c1daeSBarry Smith PetscDrawGetTitle - Gets pointer to title of a PetscDraw context. 1705c6c1daeSBarry Smith 1715c6c1daeSBarry Smith Not collective 1725c6c1daeSBarry Smith 1735c6c1daeSBarry Smith Input Parameter: 1745c6c1daeSBarry Smith . draw - the graphics context 1755c6c1daeSBarry Smith 1765c6c1daeSBarry Smith Output Parameter: 1775c6c1daeSBarry Smith . title - the title 1785c6c1daeSBarry Smith 1795c6c1daeSBarry Smith Level: intermediate 1805c6c1daeSBarry Smith 1815c6c1daeSBarry Smith .seealso: PetscDrawSetTitle() 1825c6c1daeSBarry Smith @*/ 183f60c72e3SLisandro Dalcin PetscErrorCode PetscDrawGetTitle(PetscDraw draw,const char *title[]) 1845c6c1daeSBarry Smith { 1855c6c1daeSBarry Smith PetscFunctionBegin; 1865c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 1875c6c1daeSBarry Smith PetscValidPointer(title,2); 1885c6c1daeSBarry Smith *title = draw->title; 1895c6c1daeSBarry Smith PetscFunctionReturn(0); 1905c6c1daeSBarry Smith } 1915c6c1daeSBarry Smith 1925c6c1daeSBarry Smith /*@C 1935c6c1daeSBarry Smith PetscDrawSetTitle - Sets the title of a PetscDraw context. 1945c6c1daeSBarry Smith 1955b399a63SLisandro Dalcin Collective on PetscDraw 1965c6c1daeSBarry Smith 1975c6c1daeSBarry Smith Input Parameters: 1985c6c1daeSBarry Smith + draw - the graphics context 1995c6c1daeSBarry Smith - title - the title 2005c6c1daeSBarry Smith 2015c6c1daeSBarry Smith Level: intermediate 2025c6c1daeSBarry Smith 203231a95f8SBarry Smith Note: The title is positioned in the windowing system title bar for the window. Hence it will not be saved with -draw_save 204231a95f8SBarry Smith in the image. 205231a95f8SBarry Smith 2065c6c1daeSBarry Smith A copy of the string is made, so you may destroy the 2075c6c1daeSBarry Smith title string after calling this routine. 2085c6c1daeSBarry Smith 209231a95f8SBarry Smith You can use PetscDrawAxisSetLabels() to indicate a title within the window 210231a95f8SBarry Smith 2115c6c1daeSBarry Smith .seealso: PetscDrawGetTitle(), PetscDrawAppendTitle() 2125c6c1daeSBarry Smith @*/ 2135c6c1daeSBarry Smith PetscErrorCode PetscDrawSetTitle(PetscDraw draw,const char title[]) 2145c6c1daeSBarry Smith { 2155c6c1daeSBarry Smith PetscErrorCode ierr; 2165fd66863SKarl Rupp 2175c6c1daeSBarry Smith PetscFunctionBegin; 2185c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 2195c6c1daeSBarry Smith PetscValidCharPointer(title,2); 2205c6c1daeSBarry Smith ierr = PetscFree(draw->title);CHKERRQ(ierr); 2215c6c1daeSBarry Smith ierr = PetscStrallocpy(title,&draw->title);CHKERRQ(ierr); 2225c6c1daeSBarry Smith if (draw->ops->settitle) { 223815f00f0SLisandro Dalcin ierr = (*draw->ops->settitle)(draw,draw->title);CHKERRQ(ierr); 2245c6c1daeSBarry Smith } 2255c6c1daeSBarry Smith PetscFunctionReturn(0); 2265c6c1daeSBarry Smith } 2275c6c1daeSBarry Smith 2285c6c1daeSBarry Smith /*@C 2295c6c1daeSBarry Smith PetscDrawAppendTitle - Appends to the title of a PetscDraw context. 2305c6c1daeSBarry Smith 2315b399a63SLisandro Dalcin Collective on PetscDraw 2325c6c1daeSBarry Smith 2335c6c1daeSBarry Smith Input Parameters: 2345c6c1daeSBarry Smith + draw - the graphics context 2355c6c1daeSBarry Smith - title - the title 2365c6c1daeSBarry Smith 2375c6c1daeSBarry Smith Note: 2385c6c1daeSBarry Smith A copy of the string is made, so you may destroy the 2395c6c1daeSBarry Smith title string after calling this routine. 2405c6c1daeSBarry Smith 2415c6c1daeSBarry Smith Level: advanced 2425c6c1daeSBarry Smith 2435c6c1daeSBarry Smith .seealso: PetscDrawSetTitle(), PetscDrawGetTitle() 2445c6c1daeSBarry Smith @*/ 2455c6c1daeSBarry Smith PetscErrorCode PetscDrawAppendTitle(PetscDraw draw,const char title[]) 2465c6c1daeSBarry Smith { 2475c6c1daeSBarry Smith PetscErrorCode ierr; 2485c6c1daeSBarry Smith 2495c6c1daeSBarry Smith PetscFunctionBegin; 2505c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 2515b399a63SLisandro Dalcin if (title) PetscValidCharPointer(title,2); 2525b399a63SLisandro Dalcin if (!title || !title[0]) PetscFunctionReturn(0); 2535c6c1daeSBarry Smith 2545c6c1daeSBarry Smith if (draw->title) { 2555b399a63SLisandro Dalcin size_t len1,len2; 2565b399a63SLisandro Dalcin char *newtitle; 2575c6c1daeSBarry Smith ierr = PetscStrlen(title,&len1);CHKERRQ(ierr); 2585c6c1daeSBarry Smith ierr = PetscStrlen(draw->title,&len2);CHKERRQ(ierr); 2595b399a63SLisandro Dalcin ierr = PetscMalloc1(len1 + len2 + 1,&newtitle);CHKERRQ(ierr); 2605c6c1daeSBarry Smith ierr = PetscStrcpy(newtitle,draw->title);CHKERRQ(ierr); 2615c6c1daeSBarry Smith ierr = PetscStrcat(newtitle,title);CHKERRQ(ierr); 2625c6c1daeSBarry Smith ierr = PetscFree(draw->title);CHKERRQ(ierr); 2635c6c1daeSBarry Smith draw->title = newtitle; 2645c6c1daeSBarry Smith } else { 2655c6c1daeSBarry Smith ierr = PetscStrallocpy(title,&draw->title);CHKERRQ(ierr); 2665c6c1daeSBarry Smith } 2675c6c1daeSBarry Smith if (draw->ops->settitle) { 2685c6c1daeSBarry Smith ierr = (*draw->ops->settitle)(draw,draw->title);CHKERRQ(ierr); 2695c6c1daeSBarry Smith } 2705c6c1daeSBarry Smith PetscFunctionReturn(0); 2715c6c1daeSBarry Smith } 2725c6c1daeSBarry Smith 273e118a51fSLisandro Dalcin static PetscErrorCode PetscDrawDestroy_Private(PetscDraw draw) 274e118a51fSLisandro Dalcin { 275e118a51fSLisandro Dalcin PetscErrorCode ierr; 276e118a51fSLisandro Dalcin 277e118a51fSLisandro Dalcin PetscFunctionBegin; 2788067a7d5SLisandro Dalcin if (!draw->ops->save && !draw->ops->getimage) PetscFunctionReturn(0); 27949c04938SLisandro Dalcin ierr = PetscDrawSaveMovie(draw);CHKERRQ(ierr); 280e118a51fSLisandro Dalcin if (draw->savefinalfilename) { 281df8d4941SLisandro Dalcin draw->savesinglefile = PETSC_TRUE; 28249c04938SLisandro Dalcin ierr = PetscDrawSetSave(draw,draw->savefinalfilename);CHKERRQ(ierr); 283e118a51fSLisandro Dalcin ierr = PetscDrawSave(draw);CHKERRQ(ierr); 284e118a51fSLisandro Dalcin } 285e118a51fSLisandro Dalcin ierr = PetscBarrier((PetscObject)draw);CHKERRQ(ierr); 286e118a51fSLisandro Dalcin PetscFunctionReturn(0); 287e118a51fSLisandro Dalcin } 288e118a51fSLisandro Dalcin 2895c6c1daeSBarry Smith /*@ 2905c6c1daeSBarry Smith PetscDrawDestroy - Deletes a draw context. 2915c6c1daeSBarry Smith 2925c6c1daeSBarry Smith Collective on PetscDraw 2935c6c1daeSBarry Smith 2945c6c1daeSBarry Smith Input Parameters: 2955c6c1daeSBarry Smith . draw - the drawing context 2965c6c1daeSBarry Smith 2975c6c1daeSBarry Smith Level: beginner 2985c6c1daeSBarry Smith 2995c6c1daeSBarry Smith .seealso: PetscDrawCreate() 3005c6c1daeSBarry Smith 3015c6c1daeSBarry Smith @*/ 3025c6c1daeSBarry Smith PetscErrorCode PetscDrawDestroy(PetscDraw *draw) 3035c6c1daeSBarry Smith { 3045c6c1daeSBarry Smith PetscErrorCode ierr; 3055fd66863SKarl Rupp 3065c6c1daeSBarry Smith PetscFunctionBegin; 3075c6c1daeSBarry Smith if (!*draw) PetscFunctionReturn(0); 3085c6c1daeSBarry Smith PetscValidHeaderSpecific(*draw,PETSC_DRAW_CLASSID,1); 3095c6c1daeSBarry Smith if (--((PetscObject)(*draw))->refct > 0) PetscFunctionReturn(0); 3105c6c1daeSBarry Smith 3115c6c1daeSBarry Smith if ((*draw)->pause == -2) { 3125c6c1daeSBarry Smith (*draw)->pause = -1; 3135c6c1daeSBarry Smith ierr = PetscDrawPause(*draw);CHKERRQ(ierr); 3145c6c1daeSBarry Smith } 3155c6c1daeSBarry Smith 3165c6c1daeSBarry Smith /* if memory was published then destroy it */ 317e04113cfSBarry Smith ierr = PetscObjectSAWsViewOff((PetscObject)*draw);CHKERRQ(ierr); 3185c6c1daeSBarry Smith 319e118a51fSLisandro Dalcin ierr = PetscDrawDestroy_Private(*draw);CHKERRQ(ierr); 320e118a51fSLisandro Dalcin 3215c6c1daeSBarry Smith if ((*draw)->ops->destroy) { 3225c6c1daeSBarry Smith ierr = (*(*draw)->ops->destroy)(*draw);CHKERRQ(ierr); 3235c6c1daeSBarry Smith } 324e118a51fSLisandro Dalcin ierr = PetscDrawDestroy(&(*draw)->popup);CHKERRQ(ierr); 3255c6c1daeSBarry Smith ierr = PetscFree((*draw)->title);CHKERRQ(ierr); 3265c6c1daeSBarry Smith ierr = PetscFree((*draw)->display);CHKERRQ(ierr); 3275c6c1daeSBarry Smith ierr = PetscFree((*draw)->savefilename);CHKERRQ(ierr); 3288067a7d5SLisandro Dalcin ierr = PetscFree((*draw)->saveimageext);CHKERRQ(ierr); 3298067a7d5SLisandro Dalcin ierr = PetscFree((*draw)->savemovieext);CHKERRQ(ierr); 330287de1a7SBarry Smith ierr = PetscFree((*draw)->savefinalfilename);CHKERRQ(ierr); 3315c6c1daeSBarry Smith ierr = PetscHeaderDestroy(draw);CHKERRQ(ierr); 3325c6c1daeSBarry Smith PetscFunctionReturn(0); 3335c6c1daeSBarry Smith } 3345c6c1daeSBarry Smith 3355c6c1daeSBarry Smith /*@ 3365c6c1daeSBarry Smith PetscDrawGetPopup - Creates a popup window associated with a PetscDraw window. 3375c6c1daeSBarry Smith 3385c6c1daeSBarry Smith Collective on PetscDraw 3395c6c1daeSBarry Smith 3405c6c1daeSBarry Smith Input Parameter: 3415c6c1daeSBarry Smith . draw - the original window 3425c6c1daeSBarry Smith 3435c6c1daeSBarry Smith Output Parameter: 3445c6c1daeSBarry Smith . popup - the new popup window 3455c6c1daeSBarry Smith 3465c6c1daeSBarry Smith Level: advanced 3475c6c1daeSBarry Smith 348ba1e01c4SBarry Smith .seealso: PetscDrawScalePopup(), PetscDrawCreate() 349ba1e01c4SBarry Smith 3505c6c1daeSBarry Smith @*/ 3515c6c1daeSBarry Smith PetscErrorCode PetscDrawGetPopup(PetscDraw draw,PetscDraw *popup) 3525c6c1daeSBarry Smith { 3535c6c1daeSBarry Smith PetscErrorCode ierr; 3545fd66863SKarl Rupp 3555c6c1daeSBarry Smith PetscFunctionBegin; 3565c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 3575c6c1daeSBarry Smith PetscValidPointer(popup,2); 3585c6c1daeSBarry Smith 359a297a907SKarl Rupp if (draw->popup) *popup = draw->popup; 360a297a907SKarl Rupp else if (draw->ops->getpopup) { 3615c6c1daeSBarry Smith ierr = (*draw->ops->getpopup)(draw,popup);CHKERRQ(ierr); 3620b874712SBarry Smith if (*popup) { 3630b874712SBarry Smith ierr = PetscObjectSetOptionsPrefix((PetscObject)*popup,"popup_");CHKERRQ(ierr); 364e118a51fSLisandro Dalcin (*popup)->pause = 0.0; 3650b874712SBarry Smith ierr = PetscDrawSetFromOptions(*popup);CHKERRQ(ierr); 36661f59835SBarry Smith } 3670298fd71SBarry Smith } else *popup = NULL; 3685c6c1daeSBarry Smith PetscFunctionReturn(0); 3695c6c1daeSBarry Smith } 3705c6c1daeSBarry Smith 37194ef8ddeSSatish Balay /*@C 3725c6c1daeSBarry Smith PetscDrawSetDisplay - Sets the display where a PetscDraw object will be displayed 3735c6c1daeSBarry Smith 3745c6c1daeSBarry Smith Input Parameter: 3755c6c1daeSBarry Smith + draw - the drawing context 3765c6c1daeSBarry Smith - display - the X windows display 3775c6c1daeSBarry Smith 3785c6c1daeSBarry Smith Level: advanced 3795c6c1daeSBarry Smith 380ba1e01c4SBarry Smith .seealso: PetscDrawCreate() 381ba1e01c4SBarry Smith 3825c6c1daeSBarry Smith @*/ 3835c6c1daeSBarry Smith PetscErrorCode PetscDrawSetDisplay(PetscDraw draw,const char display[]) 3845c6c1daeSBarry Smith { 3855c6c1daeSBarry Smith PetscErrorCode ierr; 3865c6c1daeSBarry Smith 3875c6c1daeSBarry Smith PetscFunctionBegin; 3885c6c1daeSBarry Smith ierr = PetscFree(draw->display);CHKERRQ(ierr); 3895c6c1daeSBarry Smith ierr = PetscStrallocpy(display,&draw->display);CHKERRQ(ierr); 3905c6c1daeSBarry Smith PetscFunctionReturn(0); 3915c6c1daeSBarry Smith } 3925c6c1daeSBarry Smith 39345f3bb6eSLisandro Dalcin 39445f3bb6eSLisandro Dalcin /*@ 39545f3bb6eSLisandro Dalcin PetscDrawSetDoubleBuffer - Sets a window to be double buffered. 39645f3bb6eSLisandro Dalcin 39745f3bb6eSLisandro Dalcin Logically Collective on PetscDraw 3985c6c1daeSBarry Smith 3995c6c1daeSBarry Smith Input Parameter: 40045f3bb6eSLisandro Dalcin . draw - the drawing context 40145f3bb6eSLisandro Dalcin 40245f3bb6eSLisandro Dalcin Level: intermediate 40345f3bb6eSLisandro Dalcin 40445f3bb6eSLisandro Dalcin Concepts: drawing^double buffer 40545f3bb6eSLisandro Dalcin Concepts: graphics^double buffer 40645f3bb6eSLisandro Dalcin Concepts: double buffer 40745f3bb6eSLisandro Dalcin 40845f3bb6eSLisandro Dalcin @*/ 40945f3bb6eSLisandro Dalcin PetscErrorCode PetscDrawSetDoubleBuffer(PetscDraw draw) 4105c6c1daeSBarry Smith { 4115c6c1daeSBarry Smith PetscErrorCode ierr; 4125c6c1daeSBarry Smith 4135c6c1daeSBarry Smith PetscFunctionBegin; 41445f3bb6eSLisandro Dalcin PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 41545f3bb6eSLisandro Dalcin if (draw->ops->setdoublebuffer) { 41645f3bb6eSLisandro Dalcin ierr = (*draw->ops->setdoublebuffer)(draw);CHKERRQ(ierr); 41745f3bb6eSLisandro Dalcin } 4185c6c1daeSBarry Smith PetscFunctionReturn(0); 4195c6c1daeSBarry Smith } 4205c6c1daeSBarry Smith 4215c6c1daeSBarry Smith /*@C 4225c6c1daeSBarry Smith PetscDrawGetSingleton - Gain access to a PetscDraw object as if it were owned 4235c6c1daeSBarry Smith by the one process. 4245c6c1daeSBarry Smith 4255c6c1daeSBarry Smith Collective on PetscDraw 4265c6c1daeSBarry Smith 4275c6c1daeSBarry Smith Input Parameter: 4285c6c1daeSBarry Smith . draw - the original window 4295c6c1daeSBarry Smith 4305c6c1daeSBarry Smith Output Parameter: 4315c6c1daeSBarry Smith . sdraw - the singleton window 4325c6c1daeSBarry Smith 4335c6c1daeSBarry Smith Level: advanced 4345c6c1daeSBarry Smith 4355c6c1daeSBarry Smith .seealso: PetscDrawRestoreSingleton(), PetscViewerGetSingleton(), PetscViewerRestoreSingleton() 4365c6c1daeSBarry Smith 4375c6c1daeSBarry Smith @*/ 4385c6c1daeSBarry Smith PetscErrorCode PetscDrawGetSingleton(PetscDraw draw,PetscDraw *sdraw) 4395c6c1daeSBarry Smith { 4405c6c1daeSBarry Smith PetscErrorCode ierr; 4415c6c1daeSBarry Smith PetscMPIInt size; 4425c6c1daeSBarry Smith 4435c6c1daeSBarry Smith PetscFunctionBegin; 4445c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 4455c6c1daeSBarry Smith PetscValidPointer(sdraw,2); 4465c6c1daeSBarry Smith 447ce94432eSBarry Smith ierr = MPI_Comm_size(PetscObjectComm((PetscObject)draw),&size);CHKERRQ(ierr); 448387ef4f7SLisandro Dalcin if (size == 1) { 449387ef4f7SLisandro Dalcin ierr = PetscObjectReference((PetscObject)draw);CHKERRQ(ierr); 450387ef4f7SLisandro Dalcin *sdraw = draw; 451387ef4f7SLisandro Dalcin } else { 4525c6c1daeSBarry Smith if (draw->ops->getsingleton) { 4535c6c1daeSBarry Smith ierr = (*draw->ops->getsingleton)(draw,sdraw);CHKERRQ(ierr); 4545c6c1daeSBarry Smith } else SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_SUP,"Cannot get singleton for this type %s of draw object",((PetscObject)draw)->type_name); 4555c6c1daeSBarry Smith } 4565c6c1daeSBarry Smith PetscFunctionReturn(0); 4575c6c1daeSBarry Smith } 4585c6c1daeSBarry Smith 4595c6c1daeSBarry Smith /*@C 4605c6c1daeSBarry Smith PetscDrawRestoreSingleton - Remove access to a PetscDraw object as if it were owned 4615c6c1daeSBarry Smith by the one process. 4625c6c1daeSBarry Smith 4635c6c1daeSBarry Smith Collective on PetscDraw 4645c6c1daeSBarry Smith 4655c6c1daeSBarry Smith Input Parameters: 4665c6c1daeSBarry Smith + draw - the original window 4675c6c1daeSBarry Smith - sdraw - the singleton window 4685c6c1daeSBarry Smith 4695c6c1daeSBarry Smith Level: advanced 4705c6c1daeSBarry Smith 4715c6c1daeSBarry Smith .seealso: PetscDrawGetSingleton(), PetscViewerGetSingleton(), PetscViewerRestoreSingleton() 4725c6c1daeSBarry Smith 4735c6c1daeSBarry Smith @*/ 4745c6c1daeSBarry Smith PetscErrorCode PetscDrawRestoreSingleton(PetscDraw draw,PetscDraw *sdraw) 4755c6c1daeSBarry Smith { 4765c6c1daeSBarry Smith PetscErrorCode ierr; 4775c6c1daeSBarry Smith PetscMPIInt size; 4785c6c1daeSBarry Smith 4795c6c1daeSBarry Smith PetscFunctionBegin; 4805c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 4815c6c1daeSBarry Smith PetscValidPointer(sdraw,2); 4825c6c1daeSBarry Smith PetscValidHeaderSpecific(*sdraw,PETSC_DRAW_CLASSID,2); 4835c6c1daeSBarry Smith 484ce94432eSBarry Smith ierr = MPI_Comm_size(PetscObjectComm((PetscObject)draw),&size);CHKERRQ(ierr); 485387ef4f7SLisandro Dalcin if (size == 1) { 486387ef4f7SLisandro Dalcin if (draw == *sdraw) { 487387ef4f7SLisandro Dalcin ierr = PetscObjectDereference((PetscObject)draw);CHKERRQ(ierr); 488387ef4f7SLisandro Dalcin *sdraw = NULL; 489387ef4f7SLisandro Dalcin } else SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Cannot restore singleton, it is not the parent draw"); 490387ef4f7SLisandro Dalcin } else { 4915c6c1daeSBarry Smith if (draw->ops->restoresingleton) { 4925c6c1daeSBarry Smith ierr = (*draw->ops->restoresingleton)(draw,sdraw);CHKERRQ(ierr); 4935c6c1daeSBarry Smith } else SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_SUP,"Cannot restore singleton for this type %s of draw object",((PetscObject)draw)->type_name); 4945c6c1daeSBarry Smith } 4955c6c1daeSBarry Smith PetscFunctionReturn(0); 4965c6c1daeSBarry Smith } 497