RGL in R Shiny not rotating on left mouse button click

久未见 提交于 2020-01-05 05:24:07

问题


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    

回答1:


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.



来源:https://stackoverflow.com/questions/44112083/rgl-in-r-shiny-not-rotating-on-left-mouse-button-click

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!