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 PetscBool isnull; 32 33 PetscFunctionBegin; 34 PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 35 ierr = PetscDrawIsNull(draw,&isnull);CHKERRQ(ierr); 36 if (isnull) PetscFunctionReturn(0); 37 if (draw->markertype == PETSC_DRAW_MARKER_CROSS){ 38 if (draw->ops->coordinatetopixel && draw->ops->pointpixel) { 39 PetscInt i,j,k; 40 ierr = (*draw->ops->coordinatetopixel)(draw,xl,yl,&i,&j);CHKERRQ(ierr); 41 for (k=-2; k<=2; k++) { 42 ierr = (*draw->ops->pointpixel)(draw,i+k,j+k,cl);CHKERRQ(ierr); 43 ierr = (*draw->ops->pointpixel)(draw,i+k,j-k,cl);CHKERRQ(ierr); 44 } 45 } else if (draw->ops->string) { 46 ierr = (*draw->ops->string)(draw,xl,yl,cl,"x");CHKERRQ(ierr); 47 } else SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"No support for drawing marker type CROSS"); 48 } else if (draw->markertype == PETSC_DRAW_MARKER_PLUS){ 49 if (draw->ops->coordinatetopixel && draw->ops->pointpixel) { 50 PetscInt i,j,k; 51 ierr = (*draw->ops->coordinatetopixel)(draw,xl,yl,&i,&j);CHKERRQ(ierr); 52 for (k=-2; k<=2; k++) { 53 ierr = (*draw->ops->pointpixel)(draw,i,j+k,cl);CHKERRQ(ierr); 54 ierr = (*draw->ops->pointpixel)(draw,i+k,j,cl);CHKERRQ(ierr); 55 } 56 } else if (draw->ops->string) { 57 ierr = (*draw->ops->string)(draw,xl,yl,cl,"+");CHKERRQ(ierr); 58 } else SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"No support for drawing marker type PLUS"); 59 } else if (draw->markertype == PETSC_DRAW_MARKER_CIRCLE){ 60 if (draw->ops->coordinatetopixel && draw->ops->pointpixel) { 61 PetscInt i,j,k; 62 ierr = (*draw->ops->coordinatetopixel)(draw,xl,yl,&i,&j);CHKERRQ(ierr); 63 for (k=-1; k<=1; k++) { 64 ierr = (*draw->ops->pointpixel)(draw,i+2,j+k,cl);CHKERRQ(ierr); 65 ierr = (*draw->ops->pointpixel)(draw,i-2,j+k,cl);CHKERRQ(ierr); 66 ierr = (*draw->ops->pointpixel)(draw,i+k,j+2,cl);CHKERRQ(ierr); 67 ierr = (*draw->ops->pointpixel)(draw,i+k,j-2,cl);CHKERRQ(ierr); 68 } 69 } else if (draw->ops->string) { 70 ierr = (*draw->ops->string)(draw,xl,yl,cl,"+");CHKERRQ(ierr); 71 } else SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"No support for drawing marker type CIRCLE"); 72 } else { 73 ierr = (*draw->ops->point)(draw,xl,yl,cl);CHKERRQ(ierr); 74 } 75 PetscFunctionReturn(0); 76 } 77 78 #undef __FUNCT__ 79 #define __FUNCT__ "PetscDrawSetMarkerType" 80 /*@ 81 PetscDrawSetMarkerType - sets the type of marker to display with PetscDrawMarker() 82 83 Not collective 84 85 Input Parameters: 86 + draw - the drawing context 87 - mtype - either PETSC_DRAW_MARKER_CROSS (default) or PETSC_DRAW_MARKER_POINT 88 89 Options Database: 90 . -draw_marker_type - x or point 91 92 Level: beginner 93 94 Concepts: marker^drawing 95 Concepts: drawing^marker 96 97 .seealso: PetscDrawPoint(), PetscDrawMarker() 98 99 @*/ 100 PetscErrorCode PetscDrawSetMarkerType(PetscDraw draw,PetscDrawMarkerType mtype) 101 { 102 PetscFunctionBegin; 103 PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 104 draw->markertype = mtype; 105 PetscFunctionReturn(0); 106 } 107 108 #undef __FUNCT__ 109 #define __FUNCT__ "PetscDrawGetMarkerType" 110 /*@ 111 PetscDrawGetMarkerType - gets the type of marker to display with PetscDrawMarker() 112 113 Not collective 114 115 Input Parameters: 116 + draw - the drawing context 117 - mtype - either PETSC_DRAW_MARKER_CROSS (default) or PETSC_DRAW_MARKER_POINT 118 119 Level: beginner 120 121 Concepts: marker^drawing 122 Concepts: drawing^marker 123 124 .seealso: PetscDrawPoint(), PetscDrawMarker() 125 126 @*/ 127 PetscErrorCode PetscDrawGetMarkerType(PetscDraw draw,PetscDrawMarkerType *mtype) 128 { 129 PetscFunctionBegin; 130 PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 131 *mtype = draw->markertype; 132 PetscFunctionReturn(0); 133 } 134