GRASS 8 Programmer's Manual 8.6.0dev(2026)-56a9afeb9f
Loading...
Searching...
No Matches
defaults.c
Go to the documentation of this file.
1#include <stdlib.h>
2#include <stdio.h>
3#include <grass/raster3d.h>
4#include "raster3d_intern.h"
5
6/*---------------------------------------------------------------------------*/
7
8#define RASTER3D_NO_DEFAULT -10
9
10#define RASTER3D_COMPRESSION_DEFAULT RASTER3D_COMPRESSION
11#define RASTER3D_PRECISION_DEFAULT RASTER3D_MAX_PRECISION
12#define RASTER3D_CACHE_SIZE_DEFAULT 1000
13#define RASTER3D_CACHE_SIZE_MAX_DEFAULT 16777216
14#define RASTER3D_FILE_TYPE_DEFAULT DCELL_TYPE
15#define RASTER3D_TILE_X_DEFAULT 16
16#define RASTER3D_TILE_Y_DEFAULT 16
17#define RASTER3D_TILE_Z_DEFAULT 8
18#define RASTER3D_ERROR_FUN_DEFAULT Rast3d_skip_error
19#define RASTER3D_UNIT_DEFAULT "none"
20#define RASTER3D_VERTICAL_UNIT_DEFAULT U_UNKNOWN
21
22/*---------------------------------------------------------------------------*/
23
24/*!
25 \brief Name of the environmental variable specifying that compression
26 should be used.
27
28 Setting the environmental variable to any value will cause that the
29 compression will be used (set when calling Rast3d_init_defaults
30 for the first time).
31
32 This environmental variable takes precedence before the environmental
33 variable specified by RASTER3D_COMPRESSION_ENV_VAR_NO.
34 */
35#define RASTER3D_COMPRESSION_ENV_VAR_YES "RASTER3D_USE_COMPRESSION"
36/*!
37 \brief Name of the environmental variable specifying that compression
38 should not be used.
39
40 \see RASTER3D_COMPRESSION_ENV_VAR_YES
41 */
42#define RASTER3D_COMPRESSION_ENV_VAR_NO "RASTER3D_NO_COMPRESSION"
43
44#define RASTER3D_PRECISION_ENV_VAR "RASTER3D_PRECISION"
45#define RASTER3D_PRECISION_ENV_VAR_MAX "RASTER3D_MAX_PRECISION"
46
47#define RASTER3D_CACHE_SIZE_ENV_VAR "RASTER3D_DEFAULT_CACHE_SIZE"
48#define RASTER3D_CACHE_SIZE_MAX_ENV_VAR "RASTER3D_MAX_CACHE_SIZE"
49
50#define RASTER3D_FILE_FLOAT_ENV_VAR "RASTER3D_WRITE_FLOAT"
51#define RASTER3D_FILE_DOUBLE_ENV_VAR "RASTER3D_WRITE_DOUBLE"
52
53#define RASTER3D_TILE_DIM_X_ENV_VAR "RASTER3D_TILE_DIMENSION_X"
54#define RASTER3D_TILE_DIM_Y_ENV_VAR "RASTER3D_TILE_DIMENSION_Y"
55#define RASTER3D_TILE_DIM_Z_ENV_VAR "RASTER3D_TILE_DIMENSION_Z"
56
57#define RASTER3D_FATAL_ERROR_ENV_VAR "RASTER3D_USE_FATAL_ERROR"
58#define RASTER3D_PRINT_ERROR_ENV_VAR "RASTER3D_USE_PRINT_ERROR"
59
60#define RASTER3D_DEFAULT_WINDOW3D "RASTER3D_DEFAULT_WINDOW3D"
61
62/*---------------------------------------------------------------------------*/
63
72void (*g3d_error_fun)(const char *) = NULL;
75
76/*---------------------------------------------------------------------------*/
77
78/*!
79 * \brief set compression mode
80 *
81 * <em>doCompress</em> should be one of RASTER3D_NO_COMPRESSION and
82 * RASTER3D_COMPRESSION. <em>precision</em> should be either
83 * RASTER3D_MAX_PRECISION or a positive integer.
84 *
85 * \note Note that older parameters <em>doLzw</em> and <em>doRle</em>
86 * (RASTER3D_NO_RLE or RASTER3D_USE_RLE) are no longer in the API.
87 *
88 * Calls Rast3d_fatal_error() if a wrong parameter value is provided.
89 *
90 * \param doCompress specifies if a compression should be performed
91 * \param precision a precision of compression
92 */
94{
98 "Rast3d_set_compression_mode: wrong value for doCompress.");
99
101
103 return;
104
105 if (precision < -1)
107 "Rast3d_set_compression_mode: wrong value for precision.");
108
109 g3d_precision = precision;
110}
111
112/*---------------------------------------------------------------------------*/
113
114/*!
115 * \brief Gets compression mode
116 *
117 * \param doCompress pointer to the integer where the compression mode will
118 * be stored
119 * \param precision pointer to the integer where the precision mode will
120 * be stored
121 *
122 * \see Rast3d_set_compression_mode, RASTER3D_COMPRESSION_ENV_VAR_YES,
123 RASTER3D_COMPRESSION_ENV_VAR_YES
124 */
125void Rast3d_get_compression_mode(int *doCompress, int *precision)
126{
127 if (doCompress != NULL)
129 if (precision != NULL)
130 *precision = g3d_precision;
131}
132
133/*---------------------------------------------------------------------------*/
134
135/*!
136 * \brief set cache size
137 *
138 * \param nTiles
139 * \return void
140 */
141void Rast3d_set_cache_size(int nTiles)
142{
143 if (nTiles < 0)
144 Rast3d_fatal_error("Rast3d_set_cache_size: size out of range.");
145
146 g3d_cache_default = nTiles;
147}
148
149/*---------------------------------------------------------------------------*/
150
151/*!
152 * \brief get cache size
153 *
154 * \return int
155 */
157{
158 return g3d_cache_default;
159}
160
161/*---------------------------------------------------------------------------*/
162
163/*!
164 * \brief Set cache limit
165 *
166 * \param nBytes
167 * \return void
168 */
170{
171 if (nBytes <= 0)
172 Rast3d_fatal_error("Rast3d_set_cache_limit: size out of range.");
173
175}
176
177/*---------------------------------------------------------------------------*/
178
179/*!
180 * \brief Get cache limit
181 *
182 * \return int
183 */
185{
186 return g3d_cache_max;
187}
188
189/*---------------------------------------------------------------------------*/
190
191/*!
192 * \brief set G3d file type
193 *
194 * \param type
195 * \return void
196 */
198{
199 if ((type != FCELL_TYPE) && (type != DCELL_TYPE))
200 Rast3d_fatal_error("Rast3d_setFileTypeDefault: invalid type");
201
202 g3d_file_type = type;
203}
204
205/*---------------------------------------------------------------------------*/
206
207/*!
208 * \brief get G3d file type
209 *
210 * \return int
211 */
213{
214 return g3d_file_type;
215}
216
217/*---------------------------------------------------------------------------*/
218
219/*!
220 * \brief set Tile Dimension
221 *
222 * \param tileX
223 * \param tileY
224 * \param tileZ
225 * \return void
226 */
227void Rast3d_set_tile_dimension(int tileX, int tileY, int tileZ)
228{
229 if ((g3d_tile_dimension[0] = tileX) <= 0)
230 Rast3d_fatal_error("Rast3d_set_tile_dimension: value for tile x "
231 "environment variable out of range");
232
233 if ((g3d_tile_dimension[1] = tileY) <= 0)
234 Rast3d_fatal_error("Rast3d_set_tile_dimension: value for tile y "
235 "environment variable out of range");
236
237 if ((g3d_tile_dimension[2] = tileZ) <= 0)
238 Rast3d_fatal_error("Rast3d_set_tile_dimension: value for tile z "
239 "environment variable out of range");
240}
241
242/*---------------------------------------------------------------------------*/
243
244/*!
245 * \brief get Tile Dimension
246 *
247 * \param tileX
248 * \param tileY
249 * \param tileZ
250 * \return void
251 */
252void Rast3d_get_tile_dimension(int *tileX, int *tileY, int *tileZ)
253{
254 *tileX = g3d_tile_dimension[0];
255 *tileY = g3d_tile_dimension[1];
256 *tileZ = g3d_tile_dimension[2];
257}
258
259/*---------------------------------------------------------------------------*/
260
261/*!
262 * \brief set error function
263 *
264 * \param fun
265 * \return void
266 */
267void Rast3d_set_error_fun(void (*fun)(const char *))
268{
270}
271
272/*---------------------------------------------------------------------------*/
273
274/*!
275 * \brief Initializes the default values described
276 * in RASTER3D Defaults. Applications have to use this function only if they
277 * need to query the default values before the first file (either old or new)
278 * has been opened.
279 *
280 * \return void
281 */
283{
284 static int firstTime = 1;
285 const char *value, *windowName;
286 RASTER3D_Region window;
287
288 if (!firstTime)
289 return;
290 firstTime = 0;
291
295 }
296 else {
299 }
300 else {
302 }
303 }
304 }
305
309 }
310 else {
312 if (value == NULL) {
314 }
315 else {
316 if (sscanf(value, "%d", &g3d_precision) != 1) {
318 "Rast3d_init_defaults: precision environment variable "
319 "has invalid value");
320 }
321 else {
322 if (g3d_precision < -1) {
324 "Rast3d_init_defaults: value for cache environment "
325 "variable out of range");
326 }
327 }
328 }
329 }
330 }
331
335 }
336 else {
339 }
340 else {
342 }
343 }
344 }
345
348
349 if (value == NULL) {
351 }
352 else {
353 if (sscanf(value, "%d", &g3d_cache_default) != 1) {
354 Rast3d_fatal_error("Rast3d_init_defaults: cache environment "
355 "variable has invalid value");
356 }
357 if (g3d_cache_default < 0) {
358 Rast3d_fatal_error("Rast3d_init_defaults: value for cache "
359 "environment variable out of range");
360 }
361 }
362 }
363
366
367 if (value == NULL) {
369 }
370 else {
371 if (sscanf(value, "%d", &g3d_cache_max) != 1) {
372 Rast3d_fatal_error("Rast3d_init_defaults: cache environment "
373 "variable has invalid value");
374 }
375 if (g3d_cache_max < 0) {
376 Rast3d_fatal_error("Rast3d_init_defaults: value for cache "
377 "environment variable out of range");
378 }
379 }
380 }
381
384
385 if (value == NULL) {
387 }
388 else {
389 if (sscanf(value, "%d", g3d_tile_dimension) != 1) {
390 Rast3d_fatal_error("Rast3d_init_defaults: tile dimension x "
391 "environment variable has invalid value");
392 }
393 if (g3d_tile_dimension[0] <= 0) {
394 Rast3d_fatal_error("Rast3d_init_defaults: value for tile x "
395 "environment variable out of range");
396 }
397 }
398
400
401 if (value == NULL) {
403 }
404 else {
405 if (sscanf(value, "%d", g3d_tile_dimension + 1) != 1) {
406 Rast3d_fatal_error("Rast3d_init_defaults: tile dimension y "
407 "environment variable has invalid value");
408 }
409 if (g3d_tile_dimension[1] <= 0) {
410 Rast3d_fatal_error("Rast3d_init_defaults: value for tile y "
411 "environment variable out of range");
412 }
413 }
414
416
417 if (value == NULL) {
419 }
420 else {
421 if (sscanf(value, "%d", g3d_tile_dimension + 2) != 1) {
422 Rast3d_fatal_error("Rast3d_init_defaults: tile dimension z "
423 "environment variable has invalid value");
424 }
425 if (g3d_tile_dimension[2] <= 0) {
426 Rast3d_fatal_error("Rast3d_init_defaults: value for tile z "
427 "environment variable out of range");
428 }
429 }
430 }
431
432 if (g3d_error_fun == NULL) {
434
435 if (value != NULL) {
437 }
438 else {
440
441 if (value != NULL) {
443 }
444 else {
446 }
447 }
448 }
449
450 if (g3d_unit_default == NULL)
454
456 if (windowName == NULL) {
458 if (value != NULL)
459 if (*value != 0)
460 windowName = value;
461 }
462
463 if (!Rast3d_read_window(&window, windowName))
464 Rast3d_fatal_error("Rast3d_init_defaults: Error reading window");
465 Rast3d_set_window(&window);
466}
#define NULL
Definition ccmath.h:32
#define RASTER3D_COMPRESSION_ENV_VAR_NO
Name of the environmental variable specifying that compression should not be used.
Definition defaults.c:42
void Rast3d_set_cache_limit(int nBytes)
Set cache limit.
Definition defaults.c:169
void Rast3d_set_tile_dimension(int tileX, int tileY, int tileZ)
set Tile Dimension
Definition defaults.c:227
#define RASTER3D_FATAL_ERROR_ENV_VAR
Definition defaults.c:57
#define RASTER3D_TILE_Y_DEFAULT
Definition defaults.c:16
#define RASTER3D_CACHE_SIZE_ENV_VAR
Definition defaults.c:47
#define RASTER3D_ERROR_FUN_DEFAULT
Definition defaults.c:18
#define RASTER3D_PRECISION_ENV_VAR_MAX
Definition defaults.c:45
char * g3d_unit_default
Definition defaults.c:73
void Rast3d_set_error_fun(void(*fun)(const char *))
set error function
Definition defaults.c:267
#define RASTER3D_PRECISION_ENV_VAR
Definition defaults.c:44
void Rast3d_get_tile_dimension(int *tileX, int *tileY, int *tileZ)
get Tile Dimension
Definition defaults.c:252
int g3d_tile_dimension[3]
Definition defaults.c:70
int g3d_precision
Definition defaults.c:66
int g3d_cache_max
Definition defaults.c:68
int Rast3d_get_cache_limit(void)
Get cache limit.
Definition defaults.c:184
#define RASTER3D_CACHE_SIZE_MAX_ENV_VAR
Definition defaults.c:48
int g3d_cache_default
Definition defaults.c:67
#define RASTER3D_COMPRESSION_DEFAULT
Definition defaults.c:10
#define RASTER3D_TILE_DIM_Z_ENV_VAR
Definition defaults.c:55
void(* g3d_error_fun)(const char *)
Definition defaults.c:72
#define RASTER3D_CACHE_SIZE_DEFAULT
Definition defaults.c:12
int g3d_file_type
Definition defaults.c:69
#define RASTER3D_PRINT_ERROR_ENV_VAR
Definition defaults.c:58
void Rast3d_get_compression_mode(int *doCompress, int *precision)
Gets compression mode.
Definition defaults.c:125
#define RASTER3D_TILE_DIM_X_ENV_VAR
Definition defaults.c:53
int Rast3d_get_file_type(void)
get G3d file type
Definition defaults.c:212
int g3d_version
Definition defaults.c:64
#define RASTER3D_UNIT_DEFAULT
Definition defaults.c:19
#define RASTER3D_FILE_FLOAT_ENV_VAR
Definition defaults.c:50
#define RASTER3D_VERTICAL_UNIT_DEFAULT
Definition defaults.c:20
#define RASTER3D_TILE_X_DEFAULT
Definition defaults.c:15
#define RASTER3D_COMPRESSION_ENV_VAR_YES
Name of the environmental variable specifying that compression should be used.
Definition defaults.c:35
void Rast3d_set_file_type(int type)
set G3d file type
Definition defaults.c:197
#define RASTER3D_NO_DEFAULT
Definition defaults.c:8
#define RASTER3D_CACHE_SIZE_MAX_DEFAULT
Definition defaults.c:13
#define RASTER3D_TILE_Z_DEFAULT
Definition defaults.c:17
void Rast3d_init_defaults(void)
Initializes the default values described in RASTER3D Defaults. Applications have to use this function...
Definition defaults.c:282
#define RASTER3D_PRECISION_DEFAULT
Definition defaults.c:11
#define RASTER3D_DEFAULT_WINDOW3D
Definition defaults.c:60
#define RASTER3D_FILE_DOUBLE_ENV_VAR
Definition defaults.c:51
#define RASTER3D_FILE_TYPE_DEFAULT
Definition defaults.c:14
int Rast3d_get_cache_size(void)
get cache size
Definition defaults.c:156
void Rast3d_set_compression_mode(int doCompress, int precision)
set compression mode
Definition defaults.c:93
int g3d_do_compression
Definition defaults.c:65
#define RASTER3D_TILE_DIM_Y_ENV_VAR
Definition defaults.c:54
void Rast3d_set_cache_size(int nTiles)
set cache size
Definition defaults.c:141
int g3d_vertical_unit_default
Definition defaults.c:74
char * G_store(const char *)
Copy string to allocated memory.
Definition strings.c:87
void Rast3d_fatal_error_noargs(const char *) __attribute__((noreturn))
char * Rast3d_get_window_params(void)
Definition param.c:133
void Rast3d_print_error(const char *)
Prints error message.
int Rast3d_read_window(RASTER3D_Region *, const char *)
Reads window from the file specified by windowName. The name is converted by the rules defined in win...
Definition windowio.c:132
void Rast3d_set_window(RASTER3D_Region *)
Sets the default window used for every map opened later in the program. Can be used multiple times in...
void Rast3d_fatal_error(const char *,...) __attribute__((format(printf
#define U_UNDEFINED
List of units.
Definition gis.h:103
#define RASTER3D_COMPRESSION
Definition raster3d.h:14
#define RASTER3D_MAP_VERSION
Definition raster3d.h:9
#define RASTER3D_MAX_PRECISION
Definition raster3d.h:16
#define RASTER3D_NO_COMPRESSION
Definition raster3d.h:13
#define FCELL_TYPE
Definition raster.h:12
#define DCELL_TYPE
Definition raster.h:13