William wrote:
Hamish, as to r.le.setup, at the CHOOSE THE SETUP OPTION step, I choose
Setup sampling units, then Use keyboard to enter sampling unit
dimensions, then 1 for for How many different SCALES, then 1 for Random
nonoverlapping, then "y" for Do you want to sample using rectangles,
then "1.0" for Sampling unit SHAPE, then 144 for Recommended maximum
SIZE followed by "y" it's OK, then 20
sampling units. At that point, the program should draw the sampling
units in red on the monitor, but nothing is displayed. Not sure where
the communication problem is...
[...]
William L. Baker wrote:
Remaining problem just in r.le.setup. All of r.le.setup seems to work
except Setup sampling units.
When setting up sampling units, you are right the problem is likely in
calc_unit_loc in filling the uy array, which holds the y values for
displaying the units on the screen. I have looked through that code
and don't see anything obvious that is wrong, so I will have to insert
some print statements and see what is going on. Other displays of
sampling areas on screen work fine (e.g., in setup for moving window).
Seems strange, since this worked fine under GRASS 5.X and I can't see
what might have changed to affect this. Will work more on this in next
few days, I hope.
Hi, I had another look. in sample.c, mx[0], and mx[1] are not getting
passed correctly to the calc_unit_loc() fn.
this change makes it get a little further: (taken from the fn)
Index: setup.h
RCS file: /home/grass/grassrepository/grass6/raster/r.le/r.le.setup/setup.h,v
retrieving revision 2.1
diff -u -r2.1 setup.h
--- setup.h 9 Feb 2006 03:09:01 -0000 2.1
+++ setup.h 1 Oct 2006 08:10:46 -0000
@@ -78,7 +78,9 @@
void sample();
void man_unit();
void draw_grid();
-int calc_unit_loc();
+int calc_unit_loc(double, int, int, int, int, double, int, int, int,
+ double, int, int, int, double *, double *, int *,
+ double, int, int, double, double, double);
void get_rd();
void f();
int overlap();
these warnings are then given:
sample.c: In function `man_unit':
sample.c:564: warning: passing arg 14 of `calc_unit_loc' from incompatible pointer type
sample.c:564: warning: passing arg 15 of `calc_unit_loc' from incompatible pointer type
(that's ux and uy)
as it is called:
/* calculate the upper left corner of sampling
units and store them in arrays ux and uy */
if (!calc_unit_loc(radius, t, b, l, r, ratio, u_w, u_l, method, intv, num, h_d,
v_d, ux, uy, &sites, (int)(start[1]), (int)(start[0]), fmask, nx,
mx[0], mx[1]))
goto last;
and as defined in the fn:
/* CALCULATE THE COORDINATES OF THE TOP LEFT CORNER OF THE SAMPLING UNITS */
int calc_unit_loc (double radius, int top, int bot, int left, int right,
double ratio, int u_w, int u_l, int method, double intv,
int num, int h_d, int v_d, double *ux, double *uy,
int *sites, double startx, int starty, int fmask,
double nx, double x, double y)
{
Then, after the random quadrat boxes draw correctly, if you hit [y] you
still get a segfault, but again, one bug at a time.
Hamish