xref: /petsc/src/sys/classes/draw/tests/ex3.c (revision f97672e55eacc8688507b9471cd7ec2664d7f203)
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   PetscCall(PetscInitialize(&argc,&argv,NULL,help));
27   PetscCall(PetscOptionsGetInt(NULL,NULL,"-x",&x,NULL));
28   PetscCall(PetscOptionsGetInt(NULL,NULL,"-y",&y,NULL));
29   PetscCall(PetscOptionsGetInt(NULL,NULL,"-width",&width,NULL));
30   PetscCall(PetscOptionsGetInt(NULL,NULL,"-height",&height,NULL));
31   PetscCall(PetscOptionsGetInt(NULL,NULL,"-n",&n,NULL));
32   PetscCall(PetscOptionsGetInt(NULL,NULL,"-nports",&nports,&useports));
33   PetscCall(PetscOptionsHasName(NULL,NULL,"-nolegend",&flg));
34   if (flg) legend = NULL;
35   PetscCall(PetscOptionsHasName(NULL,NULL,"-notoplabel",&flg));
36   if (flg) toplabel = NULL;
37   PetscCall(PetscOptionsHasName(NULL,NULL,"-noxlabel",&flg));
38   if (flg) xlabel = NULL;
39   PetscCall(PetscOptionsHasName(NULL,NULL,"-noylabel",&flg));
40   if (flg) ylabel = NULL;
41   PetscCall(PetscOptionsHasName(NULL,NULL,"-nolabels",&flg));
42   if (flg) {toplabel = NULL; xlabel = NULL; ylabel = NULL;}
43 
44   PetscCall(PetscDrawCreate(PETSC_COMM_WORLD,0,"Title",x,y,width,height,&draw));
45   PetscCall(PetscDrawSetFromOptions(draw));
46   if (useports) {
47     PetscCall(PetscDrawViewPortsCreate(draw,nports,&ports));
48     PetscCall(PetscDrawViewPortsSet(ports,0));
49   }
50   PetscCall(PetscDrawLGCreate(draw,1,&lg));
51   PetscCall(PetscDrawLGSetUseMarkers(lg,PETSC_TRUE));
52   PetscCall(PetscDrawLGGetAxis(lg,&axis));
53   PetscCall(PetscDrawAxisSetColors(axis,PETSC_DRAW_BLACK,PETSC_DRAW_RED,PETSC_DRAW_BLUE));
54   PetscCall(PetscDrawAxisSetLabels(axis,toplabel,xlabel,ylabel));
55   PetscCall(PetscDrawLGSetLegend(lg,&legend));
56   PetscCall(PetscDrawLGSetFromOptions(lg));
57 
58   for (i=0; i<=n; i++) {
59     xd   = (PetscReal)(i - 5); yd = xd*xd;
60     PetscCall(PetscDrawLGAddPoint(lg,&xd,&yd));
61   }
62   PetscCall(PetscDrawLGDraw(lg));
63   PetscCall(PetscDrawLGSave(lg));
64 
65   PetscCall(PetscDrawViewPortsDestroy(ports));
66   PetscCall(PetscDrawLGDestroy(&lg));
67   PetscCall(PetscDrawDestroy(&draw));
68   PetscCall(PetscFinalize());
69   return 0;
70 }
71 
72 /*TEST
73 
74    build:
75      requires: x
76 
77    test:
78      output_file: output/ex1_1.out
79 
80 TEST*/
81