GRASS Programmer's Manual  6.4.2(2012)
g3dwindow.c
Go to the documentation of this file.
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 }
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines