123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- #include "Gwater.h"
- #include <unistd.h>
- #include <grass/glocale.h>
- int close_array_seg(void)
- {
- struct Colors colors;
- int incr, max, red, green, blue, rd, gr, bl, flag;
- int c, r, map_fd;
- CELL *cellrow, value;
- CELL *theseg;
- RAMSEG thesegseg;
- cellrow = Rast_allocate_c_buf();
- if (seg_flag || bas_flag || haf_flag) {
- if (seg_flag) {
- theseg = bas;
- thesegseg = bas_seg;
- }
- else if (bas_flag) {
- theseg = bas;
- thesegseg = bas_seg;
- }
- else {
- theseg = haf;
- thesegseg = haf_seg;
- }
- max = n_basins;
- G_debug(1, "%d basins created", max);
- Rast_init_colors(&colors);
- if (max > 0)
- Rast_make_random_colors(&colors, 1, max);
- else {
- G_warning(_("No basins were created. Verify threshold and region settings."));
- Rast_make_random_colors(&colors, 1, 2);
- }
- if (max < 1000 && max > 0) {
- Rast_set_c_color((CELL) 0, 0, 0, 0, &colors);
- r = 1;
- incr = 0;
- while (incr >= 0) {
- G_percent(r, max, 2);
- for (gr = 130 + incr; gr <= 255; gr += 20) {
- for (rd = 90 + incr; rd <= 255; rd += 30) {
- for (bl = 90 + incr; bl <= 255; bl += 40) {
- flag = 1;
- while (flag) {
- Rast_get_c_color(&r, &red, &green, &blue, &colors);
- /* if existing rule is too dark then append a new
- rule to override it */
- if ((blue * .11 + red * .30 + green * .59) <
- 100) {
- Rast_set_c_color(r, rd, gr, bl, &colors);
- flag = 0;
- }
- if (++r > max) {
- gr = rd = bl = 300;
- flag = 0;
- incr = -1;
- }
- }
- }
- }
- }
- if (incr >= 0) {
- incr += 15;
- if (incr > 120)
- incr = 7;
- }
- }
- G_percent(r - 1, max, 3); /* finish it */
- }
- else
- G_debug(1,
- "Too many subbasins to reasonably check for color brightness");
- /* using the existing stack of while/for/for/for/while loops ... */
- }
- /* stream segments map */
- if (seg_flag) {
- map_fd = Rast_open_c_new(seg_name);
- for (r = 0; r < nrows; r++) {
- Rast_set_c_null_value(cellrow, ncols); /* reset row to all NULL */
- for (c = 0; c < ncols; c++) {
- value = FLAG_GET(swale, r, c);
- if (value)
- cellrow[c] = bas[SEG_INDEX(bas_seg, r, c)];
- }
- Rast_put_row(map_fd, cellrow, CELL_TYPE);
- }
- Rast_close(map_fd);
- Rast_write_colors(seg_name, this_mapset, &colors);
- }
- /* basins map */
- if (bas_flag) {
- map_fd = Rast_open_c_new(bas_name);
- for (r = 0; r < nrows; r++) {
- for (c = 0; c < ncols; c++) {
- cellrow[c] = bas[SEG_INDEX(bas_seg, r, c)];
- if (cellrow[c] == 0)
- Rast_set_c_null_value(cellrow + c, 1);
- }
- Rast_put_row(map_fd, cellrow, CELL_TYPE);
- }
- Rast_close(map_fd);
- Rast_write_colors(bas_name, this_mapset, &colors);
- }
- /* half_basins map */
- if (haf_flag) {
- map_fd = Rast_open_c_new(haf_name);
- for (r = 0; r < nrows; r++) {
- for (c = 0; c < ncols; c++) {
- cellrow[c] = haf[SEG_INDEX(haf_seg, r, c)];
- if (cellrow[c] == 0)
- Rast_set_c_null_value(cellrow + c, 1);
- }
- Rast_put_row(map_fd, cellrow, CELL_TYPE);
- }
- Rast_close(map_fd);
- Rast_write_colors(haf_name, this_mapset, &colors);
- }
- if (seg_flag || bas_flag || haf_flag)
- Rast_free_colors(&colors);
- G_free(haf);
- G_free(bas);
- G_free(cellrow);
- if (arm_flag)
- fclose(fp);
- close_maps();
- return 0;
- }
|