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

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

#include <stdlib.h>
#include <string.h>
#include <grass/gis.h>
#include <grass/glocale.h>
#include <grass/bitmap.h>
#include <grass/gsurf.h>
#include <grass/gstypes.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()
#define SET_MINMAX(p, nm, size, min, max)
 Used in the function Gs_update_attrange()
#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)
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.
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.
int Gs_numtype (const char *filename, int *negflag)
 Get map data type.
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.
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.
int Gs_loadmap_as_bitmap (struct Cell_head *wind, const char *map_name, struct BM *buff)
 Load raster map as integer map.
int Gs_build_256lookup (const char *filename, int *buff)
 Build color table (256)
void Gs_pack_colors (const char *filename, int *buff, int rows, int cols)
 Pack color table.
void Gs_pack_colors_float (const char *filename, float *fbuf, int *ibuf, int rows, int cols)
 Pack color table (floating-point map)
int Gs_get_cat_label (const char *filename, int drow, int dcol, char *catstr)
 Get categories/labels.
int Gs_save_3dview (const char *vname, geoview *gv, geodisplay *gd, struct Cell_head *w, geosurf *defsurf)
 Save 3dview.
int Gs_load_3dview (const char *vname, geoview *gv, geodisplay *gd, struct Cell_head *w, geosurf *defsurf)
 Load 3dview.
int Gs_update_attrange (geosurf *gs, int desc)
 Update no_zero ranges for attribute (actually no_null now)

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

#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--; \
}

Used in the function Gs_update_attrange()

Definition at line 35 of file Gs3.c.

Referenced by Gs_update_attrange().

#define NO_DATA_COL   0xffffff

Definition at line 72 of file Gs3.c.

Referenced by Gs_build_256lookup(), Gs_pack_colors(), and Gs_pack_colors_float().

#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--; \
}

Used in the function Gs_update_attrange()

Definition at line 52 of file Gs3.c.

Referenced by Gs_update_attrange().


Typedef Documentation

typedef int FILEDESC

Definition at line 70 of file Gs3.c.


Function Documentation

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 627 of file Gs3.c.

References b, g, G_debug(), G_find_cell2(), G_get_color_range(), G_lookup_colors(), G_read_colors(), G_warning(), G_zero(), max, min, NO_DATA_COL, and r.

Referenced by GS_load_att_map().

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 84 of file Gs3.c.

References first, G_begin_distance_calculations(), and G_distance().

Referenced by GS_geodistance().

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 827 of file Gs3.c.

References G_allocate_c_raster_buf(), G_allocate_d_raster_buf(), G_close_cell(), G_find_cell2(), G_free(), G_free_cats(), G_get_c_raster_cat(), G_get_c_raster_row(), G_get_d_raster_cat(), G_get_d_raster_row(), G_get_raster_map_type(), G_is_c_null_value(), G_is_d_null_value(), G_open_cell_old(), G_read_cats(), G_warning(), and NULL.

Referenced by GS_get_cat_at_xy().

int Gs_load_3dview ( const char *  vname,
geoview *  gv,
geodisplay *  gd,
struct Cell_head *  w,
geosurf *  defsurf 
)

Load 3dview.

Parameters:
vnameview name
gvpointer to geoview struct
gdpointer to geodisplay struct
wcurrent window
defsurfdefault geosurf struct
Returns:
1

Definition at line 1004 of file Gs3.c.

References FROM, G_find_file2(), G_get_3dview(), G_warning(), GS_alldraw_wire(), GS_moveto_real(), GS_set_focus(), GS_set_fov(), GS_set_global_exag(), GS_set_twist(), GS_setall_drawmode(), GS_setall_drawres(), NULL, X, and Y.

Referenced by GS_load_3dview().

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 559 of file Gs3.c.

References BM_set(), G_allocate_null_buf(), G_close_cell(), G_debug(), G_fatal_error(), G_find_cell2(), G_free(), G_fully_qualified_name(), G_get_null_value_row(), G_message(), G_open_cell_old(), and G_warning().

Referenced by GS_load_att_map().

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 449 of file Gs3.c.

References BM_set(), G_allocate_null_buf(), G_close_cell(), G_debug(), G_fatal_error(), G_find_cell2(), G_free(), G_fully_qualified_name(), G_get_c_raster_row(), G_get_null_value_row(), G_message(), G_open_cell_old(), G_percent(), and G_warning().

Referenced by GS_load_att_map().

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 114 of file Gs3.c.

References BM_set(), G_allocate_null_buf(), G_close_cell(), G_debug(), G_fatal_error(), G_find_cell2(), G_free(), G_fully_qualified_name(), G_get_f_raster_row(), G_get_null_value_row(), G_is_f_null_value(), G_message(), G_open_cell_old(), G_percent(), and G_warning().

Referenced by GS_load_att_map().

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 189 of file Gs3.c.

References BM_set(), G_allocate_null_buf(), G_close_cell(), G_debug(), G_fatal_error(), G_find_cell2(), G_free(), G_fully_qualified_name(), G_get_c_raster_row(), G_get_null_value_row(), G_message(), G_open_cell_old(), G_percent(), and G_warning().

Referenced by GS_load_att_map().

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 334 of file Gs3.c.

References BM_set(), G_allocate_null_buf(), G_close_cell(), G_debug(), G_fatal_error(), G_find_cell2(), G_free(), G_fully_qualified_name(), G_get_c_raster_row(), G_get_null_value_row(), G_message(), G_open_cell_old(), G_percent(), and G_warning().

Referenced by GS_load_att_map().

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

Get map data type.

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

Definition at line 252 of file Gs3.c.

References first, G_debug(), G_find_cell2(), G_get_range_min_max(), G_raster_map_is_fp(), G_read_range(), G_warning(), max, and min.

Referenced by GS_load_att_map().

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 687 of file Gs3.c.

References b, gui_modules.psmap_dialogs::cols, g, G_find_cell2(), G_free(), G_free_colors(), G_fully_qualified_name(), G_lookup_colors(), G_message(), G_percent(), G_read_colors(), G_warning(), NO_DATA_COL, and r.

Referenced by GS_load_att_map().

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 756 of file Gs3.c.

References b, gui_modules.psmap_dialogs::cols, g, G_find_cell2(), G_free(), G_free_colors(), G_fully_qualified_name(), G_lookup_f_raster_colors(), G_message(), G_percent(), G_read_colors(), G_warning(), NO_DATA_COL, and r.

Referenced by GS_load_att_map().

int Gs_save_3dview ( const char *  vname,
geoview *  gv,
geodisplay *  gd,
struct Cell_head *  w,
geosurf *  defsurf 
)

Save 3dview.

Parameters:
vnameview name
gvpointer to geoview struct
gdpointer to geodisplay struct
wcurrent window
defsurfdefault geosurf struct
Returns:
-1 on error
?

Definition at line 906 of file Gs3.c.

References FROM, G_get_3dview_defaults(), G_mapset(), G_put_3dview(), GS_get_zrange(), GS_v3eq(), GS_v3mult(), gsd_model2real(), NULL, X, and Y.

Referenced by GS_save_3dview().

int Gs_update_attrange ( geosurf *  gs,
int  desc 
)

Update no_zero ranges for attribute (actually no_null now)

Parameters:
gspointer to geosurf struct
descattribute id (descriptor)
Returns:
-1 on error
1 on success

Definition at line 1140 of file Gs3.c.

References G_debug(), gs_get_att_src(), gsds_get_changed(), gsds_get_typbuff(), INIT_MINMAX, max, min, NULL, and SET_MINMAX.

Referenced by GS_load_att_map(), gs_set_att_const(), and GS_set_att_const().