GRASS 8 Programmer's Manual 8.6.0dev(2026)-4bb960b182
Loading...
Searching...
No Matches
gsdiff.c
Go to the documentation of this file.
1/*!
2 \file lib/ogsf/gsdiff.c
3
4 \brief OGSF library - manipulating surfaces (lower level functions)
5
6 GRASS OpenGL gsurf OGSF Library
7
8 Routines to set up automatic on-the-fly recalculation
9 of surface elevations, doing a "scaled difference" using another
10 surface for reference
11
12 Note that we're using a true difference here, between data set values,
13 no translations, etc.
14
15 \todo generalize this concept to allow transform functions which are
16 dependent on surfaces that are dependent on other surfaces, etc., as long
17 as the dependency doesn't loop back.
18
19 SPDX-FileCopyrightText: 1999-2008 GRASS Development Team
20 SPDX-License-Identifier: GPL-2.0-or-later
21
22 \author Bill Brown USACERL, GMSL/University of Illinois (November 1994)
23 \author Doxygenized by Martin Landa <landa.martin gmail.com> (May 2008)
24 */
25
26#include <grass/ogsf.h>
27#include "gsget.h"
28
29static geosurf *Refsurf = NULL;
30static typbuff *Refbuff = NULL;
31static float Refscale = 1.0;
32
33/*!
34 \brief Set scale
35
36 \param scale value
37 */
38void gsdiff_set_SDscale(float scale)
39{
40 Refscale = scale;
41
42 return;
43}
44
45/*!
46 \brief Get scale
47
48 \return scale value
49 */
51{
52 return (Refscale);
53}
54
55/*!
56 \brief ADD
57
58 \param gsref
59 */
61{
62 Refsurf = gsref;
63 Refbuff = gs_get_att_typbuff(gsref, ATT_TOPO, 0);
64
65 return;
66}
67
68/*!
69 \brief ADD
70
71 \return pointer to geosurf struct
72 */
74{
75 if (Refsurf && Refbuff) {
76 return (Refsurf);
77 }
78
79 return (NULL);
80}
81
82/*!
83 \brief ADD
84
85 \param val
86 \param offset
87
88 \return value
89 */
90float gsdiff_do_SD(float val, int offset)
91{
92 float ref;
93
94 if (Refbuff) {
95 GET_MAPATT(Refbuff, offset, ref);
96 return (ref + (val - ref) * Refscale);
97 }
98
99 return (val);
100}
#define NULL
Definition ccmath.h:32
typbuff * gs_get_att_typbuff(geosurf *, int, int)
Get attribute data buffer.
Definition gs.c:677
void gsdiff_set_SDscale(float scale)
Set scale.
Definition gsdiff.c:38
float gsdiff_do_SD(float val, int offset)
ADD.
Definition gsdiff.c:90
float gsdiff_get_SDscale(void)
Get scale.
Definition gsdiff.c:50
void gsdiff_set_SDref(geosurf *gsref)
ADD.
Definition gsdiff.c:60
geosurf * gsdiff_get_SDref(void)
ADD.
Definition gsdiff.c:73
#define GET_MAPATT(buff, offset, att)
Definition gsget.h:29
OGSF header file (structures)
#define ATT_TOPO
Definition ogsf.h:76
Definition ogsf.h:267