xref: /petsc/src/sys/classes/draw/interface/dmarker.c (revision 2fe279fdf3e687a416e4eadb7d3c7a82d60442c6)
178e9f83eSLisandro Dalcin 
278e9f83eSLisandro Dalcin /*
378e9f83eSLisandro Dalcin        Provides the calling sequences for all the basic PetscDraw routines.
478e9f83eSLisandro Dalcin */
5af0996ceSBarry Smith #include <petsc/private/drawimpl.h> /*I "petscdraw.h" I*/
602c9f0b5SLisandro Dalcin const char *const PetscDrawMarkerTypes[] = {"CROSS", "POINT", "PLUS", "CIRCLE", "PetscDrawMarkerType", "PETSC_DRAW_MARKER_", NULL};
778e9f83eSLisandro Dalcin 
878e9f83eSLisandro Dalcin /*@
9811af0c4SBarry Smith    PetscDrawMarker - draws a marker onto a drawable.
1078e9f83eSLisandro Dalcin 
1120f4b53cSBarry Smith    Not Collective
1278e9f83eSLisandro Dalcin 
1378e9f83eSLisandro Dalcin    Input Parameters:
1478e9f83eSLisandro Dalcin +  draw - the drawing context
15*2fe279fdSBarry Smith .  xl - horizontal coordinate of the marker
16*2fe279fdSBarry Smith .  yl - vertical coordinate of the marker
1778e9f83eSLisandro Dalcin -  cl - the color of the marker
1878e9f83eSLisandro Dalcin 
1978e9f83eSLisandro Dalcin    Level: beginner
2078e9f83eSLisandro Dalcin 
21811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawPoint()`, `PetscDrawString()`, `PetscDrawSetMarkerType()`, `PetscDrawGetMarkerType()`
2278e9f83eSLisandro Dalcin @*/
23d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawMarker(PetscDraw draw, PetscReal xl, PetscReal yl, int cl)
24d71ae5a4SJacob Faibussowitsch {
2578e9f83eSLisandro Dalcin   PetscFunctionBegin;
2678e9f83eSLisandro Dalcin   PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
27472f5ad0SBarry Smith   if (draw->markertype == PETSC_DRAW_MARKER_CROSS) {
2878e9f83eSLisandro Dalcin     if (draw->ops->coordinatetopixel && draw->ops->pointpixel) {
29a7e8706aSLisandro Dalcin       int i, j, k;
30dbbe0bcdSBarry Smith       PetscUseTypeMethod(draw, coordinatetopixel, xl, yl, &i, &j);
3178e9f83eSLisandro Dalcin       for (k = -2; k <= 2; k++) {
329566063dSJacob Faibussowitsch         PetscCall((*draw->ops->pointpixel)(draw, i + k, j + k, cl));
339566063dSJacob Faibussowitsch         PetscCall((*draw->ops->pointpixel)(draw, i + k, j - k, cl));
3478e9f83eSLisandro Dalcin       }
35dbbe0bcdSBarry Smith     } else PetscUseTypeMethod(draw, string, xl, yl, cl, "x");
36472f5ad0SBarry Smith   } else if (draw->markertype == PETSC_DRAW_MARKER_PLUS) {
37472f5ad0SBarry Smith     if (draw->ops->coordinatetopixel && draw->ops->pointpixel) {
38a7e8706aSLisandro Dalcin       int i, j, k;
39dbbe0bcdSBarry Smith       PetscUseTypeMethod(draw, coordinatetopixel, xl, yl, &i, &j);
40472f5ad0SBarry Smith       for (k = -2; k <= 2; k++) {
419566063dSJacob Faibussowitsch         PetscCall((*draw->ops->pointpixel)(draw, i, j + k, cl));
429566063dSJacob Faibussowitsch         PetscCall((*draw->ops->pointpixel)(draw, i + k, j, cl));
43472f5ad0SBarry Smith       }
44dbbe0bcdSBarry Smith     } else PetscUseTypeMethod(draw, string, xl, yl, cl, "+");
45472f5ad0SBarry Smith   } else if (draw->markertype == PETSC_DRAW_MARKER_CIRCLE) {
46472f5ad0SBarry Smith     if (draw->ops->coordinatetopixel && draw->ops->pointpixel) {
47a7e8706aSLisandro Dalcin       int i, j, k;
48dbbe0bcdSBarry Smith       PetscUseTypeMethod(draw, coordinatetopixel, xl, yl, &i, &j);
49472f5ad0SBarry Smith       for (k = -1; k <= 1; k++) {
509566063dSJacob Faibussowitsch         PetscCall((*draw->ops->pointpixel)(draw, i + 2, j + k, cl));
519566063dSJacob Faibussowitsch         PetscCall((*draw->ops->pointpixel)(draw, i - 2, j + k, cl));
529566063dSJacob Faibussowitsch         PetscCall((*draw->ops->pointpixel)(draw, i + k, j + 2, cl));
539566063dSJacob Faibussowitsch         PetscCall((*draw->ops->pointpixel)(draw, i + k, j - 2, cl));
54472f5ad0SBarry Smith       }
55dbbe0bcdSBarry Smith     } else PetscUseTypeMethod(draw, string, xl, yl, cl, "+");
56dbbe0bcdSBarry Smith   } else PetscUseTypeMethod(draw, point, xl, yl, cl);
573ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
5873f7a4c5SBarry Smith }
5973f7a4c5SBarry Smith 
6073f7a4c5SBarry Smith /*@
61811af0c4SBarry Smith    PetscDrawSetMarkerType - sets the type of marker to display with `PetscDrawMarker()`
6273f7a4c5SBarry Smith 
6320f4b53cSBarry Smith    Not Collective
6473f7a4c5SBarry Smith 
6573f7a4c5SBarry Smith    Input Parameters:
6673f7a4c5SBarry Smith +  draw - the drawing context
67811af0c4SBarry Smith -  mtype - either `PETSC_DRAW_MARKER_CROSS` (default) or `PETSC_DRAW_MARKER_POINT`
6873f7a4c5SBarry Smith 
69811af0c4SBarry Smith    Options Database Key:
7073f7a4c5SBarry Smith .  -draw_marker_type - x or point
7173f7a4c5SBarry Smith 
7273f7a4c5SBarry Smith    Level: beginner
7373f7a4c5SBarry Smith 
74811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawPoint()`, `PetscDrawMarker()`, `PetscDrawGetMarkerType()`, `PetscDrawMarkerType`
7573f7a4c5SBarry Smith @*/
76d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawSetMarkerType(PetscDraw draw, PetscDrawMarkerType mtype)
77d71ae5a4SJacob Faibussowitsch {
7873f7a4c5SBarry Smith   PetscFunctionBegin;
7973f7a4c5SBarry Smith   PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
8073f7a4c5SBarry Smith   draw->markertype = mtype;
813ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
8273f7a4c5SBarry Smith }
8373f7a4c5SBarry Smith 
8473f7a4c5SBarry Smith /*@
85811af0c4SBarry Smith    PetscDrawGetMarkerType - gets the type of marker to display with `PetscDrawMarker()`
8673f7a4c5SBarry Smith 
8720f4b53cSBarry Smith    Not Collective
8873f7a4c5SBarry Smith 
8973f7a4c5SBarry Smith    Input Parameters:
9073f7a4c5SBarry Smith +  draw - the drawing context
91811af0c4SBarry Smith -  mtype - either `PETSC_DRAW_MARKER_CROSS` (default) or `PETSC_DRAW_MARKER_POINT`
9273f7a4c5SBarry Smith 
9373f7a4c5SBarry Smith    Level: beginner
9473f7a4c5SBarry Smith 
95811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawPoint()`, `PetscDrawMarker()`, `PetscDrawSetMarkerType()`, `PetscDrawMarkerType`
9673f7a4c5SBarry Smith @*/
97d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawGetMarkerType(PetscDraw draw, PetscDrawMarkerType *mtype)
98d71ae5a4SJacob Faibussowitsch {
9973f7a4c5SBarry Smith   PetscFunctionBegin;
10073f7a4c5SBarry Smith   PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
10173f7a4c5SBarry Smith   *mtype = draw->markertype;
1023ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
10378e9f83eSLisandro Dalcin }
104