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