Re: [Rd] raster support in graphics devices

From: Paul Murrell <p.murrell_at_auckland.ac.nz>
Date: Mon, 07 Dec 2009 09:26:52 +1300

Hi

baptiste auguie wrote:
> Hi again,
>
> I found two possible bugs related to grid.raster, one with the quartz
> device and the other with pdf.
>
> In my example I was playing with the idea of using grid.raster to
> create a filling pattern for rectangles. The pdf output does not seem
> to respect the clipping (it may have nothing to do with grid.raster
> though), whilst the quartz device with pdf file output often crashes
> for more than 4 different raster objects (but not always). I'm afraid
> I couldn't pinpoint the exact circumstance of the crash with a more
> concise example.

Thanks again for the report.

I have committed a fix for the PDF clipping.

Still looking at the Quartz crashes.

Paul

> Thanks in advance for any insights,
>
> baptiste
>
> ### Start example ###
>
> library(grid)
>
> ## create a motif
> grid45 <- function(..., width=0.5, height=0.5){
> x11(width=width, height=height)
> grid.polygon(...)
> m <- grid.cap()
> dev.off()
> invisible(m)
> }
>
> .grid45 <- grid45()
> ## grid.raster(.grid45)
>
> tile.motif <- function(m, nx=10, ny=nx){
> cols <- matrix(rep(m, nx), ncol=ncol(m)*nx, byrow=F)
> matrix(rep(t(cols), ny), nrow=nrow(cols)*ny, byrow=T)
> }
>
> ## quartz()
> ## grid.raster(tile.motif(.grid45, 2, 3))
>
> patternGrob <- function(x=unit(0.5, "npc"), y=unit(0.5, "npc"),
> width=unit(1, "npc"), height=unit(1, "npc"),
> motif=matrix("white"), AR=1,
> motif.width=unit(5, "mm"),
> motif.height=AR*motif.width,
> pattern.offset=c(0, 0), # unimplemented
> default.units="npc",
> clip=TRUE, # testing purposes
> gp=gpar(fill=NA), ...)
> {
> grob(x=x, y=y, width=width, height=height,
> motif=motif, motif.width=motif.width,
> motif.height=motif.height, clip=clip, gp=gp, ..., cl="pattern")
> }
>
> widthDetails.pattern <- function(x) x$width
> heightDetails.pattern <- function(x) x$height
>
> drawDetails.pattern <- function(x, recording=TRUE){
>
> ## calculate the number of tiles
> nx <- ceiling(convertUnit(x$width, "in", value=TRUE) /
> convertUnit(x$motif.width, "in", value=TRUE)) + 1
> ny <- ceiling(convertUnit(x$height, "in", axisFrom = "y", value=TRUE) /
> convertUnit(x$motif.height, "in", axisFrom = "y",
> value=TRUE)) + 1
>
> width <- convertUnit(x$width, "in")
> height <- convertUnit(x$height, "in", axisFrom = "y")
>
> ## clip the raster
> pushViewport(viewport(x=x$x, y=x$y,
> width=x$width, height=x$height, clip=x$clip))
>
> grid.raster(tile.motif(x$motif, nx, ny), width=nx*x$motif.width,
> height=ny*x$motif.height)
> upViewport()
>
> ## overlay the rectangle
> grid.rect(x=x$x, y=x$y,
> width=x$width, height=x$height,
> just="center", gp=x$gp)
> }
>
>
> g <- patternGrob(x=0.7, width=unit(0.3, "npc"),
> height=unit(5.2, "cm"),
> clip=TRUE, motif=.grid45)
>
> ## interactive use: OK
> quartz()
> grid.newpage()
> grid.draw(g)
>
> ## png: OK
> png(file="pngClip.png")
> grid.newpage()
> grid.draw(g)
> dev.off()
>
> ## pdf: clipping does not occur
> pdf(file="pdfClip.pdf")
> grid.newpage()
> grid.draw(g)
> dev.off()
>
> ## quartz pdf: OK, but see below
> quartz(file="quartzClip.pdf", type="pdf")
> grid.newpage()
> grid.draw(g)
> dev.off()
>
> g1 <- patternGrob(x=0.2, width=unit(0.2, "npc"),
> height=unit(5.2, "cm"),
> clip=TRUE, motif=.grid45)
>
> g2 <- patternGrob(x=0.4, width=unit(0.2, "npc"),
> height=unit(5.2, "cm"),
> clip=TRUE, motif=.grid45)
>
> g3 <- patternGrob(x=0.6, width=unit(0.2, "npc"),
> height=unit(5.2, "cm"),
> clip=TRUE, motif=.grid45)
>
> g4 <- patternGrob(x=0.8, width=unit(0.2, "npc"),
> height=unit(5.2, "cm"),
> clip=TRUE, motif=.grid45)
>
> quartz(file="quartzClip2.pdf", type="pdf")
> grid.newpage()
> grid.draw(g1)
> grid.draw(g2)
> grid.draw(g3)
> grid.draw(g4)
> dev.off()
>
> *** caught segfault ***
> address 0x15dda018, cause 'memory not mapped'
>
> Traceback:
> 1: dev.off()
>
> sessionInfo()
> R version 2.11.0 Under development (unstable) (2009-11-30 r50622)
> i386-apple-darwin9.8.0
>
> locale:
> [1] en_GB.UTF-8/en_GB.UTF-8/C/C/en_GB.UTF-8/en_GB.UTF-8
>
> attached base packages:
> [1] grid stats graphics grDevices utils datasets methods
> [8] base
>
>
>
> 2009/12/2 Paul Murrell <p.murrell_at_auckland.ac.nz>:

>> Hi
>>
>>
>> baptiste auguie wrote:
>>> Very nice, thank you for this great addition to R graphics! I can't
>>> wait to see lattice and ggplot2 functions that use rasterGrob to
>>> display images. The pdf output is so much better in every way!
>>>
>>> Incidentally, I ran into a segfault with grid.cap on the quartz
>>> device, but maybe it's normal at this stage.
>>
>> This may be due to the fact that I tested the changes on Mac OS X 10.6
>> (looks like you have 10.5 ?), plus the fact that I am feeling my way a bit
>> on the Mac.  I have access to a 10.4 machine so I will try to take a look
>> there.  Thanks for the report.
>>
>> Paul
>>
>>
>>> This works fine:
>>>
>>> library(grid)
>>> x11()
>>> grid.text("test")
>>> cap <- grid.cap()
>>>
>>> This doesn't:
>>>
>>> library(grid)
>>> quartz()
>>> grid.text("test")
>>> cap <- grid.cap()
>>>
>>>  *** caught segfault ***
>>> address 0x18330001, cause 'memory not mapped'
>>>
>>> Traceback:
>>>  1: .Call(fnname, ..., PACKAGE = "grid")
>>>  2: grid.Call("L_cap")
>>>  3: grid.cap()
>>>
>>> Possible actions:
>>> 1: abort (with core dump, if enabled)
>>> 2: normal R exit
>>> 3: exit R without saving workspace
>>> 4: exit R saving workspace
>>>
>>> [R.app GUI 1.30 (5527) i386-apple-darwin9.8.0]
>>>
>>>> sessionInfo()
>>> R version 2.11.0 Under development (unstable) (2009-11-30 r50622)
>>> i386-apple-darwin9.8.0
>>>
>>> locale:
>>> [1] en_GB.UTF-8/en_GB.UTF-8/C/C/en_GB.UTF-8/en_GB.UTF-8
>>>
>>> attached base packages:
>>> [1] stats     graphics  grDevices utils     datasets  methods   base
>>>
>>> Best regards,
>>>
>>> baptiste
>>>
>>> 2009/12/1 Paul Murrell <p.murrell_at_auckland.ac.nz>:
>>>> Hi
>>>>
>>>> This is for developers of extension packages that provide extra *graphics
>>>> devices* for R.
>>>>
>>>> In the *development* version of R, support has been added to the graphics
>>>> engine for sending raster images (bitmaps) to a graphics device.  This
>>>> consists mainly of two new device functions:  dev_Raster() and dev_Cap().
>>>>
>>>> The R_GE_version constant (in GraphicsEngine.h) has been bumped up to 6
>>>> as a
>>>> marker of this change.
>>>>
>>>> This means that, at a minimum, all graphics devices should be updated to
>>>> provide dummy implementations of these new functions that just say the
>>>> feature is not yet implemented (see for example the PicTeX and XFig
>>>> devices
>>>> in the 'grDevices' package).
>>>>
>>>> A full implementation of dev_Raster() should be able to draw a raster
>>>> image
>>>> (provided as an array of 32-bit R colors) at any size, possibly
>>>> (bilinear)
>>>> interpolated (otherwise nearest-neighbour), at any orientation, and with
>>>> a
>>>> per-pixel alpha channel.  Where these are not natively supported by a
>>>> device, the graphics engine provides some routines for scaling and
>>>> rotating
>>>> raster images (see for example the X11 device).  The dev_Cap() function
>>>> should return a representation of a raster image captured from the
>>>> current
>>>> device.  This will only make sense for some devices (see for example the
>>>> Cairo device in the 'grDevices' package).
>>>>
>>>> A little more information and a couple of small examples are provided at
>>>> http://developer.r-project.org/Raster/raster-RFC.html
>>>>
>>>> Paul
>>>> --
>>>> Dr Paul Murrell
>>>> Department of Statistics
>>>> The University of Auckland
>>>> Private Bag 92019
>>>> Auckland
>>>> New Zealand
>>>> 64 9 3737599 x85392
>>>> paul_at_stat.auckland.ac.nz
>>>> http://www.stat.auckland.ac.nz/~paul/
>>>>
>>>> ______________________________________________
>>>> R-devel_at_r-project.org mailing list
>>>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>>>
>> --
>> Dr Paul Murrell
>> Department of Statistics
>> The University of Auckland
>> Private Bag 92019
>> Auckland
>> New Zealand
>> 64 9 3737599 x85392
>> paul_at_stat.auckland.ac.nz
>> http://www.stat.auckland.ac.nz/~paul/
>>

-- 
Dr Paul Murrell
Department of Statistics
The University of Auckland
Private Bag 92019
Auckland
New Zealand
64 9 3737599 x85392
paul_at_stat.auckland.ac.nz
http://www.stat.auckland.ac.nz/~paul/

______________________________________________
R-devel_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Received on Sun 06 Dec 2009 - 20:30:16 GMT

This archive was generated by hypermail 2.2.0 : Mon 07 Dec 2009 - 08:11:01 GMT