GRASS Programmer's Manual  6.4.2(2012)
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
gvl_calc.c File Reference

OGSF library - loading and manipulating volumes (lower level functions) More...

#include <math.h>
#include <grass/gis.h>
#include <grass/gstypes.h>
#include "rgbpack.h"
#include "mc33_table.h"
Include dependency graph for gvl_calc.c:

Go to the source code of this file.

Data Structures

struct  data_buffer

Macros

#define BUFFER_SIZE   1000000
 memory buffer for writing
#define LINTERP(d, a, b)   (a + d * (b - a))
#define TINTERP(d, v)
#define FOR_VAR   i_for
#define FOR_0_TO_N(n, cmd)   { int FOR_VAR; for (FOR_VAR = 0; FOR_VAR < n; FOR_VAR++) {cmd;} }
#define WRITE(c)   gvl_write_char(dbuff->ndx_new++, &(dbuff->new), c)
 writing and reading isosurface data
#define READ()   gvl_read_char(dbuff->ndx_old++, dbuff->old)
#define SKIP(n)   dbuff->ndx_old = dbuff->ndx_old + n
#define IS_IN_DATA(att)   ((isosurf->data_desc >> att) & 1)
 check and set data descriptor
#define SET_IN_DATA(att)   isosurf->data_desc = (isosurf->data_desc | (1 << att))
#define DISTANCE_2(x1, y1, x2, y2)   sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))
#define SLICE_MODE_INTERP_NO   0
#define SLICE_MODE_INTERP_YES   1

Functions

int mc33_process_cube (int c_ndx, float *v)
 ADD.
void iso_w_cndx (int ndx, data_buffer *dbuff)
 Write cube index.
int iso_r_cndx (data_buffer *dbuff)
 Read cube index.
int iso_get_cube_value (geovol_isosurf *isosurf, int desc, int x, int y, int z, float *v)
 Get value from data input.
void iso_get_range (geovol_isosurf *isosurf, int desc, double *min, double *max)
 Get volume file values range.
int iso_get_cube_values (geovol_isosurf *isosurf, int desc, int x, int y, int z, float *v)
 Read values for cube.
void iso_get_cube_grads (geovol_isosurf *isosurf, int x, int y, int z, float(*grad)[3])
 Calculate cube grads.
void iso_calc_cube (geovol_isosurf *isosurf, int x, int y, int z, data_buffer *dbuff)
 Process cube.
int gvl_isosurf_calc (geovol *gvol)
 Fill data structure with computed isosurfaces polygons.
void gvl_write_char (int pos, unsigned char **data, unsigned char c)
 ADD.
unsigned char gvl_read_char (int pos, const unsigned char *data)
 Read char.
void gvl_align_data (int pos, unsigned char *data)
 Append data to buffer.
float slice_get_value (geovol *gvl, int x, int y, int z)
 Get volume value.
int slice_calc (geovol *gvl, int ndx_slc, void *colors)
 Calculate slices.
int gvl_slices_calc (geovol *gvol)
 Calculate slices for given volume set.

Variables

int Rows
int Cols
int Depths
double ResX
double ResY
double ResZ

Detailed Description

OGSF library - loading and manipulating volumes (lower level functions)

GRASS OpenGL gsurf OGSF Library

(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
Tomas Paudits (February 2004)
Doxygenized by Martin Landa <landa.martin gmail.com> (May 2008)

Definition in file gvl_calc.c.

Macro Definition Documentation

#define BUFFER_SIZE   1000000

memory buffer for writing

Definition at line 30 of file gvl_calc.c.

Referenced by gvl_write_char().

#define DISTANCE_2 (   x1,
  y1,
  x2,
  y2 
)    sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))

Definition at line 789 of file gvl_calc.c.

Referenced by slice_calc().

#define FOR_0_TO_N (   n,
  cmd 
)    { int FOR_VAR; for (FOR_VAR = 0; FOR_VAR < n; FOR_VAR++) {cmd;} }

Definition at line 46 of file gvl_calc.c.

Referenced by iso_calc_cube().

#define FOR_VAR   i_for

Definition at line 45 of file gvl_calc.c.

Referenced by iso_calc_cube().

#define IS_IN_DATA (   att)    ((isosurf->data_desc >> att) & 1)

check and set data descriptor

Definition at line 58 of file gvl_calc.c.

Referenced by gvl_isosurf_calc(), and iso_calc_cube().

#define LINTERP (   d,
  a,
  b 
)    (a + d * (b - a))

Definition at line 35 of file gvl_calc.c.

Referenced by iso_calc_cube().

#define READ ( )    gvl_read_char(dbuff->ndx_old++, dbuff->old)

Definition at line 52 of file gvl_calc.c.

Referenced by iso_calc_cube(), and iso_r_cndx().

#define SET_IN_DATA (   att)    isosurf->data_desc = (isosurf->data_desc | (1 << att))

Definition at line 59 of file gvl_calc.c.

Referenced by gvl_isosurf_calc().

#define SKIP (   n)    dbuff->ndx_old = dbuff->ndx_old + n

Definition at line 53 of file gvl_calc.c.

Referenced by iso_calc_cube().

#define SLICE_MODE_INTERP_NO   0

Definition at line 791 of file gvl_calc.c.

#define SLICE_MODE_INTERP_YES   1

Definition at line 792 of file gvl_calc.c.

Referenced by slice_calc().

#define TINTERP (   d,
 
)
Value:
((v[0]*(1.-d[0])*(1.-d[1])*(1.-d[2])) +\
(v[1]*d[0]*(1.-d[1])*(1.-d[2])) + \
(v[2]*d[0]*d[1]*(1.-d[2])) + \
(v[3]*(1.-d[0])*d[1]*(1.-d[2])) + \
(v[4]*(1.-d[0])*(1.-d[1])*d[2]) + \
(v[5]*d[0]*(1.-d[1])*d[2]) + \
(v[6]*d[0]*d[1]*d[2]) + \
(v[7]*(1.-d[0])*d[1]*d[2]))

Definition at line 36 of file gvl_calc.c.

Referenced by iso_calc_cube().

#define WRITE (   c)    gvl_write_char(dbuff->ndx_new++, &(dbuff->new), c)

writing and reading isosurface data

Definition at line 51 of file gvl_calc.c.

Referenced by iso_calc_cube(), iso_r_cndx(), and iso_w_cndx().

Function Documentation

void gvl_align_data ( int  pos,
unsigned char *  data 
)

Append data to buffer.

Parameters
posposition index
datadata buffer

Definition at line 771 of file gvl_calc.c.

References G_debug().

Referenced by gvl_isosurf_calc(), and slice_calc().

int gvl_isosurf_calc ( geovol *  gvol)

Fill data structure with computed isosurfaces polygons.

Parameters
gvolpointer to geovol struct
Returns
1

Definition at line 584 of file gvl_calc.c.

References Cols, Depths, G_free(), gvl_align_data(), gvl_file_end_read(), gvl_file_get_volfile(), gvl_file_set_mode(), gvl_file_start_read(), gvl_write_char(), IS_IN_DATA, iso_calc_cube(), data_buffer::ndx_new, data_buffer::ndx_old, data_buffer::new, NULL, data_buffer::num_zero, data_buffer::old, ResX, ResY, ResZ, Rows, and SET_IN_DATA.

Referenced by gvld_vol().

unsigned char gvl_read_char ( int  pos,
const unsigned char *  data 
)

Read char.

Parameters
posposition index
datadata buffer
Returns
char on success
NULL on failure

Definition at line 757 of file gvl_calc.c.

int gvl_slices_calc ( geovol *  gvol)

Calculate slices for given volume set.

Parameters
gvolpointer to geovol struct
Returns
1

Definition at line 1021 of file gvl_calc.c.

References Cols, Depths, G_debug(), gvl_file_get_name(), Gvl_load_colors_data(), Gvl_unload_colors_data(), ResX, ResY, ResZ, Rows, and slice_calc().

Referenced by gvld_vol().

void gvl_write_char ( int  pos,
unsigned char **  data,
unsigned char  c 
)

ADD.

Parameters
pos
data
c

Definition at line 729 of file gvl_calc.c.

References BUFFER_SIZE, and G_debug().

Referenced by gvl_isosurf_calc(), and slice_calc().

void iso_calc_cube ( geovol_isosurf *  isosurf,
int  x,
int  y,
int  z,
data_buffer dbuff 
)
void iso_get_cube_grads ( geovol_isosurf *  isosurf,
int  x,
int  y,
int  z,
float(*)  grad[3] 
)

Calculate cube grads.

Parameters
isosurf
x,y,z
grad

Definition at line 246 of file gvl_calc.c.

References Cols, Depths, iso_get_cube_value(), and Rows.

Referenced by iso_calc_cube().

int iso_get_cube_value ( geovol_isosurf *  isosurf,
int  desc,
int  x,
int  y,
int  z,
float *  v 
)

Get value from data input.

Parameters
isosurf
desc
x,y,z
[out]value
Returns
0
?

Definition at line 155 of file gvl_calc.c.

References gvl_file_get_data_type(), gvl_file_get_value(), gvl_file_get_volfile(), gvl_file_is_null_value(), ResX, ResY, ResZ, and gui_modules.psmap_dialogs::type.

Referenced by iso_get_cube_grads(), and iso_get_cube_values().

int iso_get_cube_values ( geovol_isosurf *  isosurf,
int  desc,
int  x,
int  y,
int  z,
float *  v 
)

Read values for cube.

Parameters
isosurf
desc
x,y,z
[out]v
Returns

Definition at line 223 of file gvl_calc.c.

References iso_get_cube_value().

Referenced by iso_calc_cube().

void iso_get_range ( geovol_isosurf *  isosurf,
int  desc,
double *  min,
double *  max 
)

Get volume file values range.

Parameters
isosurf
desc
[out]min
[out]max

Definition at line 206 of file gvl_calc.c.

References gvl_file_get_min_max(), and gvl_file_get_volfile().

Referenced by iso_calc_cube().

int iso_r_cndx ( data_buffer dbuff)

Read cube index.

Parameters
dbuff

Definition at line 120 of file gvl_calc.c.

References data_buffer::num_zero, READ, and WRITE.

Referenced by iso_calc_cube().

void iso_w_cndx ( int  ndx,
data_buffer dbuff 
)

Write cube index.

Parameters
ndx
dbuff

Definition at line 85 of file gvl_calc.c.

References data_buffer::num_zero, and WRITE.

Referenced by iso_calc_cube().

int slice_calc ( geovol *  gvl,
int  ndx_slc,
void *  colors 
)
float slice_get_value ( geovol *  gvl,
int  x,
int  y,
int  z 
)

Get volume value.

Parameters
gvlpointer to geovol struct
x,y,z
Returns
value

Definition at line 802 of file gvl_calc.c.

References gvl_file_get_data_type(), gvl_file_get_value(), gvl_file_get_volfile(), and gui_modules.psmap_dialogs::type.

Referenced by slice_calc().

Variable Documentation

int Depths
double ResX

Definition at line 74 of file gvl_calc.c.

Referenced by gvl_isosurf_calc(), gvl_slices_calc(), iso_get_cube_value(), and slice_calc().

double ResY

Definition at line 74 of file gvl_calc.c.

Referenced by gvl_isosurf_calc(), gvl_slices_calc(), iso_get_cube_value(), and slice_calc().

double ResZ

Definition at line 74 of file gvl_calc.c.

Referenced by gvl_isosurf_calc(), gvl_slices_calc(), iso_get_cube_value(), and slice_calc().