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