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*/ 6472f5ad0SBarry 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 25472f5ad0SBarry 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 3278e9f83eSLisandro Dalcin PetscFunctionBegin; 3378e9f83eSLisandro Dalcin PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 34472f5ad0SBarry Smith if (draw->markertype == PETSC_DRAW_MARKER_CROSS){ 3578e9f83eSLisandro Dalcin if (draw->ops->coordinatetopixel && draw->ops->pointpixel) { 36*a7e8706aSLisandro Dalcin int i,j,k; 37302440fdSBarry Smith ierr = (*draw->ops->coordinatetopixel)(draw,xl,yl,&i,&j);CHKERRQ(ierr); 3878e9f83eSLisandro Dalcin for (k=-2; k<=2; k++) { 39302440fdSBarry Smith ierr = (*draw->ops->pointpixel)(draw,i+k,j+k,cl);CHKERRQ(ierr); 40302440fdSBarry Smith ierr = (*draw->ops->pointpixel)(draw,i+k,j-k,cl);CHKERRQ(ierr); 4178e9f83eSLisandro Dalcin } 4278e9f83eSLisandro Dalcin } else if (draw->ops->string) { 4378e9f83eSLisandro Dalcin ierr = (*draw->ops->string)(draw,xl,yl,cl,"x");CHKERRQ(ierr); 448f69470aSLisandro Dalcin } else SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"No support for drawing marker type CROSS"); 45472f5ad0SBarry Smith } else if (draw->markertype == PETSC_DRAW_MARKER_PLUS){ 46472f5ad0SBarry Smith if (draw->ops->coordinatetopixel && draw->ops->pointpixel) { 47*a7e8706aSLisandro Dalcin int i,j,k; 48302440fdSBarry Smith ierr = (*draw->ops->coordinatetopixel)(draw,xl,yl,&i,&j);CHKERRQ(ierr); 49472f5ad0SBarry Smith for (k=-2; k<=2; k++) { 50302440fdSBarry Smith ierr = (*draw->ops->pointpixel)(draw,i,j+k,cl);CHKERRQ(ierr); 51302440fdSBarry Smith ierr = (*draw->ops->pointpixel)(draw,i+k,j,cl);CHKERRQ(ierr); 52472f5ad0SBarry Smith } 53472f5ad0SBarry Smith } else if (draw->ops->string) { 54472f5ad0SBarry Smith ierr = (*draw->ops->string)(draw,xl,yl,cl,"+");CHKERRQ(ierr); 558f69470aSLisandro Dalcin } else SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"No support for drawing marker type PLUS"); 56472f5ad0SBarry Smith } else if (draw->markertype == PETSC_DRAW_MARKER_CIRCLE){ 57472f5ad0SBarry Smith if (draw->ops->coordinatetopixel && draw->ops->pointpixel) { 58*a7e8706aSLisandro Dalcin int i,j,k; 59302440fdSBarry Smith ierr = (*draw->ops->coordinatetopixel)(draw,xl,yl,&i,&j);CHKERRQ(ierr); 60472f5ad0SBarry Smith for (k=-1; k<=1; k++) { 61302440fdSBarry Smith ierr = (*draw->ops->pointpixel)(draw,i+2,j+k,cl);CHKERRQ(ierr); 62302440fdSBarry Smith ierr = (*draw->ops->pointpixel)(draw,i-2,j+k,cl);CHKERRQ(ierr); 63302440fdSBarry Smith ierr = (*draw->ops->pointpixel)(draw,i+k,j+2,cl);CHKERRQ(ierr); 64302440fdSBarry Smith ierr = (*draw->ops->pointpixel)(draw,i+k,j-2,cl);CHKERRQ(ierr); 65472f5ad0SBarry Smith } 66472f5ad0SBarry Smith } else if (draw->ops->string) { 67472f5ad0SBarry Smith ierr = (*draw->ops->string)(draw,xl,yl,cl,"+");CHKERRQ(ierr); 688f69470aSLisandro Dalcin } else SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"No support for drawing marker type CIRCLE"); 6973f7a4c5SBarry Smith } else { 7073f7a4c5SBarry Smith ierr = (*draw->ops->point)(draw,xl,yl,cl);CHKERRQ(ierr); 7173f7a4c5SBarry Smith } 7273f7a4c5SBarry Smith PetscFunctionReturn(0); 7373f7a4c5SBarry Smith } 7473f7a4c5SBarry Smith 7573f7a4c5SBarry Smith #undef __FUNCT__ 7673f7a4c5SBarry Smith #define __FUNCT__ "PetscDrawSetMarkerType" 7773f7a4c5SBarry Smith /*@ 7873f7a4c5SBarry Smith PetscDrawSetMarkerType - sets the type of marker to display with PetscDrawMarker() 7973f7a4c5SBarry Smith 8073f7a4c5SBarry Smith Not collective 8173f7a4c5SBarry Smith 8273f7a4c5SBarry Smith Input Parameters: 8373f7a4c5SBarry Smith + draw - the drawing context 84472f5ad0SBarry Smith - mtype - either PETSC_DRAW_MARKER_CROSS (default) or PETSC_DRAW_MARKER_POINT 8573f7a4c5SBarry Smith 8673f7a4c5SBarry Smith Options Database: 8773f7a4c5SBarry Smith . -draw_marker_type - x or point 8873f7a4c5SBarry Smith 8973f7a4c5SBarry Smith Level: beginner 9073f7a4c5SBarry Smith 9173f7a4c5SBarry Smith Concepts: marker^drawing 9273f7a4c5SBarry Smith Concepts: drawing^marker 9373f7a4c5SBarry Smith 9473f7a4c5SBarry Smith .seealso: PetscDrawPoint(), PetscDrawMarker() 9573f7a4c5SBarry Smith 9673f7a4c5SBarry Smith @*/ 9773f7a4c5SBarry Smith PetscErrorCode PetscDrawSetMarkerType(PetscDraw draw,PetscDrawMarkerType mtype) 9873f7a4c5SBarry Smith { 9973f7a4c5SBarry Smith PetscFunctionBegin; 10073f7a4c5SBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 10173f7a4c5SBarry Smith draw->markertype = mtype; 10273f7a4c5SBarry Smith PetscFunctionReturn(0); 10373f7a4c5SBarry Smith } 10473f7a4c5SBarry Smith 10573f7a4c5SBarry Smith #undef __FUNCT__ 10673f7a4c5SBarry Smith #define __FUNCT__ "PetscDrawGetMarkerType" 10773f7a4c5SBarry Smith /*@ 10873f7a4c5SBarry Smith PetscDrawGetMarkerType - gets the type of marker to display with PetscDrawMarker() 10973f7a4c5SBarry Smith 11073f7a4c5SBarry Smith Not collective 11173f7a4c5SBarry Smith 11273f7a4c5SBarry Smith Input Parameters: 11373f7a4c5SBarry Smith + draw - the drawing context 114472f5ad0SBarry Smith - mtype - either PETSC_DRAW_MARKER_CROSS (default) or PETSC_DRAW_MARKER_POINT 11573f7a4c5SBarry Smith 11673f7a4c5SBarry Smith Level: beginner 11773f7a4c5SBarry Smith 11873f7a4c5SBarry Smith Concepts: marker^drawing 11973f7a4c5SBarry Smith Concepts: drawing^marker 12073f7a4c5SBarry Smith 12173f7a4c5SBarry Smith .seealso: PetscDrawPoint(), PetscDrawMarker() 12273f7a4c5SBarry Smith 12373f7a4c5SBarry Smith @*/ 12473f7a4c5SBarry Smith PetscErrorCode PetscDrawGetMarkerType(PetscDraw draw,PetscDrawMarkerType *mtype) 12573f7a4c5SBarry Smith { 12673f7a4c5SBarry Smith PetscFunctionBegin; 12773f7a4c5SBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 12873f7a4c5SBarry Smith *mtype = draw->markertype; 12978e9f83eSLisandro Dalcin PetscFunctionReturn(0); 13078e9f83eSLisandro Dalcin } 131