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