xref: /petsc/src/sys/classes/draw/interface/dmarker.c (revision 73f7a4c58009429340478f3f682e3e4d3587e270)
178e9f83eSLisandro Dalcin 
278e9f83eSLisandro Dalcin /*
378e9f83eSLisandro Dalcin        Provides the calling sequences for all the basic PetscDraw routines.
478e9f83eSLisandro Dalcin */
578e9f83eSLisandro Dalcin #include <petsc-private/drawimpl.h>  /*I "petscdraw.h" I*/
6*73f7a4c5SBarry Smith const char *const PetscDrawMarkerTypes[]     = {"X","POINT","PetscDrawMarkerType","PETSC_DRAW_MARKER_",0};
778e9f83eSLisandro Dalcin 
878e9f83eSLisandro Dalcin #undef __FUNCT__
978e9f83eSLisandro Dalcin #define __FUNCT__ "PetscDrawMarker"
1078e9f83eSLisandro Dalcin /*@
1178e9f83eSLisandro Dalcin    PetscDrawMarker - PetscDraws a marker onto a drawable.
1278e9f83eSLisandro Dalcin 
1378e9f83eSLisandro Dalcin    Not collective
1478e9f83eSLisandro Dalcin 
1578e9f83eSLisandro Dalcin    Input Parameters:
1678e9f83eSLisandro Dalcin +  draw - the drawing context
1778e9f83eSLisandro Dalcin .  xl,yl - the coordinates of the marker
1878e9f83eSLisandro Dalcin -  cl - the color of the marker
1978e9f83eSLisandro Dalcin 
2078e9f83eSLisandro Dalcin    Level: beginner
2178e9f83eSLisandro Dalcin 
2278e9f83eSLisandro Dalcin    Concepts: marker^drawing
2378e9f83eSLisandro Dalcin    Concepts: drawing^marker
2478e9f83eSLisandro Dalcin 
2578e9f83eSLisandro Dalcin .seealso: PetscDrawPoint()
2678e9f83eSLisandro Dalcin 
2778e9f83eSLisandro Dalcin @*/
2878e9f83eSLisandro Dalcin PetscErrorCode  PetscDrawMarker(PetscDraw draw,PetscReal xl,PetscReal yl,int cl)
2978e9f83eSLisandro Dalcin {
3078e9f83eSLisandro Dalcin   PetscErrorCode ierr;
3178e9f83eSLisandro Dalcin   PetscBool      isnull;
3278e9f83eSLisandro Dalcin 
3378e9f83eSLisandro Dalcin   PetscFunctionBegin;
3478e9f83eSLisandro Dalcin   PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1);
3578e9f83eSLisandro Dalcin   ierr = PetscDrawIsNull(draw,&isnull);CHKERRQ(ierr);
3678e9f83eSLisandro Dalcin   if (isnull) PetscFunctionReturn(0);
37*73f7a4c5SBarry Smith   if (draw->markertype == PETSC_DRAW_MARKER_X){
3878e9f83eSLisandro Dalcin     if (draw->ops->coordinatetopixel && draw->ops->pointpixel) {
3978e9f83eSLisandro Dalcin       PetscInt i,j,k;
4078e9f83eSLisandro Dalcin       ierr = (*draw->ops->coordinatetopixel)(draw,xl,yl,&i,&j);
4178e9f83eSLisandro Dalcin       for (k=-2; k<=2; k++) {
4278e9f83eSLisandro Dalcin         ierr = (*draw->ops->pointpixel)(draw,i+k,j+k,cl);
4378e9f83eSLisandro Dalcin         ierr = (*draw->ops->pointpixel)(draw,i+k,j-k,cl);
4478e9f83eSLisandro Dalcin       }
4578e9f83eSLisandro Dalcin     } else if (draw->ops->string) {
4678e9f83eSLisandro Dalcin        ierr = (*draw->ops->string)(draw,xl,yl,cl,"x");CHKERRQ(ierr);
47*73f7a4c5SBarry Smith     } else SETERRQ(PetscObjectComm((PetscObject)draw),PETSC_ERR_SUP,"No support for drawing marker type X");
48*73f7a4c5SBarry Smith   } else {
49*73f7a4c5SBarry Smith     ierr = (*draw->ops->point)(draw,xl,yl,cl);CHKERRQ(ierr);
50*73f7a4c5SBarry Smith   }
51*73f7a4c5SBarry Smith   PetscFunctionReturn(0);
52*73f7a4c5SBarry Smith }
53*73f7a4c5SBarry Smith 
54*73f7a4c5SBarry Smith #undef __FUNCT__
55*73f7a4c5SBarry Smith #define __FUNCT__ "PetscDrawSetMarkerType"
56*73f7a4c5SBarry Smith /*@
57*73f7a4c5SBarry Smith    PetscDrawSetMarkerType - sets the type of marker to display with PetscDrawMarker()
58*73f7a4c5SBarry Smith 
59*73f7a4c5SBarry Smith    Not collective
60*73f7a4c5SBarry Smith 
61*73f7a4c5SBarry Smith    Input Parameters:
62*73f7a4c5SBarry Smith +  draw - the drawing context
63*73f7a4c5SBarry Smith -  mtype - either PETSC_DRAW_MARKER_X (default) or PETSC_DRAW_MARKER_POINT
64*73f7a4c5SBarry Smith 
65*73f7a4c5SBarry Smith    Options Database:
66*73f7a4c5SBarry Smith .  -draw_marker_type - x or point
67*73f7a4c5SBarry Smith 
68*73f7a4c5SBarry Smith    Level: beginner
69*73f7a4c5SBarry Smith 
70*73f7a4c5SBarry Smith    Concepts: marker^drawing
71*73f7a4c5SBarry Smith    Concepts: drawing^marker
72*73f7a4c5SBarry Smith 
73*73f7a4c5SBarry Smith .seealso: PetscDrawPoint(), PetscDrawMarker()
74*73f7a4c5SBarry Smith 
75*73f7a4c5SBarry Smith @*/
76*73f7a4c5SBarry Smith PetscErrorCode  PetscDrawSetMarkerType(PetscDraw draw,PetscDrawMarkerType mtype)
77*73f7a4c5SBarry Smith {
78*73f7a4c5SBarry Smith   PetscFunctionBegin;
79*73f7a4c5SBarry Smith   PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1);
80*73f7a4c5SBarry Smith   draw->markertype = mtype;
81*73f7a4c5SBarry Smith   PetscFunctionReturn(0);
82*73f7a4c5SBarry Smith }
83*73f7a4c5SBarry Smith 
84*73f7a4c5SBarry Smith #undef __FUNCT__
85*73f7a4c5SBarry Smith #define __FUNCT__ "PetscDrawGetMarkerType"
86*73f7a4c5SBarry Smith /*@
87*73f7a4c5SBarry Smith    PetscDrawGetMarkerType - gets the type of marker to display with PetscDrawMarker()
88*73f7a4c5SBarry Smith 
89*73f7a4c5SBarry Smith    Not collective
90*73f7a4c5SBarry Smith 
91*73f7a4c5SBarry Smith    Input Parameters:
92*73f7a4c5SBarry Smith +  draw - the drawing context
93*73f7a4c5SBarry Smith -  mtype - either PETSC_DRAW_MARKER_X (default) or PETSC_DRAW_MARKER_POINT
94*73f7a4c5SBarry Smith 
95*73f7a4c5SBarry Smith    Level: beginner
96*73f7a4c5SBarry Smith 
97*73f7a4c5SBarry Smith    Concepts: marker^drawing
98*73f7a4c5SBarry Smith    Concepts: drawing^marker
99*73f7a4c5SBarry Smith 
100*73f7a4c5SBarry Smith .seealso: PetscDrawPoint(), PetscDrawMarker()
101*73f7a4c5SBarry Smith 
102*73f7a4c5SBarry Smith @*/
103*73f7a4c5SBarry Smith PetscErrorCode  PetscDrawGetMarkerType(PetscDraw draw,PetscDrawMarkerType *mtype)
104*73f7a4c5SBarry Smith {
105*73f7a4c5SBarry Smith   PetscFunctionBegin;
106*73f7a4c5SBarry Smith   PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1);
107*73f7a4c5SBarry Smith   *mtype = draw->markertype;
10878e9f83eSLisandro Dalcin   PetscFunctionReturn(0);
10978e9f83eSLisandro Dalcin }
110