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