GRASS Programmer's Manual
6.4.2(2012)
|
00001 #include <stdio.h> 00002 #include <grass/gis.h> 00003 #include <grass/G3d.h> 00004 #include "G3d_intern.h" 00005 00006 /*---------------------------------------------------------------------------*/ 00007 00008 G3D_Region g3d_window; 00009 00010 /*---------------------------------------------------------------------------*/ 00011 00012 00024 void G3d_setWindowMap(G3D_Map * map, G3D_Region * window) 00025 { 00026 G3d_regionCopy(&(map->window), window); 00027 G3d_adjustRegion(&(map->window)); 00028 } 00029 00030 /*---------------------------------------------------------------------------*/ 00031 00032 00043 void G3d_setWindow(G3D_Region * window) 00044 { 00045 G3d_regionCopy(&g3d_window, window); 00046 G3d_adjustRegion(&g3d_window); 00047 } 00048 00049 /*---------------------------------------------------------------------------*/ 00050 00051 00061 void G3d_getWindow(G3D_Region * window) 00062 { 00063 G3d_regionCopy(window, &g3d_window); 00064 } 00065 00066 /*---------------------------------------------------------------------------*/ 00067 00068 G3D_Region *G3d_windowPtr() 00069 { 00070 return &g3d_window; 00071 } 00072 00073 /*---------------------------------------------------------------------------*/ 00074 00075 00092 void G3d_getValue(G3D_Map * map, int x, int y, int z, void *value, int type) 00093 { 00094 double north, east, top; 00095 00096 /*AV*/ 00097 /* BEGIN OF ORIGINAL CODE */ 00098 /* 00099 int row, col, depth; 00100 */ 00101 /* END OF ORIGINAL CODE */ 00102 /*AV*/ 00103 /* BEGIN OF MY CODE */ 00104 double row, col, depth; 00105 00106 /* END OF MY CODE */ 00107 00108 /* convert (x, y, z) into (north, east, top) */ 00109 00110 /*AV*/ 00111 /* BEGIN OF ORIGINAL CODE */ 00112 /* 00113 north = ((double) map->window.rows - y - 0.5) / (double) map->window.rows * 00114 (map->window.north - map->window.south) + map->window.south; 00115 */ 00116 /* END OF ORIGINAL CODE */ 00117 /*AV*/ 00118 /* BEGIN OF MY CODE */ 00119 north = ((double)y + 0.5) / (double)map->window.rows * 00120 (map->window.north - map->window.south) + map->window.south; 00121 /* END OF MY CODE */ 00122 00123 east = ((double)x + 0.5) / (double)map->window.cols * 00124 (map->window.east - map->window.west) + map->window.west; 00125 top = ((double)z + 0.5) / (double)map->window.depths * 00126 (map->window.top - map->window.bottom) + map->window.bottom; 00127 00128 /* convert (north, east, top) into (row, col, depth) */ 00129 00130 /*AV*/ 00131 /* BEGIN OF ORIGINAL CODE */ 00132 /* 00133 row = map->region.rows - 00134 (north - map->region.south) / (map->region.north - map->region.south) * 00135 map->region.rows; 00136 */ 00137 /* END OF ORIGINAL CODE */ 00138 /*AV*/ 00139 /* BEGIN OF MY CODE */ 00140 row = 00141 (north - map->region.south) / (map->region.north - 00142 map->region.south) * map->region.rows; 00143 /* END OF MY CODE */ 00144 00145 col = (east - map->region.west) / (map->region.east - map->region.west) * 00146 map->region.cols; 00147 depth = 00148 (top - map->region.bottom) / (map->region.top - 00149 map->region.bottom) * 00150 map->region.depths; 00151 00152 /* if (row, col, depth) outside window return NULL value */ 00153 if ((row < 0) || (row >= map->region.rows) || 00154 (col < 0) || (col >= map->region.cols) || 00155 (depth < 0) || (depth >= map->region.depths)) { 00156 G3d_setNullValue(value, 1, type); 00157 return; 00158 } 00159 00160 /* get value */ 00161 map->resampleFun(map, (int)row, (int)col, (int)depth, value, type); 00162 00163 } 00164 00165 /*---------------------------------------------------------------------------*/ 00166 00167 00181 float G3d_getFloat(G3D_Map * map, int x, int y, int z) 00182 { 00183 float value; 00184 00185 G3d_getValue(map, x, y, z, &value, FCELL_TYPE); 00186 return value; 00187 } 00188 00189 /*---------------------------------------------------------------------------*/ 00190 00191 00205 double G3d_getDouble(G3D_Map * map, int x, int y, int z) 00206 { 00207 double value; 00208 00209 G3d_getValue(map, x, y, z, &value, DCELL_TYPE); 00210 return value; 00211 }