These functions allow Shiny apps to make relatively large changes to a scene, adding and removing objects from it.

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 rglClass instance.

x

The new scene to use as a source for objects to add.

delete, add, replace

Object ids to modify in the scene. The delete and replace ids must be present in the old scene in the browser; the add and replace ids must be present in x.

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 x are used, but the objects may be included in subscenes in the browser that are different.

skipRedraw

If TRUE, stop the scene from redrawing until skipRedraw=FALSE is sent. If NA, don't redraw this time, but don't change the state of the skipRedraw flag.

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.

Author

Duncan Murdoch

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))
  })
})
} # }