1 2 /* 3 Provides the calling sequences for all the basic PetscDraw routines. 4 */ 5 #include <petsc/private/drawimpl.h> /*I "petscdraw.h" I*/ 6 const char *const PetscDrawMarkerTypes[] = {"CROSS","POINT","PLUS","CIRCLE","PetscDrawMarkerType","PETSC_DRAW_MARKER_",0}; 7 8 #undef __FUNCT__ 9 #define __FUNCT__ "PetscDrawMarker" 10 /*@ 11 PetscDrawMarker - PetscDraws a marker onto a drawable. 12 13 Not collective 14 15 Input Parameters: 16 + draw - the drawing context 17 . xl,yl - the coordinates of the marker 18 - cl - the color of the marker 19 20 Level: beginner 21 22 Concepts: marker^drawing 23 Concepts: drawing^marker 24 25 .seealso: PetscDrawPoint(), PetscDrawString(), PetscDrawSetMarkerType() 26 27 @*/ 28 PetscErrorCode PetscDrawMarker(PetscDraw draw,PetscReal xl,PetscReal yl,int cl) 29 { 30 PetscErrorCode ierr; 31 32 PetscFunctionBegin; 33 PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 34 if (draw->markertype == PETSC_DRAW_MARKER_CROSS){ 35 if (draw->ops->coordinatetopixel && draw->ops->pointpixel) { 36 int i,j,k; 37 ierr = (*draw->ops->coordinatetopixel)(draw,xl,yl,&i,&j);CHKERRQ(ierr); 38 for (k=-2; k<=2; k++) { 39 ierr = (*draw->ops->pointpixel)(draw,i+k,j+k,cl);CHKERRQ(ierr); 40 ierr = (*draw->ops->pointpixel)(draw,i+k,j-k,cl);CHKERRQ(ierr); 41 } 42 } else if (draw->ops->string) { 43 ierr = (*draw->ops->string)(draw,xl,yl,cl,"x");CHKERRQ(ierr); 44 } else SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"No support for drawing marker type CROSS"); 45 } else if (draw->markertype == PETSC_DRAW_MARKER_PLUS){ 46 if (draw->ops->coordinatetopixel && draw->ops->pointpixel) { 47 int i,j,k; 48 ierr = (*draw->ops->coordinatetopixel)(draw,xl,yl,&i,&j);CHKERRQ(ierr); 49 for (k=-2; k<=2; k++) { 50 ierr = (*draw->ops->pointpixel)(draw,i,j+k,cl);CHKERRQ(ierr); 51 ierr = (*draw->ops->pointpixel)(draw,i+k,j,cl);CHKERRQ(ierr); 52 } 53 } else if (draw->ops->string) { 54 ierr = (*draw->ops->string)(draw,xl,yl,cl,"+");CHKERRQ(ierr); 55 } else SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"No support for drawing marker type PLUS"); 56 } else if (draw->markertype == PETSC_DRAW_MARKER_CIRCLE){ 57 if (draw->ops->coordinatetopixel && draw->ops->pointpixel) { 58 int i,j,k; 59 ierr = (*draw->ops->coordinatetopixel)(draw,xl,yl,&i,&j);CHKERRQ(ierr); 60 for (k=-1; k<=1; k++) { 61 ierr = (*draw->ops->pointpixel)(draw,i+2,j+k,cl);CHKERRQ(ierr); 62 ierr = (*draw->ops->pointpixel)(draw,i-2,j+k,cl);CHKERRQ(ierr); 63 ierr = (*draw->ops->pointpixel)(draw,i+k,j+2,cl);CHKERRQ(ierr); 64 ierr = (*draw->ops->pointpixel)(draw,i+k,j-2,cl);CHKERRQ(ierr); 65 } 66 } else if (draw->ops->string) { 67 ierr = (*draw->ops->string)(draw,xl,yl,cl,"+");CHKERRQ(ierr); 68 } else SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"No support for drawing marker type CIRCLE"); 69 } else { 70 ierr = (*draw->ops->point)(draw,xl,yl,cl);CHKERRQ(ierr); 71 } 72 PetscFunctionReturn(0); 73 } 74 75 #undef __FUNCT__ 76 #define __FUNCT__ "PetscDrawSetMarkerType" 77 /*@ 78 PetscDrawSetMarkerType - sets the type of marker to display with PetscDrawMarker() 79 80 Not collective 81 82 Input Parameters: 83 + draw - the drawing context 84 - mtype - either PETSC_DRAW_MARKER_CROSS (default) or PETSC_DRAW_MARKER_POINT 85 86 Options Database: 87 . -draw_marker_type - x or point 88 89 Level: beginner 90 91 Concepts: marker^drawing 92 Concepts: drawing^marker 93 94 .seealso: PetscDrawPoint(), PetscDrawMarker() 95 96 @*/ 97 PetscErrorCode PetscDrawSetMarkerType(PetscDraw draw,PetscDrawMarkerType mtype) 98 { 99 PetscFunctionBegin; 100 PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 101 draw->markertype = mtype; 102 PetscFunctionReturn(0); 103 } 104 105 #undef __FUNCT__ 106 #define __FUNCT__ "PetscDrawGetMarkerType" 107 /*@ 108 PetscDrawGetMarkerType - gets the type of marker to display with PetscDrawMarker() 109 110 Not collective 111 112 Input Parameters: 113 + draw - the drawing context 114 - mtype - either PETSC_DRAW_MARKER_CROSS (default) or PETSC_DRAW_MARKER_POINT 115 116 Level: beginner 117 118 Concepts: marker^drawing 119 Concepts: drawing^marker 120 121 .seealso: PetscDrawPoint(), PetscDrawMarker() 122 123 @*/ 124 PetscErrorCode PetscDrawGetMarkerType(PetscDraw draw,PetscDrawMarkerType *mtype) 125 { 126 PetscFunctionBegin; 127 PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 128 *mtype = draw->markertype; 129 PetscFunctionReturn(0); 130 } 131