xref: /petsc/src/sys/classes/draw/interface/dmarker.c (revision 73f7a4c58009429340478f3f682e3e4d3587e270)
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[]     = {"X","POINT","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()
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_X){
38     if (draw->ops->coordinatetopixel && draw->ops->pointpixel) {
39       PetscInt i,j,k;
40       ierr = (*draw->ops->coordinatetopixel)(draw,xl,yl,&i,&j);
41       for (k=-2; k<=2; k++) {
42         ierr = (*draw->ops->pointpixel)(draw,i+k,j+k,cl);
43         ierr = (*draw->ops->pointpixel)(draw,i+k,j-k,cl);
44       }
45     } else if (draw->ops->string) {
46        ierr = (*draw->ops->string)(draw,xl,yl,cl,"x");CHKERRQ(ierr);
47     } else SETERRQ(PetscObjectComm((PetscObject)draw),PETSC_ERR_SUP,"No support for drawing marker type X");
48   } else {
49     ierr = (*draw->ops->point)(draw,xl,yl,cl);CHKERRQ(ierr);
50   }
51   PetscFunctionReturn(0);
52 }
53 
54 #undef __FUNCT__
55 #define __FUNCT__ "PetscDrawSetMarkerType"
56 /*@
57    PetscDrawSetMarkerType - sets the type of marker to display with PetscDrawMarker()
58 
59    Not collective
60 
61    Input Parameters:
62 +  draw - the drawing context
63 -  mtype - either PETSC_DRAW_MARKER_X (default) or PETSC_DRAW_MARKER_POINT
64 
65    Options Database:
66 .  -draw_marker_type - x or point
67 
68    Level: beginner
69 
70    Concepts: marker^drawing
71    Concepts: drawing^marker
72 
73 .seealso: PetscDrawPoint(), PetscDrawMarker()
74 
75 @*/
76 PetscErrorCode  PetscDrawSetMarkerType(PetscDraw draw,PetscDrawMarkerType mtype)
77 {
78   PetscFunctionBegin;
79   PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1);
80   draw->markertype = mtype;
81   PetscFunctionReturn(0);
82 }
83 
84 #undef __FUNCT__
85 #define __FUNCT__ "PetscDrawGetMarkerType"
86 /*@
87    PetscDrawGetMarkerType - gets the type of marker to display with PetscDrawMarker()
88 
89    Not collective
90 
91    Input Parameters:
92 +  draw - the drawing context
93 -  mtype - either PETSC_DRAW_MARKER_X (default) or PETSC_DRAW_MARKER_POINT
94 
95    Level: beginner
96 
97    Concepts: marker^drawing
98    Concepts: drawing^marker
99 
100 .seealso: PetscDrawPoint(), PetscDrawMarker()
101 
102 @*/
103 PetscErrorCode  PetscDrawGetMarkerType(PetscDraw draw,PetscDrawMarkerType *mtype)
104 {
105   PetscFunctionBegin;
106   PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1);
107   *mtype = draw->markertype;
108   PetscFunctionReturn(0);
109 }
110