问题
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