4
\brief Surface subroutines
6
(C) 2008, 2010 by the GRASS Development Team
8
This program is free software under the GNU General Public
9
License (>=v2). Read the file COPYING that comes with GRASS
12
\author Martin Landa <landa.martin gmail.com> (Google SoC 2008/2010)
4
\brief Surface subroutines
6
(C) 2008, 2010 by the GRASS Development Team
8
This program is free software under the GNU General Public
9
License (>=v2). Read the file COPYING that comes with GRASS
12
\author Martin Landa <landa.martin gmail.com> (Google SoC 2008/2010)
15
15
#include <stdlib.h>
16
16
#include <string.h>
20
20
#include "local_proto.h"
23
\brief Load raster maps/constants and set surface attributes
25
\param params module parameters
23
\brief Load raster maps/constants and set surface attributes
25
\param params module parameters
28
28
int load_rasters(const struct GParams *params, nv_data * data)
32
32
int nelevs, nelev_map, nelev_const, ncolor_map, ncolor_const, nmask_map;
33
33
int ntransp_map, ntransp_const, nshine_map, nshine_const;
41
41
nelev_const = opt_get_num_answers(params->elev_const);
43
43
nelevs = nelev_const + nelev_map;
45
44
/* topography (required) */
46
45
for (i = 0; i < nelevs; i++) {
48
47
if (i < nelev_map && strcmp(params->elev_map->answers[i], "")) {
49
mapset = G_find_cell2(params->elev_map->answers[i], "");
48
mapset = G_find_raster2(params->elev_map->answers[i], "");
50
49
if (mapset == NULL) {
51
50
G_fatal_error(_("Raster map <%s> not found"),
52
51
params->elev_map->answers[i]);
55
54
id = Nviz_new_map_obj(MAP_OBJ_SURF,
56
G_fully_qualified_name(params->elev_map->
55
G_fully_qualified_name(params->
61
if (i-nelev_map < nelev_const && strcmp(params->elev_const->answers[i-nelev_map], "")) {
62
id = Nviz_new_map_obj(MAP_OBJ_SURF,
64
atof(params->elev_const->answers[i-nelev_map]),
60
if (i - nelev_map < nelev_const &&
61
strcmp(params->elev_const->answers[i - nelev_map], "")) {
62
id = Nviz_new_map_obj(MAP_OBJ_SURF, NULL,
63
atof(params->elev_const->
64
answers[i - nelev_map]), data);
68
67
G_fatal_error(_("Missing topography attribute for surface %d"),
74
if (opt_get_num_answers(params->surface_pos) != 3 * nelevs){
75
x = atof(params->surface_pos->answers[0]);
76
y = atof(params->surface_pos->answers[1]);
77
z = atof(params->surface_pos->answers[2]);
80
x = atof(params->surface_pos->answers[i*3+0]);
81
y = atof(params->surface_pos->answers[i*3+1]);
82
z = atof(params->surface_pos->answers[i*3+2]);
73
if (opt_get_num_answers(params->surface_pos) != 3 * nelevs) {
74
x = atof(params->surface_pos->answers[0]);
75
y = atof(params->surface_pos->answers[1]);
76
z = atof(params->surface_pos->answers[2]);
79
x = atof(params->surface_pos->answers[i * 3 + 0]);
80
y = atof(params->surface_pos->answers[i * 3 + 1]);
81
z = atof(params->surface_pos->answers[i * 3 + 2]);
85
84
GS_set_trans(id, x, y, z);
104
103
/* check for color map */
105
104
if (i < ncolor_map && strcmp(params->color_map->answers[i], "")) {
106
mapset = G_find_cell2(params->color_map->answers[i], "");
105
mapset = G_find_raster2(params->color_map->answers[i], "");
107
106
if (mapset == NULL) {
108
107
G_fatal_error(_("Raster map <%s> not found"),
109
108
params->color_map->answers[i]);
112
111
Nviz_set_attr(id, MAP_OBJ_SURF, ATT_COLOR, MAP_ATT,
113
G_fully_qualified_name(params->color_map->
114
answers[i], mapset), -1.0,
112
G_fully_qualified_name(params->
113
color_map->answers[i],
114
mapset), -1.0, data);
117
116
/* check for color value */
118
else if (i-ncolor_map < ncolor_const &&
119
strcmp(params->color_const->answers[i-ncolor_map], "")) {
117
else if (i - ncolor_map < ncolor_const &&
118
strcmp(params->color_const->answers[i - ncolor_map], "")) {
120
119
Nviz_set_attr(id, MAP_OBJ_SURF, ATT_COLOR, CONST_ATT, NULL,
121
Nviz_color_from_str(params->color_const->
122
answers[i-ncolor_map]), data);
120
Nviz_color_from_str(params->
121
color_const->answers[i -
124
125
else { /* use by default elevation map for coloring */
126
Nviz_set_attr(id, MAP_OBJ_SURF, ATT_COLOR, MAP_ATT,
127
G_fully_qualified_name(params->elev_map->answers[i],
128
mapset), -1.0, data);
129
G_verbose_message(_("Color attribute not defined, using default <%s>"),
130
G_fully_qualified_name(params->elev_map->
131
answers[i], mapset));
134
G_fatal_error(_("Missing color attribute for surface %d"),
127
Nviz_set_attr(id, MAP_OBJ_SURF, ATT_COLOR, MAP_ATT,
128
G_fully_qualified_name(params->elev_map->
131
G_verbose_message(_("Color attribute not defined, using default <%s>"),
132
G_fully_qualified_name(params->
133
elev_map->answers[i],
137
G_fatal_error(_("Missing color attribute for surface %d"),
139
142
if (i < nmask_map && strcmp(params->mask_map->answers[i], "")) {
145
148
/* transparency */
146
149
if (i < ntransp_map && strcmp(params->transp_map->answers[i], "")) {
147
150
Nviz_set_attr(id, MAP_OBJ_SURF, ATT_TRANSP, MAP_ATT,
148
G_fully_qualified_name(params->transp_map->
149
answers[i], mapset), -1.0,
151
G_fully_qualified_name(params->
152
transp_map->answers[i],
153
mapset), -1.0, data);
152
else if (i-ntransp_map < ntransp_const &&
153
strcmp(params->transp_const->answers[i-ntransp_map], "")) {
155
else if (i - ntransp_map < ntransp_const &&
156
strcmp(params->transp_const->answers[i - ntransp_map], "")) {
154
157
Nviz_set_attr(id, MAP_OBJ_SURF, ATT_TRANSP, CONST_ATT, NULL,
155
atof(params->transp_const->answers[i-ntransp_map]), data);
158
atof(params->transp_const->
159
answers[i - ntransp_map]), data);
159
163
if (i < nshine_map && strcmp(params->shine_map->answers[i], "")) {
160
164
Nviz_set_attr(id, MAP_OBJ_SURF, ATT_SHINE, MAP_ATT,
161
G_fully_qualified_name(params->shine_map->
162
answers[i], mapset), -1.0,
165
G_fully_qualified_name(params->
166
shine_map->answers[i],
167
mapset), -1.0, data);
165
else if (i-nshine_map < nshine_const &&
166
strcmp(params->shine_const->answers[i-nshine_map], "")) {
169
else if (i - nshine_map < nshine_const &&
170
strcmp(params->shine_const->answers[i - nshine_map], "")) {
167
171
Nviz_set_attr(id, MAP_OBJ_SURF, ATT_SHINE, CONST_ATT, NULL,
168
atof(params->shine_const->answers[i-nshine_map]), data);
172
atof(params->shine_const->answers[i - nshine_map]),
174
179
G_fully_qualified_name(params->emit_map->answers[i],
175
180
mapset), -1.0, data);
177
else if (i-nemit_map < nemit_const &&
178
strcmp(params->emit_const->answers[i-nemit_map], "")) {
182
else if (i - nemit_map < nemit_const &&
183
strcmp(params->emit_const->answers[i - nemit_map], "")) {
179
184
Nviz_set_attr(id, MAP_OBJ_SURF, ATT_EMIT, CONST_ATT, NULL,
180
atof(params->emit_const->answers[i-nemit_map]), data);
185
atof(params->emit_const->answers[i - nemit_map]),