15c6c1daeSBarry Smith 25c6c1daeSBarry Smith /* 35c6c1daeSBarry Smith Provides the registration process for PETSc PetscDraw routines 45c6c1daeSBarry Smith */ 5af0996ceSBarry Smith #include <petsc/private/drawimpl.h> /*I "petscdraw.h" I*/ 6111ee811SBarry Smith #include <petscviewer.h> /*I "petscviewer.h" I*/ 7111ee811SBarry Smith #if defined(PETSC_HAVE_SAWS) 8111ee811SBarry Smith #include <petscviewersaws.h> 9111ee811SBarry Smith #endif 105c6c1daeSBarry Smith 115c6c1daeSBarry Smith /* 125c6c1daeSBarry Smith Contains the list of registered PetscDraw routines 135c6c1daeSBarry Smith */ 14*02c9f0b5SLisandro Dalcin PetscFunctionList PetscDrawList = NULL; 155c6c1daeSBarry Smith 160076e027SBarry Smith /*@C 170076e027SBarry Smith PetscDrawView - Prints the PetscDraw data structure. 180076e027SBarry Smith 190076e027SBarry Smith Collective on PetscDraw 200076e027SBarry Smith 210076e027SBarry Smith Input Parameters: 220076e027SBarry Smith + indraw - the PetscDraw context 230076e027SBarry Smith - viewer - visualization context 240076e027SBarry Smith 25236f5a4dSBarry Smith See PetscDrawSetFromOptions() for options database keys 260076e027SBarry Smith 270076e027SBarry Smith Note: 280076e027SBarry Smith The available visualization contexts include 290076e027SBarry Smith + PETSC_VIEWER_STDOUT_SELF - standard output (default) 300076e027SBarry Smith - PETSC_VIEWER_STDOUT_WORLD - synchronized standard 310076e027SBarry Smith output where only the first processor opens 320076e027SBarry Smith the file. All other processors send their 330076e027SBarry Smith data to the first processor to print. 340076e027SBarry Smith 350076e027SBarry Smith The user can open an alternative visualization context with 360076e027SBarry Smith PetscViewerASCIIOpen() - output to a specified file. 370076e027SBarry Smith 380076e027SBarry Smith Level: beginner 390076e027SBarry Smith 400076e027SBarry Smith .seealso: PCView(), PetscViewerASCIIOpen() 410076e027SBarry Smith @*/ 420076e027SBarry Smith PetscErrorCode PetscDrawView(PetscDraw indraw,PetscViewer viewer) 430076e027SBarry Smith { 440076e027SBarry Smith PetscErrorCode ierr; 450076e027SBarry Smith PetscBool isdraw; 46e04113cfSBarry Smith #if defined(PETSC_HAVE_SAWS) 47536b137fSBarry Smith PetscBool issaws; 480076e027SBarry Smith #endif 490076e027SBarry Smith 500076e027SBarry Smith PetscFunctionBegin; 510076e027SBarry Smith PetscValidHeaderSpecific(indraw,PETSC_DRAW_CLASSID,1); 52f55353a2SBarry Smith if (!viewer) { 53f55353a2SBarry Smith ierr = PetscViewerASCIIGetStdout(PetscObjectComm((PetscObject)indraw),&viewer);CHKERRQ(ierr); 54f55353a2SBarry Smith } 550076e027SBarry Smith PetscValidHeaderSpecific(viewer,PETSC_VIEWER_CLASSID,2); 560076e027SBarry Smith PetscCheckSameComm(indraw,1,viewer,2); 570076e027SBarry Smith 5898c3331eSBarry Smith ierr = PetscObjectPrintClassNamePrefixType((PetscObject)indraw,viewer);CHKERRQ(ierr); 590076e027SBarry Smith ierr = PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERDRAW,&isdraw);CHKERRQ(ierr); 60e04113cfSBarry Smith #if defined(PETSC_HAVE_SAWS) 61536b137fSBarry Smith ierr = PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERSAWS,&issaws);CHKERRQ(ierr); 620076e027SBarry Smith #endif 630076e027SBarry Smith if (isdraw) { 640076e027SBarry Smith PetscDraw draw; 650076e027SBarry Smith char str[36]; 660076e027SBarry Smith PetscReal x,y,bottom,h; 670076e027SBarry Smith 680076e027SBarry Smith ierr = PetscViewerDrawGetDraw(viewer,0,&draw);CHKERRQ(ierr); 690076e027SBarry Smith ierr = PetscDrawGetCurrentPoint(draw,&x,&y);CHKERRQ(ierr); 70a126751eSBarry Smith ierr = PetscStrncpy(str,"PetscDraw: ",sizeof(str));CHKERRQ(ierr); 71a126751eSBarry Smith ierr = PetscStrlcat(str,((PetscObject)indraw)->type_name,sizeof(str));CHKERRQ(ierr); 7251fa3d41SBarry Smith ierr = PetscDrawStringBoxed(draw,x,y,PETSC_DRAW_RED,PETSC_DRAW_BLACK,str,NULL,&h);CHKERRQ(ierr); 730076e027SBarry Smith bottom = y - h; 740076e027SBarry Smith ierr = PetscDrawPushCurrentPoint(draw,x,bottom);CHKERRQ(ierr); 75e04113cfSBarry Smith #if defined(PETSC_HAVE_SAWS) 76536b137fSBarry Smith } else if (issaws) { 77d45a07a7SBarry Smith PetscMPIInt rank; 78d45a07a7SBarry Smith 79d45a07a7SBarry Smith ierr = PetscObjectName((PetscObject)indraw);CHKERRQ(ierr); 80d45a07a7SBarry Smith ierr = MPI_Comm_rank(PETSC_COMM_WORLD,&rank);CHKERRQ(ierr); 81d45a07a7SBarry Smith if (!((PetscObject)indraw)->amsmem && !rank) { 82e04113cfSBarry Smith ierr = PetscObjectViewSAWs((PetscObject)indraw,viewer);CHKERRQ(ierr); 830076e027SBarry Smith } 840076e027SBarry Smith #endif 850076e027SBarry Smith } else if (indraw->ops->view) { 860076e027SBarry Smith ierr = (*indraw->ops->view)(indraw,viewer);CHKERRQ(ierr); 870076e027SBarry Smith } 880076e027SBarry Smith PetscFunctionReturn(0); 890076e027SBarry Smith } 900076e027SBarry Smith 915c6c1daeSBarry Smith /*@C 92fe2efc57SMark PetscDrawViewFromOptions - View from Options 93fe2efc57SMark 94fe2efc57SMark Collective on PetscDraw 95fe2efc57SMark 96fe2efc57SMark Input Parameters: 97fe2efc57SMark + A - the PetscDraw context 98736c3998SJose E. Roman . obj - Optional object 99736c3998SJose E. Roman - name - command line option 100fe2efc57SMark 101fe2efc57SMark Level: intermediate 102fe2efc57SMark .seealso: PetscDraw, PetscDrawView, PetscObjectViewFromOptions(), PetscDrawCreate() 103fe2efc57SMark @*/ 104fe2efc57SMark PetscErrorCode PetscDrawViewFromOptions(PetscDraw A,PetscObject obj,const char name[]) 105fe2efc57SMark { 106fe2efc57SMark PetscErrorCode ierr; 107fe2efc57SMark 108fe2efc57SMark PetscFunctionBegin; 109fe2efc57SMark PetscValidHeaderSpecific(A,PETSC_DRAW_CLASSID,1); 110fe2efc57SMark ierr = PetscObjectViewFromOptions((PetscObject)A,obj,name);CHKERRQ(ierr); 111fe2efc57SMark PetscFunctionReturn(0); 112fe2efc57SMark } 113fe2efc57SMark 114fe2efc57SMark /*@C 1155c6c1daeSBarry Smith PetscDrawCreate - Creates a graphics context. 1165c6c1daeSBarry Smith 117d083f849SBarry Smith Collective 1185c6c1daeSBarry Smith 1195c6c1daeSBarry Smith Input Parameter: 1205c6c1daeSBarry Smith + comm - MPI communicator 1215c6c1daeSBarry Smith . display - X display when using X windows 1225c6c1daeSBarry Smith . title - optional title added to top of window 1235c6c1daeSBarry Smith . x,y - coordinates of lower left corner of window or PETSC_DECIDE 1245c6c1daeSBarry Smith - w, h - width and height of window or PETSC_DECIDE or PETSC_DRAW_HALF_SIZE, PETSC_DRAW_FULL_SIZE, 1255c6c1daeSBarry Smith or PETSC_DRAW_THIRD_SIZE or PETSC_DRAW_QUARTER_SIZE 1265c6c1daeSBarry Smith 1275c6c1daeSBarry Smith Output Parameter: 1285c6c1daeSBarry Smith . draw - location to put the PetscDraw context 1295c6c1daeSBarry Smith 1305c6c1daeSBarry Smith Level: beginner 1315c6c1daeSBarry Smith 1325c6c1daeSBarry Smith 133ba1e01c4SBarry Smith .seealso: PetscDrawSetType(), PetscDrawSetFromOptions(), PetscDrawDestroy(), PetscDrawSetType(), PetscDrawLGCreate(), PetscDrawSPCreate(), 134ba1e01c4SBarry Smith PetscDrawViewPortsCreate(), PetscDrawViewPortsSet(), PetscDrawAxisCreate(), PetscDrawHGCreate(), PetscDrawBarCreate(), 135ba1e01c4SBarry Smith PetscViewerDrawGetDraw(), PetscDrawSetFromOptions(), PetscDrawSetSave(), PetscDrawSetSaveMovie(), PetscDrawSetSaveFinalImage(), 136ba1e01c4SBarry Smith PetscDrawOpenX(), PetscDrawOpenImage(), PetscDrawIsNull(), PetscDrawGetPopup(), PetscDrawCheckResizedWindow(), PetscDrawResizeWindow(), 137ba1e01c4SBarry Smith PetscDrawGetWindowSize(), PetscDrawLine(), PetscDrawArrow(), PetscDrawLineSetWidth(), PetscDrawLineGetWidth(), PetscDrawMarker(), 138ba1e01c4SBarry Smith PetscDrawPoint(), PetscDrawRectangle(), PetscDrawTriangle(), PetscDrawEllipse(), PetscDrawString(), PetscDrawStringCentered(), 13921fcc2ddSBarry Smith PetscDrawStringBoxed(), PetscDrawStringBoxed(), PetscDrawStringVertical(), PetscDrawSetViewPort(), PetscDrawGetViewPort(), 140ba1e01c4SBarry Smith PetscDrawSplitViewPort(), PetscDrawSetTitle(), PetscDrawAppendTitle(), PetscDrawGetTitle(), PetscDrawSetPause(), PetscDrawGetPause(), 141ba1e01c4SBarry Smith PetscDrawPause(), PetscDrawSetDoubleBuffer(), PetscDrawClear(), PetscDrawFlush(), PetscDrawGetSingleton(), PetscDrawGetMouseButton(), 142ba1e01c4SBarry Smith PetscDrawZoom(), PetscDrawGetBoundingBox() 143ba1e01c4SBarry Smith 1445c6c1daeSBarry Smith @*/ 1455c6c1daeSBarry Smith PetscErrorCode PetscDrawCreate(MPI_Comm comm,const char display[],const char title[],int x,int y,int w,int h,PetscDraw *indraw) 1465c6c1daeSBarry Smith { 1475c6c1daeSBarry Smith PetscDraw draw; 1485c6c1daeSBarry Smith PetscErrorCode ierr; 149e118a51fSLisandro Dalcin PetscReal dpause = 0.0; 1505c6c1daeSBarry Smith PetscBool flag; 1515c6c1daeSBarry Smith 1525c6c1daeSBarry Smith PetscFunctionBegin; 153607a6623SBarry Smith ierr = PetscDrawInitializePackage();CHKERRQ(ierr); 154*02c9f0b5SLisandro Dalcin *indraw = NULL; 15573107ff1SLisandro Dalcin ierr = PetscHeaderCreate(draw,PETSC_DRAW_CLASSID,"Draw","Graphics","Draw",comm,PetscDrawDestroy,PetscDrawView);CHKERRQ(ierr); 156a297a907SKarl Rupp 1578f69470aSLisandro Dalcin draw->data = NULL; 1585c6c1daeSBarry Smith ierr = PetscStrallocpy(display,&draw->display);CHKERRQ(ierr); 159815f00f0SLisandro Dalcin ierr = PetscStrallocpy(title,&draw->title);CHKERRQ(ierr); 1605c6c1daeSBarry Smith draw->x = x; 1615c6c1daeSBarry Smith draw->y = y; 1625c6c1daeSBarry Smith draw->w = w; 1635c6c1daeSBarry Smith draw->h = h; 1645c6c1daeSBarry Smith draw->pause = 0.0; 1655c6c1daeSBarry Smith draw->coor_xl = 0.0; 1665c6c1daeSBarry Smith draw->coor_xr = 1.0; 1675c6c1daeSBarry Smith draw->coor_yl = 0.0; 1685c6c1daeSBarry Smith draw->coor_yr = 1.0; 1695c6c1daeSBarry Smith draw->port_xl = 0.0; 1705c6c1daeSBarry Smith draw->port_xr = 1.0; 1715c6c1daeSBarry Smith draw->port_yl = 0.0; 1725c6c1daeSBarry Smith draw->port_yr = 1.0; 173e118a51fSLisandro Dalcin draw->popup = NULL; 174a297a907SKarl Rupp 175c5929fdfSBarry Smith ierr = PetscOptionsGetReal(NULL,NULL,"-draw_pause",&dpause,&flag);CHKERRQ(ierr); 1765c6c1daeSBarry Smith if (flag) draw->pause = dpause; 1778067a7d5SLisandro Dalcin 1780298fd71SBarry Smith draw->savefilename = NULL; 1798067a7d5SLisandro Dalcin draw->saveimageext = NULL; 1808067a7d5SLisandro Dalcin draw->savemovieext = NULL; 1815b399a63SLisandro Dalcin draw->savefilecount = 0; 1828067a7d5SLisandro Dalcin draw->savesinglefile = PETSC_FALSE; 1833d242201SLisandro Dalcin draw->savemoviefps = PETSC_DECIDE; 184a297a907SKarl Rupp 1855c6c1daeSBarry Smith ierr = PetscDrawSetCurrentPoint(draw,.5,.9);CHKERRQ(ierr); 186a297a907SKarl Rupp 1875c6c1daeSBarry Smith draw->boundbox_xl = .5; 1885c6c1daeSBarry Smith draw->boundbox_xr = .5; 1895c6c1daeSBarry Smith draw->boundbox_yl = .9; 1905c6c1daeSBarry Smith draw->boundbox_yr = .9; 1915c6c1daeSBarry Smith 1925c6c1daeSBarry Smith *indraw = draw; 1935c6c1daeSBarry Smith PetscFunctionReturn(0); 1945c6c1daeSBarry Smith } 1955c6c1daeSBarry Smith 1965c6c1daeSBarry Smith /*@C 1975c6c1daeSBarry Smith PetscDrawSetType - Builds graphics object for a particular implementation 1985c6c1daeSBarry Smith 1995c6c1daeSBarry Smith Collective on PetscDraw 2005c6c1daeSBarry Smith 2015c6c1daeSBarry Smith Input Parameter: 2025c6c1daeSBarry Smith + draw - the graphics context 2035c6c1daeSBarry Smith - type - for example, PETSC_DRAW_X 2045c6c1daeSBarry Smith 2055c6c1daeSBarry Smith Options Database Command: 206236f5a4dSBarry Smith . -draw_type <type> - Sets the type; use -help for a list of available methods (for instance, x) 207236f5a4dSBarry Smith 208ba1e01c4SBarry Smith See PetscDrawSetFromOptions() for additional options database keys 2095c6c1daeSBarry Smith 2105c6c1daeSBarry Smith Level: intermediate 2115c6c1daeSBarry Smith 2125c6c1daeSBarry Smith Notes: 2135c6c1daeSBarry Smith See "petsc/include/petscdraw.h" for available methods (for instance, 214ba1e01c4SBarry Smith PETSC_DRAW_X, PETSC_DRAW_TIKZ or PETSC_DRAW_IMAGE) 2155c6c1daeSBarry Smith 216ba1e01c4SBarry Smith .seealso: PetscDrawSetFromOptions(), PetscDrawCreate(), PetscDrawDestroy(), PetscDrawType 2175c6c1daeSBarry Smith @*/ 2185c6c1daeSBarry Smith PetscErrorCode PetscDrawSetType(PetscDraw draw,PetscDrawType type) 2195c6c1daeSBarry Smith { 2205c6c1daeSBarry Smith PetscErrorCode ierr,(*r)(PetscDraw); 2215c6c1daeSBarry Smith PetscBool match; 2225c6c1daeSBarry Smith PetscBool flg=PETSC_FALSE; 2235c6c1daeSBarry Smith 2245c6c1daeSBarry Smith PetscFunctionBegin; 2255c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 2265c6c1daeSBarry Smith PetscValidCharPointer(type,2); 2275c6c1daeSBarry Smith 2285c6c1daeSBarry Smith ierr = PetscObjectTypeCompare((PetscObject)draw,type,&match);CHKERRQ(ierr); 2295c6c1daeSBarry Smith if (match) PetscFunctionReturn(0); 2305c6c1daeSBarry Smith 2315c6c1daeSBarry Smith /* User requests no graphics */ 232c5929fdfSBarry Smith ierr = PetscOptionsHasName(((PetscObject)draw)->options,NULL,"-nox",&flg);CHKERRQ(ierr); 2335c6c1daeSBarry Smith 2345c6c1daeSBarry Smith /* 2355c6c1daeSBarry Smith This is not ideal, but it allows codes to continue to run if X graphics 2365c6c1daeSBarry Smith was requested but is not installed on this machine. Mostly this is for 2375c6c1daeSBarry Smith testing. 2385c6c1daeSBarry Smith */ 2395c6c1daeSBarry Smith #if !defined(PETSC_HAVE_X) 2405c6c1daeSBarry Smith if (!flg) { 2415c6c1daeSBarry Smith ierr = PetscStrcmp(type,PETSC_DRAW_X,&match);CHKERRQ(ierr); 2425c6c1daeSBarry Smith if (match) { 2435c6c1daeSBarry Smith PetscBool dontwarn = PETSC_TRUE; 2445c6c1daeSBarry Smith flg = PETSC_TRUE; 24576a34f28SBarry Smith ierr = PetscOptionsHasName(NULL,NULL,"-nox_warning",&dontwarn);CHKERRQ(ierr); 246a297a907SKarl Rupp if (!dontwarn) (*PetscErrorPrintf)("PETSc installed without X windows on this machine\nproceeding without graphics\n"); 2475c6c1daeSBarry Smith } 2485c6c1daeSBarry Smith } 2495c6c1daeSBarry Smith #endif 2500b50c7b2SBarry Smith if (flg) { 2519c8bf542SScott Kruger ierr = PetscStrcmp(type,"tikz",&flg);CHKERRQ(ierr); 2529c8bf542SScott Kruger if (!flg) type = PETSC_DRAW_NULL; 2539c8bf542SScott Kruger } 2549c8bf542SScott Kruger 2559c8bf542SScott Kruger ierr = PetscStrcmp(type,PETSC_DRAW_NULL,&match);CHKERRQ(ierr); 2569c8bf542SScott Kruger if (match) { 257abc0061bSSatish Balay ierr = PetscOptionsHasName(NULL,NULL,"-draw_double_buffer",NULL);CHKERRQ(ierr); 258abc0061bSSatish Balay ierr = PetscOptionsHasName(NULL,NULL,"-draw_virtual",NULL);CHKERRQ(ierr); 259abc0061bSSatish Balay ierr = PetscOptionsHasName(NULL,NULL,"-draw_fast",NULL);CHKERRQ(ierr); 260abc0061bSSatish Balay ierr = PetscOptionsHasName(NULL,NULL,"-draw_ports",NULL);CHKERRQ(ierr); 261a82f89fdSSatish Balay ierr = PetscOptionsHasName(NULL,NULL,"-draw_coordinates",NULL);CHKERRQ(ierr); 2620b50c7b2SBarry Smith } 2635c6c1daeSBarry Smith 2641c9cd337SJed Brown ierr = PetscFunctionListFind(PetscDrawList,type,&r);CHKERRQ(ierr); 2655c6c1daeSBarry Smith if (!r) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_ARG_UNKNOWN_TYPE,"Unknown PetscDraw type given: %s",type); 266618c1b54SLisandro Dalcin if (draw->ops->destroy) {ierr = (*draw->ops->destroy)(draw);CHKERRQ(ierr);} 267618c1b54SLisandro Dalcin ierr = PetscMemzero(draw->ops,sizeof(struct _PetscDrawOps));CHKERRQ(ierr); 2685c6c1daeSBarry Smith ierr = PetscObjectChangeTypeName((PetscObject)draw,type);CHKERRQ(ierr); 2695c6c1daeSBarry Smith ierr = (*r)(draw);CHKERRQ(ierr); 2705c6c1daeSBarry Smith PetscFunctionReturn(0); 2715c6c1daeSBarry Smith } 2725c6c1daeSBarry Smith 2735c6c1daeSBarry Smith /*@C 2745c6c1daeSBarry Smith PetscDrawGetType - Gets the PetscDraw type as a string from the PetscDraw object. 2755c6c1daeSBarry Smith 2765c6c1daeSBarry Smith Not Collective 2775c6c1daeSBarry Smith 2785c6c1daeSBarry Smith Input Parameter: 2795c6c1daeSBarry Smith . draw - Krylov context 2805c6c1daeSBarry Smith 2815c6c1daeSBarry Smith Output Parameters: 2825c6c1daeSBarry Smith . name - name of PetscDraw method 2835c6c1daeSBarry Smith 2845c6c1daeSBarry Smith Level: advanced 2855c6c1daeSBarry Smith 286ba1e01c4SBarry Smith .seealso: PetscDrawSetType(), PetscDrawType 287ba1e01c4SBarry Smith 2885c6c1daeSBarry Smith @*/ 2895c6c1daeSBarry Smith PetscErrorCode PetscDrawGetType(PetscDraw draw,PetscDrawType *type) 2905c6c1daeSBarry Smith { 2915c6c1daeSBarry Smith PetscFunctionBegin; 2925c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 2935c6c1daeSBarry Smith PetscValidPointer(type,2); 2945c6c1daeSBarry Smith *type = ((PetscObject)draw)->type_name; 2955c6c1daeSBarry Smith PetscFunctionReturn(0); 2965c6c1daeSBarry Smith } 2975c6c1daeSBarry Smith 298607a6623SBarry Smith /*@C 2991c84c290SBarry Smith PetscDrawRegister - Adds a method to the graphics package. 3001c84c290SBarry Smith 3011c84c290SBarry Smith Not Collective 3021c84c290SBarry Smith 3031c84c290SBarry Smith Input Parameters: 3040076e027SBarry Smith + name_solver - name of a new user-defined graphics class 3051c84c290SBarry Smith - routine_create - routine to create method context 3061c84c290SBarry Smith 3071c84c290SBarry Smith Level: developer 3081c84c290SBarry Smith 3091c84c290SBarry Smith Notes: 3100076e027SBarry Smith PetscDrawRegister() may be called multiple times to add several user-defined graphics classes 3111c84c290SBarry Smith 3121c84c290SBarry Smith Sample usage: 3131c84c290SBarry Smith .vb 314bdf89e91SBarry Smith PetscDrawRegister("my_draw_type", MyDrawCreate); 3151c84c290SBarry Smith .ve 3161c84c290SBarry Smith 3170076e027SBarry Smith Then, your specific graphics package can be chosen with the procedural interface via 3181c84c290SBarry Smith $ PetscDrawSetType(ksp,"my_draw_type") 3191c84c290SBarry Smith or at runtime via the option 3201c84c290SBarry Smith $ -draw_type my_draw_type 3211c84c290SBarry Smith 3221c84c290SBarry Smith 323ba1e01c4SBarry Smith .seealso: PetscDrawRegisterAll(), PetscDrawRegisterDestroy(), PetscDrawType, PetscDrawSetType() 3241c84c290SBarry Smith @*/ 325bdf89e91SBarry Smith PetscErrorCode PetscDrawRegister(const char *sname,PetscErrorCode (*function)(PetscDraw)) 3265c6c1daeSBarry Smith { 3275c6c1daeSBarry Smith PetscErrorCode ierr; 3285c6c1daeSBarry Smith 3295c6c1daeSBarry Smith PetscFunctionBegin; 3301d36bdfdSBarry Smith ierr = PetscDrawInitializePackage();CHKERRQ(ierr); 331a240a19fSJed Brown ierr = PetscFunctionListAdd(&PetscDrawList,sname,function);CHKERRQ(ierr); 3325c6c1daeSBarry Smith PetscFunctionReturn(0); 3335c6c1daeSBarry Smith } 3345c6c1daeSBarry Smith 3357faeec8aSLisandro Dalcin /*@C 3367faeec8aSLisandro Dalcin PetscDrawSetOptionsPrefix - Sets the prefix used for searching for all 3377faeec8aSLisandro Dalcin PetscDraw options in the database. 3387faeec8aSLisandro Dalcin 3397faeec8aSLisandro Dalcin Logically Collective on PetscDraw 3407faeec8aSLisandro Dalcin 3417faeec8aSLisandro Dalcin Input Parameter: 3427faeec8aSLisandro Dalcin + draw - the draw context 3437faeec8aSLisandro Dalcin - prefix - the prefix to prepend to all option names 3447faeec8aSLisandro Dalcin 3457faeec8aSLisandro Dalcin Level: advanced 3467faeec8aSLisandro Dalcin 347ba1e01c4SBarry Smith .seealso: PetscDrawSetFromOptions(), PetscDrawCreate() 3487faeec8aSLisandro Dalcin @*/ 3497faeec8aSLisandro Dalcin PetscErrorCode PetscDrawSetOptionsPrefix(PetscDraw draw,const char prefix[]) 3507faeec8aSLisandro Dalcin { 3517faeec8aSLisandro Dalcin PetscErrorCode ierr; 3527faeec8aSLisandro Dalcin 3537faeec8aSLisandro Dalcin PetscFunctionBegin; 3547faeec8aSLisandro Dalcin PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 3557faeec8aSLisandro Dalcin ierr = PetscObjectSetOptionsPrefix((PetscObject)draw,prefix);CHKERRQ(ierr); 3567faeec8aSLisandro Dalcin PetscFunctionReturn(0); 3577faeec8aSLisandro Dalcin } 3587faeec8aSLisandro Dalcin 3595c6c1daeSBarry Smith /*@ 3605c6c1daeSBarry Smith PetscDrawSetFromOptions - Sets the graphics type from the options database. 3615c6c1daeSBarry Smith Defaults to a PETSc X windows graphics. 3625c6c1daeSBarry Smith 3635c6c1daeSBarry Smith Collective on PetscDraw 3645c6c1daeSBarry Smith 3655c6c1daeSBarry Smith Input Parameter: 3665c6c1daeSBarry Smith . draw - the graphics context 3675c6c1daeSBarry Smith 3685c6c1daeSBarry Smith Options Database Keys: 3695c6c1daeSBarry Smith + -nox - do not use X graphics (ignore graphics calls, but run program correctly) 3701cda70a7SBarry Smith . -nox_warning - when X windows support is not installed this prevents the warning message from being printed 3717450148dSBarry Smith . -draw_pause <pause amount> -- -1 indicates wait for mouse input, -2 indicates pause when window is to be destroyed 37273f7a4c5SBarry Smith . -draw_marker_type - <x,point> 3735c6c1daeSBarry Smith . -draw_save [optional filename] - (X windows only) saves each image before it is cleared to a file 374287de1a7SBarry Smith . -draw_save_final_image [optional filename] - (X windows only) saves the final image displayed in a window 375a4494fc1SBarry Smith . -draw_save_movie - converts image files to a movie at the end of the run. See PetscDrawSetSave() 376df8d4941SLisandro Dalcin . -draw_save_single_file - saves each new image in the same file, normally each new image is saved in a new file with 'filename/filename_%d.ext' 377df8d4941SLisandro Dalcin . -draw_save_on_clear - saves an image on each clear, mainly for debugging 378df8d4941SLisandro Dalcin - -draw_save_on_flush - saves an image on each flush, mainly for debugging 3795c6c1daeSBarry Smith 3805c6c1daeSBarry Smith Level: intermediate 3815c6c1daeSBarry Smith 38295452b02SPatrick Sanan Notes: 38395452b02SPatrick Sanan Must be called after PetscDrawCreate() before the PetscDraw is used. 3845c6c1daeSBarry Smith 3855c6c1daeSBarry Smith 386ba1e01c4SBarry Smith .seealso: PetscDrawCreate(), PetscDrawSetType(), PetscDrawSetSave(), PetscDrawSetSaveFinalImage(), PetscDrawPause(), PetscDrawSetPause() 3875c6c1daeSBarry Smith 3885c6c1daeSBarry Smith @*/ 3895c6c1daeSBarry Smith PetscErrorCode PetscDrawSetFromOptions(PetscDraw draw) 3905c6c1daeSBarry Smith { 3915c6c1daeSBarry Smith PetscErrorCode ierr; 3925c6c1daeSBarry Smith PetscBool flg,nox; 3935c6c1daeSBarry Smith char vtype[256]; 3945c6c1daeSBarry Smith const char *def; 3955c6c1daeSBarry Smith #if !defined(PETSC_USE_WINDOWS_GRAPHICS) && !defined(PETSC_HAVE_X) 3965c6c1daeSBarry Smith PetscBool warn; 3975c6c1daeSBarry Smith #endif 3985c6c1daeSBarry Smith 3995c6c1daeSBarry Smith PetscFunctionBegin; 4005c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 4015c6c1daeSBarry Smith 402607a6623SBarry Smith ierr = PetscDrawRegisterAll();CHKERRQ(ierr); 4035c6c1daeSBarry Smith 404a297a907SKarl Rupp if (((PetscObject)draw)->type_name) def = ((PetscObject)draw)->type_name; 405a297a907SKarl Rupp else { 406c5929fdfSBarry Smith ierr = PetscOptionsHasName(((PetscObject)draw)->options,NULL,"-nox",&nox);CHKERRQ(ierr); 4075c6c1daeSBarry Smith def = PETSC_DRAW_NULL; 4085c6c1daeSBarry Smith #if defined(PETSC_USE_WINDOWS_GRAPHICS) 4095c6c1daeSBarry Smith if (!nox) def = PETSC_DRAW_WIN32; 4105c6c1daeSBarry Smith #elif defined(PETSC_HAVE_X) 4115c6c1daeSBarry Smith if (!nox) def = PETSC_DRAW_X; 4125c6c1daeSBarry Smith #else 41376a34f28SBarry Smith ierr = PetscOptionsHasName(NULL,NULL,"-nox_warning",&warn);CHKERRQ(ierr); 414494c9c5dSStefano Zampini if (!nox && !warn) (*PetscErrorPrintf)("PETSc installed without X windows or Microsoft Graphics on this machine\nproceeding without graphics\n"); 4155c6c1daeSBarry Smith #endif 4165c6c1daeSBarry Smith } 4175c6c1daeSBarry Smith ierr = PetscObjectOptionsBegin((PetscObject)draw);CHKERRQ(ierr); 418a264d7a6SBarry Smith ierr = PetscOptionsFList("-draw_type","Type of graphical output","PetscDrawSetType",PetscDrawList,def,vtype,256,&flg);CHKERRQ(ierr); 4195c6c1daeSBarry Smith if (flg) { 4205c6c1daeSBarry Smith ierr = PetscDrawSetType(draw,vtype);CHKERRQ(ierr); 4215c6c1daeSBarry Smith } else if (!((PetscObject)draw)->type_name) { 4225c6c1daeSBarry Smith ierr = PetscDrawSetType(draw,def);CHKERRQ(ierr); 4235c6c1daeSBarry Smith } 4245c6c1daeSBarry Smith ierr = PetscOptionsName("-nox","Run without graphics","None",&nox);CHKERRQ(ierr); 4255c6c1daeSBarry Smith { 42649c04938SLisandro Dalcin char filename[PETSC_MAX_PATH_LEN]; 42749c04938SLisandro Dalcin char movieext[32]; 42849c04938SLisandro Dalcin PetscBool image,movie; 42949c04938SLisandro Dalcin ierr = PetscSNPrintf(filename,sizeof(filename),"%s%s",draw->savefilename?draw->savefilename:"",draw->saveimageext?draw->saveimageext:"");CHKERRQ(ierr); 43049c04938SLisandro Dalcin ierr = PetscSNPrintf(movieext,sizeof(movieext),"%s",draw->savemovieext?draw->savemovieext:"");CHKERRQ(ierr); 4314f7a95f2SLisandro Dalcin ierr = PetscOptionsString("-draw_save","Save graphics to image file","PetscDrawSetSave",filename,filename,sizeof(filename),&image);CHKERRQ(ierr); 4324f7a95f2SLisandro Dalcin ierr = PetscOptionsString("-draw_save_movie","Make a movie from saved images","PetscDrawSetSaveMovie",movieext,movieext,sizeof(movieext),&movie);CHKERRQ(ierr); 433fbfcfee5SBarry Smith ierr = PetscOptionsInt("-draw_save_movie_fps","Set frames per second in saved movie",PETSC_FUNCTION_NAME,draw->savemoviefps,&draw->savemoviefps,NULL);CHKERRQ(ierr); 434fbfcfee5SBarry Smith ierr = PetscOptionsBool("-draw_save_single_file","Each new image replaces previous image in file",PETSC_FUNCTION_NAME,draw->savesinglefile,&draw->savesinglefile,NULL);CHKERRQ(ierr); 43549c04938SLisandro Dalcin if (image) {ierr = PetscDrawSetSave(draw,filename);CHKERRQ(ierr);} 43649c04938SLisandro Dalcin if (movie) {ierr = PetscDrawSetSaveMovie(draw,movieext);CHKERRQ(ierr);} 4374f7a95f2SLisandro Dalcin ierr = PetscOptionsString("-draw_save_final_image","Save final graphics to image file","PetscDrawSetSaveFinalImage",filename,filename,sizeof(filename),&image);CHKERRQ(ierr); 43849c04938SLisandro Dalcin if (image) {ierr = PetscDrawSetSaveFinalImage(draw,filename);CHKERRQ(ierr);} 439fbfcfee5SBarry Smith ierr = PetscOptionsBool("-draw_save_on_clear","Save graphics to file on each clear",PETSC_FUNCTION_NAME,draw->saveonclear,&draw->saveonclear,NULL);CHKERRQ(ierr); 440fbfcfee5SBarry Smith ierr = PetscOptionsBool("-draw_save_on_flush","Save graphics to file on each flush",PETSC_FUNCTION_NAME,draw->saveonflush,&draw->saveonflush,NULL);CHKERRQ(ierr); 4415c6c1daeSBarry Smith } 442e118a51fSLisandro Dalcin ierr = PetscOptionsReal("-draw_pause","Amount of time that program pauses after plots","PetscDrawSetPause",draw->pause,&draw->pause,NULL);CHKERRQ(ierr); 44373f7a4c5SBarry Smith ierr = PetscOptionsEnum("-draw_marker_type","Type of marker to use on plots","PetscDrawSetMarkerType",PetscDrawMarkerTypes,(PetscEnum)draw->markertype,(PetscEnum *)&draw->markertype,NULL);CHKERRQ(ierr); 44473f7a4c5SBarry Smith 4455c6c1daeSBarry Smith /* process any options handlers added with PetscObjectAddOptionsHandler() */ 4460633abcbSJed Brown ierr = PetscObjectProcessOptionsHandlers(PetscOptionsObject,(PetscObject)draw);CHKERRQ(ierr); 447ce1779c8SBarry Smith 448ce1779c8SBarry Smith ierr = PetscDrawViewFromOptions(draw,NULL,"-draw_view");CHKERRQ(ierr); 4495c6c1daeSBarry Smith ierr = PetscOptionsEnd();CHKERRQ(ierr); 4505c6c1daeSBarry Smith PetscFunctionReturn(0); 4515c6c1daeSBarry Smith } 452