178e9f83eSLisandro Dalcin 278e9f83eSLisandro Dalcin /* 378e9f83eSLisandro Dalcin Provides the calling sequences for all the basic PetscDraw routines. 478e9f83eSLisandro Dalcin */ 578e9f83eSLisandro Dalcin #include <petsc-private/drawimpl.h> /*I "petscdraw.h" I*/ 6*472f5ad0SBarry Smith const char *const PetscDrawMarkerTypes[] = {"CROSS","POINT","PLUS","CIRCLE","PetscDrawMarkerType","PETSC_DRAW_MARKER_",0}; 778e9f83eSLisandro Dalcin 878e9f83eSLisandro Dalcin #undef __FUNCT__ 978e9f83eSLisandro Dalcin #define __FUNCT__ "PetscDrawMarker" 1078e9f83eSLisandro Dalcin /*@ 1178e9f83eSLisandro Dalcin PetscDrawMarker - PetscDraws a marker onto a drawable. 1278e9f83eSLisandro Dalcin 1378e9f83eSLisandro Dalcin Not collective 1478e9f83eSLisandro Dalcin 1578e9f83eSLisandro Dalcin Input Parameters: 1678e9f83eSLisandro Dalcin + draw - the drawing context 1778e9f83eSLisandro Dalcin . xl,yl - the coordinates of the marker 1878e9f83eSLisandro Dalcin - cl - the color of the marker 1978e9f83eSLisandro Dalcin 2078e9f83eSLisandro Dalcin Level: beginner 2178e9f83eSLisandro Dalcin 2278e9f83eSLisandro Dalcin Concepts: marker^drawing 2378e9f83eSLisandro Dalcin Concepts: drawing^marker 2478e9f83eSLisandro Dalcin 25*472f5ad0SBarry Smith .seealso: PetscDrawPoint(), PetscDrawString(), PetscDrawSetMarkerType() 2678e9f83eSLisandro Dalcin 2778e9f83eSLisandro Dalcin @*/ 2878e9f83eSLisandro Dalcin PetscErrorCode PetscDrawMarker(PetscDraw draw,PetscReal xl,PetscReal yl,int cl) 2978e9f83eSLisandro Dalcin { 3078e9f83eSLisandro Dalcin PetscErrorCode ierr; 3178e9f83eSLisandro Dalcin PetscBool isnull; 3278e9f83eSLisandro Dalcin 3378e9f83eSLisandro Dalcin PetscFunctionBegin; 3478e9f83eSLisandro Dalcin PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 3578e9f83eSLisandro Dalcin ierr = PetscDrawIsNull(draw,&isnull);CHKERRQ(ierr); 3678e9f83eSLisandro Dalcin if (isnull) PetscFunctionReturn(0); 37*472f5ad0SBarry Smith if (draw->markertype == PETSC_DRAW_MARKER_CROSS){ 3878e9f83eSLisandro Dalcin if (draw->ops->coordinatetopixel && draw->ops->pointpixel) { 3978e9f83eSLisandro Dalcin PetscInt i,j,k; 4078e9f83eSLisandro Dalcin ierr = (*draw->ops->coordinatetopixel)(draw,xl,yl,&i,&j); 4178e9f83eSLisandro Dalcin for (k=-2; k<=2; k++) { 4278e9f83eSLisandro Dalcin ierr = (*draw->ops->pointpixel)(draw,i+k,j+k,cl); 4378e9f83eSLisandro Dalcin ierr = (*draw->ops->pointpixel)(draw,i+k,j-k,cl); 4478e9f83eSLisandro Dalcin } 4578e9f83eSLisandro Dalcin } else if (draw->ops->string) { 4678e9f83eSLisandro Dalcin ierr = (*draw->ops->string)(draw,xl,yl,cl,"x");CHKERRQ(ierr); 47*472f5ad0SBarry Smith } else SETERRQ(PetscObjectComm((PetscObject)draw),PETSC_ERR_SUP,"No support for drawing marker type CROSS"); 48*472f5ad0SBarry Smith } else if (draw->markertype == PETSC_DRAW_MARKER_PLUS){ 49*472f5ad0SBarry Smith if (draw->ops->coordinatetopixel && draw->ops->pointpixel) { 50*472f5ad0SBarry Smith PetscInt i,j,k; 51*472f5ad0SBarry Smith ierr = (*draw->ops->coordinatetopixel)(draw,xl,yl,&i,&j); 52*472f5ad0SBarry Smith for (k=-2; k<=2; k++) { 53*472f5ad0SBarry Smith ierr = (*draw->ops->pointpixel)(draw,i,j+k,cl); 54*472f5ad0SBarry Smith ierr = (*draw->ops->pointpixel)(draw,i+k,j,cl); 55*472f5ad0SBarry Smith } 56*472f5ad0SBarry Smith } else if (draw->ops->string) { 57*472f5ad0SBarry Smith ierr = (*draw->ops->string)(draw,xl,yl,cl,"+");CHKERRQ(ierr); 58*472f5ad0SBarry Smith } else SETERRQ(PetscObjectComm((PetscObject)draw),PETSC_ERR_SUP,"No support for drawing marker type PLUS"); 59*472f5ad0SBarry Smith } else if (draw->markertype == PETSC_DRAW_MARKER_CIRCLE){ 60*472f5ad0SBarry Smith if (draw->ops->coordinatetopixel && draw->ops->pointpixel) { 61*472f5ad0SBarry Smith PetscInt i,j,k; 62*472f5ad0SBarry Smith ierr = (*draw->ops->coordinatetopixel)(draw,xl,yl,&i,&j); 63*472f5ad0SBarry Smith for (k=-1; k<=1; k++) { 64*472f5ad0SBarry Smith ierr = (*draw->ops->pointpixel)(draw,i+2,j+k,cl); 65*472f5ad0SBarry Smith ierr = (*draw->ops->pointpixel)(draw,i-2,j+k,cl); 66*472f5ad0SBarry Smith ierr = (*draw->ops->pointpixel)(draw,i+k,j+2,cl); 67*472f5ad0SBarry Smith ierr = (*draw->ops->pointpixel)(draw,i+k,j-2,cl); 68*472f5ad0SBarry Smith } 69*472f5ad0SBarry Smith } else if (draw->ops->string) { 70*472f5ad0SBarry Smith ierr = (*draw->ops->string)(draw,xl,yl,cl,"+");CHKERRQ(ierr); 71*472f5ad0SBarry Smith } else SETERRQ(PetscObjectComm((PetscObject)draw),PETSC_ERR_SUP,"No support for drawing marker type CIRCLE"); 7273f7a4c5SBarry Smith } else { 7373f7a4c5SBarry Smith ierr = (*draw->ops->point)(draw,xl,yl,cl);CHKERRQ(ierr); 7473f7a4c5SBarry Smith } 7573f7a4c5SBarry Smith PetscFunctionReturn(0); 7673f7a4c5SBarry Smith } 7773f7a4c5SBarry Smith 7873f7a4c5SBarry Smith #undef __FUNCT__ 7973f7a4c5SBarry Smith #define __FUNCT__ "PetscDrawSetMarkerType" 8073f7a4c5SBarry Smith /*@ 8173f7a4c5SBarry Smith PetscDrawSetMarkerType - sets the type of marker to display with PetscDrawMarker() 8273f7a4c5SBarry Smith 8373f7a4c5SBarry Smith Not collective 8473f7a4c5SBarry Smith 8573f7a4c5SBarry Smith Input Parameters: 8673f7a4c5SBarry Smith + draw - the drawing context 87*472f5ad0SBarry Smith - mtype - either PETSC_DRAW_MARKER_CROSS (default) or PETSC_DRAW_MARKER_POINT 8873f7a4c5SBarry Smith 8973f7a4c5SBarry Smith Options Database: 9073f7a4c5SBarry Smith . -draw_marker_type - x or point 9173f7a4c5SBarry Smith 9273f7a4c5SBarry Smith Level: beginner 9373f7a4c5SBarry Smith 9473f7a4c5SBarry Smith Concepts: marker^drawing 9573f7a4c5SBarry Smith Concepts: drawing^marker 9673f7a4c5SBarry Smith 9773f7a4c5SBarry Smith .seealso: PetscDrawPoint(), PetscDrawMarker() 9873f7a4c5SBarry Smith 9973f7a4c5SBarry Smith @*/ 10073f7a4c5SBarry Smith PetscErrorCode PetscDrawSetMarkerType(PetscDraw draw,PetscDrawMarkerType mtype) 10173f7a4c5SBarry Smith { 10273f7a4c5SBarry Smith PetscFunctionBegin; 10373f7a4c5SBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 10473f7a4c5SBarry Smith draw->markertype = mtype; 10573f7a4c5SBarry Smith PetscFunctionReturn(0); 10673f7a4c5SBarry Smith } 10773f7a4c5SBarry Smith 10873f7a4c5SBarry Smith #undef __FUNCT__ 10973f7a4c5SBarry Smith #define __FUNCT__ "PetscDrawGetMarkerType" 11073f7a4c5SBarry Smith /*@ 11173f7a4c5SBarry Smith PetscDrawGetMarkerType - gets the type of marker to display with PetscDrawMarker() 11273f7a4c5SBarry Smith 11373f7a4c5SBarry Smith Not collective 11473f7a4c5SBarry Smith 11573f7a4c5SBarry Smith Input Parameters: 11673f7a4c5SBarry Smith + draw - the drawing context 117*472f5ad0SBarry Smith - mtype - either PETSC_DRAW_MARKER_CROSS (default) or PETSC_DRAW_MARKER_POINT 11873f7a4c5SBarry Smith 11973f7a4c5SBarry Smith Level: beginner 12073f7a4c5SBarry Smith 12173f7a4c5SBarry Smith Concepts: marker^drawing 12273f7a4c5SBarry Smith Concepts: drawing^marker 12373f7a4c5SBarry Smith 12473f7a4c5SBarry Smith .seealso: PetscDrawPoint(), PetscDrawMarker() 12573f7a4c5SBarry Smith 12673f7a4c5SBarry Smith @*/ 12773f7a4c5SBarry Smith PetscErrorCode PetscDrawGetMarkerType(PetscDraw draw,PetscDrawMarkerType *mtype) 12873f7a4c5SBarry Smith { 12973f7a4c5SBarry Smith PetscFunctionBegin; 13073f7a4c5SBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 13173f7a4c5SBarry Smith *mtype = draw->markertype; 13278e9f83eSLisandro Dalcin PetscFunctionReturn(0); 13378e9f83eSLisandro Dalcin } 134