open2.c 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. #include <grass/gis.h>
  2. #include <grass/G3d.h>
  3. /*----------------------------------------------------------------------------*/
  4. /*!
  5. * \brief
  6. *
  7. * Opens new g3d-file with <em>name</em> in the current mapset. Tiles
  8. * are stored in memory with <em>typeIntern</em> which must be one of FCELL_TYPE,
  9. * DCELL_TYPE, or G3D_TILE_SAME_AS_FILE. <em>cache</em> specifies the
  10. * cache-mode used and must be either G3D_NO_CACHE, G3D_USE_CACHE_DEFAULT,
  11. * G3D_USE_CACHE_X, G3D_USE_CACHE_Y, G3D_USE_CACHE_Z,
  12. * G3D_USE_CACHE_XY, G3D_USE_CACHE_XZ, G3D_USE_CACHE_YZ,
  13. * G3D_USE_CACHE_XYZ, the result of <tt>G3d_cacheSizeEncode ()</tt>
  14. * (cf.{g3d:G3d.cacheSizeEncode}), or any positive integer which
  15. * specifies the number of tiles buffered in the cache. <em>region</em> specifies
  16. * the 3d region.
  17. * The map is created using the <em>type</em> which must be of FCELL_TYPE or DCELL_TYPE.
  18. * The methods for compression can be specified LZW or RLE. The digits of the floating point mantissa
  19. * can be specified. In case of FCELL_TYPE 0-23 and 0-52 in case of DCELL_TYPE.
  20. * The number cells in X, Y and Z direction defines the size of each tile.
  21. * Returns a pointer to the cell structure ... if successful,
  22. * NULL ... otherwise.
  23. *
  24. * \param name The name of the map
  25. * \param typeIntern The internal storage type for in memory chached tiles
  26. * \param cache The type of the caching
  27. * \param region The region of the map
  28. * \param type The type of the map (FCELL_TYPE, or DCELL_TYPE)
  29. * \param doLzw Use the LZW compression algorithm
  30. * \param doRle Use the Run-Length-Encoding algroithm for compression
  31. * \param precision The precision used for the mantissa (0 - 52) or G3D_MAX_PRECISION
  32. * \param tileX The number of cells in X direction of a tile
  33. * \param tileY The number of cells in Y direction of a tile
  34. * \param tileZ The number of cells in Z direction of a tile
  35. * \return void *
  36. */
  37. void *G3d_openNewParam(const char *name, int typeIntern, int cache,
  38. G3D_Region * region, int type, int doLzw, int doRle,
  39. int precision, int tileX, int tileY, int tileZ)
  40. {
  41. void *map;
  42. int oldCompress, oldLzw, oldRle, oldPrecision, oldTileX, oldTileY,
  43. oldTileZ;
  44. int oldType;
  45. G3d_initDefaults();
  46. G3d_getCompressionMode(&oldCompress, &oldLzw, &oldRle, &oldPrecision);
  47. G3d_setCompressionMode(oldCompress, doLzw, doRle, precision);
  48. G3d_getTileDimension(&oldTileX, &oldTileY, &oldTileZ);
  49. G3d_setTileDimension(tileX, tileY, tileZ);
  50. oldType = G3d_getFileType();
  51. G3d_setFileType(type);
  52. map = G3d_openCellNew(name, typeIntern, cache, region);
  53. G3d_setCompressionMode(oldCompress, oldLzw, oldRle, oldPrecision);
  54. G3d_setTileDimension(oldTileX, oldTileY, oldTileZ);
  55. G3d_setFileType(oldType);
  56. return map;
  57. }
  58. /*----------------------------------------------------------------------------*/
  59. /*!
  60. * \brief
  61. *
  62. * Opens new g3d-file with <em>name</em> in the current mapset. This method tries to compute
  63. * optimal tile size based on the number of rows, cols and depths and the maximum allowed tile size in KB.
  64. * Tiles are stored in memory using G3D_TILE_SAME_AS_FILE method. <em>cache</em> specifies the
  65. * cache-mode used and must be either G3D_NO_CACHE, G3D_USE_CACHE_DEFAULT,
  66. * G3D_USE_CACHE_X, G3D_USE_CACHE_Y, G3D_USE_CACHE_Z,
  67. * G3D_USE_CACHE_XY, G3D_USE_CACHE_XZ, G3D_USE_CACHE_YZ,
  68. * G3D_USE_CACHE_XYZ, the result of <tt>G3d_cacheSizeEncode ()</tt>
  69. * (cf.{g3d:G3d.cacheSizeEncode}), or any positive integer which
  70. * specifies the number of tiles buffered in the cache. <em>region</em> specifies
  71. * the 3d region.
  72. * The map is created using the <em>type</em> which must be of FCELL_TYPE or DCELL_TYPE.
  73. * Returns a pointer to the cell structure ... if successful,
  74. * NULL ... otherwise.
  75. *
  76. * \param name The name of the map
  77. * \param cache The type of the caching
  78. * \param region The region of the map
  79. * \param type The type of the map (FCELL_TYPE, or DCELL_TYPE)
  80. * \param maxSize The maximum size of a tile in kilo bytes
  81. * \return void *
  82. */
  83. void *G3d_openNewOptTileSize(const char *name, int cache, G3D_Region * region, int type, int maxSize)
  84. {
  85. void *map;
  86. int oldTileX, oldTileY, oldTileZ, oldType;
  87. int tileX, tileY, tileZ;
  88. G3d_initDefaults();
  89. G3d_getTileDimension(&oldTileX, &oldTileY, &oldTileZ);
  90. G3d_computeOptimalTileDimension(region, type, &tileX, &tileY, &tileZ, maxSize);
  91. G3d_setTileDimension(tileX, tileY, tileZ);
  92. oldType = G3d_getFileType();
  93. G3d_setFileType(type);
  94. map = G3d_openCellNew(name, G3D_TILE_SAME_AS_FILE, cache, region);
  95. G3d_setTileDimension(oldTileX, oldTileY, oldTileZ);
  96. G3d_setFileType(oldType);
  97. return map;
  98. }