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

Reply via email to