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