rglwidget (version 0.1.1402)

sceneChange: Make large change to a scene from Shiny

Description

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

Usage

sceneChange(elementId, x = scene3d(),
            delete = NULL, add = NULL, replace = NULL,
            material = FALSE, rootSubscene = FALSE,
            delfromSubscenes = NULL, skipRedraw = FALSE)
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.

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.

Details

registerSceneChange must be called in the UI component of a Shiny app to register the "sceneChange" custom message.

See Also

rglcontroller 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

Run this code
shinyUI(fluidPage(
  registerSceneChange(),
  actionButton("thebutton", "Change")
))

shinyServer(function(input, output, session) {
  observeEvent(input$thebutton, {
    session$sendCustomMessage("sceneChange",
      sceneChange("thewidget", delete = deletes, add = adds))
  })
})

Run the code above in your browser using DataCamp Workspace