forked from kscience/visionforge
Module loading refactor
This commit is contained in:
parent
bc15d9241b
commit
7c9315b029
@ -10,13 +10,11 @@ import hep.dataforge.vision.gdml.toVision
|
|||||||
import hep.dataforge.vision.react.ThreeCanvasComponent
|
import hep.dataforge.vision.react.ThreeCanvasComponent
|
||||||
import hep.dataforge.vision.react.flexColumn
|
import hep.dataforge.vision.react.flexColumn
|
||||||
import hep.dataforge.vision.solid.Solid
|
import hep.dataforge.vision.solid.Solid
|
||||||
import hep.dataforge.vision.solid.SolidManager
|
import hep.dataforge.vision.solid.Solids
|
||||||
import hep.dataforge.vision.solid.specifications.Canvas3DOptions
|
import hep.dataforge.vision.solid.specifications.Canvas3DOptions
|
||||||
import hep.dataforge.vision.solid.three.ThreeCanvas
|
import hep.dataforge.vision.solid.three.ThreeCanvas
|
||||||
import kotlinx.browser.window
|
import kotlinx.browser.window
|
||||||
import kotlinx.css.*
|
import kotlinx.css.*
|
||||||
import space.kscience.gdml.Gdml
|
|
||||||
import space.kscience.gdml.decodeFromString
|
|
||||||
import org.w3c.files.FileReader
|
import org.w3c.files.FileReader
|
||||||
import org.w3c.files.get
|
import org.w3c.files.get
|
||||||
import react.RProps
|
import react.RProps
|
||||||
@ -24,6 +22,8 @@ import react.child
|
|||||||
import react.dom.h1
|
import react.dom.h1
|
||||||
import react.functionalComponent
|
import react.functionalComponent
|
||||||
import react.useState
|
import react.useState
|
||||||
|
import space.kscience.gdml.Gdml
|
||||||
|
import space.kscience.gdml.decodeFromString
|
||||||
import styled.css
|
import styled.css
|
||||||
import styled.styledDiv
|
import styled.styledDiv
|
||||||
|
|
||||||
@ -52,7 +52,7 @@ val GDMLApp = functionalComponent<GDMLAppProps>("GDMLApp") { props ->
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun loadData(name: String, data: String) {
|
fun loadData(name: String, data: String) {
|
||||||
val visionManager = props.context.plugins.fetch(SolidManager).visionManager
|
val visionManager = props.context.plugins.fetch(Solids).visionManager
|
||||||
val parsedVision = when {
|
val parsedVision = when {
|
||||||
name.endsWith(".gdml") || name.endsWith(".xml") -> {
|
name.endsWith(".gdml") || name.endsWith(".xml") -> {
|
||||||
val gdml = Gdml.decodeFromString(data)
|
val gdml = Gdml.decodeFromString(data)
|
||||||
|
@ -1,14 +1,10 @@
|
|||||||
package hep.dataforge.vision.gdml.demo
|
package hep.dataforge.vision.gdml.demo
|
||||||
|
|
||||||
import hep.dataforge.misc.DFExperimental
|
import hep.dataforge.misc.DFExperimental
|
||||||
import hep.dataforge.values.asValue
|
|
||||||
import hep.dataforge.vision.gdml.readFile
|
|
||||||
import hep.dataforge.vision.gdml.toVision
|
|
||||||
import hep.dataforge.vision.solid.SolidGroup
|
|
||||||
import hep.dataforge.vision.solid.SolidManager
|
|
||||||
import hep.dataforge.vision.solid.SolidMaterial
|
|
||||||
import hep.dataforge.vision.Vision
|
import hep.dataforge.vision.Vision
|
||||||
import hep.dataforge.vision.VisionManager
|
import hep.dataforge.vision.VisionManager
|
||||||
|
import hep.dataforge.vision.gdml.readFile
|
||||||
|
import hep.dataforge.vision.gdml.toVision
|
||||||
import space.kscience.gdml.Gdml
|
import space.kscience.gdml.Gdml
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.util.zip.GZIPInputStream
|
import java.util.zip.GZIPInputStream
|
||||||
|
@ -2,7 +2,7 @@ package hep.dataforge.vision.gdml.demo
|
|||||||
|
|
||||||
import hep.dataforge.vision.gdml.readFile
|
import hep.dataforge.vision.gdml.readFile
|
||||||
import hep.dataforge.vision.gdml.toVision
|
import hep.dataforge.vision.gdml.toVision
|
||||||
import hep.dataforge.vision.solid.SolidManager
|
import hep.dataforge.vision.solid.Solids
|
||||||
import space.kscience.gdml.Gdml
|
import space.kscience.gdml.Gdml
|
||||||
import space.kscience.gdml.LUnit
|
import space.kscience.gdml.LUnit
|
||||||
import java.io.File
|
import java.io.File
|
||||||
@ -21,7 +21,7 @@ fun main(args: Array<String>) {
|
|||||||
lUnit = LUnit.CM
|
lUnit = LUnit.CM
|
||||||
}
|
}
|
||||||
|
|
||||||
val json = SolidManager.encodeToString(vision)
|
val json = Solids.encodeToString(vision)
|
||||||
println(json)
|
println(json)
|
||||||
File(outputFileName).writeText(json)
|
File(outputFileName).writeText(json)
|
||||||
//File("D:\\Work\\Projects\\gdml.kt\\gdml-source\\cubes.json").writeText(json)
|
//File("D:\\Work\\Projects\\gdml.kt\\gdml-source\\cubes.json").writeText(json)
|
||||||
|
@ -9,7 +9,7 @@ class FileSerializationTest {
|
|||||||
@Ignore
|
@Ignore
|
||||||
fun testFileRead(){
|
fun testFileRead(){
|
||||||
val text = this::class.java.getResourceAsStream("/cubes.json").readBytes().decodeToString()
|
val text = this::class.java.getResourceAsStream("/cubes.json").readBytes().decodeToString()
|
||||||
val visual = SolidManager.decodeFromString(text) as SolidGroup
|
val visual = Solids.decodeFromString(text) as SolidGroup
|
||||||
visual["composite_001".asName()]
|
visual["composite_001".asName()]
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -10,7 +10,8 @@ import hep.dataforge.vision.html.embedVisionFragment
|
|||||||
import hep.dataforge.vision.html.fragment
|
import hep.dataforge.vision.html.fragment
|
||||||
import hep.dataforge.vision.plotly.toVision
|
import hep.dataforge.vision.plotly.toVision
|
||||||
import hep.dataforge.vision.plotly.usePlotly
|
import hep.dataforge.vision.plotly.usePlotly
|
||||||
import hep.dataforge.vision.solid.useSolids
|
import hep.dataforge.vision.plugins
|
||||||
|
import hep.dataforge.vision.solid.Solids
|
||||||
import hep.dataforge.vision.visionManager
|
import hep.dataforge.vision.visionManager
|
||||||
import kotlinx.html.div
|
import kotlinx.html.div
|
||||||
import kotlinx.html.id
|
import kotlinx.html.id
|
||||||
@ -51,7 +52,7 @@ internal class VisionForgePlayGroundForJupyter : JupyterIntegration() {
|
|||||||
resource(jsResource)
|
resource(jsResource)
|
||||||
|
|
||||||
onLoaded {
|
onLoaded {
|
||||||
VisionForge.useSolids()
|
VisionForge.plugins.fetch(Solids)
|
||||||
VisionForge.usePlotly()
|
VisionForge.usePlotly()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,6 +51,7 @@ kotlin {
|
|||||||
implementation("io.ktor:ktor-client-js:$ktorVersion")
|
implementation("io.ktor:ktor-client-js:$ktorVersion")
|
||||||
implementation("io.ktor:ktor-client-serialization:$ktorVersion")
|
implementation("io.ktor:ktor-client-serialization:$ktorVersion")
|
||||||
implementation(project(":visionforge-threejs"))
|
implementation(project(":visionforge-threejs"))
|
||||||
|
implementation(devNpm("webpack-bundle-analyzer", "4.4.0"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,7 @@ package ru.mipt.npm.muon.monitor.server
|
|||||||
import hep.dataforge.context.Context
|
import hep.dataforge.context.Context
|
||||||
import hep.dataforge.context.Global
|
import hep.dataforge.context.Global
|
||||||
import hep.dataforge.misc.DFExperimental
|
import hep.dataforge.misc.DFExperimental
|
||||||
import hep.dataforge.vision.solid.SolidManager
|
import hep.dataforge.vision.solid.Solids
|
||||||
import io.ktor.application.Application
|
import io.ktor.application.Application
|
||||||
import io.ktor.application.call
|
import io.ktor.application.call
|
||||||
import io.ktor.application.install
|
import io.ktor.application.install
|
||||||
@ -38,7 +38,7 @@ private val generator = Cos2TrackGenerator(JDKRandomGenerator(223))
|
|||||||
fun Application.module(context: Context = Global) {
|
fun Application.module(context: Context = Global) {
|
||||||
val currentDir = File(".").absoluteFile
|
val currentDir = File(".").absoluteFile
|
||||||
environment.log.info("Current directory: $currentDir")
|
environment.log.info("Current directory: $currentDir")
|
||||||
val solidManager = context.plugins.load(SolidManager)
|
val solidManager = context.plugins.load(Solids)
|
||||||
|
|
||||||
install(DefaultHeaders)
|
install(DefaultHeaders)
|
||||||
install(CallLogging)
|
install(CallLogging)
|
||||||
|
@ -6,7 +6,7 @@ import hep.dataforge.vision.gdml.toVision
|
|||||||
import hep.dataforge.vision.html.ResourceLocation
|
import hep.dataforge.vision.html.ResourceLocation
|
||||||
import hep.dataforge.vision.html.fragment
|
import hep.dataforge.vision.html.fragment
|
||||||
import hep.dataforge.vision.invoke
|
import hep.dataforge.vision.invoke
|
||||||
import hep.dataforge.vision.solid.useSolids
|
import hep.dataforge.vision.solid.Solids
|
||||||
import space.kscience.gdml.*
|
import space.kscience.gdml.*
|
||||||
|
|
||||||
internal val cubes = Gdml {
|
internal val cubes = Gdml {
|
||||||
@ -60,12 +60,11 @@ internal val cubes = Gdml {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@DFExperimental
|
@DFExperimental
|
||||||
fun main() = VisionForge {
|
fun main() = VisionForge(Solids) {
|
||||||
val content = VisionForge.fragment {
|
val content = VisionForge.fragment {
|
||||||
vision("canvas") {
|
vision("canvas") {
|
||||||
cubes.toVision()
|
cubes.toVision()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
useSolids()
|
|
||||||
makeVisionFile(content, resourceLocation = ResourceLocation.SYSTEM)
|
makeVisionFile(content, resourceLocation = ResourceLocation.SYSTEM)
|
||||||
}
|
}
|
@ -2,14 +2,14 @@ package hep.dataforge.vision.examples
|
|||||||
|
|
||||||
import com.github.ricky12awesome.jss.encodeToSchema
|
import com.github.ricky12awesome.jss.encodeToSchema
|
||||||
import hep.dataforge.vision.solid.SolidGroup
|
import hep.dataforge.vision.solid.SolidGroup
|
||||||
import hep.dataforge.vision.solid.SolidManager
|
import hep.dataforge.vision.solid.Solids
|
||||||
import kotlinx.serialization.ExperimentalSerializationApi
|
import kotlinx.serialization.ExperimentalSerializationApi
|
||||||
import kotlinx.serialization.json.Json
|
import kotlinx.serialization.json.Json
|
||||||
|
|
||||||
@ExperimentalSerializationApi
|
@ExperimentalSerializationApi
|
||||||
fun main() {
|
fun main() {
|
||||||
val schema = Json {
|
val schema = Json {
|
||||||
serializersModule = SolidManager.serializersModuleForSolids
|
serializersModule = Solids.serializersModuleForSolids
|
||||||
prettyPrintIndent = " "
|
prettyPrintIndent = " "
|
||||||
prettyPrint = true
|
prettyPrint = true
|
||||||
ignoreUnknownKeys = true
|
ignoreUnknownKeys = true
|
||||||
|
@ -5,12 +5,12 @@ import hep.dataforge.vision.VisionForge
|
|||||||
import hep.dataforge.vision.html.ResourceLocation
|
import hep.dataforge.vision.html.ResourceLocation
|
||||||
import hep.dataforge.vision.html.fragment
|
import hep.dataforge.vision.html.fragment
|
||||||
import hep.dataforge.vision.invoke
|
import hep.dataforge.vision.invoke
|
||||||
|
import hep.dataforge.vision.plotly.PlotlyPlugin
|
||||||
import hep.dataforge.vision.plotly.plotly
|
import hep.dataforge.vision.plotly.plotly
|
||||||
import hep.dataforge.vision.plotly.usePlotly
|
|
||||||
import kscience.plotly.scatter
|
import kscience.plotly.scatter
|
||||||
|
|
||||||
@DFExperimental
|
@DFExperimental
|
||||||
fun main() = VisionForge {
|
fun main() = VisionForge(PlotlyPlugin) {
|
||||||
val fragment = fragment {
|
val fragment = fragment {
|
||||||
vision {
|
vision {
|
||||||
plotly {
|
plotly {
|
||||||
@ -21,6 +21,5 @@ fun main() = VisionForge {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
usePlotly()
|
|
||||||
makeVisionFile(fragment, resourceLocation = ResourceLocation.SYSTEM)
|
makeVisionFile(fragment, resourceLocation = ResourceLocation.SYSTEM)
|
||||||
}
|
}
|
@ -11,7 +11,7 @@ import java.nio.file.Paths
|
|||||||
import kotlin.random.Random
|
import kotlin.random.Random
|
||||||
|
|
||||||
@OptIn(DFExperimental::class)
|
@OptIn(DFExperimental::class)
|
||||||
fun main() = VisionForge.invoke {
|
fun main() = VisionForge(Solids) {
|
||||||
|
|
||||||
val random = Random(112233)
|
val random = Random(112233)
|
||||||
val fragment = fragment {
|
val fragment = fragment {
|
||||||
@ -33,7 +33,6 @@ fun main() = VisionForge.invoke {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
useSolids()
|
|
||||||
makeVisionFile(
|
makeVisionFile(
|
||||||
fragment,
|
fragment,
|
||||||
Paths.get("randomSpheres.html"),
|
Paths.get("randomSpheres.html"),
|
||||||
|
@ -5,12 +5,12 @@ import hep.dataforge.vision.VisionForge
|
|||||||
import hep.dataforge.vision.html.ResourceLocation
|
import hep.dataforge.vision.html.ResourceLocation
|
||||||
import hep.dataforge.vision.html.fragment
|
import hep.dataforge.vision.html.fragment
|
||||||
import hep.dataforge.vision.invoke
|
import hep.dataforge.vision.invoke
|
||||||
|
import hep.dataforge.vision.solid.Solids
|
||||||
import hep.dataforge.vision.solid.box
|
import hep.dataforge.vision.solid.box
|
||||||
import hep.dataforge.vision.solid.solid
|
import hep.dataforge.vision.solid.solid
|
||||||
import hep.dataforge.vision.solid.useSolids
|
|
||||||
|
|
||||||
@DFExperimental
|
@DFExperimental
|
||||||
fun main() = VisionForge.invoke {
|
fun main() = VisionForge(Solids) {
|
||||||
val content = fragment {
|
val content = fragment {
|
||||||
vision("canvas") {
|
vision("canvas") {
|
||||||
solid {
|
solid {
|
||||||
@ -18,6 +18,5 @@ fun main() = VisionForge.invoke {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
useSolids()
|
|
||||||
makeVisionFile(content, resourceLocation = ResourceLocation.SYSTEM)
|
makeVisionFile(content, resourceLocation = ResourceLocation.SYSTEM)
|
||||||
}
|
}
|
@ -16,7 +16,7 @@ import kotlin.random.Random
|
|||||||
|
|
||||||
fun main() {
|
fun main() {
|
||||||
val satContext = Global.context("sat") {
|
val satContext = Global.context("sat") {
|
||||||
plugin(SolidManager)
|
plugin(Solids)
|
||||||
}
|
}
|
||||||
|
|
||||||
//Create a geometry
|
//Create a geometry
|
||||||
|
@ -44,7 +44,7 @@ public external interface CanvasControlsProps : RProps {
|
|||||||
|
|
||||||
public val CanvasControls: FunctionalComponent<CanvasControlsProps> = functionalComponent("CanvasControls") { props ->
|
public val CanvasControls: FunctionalComponent<CanvasControlsProps> = functionalComponent("CanvasControls") { props ->
|
||||||
val visionManager = useMemo(
|
val visionManager = useMemo(
|
||||||
{ props.canvas.three.solidManager.visionManager },
|
{ props.canvas.three.solids.visionManager },
|
||||||
arrayOf(props.canvas)
|
arrayOf(props.canvas)
|
||||||
)
|
)
|
||||||
flexColumn {
|
flexColumn {
|
||||||
|
@ -2,11 +2,16 @@ package hep.dataforge.vision
|
|||||||
|
|
||||||
import hep.dataforge.context.Context
|
import hep.dataforge.context.Context
|
||||||
import hep.dataforge.context.PluginManager
|
import hep.dataforge.context.PluginManager
|
||||||
|
import hep.dataforge.misc.DFExperimental
|
||||||
|
|
||||||
|
@DFExperimental
|
||||||
public expect object VisionForge
|
public expect object VisionForge
|
||||||
|
|
||||||
|
@DFExperimental
|
||||||
public expect val VisionForge.context: Context
|
public expect val VisionForge.context: Context
|
||||||
|
|
||||||
|
@DFExperimental
|
||||||
public val VisionForge.plugins: PluginManager get() = context.plugins
|
public val VisionForge.plugins: PluginManager get() = context.plugins
|
||||||
|
|
||||||
|
@DFExperimental
|
||||||
public val VisionForge.visionManager: VisionManager get() = plugins.fetch(VisionManager)
|
public val VisionForge.visionManager: VisionManager get() = plugins.fetch(VisionManager)
|
@ -20,6 +20,8 @@ import kotlin.collections.set
|
|||||||
public class VisionOutput @PublishedApi internal constructor() {
|
public class VisionOutput @PublishedApi internal constructor() {
|
||||||
public var meta: Meta = Meta.EMPTY
|
public var meta: Meta = Meta.EMPTY
|
||||||
|
|
||||||
|
//TODO expose a way to define required plugins.
|
||||||
|
|
||||||
public inline fun meta(block: MetaBuilder.() -> Unit) {
|
public inline fun meta(block: MetaBuilder.() -> Unit) {
|
||||||
this.meta = Meta(block)
|
this.meta = Meta(block)
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,12 @@
|
|||||||
package hep.dataforge.vision
|
package hep.dataforge.vision
|
||||||
|
|
||||||
import hep.dataforge.context.Context
|
import hep.dataforge.context.Context
|
||||||
|
import hep.dataforge.misc.DFExperimental
|
||||||
import kotlinx.browser.document
|
import kotlinx.browser.document
|
||||||
import kotlinx.browser.window
|
import kotlinx.browser.window
|
||||||
|
|
||||||
@JsExport
|
@JsExport
|
||||||
|
@DFExperimental
|
||||||
public actual object VisionForge{
|
public actual object VisionForge{
|
||||||
/**
|
/**
|
||||||
* Render all visions in this [window] using current global state of [VisionForge]
|
* Render all visions in this [window] using current global state of [VisionForge]
|
||||||
@ -32,6 +34,8 @@ private val visionForgeContext = Context("VisionForge"){
|
|||||||
plugin(VisionClient)
|
plugin(VisionClient)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@DFExperimental
|
||||||
public actual val VisionForge.context: Context get() = visionForgeContext
|
public actual val VisionForge.context: Context get() = visionForgeContext
|
||||||
|
|
||||||
|
@DFExperimental
|
||||||
public val VisionForge.visionClient: VisionClient get() = plugins.fetch(VisionClient)
|
public val VisionForge.visionClient: VisionClient get() = plugins.fetch(VisionClient)
|
@ -1,13 +1,22 @@
|
|||||||
package hep.dataforge.vision
|
package hep.dataforge.vision
|
||||||
|
|
||||||
import hep.dataforge.context.Context
|
import hep.dataforge.context.Context
|
||||||
|
import hep.dataforge.context.PluginFactory
|
||||||
import hep.dataforge.misc.DFExperimental
|
import hep.dataforge.misc.DFExperimental
|
||||||
|
|
||||||
|
@DFExperimental
|
||||||
public actual object VisionForge
|
public actual object VisionForge
|
||||||
|
|
||||||
|
@DFExperimental
|
||||||
private val visionForgeContext = Context("VisionForge")
|
private val visionForgeContext = Context("VisionForge")
|
||||||
|
|
||||||
|
@DFExperimental
|
||||||
public actual val VisionForge.context: Context get() = visionForgeContext
|
public actual val VisionForge.context: Context get() = visionForgeContext
|
||||||
|
|
||||||
@DFExperimental
|
@DFExperimental
|
||||||
public operator fun VisionForge.invoke(block: VisionForge.() -> Unit): Unit = run(block)
|
public operator fun VisionForge.invoke(vararg modules: PluginFactory<out VisionPlugin>, block: VisionForge.() -> Unit): Unit {
|
||||||
|
modules.forEach {
|
||||||
|
plugins.fetch(it)
|
||||||
|
}
|
||||||
|
run(block)
|
||||||
|
}
|
@ -1,7 +1,7 @@
|
|||||||
package hep.dataforge.vision.gdml
|
package hep.dataforge.vision.gdml
|
||||||
|
|
||||||
import hep.dataforge.names.toName
|
import hep.dataforge.names.toName
|
||||||
import hep.dataforge.vision.solid.SolidManager
|
import hep.dataforge.vision.solid.Solids
|
||||||
import org.junit.jupiter.api.Test
|
import org.junit.jupiter.api.Test
|
||||||
import space.kscience.gdml.Gdml
|
import space.kscience.gdml.Gdml
|
||||||
import space.kscience.gdml.decodeFromStream
|
import space.kscience.gdml.decodeFromStream
|
||||||
@ -23,7 +23,7 @@ class TestConvertor {
|
|||||||
val gdml = Gdml.decodeFromStream(stream)
|
val gdml = Gdml.decodeFromStream(stream)
|
||||||
val vision = gdml.toVision()
|
val vision = gdml.toVision()
|
||||||
assertNotNull(vision.getPrototype("solids.box".toName()))
|
assertNotNull(vision.getPrototype("solids.box".toName()))
|
||||||
println(SolidManager.encodeToString(vision))
|
println(Solids.encodeToString(vision))
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -4,8 +4,8 @@ import hep.dataforge.context.Context
|
|||||||
import hep.dataforge.names.toName
|
import hep.dataforge.names.toName
|
||||||
import hep.dataforge.vision.Vision
|
import hep.dataforge.vision.Vision
|
||||||
import hep.dataforge.vision.solid.SolidGroup
|
import hep.dataforge.vision.solid.SolidGroup
|
||||||
import hep.dataforge.vision.solid.SolidManager
|
|
||||||
import hep.dataforge.vision.solid.SolidReference
|
import hep.dataforge.vision.solid.SolidReference
|
||||||
|
import hep.dataforge.vision.solid.Solids
|
||||||
import hep.dataforge.vision.visionManager
|
import hep.dataforge.vision.visionManager
|
||||||
import org.junit.jupiter.api.Test
|
import org.junit.jupiter.api.Test
|
||||||
import org.junit.jupiter.api.assertDoesNotThrow
|
import org.junit.jupiter.api.assertDoesNotThrow
|
||||||
@ -13,7 +13,7 @@ import space.kscience.gdml.*
|
|||||||
import kotlin.test.assertNotNull
|
import kotlin.test.assertNotNull
|
||||||
|
|
||||||
internal val testContext = Context("TEST"){
|
internal val testContext = Context("TEST"){
|
||||||
plugin(SolidManager)
|
plugin(Solids)
|
||||||
}
|
}
|
||||||
|
|
||||||
class TestCubes {
|
class TestCubes {
|
||||||
@ -77,7 +77,7 @@ class TestCubes {
|
|||||||
@Test
|
@Test
|
||||||
fun testCubesReSerialize(){
|
fun testCubesReSerialize(){
|
||||||
val vision = cubes.toVision()
|
val vision = cubes.toVision()
|
||||||
val serialized = SolidManager.encodeToString(vision)
|
val serialized = Solids.encodeToString(vision)
|
||||||
val deserialized = testContext.visionManager.decodeFromString(serialized) as SolidGroup
|
val deserialized = testContext.visionManager.decodeFromString(serialized) as SolidGroup
|
||||||
assertNotNull(deserialized.getPrototype("solids.smallBox".toName()))
|
assertNotNull(deserialized.getPrototype("solids.smallBox".toName()))
|
||||||
//println(testContext.visionManager.encodeToString(deserialized))
|
//println(testContext.visionManager.encodeToString(deserialized))
|
||||||
|
@ -28,7 +28,7 @@ public interface PrototypeHolder {
|
|||||||
@Serializable
|
@Serializable
|
||||||
@SerialName("group.solid")
|
@SerialName("group.solid")
|
||||||
public class SolidGroup(
|
public class SolidGroup(
|
||||||
@Serializable(Prototypes.Companion::class) @SerialName("prototypes") internal var prototypes: MutableVisionGroup? = null,
|
@Serializable(PrototypeSerializer::class) internal var prototypes: MutableVisionGroup? = null,
|
||||||
) : VisionGroupBase(), Solid, PrototypeHolder {
|
) : VisionGroupBase(), Solid, PrototypeHolder {
|
||||||
|
|
||||||
init {
|
init {
|
||||||
@ -98,17 +98,9 @@ public fun VisionContainerBuilder<Vision>.group(name: String, action: SolidGroup
|
|||||||
/**
|
/**
|
||||||
* A special class which works as a holder for prototypes
|
* A special class which works as a holder for prototypes
|
||||||
*/
|
*/
|
||||||
@Serializable(Prototypes.Companion::class)
|
|
||||||
internal class Prototypes(
|
internal class Prototypes(
|
||||||
children: Map<NameToken, Vision> = emptyMap(),
|
children: MutableMap<NameToken, Vision> = hashMapOf(),
|
||||||
) : VisionGroupBase(children as? MutableMap<NameToken, Vision> ?: children.toMutableMap()), PrototypeHolder {
|
) : VisionGroupBase(children), PrototypeHolder {
|
||||||
|
|
||||||
init {
|
|
||||||
//used during deserialization only
|
|
||||||
children.values.forEach {
|
|
||||||
it.parent = parent
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getProperty(
|
override fun getProperty(
|
||||||
name: Name,
|
name: Name,
|
||||||
@ -118,34 +110,34 @@ internal class Prototypes(
|
|||||||
): MetaItem? = null
|
): MetaItem? = null
|
||||||
|
|
||||||
override fun setProperty(name: Name, item: MetaItem?, notify: Boolean) {
|
override fun setProperty(name: Name, item: MetaItem?, notify: Boolean) {
|
||||||
error("Can't ser property of prototypes container")
|
error("Can't set property of a prototypes container")
|
||||||
}
|
}
|
||||||
|
|
||||||
override val descriptor: NodeDescriptor? = null
|
override val descriptor: NodeDescriptor? = null
|
||||||
|
|
||||||
companion object : KSerializer<MutableVisionGroup> {
|
|
||||||
|
|
||||||
private val mapSerializer: KSerializer<Map<NameToken, Vision>> =
|
|
||||||
MapSerializer(
|
|
||||||
NameToken.serializer(),
|
|
||||||
PolymorphicSerializer(Vision::class)
|
|
||||||
)
|
|
||||||
|
|
||||||
override val descriptor: SerialDescriptor get() = mapSerializer.descriptor
|
|
||||||
|
|
||||||
override fun deserialize(decoder: Decoder): MutableVisionGroup {
|
|
||||||
val map = mapSerializer.deserialize(decoder)
|
|
||||||
return Prototypes(map)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun serialize(encoder: Encoder, value: MutableVisionGroup) {
|
|
||||||
mapSerializer.serialize(encoder, value.children)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun prototypes(builder: VisionContainerBuilder<Solid>.() -> Unit) {
|
override fun prototypes(builder: VisionContainerBuilder<Solid>.() -> Unit) {
|
||||||
apply(builder)
|
apply(builder)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getPrototype(name: Name): Solid? = get(name) as? Solid
|
override fun getPrototype(name: Name): Solid? = get(name) as? Solid
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal class PrototypeSerializer : KSerializer<MutableVisionGroup> {
|
||||||
|
|
||||||
|
private val mapSerializer: KSerializer<Map<NameToken, Vision>> =
|
||||||
|
MapSerializer(
|
||||||
|
NameToken.serializer(),
|
||||||
|
PolymorphicSerializer(Vision::class)
|
||||||
|
)
|
||||||
|
|
||||||
|
override val descriptor: SerialDescriptor get() = mapSerializer.descriptor
|
||||||
|
|
||||||
|
override fun deserialize(decoder: Decoder): MutableVisionGroup {
|
||||||
|
val map = mapSerializer.deserialize(decoder)
|
||||||
|
return Prototypes(map.toMutableMap())
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun serialize(encoder: Encoder, value: MutableVisionGroup) {
|
||||||
|
mapSerializer.serialize(encoder, value.children)
|
||||||
|
}
|
||||||
|
}
|
@ -16,16 +16,16 @@ import kotlinx.serialization.modules.subclass
|
|||||||
import kotlin.reflect.KClass
|
import kotlin.reflect.KClass
|
||||||
|
|
||||||
|
|
||||||
public class SolidManager(meta: Meta) : VisionPlugin(meta) {
|
public class Solids(meta: Meta) : VisionPlugin(meta) {
|
||||||
|
|
||||||
override val tag: PluginTag get() = Companion.tag
|
override val tag: PluginTag get() = Companion.tag
|
||||||
|
|
||||||
override val visionSerializersModule: SerializersModule get() = serializersModuleForSolids
|
override val visionSerializersModule: SerializersModule get() = serializersModuleForSolids
|
||||||
|
|
||||||
public companion object : PluginFactory<SolidManager> {
|
public companion object : PluginFactory<Solids> {
|
||||||
override val tag: PluginTag = PluginTag(name = "vision.solid", group = PluginTag.DATAFORGE_GROUP)
|
override val tag: PluginTag = PluginTag(name = "vision.solid", group = PluginTag.DATAFORGE_GROUP)
|
||||||
override val type: KClass<out SolidManager> = SolidManager::class
|
override val type: KClass<out Solids> = Solids::class
|
||||||
override fun invoke(meta: Meta, context: Context): SolidManager = SolidManager(meta)
|
override fun invoke(meta: Meta, context: Context): Solids = Solids(meta)
|
||||||
|
|
||||||
private fun PolymorphicModuleBuilder<Solid>.solids() {
|
private fun PolymorphicModuleBuilder<Solid>.solids() {
|
||||||
subclass(SolidGroup.serializer())
|
subclass(SolidGroup.serializer())
|
||||||
@ -69,8 +69,3 @@ public class SolidManager(meta: Meta) : VisionPlugin(meta) {
|
|||||||
@VisionBuilder
|
@VisionBuilder
|
||||||
@DFExperimental
|
@DFExperimental
|
||||||
public inline fun VisionOutput.solid(block: SolidGroup.() -> Unit): SolidGroup = SolidGroup().apply(block)
|
public inline fun VisionOutput.solid(block: SolidGroup.() -> Unit): SolidGroup = SolidGroup().apply(block)
|
||||||
|
|
||||||
@DFExperimental
|
|
||||||
public fun VisionForge.useSolids(): Unit{
|
|
||||||
plugins.fetch(SolidManager)
|
|
||||||
}
|
|
@ -28,7 +28,7 @@ class ConvexTest {
|
|||||||
|
|
||||||
val convex = group.children.values.first() as Convex
|
val convex = group.children.values.first() as Convex
|
||||||
|
|
||||||
val json = SolidManager.jsonForSolids.encodeToJsonElement(Convex.serializer(), convex)
|
val json = Solids.jsonForSolids.encodeToJsonElement(Convex.serializer(), convex)
|
||||||
val meta = json.toMetaItem().node!!
|
val meta = json.toMetaItem().node!!
|
||||||
|
|
||||||
val points = meta.getIndexed("points").values.map { (it as MetaItemNode<*>).node.point3D() }
|
val points = meta.getIndexed("points").values.map { (it as MetaItemNode<*>).node.point3D() }
|
||||||
|
@ -30,9 +30,9 @@ class SerializationTest {
|
|||||||
x = 100
|
x = 100
|
||||||
z = -100
|
z = -100
|
||||||
}
|
}
|
||||||
val string = SolidManager.encodeToString(cube)
|
val string = Solids.encodeToString(cube)
|
||||||
println(string)
|
println(string)
|
||||||
val newCube = SolidManager.decodeFromString(string)
|
val newCube = Solids.decodeFromString(string)
|
||||||
assertEquals(cube.meta, newCube.meta)
|
assertEquals(cube.meta, newCube.meta)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -51,9 +51,9 @@ class SerializationTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
val string = SolidManager.encodeToString(group)
|
val string = Solids.encodeToString(group)
|
||||||
println(string)
|
println(string)
|
||||||
val reconstructed = SolidManager.decodeFromString(string) as SolidGroup
|
val reconstructed = Solids.decodeFromString(string) as SolidGroup
|
||||||
assertEquals(group["cube"]?.meta, reconstructed["cube"]?.meta)
|
assertEquals(group["cube"]?.meta, reconstructed["cube"]?.meta)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ class SolidPluginTest {
|
|||||||
@DFExperimental
|
@DFExperimental
|
||||||
@Test
|
@Test
|
||||||
fun testPluginConverter() {
|
fun testPluginConverter() {
|
||||||
val visionManager = Global.plugins.fetch(SolidManager).visionManager
|
val visionManager = Global.plugins.fetch(Solids).visionManager
|
||||||
val meta = visionManager.encodeToMeta(vision)
|
val meta = visionManager.encodeToMeta(vision)
|
||||||
|
|
||||||
val reconstructed = visionManager.decodeFromMeta(meta) as SolidGroup
|
val reconstructed = visionManager.decodeFromMeta(meta) as SolidGroup
|
||||||
|
@ -3,7 +3,6 @@ package hep.dataforge.vision.solid
|
|||||||
import hep.dataforge.vision.get
|
import hep.dataforge.vision.get
|
||||||
import hep.dataforge.vision.style
|
import hep.dataforge.vision.style
|
||||||
import hep.dataforge.vision.useStyle
|
import hep.dataforge.vision.useStyle
|
||||||
import kotlinx.serialization.json.Json
|
|
||||||
import kotlinx.serialization.json.encodeToJsonElement
|
import kotlinx.serialization.json.encodeToJsonElement
|
||||||
import kotlin.test.Test
|
import kotlin.test.Test
|
||||||
import kotlin.test.assertEquals
|
import kotlin.test.assertEquals
|
||||||
@ -27,8 +26,8 @@ class SolidReferenceTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testReferenceSerialization(){
|
fun testReferenceSerialization(){
|
||||||
val serialized = SolidManager.jsonForSolids.encodeToJsonElement(groupWithReference)
|
val serialized = Solids.jsonForSolids.encodeToJsonElement(groupWithReference)
|
||||||
val deserialized = SolidManager.jsonForSolids.decodeFromJsonElement(SolidGroup.serializer(), serialized)
|
val deserialized = Solids.jsonForSolids.decodeFromJsonElement(SolidGroup.serializer(), serialized)
|
||||||
assertEquals("blue", (deserialized["test"] as Solid).color.string)
|
assertEquals("blue", (deserialized["test"] as Solid).color.string)
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -10,7 +10,7 @@ import kotlin.test.assertEquals
|
|||||||
import kotlin.test.assertTrue
|
import kotlin.test.assertTrue
|
||||||
|
|
||||||
class VisionUpdateTest {
|
class VisionUpdateTest {
|
||||||
val solidManager = Global.plugins.fetch(SolidManager)
|
val solidManager = Global.plugins.fetch(Solids)
|
||||||
val visionManager = solidManager.visionManager
|
val visionManager = solidManager.visionManager
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -6,7 +6,6 @@ import hep.dataforge.names.*
|
|||||||
import hep.dataforge.vision.*
|
import hep.dataforge.vision.*
|
||||||
import hep.dataforge.vision.solid.*
|
import hep.dataforge.vision.solid.*
|
||||||
import hep.dataforge.vision.solid.specifications.Canvas3DOptions
|
import hep.dataforge.vision.solid.specifications.Canvas3DOptions
|
||||||
import hep.dataforge.vision.solid.three.set
|
|
||||||
import info.laht.threekt.core.Object3D
|
import info.laht.threekt.core.Object3D
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.flow.launchIn
|
import kotlinx.coroutines.flow.launchIn
|
||||||
@ -20,7 +19,7 @@ import info.laht.threekt.objects.Group as ThreeGroup
|
|||||||
public class ThreePlugin : AbstractPlugin(), ElementVisionRenderer {
|
public class ThreePlugin : AbstractPlugin(), ElementVisionRenderer {
|
||||||
override val tag: PluginTag get() = Companion.tag
|
override val tag: PluginTag get() = Companion.tag
|
||||||
|
|
||||||
public val solidManager: SolidManager by require(SolidManager)
|
public val solids: Solids by require(Solids)
|
||||||
|
|
||||||
private val objectFactories = HashMap<KClass<out Solid>, ThreeFactory<*>>()
|
private val objectFactories = HashMap<KClass<out Solid>, ThreeFactory<*>>()
|
||||||
private val compositeFactory = ThreeCompositeFactory(this)
|
private val compositeFactory = ThreeCompositeFactory(this)
|
||||||
|
Loading…
Reference in New Issue
Block a user