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 .seealso: PetscFinalize() 185c6c1daeSBarry Smith @*/ 195c6c1daeSBarry Smith PetscErrorCode PetscDrawFinalizePackage(void) 205c6c1daeSBarry Smith { 2137e93019SBarry Smith PetscErrorCode ierr; 2237e93019SBarry Smith 235c6c1daeSBarry Smith PetscFunctionBegin; 2437e93019SBarry Smith ierr = PetscFunctionListDestroy(&PetscDrawList);CHKERRQ(ierr); 255c6c1daeSBarry Smith PetscDrawPackageInitialized = PETSC_FALSE; 260f51fdf8SToby Isaac PetscDrawRegisterAllCalled = PETSC_FALSE; 275c6c1daeSBarry Smith PetscFunctionReturn(0); 285c6c1daeSBarry Smith } 295c6c1daeSBarry Smith 305c6c1daeSBarry Smith /*@C 315c6c1daeSBarry Smith PetscInitializeDrawPackage - This function initializes everything in the PetscDraw package. It is called 328a690491SBarry Smith from PetscDLLibraryRegister_petsc() when using dynamic libraries, and on the call to PetscInitialize() 338a690491SBarry Smith when using shared or static libraries. 345c6c1daeSBarry Smith 355c6c1daeSBarry Smith Level: developer 365c6c1daeSBarry Smith 375c6c1daeSBarry Smith .seealso: PetscInitialize() 385c6c1daeSBarry Smith @*/ 39607a6623SBarry Smith PetscErrorCode PetscDrawInitializePackage(void) 405c6c1daeSBarry Smith { 415c6c1daeSBarry Smith char logList[256]; 428e81d068SLisandro Dalcin PetscBool opt,pkg; 435c6c1daeSBarry Smith PetscErrorCode ierr; 445c6c1daeSBarry Smith 455c6c1daeSBarry Smith PetscFunctionBegin; 465c6c1daeSBarry Smith if (PetscDrawPackageInitialized) PetscFunctionReturn(0); 475c6c1daeSBarry Smith PetscDrawPackageInitialized = PETSC_TRUE; 485c6c1daeSBarry Smith /* Register Classes */ 495c6c1daeSBarry Smith ierr = PetscClassIdRegister("Draw",&PETSC_DRAW_CLASSID);CHKERRQ(ierr); 5071917b75SLisandro Dalcin ierr = PetscClassIdRegister("Draw Axis",&PETSC_DRAWAXIS_CLASSID);CHKERRQ(ierr); 515c6c1daeSBarry Smith ierr = PetscClassIdRegister("Line Graph",&PETSC_DRAWLG_CLASSID);CHKERRQ(ierr); 525c6c1daeSBarry Smith ierr = PetscClassIdRegister("Histogram",&PETSC_DRAWHG_CLASSID);CHKERRQ(ierr); 5371917b75SLisandro Dalcin ierr = PetscClassIdRegister("Bar Graph",&PETSC_DRAWBAR_CLASSID);CHKERRQ(ierr); 545c6c1daeSBarry Smith ierr = PetscClassIdRegister("Scatter Plot",&PETSC_DRAWSP_CLASSID);CHKERRQ(ierr); 555c6c1daeSBarry Smith /* Register Constructors */ 56607a6623SBarry Smith ierr = PetscDrawRegisterAll();CHKERRQ(ierr); 57e94e781bSJacob Faibussowitsch /* Process Info */ 58e94e781bSJacob Faibussowitsch { 59e94e781bSJacob Faibussowitsch PetscClassId classids[6]; 60e94e781bSJacob Faibussowitsch 61e94e781bSJacob Faibussowitsch classids[0] = PETSC_DRAW_CLASSID; 62e94e781bSJacob Faibussowitsch classids[1] = PETSC_DRAWAXIS_CLASSID; 63e94e781bSJacob Faibussowitsch classids[2] = PETSC_DRAWLG_CLASSID; 64e94e781bSJacob Faibussowitsch classids[3] = PETSC_DRAWHG_CLASSID; 65e94e781bSJacob Faibussowitsch classids[4] = PETSC_DRAWBAR_CLASSID; 66e94e781bSJacob Faibussowitsch classids[5] = PETSC_DRAWSP_CLASSID; 67e94e781bSJacob Faibussowitsch ierr = PetscInfoProcessClass("draw", 6, classids);CHKERRQ(ierr); 685c6c1daeSBarry Smith } 695c6c1daeSBarry Smith /* Process summary exclusions */ 708e81d068SLisandro Dalcin ierr = PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt);CHKERRQ(ierr); 715c6c1daeSBarry Smith if (opt) { 728e81d068SLisandro Dalcin ierr = PetscStrInList("draw",logList,',',&pkg);CHKERRQ(ierr); 738e81d068SLisandro Dalcin if (pkg) { 74fa2bb9feSLisandro Dalcin ierr = PetscLogEventExcludeClass(PETSC_DRAW_CLASSID);CHKERRQ(ierr); 75fa2bb9feSLisandro Dalcin ierr = PetscLogEventExcludeClass(PETSC_DRAWAXIS_CLASSID);CHKERRQ(ierr); 76fa2bb9feSLisandro Dalcin ierr = PetscLogEventExcludeClass(PETSC_DRAWLG_CLASSID);CHKERRQ(ierr); 77fa2bb9feSLisandro Dalcin ierr = PetscLogEventExcludeClass(PETSC_DRAWHG_CLASSID);CHKERRQ(ierr); 78fa2bb9feSLisandro Dalcin ierr = PetscLogEventExcludeClass(PETSC_DRAWBAR_CLASSID);CHKERRQ(ierr); 79fa2bb9feSLisandro Dalcin ierr = PetscLogEventExcludeClass(PETSC_DRAWSP_CLASSID);CHKERRQ(ierr); 805c6c1daeSBarry Smith } 815c6c1daeSBarry Smith } 828e81d068SLisandro Dalcin /* Register package finalizer */ 835c6c1daeSBarry Smith ierr = PetscRegisterFinalize(PetscDrawFinalizePackage);CHKERRQ(ierr); 845c6c1daeSBarry Smith PetscFunctionReturn(0); 855c6c1daeSBarry Smith } 865c6c1daeSBarry Smith 875c6c1daeSBarry Smith /*@ 885c6c1daeSBarry Smith PetscDrawResizeWindow - Allows one to resize a window from a program. 895c6c1daeSBarry Smith 905c6c1daeSBarry Smith Collective on PetscDraw 915c6c1daeSBarry Smith 92*d8d19677SJose E. Roman Input Parameters: 935c6c1daeSBarry Smith + draw - the window 945c6c1daeSBarry Smith - w,h - the new width and height of the window 955c6c1daeSBarry Smith 965c6c1daeSBarry Smith Level: intermediate 975c6c1daeSBarry Smith 985c6c1daeSBarry Smith .seealso: PetscDrawCheckResizedWindow() 995c6c1daeSBarry Smith @*/ 1005c6c1daeSBarry Smith PetscErrorCode PetscDrawResizeWindow(PetscDraw draw,int w,int h) 1015c6c1daeSBarry Smith { 1025c6c1daeSBarry Smith PetscErrorCode ierr; 1035fd66863SKarl Rupp 1045c6c1daeSBarry Smith PetscFunctionBegin; 10573ecf448SLisandro Dalcin PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 10673ecf448SLisandro Dalcin PetscValidLogicalCollectiveInt(draw,w,2); 10773ecf448SLisandro Dalcin PetscValidLogicalCollectiveInt(draw,h,3); 1085c6c1daeSBarry Smith if (draw->ops->resizewindow) { 1095c6c1daeSBarry Smith ierr = (*draw->ops->resizewindow)(draw,w,h);CHKERRQ(ierr); 1105c6c1daeSBarry Smith } 1115c6c1daeSBarry Smith PetscFunctionReturn(0); 1125c6c1daeSBarry Smith } 1135c6c1daeSBarry Smith 11473ecf448SLisandro Dalcin /*@ 11573ecf448SLisandro Dalcin PetscDrawGetWindowSize - Gets the size of the window. 11673ecf448SLisandro Dalcin 11773ecf448SLisandro Dalcin Not collective 11873ecf448SLisandro Dalcin 11973ecf448SLisandro Dalcin Input Parameter: 12073ecf448SLisandro Dalcin . draw - the window 12173ecf448SLisandro Dalcin 12273ecf448SLisandro Dalcin Output Parameters: 12373ecf448SLisandro Dalcin . w,h - the window width and height 12473ecf448SLisandro Dalcin 12573ecf448SLisandro Dalcin Level: intermediate 12673ecf448SLisandro Dalcin 12773ecf448SLisandro Dalcin .seealso: PetscDrawResizeWindow(), PetscDrawCheckResizedWindow() 12873ecf448SLisandro Dalcin @*/ 12973ecf448SLisandro Dalcin PetscErrorCode PetscDrawGetWindowSize(PetscDraw draw,int *w,int *h) 13073ecf448SLisandro Dalcin { 13173ecf448SLisandro Dalcin PetscFunctionBegin; 13273ecf448SLisandro Dalcin PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 13373ecf448SLisandro Dalcin if (w) PetscValidPointer(w,2); 13473ecf448SLisandro Dalcin if (h) PetscValidPointer(h,3); 13573ecf448SLisandro Dalcin if (w) *w = draw->w; 13673ecf448SLisandro Dalcin if (h) *h = draw->h; 13773ecf448SLisandro Dalcin PetscFunctionReturn(0); 13873ecf448SLisandro Dalcin } 13973ecf448SLisandro Dalcin 1405c6c1daeSBarry Smith /*@ 1415c6c1daeSBarry Smith PetscDrawCheckResizedWindow - Checks if the user has resized the window. 1425c6c1daeSBarry Smith 1435c6c1daeSBarry Smith Collective on PetscDraw 1445c6c1daeSBarry Smith 1455c6c1daeSBarry Smith Input Parameter: 1465c6c1daeSBarry Smith . draw - the window 1475c6c1daeSBarry Smith 1485c6c1daeSBarry Smith Level: advanced 1495c6c1daeSBarry Smith 1505c6c1daeSBarry Smith .seealso: PetscDrawResizeWindow() 1515c6c1daeSBarry Smith 1525c6c1daeSBarry Smith @*/ 1535c6c1daeSBarry Smith PetscErrorCode PetscDrawCheckResizedWindow(PetscDraw draw) 1545c6c1daeSBarry Smith { 1555c6c1daeSBarry Smith PetscErrorCode ierr; 1565fd66863SKarl Rupp 1575c6c1daeSBarry Smith PetscFunctionBegin; 15873ecf448SLisandro Dalcin PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 1595c6c1daeSBarry Smith if (draw->ops->checkresizedwindow) { 1605c6c1daeSBarry Smith ierr = (*draw->ops->checkresizedwindow)(draw);CHKERRQ(ierr); 1615c6c1daeSBarry Smith } 1625c6c1daeSBarry Smith PetscFunctionReturn(0); 1635c6c1daeSBarry Smith } 1645c6c1daeSBarry Smith 1655c6c1daeSBarry Smith /*@C 1665c6c1daeSBarry Smith PetscDrawGetTitle - Gets pointer to title of a PetscDraw context. 1675c6c1daeSBarry Smith 1685c6c1daeSBarry Smith Not collective 1695c6c1daeSBarry Smith 1705c6c1daeSBarry Smith Input Parameter: 1715c6c1daeSBarry Smith . draw - the graphics context 1725c6c1daeSBarry Smith 1735c6c1daeSBarry Smith Output Parameter: 1745c6c1daeSBarry Smith . title - the title 1755c6c1daeSBarry Smith 1765c6c1daeSBarry Smith Level: intermediate 1775c6c1daeSBarry Smith 1785c6c1daeSBarry Smith .seealso: PetscDrawSetTitle() 1795c6c1daeSBarry Smith @*/ 180f60c72e3SLisandro Dalcin PetscErrorCode PetscDrawGetTitle(PetscDraw draw,const char *title[]) 1815c6c1daeSBarry Smith { 1825c6c1daeSBarry Smith PetscFunctionBegin; 1835c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 1845c6c1daeSBarry Smith PetscValidPointer(title,2); 1855c6c1daeSBarry Smith *title = draw->title; 1865c6c1daeSBarry Smith PetscFunctionReturn(0); 1875c6c1daeSBarry Smith } 1885c6c1daeSBarry Smith 1895c6c1daeSBarry Smith /*@C 1905c6c1daeSBarry Smith PetscDrawSetTitle - Sets the title of a PetscDraw context. 1915c6c1daeSBarry Smith 1925b399a63SLisandro Dalcin Collective on PetscDraw 1935c6c1daeSBarry Smith 1945c6c1daeSBarry Smith Input Parameters: 1955c6c1daeSBarry Smith + draw - the graphics context 1965c6c1daeSBarry Smith - title - the title 1975c6c1daeSBarry Smith 1985c6c1daeSBarry Smith Level: intermediate 1995c6c1daeSBarry Smith 200231a95f8SBarry Smith Note: The title is positioned in the windowing system title bar for the window. Hence it will not be saved with -draw_save 201231a95f8SBarry Smith in the image. 202231a95f8SBarry Smith 2035c6c1daeSBarry Smith A copy of the string is made, so you may destroy the 2045c6c1daeSBarry Smith title string after calling this routine. 2055c6c1daeSBarry Smith 206231a95f8SBarry Smith You can use PetscDrawAxisSetLabels() to indicate a title within the window 207231a95f8SBarry Smith 2085c6c1daeSBarry Smith .seealso: PetscDrawGetTitle(), PetscDrawAppendTitle() 2095c6c1daeSBarry Smith @*/ 2105c6c1daeSBarry Smith PetscErrorCode PetscDrawSetTitle(PetscDraw draw,const char title[]) 2115c6c1daeSBarry Smith { 2125c6c1daeSBarry Smith PetscErrorCode ierr; 2135fd66863SKarl Rupp 2145c6c1daeSBarry Smith PetscFunctionBegin; 2155c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 2165c6c1daeSBarry Smith PetscValidCharPointer(title,2); 2175c6c1daeSBarry Smith ierr = PetscFree(draw->title);CHKERRQ(ierr); 2185c6c1daeSBarry Smith ierr = PetscStrallocpy(title,&draw->title);CHKERRQ(ierr); 2195c6c1daeSBarry Smith if (draw->ops->settitle) { 220815f00f0SLisandro Dalcin ierr = (*draw->ops->settitle)(draw,draw->title);CHKERRQ(ierr); 2215c6c1daeSBarry Smith } 2225c6c1daeSBarry Smith PetscFunctionReturn(0); 2235c6c1daeSBarry Smith } 2245c6c1daeSBarry Smith 2255c6c1daeSBarry Smith /*@C 2265c6c1daeSBarry Smith PetscDrawAppendTitle - Appends to the title of a PetscDraw context. 2275c6c1daeSBarry Smith 2285b399a63SLisandro Dalcin Collective on PetscDraw 2295c6c1daeSBarry Smith 2305c6c1daeSBarry Smith Input Parameters: 2315c6c1daeSBarry Smith + draw - the graphics context 2325c6c1daeSBarry Smith - title - the title 2335c6c1daeSBarry Smith 2345c6c1daeSBarry Smith Note: 2355c6c1daeSBarry Smith A copy of the string is made, so you may destroy the 2365c6c1daeSBarry Smith title string after calling this routine. 2375c6c1daeSBarry Smith 2385c6c1daeSBarry Smith Level: advanced 2395c6c1daeSBarry Smith 2405c6c1daeSBarry Smith .seealso: PetscDrawSetTitle(), PetscDrawGetTitle() 2415c6c1daeSBarry Smith @*/ 2425c6c1daeSBarry Smith PetscErrorCode PetscDrawAppendTitle(PetscDraw draw,const char title[]) 2435c6c1daeSBarry Smith { 2445c6c1daeSBarry Smith PetscErrorCode ierr; 2455c6c1daeSBarry Smith 2465c6c1daeSBarry Smith PetscFunctionBegin; 2475c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 2485b399a63SLisandro Dalcin if (title) PetscValidCharPointer(title,2); 2495b399a63SLisandro Dalcin if (!title || !title[0]) PetscFunctionReturn(0); 2505c6c1daeSBarry Smith 2515c6c1daeSBarry Smith if (draw->title) { 2525b399a63SLisandro Dalcin size_t len1,len2; 2535b399a63SLisandro Dalcin char *newtitle; 2545c6c1daeSBarry Smith ierr = PetscStrlen(title,&len1);CHKERRQ(ierr); 2555c6c1daeSBarry Smith ierr = PetscStrlen(draw->title,&len2);CHKERRQ(ierr); 2565b399a63SLisandro Dalcin ierr = PetscMalloc1(len1 + len2 + 1,&newtitle);CHKERRQ(ierr); 2575c6c1daeSBarry Smith ierr = PetscStrcpy(newtitle,draw->title);CHKERRQ(ierr); 2585c6c1daeSBarry Smith ierr = PetscStrcat(newtitle,title);CHKERRQ(ierr); 2595c6c1daeSBarry Smith ierr = PetscFree(draw->title);CHKERRQ(ierr); 2605c6c1daeSBarry Smith draw->title = newtitle; 2615c6c1daeSBarry Smith } else { 2625c6c1daeSBarry Smith ierr = PetscStrallocpy(title,&draw->title);CHKERRQ(ierr); 2635c6c1daeSBarry Smith } 2645c6c1daeSBarry Smith if (draw->ops->settitle) { 2655c6c1daeSBarry Smith ierr = (*draw->ops->settitle)(draw,draw->title);CHKERRQ(ierr); 2665c6c1daeSBarry Smith } 2675c6c1daeSBarry Smith PetscFunctionReturn(0); 2685c6c1daeSBarry Smith } 2695c6c1daeSBarry Smith 270e118a51fSLisandro Dalcin static PetscErrorCode PetscDrawDestroy_Private(PetscDraw draw) 271e118a51fSLisandro Dalcin { 272e118a51fSLisandro Dalcin PetscErrorCode ierr; 273e118a51fSLisandro Dalcin 274e118a51fSLisandro Dalcin PetscFunctionBegin; 2758067a7d5SLisandro Dalcin if (!draw->ops->save && !draw->ops->getimage) PetscFunctionReturn(0); 27649c04938SLisandro Dalcin ierr = PetscDrawSaveMovie(draw);CHKERRQ(ierr); 277e118a51fSLisandro Dalcin if (draw->savefinalfilename) { 278df8d4941SLisandro Dalcin draw->savesinglefile = PETSC_TRUE; 27949c04938SLisandro Dalcin ierr = PetscDrawSetSave(draw,draw->savefinalfilename);CHKERRQ(ierr); 280e118a51fSLisandro Dalcin ierr = PetscDrawSave(draw);CHKERRQ(ierr); 281e118a51fSLisandro Dalcin } 282e118a51fSLisandro Dalcin ierr = PetscBarrier((PetscObject)draw);CHKERRQ(ierr); 283e118a51fSLisandro Dalcin PetscFunctionReturn(0); 284e118a51fSLisandro Dalcin } 285e118a51fSLisandro Dalcin 2865c6c1daeSBarry Smith /*@ 2875c6c1daeSBarry Smith PetscDrawDestroy - Deletes a draw context. 2885c6c1daeSBarry Smith 2895c6c1daeSBarry Smith Collective on PetscDraw 2905c6c1daeSBarry Smith 2915c6c1daeSBarry Smith Input Parameters: 2925c6c1daeSBarry Smith . draw - the drawing context 2935c6c1daeSBarry Smith 2945c6c1daeSBarry Smith Level: beginner 2955c6c1daeSBarry Smith 2965c6c1daeSBarry Smith .seealso: PetscDrawCreate() 2975c6c1daeSBarry Smith 2985c6c1daeSBarry Smith @*/ 2995c6c1daeSBarry Smith PetscErrorCode PetscDrawDestroy(PetscDraw *draw) 3005c6c1daeSBarry Smith { 3015c6c1daeSBarry Smith PetscErrorCode ierr; 3025fd66863SKarl Rupp 3035c6c1daeSBarry Smith PetscFunctionBegin; 3045c6c1daeSBarry Smith if (!*draw) PetscFunctionReturn(0); 3055c6c1daeSBarry Smith PetscValidHeaderSpecific(*draw,PETSC_DRAW_CLASSID,1); 3065c6c1daeSBarry Smith if (--((PetscObject)(*draw))->refct > 0) PetscFunctionReturn(0); 3075c6c1daeSBarry Smith 3085c6c1daeSBarry Smith if ((*draw)->pause == -2) { 3095c6c1daeSBarry Smith (*draw)->pause = -1; 3105c6c1daeSBarry Smith ierr = PetscDrawPause(*draw);CHKERRQ(ierr); 3115c6c1daeSBarry Smith } 3125c6c1daeSBarry Smith 3135c6c1daeSBarry Smith /* if memory was published then destroy it */ 314e04113cfSBarry Smith ierr = PetscObjectSAWsViewOff((PetscObject)*draw);CHKERRQ(ierr); 3155c6c1daeSBarry Smith 316e118a51fSLisandro Dalcin ierr = PetscDrawDestroy_Private(*draw);CHKERRQ(ierr); 317e118a51fSLisandro Dalcin 3185c6c1daeSBarry Smith if ((*draw)->ops->destroy) { 3195c6c1daeSBarry Smith ierr = (*(*draw)->ops->destroy)(*draw);CHKERRQ(ierr); 3205c6c1daeSBarry Smith } 321e118a51fSLisandro Dalcin ierr = PetscDrawDestroy(&(*draw)->popup);CHKERRQ(ierr); 3225c6c1daeSBarry Smith ierr = PetscFree((*draw)->title);CHKERRQ(ierr); 3235c6c1daeSBarry Smith ierr = PetscFree((*draw)->display);CHKERRQ(ierr); 3245c6c1daeSBarry Smith ierr = PetscFree((*draw)->savefilename);CHKERRQ(ierr); 3258067a7d5SLisandro Dalcin ierr = PetscFree((*draw)->saveimageext);CHKERRQ(ierr); 3268067a7d5SLisandro Dalcin ierr = PetscFree((*draw)->savemovieext);CHKERRQ(ierr); 327287de1a7SBarry Smith ierr = PetscFree((*draw)->savefinalfilename);CHKERRQ(ierr); 3285c6c1daeSBarry Smith ierr = PetscHeaderDestroy(draw);CHKERRQ(ierr); 3295c6c1daeSBarry Smith PetscFunctionReturn(0); 3305c6c1daeSBarry Smith } 3315c6c1daeSBarry Smith 3325c6c1daeSBarry Smith /*@ 3335c6c1daeSBarry Smith PetscDrawGetPopup - Creates a popup window associated with a PetscDraw window. 3345c6c1daeSBarry Smith 3355c6c1daeSBarry Smith Collective on PetscDraw 3365c6c1daeSBarry Smith 3375c6c1daeSBarry Smith Input Parameter: 3385c6c1daeSBarry Smith . draw - the original window 3395c6c1daeSBarry Smith 3405c6c1daeSBarry Smith Output Parameter: 3415c6c1daeSBarry Smith . popup - the new popup window 3425c6c1daeSBarry Smith 3435c6c1daeSBarry Smith Level: advanced 3445c6c1daeSBarry Smith 345ba1e01c4SBarry Smith .seealso: PetscDrawScalePopup(), PetscDrawCreate() 346ba1e01c4SBarry Smith 3475c6c1daeSBarry Smith @*/ 3485c6c1daeSBarry Smith PetscErrorCode PetscDrawGetPopup(PetscDraw draw,PetscDraw *popup) 3495c6c1daeSBarry Smith { 3505c6c1daeSBarry Smith PetscErrorCode ierr; 3515fd66863SKarl Rupp 3525c6c1daeSBarry Smith PetscFunctionBegin; 3535c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 3545c6c1daeSBarry Smith PetscValidPointer(popup,2); 3555c6c1daeSBarry Smith 356a297a907SKarl Rupp if (draw->popup) *popup = draw->popup; 357a297a907SKarl Rupp else if (draw->ops->getpopup) { 3585c6c1daeSBarry Smith ierr = (*draw->ops->getpopup)(draw,popup);CHKERRQ(ierr); 3590b874712SBarry Smith if (*popup) { 3600b874712SBarry Smith ierr = PetscObjectSetOptionsPrefix((PetscObject)*popup,"popup_");CHKERRQ(ierr); 361e118a51fSLisandro Dalcin (*popup)->pause = 0.0; 3620b874712SBarry Smith ierr = PetscDrawSetFromOptions(*popup);CHKERRQ(ierr); 36361f59835SBarry Smith } 3640298fd71SBarry Smith } else *popup = NULL; 3655c6c1daeSBarry Smith PetscFunctionReturn(0); 3665c6c1daeSBarry Smith } 3675c6c1daeSBarry Smith 36894ef8ddeSSatish Balay /*@C 3695c6c1daeSBarry Smith PetscDrawSetDisplay - Sets the display where a PetscDraw object will be displayed 3705c6c1daeSBarry Smith 371*d8d19677SJose E. Roman Input Parameters: 3725c6c1daeSBarry Smith + draw - the drawing context 3735c6c1daeSBarry Smith - display - the X windows display 3745c6c1daeSBarry Smith 3755c6c1daeSBarry Smith Level: advanced 3765c6c1daeSBarry Smith 377ba1e01c4SBarry Smith .seealso: PetscDrawCreate() 378ba1e01c4SBarry Smith 3795c6c1daeSBarry Smith @*/ 3805c6c1daeSBarry Smith PetscErrorCode PetscDrawSetDisplay(PetscDraw draw,const char display[]) 3815c6c1daeSBarry Smith { 3825c6c1daeSBarry Smith PetscErrorCode ierr; 3835c6c1daeSBarry Smith 3845c6c1daeSBarry Smith PetscFunctionBegin; 3855c6c1daeSBarry Smith ierr = PetscFree(draw->display);CHKERRQ(ierr); 3865c6c1daeSBarry Smith ierr = PetscStrallocpy(display,&draw->display);CHKERRQ(ierr); 3875c6c1daeSBarry Smith PetscFunctionReturn(0); 3885c6c1daeSBarry Smith } 3895c6c1daeSBarry Smith 39045f3bb6eSLisandro Dalcin /*@ 39145f3bb6eSLisandro Dalcin PetscDrawSetDoubleBuffer - Sets a window to be double buffered. 39245f3bb6eSLisandro Dalcin 39345f3bb6eSLisandro Dalcin Logically Collective on PetscDraw 3945c6c1daeSBarry Smith 3955c6c1daeSBarry Smith Input Parameter: 39645f3bb6eSLisandro Dalcin . draw - the drawing context 39745f3bb6eSLisandro Dalcin 39845f3bb6eSLisandro Dalcin Level: intermediate 39945f3bb6eSLisandro Dalcin 40045f3bb6eSLisandro Dalcin @*/ 40145f3bb6eSLisandro Dalcin PetscErrorCode PetscDrawSetDoubleBuffer(PetscDraw draw) 4025c6c1daeSBarry Smith { 4035c6c1daeSBarry Smith PetscErrorCode ierr; 4045c6c1daeSBarry Smith 4055c6c1daeSBarry Smith PetscFunctionBegin; 40645f3bb6eSLisandro Dalcin PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 40745f3bb6eSLisandro Dalcin if (draw->ops->setdoublebuffer) { 40845f3bb6eSLisandro Dalcin ierr = (*draw->ops->setdoublebuffer)(draw);CHKERRQ(ierr); 40945f3bb6eSLisandro Dalcin } 4105c6c1daeSBarry Smith PetscFunctionReturn(0); 4115c6c1daeSBarry Smith } 4125c6c1daeSBarry Smith 4135c6c1daeSBarry Smith /*@C 4145c6c1daeSBarry Smith PetscDrawGetSingleton - Gain access to a PetscDraw object as if it were owned 4155c6c1daeSBarry Smith by the one process. 4165c6c1daeSBarry Smith 4175c6c1daeSBarry Smith Collective on PetscDraw 4185c6c1daeSBarry Smith 4195c6c1daeSBarry Smith Input Parameter: 4205c6c1daeSBarry Smith . draw - the original window 4215c6c1daeSBarry Smith 4225c6c1daeSBarry Smith Output Parameter: 4235c6c1daeSBarry Smith . sdraw - the singleton window 4245c6c1daeSBarry Smith 4255c6c1daeSBarry Smith Level: advanced 4265c6c1daeSBarry Smith 4275c6c1daeSBarry Smith .seealso: PetscDrawRestoreSingleton(), PetscViewerGetSingleton(), PetscViewerRestoreSingleton() 4285c6c1daeSBarry Smith 4295c6c1daeSBarry Smith @*/ 4305c6c1daeSBarry Smith PetscErrorCode PetscDrawGetSingleton(PetscDraw draw,PetscDraw *sdraw) 4315c6c1daeSBarry Smith { 4325c6c1daeSBarry Smith PetscErrorCode ierr; 4335c6c1daeSBarry Smith PetscMPIInt size; 4345c6c1daeSBarry Smith 4355c6c1daeSBarry Smith PetscFunctionBegin; 4365c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 4375c6c1daeSBarry Smith PetscValidPointer(sdraw,2); 4385c6c1daeSBarry Smith 439ffc4695bSBarry Smith ierr = MPI_Comm_size(PetscObjectComm((PetscObject)draw),&size);CHKERRMPI(ierr); 440387ef4f7SLisandro Dalcin if (size == 1) { 441387ef4f7SLisandro Dalcin ierr = PetscObjectReference((PetscObject)draw);CHKERRQ(ierr); 442387ef4f7SLisandro Dalcin *sdraw = draw; 443387ef4f7SLisandro Dalcin } else { 4445c6c1daeSBarry Smith if (draw->ops->getsingleton) { 4455c6c1daeSBarry Smith ierr = (*draw->ops->getsingleton)(draw,sdraw);CHKERRQ(ierr); 4465c6c1daeSBarry Smith } else SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_SUP,"Cannot get singleton for this type %s of draw object",((PetscObject)draw)->type_name); 4475c6c1daeSBarry Smith } 4485c6c1daeSBarry Smith PetscFunctionReturn(0); 4495c6c1daeSBarry Smith } 4505c6c1daeSBarry Smith 4515c6c1daeSBarry Smith /*@C 4525c6c1daeSBarry Smith PetscDrawRestoreSingleton - Remove access to a PetscDraw object as if it were owned 4535c6c1daeSBarry Smith by the one process. 4545c6c1daeSBarry Smith 4555c6c1daeSBarry Smith Collective on PetscDraw 4565c6c1daeSBarry Smith 4575c6c1daeSBarry Smith Input Parameters: 4585c6c1daeSBarry Smith + draw - the original window 4595c6c1daeSBarry Smith - sdraw - the singleton window 4605c6c1daeSBarry Smith 4615c6c1daeSBarry Smith Level: advanced 4625c6c1daeSBarry Smith 4635c6c1daeSBarry Smith .seealso: PetscDrawGetSingleton(), PetscViewerGetSingleton(), PetscViewerRestoreSingleton() 4645c6c1daeSBarry Smith 4655c6c1daeSBarry Smith @*/ 4665c6c1daeSBarry Smith PetscErrorCode PetscDrawRestoreSingleton(PetscDraw draw,PetscDraw *sdraw) 4675c6c1daeSBarry Smith { 4685c6c1daeSBarry Smith PetscErrorCode ierr; 4695c6c1daeSBarry Smith PetscMPIInt size; 4705c6c1daeSBarry Smith 4715c6c1daeSBarry Smith PetscFunctionBegin; 4725c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 4735c6c1daeSBarry Smith PetscValidPointer(sdraw,2); 4745c6c1daeSBarry Smith PetscValidHeaderSpecific(*sdraw,PETSC_DRAW_CLASSID,2); 4755c6c1daeSBarry Smith 476ffc4695bSBarry Smith ierr = MPI_Comm_size(PetscObjectComm((PetscObject)draw),&size);CHKERRMPI(ierr); 477387ef4f7SLisandro Dalcin if (size == 1) { 478387ef4f7SLisandro Dalcin if (draw == *sdraw) { 479387ef4f7SLisandro Dalcin ierr = PetscObjectDereference((PetscObject)draw);CHKERRQ(ierr); 480387ef4f7SLisandro Dalcin *sdraw = NULL; 481387ef4f7SLisandro Dalcin } else SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Cannot restore singleton, it is not the parent draw"); 482387ef4f7SLisandro Dalcin } else { 4835c6c1daeSBarry Smith if (draw->ops->restoresingleton) { 4845c6c1daeSBarry Smith ierr = (*draw->ops->restoresingleton)(draw,sdraw);CHKERRQ(ierr); 4855c6c1daeSBarry Smith } else SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_SUP,"Cannot restore singleton for this type %s of draw object",((PetscObject)draw)->type_name); 4865c6c1daeSBarry Smith } 4875c6c1daeSBarry Smith PetscFunctionReturn(0); 4885c6c1daeSBarry Smith } 489