1 #include <string.h>
2 #include <grass/gis.h>
3 #include <grass/glocale.h>
4 #include "raster3d_intern.h"
5
6 /*----------------------------------------------------------------------------*/
7
8 typedef struct
9 {
10
11 struct Option *type;
12 struct Option *precision;
13 struct Option *compression;
14 struct Option *dimension;
15 struct Option *cache;
16
17 } Rast3d_paramType;
18
19 /*----------------------------------------------------------------------------*/
20
21 static Rast3d_paramType *param;
22
23
24 /*!
25 * \brief
26 *
27 * Initializes a parameter
28 * structure for the subset of command line arguments which lets the user
29 * overwrite the default properties of the new file. Applications are
30 * encouraged to use this function in order to provide a uniform style. The
31 * command line arguments provided are the <em>type</em> of the cell values, the
32 * <em>precision</em>, the properties of the <em>compression</em>, and the dimension
33 * of the tiles (<em>tiledimension</em>). Every of these values defaults to the
34 * value described in RASTER3D Defaults.
35 * This function has to be used in conjunction with
36 * Rast3d_getStandard3dInputParams() (cf.{g3d:G3d.getStandard3dInputParams}).
37 *
38 * \return void
39 */
40
Rast3d_set_standard3d_input_params()41 void Rast3d_set_standard3d_input_params()
42 {
43 param = Rast3d_malloc(sizeof(Rast3d_paramType));
44
45 param->type = G_define_standard_option(G_OPT_R3_TYPE);
46
47 param->precision = G_define_standard_option(G_OPT_R3_PRECISION);
48
49 param->compression = G_define_standard_option(G_OPT_R3_COMPRESSION);
50
51 param->dimension = G_define_standard_option(G_OPT_R3_TILE_DIMENSION);
52 }
53
54 /*----------------------------------------------------------------------------*/
55
Rast3d_get_standard3d_params(int * useTypeDefault,int * type,int * useCompressionDefault,int * doCompression,int * usePrecisionDefault,int * precision,int * useDimensionDefault,int * tileX,int * tileY,int * tileZ)56 int Rast3d_get_standard3d_params(int *useTypeDefault, int *type,
57 int *useCompressionDefault, int *doCompression,
58 int *usePrecisionDefault, int *precision,
59 int *useDimensionDefault, int *tileX, int *tileY,
60 int *tileZ)
61 {
62
63 *useTypeDefault = *useCompressionDefault = 0;
64 *usePrecisionDefault = *useDimensionDefault = 0;
65
66 Rast3d_init_defaults();
67
68 if (strcmp(param->type->answer, "double") == 0)
69 *type = DCELL_TYPE;
70 else if (strcmp(param->type->answer, "float") == 0)
71 *type = FCELL_TYPE;
72 else {
73 *type = Rast3d_get_file_type();
74 *useTypeDefault = 1;
75 }
76
77 Rast3d_get_compression_mode(doCompression, precision);
78
79 if (strcmp(param->precision->answer, "default") != 0) {
80 if (strcmp(param->precision->answer, "max") == 0)
81 *precision = -1;
82 else if ((sscanf(param->precision->answer, "%d", precision) != 1) ||
83 (*precision < 0)) {
84 Rast3d_error(_("Rast3d_get_standard3d_params: precision value invalid"));
85 return 0;
86 }
87 }
88 else
89 *usePrecisionDefault = 1;
90
91
92 if (strcmp(param->compression->answer, "default") != 0) {
93 if (strcmp(param->compression->answer, "zip") == 0)
94 *doCompression = RASTER3D_COMPRESSION;
95 else
96 *doCompression = RASTER3D_NO_COMPRESSION;
97 } else {
98 *useCompressionDefault = 1;
99 }
100
101 Rast3d_get_tile_dimension(tileX, tileY, tileZ);
102 if (strcmp(param->dimension->answer, "default") != 0) {
103 if (sscanf(param->dimension->answer, "%dx%dx%d",
104 tileX, tileY, tileZ) != 3) {
105 Rast3d_error(_("Rast3d_get_standard3d_params: tile dimension value invalid"));
106 return 0;
107 }
108 }
109 else
110 *useDimensionDefault = 1;
111
112 Rast3d_free(param);
113
114 return 1;
115 }
116
117 /*----------------------------------------------------------------------------*/
118
119 static struct Option *windowParam = NULL;
120
Rast3d_set_window_params(void)121 void Rast3d_set_window_params(void)
122 {
123 windowParam = G_define_option();
124 windowParam->key = "region3";
125 windowParam->type = TYPE_STRING;
126 windowParam->required = NO;
127 windowParam->multiple = NO;
128 windowParam->answer = NULL;
129 windowParam->description = _("Window replacing the default");
130 }
131
132 /*----------------------------------------------------------------------------*/
133
Rast3d_get_window_params(void)134 char *Rast3d_get_window_params(void)
135 {
136 if (windowParam == NULL)
137 return NULL;
138 if (windowParam->answer == NULL)
139 return NULL;
140 if (strcmp(windowParam->answer, RASTER3D_WINDOW_ELEMENT) == 0)
141 return G_store(RASTER3D_WINDOW_ELEMENT);
142 return G_store(windowParam->answer);
143 }
144