1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
/*
* $Id: gsdiff.c,v 2.0 2004/11/09 12:30:45 bernhard Exp $
*/
/* gsdiff.c
Bill Brown, USACERL
November 1994
routines to set up automatic on-the-fly recalculation
of surface elevations, doing a "scaled difference" using another
surface for reference
Note that we're using a true difference here, between data set values,
no translations, etc.
TODO: generalize this concept to allow transform functions which are
dependent on surfaces that are dependent on other surfaces, etc., as long
as the dependency doesn't loop back.
*/
#include <stdio.h>
#include "gstypes.h"
#include "gsget.h"
static geosurf *Refsurf = NULL;
static typbuff *Refbuff = NULL;
static float Refscale = 1.0;
/***********************************************************************/
void gsdiff_set_SDscale(float scale)
{
Refscale = scale;
return;
}
/***********************************************************************/
float gsdiff_get_SDscale(void)
{
return (Refscale);
}
/***********************************************************************/
void gsdiff_set_SDref(geosurf * gsref)
{
Refsurf = gsref;
Refbuff = gs_get_att_typbuff(gsref, ATT_TOPO, 0);
return;
}
/***********************************************************************/
geosurf *gsdiff_get_SDref(void)
{
if (Refsurf && Refbuff) {
return (Refsurf);
}
return (NULL);
}
/***********************************************************************/
float gsdiff_do_SD(float val, int offset)
{
float ref;
if (Refbuff) {
GET_MAPATT(Refbuff, offset, ref);
return (ref + (val - ref) * Refscale);
}
return (val);
}
|