xref: /petsc/src/sys/classes/draw/interface/dmarker.c (revision feff33ee0b5b037fa8f9f294dede656a2f85cc47)
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