[R] rgl: How to position a window during open3d call

Yihui Xie xieyihui at gmail.com
Thu Sep 18 06:08:36 CEST 2008


Thanks Duncan, I have also been wondering about this problem for a long time.

Regards,
Yihui
--
Yihui Xie <xieyihui at gmail.com>
Phone: +86-(0)10-82509086 Fax: +86-(0)10-82509086
Mobile: +86-15810805877
Homepage: http://www.yihui.name
School of Statistics, Room 1037, Mingde Main Building,
Renmin University of China, Beijing, 100872, China



On Thu, Sep 18, 2008 at 1:49 AM, Duncan Murdoch <murdoch at stats.uwo.ca> wrote:
> On 9/17/2008 1:13 PM, Koen Stegen wrote:
>>
>> Dear all,
>>
>> The documentation on the function open3d in the rgl package, reads:
>>
>>    open3d opens a new rgl device, and sets the parameters as requested.
>>
>> I want the new rgl device (window) to be sized and positioned in a
>> specific
>> place on my screen. So, I try to set the "windowRect" parameter as
>> follows:
>>
>>    > library("rgl")
>>    > open3d(windowRect=c(100,100,500,500))
>>    [1] 1
>>
>> Obviously you can't see where the window appears, so I'll ask for the
>> "windowRect" parameter:
>>
>>    > par3d()["windowRect"]
>>    $windowRect
>>    [1] 2300  764 2556 1020
>>
>> As you can see, the window is not positioned at (100,100) nor is the size
>> 400x400. The size is the default 256x256 and the position is where the
>> window
>> manager would put a new window if its position is unspecified.
>> [note: I have a dual screen setup so the coordinates are not bogus]
>>
>> If, however, I use par3d to set the "windowRect", the window goes where it
>> is
>> supposed to go:
>>
>>    > par3d(windowRect=c(100,100,500,500))
>>    > par3d()["windowRect"]
>>    $windowRect
>>    [1] 104 125 504 525
>>
>> The (4,25) pixels offset are the border and title bar of the window.
>>
>> For completeness sake:
>> This behavior occurs on both Windows+ATI, Linux+ATI, Linux+NVidia.
>> On Windows  is R version 2.7.2, and rgl version 0.81 (installed today).
>>
>> Does anyone know how to set the windowRect parameter during an open3d
>> call?
>
> Looks like a bug.  The open3d function is defined as
>
>> open3d
> function (..., params = get("r3dDefaults", envir = .GlobalEnv))
> {
>    rgl.open()
>    clear3d("material", defaults = params)
>    params$material <- NULL
>    if (!is.null(params$bg)) {
>        do.call("bg3d", params$bg)
>        params$bg <- NULL
>    }
>    do.call("par3d", params)
>    return(rgl.cur())
> }
> <environment: namespace:rgl>
>
>
> and you'll notice that the ... parameters are never used.  Not sure when
> this error crept in...
>
> The workaround is simply to use par3d() after open3d().
>
> Duncan Murdoch
>
>>
>>
>> Thanks in advance,
>>
>> Koen Stegen
>> Royal Meteorological Institute of Belgium
>>



More information about the R-help mailing list