/*! \brief Update ranges Call whenever a new surface is added, deleted, or exag changes \return 1 */ int Nviz_update_ranges(nv_data * dc) { float zmin, zmax, exag; GS_get_longdim(&(dc->xyrange)); dc->zrange = 0.; /* Zrange is based on a minimum of Longdim */ if (GS_global_exag()) { exag = GS_global_exag(); dc->zrange = dc->xyrange / exag; } else { exag = 1.0; } GS_get_zrange_nz(&zmin, &zmax); /* actual */ zmax = zmin + (3. * dc->xyrange / exag); zmin = zmin - (2. * dc->xyrange / exag); if ((zmax - zmin) > dc->zrange) dc->zrange = zmax - zmin; return 1; }
/* after initial data has been loaded, & maybe again later */ int Nget_height_cmd(Nv_data * data, Tcl_Interp * interp, /* Current interpreter. */ int argc, char **argv) { float longdim, exag, texag, hmin, hmax; int nsurfs, i, *surf_list; char min[128]; char max[128]; char val[128]; float fmin, fmax; char *list[4]; surf_list = GS_get_surf_list(&nsurfs); if (nsurfs) { GS_get_longdim(&longdim); GS_get_zrange_nz(&hmin, &hmax); exag = 0.0; for (i = 0; i < nsurfs; i++) { if (GS_get_exag_guess(surf_list[i], &texag) > -1) if (texag) exag = texag > exag ? texag : exag; } if (exag == 0.0) exag = 1.0; fmin = hmin - (2. * longdim / exag); fmax = hmin + (3 * longdim / exag); } else { fmax = 10000.0; fmin = 0.0; } /* The one decimal place of accuracy is necessary to force Tcl to */ /* parse these values as floating point rather than integers. This */ /* avoids problems with integers which are too large to represent. */ sprintf(min, "%.1f", fmin); sprintf(max, "%.1f", fmax); sprintf(val, "%.1f", fmin + (fmax - fmin) / 2.0); list[0] = val; list[1] = min; list[2] = max; list[3] = NULL; Tcl_SetResult(interp, Tcl_Merge(3, list), TCL_DYNAMIC); return TCL_OK; }
/*! \brief Get z range \param data nviz data \param min,max z range */ int Nviz_get_zrange(nv_data * data, float *min, float *max) { GS_get_zrange_nz(min, max); return 1; }