Module loading refactor

This commit is contained in:
Alexander Nozik 2021-02-27 21:40:58 +03:00
parent bc15d9241b
commit 7c9315b029
28 changed files with 90 additions and 91 deletions

View File

@ -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)

View File

@ -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

View File

@ -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)

View File

@ -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()]
} }
} }

View File

@ -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()
} }

View File

@ -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"))
} }
} }
} }

View File

@ -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)

View File

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

View File

@ -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

View File

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

View File

@ -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"),

View File

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

View File

@ -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

View File

@ -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 {

View File

@ -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)

View File

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

View File

@ -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)

View File

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

View File

@ -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

View File

@ -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))

View File

@ -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,12 +110,19 @@ 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> { override fun prototypes(builder: VisionContainerBuilder<Solid>.() -> Unit) {
apply(builder)
}
override fun getPrototype(name: Name): Solid? = get(name) as? Solid
}
internal class PrototypeSerializer : KSerializer<MutableVisionGroup> {
private val mapSerializer: KSerializer<Map<NameToken, Vision>> = private val mapSerializer: KSerializer<Map<NameToken, Vision>> =
MapSerializer( MapSerializer(
@ -135,17 +134,10 @@ internal class Prototypes(
override fun deserialize(decoder: Decoder): MutableVisionGroup { override fun deserialize(decoder: Decoder): MutableVisionGroup {
val map = mapSerializer.deserialize(decoder) val map = mapSerializer.deserialize(decoder)
return Prototypes(map) return Prototypes(map.toMutableMap())
} }
override fun serialize(encoder: Encoder, value: MutableVisionGroup) { override fun serialize(encoder: Encoder, value: MutableVisionGroup) {
mapSerializer.serialize(encoder, value.children) mapSerializer.serialize(encoder, value.children)
} }
}
override fun prototypes(builder: VisionContainerBuilder<Solid>.() -> Unit) {
apply(builder)
}
override fun getPrototype(name: Name): Solid? = get(name) as? Solid
} }

View File

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

View File

@ -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() }

View File

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

View File

@ -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

View File

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

View File

@ -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

View File

@ -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)