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