xref: /petsc/src/sys/classes/draw/tests/ex3.c (revision 030f984af8d8bb4c203755d35bded3c05b3d83ce)
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   ierr = PetscOptionsGetInt(NULL,NULL,"-x",&x,NULL);CHKERRQ(ierr);
29   ierr = PetscOptionsGetInt(NULL,NULL,"-y",&y,NULL);CHKERRQ(ierr);
30   ierr = PetscOptionsGetInt(NULL,NULL,"-width",&width,NULL);CHKERRQ(ierr);
31   ierr = PetscOptionsGetInt(NULL,NULL,"-height",&height,NULL);CHKERRQ(ierr);
32   ierr = PetscOptionsGetInt(NULL,NULL,"-n",&n,NULL);CHKERRQ(ierr);
33   ierr = PetscOptionsGetInt(NULL,NULL,"-nports",&nports,&useports);CHKERRQ(ierr);
34   ierr = PetscOptionsHasName(NULL,NULL,"-nolegend",&flg);CHKERRQ(ierr);
35   if (flg) legend = NULL;
36   ierr = PetscOptionsHasName(NULL,NULL,"-notoplabel",&flg);CHKERRQ(ierr);
37   if (flg) toplabel = NULL;
38   ierr = PetscOptionsHasName(NULL,NULL,"-noxlabel",&flg);CHKERRQ(ierr);
39   if (flg) xlabel = NULL;
40   ierr = PetscOptionsHasName(NULL,NULL,"-noylabel",&flg);CHKERRQ(ierr);
41   if (flg) ylabel = NULL;
42   ierr = PetscOptionsHasName(NULL,NULL,"-nolabels",&flg);CHKERRQ(ierr);
43   if (flg) {toplabel = NULL; xlabel = NULL; ylabel = NULL;}
44 
45   ierr = PetscDrawCreate(PETSC_COMM_WORLD,0,"Title",x,y,width,height,&draw);CHKERRQ(ierr);
46   ierr = PetscDrawSetFromOptions(draw);CHKERRQ(ierr);
47   if (useports) {
48     ierr = PetscDrawViewPortsCreate(draw,nports,&ports);CHKERRQ(ierr);
49     ierr = PetscDrawViewPortsSet(ports,0);CHKERRQ(ierr);
50   }
51   ierr = PetscDrawLGCreate(draw,1,&lg);CHKERRQ(ierr);
52   ierr = PetscDrawLGSetUseMarkers(lg,PETSC_TRUE);CHKERRQ(ierr);
53   ierr = PetscDrawLGGetAxis(lg,&axis);CHKERRQ(ierr);
54   ierr = PetscDrawAxisSetColors(axis,PETSC_DRAW_BLACK,PETSC_DRAW_RED,PETSC_DRAW_BLUE);CHKERRQ(ierr);
55   ierr = PetscDrawAxisSetLabels(axis,toplabel,xlabel,ylabel);CHKERRQ(ierr);
56   ierr = PetscDrawLGSetLegend(lg,&legend);CHKERRQ(ierr);
57   ierr = PetscDrawLGSetFromOptions(lg);CHKERRQ(ierr);
58 
59   for (i=0; i<=n; i++) {
60     xd   = (PetscReal)(i - 5); yd = xd*xd;
61     ierr = PetscDrawLGAddPoint(lg,&xd,&yd);CHKERRQ(ierr);
62   }
63   ierr = PetscDrawLGDraw(lg);CHKERRQ(ierr);
64   ierr = PetscDrawLGSave(lg);CHKERRQ(ierr);
65 
66   ierr = PetscDrawViewPortsDestroy(ports);CHKERRQ(ierr);
67   ierr = PetscDrawLGDestroy(&lg);CHKERRQ(ierr);
68   ierr = PetscDrawDestroy(&draw);CHKERRQ(ierr);
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