xref: /petsc/src/sys/classes/draw/interface/dmarker.c (revision 1845a3b3cc898b5f1bae566a250aa1584f69f955)
178e9f83eSLisandro Dalcin /*
278e9f83eSLisandro Dalcin        Provides the calling sequences for all the basic PetscDraw routines.
378e9f83eSLisandro Dalcin */
4af0996ceSBarry Smith #include <petsc/private/drawimpl.h> /*I "petscdraw.h" I*/
502c9f0b5SLisandro Dalcin const char *const PetscDrawMarkerTypes[] = {"CROSS", "POINT", "PLUS", "CIRCLE", "PetscDrawMarkerType", "PETSC_DRAW_MARKER_", NULL};
678e9f83eSLisandro Dalcin 
778e9f83eSLisandro Dalcin /*@
8811af0c4SBarry Smith   PetscDrawMarker - draws a marker onto a drawable.
978e9f83eSLisandro Dalcin 
1020f4b53cSBarry Smith   Not Collective
1178e9f83eSLisandro Dalcin 
1278e9f83eSLisandro Dalcin   Input Parameters:
1378e9f83eSLisandro Dalcin + draw - the drawing context
142fe279fdSBarry Smith . xl   - horizontal coordinate of the marker
152fe279fdSBarry Smith . yl   - vertical coordinate of the marker
1678e9f83eSLisandro Dalcin - cl   - the color of the marker
1778e9f83eSLisandro Dalcin 
1878e9f83eSLisandro Dalcin   Level: beginner
1978e9f83eSLisandro Dalcin 
20811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawPoint()`, `PetscDrawString()`, `PetscDrawSetMarkerType()`, `PetscDrawGetMarkerType()`
2178e9f83eSLisandro Dalcin @*/
PetscDrawMarker(PetscDraw draw,PetscReal xl,PetscReal yl,int cl)22d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawMarker(PetscDraw draw, PetscReal xl, PetscReal yl, int cl)
23d71ae5a4SJacob Faibussowitsch {
2478e9f83eSLisandro Dalcin   PetscFunctionBegin;
2578e9f83eSLisandro Dalcin   PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
26472f5ad0SBarry Smith   if (draw->markertype == PETSC_DRAW_MARKER_CROSS) {
2778e9f83eSLisandro Dalcin     if (draw->ops->coordinatetopixel && draw->ops->pointpixel) {
28a7e8706aSLisandro Dalcin       int i, j, k;
29dbbe0bcdSBarry Smith       PetscUseTypeMethod(draw, coordinatetopixel, xl, yl, &i, &j);
3078e9f83eSLisandro Dalcin       for (k = -2; k <= 2; k++) {
31*9927e4dfSBarry Smith         PetscUseTypeMethod(draw, pointpixel, i + k, j + k, cl);
32*9927e4dfSBarry Smith         PetscUseTypeMethod(draw, pointpixel, i + k, j - k, cl);
3378e9f83eSLisandro Dalcin       }
34dbbe0bcdSBarry Smith     } else PetscUseTypeMethod(draw, string, xl, yl, cl, "x");
35472f5ad0SBarry Smith   } else if (draw->markertype == PETSC_DRAW_MARKER_PLUS) {
36472f5ad0SBarry Smith     if (draw->ops->coordinatetopixel && draw->ops->pointpixel) {
37a7e8706aSLisandro Dalcin       int i, j, k;
38dbbe0bcdSBarry Smith       PetscUseTypeMethod(draw, coordinatetopixel, xl, yl, &i, &j);
39472f5ad0SBarry Smith       for (k = -2; k <= 2; k++) {
40*9927e4dfSBarry Smith         PetscUseTypeMethod(draw, pointpixel, i, j + k, cl);
41*9927e4dfSBarry Smith         PetscUseTypeMethod(draw, pointpixel, i + k, j, cl);
42472f5ad0SBarry Smith       }
43dbbe0bcdSBarry Smith     } else PetscUseTypeMethod(draw, string, xl, yl, cl, "+");
44472f5ad0SBarry Smith   } else if (draw->markertype == PETSC_DRAW_MARKER_CIRCLE) {
45472f5ad0SBarry Smith     if (draw->ops->coordinatetopixel && draw->ops->pointpixel) {
46a7e8706aSLisandro Dalcin       int i, j, k;
47dbbe0bcdSBarry Smith       PetscUseTypeMethod(draw, coordinatetopixel, xl, yl, &i, &j);
48472f5ad0SBarry Smith       for (k = -1; k <= 1; k++) {
49*9927e4dfSBarry Smith         PetscUseTypeMethod(draw, pointpixel, i + 2, j + k, cl);
50*9927e4dfSBarry Smith         PetscUseTypeMethod(draw, pointpixel, i - 2, j + k, cl);
51*9927e4dfSBarry Smith         PetscUseTypeMethod(draw, pointpixel, i + k, j + 2, cl);
52*9927e4dfSBarry Smith         PetscUseTypeMethod(draw, pointpixel, i + k, j - 2, cl);
53472f5ad0SBarry Smith       }
54dbbe0bcdSBarry Smith     } else PetscUseTypeMethod(draw, string, xl, yl, cl, "+");
55dbbe0bcdSBarry Smith   } else PetscUseTypeMethod(draw, point, xl, yl, cl);
563ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
5773f7a4c5SBarry Smith }
5873f7a4c5SBarry Smith 
5973f7a4c5SBarry Smith /*@
60811af0c4SBarry Smith   PetscDrawSetMarkerType - sets the type of marker to display with `PetscDrawMarker()`
6173f7a4c5SBarry Smith 
6220f4b53cSBarry Smith   Not Collective
6373f7a4c5SBarry Smith 
6473f7a4c5SBarry Smith   Input Parameters:
6573f7a4c5SBarry Smith + draw  - the drawing context
66811af0c4SBarry Smith - mtype - either `PETSC_DRAW_MARKER_CROSS` (default) or `PETSC_DRAW_MARKER_POINT`
6773f7a4c5SBarry Smith 
68811af0c4SBarry Smith   Options Database Key:
6973f7a4c5SBarry Smith . -draw_marker_type - x or point
7073f7a4c5SBarry Smith 
7173f7a4c5SBarry Smith   Level: beginner
7273f7a4c5SBarry Smith 
73811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawPoint()`, `PetscDrawMarker()`, `PetscDrawGetMarkerType()`, `PetscDrawMarkerType`
7473f7a4c5SBarry Smith @*/
PetscDrawSetMarkerType(PetscDraw draw,PetscDrawMarkerType mtype)75d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawSetMarkerType(PetscDraw draw, PetscDrawMarkerType mtype)
76d71ae5a4SJacob Faibussowitsch {
7773f7a4c5SBarry Smith   PetscFunctionBegin;
7873f7a4c5SBarry Smith   PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
7973f7a4c5SBarry Smith   draw->markertype = mtype;
803ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
8173f7a4c5SBarry Smith }
8273f7a4c5SBarry Smith 
8373f7a4c5SBarry Smith /*@
84811af0c4SBarry Smith   PetscDrawGetMarkerType - gets the type of marker to display with `PetscDrawMarker()`
8573f7a4c5SBarry Smith 
8620f4b53cSBarry Smith   Not Collective
8773f7a4c5SBarry Smith 
8873f7a4c5SBarry Smith   Input Parameters:
8973f7a4c5SBarry Smith + draw  - the drawing context
90811af0c4SBarry Smith - mtype - either `PETSC_DRAW_MARKER_CROSS` (default) or `PETSC_DRAW_MARKER_POINT`
9173f7a4c5SBarry Smith 
9273f7a4c5SBarry Smith   Level: beginner
9373f7a4c5SBarry Smith 
94811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawPoint()`, `PetscDrawMarker()`, `PetscDrawSetMarkerType()`, `PetscDrawMarkerType`
9573f7a4c5SBarry Smith @*/
PetscDrawGetMarkerType(PetscDraw draw,PetscDrawMarkerType * mtype)96d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawGetMarkerType(PetscDraw draw, PetscDrawMarkerType *mtype)
97d71ae5a4SJacob Faibussowitsch {
9873f7a4c5SBarry Smith   PetscFunctionBegin;
9973f7a4c5SBarry Smith   PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
10073f7a4c5SBarry Smith   *mtype = draw->markertype;
1013ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
10278e9f83eSLisandro Dalcin }
103