Make large change to a scene from Shiny
sceneChange.RdThese functions allow Shiny apps to make relatively large changes to a scene, adding and removing objects from it.
Usage
sceneChange(elementId, x = scene3d(minimal),
delete = NULL, add = NULL, replace = NULL,
material = FALSE, rootSubscene = FALSE,
delfromSubscenes = NULL, skipRedraw = FALSE,
minimal = TRUE)
registerSceneChange()Arguments
- elementId
The id of the element holding the
rglClassinstance.- x
The new scene to use as a source for objects to add.
- delete, add, replace
Object ids to modify in the scene. The
deleteandreplaceids must be present in the old scene in the browser; theaddandreplaceids must be present inx.- material
Logical to indicate whether default material should be updated.
- rootSubscene
Logical to indicate whether root subscene should be updated.
- delfromSubscenes
A vector of subscene ids that may have been changed by deletions. By default, all subscenes in
xare used, but the objects may be included in subscenes in the browser that are different.- skipRedraw
If
TRUE, stop the scene from redrawing untilskipRedraw=FALSEis sent. IfNA, don't redraw this time, but don't change the state of theskipRedrawflag.- minimal
See
scene3d.
Details
registerSceneChange must be called in the UI component
of a Shiny app to register the "sceneChange" custom
message.
Value
registerSceneChange returns the HTML code to register the
message.
sceneChange returns a list to be used as the "sceneChange"
message to change the scene. Use
shiny::session$sendCustomMessage to send it.
See also
playwidget for a different approach to modifying
scenes that can be much faster, but may be less flexible. The
Shiny demo in this package makes use of all of these approaches.
Examples
if (FALSE) { # \dontrun{
shinyUI(fluidPage(
registerSceneChange(),
actionButton("thebutton", "Change")
))
shinyServer(function(input, output, session) {
observeEvent(input$thebutton, {
session$sendCustomMessage("sceneChange",
sceneChange("thewidget", delete = deletes, add = adds))
})
})
} # }