[R] Question about contour3d and writeWebGL: rgl and misc3d package

John Muschelli muschellij2 at gmail.com
Sat Nov 17 19:51:44 CET 2012


That works!  Thanks for the help, but I can't seem to figure out why this
happens with even one contour in the example below:
Disclaimer: using MNI template from FSL (
http://fsl.fmrib.ox.ac.uk/fsl/fslwiki/Atlases).

Firefox still has array initialiser too large for this one contour, but
Safari and Chrome both will render it, but again it comes out half of a
brain and the vertices are connected across the brain and not a surface.

The code is the same as with the example from AnalyzeFMRI, but a different
dimension for the array and a different level (Also attached).

template <- f.read.nifti.volume("MNI152_T1_2mm_brain.nii")

template <- template[,,,1]


contour3d(template, x=1:dim(template)[1], y=1:dim(template)[2], z=1:dim(
template)[3], level = c(1000), alpha = c(0.2), color = c("white"))

browseURL(paste("file://", writeWebGL(dir=file.path(tempdir(), "webGL"),

          width=500), sep=""))



On Fri, Nov 16, 2012 at 8:37 PM, Duncan Murdoch <murdoch.duncan at gmail.com>wrote:

> On 12-11-16 7:09 PM, John Muschelli wrote:
>
>> The contour its just half a brain and the vertices are not surfaces and
>> are filled in
>>
>
> Sounds like a bug in the browser.  When I try it in Firefox 16.0.2 it
> doesn't display properly; the error log (found via Tools | Web developer |
> Error console has several errors in it, the first of which is:
>
> Error: array initialiser too large
>
> That's clearly a limitation of the browser.  You might be able to work
> around it by plotting one layer at a time; writeWebGL will write each rgl
> object in separate arrays of data.  If the layers are separate, the browser
> might be able to handle them.  I just tried this, and it works on my
> system, using this code:
>
>
> contour3d(a, 1:64, 1:64, 1.5*(1:21), lev=c(3000),
>  alpha = c(0.2), color = c("white"))
>
>  contour3d(a, 1:64, 1:64, 1.5*(1:21), lev=c(8000),
>  alpha = c(0.5), color = c("red"), add=TRUE)
>
>  contour3d(a, 1:64, 1:64, 1.5*(1:21), lev=c(10000),
>  alpha = c(1), color = c("green"), add=TRUE)
>
> followed by the browseURL call you already had.
>
> Duncan Murdoch
>
>
>
>> This was sent from a mobile phone so please excuse any misspellings or
>> typos.
>>
>> On Nov 16, 2012 6:55 PM, "Duncan Murdoch" <murdoch.duncan at gmail.com
>> <mailto:murdoch.duncan at gmail.**com <murdoch.duncan at gmail.com>>> wrote:
>>
>>     On 12-11-16 5:59 PM, John Muschelli wrote:
>>
>>         I saw that in rgl:::writeWebGL that "Polygons will only be
>>         rendered as
>>         filled; there is no support in WebGL for wireframe or point
>>         rendering.".  I
>>         found that you can easily use contour3d to make reproducible
>>         contour web
>>         figures, such as (taken from contour3d help)
>>
>>             library(AnalyzeFMRI)
>>
>>             a <- f.read.analyze.volume(system._**_file("example.img",
>> package=
>>
>>         "AnalyzeFMRI"))
>>
>>             a <- a[,,,1]
>>
>>             contour3d(a, 1:64, 1:64, 1.5*(1:21), lev=c(3000),
>>
>>                       alpha = c(0.2), color = c("white"))
>>
>>         browseURL(paste("file://", writeWebGL(dir=file.path(__**
>> tempdir(),
>>
>>         "webGL"),
>>
>>                     width=500), sep=""))
>>
>>         But I found problems with multiple levels, such as
>>
>>             contour3d(a, 1:64, 1:64, 1.5*(1:21), lev=c(3000, 8000, 10000),
>>
>>                       alpha = c(0.2, 0.5, 1), color = c("white", "red",
>>         "green"))
>>
>>
>>         browseURL(paste("file://", writeWebGL(dir=file.path(__**
>> tempdir(),
>>
>>         "webGL"),
>>
>>                     width=500), sep=""))
>>
>>
>>         Does anyone know why this happens, or a way to fix it (maybe
>>         using separate
>>         = TRUE for contour3d)?
>>
>>
>>     Why what happens?
>>
>>     Duncan Murdoch
>>
>>
>


More information about the R-help mailing list