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*/ 6*02c9f0b5SLisandro Dalcin const char *const PetscDrawMarkerTypes[] = {"CROSS","POINT","PLUS","CIRCLE","PetscDrawMarkerType","PETSC_DRAW_MARKER_",NULL}; 778e9f83eSLisandro Dalcin 878e9f83eSLisandro Dalcin /*@ 978e9f83eSLisandro Dalcin PetscDrawMarker - PetscDraws a marker onto a drawable. 1078e9f83eSLisandro Dalcin 1178e9f83eSLisandro Dalcin Not collective 1278e9f83eSLisandro Dalcin 1378e9f83eSLisandro Dalcin Input Parameters: 1478e9f83eSLisandro Dalcin + draw - the drawing context 1578e9f83eSLisandro Dalcin . xl,yl - the coordinates of the marker 1678e9f83eSLisandro Dalcin - cl - the color of the marker 1778e9f83eSLisandro Dalcin 1878e9f83eSLisandro Dalcin Level: beginner 1978e9f83eSLisandro Dalcin 2078e9f83eSLisandro Dalcin 21ba1e01c4SBarry Smith .seealso: PetscDrawPoint(), PetscDrawString(), PetscDrawSetMarkerType(), PetscDrawGetMarkerType() 2278e9f83eSLisandro Dalcin 2378e9f83eSLisandro Dalcin @*/ 2478e9f83eSLisandro Dalcin PetscErrorCode PetscDrawMarker(PetscDraw draw,PetscReal xl,PetscReal yl,int cl) 2578e9f83eSLisandro Dalcin { 2678e9f83eSLisandro Dalcin PetscErrorCode ierr; 2778e9f83eSLisandro Dalcin 2878e9f83eSLisandro Dalcin PetscFunctionBegin; 2978e9f83eSLisandro Dalcin PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 30472f5ad0SBarry Smith if (draw->markertype == PETSC_DRAW_MARKER_CROSS){ 3178e9f83eSLisandro Dalcin if (draw->ops->coordinatetopixel && draw->ops->pointpixel) { 32a7e8706aSLisandro Dalcin int i,j,k; 33302440fdSBarry Smith ierr = (*draw->ops->coordinatetopixel)(draw,xl,yl,&i,&j);CHKERRQ(ierr); 3478e9f83eSLisandro Dalcin for (k=-2; k<=2; k++) { 35302440fdSBarry Smith ierr = (*draw->ops->pointpixel)(draw,i+k,j+k,cl);CHKERRQ(ierr); 36302440fdSBarry Smith ierr = (*draw->ops->pointpixel)(draw,i+k,j-k,cl);CHKERRQ(ierr); 3778e9f83eSLisandro Dalcin } 3878e9f83eSLisandro Dalcin } else if (draw->ops->string) { 3978e9f83eSLisandro Dalcin ierr = (*draw->ops->string)(draw,xl,yl,cl,"x");CHKERRQ(ierr); 408f69470aSLisandro Dalcin } else SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"No support for drawing marker type CROSS"); 41472f5ad0SBarry Smith } else if (draw->markertype == PETSC_DRAW_MARKER_PLUS){ 42472f5ad0SBarry Smith if (draw->ops->coordinatetopixel && draw->ops->pointpixel) { 43a7e8706aSLisandro Dalcin int i,j,k; 44302440fdSBarry Smith ierr = (*draw->ops->coordinatetopixel)(draw,xl,yl,&i,&j);CHKERRQ(ierr); 45472f5ad0SBarry Smith for (k=-2; k<=2; k++) { 46302440fdSBarry Smith ierr = (*draw->ops->pointpixel)(draw,i,j+k,cl);CHKERRQ(ierr); 47302440fdSBarry Smith ierr = (*draw->ops->pointpixel)(draw,i+k,j,cl);CHKERRQ(ierr); 48472f5ad0SBarry Smith } 49472f5ad0SBarry Smith } else if (draw->ops->string) { 50472f5ad0SBarry Smith ierr = (*draw->ops->string)(draw,xl,yl,cl,"+");CHKERRQ(ierr); 518f69470aSLisandro Dalcin } else SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"No support for drawing marker type PLUS"); 52472f5ad0SBarry Smith } else if (draw->markertype == PETSC_DRAW_MARKER_CIRCLE){ 53472f5ad0SBarry Smith if (draw->ops->coordinatetopixel && draw->ops->pointpixel) { 54a7e8706aSLisandro Dalcin int i,j,k; 55302440fdSBarry Smith ierr = (*draw->ops->coordinatetopixel)(draw,xl,yl,&i,&j);CHKERRQ(ierr); 56472f5ad0SBarry Smith for (k=-1; k<=1; k++) { 57302440fdSBarry Smith ierr = (*draw->ops->pointpixel)(draw,i+2,j+k,cl);CHKERRQ(ierr); 58302440fdSBarry Smith ierr = (*draw->ops->pointpixel)(draw,i-2,j+k,cl);CHKERRQ(ierr); 59302440fdSBarry Smith ierr = (*draw->ops->pointpixel)(draw,i+k,j+2,cl);CHKERRQ(ierr); 60302440fdSBarry Smith ierr = (*draw->ops->pointpixel)(draw,i+k,j-2,cl);CHKERRQ(ierr); 61472f5ad0SBarry Smith } 62472f5ad0SBarry Smith } else if (draw->ops->string) { 63472f5ad0SBarry Smith ierr = (*draw->ops->string)(draw,xl,yl,cl,"+");CHKERRQ(ierr); 648f69470aSLisandro Dalcin } else SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"No support for drawing marker type CIRCLE"); 6573f7a4c5SBarry Smith } else { 6673f7a4c5SBarry Smith ierr = (*draw->ops->point)(draw,xl,yl,cl);CHKERRQ(ierr); 6773f7a4c5SBarry Smith } 6873f7a4c5SBarry Smith PetscFunctionReturn(0); 6973f7a4c5SBarry Smith } 7073f7a4c5SBarry Smith 7173f7a4c5SBarry Smith /*@ 7273f7a4c5SBarry Smith PetscDrawSetMarkerType - sets the type of marker to display with PetscDrawMarker() 7373f7a4c5SBarry Smith 7473f7a4c5SBarry Smith Not collective 7573f7a4c5SBarry Smith 7673f7a4c5SBarry Smith Input Parameters: 7773f7a4c5SBarry Smith + draw - the drawing context 78472f5ad0SBarry Smith - mtype - either PETSC_DRAW_MARKER_CROSS (default) or PETSC_DRAW_MARKER_POINT 7973f7a4c5SBarry Smith 8073f7a4c5SBarry Smith Options Database: 8173f7a4c5SBarry Smith . -draw_marker_type - x or point 8273f7a4c5SBarry Smith 8373f7a4c5SBarry Smith Level: beginner 8473f7a4c5SBarry Smith 8573f7a4c5SBarry Smith 86ba1e01c4SBarry Smith .seealso: PetscDrawPoint(), PetscDrawMarker(), PetscDrawGetMarkerType() 8773f7a4c5SBarry Smith 8873f7a4c5SBarry Smith @*/ 8973f7a4c5SBarry Smith PetscErrorCode PetscDrawSetMarkerType(PetscDraw draw,PetscDrawMarkerType mtype) 9073f7a4c5SBarry Smith { 9173f7a4c5SBarry Smith PetscFunctionBegin; 9273f7a4c5SBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 9373f7a4c5SBarry Smith draw->markertype = mtype; 9473f7a4c5SBarry Smith PetscFunctionReturn(0); 9573f7a4c5SBarry Smith } 9673f7a4c5SBarry Smith 9773f7a4c5SBarry Smith /*@ 9873f7a4c5SBarry Smith PetscDrawGetMarkerType - gets the type of marker to display with PetscDrawMarker() 9973f7a4c5SBarry Smith 10073f7a4c5SBarry Smith Not collective 10173f7a4c5SBarry Smith 10273f7a4c5SBarry Smith Input Parameters: 10373f7a4c5SBarry Smith + draw - the drawing context 104472f5ad0SBarry Smith - mtype - either PETSC_DRAW_MARKER_CROSS (default) or PETSC_DRAW_MARKER_POINT 10573f7a4c5SBarry Smith 10673f7a4c5SBarry Smith Level: beginner 10773f7a4c5SBarry Smith 10873f7a4c5SBarry Smith 109ba1e01c4SBarry Smith .seealso: PetscDrawPoint(), PetscDrawMarker(), PetscDrawSetMarkerType() 11073f7a4c5SBarry Smith 11173f7a4c5SBarry Smith @*/ 11273f7a4c5SBarry Smith PetscErrorCode PetscDrawGetMarkerType(PetscDraw draw,PetscDrawMarkerType *mtype) 11373f7a4c5SBarry Smith { 11473f7a4c5SBarry Smith PetscFunctionBegin; 11573f7a4c5SBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 11673f7a4c5SBarry Smith *mtype = draw->markertype; 11778e9f83eSLisandro Dalcin PetscFunctionReturn(0); 11878e9f83eSLisandro Dalcin } 119