GRASS Programmer's Manual  6.4.2(2012)
changetype.c
Go to the documentation of this file.
00001 
00002 #include <stdio.h>
00003 #include <stdlib.h>
00004 #include <sys/types.h>
00005 #include <unistd.h>
00006 #include <grass/G3d.h>
00007 
00008 /*---------------------------------------------------------------------------*/
00009 
00010 
00024 void G3d_changeType(void *map, const char *nameOut)
00025 {
00026     void *map2;
00027     int x, y, z, saveType;
00028     void *data, *data2;
00029     G3D_Region region;
00030     int tileSize;
00031     int tileX, tileY, tileZ, typeIntern, typeIntern2;
00032     int tileXsave, tileYsave, tileZsave, nx, ny, nz;
00033 
00034     saveType = G3d_getFileType();
00035     G3d_setFileType(G3d_fileTypeMap(map) == FCELL_TYPE ?
00036                     DCELL_TYPE : FCELL_TYPE);
00037     G3d_getTileDimension(&tileXsave, &tileYsave, &tileZsave);
00038     G3d_getTileDimensionsMap(map, &tileX, &tileY, &tileZ);
00039     G3d_setTileDimension(tileX, tileY, tileZ);
00040 
00041     G3d_getRegionStructMap(map, &region);
00042     map2 =
00043         G3d_openCellNew(nameOut, FCELL_TYPE, G3D_USE_CACHE_DEFAULT, &region);
00044 
00045     if (map2 == NULL)
00046         G3d_fatalError("G3d_changeType: error in G3d_openCellNew");
00047 
00048     G3d_setFileType(saveType);
00049     G3d_setTileDimension(tileXsave, tileYsave, tileZsave);
00050 
00051     data = G3d_allocTiles(map, 1);
00052     if (data == NULL)
00053         G3d_fatalError("G3d_changeType: error in G3d_allocTiles");
00054     data2 = G3d_allocTiles(map2, 1);
00055     if (data2 == NULL)
00056         G3d_fatalError("G3d_changeType: error in G3d_allocTiles");
00057 
00058     G3d_getNofTilesMap(map2, &nx, &ny, &nz);
00059     typeIntern = G3d_tileTypeMap(map);
00060     typeIntern2 = G3d_tileTypeMap(map2);
00061     tileSize = tileX * tileY * tileZ;
00062 
00063     for (z = 0; z < nz; z++)
00064         for (y = 0; y < ny; y++)
00065             for (x = 0; x < nx; x++) {
00066                 if (!G3d_readTile(map, G3d_tile2tileIndex(map, x, y, z), data,
00067                                   typeIntern))
00068                     G3d_fatalError("G3d_changeType: error in G3d_readTile");
00069                 G3d_copyValues(data, 0, typeIntern, data2, 0, typeIntern2,
00070                                tileSize);
00071                 if (!G3d_writeTile
00072                     (map2, G3d_tile2tileIndex(map2, x, y, z), data2,
00073                      typeIntern2))
00074                     G3d_fatalError("G3d_changeType: error in G3d_writeTile");
00075             }
00076 
00077     G3d_freeTiles(data);
00078     G3d_freeTiles(data2);
00079     if (!G3d_closeCell(map2))
00080         G3d_fatalError("G3d_changeType: error in G3d_closeCell");
00081 }
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines