GRASS GIS 8 Programmer's Manual  8.5.0dev(2024)-f622271e7a
gs3.c File Reference

OGSF library - loading surfaces (lower level functions) More...

#include <stdlib.h>
#include <string.h>
#include <grass/gis.h>
#include <grass/raster.h>
#include <grass/glocale.h>
#include <grass/bitmap.h>
#include <grass/ogsf.h>
#include "gsget.h"
Include dependency graph for gs3.c:

Go to the source code of this file.

Macros

#define INIT_MINMAX(p, nm, size, min, max, found)
 Used in the function Gs_update_attrange() More...
 
#define SET_MINMAX(p, nm, size, min, max)
 Used in the function Gs_update_attrange() More...
 
#define NO_DATA_COL   0xffffff
 

Typedefs

typedef int FILEDESC
 

Functions

double Gs_distance (double *from, double *to)
 Calculates distance in METERS between two points in current projection (2D) More...
 
int Gs_loadmap_as_float (struct Cell_head *wind, const char *map_name, float *buff, struct BM *nullmap, int *has_null)
 Load raster map as floating point map. More...
 
int Gs_loadmap_as_int (struct Cell_head *wind, const char *map_name, int *buff, struct BM *nullmap, int *has_null)
 Load raster map as integer map. More...
 
int Gs_numtype (const char *filename, int *negflag)
 Get map data type. More...
 
int Gs_loadmap_as_short (struct Cell_head *wind, const char *map_name, short *buff, struct BM *nullmap, int *has_null)
 Load raster map as integer map. More...
 
int Gs_loadmap_as_char (struct Cell_head *wind, const char *map_name, unsigned char *buff, struct BM *nullmap, int *has_null)
 Load raster map as integer map. More...
 
int Gs_loadmap_as_bitmap (struct Cell_head *wind, const char *map_name, struct BM *buff)
 Load raster map as integer map. More...
 
int Gs_build_256lookup (const char *filename, int *buff)
 Build color table (256) More...
 
void Gs_pack_colors (const char *filename, int *buff, int rows, int cols)
 Pack color table. More...
 
void Gs_pack_colors_float (const char *filename, float *fbuf, int *ibuf, int rows, int cols)
 Pack color table (floating-point map) More...
 
int Gs_get_cat_label (const char *filename, int drow, int dcol, char *catstr)
 Get categories/labels. More...
 
int Gs_save_3dview (const char *vname, geoview *gv, geodisplay *gd UNUSED, struct Cell_head *w, geosurf *defsurf)
 Save 3dview. More...
 
int Gs_load_3dview (const char *vname, geoview *gv, geodisplay *gd UNUSED, struct Cell_head *w, const geosurf *defsurf)
 Load 3dview. More...
 
int Gs_update_attrange (geosurf *gs, int desc)
 Update no_zero ranges for attribute (actually no_null now) More...
 

Detailed Description

OGSF library - loading surfaces (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
Bill Brown USACERL, GMSL/University of Illinois (January 1993)
Doxygenized by Martin Landa <landa.martin gmail.com> (May 2008)

Definition in file gs3.c.

Macro Definition Documentation

◆ INIT_MINMAX

#define INIT_MINMAX (   p,
  nm,
  size,
  min,
  max,
  found 
)
Value:
found = 0; \
p += (size - 1); \
while (size--) { \
if (!BM_GET_BYOFFSET(nm, size)) { \
min = max = *p; \
found = 1; \
break; \
} \
p--; \
}
#define max(x, y)
Definition: draw2.c:30
#define BM_GET_BYOFFSET(bm, off)
Definition: gsget.h:31

Used in the function Gs_update_attrange()

Definition at line 35 of file gs3.c.

◆ NO_DATA_COL

#define NO_DATA_COL   0xffffff

Definition at line 66 of file gs3.c.

◆ SET_MINMAX

#define SET_MINMAX (   p,
  nm,
  size,
  min,
  max 
)
Value:
p += (size - 1); \
while (size--) { \
if (!BM_GET_BYOFFSET(nm, size)) { \
if (*p < min) { \
min = *p; \
} \
else if (*p > max) { \
max = *p; \
} \
} \
p--; \
}
#define min(x, y)
Definition: draw2.c:29

Used in the function Gs_update_attrange()

Definition at line 50 of file gs3.c.

Typedef Documentation

◆ FILEDESC

typedef int FILEDESC

Definition at line 64 of file gs3.c.

Function Documentation

◆ Gs_build_256lookup()

int Gs_build_256lookup ( const char *  filename,
int *  buff 
)

Build color table (256)

Calling function must have already allocated space in buff for range of data (256 for now) - simply calls get_color for each cat in color range

Parameters
filenameraster map name
[out]buffdata buffer
Returns
1 on success
0 on failure

Definition at line 571 of file gs3.c.

◆ Gs_distance()

double Gs_distance ( double *  from,
double *  to 
)

Calculates distance in METERS between two points in current projection (2D)

Uses G_distance().

Parameters
from'from' point (X, Y)
to'to' point (X, Y)
Returns
distance

Definition at line 79 of file gs3.c.

Referenced by GS_geodistance().

◆ Gs_get_cat_label()

int Gs_get_cat_label ( const char *  filename,
int  drow,
int  dcol,
char *  catstr 
)

Get categories/labels.

Formats label as in d.what.rast -> (catval) catlabel

Parameters
filenameraster map name
drow
dcol
catstrcategory string
Returns
1 on success
0 on failure

Definition at line 770 of file gs3.c.

Referenced by GS_get_cat_at_xy().

◆ Gs_load_3dview()

◆ Gs_loadmap_as_bitmap()

int Gs_loadmap_as_bitmap ( struct Cell_head wind,
const char *  map_name,
struct BM buff 
)

Load raster map as integer map.

Calling function must have already allocated space in buff for struct BM of wind->rows & wind->cols.

This routine simply loads the map into the bitmap by repetitve calls to get_map_row. Any value other than 0 in the map will set the bitmap. (may want to change later to allow specific value to set)

Changed to use null.

Parameters
windcurrent window
map_nameraster map name
[out]buffdata buffer
Returns
1 on success
-1 on failure

Definition at line 512 of file gs3.c.

◆ Gs_loadmap_as_char()

int Gs_loadmap_as_char ( struct Cell_head wind,
const char *  map_name,
unsigned char *  buff,
struct BM nullmap,
int *  has_null 
)

Load raster map as integer map.

Calling function must have already allocated space in buff for wind->rows * wind->cols unsigned chars.

This routine simply loads the map into a 2d array by repetitve calls to get_map_row.

Since signs of chars can be tricky, we only load positive chars between 0-255.

Todo:
fn body Gs_loadmap_as_float()
Parameters
windcurrent window
map_nameraster map name
[out]buffdata buffer
[out]nullmapnull map buffer
[out]has_nullindicates if raster map contains null-data
Returns
1 on success
-1 on failure
-2 if read ok, but 1 or more values were too large (small) to fit into an unsigned char. (in which case the max (min) char is used)

Definition at line 412 of file gs3.c.

◆ Gs_loadmap_as_float()

int Gs_loadmap_as_float ( struct Cell_head wind,
const char *  map_name,
float *  buff,
struct BM nullmap,
int *  has_null 
)

Load raster map as floating point map.

Calling function must have already allocated space in buff for wind->rows * wind->cols floats.

This routine simply loads the map into a 2d array by repetitve calls to get_f_raster_row.

Parameters
windcurrent window
map_nameraster map name
[out]buffdata buffer
[out]nullmapnull map buffer
[out]has_nullindicates if raster map contains null-data
Returns
1 on success
0 on failure

Definition at line 109 of file gs3.c.

◆ Gs_loadmap_as_int()

int Gs_loadmap_as_int ( struct Cell_head wind,
const char *  map_name,
int *  buff,
struct BM nullmap,
int *  has_null 
)

Load raster map as integer map.

Calling function must have already allocated space in buff for wind->rows * wind->cols floats.

This routine simply loads the map into a 2d array by repetitve calls to get_f_raster_row.

Todo:
fn body of Gs_loadmap_as_float()
Parameters
windcurrent window
map_nameraster map name
[out]buffdata buffer
[out]nullmapnull map buffer
[out]has_nullindicates if raster map contains null-data
Returns
1 on success
0 on failure

Definition at line 173 of file gs3.c.

◆ Gs_loadmap_as_short()

int Gs_loadmap_as_short ( struct Cell_head wind,
const char *  map_name,
short *  buff,
struct BM nullmap,
int *  has_null 
)

Load raster map as integer map.

Calling function must have already allocated space in buff for wind->rows * wind->cols shorts.

This routine simply loads the map into a 2d array by repetitve calls to get_map_row.

Parameters
windcurrent window
map_nameraster map name
[out]buffdata buffer
[out]nullmapnull map buffer
[out]has_nullindicates if raster map contains null-data
Returns
1 on success
-1 on failure,
-2 if read ok, but 1 or more values were too large (small) to fit into a short (in which case the max (min) short is used)

Definition at line 307 of file gs3.c.

◆ Gs_numtype()

int Gs_numtype ( const char *  filename,
int *  negflag 
)

Get map data type.

Parameters
filenameraster map name
negflag
Returns
-1 if map is integer and Rast_read_range() fails
data type (ARRY_*)

Definition at line 225 of file gs3.c.

◆ Gs_pack_colors()

void Gs_pack_colors ( const char *  filename,
int *  buff,
int  rows,
int  cols 
)

Pack color table.

Passed an array of 32 bit ints that is converted from cell values to packed colors (0xbbggrr)

Parameters
filenameraster map name
buff
rowsnumber of rows
colsnumber of cols

Definition at line 632 of file gs3.c.

◆ Gs_pack_colors_float()

void Gs_pack_colors_float ( const char *  filename,
float *  fbuf,
int *  ibuf,
int  rows,
int  cols 
)

Pack color table (floating-point map)

Passed a array of floats that will be converted from cell values to packed colors (0xbbggrr) and float to int Floating point data not freed here, use: gsds_free_data_buff(id, ATTY_FLOAT)

Parameters
filenameraster map name
fbuf
ibuf
rowsnumber of rows
colsnumber of cols

Definition at line 700 of file gs3.c.

◆ Gs_save_3dview()

◆ Gs_update_attrange()

int Gs_update_attrange ( geosurf gs,
int  desc 
)