xref: /petsc/src/sys/classes/draw/interface/dmarker.c (revision a7e8706a476e2c77fccf20041dd82cd54aa347de)
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