Fix plotly update problem
This commit is contained in:
parent
6dc1b9f349
commit
ec238edbd1
112
demo/playground/src/jvmMain/kotlin/dynamicPlotlyVision.kt
Normal file
112
demo/playground/src/jvmMain/kotlin/dynamicPlotlyVision.kt
Normal file
@ -0,0 +1,112 @@
|
||||
package space.kscience.visionforge.examples
|
||||
|
||||
import io.ktor.server.cio.CIO
|
||||
import io.ktor.server.engine.embeddedServer
|
||||
import io.ktor.server.http.content.staticResources
|
||||
import io.ktor.server.routing.routing
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.isActive
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.html.a
|
||||
import kotlinx.html.h1
|
||||
import space.kscience.dataforge.context.Global
|
||||
import space.kscience.dataforge.context.request
|
||||
import space.kscience.plotly.layout
|
||||
import space.kscience.plotly.models.Trace
|
||||
import space.kscience.plotly.models.invoke
|
||||
import space.kscience.visionforge.html.VisionPage
|
||||
import space.kscience.visionforge.plotly.PlotlyPlugin
|
||||
import space.kscience.visionforge.plotly.plotly
|
||||
import space.kscience.visionforge.server.close
|
||||
import space.kscience.visionforge.server.openInBrowser
|
||||
import space.kscience.visionforge.server.visionPage
|
||||
import kotlin.math.PI
|
||||
import kotlin.math.cos
|
||||
import kotlin.math.sin
|
||||
|
||||
fun main() {
|
||||
val plotlyPlugin = Global.request(PlotlyPlugin)
|
||||
val visionManager = plotlyPlugin.visionManager
|
||||
|
||||
val server = embeddedServer(CIO) {
|
||||
|
||||
routing {
|
||||
staticResources("/", null)
|
||||
}
|
||||
|
||||
|
||||
val freq = 1.0 / 1000
|
||||
val oscillationFreq = 1.0 / 10000
|
||||
|
||||
val x = (0..100).map { it.toDouble() / 100.0 }
|
||||
val sinY = x.map { sin(2.0 * PI * it) }
|
||||
val cosY = x.map { cos(2.0 * PI * it) }
|
||||
|
||||
val sinTrace = Trace(x, sinY) { name = "sin" }
|
||||
val cosTrace = Trace(x, cosY) { name = "cos" }
|
||||
|
||||
visionPage(
|
||||
visionManager,
|
||||
VisionPage.scriptHeader("js/visionforge-playground.js"),
|
||||
) {
|
||||
|
||||
h1 { +"This is the plot page" }
|
||||
a("/other") { +"The other page" }
|
||||
vision {
|
||||
|
||||
|
||||
plotly {
|
||||
traces(sinTrace, cosTrace)
|
||||
layout {
|
||||
title = "Other dynamic plot"
|
||||
xaxis.title = "x axis name"
|
||||
yaxis.title = "y axis name"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
visionPage(
|
||||
visionManager,
|
||||
VisionPage.scriptHeader("js/visionforge-playground.js"),
|
||||
route = "other"
|
||||
) {
|
||||
h1 { +"This is the other plot page" }
|
||||
a("/") { +"Back to the main page" }
|
||||
vision {
|
||||
plotly {
|
||||
traces(sinTrace)
|
||||
layout {
|
||||
title = "Dynamic plot"
|
||||
xaxis.title = "x axis name"
|
||||
yaxis.title = "y axis name"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//Start pushing updates
|
||||
launch {
|
||||
var time: Long = 0
|
||||
|
||||
while (isActive) {
|
||||
delay(10)
|
||||
time += 10
|
||||
sinTrace.y.numbers = x.map { sin(2.0 * PI * (it + time.toDouble() * freq)) }
|
||||
val cosAmp = cos(2.0 * PI * oscillationFreq * time)
|
||||
cosTrace.y.numbers = x.map { cos(2.0 * PI * (it + time.toDouble() * freq)) * cosAmp }
|
||||
}
|
||||
}
|
||||
|
||||
}.start(false)
|
||||
|
||||
|
||||
server.openInBrowser()
|
||||
|
||||
while (readlnOrNull() != "exit") {
|
||||
|
||||
}
|
||||
|
||||
server.close()
|
||||
}
|
Loading…
Reference in New Issue
Block a user