forked from kscience/visionforge
Move to new kotlin and plugin
This commit is contained in:
parent
439b02c03e
commit
75a988b546
@ -1,13 +1,10 @@
|
|||||||
import scientifik.useSerialization
|
import scientifik.fx
|
||||||
|
import scientifik.serialization
|
||||||
|
|
||||||
val dataforgeVersion by extra("0.1.5-dev-6")
|
val dataforgeVersion by extra("0.1.5")
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
val kotlinVersion = "1.3.61"
|
val toolsVersion = "0.4.0"
|
||||||
val toolsVersion = "0.3.2"
|
|
||||||
|
|
||||||
kotlin("jvm") version kotlinVersion apply false
|
|
||||||
id("kotlin-dce-js") version kotlinVersion apply false
|
|
||||||
id("scientifik.mpp") version toolsVersion apply false
|
id("scientifik.mpp") version toolsVersion apply false
|
||||||
id("scientifik.jvm") version toolsVersion apply false
|
id("scientifik.jvm") version toolsVersion apply false
|
||||||
id("scientifik.js") version toolsVersion apply false
|
id("scientifik.js") version toolsVersion apply false
|
||||||
@ -26,16 +23,17 @@ allprojects {
|
|||||||
}
|
}
|
||||||
|
|
||||||
group = "hep.dataforge"
|
group = "hep.dataforge"
|
||||||
version = "0.1.1-dev"
|
version = "0.1.2-dev"
|
||||||
}
|
|
||||||
|
|
||||||
subprojects{
|
|
||||||
this.useSerialization()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val githubProject by extra("dataforge-vis")
|
val githubProject by extra("dataforge-vis")
|
||||||
val bintrayRepo by extra("dataforge")
|
val bintrayRepo by extra("dataforge")
|
||||||
|
val fxVersion by extra("14")
|
||||||
|
|
||||||
subprojects {
|
subprojects {
|
||||||
apply(plugin = "scientifik.publish")
|
apply(plugin = "scientifik.publish")
|
||||||
|
serialization()
|
||||||
|
afterEvaluate {
|
||||||
|
fx(scientifik.FXModule.CONTROLS, version = fxVersion)
|
||||||
|
}
|
||||||
}
|
}
|
@ -1,21 +1,16 @@
|
|||||||
import org.openjfx.gradle.JavaFXOptions
|
import scientifik.serialization
|
||||||
import scientifik.useSerialization
|
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
id("scientifik.mpp")
|
id("scientifik.mpp")
|
||||||
id("org.openjfx.javafxplugin")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val dataforgeVersion: String by rootProject.extra
|
val dataforgeVersion: String by rootProject.extra
|
||||||
//val kvisionVersion: String by rootProject.extra("2.0.0-M1")
|
//val kvisionVersion: String by rootProject.extra("2.0.0-M1")
|
||||||
|
|
||||||
useSerialization()
|
serialization()
|
||||||
|
val fxVersion: String by rootProject.extra
|
||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
jvm{
|
|
||||||
withJava()
|
|
||||||
}
|
|
||||||
|
|
||||||
sourceSets {
|
sourceSets {
|
||||||
commonMain{
|
commonMain{
|
||||||
dependencies {
|
dependencies {
|
||||||
@ -24,7 +19,7 @@ kotlin {
|
|||||||
}
|
}
|
||||||
jvmMain{
|
jvmMain{
|
||||||
dependencies {
|
dependencies {
|
||||||
api("no.tornado:tornadofx:1.7.19")
|
api("no.tornado:tornadofx:1.7.20")
|
||||||
//api("no.tornado:tornadofx-controlsfx:0.1.1")
|
//api("no.tornado:tornadofx-controlsfx:0.1.1")
|
||||||
api("de.jensd:fontawesomefx-fontawesome:4.7.0-11"){
|
api("de.jensd:fontawesomefx-fontawesome:4.7.0-11"){
|
||||||
exclude(group = "org.openjfx")
|
exclude(group = "org.openjfx")
|
||||||
@ -38,13 +33,9 @@ kotlin {
|
|||||||
dependencies {
|
dependencies {
|
||||||
api("hep.dataforge:dataforge-output-html:$dataforgeVersion")
|
api("hep.dataforge:dataforge-output-html:$dataforgeVersion")
|
||||||
//api(npm("bootstrap","4.4.1"))
|
//api(npm("bootstrap","4.4.1"))
|
||||||
implementation(npm("jsoneditor"))
|
implementation(npm("jsoneditor","8.6.1"))
|
||||||
implementation(npm("file-saver"))
|
implementation(npm("file-saver"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
configure<JavaFXOptions> {
|
|
||||||
modules("javafx.controls")
|
|
||||||
}
|
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
package hep.dataforge.vis.common
|
package hep.dataforge.vis.common
|
||||||
|
|
||||||
import hep.dataforge.meta.*
|
import hep.dataforge.meta.*
|
||||||
|
import hep.dataforge.meta.scheme.setProperty
|
||||||
import hep.dataforge.names.Name
|
import hep.dataforge.names.Name
|
||||||
import hep.dataforge.names.asName
|
import hep.dataforge.names.asName
|
||||||
|
import hep.dataforge.values.Value
|
||||||
import hep.dataforge.vis.common.VisualObject.Companion.STYLE_KEY
|
import hep.dataforge.vis.common.VisualObject.Companion.STYLE_KEY
|
||||||
import kotlinx.serialization.Transient
|
import kotlinx.serialization.Transient
|
||||||
|
|
||||||
@ -22,7 +24,7 @@ abstract class AbstractVisualObject : VisualObject {
|
|||||||
get() = properties?.get(STYLE_KEY).stringList
|
get() = properties?.get(STYLE_KEY).stringList
|
||||||
set(value) {
|
set(value) {
|
||||||
//val allStyles = (field + value).distinct()
|
//val allStyles = (field + value).distinct()
|
||||||
setProperty(STYLE_KEY, value)
|
setProperty(STYLE_KEY, Value.of(value))
|
||||||
updateStyles(value)
|
updateStyles(value)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
package hep.dataforge.vis.common
|
package hep.dataforge.vis.common
|
||||||
|
|
||||||
import hep.dataforge.meta.*
|
import hep.dataforge.meta.Meta
|
||||||
|
import hep.dataforge.meta.MetaItem
|
||||||
|
import hep.dataforge.meta.get
|
||||||
|
import hep.dataforge.meta.number
|
||||||
import hep.dataforge.values.ValueType
|
import hep.dataforge.values.ValueType
|
||||||
import hep.dataforge.values.int
|
import hep.dataforge.values.int
|
||||||
import kotlin.math.max
|
import kotlin.math.max
|
||||||
@ -234,7 +237,7 @@ object Colors {
|
|||||||
/**
|
/**
|
||||||
* Convert three bytes representing color to Meta
|
* Convert three bytes representing color to Meta
|
||||||
*/
|
*/
|
||||||
fun rgbToMeta(r: UByte, g: UByte, b: UByte): Meta = buildMeta {
|
fun rgbToMeta(r: UByte, g: UByte, b: UByte): Meta = Meta {
|
||||||
RED_KEY put r.toInt()
|
RED_KEY put r.toInt()
|
||||||
GREEN_KEY put g.toInt()
|
GREEN_KEY put g.toInt()
|
||||||
BLUE_KEY put b.toInt()
|
BLUE_KEY put b.toInt()
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
package hep.dataforge.vis.common
|
package hep.dataforge.vis.common
|
||||||
|
|
||||||
import hep.dataforge.io.serialization.MetaSerializer
|
|
||||||
import hep.dataforge.meta.*
|
import hep.dataforge.meta.*
|
||||||
import hep.dataforge.names.Name
|
import hep.dataforge.names.Name
|
||||||
import hep.dataforge.names.asName
|
import hep.dataforge.names.asName
|
||||||
@ -46,7 +45,7 @@ class StyleSheet() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
operator fun set(key: String, builder: MetaBuilder.() -> Unit) {
|
operator fun set(key: String, builder: MetaBuilder.() -> Unit) {
|
||||||
val newStyle = get(key)?.let { buildMeta(it, builder) } ?: buildMeta(builder)
|
val newStyle = get(key)?.edit(builder) ?: Meta(builder)
|
||||||
set(key, newStyle.seal())
|
set(key, newStyle.seal())
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -58,7 +57,7 @@ class StyleSheet() {
|
|||||||
TODO("Not yet implemented")
|
TODO("Not yet implemented")
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun serialize(encoder: Encoder, obj: StyleSheet) {
|
override fun serialize(encoder: Encoder, value: StyleSheet) {
|
||||||
TODO("Not yet implemented")
|
TODO("Not yet implemented")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
package hep.dataforge.vis.common
|
package hep.dataforge.vis.common
|
||||||
|
|
||||||
import hep.dataforge.meta.*
|
import hep.dataforge.meta.Laminate
|
||||||
|
import hep.dataforge.meta.Meta
|
||||||
|
import hep.dataforge.meta.MetaItem
|
||||||
|
import hep.dataforge.meta.scheme.Configurable
|
||||||
import hep.dataforge.names.Name
|
import hep.dataforge.names.Name
|
||||||
import hep.dataforge.names.asName
|
import hep.dataforge.names.asName
|
||||||
import hep.dataforge.names.toName
|
import hep.dataforge.names.toName
|
||||||
@ -28,17 +31,12 @@ interface VisualObject : Configurable {
|
|||||||
*/
|
*/
|
||||||
fun allProperties(): Laminate
|
fun allProperties(): Laminate
|
||||||
|
|
||||||
/**
|
|
||||||
* Set property for this object
|
|
||||||
*/
|
|
||||||
fun setProperty(name: Name, value: Any?) {
|
|
||||||
config[name] = value
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get property including or excluding parent properties
|
* Get property including or excluding parent properties
|
||||||
*/
|
*/
|
||||||
fun getProperty(name: Name, inherit: Boolean = true): MetaItem<*>?
|
fun getProperty(name: Name, inherit: Boolean): MetaItem<*>?
|
||||||
|
|
||||||
|
override fun getProperty(name: Name): MetaItem<*>? = getProperty(name, true)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Trigger property invalidation event. If [name] is empty, notify that the whole object is changed
|
* Trigger property invalidation event. If [name] is empty, notify that the whole object is changed
|
||||||
@ -77,11 +75,6 @@ interface VisualObject : Configurable {
|
|||||||
*/
|
*/
|
||||||
fun VisualObject.getProperty(key: String, inherit: Boolean = true): MetaItem<*>? = getProperty(key.toName(), inherit)
|
fun VisualObject.getProperty(key: String, inherit: Boolean = true): MetaItem<*>? = getProperty(key.toName(), inherit)
|
||||||
|
|
||||||
/**
|
|
||||||
* Set [VisualObject] property using key as a String
|
|
||||||
*/
|
|
||||||
fun VisualObject.setProperty(key: String, value: Any?) = setProperty(key.toName(), value)
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add style name to the list of styles to be resolved later. The style with given name does not necessary exist at the moment.
|
* Add style name to the list of styles to be resolved later. The style with given name does not necessary exist at the moment.
|
||||||
*/
|
*/
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
package hep.dataforge.vis.common
|
package hep.dataforge.vis.common
|
||||||
|
|
||||||
import hep.dataforge.descriptors.ValueDescriptor
|
|
||||||
import hep.dataforge.meta.*
|
import hep.dataforge.meta.*
|
||||||
|
import hep.dataforge.meta.descriptors.ValueDescriptor
|
||||||
|
import hep.dataforge.meta.scheme.getProperty
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Extension property to access the "widget" key of [ValueDescriptor]
|
* Extension property to access the "widget" key of [ValueDescriptor]
|
||||||
@ -9,14 +10,14 @@ import hep.dataforge.meta.*
|
|||||||
var ValueDescriptor.widget: Meta
|
var ValueDescriptor.widget: Meta
|
||||||
get() = this.config["widget"].node?: EmptyMeta
|
get() = this.config["widget"].node?: EmptyMeta
|
||||||
set(value) {
|
set(value) {
|
||||||
this.config["widget"] = value
|
config["widget"] = value
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Extension property to access the "widget.type" key of [ValueDescriptor]
|
* Extension property to access the "widget.type" key of [ValueDescriptor]
|
||||||
*/
|
*/
|
||||||
var ValueDescriptor.widgetType: String?
|
var ValueDescriptor.widgetType: String?
|
||||||
get() = this["widget.type"].string
|
get() = getProperty("widget.type").string
|
||||||
set(value) {
|
set(value) {
|
||||||
this.config["widget.type"] = value
|
config["widget.type"] = value
|
||||||
}
|
}
|
@ -1,9 +1,9 @@
|
|||||||
package hep.dataforge.vis.js.editor
|
package hep.dataforge.vis.js.editor
|
||||||
|
|
||||||
import hep.dataforge.io.toJson
|
|
||||||
import hep.dataforge.js.jsObject
|
import hep.dataforge.js.jsObject
|
||||||
import hep.dataforge.meta.DynamicMeta
|
import hep.dataforge.meta.DynamicMeta
|
||||||
import hep.dataforge.meta.Meta
|
import hep.dataforge.meta.Meta
|
||||||
|
import hep.dataforge.meta.toJson
|
||||||
import hep.dataforge.meta.update
|
import hep.dataforge.meta.update
|
||||||
import hep.dataforge.names.Name
|
import hep.dataforge.names.Name
|
||||||
import hep.dataforge.names.isEmpty
|
import hep.dataforge.names.isEmpty
|
||||||
@ -12,8 +12,6 @@ import hep.dataforge.vis.common.findStyle
|
|||||||
import kotlinx.html.dom.append
|
import kotlinx.html.dom.append
|
||||||
import kotlinx.html.js.*
|
import kotlinx.html.js.*
|
||||||
import org.w3c.dom.Element
|
import org.w3c.dom.Element
|
||||||
import kotlin.collections.forEach
|
|
||||||
import kotlin.collections.isNotEmpty
|
|
||||||
import kotlin.collections.set
|
import kotlin.collections.set
|
||||||
import kotlin.dom.clear
|
import kotlin.dom.clear
|
||||||
|
|
||||||
|
@ -8,8 +8,8 @@ package hep.dataforge.vis.fx.editor
|
|||||||
import de.jensd.fx.glyphs.fontawesome.FontAwesomeIcon
|
import de.jensd.fx.glyphs.fontawesome.FontAwesomeIcon
|
||||||
import de.jensd.fx.glyphs.fontawesome.FontAwesomeIconView
|
import de.jensd.fx.glyphs.fontawesome.FontAwesomeIconView
|
||||||
import hep.dataforge.context.Global
|
import hep.dataforge.context.Global
|
||||||
import hep.dataforge.descriptors.NodeDescriptor
|
|
||||||
import hep.dataforge.meta.Config
|
import hep.dataforge.meta.Config
|
||||||
|
import hep.dataforge.meta.descriptors.NodeDescriptor
|
||||||
import hep.dataforge.names.NameToken
|
import hep.dataforge.names.NameToken
|
||||||
import hep.dataforge.vis.fx.dfIconView
|
import hep.dataforge.vis.fx.dfIconView
|
||||||
import javafx.scene.Node
|
import javafx.scene.Node
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
package hep.dataforge.vis.fx.editor
|
package hep.dataforge.vis.fx.editor
|
||||||
|
|
||||||
import hep.dataforge.descriptors.ItemDescriptor
|
|
||||||
import hep.dataforge.descriptors.NodeDescriptor
|
|
||||||
import hep.dataforge.descriptors.ValueDescriptor
|
|
||||||
import hep.dataforge.meta.*
|
import hep.dataforge.meta.*
|
||||||
|
import hep.dataforge.meta.descriptors.ItemDescriptor
|
||||||
|
import hep.dataforge.meta.descriptors.NodeDescriptor
|
||||||
|
import hep.dataforge.meta.descriptors.ValueDescriptor
|
||||||
import hep.dataforge.names.Name
|
import hep.dataforge.names.Name
|
||||||
import hep.dataforge.names.NameToken
|
import hep.dataforge.names.NameToken
|
||||||
import hep.dataforge.names.asName
|
import hep.dataforge.names.asName
|
||||||
|
@ -7,9 +7,9 @@ package hep.dataforge.vis.fx.editor
|
|||||||
|
|
||||||
import hep.dataforge.context.Context
|
import hep.dataforge.context.Context
|
||||||
import hep.dataforge.context.Named
|
import hep.dataforge.context.Named
|
||||||
import hep.dataforge.descriptors.ValueDescriptor
|
|
||||||
import hep.dataforge.meta.EmptyMeta
|
import hep.dataforge.meta.EmptyMeta
|
||||||
import hep.dataforge.meta.Meta
|
import hep.dataforge.meta.Meta
|
||||||
|
import hep.dataforge.meta.descriptors.ValueDescriptor
|
||||||
import hep.dataforge.names.toName
|
import hep.dataforge.names.toName
|
||||||
import hep.dataforge.provider.Type
|
import hep.dataforge.provider.Type
|
||||||
import hep.dataforge.provider.provideByType
|
import hep.dataforge.provider.provideByType
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
*/
|
*/
|
||||||
package hep.dataforge.vis.fx.editor
|
package hep.dataforge.vis.fx.editor
|
||||||
|
|
||||||
import hep.dataforge.descriptors.ValueDescriptor
|
import hep.dataforge.meta.descriptors.ValueDescriptor
|
||||||
import hep.dataforge.values.Null
|
import hep.dataforge.values.Null
|
||||||
import hep.dataforge.values.Value
|
import hep.dataforge.values.Value
|
||||||
import javafx.beans.property.SimpleObjectProperty
|
import javafx.beans.property.SimpleObjectProperty
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
package hep.dataforge.vis.fx.editor
|
package hep.dataforge.vis.fx.editor
|
||||||
|
|
||||||
import hep.dataforge.descriptors.NodeDescriptor
|
|
||||||
import hep.dataforge.meta.Config
|
import hep.dataforge.meta.Config
|
||||||
import hep.dataforge.meta.Meta
|
import hep.dataforge.meta.Meta
|
||||||
|
import hep.dataforge.meta.descriptors.NodeDescriptor
|
||||||
import hep.dataforge.meta.update
|
import hep.dataforge.meta.update
|
||||||
import hep.dataforge.vis.common.VisualObject
|
import hep.dataforge.vis.common.VisualObject
|
||||||
import hep.dataforge.vis.common.findStyle
|
import hep.dataforge.vis.common.findStyle
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
package hep.dataforge.vis.fx.demo
|
package hep.dataforge.vis.fx.demo
|
||||||
|
|
||||||
import hep.dataforge.descriptors.NodeDescriptor
|
import hep.dataforge.meta.Meta
|
||||||
import hep.dataforge.meta.buildMeta
|
import hep.dataforge.meta.asConfig
|
||||||
import hep.dataforge.meta.toConfig
|
import hep.dataforge.meta.descriptors.NodeDescriptor
|
||||||
import hep.dataforge.values.ValueType
|
import hep.dataforge.values.ValueType
|
||||||
import hep.dataforge.vis.fx.editor.ConfigEditor
|
import hep.dataforge.vis.fx.editor.ConfigEditor
|
||||||
import hep.dataforge.vis.fx.editor.FXMeta
|
import hep.dataforge.vis.fx.editor.FXMeta
|
||||||
@ -15,7 +15,7 @@ class MetaEditorDemoApp : App(MetaEditorDemo::class)
|
|||||||
|
|
||||||
class MetaEditorDemo : View("Meta editor demo") {
|
class MetaEditorDemo : View("Meta editor demo") {
|
||||||
|
|
||||||
val meta = buildMeta {
|
val meta = Meta {
|
||||||
"aNode" put {
|
"aNode" put {
|
||||||
"innerNode" put {
|
"innerNode" put {
|
||||||
"innerValue" put true
|
"innerValue" put true
|
||||||
@ -23,24 +23,24 @@ class MetaEditorDemo : View("Meta editor demo") {
|
|||||||
"b" put 223
|
"b" put 223
|
||||||
"c" put "StringValue"
|
"c" put "StringValue"
|
||||||
}
|
}
|
||||||
}.toConfig()
|
}.asConfig()
|
||||||
|
|
||||||
val descriptor = NodeDescriptor {
|
val descriptor = NodeDescriptor {
|
||||||
node("aNode") {
|
defineNode("aNode") {
|
||||||
info = "A root demo node"
|
info = "A root demo node"
|
||||||
value("b") {
|
defineValue("b") {
|
||||||
info = "b number value"
|
info = "b number value"
|
||||||
type(ValueType.NUMBER)
|
type(ValueType.NUMBER)
|
||||||
}
|
}
|
||||||
node("otherNode") {
|
defineNode("otherNode") {
|
||||||
value("otherValue") {
|
defineValue("otherValue") {
|
||||||
type(ValueType.BOOLEAN)
|
type(ValueType.BOOLEAN)
|
||||||
default(false)
|
default(false)
|
||||||
info = "default value"
|
info = "default value"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
value("multiple"){
|
defineValue("multiple") {
|
||||||
info = "A sns value"
|
info = "A sns value"
|
||||||
multiple = true
|
multiple = true
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,6 @@ package hep.dataforge.vis.spatial.gdml
|
|||||||
|
|
||||||
import hep.dataforge.meta.Meta
|
import hep.dataforge.meta.Meta
|
||||||
import hep.dataforge.meta.MetaBuilder
|
import hep.dataforge.meta.MetaBuilder
|
||||||
import hep.dataforge.meta.buildMeta
|
|
||||||
import hep.dataforge.names.Name
|
import hep.dataforge.names.Name
|
||||||
import hep.dataforge.names.toName
|
import hep.dataforge.names.toName
|
||||||
import hep.dataforge.vis.common.useStyle
|
import hep.dataforge.vis.common.useStyle
|
||||||
@ -44,7 +43,7 @@ class GDMLTransformer(val root: GDML) {
|
|||||||
|
|
||||||
fun VisualObject3D.useStyle(name: String, builder: MetaBuilder.() -> Unit) {
|
fun VisualObject3D.useStyle(name: String, builder: MetaBuilder.() -> Unit) {
|
||||||
styleCache.getOrPut(name.toName()) {
|
styleCache.getOrPut(name.toName()) {
|
||||||
buildMeta(builder)
|
Meta(builder)
|
||||||
}
|
}
|
||||||
useStyle(name)
|
useStyle(name)
|
||||||
}
|
}
|
||||||
|
@ -60,13 +60,13 @@ private fun SerialModule.enumerate(type: KClass<*>): Sequence<SerialDescriptor>
|
|||||||
*/
|
*/
|
||||||
private fun jsonSchema(descriptor: SerialDescriptor, context: SerialModule): JsonObject {
|
private fun jsonSchema(descriptor: SerialDescriptor, context: SerialModule): JsonObject {
|
||||||
|
|
||||||
if (descriptor.name in arrayOf(
|
if (descriptor.serialName in arrayOf(
|
||||||
"hep.dataforge.vis.spatial.Point3D",
|
"hep.dataforge.vis.spatial.Point3D",
|
||||||
"hep.dataforge.vis.spatial.Point2D",
|
"hep.dataforge.vis.spatial.Point2D",
|
||||||
Meta::class.qualifiedName
|
Meta::class.qualifiedName
|
||||||
)
|
)
|
||||||
) return json {
|
) return json {
|
||||||
"\$ref" to "#/definitions/${descriptor.name}"
|
"\$ref" to "#/definitions/${descriptor.serialName}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -109,7 +109,7 @@ private fun jsonSchema(descriptor: SerialDescriptor, context: SerialModule): Jso
|
|||||||
|
|
||||||
val jsonType = descriptor.jsonType
|
val jsonType = descriptor.jsonType
|
||||||
val objectData: MutableMap<String, JsonElement> = mutableMapOf(
|
val objectData: MutableMap<String, JsonElement> = mutableMapOf(
|
||||||
"description" to JsonLiteral(descriptor.name),
|
"description" to JsonLiteral(descriptor.serialName),
|
||||||
"type" to JsonLiteral(jsonType)
|
"type" to JsonLiteral(jsonType)
|
||||||
)
|
)
|
||||||
if (isEnum) {
|
if (isEnum) {
|
||||||
@ -140,9 +140,9 @@ fun main() {
|
|||||||
"children" to json {
|
"children" to json {
|
||||||
"anyOf" to jsonArray {
|
"anyOf" to jsonArray {
|
||||||
context.enumerate(VisualObject3D::class).forEach {
|
context.enumerate(VisualObject3D::class).forEach {
|
||||||
if (it.name == "hep.dataforge.vis.spatial.VisualGroup3D") {
|
if (it.serialName == "hep.dataforge.vis.spatial.VisualGroup3D") {
|
||||||
+json {
|
+json {
|
||||||
"\$ref" to "#/definitions/${it.name}"
|
"\$ref" to "#/definitions/${it.serialName}"
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
+jsonSchema(it, context)
|
+jsonSchema(it, context)
|
||||||
|
@ -1,17 +1,12 @@
|
|||||||
import org.openjfx.gradle.JavaFXOptions
|
import scientifik.serialization
|
||||||
import scientifik.useSerialization
|
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
id("scientifik.mpp")
|
id("scientifik.mpp")
|
||||||
id("org.openjfx.javafxplugin")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
useSerialization()
|
serialization()
|
||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
jvm {
|
|
||||||
withJava()
|
|
||||||
}
|
|
||||||
sourceSets {
|
sourceSets {
|
||||||
commonMain {
|
commonMain {
|
||||||
dependencies {
|
dependencies {
|
||||||
@ -32,14 +27,9 @@ kotlin {
|
|||||||
jsMain {
|
jsMain {
|
||||||
dependencies {
|
dependencies {
|
||||||
// api(project(":wrappers"))
|
// api(project(":wrappers"))
|
||||||
implementation(npm("three", "0.106.2"))
|
implementation(npm("three", "0.114.0"))
|
||||||
implementation(npm("@hi-level/three-csg", "1.0.6"))
|
implementation(npm("three-csg-ts", "1.0.1"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
configure<JavaFXOptions> {
|
|
||||||
modules("javafx.controls")
|
|
||||||
}
|
|
||||||
|
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
package hep.dataforge.vis.spatial
|
package hep.dataforge.vis.spatial
|
||||||
|
|
||||||
import hep.dataforge.context.Context
|
import hep.dataforge.context.Context
|
||||||
import hep.dataforge.io.serialization.ConfigSerializer
|
|
||||||
import hep.dataforge.meta.Config
|
import hep.dataforge.meta.Config
|
||||||
import hep.dataforge.meta.Meta
|
import hep.dataforge.meta.Meta
|
||||||
import hep.dataforge.meta.float
|
import hep.dataforge.meta.float
|
||||||
@ -29,7 +28,6 @@ class Box(
|
|||||||
override var rotation: Point3D? = null
|
override var rotation: Point3D? = null
|
||||||
override var scale: Point3D? = null
|
override var scale: Point3D? = null
|
||||||
|
|
||||||
@Serializable(ConfigSerializer::class)
|
|
||||||
override var properties: Config? = null
|
override var properties: Config? = null
|
||||||
|
|
||||||
//TODO add helper for color configuration
|
//TODO add helper for color configuration
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
package hep.dataforge.vis.spatial
|
package hep.dataforge.vis.spatial
|
||||||
|
|
||||||
import hep.dataforge.io.serialization.ConfigSerializer
|
|
||||||
import hep.dataforge.meta.Config
|
import hep.dataforge.meta.Config
|
||||||
import hep.dataforge.meta.update
|
import hep.dataforge.meta.update
|
||||||
import hep.dataforge.vis.common.AbstractVisualObject
|
import hep.dataforge.vis.common.AbstractVisualObject
|
||||||
@ -34,7 +33,6 @@ class Composite(
|
|||||||
override var rotation: Point3D? = null
|
override var rotation: Point3D? = null
|
||||||
override var scale: Point3D? = null
|
override var scale: Point3D? = null
|
||||||
|
|
||||||
@Serializable(ConfigSerializer::class)
|
|
||||||
override var properties: Config? = null
|
override var properties: Config? = null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
package hep.dataforge.vis.spatial
|
package hep.dataforge.vis.spatial
|
||||||
|
|
||||||
import hep.dataforge.io.serialization.ConfigSerializer
|
|
||||||
import hep.dataforge.meta.Config
|
import hep.dataforge.meta.Config
|
||||||
import hep.dataforge.vis.common.AbstractVisualObject
|
import hep.dataforge.vis.common.AbstractVisualObject
|
||||||
import hep.dataforge.vis.common.set
|
import hep.dataforge.vis.common.set
|
||||||
@ -25,7 +24,6 @@ class ConeSegment(
|
|||||||
var angle: Float = PI2
|
var angle: Float = PI2
|
||||||
) : AbstractVisualObject(), VisualObject3D, Shape {
|
) : AbstractVisualObject(), VisualObject3D, Shape {
|
||||||
|
|
||||||
@Serializable(ConfigSerializer::class)
|
|
||||||
override var properties: Config? = null
|
override var properties: Config? = null
|
||||||
|
|
||||||
override var position: Point3D? = null
|
override var position: Point3D? = null
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
package hep.dataforge.vis.spatial
|
package hep.dataforge.vis.spatial
|
||||||
|
|
||||||
import hep.dataforge.io.serialization.ConfigSerializer
|
|
||||||
import hep.dataforge.meta.Config
|
import hep.dataforge.meta.Config
|
||||||
import hep.dataforge.vis.common.AbstractVisualObject
|
import hep.dataforge.vis.common.AbstractVisualObject
|
||||||
import hep.dataforge.vis.common.set
|
import hep.dataforge.vis.common.set
|
||||||
@ -14,7 +13,6 @@ import kotlinx.serialization.UseSerializers
|
|||||||
@SerialName("3d.convex")
|
@SerialName("3d.convex")
|
||||||
class Convex(val points: List<Point3D>) : AbstractVisualObject(), VisualObject3D {
|
class Convex(val points: List<Point3D>) : AbstractVisualObject(), VisualObject3D {
|
||||||
|
|
||||||
@Serializable(ConfigSerializer::class)
|
|
||||||
override var properties: Config? = null
|
override var properties: Config? = null
|
||||||
|
|
||||||
override var position: Point3D? = null
|
override var position: Point3D? = null
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
@file:UseSerializers(Point2DSerializer::class, Point3DSerializer::class)
|
@file:UseSerializers(Point2DSerializer::class, Point3DSerializer::class)
|
||||||
package hep.dataforge.vis.spatial
|
package hep.dataforge.vis.spatial
|
||||||
|
|
||||||
import hep.dataforge.io.serialization.ConfigSerializer
|
|
||||||
import hep.dataforge.meta.Config
|
import hep.dataforge.meta.Config
|
||||||
import hep.dataforge.vis.common.AbstractVisualObject
|
import hep.dataforge.vis.common.AbstractVisualObject
|
||||||
import hep.dataforge.vis.common.set
|
import hep.dataforge.vis.common.set
|
||||||
@ -45,7 +44,6 @@ class Extruded(
|
|||||||
var layers: MutableList<Layer> = ArrayList()
|
var layers: MutableList<Layer> = ArrayList()
|
||||||
) : AbstractVisualObject(), VisualObject3D, Shape {
|
) : AbstractVisualObject(), VisualObject3D, Shape {
|
||||||
|
|
||||||
@Serializable(ConfigSerializer::class)
|
|
||||||
override var properties: Config? = null
|
override var properties: Config? = null
|
||||||
|
|
||||||
override var position: Point3D? = null
|
override var position: Point3D? = null
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
package hep.dataforge.vis.spatial
|
package hep.dataforge.vis.spatial
|
||||||
|
|
||||||
import hep.dataforge.io.serialization.ConfigSerializer
|
|
||||||
import hep.dataforge.meta.Config
|
import hep.dataforge.meta.Config
|
||||||
import hep.dataforge.vis.common.AbstractVisualObject
|
import hep.dataforge.vis.common.AbstractVisualObject
|
||||||
import hep.dataforge.vis.common.set
|
import hep.dataforge.vis.common.set
|
||||||
@ -12,9 +11,7 @@ import kotlinx.serialization.UseSerializers
|
|||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
@SerialName("3d.label")
|
@SerialName("3d.label")
|
||||||
class Label3D(var text: String, var fontSize: Double, var fontFamily: String) : AbstractVisualObject(),
|
class Label3D(var text: String, var fontSize: Double, var fontFamily: String) : AbstractVisualObject(), VisualObject3D {
|
||||||
VisualObject3D {
|
|
||||||
@Serializable(ConfigSerializer::class)
|
|
||||||
override var properties: Config? = null
|
override var properties: Config? = null
|
||||||
|
|
||||||
override var position: Point3D? = null
|
override var position: Point3D? = null
|
||||||
|
@ -1,16 +1,21 @@
|
|||||||
package hep.dataforge.vis.spatial
|
package hep.dataforge.vis.spatial
|
||||||
|
|
||||||
import hep.dataforge.descriptors.NodeDescriptor
|
import hep.dataforge.meta.descriptors.NodeDescriptor
|
||||||
import hep.dataforge.meta.*
|
import hep.dataforge.meta.double
|
||||||
|
import hep.dataforge.meta.get
|
||||||
|
import hep.dataforge.meta.node
|
||||||
|
import hep.dataforge.meta.scheme.*
|
||||||
|
import hep.dataforge.meta.set
|
||||||
import hep.dataforge.names.asName
|
import hep.dataforge.names.asName
|
||||||
import hep.dataforge.names.plus
|
import hep.dataforge.names.plus
|
||||||
import hep.dataforge.values.ValueType
|
import hep.dataforge.values.ValueType
|
||||||
|
import hep.dataforge.values.asValue
|
||||||
import hep.dataforge.vis.common.Colors
|
import hep.dataforge.vis.common.Colors
|
||||||
import hep.dataforge.vis.spatial.Material3D.Companion.MATERIAL_COLOR_KEY
|
import hep.dataforge.vis.spatial.Material3D.Companion.MATERIAL_COLOR_KEY
|
||||||
import hep.dataforge.vis.spatial.Material3D.Companion.MATERIAL_KEY
|
import hep.dataforge.vis.spatial.Material3D.Companion.MATERIAL_KEY
|
||||||
import hep.dataforge.vis.spatial.Material3D.Companion.MATERIAL_OPACITY_KEY
|
import hep.dataforge.vis.spatial.Material3D.Companion.MATERIAL_OPACITY_KEY
|
||||||
|
|
||||||
class Material3D(override val config: Config) : Specific {
|
class Material3D : Scheme() {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Primary web-color for the material
|
* Primary web-color for the material
|
||||||
@ -32,8 +37,7 @@ class Material3D(override val config: Config) : Specific {
|
|||||||
*/
|
*/
|
||||||
var wireframe by boolean(false, WIREFRAME_KEY)
|
var wireframe by boolean(false, WIREFRAME_KEY)
|
||||||
|
|
||||||
companion object : Specification<Material3D> {
|
companion object : SchemeSpec<Material3D>(::Material3D) {
|
||||||
override fun wrap(config: Config): Material3D = Material3D(config)
|
|
||||||
|
|
||||||
val MATERIAL_KEY = "material".asName()
|
val MATERIAL_KEY = "material".asName()
|
||||||
internal val COLOR_KEY = "color".asName()
|
internal val COLOR_KEY = "color".asName()
|
||||||
@ -45,20 +49,20 @@ class Material3D(override val config: Config) : Specific {
|
|||||||
val MATERIAL_WIREFRAME_KEY = MATERIAL_KEY + WIREFRAME_KEY
|
val MATERIAL_WIREFRAME_KEY = MATERIAL_KEY + WIREFRAME_KEY
|
||||||
|
|
||||||
val descriptor = NodeDescriptor {
|
val descriptor = NodeDescriptor {
|
||||||
value(VisualObject3D.VISIBLE_KEY) {
|
defineValue(VisualObject3D.VISIBLE_KEY) {
|
||||||
type(ValueType.BOOLEAN)
|
type(ValueType.BOOLEAN)
|
||||||
default(true)
|
default(true)
|
||||||
}
|
}
|
||||||
node(MATERIAL_KEY) {
|
defineNode(MATERIAL_KEY) {
|
||||||
value(COLOR_KEY) {
|
defineValue(COLOR_KEY) {
|
||||||
type(ValueType.STRING, ValueType.NUMBER)
|
type(ValueType.STRING, ValueType.NUMBER)
|
||||||
default("#ffffff")
|
default("#ffffff")
|
||||||
}
|
}
|
||||||
value(OPACITY_KEY) {
|
defineValue(OPACITY_KEY) {
|
||||||
type(ValueType.NUMBER)
|
type(ValueType.NUMBER)
|
||||||
default(1.0)
|
default(1.0)
|
||||||
}
|
}
|
||||||
value(WIREFRAME_KEY) {
|
defineValue(WIREFRAME_KEY) {
|
||||||
type(ValueType.BOOLEAN)
|
type(ValueType.BOOLEAN)
|
||||||
default(false)
|
default(false)
|
||||||
}
|
}
|
||||||
@ -71,14 +75,14 @@ class Material3D(override val config: Config) : Specific {
|
|||||||
* Set color as web-color
|
* Set color as web-color
|
||||||
*/
|
*/
|
||||||
fun VisualObject3D.color(webColor: String) {
|
fun VisualObject3D.color(webColor: String) {
|
||||||
setProperty(MATERIAL_COLOR_KEY, webColor)
|
setProperty(MATERIAL_COLOR_KEY, webColor.asValue())
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set color as integer
|
* Set color as integer
|
||||||
*/
|
*/
|
||||||
fun VisualObject3D.color(rgb: Int) {
|
fun VisualObject3D.color(rgb: Int) {
|
||||||
setProperty(MATERIAL_COLOR_KEY, rgb)
|
setProperty(MATERIAL_COLOR_KEY, rgb.asValue())
|
||||||
}
|
}
|
||||||
|
|
||||||
fun VisualObject3D.color(r: UByte, g: UByte, b: UByte) = setProperty(
|
fun VisualObject3D.color(r: UByte, g: UByte, b: UByte) = setProperty(
|
||||||
@ -92,7 +96,7 @@ fun VisualObject3D.color(r: UByte, g: UByte, b: UByte) = setProperty(
|
|||||||
var VisualObject3D.color: String?
|
var VisualObject3D.color: String?
|
||||||
get() = getProperty(MATERIAL_COLOR_KEY)?.let { Colors.fromMeta(it) }
|
get() = getProperty(MATERIAL_COLOR_KEY)?.let { Colors.fromMeta(it) }
|
||||||
set(value) {
|
set(value) {
|
||||||
setProperty(MATERIAL_COLOR_KEY, value)
|
setProperty(MATERIAL_COLOR_KEY, value?.asValue())
|
||||||
}
|
}
|
||||||
|
|
||||||
val VisualObject3D.material: Material3D?
|
val VisualObject3D.material: Material3D?
|
||||||
@ -110,5 +114,5 @@ fun VisualObject3D.material(builder: Material3D.() -> Unit) {
|
|||||||
var VisualObject3D.opacity: Double?
|
var VisualObject3D.opacity: Double?
|
||||||
get() = getProperty(MATERIAL_OPACITY_KEY).double
|
get() = getProperty(MATERIAL_OPACITY_KEY).double
|
||||||
set(value) {
|
set(value) {
|
||||||
setProperty(MATERIAL_OPACITY_KEY, value)
|
setProperty(MATERIAL_OPACITY_KEY, value?.asValue())
|
||||||
}
|
}
|
@ -2,9 +2,8 @@
|
|||||||
|
|
||||||
package hep.dataforge.vis.spatial
|
package hep.dataforge.vis.spatial
|
||||||
|
|
||||||
import hep.dataforge.io.serialization.ConfigSerializer
|
|
||||||
import hep.dataforge.meta.Config
|
import hep.dataforge.meta.Config
|
||||||
import hep.dataforge.meta.number
|
import hep.dataforge.meta.scheme.number
|
||||||
import hep.dataforge.names.asName
|
import hep.dataforge.names.asName
|
||||||
import hep.dataforge.names.plus
|
import hep.dataforge.names.plus
|
||||||
import hep.dataforge.vis.common.AbstractVisualObject
|
import hep.dataforge.vis.common.AbstractVisualObject
|
||||||
@ -16,7 +15,6 @@ import kotlinx.serialization.UseSerializers
|
|||||||
@Serializable
|
@Serializable
|
||||||
@SerialName("3d.line")
|
@SerialName("3d.line")
|
||||||
class PolyLine(var points: List<Point3D>) : AbstractVisualObject(), VisualObject3D {
|
class PolyLine(var points: List<Point3D>) : AbstractVisualObject(), VisualObject3D {
|
||||||
@Serializable(ConfigSerializer::class)
|
|
||||||
override var properties: Config? = null
|
override var properties: Config? = null
|
||||||
|
|
||||||
override var position: Point3D? = null
|
override var position: Point3D? = null
|
||||||
|
@ -1,9 +1,7 @@
|
|||||||
@file:UseSerializers(Point3DSerializer::class, NameSerializer::class, ConfigSerializer::class)
|
@file:UseSerializers(Point3DSerializer::class)
|
||||||
|
|
||||||
package hep.dataforge.vis.spatial
|
package hep.dataforge.vis.spatial
|
||||||
|
|
||||||
import hep.dataforge.io.serialization.ConfigSerializer
|
|
||||||
import hep.dataforge.io.serialization.NameSerializer
|
|
||||||
import hep.dataforge.meta.Config
|
import hep.dataforge.meta.Config
|
||||||
import hep.dataforge.meta.Laminate
|
import hep.dataforge.meta.Laminate
|
||||||
import hep.dataforge.meta.MetaItem
|
import hep.dataforge.meta.MetaItem
|
||||||
@ -36,7 +34,6 @@ class Proxy private constructor(val templateName: Name) : AbstractVisualObject()
|
|||||||
override var rotation: Point3D? = null
|
override var rotation: Point3D? = null
|
||||||
override var scale: Point3D? = null
|
override var scale: Point3D? = null
|
||||||
|
|
||||||
@Serializable(ConfigSerializer::class)
|
|
||||||
override var properties: Config? = null
|
override var properties: Config? = null
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
package hep.dataforge.vis.spatial
|
package hep.dataforge.vis.spatial
|
||||||
|
|
||||||
import hep.dataforge.io.serialization.ConfigSerializer
|
|
||||||
import hep.dataforge.meta.Config
|
import hep.dataforge.meta.Config
|
||||||
import hep.dataforge.vis.common.AbstractVisualObject
|
import hep.dataforge.vis.common.AbstractVisualObject
|
||||||
import hep.dataforge.vis.common.set
|
import hep.dataforge.vis.common.set
|
||||||
@ -23,7 +22,6 @@ class Sphere(
|
|||||||
var theta: Float = PI.toFloat()
|
var theta: Float = PI.toFloat()
|
||||||
) : AbstractVisualObject(), VisualObject3D, Shape {
|
) : AbstractVisualObject(), VisualObject3D, Shape {
|
||||||
|
|
||||||
@Serializable(ConfigSerializer::class)
|
|
||||||
override var properties: Config? = null
|
override var properties: Config? = null
|
||||||
|
|
||||||
override var position: Point3D? = null
|
override var position: Point3D? = null
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
@file:UseSerializers(Point3DSerializer::class)
|
@file:UseSerializers(Point3DSerializer::class)
|
||||||
package hep.dataforge.vis.spatial
|
package hep.dataforge.vis.spatial
|
||||||
|
|
||||||
import hep.dataforge.io.serialization.ConfigSerializer
|
|
||||||
import hep.dataforge.meta.Config
|
import hep.dataforge.meta.Config
|
||||||
import hep.dataforge.vis.common.AbstractVisualObject
|
import hep.dataforge.vis.common.AbstractVisualObject
|
||||||
import hep.dataforge.vis.common.set
|
import hep.dataforge.vis.common.set
|
||||||
@ -29,7 +28,6 @@ class Tube(
|
|||||||
override var rotation: Point3D? = null
|
override var rotation: Point3D? = null
|
||||||
override var scale: Point3D? = null
|
override var scale: Point3D? = null
|
||||||
|
|
||||||
@Serializable(ConfigSerializer::class)
|
|
||||||
override var properties: Config? = null
|
override var properties: Config? = null
|
||||||
|
|
||||||
init {
|
init {
|
||||||
|
@ -4,10 +4,11 @@ import hep.dataforge.context.AbstractPlugin
|
|||||||
import hep.dataforge.context.Context
|
import hep.dataforge.context.Context
|
||||||
import hep.dataforge.context.PluginFactory
|
import hep.dataforge.context.PluginFactory
|
||||||
import hep.dataforge.context.PluginTag
|
import hep.dataforge.context.PluginTag
|
||||||
import hep.dataforge.io.serialization.ConfigSerializer
|
import hep.dataforge.meta.Meta
|
||||||
import hep.dataforge.io.serialization.MetaSerializer
|
import hep.dataforge.meta.float
|
||||||
import hep.dataforge.io.serialization.NameSerializer
|
import hep.dataforge.meta.get
|
||||||
import hep.dataforge.meta.*
|
import hep.dataforge.meta.node
|
||||||
|
import hep.dataforge.meta.scheme.configure
|
||||||
import hep.dataforge.names.Name
|
import hep.dataforge.names.Name
|
||||||
import hep.dataforge.names.toName
|
import hep.dataforge.names.toName
|
||||||
import hep.dataforge.vis.common.Visual
|
import hep.dataforge.vis.common.Visual
|
||||||
@ -39,10 +40,6 @@ class Visual3D(meta: Meta) : AbstractPlugin(meta) {
|
|||||||
val serialModule = SerializersModule {
|
val serialModule = SerializersModule {
|
||||||
contextual(Point3DSerializer)
|
contextual(Point3DSerializer)
|
||||||
contextual(Point2DSerializer)
|
contextual(Point2DSerializer)
|
||||||
contextual(NameSerializer)
|
|
||||||
contextual(NameTokenSerializer)
|
|
||||||
contextual(MetaSerializer)
|
|
||||||
contextual(ConfigSerializer)
|
|
||||||
|
|
||||||
polymorphic(VisualObject::class, VisualObject3D::class) {
|
polymorphic(VisualObject::class, VisualObject3D::class) {
|
||||||
VisualGroup3D::class with VisualGroup3D.serializer()
|
VisualGroup3D::class with VisualGroup3D.serializer()
|
||||||
@ -52,8 +49,8 @@ class Visual3D(meta: Meta) : AbstractPlugin(meta) {
|
|||||||
Box::class with Box.serializer()
|
Box::class with Box.serializer()
|
||||||
Convex::class with Convex.serializer()
|
Convex::class with Convex.serializer()
|
||||||
Extruded::class with Extruded.serializer()
|
Extruded::class with Extruded.serializer()
|
||||||
addSubclass(PolyLine.serializer())
|
subclass(PolyLine.serializer())
|
||||||
addSubclass(Label3D.serializer())
|
subclass(Label3D.serializer())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,16 +1,9 @@
|
|||||||
@file:UseSerializers(
|
@file:UseSerializers(
|
||||||
Point3DSerializer::class,
|
Point3DSerializer::class
|
||||||
ConfigSerializer::class,
|
|
||||||
NameTokenSerializer::class,
|
|
||||||
NameSerializer::class,
|
|
||||||
MetaSerializer::class
|
|
||||||
)
|
)
|
||||||
|
|
||||||
package hep.dataforge.vis.spatial
|
package hep.dataforge.vis.spatial
|
||||||
|
|
||||||
import hep.dataforge.io.serialization.ConfigSerializer
|
|
||||||
import hep.dataforge.io.serialization.MetaSerializer
|
|
||||||
import hep.dataforge.io.serialization.NameSerializer
|
|
||||||
import hep.dataforge.meta.Config
|
import hep.dataforge.meta.Config
|
||||||
import hep.dataforge.names.Name
|
import hep.dataforge.names.Name
|
||||||
import hep.dataforge.names.NameToken
|
import hep.dataforge.names.NameToken
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
@file:UseSerializers(Point3DSerializer::class, NameSerializer::class, NameTokenSerializer::class)
|
@file:UseSerializers(Point3DSerializer::class)
|
||||||
|
|
||||||
package hep.dataforge.vis.spatial
|
package hep.dataforge.vis.spatial
|
||||||
|
|
||||||
import hep.dataforge.io.serialization.NameSerializer
|
|
||||||
import hep.dataforge.meta.*
|
import hep.dataforge.meta.*
|
||||||
|
import hep.dataforge.meta.scheme.setProperty
|
||||||
import hep.dataforge.names.asName
|
import hep.dataforge.names.asName
|
||||||
import hep.dataforge.names.plus
|
import hep.dataforge.names.plus
|
||||||
import hep.dataforge.output.Renderer
|
import hep.dataforge.output.Renderer
|
||||||
|
import hep.dataforge.values.asValue
|
||||||
import hep.dataforge.vis.common.VisualObject
|
import hep.dataforge.vis.common.VisualObject
|
||||||
import hep.dataforge.vis.spatial.VisualObject3D.Companion.DETAIL_KEY
|
import hep.dataforge.vis.spatial.VisualObject3D.Companion.DETAIL_KEY
|
||||||
import hep.dataforge.vis.spatial.VisualObject3D.Companion.IGNORE_KEY
|
import hep.dataforge.vis.spatial.VisualObject3D.Companion.IGNORE_KEY
|
||||||
@ -64,7 +65,7 @@ interface VisualObject3D : VisualObject {
|
|||||||
var VisualObject3D.layer: Int
|
var VisualObject3D.layer: Int
|
||||||
get() = getProperty(LAYER_KEY).int ?: 0
|
get() = getProperty(LAYER_KEY).int ?: 0
|
||||||
set(value) {
|
set(value) {
|
||||||
setProperty(LAYER_KEY, value)
|
setProperty(LAYER_KEY, value.asValue())
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Renderer<VisualObject3D>.render(meta: Meta = EmptyMeta, action: VisualGroup3D.() -> Unit) =
|
fun Renderer<VisualObject3D>.render(meta: Meta = EmptyMeta, action: VisualGroup3D.() -> Unit) =
|
||||||
@ -86,7 +87,7 @@ enum class RotationOrder {
|
|||||||
*/
|
*/
|
||||||
var VisualObject3D.rotationOrder: RotationOrder
|
var VisualObject3D.rotationOrder: RotationOrder
|
||||||
get() = getProperty(VisualObject3D.rotationOrder).enum<RotationOrder>() ?: RotationOrder.XYZ
|
get() = getProperty(VisualObject3D.rotationOrder).enum<RotationOrder>() ?: RotationOrder.XYZ
|
||||||
set(value) = setProperty(VisualObject3D.rotationOrder, value.name)
|
set(value) = setProperty(VisualObject3D.rotationOrder, value.name.asValue())
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -94,11 +95,11 @@ var VisualObject3D.rotationOrder: RotationOrder
|
|||||||
*/
|
*/
|
||||||
var VisualObject3D.detail: Int?
|
var VisualObject3D.detail: Int?
|
||||||
get() = getProperty(DETAIL_KEY, false).int
|
get() = getProperty(DETAIL_KEY, false).int
|
||||||
set(value) = setProperty(DETAIL_KEY, value)
|
set(value) = setProperty(DETAIL_KEY, value?.asValue())
|
||||||
|
|
||||||
var VisualObject.visible: Boolean?
|
var VisualObject.visible: Boolean?
|
||||||
get() = getProperty(VISIBLE_KEY).boolean
|
get() = getProperty(VISIBLE_KEY).boolean
|
||||||
set(value) = setProperty(VISIBLE_KEY, value)
|
set(value) = setProperty(VISIBLE_KEY, value?.asValue())
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If this property is true, the object will be ignored on render.
|
* If this property is true, the object will be ignored on render.
|
||||||
@ -106,7 +107,7 @@ var VisualObject.visible: Boolean?
|
|||||||
*/
|
*/
|
||||||
var VisualObject.ignore: Boolean?
|
var VisualObject.ignore: Boolean?
|
||||||
get() = getProperty(IGNORE_KEY,false).boolean
|
get() = getProperty(IGNORE_KEY,false).boolean
|
||||||
set(value) = setProperty(IGNORE_KEY, value)
|
set(value) = setProperty(IGNORE_KEY, value?.asValue())
|
||||||
|
|
||||||
//var VisualObject.selected: Boolean?
|
//var VisualObject.selected: Boolean?
|
||||||
// get() = getProperty(SELECTED_KEY).boolean
|
// get() = getProperty(SELECTED_KEY).boolean
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package hep.dataforge.vis.spatial
|
package hep.dataforge.vis.spatial
|
||||||
|
|
||||||
import hep.dataforge.meta.Meta
|
import hep.dataforge.meta.Meta
|
||||||
import hep.dataforge.meta.buildMeta
|
|
||||||
import hep.dataforge.meta.get
|
import hep.dataforge.meta.get
|
||||||
import hep.dataforge.meta.number
|
import hep.dataforge.meta.number
|
||||||
|
|
||||||
@ -13,7 +12,7 @@ expect class Point2D(x: Number, y: Number) {
|
|||||||
operator fun Point2D.component1() = x
|
operator fun Point2D.component1() = x
|
||||||
operator fun Point2D.component2() = y
|
operator fun Point2D.component2() = y
|
||||||
|
|
||||||
fun Point2D.toMeta() = buildMeta {
|
fun Point2D.toMeta() = Meta {
|
||||||
VisualObject3D.x put x
|
VisualObject3D.x put x
|
||||||
VisualObject3D.y put y
|
VisualObject3D.y put y
|
||||||
}
|
}
|
||||||
@ -34,7 +33,7 @@ operator fun Point3D.component3() = z
|
|||||||
|
|
||||||
fun Meta.point3D() = Point3D(this["x"].number ?: 0, this["y"].number ?: 0, this["y"].number ?: 0)
|
fun Meta.point3D() = Point3D(this["x"].number ?: 0, this["y"].number ?: 0, this["y"].number ?: 0)
|
||||||
|
|
||||||
fun Point3D.toMeta() = buildMeta {
|
fun Point3D.toMeta() = Meta {
|
||||||
VisualObject3D.x put x
|
VisualObject3D.x put x
|
||||||
VisualObject3D.y put y
|
VisualObject3D.y put y
|
||||||
VisualObject3D.z put z
|
VisualObject3D.z put z
|
||||||
|
@ -1,12 +1,9 @@
|
|||||||
package hep.dataforge.vis.spatial
|
package hep.dataforge.vis.spatial
|
||||||
|
|
||||||
import hep.dataforge.io.serialization.descriptor
|
import hep.dataforge.meta.double
|
||||||
import hep.dataforge.names.NameToken
|
|
||||||
import hep.dataforge.names.toName
|
|
||||||
import kotlinx.serialization.*
|
import kotlinx.serialization.*
|
||||||
import kotlinx.serialization.internal.DoubleSerializer
|
import kotlinx.serialization.builtins.nullable
|
||||||
import kotlinx.serialization.internal.StringDescriptor
|
import kotlinx.serialization.builtins.serializer
|
||||||
import kotlinx.serialization.internal.nullable
|
|
||||||
|
|
||||||
inline fun <R> Decoder.decodeStructure(
|
inline fun <R> Decoder.decodeStructure(
|
||||||
desc: SerialDescriptor,
|
desc: SerialDescriptor,
|
||||||
@ -31,7 +28,7 @@ inline fun Encoder.encodeStructure(
|
|||||||
|
|
||||||
@Serializer(Point3D::class)
|
@Serializer(Point3D::class)
|
||||||
object Point3DSerializer : KSerializer<Point3D> {
|
object Point3DSerializer : KSerializer<Point3D> {
|
||||||
override val descriptor: SerialDescriptor = descriptor("hep.dataforge.vis.spatial.Point3D") {
|
override val descriptor: SerialDescriptor = SerialDescriptor("hep.dataforge.vis.spatial.Point3D") {
|
||||||
double("x", true)
|
double("x", true)
|
||||||
double("y", true)
|
double("y", true)
|
||||||
double("z", true)
|
double("z", true)
|
||||||
@ -45,9 +42,9 @@ object Point3DSerializer : KSerializer<Point3D> {
|
|||||||
loop@ while (true) {
|
loop@ while (true) {
|
||||||
when (val i = decodeElementIndex(descriptor)) {
|
when (val i = decodeElementIndex(descriptor)) {
|
||||||
CompositeDecoder.READ_DONE -> break@loop
|
CompositeDecoder.READ_DONE -> break@loop
|
||||||
0 -> x = decodeNullableSerializableElement(descriptor, 0, DoubleSerializer.nullable) ?: 0.0
|
0 -> x = decodeNullableSerializableElement(descriptor, 0, Double.serializer().nullable) ?: 0.0
|
||||||
1 -> y = decodeNullableSerializableElement(descriptor, 1, DoubleSerializer.nullable) ?: 0.0
|
1 -> y = decodeNullableSerializableElement(descriptor, 1, Double.serializer().nullable) ?: 0.0
|
||||||
2 -> z = decodeNullableSerializableElement(descriptor, 2, DoubleSerializer.nullable) ?: 0.0
|
2 -> z = decodeNullableSerializableElement(descriptor, 2, Double.serializer().nullable) ?: 0.0
|
||||||
else -> throw SerializationException("Unknown index $i")
|
else -> throw SerializationException("Unknown index $i")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -55,18 +52,18 @@ object Point3DSerializer : KSerializer<Point3D> {
|
|||||||
return Point3D(x ?: 0.0, y ?: 0.0, z ?: 0.0)
|
return Point3D(x ?: 0.0, y ?: 0.0, z ?: 0.0)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun serialize(encoder: Encoder, obj: Point3D) {
|
override fun serialize(encoder: Encoder, value: Point3D) {
|
||||||
encoder.encodeStructure(descriptor) {
|
encoder.encodeStructure(descriptor) {
|
||||||
if (obj.x != 0.0) encodeDoubleElement(descriptor, 0, obj.x)
|
if (value.x != 0.0) encodeDoubleElement(descriptor, 0, value.x)
|
||||||
if (obj.y != 0.0) encodeDoubleElement(descriptor, 1, obj.y)
|
if (value.y != 0.0) encodeDoubleElement(descriptor, 1, value.y)
|
||||||
if (obj.z != 0.0) encodeDoubleElement(descriptor, 2, obj.z)
|
if (value.z != 0.0) encodeDoubleElement(descriptor, 2, value.z)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Serializer(Point2D::class)
|
@Serializer(Point2D::class)
|
||||||
object Point2DSerializer : KSerializer<Point2D> {
|
object Point2DSerializer : KSerializer<Point2D> {
|
||||||
override val descriptor: SerialDescriptor = descriptor("hep.dataforge.vis.spatial.Point2D") {
|
override val descriptor: SerialDescriptor = SerialDescriptor("hep.dataforge.vis.spatial.Point2D") {
|
||||||
double("x", true)
|
double("x", true)
|
||||||
double("y", true)
|
double("y", true)
|
||||||
}
|
}
|
||||||
@ -78,8 +75,8 @@ object Point2DSerializer : KSerializer<Point2D> {
|
|||||||
loop@ while (true) {
|
loop@ while (true) {
|
||||||
when (val i = decodeElementIndex(descriptor)) {
|
when (val i = decodeElementIndex(descriptor)) {
|
||||||
CompositeDecoder.READ_DONE -> break@loop
|
CompositeDecoder.READ_DONE -> break@loop
|
||||||
0 -> x = decodeNullableSerializableElement(descriptor, 0, DoubleSerializer.nullable) ?: 0.0
|
0 -> x = decodeNullableSerializableElement(descriptor, 0, Double.serializer().nullable) ?: 0.0
|
||||||
1 -> y = decodeNullableSerializableElement(descriptor, 1, DoubleSerializer.nullable) ?: 0.0
|
1 -> y = decodeNullableSerializableElement(descriptor, 1, Double.serializer().nullable) ?: 0.0
|
||||||
else -> throw SerializationException("Unknown index $i")
|
else -> throw SerializationException("Unknown index $i")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -87,23 +84,10 @@ object Point2DSerializer : KSerializer<Point2D> {
|
|||||||
return Point2D(x ?: 0.0, y ?: 0.0)
|
return Point2D(x ?: 0.0, y ?: 0.0)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun serialize(encoder: Encoder, obj: Point2D) {
|
override fun serialize(encoder: Encoder, value: Point2D) {
|
||||||
encoder.encodeStructure(descriptor) {
|
encoder.encodeStructure(descriptor) {
|
||||||
if (obj.x != 0.0) encodeDoubleElement(descriptor, 0, obj.x)
|
if (value.x != 0.0) encodeDoubleElement(descriptor, 0, value.x)
|
||||||
if (obj.y != 0.0) encodeDoubleElement(descriptor, 1, obj.y)
|
if (value.y != 0.0) encodeDoubleElement(descriptor, 1, value.y)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Serializer(NameToken::class)
|
|
||||||
object NameTokenSerializer : KSerializer<NameToken> {
|
|
||||||
override val descriptor: SerialDescriptor = StringDescriptor.withName("NameToken")
|
|
||||||
|
|
||||||
override fun deserialize(decoder: Decoder): NameToken {
|
|
||||||
return decoder.decodeString().toName().first()!!
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun serialize(encoder: Encoder, obj: NameToken) {
|
|
||||||
encoder.encodeString(obj.toString())
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,18 @@
|
|||||||
|
package hep.dataforge.vis.spatial.specifications
|
||||||
|
|
||||||
|
import hep.dataforge.meta.isEmpty
|
||||||
|
import hep.dataforge.meta.scheme.Scheme
|
||||||
|
import hep.dataforge.meta.scheme.SchemeSpec
|
||||||
|
import hep.dataforge.meta.scheme.boolean
|
||||||
|
import hep.dataforge.meta.scheme.double
|
||||||
|
|
||||||
|
class Axes : Scheme() {
|
||||||
|
var visible by boolean(!config.isEmpty())
|
||||||
|
var size by double(AXIS_SIZE)
|
||||||
|
var width by double(AXIS_WIDTH)
|
||||||
|
|
||||||
|
companion object : SchemeSpec<Axes>(::Axes) {
|
||||||
|
const val AXIS_SIZE = 1000.0
|
||||||
|
const val AXIS_WIDTH = 3.0
|
||||||
|
}
|
||||||
|
}
|
@ -1,17 +0,0 @@
|
|||||||
package hep.dataforge.vis.spatial.specifications
|
|
||||||
|
|
||||||
import hep.dataforge.meta.*
|
|
||||||
|
|
||||||
class AxesSpec(override val config: Config) : Specific {
|
|
||||||
var visible by boolean(!config.isEmpty())
|
|
||||||
var size by double(AXIS_SIZE)
|
|
||||||
var width by double(AXIS_WIDTH)
|
|
||||||
|
|
||||||
companion object : Specification<AxesSpec> {
|
|
||||||
override fun wrap(config: Config): AxesSpec = AxesSpec(config)
|
|
||||||
|
|
||||||
const val AXIS_SIZE = 1000.0
|
|
||||||
const val AXIS_WIDTH = 3.0
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,10 +1,14 @@
|
|||||||
package hep.dataforge.vis.spatial.specifications
|
package hep.dataforge.vis.spatial.specifications
|
||||||
|
|
||||||
import hep.dataforge.meta.*
|
import hep.dataforge.meta.scheme.Scheme
|
||||||
|
import hep.dataforge.meta.scheme.SchemeSpec
|
||||||
|
import hep.dataforge.meta.scheme.double
|
||||||
|
import hep.dataforge.meta.scheme.int
|
||||||
import kotlin.math.PI
|
import kotlin.math.PI
|
||||||
|
|
||||||
class CameraSpec(override val config: Config) : Specific {
|
class Camera : Scheme() {
|
||||||
var fov by int(FIELD_OF_VIEW)
|
var fov by int(FIELD_OF_VIEW)
|
||||||
|
|
||||||
//var aspect by double(1.0)
|
//var aspect by double(1.0)
|
||||||
var nearClip by double(NEAR_CLIP)
|
var nearClip by double(NEAR_CLIP)
|
||||||
var farClip by double(FAR_CLIP)
|
var farClip by double(FAR_CLIP)
|
||||||
@ -14,8 +18,7 @@ class CameraSpec(override val config: Config) : Specific {
|
|||||||
var latitude by double(INITIAL_LATITUDE)
|
var latitude by double(INITIAL_LATITUDE)
|
||||||
val zenith: Double get() = PI / 2 - latitude
|
val zenith: Double get() = PI / 2 - latitude
|
||||||
|
|
||||||
companion object : Specification<CameraSpec> {
|
companion object : SchemeSpec<Camera>(::Camera) {
|
||||||
override fun wrap(config: Config): CameraSpec = CameraSpec(config)
|
|
||||||
const val INITIAL_DISTANCE = 300.0
|
const val INITIAL_DISTANCE = 300.0
|
||||||
const val INITIAL_AZIMUTH = 0.0
|
const val INITIAL_AZIMUTH = 0.0
|
||||||
const val INITIAL_LATITUDE = PI / 6
|
const val INITIAL_LATITUDE = PI / 6
|
@ -0,0 +1,15 @@
|
|||||||
|
package hep.dataforge.vis.spatial.specifications
|
||||||
|
|
||||||
|
import hep.dataforge.meta.scheme.Scheme
|
||||||
|
import hep.dataforge.meta.scheme.SchemeSpec
|
||||||
|
import hep.dataforge.meta.scheme.int
|
||||||
|
import hep.dataforge.meta.scheme.spec
|
||||||
|
|
||||||
|
class Canvas : Scheme() {
|
||||||
|
var axes by spec(Axes, Axes.empty())
|
||||||
|
var camera by spec(Camera, Camera.empty())
|
||||||
|
var controls by spec(Controls, Controls.empty())
|
||||||
|
var minSize by int(300)
|
||||||
|
|
||||||
|
companion object : SchemeSpec<Canvas>(::Canvas)
|
||||||
|
}
|
@ -1,15 +0,0 @@
|
|||||||
package hep.dataforge.vis.spatial.specifications
|
|
||||||
|
|
||||||
import hep.dataforge.meta.*
|
|
||||||
|
|
||||||
class CanvasSpec(override val config: Config) : Specific {
|
|
||||||
var axes by spec(AxesSpec)
|
|
||||||
var camera by spec(CameraSpec)
|
|
||||||
var controls by spec(ControlsSpec)
|
|
||||||
var minSize by int(300)
|
|
||||||
|
|
||||||
companion object: Specification<CanvasSpec>{
|
|
||||||
override fun wrap(config: Config): CanvasSpec = CanvasSpec(config)
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,9 @@
|
|||||||
|
package hep.dataforge.vis.spatial.specifications
|
||||||
|
|
||||||
|
import hep.dataforge.meta.scheme.Scheme
|
||||||
|
import hep.dataforge.meta.scheme.SchemeSpec
|
||||||
|
|
||||||
|
|
||||||
|
class Controls : Scheme() {
|
||||||
|
companion object : SchemeSpec<Controls>(::Controls)
|
||||||
|
}
|
@ -1,11 +0,0 @@
|
|||||||
package hep.dataforge.vis.spatial.specifications
|
|
||||||
|
|
||||||
import hep.dataforge.meta.Config
|
|
||||||
import hep.dataforge.meta.Specific
|
|
||||||
import hep.dataforge.meta.Specification
|
|
||||||
|
|
||||||
class ControlsSpec(override val config: Config) : Specific {
|
|
||||||
companion object : Specification<ControlsSpec> {
|
|
||||||
override fun wrap(config: Config): ControlsSpec = ControlsSpec(config)
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,8 +1,9 @@
|
|||||||
package hep.dataforge.vis.spatial
|
package hep.dataforge.vis.spatial
|
||||||
|
|
||||||
import hep.dataforge.io.toMeta
|
|
||||||
import hep.dataforge.meta.MetaItem
|
import hep.dataforge.meta.MetaItem
|
||||||
import hep.dataforge.meta.getIndexed
|
import hep.dataforge.meta.getIndexed
|
||||||
|
import hep.dataforge.meta.node
|
||||||
|
import hep.dataforge.meta.toMetaItem
|
||||||
import kotlin.test.Test
|
import kotlin.test.Test
|
||||||
import kotlin.test.assertEquals
|
import kotlin.test.assertEquals
|
||||||
|
|
||||||
@ -26,7 +27,7 @@ class ConvexTest {
|
|||||||
val convex = group.first() as Convex
|
val convex = group.first() as Convex
|
||||||
|
|
||||||
val json = Visual3D.json.toJson(Convex.serializer(), convex)
|
val json = Visual3D.json.toJson(Convex.serializer(), convex)
|
||||||
val meta = json.toMeta()
|
val meta = json.toMetaItem().node!!
|
||||||
|
|
||||||
val points = meta.getIndexed("points").values.map { (it as MetaItem.NodeItem<*>).node.point3D() }
|
val points = meta.getIndexed("points").values.map { (it as MetaItem.NodeItem<*>).node.point3D() }
|
||||||
assertEquals(8, points.count())
|
assertEquals(8, points.count())
|
||||||
|
@ -2,7 +2,7 @@ package hep.dataforge.vis.spatial.three
|
|||||||
|
|
||||||
import hep.dataforge.context.Context
|
import hep.dataforge.context.Context
|
||||||
import hep.dataforge.meta.Meta
|
import hep.dataforge.meta.Meta
|
||||||
import hep.dataforge.meta.get
|
import hep.dataforge.meta.scheme.getProperty
|
||||||
import hep.dataforge.meta.string
|
import hep.dataforge.meta.string
|
||||||
import hep.dataforge.names.Name
|
import hep.dataforge.names.Name
|
||||||
import hep.dataforge.names.plus
|
import hep.dataforge.names.plus
|
||||||
@ -10,9 +10,9 @@ import hep.dataforge.names.toName
|
|||||||
import hep.dataforge.output.Renderer
|
import hep.dataforge.output.Renderer
|
||||||
import hep.dataforge.vis.common.Colors
|
import hep.dataforge.vis.common.Colors
|
||||||
import hep.dataforge.vis.spatial.VisualObject3D
|
import hep.dataforge.vis.spatial.VisualObject3D
|
||||||
import hep.dataforge.vis.spatial.specifications.CameraSpec
|
import hep.dataforge.vis.spatial.specifications.Camera
|
||||||
import hep.dataforge.vis.spatial.specifications.CanvasSpec
|
import hep.dataforge.vis.spatial.specifications.Canvas
|
||||||
import hep.dataforge.vis.spatial.specifications.ControlsSpec
|
import hep.dataforge.vis.spatial.specifications.Controls
|
||||||
import hep.dataforge.vis.spatial.three.ThreeMaterials.HIGHLIGHT_MATERIAL
|
import hep.dataforge.vis.spatial.three.ThreeMaterials.HIGHLIGHT_MATERIAL
|
||||||
import info.laht.threekt.WebGLRenderer
|
import info.laht.threekt.WebGLRenderer
|
||||||
import info.laht.threekt.cameras.PerspectiveCamera
|
import info.laht.threekt.cameras.PerspectiveCamera
|
||||||
@ -39,7 +39,7 @@ import kotlin.math.sin
|
|||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
class ThreeCanvas(element: HTMLElement, val three: ThreePlugin, val spec: CanvasSpec) : Renderer<VisualObject3D> {
|
class ThreeCanvas(element: HTMLElement, val three: ThreePlugin, val canvas: Canvas) : Renderer<VisualObject3D> {
|
||||||
|
|
||||||
override val context: Context get() = three.context
|
override val context: Context get() = three.context
|
||||||
|
|
||||||
@ -53,15 +53,15 @@ class ThreeCanvas(element: HTMLElement, val three: ThreePlugin, val spec: Canvas
|
|||||||
|
|
||||||
var clickListener: ((Name) -> Unit)? = null
|
var clickListener: ((Name) -> Unit)? = null
|
||||||
|
|
||||||
val axes = AxesHelper(spec.axes.size.toInt()).apply {
|
val axes = AxesHelper(canvas.axes.size.toInt()).apply {
|
||||||
visible = spec.axes.visible
|
visible = canvas.axes.visible
|
||||||
}
|
}
|
||||||
|
|
||||||
val scene: Scene = Scene().apply {
|
val scene: Scene = Scene().apply {
|
||||||
add(axes)
|
add(axes)
|
||||||
}
|
}
|
||||||
|
|
||||||
val camera = buildCamera(spec.camera)
|
val camera = buildCamera(canvas.camera)
|
||||||
|
|
||||||
init {
|
init {
|
||||||
element.clear()
|
element.clear()
|
||||||
@ -90,7 +90,7 @@ class ThreeCanvas(element: HTMLElement, val three: ThreePlugin, val spec: Canvas
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
addControls(renderer.domElement, spec.controls)
|
addControls(renderer.domElement, canvas.controls)
|
||||||
|
|
||||||
fun animate() {
|
fun animate() {
|
||||||
val mesh = pick()
|
val mesh = pick()
|
||||||
@ -108,7 +108,7 @@ class ThreeCanvas(element: HTMLElement, val three: ThreePlugin, val spec: Canvas
|
|||||||
|
|
||||||
element.appendChild(renderer.domElement)
|
element.appendChild(renderer.domElement)
|
||||||
|
|
||||||
renderer.setSize(max(spec.minSize, element.offsetWidth), max(spec.minSize, element.offsetWidth))
|
renderer.setSize(max(canvas.minSize, element.offsetWidth), max(canvas.minSize, element.offsetWidth))
|
||||||
|
|
||||||
element.onresize = {
|
element.onresize = {
|
||||||
renderer.setSize(element.offsetWidth, element.offsetWidth)
|
renderer.setSize(element.offsetWidth, element.offsetWidth)
|
||||||
@ -142,7 +142,7 @@ class ThreeCanvas(element: HTMLElement, val three: ThreePlugin, val spec: Canvas
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun buildCamera(spec: CameraSpec) = PerspectiveCamera(
|
private fun buildCamera(spec: Camera) = PerspectiveCamera(
|
||||||
spec.fov,
|
spec.fov,
|
||||||
1.0,
|
1.0,
|
||||||
spec.nearClip,
|
spec.nearClip,
|
||||||
@ -153,8 +153,8 @@ class ThreeCanvas(element: HTMLElement, val three: ThreePlugin, val spec: Canvas
|
|||||||
translateZ(spec.distance * sin(spec.zenith) * cos(spec.azimuth))
|
translateZ(spec.distance * sin(spec.zenith) * cos(spec.azimuth))
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun addControls(element: Node, controlsSpec: ControlsSpec) {
|
private fun addControls(element: Node, controls: Controls) {
|
||||||
when (controlsSpec["type"].string) {
|
when (controls.getProperty("type").string) {
|
||||||
"trackball" -> TrackballControls(camera, element)
|
"trackball" -> TrackballControls(camera, element)
|
||||||
else -> OrbitControls(camera, element)
|
else -> OrbitControls(camera, element)
|
||||||
}
|
}
|
||||||
@ -211,5 +211,5 @@ class ThreeCanvas(element: HTMLElement, val three: ThreePlugin, val spec: Canvas
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun ThreePlugin.output(element: HTMLElement, spec: CanvasSpec = CanvasSpec.empty()): ThreeCanvas =
|
fun ThreePlugin.output(element: HTMLElement, spec: Canvas = Canvas.empty()): ThreeCanvas =
|
||||||
ThreeCanvas(element, this, spec)
|
ThreeCanvas(element, this, spec)
|
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
package hep.dataforge.vis.spatial.three
|
package hep.dataforge.vis.spatial.three
|
||||||
|
|
||||||
import hep.dataforge.io.serialization.ConfigSerializer
|
|
||||||
import hep.dataforge.meta.Config
|
import hep.dataforge.meta.Config
|
||||||
import hep.dataforge.vis.common.AbstractVisualObject
|
import hep.dataforge.vis.common.AbstractVisualObject
|
||||||
import hep.dataforge.vis.spatial.Point3D
|
import hep.dataforge.vis.spatial.Point3D
|
||||||
@ -26,7 +25,6 @@ class CustomThreeVisualObject(val threeFactory: ThreeFactory<VisualObject3D>) :
|
|||||||
override var rotation: Point3D? = null
|
override var rotation: Point3D? = null
|
||||||
override var scale: Point3D? = null
|
override var scale: Point3D? = null
|
||||||
|
|
||||||
@Serializable(ConfigSerializer::class)
|
|
||||||
override var properties: Config? = null
|
override var properties: Config? = null
|
||||||
|
|
||||||
override fun toObject3D(): Object3D = threeFactory(this)
|
override fun toObject3D(): Object3D = threeFactory(this)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
@file:JsModule("@hi-level/three-csg")
|
@file:JsModule("three-csg-ts")
|
||||||
@file:JsNonModule
|
@file:JsNonModule
|
||||||
@file:Suppress(
|
@file:Suppress(
|
||||||
"INTERFACE_WITH_SUPERCLASS",
|
"INTERFACE_WITH_SUPERCLASS",
|
||||||
|
@ -5,7 +5,7 @@ import hep.dataforge.context.ContextAware
|
|||||||
import hep.dataforge.meta.Meta
|
import hep.dataforge.meta.Meta
|
||||||
import hep.dataforge.output.Renderer
|
import hep.dataforge.output.Renderer
|
||||||
import hep.dataforge.vis.spatial.VisualObject3D
|
import hep.dataforge.vis.spatial.VisualObject3D
|
||||||
import hep.dataforge.vis.spatial.specifications.CanvasSpec
|
import hep.dataforge.vis.spatial.specifications.Canvas
|
||||||
import javafx.application.Platform
|
import javafx.application.Platform
|
||||||
import javafx.beans.property.ObjectProperty
|
import javafx.beans.property.ObjectProperty
|
||||||
import javafx.beans.property.SimpleObjectProperty
|
import javafx.beans.property.SimpleObjectProperty
|
||||||
@ -14,7 +14,7 @@ import javafx.scene.paint.Color
|
|||||||
import org.fxyz3d.scene.Axes
|
import org.fxyz3d.scene.Axes
|
||||||
import tornadofx.*
|
import tornadofx.*
|
||||||
|
|
||||||
class FXCanvas3D(val plugin: FX3DPlugin, val spec: CanvasSpec = CanvasSpec.empty()) :
|
class FXCanvas3D(val plugin: FX3DPlugin, val spec: Canvas = Canvas.empty()) :
|
||||||
Fragment(), Renderer<VisualObject3D>, ContextAware {
|
Fragment(), Renderer<VisualObject3D>, ContextAware {
|
||||||
|
|
||||||
override val context: Context get() = plugin.context
|
override val context: Context get() = plugin.context
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package hep.dataforge.vis.spatial.fx
|
package hep.dataforge.vis.spatial.fx
|
||||||
|
|
||||||
import hep.dataforge.vis.spatial.specifications.CameraSpec
|
|
||||||
import javafx.beans.InvalidationListener
|
import javafx.beans.InvalidationListener
|
||||||
import javafx.beans.property.SimpleDoubleProperty
|
import javafx.beans.property.SimpleDoubleProperty
|
||||||
import javafx.event.EventHandler
|
import javafx.event.EventHandler
|
||||||
@ -15,6 +14,7 @@ import javafx.scene.transform.Rotate
|
|||||||
import javafx.scene.transform.Translate
|
import javafx.scene.transform.Translate
|
||||||
import tornadofx.*
|
import tornadofx.*
|
||||||
import kotlin.math.*
|
import kotlin.math.*
|
||||||
|
import hep.dataforge.vis.spatial.specifications.Camera as CameraSpec
|
||||||
|
|
||||||
|
|
||||||
class OrbitControls internal constructor(camera: Camera, canvas: SubScene, spec: CameraSpec) {
|
class OrbitControls internal constructor(camera: Camera, canvas: SubScene, spec: CameraSpec) {
|
||||||
|
@ -1,11 +1,15 @@
|
|||||||
import org.openjfx.gradle.JavaFXOptions
|
import scientifik.DependencyConfiguration
|
||||||
|
import scientifik.FXModule
|
||||||
|
import scientifik.fx
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
id("scientifik.mpp")
|
id("scientifik.mpp")
|
||||||
id("org.openjfx.javafxplugin")
|
|
||||||
id("application")
|
id("application")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val fxVersion: String by rootProject.extra
|
||||||
|
fx(FXModule.CONTROLS, version = fxVersion, configuration = DependencyConfiguration.IMPLEMENTATION)
|
||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
|
|
||||||
jvm {
|
jvm {
|
||||||
@ -27,18 +31,9 @@ kotlin {
|
|||||||
api(project(":dataforge-vis-spatial-gdml"))
|
api(project(":dataforge-vis-spatial-gdml"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
jvmMain{
|
|
||||||
dependencies {
|
|
||||||
api("org.fxyz3d:fxyz3d:0.5.2")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
application {
|
application {
|
||||||
mainClassName = "hep.dataforge.vis.spatial.gdml.demo.GDMLDemoAppKt"
|
mainClassName = "hep.dataforge.vis.spatial.gdml.demo.GDMLDemoAppKt"
|
||||||
}
|
}
|
||||||
|
|
||||||
configure<JavaFXOptions> {
|
|
||||||
modules("javafx.controls")
|
|
||||||
}
|
|
@ -3,7 +3,7 @@ package hep.dataforge.vis.spatial.gdml.demo
|
|||||||
import hep.dataforge.context.Global
|
import hep.dataforge.context.Global
|
||||||
import hep.dataforge.js.Application
|
import hep.dataforge.js.Application
|
||||||
import hep.dataforge.js.startApplication
|
import hep.dataforge.js.startApplication
|
||||||
import hep.dataforge.meta.buildMeta
|
import hep.dataforge.meta.Meta
|
||||||
import hep.dataforge.meta.withBottom
|
import hep.dataforge.meta.withBottom
|
||||||
import hep.dataforge.names.Name
|
import hep.dataforge.names.Name
|
||||||
import hep.dataforge.names.isEmpty
|
import hep.dataforge.names.isEmpty
|
||||||
@ -167,7 +167,7 @@ private class GDMLDemoApp : Application {
|
|||||||
//val descriptorMeta = Material3D.descriptor
|
//val descriptorMeta = Material3D.descriptor
|
||||||
|
|
||||||
val properties = item.allProperties()
|
val properties = item.allProperties()
|
||||||
val bottom = buildMeta {
|
val bottom = Meta {
|
||||||
VISIBLE_KEY put (item.visible ?: true)
|
VISIBLE_KEY put (item.visible ?: true)
|
||||||
if (item is VisualObject3D) {
|
if (item is VisualObject3D) {
|
||||||
MATERIAL_COLOR_KEY put "#ffffff"
|
MATERIAL_COLOR_KEY put "#ffffff"
|
||||||
@ -186,10 +186,6 @@ private class GDMLDemoApp : Application {
|
|||||||
selectElement(treeName)
|
selectElement(treeName)
|
||||||
canvas.highlight(treeName)
|
canvas.highlight(treeName)
|
||||||
}
|
}
|
||||||
canvas.render(visual)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
canvas.render(visual)
|
canvas.render(visual)
|
||||||
message(null)
|
message(null)
|
||||||
spinner(false)
|
spinner(false)
|
||||||
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
@ -10,6 +10,8 @@ import scientifik.gdml.GDML
|
|||||||
import java.io.File
|
import java.io.File
|
||||||
import java.util.zip.GZIPInputStream
|
import java.util.zip.GZIPInputStream
|
||||||
import java.util.zip.ZipInputStream
|
import java.util.zip.ZipInputStream
|
||||||
|
import hep.dataforge.meta.*
|
||||||
|
import hep.dataforge.values.*
|
||||||
|
|
||||||
fun Visual3D.Companion.readFile(file: File): VisualGroup3D = when {
|
fun Visual3D.Companion.readFile(file: File): VisualGroup3D = when {
|
||||||
file.extension == "gdml" || file.extension == "xml" -> {
|
file.extension == "gdml" || file.extension == "xml" -> {
|
||||||
@ -18,7 +20,7 @@ fun Visual3D.Companion.readFile(file: File): VisualGroup3D = when {
|
|||||||
|
|
||||||
solidConfiguration = { parent, solid ->
|
solidConfiguration = { parent, solid ->
|
||||||
if (solid.name == "cave") {
|
if (solid.name == "cave") {
|
||||||
setProperty(Material3D.MATERIAL_WIREFRAME_KEY, true)
|
setProperty(Material3D.MATERIAL_WIREFRAME_KEY, true.asValue())
|
||||||
}
|
}
|
||||||
if (parent.physVolumes.isNotEmpty()) {
|
if (parent.physVolumes.isNotEmpty()) {
|
||||||
useStyle("opaque") {
|
useStyle("opaque") {
|
||||||
|
@ -1,15 +1,12 @@
|
|||||||
import scientifik.useSerialization
|
import scientifik.jsDistDirectory
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
id("scientifik.mpp")
|
id("scientifik.mpp")
|
||||||
//id("org.openjfx.javafxplugin")
|
|
||||||
id("application")
|
id("application")
|
||||||
}
|
}
|
||||||
|
|
||||||
group = "ru.mipt.npm"
|
group = "ru.mipt.npm"
|
||||||
|
|
||||||
useSerialization()
|
|
||||||
|
|
||||||
val ktor_version = "1.3.0-rc"
|
val ktor_version = "1.3.0-rc"
|
||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
@ -22,7 +19,7 @@ kotlin {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val installJS = tasks.getByName<Copy>("installJsDist")
|
val installJS = tasks.getByName("jsBrowserWebpack")
|
||||||
|
|
||||||
jvm {
|
jvm {
|
||||||
withJava()
|
withJava()
|
||||||
@ -30,7 +27,7 @@ kotlin {
|
|||||||
tasks.getByName<ProcessResources>("jvmProcessResources") {
|
tasks.getByName<ProcessResources>("jvmProcessResources") {
|
||||||
dependsOn(installJS)
|
dependsOn(installJS)
|
||||||
afterEvaluate {
|
afterEvaluate {
|
||||||
from(installJS.destinationDir)
|
from(project.jsDistDirectory)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,7 @@ package ru.mipt.npm.muon.monitor
|
|||||||
import hep.dataforge.context.Global
|
import hep.dataforge.context.Global
|
||||||
import hep.dataforge.js.Application
|
import hep.dataforge.js.Application
|
||||||
import hep.dataforge.js.startApplication
|
import hep.dataforge.js.startApplication
|
||||||
import hep.dataforge.meta.buildMeta
|
import hep.dataforge.meta.Meta
|
||||||
import hep.dataforge.meta.withBottom
|
import hep.dataforge.meta.withBottom
|
||||||
import hep.dataforge.names.Name
|
import hep.dataforge.names.Name
|
||||||
import hep.dataforge.names.isEmpty
|
import hep.dataforge.names.isEmpty
|
||||||
@ -98,7 +98,7 @@ private class MMDemoApp : Application {
|
|||||||
//val descriptorMeta = Material3D.descriptor
|
//val descriptorMeta = Material3D.descriptor
|
||||||
|
|
||||||
val properties = item.allProperties()
|
val properties = item.allProperties()
|
||||||
val bottom = buildMeta {
|
val bottom = Meta {
|
||||||
VISIBLE_KEY put (item.visible ?: true)
|
VISIBLE_KEY put (item.visible ?: true)
|
||||||
if (item is VisualObject3D) {
|
if (item is VisualObject3D) {
|
||||||
MATERIAL_COLOR_KEY put "#ffffff"
|
MATERIAL_COLOR_KEY put "#ffffff"
|
||||||
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
@ -1,11 +1,15 @@
|
|||||||
import org.openjfx.gradle.JavaFXOptions
|
import scientifik.DependencyConfiguration
|
||||||
|
import scientifik.FXModule
|
||||||
|
import scientifik.fx
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
id("scientifik.mpp")
|
id("scientifik.mpp")
|
||||||
id("org.openjfx.javafxplugin")
|
|
||||||
id("application")
|
id("application")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val fxVersion: String by rootProject.extra
|
||||||
|
fx(FXModule.CONTROLS, version = fxVersion, configuration = DependencyConfiguration.IMPLEMENTATION)
|
||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
|
|
||||||
jvm {
|
jvm {
|
||||||
@ -33,7 +37,3 @@ kotlin {
|
|||||||
application {
|
application {
|
||||||
mainClassName = "hep.dataforge.vis.spatial.demo.FXDemoAppKt"
|
mainClassName = "hep.dataforge.vis.spatial.demo.FXDemoAppKt"
|
||||||
}
|
}
|
||||||
|
|
||||||
configure<JavaFXOptions> {
|
|
||||||
modules("javafx.controls")
|
|
||||||
}
|
|
@ -1,13 +1,13 @@
|
|||||||
package hep.dataforge.vis.spatial.demo
|
package hep.dataforge.vis.spatial.demo
|
||||||
|
|
||||||
import hep.dataforge.meta.buildMeta
|
import hep.dataforge.meta.Meta
|
||||||
import hep.dataforge.meta.invoke
|
import hep.dataforge.meta.scheme.invoke
|
||||||
import hep.dataforge.names.toName
|
import hep.dataforge.names.toName
|
||||||
import hep.dataforge.output.OutputManager
|
import hep.dataforge.output.OutputManager
|
||||||
import hep.dataforge.vis.common.Colors
|
import hep.dataforge.vis.common.Colors
|
||||||
import hep.dataforge.vis.common.VisualObject
|
import hep.dataforge.vis.common.VisualObject
|
||||||
import hep.dataforge.vis.spatial.*
|
import hep.dataforge.vis.spatial.*
|
||||||
import hep.dataforge.vis.spatial.specifications.CanvasSpec
|
import hep.dataforge.vis.spatial.specifications.Canvas
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.*
|
||||||
import kotlin.math.PI
|
import kotlin.math.PI
|
||||||
import kotlin.math.cos
|
import kotlin.math.cos
|
||||||
@ -16,14 +16,14 @@ import kotlin.random.Random
|
|||||||
|
|
||||||
|
|
||||||
fun OutputManager.demo(name: String, title: String = name, block: VisualGroup3D.() -> Unit) {
|
fun OutputManager.demo(name: String, title: String = name, block: VisualGroup3D.() -> Unit) {
|
||||||
val meta = buildMeta {
|
val meta = Meta {
|
||||||
"title" put title
|
"title" put title
|
||||||
}
|
}
|
||||||
val output = get(VisualObject::class, name.toName(), meta = meta)
|
val output = get(VisualObject::class, name.toName(), meta = meta)
|
||||||
output.render(action = block)
|
output.render(action = block)
|
||||||
}
|
}
|
||||||
|
|
||||||
val canvasOptions = CanvasSpec {
|
val canvasOptions = Canvas {
|
||||||
minSize = 500
|
minSize = 500
|
||||||
axes {
|
axes {
|
||||||
size = 500.0
|
size = 500.0
|
||||||
|
@ -2,16 +2,7 @@ package hep.dataforge.vis.spatial.demo
|
|||||||
|
|
||||||
import hep.dataforge.js.Application
|
import hep.dataforge.js.Application
|
||||||
import hep.dataforge.js.startApplication
|
import hep.dataforge.js.startApplication
|
||||||
import hep.dataforge.vis.spatial.three.MeshThreeFactory.Companion.EDGES_ENABLED_KEY
|
|
||||||
import hep.dataforge.vis.spatial.three.MeshThreeFactory.Companion.WIREFRAME_ENABLED_KEY
|
|
||||||
import hep.dataforge.vis.spatial.x
|
|
||||||
import hep.dataforge.vis.spatial.y
|
|
||||||
import kotlinx.coroutines.GlobalScope
|
|
||||||
import kotlinx.coroutines.delay
|
|
||||||
import kotlinx.coroutines.isActive
|
|
||||||
import kotlinx.coroutines.launch
|
|
||||||
import kotlin.browser.document
|
import kotlin.browser.document
|
||||||
import kotlin.random.Random
|
|
||||||
|
|
||||||
private class ThreeDemoApp : Application {
|
private class ThreeDemoApp : Application {
|
||||||
|
|
||||||
|
@ -3,15 +3,11 @@ package hep.dataforge.vis.spatial.demo
|
|||||||
import hep.dataforge.context.Global
|
import hep.dataforge.context.Global
|
||||||
import hep.dataforge.meta.Meta
|
import hep.dataforge.meta.Meta
|
||||||
import hep.dataforge.meta.get
|
import hep.dataforge.meta.get
|
||||||
import hep.dataforge.meta.invoke
|
|
||||||
import hep.dataforge.meta.string
|
import hep.dataforge.meta.string
|
||||||
import hep.dataforge.names.Name
|
import hep.dataforge.names.Name
|
||||||
import hep.dataforge.output.OutputManager
|
import hep.dataforge.output.OutputManager
|
||||||
import hep.dataforge.output.Renderer
|
import hep.dataforge.output.Renderer
|
||||||
import hep.dataforge.vis.common.VisualObject
|
import hep.dataforge.vis.common.VisualObject
|
||||||
import hep.dataforge.vis.spatial.specifications.AxesSpec
|
|
||||||
import hep.dataforge.vis.spatial.specifications.CameraSpec
|
|
||||||
import hep.dataforge.vis.spatial.specifications.CanvasSpec
|
|
||||||
import hep.dataforge.vis.spatial.three.ThreeCanvas
|
import hep.dataforge.vis.spatial.three.ThreeCanvas
|
||||||
import hep.dataforge.vis.spatial.three.ThreePlugin
|
import hep.dataforge.vis.spatial.three.ThreePlugin
|
||||||
import hep.dataforge.vis.spatial.three.output
|
import hep.dataforge.vis.spatial.three.output
|
||||||
|
@ -9,8 +9,8 @@ import hep.dataforge.output.Renderer
|
|||||||
import hep.dataforge.vis.common.VisualObject
|
import hep.dataforge.vis.common.VisualObject
|
||||||
import hep.dataforge.vis.spatial.fx.FX3DPlugin
|
import hep.dataforge.vis.spatial.fx.FX3DPlugin
|
||||||
import hep.dataforge.vis.spatial.fx.FXCanvas3D
|
import hep.dataforge.vis.spatial.fx.FXCanvas3D
|
||||||
import hep.dataforge.vis.spatial.specifications.AxesSpec
|
import hep.dataforge.vis.spatial.specifications.Axes as AxesSpec
|
||||||
import hep.dataforge.vis.spatial.specifications.CanvasSpec
|
import hep.dataforge.vis.spatial.specifications.Canvas as CanvasSpec
|
||||||
import javafx.collections.FXCollections
|
import javafx.collections.FXCollections
|
||||||
import javafx.scene.Parent
|
import javafx.scene.Parent
|
||||||
import javafx.scene.control.Tab
|
import javafx.scene.control.Tab
|
||||||
|
Loading…
Reference in New Issue
Block a user