Actual source code: dmarker.c

  1: /*
  2:        Provides the calling sequences for all the basic PetscDraw routines.
  3: */
  4: #include <petsc/private/drawimpl.h>
  5: const char *const PetscDrawMarkerTypes[] = {"CROSS", "POINT", "PLUS", "CIRCLE", "PetscDrawMarkerType", "PETSC_DRAW_MARKER_", NULL};

  7: /*@
  8:   PetscDrawMarker - draws a marker onto a drawable.

 10:   Not Collective

 12:   Input Parameters:
 13: + draw - the drawing context
 14: . xl   - horizontal coordinate of the marker
 15: . yl   - vertical coordinate of the marker
 16: - cl   - the color of the marker

 18:   Level: beginner

 20: .seealso: `PetscDraw`, `PetscDrawPoint()`, `PetscDrawString()`, `PetscDrawSetMarkerType()`, `PetscDrawGetMarkerType()`
 21: @*/
 22: PetscErrorCode PetscDrawMarker(PetscDraw draw, PetscReal xl, PetscReal yl, int cl)
 23: {
 24:   PetscFunctionBegin;
 26:   if (draw->markertype == PETSC_DRAW_MARKER_CROSS) {
 27:     if (draw->ops->coordinatetopixel && draw->ops->pointpixel) {
 28:       int i, j, k;
 29:       PetscUseTypeMethod(draw, coordinatetopixel, xl, yl, &i, &j);
 30:       for (k = -2; k <= 2; k++) {
 31:         PetscUseTypeMethod(draw, pointpixel, i + k, j + k, cl);
 32:         PetscUseTypeMethod(draw, pointpixel, i + k, j - k, cl);
 33:       }
 34:     } else PetscUseTypeMethod(draw, string, xl, yl, cl, "x");
 35:   } else if (draw->markertype == PETSC_DRAW_MARKER_PLUS) {
 36:     if (draw->ops->coordinatetopixel && draw->ops->pointpixel) {
 37:       int i, j, k;
 38:       PetscUseTypeMethod(draw, coordinatetopixel, xl, yl, &i, &j);
 39:       for (k = -2; k <= 2; k++) {
 40:         PetscUseTypeMethod(draw, pointpixel, i, j + k, cl);
 41:         PetscUseTypeMethod(draw, pointpixel, i + k, j, cl);
 42:       }
 43:     } else PetscUseTypeMethod(draw, string, xl, yl, cl, "+");
 44:   } else if (draw->markertype == PETSC_DRAW_MARKER_CIRCLE) {
 45:     if (draw->ops->coordinatetopixel && draw->ops->pointpixel) {
 46:       int i, j, k;
 47:       PetscUseTypeMethod(draw, coordinatetopixel, xl, yl, &i, &j);
 48:       for (k = -1; k <= 1; k++) {
 49:         PetscUseTypeMethod(draw, pointpixel, i + 2, j + k, cl);
 50:         PetscUseTypeMethod(draw, pointpixel, i - 2, j + k, cl);
 51:         PetscUseTypeMethod(draw, pointpixel, i + k, j + 2, cl);
 52:         PetscUseTypeMethod(draw, pointpixel, i + k, j - 2, cl);
 53:       }
 54:     } else PetscUseTypeMethod(draw, string, xl, yl, cl, "+");
 55:   } else PetscUseTypeMethod(draw, point, xl, yl, cl);
 56:   PetscFunctionReturn(PETSC_SUCCESS);
 57: }

 59: /*@
 60:   PetscDrawSetMarkerType - sets the type of marker to display with `PetscDrawMarker()`

 62:   Not Collective

 64:   Input Parameters:
 65: + draw  - the drawing context
 66: - mtype - either `PETSC_DRAW_MARKER_CROSS` (default) or `PETSC_DRAW_MARKER_POINT`

 68:   Options Database Key:
 69: . -draw_marker_type - x or point

 71:   Level: beginner

 73: .seealso: `PetscDraw`, `PetscDrawPoint()`, `PetscDrawMarker()`, `PetscDrawGetMarkerType()`, `PetscDrawMarkerType`
 74: @*/
 75: PetscErrorCode PetscDrawSetMarkerType(PetscDraw draw, PetscDrawMarkerType mtype)
 76: {
 77:   PetscFunctionBegin;
 79:   draw->markertype = mtype;
 80:   PetscFunctionReturn(PETSC_SUCCESS);
 81: }

 83: /*@
 84:   PetscDrawGetMarkerType - gets the type of marker to display with `PetscDrawMarker()`

 86:   Not Collective

 88:   Input Parameters:
 89: + draw  - the drawing context
 90: - mtype - either `PETSC_DRAW_MARKER_CROSS` (default) or `PETSC_DRAW_MARKER_POINT`

 92:   Level: beginner

 94: .seealso: `PetscDraw`, `PetscDrawPoint()`, `PetscDrawMarker()`, `PetscDrawSetMarkerType()`, `PetscDrawMarkerType`
 95: @*/
 96: PetscErrorCode PetscDrawGetMarkerType(PetscDraw draw, PetscDrawMarkerType *mtype)
 97: {
 98:   PetscFunctionBegin;
100:   *mtype = draw->markertype;
101:   PetscFunctionReturn(PETSC_SUCCESS);
102: }