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