123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- /**
- * \file auto_mask.c
- *
- * \brief Raster Library - Auto masking routines.
- *
- * (C) 2001-2008 by the GRASS Development Team
- *
- * This program is free software under the GNU General Public License
- * (>=v2). Read the file COPYING that comes with GRASS for details.
- *
- * \author GRASS GIS Development Team
- *
- * \date 1999-2008
- */
- #include <stdlib.h>
- #include <grass/gis.h>
- #include <grass/raster.h>
- #include <grass/glocale.h>
- #include "R.h"
- /**
- * \brief Checks for auto masking.
- *
- * On first call, opens the mask file if declared and available and
- * allocates buffer for reading mask rows.
- * On second call, returns 0 or 1.
- *
- * \return 0 if mask unset or unavailable
- * \return 1 if mask set and available and ready to use
- */
- int Rast__check_for_auto_masking(void)
- {
- struct Cell_head cellhd;
- Rast__init();
- /* if mask is switched off (-2) return -2
- if R__.auto_mask is not set (-1) or set (>=0) recheck the MASK */
- if (R__.auto_mask < -1)
- return R__.auto_mask;
- /* if(R__.mask_fd > 0) G_free (R__.mask_buf); */
- /* look for the existence of the MASK file */
- R__.auto_mask = (G_find_raster("MASK", G_mapset()) != 0);
- if (R__.auto_mask <= 0)
- return 0;
- /* check MASK projection/zone against current region */
- Rast_get_cellhd("MASK", G_mapset(), &cellhd);
- if (cellhd.zone != G_zone() || cellhd.proj != G_projection()) {
- R__.auto_mask = 0;
- return 0;
- }
- if (R__.mask_fd >= 0)
- Rast_unopen(R__.mask_fd);
- R__.mask_fd = Rast__open_old("MASK", G_mapset());
- if (R__.mask_fd < 0) {
- R__.auto_mask = 0;
- G_warning(_("Unable to open automatic MASK file"));
- return 0;
- }
- /* R__.mask_buf = Rast_allocate_c_buf(); */
- R__.auto_mask = 1;
- return 1;
- }
- /**
- * \brief Suppresses masking.
- *
- * \return
- */
- void Rast_suppress_masking(void)
- {
- Rast__init();
- if (R__.auto_mask > 0) {
- Rast_close(R__.mask_fd);
- /* G_free (R__.mask_buf); */
- R__.mask_fd = -1;
- }
- R__.auto_mask = -2;
- }
- /**
- * \brief Unsuppresses masking.
- *
- * \return
- */
- void Rast_unsuppress_masking(void)
- {
- Rast__init();
- if (R__.auto_mask < -1) {
- R__.mask_fd = -1;
- Rast__check_for_auto_masking();
- }
- }
|