Beispiel #1
0
int main(int argc, char *argv[])
{
    char const *wks_type = "x11";
    int appid,wid,vcid,vfid;
    int rlist,grlist;
    ng_size_t len_dims[3];
    float reflen, ref;
    float x[a][b][c];
    FILE * fd;
    int i,j,k;
/*
 * Generate vector data array
 */
    char  filename[256];   
    const char *dir = _NGGetNCARGEnv("data");
    sprintf( filename, "%s/asc/uvdata0.asc", dir );

    fd = fopen(filename,"r");
       
    for (k = 0; k < a; k++) {
        for (j = 0; j < b; j++) {
            for (i = 0; i < c; i++) {       
                fscanf(fd,"%f", &x[k][j][i]);
            }
        }
    }

/*
 * Initialize the high level utility library
 */
    NhlInitialize();
/*
 * Create an application context. Set the app dir to the current
 * directory so the application looks for a resource file in the working
 * directory. 
 */
    rlist = NhlRLCreate(NhlSETRL);
    grlist = NhlRLCreate(NhlGETRL);
    NhlRLClear(rlist);
    NhlRLSetString(rlist,NhlNappUsrDir,"./");
    NhlCreate(&appid,"vc03",NhlappClass,NhlDEFAULT_APP,rlist);

    if (!strcmp(wks_type,"ncgm") || !strcmp(wks_type,"NCGM")) {
/*
 * Create a meta file workstation.
 */
        NhlRLClear(rlist);
        NhlRLSetString(rlist,NhlNwkMetaName,"./vc03c.ncgm");
        NhlCreate(&wid,"vc03Work",
                  NhlncgmWorkstationClass,NhlDEFAULT_APP,rlist);
    }
    else if (!strcmp(wks_type,"x11") || !strcmp(wks_type,"X11")) {
/*
 * Create an X workstation.
 */
        NhlRLClear(rlist);
        NhlRLSetInteger(rlist,NhlNwkPause,True);
        NhlCreate(&wid,"vc03Work",NhlcairoWindowWorkstationClass,appid,rlist);
    }

    else if (!strcmp(wks_type,"oldps") || !strcmp(wks_type,"OLDPS")) {
/*
 * Create an older-style PostScript workstation.
 */
        NhlRLClear(rlist);
        NhlRLSetString(rlist,NhlNwkPSFileName,"vc03c.ps");
        NhlCreate(&wid,"vc03Work",NhlpsWorkstationClass,appid,rlist);
    }
    else if (!strcmp(wks_type,"oldpdf") || !strcmp(wks_type,"OLDPDF")) {
/*
 * Create an older-style PDF workstation.
 */
        NhlRLClear(rlist);
        NhlRLSetString(rlist,NhlNwkPDFFileName,"vc03c.pdf");
        NhlCreate(&wid,"vc03Work",NhlpdfWorkstationClass,appid,rlist);
    }
    else if (!strcmp(wks_type,"pdf") || !strcmp(wks_type,"PDF") ||
             !strcmp(wks_type,"ps") || !strcmp(wks_type,"PS")) {
/*
 * Create a cairo PS/PDF workstation.
 */
        NhlRLClear(rlist);
        NhlRLSetString(rlist,NhlNwkFileName,"vc03c");
        NhlRLSetString(rlist,NhlNwkFormat,(char*)wks_type);
        NhlCreate(&wid,"vc03Work",NhlcairoDocumentWorkstationClass,appid,rlist);
    }
    else if (!strcmp(wks_type,"png") || !strcmp(wks_type,"PNG")) {
/*
 * Create a cairo PNG workstation.
 */
        NhlRLClear(rlist);
        NhlRLSetString(rlist,NhlNwkFileName,"vc03c");
        NhlRLSetString(rlist,NhlNwkFormat,(char*)wks_type);
        NhlCreate(&wid,"vc03Work",NhlcairoImageWorkstationClass,appid,rlist);
    }
/*
 * Create a VectorField data object using the data set defined above.
 * By default the array bounds will define the data boundaries (zero-based,
 * as in C language conventions)
 */

    len_dims[0] = a;
    len_dims[1] = b;
    len_dims[2] = c;
    NhlRLClear(rlist);
    NhlRLSetMDFloatArray(rlist,NhlNvfDataArray,&x[0][0][0],3,len_dims);
    NhlRLSetFloat(rlist,NhlNvfXCStartV, -180.0);
    NhlRLSetFloat(rlist,NhlNvfXCEndV, 0.0);
    NhlRLSetFloat(rlist,NhlNvfYCStartV, 0.0);
    NhlRLSetFloat(rlist,NhlNvfYCEndV, 90.0);
    NhlRLSetFloat(rlist,NhlNvfYCStartSubsetV, 20.0);
    NhlRLSetFloat(rlist,NhlNvfYCEndSubsetV, 80.0);
   
    NhlCreate(&vfid,"vectorfield",NhlvectorFieldClass,appid,rlist);

/*
 * Create a VectorPlot object, supplying the VectorField object as data
 */

    NhlRLClear(rlist);
    NhlRLSetString(rlist,NhlNtiMainString, "Filled Arrow VectorPlot");
    NhlRLSetFloat(rlist,NhlNvcRefMagnitudeF, 20.0);
    NhlRLSetString(rlist,NhlNvcFillArrowsOn, "True");
    NhlRLSetFloat(rlist,NhlNvcMinFracLengthF, 0.2);

    NhlRLSetInteger(rlist,NhlNvcVectorFieldData,vfid);

    NhlCreate(&vcid,"vectorplot",NhlvectorPlotClass,wid,rlist);


    NhlRLClear(grlist);
    NhlRLGetFloat(grlist,NhlNvcRefLengthF,&reflen);
    NhlGetValues(vcid,grlist);

    ref= 1.5 * reflen;    
    NhlRLClear(rlist);
    NhlRLSetFloat(rlist,NhlNvcRefLengthF,ref);
    NhlSetValues(vcid,rlist);

    NhlDraw(vcid);
    NhlFrame(wid);

    NhlRLClear(rlist);
    NhlRLSetString(rlist,NhlNtiMainString,
           "Variation #1:: Constant Width");
    NhlRLSetFloat(rlist,NhlNvcFillArrowWidthF, 0.15);
    NhlRLSetFloat(rlist,NhlNvcFillArrowMinFracWidthF, 1.0);
    NhlSetValues(vcid,rlist);

    NhlDraw(vcid);
    NhlFrame(wid);


    NhlRLClear(rlist);
    NhlRLSetString(rlist,NhlNtiMainString,
           "Variation #2");
    NhlRLSetFloat(rlist,NhlNvcFillArrowMinFracWidthF,0.25);
    NhlRLSetFloat(rlist,NhlNvcFillArrowHeadMinFracXF,0.0);
    NhlRLSetFloat(rlist,NhlNvcFillArrowWidthF,0.2);
    NhlRLSetFloat(rlist,NhlNvcFillArrowHeadXF,0.8);
    NhlRLSetFloat(rlist,NhlNvcFillArrowHeadInteriorXF,0.7);
    NhlRLSetFloat(rlist,NhlNvcFillArrowHeadYF,0.2);
    NhlSetValues(vcid,rlist);

    NhlDraw(vcid);
    NhlFrame(wid);


    NhlRLClear(rlist);
    NhlRLSetString(rlist,NhlNtiMainString,"Variation #3");
    ref = 1.2 * reflen;    
    NhlRLSetFloat(rlist,NhlNvcRefLengthF,ref);
    NhlRLSetFloat(rlist,NhlNvcFillArrowWidthF,0.3);
    NhlRLSetFloat(rlist,NhlNvcFillArrowHeadXF,0.4);
    NhlRLSetFloat(rlist,NhlNvcFillArrowHeadInteriorXF,0.35);
    NhlRLSetFloat(rlist,NhlNvcFillArrowHeadYF,0.3);

    NhlSetValues(vcid,rlist);

    NhlDraw(vcid);
    NhlFrame(wid);

    NhlRLClear(rlist);
    NhlRLSetString(rlist,NhlNtiMainString,"Variation #4");
    ref = 1.2 * reflen;    
    NhlRLSetFloat(rlist,NhlNvcRefLengthF,ref);
    NhlRLSetFloat(rlist,NhlNvcFillArrowWidthF,0.2);
    NhlRLSetFloat(rlist,NhlNvcFillArrowHeadXF,1.0);
    NhlRLSetFloat(rlist,NhlNvcFillArrowHeadInteriorXF,1.0);
    NhlRLSetFloat(rlist,NhlNvcFillArrowHeadYF,0.2);

    NhlSetValues(vcid,rlist);

    NhlDraw(vcid);
    NhlFrame(wid);

    NhlRLClear(rlist);
    NhlRLSetString(rlist,NhlNtiMainString,"Variation #5");
    ref = 0.8 * reflen;    
    NhlRLSetFloat(rlist,NhlNvcRefLengthF,ref);
    NhlRLSetFloat(rlist,NhlNvcFillArrowWidthF,0.2);
    NhlRLSetFloat(rlist,NhlNvcFillArrowHeadXF,1.5);
    NhlRLSetFloat(rlist,NhlNvcFillArrowHeadInteriorXF,1.0);
    NhlRLSetFloat(rlist,NhlNvcFillArrowHeadYF,0.5);

    NhlSetValues(vcid,rlist);

    NhlDraw(vcid);
    NhlFrame(wid);
/*
 * Destroy the objects created, close the HLU library and exit.
 */
    NhlDestroy(appid);
    NhlClose();
    exit(0);
}
Beispiel #2
0
void guiNhlRLGetFloat(int id,  char *resname, float *value)
{
    NhlRLGetFloat(id, (NhlString) resname, value);
}
Beispiel #3
0
int main()
{
    int appid,wid,cnid,dataid,llid;
    int rlist, grlist;
    ng_size_t len_dims[2];
    float xvp,yvp,heightvp,widthvp;
    char const *wks_type = "x11";
    /*
     * Initialize the high level utility library
     */

    NhlInitialize();
    /*
     * Create an application context. Set the app dir to the current directory
     * so the application looks for the resource file the directory it executes
     * from.
     */
    rlist = NhlRLCreate(NhlSETRL);
    NhlRLClear(rlist);
    NhlRLSetString(rlist,NhlNappUsrDir,"./");
    NhlCreate(&appid,"cn03",NhlappClass,NhlDEFAULT_APP,rlist);

    if (!strcmp(wks_type,"ncgm") || !strcmp(wks_type,"NCGM")) {
        /*
         * Create a meta file workstation.
         */
        NhlRLClear(rlist);
        NhlRLSetString(rlist,NhlNwkMetaName,"./cn03c.ncgm");
        NhlCreate(&wid,"cn03Work",
                  NhlncgmWorkstationClass,NhlDEFAULT_APP,rlist);
    }
    else if (!strcmp(wks_type,"x11") || !strcmp(wks_type,"X11")) {
        /*
         * Create an X workstation.
         */
        NhlRLClear(rlist);
        NhlRLSetInteger(rlist,NhlNwkPause,True);
        NhlCreate(&wid,"cn03Work",
                  NhlcairoWindowWorkstationClass,NhlDEFAULT_APP,rlist);
    }
    else if (!strcmp(wks_type,"oldps") || !strcmp(wks_type,"OLDPS")) {
        /*
         * Create an older-style PostScript workstation.
         */
        NhlRLClear(rlist);
        NhlRLSetString(rlist,NhlNwkPSFileName,"./cn03c.ps");
        NhlCreate(&wid,"cn03Work",
                  NhlpsWorkstationClass,NhlDEFAULT_APP,rlist);
    }
    else if (!strcmp(wks_type,"oldpdf") || !strcmp(wks_type,"OLDPDF")) {
        /*
         * Create an older-style PDF workstation.
         */
        NhlRLClear(rlist);
        NhlRLSetString(rlist,NhlNwkPDFFileName,"./cn03c.pdf");
        NhlCreate(&wid,"cn03Work",
                  NhlpdfWorkstationClass,NhlDEFAULT_APP,rlist);
    }
    else if (!strcmp(wks_type,"pdf") || !strcmp(wks_type,"PDF") ||
             !strcmp(wks_type,"ps") || !strcmp(wks_type,"PS")) {
        /*
         * Create a cairo PS/PDF workstation.
         */
        NhlRLClear(rlist);
        NhlRLSetString(rlist,NhlNwkFileName,"./cn03c");
        NhlRLSetString(rlist,NhlNwkFormat,(char*)wks_type);
        NhlCreate(&wid,"cn03Work",
                  NhlcairoDocumentWorkstationClass,NhlDEFAULT_APP,rlist);
    }
    else if (!strcmp(wks_type,"png") || !strcmp(wks_type,"PNG")) {
        /*
         * Create a cairo PNG workstation.
         */
        NhlRLClear(rlist);
        NhlRLSetString(rlist,NhlNwkFileName,"./cn03c");
        NhlRLSetString(rlist,NhlNwkFormat,(char*)wks_type);
        NhlCreate(&wid,"cn03Work",
                  NhlcairoImageWorkstationClass,NhlDEFAULT_APP,rlist);
    }
    /*
     * Create a scalar field data object with a linear X dimension representing
     * latitude and an irregular Y dimension representing geopotential height.
     * Define the start and end points of the data, based on the dataset.
     */

    NhlRLClear(rlist);
    len_dims[0] = N, len_dims[1] = M;
    NhlRLSetMDFloatArray(rlist,NhlNsfDataArray,T,2,len_dims);
    NhlRLSetFloatArray(rlist,NhlNsfYArray,level,NhlNumber(level));
    NhlRLSetFloat(rlist,NhlNsfXCStartV,-90.0);
    NhlRLSetFloat(rlist,NhlNsfXCEndV,90.0);
    NhlRLSetFloat(rlist,NhlNsfYCStartV,1000.0);
    NhlRLSetFloat(rlist,NhlNsfYCEndV,100.0);
    NhlCreate(&dataid,"mydata",NhlscalarFieldClass,NhlDEFAULT_APP,
              rlist);
    /*
     * Create a ContourPlot object. Since ContourPlot contains a TickMark object by
     * default, the non-default TickMark resources can be set in the ContourPlot
     * object.
     */
    NhlRLClear(rlist);
    NhlRLSetString(rlist,NhlNtiMainString,
                   "Profile @ 105~S~o~N~W - Frame 1");
    NhlRLSetInteger(rlist,NhlNcnScalarFieldData,dataid);
    NhlRLSetFloat(rlist,NhlNvpXF,0.125);
    NhlRLSetFloat(rlist,NhlNvpYF,0.85);
    NhlRLSetFloat(rlist,NhlNvpWidthF,0.6);
    NhlRLSetFloat(rlist,NhlNvpHeightF,0.6);
    NhlRLSetFloat(rlist,NhlNcnLevelSpacingF,5.0);
    NhlRLSetInteger(rlist,NhlNtmXBMode,NhlEXPLICIT);
    NhlRLSetInteger(rlist,NhlNtmXBMinorOn,False);
    NhlRLSetFloatArray(rlist,
                       NhlNtmXBValues,labellocs,NhlNumber(labellocs));
    NhlRLSetStringArray(rlist,
                        NhlNtmXBLabels,labels,NhlNumber(labels));
    NhlCreate(&cnid,"ContourPlot1",NhlcontourPlotClass,wid,rlist);

    NhlDraw(cnid);
    NhlFrame(wid);

    /*
     * Color and add dash patterns to the lines, then display a legend
     * listing the line types. The position of the Legend is controlled by
     * resources set in the resource file. Thicken lines.
     * Note that the Legend and LabelBar are provided to the ContourPlot object
     * by its PlotManager (created by default when the ContourPlot object
     * is initialized). Therefore the resources to control them have the
     * prefix 'pm' rather than 'cn'.
     */
    NhlRLClear(rlist);
    NhlRLSetString(rlist,NhlNtiMainString,
                   "Profile @ 105~S~o~N~W - Frame 2");
    NhlRLSetInteger(rlist,NhlNcnMonoLineColor,False);
    NhlRLSetInteger(rlist,NhlNcnMonoLineDashPattern,False);
    NhlRLSetString(rlist,NhlNpmLegendDisplayMode,"always");
    NhlSetValues(cnid,rlist);

    NhlDraw(cnid);
    NhlFrame(wid);
    /*
     * Turn lines off, and use solid color fill instead.
     * Remove the Legend and display a LabelBar.
     * Turn off line and high/low labels.
     */
    NhlRLClear(rlist);
    NhlRLSetString(rlist,NhlNtiMainString,
                   "Profile @ 105~S~o~N~W - Frame 3");
    NhlRLSetString(rlist,NhlNcnLinesOn,"false");
    NhlRLSetString(rlist,NhlNcnFillOn,"true");
    NhlRLSetString(rlist,NhlNpmLegendDisplayMode,"never");
    NhlRLSetString(rlist,NhlNpmLabelBarDisplayMode,"always");
    NhlRLSetString(rlist,NhlNcnLineLabelsOn,"false");
    NhlRLSetString(rlist,NhlNcnHighLabelsOn,"false");
    NhlRLSetString(rlist,NhlNcnLowLabelsOn,"false");
    NhlSetValues(cnid,rlist);

    NhlDraw(cnid);
    NhlFrame(wid);

    /*
     * Now show the plot with the Y-Axis linearized, by overlaying the
     * plot on a LogLinPlot object. Retrieve the current view coordinates
     * of the ContourPlot object and pass them on to the LogLinPlot object.
     * Note the LogLinPlot needs to be told the data boundaries.
     */

    NhlRLClear(rlist);
    NhlRLSetString(rlist,NhlNtiMainString,
                   "Profile @ 105~S~o~N~W - Frame 4");
    NhlSetValues(cnid,rlist);

    grlist = NhlRLCreate(NhlGETRL);
    NhlRLClear(grlist);
    NhlRLGetFloat(grlist,NhlNvpXF,&xvp);
    NhlRLGetFloat(grlist,NhlNvpYF,&yvp);
    NhlRLGetFloat(grlist,NhlNvpWidthF,&widthvp);
    NhlRLGetFloat(grlist,NhlNvpHeightF,&heightvp);
    NhlGetValues(cnid,grlist);

    NhlRLClear(rlist);
    NhlRLSetFloat(rlist,NhlNvpXF,xvp);
    NhlRLSetFloat(rlist,NhlNvpYF,yvp);
    NhlRLSetFloat(rlist,NhlNvpWidthF,widthvp);
    NhlRLSetFloat(rlist,NhlNvpHeightF,heightvp);
    NhlRLSetFloat(rlist,NhlNtrXMinF,-90.0);
    NhlRLSetFloat(rlist,NhlNtrXMaxF,90.0);
    NhlRLSetFloat(rlist,NhlNtrYMaxF,1000.0);
    NhlRLSetFloat(rlist,NhlNtrYMinF,100.0);
    NhlRLSetString(rlist,NhlNtrYReverse,"True");
    NhlCreate(&llid,"LogLin1",NhllogLinPlotClass,wid,rlist);

    /*
     * The LogLinPlot becomes the Base Plot, since it controls the coordinate
     * system that we are mapping to. Overlay the ContourPlot object on the base,
     * then plot the LogLinPlot object. Note that you cannot draw the ContourPlot
     * object directly, once it becomes an overlay Plot.
     */
    NhlAddOverlay(llid,cnid,-1);
    NhlDraw(llid);
    NhlFrame(wid);

    NhlDestroy(llid);
    NhlDestroy(dataid);
    NhlDestroy(cnid);
    NhlDestroy(wid);
    NhlDestroy(appid);
    NhlClose();
    exit(0);
}
Beispiel #4
0
int main(int argc, char *argv[])
{
    char const *wks_type = "x11";
    int appid,wid,stid,vfid;
    int rlist,grlist;
    ng_size_t len_dims[2];
    float stepsize,arrowlength,spacing;
    float U[N][M],V[N][M];

/*
 * Generate vector data arrays
 */
    {
	    float igrid, jgrid;
	    int i,j;
	    igrid = 2.0 * PI / (float) M;
	    jgrid = 2.0 * PI / (float) N;
	    for (j = 0; j < N; j++) {
		    for (i = 0; i < M; i++) {
			    U[j][i] = 10.0 * cos(jgrid * (float) j);
			    V[j][i] = 10.0 * cos(igrid * (float) i);
		    }
	    }
    }

/*
 * Initialize the high level utility library
 */
    NhlInitialize();
/*
 * Create an application context. Set the app dir to the current
 * directory so the application looks for a resource file in the working
 * directory. 
 */
    rlist = NhlRLCreate(NhlSETRL);
    grlist = NhlRLCreate(NhlGETRL);
    NhlRLClear(rlist);
    NhlRLSetString(rlist,NhlNappUsrDir,"./");
    NhlCreate(&appid,"st02",NhlappClass,NhlDEFAULT_APP,rlist);

    if (!strcmp(wks_type,"ncgm") || !strcmp(wks_type,"NCGM")) {
/*
 * Create a meta file workstation.
 */
        NhlRLClear(rlist);
        NhlRLSetString(rlist,NhlNwkMetaName,"./st02c.ncgm");
        NhlCreate(&wid,"st02Work",
                  NhlncgmWorkstationClass,NhlDEFAULT_APP,rlist);
    }
    else if (!strcmp(wks_type,"x11") || !strcmp(wks_type,"X11")) {
/*
 * Create an X workstation.
 */
        NhlRLClear(rlist);
        NhlRLSetInteger(rlist,NhlNwkPause,True);
        NhlCreate(&wid,"st02Work",NhlcairoWindowWorkstationClass,appid,rlist);
    }

    else if (!strcmp(wks_type,"oldps") || !strcmp(wks_type,"OLDPS")) {
/*
 * Create an older-style PostScript workstation.
 */
        NhlRLClear(rlist);
        NhlRLSetString(rlist,NhlNwkPSFileName,"st02c.ps");
        NhlCreate(&wid,"st02Work",NhlpsWorkstationClass,appid,rlist);
    }
    else if (!strcmp(wks_type,"oldpdf") || !strcmp(wks_type,"OLDPDF")) {
/*
 * Create an older-style PDF workstation.
 */
        NhlRLClear(rlist);
        NhlRLSetString(rlist,NhlNwkPDFFileName,"st02c.pdf");
        NhlCreate(&wid,"st02Work",NhlpdfWorkstationClass,appid,rlist);
    }
    else if (!strcmp(wks_type,"pdf") || !strcmp(wks_type,"PDF") ||
             !strcmp(wks_type,"ps") || !strcmp(wks_type,"PS")) {
/*
 * Create a cairo PS/PDF workstation.
 */
        NhlRLClear(rlist);
        NhlRLSetString(rlist,NhlNwkFileName,"st02c");
        NhlRLSetString(rlist,NhlNwkFormat,(char*)wks_type);
        NhlCreate(&wid,"st02Work",NhlcairoDocumentWorkstationClass,appid,rlist);
    }
    else if (!strcmp(wks_type,"png") || !strcmp(wks_type,"PNG")) {
/*
 * Create a cairo PNG workstation.
 */
        NhlRLClear(rlist);
        NhlRLSetString(rlist,NhlNwkFileName,"st02c");
        NhlRLSetString(rlist,NhlNwkFormat,(char*)wks_type);
        NhlCreate(&wid,"st02Work",NhlcairoImageWorkstationClass,appid,rlist);
    }
/*
 * Create a VectorField data object using the data set defined above.
 * By default the array bounds will define the data boundaries (zero-based,
 * as in C language conventions)
 */

    len_dims[0] = N;
    len_dims[1] = M;
    NhlRLClear(rlist);
    NhlRLSetMDFloatArray(rlist,NhlNvfUDataArray,&U[0][0],2,len_dims);
    NhlRLSetMDFloatArray(rlist,NhlNvfVDataArray,&V[0][0],2,len_dims);
    NhlCreate(&vfid,"vectorfield",NhlvectorFieldClass,appid,rlist);


/*
 * Create a StreamlinePlot object, supplying the VectorField object as data
 */

    NhlRLClear(rlist);
    NhlRLSetString(rlist,NhlNtiMainString,
		   "Modifying StreamlinePlot resources");
    NhlRLSetInteger(rlist,NhlNstVectorFieldData,vfid);
    NhlCreate(&stid,"streamlineplot",NhlstreamlinePlotClass,wid,rlist);

    NhlDraw(stid);
    NhlFrame(wid);

/* 
 * Get the values of several resources that are set dynamically based
 * on the assumed NDC size of a grid cell. Each of this will be separately
 * modified in the course of this example to illustrate their effect.
 */
      
    NhlRLClear(grlist);
    NhlRLGetFloat(grlist,NhlNstStepSizeF,&stepsize);
    NhlRLGetFloat(grlist,NhlNstArrowLengthF,&arrowlength);
    NhlRLGetFloat(grlist,NhlNstMinLineSpacingF,&spacing);
    NhlGetValues(stid,grlist);

/* 
 * Increase the step size 
 */

    NhlRLClear(rlist);
    NhlRLSetString(rlist,NhlNtiMainString,"Larger Step Size");
    NhlRLSetFloat(rlist,NhlNstStepSizeF,stepsize * 4.0);
    NhlSetValues(stid,rlist);

    NhlDraw(stid);
    NhlFrame(wid);
/* 
 * Decrease the step size 
 */

    NhlRLClear(rlist);
    NhlRLSetString(rlist,NhlNtiMainString,"Smaller Step Size");
    NhlRLSetFloat(rlist,NhlNstStepSizeF,stepsize * 0.25);
    NhlSetValues(stid,rlist);

    NhlDraw(stid);
    NhlFrame(wid);

/* 
 * Increase the minimum line spacing 
 */

    NhlRLClear(rlist);
    NhlRLSetString(rlist,NhlNtiMainString,"Larger Minimum Line Spacing");
    NhlRLSetFloat(rlist,NhlNstStepSizeF,stepsize);
    NhlRLSetFloat(rlist,NhlNstMinLineSpacingF, spacing * 4.0);
    NhlSetValues(stid,rlist);

    NhlDraw(stid);
    NhlFrame(wid);
/* 
 * Decrease the minimum line spacing
 */

    NhlRLClear(rlist);
    NhlRLSetString(rlist,NhlNtiMainString,"Smaller Minimum Line Spacing");
    NhlRLSetFloat(rlist,NhlNstMinLineSpacingF,spacing * 0.25);
    NhlSetValues(stid,rlist);

    NhlDraw(stid);
    NhlFrame(wid);

/* 
 * Increase the line starting grid stride 
 */

    NhlRLClear(rlist);
    NhlRLSetString(rlist,NhlNtiMainString,"Larger Line Starting Grid Stride");
    NhlRLSetFloat(rlist,NhlNstMinLineSpacingF,spacing);
    NhlRLSetInteger(rlist,NhlNstLineStartStride,3);
    NhlSetValues(stid,rlist);

    NhlDraw(stid);
    NhlFrame(wid);
/* 
 * Decrease the line starting grid stride
 */

    NhlRLClear(rlist);
    NhlRLSetString(rlist,NhlNtiMainString,"Smaller Line Starting Grid Stride");
    NhlRLSetInteger(rlist,NhlNstLineStartStride,1);
    NhlSetValues(stid,rlist);

    NhlDraw(stid);
    NhlFrame(wid);

/*
 * Increase the arrow size
 */

    NhlRLClear(rlist);
    NhlRLSetString(rlist,NhlNtiMainString,"Larger Arrows");
    NhlRLSetInteger(rlist,NhlNstLineStartStride,2);
    NhlRLSetFloat(rlist,NhlNstArrowLengthF, arrowlength * 2.0);
    NhlSetValues(stid,rlist);

    NhlDraw(stid);
    NhlFrame(wid);

/*
 * Destroy the objects created, close the HLU library and exit.
 */
    NhlDestroy(appid);
    NhlClose();
    exit(0);
}