Plotting 3D planes shiny + rgl

shiny
rgl

#1

Hi :slight_smile: I realy didnt know where to ask questions about R and shiny, I realy hope you canhelp me.
Following is the code I wrote and it working a bit but realy not I want it to.
That “open3d()” doesnt work and therfore I opened a n-type 3d , but thats bad . Please help.
And also why is the 3d not implemented into the shiny window?

#install.packages("shiny")
#install.packages("rgl")
#install.packages("shinythemes")
#install.packages("devtools")

#######################################################################################
library(shiny)
library(rgl)
library(shinythemes)
library(devtools)
#install_github("rgl", "trestletech", "js-class")
#install_github("rgl", "trestletech", "js-class")

#######################################################################################
#                                   User Interface                                    #
#######################################################################################



ui <- fluidPage(theme = shinytheme("slate"),
  
#shinythemes::themeSelector(),  # <--- Add this somewhere in the UI
                
  headerPanel("Block Theory 0.1"),

  sidebarPanel(
  
     numericInput(inputId = "dd", label = "Dip direction:", value = "", width = "80%", min = 0, max = 360),

     numericInput(inputId = "fa", label = "Fracture angle:", value = "", width = "80%", min = 0, max = 90),
     
     numericInput(inputId = "position_x", label = "Position:", value = "", width = "40%"),
     
     numericInput(inputId = "position_y", label = "", value = "", width = "40%"),
     
     selectInput("form", "Form:",
                 c("Circle", "Square", "Ellipsoid")),
    
     actionButton(inputId = "add", label = "Add a plane"),

     actionButton(inputId = "plotbutton", label = "Update")
     
  ),

  mainPanel(  
    
    plotOutput(outputId = "plot")
  ),
  
  
verbatimTextOutput(outputId = "log_planes")


)


#######################################################################################
#                                       SERVER                                        #
#######################################################################################


server <- function(input, output) {
  
data_planes <- data.frame()
makeReactiveBinding("data_planes")  



observe({
    input$add
    isolate({
      data_planes <<- rbind(data_planes, data.frame(input$dd, input$fa , input$position_x , input$position_y))
      data_planes <<- na.omit(data_planes)
      
       })
  })  


output$plot <- renderRglwidget({
  
 # try(rgl.close())
  
  input$plotbutton
 
     isolate({

#######################################################################################     
#    Open 3d plot:
       
     x<-sample(1:100, 100)
     y<-sample(1:100, 100)
     z<-sample(1:100, 100)
     plot3d(x, y, z, type = "n",xlim = c(-10, 10), ylim = c(-10, 10), zlim = c(-30, 30))

####################################################################################### 
     
      while (i <= nrow(data_planes)) {

        phi <- data_planes[i,1] * pi / 180
        deta <- data_planes[i,2] * pi / 180
        Px <- data_planes[i,3]
        Py <- data_planes[i,4]
        Pz <- 0
        n <- c(-sin(deta)*sin(phi), sin(deta) * cos(phi), -cos(deta))
        
        T <- matrix(c(cos(deta)*cos(phi), sin(deta), cos(deta)*sin(phi), -sin(deta)*cos(phi), cos(deta), -sin(deta)*sin(phi), -sin(phi), 0 , cos(phi)), nrow=3,ncol = 3, byrow = TRUE)
        
        P_new <- T %*% c(Px,Py,Pz)
        
        P_n <- -P_new %*% n      # d = -P * n
        
# planes3d() plots equation:   a*x + b*y +  c*z + d = 0         
        
        a <- -sin(deta)*sin(phi)
        b <- sin(deta) * cos(phi)
        c <- -cos(deta)
        d <- P_n          
        
    
        cols<-rgb(runif(5),runif(5),runif(5))  #random color genarator
        
        planes3d(a, b, c , d , col = cols, alpha = 1.0)

         
        i <- i + 1       
      }
    })
  })

output$log_planes <- renderPrint({na.omit(data_planes)})



}
#######################################################################################
shinyApp(ui = ui, server = server)