xref: /petsc/src/sys/classes/draw/tests/ex3.c (revision 76d901e46dda72c1afe96306c7cb4731c47d4e87)
1 
2 static char help[] = "Plots a simple line graph.\n";
3 
4 #if defined(PETSC_APPLE_FRAMEWORK)
5 #import <PETSc/petscsys.h>
6 #import <PETSc/petscdraw.h>
7 #else
8 
9 #include <petscsys.h>
10 #include <petscdraw.h>
11 #endif
12 
13 int main(int argc,char **argv)
14 {
15   PetscDraw          draw;
16   PetscDrawLG        lg;
17   PetscDrawAxis      axis;
18   PetscInt           n = 15,i,x = 0,y = 0,width = 400,height = 300,nports = 1;
19   PetscBool          useports,flg;
20   const char         *xlabel,*ylabel,*toplabel,*legend;
21   PetscReal          xd,yd;
22   PetscDrawViewPorts *ports = NULL;
23 
24   toplabel = "Top Label"; xlabel = "X-axis Label"; ylabel = "Y-axis Label"; legend = "Legend";
25 
26   PetscFunctionBeginUser;
27   PetscCall(PetscInitialize(&argc,&argv,NULL,help));
28   PetscCall(PetscOptionsGetInt(NULL,NULL,"-x",&x,NULL));
29   PetscCall(PetscOptionsGetInt(NULL,NULL,"-y",&y,NULL));
30   PetscCall(PetscOptionsGetInt(NULL,NULL,"-width",&width,NULL));
31   PetscCall(PetscOptionsGetInt(NULL,NULL,"-height",&height,NULL));
32   PetscCall(PetscOptionsGetInt(NULL,NULL,"-n",&n,NULL));
33   PetscCall(PetscOptionsGetInt(NULL,NULL,"-nports",&nports,&useports));
34   PetscCall(PetscOptionsHasName(NULL,NULL,"-nolegend",&flg));
35   if (flg) legend = NULL;
36   PetscCall(PetscOptionsHasName(NULL,NULL,"-notoplabel",&flg));
37   if (flg) toplabel = NULL;
38   PetscCall(PetscOptionsHasName(NULL,NULL,"-noxlabel",&flg));
39   if (flg) xlabel = NULL;
40   PetscCall(PetscOptionsHasName(NULL,NULL,"-noylabel",&flg));
41   if (flg) ylabel = NULL;
42   PetscCall(PetscOptionsHasName(NULL,NULL,"-nolabels",&flg));
43   if (flg) {toplabel = NULL; xlabel = NULL; ylabel = NULL;}
44 
45   PetscCall(PetscDrawCreate(PETSC_COMM_WORLD,0,"Title",x,y,width,height,&draw));
46   PetscCall(PetscDrawSetFromOptions(draw));
47   if (useports) {
48     PetscCall(PetscDrawViewPortsCreate(draw,nports,&ports));
49     PetscCall(PetscDrawViewPortsSet(ports,0));
50   }
51   PetscCall(PetscDrawLGCreate(draw,1,&lg));
52   PetscCall(PetscDrawLGSetUseMarkers(lg,PETSC_TRUE));
53   PetscCall(PetscDrawLGGetAxis(lg,&axis));
54   PetscCall(PetscDrawAxisSetColors(axis,PETSC_DRAW_BLACK,PETSC_DRAW_RED,PETSC_DRAW_BLUE));
55   PetscCall(PetscDrawAxisSetLabels(axis,toplabel,xlabel,ylabel));
56   PetscCall(PetscDrawLGSetLegend(lg,&legend));
57   PetscCall(PetscDrawLGSetFromOptions(lg));
58 
59   for (i=0; i<=n; i++) {
60     xd   = (PetscReal)(i - 5); yd = xd*xd;
61     PetscCall(PetscDrawLGAddPoint(lg,&xd,&yd));
62   }
63   PetscCall(PetscDrawLGDraw(lg));
64   PetscCall(PetscDrawLGSave(lg));
65 
66   PetscCall(PetscDrawViewPortsDestroy(ports));
67   PetscCall(PetscDrawLGDestroy(&lg));
68   PetscCall(PetscDrawDestroy(&draw));
69   PetscCall(PetscFinalize());
70   return 0;
71 }
72 
73 /*TEST
74 
75    build:
76      requires: x
77 
78    test:
79      output_file: output/ex1_1.out
80 
81 TEST*/
82