[Rd] followup to graphics bug #414
Mon, 14 Feb 2000 15:53:03 +1300
> I have done a little bit of poking around at the bug that I reported
> earlier (steep slopes and lines from far outside the plot range doing
> funny things), and have tracked it down to the fact that, as noted in the
> Unix man page, XDrawLine[s] doesn't like coordinates that are outside of
> the range of (-32767,32767).
> Now the question is, what to do about this? A quick "fix" (not a fix but
> at least an acknowledgement of the problem) would check coordinates in
> GLine() and issue a warning instead of trying to draw anything if any of
> the coordinates was outside the allowed range (would one have to add a
> per-driver piece of information giving the min and max vals?).
> I wrote a prototype of some clipping code in R that I could translate to C
> and stick into src/unix/devX11.c right before every call to XDrawLine or
> XDrawLines. Before I go to that trouble, though: is there a better way to
> do this? Is there already clipping code lying around somewhere else in R?
> Is there a way to do this generically (perhaps by adding an outer clipping
> region to every device at its device-coordinate limits) that would
> centralize the code and not require it to be repeated for every
> driver/line-drawing call?
> Any thoughts? I'd really like to get this fixed ...
there is clipping code in R (see, e.g,. CScliplines in graphics.c)
whether it gets called or not depends on the canClip flag in the DevDesc
structure. If this is
false (0) then the R clipping code gets called, otherwise R gets the device
to do the clipping.
currently, the X11 device has canClip = 1 so none of the R clipping code
NOTE that getting R to do the clipping serves two purposes: (i) it clips
(wow !) (ii) it prevents silly values getting sent to the device
a quick fix then is to simply set canClip = 0 in devX11.c
this is a bit of overkill though because we really only want to do (ii)
one solution would be to get R to check for silly values (e.g., clip to devi
ce extent) regardless of the canClip flag, which wouldn't be too much work
because the clipping code is all in place.
i think that would be preferable to making each device responsible for
checking for silly values.
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !) To: firstname.lastname@example.org