[GRASS5] current position

Huidae Cho grass4u at gmail.com
Thu Feb 16 14:12:40 EST 2006


The reason why I asked this is that descriptions in lib/raster/protocol.c
confused me and I thought this can be also misleading others.

On Thu, Feb 16, 2006 at 03:53:35PM +0000, Glynn Clements wrote:
> 
> Huidae Cho wrote:
> 
> > According to lib/raster/protocol.c ALL R_*_(abs|rel) function should update
> > cur_x and cur_y in the display driver, but I found some routines don't:
> > 
> > R_polydots_*:	updated to the last point
> > R_polyline_*:	updated to the last point
> > R_polygon_*:	NOT updated => should be the first/last point
> > R_box_*:	NOT updated => should be x2, y2
> > 
> > If R_polygon_*/R_box_* update the current position, is there any side effect?
> 
> Who knows? I don't, and I've probably spent more time than anyone else
> analysing the detailed behaviour of the display architecture over the
> last few years.
> 
> To be safe, every "complete" sequence of operations should be assumed
> to leave the current position undefined; R_move_abs() is cheap.
> 
> By "complete", I mean anything other than R_{cont,move}_{abs,rel},
> which are designed to be used as "steps" in a sequence, where you have
> to rely upon the current position being updated correctly.
> 
> The behaviour which you've listed above basically makes sense. You
> might reasonably split polydots/polyline operations into sub-stages
> (given a series of points/lines, you should be able to draw them all
> in one go or in stages, with the same result regardless), but the same
> isn't true for a filled polygon or box.
> 
> Certainly, nothing is relying upon the polygon/box functions updating
> the current point; if it was, we would have noticed by now.
> 
> IOW, it's fine if the box/polygon cases stay the same, it's fine if
> they are changed to use the last point, it's even fine if they are
> changed to set the current position to some random point.
> 
> OTOH, it's not fine for a client to rely upon any specific behaviour
> regarding what those functions do to the current point.

I got your point.  Then the following sequence should isolate the box from line
(10, 10) -- (20, 20).

R_move_abs(10, 10);
R_cont_abs(10, 10);
R_box_abs(WHATEVER);
R_cont_abs(20, 20);

Then, we have to correct comments above R_(box|polygon)_* definitions.  If I'm
right, would you please?

Thank you.
Huidae Cho

> 
> -- 
> Glynn Clements <glynn at gclements.plus.com>




More information about the grass-dev mailing list