GRASS Programmer's Manual  6.4.2(2012)
g3dparam.c
Go to the documentation of this file.
00001 #include <string.h>
00002 #include <grass/gis.h>
00003 #include <grass/glocale.h>
00004 #include "G3d_intern.h"
00005 
00006 /*----------------------------------------------------------------------------*/
00007 
00008 typedef struct
00009 {
00010 
00011     struct Option *type;
00012     struct Option *precision;
00013     struct Option *compression;
00014     struct Option *dimension;
00015     struct Option *cache;
00016 
00017 } G3d_paramType;
00018 
00019 /*----------------------------------------------------------------------------*/
00020 
00021 static G3d_paramType *param;
00022 
00023 
00041 void G3d_setStandard3dInputParams()
00042 {
00043     param = G3d_malloc(sizeof(G3d_paramType));
00044 
00045     param->type = G_define_option();
00046     param->type->key = "type";
00047     param->type->type = TYPE_STRING;
00048     param->type->required = NO;
00049     param->type->multiple = NO;
00050     param->type->answer = "default";
00051     param->type->options = "default,double,float";
00052     param->type->description = _("Data type used in the output file");
00053 
00054     param->precision = G_define_option();
00055     param->precision->key = "precision";
00056     param->precision->type = TYPE_STRING;
00057     param->precision->required = NO;
00058     param->precision->multiple = NO;
00059     param->precision->answer = "default";
00060     param->precision->description =
00061         _("Precision used in the output file (default, max, or 0 to 52)");
00062 
00063     param->compression = G_define_option();
00064     param->compression->key = "compression";
00065     param->compression->type = TYPE_STRING;
00066     param->compression->required = NO;
00067     param->compression->multiple = NO;
00068     param->compression->answer = "default";
00069     param->compression->options = "default,rle,none";
00070     param->compression->description =
00071         _("The compression method used in the output file");
00072 
00073     param->dimension = G_define_option();
00074     param->dimension->key = "tiledimension";
00075     param->dimension->type = TYPE_STRING;
00076     param->dimension->required = NO;
00077     param->dimension->multiple = NO;
00078     param->dimension->key_desc = "XxYxZ";
00079     param->dimension->answer = "default";
00080     param->dimension->description =
00081         _("The dimensions of the tiles used in the output file");
00082 }
00083 
00084 /*----------------------------------------------------------------------------*/
00085 
00086 int G3d_getStandard3dParams(int *useTypeDefault, int *type,
00087                             int *useLzwDefault, int *doLzw,
00088                             int *useRleDefault, int *doRle,
00089                             int *usePrecisionDefault, int *precision,
00090                             int *useDimensionDefault, int *tileX, int *tileY,
00091                             int *tileZ)
00092 {
00093     int doCompress;
00094 
00095     *useTypeDefault = *useLzwDefault = *useRleDefault = 0;
00096     *usePrecisionDefault = *useDimensionDefault = 0;
00097 
00098     G3d_initDefaults();
00099 
00100     if (strcmp(param->type->answer, "double") == 0)
00101         *type = DCELL_TYPE;
00102     else if (strcmp(param->type->answer, "float") == 0)
00103         *type = FCELL_TYPE;
00104     else {
00105         *type = G3d_getFileType();
00106         *useTypeDefault = 1;
00107     }
00108 
00109     G3d_getCompressionMode(&doCompress, doLzw, doRle, precision);
00110 
00111     if (strcmp(param->precision->answer, "default") != 0) {
00112         if (strcmp(param->precision->answer, "max") == 0)
00113             *precision = -1;
00114         else if ((sscanf(param->precision->answer, "%d", precision) != 1) ||
00115                  (*precision < 0)) {
00116             G3d_error(_("G3d_getStandard3dParams: precision value invalid"));
00117             return 0;
00118         }
00119     }
00120     else
00121         *usePrecisionDefault = 1;
00122 
00123 
00124     if (strcmp(param->compression->answer, "default") != 0) {
00125         if (strcmp(param->compression->answer, "rle") == 0) {
00126             *doRle = G3D_USE_RLE;
00127             *doLzw = G3D_NO_LZW;
00128         }
00129         else if (strcmp(param->compression->answer, "lzw") == 0) {
00130             *doRle = G3D_NO_RLE;
00131             *doLzw = G3D_USE_LZW;
00132         }
00133         else if (strcmp(param->compression->answer, "rle+lzw") == 0) {
00134             *doRle = G3D_USE_RLE;
00135             *doLzw = G3D_USE_LZW;
00136         }
00137         else {
00138             *doRle = G3D_NO_RLE;
00139             *doLzw = G3D_NO_LZW;
00140         }
00141     }
00142     else
00143         *useLzwDefault = *useRleDefault = 1;
00144 
00145     G3d_getTileDimension(tileX, tileY, tileZ);
00146     if (strcmp(param->dimension->answer, "default") != 0) {
00147         if (sscanf(param->dimension->answer, "%dx%dx%d",
00148                    tileX, tileY, tileZ) != 3) {
00149             G3d_error(_("G3d_getStandard3dParams: tile dimension value invalid"));
00150             return 0;
00151         }
00152     }
00153     else
00154         *useDimensionDefault = 1;
00155 
00156     G3d_free(param);
00157 
00158     return 1;
00159 }
00160 
00161 /*----------------------------------------------------------------------------*/
00162 
00163 static struct Option *windowParam = NULL;
00164 
00165 void G3d_setWindowParams(void)
00166 {
00167     windowParam = G_define_option();
00168     windowParam->key = "region3";
00169     windowParam->type = TYPE_STRING;
00170     windowParam->required = NO;
00171     windowParam->multiple = NO;
00172     windowParam->answer = NULL;
00173     windowParam->description = _("Window replacing the default");
00174 }
00175 
00176 /*----------------------------------------------------------------------------*/
00177 
00178 char *G3d_getWindowParams(void)
00179 {
00180     if (windowParam == NULL)
00181         return NULL;
00182     if (windowParam->answer == NULL)
00183         return NULL;
00184     if (strcmp(windowParam->answer, G3D_WINDOW_ELEMENT) == 0)
00185         return G_store(G3D_WINDOW_ELEMENT);
00186     return G_store(windowParam->answer);
00187 }
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines