Beispiel #1
0
void
c_plcont(PLFLT **f, PLINT nx, PLINT ny, PLINT kx, PLINT lx,
	 PLINT ky, PLINT ly, PLFLT *clevel, PLINT nlevel,
	 void (*pltr) (PLFLT, PLFLT, PLFLT *, PLFLT *, PLPointer),
	 PLPointer pltr_data)
{
    PLfGrid2 grid;

    grid.f = f;
    plfcont(plf2eval2, (PLPointer) &grid,
	    nx, ny, kx, lx, ky, ly, clevel, nlevel,
	    pltr, pltr_data);
}
Beispiel #2
0
void
PLCONT7(PLFLT *z, PLINT *nx, PLINT *ny, PLINT *kx, PLINT *lx,
	PLINT *ky, PLINT *ly, PLFLT *clevel, PLINT *nlevel, PLFLT *ftr)
{
    PLfGrid fgrid;

    fgrid.nx = *nx;
    fgrid.ny = *ny;
    fgrid.f = z;

    plfcont(plf2evalr, (void *) &fgrid,
	    *nx, *ny, *kx, *lx, *ky, *ly, clevel, *nlevel,
	    pltr, (void *) ftr);
}
Beispiel #3
0
void
PLCON27(PLFLT *z, PLINT *nx, PLINT *ny, PLINT *kx, PLINT *lx,
	PLINT *ky, PLINT *ly, PLFLT *clevel, PLINT *nlevel,
	PLFLT *xg, PLFLT *yg)
{
    PLfGrid fgrid;
    PLcGrid cgrid;

    fgrid.nx = *nx;
    fgrid.ny = *ny;
    fgrid.f = z;

    cgrid.nx = *nx;
    cgrid.ny = *ny;
    cgrid.xg = xg;
    cgrid.yg = yg;

    plfcont(plf2evalr, (void *) &fgrid,
	    *nx, *ny, *kx, *lx, *ky, *ly, clevel, *nlevel,
	    pltr2f, (void *) &cgrid);
}
Beispiel #4
0
void
plfshades( PLF2OPS zops, PLPointer zp, PLINT nx, PLINT ny,
           PLINT ( *defined )( PLFLT, PLFLT ),
           PLFLT xmin, PLFLT xmax, PLFLT ymin, PLFLT ymax,
           const PLFLT *clevel, PLINT nlevel, PLFLT fill_width,
           PLINT cont_color, PLFLT cont_width,
           void ( *fill )( PLINT, const PLFLT *, const PLFLT * ), PLINT rectangular,
           void ( *pltr )( PLFLT, PLFLT, PLFLT *, PLFLT *, PLPointer ),
           PLPointer pltr_data )
{
    PLFLT shade_min, shade_max, shade_color;
    PLINT i, init_color;
    PLFLT init_width, color_min, color_max, color_range;

    // Color range to use
    color_min   = plsc->cmap1_min;
    color_max   = plsc->cmap1_max;
    color_range = color_max - color_min;

    for ( i = 0; i < nlevel - 1; i++ )
    {
        shade_min   = clevel[i];
        shade_max   = clevel[i + 1];
        shade_color = color_min + i / (PLFLT) ( nlevel - 2 ) * color_range;
        // The constants in order mean
        // (1) color map1,
        // (0, 0, 0, 0) all edge effects will be done with plcont rather
        // than the normal plshade drawing which gets partially blocked
        // when sequential shading is done as in the present case

        plfshade1( zops, zp, nx, ny, defined, xmin, xmax, ymin, ymax,
            shade_min, shade_max,
            1, shade_color, fill_width,
            0, 0, 0, 0,
            fill, rectangular, pltr, pltr_data );
    }
    if ( cont_color > 0 && cont_width > 0 )
    {
        init_color = plsc->icol0;
        init_width = plsc->width;
        plcol0( cont_color );
        plwidth( cont_width );
        if ( pltr )
        {
            plfcont( zops->f2eval, zp, nx, ny, 1, nx, 1, ny, clevel, nlevel, pltr, pltr_data );
        }
        else
        {
            // For this case use the same interpretation that occurs internally
            // for plshade.  That is set up x and y grids that map from the
            // index ranges to xmin, xmax, ymin, ymax, and use those grids
            // for the plcont call.
            //
            PLcGrid cgrid1;
            PLFLT   *x, *y;
            cgrid1.nx = nx;
            cgrid1.ny = ny;
            x         = (PLFLT *) malloc( (size_t) nx * sizeof ( PLFLT ) );
            if ( x == NULL )
                plexit( "plfshades: Out of memory for x" );
            cgrid1.xg = x;
            for ( i = 0; i < nx; i++ )
                cgrid1.xg[i] = xmin + ( xmax - xmin ) * (float) i / (float) ( nx - 1 );
            y = (PLFLT *) malloc( (size_t) ny * sizeof ( PLFLT ) );
            if ( y == NULL )
                plexit( "plfshades: Out of memory for y" );
            cgrid1.yg = y;
            for ( i = 0; i < ny; i++ )
                cgrid1.yg[i] = ymin + ( ymax - ymin ) * (float) i / (float) ( ny - 1 );
            plfcont( zops->f2eval, zp, nx, ny, 1, nx, 1, ny, clevel, nlevel,
                pltr1, (void *) &cgrid1 );
            free( x );
            free( y );
        }
        plcol0( init_color );
        plwidth( init_width );
    }
}