GRASS Programmer's Manual
6.4.2(2012)
|
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 }