12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- #include <stdlib.h>
- #include <grass/gis.h>
- #include "vizual.h"
- int viz_calc_tvals(cmndln_info * linefax, char **a_levels, char *a_min,
- char *a_max, char *a_step, char *a_tnum, int quiet)
- {
- double interval; /*increment tvalue for intervals */
- float datarange; /*diff btwn min and max data tvalues */
- float tval; /*the threshold value being computed */
- float min, max;
- int ithresh;
- int do_interval = 0;
- int i; /*looping variable */
- /*
- ** Note that the maximum number of thresholds
- ** that are computed is 127. This is to set a cap on the size of the
- ** display file that is created */
- /* If levels are specified, only use those. Otherwise, if step is
- specified use that, otherwise use number of thresholds */
- min = Headfax.min;
- max = Headfax.max;
- if (a_min)
- sscanf(a_min, "%f", &min);
- if (a_max)
- sscanf(a_max, "%f", &max);
- datarange = max - min;
- if (datarange <= 0.0)
- G_fatal_error("Range error: %f", datarange);
- if (a_levels) {
- for (i = 0; a_levels[i]; i++) {
- if (i == MAXTHRESH) {
- G_warning("Maximum no. of thresholds is %d", MAXTHRESH);
- break;
- }
- if (1 != sscanf(a_levels[i], "%f", &(linefax->tvalue[i]))) {
- G_usage();
- exit(0);
- }
- }
- linefax->nthres = i;
- }
- else if (a_step) {
- sscanf(a_step, "%lf", &interval);
- do_interval = 1;
- }
- else if (a_tnum) { /* should already be default even if not specified */
- sscanf(a_tnum, "%d", &ithresh);
- if (ithresh < 2) {
- ithresh = 2;
- G_warning("Minimum number of thresholds is 2");
- }
- interval = datarange / (ithresh - 1);
- do_interval = 1;
- }
- else { /* should never get here */
- G_usage();
- exit(0);
- }
- if (do_interval) {
- for (i = 0, tval = min; tval <= max; i++, tval = min + (i * interval)) {
- if (i == MAXTHRESH) {
- G_warning("Maximum no. of thresholds is %d", MAXTHRESH);
- break;
- }
- linefax->tvalue[i] = tval;
- }
- linefax->nthres = i;
- }
- if (!quiet) {
- fprintf(stderr, "threshold values: ");
- for (i = 0; i < linefax->nthres; i++)
- fprintf(stderr, "%f ", linefax->tvalue[i]);
- G_message("No. of thresholds: %i", linefax->nthres + 1);
- }
- return (0);
- }
|