RGL in R Shiny not rotating on left mouse button click
Asked Answered
M

1

1

Just a short moment ago my question on how to embed an rgl in shiny was answered by Mike, but we seem to have stumbled into another issue,

This is the code example:

library(rgl)
library(car)
library(shiny)

cars$time <- cars$dist/cars$speed

ui <- fluidPage(
  hr("how do we get the plot inside this app window rather than in a popup?"),
  rglwidgetOutput("plot",  width = 800, height = 600)
)

server <- (function(input, output) {

  output$plot <- renderRglwidget ({
    rgl.open(useNULL=F)
    scatter3d(x=cars$speed, y=cars$dist, z=cars$time, surface=FALSE, ellipsoid = TRUE)
    rglwidget()

    })

  })   
shinyApp(ui = ui, server = server)

Changing rgl.open(useNULL=F) to rgl.open(useNULL=T) will stop the popup from showing, but in either case, the rgl in the shiny page does ZOOM, but doesn't rotate.

It seems that right mouse click registers and works, while left mouse click is not recognized....

> sessionInfo()
R version 3.3.3 (2017-03-06)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252    LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C                           LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] shiny_1.0.0 car_2.1-4   rgl_0.97.0 

loaded via a namespace (and not attached):
 [1] Rcpp_0.12.9        knitr_1.15.1       magrittr_1.5       splines_3.3.3      MASS_7.3-45        xtable_1.8-2       lattice_0.20-34   
 [8] R6_2.2.0           minqa_1.2.4        tools_3.3.3        nnet_7.3-12        pbkrtest_0.4-7     parallel_3.3.3     grid_3.3.3        
[15] nlme_3.1-131       mgcv_1.8-17        quantreg_5.33      MatrixModels_0.4-1 htmltools_0.3.5    yaml_2.1.14        lme4_1.1-13       
[22] digest_0.6.11      Matrix_1.2-8       nloptr_1.0.4       htmlwidgets_0.8    mime_0.5           SparseM_1.77       jsonlite_1.2      
[29] httpuv_1.3.3    
Marleenmarlen answered 22/5, 2017 at 11:47 Comment(1)
Would probably help if you added the output of sessionInfo() to the post.Xhosa
F
3

Your scene is using mouseMode "polar" (probably because scatter3d is setting it). That mode isn't currently implemented in the rglwidget code.

A workaround is to set the mouseMode to "trackball" before calling rglwidget(), e.g. in output$plot put this:

open3d(useNULL=TRUE)
scatter3d(x=cars$speed, y=cars$dist, z=cars$time, surface=FALSE, ellipsoid = TRUE)
par3d(mouseMode = "trackball")
rglwidget()

Note my edit: I've simplified the code above. To set the left mouse button, just specify one component of mouseMode.

Another edit: The latest version of rgl is 0.98.8, available on R-forge and maybe elsewhere eventually (see How do I install the latest version of rgl?), now has support for "polar" mouse handling. It's not identical to the behaviour in R, but it's close.

Fronde answered 22/5, 2017 at 20:40 Comment(4)
I found another bug user2554330. Any chance I can reach you for assitance?Marleenmarlen
You should post bug reports to the rgl bug report page. That would be listed by bug.report(package = "rgl").Fronde
I'll try. RStudio won't let me do it though and i'm not sure if it's really a bug. What I found is that for a data frame with the category column containing more than 8 factors the colors become limiting (maximum seems to be 8 by default). Turning the col into input for "groups" argument of scatter3d works fine if you run it without shiny. However, if I run it in Shiny, i get an error about the leading minor of order 1 is not positive definite in chol.default. Using the exact same data in both cases. So, seems its not possible to use scatter3d in my shiny app as is due to this.Marleenmarlen
scatter3d isn't an rgl function, so the rgl bug report page would be the wrong place to report it.Fronde

© 2022 - 2024 — McMap. All rights reserved.