Loading...
Searching...
No Matches
gsdiff.c
Go to the documentation of this file.
/*!
\file lib/ogsf/gsdiff.c
\brief OGSF library - manipulating surfaces (lower level functions)
GRASS OpenGL gsurf OGSF Library
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.
(C) 1999-2008 by the GRASS Development Team
This program is free software under the
GNU General Public License (>=v2).
Read the file COPYING that comes with GRASS
for details.
\author Bill Brown USACERL, GMSL/University of Illinois (November 1994)
\author Doxygenized by Martin Landa <landa.martin gmail.com> (May 2008)
*/
#include <grass/ogsf.h>
#include "gsget.h"
static geosurf *Refsurf = NULL;
static typbuff *Refbuff = NULL;
static float Refscale = 1.0;
/*!
\brief Set scale
\param scale value
*/
void gsdiff_set_SDscale(float scale)
{
Refscale = scale;
return;
}
/*!
\brief Get scale
\return scale value
*/
float gsdiff_get_SDscale(void)
{
return (Refscale);
}
/*!
\brief ADD
\param gsref
*/
void gsdiff_set_SDref(geosurf *gsref)
{
Refsurf = gsref;
Refbuff = gs_get_att_typbuff(gsref, ATT_TOPO, 0);
return;
}
/*!
\brief ADD
\return pointer to geosurf struct
*/
geosurf *gsdiff_get_SDref(void)
{
if (Refsurf && Refbuff) {
return (Refsurf);
}
return (NULL);
}
/*!
\brief ADD
\param val
\param offset
\return value
*/
float gsdiff_do_SD(float val, int offset)
{
float ref;
if (Refbuff) {
GET_MAPATT(Refbuff, offset, ref);
return (ref + (val - ref) * Refscale);
}
return (val);
}
NULL
#define NULL
Definition ccmath.h:32
gs_get_att_typbuff
typbuff * gs_get_att_typbuff(geosurf *gs, int desc, int to_write)
Get attribute data buffer.
Definition gs.c:681
gsdiff_set_SDscale
void gsdiff_set_SDscale(float scale)
Set scale.
Definition gsdiff.c:42
gsdiff_do_SD
float gsdiff_do_SD(float val, int offset)
ADD.
Definition gsdiff.c:94
gsdiff_get_SDscale
float gsdiff_get_SDscale(void)
Get scale.
Definition gsdiff.c:54
gsdiff_set_SDref
void gsdiff_set_SDref(geosurf *gsref)
ADD.
Definition gsdiff.c:64
gsdiff_get_SDref
geosurf * gsdiff_get_SDref(void)
ADD.
Definition gsdiff.c:77
gsget.h
GET_MAPATT
#define GET_MAPATT(buff, offset, att)
Definition gsget.h:29