Hi, Thanks for the fix. I hope the quartz bugs are not related to a bad configuration on my side (I don't have access to another Mac to test it).
I was quite happy with this proof-of-concept of filling patterns for rectangles, and I was wondering if perhaps you had considered adding a similar tiling option to grid.raster (at the C level)? Best regards, baptiste 2009/12/6 Paul Murrell <p.murr...@auckland.ac.nz>: > 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.murr...@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.murr...@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 >>>>> p...@stat.auckland.ac.nz >>>>> http://www.stat.auckland.ac.nz/~paul/ >>>>> >>>>> ______________________________________________ >>>>> R-devel@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 >>> p...@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 > p...@stat.auckland.ac.nz > http://www.stat.auckland.ac.nz/~paul/ > ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel