~ubuntu-branches/ubuntu/vivid/grass/vivid-proposed

« back to all changes in this revision

Viewing changes to lib/g3d/retile.c

  • Committer: Package Import Robot
  • Author(s): Bas Couwenberg
  • Date: 2015-02-20 23:12:08 UTC
  • mfrom: (8.2.6 experimental)
  • Revision ID: package-import@ubuntu.com-20150220231208-1u6qvqm84v430b10
Tags: 7.0.0-1~exp1
* New upstream release.
* Update python-ctypes-ternary.patch to use if/else instead of and/or.
* Drop check4dev patch, rely on upstream check.
* Add build dependency on libpq-dev to grass-dev for libpq-fe.h.
* Drop patches applied upstream, refresh remaining patches.
* Update symlinks for images switched from jpg to png.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#include <stdio.h>
2
 
#include <stdlib.h>
3
 
#include <sys/types.h>
4
 
#include <unistd.h>
5
 
#include <grass/G3d.h>
6
 
 
7
 
/*---------------------------------------------------------------------------*/
8
 
 
9
 
static void
10
 
retileNocache(void *map, const char *nameOut, int tileX, int tileY, int tileZ)
11
 
{
12
 
    void *map2;
13
 
    int x, y, z, saveType, nx, ny, nz;
14
 
    int typeIntern;
15
 
    void *data;
16
 
    int tileXsave, tileYsave, tileZsave;
17
 
    G3D_Region region;
18
 
 
19
 
    saveType = G3d_getFileType();
20
 
    G3d_setFileType(G3d_fileTypeMap(map));
21
 
    G3d_getTileDimension(&tileXsave, &tileYsave, &tileZsave);
22
 
    G3d_setTileDimension(tileX, tileY, tileZ);
23
 
    typeIntern = G3d_tileTypeMap(map);
24
 
    G3d_getRegionStructMap(map, &region);
25
 
 
26
 
    map2 = G3d_openCellNew(nameOut, typeIntern, G3D_NO_CACHE, &region);
27
 
 
28
 
    if (map2 == NULL)
29
 
        G3d_fatalError("G3d_retile: error in G3d_openCellNew");
30
 
 
31
 
    G3d_setFileType(saveType);
32
 
    G3d_setTileDimension(tileXsave, tileYsave, tileZsave);
33
 
 
34
 
    data = G3d_allocTiles(map2, 1);
35
 
    if (data == NULL)
36
 
        G3d_fatalError("G3d_retile: error in G3d_allocTiles");
37
 
 
38
 
    G3d_getNofTilesMap(map2, &nx, &ny, &nz);
39
 
 
40
 
    for (z = 0; z < nz; z++)
41
 
        for (y = 0; y < ny; y++)
42
 
            for (x = 0; x < nx; x++) {
43
 
 
44
 
                G3d_getBlock(map, x * tileX, y * tileY, z * tileZ,
45
 
                             tileX, tileY, tileZ, data, typeIntern);
46
 
                if (!G3d_writeTile
47
 
                    (map2, G3d_tile2tileIndex(map2, x, y, z), data,
48
 
                     typeIntern))
49
 
                    G3d_fatalError
50
 
                        ("G3d_retileNocache: error in G3d_writeTile");
51
 
            }
52
 
 
53
 
    G3d_freeTiles(data);
54
 
    G3d_closeCell(map2);
55
 
}
56
 
 
57
 
/*---------------------------------------------------------------------------*/
58
 
 
59
 
 
60
 
/*!
61
 
 * \brief 
62
 
 *
63
 
 * Makes a copy of <em>map</em> with name <em>nameOut</em> which has
64
 
 * tile dimensions <em>tileX</em>, <em>tileY</em>, <em>tileZ</em>.
65
 
 * The source code can be found in <em>retile.c</em>.
66
 
 *
67
 
 *  \param map
68
 
 *  \param nameOut
69
 
 *  \param tileX
70
 
 *  \param tileY
71
 
 *  \param tileZ
72
 
 *  \return void
73
 
 */
74
 
 
75
 
void
76
 
G3d_retile(void *map, const char *nameOut, int tileX, int tileY, int tileZ)
77
 
{
78
 
    void *map2;
79
 
    double value;
80
 
    int x, y, z, saveType;
81
 
    int rows, cols, depths, typeIntern;
82
 
    int xTile, yTile, zTile;
83
 
    int xOffs, yOffs, zOffs, prev;
84
 
    int tileXsave, tileYsave, tileZsave;
85
 
    G3D_Region region;
86
 
 
87
 
    if (!G3d_tileUseCacheMap(map)) {
88
 
        retileNocache(map, nameOut, tileX, tileY, tileZ);
89
 
        return;
90
 
    }
91
 
 
92
 
    saveType = G3d_getFileType();
93
 
    G3d_setFileType(G3d_fileTypeMap(map));
94
 
    G3d_getTileDimension(&tileXsave, &tileYsave, &tileZsave);
95
 
    G3d_setTileDimension(tileX, tileY, tileZ);
96
 
 
97
 
    typeIntern = G3d_tileTypeMap(map);
98
 
    G3d_getRegionStructMap(map, &region);
99
 
 
100
 
    map2 =
101
 
        G3d_openCellNew(nameOut, typeIntern, G3D_USE_CACHE_DEFAULT, &region);
102
 
    if (map2 == NULL)
103
 
        G3d_fatalError("G3d_retile: error in G3d_openCellNew");
104
 
 
105
 
    G3d_setFileType(saveType);
106
 
    G3d_setTileDimension(tileXsave, tileYsave, tileZsave);
107
 
 
108
 
    G3d_coord2tileCoord(map2, 0, 0, 0,
109
 
                        &xTile, &yTile, &zTile, &xOffs, &yOffs, &zOffs);
110
 
 
111
 
    prev = zTile;
112
 
 
113
 
    x = 0;
114
 
    y = 0;
115
 
 
116
 
    G3d_getCoordsMap(map, &rows, &cols, &depths);
117
 
 
118
 
    for (z = 0; z < depths; z++) {
119
 
        G3d_coord2tileCoord(map2, x, y, z, &xTile, &yTile, &zTile,
120
 
                            &xOffs, &yOffs, &zOffs);
121
 
        if (zTile > prev) {
122
 
            if (!G3d_flushAllTiles(map2))
123
 
                G3d_fatalError("G3d_retile: error in G3d_flushAllTiles");
124
 
            prev++;
125
 
        }
126
 
 
127
 
        for (y = 0; y < rows; y++)
128
 
            for (x = 0; x < cols; x++) {
129
 
 
130
 
                G3d_getValueRegion(map, x, y, z, &value, typeIntern);
131
 
                if (!G3d_putValue(map2, x, y, z, &value, typeIntern))
132
 
                    G3d_fatalError("G3d_retile: error in G3d_putValue");
133
 
            }
134
 
    }
135
 
 
136
 
    if (!G3d_flushAllTiles(map2))
137
 
        G3d_fatalError("G3d_retile: error in G3d_flushAllTiles");
138
 
    if (!G3d_closeCell(map2))
139
 
        G3d_fatalError("G3d_retile: error in G3d_closeCell");
140
 
}